text: /*
  	The BDS C Standard I/O header file --  v1.45	11/12/81
  
  	This file contains global definitions, for use in all C programs
  	in PLACE of (yechhh) CONSTANTS. Characteristics of your system such
  	as video screen size, interface port numbers and masks, buffered I/O
  	allocations, etc., should all be configured just once within this
  	file. Any program which needs them should contain the preprocessor
  	directive:
  
  		#include "bdscio.h"
  
  	near the beginning. 
  	Go through and set all this stuff as soon as you get the package,
  	and most terminal-dependent sample programs should run much better.
  */
  
  
  /*
  	Some console (video) terminal characteristics:
  	(pre-configured for H19/Z19/H89/Z89)
  */
  
  #define TWIDTH	80	/* # of columns	*/
  #define TLENGTH	24	/* # of lines	*/
  #define CLEARS	"\033E"	/* String to clear screen on console	*/
  #define INTOREV	"\033p"	/* String to switch console into reverse video	*/
  #define OUTAREV "\033q"	/* String to switch console OUT of reverse video  */
  #define CURSOROFF "\033x5"	/* String to turn cursor off	*/
  #define CURSORON "\033y5"	/* String to turn cursor on	*/
  #define ESC	'\033'	/* Standard ASCII 'escape' character	*/
  
  /*
  	Console serial port characteristics:
  */
  
  #define CSTAT	0355	/* status port	*/
  #define CDATA	0350	/* data port	*/
  #define CIMASK	0x01	/* input data ready mask   */
  #define COMASK	0x20	/* output data ready mask  */
  #define CAHI	1	/* True if status active high	*/
  #define CRESET	0	/* True if status port needs to be reset after input */
  #define CRESETVAL 0	/* If CRESET is true, this is the value to send	*/
  
  /*
  	 Modem characteristics:
  */
  
  #define	MSTAT	0335	/* status port	*/
  #define MDATA	0330	/* data port	*/
  #define MIMASK	0x01	/* input data ready mask	*/
  #define MOMASK	0x20	/* ready to send a character mask	*/
  #define MAHI	1	/* True if status logic active high  */
  #define MRESET	0	/* True if status port needs to be reset */
  #define MRESETVAL 0	/* If MRESET true, this is the byte to send */
  
  /*
  	General purpose Symbolic constants:
  */
  
  #define BASE 0		/* Base of CP/M system RAM (0 or 0x4200)  */
  #define NULL 0
  #define EOF -1		/* Physical EOF returned by low level I/O functions */
  #define ERROR -1	/* General "on error" return value */
  #define OK 0		/* General purpose "no error" return value */
  #define JBUFSIZE 6	/* Length of setjump/longjump buffer	*/
  #define CPMEOF 0x1a	/* CP/M End-of-text-file marker (sometimes!)  */
  #define SECSIZ 128	/* Sector size for CP/M read/write calls */
  #define MAXLINE 135	/* Longest line of input expected from the console */
  #define TRUE 1		/* general purpose true truth value	*/
  #define FALSE 0		/* general purpose false truth value 	*/
  
  /*
     The NSECTS symbol controls the compilation of the buffered
     I/O routines within STDLIB2.C, allowing each user to set the
     buffer size most convenient for his system, while keeping
     the numbers totally invisible to the C source programs using
     buffered I/O (via the BUFSIZ defined symbol.) For larger
     NSECTS, the disk I/O is faster...but more ram is taken up.
     Note that pre-1.4 versions of the library functions
     were not set up to support this customizable buffer size,
     and always compiled as if NSECTS were 1 in this version. To
     change the buffer size allocation, follow these steps:
  
       1) Alter NSECTS to the desired value here in bdscio.h
       2) Re-compile STDLIB1.C and STDLIB2.C
       3) Use CLIB to combine STDLIB1.CRL and STDLIB2.CRL to make
    	a new DEFF.CRL.
  
     Make sure you use declare all your I/O buffers with the a
     statement such as:
    		char buf_name[BUFSIZ];
    	 instead of the older and now obsolete:
    		char buf_name[134];
     	(and always #include "bdscio.h" in your programs!)
  */
  
  #define NSECTS 8	/* Number of sectors to buffer up in ram */
  
  #define BUFSIZ (NSECTS * SECSIZ + 6 )	/* Don't touch this */
  
  struct _buf {				/* Or this...	    */
  	int _fd;
  	int _nleft;
  	char *_nextp;
  	char _buff[NSECTS * SECSIZ];
  };
  
  
  
  /*
  	If you plan to use the high-level storage allocation functions
  	from the library ("alloc" and "free") then:
  
  	  1) Uncomment (enable) the "ALLOC_ON" definition, and comment out the
  	     "ALLOC_OFF" definition from this file.
  
  	  2) Re-compile STDLIB1.C, and use CLIB to transfer "alloc"
  	     and "free" into the DEFF.CRL library file.
  
  	  3) THIS IS IMPORTANT!!! Include the statement:
  
  		_allocp = NULL;	   /* initialize allocation pointer */
  
  	     somewhere in your "main" function PRIOR to the first use
  	     of the "alloc" function. DON'T FORGET THIS INITIALIZATION!!
  
  	Remember to include bdscio.h in ALL files of your C program.
  
  	The lack of static variables is the reason for all this messiness.
  */
  
  #define ALLOC_OFF 1	/* disables storage allocation if uncommented */
  
  			/* only ONE of these two lines should be uncommented */
  /*
  #define ALLOC_ON 1	/* enables storgage allocation if uncommented */
  */
  
  
  #ifdef ALLOC_ON			/* if storage allocation enabled, */
  
  struct _header  {
  	struct _header *_ptr;
  	unsigned _size;
   };
  
  struct _header _base;		/* declare this external data to  */
  struct _header *_allocp;	/* be used by alloc() and free()  */
  
  #endif
  
  