/* header file for CP/M i/o routines for Z-80 C */ /* get basic definitions */ #ifndef _STDDEF typedef int ptrdiff_t; /* result type of pointer difference */ typedef unsigned size_t; /* type yielded by sizeof */ #define _STDDEF #ifndef NULL #define NULL ((void *)0) #endif NULL extern int errno; /* system error number */ #endif _STDDEF /* hitech.h has definitions for uchar, ushort etc */ #include #if z80 #define MAXFILE 8 /* max number of files open */ #else z80 #define MAXFILE 15 /* max number of files open */ #endif z80 #define SECSIZE 128 /* no. of bytes per sector */ extern struct fcb { uchar dr; /* drive code */ char name[8]; /* file name */ char ft[3]; /* file type */ uchar ex; /* file extent */ char fil[2]; /* not used */ char rc; /* number of records in present extent */ char dm[16]; /* CP/M disk map */ char nr; /* next record to read or write */ uchar ranrec[3]; /* random record number (24 bit no. ) */ long rwp; /* read/write pointer in bytes */ uchar use; /* use flag */ uchar uid; /* user id belonging to this file */ } _fcb[MAXFILE]; extern char bdos(int, ...); extern struct fcb * getfcb(void); extern short bdoshl(int, ...); /* bdos call returning value in hl */ extern uchar getuid(void); extern void setuid(int); extern uchar setfcb(struct fcb *, char *); /* flag values in fcb.use */ #define U_READ 1 /* file open for reading */ #define U_WRITE 2 /* file open for writing */ #define U_RDWR 3 /* open for read and write */ #define U_CON 4 /* device is console */ #define U_RDR 5 /* device is reader */ #define U_PUN 6 /* device is punch */ #define U_LST 7 /* list device */ /* special character values */ #define CPMETX 032 /* ctrl-Z, CP/M end of file for text */ #define CPMRBT 003 /* ctrl-C, reboot CPM */ #define MPM 0x100 /* bit to test for MP/M */ #define CCPM 0x400 /* bit to test for CCP/M */ #define ISMPM() (bdoshl(CPMVERS)&MPM) /* macro to test for MPM */ /* what to do after you hit return */ #define EXIT (*(int (*)())0) /* where to go to reboot CP/M */ /* bdos calls etc. */ #define CPMRCON 1 /* read console */ #define CPMWCON 2 /* write console */ #define CPMRRDR 3 /* read reader */ #define CPMWPUN 4 /* write punch */ #define CPMWLST 5 /* write list */ #define CPMDCIO 6 /* direct console I/O */ #define CPMGIOB 7 /* get I/O byte */ #define CPMSIOB 8 /* set I/O byte */ #define CPMRCOB 10 /* read console buffered */ #define CPMICON 11 /* interrogate console ready */ #define CPMVERS 12 /* return version number */ /* BDOS calls */ #define CPMRDS 13 /* reset disk system */ #define CPMLGIN 14 /* log in and select disk */ #define CPMOPN 15 /* open file */ #define CPMCLS 16 /* close file */ #define CPMFFST 17 /* find first */ #define CPMFNXT 18 /* find next */ #define CPMDEL 19 /* delete file */ #define CPMREAD 20 /* read next record */ #define CPMWRIT 21 /* write next record */ #define CPMMAKE 22 /* create file */ #define CPMREN 23 /* rename file */ #define CPMILOG 24 /* get bit map of logged in disks */ #define CPMIDRV 25 /* interrogate drive number */ #define CPMSDMA 26 /* set DMA address for i/o */ #define CPMSUID 32 /* set/get user id */ #define CPMRRAN 33 /* read random record */ #define CPMWRAN 34 /* write random record */ #define CPMCFS 35 /* compute file size */ #define CPMDSEG 51 /* set DMA segment */