Lines Matching refs:pz

27 "[-1i?\n@(#)$Id: pz library 2.4 (AT&T Research) 2011-03-07 $\n]"
57 pzpartget(Pz_t* pz, const char* name)
59 if (!name || !*name || !pz->partdict)
60 return pz->mainpart;
61 pz->flags &= ~PZ_MAINONLY;
62 return (Pzpart_t*)dtmatch(pz->partdict, name);
73 pzpartnext(Pz_t* pz, Pzpart_t* pp)
75 if (pz->partdict)
76 return pp ? (Pzpart_t*)dtnext(pz->partdict, pp) : (Pzpart_t*)dtfirst(pz->partdict);
77 return pp ? (Pzpart_t*)0 : pz->mainpart;
86 pzpartset(Pz_t* pz, Pzpart_t* pp)
90 pz->flags &= ~PZ_MAINONLY;
91 if (pzsync(pz))
93 op = pz->part;
94 pz->part = pp;
107 range(Pz_t* pz, register Pzpart_t* pp, char* s, char** p, int* beg, int* end)
127 if (pz->disc->errorf)
128 (*pz->disc->errorf)(pz, pz->disc, 2, "column %d is larger than row %d", n, pp->row);
145 if (pz->disc->errorf)
146 (*pz->disc->errorf)(pz, pz->disc, 2, "invalid column range %d-%d", n, m);
170 value(Pz_t* pz, char* s, char** p)
179 if (pz->disc->errorf)
180 (*pz->disc->errorf)(pz, pz->disc, 2, "value expected");
186 if (pz->disc->errorf)
187 (*pz->disc->errorf)(pz, pz->disc, 2, "unbalanced %c quote in value", q);
196 * add fixed column range value to pz
200 fixed(Pz_t* pz, register Pzpart_t* pp, int n, int m, int k)
207 if (!(pp->value = vmnewof(pz->vm, 0, int, pp->row, 0)))
208 return pznospace(pz);
229 pzpartmap(Pz_t* pz, register Pzpart_t* pp)
241 if (pz->disc->errorf)
242 (*pz->disc->errorf)(pz, pz->disc, 2, "%s: invalid group", pz->path);
250 if (pz->disc->errorf)
251 (*pz->disc->errorf)(pz, pz->disc, 2, "%s: invalid group", pz->path);
259 if ((pz->flags & PZ_READ) && pp->value)
272 pzpartinit(Pz_t* pz, Pzpart_t* pp, const char* name)
282 if (!(pz->flags & PZ_FORCE) || (pz->flags & PZ_SPLIT))
286 if (pz->disc->errorf)
287 (*pz->disc->errorf)(pz, pz->disc, 2, "%s: partition header corrupted", pz->path);
293 sfprintf(pz->tmp, "%s:%d:%d", PZ_PART_SUF, pp->row, pp->nmap);
302 sfprintf(pz->tmp, "%.*s", n, name);
304 if (!(s = sfstruse(pz->tmp)) || !(pp->name = vmstrdup(pz->vm, s)))
310 if (!(pp->map = vmnewof(pz->vm, pp->map, size_t, VECTOR(pz, pp, pp->nmap), 0)))
311 return pznospace(pz);
318 if (!(pp->grp = vmnewof(pz->vm, pp->grp, size_t, VECTOR(pz, pp, pp->ngrp), 0)))
319 return pznospace(pz);
322 pp->loq = ((pz->win / 8 / pp->row) + 8) * pp->row;
323 k = VECTOR(pz, pp, pp->nmap);
324 if (!(pp->low = vmnewof(pz->vm, 0, unsigned char, pp->row, 0)) ||
325 !(pp->mix = vmnewof(pz->vm, 0, unsigned char*, k, 0)) ||
326 !(pp->inc = vmnewof(pz->vm, 0, size_t, k, 0)) ||
327 !(pp->lab = vmnewof(pz->vm, 0, size_t, k, 0)))
328 return pznospace(pz);
331 if (!(pp->fix = vmnewof(pz->vm, 0, size_t, VECTOR(pz, pp, pp->nfix), 0)))
332 return pznospace(pz);
337 if (pzpartmap(pz, pp))
342 pp->col = ((pz->win / k) * k) / j;
348 if (pp->row > pz->mrow)
350 m = pz->mrow = roundof(pp->row, 1024);
351 n = ((pz->win / 8 / m) + 8 ) * m;
352 if (!(pz->val = vmnewof(pz->vm, pz->val, unsigned char, n, 0)) ||
353 !(pz->pat = vmnewof(pz->vm, pz->pat, unsigned char, m, 0)))
354 return pznospace(pz);
357 if (pz->win > pz->mwin)
359 if (pz->disc->errorf)
360 (*pz->disc->errorf)(pz, pz->disc, -1, "%s: pzpartinit: win=%I*u mwin=%I*u buf=%p", pz->path, sizeof(pz->win), pz->win, sizeof(pz->mwin), pz->mwin, pz->buf);
361 pz->mwin = roundof(pz->win, 32);
362 n = pz->mwin;
363 if (pz->flags & PZ_WRITE)
365 if (!(pz->buf = vmnewof(pz->vm, pz->buf, unsigned char, n, 0)))
366 return pznospace(pz);
367 if (pz->flags & PZ_WRITE)
368 pz->wrk = pz->buf + pz->mwin;
370 if (m && !(pz->flags & PZ_WRITE) && !(pz->wrk = vmnewof(pz->vm, pz->wrk, unsigned char, m, 0)))
371 return pznospace(pz);
378 pz->part = pp;
379 if (pz->options && pzoptions(pz, pp, pz->options, 0))
381 if (pz->disc->eventf && (*pz->disc->eventf)(pz, PZ_PARTITION, pp, 0, pz->disc) < 0)
387 if (!(pp->fix = vmnewof(pz->vm, pp->fix, size_t, VECTOR(pz, pp, pp->nfix), 0)))
388 return pznospace(pz);
399 if (pz->mainpart)
401 if (!pz->partdict)
403 pz->partdisc.key = offsetof(Pzpart_t, name);
404 pz->partdisc.size = -1;
405 pz->partdisc.link = offsetof(Pzpart_t, link);
406 if (!(pz->partdict = dtopen(&pz->partdisc, Dtoset)))
408 if (pz->disc->errorf)
409 (*pz->disc->errorf)(pz, pz->disc, 2, "partition dictionary open error");
412 dtinsert(pz->partdict, pz->mainpart);
414 dtinsert(pz->partdict, pp);
418 pz->mainpart = pp;
419 if ((pz->flags & (PZ_DUMP|PZ_VERBOSE)) && !(pz->flags & PZ_SPLIT))
420 pzheadprint(pz, sfstderr, 0);
422 if ((pz->flags & PZ_DUMP) && !(pz->flags & PZ_SPLIT))
423 pzpartprint(pz, pp, sfstderr);
432 pzoptions(register Pz_t* pz, register Pzpart_t* pp, char* options, int must)
453 switch (range(pz, pp, s, &e, &n, &x))
461 if ((k = value(pz, s, &e)) < 0)
464 if (pp && fixed(pz, pp, n, x, k))
478 if (pz->disc->errorf)
479 (*pz->disc->errorf)(pz, pz->disc, -2, "pzoptions: %-.*s", opt_info.offset, s);
492 if (pz->disc->eventf)
494 opp = pz->part;
495 pz->part = pp;
496 x = (*pz->disc->eventf)(pz, PZ_OPTION, opt_info.argv[1] + 2, 0, pz->disc);
497 pz->part = opp;
510 pz->flags |= PZ_APPEND;
512 pz->flags &= ~PZ_APPEND;
515 if (!pz->disc->comment && !(pz->disc->comment = vmstrdup(pz->vm, opt_info.arg)))
516 return pznospace(pz);
520 pz->flags |= PZ_CRC;
522 pz->flags &= ~PZ_CRC;
529 pz->flags |= PZ_DUMP;
531 pz->flags &= ~PZ_DUMP;
535 pz->flags |= PZ_NOGZIP;
537 pz->flags &= ~PZ_NOGZIP;
540 if (pz->pin && (sp = pzfind(pz, opt_info.arg, PZ_PART_SUF, "r")))
542 sfstack(pz->pin, sp);
547 if (!pz->pin || !sfstacked(pz->pin))
549 if (i = pz->options == options)
550 pz->options = 0;
551 r = pzlib(pz, opt_info.arg, 0);
552 if (pz->disc->errorf)
553 (*pz->disc->errorf)(pz, pz->disc, -2, "pzlib: %s status=%d", opt_info.arg, r);
555 pz->options = options;
561 pz->partname = vmstrdup(pz->vm, opt_info.arg);
564 if (pz->prefix.count = strton(opt_info.arg, &e, NiL, 0))
566 pz->prefix.terminator = -1;
570 pz->prefix.terminator = '\n';
575 pz->prefix.terminator = chresc(e + 1, &e);
580 pz->prefix.count = 0;
581 if (pz->disc->errorf)
582 (*pz->disc->errorf)(pz, pz->disc, 2, "%s: prefix expression expected", opt_info.arg);
588 pz->prefix.skip = 1;
592 pz->flags |= PZ_SORT;
594 pz->flags &= ~PZ_SORT;
598 pz->flags |= PZ_NOPZIP;
600 pz->flags &= ~PZ_NOPZIP;
604 pz->flags |= PZ_REGRESS;
606 pz->flags &= ~PZ_REGRESS;
609 pz->row = opt_info.num;
614 pz->flags |= PZ_FORCE|PZ_SPLIT|PZ_SECTION;
616 pz->split.match = vmstrdup(pz->vm, opt_info.arg);
619 pz->flags &= ~PZ_SPLIT;
623 pz->flags |= PZ_SUMMARY;
625 pz->flags &= ~PZ_SUMMARY;
628 pz->test |= opt_info.num;
632 pz->flags |= PZ_VERBOSE;
634 pz->flags &= ~PZ_VERBOSE;
640 if (must && !(pz->flags & PZ_PUSHED))
642 if (pz->disc->errorf)
643 (*pz->disc->errorf)(pz, pz->disc, 2, "%s", opt_info.arg);
658 if (pz->det)
660 if (sfstrtell(pz->det))
661 sfputc(pz->det, ' ');
662 sfwrite(pz->det, b, s - b);
674 partline(Pz_t* pz, Sfio_t* sp)
678 if ((s = sfgetr(sp, '\n', 1)) && pz->disc->errorf)
688 pzpartition(register Pz_t* pz, const char* partition)
714 if (pz->disc->errorf)
723 if (pz->disc->errorf)
724 (*pz->disc->errorf)(pz, pz->disc, 2, "partition file omitted");
746 if (pz->disc->errorf)
747 (*pz->disc->errorf)(pz, pz->disc, 2, "%s: string stream open error", s);
759 if (!(t = vmoldof(pz->vm, 0, char, e - s, 1)))
764 if (*e == '#' && !(pz->partname = vmstrdup(pz->vm, e + 1)) || *e == '?' && pzoptions(pz, NiL, e + 1, 1))
767 if (!(sp = pzfind(pz, s, PZ_PART_SUF, "r")))
770 if (pz->disc->errorf)
775 if (!(vm = vmopen(&pz->vmdisc, Vmlast, 0)))
777 if (pz->disc->errorf)
778 (*pz->disc->errorf)(pz, pz->disc, ERROR_SYSTEM|2, "partition temporary vmalloc region open error");
784 pz->pin = sp;
790 if (*s != '"' && !(s = partline(pz, sp)))
792 if (pz->disc->errorf)
793 (*pz->disc->errorf)(pz, pz->disc, 2, "invalid partition file");
801 if (pz->disc->errorf)
802 (*pz->disc->errorf)(pz, pz->disc, 2, "%s: partition already named", np);
808 if (pz->disc->errorf)
809 (*pz->disc->errorf)(pz, pz->disc, 2, "unbalanced \" in partition name");
813 if (!(np = vmstrdup(pz->vm, e)))
819 if (pzoptions(pz, pp, s, 1))
841 if (pz->disc->errorf)
842 (*pz->disc->errorf)(pz, pz->disc, 2, "%s: %d: invalid size -- power of 2 from 1..8 expected", s, m);
850 if (pz->flags & PZ_ROWONLY)
852 if (!np || !pz->partname || streq(np, pz->partname))
855 pz->row = n;
861 if (!(s = partline(pz, sp)))
863 if (pz->disc->errorf)
864 (*pz->disc->errorf)(pz, pz->disc, 2, "%s: partition not found", pz->partname);
871 if (!(pp = vmnewof(pz->vm, 0, Pzpart_t, 1, 0)))
889 s = partline(pz, sp);
890 for (; s; s = partline(pz, sp))
897 if (pzoptions(pz, pp, s, 1))
904 if (range(pz, pp, s, &e, &n, &x) <= 0)
913 if ((k = value(pz, ++s, &e)) < 0)
916 if (fixed(pz, pp, n, x, k))
922 if (pz->disc->errorf)
923 (*pz->disc->errorf)(pz, pz->disc, 2, "too many columns");
931 if (pz->disc->errorf)
932 (*pz->disc->errorf)(pz, pz->disc, 2, "column %d already specified", n);
946 if (pz->disc->errorf)
947 (*pz->disc->errorf)(pz, pz->disc, 2, "too many columns");
956 if (pz->disc->errorf)
957 (*pz->disc->errorf)(pz, pz->disc, 2, "too many columns");
969 if (!(pp->map = vmnewof(pz->vm, 0, size_t, VECTOR(pz, pp, pp->nmap), 0)) ||
970 !(pp->grp = vmnewof(pz->vm, 0, size_t, VECTOR(pz, pp, pp->ngrp), 0)))
990 if (pzpartinit(pz, pp, partition))
997 if (pz->partname)
999 if (!(pp = pzpartget(pz, pz->partname)))
1001 if (pz->disc->errorf)
1002 (*pz->disc->errorf)(pz, pz->disc, 2, "%s: partition not found", pz->partname);
1005 pz->flags |= PZ_MAINONLY;
1006 pz->part = pz->mainpart = pp;
1008 if (pz->disc->errorf)
1013 pz->pin = 0;
1016 pznospace(pz);
1018 pz->pin = 0;
1023 if (pz->disc->errorf)
1036 array(register Pz_t* pz, Pzpart_t* pp, size_t** pv, size_t* pn, size_t check)
1042 n = sfgetu(pz->io);
1049 else if (!(v = vmnewof(pz->vm, *pv, size_t, VECTOR(pz, pp, n), 0)))
1050 return pznospace(pz);
1056 m = sfgetu(pz->io);
1065 m = sfgetu(pz->io);
1077 buffer(register Pz_t* pz, Pzpart_t* pp, char** pv, size_t* pn)
1082 if (!(n = sfgetu(pz->io)))
1084 if (pz->disc->errorf)
1085 (*pz->disc->errorf)(pz, pz->disc, 2, "%s: partition header corrupted", pz->path);
1090 if (!(v = vmnewof(pz->vm, *pv, char, n, 0)))
1091 return pznospace(pz);
1095 sfread(pz->io, v, n);
1098 sfseek(pz->io, (Sflong_t)n, SEEK_CUR);
1103 * read a pz partition header(s) from pz->io
1107 pzpartread(register Pz_t* pz)
1113 if (pz->major > 1)
1115 if (!(i = sfgetc(pz->io)))
1119 sfungetc(pz->io, i);
1121 if (!(pp = vmnewof(pz->vm, 0, Pzpart_t, 1, 0)))
1122 return pznospace(pz);
1123 if (pz->major == 1)
1125 pp->row = sfgetu(pz->io);
1126 pp->col = sfgetu(pz->io);
1127 pz->win = sfgetu(pz->io);
1132 switch (i = sfgetc(pz->io))
1137 if (!po && pzpartinit(pz, pp, NiL))
1141 buffer(pz, pp, (char**)&pz->disc->comment, NiL);
1144 if (array(pz, pp, &pp->fix, &pp->nfix, pp->row))
1148 if (!(pp->value = vmnewof(pz->vm, 0, int, pp->row, 0)))
1149 return pznospace(pz);
1158 if (array(pz, pp, &pp->grp, &pp->ngrp, pp->row + 1))
1162 if (array(pz, pp, &pp->map, &pp->nmap, pp->row))
1166 buffer(pz, pp, (char**)&pz->headoptions, NiL);
1169 buffer(pz, pp, &pz->prefix.data, &pz->prefix.count);
1170 pz->prefix.terminator = -1;
1175 if (!po && pzpartinit(pz, pp, NiL))
1177 if (pp = pz->freepart)
1178 pz->freepart = 0;
1179 else if (!(pp = vmnewof(pz->vm, 0, Pzpart_t, 1, 0)))
1180 return pznospace(pz);
1182 buffer(pz, pp, (char**)&pp->name, NiL);
1183 pp->row = sfgetu(pz->io);
1184 pp->col = sfgetu(pz->io);
1185 if (pz->partdict && (po = (Pzpart_t*)dtsearch(pz->partdict, pp)) || (po = pz->mainpart) && streq(pp->name, po->name))
1189 if (pz->disc->errorf)
1190 (*pz->disc->errorf)(pz, pz->disc, 1, "%s: %s: partition redefinition ignored", pz->path, pp->name);
1192 else if (pz->flags & PZ_DUMP)
1194 vmfree(pz->vm, pp->name);
1195 pz->freepart = pp;
1200 switch (i = sfgetc(pz->io))
1206 sfungetc(pz->io, i);
1210 array(pz, pp, NiL, NiL, 0);
1212 buffer(pz, pp, NiL, NiL);
1224 array(pz, pp, &pz->split.data, &pz->split.size, 0);
1225 pz->split.flags |= PZ_SPLIT_INFLATE;
1226 pz->flags |= PZ_SECTION;
1230 array(pz, pp, NiL, NiL, 0);
1232 buffer(pz, pp, NiL, NiL);
1241 if (pz->disc->errorf)
1242 (*pz->disc->errorf)(pz, pz->disc, 2, "%s: partition header corrupted", pz->path);
1247 * write any new pz partition headers to op
1251 pzpartwrite(Pz_t* pz, Sfio_t* op)
1258 if (pz->flags & PZ_MAINONLY)
1260 pz->flags &= ~PZ_MAINONLY;
1262 pp = pz->mainpart;
1264 else if (pz->partdict)
1267 pp = (Pzpart_t*)dtfirst(pz->partdict);
1272 pp = pz->part;
1303 if ((pz->split.flags & (PZ_SPLIT_DEFLATE|PZ_SPLIT_HEADER)) == PZ_SPLIT_DEFLATE)
1305 pz->split.flags |= PZ_SPLIT_HEADER;
1312 pp = (Pzpart_t*)dtnext(pz->partdict, pp);
1323 pzpartprint(Pz_t* pz, register Pzpart_t* pp, register Sfio_t* op)