Files
Digital-Research-Source-Code/CPM OPERATING SYSTEMS/CPM 68K/1.0X SOURCES/v102a/lo68/nuxi.c
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

78 lines
2.5 KiB
C

#include "cout.h"
long lseek();
main(argc,argv)
int argc;
char **argv;
{
register i,j,c,d;
long symseek; /* Symbol table seek addr */
int symlength; /* Symbol length (bytes) */
char symbuf[30000]; /* Symbol table buffer */
int fd; /* File descriptor */
if((fd=open(argv[1],2,1)) < 0) /* Open input file */
{
printf("Cannot open %s\n",argv[1]); /* Can't */
exit(); /* Just quit */
} /****************************/
if((i=read(fd,&couthd,HDSIZE)) != HDSIZE) /* Read file header */
{ /* Can't */
printf("Header read error\n"); /* Print message */
exit(); /* Then quit */
} /****************************/
symseek=couthd.ch_tsize+couthd.ch_dsize+HDSIZE;
if(couthd.ch_magic != MAGIC)
{
if(couthd.ch_magic == (MAGIC+1))
{
symseek += 8;
}
else
{
printf("File format error\n");
exit();
}
}
symlength = lseek(fd,symseek,0); /* Seek to sym begin */
if(symlength != symseek) /* OK? */
{
printf("Seek error\n"); /*No, quit */
exit(); /* */
}
symlength = couthd.ch_ssize; /* Fetch symbol length */
if(read(fd,&symbuf[0],symlength) != symlength)
{
printf("Symbol table read error\n");
}
for(i=0; i < symlength; i+=14)
{
for(j=0; j < 8; j+=2)
{
c = symbuf[j+i];
d = symbuf[j+i+1];
symbuf[j+i] = d;
symbuf[j+i+1] = c;
}
}
if(lseek(fd,symseek,0) != symseek)
{
printf("Seek error\n");
exit();
}
if(write(fd,&symbuf[0],symlength) != symlength)
{
printf("Symbol table write error\n");
exit();
}
close(fd);
exit(0);
}