home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / pibterm / pibt41s4.arc / SETPARMB.MOD < prev    next >
Text File  |  1988-03-21  |  29KB  |  884 lines

  1. (*----------------------------------------------------------------------*)
  2. (*          Get_Baud_Rate --- Get Baud Rate for Communications          *)
  3. (*----------------------------------------------------------------------*)
  4.  
  5. PROCEDURE Get_Baud_Rate;
  6.  
  7. VAR
  8.    Baud_Menu   : Menu_Type;
  9.    I           : INTEGER;
  10.    Default     : INTEGER;
  11.    Baud_String : AnyStr;
  12.    Baud_SVal   : STRING[5];
  13.  
  14. BEGIN (* Get_Baud_Rate *)
  15.                                    (* Get current baud rate *)
  16.    Default     := 5;
  17.    Baud_String := '';
  18.  
  19.    FOR I := 1 TO N_Baud_Rates DO
  20.       BEGIN
  21.          IF Baud_Rate = Baud_Rates[I] THEN
  22.             Default := I;
  23.          STR( Baud_Rates[I] , Baud_SVal );
  24.          Baud_String := Baud_String + Baud_SVal + ';';
  25.       END;
  26.                                    (* Display menu and get choice *)
  27.  
  28.    Make_And_Display_Menu( Baud_Menu, N_Baud_Rates, 10, 54, 0, 0, Default,
  29.                          'Baud Rate: ',
  30.                          Baud_String,
  31.                          TRUE, TRUE, I );
  32.  
  33.    IF ( I > 0 ) THEN
  34.       BEGIN
  35.          Comm_Port_Changed := ( Baud_Rate <> Baud_Rates[ I ] ) OR Comm_Port_Changed;
  36.          Baud_Rate         := Baud_Rates[ I ];
  37.       END;
  38.  
  39. END   (* Get_Baud_Rate *);
  40.  
  41. (*----------------------------------------------------------------------*)
  42. (*        Get_Comm_Port --- Get Port Number for Communications          *)
  43. (*----------------------------------------------------------------------*)
  44.  
  45. PROCEDURE Get_Comm_Port;
  46.  
  47. VAR
  48.    Port_Menu   : Menu_Type;
  49.    I           : INTEGER;
  50.    J           : INTEGER;
  51.  
  52. (* STRUCTURED *) CONST
  53.    Serial_Str : STRING[12] = 'Serial Port ';
  54.  
  55. BEGIN (* Get_Comm_Port *)
  56.                                    (* Display menu and get choice *)
  57.  
  58.    Make_And_Display_Menu( Port_Menu, 4, 10, 54, 0, 0, Comm_Port,
  59.                           'Serial Port: ',
  60.                           Serial_Str + '1 (COM1:);' +
  61.                           Serial_Str + '2 (COM2:);' +
  62.                           Serial_Str + '3 (COM3:);' +
  63.                           Serial_Str + '4 (COM4:);',
  64.                           TRUE, TRUE, J );
  65.  
  66.                                    (* Get choice *)
  67.    I := Comm_Port;
  68.  
  69.    IF ( J > 0 ) THEN
  70.       BEGIN
  71.          Comm_Port_Changed := ( Comm_Port <> J ) OR Comm_Port_Changed;
  72.          Comm_Port         := J;
  73.       END;
  74.  
  75. END   (* Get_Comm_Port *);
  76.  
  77. (*----------------------------------------------------------------------*)
  78. (*            Get_Parity --- Get Parity for Communications              *)
  79. (*----------------------------------------------------------------------*)
  80.  
  81. PROCEDURE Get_Parity;
  82.  
  83. CONST
  84.    Parities:   ARRAY[ 1 .. 5 ] OF Char
  85.                = ( 'E', 'O', 'N', 'M', 'S' );
  86.  
  87. VAR
  88.    Parity_Menu   : Menu_Type;
  89.    Default       : INTEGER;
  90.    I             : INTEGER;
  91.  
  92. BEGIN (* Get_Parity *)
  93.                                    (* Get Current Parity *)
  94.    Default := 3;
  95.  
  96.    FOR I := 1 TO 5 DO
  97.       IF Parity = Parities[I] THEN
  98.          Default := I;
  99.                                    (* Display menu and get choice *)
  100.  
  101.    Make_And_Display_Menu( Parity_Menu, 5, 10, 54, 0, 0, Default,
  102.                           'Parity: ',
  103.                           'Even;Odd;None;Mark;Space;',
  104.                           FALSE, TRUE, I );
  105.  
  106.    IF ( I > 0 ) THEN
  107.       BEGIN
  108.          Comm_Port_Changed := ( Parity <> Parities[ I ] ) OR Comm_Port_Changed;
  109.          Parity            := Parities[ I ];
  110.       END;
  111.  
  112. END   (* Get_Parity *);
  113.  
  114. (*----------------------------------------------------------------------*)
  115. (*          Get_Stop_Bits --- Get Stop Bits for Communications          *)
  116. (*----------------------------------------------------------------------*)
  117.  
  118. PROCEDURE Get_Stop_Bits;
  119.  
  120. VAR
  121.    Stop_Menu   : Menu_Type;
  122.    I           : INTEGER;
  123.  
  124. BEGIN (* Get_Stop_Bits *)
  125.                                    (* Display menu and get choice *)
  126.  
  127.    Make_And_Display_Menu( Stop_Menu, 2, 10, 54, 0, 0, Stop_Bits,
  128.                           'Stop Bits: ',
  129.                           '1;2;',
  130.                           FALSE, TRUE, I );
  131.  
  132.    IF ( I > 0 ) THEN
  133.       BEGIN
  134.          Comm_Port_Changed := ( Stop_Bits <> I ) OR Comm_Port_Changed;
  135.          Stop_Bits         := I;
  136.       END;
  137.  
  138. END   (* Get_Stop_Bits *);
  139.  
  140. (*----------------------------------------------------------------------*)
  141. (*          Get_Data_Bits --- Get Data Bits for Communications          *)
  142. (*----------------------------------------------------------------------*)
  143.  
  144. PROCEDURE Get_Data_Bits;
  145.  
  146. VAR
  147.    Bits_Menu   : Menu_Type;
  148.    I           : INTEGER;
  149.  
  150. BEGIN (* Get_Data_Bits *)
  151.                                    (* Display menu and get choice *)
  152.  
  153.    Make_And_Display_Menu( Bits_Menu, 2, 10, 54, 0, 0, Data_Bits - 6,
  154.                           'Data Bits: ',
  155.                           '7;8;',
  156.                           FALSE, TRUE, I );
  157.  
  158.    IF ( I > 0 ) THEN
  159.       Data_Bits := I + 6;
  160.  
  161. END   (* Get_Data_Bits *);
  162.  
  163. (*----------------------------------------------------------------------*)
  164. (*      Get_Comm_Port_Hardware --- Get hardware addresses for com ports *)
  165. (*----------------------------------------------------------------------*)
  166.  
  167. PROCEDURE Get_Comm_Port_Hardware;
  168.  
  169. VAR
  170.    Port_Item : INTEGER;
  171.  
  172. BEGIN (* Get_Comm_Port_Hardware *)
  173.  
  174.    Get_General_Setup( 'P1 I1 V1 P2 I2 V2 P3 I3 V3 P4 I4 V4 ',
  175.                       'Serial port hardware settings', ' ' );
  176.  
  177.                                    (* Set new port addresses *)
  178.    Comm_Port_Changed := TRUE;
  179.  
  180.    FOR Port_Item := 1 TO MaxComPorts DO
  181.       Async_Setup_Port( Port_Item,
  182.                         Default_Com_Base[Port_Item],
  183.                         Default_Com_Irq [Port_Item],
  184.                         Default_Com_Int [Port_Item] );
  185.  
  186. END   (* Get_Comm_Port_Hardware *);
  187.  
  188. (*----------------------------------------------------------------------*)
  189. (*            Get_Comm_Settings --- Get communications settings         *)
  190. (*----------------------------------------------------------------------*)
  191.  
  192. PROCEDURE Get_Comm_Settings;
  193.  
  194. VAR
  195.    Comm_Item    : INTEGER;
  196.    Local_Save   : Saved_Screen_Ptr;
  197.  
  198. (*----------------------------------------------------------------------*)
  199.  
  200. PROCEDURE Do_Comm_Defines;
  201.  
  202. BEGIN (* Do_Comm_Defines *)
  203.                                    (* Set up parameter addresses  *)
  204.    Param_Count  := 0;
  205.    Param_ValCol := 0;
  206.  
  207.    Define_Param_For_Display( 'PO' );   (* Comm_Port *)
  208.    Define_Param_For_Display( 'BA' );   (* Baud_Rate *)
  209.    Define_Param_For_Display( 'PA' );   (* Parity *)
  210.    Define_Param_For_Display( 'DA' );   (* Data_Bits *)
  211.    Define_Param_For_Display( 'ST' );   (* Stop_Bits *)
  212.    Define_Param_For_Display( 'LF' );   (* Add_LF *)
  213.    Define_Param_For_Display( 'NL' );   (* New_Line *)
  214.    Define_Param_For_Display( 'XS' );   (* Check_CTS *)
  215.    Define_Param_For_Display( 'XD' );   (* Check_DSR *)
  216.    Define_Param_For_Display( 'HW' );   (* Hard_Wired *)
  217.    Define_Param_For_Display( 'BL' );   (* Break_Length *)
  218.    Define_Param_For_Display( 'DR' );   (* Drop_Dtr_At_End *)
  219.    Define_Param_For_Display( 'CJ' );   (* Close_Comm_For_Dos *)
  220.    Define_Param_For_Display( 'XO' );   (* Do_Xon_Xoff_Checks *)
  221.    Define_Param_For_Display( 'SH' );   (* Auto_Strip_High_Bit *)
  222.    Define_Param_For_Display( 'IB' );   (* Async_Buffer_Length *)
  223.    Define_Param_For_Display( 'OB' );   (* Async_OBuffer_Length *)
  224.    Define_Param_For_Display( 'LE' );   (* Local_Echo *)
  225.    Define_Param_For_Display( '01' );   (* Comm port hardware menu *)
  226.  
  227.    Param_ValCol := Param_ValCol + 6;
  228.  
  229. END   (* Do_Comm_Defines *);
  230.  
  231. (*----------------------------------------------------------------------*)
  232.  
  233. BEGIN (* Get_Comm_Settings *)
  234.                                    (* Save current screen *)
  235.    Save_Screen( Local_Save );
  236.                                    (* Define com port stuff    *)
  237.    Do_Comm_Defines;
  238.                                    (* Draw frame around screen *)
  239.  
  240.    Draw_Menu_Frame( 1, 1, 80, 24, Menu_Frame_Color, Menu_Title_Color,
  241.                     Menu_Text_Color, 'Communications parameters' );
  242.  
  243.                                    (* Display parameter values *)
  244.    Do_Display;
  245.                                    (* Get 1st item to modify, if any.   *)
  246.                                    (* ESC takes us out.                 *)
  247.  
  248.    Comm_Item := Get_Item_Choice;
  249.  
  250.    WHILE( Comm_Item > 0 ) DO
  251.       BEGIN
  252.  
  253.          CASE Comm_Item OF
  254.                                    (* Handle items with menus *)
  255.  
  256.             1:      Get_Comm_Port;
  257.             2:      Get_Baud_Rate;
  258.             3:      Get_Parity;
  259.             4:      Get_Data_Bits;
  260.             5:      Get_Stop_Bits;
  261.             19:     Get_Comm_Port_Hardware;
  262.  
  263.                                    (* Otherwise, prompt-style update *)
  264.  
  265.             ELSE    Update_Parameter( Comm_Item );
  266.  
  267.          END (* CASE *);
  268.                                    (* Make sure input buffer length is OK *)
  269.  
  270.          IF ( Comm_Item = 16 ) THEN
  271.             Async_Buffer_Length := MAX( 128 , Async_Buffer_Length )
  272.          ELSE IF ( Comm_Item = 17 ) THEN
  273.             Async_OBuffer_Length := MAX( 16  , Async_OBuffer_Length );
  274.  
  275.                                    (* Display revised item    *)
  276.  
  277.          Display_Parameter( Comm_Item );
  278.  
  279.                                    (* Get next item to revise *)
  280.  
  281.          Comm_Item := Get_Item_Choice;
  282.  
  283.       END;
  284.                                    (* Restore previous screen *)
  285.    Restore_Screen( Local_Save );
  286.  
  287.    New_Line := New_Line_Param;
  288.  
  289. END   (* Get_Comm_Settings *);
  290.  
  291. (*----------------------------------------------------------------------*)
  292. (*  File_Post_Processor --- Handle special file parameter updates       *)
  293. (*----------------------------------------------------------------------*)
  294.  
  295. PROCEDURE File_Post_Processor( Menu_Item : INTEGER );
  296.  
  297. BEGIN (* File_Post_Processor *)
  298.  
  299.    Max_Write_Buffer := MAX( Max_Write_Buffer , 512 );
  300.    Zmodem_BlockSize := MAX( Zmodem_BlockSize , 32  );
  301.  
  302. END   (* File_Post_Processor *);
  303.  
  304. (*----------------------------------------------------------------------*)
  305. (*            Get_File_Transfer --- Get file transfer settings          *)
  306. (*----------------------------------------------------------------------*)
  307.  
  308. PROCEDURE Get_File_Transfer;
  309.  
  310. BEGIN (* Get_File_Transfer *)
  311.  
  312.    (* TT = Default_Transfer_Type *)
  313.    (* EB = Mahoney_On            *)
  314.    (* BP = Compuserve_B_On       *)
  315.    (* XB = Max_Write_Buffer      *)
  316.    (* TB = Transfer_Bells        *)
  317.    (* EP = Evict_Partial_Trans   *)
  318.    (* FF = Auto_Find_FileNames   *)
  319.    (* ZA = Zmodem_Autodownload   *)
  320.    (* ZB = Zmodem_BlockSize      *)
  321.    (* 02 = Ascii transfer params *)
  322.    (* 03 = Xmodem transfer parms *)
  323.    (* 04 = External trans params *)
  324.  
  325.    Get_General_Setup( 'TT EB BP XB TB EP FF ZA ZB 02 03 04 ',
  326.                       'File transfer settings', 'F' );
  327.  
  328. END   (* Get_File_Transfer *);
  329.  
  330. (*----------------------------------------------------------------------*)
  331. (*            Get_Host_Mode_Setup --- Get setup for host mode           *)
  332. (*----------------------------------------------------------------------*)
  333.  
  334. PROCEDURE Get_Host_Mode_Setup;
  335.  
  336. BEGIN (* Get_Host_Mode_Setup *)
  337.  
  338.    (*  MS = Modem_Host_Set       *)
  339.    (*  MX = Modem_Host_UnSet     *)
  340.    (*  AB = Host_Auto_Baud       *)
  341.    (*  HB = Host_Mode_Blank_Time *)
  342.    (*  HU = Host_Mode_Upload     *)
  343.    (*  HD = Host_Mode_Download   *)
  344.    (*  AU = Host_CTTY_Device     *)
  345.  
  346.    Get_General_Setup( 'MS MX AB HB HU HD AU ',
  347.                       'Host mode settings', ' ' );
  348.  
  349. END   (* Get_Host_Mode_Setup *);
  350.  
  351. (*----------------------------------------------------------------------*)
  352. (* Input_Post_Processor --- Handle special input parameter updates      *)
  353. (*----------------------------------------------------------------------*)
  354.  
  355. PROCEDURE Input_Post_Processor( Menu_Item : INTEGER );
  356.  
  357. BEGIN (* Input_Post_Processor *)
  358.  
  359.    CASE Menu_Item OF
  360.  
  361.       3:  BEGIN
  362.              BS_String      := CHR( BS );
  363.              Ctrl_BS_String := CHR( DEL );
  364.              Display_Parameter( 1 );
  365.              Display_Parameter( 2 );
  366.           END;
  367.  
  368.       4:  BEGIN
  369.              BS_String      := CHR( DEL );
  370.              Ctrl_BS_String := CHR( BS  );
  371.              Display_Parameter( 1 );
  372.              Display_Parameter( 2 );
  373.           END;
  374.  
  375.       ELSE;
  376.  
  377.    END (* CASE *);
  378.  
  379. END   (* Input_Post_Processor *);
  380.  
  381. (*----------------------------------------------------------------------*)
  382. (*          Get_Input_Setup -- Get keyboard input parameters            *)
  383. (*----------------------------------------------------------------------*)
  384.  
  385. PROCEDURE Get_Input_Setup;
  386.  
  387. VAR
  388.    Save_Ext_Kpd : BOOLEAN;
  389.  
  390. BEGIN (* Get_Input_Setup *)
  391.                                    (* Remember which keypad mode we're in *)
  392.  
  393.    Save_Ext_Kpd := Extended_Keypad;
  394.  
  395.    (*  BS = Backspace string      *)
  396.    (*  DE = Ctrl-BackSpace string *)
  397.    (*  11 = BS to BS, DEL to DEL  *)
  398.    (*  12 = DEL to BS, BS to DEL  *)
  399.    (*  EK = Extended_Keypad       *)
  400.    (*  06 = Command_Key_Name      *)
  401.    (*  IM = Edit_Insert_Mode      *)
  402.    (*  DI = Use_Dos_Buffer_In     *)
  403.    (*  FH = FK_Delay_Time         *)
  404.    (*  UP = Use_Prev_Key_Text     *)
  405.    (*  TU = Send_Upper_Case_Only  *)
  406.    (*  EU = Extended_KeyBoard     *)
  407.  
  408.    Get_General_Setup( 'BS DE 11 12 EK 06 IM DI FH UP TU EU ',
  409.                       'Keyboard Input Parameters',
  410.                       'I' );
  411.  
  412.                                    (* Check if 101-key kbd allowed *)
  413.  
  414.    Extended_KeyBoard      := Extended_KeyBoard AND
  415.                              ( ( Mem[$40:$96] AND $10 ) <> 0 );
  416.  
  417.                                    (* See if extended keypad change *)
  418.  
  419.    Kbd_Interrupt_Change   := ( Extended_Keypad <> Save_Ext_Kpd );
  420.  
  421. END   (* Get_Input_Setup *);
  422.  
  423. (*----------------------------------------------------------------------*)
  424. (* Kermit_Post_Processor --- Handle special Kermit parameter updates    *)
  425. (*----------------------------------------------------------------------*)
  426.  
  427. PROCEDURE Kermit_Post_Processor( Menu_Item : INTEGER );
  428.  
  429. BEGIN (* Kermit_Post_Processor *)
  430.  
  431.    CASE Menu_Item OF
  432.  
  433.       10: Kermit_Init_Packet_Size := MIN( MAX( Kermit_Init_Packet_Size , 20 ) , 94 );
  434.       13: Kermit_Window_Size      := MIN( Kermit_Window_Size ,
  435.                                           MaxKermitWindowSize );
  436.       14: Kermit_Extended_Block   := MIN( Kermit_Extended_Block,
  437.                                           MaxLongPacketLength );
  438.       ELSE;
  439.  
  440.    END (* CASE *);
  441.  
  442. END   (* Kermit_Post_Processor *);
  443.  
  444. (*----------------------------------------------------------------------*)
  445. (*            Get_Kermit_Setup --- Get Kermit protocol parameters       *)
  446. (*----------------------------------------------------------------------*)
  447.  
  448. PROCEDURE Get_Kermit_Setup;
  449.  
  450. BEGIN (* Get_Kermit_Setup *)
  451.  
  452.    (* KC = Kermit_Chk_Type         *)
  453.    (* KD = Kermit_Debug            *)
  454.    (* KE = Kermit_EOL              *)
  455.    (* KH = Kermit_Header_Char      *)
  456.    (* KN = Kermit_NPad             *)
  457.    (* KP = Kermit_Pad_Char         *)
  458.    (* KQ = Kermit_Quote_Char       *)
  459.    (* K8 = Kermit_Quote_8_Char     *)
  460.    (* KR = Kermit_Repeat_Char      *)
  461.    (* KS = Kermit_Init_Packet_Size *)
  462.    (* KT = Kermit_TimeOut          *)
  463.    (* KW = Kermit_Delay_Time       *)
  464.    (* KL = Kermit_Window_Size      *)
  465.    (* KX = Kermit_Extended_Block   *)
  466.    (* KA = Kermit_Handshake_Char   *)
  467.    (* KK = Kermit_Autodownload     *)
  468.  
  469.    Get_General_Setup( 'KC KD KE KH KN KP KQ K8 KR KS KT KW KL KX KA KK ',
  470.                       'Kermit settings', 'K' );
  471.  
  472. END   (* Get_Kermit_Setup *);
  473.  
  474. (*----------------------------------------------------------------------*)
  475. (*  Modem_Post_Processor --- Handle special Modem parameter updates     *)
  476. (*----------------------------------------------------------------------*)
  477.  
  478. PROCEDURE Modem_Post_Processor( Menu_Item : INTEGER );
  479.  
  480. BEGIN (* Modem_Post_Processor *)
  481.  
  482.    Dialing_Dir_Size_Max := MIN( 900 , MAX( Dialing_Dir_Size_Max, 1 ) );
  483.  
  484. END   (* Modem_Post_Processor *);
  485.  
  486. (*----------------------------------------------------------------------*)
  487. (*            Get_Modem_Setup --- Get setup values for modem            *)
  488. (*----------------------------------------------------------------------*)
  489.  
  490. PROCEDURE Get_Modem_Setup;
  491.  
  492. BEGIN (* Get_Modem_Setup *)
  493.  
  494.    (*  MI = Modem_Init           *)
  495.    (*  MD = Modem_Dial           *)
  496.    (*  MC = Modem_Connect        *)
  497.    (*  MN = Modem_No_Carrier     *)
  498.    (*  MB = Modem_Busy           *)
  499.    (*  ME = Modem_Escape         *)
  500.    (*  MT = Modem_Escape_Time    *)
  501.    (*  MH = Modem_Hang_Up        *)
  502.    (*  MO = Modem_Time_Out       *)
  503.    (*  MR = Modem_Redial_Delay   *)
  504.    (*  MA = Modem_Answer         *)
  505.    (*  MW = Modem_Command_Delay  *)
  506.    (*  CH = Modem_Carrier_High   *)
  507.    (*  BD = Alter_Baud_Rate      *)
  508.    (*  MF = Modem_Dial_End       *)
  509.    (*  US = Use_Short_Dial_Menu  *)
  510.    (*  DS = Dialing_Dir_Size_Max *)
  511.    (*  MG = Modem_Ring           *)
  512.    (*  MG = Modem_Hold_Line      *)
  513.  
  514.    Get_General_Setup( 'MI MD MC MN MB ME MT MH MO MR MA MW CH BD MF US DS MG ML ',
  515.                       'Modem settings', 'M' );
  516.  
  517. END   (* Get_Modem_Setup *);
  518.  
  519. (*----------------------------------------------------------------------*)
  520. (*          Get_Miscellaneous --- Get miscellaneous parameters          *)
  521. (*----------------------------------------------------------------------*)
  522.  
  523. PROCEDURE Get_Miscellaneous;
  524.  
  525. BEGIN (* Get_Miscellaneous *)
  526.  
  527.    (* PS = Printer_Setup       *)
  528.    (* PM = Play_Music_On       *)
  529.    (* SM = Silent_Mode         *)
  530.    (* 08 = Date_Format         *)
  531.    (* 07 = Use_Military        *)
  532.    (* 09 = Script_Search_Order *)
  533.    (* SU = Auto_Unload_Scripts *)
  534.    (* AM = Attended_Mode       *)
  535.    (* LO = Logging_On          *)
  536.  
  537.    Get_General_Setup( 'PS PM SM DF 07 SO SU AM LO ',
  538.                       'Miscellaneous parameters', ' ' );
  539.  
  540.                                    (* Make sure everything updated *)
  541.  
  542.    Menu_Set_Beep( NOT Silent_Mode );
  543.  
  544.    IF Use_Military THEN
  545.       Time_Format := Military_Time
  546.    ELSE
  547.       Time_Format := AMPM_Time;
  548.  
  549. END   (* Get_Miscellaneous *);
  550.  
  551. (*----------------------------------------------------------------------*)
  552. (*             Get_File_Paths --- Get various file paths                *)
  553. (*----------------------------------------------------------------------*)
  554.  
  555. PROCEDURE Get_File_Paths;
  556.  
  557. BEGIN (* Get_File_Paths *)
  558.  
  559.    (* EN = Editor_Name        *)
  560.    (* LN = Browser_Name       *)
  561.    (* SD = Screen_Dump_Name   *)
  562.    (* SG = Graphics_Dump_Name *)
  563.    (* DD = Download_Dir_Path  *)
  564.    (* SF = Script_Path        *)
  565.    (* FP = Function_Key_Path  *)
  566.    (* HU = Host_Mode_Upload   *)
  567.    (* HD = Host_Mode_Download *)
  568.  
  569.    Get_General_Setup( 'EN LN SD SG DD SF FP HU HD ',
  570.                       'File paths', ' ' );
  571.  
  572. END   (* Get_File_Paths *);
  573.  
  574. (*----------------------------------------------------------------------*)
  575. (*         Read_A_Config_File --- read configuration parameters         *)
  576. (*----------------------------------------------------------------------*)
  577.  
  578. PROCEDURE Read_A_Config_File;
  579.  
  580. VAR
  581.    Local_Save       : Saved_Screen_Ptr;
  582.    Ival             : INTEGER;
  583.    OK_To_Read       : BOOLEAN;
  584.    I                : INTEGER;
  585.    J                : INTEGER;
  586.    Param_Num        : INTEGER;
  587.    Param_Str        : AnyStr;
  588.    Param_Ival       : INTEGER;
  589.    Param_Rval       : LONGINT;
  590.    Config_File_NameL: AnyStr;
  591.    Save_Name        : AnyStr;
  592.  
  593. BEGIN (* Read_A_Config_File *)
  594.  
  595.    Save_Screen( Local_Save );
  596.  
  597.    Draw_Menu_Frame( 10, 19, 70, 24, Menu_Frame_Color, Menu_Title_Color,
  598.                     Menu_Text_Color, 'Read configuration file' );
  599.  
  600.    PibTerm_Window( 11, 20, 69, 23 );
  601.  
  602.    GoToXY( 1 , 1 );
  603.                                    (* Get config file name *)
  604.  
  605.    TextColor( Menu_Text_Color_2 );
  606.    WRITELN('Enter configuration file name:');
  607.    WRITE('>');
  608.  
  609.    TextColor( Menu_Text_Color );
  610.    Config_File_NameL := Config_File_Name;
  611.  
  612.    Read_Edited_String( Config_File_NameL );
  613.    WRITELN;
  614.  
  615.    TextColor( Menu_Text_Color_2 );
  616.  
  617.                                    (* Stop if no name given     *)
  618.  
  619.    Config_File_NameL := Trim( LTrim( Config_File_NameL ) );
  620.  
  621.    IF ( POS( '.' , Config_File_NameL ) = 0 ) THEN
  622.       Config_File_NameL := UpperCase( Config_File_NameL + '.CNF' );
  623.  
  624.    IF ( Config_File_NameL = '' ) OR
  625.       ( Config_File_NameL = CHR( ESC ) ) THEN
  626.       BEGIN
  627.          Restore_Screen( Local_Save );
  628.          Reset_Global_Colors;
  629.          EXIT;
  630.       END;
  631.                                    (* Add path if needed        *)
  632.  
  633.    Save_Name := Config_File_NameL;
  634.  
  635.    Add_Path( Config_File_NameL, Home_Dir, Config_File_NameL );
  636.  
  637.                                    (* Assign configuration file *)
  638.  
  639.    ASSIGN( Config_File , Config_File_NameL );
  640.         (*!I-*)
  641.    RESET( Config_File );
  642.         (*!I+*)
  643.  
  644.    OK_To_Read := ( Int24Result = 0 );
  645.  
  646.    IF NOT OK_To_Read THEN
  647.       BEGIN (* No configuration file *)
  648.  
  649.          WRITELN('Can''t find configuration file ',Config_File_NameL);
  650.  
  651.       END   (* No configuration file *)
  652.  
  653.    ELSE                           (* file exists -- read it *)
  654.       BEGIN  (* Config file exists *)
  655.  
  656.          WRITELN('Reading configuration file');
  657.  
  658.          WHILE( Get_Config_File_Line( Config_File, Param_Num, Param_Str,
  659.                                       Param_Ival, Param_Rval ) ) DO
  660.             IF ( Param_Num > 0 ) THEN
  661.                Set_Parameter( Param_Num, Param_Ival, Param_Rval, Param_Str );
  662.  
  663.          Config_File_Name := Save_Name;
  664.  
  665.       END    (* Config file exists *);
  666.  
  667.         (*!I-*)
  668.    CLOSE( Config_File );
  669.         (*!I+*)
  670.  
  671.    OK_To_Read := ( Int24Result = 0 );
  672.  
  673.    Restore_Screen( Local_Save );
  674.    Reset_Global_Colors;
  675.                                    (* Ensure comm port variables reset *)
  676.    Comm_Port_Changed := TRUE;
  677.  
  678. END   (* Read_A_Config_File *);
  679.  
  680. (*----------------------------------------------------------------------*)
  681. (*         Get_Terminal_Setup --- Get emulation-related stuff           *)
  682. (*----------------------------------------------------------------------*)
  683.  
  684. PROCEDURE Get_Terminal_Setup;
  685.  
  686. BEGIN (* Get_Terminal_Setup *)
  687.  
  688.    (*  TE = Terminal_To_Emulate      *)
  689.    (*  05 = VT100 colors             *)
  690.    (*  GW = Gossip_Window_Size       *)
  691.    (*  GL = Gossip_Line_Mode         *)
  692.    (*  SS = Show_Status_Line         *)
  693.    (*  SE = Show_Status_Time         *)
  694.    (*  SR = Reverse_Status_Colors    *)
  695.    (*  SA = Status_ForeGround_Color  *)
  696.    (*  SB = Status_BackGround_Color  *)
  697.    (*  AK = Auto_Load_FunKeys        *)
  698.    (*  DO = Use_Dos_Con_Output       *)
  699.    (*  T1 = User_Term_Name[1]        *)
  700.    (*  T2 = User_Term_Name[2]        *)
  701.    (*  T3 = User_Term_Name[3]        *)
  702.    (*  T4 = User_Term_Name[4]        *)
  703.    (*  T5 = User_Term_Name[5]        *)
  704.  
  705.    Get_General_Setup( 'TE 05 GW GL SS SE SR SA SB AK DO T1 T2 T3 T4 T5 ',
  706.                       'Terminal settings', ' ' );
  707.  
  708. END   (* Get_Terminal_Setup *);
  709.  
  710. (*----------------------------------------------------------------------*)
  711. (*          Get_Video_Setup --- Get video mode and colors               *)
  712. (*----------------------------------------------------------------------*)
  713.  
  714. PROCEDURE Get_Video_Setup;
  715.  
  716. VAR
  717.    Save_Scroll : BOOLEAN;
  718.  
  719. BEGIN (* Get_Video_Setup *)
  720.                                    (* Remember which scroll mode we're in *)
  721.  
  722.    Save_Scroll  := Software_Scroll_Par;
  723.  
  724.    (*  TM = New_Text_Mode           *)
  725.    (*  CF = New_Foreground_Color    *)
  726.    (*  CB = New_Background_Color    *)
  727.    (*  CS = New_Border_Color        *)
  728.    (*  CM = New_Menu_Frame_Color    *)
  729.    (*  CC = New_Menu_Title_Color    *)
  730.    (*  CT = New_Menu_Text_Color     *)
  731.    (*  CA = New_Menu_Text_Color_2   *)
  732.    (*  05 = VT100 colors            *)
  733.    (*  WS = Write_Screen_Memory_Par *)
  734.    (*  WR = Wait_For_Retrace_Par    *)
  735.    (*  BB = Max_Review_Length       *)
  736.    (*  XM = Exploding_Menus         *)
  737.    (*  WH = Window hold time        *)
  738.    (*  DL = Max_Screen_Line         *)
  739.    (*  DC = Max_Screen_Col          *)
  740.    (*  SZ = Software_Scroll_Par     *)
  741.    (*  AW = ATI_Ega_Wonder          *)
  742.    (*  EG = Allow_EGA_Graphics      *)
  743.  
  744.    Get_General_Setup( 'TM CF CB CS CM CC CT CA 05 WS WR BB XM WH DL DC SZ AW EG ',
  745.                       'Video mode and colors', ' ' );
  746.  
  747.                                    (* Note any change in menu style now *)
  748.  
  749.    Menu_Set_Explode( Exploding_Menus );
  750.  
  751.                                    (* Make sure video interrupt  *)
  752.                                    (* changes occur if requested *)
  753.  
  754.    Video_Interrupt_Change := ( Software_Scroll_Par <> Save_Scroll );
  755.  
  756. END   (* Get_Video_Setup *);
  757.  
  758. (*----------------------------------------------------------------------*)
  759. (*     Write_New_Config_File --- write configuration parameters         *)
  760. (*----------------------------------------------------------------------*)
  761.  
  762. PROCEDURE Write_New_Config_File;
  763.  
  764. VAR
  765.    Local_Save       : Saved_Screen_Ptr;
  766.    Config_File_NameL: FileStr;
  767.  
  768. BEGIN (* Write_New_Config_File *)
  769.  
  770.    Draw_Titled_Box( Local_Save, 10, 19, 70, 24,
  771.                     'Write configuration file' );
  772.  
  773.    PibTerm_Window( 11, 20, 69, 23 );
  774.  
  775.    GoToXY( 1 , 1 );
  776.  
  777.    TextColor( Menu_Text_Color_2 );
  778.    WRITELN('Enter configuration file name:');
  779.    WRITE('>');
  780.  
  781.    Config_File_NameL := Config_File_Name;
  782.  
  783.    TextColor( Menu_Text_Color );
  784.    Read_Edited_String( Config_File_NameL );
  785.    WRITELN;
  786.  
  787.    Config_File_NameL := Trim( LTrim( Config_File_NameL ) );
  788.  
  789.    IF ( POS( '.' , Config_File_NameL ) = 0 ) THEN
  790.       Config_File_NameL := UpperCase( Config_File_NameL + '.CNF' );
  791.  
  792.    IF ( Config_File_NameL <> '' ) AND
  793.       ( Config_File_NameL <> CHR( ESC ) ) THEN
  794.       BEGIN
  795.          Write_Config_File( Config_File_NameL );
  796.          Config_File_Name := Config_File_NameL;
  797.          TextColor( Menu_Text_Color_2 );
  798.          WRITE('Configuration file written.');
  799.          Window_Delay;
  800.       END;
  801.  
  802.    Restore_Screen( Local_Save );
  803.    Reset_Global_Colors;
  804.  
  805. END   (* Write_New_Config_File *);
  806.  
  807. (*----------------------------------------------------------------------*)
  808.  
  809. BEGIN (* Get_Default_Params *)
  810.                                    (* If first time, get important params *)
  811.    IF First_Time THEN
  812.       BEGIN
  813.          Get_Video_Mode;
  814.          Get_Comm_Settings;
  815.          Get_Terminal_Type;
  816.          IF ( NOT Hard_Wired ) THEN
  817.             Get_Modem_Setup;
  818.          Download_Dir_Path := Home_Dir;
  819.          Script_Path       := Home_Dir;
  820.          Function_Key_Path := Home_Dir;
  821.       END
  822.                                    (* Not first time -- prompt for *)
  823.                                    (* params to be changed         *)
  824.    ELSE
  825.       BEGIN
  826.                                    (* Top-level menu count *)
  827.          Menu_Depth  := 1;
  828.          Param_Count := 0;
  829.                                    (* Construct global settings menu *)
  830.  
  831.          Make_A_Menu( Settings_Menu, Quit_Item, 10, 30, 0, 0, Quit_Item,
  832.                       'Set Parameters: ',
  833.                       'C)ommunications;F)ile transfer;H)ost mode;I)nput;K)ermit;' +
  834.                       'M)odem and dialing;O)dds and ends;'      +
  835.                       'P)aths for special files;' +
  836.                       'R)ead config file;' +
  837.                       'T)erminal emulation;V)ideo mode and colors;' +
  838.                       'W)rite config file;Q)uit setup;',
  839.                       FALSE );
  840.  
  841.                                    (* Request setup parameters until *)
  842.                                    (* stop setup selected            *)
  843.          REPEAT
  844.  
  845.             Menu_Display_Choices( Settings_Menu );
  846.             Settings_Choice := Menu_Get_Choice( Settings_Menu , Erase_Menu );
  847.  
  848.             IF ( Settings_Choice > 0 ) THEN
  849.                Menu_Depth := 2;
  850.  
  851.             CASE Settings_Choice OF
  852.  
  853.                 1:   Get_Comm_Settings;
  854.                 2:   Get_File_Transfer;
  855.                 3:   Get_Host_Mode_Setup;
  856.                 4:   Get_Input_Setup;
  857.                 5:   Get_Kermit_Setup;
  858.                 6:   Get_Modem_Setup;
  859.                 7:   Get_Miscellaneous;
  860.                 8:   Get_File_Paths;
  861.                 9:   Read_A_Config_File;
  862.                10:   Get_Terminal_Setup;
  863.                11:   Get_Video_Setup;
  864.                12:   Write_New_Config_File;
  865.                ELSE;
  866.  
  867.             END (* CASE *);
  868.                                    (* Remember if comm parms changed *)
  869.  
  870.             Reset_Comm_Port := Reset_Comm_Port OR ( Settings_Choice = 1 );
  871.  
  872.                                    (* Reset menu depth *)
  873.             Menu_Depth      := 1;
  874.             Param_Count     := 0;
  875.  
  876.          UNTIL ( Settings_Choice = Quit_Item ) OR
  877.                ( Settings_Choice < 1         );
  878.  
  879.       END;
  880.                                    (* Reset menu depth *)
  881.    Menu_Depth := 0;
  882.  
  883. END   (* Get_Default_Params *);
  884.