struct label
*labtab
= ltab
;
char CGMES
[] = "command garbled: %s\n";
char TMMES
[] = "Too much text: %s\n";
char LTL
[] = "Label too long: %s\n";
char AD0MES
[] = "No addresses allowed: %s\n";
char AD1MES
[] = "Only one address allowed: %s\n";
lab
= labtab
+ 1; /* 0 reserved for end-pointer */
lbend
= &linebuf
[LBSIZE
];
ptrend
= &ptrspace
[PTRSIZE
];
reend
= &respace
[RESIZE
];
labend
= &labtab
[LABSIZE
];
while (--eargc
> 0 && (++eargv
)[0][0] == '-')
if(eargc
-- <= 0) exit(2);
if((fin
= fopen(*++eargv
, "r")) == NULL
) {
fprintf(stderr
, "Cannot open pattern-file: %s\n", *eargv
);
fprintf(stdout
, "Unknown flag: %c\n", eargv
[0][1]);
fprintf(stderr
, "Too many {'s");
else while(--eargc
>= 0) {
register char *p
, *op
, *tp
;
if(rline(linebuf
) < 0) return;
if(rline(linebuf
) < 0) break;
/* fprintf(stdout, "cp: %s\n", cp); /*DEBUG*/
while(*cp
== ' ' || *cp
== '\t') cp
++;
if(*cp
== '\0' || *cp
== '#') continue;
fprintf(stderr
, CGMES
, linebuf
);
fprintf(stderr
, "First RE may not be null\n");
if(*cp
== ',' || *cp
== ';') {
if((rep
->ad2
= p
) > reend
) {
fprintf(stderr
, TMMES
, linebuf
);
if(p
== badp
|| p
== 0) {
fprintf(stderr
, CGMES
, linebuf
);
fprintf(stderr
, "Too much text: %s\n", linebuf
);
while(*cp
== ' ' || *cp
== '\t') cp
++;
fprintf(stderr
, "Unrecognized command: %s\n", linebuf
);
rep
->negfl
= !(rep
->negfl
);
cmpend
[depth
++] = &rep
->lb1
;
fprintf(stderr
, "Too many commands: %s\n", linebuf
);
if(*cp
== '\0') continue;
fprintf(stderr
, AD0MES
, linebuf
);
fprintf(stderr
, "Too many }'s\n");
fprintf(stderr
, AD1MES
, linebuf
);
fprintf(stderr
, AD0MES
, linebuf
);
if(tp
>= &(lab
->asc
[8])) {
fprintf(stderr
, LTL
, linebuf
);
fprintf(stderr
, "Duplicate labels: %s\n", linebuf
);
fprintf(stderr
, "Too many labels: %s\n", linebuf
);
fprintf(stderr
, AD1MES
, linebuf
);
fprintf(stderr
, CGMES
, linebuf
);
fprintf(stderr
, CGMES
, linebuf
);
fprintf(stderr
, AD1MES
, linebuf
);
fprintf(stderr
, CGMES
, linebuf
);
if(tp
>= &(lab
->asc
[8])) {
fprintf(stderr
, LTL
, linebuf
);
fprintf(stderr
, "Too many labels: %s\n", linebuf
);
fprintf(stderr
, AD1MES
, linebuf
);
fprintf(stderr
, CGMES
, linebuf
);
fprintf(stderr
, AD1MES
, linebuf
);
fprintf(stderr
, CGMES
, linebuf
);
if((rep
->rhs
= p
) > reend
) {
fprintf(stderr
, TMMES
, linebuf
);
if((p
= compsub(rep
->rhs
)) == badp
) {
fprintf(stderr
, CGMES
, linebuf
);
fprintf(stderr
, CGMES
, linebuf
);
fprintf(stderr
, "Too many files in w commands\n");
for(i
= nfiles
- 1; i
>= 0; i
--)
if(cmp(fname
[nfiles
],fname
[i
]) == 0) {
if((rep
->fcode
= fopen(fname
[nfiles
], "w")) == NULL
) {
fprintf(stderr
, "cannot open %s\n", fname
[nfiles
]);
fcode
[nfiles
++] = rep
->fcode
;
fprintf(stderr
, CGMES
, linebuf
);
fprintf(stderr
, "Too many files in w commands\n");
for(i
= nfiles
- 1; i
>= 0; i
--)
if(cmp(fname
[nfiles
], fname
[i
]) == 0) {
if((rep
->fcode
= fopen(fname
[nfiles
], "w")) == NULL
) {
fprintf(stderr
, "Cannot create %s\n", fname
[nfiles
]);
fcode
[nfiles
++] = rep
->fcode
;
fprintf(stderr
, CGMES
, linebuf
);
fprintf(stderr
, TMMES
, linebuf
);
fprintf(stderr
, "Too many commands, last: %s\n", linebuf
);
fprintf(stderr
, CGMES
, linebuf
);
if((*p
= *q
++) == '\\') {
if(*p
> numbra
+ '0' && *p
<= '9')
char bracket
[NBRA
], *bracketp
;
if (ep
>= &expbuf
[ESIZE
]) {
if((c
= *sp
++) == seof
) {
if(bracketp
!= bracket
) {
if(bracketp
<= bracket
) {
if(c
>= '1' && c
<= '9') {
if(&ep
[17] >= &expbuf
[ESIZE
]) {
fprintf(stderr
, "RE too long: %s\n", linebuf
);
fprintf(stderr
, CGMES
, linebuf
);
if (c
=='-' && sp
>cstart
&& *sp
!=']') {
for (c
= sp
[-2]; c
<*sp
; c
++)
ep
[c
>>3] |= bittab
[c
&07];
ep
[c
>> 3] |= bittab
[c
& 07];
} while((c
= *sp
++) != ']');
for(cclcnt
= 0; cclcnt
< 16; cclcnt
++)
if((*++p
= *q
++) == '\0') {
if((q
= saveq
) == 0) return(-1);
if((*++p
= *q
++) == '0') {
while((t
= getc(fin
)) != EOF
) {
while(*rcp
>= '0' && *rcp
<= '9')
lno
= lno
*10 + *rcp
++ - '0';
fprintf(stderr
, "Too many line numbers\n");
if(*ra
== '\0') return(0);
while(*q
== '\t' || *q
== ' ') q
++;
while(*q
== '\t' || *q
== ' ') q
++;
struct label
*search(ptr
)
if(cmp(rp
->asc
, ptr
->asc
) == 0)
union reptr
*rptr
, *trptr
;
for(lptr
= labtab
; lptr
< lab
; lptr
++) {
fprintf(stderr
, "Undefined label: %s\n", lptr
->asc
);
while(trptr
= rptr
->lb1
) {
rptr
->lb1
= lptr
->address
;
rptr
->lb1
= lptr
->address
;
register char c
, *ep
, *tsp
;
for(tsp
= cp
; *tsp
!= seof
; tsp
++) {
while((c
= *sp
++ & 0177) != seof
) {
if(c
== '\\' && *sp
== 'n') {
if((ep
[c
] = *tsp
++) == '\\' && *tsp
== 'n') {
if(ep
[c
] == seof
|| ep
[c
] == '\0')
for(c
= 0; !(c
& 0200); c
++)