mirror of
https://github.com/SEPPDROID/Digital-Research-Source-Code.git
synced 2025-10-26 18:04:07 +00:00
322 lines
10 KiB
C
322 lines
10 KiB
C
#define LIBVN "1.0" /* Library Version Number */
|
||
/* 12:36 02/21/83 */
|
||
|
||
/* This file contains groups of useful definitions.
|
||
It should be included at the front of any programs
|
||
that use the functions in BLIB. */
|
||
|
||
|
||
/* Definitions to make minor language modifications to C. */
|
||
#define short char /* Short is not supported directly */
|
||
|
||
/* one of the functions (bv_make) in the library uses the BDS C
|
||
function, alloc, to allocate memory. The following definitions
|
||
are provided for alloc. */
|
||
|
||
struct _header /* header for block of memory allocated */
|
||
{
|
||
struct _header *_ptr; /* pointer to the next header in the chain */
|
||
unsigned _size; /* number of bytes in the allocated block */
|
||
};
|
||
struct _header _base; /* declare the first header of the chain */
|
||
struct _header *_allocp; /* used by alloc() and free() functions */
|
||
|
||
|
||
/* BDOS Function Call Numbers. */
|
||
|
||
#define SETDISK 14 /* Set (Select) Disk */
|
||
#define SEARCHF 17 /* Search First */
|
||
#define SEARCHN 18 /* Search Next */
|
||
#define DELETEF 19 /* Delete File */
|
||
#define GETDISK 25 /* Get Default Disk (Currently Logged In) */
|
||
#define SETDMA 26 /* Set DMA (Read/Write) address */
|
||
#define GETDPARM 31 /* Get Disk Parameter Block address */
|
||
#define GETUSER 32 /* Get Current User Number */
|
||
#define SETUSER 32 /* Set Current User Number */
|
||
|
||
|
||
/* Direct BIOS Calls.
|
||
These definitions are for direct calls into the BIOS.
|
||
WARNING - Using these makes program less transportable.
|
||
Each symbol is related to its corresponding Jump in the
|
||
BIOS Jump Vector.
|
||
Only the more useful entries are defined. */
|
||
|
||
#define CONST 2 /* Console Status */
|
||
#define CONIN 3 /* Console Input */
|
||
#define CONOUT 4 /* Console Output */
|
||
#define LIST 5 /* List Output */
|
||
#define AUXOUT 6 /* Auxiliary Output */
|
||
#define AUXIN 7 /* Auxiliary Input */
|
||
|
||
#define HOME 8 /* Home disk */
|
||
#define SELDSK 9 /* Select logical disk */
|
||
#define SETTRK 10 /* Set track */
|
||
#define SETSEC 11 /* Set sector */
|
||
#define SETDMA 12 /* Set DMA Address */
|
||
#define DREAD 13 /* Disk read */
|
||
#define DWRITE 14 /* Disk write */
|
||
#define LISTST 15 /* List status */
|
||
#define SECTRN 16 /* Sector translate */
|
||
#define AUXIST 17 /* Auxiliary Input Status */
|
||
#define AUXOST 18 /* Auxiliary Output Status */
|
||
|
||
/* "Private" entries in Jump Vector */
|
||
#define CIOINIT 19 /* Specific Character I/O Initialization */
|
||
#define SETDOG 20 /* Set Watchdog timer */
|
||
#define CBGADDR 21 /* Configuration Block, Get Address */
|
||
|
||
|
||
/* defines for accessing the Configuration Block */
|
||
|
||
#define CB_GET 21 /* bios jump number to access routine */
|
||
#define DEV_INIT 19 /* bios jump to do device initialization */
|
||
|
||
#define CB_DATE 0 /* date in ASCII */
|
||
#define CB_TIMEA 1 /* time in ASCII */
|
||
#define CB_DTFLAGS 2 /* date, time flags */
|
||
#define TIME_SET 0x01 /* this bit NZ means date has been set */
|
||
#define DATE_SET 0x02 /* this bit NZ means time has been set */
|
||
|
||
#define CB_FIP 3 /* forced input pointer */
|
||
#define CB_SUM 4 /* system startup message */
|
||
|
||
#define CB_CI 5 /* console input */
|
||
#define CB_CO 6 /* console output */
|
||
#define CB_AI 7 /* auxiliary input */
|
||
#define CB_AO 8 /* auxiliary output */
|
||
#define CB_LI 9 /* list input */
|
||
#define CB_LO 10 /* list output */
|
||
|
||
#define CB_DTA 11 /* device table addresses */
|
||
#define CB_C1224 12 /* clock 12/24 format flag */
|
||
#define CB_RTCTR 13 /* real time clock tick rate (per second) */
|
||
|
||
#define CB_WDC 14 /* watchdog count */
|
||
#define CB_WDA 15 /* watchdog address */
|
||
|
||
#define CB_FKT 16 /* function key table */
|
||
#define CB_COET 17 /* console output escape table */
|
||
|
||
#define CB_D0_IS 18 /* device 0 initialization stream */
|
||
#define CB_D0_BRC 19 /* device 0 baud rate constant */
|
||
|
||
#define CB_D1_IS 20 /* device 1 initialization stream */
|
||
#define CB_D1_BRC 21 /* device 1 baud rate constant */
|
||
|
||
#define CB_D2_IS 22 /* device 2 initialization stream */
|
||
#define CB_D2_BRC 23 /* device 2 baud rate constant */
|
||
|
||
#define CB_IV 24 /* interrupt vector */
|
||
#define CB_LTCBO 25 /* long term config. block offset */
|
||
#define CB_LTCBL 26 /* long term config. block length */
|
||
|
||
#define CB_PUBF 27 /* public files flag */
|
||
#define CB_MCBUF 28 /* multi-command buffer */
|
||
#define CB_POLLC 29 /* polled console flag */
|
||
|
||
|
||
/* device numbers and names for physical devices */
|
||
/* NOTE : Change these definitions for your computer system */
|
||
|
||
#define T_DEVN 0 /* Terminal */
|
||
#define M_DEVN 1 /* Modem */
|
||
#define P_DEVN 2 /* Printer */
|
||
|
||
#define MAXPDEV 2 /* maximum physical device number */
|
||
|
||
/* names for the physical devices */
|
||
#define PN_T "TERMINAL"
|
||
#define PN_M "MODEM"
|
||
#define PN_P "PRINTER"
|
||
|
||
/* structure and definitions for function keys */
|
||
|
||
#define FK_ILENGTH 2 /* number of chars. input when f-key pressed
|
||
NOTE : This does NOT include the ESCAPE */
|
||
#define FK_LENGTH 16 /* length of string (not including fk_term) */
|
||
#define FK_ENTRIES 18 /* number of function key entries in table */
|
||
|
||
struct _fkt /* function key table */
|
||
{
|
||
char fk_input[FK_ILENGTH]; /* lead-in character is not in table */
|
||
char fk_output[FK_LENGTH]; /* output character string */
|
||
char fk_term; /* safety terminating character */
|
||
};
|
||
|
||
|
||
/* definitions and structure for device tables */
|
||
|
||
/* protocol bits */
|
||
/* Note : if the most significant bit is
|
||
set = 1, then the set_proto function
|
||
will logically OR in the value. This
|
||
permits Input DTR to co-exist with
|
||
Xon or Etx protocol. */
|
||
|
||
#define DT_ODTR 0x8004 /* output dtr high to send (OR'ed in) */
|
||
#define DT_OXON 0x0008 /* output xon */
|
||
#define DT_OETX 0x0010 /* output etx/ack */
|
||
|
||
#define DT_IRTS 0x8040 /* input RTS (OR'ed in) */
|
||
#define DT_IXON 0x0080 /* input xon */
|
||
|
||
#define ALLPROTO 0xDC /* all protocols combined */
|
||
|
||
struct _dt /* device table */
|
||
{
|
||
char dt_f1[14]; /* filler */
|
||
char dt_st1; /* status byte 1 - has protocol flags */
|
||
char dt_st2; /* status byte 2 */
|
||
unsigned dt_f2; /* filler */
|
||
unsigned dt_etxml; /* etx/ack message length */
|
||
char dt_f3[12]; /* filler */
|
||
} ;
|
||
|
||
|
||
/* Values returned by the comp_fname (compare file name) */
|
||
|
||
#define NAME_EQ 0 /* names equal */
|
||
#define NAME_LT 1 /* name less than mask */
|
||
#define NAME_GT 2 /* name greater than mask */
|
||
#define NAME_NE 3 /* name not equal (and comparison ambiguous) */
|
||
|
||
|
||
/* Structure for Standard CP/M File Control Block */
|
||
|
||
#define FCBSIZE 36 /* define the overall length of an FCB */
|
||
|
||
struct _fcb
|
||
{
|
||
short fcb_disk; /* logical disk (0 = default) */
|
||
char fcb_fname[11]; /* file name, type (with attributes) */
|
||
short fcb_extent; /* current extent */
|
||
unsigned fcb_s12; /* reserved for CP/M */
|
||
short fcb_reccnt; /* record count used in current extent */
|
||
union /* allocation blocks can be either */
|
||
{ /* single or double bytes */
|
||
short fcbab_short[16];
|
||
unsigned fcbab_long[8];
|
||
} _fcbab;
|
||
short fcb_currec; /* current record within extent */
|
||
char fcb_ranrec[3]; /* record for random read/write */
|
||
};
|
||
|
||
|
||
|
||
|
||
/* parameter block used for calls to the directory management routines */
|
||
|
||
#define DIR_BSZ 128 /* directory buffer size */
|
||
|
||
struct _dirpb
|
||
{
|
||
short dp_open; /* 0 to request directory to be opened */
|
||
short dp_end; /* NZ when at end of directory */
|
||
short dp_write; /* NZ to write current sector to disk */
|
||
struct _dir *dp_entry; /* pointer to directory entry in buffer */
|
||
char dp_buffer [DIR_BSZ]; /* directory sector buffer */
|
||
char dp_disk; /* current logical disk */
|
||
int dp_track; /* start track */
|
||
int dp_sector; /* start sector */
|
||
int dp_nument; /* number of directory entries */
|
||
int dp_entrem; /* entries remaining to process */
|
||
int dp_sptrk; /* number of sectors per track */
|
||
int dp_nabpde; /* number of allocation blocks per dir. entry */
|
||
unsigned dp_nab; /* number of allocation blocks */
|
||
int dp_absize; /* allocation block size (in Kbytes) */
|
||
};
|
||
|
||
/* The err_dir function is used to report errors found by the
|
||
directory management routines, open_dir and rw_dir.
|
||
Err_dir needs an parameter to define the operation being
|
||
performed when the error occurred. The following #defines
|
||
represent the operations possible. */
|
||
|
||
#define W_DIR 0 /* Writing Directory */
|
||
#define R_DIR 1 /* Reading Directory */
|
||
#define O_DIR 2 /* Opening Directory */
|
||
|
||
|
||
/* disk parameter block maintained by CPM */
|
||
|
||
struct _dpb
|
||
{
|
||
unsigned dpb_sptrk; /* sectors per track */
|
||
short dpb_bshift; /* block shift */
|
||
short dpb_bmask; /* block mask */
|
||
short dpb_emask; /* extent mask */
|
||
unsigned dpb_maxabn; /* maximum allocation block number */
|
||
unsigned dpb_maxden; /* maximum directory entry number */
|
||
short dpb_rab0; /* allocation blocks reserved for */
|
||
short dpb_rab1; /* directory blocks */
|
||
unsigned dpb_diskca; /* disk changed workarea */
|
||
unsigned dpb_trkoff; /* track offset */
|
||
};
|
||
|
||
|
||
/* disk directory entry format */
|
||
|
||
struct _dir {
|
||
char de_userno; /* user number or 0xE5 if free entry */
|
||
char de_fname[11]; /* file name [8] and type [3] */
|
||
int de_extent; /* extent number of this entry */
|
||
int de_reccnt; /* number of 128-byte records used in last
|
||
allocation block */
|
||
union /* allocation blocks can be either */
|
||
{ /* single or double bytes */
|
||
short de_short[16];
|
||
unsigned de_long[8];
|
||
} _dirab;
|
||
};
|
||
|
||
/* disk request parameters for BIOS-level Read/Writes */
|
||
|
||
struct _drb
|
||
{
|
||
short dr_disk; /* logical disk A = 0, B = 1... */
|
||
unsigned dr_track; /* track (for SETTRK) */
|
||
unsigned dr_sector; /* sector (for SETSEC) */
|
||
char *dr_buffer; /* buffer address (for SETDMA) */
|
||
} ;
|
||
|
||
|
||
/* search control block used by directory scanning functions */
|
||
struct _scb
|
||
{
|
||
short scb_userno; /* user number(s) to match */
|
||
char scb_fname[11]; /* file name and type */
|
||
short scb_extent; /* extent number */
|
||
char unused[19]; /* dummy bytes to make this appear like
|
||
a file control block */
|
||
short scb_length; /* number of bytes to compare */
|
||
short scb_disk; /* current disk to be searched */
|
||
unsigned scb_adisks; /* bit map of disks to be searched.
|
||
The right-most bit is for disk A:. */
|
||
} ;
|
||
|
||
|
||
/* code table related definitions */
|
||
|
||
#define CT_SNF 0xFFFF /* String Not Found */
|
||
|
||
struct _ct /* define structure of code table */
|
||
{
|
||
unsigned _ct_code; /* code value */
|
||
char *_ct_sp; /* string pointer */
|
||
};
|
||
|
||
|
||
/* Structure for bit-vectors */
|
||
|
||
struct _bv
|
||
{
|
||
unsigned bv_bytes; /* number of bytes in the vector */
|
||
char *bv_bits; /* pointer to the first byte in the vector */
|
||
char *bv_end; /* pointer to byte following bit vector */
|
||
} ;
|
||
|
||
|
||
|
||
/* End of LIBRARY.H */
|
||
|