/*
       osbdscio.h = bdscio.h modified for
                   the Osbourne 1

       by:     Dan Sunday
               7473 Broken Staff
               Columbia, MD 21044
               (301)-730-6838

       date:   4-11-82
*/
/*
       The BDS C Standard I/O header file --  v1.44    4/3/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 this stuff as soon as you get the package,
       and most terminal-dependent sample programs should run better.

*/


/*
       Some console (video) terminal characteristics:
       (configured for the Osbourne 1)
*/

#define TWIDTH  52      /* # of columns */
#define TLENGTH 24      /* # of lines   */

#define ESC     '\033'  /* Standard ASCII 'escape' character    */
#define DEL     '\177'
#define RUB_OUT DEL

#define CTRL    037 &                   /* Control Mask */
#define BELL    (CTRL 'G')
#define TAB     (CTRL 'I')
#define CR      (CTRL 'M')              /* Carriage Return */
#define BS      (CTRL 'H')              /* Back Space */
#define LF      (CTRL 'J')              /* Line Feed */
#define VT      (CTRL 'K')              /* Vertical Tab */
#define FF      (CTRL 'L')              /* Form Feed */

#define SOH     (CTRL 'A')
#define STX     (CTRL 'B')
#define ETX     (CTRL 'C')
#define EOT     (CTRL 'D')
#define ENQ     (CTRL 'E')
#define ACK     (CTRL 'F')
#define NAK     (CTRL 'U')
#define SYN     (CTRL 'V')
#define CAN     (CTRL 'X')

/* Osbourne CP/M Cursor Controls */
#define LEFT    BS              /* Cursor Left */
#define RIGHT   FF              /* Cursor Right */
#define UP      VT              /* Cursor Up */
#define DOWN    LF              /* Cursor Down */

/* Osbourne Console Control Strings */
#define CLEARS  "\032"
#define SHI     "\033)" /* start half intensity */
#define EHI     "\033(" /* end half intensity */
#define SGR     "\033g" /* start graphics mode */
#define EGR     "\033G" /* end graphics mode */
#define SUL     "\033l" /* start underlining */
#define EUL     "\033m" /* end underlining */

#define IC      "\033Q" /* insert character */
#define IL      "\033E" /* insert line */
#define DC      "\033W" /* delete character */
#define DL      "\033R" /* delete line */
#define CL      "\033T" /* clear to end of line */

#define CUR     "\033=" /* set cursor */
#define SCR     "\033S" /* set screen */
#define LOCK    "\033#" /* lock keyboard */
#define UNLOCK "\033\"" /* unlock keyboard */

/*
       Modem Constants
*/
#define SPECIAL ESC
#define ABORT   (-1)
#define TIMEOUT (-2)

/*
       General purpose Symbolic constants:
*/

#define BASE    0       /* Base of CP/M system RAM (0 or 0x4200)  */
#define SECSIZ  128     /* Sector size for CP/M read/write calls */
#define MAXLINE 128     /* Longest line of console input expected */

#define ON      1
#define OFF     0
#define TRUE    1
#define FALSE   0
#define YES     1
#define NO      0
#define NONE    0
#define NULL    0
#define OK      0
#define ERROR   (-1)
#define EOF     (-1)
#define CPMEOF  (CTRL 'Z')


/*
  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 */

#define FILE    struct _buf

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 junk.
*/

/* only ONE of the following two lines should be uncommented */
/***
#define ALLOC_OFF 1     /* disables storage allocation if 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