home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Interactive Guide
/
c-cplusplus-interactive-guide.iso
/
c_ref
/
csource3
/
104_01
/
submit.c
< prev
next >
Wrap
Text File
|
1979-12-31
|
7KB
|
279 lines
/********************************************************/
/* */
/* copyright(c) 1981 By Mike Bernson */
/* */
/* submit command for cpm 2.x */
/* read input file and convert to $$$.sub with */
/* $1-$9 to pram from comand line and convert */
/* ^a to control character */
/* */
/********************************************************/
#define ERROR -1 /* error return value */
#define LF 0x0a /* value used for line feed */
#define CR 0x0d /* value used for return */
#define ENDFILE 0x1a /* value used for end of file */
char infcb[36]; /* pointer to input fcb */
char outfcb[36]; /* output fcb */
char *prt; /* just a spare pointer */
int inpoff; /* input buffer offset */
int outoff; /* output buffer offset */
int line; /* current line number */
char inbuff[128]; /* input buffer */
char outbuff[17000]; /* output buffer */
/********************************************************/
/* */
/* main */
/* */
/* function: open input and output data file */
/* also process data and output */
/* data to $$$.sub and set loc 8 ff*/
/* */
/* Date written: Jan 28, 1981 by Mike Bernson */
/* */
/********************************************************/
main(argc,argv)
int argc; /* number of arg on command line +1 */
int argv[]; /* pointer to each arg on command line */
{
char filename[132]; /* hold input file name */
strcpy(filename,argv[1]);
strcat(filename,".sub");
if (open(infcb,filename) == ERROR) {
infcb[0]=1; /* try drive a */
if (bdos(15,infcb) == 0xff) {
puts("Input file not found");
exit();
}
}
for(line=argc; line<12; argv[line++]="");
inpoff=128;
line=1;
/* process input file and write output */
while(1) {
doinput(argv+1);
dooutput();
}
}
/********************************************************/
/* */
/* doinput */
/* */
/* function: to proccess input buffer and */
/* change $1-$9 to text needed and */
/* convert '^'a to control char */
/* */
/* date written Jan 28, 1981 By Mike Bernson */
/* */
/********************************************************/
doinput(parm)
int parm[];
{
int current; /* current character working on */
outoff=1; /* set output offset to zero */
/* pick up 1 line of input */
while(outoff<120) {
/* get charcter and see what need to be done */
switch(current=getbuff()) {
/* end of file */
case ENDFILE :
done();
/* '$' can be $1-$9 or $$ */
case '$' :
if ((current=getbuff())=='$') {
putbuff('$');
break;
}
if (current>='0' && current<='9') {
prt=parm[current-'0'];
while(*prt) putbuff(*prt++);
break;
}
error("Invalid parmeter");
break;
/* check for control chraracter */
case '^' :
current=getbuff();
if (current>='A' && current<='Z')
putbuff(current-'@');
else error("Invalid control character ");
break;
/* check for end of line */
case CR :
return;
/* line feed ingore */
case LF :
break;
/* must be a viald cjaracter put in output buffer */
default:
putbuff(current);
}}
}
/********************************************************/
/* */
/* dooutput */
/* */
/* function: to write output record to disk */
/* put character count at offset 0 */
/* */
/* date written: dec 16, 1980 By Mike Bernson */
/* */
/********************************************************/
dooutput()
{
outbuff[(line-1)*128]=outoff-1; /* character count */
/* zero buffer till end */
while(outoff<128) putbuff(0);
if (++line>148) error("Too many lines");
}
/********************************************************/
/* */
/* done */
/* */
/* function: to write output buffer out */
/* in backward record format */
/* */
/* Date written: Dec 16, 1980 By Mike Bernson */
/* */
/********************************************************/
done()
{
char temp;
/* create output file on disk a */
if (open(outfcb,"A:$$$.SUB") != ERROR)
outfcb[32]=outfcb[15];
else if (create(outfcb,"A:$$$.SUB") == ERROR) {
puts("Output File not created");
exit();
}
while(--line) {
if (write(outfcb,outbuff+128*(line-1),1) == ERROR) {
error("Disk is Full");
exit();
}
}
close(outfcb);
prt=8;
*prt=255;
exit();
}
/********************************************************/
/* */
/* getbuff */
/* */
/* function: to getn next character from */
/* from input buffer and convert */
/* to upper case */
/* */
/* date written: Dec 16, 1980 by Mike Bernson */
/* */
/********************************************************/
getbuff()
{
if (inpoff == 128) {
if (read(infcb,inbuff,1) == ERROR) return ENDFILE;
inpoff=0;
}
return toupper(inbuff[inpoff++]);
}
/********************************************************/
/* */
/* putbuff */
/* */
/* function: to write chracter to output */
/* buff and inc offset */
/* */
/* input: character to write */
/* */
/* date written: Dec 16, 1980 By Mike Bernson */
/* */
/********************************************************/
putbuff(data)
char data;
{
outbuff[(line-1)*128+outoff++]=data;
}
/********************************************************/
/* */
/* error */
/* */
/* function: to print error message follow */
/* by at line (line number) */
/* */
/* date written: dec 16, 1980 By Mike Bernson */
/* */
/********************************************************/
error(msg)
char *msg;
{
puts(msg); /* print error message */
puts(" at line "); /* print "at line" */
outdec(line); /* print line number */
exit() ; /* end back to cpm */
}
/********************************************************/
/* */
/* outdec */
/* */
/* function: to output number in dec from */
/* to console */
/* */
/* date written: Dec 16, 1980 By Mike Bernson */
/* */
/********************************************************/
outdec(number)
int number;
{
char zero,num;
int place;
place=10000;
zero=0;
while(place>0) {
num=number/place+'0'; /* get current digit */
if (num != '0' || place ==1 || zero) {
zero=1; /* set zero suppress */
putch(num); /* print character */
}
number=number % place;
place=place/10;
}
}
place=place/10;
}
}
10;
}
}
;
place=place/10;