Relay-Version: version B 2.10 5/3/83; site utzoo.UUCP Posting-Version: version B 2.10 5/3/83; site aplvax.UUCP Path: utzoo!watmath!clyde!burl!mgnetp!ihnp4!houxm!hogpc!houti!ariel!vax135!cornell!uw-beaver!tektronix!hplabs!hao!seismo!rlgvax!cvl!umcp-cs!aplvax!lwt1 From: lwt1@aplvax.UUCP Newsgroups: net.sources Subject: UNIX FORTH for the VAX (part 5 of 8) Message-ID: <674@aplvax.UUCP> Date: Fri, 22-Jun-84 14:44:02 EDT Article-I.D.: aplvax.674 Posted: Fri Jun 22 14:44:02 1984 Date-Received: Wed, 27-Jun-84 09:25:44 EDT Organization: JHU/Applied Physics Lab, Laurel, MD Lines: 162 Here is part 5 of 8 of the source for FORTH for the VAX. Delete everything thru the "-- cut here --" line, and extract with 'sh': sh part1 part2 ... part7 where 'part?' are whatever you've named the files. Note the copyright notice at the end of README. Please let us know how things go. While we can't support this software, we'll be posting bug fixes/upgrades to net.sources as time permits. Have fun! -John Hayes Johns Hopkins University Applied Physics Laboratory ... seismo!umcp-cs!aplvax!lwt1 ---------------------------------- cut here ---------------------------------- echo x - auto cat >auto <<'!E!O!F' " META1" FLOAD " METAASM" FLOAD " newforth" -1 CREAT CLOSE " newforth" 2 OPEN DUP . FORTH FILED ! 0 WRN ! HOST 0 RAM HEADS METAMAP METAWARN " SYS:ASM" FLOAD " META2" FLOAD " SYS:SRC" FLOAD DECIMAL 10000 CLEANUP !E!O!F echo x - format.c cat >format.c <<'!E!O!F' /* * Use: * format [-l num] [-t file] [file file ... ] * * This program formats records of arbitrary size and pretty-prints * them. Records are delimited by '\'. A title is printed on each * page and the records are separated by a line of dashes. Records * are prevented from spanning page boundaries. The -l flag is used * to specify the number of lines per page of your output device. * The default is 63. The -t flag is used to specify a file that * contains a title that is to be printed on the top of each page. */ #include #define MAXLINES 15 #define LINELENGTH 120 char title[10*LINELENGTH]=""; /* default: no title */ int titlelen=0; int linesppage=63; /* default: 63 lines per page */ main(argc,argv) int argc; char *argv[]; { char *s; FILE *fp; while (--argc>0 && **++argv=='-') switch (*(*argv+1)){ case 't': argc--; argv++; if ((fp=fopen(*argv,"r"))!=NULL){ s=title; while (fgets(s,LINELENGTH,fp)!=NULL){ s+=strlen(s); titlelen++; } fclose(fp); } else fprintf(stderr, "format: can't open %s\n",*argv); break; case 'l': argc--; argv++; if (sscanf(*argv,"%d",&linesppage)==0) fprintf(stderr, "format: %s isn't a number\n",*argv); break; default: fprintf(stderr, "format: bad flag %c\n",*(*argv+1)); break; } if (argc>0) while (argc-- > 0){ if ((fp=fopen(*argv,"r"))!=NULL){ format(fp); fclose(fp); } else fprintf(stderr, "format: can't open %s\n",*argv); argv++; } else format(stdin); } format(input) FILE *input; { char buf[MAXLINES*LINELENGTH]; char *bufp=buf; int nextline=0; while(fgets(bufp,LINELENGTH,input)!=NULL){ if(*bufp!='\\'){ nextline++; bufp+=strlen(bufp); } else { *bufp='\0'; printrec(buf,nextline); bufp=buf; nextline=0; } } } printrec(lines,nlines) char *lines; int nlines; { static int linect=1000; /* absurd number forces title on first page */ int i; if (nlines+1 > linesppage-linect){ printf("\f%s",title); linect=titlelen; } for (i=1; i<80; i++) putchar('-'); printf("\n%s",lines); linect+=nlines+1; } !E!O!F echo x - forth.1h cat >forth.1h <<'!E!O!F' .TH FORTH 1H .SH NAME forth \- invoke a forth process. .SH SYNOPSIS forth .SH DESCRIPTION Forth invokes a FORTH-language process. The process reads commands from the standard input and sends results to the standard output. If the standard input is a terminal, an interactive forth session results. This is a subset of FORTH-83 diverging only in the I/O. .SH AUTHORS J. Hayes !E!O!F