HSA
ATTRIBUTES
BORDERS
TX_ATTR
TX_ATTR_SET
TX_BIOS
TX_BLINK
TX_BOLD
TX_B_B
TX_CHR
TX_CHR_A
TX_CHR_A_C
TX_CHR_C
TX_CHR_O
TX_CHR_O_C
TX_CLR
TX_CLR_EOL
TX_CLR_ROWS
TX_COL
TX_CONF
TX_CUR_HIDE
TX_CUR_SET
TX_CUR_SHOW
TX_DIRECT
TX_DOWN
TX_FILL
TX_FILL_A
TX_FILL_A_C
TX_FILL_C
TX_GET_STATUS
TX_LEFT
TX_LOC
TX_NL
TX_NORM
TX_NO_COL
TX_NO_SNOW
TX_PUT_STATUS
TX_RD_BLK
TX_RD_BLK_C
TX_RD_STR
TX_RD_STR_C
TX_REVERSE
TX_RIGHT
TX_ROW
TX_SCDN
TX_SCUP
TX_SNOW
TX_STATE
TX_STR
TX_STR_A
TX_STR_A_C
TX_STR_C
TX_UNDER
TX_UP
TX_WR_BLK
TX_WR_BLK_C
W_BOT_MSG
W_CLOSE
W_CLR
W_CUR_LOC
W_MENU1_FILL
W_MENU1_OPEN
W_MOVE
W_OPEN
W_SCDN
W_SCUP
W_STR
W_STR_C
W_STR_A
W_STR_C_A
W_STR_COL
W_TOP_MSG
W_USER_BORDER

HSA
 Hardwood Software Associates 

   Hardwood Software Associates is an association of experienced software
   professionals, each with more than 10 years computer experience.  HSA 
   was established to create quality software for the shareware marketplace.
   We also are available to produce custom software on a contract basis.

                         Hardwood Software Associates
                                364 Benson Road
                             Northbridge, MA 01534

                            CompuServe [75026,3604]
ATTRIBUTES
 Screen Attributes 
  Symbol                Attribute / Color
─────────────────────────────────────────────────────────
SCR_NORM             Normal characters
SCR_BOLD             Bold characters
SCR_BLINK            Blinking characters
SCR_REVERSE          Reverse video characters
SCR_UNDER            Underlined characters
SCR_B_B              Blinking bold characters
SCR_B_U              Blinking underlined characters
SCR_BLACK            Black
SCR_BLUE             Blue
SCR_GREEN            Green
SCR_CYAN             Cyan
SCR_RED              Red
SCR_MAGENTA          Magenta
SCR_YELLOW           Yellow
SCR_WHITE            Whit

SCR_INTENSE_BIT      Intensty bit
SCR_BLINK_BIT        Bold bit 

MAKE_ATTR(fore,back) Make an attribute byte macro
BORDERS
 Window Border Types 
  Symbol                Border
─────────────────────────────────────────────────────────
NO_BORDER            No border at all
SINGLE_LINES         Single on all sides
DOUBLE_LINES         Double on all sides
SINGLE_DOUBLE_LINES  Single vertical / Double horizontal
DOUBLE_SINGLE_LINES  Double vertical / Single horizontal
BLANK_BORDER         Blanks as border
USER_BORDER          User defined border
TX_BIOS TX_DIRECT
 Set Screen Access Mode 
 TX_BIOS - Use BIOS for all I/O 
SYNOPSIS:            tx_bios ();
DESCRIPTION:         Use BIOS calls for all operations to screen.

 TX_DIRECT - Access screen hardware directly 
SYNOPSIS:            tx_direct ();
DESCRIPTION:         Access screen directly.  This is much faster but not
                     as portable as the BIOS mode.
NOTE:                If the current state is not 7 (monochrome) tx_snow is
                     called to prevent screen interference.
TX_SNOW TX_NO_SNOW
 Set Retrace Waiting Mode 
 TX_SNOW - Wait for retrace to prevent snow 
SYNOPSIS:            tx_snow ();
DESCRIPTION:         Wait for retrace when accessing screen memory.
NOTE:                Only applicable for direct mode on CGA adapters.

 TX_NO_SNOW - Don't wait for retrace to prevent snow 
SYNOPSIS:            tx_no_snow ();
DESCRIPTION:         Don't wait for retrace when accessing screen memory.
NOTE:                This function should be called for color adapters
                     (e.g. EGA) that don't create snow when the screen
                     memory is accessed directly.
TX_CONF
 TX_CONF - Set crt screen memory address and 6845 index register address 
SYNOPSIS:            tx_conf (tx_seg,tx_6845_i);
                        unsigned tx_seg;    Segment address of crt
                                            memory for direct mode
                        unsigned tx_6845_i; 6845 index register address
DESCRIPTION:         If the arguments are not equal to 0 or -1 then
                     the segment for the screen memory and/or the 6845
                     index register address are updated.
CAUTION:             This must be called after every call to tx_direct as
                     tx_direct sets the segment and 6845 address to the
                     default for the current monitor type.
TX_STATE
 TX_STATE - Returns current video state 
SYNOPSIS:            tx_state ();
DESCRIPTION:         Calls BIOS INT 10 with function code 15 to get the
                     current video state.
RETURNS:             Text modes:
                        0 = 40x25 Black and white
                        1 = 40x25 Color
                        2 = 80x25 Black and white
                        3 = 80x25 Color
                     Graphics modes:
                        4 = 320x200 4 Color
                        5 = 320x200 Black and white
                        6 = 640x200 Black and white
                        7 = Monochrome
                        D = 320x200 16 Color               (EGA)
                        E = 640x200 16 Color               (EGA)
                        F = 640x350 4 Color Monochrome     (EGA)
                       10 = 640x350 16 Color               (EGA)
                       64 = 640x400 Black and white        (AT&T)
TX_NO_COL TX_ROW TX_COL
 Get Cursor Position Information 
 TX_NO_COL - Read the number of columns in screen 
SYNOPSIS:            tx_no_col ();
RETURNS:             Number of columns on screen

 TX_ROW - Read the current cursor row 
SYNOPSIS:            tx_row ();
RETURNS:             Current cursor row

 TX_COL - Read the current cursor column 
SYNOPSIS:            tx_col ();
RETURNS:             Current cursor column

The current cursor position is the location used by all functions that do
not have the row and column as parameters.
TX_ATTR TX_ATTR_SET
 Current Screen Attribute 
 TX_ATTR - Read the current screen attribute 
SYNOPSIS:            tx_attr ();
RETURNS:             Current screen attribute

 TX_ATTR_SET - Set the current screen attribute 
SYNOPSIS:            tx_attr_set (attribute);
                        short attribute;        Attribute to use
DESCRIPTION:         Set the current screen attribute.
NOTE:                hsa_tx.h contains definitions for all attributes and
                     a MAKE_ATTR macro to create the attribute bytes.

The current screen attribute is the one used by all functions that do not
have an attribute as a parameter.
TX_GET_STATUS TX_PUT_STATUS
 TX_GET_STATUS / TX_PUT_STATUS - CRT status save / restore 
SYNOPSIS:            tx_get_status (&buffer);
                     tx_put_status (&buffer);
                        struct                  Status buffer pointer
                           {
                           unsigned char mode;
                           unsigned char attribute;
                           unsigned short row,column;
                           } *buffer;
DESCRIPTION:         Retrieves or sets the current CRT status.
NOTE:                Structure defined as CRT in hsa_tx.h
TX_STR
 TX_STR - Display string at specified location 
SYNOPSIS:            tx_str (row,column,string);
                        int row;                Row for string display
                        int column;             Column for string display
                        char *string;           Pointer to string
DESCRIPTION:         Move the string to the screen using the current
                     attribute.  The row and column specified in the
                     call are used for the first character in the string.
TX_STR_C
 TX_STR_C - Display a string, continued from current location 
SYNOPSIS:            tx_str_c (string);
                        char *string;           Pointer to string
DESCRIPTION:         Move the string to the screen using the current
                     attribute.  The string is displayed on the screen
                     in the next available location.
TX_STR_A
 TX_STR_A - Display string at specified location and attribute 
SYNOPSIS:            tx_str_a (row,column,string,attr);
                        int row;                Row for string display
                        int column;             Column for string display
                        char *string;           Pointer to string
                        int attr;               Attribute for string
DESCRIPTION:         Move the string to the screen using the specified
                     screen attribute.  The row and column specified in
                     the call are used for the first character in the
                     string.
TX_STR_A_C TX_STR_C_A
TX_STR_A_C - Display a string, continued with attribute
ALIAS:               TX_STR_C_A
SYNOPSIS:            tx_str_a_c (string,attr);
                     tx_str_c_a (string,attr);
                        char *string;           Pointer to string
                        int attr;               Attribute for string
DESCRIPTION:         Move the string to the screen using the specified
                     screen attribute.  The string is displayed on the
                     screen in the next available location.
TX_CHR
 TX_CHR - Display a character at a specified location 
SYNOPSIS:            tx_chr (row,column,chr);
                        int row;                Row for display
                        int column;             Column for display
                        char chr;               Character to display
DESCRIPTION:         Move the character to the screen using the current
                     screen attribute.
TX_CHR_C
 TX_CHR_C - Display a character, continued from current location 
SYNOPSIS:            tx_chr_c (chr);
                     char chr;                  Character to display
DESCRIPTION:         Move the character to the screen using the current
                     screen attribute.  The string is displayed on the
                     screen in the next available location.
TX_CHR_A
 TX_CHR_A - Display character at specified location and attribute 
SYNOPSIS:            tx_chr_a (row,column,chr,attr);
                        int row;                Row for display
                        int column;             Column for display
                        char chr;               Character to display
                        int attr;               Attribute for character
DESCRIPTION:         Move the character to the screen using the specified
                     screen attribute.
TX_CHR_A_C TX_CHR_C_A
 TX_CHR_A_C - Continue display of character with specified attribute 
ALIAS:               TX_CHR_C_A
SYNOPSIS:            tx_chr_a_c (chr,attr);
                     tx_chr_c_a (chr,attr);
                        char chr;               Character to display
                        int attr;               Attribute for character
DESCRIPTION:         Move the character to the screen using the specified
                     screen attribute.  The string is displayed on the
                     screen in the next available location.
TX_FILL
 TX_FILL - Fill a line with the specified number of a characters
SYNOPSIS:            tx_fill (row,column,chr,number);
                        int row;                Row for display
                        int column;             Column for display
                        char chr;               Character to display
                        int number;             Number of times to
                                                display character
DESCRIPTION:         Move the character to the screen the specified
                     number of times using the current screen attribute.
TX_FILL_C
 TX_FILL_C - Fill a line with the specified number of a characters, continued 
SYNOPSIS:            tx_fill_c (chr,number);
                        char chr;               Character to display
                        int number;             Number of times to
                                                display character
DESCRIPTION:         Move the character to the screen the specified
                     number of times.  Uses the current attribute.
                     Starts at current location.
TX_FILL_A
 TX_FILL_A - Fill a line with the specified number of a characters 
SYNOPSIS:            tx_fill_a (row,column,chr,number,attr);
                        int row;                Row for display
                        int column;             Column for display
                        char chr;               Character to display
                        int number;             Number of times to
                                                display character
                        int attr;               Attribute to use
DESCRIPTION:         Move the character to the screen the specified
                     number of times.
TX_FILL_A_C TX_FILL_C_A
 TX_FILL_A_C - Fill a line with the specified number of a characters
ALIAS:               TX_FILL_C_A
SYNOPSIS:            tx_fill_a_c (chr,number,attr);
                     tx_fill_c_a (chr,number,attr);
                        char chr;               Character to display
                        int number;             Number of times to
                                                display character
                        int attr;               Attribute to use
DESCRIPTION:         Move the character to the screen the specified
                     number of times.  Starts at current location.
TX_CHR_O
 TX_CHR_O - Display a character only at a specified location
SYNOPSIS:            tx_chr_o (row,column,chr);
                        int row;                Row for display
                        int column;             Column for display
                        char chr;               Character to display
DESCRIPTION:         Move the character to the screen move the character
                     only, no change is made to the screen attribute of
                     the screen.
TX_CHR_O_C
 TX_CHR_O_C - Display a character only, continued from current location
SYNOPSIS:            tx_chr_o_c (chr);
                        char chr;               Character to display
DESCRIPTION:         Move the character to the screen move the character
                     only, no change is made to the screen attribute of
                     the screen.
TX_RD_BLK
 TX_RD_BLK - Read a block of screen data 
SYNOPSIS:            tx_rd_blk (row,column,buffer,no_row,no_column);
                        int row;                Row to read
                        int column;             Column to read
                        int *buffer;            Buffer address
                        int no_row;             Number of rows to read
                        int no_column;          Number of columns to read
DESCRIPTION:         Read a block of screen memory, character and
                     attribute, into the buffer.
NOTE:                The current location is set to row,column.
TX_RD_BLK_C
 TX_RD_BLK_C - Read a block of screen data, at current location 
SYNOPSIS:            tx_rd_blk_c (buffer,no_row,no_column);
                        int *buffer;            Buffer address
                        int no_row;             Number of rows to read
                        int no_column;          Number of columns to read
DESCRIPTION:         Read a block of screen memory, character and
                     attribute, into the buffer.
NOTE:                The current location is unchanged.
TX_WR_BLK
 TX_WR_BLK - Write a block of screen data 
SYNOPSIS:            tx_wr_blk (row,column,buffer,no_row,no_column);
                        int row;                Row to write
                        int column;             Column to write
                        int *buffer;            Buffer address
                        int no_row;             Number of rows to write
                        int no_column;          Number of columns to write
DESCRIPTION:         Write a block of screen memory, character and
                     attribute, from the buffer.
NOTE:                The current location is set to row,column.
TX_WR_BLK_C
 TX_WR_BLK_C - Write a block of screen data, at current location 
SYNOPSIS:            tx_wr_blk_c (buffer,no_row,no_column);
                        int *buffer;            Buffer address
                        int no_row;             Number of rows to write
                        int no_column;          Number of columns to write
DESCRIPTION:         Write a block of screen memory, character and
                     attribute, from the buffer.
NOTE:                The current location is unchanged.
TX_RD_STR
 TX_RD_STR - Read string from screen 
SYNOPSIS:            char *tx_rd_str (row,col,string,number);
                        int row;                Row to read
                        int column;             Column to read
                        char *string;           Buffer address
                        short number;           Number characters to read
DESCRIPTION:         Reads the characters displayed on the screen into the
                     string buffer.
RETURNS:             Pointer to string
NOTE:                Current location remains unchanged
TC_RD_STR_C
 TX_RD_STR_C - Read string from screen at current location 
SYNOPSIS:            char *tx_rd_str_c (string,number);
                        char *string;           Buffer address
                        short number;           Number characters to read
DESCRIPTION:         Reads the characters displayed on the screen into the
                     string buffer.
RETURNS:             Pointer to string
NOTE:                Current location remains unchanged
TX_SCUP TX_SCDN
 Screen Scrolling 
 TX_SCUP - Scroll window up one line 
SYNOPSIS:            tx_scup (row,column,no_row,no_column);
                        int row,column;         Upper left row/column
                                                   (-1 for current)
                        int no_row;             Number of rows to scroll
                        int no_column;          Number of columns to scroll
DESCRIPTION:         Scrolls the specified portion of the screen up one row.

 TX_SCDN - Scroll window down one line 
SYNOPSIS:            tx_scdn (row,column,no_row,no_column);
                        int row,column;         Upper left row/column
                                                   (-1 for current)
                        int no_row;             Number of rows to scroll
                        int no_column;          Number of columns to scroll
DESCRIPTION:         Scrolls the specified portion of the screen down one row.
TX_CLR TX_CLR_EOL TX_CLR_ROWS
 Screen Clearing 
 TX_CLR - Clear the entire screen 
SYNOPSIS:            tx_clr ();

 TX_CLR_EOL - Clear to the end of the line 
SYNOPSIS:            tx_clr_eol ();
DESCRIPTION:         Clear the screen from the current location to the
                     end of the row.

 TX_CLR_ROWS - Clear a block of lines on the screen 
SYNOPSIS:            tx_clr_rows (start,end);
                        int start;              First line to clear
                                                   (-1 if current)
                        int end;                Last line to clear
                                                   (-1 if current)
TX_CUR_SET TX_CUR_HIDE TX_CUR_SHOW
 Cursor Manipulation 
 TX_CUR_SET - Set the cursor start / stop scan lines 
SYNOPSIS:            tx_cur_set (start,end);
                        int start;              Start scan line of cursor
                        int end;                End scan line of cursor
DESCRIPTION:         Set the size of the cursor.

 TX_CUR_HIDE - Hide the cursor 
SYNOPSIS:            tx_cur_hide ();

 TX_CUR_SHOW - Show the cursor 
SYNOPSIS:            tx_cur_show ();
TX_LOC TX_NL TX_LEFT TX_RIGHT TX_UP TX_DOWN
 Cursor Movement 
 TX_LOC - Set the current location 
SYNOPSIS:            tx_loc (row,column);
                        int row;                Row for display
                        int column;             Column for display
DESCRIPTION:         Move the cursor to the specified location.

 TX_NL - Move the current location to start of next row 
SYNOPSIS:            tx_nl ();

 TX_LEFT - Move the current location one column left 
SYNOPSIS:            tx_left ();

 TX_RIGHT - Move the current location one column right 
SYNOPSIS:            tx_right ();

 TX_UP - Move the current location one row up 
SYNOPSIS:            tx_up ();

 TX_DOWN - Move the current location one row down 
SYNOPSIS:            tx_down ();
W_OPEN
 W_OPEN - Open a window 
SYNOPSIS:            WIN *w_open (row,column,height,width,attr,
                                  border_attr,border,column_width);
                        int row;                Row of upper left corner
                        int column;             Column of upper left corner
                        int height;             Height of window (# rows)
                                                including border.
                        int width;              Width of window,
                                                including border.
                        int attr;               Attribute used in window
                        int border_attr;        Attribute used in border
                        int border;             Border line type
                                                (see hsa_w.h)
                        int col_width;          Width of columns
                                                (0 if none)
DESCRIPTION:         Allocates the window data structure. Saves screen
                     display area that will be overwritten.  Creates
                     blank window. If col_width is greater than 0 columns
                     are created within the window.
RETURNS:             Pointer to the window data structure.
                     NULL - Error allocated window data structure.
W_CLR
 W_CLR - Clear a window 
SYNOPSIS:            void w_clr (win);
                        WIN *win;               Pointer to window
                                                data structure
DESCRIPTION:         Clear the specified window to blanks and set cursor
                     current position to upper left corner.
W_USER_BORDER
 W_USER_BORDER - Specify a user border 
SYNOPSIS:            void w_border (ulc,urc,llc,lrc,hor,ver,
                                    top_meet,bot_meet,
                                    left_bound,right_bound);
                        char ulc;               Upper left corner char
                        char urc;               Upper right corner char
                        char llc;               Lower left corner char
                        char lrc;               Lower right corner char
                        char hor;               Horizontal line char
                        char ver;               Vertical line char
                        char top_meet;          Meeting of top line and 
                                                vertical when columns drawn
                        char bot_meet;          Meeting of bottom line and
                                                vertical when columns drawn
                        char left_bound;        Character to left of
                                                border message
                        char right_bound;       Character to right of
                                                border message
DESCRIPTION:         Define characters used to draw a user border
W_TOP_MSG
 W_TOP_MSG - Display a message in top border line 
SYNOPSIS:            char *w_top_msg (win,msg,pos);
                        WIN *win;               Pointer to window
                                                data structure
                        char *msg;              Message to display
                        int pos;                Position of message:
                                                  MSG_LEFT
                                                  MSG_CENTER
                                                  MSG_RIGHT
DESCRIPTION:         Display the message in the window border at the
                     indicated position.
RETURNS:             Pointer to the message displayed.
                     NULL - Message too large to display
W_BOT_MSG
 W_BOT_MSG - Display a message in bottom border line 
SYNOPSIS:            char *w_top_msg (win,msg,pos);
                        WIN *win;               Pointer to window
                                                data structure
                        char *msg;              Message to display
                        int pos;                Position of message:
                                                  MSG_LEFT
                                                  MSG_CENTER
                                                  MSG_RIGHT
DESCRIPTION:         Display the message in the window border at the
                     indicated position.
RETURNS:             Pointer to the message displayed.
                     NULL - Message too large to display
W_CLOSE
 W_CLOSE - Close a window 
SYNOPSIS:            void w_close (win);
                        WIN *win;               Pointer to window
                                                data structure
DESCRIPTION:         Erase the window from the screen, restore original
                     screen contents and cursor location, and free all
                     memory allocated for window.
CAUTION:             Only the "top" window of overlapping windows should
                     be closed.
W_STR
 W_STR - Display a string in a window 
SYNOPSIS:            int w_str (win,row,column,string);
                        WIN *win;               Pointer to window
                                                data structure
                        int row;                Row within window to
                                                display string
                        int column;             Column within window to
                                                display string
                        char *string;           String to display
DESCRIPTION:         Display the string in the window at the specified
                     location.
RETURNS:             Number of characters displayed
W_STR_C
 W_STR_C - Display a string in a window 
SYNOPSIS:            int w_str_c (win,string);
                        WIN *win;               Pointer to window
                                                data structure
                        char *string;           String to display
DESCRIPTION:         Display the string to the window at the current
                     location.
RETURNS:             Number of characters displayed
W_STR_A
 W_STR_A - Display a string in a window 
SYNOPSIS:            int w_str_c (win,row,column,string,attr);
                        WIN *win;               Pointer to window
                                                data structure
                        int row;                Row within window to
                                                display string
                        int column;             Column within window to
                                                display string
                        char *string;           String to display
                        int attr;               Attribute for string
DESCRIPTION:         Display the string in the window at the specified
                     location using the specified attribute.
RETURNS:             Number of characters displayed
W_STR_A_C W_STR_C_A
 W_STR_A_C - Display a string in a window 
ALIAS:               W_STR_C_A
SYNOPSIS:            int w_str_a_c (win,row,column,string,attr);
                     int w_str_c_a (win,row,column,string,attr);
                        WIN *win;               Pointer to window
                                                data structure
                        int row;                Row within window to
                                                display string
                        int column;             Column within window to
                                                display string
                        char *string;           String to display
                        int attr;               Attribute for string
DESCRIPTION:         Display the string in the window at the specified
                     location using the specified attribute.
RETURNS:             Number of characters displayed
W_STR_COL
 W_STR_COL - Display a string in a window column 
SYNOPSIS:            int w_str_col (win,string);
                        WIN *win;               Pointer to window
                                                data structure
                        char *string;           String to display
DESCRIPTION:         Display the string to the window in the next column.
RETURNS:             1 - Window is full
                     0 - Still room for more columns
W_CUR_LOC
 W_CUR_LOC - Display the screen cursor in the window 
SYNOPSIS:            void w_cur_loc (win);
                        WIN *win;               Pointer to window
                                                data structure
DESCRIPTION:         Move the screen cursor to the current location for
                     the specified window.
W_MOVE
 W_MOVE - Move a window 
SYNOPSIS:            void w_move (win,row,column);
                        WIN *win;               Pointer to window
                                                data structure
                        int row;                Screen row of new upper
                                                left corner
                        int column;             Screen column of new upper
                                                left corner
DESCRIPTION:         Moves the specified window to the new location on
                     the screen.
W_SCDN W_SCUP
 Window Scrolling 
 W_SCDN - Scroll data in window down 
SYNOPSIS:            void w_scdn (win);
                        WIN *win;               Pointer to window
                                                data structure
DESCRIPTION:         Scroll data in window down 1 row.

 W_SCUP - Scroll data in window up 
SYNOPSIS:            void w_scdn (win);
                        WIN *win;               Pointer to window
                                                data structure
DESCRIPTION:         Scroll data in window up 1 row.
W_MENU1_OPEN
 W_MENU1_OPEN - Open a menu style 1 window 
SYNOPSIS:            int w_menu1_open (row,column,height,width,attr,
                                       border_attr,border,column_width,
                                       top_title,bot_title,select);
                        int row,column;         Upper left corner row column
                        int height;             Height of window (# rows)
                                                including border.
                        int width;              Width of window,
                                                including border.
                        int attr;               Attribute used in window
                        int border_attr;        Attribute used in border
                        int border;             Border line type
                        int col_width;          Width of columns (0 if none)
                        char *top_title;        Title for top of menu
                                                (NULL if none)
                        char *bot_title;        Title for bottom
                                                (NULL if none)
                        int select;             Select from menu flag
                                                (0 = display only)
DESCRIPTION:         This routine is called to allocate the initial
                     window for the menu and establish the menu parameters.
RETURNS:             0 = All OK
                     1 = Error in allocating windows.
W_MENU1_FILL
 W_MENU1_FILL - Fill a style 1 menu with data 
SYNOPSIS:            int w_menu1_fill (string,buffer);
                        char *string;           Pointer to string to add
                                                to menu,
                                                (NULL if no more data)
                        char *buffer;           Pointer to buffer to
                                                receive selected item
DESCRIPTION:         This routine is called to add item to the menu and
                     return any selection in the buffer provided.
                     selection is required select is 0.
RETURNS:             0    - All OK - keep sending data
                     != 0 - Item selected or menu aborted
                            >0 - ASCII character of key pressed
                            <0 - Negative of extended function key pressed
                     "buffer" - Contains selected item; null string if menu
                                aborted.
TX_NORM TX_BOLD TX_BLINK TX_REVERSE TX_UNDER TX_B_B
 Special Attribute Setting 
 TX_NORM - Set to white on black 
SYNOPSIS:            tx_norm ();
DESCRIPTION:         Set current attribute to white on black.
 TX_BOLD - Set to intense white on black 
SYNOPSIS:            tx_bold ();
DESCRIPTION:         Set current attribute to intense white on black.
 TX_BLINK - Set to blinking white on black 
SYNOPSIS:            tx_blink ();
DESCRIPTION:         Set current attribute to blinking white on black.
 TX_REVERSE - Set to black on white 
SYNOPSIS:            tx_reverse ();
DESCRIPTION:         Set current attribute to black on white.
 TX_UNDER - Set to underlined 
SYNOPSIS:            tx_under ();
DESCRIPTION:         Set current attribute to underlined.
CAUTION:             In color this is blue.
 TX_B_B - Set to intense blinking white on black 
SYNOPSIS:            tx_b_b ();
DESCRIPTION:         Set current attribute to intense blinking white on black.


