{ File: SG4.UTIL1.TEXT
  Contains initialization of all menues for SAGEUTIL.


  COPYRIGHT (c) 1983 SAGE Computer Technology
  All Rights Reserved

}
SEGMENT PROCEDURE InitMenu;

VAR
  I:INTEGER;
  Result:STRING;

PROCEDURE Dot;
BEGIN
  WRITE('.');
END;

BEGIN
  WRITELN;
  WRITELN('SAGE4UTIL Version ',Version);
  WRITE('Initializing ');

  MNU_Menu(M_MAIN,'SAGE4UTIL',MNU_1Style,MN_MAIN,0);
  MNU_ItemM('On-line Configuration',0,MN_OLC,M_OLC,FALSE);
  MNU_ItemM('BIOS file Configuration',0,MN_BFC,M_BFC,FALSE);
  MNU_ItemE('Floppy Formatter',0,MN_FMT,TRUE);
  MNU_ItemE('Bootstrap Copy',0,MN_BSC,TRUE);
  IF Conf_SGIV THEN MNU_ItemE('Prepare Drives for Shipping',0,MN_SHIP,TRUE);
  Dot;
  
  
  MNU_Menu(M_OLC,'On-line Configuration Control',MNU_1Style,MN_OLC,0);
  MNU_ItemM('Terminal',0,MN_TRM,M_TRM,FALSE);
  MNU_ItemM('Remote channel',0,MN_REM,M_REM,FALSE);
  MNU_ItemM('Left  Floppy',0,MN_FL4,M_FL4,FALSE);
  MNU_ItemM('Right Floppy',0,MN_FL5,M_FL5,FALSE);
  MNU_ItemM('RAM Disk',0,MN_RDK,M_RDK,FALSE);
  MNU_ItemM('Printer',0,MN_PRT,M_PRT,FALSE);
  MNU_ItemM('Extra Serial Port #1',0,MN_XS1,M_XS1,FALSE);
  MNU_ItemM('Extra Serial Port #2',0,MN_XS2,M_XS2,FALSE);
  MNU_ItemM('Extra Serial Port #3',0,MN_XS3,M_XS3,FALSE);
  MNU_ItemM('Extra Serial Port #4',0,MN_XS4,M_XS4,FALSE);
  MNU_ItemM('Parallel Port',0,MN_PPORT,M_PPORT,FALSE);
  MNU_ItemM('Time Adjustment',0,MN_TAJ,M_TAJ,FALSE);
  MNU_ItemM('Low Level Configuration',0,MN_LLC,M_LLC,FALSE);
  Dot;

  MNU_CopyM(M_OLC,M_BFC,'BIOS File Configuration Control',MN_BFC);

  { Terminal Menu }
  MNU_Menu(M_TRM,'Terminal Configuration Control',MNU_1Style,MN_TRM,15);
  MNU_ItemM('Terminal Baud Rate',0,MN_BAUD,M_BAUD,TRUE);
  MNU_ItemM('Terminal Parity',0,MN_PAR,M_PAR,TRUE);
  MNU_ItemM('Terminal Stop Bits',0,MN_STOP,M_STOP,TRUE);
  MNU_ItemM('Terminal Data bits',0,MN_DATA,M_DATA,TRUE);
  MNU_ItemO('Xon/Xoff on input',0,S_Xon);
  MNU_ItemO('BREAK to debugger',0,S_TBreak);
  Dot;

  { Remote Menu }
  MNU_Menu(M_REM,'Remote Serial Channel Control',MNU_1Style,MN_REM,15);
  MNU_ItemM('Remote Serial Baud Rate',0,MN_RBAUD,M_RBAUD,TRUE);
  MNU_ItemM('Remote Serial Parity',0,MN_RPAR,M_RPAR,TRUE);
  MNU_ItemM('Remote Serial Stop Bits',0,MN_STOP,M_STOP,TRUE);
  MNU_ItemM('Remote Serial Data bits',0,MN_DATA,M_DATA,TRUE);
  MNU_ItemO('Xon/Xoff for input',0,S_XonIn);
  MNU_ItemO('Xon/Xoff for output',0,S_XonOut);
  MNU_ItemO('DSR Polling',0,S_DSRpoll);
  MNU_ItemI('DSR Polling interval',0,S_DSRinter,MAXINT,-MAXINT);
  Dot;

  { Extra Serial Port #1 }
  MNU_Menu(M_XS1,'Extra Serial Channel #1 Control',MNU_1Style,MN_XS1,15);
  MNU_ItemM('Extra Serial Channel Baud Rate',0,MN_RBAUD,M_RBAUD,TRUE);
  MNU_ItemM('Extra Serial Channel Parity',0,MN_RPAR,M_RPAR,TRUE);
  MNU_ItemM('Extra Serial Channel Stop Bits',0,MN_STOP,M_STOP,TRUE);
  MNU_ItemM('Extra Serial Channel Data bits',0,MN_DATA,M_DATA,TRUE);
  MNU_ItemO('Xon/Xoff for input',0,S_XonIn);
  MNU_ItemO('Xon/Xoff for output',0,S_XonOut);
  Dot;

  { Extra Serial Port #2 }
  MNU_CopyM(M_XS1,M_XS2,'Extra Serial Channel #2 Control',MN_XS2);

  { Extra Serial Port #3 }
  MNU_CopyM(M_XS1,M_XS3,'Extra Serial Channel #3 Control',MN_XS3);

  { Extra Serial Port #4 }
  MNU_CopyM(M_XS1,M_XS4,'Extra Serial Channel #4 Control',MN_XS4);

  MNU_Menu(M_BAUD,'Baud Rate Selection',MNU_2Style,MN_BAUD,1);
  MNU_ItemC('19200 baud',19200,D_BR19200);
  MNU_ItemC(' 9600 baud',9600,D_BR9600);
  MNU_ItemC(' 4800 baud',4800,D_BR4800);
  MNU_ItemC(' 2400 baud',2400,D_BR2400);
  MNU_ItemC(' 2000 baud',2000,D_BR2000);
  MNU_ItemC(' 1800 baud',1800,D_BR1800);
  MNU_ItemC(' 1200 baud',1200,D_BR1200);
  MNU_ItemC('  600 baud',600,D_BR600);
  MNU_ItemC('  300 baud',300,D_BR300);
  MNU_ItemC('  200 baud',200,D_BR200);
  MNU_ItemC('  150 baud',150,D_BR150);
  MNU_ItemC('  110 baud',110,D_BR110);
  MNU_ItemC('	75 baud',75,D_BR75);
  MNU_ItemC('	50 baud',50,D_BR50);
  MNU_ItemC('DIP Switch',0,D_BRdipsw);
  Dot;

  { Remote Channel Baud Rate Selection }
  MNU_Menu(M_RBAUD,'Baud Rate Selection',MNU_2Style,MN_RBAUD,1);
  MNU_CopyI(M_BAUD,D_BR19200);
  MNU_CopyI(M_BAUD,D_BR9600);
  MNU_CopyI(M_BAUD,D_BR4800);
  MNU_CopyI(M_BAUD,D_BR2400);
  MNU_CopyI(M_BAUD,D_BR2000);
  MNU_CopyI(M_BAUD,D_BR1800);
  MNU_CopyI(M_BAUD,D_BR1200);
  MNU_CopyI(M_BAUD,D_BR600);
  MNU_CopyI(M_BAUD,D_BR300);
  MNU_CopyI(M_BAUD,D_BR200);
  MNU_CopyI(M_BAUD,D_BR150);
  MNU_CopyI(M_BAUD,D_BR110);
  MNU_CopyI(M_BAUD,D_BR75);
  MNU_CopyI(M_BAUD,D_BR50);
  Dot;
  
  MNU_Menu(M_PAR,'Parity Selection',MNU_2Style,MN_PAR,1);
  MNU_ItemC('Even parity',0,D_EvenP);
  MNU_ItemC('Odd parity',0,D_OddP);
  MNU_ItemC('Disabled parity',0,D_DisP);
  MNU_ItemC('DIP Switch',0,D_DipP);

  MNU_Menu(M_RPAR,'Parity Selection',MNU_2Style,MN_RPAR,1);
  MNU_CopyI(M_PAR,D_EvenP);
  MNU_CopyI(M_PAR,D_OddP);
  MNU_CopyI(M_PAR,D_DisP);
  Dot;

  MNU_Menu(M_STOP,'Stop Bit Selection',MNU_2Style,MN_STOP,1);
  MNU_ItemC('1 Stop Bit',ORD(Conf_1Stop),D_1Stop);
  MNU_ItemC('1.5 Stop Bits',ORD(Conf_1_5Stop),D_1_5Stop);
  MNU_ItemC('2 Stop Bits',ORD(Conf_2Stop),D_2Stop);

  MNU_Menu(M_DATA,'Data Bit Selection',MNU_2Style,MN_DATA,1);
  MNU_ItemC('5 Data Bits',ORD(Conf_5Data),D_5Data);
  MNU_ItemC('6 Data Bits',ORD(Conf_6Data),D_6Data);
  MNU_ItemC('7 Data Bits',ORD(Conf_7Data),D_7Data);
  MNU_ItemC('8 Data Bits',ORD(Conf_8Data),D_8Data);
  Dot;

  { Winchester #1 }
  MNU_Menu(M_WD1,'Winchester #1 Parameters',MNU_1Style,MN_WD1,6);
  MNU_ItemI('Number of Cylinders',0,D_WNcyl,MAXINT,0);
  MNU_ItemI('Bytes per Sector',0,D_WBPS,MAXINT,0);
  MNU_ItemI('Step Time',0,D_WStepT,MAXINT,0);
  MNU_ItemI('Slew Time',0,D_WSlewT,MAXINT,0);
  MNU_ItemI('Step Counter',0,D_WSctr,MAXINT,0);
  MNU_ItemI('Head Settle Time',0,D_Wsettle,MAXINT,0);
  MNU_ItemI('Cylinder for Precomp',0,D_Wprecomp,MAXINT,0);
  MNU_ItemI('Special types',0,D_Wstype,MAXINT,-MAXINT);
  MNU_ItemI('Test flags',0,D_Wtest,MAXINT,-MAXINT);
  MNU_ItemI('Track for shipping',0,D_Wship,MAXINT,0);
  MNU_ItemI('Low Read Counter',0,D_Wlowc,MAXINT,0);
  MNU_ItemI('High Read Counter',0,D_Whighc,MAXINT,0);
  MNU_ItemI('Header Count',0,D_Wheadc,MAXINT,0);
  MNU_ItemI('Number of Heads',0,D_Wheads,16,1);
  MNU_ItemI('Number of Retries',0,D_Wretries,254,0);
  MNU_ItemI('Sectors per Track',0,D_WSPT,255,1);
  MNU_ItemI('Select Bit',0,D_Wselect,8,1);
  MNU_ItemH('Write Sync Bit',0,D_Wsync,4);
  MNU_ItemI('Extra Head Settle',0,D_Wexhst,MAXINT,0);
  MNU_ItemI('Rd after Wt Retries',0,D_Wrawrt,254,0);
  MNU_ItemI('Write Cycle Retries',0,D_Wwtries,254,0);
  Dot;

  { Winchester #2 }
  MNU_CopyM(M_WD1,M_WD2,'Winchester #2 Parameters',MN_WD2);

  { Winchester #3 }
  MNU_CopyM(M_WD1,M_WD3,'Winchester #3 Parameters',MN_WD3);

  { Winchester #4 }
  MNU_CopyM(M_WD1,M_WD4,'Winchester #4 Parameters',MN_WD4);

  { Left Floppy }
  MNU_Menu(M_FL4,'Left Floppy Drive Selection',MNU_2Style,MN_FL4,1);
  MNU_ItemC('SAGE double side, 80 track (1280 blocks)',0,D_FCsg1280);
  MNU_ItemC('SAGE double side, 40 track ( 640 blocks)',0,D_FCsg640);
  MNU_ItemC('IBM single side, 40 track - Universal Media (320 blocks)',0,
	     D_FCibm320);
  MNU_ItemC('IBM double side, 40 track (640 blocks)',0,D_FCibm640);
  MNU_ItemC('Network Consulting single side, 40 track (400 blocks)',0,
	     D_FCnci400);
  MNU_ItemC('Network Consulting double side, 40 track (800 blocks)',0,
	     D_FCnci800);
  MNU_ItemC('Network Consulting double side, 80 track (1600 blocks)',0,
	     D_FCnci1600);
  MNU_ItemC('IBM double side, 80 track (1280 blocks)',0,D_FCibm1280);
  MNU_ItemC('Non Standard Drive Configuration',0,D_FCnonstan);
  MNU_ItemC('No drive equipped',0,D_FCnodrv);
  MNU_ItemC('SAGE 10 sector per track, 80 track (1600 blocks)',0,D_FCsg1600);
  Dot;
  
  { Right Floppy }
  MNU_CopyM(M_FL4,M_FL5,'Right Floppy Drive Selection',MN_FL5);

  { RamDisk }
  MNU_Menu(M_RDK,'RAM Disk Configuration',MNU_1Style,MN_RDK,8);
  MNU_ItemH('Base of Ram Disk (0 = disabled)',0,D_RDbase,6);
  MNU_ItemH('Top  of Ram Disk (0 = to BIOS)',0,D_RDtop,6);
  MNU_ItemO('Boot to Ram Disk flag',0,D_RDboot);
  Dot;

  { Printer }
  MNU_Menu(M_PRT,'Printer Configuration Control',MNU_1Style,MN_PRT,25);
  MNU_ItemM('Printer port assignment',0,D_Pmode,M_PMODE,TRUE);
  MNU_ItemO('Linefeed after carriage return',0,D_Pnolf);
  
  MNU_Menu(M_Pmode,'Printer Port Assignment',MNU_2Style,MN_PMODE,1);
  MNU_ItemC('Remote serial channel',0,D_Pserial);
  MNU_ItemC('Parallel port',0,D_Ppar);
  MNU_ItemC('Extra serial channel #1',0,D_Pex1);
  MNU_ItemC('Extra serial channel #2',0,D_Pex2);
  MNU_ItemC('Extra serial channel #3',0,D_Pex3);
  MNU_ItemC('Extra serial channel #4',0,D_Pex4);
  MNU_ItemC('Disabled',0,D_Pdisable);
  Dot;
  
  { Parallel Port }
  MNU_Menu(M_PPORT,'Parallel Port Control',MNU_1Style,MN_PPORT,6);
  MNU_ItemO('Interrupt (vs Scheduled Polling)',0,D_Pinter);
  MNU_ItemI('Polling attempts before delay',0,D_Ptimeout,MAXINT,-MAXINT);
  MNU_ItemI('Delay before re-polling',0,D_Ppolltime,MAXINT,-MAXINT);
  
  

  { Time Adjust }
  MNU_Menu(M_TAJ,'Time Adjustment',MNU_1Style,MN_TAJ,4);
  MNU_ItemI('Seconds of time adjustment',0,D_Tseconds,60,-60);
  MNU_ItemI('In number of days',0,D_Tdays,100,0);
  Dot;

  { Device Map }
  MNU_Menu(M_MAP,'BIOS Channel Map (0 to 15)',MNU_1Style,MN_MAP,2);
  FOR I := 0 TO 15 DO
    BEGIN
      IF I < 10 THEN Result:='Channel  ' ELSE Result:='Channel ';
      SIO_IntWt(I,Result);
      Result:=CONCAT(Result,' device =');
      MNU_ItemI(Result,0,I,31,0);
    END;
  Dot;
  FOR I := 16 TO 31 DO
    BEGIN
      IF (I-16) < 10 THEN Result:='Channel  ' ELSE Result:='Channel ';
      SIO_IntWt(I-16,Result);
      Result:=CONCAT(Result,' subdevice =');
      MNU_ItemI(Result,0,I,255,0);
    END;
  Dot;
  
  MNU_Menu(M_MAP1,'BIOS Channel Map (16 to 31)',MNU_1Style,MN_MAP1,2);
  FOR I := 32 TO 47 DO
    BEGIN
      Result:='Channel ';
      SIO_IntWt(I-16,Result);
      Result:=CONCAT(Result,' device =');
      MNU_ItemI(Result,0,I,31,0);
    END;
  Dot;
  FOR I:= 48 TO 63 DO
    BEGIN
      Result:='Channel ';
      SIO_IntWt(I-32,Result);
      Result:=CONCAT(Result,' subdevice =');
      MNU_ItemI(Result,0,I,255,0);
    END;
  Dot;

  MNU_Menu(M_LLC,'Low Level Configuration',MNU_1Style,MN_LLC,0);
  MNU_ItemM('BIOS Channel Map ( 0 to 15)',0,MN_MAP,M_MAP,FALSE);
  MNU_ItemM('BIOS Channel Map (16 to 31)',0,MN_MAP1,M_MAP1,FALSE);
  MNU_ItemM('Left  Floppy Details',0,MN_FL4D,M_FL4D,FALSE);
  MNU_ItemM('Right Floppy Details',0,MN_FL5D,M_FL5D,FALSE);
  MNU_ItemM('Shared Floppy Details',0,MN_FLS,M_FLS,FALSE);
  MNU_ItemM('Winchester #1',0,MN_WD1,M_WD1,FALSE);
  MNU_ItemM('Winchester #2',0,MN_WD2,M_WD2,FALSE);
  MNU_ItemM('Winchester #3',0,MN_WD3,M_WD3,FALSE);
  MNU_ItemM('Winchester #4',0,MN_WD4,M_WD4,FALSE);
  MNU_ItemM('Operating System Information',0,MN_OPSY,M_OPSY,FALSE);
  MNU_ItemM('Auxiliary Device Information',0,MN_DInfo,M_DInfo,FALSE);
  Dot;

  MNU_Menu(M_FL4D,'Low Level Left Floppy Configuration',MNU_1Style,MN_FL4D,10);
  MNU_ItemI('Number of sides',0,D_Fsides,2,1);
  MNU_ItemI('Number of cylinders',0,D_FNcyl,255,1);
  MNU_ItemI('Sectors per track',0,D_FSPT,255,1);
  MNU_ItemI('Bytes per Sector',0,D_FBPS,MAXINT,1);
  MNU_ItemI('Retries',0,D_Fretries,254,0);
  MNU_ItemH('Motor on delay factor',0,D_Fmotoron,4);
  MNU_ItemI('Data length',0,D_Fdataleng,255,0);
  MNU_ItemI('Gap 3 parameter',0,D_FGap3,255,0);
  MNU_ItemI('Gap 3 for format',0,D_FGap3F,255,0);
  MNU_ItemI('Pattern for format',0,D_Fforpat,255,0);
  MNU_ItemI('Skew for format',0,D_Fforskew,255,0);
  MNU_ItemO('IBM track format',0,D_FIBM);
  MNU_ItemO('NCI 10 sects/trk',0,D_FNCI);
  MNU_ItemO('Read 48 on 96 TPI',0,D_F48on96);
  MNU_ItemO('Read after write',0,D_FRAW);
  MNU_ItemO('Ignore errors',0,D_Fignore);

  MNU_CopyM(M_FL4D,M_FL5D,'Low Level Right Floppy Configuration',MN_FL5D);
  
  MNU_Menu(M_FLS,'Shared Low Level Floppy Configuration',MNU_1Style,MN_FLS,10);
  MNU_ItemI('Step Time (msec)',0,D_Fsteprate,32,2);
  MNU_ItemI('Head load',0,D_Fheadload,127,0);
  MNU_ItemI('Head unload time',0,D_Fheadunld,15,0);
  MNU_ItemO('Double Density',0,D_Fdensity);
  Dot;

  MNU_Menu(M_OPSY,'Operating System Information',MNU_1Style,MN_OPSY, 8);
  FOR I := 0 TO 15 DO
    BEGIN
      IF I < 10 THEN Result:='Word  ' ELSE Result:='Word ';
      SIO_IntWt(I,Result);
      MNU_ItemH(Result,0,I,4);
    END;
  Dot;
  
  MNU_Menu(M_DInfo,'Auxiliary Device Information',MNU_1Style,MN_DInfo,6);
  MNU_ItemH('Keyboard',0,1,4);
  MNU_ItemH('Terminal',0,2,4);
  MNU_ItemH('Left Floppy',0,4,4);
  MNU_ItemH('Right Floppy',0,5,4);
  MNU_ItemH('Parallel Port',0,6,4);
  MNU_ItemH('Remote Input',0,7,4);
  MNU_ItemH('Remote Output',0,8,4);
  MNU_ItemH('RAM Disk',0,11,4);
  MNU_ItemH('Extra Serial Port #1',0,13,4);
  MNU_ItemH('Extra Serial Port #2',0,14,4);
  MNU_ItemH('Extra Serial Port #3',0,15,4);
  MNU_ItemH('Extra Serial Port #4',0,16,4);
  MNU_ItemM('Winchester #1',0,17,M_WD1Info,FALSE);
  MNU_ItemM('Winchester #2',0,18,M_WD2Info,FALSE);
  MNU_ItemM('Winchester #3',0,19,M_WD3Info,FALSE);
  MNU_ItemM('Winchester #4',0,20,M_WD4Info,FALSE);
  Dot;
  
  
  MNU_Menu(M_WD1INFO,'Winchester #1 Auxiliary Device Information',
	   MNU_1Style,MN_WD1Info, 6);
  FOR I := 0 TO 15 DO
    BEGIN
      IF I < 10 THEN Result:='Partition	 ' ELSE Result:='Partition ';
      SIO_IntWt(I,Result);
      MNU_ItemH(Result,0,I,4);
    END;
  MNU_CopyM(M_WD1INFO,M_WD2INFO,'Winchester #2 Auxiliary Device Information',
	    MN_WD2INFO);
  MNU_CopyM(M_WD1INFO,M_WD3INFO,'Winchester #3 Auxiliary Device Information',
	    MN_WD3INFO);
  MNU_CopyM(M_WD1INFO,M_WD4INFO,'Winchester #4 Auxiliary Device Information',
	    MN_WD4INFO);
  Dot;
  
END;

                                                                                                                                                                                                                                                                                                                                                                                                                                                       