home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / pibterm / pibt41s3.arc / PIBTDCL1.GLO < prev    next >
Text File  |  1988-02-23  |  59KB  |  1,269 lines

  1. (*----------------------------------------------------------------------*)
  2. (*                   GLOBAL VARIABLE DEFINITIONS                        *)
  3. (*----------------------------------------------------------------------*)
  4.  
  5. CONST
  6.                    (* 8086/8088 hardware flags *)
  7.  
  8.    Carry_Flag     = 1;
  9.    Parity_Flag    = 4;
  10.    Aux_Carry_Flag = 16;
  11.    Zero_Flag      = 64;
  12.    Sign_Flag      = 128;
  13.  
  14. TYPE
  15.  
  16.    AnyStr    = STRING[255]  (* Matches any string for parameter passing *);
  17.  
  18.    StringPtr = ^AnyStr      (* Points to a string                       *);
  19.  
  20.    ShortStr  = STRING[30]   (* Short string *);
  21.  
  22.    String1   = STRING[1]    (* 1-character string  *);
  23.  
  24.    String10  = STRING[10]   (* 10-character string *);
  25.  
  26.    String12  = STRING[12]   (* 12-character string *);
  27.  
  28.    FileStr   = STRING[65]   (* File name string *);
  29.  
  30.    String80  = STRING[80]   (* 80-character string *);
  31.  
  32.    Text_File = TEXT         (* General text file                 *);
  33.  
  34.                                    (* Comparison types for string tests *)
  35.  
  36.    Comparer       = ( Less, Equal, Greater );
  37.  
  38.                                    (* Character set definitions *)
  39.    CharSet        = SET OF CHAR;
  40.  
  41. (*----------------------------------------------------------------------*)
  42. (*               ASCII character set definitions                        *)
  43. (*----------------------------------------------------------------------*)
  44.  
  45. CONST
  46.  
  47.    NUL  = 0          (* NULL            *);
  48.    ETX  = 3          (* ETX = ^C        *);
  49.    ENQ  = 5          (* ENQ = Enquiry   *);
  50.    BELL = 7          (* BELL = bell     *);
  51.    BS   = 8          (* Backspace       *);
  52.    HT   = 9          (* Horizontal Tab  *);
  53.    LF   = 10         (* Line Feed       *);
  54.    VT   = 11         (* Vertical Tab    *);
  55.    FF   = 12         (* Form Feed       *);
  56.    CR   = 13         (* Carriage Return *);
  57.    SO   = 14         (* Start grahics   *);
  58.    SI   = 15         (* End graphics    *);
  59.    DLE  = 16         (* Data link esc.  *);
  60.    XON  = 17         (* XON             *);
  61.    XOFF = 19         (* XOFF            *);
  62.    SUB  = 26         (* End of file     *);
  63.    ESC  = 27         (* Escape          *);
  64.    FS   = 28         (* Graphics start  *);
  65.    GS   = 29         (* Graphics start  *);
  66.    RS   = 30         (* Inc. plot start *);
  67.    US   = 31         (* Graphics end    *);
  68.    SP   = 32         (* Space           *);
  69.    DEL  = 127        (* Delete          *);
  70.  
  71. (*----------------------------------------------------------------------*)
  72. (*                    Copyright notice                                  *)
  73. (*----------------------------------------------------------------------*)
  74.  
  75. (* STRUCTURED *) CONST
  76.    CopyRight_Notice : STRING[53] = 'Copyright (c) 1985,1986,1987,1988 by Philip R. Burns.';
  77.  
  78. (*----------------------------------------------------------------------*)
  79. (*                    Program version                                   *)
  80. (*----------------------------------------------------------------------*)
  81.  
  82. (* VAR *) CONST
  83.                                    (* Version no. of PibTerm   *)
  84.    PibTerm_Version : FileStr  = '';
  85.  
  86.                                    (* Date of PibTerm *)
  87.    PibTerm_Date    : FileStr  = '';
  88.  
  89.                                    (* If a test version        *)
  90.    Test_Version    : BOOLEAN = FALSE;
  91.  
  92. (*----------------------------------------------------------------------*)
  93. (*                   PibTerm Command Types                              *)
  94. (*----------------------------------------------------------------------*)
  95.  
  96. CONST
  97.    No_Of_PibTerm_Commands           = 119;
  98.    No_Of_PibTerm_Commands_Minus_One = 118;
  99.  
  100. TYPE
  101.    PibTerm_Command_Type =
  102.       ( AddCommandSy,   AddLFSy,       AlarmSy,       AreaCodeSy,
  103.         BreakSy,        CallSy,        CaptureSy,     CaseSy,
  104.         ChDirSy,        ClearSy,       CloseSy,       ClrEolSy,
  105.         CommDrainSy,
  106.         CommFlushSy,    CopyFileSy,    DeclareSy,     DelaySy,
  107.         DelLineSy,      DialSy,        DirFirstSy,    DirNextSy,
  108.         DoCaseSy,       DosSy,         EchoSy,        EditSy,
  109.         EditFileSy,     ElseSy,        ElseIfSy,      EndCaseSy,
  110.         EndDoCaseSy,    EndForSy,      EndIfSy,       EndProcSy,
  111.         EndWhileSy,     EraseFileSy,   ExecuteSy,     ExeNewSy,
  112.         ExitSy,         ExitAllSy,     FastCSy,       FileSy,
  113.         ForSy,          FreeSpaceSy,   GetDirSy,      GetParamSy,
  114.         GetVarSy,       GossipSy,      GoToSy,        GoToXYSy,
  115.         HangUpSy,       HostSy,        IfConSy,       IfDialSy,
  116.         IfEofSy,        IfExistsSy,    IfFoundSy,     IfLocStrSy,
  117.         IfOkSy,         IfOpSy,        IfRemStrSy,    ImportSy,
  118.         InfoSy,         InputSy,       InsLineSy,     KeyDefSy,
  119.         KeyFlushSy,     KeySendSy,     KeySy,         LabelSy,
  120.         LogSy,          MenuSy,        MessageSy,     MuteSy,
  121.         OpenSy,         ParamSy,       PImportSy,     PrintFileSy,
  122.         ProcedureSy,    QuitSy,        QuitAllSy,     ReadSy,
  123.         ReadLnSy,       ReceiveSy,     ReDialSy,      RepeatSy,
  124.         ResetSy,        ReturnSy,      RInputSy,      ScriptSy,
  125.         SDumpSy,        SendSy,        SetSy,         SetParamSy,
  126.         SetVarSy,       STextSy,       SuspendSy,     TextSy,
  127.         TimersSy,       TranslateSy,   UntilSy,       ViewSy,
  128.         ViewFileSy,     WaitSy,        WaitCountSy,   WaitListSy,
  129.         WaitQuietSy,    WaitStrSy,     WaitTimeSy,    WhenSy,
  130.         WhenDropSy,     WhenListSy,    WhereXYSy,     WhileSy,
  131.         WriteSy,        WriteLnSy,     WriteLogSy,    ZapVarSy,
  132.         Bad_Command,    Null_Command
  133.       );
  134.  
  135.                                    (* Command to be executed *)
  136. VAR
  137.    PibTerm_Command : PibTerm_Command_Type;
  138.  
  139.                                    (* Conversion table from input to *)
  140.                                    (* commands.                      *)
  141. VAR
  142.    PibTerm_Command_Table : ARRAY[0..255] OF PibTerm_Command_Type;
  143.  
  144.  
  145. (*----------------------------------------------------------------------*)
  146. (*                Timing constants and variables                        *)
  147. (*----------------------------------------------------------------------*)
  148.  
  149. TYPE
  150.    Date_Format_Type = ( MDY_Style, YMD_Style, DMY_Style );
  151.    Time_Format_Type = ( Military_Time, AMPM_Time        );
  152.  
  153. CONST
  154.    Half_Second_Delay       =  500  (* Delay argument for 1/2 sec. delay *);
  155.    One_Second_Delay        = 1000  (* Delay argument for 1 second delay *);
  156.    Two_Second_Delay        = 2000  (* Delay argument for 2 second delay *);
  157.    Three_Second_Delay      = 3000  (* Delay argument for 3 second delay *);
  158.    Tenth_of_a_second_Delay = 100   (* 1/10 second delay                 *);
  159.  
  160. (* VAR *) CONST
  161.    Delay_Time            : INTEGER (* Time to delay in response to DELAY *)
  162.                                    (* command                            *)
  163.                            = 0;
  164.  
  165.    Break_Length          : INTEGER (* Length of line break in 1/10 secs  *)
  166.                            = 50;
  167.  
  168.    Current_Status_Time   : INTEGER (* Current time for status line       *)
  169.                            = 0;
  170.  
  171.    New_Status_Time       : INTEGER (* Updated time for status line       *)
  172.                            = 0;
  173.  
  174.    Time_Format           : Time_Format_Type (* Time format               *)
  175.                            = Military_Time;
  176.  
  177.    Date_Format           : Date_Format_Type (* Date format               *)
  178.                            = YMD_Style;
  179.  
  180.    Date_Format_String    : STRING[10]       (* Date format in string form*)
  181.                            = 'YY/MM/DD';
  182.  
  183.    Use_Military          : BOOLEAN (* TRUE to use 24 hour time           *)
  184.                            = TRUE;
  185.  
  186.    Window_Hold_Time      : INTEGER (* Time to wait when clearing window  *)
  187.                            = 10;
  188.  
  189. (*----------------------------------------------------------------------*)
  190. (*                          Text/Menu Colors                            *)
  191. (*----------------------------------------------------------------------*)
  192.  
  193. (* VAR *) CONST
  194.    ForeGround_Color : INTEGER      (* Color for ordinary text           *)
  195.                       = White;
  196.    BackGround_Color : INTEGER      (* Usual background color            *)
  197.                       = Black;
  198.    Border_Color     : INTEGER      (* Usual border color                *)
  199.                       = Black;
  200.  
  201.    Menu_Text_Color  : INTEGER      (* Color for menu text               *)
  202.                       = White;
  203.    Menu_Title_Color : INTEGER      (* Color for menu titles             *)
  204.                       = White;
  205.    Menu_Frame_Color : INTEGER      (* Color for menu frame              *)
  206.                       = White;
  207.    Menu_Text_Color_2: INTEGER      (* Secondary color for menu text     *)
  208.                       = LightGray;
  209.    Text_Mode        : INTEGER      (* Text mode for all text            *)
  210.                       = BW80;
  211. VAR
  212.    Start_Video_Mode : INTEGER      (* Starting video mode               *);
  213.  
  214. (*----------------------------------------------------------------------*)
  215. (*                     Box-drawing characters                           *)
  216. (*----------------------------------------------------------------------*)
  217.  
  218. (* VAR *) CONST
  219.    Box_Chars  :  STRING[8] = '╒═╕│╛═╘│';
  220.  
  221. (*----------------------------------------------------------------------*)
  222. (*                          Status line colors                          *)
  223. (*----------------------------------------------------------------------*)
  224.  
  225. (* VAR *) CONST
  226.    Status_Line_Attr        : INTEGER (* Color attribute for status line *)
  227.                              = 0;
  228.    Status_ForeGround_Color : INTEGER (* Text color for status line      *)
  229.                              = Black;
  230.    Status_BackGround_Color : INTEGER (* Background color for status line*)
  231.                              = White;
  232.    Reverse_Status_Colors   : BOOLEAN (* TRUE to use inverse term colors *)
  233.                              = TRUE;
  234.  
  235. (*----------------------------------------------------------------------*)
  236. (*                    VT100 emulation colors                            *)
  237. (*----------------------------------------------------------------------*)
  238.  
  239. (* VAR *) CONST
  240.    VT100_ForeGround_Color : INTEGER  (* VT100 foreground color         *)
  241.                             = LightGray;
  242.    VT100_BackGround_Color : INTEGER  (* VT100 background color         *)
  243.                             = Black;
  244.    VT100_Border_Color     : INTEGER  (* VT100 border color             *)
  245.                             = Black;
  246.    VT100_Underline_Color  : INTEGER  (* VT100 foreground color         *)
  247.                             = Blue;
  248.    VT100_Bold_Color       : INTEGER  (* VT100 background color         *)
  249.                             = White;
  250.  
  251. (*----------------------------------------------------------------------*)
  252. (*                    Graphics emulation colors                         *)
  253. (*----------------------------------------------------------------------*)
  254.  
  255. VAR
  256.    Graphics_ForeGround_Color : INTEGER  (* Graphics mode foreground color *);
  257.    Graphics_BackGround_Color : INTEGER  (* Graphics mode background color *);
  258.  
  259. (*----------------------------------------------------------------------*)
  260. (*                      Error exit flag                                 *)
  261. (*----------------------------------------------------------------------*)
  262.  
  263. (* VAR *) CONST                    (* If error exit invoked *)
  264.    Error_Exit_Taken : BOOLEAN = FALSE;
  265.  
  266. (*----------------------------------------------------------------------*)
  267. (*                      Program Option Flags                            *)
  268. (*----------------------------------------------------------------------*)
  269.  
  270. CONST
  271.    ON   = TRUE                       (* Convenient synonym for switches *);
  272.    OFF  = FALSE                      (* Likewise                        *);
  273.  
  274. (* VAR *) CONST
  275.    Debug_Mode          : BOOLEAN   (* TRUE if Debug mode on             *)
  276.                          = FALSE;
  277.    Use_EMM_For_Overlays: BOOLEAN   (* TRUE to place overlays in EMM     *)
  278.                          = FALSE;
  279.    Show_Status_Line    : BOOLEAN   (* TRUE to display line 25 status    *)
  280.                          = FALSE;
  281.    Show_Status_Time    : BOOLEAN   (* TRUE to display time on line 25   *)
  282.                          = FALSE;
  283.    Do_Status_Time      : BOOLEAN   (* TRUE to show time on status line  *)
  284.                          = FALSE;
  285.    Save_Do_Status_Time : BOOLEAN   (* Saves status time check           *)
  286.                          = FALSE;
  287.    Do_Status_Line      : BOOLEAN   (* TRUE to show status line          *)
  288.                          = FALSE;
  289.    Local_Echo          : BOOLEAN   (* Local Echo ON/OFF                 *)
  290.                          = FALSE;
  291.    Silent_Mode         : BOOLEAN   (* TRUE to suppress bells, music.    *)
  292.                          = FALSE;
  293.    Printer_On          : BOOLEAN   (* Echo to printer                   *)
  294.                          = FALSE;
  295.    Capture_On          : BOOLEAN   (* Capture mode on                   *)
  296.                          = FALSE;
  297.    Exact_Capture       : BOOLEAN   (* TRUE for exact capture mode       *)
  298.                          = FALSE;
  299.    Translate_On        : BOOLEAN   (* Translate mode on                 *)
  300.                          = FALSE;
  301.    Add_LF              : BOOLEAN   (* Add line feeds to incoming lines  *)
  302.                          = FALSE;
  303.    Play_Music_On       : BOOLEAN   (* Play music if found               *)
  304.                          = TRUE;
  305.    PibTerm_Done        : BOOLEAN   (* Finished running PibTerm          *)
  306.                          = FALSE;
  307.    Gossip_Mode_On      : BOOLEAN   (* Split-screen gossip mode          *)
  308.                          = FALSE;
  309.    Reset_Comm_Port     : BOOLEAN   (* TRUE to reset comm port           *)
  310.                          = TRUE;
  311.    Comm_Port_Changed   : BOOLEAN   (* TRUE if comm port number changed  *)
  312.                          = TRUE;
  313.    Last_Column_Hit     : BOOLEAN   (* TRUE if col 80 hit in display     *)
  314.                          = FALSE;
  315.    Auto_Wrap_Mode      : BOOLEAN   (* TRUE for autowrap on long lines   *)
  316.                          = TRUE;
  317.    Exploding_Menus     : BOOLEAN   (* TRUE to use exploding menus       *)
  318.                          = FALSE;
  319.    Review_On           : BOOLEAN   (* TRUE if review buffer used        *)
  320.                          = FALSE;
  321.    Script_File_Mode    : BOOLEAN   (* TRUE if currently exec'ing script *)
  322.                          = FALSE;
  323.    Script_Learn_Mode   : BOOLEAN   (* TRUE if currently learning script *)
  324.                          = FALSE;
  325.    CompuServe_B_On     : BOOLEAN   (* TRUE to do CompuServe B protocol  *)
  326.                          = FALSE;
  327.    Mahoney_On          : BOOLEAN   (* Mahoney BBS codes allowed         *)
  328.                          = TRUE;
  329.    When_Mode           : BOOLEAN   (* TRUE if WHEN string defined       *)
  330.                          = FALSE;
  331.    When_Drop_Mode      : BOOLEAN   (* TRUE if WHENDROP in effect        *)
  332.                          = FALSE;
  333.    WaitQuiet_Mode      : BOOLEAN   (* TRUE if WAITQUIET in effect       *)
  334.                          = FALSE;
  335.    WaitCount_Mode      : BOOLEAN   (* TRUE if WAITCOUNT in effect       *)
  336.                          = FALSE;
  337.    WaitString_Mode     : BOOLEAN   (* TRUE if WAITSTRING string defined *)
  338.                          = FALSE;
  339.    Read_In_Script      : BOOLEAN   (* TRUE to read in script            *)
  340.                          = FALSE;
  341.    Really_Wait_String  : BOOLEAN   (* TRUE to really wait for string    *)
  342.                          = FALSE;
  343.    Write_Screen_Memory : BOOLEAN   (* TRUE to write video memory direct *)
  344.                          = FALSE;
  345.    Write_Screen_Memory_Par : BOOLEAN (* TRUE to write video direct -- param *)
  346.                          = FALSE;
  347.    Alter_Baud_Rate     : BOOLEAN   (* TRUE to get baud rate from modem  *)
  348.                          = TRUE;
  349.    Check_CTS           : BOOLEAN   (* TRUE to check clear-to-send line  *)
  350.                          = TRUE;
  351.    Check_DSR           : BOOLEAN   (* TRUE to check data-set-ready line *)
  352.                          = FALSE;
  353.    Hard_Wired          : BOOLEAN   (* TRUE if hard-wired connection     *)
  354.                          = FALSE;
  355.    Drop_Dtr_At_End     : BOOLEAN   (* TRUE to drop DTR when closing port*)
  356.                          = FALSE;
  357.    Close_Comm_For_Dos  : BOOLEAN   (* TRUE to drop DTR when Alt-J done  *)
  358.                          = TRUE;
  359.    Wait_For_Retrace    : BOOLEAN   (* TRUE to wait for retrace in DSW   *)
  360.                          = TRUE;
  361.    Wait_For_Retrace_Par: BOOLEAN   (* TRUE to wait for retrace -- param *)
  362.                          = TRUE;
  363.    Do_Xon_Xoff_Checks  : BOOLEAN   (* TRUE to use xon/xoff flow control *)
  364.                          = TRUE;
  365.    Evict_Partial_Trans : BOOLEAN   (* TRUE to throw away bad downloads  *)
  366.                          = FALSE;
  367.    Use_Ymodem_Header   : BOOLEAN   (* Send block 0 in Ymodem non-batch  *)
  368.                          = FALSE;
  369.    Use_Block_Zero      : BOOLEAN   (* Use block 0 info when received    *)
  370.                          = TRUE;
  371.    Extended_Keypad     : BOOLEAN   (* Allow extended keypad keys        *)
  372.                          = FALSE;
  373.    Extended_KeyBoard   : BOOLEAN   (* Allow extended keyboard calls     *)
  374.                          = FALSE;
  375.    Attended_Mode       : BOOLEAN   (* TRUE if running attended          *)
  376.                          = TRUE;
  377.    Edit_Insert_Mode    : BOOLEAN   (* TRUE if insert mode by default    *)
  378.                          = TRUE;
  379.    Auto_Load_FunKeys   : BOOLEAN   (* TRUE to autoload function keys    *)
  380.                          = FALSE;
  381.    Use_Dos_Buffer_In   : BOOLEAN   (* TRUE to use DOS function $A       *)
  382.                          = FALSE;
  383.    YTerm_On            : BOOLEAN   (* TRUE if YTerm transfers allowed   *)
  384.                          = FALSE;
  385.    Use_Dos_Con_Output  : BOOLEAN   (* TRUE to use DOS console writes    *)
  386.                          = FALSE;
  387.    Auto_Unload_Scripts : BOOLEAN   (* TRUE to auto unload scripts       *)
  388.                          = FALSE;
  389.    Do_Script_Tests     : BOOLEAN   (* TRUE to do script-related checks  *)
  390.                          = FALSE;
  391.    Keyboard_Locked     : BOOLEAN   (* TRUE if keyboard locked           *)
  392.                          = FALSE;
  393.    Auto_Find_FileNames : BOOLEAN   (* TRUE to find file names in trans. *)
  394.                          = TRUE;
  395.    Rlink_Prompt_Each   : BOOLEAN   (* TRUE to prompt each file, Rlink   *)
  396.                          = FALSE;
  397.    Graphics_Terminal_Mode : BOOLEAN (* TRUE if graphics terminal        *)
  398.                          = FALSE;
  399.    EGA_Present         : BOOLEAN   (* TRUE if EGA installed             *)
  400.                          = FALSE;
  401.    VGA_Present         : BOOLEAN   (* TRUE if VGA installed             *)
  402.                          = FALSE;
  403.    ATI_Ega_Wonder      : BOOLEAN   (* If ATI Wonder EGA installed       *)
  404.                          = FALSE;
  405.    Cursor_Underline    : BOOLEAN   (* TRUE = underline cursor           *)
  406.                          = TRUE;
  407.    Cursor_Blink        : BOOLEAN   (* TRUE if cursor blinks             *)
  408.                          = TRUE;
  409.    Auto_Strip_High_Bit : BOOLEAN   (* TRUE to strip high bit in term.   *)
  410.                          = FALSE;
  411.    Software_Scroll     : BOOLEAN   (* TRUE to use software scrolling.   *)
  412.                          = FALSE;
  413.    Software_Scroll_Par : BOOLEAN   (* TRUE to use software scrolling.   *)
  414.                          = FALSE;
  415.  
  416.    Current_Carrier_Status : BOOLEAN (* Has current carrier detect status*)
  417.                             = FALSE;
  418.    New_Carrier_Status     : BOOLEAN (* Has new carrier detect status    *)
  419.                             = FALSE;
  420.    Carrier_Dropped        : BOOLEAN (* TRUE if carrier dropped          *)
  421.                             = FALSE;
  422.    Video_Handler_Installed: BOOLEAN (* TRUE if new int $10 handler inst.*)
  423.                             = FALSE;
  424.    Send_Upper_Case_Only   : BOOLEAN (* TRUE to send upper case only     *)
  425.                             = FALSE;
  426.    Log_File_Open          : BOOLEAN (* TRUE if log file open            *)
  427.                             = FALSE;
  428.    Logging_On             : BOOLEAN (* TRUE to write to log             *)
  429.                             = FALSE;
  430.    Honor_Xoff_Ymodem      : BOOLEAN (* TRUE to allow xon/xoff in Ymodem *)
  431.                             = TRUE;
  432.    Allow_EGA_Graphics     : BOOLEAN (* TRUE to allow EGA graphics mode  *)
  433.                             = TRUE;
  434.  
  435. (*----------------------------------------------------------------------*)
  436. (*                           Global files                               *)
  437. (*----------------------------------------------------------------------*)
  438.  
  439. VAR
  440.    Capture_File        : Text_File (* Capture file                      *);
  441.    Script_File         : Text_File (* Script file                       *);
  442.    Log_File            : Text_File (* Log file for host mode            *);
  443.    Lst                 : Text_File (* Printer file                      *);
  444.  
  445. (* VAR *) CONST
  446.    Capture_File_Name   : FileStr   (* Capture file name                 *)
  447.                          = '';
  448.    Config_File_Name    : FileStr   (* Configuration file name           *)
  449.                          = 'PIBTERM.CNF';
  450.    Dialing_File_Name   : FileStr   (* Dialing directory file name       *)
  451.                          = 'PIBTERM.FON';
  452.    Function_Key_Name   : FileStr   (* Function key file name            *)
  453.                          = 'PIBTERM.FNC';
  454.    Translate_File_Name : FileStr   (* Translate table file name         *)
  455.                          = 'PIBTERM.TRA';
  456.    Prefix_File_Name    : FileStr   (* Dialing prefix file name          *)
  457.                          = 'PIBTERM.PRE';
  458.    Log_File_Name       : FileStr   (* Log file name                     *)
  459.                          = 'PIBTERM.LOG';
  460.    Script_File_Name    : FileStr     (* Script file name                *)
  461.                          = 'PIBTERM.SCR';
  462.  
  463.    Home_Dir_Path       : FileStr   (* Home Directory Path for PibTerm   *)
  464.                          = '';
  465.    Home_Dir            : FileStr   (* Home Directory for PibTerm        *)
  466.                          = '';
  467.    Home_Drive          : CHAR      (* Home Drive Letter for PibTerm     *)
  468.                          = ' ';
  469.    Download_Dir_Path   : FileStr   (* Download directory name           *)
  470.                          = '';
  471.    Upload_Dir_Path     : FileStr   (* Upload directory name             *)
  472.                          = '';
  473.    Script_Path         : FileStr   (* Script path                       *)
  474.                          = '';
  475.    Function_Key_Path   : FileStr   (* Function key path                 *)
  476.                          = '';
  477.  
  478.    Screen_Dump_Name    : FileStr     (* Screen dump file name           *)
  479.                          = 'SCREENDUM.DAT';
  480.  
  481.    Graphics_Dump_Name  : FileStr     (* Graphics mode screen dump name  *)
  482.                          = 'GSCRNDUM.DAT';
  483.  
  484.    Saved_Script_File_Name : FileStr(* Saved script file name            *)
  485.                          = '';
  486.  
  487.    Editor_Name         : FileStr     (* Path for editor                 *)
  488.                          = '';
  489.    Browser_Name        : FileStr     (* Path for file browser           *)
  490.                          = '';
  491.  
  492.    Lst_OK              : BOOLEAN   (* If printer opened OK              *)
  493.                          = FALSE;
  494.  
  495.    CRLF_String         : STRING[2] (* CR + LF for printing              *)
  496.                          = ^M^J;
  497.  
  498. (*----------------------------------------------------------------------*)
  499. (*                      Host mode globals                               *)
  500. (*----------------------------------------------------------------------*)
  501.  
  502. (* VAR *) CONST
  503.    Host_Mode           : BOOLEAN   (* TRUE if PibTerm in host mode      *)
  504.                          = FALSE;
  505.    Privilege           : CHAR      (* Host mode privilege level         *)
  506.                          = ' ';
  507.    Host_Mode_Upload    : FileStr   (* Upload path for host mode         *)
  508.                          = '';
  509.    Host_Mode_Download  : FileStr   (* Download path for host mode       *)
  510.                          = '';
  511.    Host_Mode_Blank_Time: LONGINT   (* Time after which to blank screen  *)
  512.                          = 180;
  513.    Host_CTTY_Device    : STRING[8] (* CTTY Device driver name prefix    *)
  514.                          = 'COM';
  515.  
  516. (*----------------------------------------------------------------------*)
  517. (*                      Spooled print file                              *)
  518. (*----------------------------------------------------------------------*)
  519.  
  520. CONST
  521.    Max_Spool_Buffer_Count = 512;
  522.  
  523. TYPE
  524.    Spool_File_Buffer_Type = ARRAY[1..Max_Spool_Buffer_Count] OF CHAR;
  525.    Spool_File_Buffer_Ptr  = ^Spool_File_Buffer_Type;
  526.  
  527. VAR
  528.    Spool_File         : FILE       (* Spooling file *);
  529.  
  530. (* VAR *) CONST
  531.    Spool_Buffer_Count : INTEGER    (* Characters in current buffer      *)
  532.                         = 0;
  533.    Spool_Buffer_Pos   : INTEGER    (* Offset of current char in buffer  *)
  534.                         = 0;
  535.    Spool_Buffer       : Spool_File_Buffer_Ptr  (* Spooling buffer       *)
  536.                         = NIL;
  537.    Print_Spooling     : BOOLEAN    (* TRUE if file being printed        *)
  538.                         = FALSE;
  539.    Printer_Setup      : AnyStr     (* Printer setup string              *)
  540.                         = '';
  541.  
  542. (*----------------------------------------------------------------------*)
  543. (*                         Review buffer                                *)
  544. (*----------------------------------------------------------------------*)
  545.  
  546. CONST
  547.    Max_Review_Line_Length = 253    (* Maximum chars in each review line *);
  548.  
  549. TYPE
  550.    Review_Buffer_Type = ARRAY[1..1] OF CHAR;
  551.    Review_Buffer_Ptr  = ^Review_Buffer_Type;
  552.  
  553. (* VAR *) CONST
  554.    Max_Review_Length : INTEGER     (* Number of chars in review buffer *)
  555.                        = 0;
  556.                                    (* Review buffer pointer *)
  557.    Review_Buffer     : Review_Buffer_Ptr
  558.                        = NIL;
  559.  
  560.    Review_Line       : AnyStr      (* Current line                      *)
  561.                        = '';
  562.  
  563.    Review_Head       : INTEGER     (* Head of review buffer             *)
  564.                        = 0;
  565.  
  566.    Review_Tail       : INTEGER     (* Tail of review buffer             *)
  567.                        = 0;
  568.  
  569. (*----------------------------------------------------------------------*)
  570. (*          Definitions for keyboard interrupt handling                 *)
  571. (*----------------------------------------------------------------------*)
  572.  
  573. CONST
  574.    Kbd_Interrupt    = 9            (* Keyboard interrupt number  *);
  575.    Kbd_ROM_Data     = $0040        (* Segment with keyboard data *);
  576.    Kbd_Flag         = $0017        (* Byte 1 of keyboard status  *);
  577.    Kbd_Flag1        = $0018        (* Byte 2 of keyboard status  *);
  578.    Kbd_Head         = $001A        (* Buffer head pointer        *);
  579.    Kbd_Tail         = $001C        (* Buffer tail pointer        *);
  580.    Kbd_Buffer       = $001E        (* Default buffer location    *);
  581.    Kbd_Buffer_End   = $003E        (* End of default buffer      *);
  582.  
  583.    Kbd_Save_Iaddr   : Pointer = Nil(* Save prev. kbd int. status *);
  584.    Kbd_Save_Scan    : BYTE    = 0  (* Save scan code header      *);
  585.  
  586. (*----------------------------------------------------------------------*)
  587. (*                    PibTerm Command Key Definitions                   *)
  588. (*----------------------------------------------------------------------*)
  589.  
  590. CONST
  591.    No_Misc_Keys       = 7;
  592.    Max_Extended_Keys  = 61;
  593.    Extended_Keys_Base = 200;
  594.    
  595. CONST
  596.    Alt_A = 30;      Alt_J = 36;      Alt_S = 31;
  597.    Alt_B = 48;      Alt_K = 37;      Alt_T = 20;
  598.    Alt_C = 46;      Alt_L = 38;      Alt_U = 22;
  599.    Alt_D = 32;      Alt_M = 50;      Alt_V = 47;
  600.    Alt_E = 18;      Alt_N = 49;      Alt_W = 17;
  601.    Alt_F = 33;      Alt_O = 24;      Alt_X = 45;
  602.    Alt_G = 34;      Alt_P = 25;      Alt_Y = 21;
  603.    Alt_H = 35;      Alt_Q = 16;      Alt_Z = 44;
  604.    Alt_I = 23;      Alt_R = 19;
  605.  
  606.    Alt_1 = 120;     Alt_5 = 124;     Alt_9 = 128;
  607.    Alt_2 = 121;     Alt_6 = 125;     Alt_0 = 129;
  608.    Alt_3 = 122;     Alt_7 = 126;     Alt_Minus = 130;
  609.    Alt_4 = 123;     Alt_8 = 127;     Alt_Equal = 131;
  610.  
  611.    Shift_Tab = 15;  Ctrl_Tab  = 151; Alt_Tab   = 172;
  612.  
  613.    F1        = 59;  Alt_F1   = 104;
  614.    Shift_F1  = 84;  Ctrl_F1  = 94;
  615.  
  616.    F2        = 60;  Alt_F2   = 105;
  617.    F3        = 61;  Alt_F3   = 106;
  618.    F4        = 62;  Alt_F4   = 107;
  619.    F5        = 63;  Alt_F5   = 108;
  620.    F6        = 64;  Alt_F6   = 109;
  621.    F7        = 65;  Alt_F7   = 110;
  622.    F8        = 66;  Alt_F8   = 111;
  623.    F9        = 67;  Alt_F9   = 112;
  624.  
  625.    F10       = 68;  Alt_F10  = 113;
  626.    Shift_F10 = 93;  Ctrl_F10 = 103;
  627.  
  628.    F11       = 133; Alt_F11  = 139;
  629.    Shift_F11 = 135; Ctrl_F11 = 137;
  630.  
  631.    F12       = 134; Alt_F12  = 140;
  632.    Shift_F12 = 136; Ctrl_F12 = 138;
  633.  
  634.    U_Arrow   = 72;  Alt_U_Arrow = 175;  Ctrl_U_Arrow = 160;
  635.    D_Arrow   = 80;  Alt_D_Arrow = 183;  Ctrl_D_Arrow = 164;
  636.    L_Arrow   = 75;  Alt_L_Arrow = 178;  Ctrl_L_Arrow = 115;
  637.    R_Arrow   = 77;  Alt_R_Arrow = 180;  Ctrl_R_Arrow = 116;
  638.  
  639.    Home      = 71;  Alt_Home      = 174;  Ctrl_Home      = 119;
  640.    End_Key   = 79;  Alt_End_Key   = 182;  Ctrl_End_Key   = 117;
  641.    PgUp      = 73;  Alt_PgUp      = 176;  Ctrl_PgUp      = 132;
  642.    PgDn      = 81;  Alt_PgDn      = 184;  Ctrl_PgDn      = 118;
  643.    Ins_Key   = 82;  Alt_Ins_Key   = 185;  Ctrl_Ins_Key   = 165;
  644.    Del_Key   = 83;  Alt_Del_Key   = 186;  Ctrl_Del_Key   = 166;
  645.    Kpd_Minus = 74;  Alt_Kpd_Minus = 177;  Ctrl_Kpd_Minus = 161;
  646.    Kpd_Plus  = 78;  Alt_Kpd_Plus  = 181;  Ctrl_Kpd_Plus  = 163;
  647.    Kpd_5     = 76;  Alt_Kpd_5     = 179;  Ctrl_Kpd_5     = 162;
  648.  
  649.    Alt_Enter  = 28;
  650.  
  651.    BS_Key      = 253;   Kpd_Enter      = 7;
  652.    Ctrl_BS_Key = 254;   Alt_Kpd_Enter  = 8;
  653.    Alt_BS      = 171;   Ctrl_Kpd_Enter = 9;
  654.  
  655.    Kpd_Star      = 1;   Kpd_Slash      = 4;
  656.    Alt_Kpd_Star  = 2;   Alt_Kpd_Slash  = 5;
  657.    Ctrl_Kpd_Star = 3;   Ctrl_Kpd_Slash = 6;
  658.  
  659.    PrtSc       = 255;
  660.    Ctrl_PrtSc  = 114;
  661.    Alt_PrtSc   = 55;
  662.  
  663.    X_U_Arrow   = 201;  Alt_X_U_Arrow = 205;  Ctrl_X_U_Arrow = 209;
  664.    X_D_Arrow   = 202;  Alt_X_D_Arrow = 206;  Ctrl_X_D_Arrow = 210;
  665.    X_L_Arrow   = 203;  Alt_X_L_Arrow = 207;  Ctrl_X_L_Arrow = 211;
  666.    X_R_Arrow   = 204;  Alt_X_R_Arrow = 208;  Ctrl_X_R_Arrow = 212;
  667.  
  668.    X_Home      = 213;  Alt_X_Home      = 219;  Ctrl_X_Home      = 225;
  669.    X_End_Key   = 214;  Alt_X_End_Key   = 220;  Ctrl_X_End_Key   = 226;
  670.    X_PgUp      = 215;  Alt_X_PgUp      = 221;  Ctrl_X_PgUp      = 227;
  671.    X_PgDn      = 216;  Alt_X_PgDn      = 222;  Ctrl_X_PgDn      = 228;
  672.    X_Ins_Key   = 217;  Alt_X_Ins_Key   = 223;  Ctrl_X_Ins_Key   = 229;
  673.    X_Del_Key   = 218;  Alt_X_Del_Key   = 224;  Ctrl_X_Del_Key   = 230;
  674.  
  675.  
  676. (* VAR *) CONST
  677.    Funk_Bases:  ARRAY[1..4]  OF BYTE (* Function key scan code bases   *)
  678.                 = ( 58, 83, 93, 103 );
  679.  
  680.    Funk_Bases_2:ARRAY[1..4]  OF BYTE (* Func key scan code bases, >F10 *)
  681.                 = ( 122, 124, 126, 128 );
  682.  
  683.    Number_Nos:  ARRAY[0..12] OF BYTE (* Alt-# indices                  *)
  684.                 = ( 10, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 11, 12 );
  685.  
  686.    Keypad_Nos      :  ARRAY[0..15] OF BYTE (* Keypad indices  *)
  687.                       = ( 82, 79, 80, 81, 75,
  688.                           76, 77, 71, 72, 73,
  689.                           83, 74, 78,  1,  4,
  690.                           7 );
  691.  
  692.    Ctrl_Keypad_Nos :  ARRAY[0..15] OF BYTE (* Ctrl-keypad indices *)
  693.                       = ( 165, 117, 164, 118, 115,
  694.                           162, 116, 119, 160, 132,
  695.                           166, 161, 163,   3,   6,
  696.                           9 );
  697.  
  698.    Alt_Keypad_Nos  :  ARRAY[0..15] OF BYTE (* Alt-keypad indices  *)
  699.                       = ( 185, 182, 183, 184, 178,
  700.                           179, 180, 174, 175, 176,
  701.                           186, 177, 181,   2,   5,
  702.                           8 );
  703.  
  704.    Misc_Keys :  ARRAY[1..No_Misc_Keys] OF BYTE (* Miscellaneous indices*)
  705.                 = ( 28, 255, 55, 114, 253, 254, 171 );
  706.  
  707.                                    (* Mapping for 101-key keyboards *)
  708.  
  709.    Ext_AX_Vals: ARRAY[1..Max_Extended_Keys] OF WORD =
  710.                 ( $E02F, $372A, $4A2D, $4E2B, $E00D,
  711.                   $9500, $9600, $8E00, $9000, $E00A,
  712.                   $8D00, $8F00, $9100, $9200, $9300,
  713.                   $A400, $3700, $4A00, $4E00, $A600,
  714.                   $48E0, $50E0, $4BE0, $4DE0, $AFE0,
  715.                   $B7E0, $B2E0, $B4E0, $8DE0, $91E0,
  716.                   $73E0, $74E0, $47E0, $4FE0, $49E0,
  717.                   $51E0, $52E0, $53E0, $97E0, $9FE0,
  718.                   $99E0, $A1E0, $A2E0, $A3E0, $77E0,
  719.                   $75E0, $84E0, $76E0, $92E0, $93E0,
  720.                   $9700, $9F00, $9900, $A100, $A200,
  721.                   $A300, $9800, $A000, $9B00, $9D00,
  722.                   $0E00  );
  723.  
  724.    Key_Values : ARRAY[1..Max_Extended_Keys] OF BYTE =
  725.                 (   4,   1,  74,  78,   7,
  726.                     6,   3, 161, 163,   9,
  727.                   160, 162, 164, 165, 166,
  728.                     5,   2, 177, 181,   8,
  729.                   201, 202, 203, 204, 205,
  730.                   206, 207, 208, 209, 210,
  731.                   211, 212, 213, 214, 215,
  732.                   216, 217, 218, 219, 220,
  733.                   221, 222, 223, 224, 225,
  734.                   226, 227, 228, 229, 230,
  735.                   219, 220, 221, 222, 223,
  736.                   224, 205, 206, 207, 208,
  737.                   171  );
  738.  
  739. (*----------------------------------------------------------------------*)
  740. (*                   Auxilliary keyboard buffers                        *)
  741. (*----------------------------------------------------------------------*)
  742.  
  743. (* VAR *) CONST
  744.    Keyboard_Buffer   : AnyStr      (* Holds program generated input  *)
  745.                        = '';
  746.    Keyboard_Line     : AnyStr      (* Holds manually generated input *)
  747.                        = '';
  748.    Keyboard_Line_Pos : INTEGER     (* Position in keyboard line      *)
  749.                        = 0;
  750.  
  751.                                    (* Command-key definitions        *)
  752. (* VAR *) CONST
  753.    Alt_Let_Set       : SET OF BYTE =
  754.                      [ Alt_A, Alt_B, Alt_C, Alt_D, Alt_E, Alt_F, Alt_G,
  755.                        Alt_H, Alt_I, Alt_J, Alt_K, Alt_L, Alt_M, Alt_N,
  756.                        Alt_O, Alt_P, Alt_Q, Alt_R, Alt_S, Alt_T, Alt_U,
  757.                        Alt_V, Alt_W, Alt_X, Alt_Y, Alt_Z ];
  758.  
  759. (*----------------------------------------------------------------------*)
  760. (*                   Incoming/Outgoing key definitions                  *)
  761. (*----------------------------------------------------------------------*)
  762.  
  763. CONST
  764.    Max_Key_Def = 255;
  765.  
  766. TYPE
  767.    Key_Record = RECORD
  768.                    Def  : StringPtr;
  769.                    Name : STRING[4];
  770.                 END;
  771.  
  772. VAR
  773.                                    (* Key strings *)
  774.  
  775.    Key_Definitions  : ARRAY[0..Max_Key_Def] OF Key_Record;
  776.  
  777.                                    (* Sort index of key names *)
  778.  
  779.    Key_Indices      : ARRAY[0..Max_Key_Def] OF BYTE;
  780.    NKey_Indices     : INTEGER      (* Number of sorted key names *);
  781.  
  782.    Key_No           : INTEGER      (* Key number to execute             *);
  783.  
  784. (* VAR *) CONST
  785.    FK_CR        : CHAR = '|'       (* Function key definition CR        *);
  786.    FK_Delay     : CHAR = '~'       (* Function key def. 1 second wait   *);
  787.    FK_Wait_For  : CHAR = '`'       (* Function key wait for next char   *);
  788.    FK_Ctrl_Mark : CHAR = '^'       (* Marks next char as ctrl character *);
  789.    FK_Script_Ch : CHAR = '@'       (* Script to execute follows         *);
  790.    FK_Delay_Time: INTEGER = 10     (* Delay to insert between each char *);
  791.  
  792.                                    (* Incoming character translate table *)
  793. VAR
  794.    TrTab        : ARRAY[CHAR] OF CHAR;
  795.  
  796. (* VAR *) CONST
  797.    BS_String           : AnyStr    (* String to send when Back Space hit*)
  798.                          = ^H;
  799.    Ctrl_BS_String      : AnyStr    (* String to send when CTRL BS hit   *)
  800.                          = #127;
  801.  
  802. (*----------------------------------------------------------------------*)
  803. (*               Global communications variables                        *)
  804. (*----------------------------------------------------------------------*)
  805.  
  806. (* VAR *) CONST
  807.    Data_Bits     : 5..8 = 8;
  808.    Parity        : CHAR = 'N';
  809.    Stop_Bits     : 0..2 = 1;
  810.    Comm_Port     : 1..4 = 1;
  811.    Baud_Rate     : 110..38400 = 2400;
  812.    Cmd_Line_Port : 0..4 = 0;
  813.  
  814. (* STRUCTURED *) CONST
  815.    N_Baud_Rates = 11;
  816.  
  817.    Baud_Rates: ARRAY[ 1 .. N_Baud_Rates ] OF WORD
  818.                = ( 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200,
  819.                    38400, 57600 );
  820.  
  821. (*----------------------------------------------------------------------*)
  822. (*          Global variables for view file/directory/area codes         *)
  823. (*----------------------------------------------------------------------*)
  824.  
  825. VAR
  826.    View_Count     : INTEGER;
  827.    View_Line      : STRING[128];
  828.    View_Done      : BOOLEAN;
  829.    View_Char      : STRING[1];
  830.    View_Y         : INTEGER;
  831.  
  832. (*----------------------------------------------------------------------*)
  833. (*           Types and Variables for Terminal Emulation Facilities      *)
  834. (*----------------------------------------------------------------------*)
  835.  
  836. CONST
  837.    NumberTerminalTypes   = 14       (* # terminal types - 1         *);
  838.    Actual_N_Of_Terminals = 15       (* # terminal types implemented *);
  839.    Max_User_Terminals    = 5        (* # user terminals allowed     *);
  840.  
  841. TYPE
  842.    Terminal_Type = ( Dumb,     VT52,     Ansi,   VT100,  Gossip,
  843.                      HostMode, TEK4010,  ADM3a,  ADM5,   TV925,
  844.                      User1,    User2,    User3,  User4,  User5   );
  845.  
  846. (* VAR *) CONST
  847.                                    (* Type of terminal to emulate      *)
  848.  
  849.    Terminal_To_Emulate : Terminal_Type = VT100;
  850.  
  851.                                    (* Saves previous term. type        *)
  852.  
  853.    Saved_Gossip_Term   : Terminal_Type = VT100;
  854.  
  855.                                    (* List of terminals to emulate     *)
  856.  
  857.    Terminal_Type_List  : ARRAY[0..NumberTerminalTypes] OF Terminal_Type =
  858.                            ( Dumb,     VT52,     Ansi,     VT100,
  859.                              Gossip,   HostMode, TEK4010,  ADM3a,
  860.                              ADM5,     TV925,    User1,    User2,
  861.                              User3,    User4,    User5 );
  862.  
  863.                                    (* Terminal names *)
  864.  
  865.    Terminal_Name_List  : ARRAY[0..NumberTerminalTypes] OF STRING[7] =
  866.                           ( 'Dumb',     'VT52',     'ANSI',     'VT100',
  867.                             'Gossip',   'Host',     'TEK4010',  'ADM3A',
  868.                             'ADM5',     'TV925',    'User1',    'User2',
  869.                             'User3',    'User4',    'User5' );
  870.  
  871.                                    (* Names for status line *)
  872. (* VAR *) CONST
  873.    Status_Line_Name    : STRING[132] = '';
  874.    Short_Terminal_Name : STRING[20]  = '';
  875.  
  876. (* VAR *) CONST                    (* VT100 answerback message *)
  877.  
  878.    VT100_Answerback_Message : STRING[20] = '';
  879.  
  880. (* VAR *) CONST
  881.    KeyPad_Appl_On_File   : FileStr (* Key defs to read when appl ON *)
  882.                            = '';
  883.  
  884.    KeyPad_Appl_Off_File  : FileStr (* Key defs to read when appl OFF *)
  885.                            = '';
  886.  
  887. VAR
  888.                                      (* Remember cursor/attributes      *)
  889.    Save_Row_Position     : INTEGER   (* Save row position               *);
  890.    Save_Col_Position     : INTEGER   (* Save column position            *);
  891.    Save_BG_Color         : INTEGER   (* Save background color           *);
  892.    Save_FG_Color         : INTEGER   (* Save foreground color           *);
  893.    Save_Graphics_Mode    : BOOLEAN   (* Save graphics mode              *);
  894.    Save_Bolding          : BOOLEAN   (* Save bolding mode               *);
  895.    Save_Blinking         : BOOLEAN   (* Save blinking mode              *);
  896.    Save_Done             : BOOLEAN   (* If save actually done           *);
  897.    Save_Origin_Mode      : BOOLEAN   (* Save origin mode setting        *);
  898.    Save_Top_Scroll       : INTEGER   (* Save top line in scrolling reg. *);
  899.    Save_Bottom_Scroll    : INTEGER   (* Save bottom line in scroll reg. *);
  900.  
  901.    Ansi_ForeGround_Color : INTEGER   (* Global foreground color here    *);
  902.    Ansi_BackGround_Color : INTEGER   (* Global background color here    *);
  903.    Ansi_Underline_Color  : INTEGER   (* Color for underlines            *);
  904.    Ansi_Bold_Color       : INTEGER   (* Color for bolding               *);
  905.  
  906.    FG                    : INTEGER   (* Foreground color                *);
  907.    BG                    : INTEGER   (* Background color                *);
  908.  
  909.    Save_Global_FG        : INTEGER   (* Save global foreground color    *);
  910.    Save_Global_BG        : INTEGER   (* Save global background color    *);
  911.    Save_FG               : INTEGER   (* Save foreground color           *);
  912.    Save_BG               : INTEGER   (* Save background color           *);
  913.    Save_EG               : INTEGER   (* Save border color               *);
  914.    Save_FG1              : INTEGER   (* Save foreground color           *);
  915.    Save_BG1              : INTEGER   (* Save background color           *);
  916.  
  917.                                    (* General emulation variables *)
  918. (* VAR *) CONST
  919.    Graphics_Mode       : BOOLEAN   (* TRUE if graphics mode on        *)
  920.                          = FALSE;
  921.    Alt_KeyPad_Mode     : BOOLEAN   (* TRUE if alternate keypad in use *)
  922.                          = FALSE;
  923.    Hold_Screen_Mode    : BOOLEAN   (* TRUE if in hold screen mode     *)
  924.                          = FALSE;
  925.    Reset_Requested     : BOOLEAN   (* TRUE to reset terminal          *)
  926.                          = FALSE;
  927.    Auto_Print_Mode     : BOOLEAN   (* IF auto print mode in effect    *)
  928.                          = FALSE;
  929.    Printer_Ctrl_Mode   : BOOLEAN   (* IF printer controller mode on   *)
  930.                          = FALSE;
  931.    Insertion_Mode      : BOOLEAN   (* If insertion mode on            *)
  932.                          = FALSE;
  933.    Double_Width_Mode   : BOOLEAN   (* Double width characters         *)
  934.                          = FALSE;
  935.    Skip_All_Mode       : BOOLEAN   (* Skip all chars in line          *)
  936.                          = FALSE;
  937.    Bolding_On          : BOOLEAN   (* TRUE if bolding on              *)
  938.                          = FALSE;
  939.    Blinking_On         : BOOLEAN   (* TRUE if blinking on             *)
  940.                          = FALSE;
  941.    Reverse_On          : BOOLEAN   (* TRUE if reverse video on        *)
  942.                          = FALSE;
  943.    Width_132           : BOOLEAN   (* TRUE if 132 column mode         *)
  944.                          = FALSE;
  945.    New_Line            : BOOLEAN   (* TRUE if LF -> CR +LF            *)
  946.                          = FALSE;
  947.    New_Line_Param      : BOOLEAN   (* TRUE if LF -> CR +LF (.CNF)     *)
  948.                          = FALSE;
  949.    Getting_Music       : BOOLEAN   (* TRUE if getting music           *)
  950.                          = FALSE;
  951.    Origin_Mode         : BOOLEAN   (* TRUE for region origin mode     *)
  952.                          = FALSE;
  953.    Auto_Change_Arrows  : BOOLEAN   (* TRUE to handle cursor key mode  *)
  954.                                    (* changes in VT100 emulation.     *)
  955.                          = FALSE;
  956.  
  957.                                    (* Escape mode processing      *)
  958. (* VAR *) CONST
  959.    Escape_Mode         : BOOLEAN     (* If processing escape sequence   *)
  960.                          = FALSE;
  961.    Escape_Number       : INTEGER     (* # of numeric parms in esc seq.  *)
  962.                          = 0;
  963.  
  964. VAR
  965.                                      (* Holds numeric parms in esc seq  *)
  966.    Escape_Register     : ARRAY[1..100] OF BYTE;
  967.    Escape_Str          : AnyStr      (* Collects string arg in esc seq  *);
  968.    Escape_Type         : CHAR        (* Type of escape seq. being done  *);
  969.    Reg_Val             : INTEGER     (* General utility register value  *);
  970.  
  971.                                      (* Attributes for each line        *)
  972.  
  973.    Line_Attributes     : ARRAY[1..100] OF BYTE;
  974.  
  975.                                      (* Save current scrolling region   *)
  976.    Top_Scroll          : INTEGER;
  977.    Bottom_Scroll       : INTEGER;
  978.  
  979.    Ansi_Last_Line      : INTEGER   (* Last line in display *);
  980.  
  981. (* VAR *) CONST
  982.                                    (* LED status in VT100  *)
  983.  
  984.    VT100_Led_Vector    : ARRAY[1..4] OF BOOLEAN
  985.                          = ( FALSE, FALSE, FALSE, FALSE );
  986.  
  987.  
  988. (* VAR *) CONST                    (* Names of user-defined terminals *)
  989.  
  990.    User_Term_Name      : ARRAY[1..Max_User_Terminals] OF FileStr =
  991.                          ('USER1.TDE','USER2.TDE','USER3.TDE',
  992.                           'USER4.TDE','USER5.TDE');
  993.  
  994. (*--------------------------------------------------------------------------*)
  995. (*                    Display action type definitions                       *)
  996. (*--------------------------------------------------------------------------*)
  997.  
  998. (*--------------------------------------------------------------------------*)
  999. (*   CursorUp        --- Move cursor up one line                            *)
  1000. (*   CursorDown      --- Move cursor down one line                          *)
  1001. (*   CursorLeft      --- Move cursor left one column                        *)
  1002. (*   CursorRight     --- Move cursor right one column                       *)
  1003. (*   ClearScreen     --- Clear entire screen                                *)
  1004. (*   ClearEOS        --- Clear to end of screen from current position       *)
  1005. (*   ClearSCur       --- Clear from start of screen to current position     *)
  1006. (*   ClearLine       --- Clear entire line                                  *)
  1007. (*   ClearEOL        --- Clear to end of line                               *)
  1008. (*   ClearLCur       --- Clear start of line to current position            *)
  1009. (*   CursorHome      --- Home the cursor                                    *)
  1010. (*   InsertCharA     --- Insert a character after current position          *)
  1011. (*   InsertCharB     --- Insert a character before current position         *)
  1012. (*   InsertLineA     --- Insert line after current line                     *)
  1013. (*   InsertLineB     --- Insert line before current line                    *)
  1014. (*   DeleteChar      --- Delete character at current position               *)
  1015. (*   DeleteLine      --- Delete current line                                *)
  1016. (*   StartInsert     --- Enter character insertion mode                     *)
  1017. (*   EndInsert       --- Exit character insertion mode                      *)
  1018. (*   NormalVideo     --- Enter normal video mode                            *)
  1019. (*   ReverseVideo    --- Enter reverse video mode                           *)
  1020. (*   StartBlink      --- Start blink mode                                   *)
  1021. (*   EndBlink        --- End blink mode                                     *)
  1022. (*   StartUnderline  --- Start underline mode                               *)
  1023. (*   EndUnderline    --- End underline mode                                 *)
  1024. (*   StartBold       --- Start bold mode                                    *)
  1025. (*   EndBold         --- End bold mode                                      *)
  1026. (*   ReverseIndex    --- Reverse line feed                                  *)
  1027. (*   PrintLine       --- Print current line                                 *)
  1028. (*   PrintPage       --- Print whole screen                                 *)
  1029. (*   CursorPos       --- Position cursor                                    *)
  1030. (*   StartAltKey     --- Enter alternate keypad mode                        *)
  1031. (*   EndAltKey       --- End alternate keypad mode                          *)
  1032. (*   StartAutoPrint  --- Start autoprint mode                               *)
  1033. (*   EndAutoPrint    --- End autoprint mode                                 *)
  1034. (*   SetTab          --- Set tab stop                                       *)
  1035. (*   ClearTab        --- Clear tab stop                                     *)
  1036. (*   StartDim        --- Start dim mode                                     *)
  1037. (*   EndDim          --- End dim mode                                       *)
  1038. (*   DoCISBESCI      --- Do CompuServe B protocol <ESC>I response           *)
  1039. (*   DoCISBDLE       --- Do CompuServe B protocol <DLE> response            *)
  1040. (*   DoCISBENQ       --- Do CompuServe B protocol <ENQ> response            *)
  1041. (*   DoKermitReceive --- Do Kermit autodownload                             *)
  1042. (*   DoZmodemReceive --- Do Zmodem autodownload                             *)
  1043. (*--------------------------------------------------------------------------*)
  1044.  
  1045.  
  1046. TYPE
  1047.    Display_Action = ( CursorUp,        CursorDown,     CursorLeft,    CursorRight,
  1048.                       ClearScr,        ClearScrH,      ClearEOS,      ClearSCur,
  1049.                       ClearLine,
  1050.                       ClearEOL,        ClearLCur,      CursorHome,    InsertCharA,
  1051.                       InsertCharB,     InsertLineA,    InsertLineB,   DeleteChar,
  1052.                       DeleteLine,      StartInsert,    EndInsert,     NormalVideo,
  1053.                       ReverseVideo,    StartBlink,     EndBlink,      StartUnderline,
  1054.                       EndUnderline,    StartBold,      EndBold,
  1055.                       StartDim,        EndDim,         ReverseIndex,
  1056.                       PrintLine,       PrintPage,      CursorPosVT52, StartAltKey,
  1057.                       EndAltKey,       StartAutoPrint, EndAutoPrint,  SetTab,
  1058.                       ClearTab,        DisplayChar,    StartPrintControl,
  1059.                       EndPrintControl, IdentifyVT52,
  1060.                       StartGraphicsMode, EndGraphicsMode, TV950Video, Swallow,
  1061.                       CursorPosH,        CursorPosV,
  1062.                       StartVT52HoldScreen, EndVT52HoldScreen,
  1063.                       EnterVT100, EnterVT52,
  1064.                       ExecPCCommands, SendMahoneyOn,
  1065.                       EnterState1, EnterState2, EnterState3, EnterState4, EnterState5,
  1066.                       Index, VT52HT, VT52LF, DoCISBESCI, DoCISBDLE, DoCISBENQ,
  1067.                       DoKermitReceive, DoZmodemReceive
  1068.                     );
  1069.  
  1070.    Display_Action_Vector_Type   = ARRAY[CHAR] OF Display_Action;
  1071.    Display_Action_Vector_Ptr    = ^Display_Action_Vector_Type;
  1072.  
  1073.    Display_Action_Chars_Type    = ARRAY[1..1] OF CHAR;
  1074.    Display_Action_Actions_Type  = ARRAY[1..1] OF Display_Action;
  1075.  
  1076.    Display_Action_Chars_Ptr     = ^Display_Action_Chars_Type;
  1077.    Display_Action_Actions_Ptr   = ^Display_Action_Actions_Type;
  1078.  
  1079.    Character_Vector_Type        = ARRAY[CHAR] OF CHAR;
  1080.    Character_Vector_Ptr_Type    = ^Character_Vector_Type;
  1081.  
  1082. (*--------------------------------------------------------------------------*)
  1083. (*                    Display action vectors                                *)
  1084. (*--------------------------------------------------------------------------*)
  1085.  
  1086. CONST
  1087.    MaxDisplayStates   = 10;
  1088.    MaxDisplayCharSets = 5;
  1089.  
  1090. TYPE
  1091.    Tab_Stop_Vector    = ARRAY[1..132] OF BYTE;
  1092.  
  1093. VAR
  1094.    Display_Action_Ptr      : ARRAY[1..MaxDisplayStates] OF Display_Action_Vector_Ptr;
  1095.    Display_Action_State    : 1..MaxDisplayStates;
  1096.  
  1097.    Display_Char_Set_Ptr    : ARRAY[1..MaxDisplayCharSets] OF Character_Vector_Ptr_Type;
  1098.    Character_Set_Ptr       : Character_Vector_Ptr_Type;
  1099.  
  1100.                                        (* Tab stuff *)
  1101. VAR
  1102.    Number_Tab_Stops        : INTEGER   (* Number of tabs currently defined *);
  1103.  
  1104.                                        (* Tab positions                    *)
  1105.  
  1106.    Tab_Stops               : Tab_Stop_Vector;
  1107.  
  1108. (*----------------------------------------------------------------------*)
  1109. (*           Global variables for phone directory handling              *)
  1110. (*----------------------------------------------------------------------*)
  1111.  
  1112. CONST
  1113.    Max_Phone_Prefixes        = 5;
  1114.    Max_Dial_Nos              = 10;
  1115.    Dialing_Dir_Entry_Length  = 79;
  1116.  
  1117. (* STRUCTURED *) CONST
  1118.    Phone_Prefix_Chars   : ARRAY[ 1 .. Max_Phone_Prefixes ] OF CHAR
  1119.                           = ( '+', '-', '!', '@', '#' );
  1120.  
  1121. TYPE
  1122.  
  1123.    Char_25  = PACKED ARRAY[ 1 .. 25 ] OF CHAR;
  1124.    Char_15  = PACKED ARRAY[ 1 .. 15 ] OF CHAR;
  1125.    Char_9   = PACKED ARRAY[ 1 .. 9  ] OF CHAR;
  1126.    Char_8   = PACKED ARRAY[ 1 .. 8  ] OF CHAR;
  1127.    Char_5   = PACKED ARRAY[ 1 .. 5  ] OF CHAR;
  1128.    Char_2   = PACKED ARRAY[ 1 .. 2  ] OF CHAR;
  1129.  
  1130.    String30 = STRING[30];
  1131.  
  1132.                                    (* Dialing file entry *)
  1133.    Phone_Number_Record = RECORD
  1134.                             Phone_Name        : Char_25;
  1135.                             Phone_Number      : Char_15;
  1136.                             Phone_Baud        : Char_5;
  1137.                             Phone_Parity      : CHAR;
  1138.                             Phone_DataBits    : CHAR;
  1139.                             Phone_StopBits    : CHAR;
  1140.                             Phone_Echo        : CHAR;
  1141.                             Phone_BackSpace   : CHAR;
  1142.                             Phone_LineFeed    : CHAR;
  1143.                             Phone_Term_Type   : CHAR;
  1144.                             Phone_Trans_Type  : Char_2;
  1145.                             Phone_Script      : Char_9;
  1146.                             Phone_Last_Date   : Char_8;
  1147.                             Phone_Last_Time   : Char_8;
  1148.                          END;
  1149.                                    (* Dialing directory *)
  1150.  
  1151.    Dialing_Directory_Type = ARRAY[1..1] OF Phone_Number_Record;
  1152.  
  1153.    Dialing_Directory_Ptr  = ^Dialing_Directory_Type;
  1154.  
  1155.    Dialing_List_Record    = RECORD
  1156.                                Number: STRING[30];
  1157.                                Tries : INTEGER;
  1158.                             END;
  1159.  
  1160.                                    (* Current phone entry data *)
  1161. VAR
  1162.    Phone_Entry_Data    : Phone_Number_Record;
  1163.  
  1164. (* VAR *) CONST
  1165.                                    (* Current phone record number *)
  1166.    Phone_Entry_Number  : INTEGER = -1;
  1167.  
  1168.                                    (* Current phone page number   *)
  1169.    Phone_Entry_Page    : INTEGER = 1;
  1170.                                    (* Current phone section       *)
  1171.    Dialing_Page        : INTEGER = 1;
  1172.  
  1173.                                    (* Phone prefix numbers        *)
  1174.  
  1175.    Phone_Prefix_Nos    : ARRAY[ 1 .. Max_Phone_Prefixes ] OF ShortStr
  1176.                          = ( '', '', '', '', '' );
  1177.  
  1178.    Default_Prefix      : CHAR      (* Default prefix character    *)
  1179.                          = ' ';
  1180.    Default_Postfix     : CHAR      (* Default postfix character   *)
  1181.                          = ' ';
  1182.    Phone_Number        : String30  (* Phone number to dial        *)
  1183.                          = '';
  1184.    Prefix_Str          : ShortStr  (* Phone number prefix         *)
  1185.                          = '';
  1186.    Postfix_Str         : ShortStr  (* Phone number postfix        *)
  1187.                          = '';
  1188.  
  1189.    N_Dial_Nos          : INTEGER   (* # of dial list entries      *)
  1190.                          = 0;
  1191.  
  1192.    I_Dial_Nos          : INTEGER   (* Current dial list entry     *)
  1193.                          = 0;
  1194.  
  1195.                                    (* Dialing list entries        *)
  1196. VAR
  1197.    Dial_Nos            : ARRAY[1..Max_Dial_Nos] OF Dialing_List_Record;
  1198.  
  1199. (* VAR *) CONST
  1200.                                    (* Dialing directory size *)
  1201.    Dialing_Dir_Size    : INTEGER
  1202.                          = 200;
  1203.  
  1204.    Dialing_Dir_Size_Max: INTEGER
  1205.                          = 200;
  1206.                                    (* Phone directory *)
  1207.  
  1208.    Dialing_Directory   : Dialing_Directory_Ptr = NIL;
  1209.  
  1210.    Use_Short_Dial_Menu : BOOLEAN   (* TRUE to use 1-line dial prompt *)
  1211.                          = FALSE;
  1212.  
  1213.    Any_Dialing_Changes : BOOLEAN   (* TRUE if any dialing entries changed *)
  1214.                          = FALSE;
  1215.  
  1216.    Script_Dialed       : BOOLEAN   (* TRUE if doing linked script       *)
  1217.                          = FALSE;
  1218.  
  1219. (*----------------------------------------------------------------------*)
  1220. (*                     Global variables for modem                       *)
  1221. (*----------------------------------------------------------------------*)
  1222.  
  1223. (* VAR *) CONST
  1224.    Modem_Init          : AnyStr    (* Modem initialization string *)
  1225.                          = 'ATZ|~ATX1|';
  1226.    Modem_Dial          : ShortStr  (* Modem dialing command       *)
  1227.                          = 'ATDT';
  1228.    Modem_Dial_End      : ShortStr  (* Modem end for dial command  *)
  1229.                          = '|';
  1230.    Modem_Busy          : ShortStr  (* Modem return if line busy   *)
  1231.                          = 'BUSY';
  1232.    Modem_Connect       : ShortStr  (* Modem connect message       *)
  1233.                          = 'CONNECT';
  1234.    Modem_No_Carrier    : ShortStr  (* Modem no carrier message    *)
  1235.                          = 'NO CARRIER';
  1236.    Modem_Escape        : ShortStr  (* Modem escape command        *)
  1237.                          = '+++';
  1238.    Modem_Escape_Time   : INTEGER   (* Time in mil. for escape     *)
  1239.                          = 1500;
  1240.    Modem_Hang_Up       : ShortStr  (* Modem hangup command        *)
  1241.                          = 'ATH0|';
  1242.    Modem_Time_Out      : LONGINT   (* Modem time out value        *)
  1243.                          = 60;
  1244.    Modem_Redial_Delay  : LONGINT   (* Modem redial delay          *)
  1245.                          = 45;
  1246.    Modem_Answer        : ShortStr  (* Modem answer phone          *)
  1247.                          = 'ATA|';
  1248.    Modem_Host_Set      : AnyStr    (* Modem host mode setup       *)
  1249.                          = 'ATZ|~ATX1|~ATS0=1|';
  1250.    Modem_Host_UnSet    : AnyStr    (* Modem host mode endup       *)
  1251.                          = 'ATZ|~ATX1|~ATS0=0|';
  1252.    Modem_Command_Delay : INTEGER   (* Ms between command chars    *)
  1253.                          = 10;
  1254.    Modem_Carrier_High  : BOOLEAN   (* TRUE if carrier line high   *)
  1255.                          = FALSE;
  1256.    Modem_Ring          : ShortStr  (* Modem ring detect message   *)
  1257.                          = 'RING';
  1258.    Host_Auto_Baud      : BOOLEAN   (* Attempt auto speed detect   *)
  1259.                          = TRUE;
  1260.    Modem_Hold_Line     : BOOLEAN   (* Hold line after failed dial *)
  1261.                          = FALSE;
  1262.  
  1263. (*----------------------------------------------------------------------*)
  1264. (*                     Useful character sets                            *)
  1265. (*----------------------------------------------------------------------*)
  1266.  
  1267.    Digits      : SET OF '0'..'9' = ['0'..'9'];
  1268.    Lets        : SET OF 'A'..'Z' = [ 'A'..'G','L'..'P' ];
  1269.