| 1 | /* --------------------------- mz.c -------------------------------- */ |
|---|
| 2 | |
|---|
| 3 | #include <stdio.h> |
|---|
| 4 | #include <ctype.h> |
|---|
| 5 | #include <string.h> |
|---|
| 6 | |
|---|
| 7 | #include "cisis.h" /* CISIS Interface */ |
|---|
| 8 | #include "cirun.h" /* runtime area and defines by AOT */ |
|---|
| 9 | |
|---|
| 10 | #if RECGIZM |
|---|
| 11 | #define MZGIZMO 1 |
|---|
| 12 | #endif |
|---|
| 13 | #define MZFST 1 |
|---|
| 14 | |
|---|
| 15 | #define ISX(s) (strcmp(s,"x") == 0 || strcmp(s,"X") == 0) |
|---|
| 16 | |
|---|
| 17 | int parmtrace = 0; |
|---|
| 18 | int parmwait = 1; |
|---|
| 19 | |
|---|
| 20 | UCHR *key1p = "!"; |
|---|
| 21 | UCHR *key2p = NULL; |
|---|
| 22 | UCHR qlfx = '\0'; |
|---|
| 23 | LONGX parmpst1=0L; |
|---|
| 24 | LONGX parmpst2=0L; |
|---|
| 25 | |
|---|
| 26 | UCHR currkey[LE2+1]; |
|---|
| 27 | |
|---|
| 28 | LONGX freq[LE2+1]; |
|---|
| 29 | |
|---|
| 30 | char line[BUFSIZ]; |
|---|
| 31 | |
|---|
| 32 | /* gizmo || fst */ |
|---|
| 33 | #if MZGIZMO || MZFST |
|---|
| 34 | RECSTRU *recp; |
|---|
| 35 | LONGX keyrec=1L; |
|---|
| 36 | LONGX fstrec=2L; |
|---|
| 37 | char buffup[MAXMFRL+BUFSIZ]; |
|---|
| 38 | int buffuplen=sizeof(buffup)-1; |
|---|
| 39 | int xdir; |
|---|
| 40 | #endif |
|---|
| 41 | |
|---|
| 42 | /* gizmo */ |
|---|
| 43 | #if MZGIZMO |
|---|
| 44 | VGIZPSTRU *gizmap,*vgizmap = NULL; |
|---|
| 45 | #endif |
|---|
| 46 | |
|---|
| 47 | /* fst */ |
|---|
| 48 | #if MZFST |
|---|
| 49 | char *stwp=NULL; |
|---|
| 50 | FST_CODE *fstpgmp=NULL; |
|---|
| 51 | char *lnk1p=NULL; |
|---|
| 52 | char *lnk2p=NULL; |
|---|
| 53 | LONGX maxlk1=1000; |
|---|
| 54 | LONGX maxlk2=500; |
|---|
| 55 | int fstfd0=0; |
|---|
| 56 | int fstfd1=0; |
|---|
| 57 | int parmcore=0; |
|---|
| 58 | #endif |
|---|
| 59 | |
|---|
| 60 | #if MZFST |
|---|
| 61 | LONGX qtylk1,qtylk2; |
|---|
| 62 | #endif |
|---|
| 63 | |
|---|
| 64 | |
|---|
| 65 | void main(argc,argv) |
|---|
| 66 | int argc; |
|---|
| 67 | char *argv[]; |
|---|
| 68 | |
|---|
| 69 | { |
|---|
| 70 | TRMSTRU *trmp; |
|---|
| 71 | LONGX itrm = 0L; |
|---|
| 72 | char *dbnp; |
|---|
| 73 | int parmcontrol,minus1,plus1; |
|---|
| 74 | int parmterms,parminfo,parmposts,parmfind=0,parmstrip=0; |
|---|
| 75 | LONGX parmtell,parmcount,count=0L; |
|---|
| 76 | int i,argnext,found,n; |
|---|
| 77 | int treecase; |
|---|
| 78 | INFX info1; |
|---|
| 79 | INFO info2; |
|---|
| 80 | INFX info3=0; |
|---|
| 81 | CNSTRU *cp; |
|---|
| 82 | UCHR *p,*q; |
|---|
| 83 | int key2l; |
|---|
| 84 | LONGX parmload=0L; |
|---|
| 85 | #if SAMEL |
|---|
| 86 | int lxy; |
|---|
| 87 | #endif |
|---|
| 88 | |
|---|
| 89 | |
|---|
| 90 | if (argc == 1) { |
|---|
| 91 | printf("%s",cicopyr("Utility MZ")); |
|---|
| 92 | printf("\n"); |
|---|
| 93 | printf("mz <dbname> [<option> [...]] \n"); |
|---|
| 94 | printf("\n"); |
|---|
| 95 | printf("options: \n"); |
|---|
| 96 | printf(" \n"); |
|---|
| 97 | printf(" {from|to}=<upkey>\n"); |
|---|
| 98 | printf(" {minpost|maxpost}=<no_posts> \n"); |
|---|
| 99 | printf(" \n"); |
|---|
| 100 | #if BIREME |
|---|
| 101 | printf(" qlf=[<char>|?] \n"); |
|---|
| 102 | printf(" load=<no_bytes> \n"); |
|---|
| 103 | printf("\n"); |
|---|
| 104 | #endif |
|---|
| 105 | printf(" {tell|count}=<no_terms> \n"); |
|---|
| 106 | printf(" {+|-}{control|terms[/i]|posts|all} [now] [strip] \n"); |
|---|
| 107 | #if MZGIZMO |
|---|
| 108 | printf("\n"); |
|---|
| 109 | printf(" gizmo=<gizmo_dbn>[,<taglist>] \n"); |
|---|
| 110 | #endif |
|---|
| 111 | #if MZFST |
|---|
| 112 | printf(" fst={<fst_spec>|@[<file>]} [stw=@[<file>]] "); |
|---|
| 113 | printf("[ln{1|2}=<file> [+fix[/m]]] \n"); |
|---|
| 114 | printf(" actab=<file> \n"); |
|---|
| 115 | printf(" wlookup={@|<ifn>} \n"); |
|---|
| 116 | #endif |
|---|
| 117 | printf("\n"); |
|---|
| 118 | exit(1); |
|---|
| 119 | } |
|---|
| 120 | else { |
|---|
| 121 | dbnp=argv[1]; |
|---|
| 122 | argnext=2; |
|---|
| 123 | } |
|---|
| 124 | |
|---|
| 125 | if (strcmp(dbnp,"trace") == 0) { |
|---|
| 126 | parmtrace=1; |
|---|
| 127 | dbnp=argv[argnext++]; |
|---|
| 128 | } |
|---|
| 129 | if (strcmp(dbnp,"trace=trm") == 0) { |
|---|
| 130 | parmtrace=1; |
|---|
| 131 | trmtrace=1; |
|---|
| 132 | dbnp=argv[argnext++]; |
|---|
| 133 | } |
|---|
| 134 | if (strcmp(dbnp,"trace=dbx") == 0) { |
|---|
| 135 | parmtrace=1; |
|---|
| 136 | dbxtrace=1; |
|---|
| 137 | dbnp=argv[argnext++]; |
|---|
| 138 | } |
|---|
| 139 | if (strcmp(dbnp,"trace=all") == 0) { |
|---|
| 140 | parmtrace=1; |
|---|
| 141 | dbxtrace=trmtrace=1; |
|---|
| 142 | dbnp=argv[argnext++]; |
|---|
| 143 | } |
|---|
| 144 | |
|---|
| 145 | |
|---|
| 146 | parmcontrol=0; parmterms=1; parminfo=parmposts=0; parmtell=parmcount=0; |
|---|
| 147 | minus1=plus1=0; |
|---|
| 148 | |
|---|
| 149 | for (i=argnext; i < argc; i++) { |
|---|
| 150 | |
|---|
| 151 | p = argv[i]; |
|---|
| 152 | |
|---|
| 153 | if (*p == '-') { |
|---|
| 154 | minus1++; |
|---|
| 155 | if (minus1 == 1) |
|---|
| 156 | parmcontrol=parmterms=parminfo=parmposts=1; |
|---|
| 157 | } |
|---|
| 158 | |
|---|
| 159 | if (strcmp(p,"-all") == 0) { |
|---|
| 160 | parmcontrol=parmterms=parminfo=parmposts=0; |
|---|
| 161 | continue; |
|---|
| 162 | } |
|---|
| 163 | |
|---|
| 164 | if (strcmp(p,"-control") == 0) { |
|---|
| 165 | parmcontrol=0; |
|---|
| 166 | continue; |
|---|
| 167 | } |
|---|
| 168 | if (strcmp(p,"-terms") == 0) { |
|---|
| 169 | parmterms=0; |
|---|
| 170 | continue; |
|---|
| 171 | } |
|---|
| 172 | if (strcmp(p,"-terms/i") == 0) { |
|---|
| 173 | parmterms=parminfo=0; |
|---|
| 174 | continue; |
|---|
| 175 | } |
|---|
| 176 | if (strcmp(p,"-posts") == 0) { |
|---|
| 177 | parmposts=0; |
|---|
| 178 | continue; |
|---|
| 179 | } |
|---|
| 180 | |
|---|
| 181 | if (strcmp(p,"nowait") == 0 || strcmp(p,"now") == 0) { |
|---|
| 182 | parmwait=0; |
|---|
| 183 | continue; |
|---|
| 184 | } |
|---|
| 185 | |
|---|
| 186 | #if MZFST |
|---|
| 187 | if (strcmp(p,"+fix") == 0) { |
|---|
| 188 | cifstfix=1; |
|---|
| 189 | continue; |
|---|
| 190 | } |
|---|
| 191 | if (strcmp(p,"+fix/m") == 0) { |
|---|
| 192 | cifstfix=cifstfim=1; |
|---|
| 193 | continue; |
|---|
| 194 | } |
|---|
| 195 | #endif |
|---|
| 196 | if (strcmp(p,"+find") == 0) { |
|---|
| 197 | parmfind=1; |
|---|
| 198 | continue; |
|---|
| 199 | } |
|---|
| 200 | |
|---|
| 201 | if (*p == '+') { |
|---|
| 202 | plus1++; |
|---|
| 203 | if (plus1 == 1) |
|---|
| 204 | parmcontrol=parmterms=parminfo=parmposts=0; |
|---|
| 205 | } |
|---|
| 206 | if (strcmp(p,"+all") == 0) { |
|---|
| 207 | parmcontrol=parmterms=parminfo=parmposts=1; |
|---|
| 208 | continue; |
|---|
| 209 | } |
|---|
| 210 | |
|---|
| 211 | if (strcmp(p,"+control") == 0) { |
|---|
| 212 | parmcontrol=1; |
|---|
| 213 | continue; |
|---|
| 214 | } |
|---|
| 215 | if (strcmp(p,"+terms") == 0) { |
|---|
| 216 | parmterms=1; |
|---|
| 217 | continue; |
|---|
| 218 | } |
|---|
| 219 | if (strcmp(p,"+terms/i") == 0) { |
|---|
| 220 | parmterms=parminfo=1; |
|---|
| 221 | continue; |
|---|
| 222 | } |
|---|
| 223 | if (strcmp(p,"+posts") == 0) { |
|---|
| 224 | parmposts=1; |
|---|
| 225 | continue; |
|---|
| 226 | } |
|---|
| 227 | |
|---|
| 228 | if (strncmp(p,"tell:",5) == 0 || strncmp(p,"tell=",5) == 0) { |
|---|
| 229 | if (sscanf(p+5,"%ld",&parmtell) != 1) |
|---|
| 230 | fatal(p); |
|---|
| 231 | continue; |
|---|
| 232 | } |
|---|
| 233 | if (strncmp(p,"count:",6) == 0 || strncmp(p,"count=",6) == 0) { |
|---|
| 234 | if (sscanf(p+6,"%ld",&parmcount) != 1) |
|---|
| 235 | fatal(p); |
|---|
| 236 | continue; |
|---|
| 237 | } |
|---|
| 238 | |
|---|
| 239 | if (strcmp(p,"trace") == 0) { |
|---|
| 240 | parmtrace=1; |
|---|
| 241 | trmtrace=1; |
|---|
| 242 | continue; |
|---|
| 243 | } |
|---|
| 244 | |
|---|
| 245 | if (strncmp(p,"key1=",5) == 0 || strncmp(p,"from=",5) == 0) { |
|---|
| 246 | key1p=p+5; |
|---|
| 247 | continue; |
|---|
| 248 | } |
|---|
| 249 | |
|---|
| 250 | if (strncmp(p,"key2=",5) == 0 || strncmp(p,"to=",3) == 0) { |
|---|
| 251 | if (strncmp(p,"key2=",5) == 0) key2p=p+5; else key2p=p+3; |
|---|
| 252 | key2l=strlen(key2p); |
|---|
| 253 | continue; |
|---|
| 254 | } |
|---|
| 255 | |
|---|
| 256 | if (strncmp(p,"qlf=",4) == 0) { |
|---|
| 257 | qlfx=p[4]; continue; |
|---|
| 258 | } |
|---|
| 259 | |
|---|
| 260 | if (strncmp(p,"pst1:",5) == 0 || strncmp(p,"pst1=",5) == 0) { |
|---|
| 261 | if (sscanf(p+5,"%ld",&parmpst1) != 1) |
|---|
| 262 | fatal(p); |
|---|
| 263 | continue; |
|---|
| 264 | } |
|---|
| 265 | if (strncmp(p,"pst2:",5) == 0 || strncmp(p,"pst2=",5) == 0) { |
|---|
| 266 | if (sscanf(p+5,"%ld",&parmpst2) != 1) |
|---|
| 267 | fatal(p); |
|---|
| 268 | continue; |
|---|
| 269 | } |
|---|
| 270 | if (strncmp(p,"minpost:",8) == 0 || strncmp(p,"minpost=",8) == 0) { |
|---|
| 271 | if (sscanf(p+8,"%ld",&parmpst1) != 1) |
|---|
| 272 | fatal(p); |
|---|
| 273 | continue; |
|---|
| 274 | } |
|---|
| 275 | if (strncmp(p,"maxpost:",8) == 0 || strncmp(p,"maxpost=",8) == 0) { |
|---|
| 276 | if (sscanf(p+8,"%ld",&parmpst2) != 1) |
|---|
| 277 | fatal(p); |
|---|
| 278 | continue; |
|---|
| 279 | } |
|---|
| 280 | |
|---|
| 281 | if (strncmp(p,"tidx:",5) == 0 || strncmp(p,"tidx=",5) == 0) { |
|---|
| 282 | if (sscanf(p+5,"%ld",&itrm) != 1) |
|---|
| 283 | fatal(p); |
|---|
| 284 | continue; |
|---|
| 285 | } |
|---|
| 286 | |
|---|
| 287 | if (strncmp(p,"load:",5) == 0 || strncmp(p,"load=",5) == 0) { |
|---|
| 288 | if (sscanf(p+5,"%ld",&parmload) != 1) |
|---|
| 289 | fatal(p); |
|---|
| 290 | if (parmload > ALLOMAXV) { |
|---|
| 291 | parmload = ALLOMAXV; |
|---|
| 292 | fprintf(stderr,"+++ load=%ld\n",parmload); |
|---|
| 293 | } |
|---|
| 294 | continue; |
|---|
| 295 | } |
|---|
| 296 | |
|---|
| 297 | #if MZGIZMO |
|---|
| 298 | if (strncmp(p,"gizmo:",6) == 0 || strncmp(p,"gizmo=",6) == 0) { |
|---|
| 299 | q=p+6; |
|---|
| 300 | if (!*q) fatal(p); |
|---|
| 301 | if (vgizmap) { /* gizmo already defined */ |
|---|
| 302 | for (gizmap=vgizmap; gizmap->nextp; ) |
|---|
| 303 | gizmap=gizmap->nextp; |
|---|
| 304 | gizmread(q,&gizmap->nextp,keyrec); |
|---|
| 305 | gizmap=gizmap->nextp; |
|---|
| 306 | } |
|---|
| 307 | else { /* first gizmo definition */ |
|---|
| 308 | gizmread(q,&vgizmap,keyrec); |
|---|
| 309 | } |
|---|
| 310 | if (parmtrace) { |
|---|
| 311 | for (gizmap=vgizmap; gizmap; gizmap=gizmap->nextp) |
|---|
| 312 | printf("+++ gizmo=%s \n",gizmap->gdbnp); |
|---|
| 313 | } |
|---|
| 314 | continue; |
|---|
| 315 | } |
|---|
| 316 | #endif /* MZGIZMO */ |
|---|
| 317 | |
|---|
| 318 | #if MZFST |
|---|
| 319 | if (strcmp(p,"core") == 0) { |
|---|
| 320 | parmcore=1; |
|---|
| 321 | continue; |
|---|
| 322 | } |
|---|
| 323 | if (strncmp(p,"ln1?",4) == 0 || strncmp(p,"ln1=",4) == 0) { |
|---|
| 324 | if (fst_open(NULL,p+4,0) <= 0) fatal(p); |
|---|
| 325 | fstfd0=fst_fd[0]; |
|---|
| 326 | continue; |
|---|
| 327 | } |
|---|
| 328 | if (strncmp(p,"ln2?",4) == 0 || strncmp(p,"ln2=",4) == 0) { |
|---|
| 329 | if (fst_open(NULL,p+4,1) <= 0) fatal(p); |
|---|
| 330 | fstfd1=fst_fd[1]; |
|---|
| 331 | continue; |
|---|
| 332 | } |
|---|
| 333 | |
|---|
| 334 | if (strncmp(p,"fst?",4) == 0 || strncmp(p,"fst=",4) == 0) { |
|---|
| 335 | q=p+4; |
|---|
| 336 | if (strcmp(q,"@") == 0) sprintf(q=line,"@%s.fst",dbnp); |
|---|
| 337 | if (!loadfile("",'@',q,buffup,buffuplen,'\n')) fatal(q); |
|---|
| 338 | fst_gener(&fstpgmp,buffup); |
|---|
| 339 | if (parmtrace) { showcore("+++ fst"); printf("%s.\n",buffup); } |
|---|
| 340 | if (fst_error) { |
|---|
| 341 | printf("\n*** FST error#%ld at line %ld\n",fst_error,fst_errl); |
|---|
| 342 | if (fst_error == FSTERRF) |
|---|
| 343 | printf("\n*** FMT error#%ld at offset %ld\n", |
|---|
| 344 | fmt_error,fmt_errof); |
|---|
| 345 | fatal(fst_errp); |
|---|
| 346 | } |
|---|
| 347 | continue; |
|---|
| 348 | } |
|---|
| 349 | |
|---|
| 350 | if (strncmp(p,"stw?",4) == 0 || strncmp(p,"stw=",4) == 0) { |
|---|
| 351 | q=p+4; |
|---|
| 352 | if (*q++ != '@') fatal(p); |
|---|
| 353 | if (!*q) sprintf(q=line,"%s.stw",dbnp); |
|---|
| 354 | stwp=loadstw("",q,stwp=NULL,0L,&n); |
|---|
| 355 | if (parmtrace) { |
|---|
| 356 | for (q=stwp; *q; q+=LE1+1) printf("%s/",q); |
|---|
| 357 | printf("=%d\n",n); |
|---|
| 358 | showcore("+++ stw"); |
|---|
| 359 | } |
|---|
| 360 | continue; |
|---|
| 361 | } |
|---|
| 362 | |
|---|
| 363 | |
|---|
| 364 | if (strcmp(p,"strip") == 0) { |
|---|
| 365 | parmstrip=1; |
|---|
| 366 | continue; |
|---|
| 367 | } |
|---|
| 368 | |
|---|
| 369 | |
|---|
| 370 | if (strncmp(p,"actab?",6) == 0 || strncmp(p,"actab=",6) == 0) { |
|---|
| 371 | if (strcmp(p+6,",numbers") == 0) { |
|---|
| 372 | int c; |
|---|
| 373 | if (!isiswctot) { |
|---|
| 374 | memset(isiswctab,0x00,256); |
|---|
| 375 | for (isiswctot=0; isisactab[isiswctot]; isiswctot++) |
|---|
| 376 | isiswctab[isisactab[isiswctot]]=1; |
|---|
| 377 | } |
|---|
| 378 | for (c=(int)'0'; c <=(int)'9'; c++) |
|---|
| 379 | isiswctab[c]=1; |
|---|
| 380 | } |
|---|
| 381 | else { |
|---|
| 382 | unsigned char ubuffup[256]; |
|---|
| 383 | memset(isiswctab,0x00,256); |
|---|
| 384 | if (!loadactb(NULL,ubuffup,p+6)) fatal(p); |
|---|
| 385 | for (isiswctot=0; ubuffup[isiswctot]; isiswctot++) |
|---|
| 386 | isiswctab[ubuffup[isiswctot]]=1; |
|---|
| 387 | } |
|---|
| 388 | continue; |
|---|
| 389 | } |
|---|
| 390 | |
|---|
| 391 | if (strncmp(p,"wlookup?",8) == 0 || strncmp(p,"wlookup=",8) == 0) { |
|---|
| 392 | fst_wlupifnp=p+8; |
|---|
| 393 | if (strcmp(fst_wlupifnp,"@") == 0) fst_wlupifnp=dbnp; |
|---|
| 394 | continue; |
|---|
| 395 | } |
|---|
| 396 | |
|---|
| 397 | #endif |
|---|
| 398 | |
|---|
| 399 | #if MZFST |
|---|
| 400 | if (strncmp(p,"ln1?",4) == 0 || strncmp(p,"ln1=",4) == 0) { |
|---|
| 401 | #if MXIFUPD |
|---|
| 402 | if (ifnp) fatal(p); |
|---|
| 403 | #endif |
|---|
| 404 | if (fst_open(NULL,p+4,0) <= 0) fatal(p); |
|---|
| 405 | continue; |
|---|
| 406 | } |
|---|
| 407 | if (strncmp(p,"ln2?",4) == 0 || strncmp(p,"ln2=",4) == 0) { |
|---|
| 408 | #if MXIFUPD |
|---|
| 409 | if (ifnp) fatal(p); |
|---|
| 410 | #endif |
|---|
| 411 | if (fst_open(NULL,p+4,1) <= 0) fatal(p); |
|---|
| 412 | continue; |
|---|
| 413 | } |
|---|
| 414 | #endif |
|---|
| 415 | |
|---|
| 416 | fatal(p); |
|---|
| 417 | } |
|---|
| 418 | |
|---|
| 419 | |
|---|
| 420 | |
|---|
| 421 | /* Set up */ |
|---|
| 422 | |
|---|
| 423 | #if MZFST |
|---|
| 424 | if (fstpgmp) parmposts=1; |
|---|
| 425 | #endif |
|---|
| 426 | |
|---|
| 427 | if (parmposts+parmpst1+parmpst2 == 0) { |
|---|
| 428 | trmalloc(labs(itrm),0L); |
|---|
| 429 | } |
|---|
| 430 | if (parmload) { |
|---|
| 431 | invflush(dbnp); /* test it */ |
|---|
| 432 | invsetup(dbnp,parmload,parmload,parmload); |
|---|
| 433 | } |
|---|
| 434 | memset(freq,0x00,sizeof(freq)); |
|---|
| 435 | |
|---|
| 436 | dbxopt_ordwr=O_RDONLY; |
|---|
| 437 | TERM(itrm,dbnp,key1p); |
|---|
| 438 | |
|---|
| 439 | if (parmcontrol || parmtrace) { |
|---|
| 440 | #if SAMEL |
|---|
| 441 | printf("*%s [%d/%d]\n",dbnp,TDBiflxx,TDBifmap->iflxn); |
|---|
| 442 | #else |
|---|
| 443 | printf("*%s\n",dbnp); |
|---|
| 444 | #endif |
|---|
| 445 | |
|---|
| 446 | printf("idtype ordn ordf n k liv "); |
|---|
| 447 | printf("posrx nmaxpos fmaxpos abnormal\n"); |
|---|
| 448 | |
|---|
| 449 | for (treecase=0; treecase < 2; treecase++) { |
|---|
| 450 | cp= &TDBifmap->cn[treecase]; |
|---|
| 451 | printf("%4d %4d %4d %4d%4d", |
|---|
| 452 | cp->idtype,cp->ordn,cp->ordf,cp->n,cp->k); |
|---|
| 453 | printf("%4d %8ld",cp->liv,cp->posrx); |
|---|
| 454 | printf("%8ld %8ld %4d\n", |
|---|
| 455 | cp->nmaxpos,cp->fmaxpos,cp->abnormal); |
|---|
| 456 | } |
|---|
| 457 | if (parmtrace) { |
|---|
| 458 | #if IFUPDAT |
|---|
| 459 | printf("cn =%3d \n",TDBifmap->cnopn); |
|---|
| 460 | #else |
|---|
| 461 | printf("cn =%3d = %p +%6ld\n",0,NULL,TDBifmap->cc_offset); |
|---|
| 462 | #endif |
|---|
| 463 | #if CNCLx |
|---|
| 464 | printf("n1 =%3d = %p +%6ld\n", |
|---|
| 465 | TDBifmap->n1opn,TDBifmap->nybasep[0],TDBifmap->cn_offset[0]); |
|---|
| 466 | printf("n2 =%3d = %p +%6ld\n", |
|---|
| 467 | TDBifmap->n2opn,TDBifmap->nybasep[1],TDBifmap->cn_offset[1]); |
|---|
| 468 | printf("l1 =%3d = %p +%6ld\n", |
|---|
| 469 | TDBifmap->l1opn,TDBifmap->lybasep[0],TDBifmap->cl_offset[0]); |
|---|
| 470 | printf("l2 =%3d = %p +%6ld\n", |
|---|
| 471 | TDBifmap->l2opn,TDBifmap->lybasep[1],TDBifmap->cl_offset[1]); |
|---|
| 472 | #endif |
|---|
| 473 | #if SAMEL |
|---|
| 474 | printf("if =%3d = %p +%6ld [#%d]\n", |
|---|
| 475 | TDBifmap->ifopn[0],TDBifmap->iybasep,TDBifmap->ci_offset, |
|---|
| 476 | TDBiflxx); |
|---|
| 477 | for (lxy=2; lxy <= TDBifmap->iflxn; lxy++) |
|---|
| 478 | printf("if =%3d = %p [#%d]\n", |
|---|
| 479 | TDBifmap->ifopn[lxy-1],NULL,lxy); |
|---|
| 480 | #else |
|---|
| 481 | printf("if =%3d = %p\n",TDBifmap->ifopn,TDBifmap->iybasep); |
|---|
| 482 | #endif |
|---|
| 483 | #if NX |
|---|
| 484 | printf("n1 0 %3d %3d %p\n",TDBifmap->nx[0][0].pages); |
|---|
| 485 | #endif |
|---|
| 486 | } /* parmtrace */ |
|---|
| 487 | } |
|---|
| 488 | |
|---|
| 489 | |
|---|
| 490 | |
|---|
| 491 | /* Execution */ |
|---|
| 492 | |
|---|
| 493 | for (; TRMrc != RCEOF; ) { |
|---|
| 494 | |
|---|
| 495 | if (key2p) |
|---|
| 496 | if (memcmp(TRMkey,key2p,key2l) > 0) |
|---|
| 497 | break; |
|---|
| 498 | |
|---|
| 499 | if (parmwait) |
|---|
| 500 | if (count) { |
|---|
| 501 | printf(".."); gets(line); |
|---|
| 502 | if (ISX(line) || strcmp(line,"/*") == 0) break; |
|---|
| 503 | if (line[0]) { |
|---|
| 504 | printf("%s<=\n",line); |
|---|
| 505 | TERM(itrm,dbnp,line); |
|---|
| 506 | continue; |
|---|
| 507 | } |
|---|
| 508 | } |
|---|
| 509 | |
|---|
| 510 | if (parmposts+parmpst1+parmpst2) { |
|---|
| 511 | posthdr1(trmp); /* get ifp 1st segm */ |
|---|
| 512 | } |
|---|
| 513 | |
|---|
| 514 | if (TRMlcase) { /* {} yes */ |
|---|
| 515 | info1=((L2IDXE *)TRMlidxp(1))->info1; |
|---|
| 516 | info2=((L2IDXE *)TRMlidxp(1))->info2; |
|---|
| 517 | #if LIND |
|---|
| 518 | info3=((L2IDXE *)TRMlidxp(1))->info3info4.info3; |
|---|
| 519 | #endif |
|---|
| 520 | } |
|---|
| 521 | else { |
|---|
| 522 | info1=((L1IDXE *)TRMlidxp(0))->info1; |
|---|
| 523 | info2=((L1IDXE *)TRMlidxp(0))->info2; |
|---|
| 524 | #if LIND |
|---|
| 525 | info3=((L1IDXE *)TRMlidxp(0))->info3info4.info3; |
|---|
| 526 | #endif |
|---|
| 527 | } |
|---|
| 528 | |
|---|
| 529 | if (parmpst1) |
|---|
| 530 | if (TRMxytotp < parmpst1) { NXTERM(itrm); continue; } |
|---|
| 531 | if (parmpst2) |
|---|
| 532 | if (TRMxytotp > parmpst2) { NXTERM(itrm); continue; } |
|---|
| 533 | |
|---|
| 534 | #if MZFST || MZGIZMO |
|---|
| 535 | if ( |
|---|
| 536 | #if MZGIZMO |
|---|
| 537 | vgizmap || |
|---|
| 538 | #endif |
|---|
| 539 | fstpgmp) { |
|---|
| 540 | if (!recinit) recinit(); |
|---|
| 541 | if (!vrecp[keyrec]) recallok(keyrec,MAXMFRL); |
|---|
| 542 | recp=vrecp[keyrec]; |
|---|
| 543 | RECtype=TYPEMFR; |
|---|
| 544 | memset(MFX,0x00,LEADER); MFRbase=MFRmfrl=LEADER; |
|---|
| 545 | MFRmfn=count+1; |
|---|
| 546 | for (n=vlex[TRMlcase]; n--; ) if (TRMkey[n] != ' ') break; |
|---|
| 547 | p=buffup; *p='\0'; |
|---|
| 548 | #if BEFORE20030113 |
|---|
| 549 | sprintf(p,"A1\x01%s\x01",TRMkey); |
|---|
| 550 | #else |
|---|
| 551 | if (parmstrip) { |
|---|
| 552 | int wlen; |
|---|
| 553 | UCHR word[LE2+1+1]/*,*wp*/; |
|---|
| 554 | for (q=(UCHR *)TRMkey; ; ) { |
|---|
| 555 | word[wlen=0]='\0'; |
|---|
| 556 | while (isiswctab[*q]) { |
|---|
| 557 | if (wlen < sizeof(word)) word[wlen++] = *q; |
|---|
| 558 | if (!*++q) break; |
|---|
| 559 | } |
|---|
| 560 | while (!isiswctab[*q]) if (*q) q++; else break; |
|---|
| 561 | if (wlen == 0) if (*q) continue; else break; |
|---|
| 562 | word[wlen] = '\0'; |
|---|
| 563 | /* for (wp=word; *wp; wp++) *wp = isisuctab[*wp]; */ |
|---|
| 564 | if (wlen == n+1) { |
|---|
| 565 | sprintf(p,""); break; |
|---|
| 566 | } |
|---|
| 567 | else { |
|---|
| 568 | sprintf(p,"A1\x01"); p+=strlen(p); |
|---|
| 569 | sprintf(p,"%s ",word); p+=strlen(p); |
|---|
| 570 | sprintf(p,"\x01"); p+=strlen(p); |
|---|
| 571 | } |
|---|
| 572 | if (!*q) break; |
|---|
| 573 | } |
|---|
| 574 | } |
|---|
| 575 | else { |
|---|
| 576 | sprintf(p,"A1\x01%s\x01",TRMkey); |
|---|
| 577 | } |
|---|
| 578 | #endif |
|---|
| 579 | p+=strlen(p); |
|---|
| 580 | sprintf(p,"A2~%d~",n+1); |
|---|
| 581 | p+=strlen(p); |
|---|
| 582 | sprintf(p,"A5~^l%d^w%d^p%ld^i%d^o%d~", |
|---|
| 583 | TRMlcase+1,vlex[TRMlcase], |
|---|
| 584 | (TRMlcase)?TRMl2buf.pos:TRMl1buf.pos, |
|---|
| 585 | TRMliock(TRMlcase)+1, |
|---|
| 586 | (TRMlcase)?TRMl2buf.ock:TRMl1buf.ock); |
|---|
| 587 | p+=strlen(p); |
|---|
| 588 | sprintf(p,"A3~^a%"P_OFF_T"^b%ld^c%"P_OFF_T"~",(LONG_LONG)info1,info2,(LONG_LONG)info3); |
|---|
| 589 | p+=strlen(p); |
|---|
| 590 | sprintf(p,"A10~%ld~",TRMxytotp); |
|---|
| 591 | if (fldupdat(keyrec,buffup)) fatal(buffup); |
|---|
| 592 | if (parmtrace || parmcontrol) prtfields(recp,MFRmfn); |
|---|
| 593 | } |
|---|
| 594 | #if MZGIZMO |
|---|
| 595 | for (gizmap=vgizmap; gizmap; gizmap=gizmap->nextp) |
|---|
| 596 | recgizmo(keyrec,gizmap); |
|---|
| 597 | #endif |
|---|
| 598 | #endif /* MZFST || MZGIZMO */ |
|---|
| 599 | |
|---|
| 600 | |
|---|
| 601 | if (parmterms) { |
|---|
| 602 | if (qlfx) { |
|---|
| 603 | found=0; |
|---|
| 604 | for (n=(TRMlcase)?LE2:LE1; n--; ) |
|---|
| 605 | if (TRMkey[n] != ' ') break; |
|---|
| 606 | |
|---|
| 607 | if (qlfx == '?') { |
|---|
| 608 | /* fprintf(stderr,"%s=%d\n",TRMkey,n+1); */ |
|---|
| 609 | freq[n+1]++; |
|---|
| 610 | } |
|---|
| 611 | else { |
|---|
| 612 | if (memchr(TRMkey+1,qlfx,n)) |
|---|
| 613 | found=1; /* /xx is ok */ |
|---|
| 614 | if (!found) { |
|---|
| 615 | TRMkey[n+1]='\0'; |
|---|
| 616 | printf("%s\n",TRMkey); |
|---|
| 617 | } |
|---|
| 618 | } |
|---|
| 619 | } |
|---|
| 620 | else |
|---|
| 621 | if (/*parmcontrol || */ parminfo || parmtrace) |
|---|
| 622 | printf(" + %s: %"P_OFF_T"/%ld/%"P_OFF_T"\n", |
|---|
| 623 | TRMkey,(LONG_LONG)info1,info2,(LONG_LONG)info3); |
|---|
| 624 | else |
|---|
| 625 | printf("%s\n",TRMkey); |
|---|
| 626 | } |
|---|
| 627 | |
|---|
| 628 | if (parmposts) { |
|---|
| 629 | for (; posting(itrm,TRMpost+1) > 0; ) { |
|---|
| 630 | #if MZFST |
|---|
| 631 | if (fstpgmp) { |
|---|
| 632 | recp=vrecp[keyrec]; |
|---|
| 633 | MFRmfn=TRMpmfn; |
|---|
| 634 | sprintf(buffup, |
|---|
| 635 | "D11D12D13D14A11~%ld~A12~%u~A13~%u~A14~%u~", |
|---|
| 636 | TRMpmfn,TRMptag,TRMpocc,TRMpcnt); |
|---|
| 637 | if (fldupdat(keyrec,buffup)) fatal(buffup); |
|---|
| 638 | if (parmtrace || parmcontrol) prtfields(recp,MFRmfn); |
|---|
| 639 | if (parmcore) { |
|---|
| 640 | *buffup='\0'; fst_batchp=buffup; fst_fd[0]=fst_fd[1]=0; |
|---|
| 641 | } /* parmcore */ |
|---|
| 642 | fst_inter(fstpgmp,keyrec,stwp, |
|---|
| 643 | &lnk1p,maxlk1,&lnk2p,maxlk2,&qtylk1,&qtylk2); |
|---|
| 644 | fst_fx[0]+=qtylk1; /* lnk1p */ |
|---|
| 645 | fst_fx[1]+=qtylk2; /* lnk2p */ |
|---|
| 646 | if (parmcore) { |
|---|
| 647 | fst_fd[0]=fstfd0; fst_fd[1]=fstfd1; |
|---|
| 648 | if (!vrecp[fstrec]) recallok(fstrec,(MAXMFRL+BUFSIZ)); |
|---|
| 649 | recp=vrecp[fstrec]; |
|---|
| 650 | RECtype=TYPEMFR; |
|---|
| 651 | memset(MFX,0x00,LEADER); MFRbase=MFRmfrl=LEADER; |
|---|
| 652 | MFRmfn=count+1; |
|---|
| 653 | if (*buffup) if (fldupdat(fstrec,buffup)) fatal(buffup); |
|---|
| 654 | if (parmtrace || parmcontrol) prtfields(recp,MFRmfn); |
|---|
| 655 | for (xdir=0; xdir < MFRnvf; xdir++) { |
|---|
| 656 | /* |
|---|
| 657 | 1 �ABSORPTION^m9^o1^c1^l1� |
|---|
| 658 | */ |
|---|
| 659 | ; |
|---|
| 660 | } |
|---|
| 661 | } /* parmcore */ |
|---|
| 662 | } |
|---|
| 663 | else |
|---|
| 664 | #endif |
|---|
| 665 | printf(" #%ld/%ld: mfn=%ld tag=%d occ=%d cnt=%d\n", |
|---|
| 666 | TRMpost,TRMxytotp, |
|---|
| 667 | TRMpmfn,TRMptag,TRMpocc,TRMpcnt); |
|---|
| 668 | } |
|---|
| 669 | } |
|---|
| 670 | |
|---|
| 671 | count++; |
|---|
| 672 | if (parmtell) |
|---|
| 673 | if ((count % parmtell) == 0) |
|---|
| 674 | fprintf(stderr,"+++ %ld\n",count); |
|---|
| 675 | |
|---|
| 676 | if (parmcount) |
|---|
| 677 | if (count >= parmcount) |
|---|
| 678 | break; |
|---|
| 679 | |
|---|
| 680 | NXTERM(itrm); |
|---|
| 681 | if (parmfind) TERM(itrm,TDBname,TRMkey); |
|---|
| 682 | } |
|---|
| 683 | |
|---|
| 684 | if (qlfx == '?') |
|---|
| 685 | for (n=0; n <= LE2; n++) |
|---|
| 686 | if (freq[n]) printf("%2d|%9ld\n",n,freq[n]); |
|---|
| 687 | |
|---|
| 688 | |
|---|
| 689 | #if MZFST |
|---|
| 690 | if (fstpgmp) { |
|---|
| 691 | if (lnk1p) FREE(lnk1p); |
|---|
| 692 | if (lnk2p) FREE(lnk2p); |
|---|
| 693 | lnk1p=lnk2p=NULL; |
|---|
| 694 | fst_clos(0); fst_clos(1); fst_fd[0]=fst_fd[1]=0; |
|---|
| 695 | if (fst_fx[0]+fst_fx[1]) |
|---|
| 696 | if (parmtrace || parmcontrol) |
|---|
| 697 | fprintf(stderr,"+++ %ld+%ld links \n",fst_fx[0],fst_fx[1]); |
|---|
| 698 | } |
|---|
| 699 | #endif |
|---|
| 700 | |
|---|
| 701 | exit(0); |
|---|
| 702 | } |
|---|