|
|
1.1 ! root 1: # include "signal.h" ! 2: # ifdef SVR2 ! 3: typedef int (*SIG_TYP)(); ! 4: # endif ! 5: # include "refer..c" ! 6: main(argc,argv) ! 7: char *argv[]; ! 8: { ! 9: char line[LLINE], *s; ! 10: int nodeflt =0; ! 11: ! 12: signals(); ! 13: while (argc>1 &&argv[1][0] == '-') ! 14: { ! 15: switch(argv[1][1]) ! 16: { ! 17: case 'e': ! 18: endpush++; break; ! 19: case 'l': ! 20: labels++; ! 21: s = argv[1]+2; ! 22: nmlen = atoi(s); ! 23: for ( ; *s; s++) ! 24: if (*s == ',' || *s =='_' || *s =='"') ! 25: break; ! 26: if (*s==0) break; ! 27: switch(*s++) ! 28: { ! 29: case ',': labblkflg=0; break; ! 30: case '_': labblkflg=" "; break; ! 31: case '"': ! 32: labblkflg=s; ! 33: while (*s && *s != '"') ! 34: s++; ! 35: *s++= 0; break; ! 36: } ! 37: dtlen = atoi(s); ! 38: break; ! 39: case 'k': ! 40: keywant = (argv[1][2] ? argv[1][2] : 'L'); ! 41: labels++; ! 42: break; ! 43: case 's': ! 44: sort++; ! 45: if (argv[1][2]) ! 46: keystr= argv[1]+2; ! 47: break; ! 48: case 'p': ! 49: argc--; argv++; ! 50: *search++ = argv[1]; ! 51: if (search-rdata>NSERCH) ! 52: err("too many -p options (%d)", NSERCH); ! 53: break; ! 54: case 'n': ! 55: nodeflt=1; ! 56: break; ! 57: case 'B': ! 58: nobracket++; /* falls through */ ! 59: case 'b': ! 60: bare = (argv[1][2] == '1') ? 1 : 2; ! 61: break; ! 62: case 'c': ! 63: smallcaps = argv[1]+2; ! 64: break; ! 65: case 'a': ! 66: authrev = atoi (argv[1]+2); ! 67: if (authrev<=0) ! 68: authrev = 1000; ! 69: for(s=argv[1]+2; isdigit(*s); s++) ! 70: ; ! 71: if (*s==',') nocomma++; ! 72: break; ! 73: case 'd': /* reduce date to year only */ ! 74: yearonly=1; ! 75: break; ! 76: case 'A': /* these fields get appended */ ! 77: appfld = argv[1]+2; ! 78: break; ! 79: case 'I': /* these fields get ignored */ ! 80: ignfld = argv[1]+2; ! 81: break; ! 82: case 'P': /* preserve original: no .ds's */ ! 83: preserve = 1; ! 84: break; ! 85: case '%': pagecit=1; break; ! 86: case 'L': ! 87: labsepstr= argv[1]+2; break; ! 88: case 'r': ! 89: recycle = 1; break; /* recycle numbers at each $LIST$ */ ! 90: } ! 91: argc--; argv++; ! 92: } ! 93: if (nodeflt==0) ! 94: *search++ = "/usr/dict/papers/Ind"; ! 95: ! 96: if (sort) ! 97: endpush=1; ! 98: ! 99: ! 100: if (endpush) ! 101: sprintf(tfile, "/tmp/rj%da", getpid()); ! 102: if (sort) ! 103: { ! 104: sprintf(ofile,"/tmp/rj%db", getpid()); ! 105: sprintf(tdfile, "/tmp/rj%de", getpid()); ! 106: ftemp = fopen(ofile, "w"); ! 107: if (ftemp==NULL) ! 108: { ! 109: fprintf(stderr, "Can't open scratch file\n"); ! 110: exit(1); ! 111: } ! 112: } ! 113: ! 114: do ! 115: { ! 116: if (argc>1) ! 117: { ! 118: if (in!=stdin) ! 119: fclose(in); ! 120: Iline=0; ! 121: if (strcmp(argv[1], "-")==SAME){ ! 122: in = stdin; ! 123: printf(".lf 1 -\n"); ! 124: } ! 125: else{ ! 126: in = fopen(Ifile=argv[1], "r"); ! 127: printf(".lf 1 %s\n",Ifile); ! 128: } ! 129: argc--; argv++; ! 130: if (in==NULL) ! 131: { ! 132: err("Can't read %s", Ifile); ! 133: continue; ! 134: } ! 135: } ! 136: while (input(line)) ! 137: { ! 138: Iline++; ! 139: # ifdef D1 ! 140: fprintf(stderr, "line %.20s\n",line); ! 141: # endif ! 142: if (prefix(".[", line) || (nobracket && line[0]!='\n')) ! 143: { ! 144: if (endpush && (fo==NULL || fo == stdout)) ! 145: { ! 146: fo = fopen(tfile, "w"); ! 147: # if D1 ! 148: fprintf(stderr, "opened %s as %o\n",tfile,fo); ! 149: # endif ! 150: if (fo==NULL) ! 151: { ! 152: fprintf(stderr,"Can't open scratch file"); ! 153: exit(1); ! 154: } ! 155: sep = 002; /* separate records without confusing sort..*/ ! 156: } ! 157: doref(line); ! 158: } ! 159: else ! 160: output(line); ! 161: # if D1 ! 162: fprintf(stderr, "past output/doref\n"); ! 163: # endif ! 164: } ! 165: } ! 166: while (argc>1); ! 167: # if D1 ! 168: fprintf(stderr, "before dumpold, endpush %d fo %o\n",endpush, fo); ! 169: # endif ! 170: widelab(); ! 171: if (endpush && (fo!=NULL && fo != stdout)) ! 172: dumpold(); ! 173: output(""); ! 174: fflush (ftemp); ! 175: if (sort) ! 176: recopy(ofile); ! 177: clfgrep(); ! 178: # ifndef D1 ! 179: cleanup(); ! 180: # endif ! 181: exit(0); ! 182: } ! 183: ! 184: extern int intr(); ! 185: signals() ! 186: { ! 187: SIG_TYP oldint; ! 188: oldint = signal(SIGINT, intr); ! 189: if (oldint== (SIG_TYP)1) ! 190: signal (SIGINT, 1); ! 191: signal (SIGHUP, intr); ! 192: signal (SIGPIPE, intr); ! 193: signal (SIGTERM, intr); ! 194: } ! 195: ! 196: intr() ! 197: { ! 198: int oldsig; ! 199: signal(SIGINT, 1); ! 200: cleanup(); ! 201: exit(1); ! 202: } ! 203: cleanup() ! 204: { ! 205: if (tfile[0]) unlink(tfile); ! 206: if (gfile[0]) unlink(gfile); ! 207: if (ofile[0]) unlink(ofile); ! 208: if (hidenam[0]) unlink(hidenam); ! 209: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.