/* LOAD.C written by Leo Kenen (I think --LZ) Works like the standard CP/M LOAD.COM utility, except it's written in C. */ #include "bdscio.h" main(argc,argv) int argc; char **argv; { char buf[BUFSIZ], obuf[BUFSIZ]; int lfd, ofd; char name[20], oname[20]; if (!(--argc)) { printf("Useage:load "); exit(); } strcpy(name,argv[1]); lfd = fopen(name,buf); if (lfd == ERROR) { strcat(name,".HEX"); lfd = fopen(name,buf); if (lfd == ERROR) { printf("File not found.\n"); exit(); } } /* Open the output file */ strcpy(oname,argv[1]); strip(oname); strcat(oname,".OBJ"); ofd = fcreat(oname,obuf); if (ofd == ERROR) { printf("Can not create output file"); exit(); } load(buf,obuf); /* DO the load operation to fname.obj */ fflush(obuf); fclose(buf); fclose(obuf); } load(fb,ofb) char fb[], ofb[]; { unsigned address; int bytes, chksum, count, foo; char ch; while((ch=getc(fb)) != ':' ); while((bytes=rdhex(fb)) != 0 ) { address = rdword(fb); foo = rdhex(fb); for (count=1;count<=bytes;count++) putc(rdhex(fb),ofb); foo = rdhex(fb); while((ch=getc(fb)) != ':'); } } rdhex(fbuf) char fbuf[]; { char first, second; if (ishex(first=getc(fbuf)) && ishex(second=getc(fbuf))) return((tohex(first)*16)+tohex(second)); else { printf("\nBad hex digit, error.\n"); exit(); } } rdword(fb) char fb[]; { return((rdhex(fb)<<8)+rdhex(fb)); } /* Remove anything after a . from a file name */ strip(s) char *s; { while ((*s != '.') && (*s)) *s++; *s = '\0'; }  .