/* h8dls - This program opens a file in "H8D" format and ** lists the directory of the disk image ** ** Usage: h8dls ** ** Version 1.0 ** ** Compiled with Software Toolworks C/80 V. 3.0 ** ** Glenn Roberts 19 October 2013 */ /* include float/long printf code */ #include "fprintf.c" /* seek.c needed for random I/O */ #include "seek.c" /* buffer used for read/write */ #define BUFFSIZE 256 char rwbuff[BUFFSIZE]; /* Disk info structure - contained on sector 9 */ struct dkinfo { char volser; /* Serial number */ int idate; /* Date INITed */ int dirsector; /* Start of DIRectory */ int grtsector; /* GRT sector */ char spg; /* sectors per group */ char voltype; /* volume type */ char initver; /* INIT version used */ int rgtsector; /* RGT sector */ int volsize; /* volume size */ int sectsize; /* physical sector size */ char flags; /* flags */ char label[60]; /* disk label */ int reserved; /* reserved */ char spt; /* sectors per track */ char unused[176]; /* filler */ }dkbuff; /* hdir - perform directory function on the specified file */ hdir(fname) char *fname; { int i, ch; char *s, *d; if((ch = fopen(fname, "rb")) == 0) printf("Unable to open source file %s\n", fname); else { /* File open, test if proper H8D format by examining ** first few bytes for proper signature */ read(ch, rwbuff, BUFFSIZE); if ( ( rwbuff[0] == 0xFFC3 ) && ( rwbuff[1] == 0xFFA0 ) && ( rwbuff[2] == 0x0022 ) && ( rwbuff[3] == 0x0020 ) ) { /* have valid file - examine sector 10 for key info */ seek(ch, 0x0900, 0); read(ch, rwbuff, BUFFSIZE); s = rwbuff; d = (char *) &dkbuff; /* copy into dkinfo structure */ for (i=0; i0x1F) && (c<0x7F)); } main(argc,argv) int argc; char *argv[]; { if (argc < 2) printf("Usage: %s \n", argv[0]); else { hdir(argv[1]); printdir(); } } #include "stdlib.c"