home *** CD-ROM | disk | FTP | other *** search
- /*
- 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 <filename>");
- 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';
- }