#include "web2c.h"
/* 9999 */
#define bufsize 500
typedef schar ASCIIcode ;
typedef file_ptr /* of char */ textfile ;
schar history ;
ASCIIcode xord[128] ;
char xchr[128] ;
textfile docfile ;
textfile changefile ;
textfile progfile ;
ASCIIcode buffer[bufsize + 1] ;
integer line ;
integer otherline ;
integer templine ;
integer limit ;
boolean inputhasended ;
boolean changing ;
ASCIIcode changebuffer[bufsize + 1] ;
integer changelimit ;
schar state ;
char docfilename[121], changefilename[121], progfilename[121] ;
char progextension[121] ;
#include "makeprog.h"
error () {
{
if ( changing )
(void) Fputs( stdout , ". (change file " ) ;
else
(void) Fputs( stdout , ". (" ) ;
(void) fprintf( stdout , "%s%ld%c\n", "l." , (long)line , ')' ) ;
(void) putc( ' ' , stdout );
}
flush ( stdout ) ;
}
scanargs () {
integer docdotpos, dotpos, i, a, slashpos ;
char c ;
char fname[121] ;
boolean founddoc, foundchange ;
progextension [ 1 ] = 'p' ;
progextension [ 2 ] = 'r' ;
progextension [ 3 ] = 'o' ;
progextension [ 4 ] = 'g' ;
progextension [ 5 ] = ' ' ;
founddoc = false ;
foundchange = false ;
{register integer for_end; a = 1 ; for_end = argc - 1 ; if ( a <= for_end)
do
{
argv ( a , fname ) ;
if ( fname [ 1 ] != '-' )
{
if ( ! founddoc )
{
slashpos = 0 ;
dotpos = -1 ;
i = 1 ;
while ( ( fname [ i ] != ' ' ) && ( i <= 115 ) ) {
docfilename [ i ] = fname [ i ] ;
if ( fname [ i ] == '.' )
dotpos = i ;
else if ( fname [ i ] == '/' )
{
slashpos = i ;
dotpos = -1 ;
}
i = i + 1 ;
}
if ( dotpos == -1 )
{
dotpos = i ;
docfilename [ dotpos ] = '.' ;
docfilename [ dotpos + 1 ] = 'd' ;
docfilename [ dotpos + 2 ] = 'o' ;
docfilename [ dotpos + 3 ] = 'c' ;
docfilename [ dotpos + 4 ] = ' ' ;
}
dotpos = dotpos - slashpos ;
{register integer for_end; i = 1 ; for_end = dotpos ; if ( i <=
for_end) do
{
progfilename [ i ] = docfilename [ i + slashpos ] ;
}
while ( i++ < for_end ) ; }
docdotpos = dotpos ;
founddoc = true ;
}
else if ( ! foundchange )
{
dotpos = -1 ;
i = 1 ;
while ( ( fname [ i ] != ' ' ) && ( i <= 115 ) ) {
changefilename [ i ] = fname [ i ] ;
if ( fname [ i ] == '.' )
dotpos = i ;
else if ( fname [ i ] == '/' )
dotpos = -1 ;
i = i + 1 ;
}
if ( dotpos == -1 )
{
dotpos = i ;
changefilename [ dotpos ] = '.' ;
changefilename [ dotpos + 1 ] = 'c' ;
changefilename [ dotpos + 2 ] = 'h' ;
changefilename [ dotpos + 3 ] = ' ' ;
}
foundchange = true ;
}
else {
{
(void) putc('\n', stdout );
(void) Fputs( stdout , "! Usage: makeprog [-progext] docfile[.doc] [changefile[.ch]]" ) ;
}
error () ;
uexit ( 1 ) ;
}
}
else {
i = 1 ;
while ( ( i < 6 ) && ( fname [ i + 1 ] != ' ' ) ) {
progextension [ i ] = fname [ i + 1 ] ;
i = i + 1 ;
}
progextension [ i ] = ' ' ;
if ( i > 5 )
{
{
(void) putc('\n', stdout );
(void) Fputs( stdout , "! Usage: makeprog [-progext] docfile[.doc] [changefile[.ch]]" ) ;
}
error () ;
uexit ( 1 ) ;
}
}
}
while ( a++ < for_end ) ; }
if ( ! founddoc )
{
{
(void) putc('\n', stdout );
(void) Fputs( stdout , "! Usage: makeprog [-progext] docfile[.doc] [changefile[.ch]]" ) ;
}
error () ;
uexit ( 1 ) ;
}
{
i = 1 ;
if ( progextension [ 1 ] == ' ' )
progfilename [ dotpos ] = ' ' ;
else while ( progextension [ i ] != ' ' ) {
progfilename [ docdotpos + i ] = progextension [ i ] ;
i = i + 1 ;
}
}
if ( ! foundchange )
{
changefilename [ 1 ] = '/' ;
changefilename [ 2 ] = 'd' ;
changefilename [ 3 ] = 'e' ;
changefilename [ 4 ] = 'v' ;
changefilename [ 5 ] = '/' ;
changefilename [ 6 ] = 'n' ;
changefilename [ 7 ] = 'u' ;
changefilename [ 8 ] = 'l' ;
changefilename [ 9 ] = 'l' ;
changefilename [ 10 ] = ' ' ;
}
}
initialize () {
schar i ;
history = 0 ;
xchr [ 32 ] = ' ' ;
xchr [ 33 ] = '!' ;
xchr [ 34 ] = '"' ;
xchr [ 35 ] = '#' ;
xchr [ 36 ] = '$' ;
xchr [ 37 ] = '%' ;
xchr [ 38 ] = '&' ;
xchr [ 39 ] = '\'' ;
xchr [ 40 ] = '(' ;
xchr [ 41 ] = ')' ;
xchr [ 42 ] = '*' ;
xchr [ 43 ] = '+' ;
xchr [ 44 ] = ',' ;
xchr [ 45 ] = '-' ;
xchr [ 46 ] = '.' ;
xchr [ 47 ] = '/' ;
xchr [ 48 ] = '0' ;
xchr [ 49 ] = '1' ;
xchr [ 50 ] = '2' ;
xchr [ 51 ] = '3' ;
xchr [ 52 ] = '4' ;
xchr [ 53 ] = '5' ;
xchr [ 54 ] = '6' ;
xchr [ 55 ] = '7' ;
xchr [ 56 ] = '8' ;
xchr [ 57 ] = '9' ;
xchr [ 58 ] = ':' ;
xchr [ 59 ] = ';' ;
xchr [ 60 ] = '<' ;
xchr [ 61 ] = '=' ;
xchr [ 62 ] = '>' ;
xchr [ 63 ] = '?' ;
xchr [ 64 ] = '@' ;
xchr [ 65 ] = 'A' ;
xchr [ 66 ] = 'B' ;
xchr [ 67 ] = 'C' ;
xchr [ 68 ] = 'D' ;
xchr [ 69 ] = 'E' ;
xchr [ 70 ] = 'F' ;
xchr [ 71 ] = 'G' ;
xchr [ 72 ] = 'H' ;
xchr [ 73 ] = 'I' ;
xchr [ 74 ] = 'J' ;
xchr [ 75 ] = 'K' ;
xchr [ 76 ] = 'L' ;
xchr [ 77 ] = 'M' ;
xchr [ 78 ] = 'N' ;
xchr [ 79 ] = 'O' ;
xchr [ 80 ] = 'P' ;
xchr [ 81 ] = 'Q' ;
xchr [ 82 ] = 'R' ;
xchr [ 83 ] = 'S' ;
xchr [ 84 ] = 'T' ;
xchr [ 85 ] = 'U' ;
xchr [ 86 ] = 'V' ;
xchr [ 87 ] = 'W' ;
xchr [ 88 ] = 'X' ;
xchr [ 89 ] = 'Y' ;
xchr [ 90 ] = 'Z' ;
xchr [ 91 ] = '[' ;
xchr [ 92 ] = '\\' ;
xchr [ 93 ] = ']' ;
xchr [ 94 ] = '^' ;
xchr [ 95 ] = '_' ;
xchr [ 96 ] = '`' ;
xchr [ 97 ] = 'a' ;
xchr [ 98 ] = 'b' ;
xchr [ 99 ] = 'c' ;
xchr [ 100 ] = 'd' ;
xchr [ 101 ] = 'e' ;
xchr [ 102 ] = 'f' ;
xchr [ 103 ] = 'g' ;
xchr [ 104 ] = 'h' ;
xchr [ 105 ] = 'i' ;
xchr [ 106 ] = 'j' ;
xchr [ 107 ] = 'k' ;
xchr [ 108 ] = 'l' ;
xchr [ 109 ] = 'm' ;
xchr [ 110 ] = 'n' ;
xchr [ 111 ] = 'o' ;
xchr [ 112 ] = 'p' ;
xchr [ 113 ] = 'q' ;
xchr [ 114 ] = 'r' ;
xchr [ 115 ] = 's' ;
xchr [ 116 ] = 't' ;
xchr [ 117 ] = 'u' ;
xchr [ 118 ] = 'v' ;
xchr [ 119 ] = 'w' ;
xchr [ 120 ] = 'x' ;
xchr [ 121 ] = 'y' ;
xchr [ 122 ] = 'z' ;
xchr [ 123 ] = '{' ;
xchr [ 124 ] = '|' ;
xchr [ 125 ] = '}' ;
xchr [ 126 ] = '~' ;
xchr [ 0 ] = ' ' ;
xchr [ 127 ] = ' ' ;
{register integer for_end; i = 1 ; for_end = 31 ; if ( i <= for_end) do
xchr [ i ] = ' ' ;
while ( i++ < for_end ) ; }
xchr [ 9 ] = chr ( 9 ) ;
{register integer for_end; i = 0 ; for_end = 127 ; if ( i <= for_end) do
xord [ chr ( i ) ] = 32 ;
while ( i++ < for_end ) ; }
{register integer for_end; i = 1 ; for_end = 126 ; if ( i <= for_end) do
xord [ xchr [ i ] ] = i ;
while ( i++ < for_end ) ; }
scanargs () ;
reset ( docfile , docfilename ) ;
reset ( changefile , changefilename ) ;
rewrite ( progfile , progfilename ) ;
state = 2 ;
}
boolean zinputln ( f )
textfile f ;
{register boolean Result; integer finallimit ;
limit = 0 ;
finallimit = 0 ;
if ( feof ( f ) )
Result = false ;
else {
while ( ! eoln ( f ) ) {
buffer [ limit ] = xord [ getc ( f ) ] ;
limit = limit + 1 ;
if ( ( buffer [ limit - 1 ] != 32 ) && ( buffer [ limit - 1 ] != 9 ) )
finallimit = limit ;
if ( limit == bufsize )
{
while ( ! eoln ( f ) ) vgetc ( f ) ;
limit = limit - 1 ;
{
(void) putc('\n', stdout );
(void) Fputs( stdout , "! Input line too long" ) ;
}
error () ;
history = 2 ;
}
}
readln ( f ) ;
limit = finallimit ;
Result = true ;
}
return(Result) ;
}
boolean linesdontmatch () {
/* 10 */ register boolean Result; integer k ;
Result = true ;
if ( changelimit != limit )
goto lab10 ;
if ( limit > 0 )
{register integer for_end; k = 0 ; for_end = limit - 1 ; if ( k <= for_end)
do
if ( changebuffer [ k ] != buffer [ k ] )
goto lab10 ;
while ( k++ < for_end ) ; }
Result = false ;
lab10: ;
return(Result) ;
}
primethechangebuffer () {
/* 22 30 10 */ integer k ;
changelimit = 0 ;
while ( true ) {
line = line + 1 ;
if ( ! inputln ( changefile ) )
goto lab10 ;
if ( limit < 2 )
goto lab22 ;
if ( buffer [ 0 ] != 64 )
goto lab22 ;
if ( ( buffer [ 1 ] >= 88 ) && ( buffer [ 1 ] <= 90 ) )
buffer [ 1 ] = buffer [ 1 ] + 32 ;
if ( buffer [ 1 ] == 120 )
goto lab30 ;
if ( ( buffer [ 1 ] == 121 ) || ( buffer [ 1 ] == 122 ) )
{
{
(void) putc('\n', stdout );
(void) Fputs( stdout , "! Where is the matching @x?" ) ;
}
error () ;
history = 2 ;
}
lab22: ;
}
lab30: ;
do {
line = line + 1 ;
if ( ! inputln ( changefile ) )
{
{
{
(void) putc('\n', stdout );
(void) Fputs( stdout , "! Change file ended after @x" ) ;
}
error () ;
history = 2 ;
}
goto lab10 ;
}
} while ( ! ( limit > 0 ) ) ;
{
changelimit = limit ;
{register integer for_end; k = 0 ; for_end = limit - 1 ; if ( k <=
for_end) do
changebuffer [ k ] = buffer [ k ] ;
while ( k++ < for_end ) ; }
}
lab10: ;
}
checkchange () {
/* 10 */ integer n ;
integer k ;
if ( linesdontmatch () )
goto lab10 ;
n = 0 ;
while ( true ) {
{
changing = ! changing ;
templine = otherline ;
otherline = line ;
line = templine ;
}
line = line + 1 ;
if ( ! inputln ( changefile ) )
{
{
{
(void) putc('\n', stdout );
(void) Fputs( stdout , "! Change file ended before @y" ) ;
}
error () ;
history = 2 ;
}
changelimit = 0 ;
{
changing = ! changing ;
templine = otherline ;
otherline = line ;
line = templine ;
}
goto lab10 ;
}
if ( limit > 1 )
if ( buffer [ 0 ] == 64 )
{
if ( ( buffer [ 1 ] >= 88 ) && ( buffer [ 1 ] <= 90 ) )
buffer [ 1 ] = buffer [ 1 ] + 32 ;
if ( ( buffer [ 1 ] == 120 ) || ( buffer [ 1 ] == 122 ) )
{
{
(void) putc('\n', stdout );
(void) Fputs( stdout , "! Where is the matching @y?" ) ;
}
error () ;
history = 2 ;
}
else if ( buffer [ 1 ] == 121 )
{
if ( n > 0 )
{
{
(void) putc('\n', stdout );
(void) fprintf( stdout , "%s%ld%s", "! Hmm... " , (long)n , " of the preceding lines failed to match" ) ;
}
error () ;
history = 2 ;
}
goto lab10 ;
}
}
{
changelimit = limit ;
{register integer for_end; k = 0 ; for_end = limit - 1 ; if ( k <=
for_end) do
changebuffer [ k ] = buffer [ k ] ;
while ( k++ < for_end ) ; }
}
{
changing = ! changing ;
templine = otherline ;
otherline = line ;
line = templine ;
}
line = line + 1 ;
if ( ! inputln ( docfile ) )
{
{
{
(void) putc('\n', stdout );
(void) Fputs( stdout , "! CWEB file ended during a change" ) ;
}
error () ;
history = 2 ;
}
inputhasended = true ;
goto lab10 ;
}
if ( linesdontmatch () )
n = n + 1 ;
}
lab10: ;
}
getline () {
/* 20 */ lab20: if ( changing )
{
line = line + 1 ;
if ( ! inputln ( changefile ) )
{
{
{
(void) putc('\n', stdout );
(void) Fputs( stdout , "! Change file ended without @z" ) ;
}
error () ;
history = 2 ;
}
buffer [ 0 ] = 64 ;
buffer [ 1 ] = 122 ;
limit = 2 ;
}
if ( limit > 1 )
if ( buffer [ 0 ] == 64 )
{
if ( ( buffer [ 1 ] >= 88 ) && ( buffer [ 1 ] <= 90 ) )
buffer [ 1 ] = buffer [ 1 ] + 32 ;
if ( ( buffer [ 1 ] == 120 ) || ( buffer [ 1 ] == 121 ) )
{
{
(void) putc('\n', stdout );
(void) Fputs( stdout , "! Where is the matching @z?" ) ;
}
error () ;
history = 2 ;
}
else if ( buffer [ 1 ] == 122 )
{
primethechangebuffer () ;
{
changing = ! changing ;
templine = otherline ;
otherline = line ;
line = templine ;
}
}
}
}
if ( ! changing )
{
{
line = line + 1 ;
if ( ! inputln ( docfile ) )
inputhasended = true ;
else if ( changelimit > 0 )
checkchange () ;
}
if ( changing )
goto lab20 ;
}
buffer [ limit ] = 32 ;
if ( ( line % 500 ) == 0 )
{
(void) fprintf( stdout , "%ld", (long)line ) ;
flush ( stdout ) ;
}
else if ( ( line % 100 ) == 0 )
{
(void) putc( '.' , stdout );
flush ( stdout ) ;
}
}
putline () {
integer i ;
{register integer for_end; i = 0 ; for_end = limit - 1 ; if ( i <= for_end)
do
(void) putc( xchr [ buffer [ i ] ] , progfile );
while ( i++ < for_end ) ; }
(void) putc('\n', progfile );
}
main_body() {
initialize () ;
(void) fprintf( stdout , "%s\n", "This is MAKEPROG, C Version 1.0.1." ) ;
(void) fprintf( stdout , "%s\n", " (c) 1988,1990 by J.Schrod." ) ;
(void) fprintf( stdout , "%s\n", " All rights reserved." ) ;
{
line = 0 ;
otherline = 0 ;
changing = true ;
primethechangebuffer () ;
{
changing = ! changing ;
templine = otherline ;
otherline = line ;
line = templine ;
}
limit = 0 ;
buffer [ 0 ] = 32 ;
inputhasended = false ;
}
{
getline () ;
while ( ! inputhasended ) {
{
if ( buffer [ 0 ] == 92 )
if ( limit >= 10 )
{
if ( ( buffer [ 1 ] == 98 ) && ( buffer [ 2 ] == 101 ) && ( buffer [
3 ] == 103 ) && ( buffer [ 4 ] == 105 ) && ( buffer [ 5 ] == 110 )
&& ( buffer [ 6 ] == 112 ) && ( buffer [ 7 ] == 114 ) && ( buffer [
8 ] == 111 ) && ( buffer [ 9 ] == 103 ) && ( ( buffer [ 10 ] < 65 )
|| ( buffer [ 10 ] > 90 ) ) && ( ( buffer [ 10 ] < 97 ) || ( buffer
[ 10 ] > 122 ) ) )
state = 0 ;
}
else if ( limit >= 8 )
if ( ( buffer [ 1 ] == 101 ) && ( buffer [ 2 ] == 110 ) && ( buffer [
3 ] == 100 ) && ( buffer [ 4 ] == 112 ) && ( buffer [ 5 ] == 114 ) &&
( buffer [ 6 ] == 111 ) && ( buffer [ 7 ] == 103 ) && ( ( buffer [ 8 ]
== 32 ) || ( buffer [ 8 ] == 9 ) ) )
state = 2 ;
}
if ( state == 1 )
putline () ;
else if ( state == 0 )
state = 1 ;
getline () ;
}
if ( state == 1 )
{
{
(void) putc('\n', stdout );
(void) Fputs( stdout , "! Input has ended prematurely" ) ;
}
error () ;
history = 2 ;
}
}
{
if ( changelimit != 0 )
{
{register integer for_end; limit = 0 ; for_end = changelimit ; if (
limit <= for_end) do
buffer [ limit ] = changebuffer [ limit ] ;
while ( limit++ < for_end ) ; }
limit = changelimit ;
changing = true ;
line = otherline ;
{
{
(void) putc('\n', stdout );
(void) Fputs( stdout , "! Change file entry did not match" ) ;
}
error () ;
history = 2 ;
}
}
}
lab9999: switch ( history )
{case 0 :
{
(void) putc('\n', stdout );
(void) Fputs( stdout , "(No errors were found.)" ) ;
}
break ;
case 1 :
{
(void) putc('\n', stdout );
(void) Fputs( stdout , "(Did you see the warning message above?)" ) ;
}
break ;
case 2 :
{
(void) putc('\n', stdout );
(void) Fputs( stdout , "(Pardon me, but I think I spotted something wrong.)" )
;
}
break ;
case 3 :
{
(void) putc('\n', stdout );
(void) Fputs( stdout , "(That was a fatal error, my friend.)" ) ;
}
break ;
}
(void) putc('\n', stdout );
if ( ( history != 0 ) && ( history != 1 ) )
exit ( 1 ) ;
else exit ( 0 ) ;
}