home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / modula2 / library / filetool / tooldisp.mod < prev    next >
Text File  |  1987-12-29  |  26KB  |  733 lines

  1. IMPLEMENTATION MODULE ToolDisplay;
  2.  
  3. (*
  4. Title    : TOOLDISP.MOD
  5. LastEdit : 12/31/87
  6. Author   : Russell G. Osterlund, Jr.
  7. System   : LOGITECH MODULA-2/86, REPERTOIRE, BlackBeard
  8.  
  9. This product has been developed with the use of, and embodies portions of,
  10. LOGITECH software development tools - compiler, linker, and M2MAKE.
  11.  
  12. *)
  13.  
  14. FROM SYSTEM IMPORT
  15.   ADR;
  16. FROM Strings IMPORT
  17.   Assign, Concat, Length;
  18. FROM StringIO IMPORT (* REPERTOIRE *)
  19.   inp, ErrorMessage, ReadStr, ErrorMsgToStr;
  20. FROM StrConv IMPORT (* REPERTOIRE *)
  21.   CardinalToStr, LongIntegerToStr;
  22. FROM StrEdit IMPORT (* REPERTOIRE *)
  23.   CAPstr;
  24. FROM Drectory IMPORT (* REPERTOIRE *)
  25.   FileMode;
  26. FROM SmartScreen IMPORT (* REPERTOIRE *)
  27.   GotoXY, WriteAt, ReverseColors, SetCursorHeight,
  28.   ClearPart, ClearScreen;
  29. FROM GetKey IMPORT (* REPERTOIRE *)
  30.   KeySet, MakeKeySet, GetKey;
  31. FROM MemoryOperations IMPORT
  32.   FillChar;
  33. FROM ToolTypes IMPORT
  34.   DirectoryRecPtr, SubmenuType, WindowType, ActiveWindow;
  35.  
  36. CONST
  37.   HalfLine = '                                        ';
  38.   BlankLine = '                                                                                ';
  39.  
  40. VAR
  41.   YesNoKeySet: KeySet;
  42.   DisplayLine: ARRAY [0 .. 39] OF CHAR;
  43.  
  44. PROCEDURE ColNum (): CARDINAL;
  45. BEGIN
  46.   IF ActiveWindow = LeftWindow THEN
  47.     RETURN 1
  48.   ELSE
  49.     RETURN 41
  50.   END;
  51. END ColNum;
  52.  
  53. PROCEDURE RowNum (RelPos: CARDINAL): CARDINAL;
  54. BEGIN
  55.   RETURN RelPos + 3;
  56. END RowNum;
  57.  
  58. PROCEDURE DisplayFileLine (directory: DirectoryRecPtr;
  59.                filenum: CARDINAL;
  60.                WindowActive: BOOLEAN);
  61. TYPE
  62.   DisplayRecPtr =
  63.     POINTER TO DisplayRec;
  64.   DisplayRec =
  65.     RECORD
  66.       Cursor:    CHAR;
  67.       TagMark:   CHAR;
  68.       Filename:  ARRAY [0 .. 7] OF CHAR;
  69.       Sp1:       CHAR;
  70.       Extension: ARRAY [0 .. 2] OF CHAR;
  71.       Sp2:       CHAR;
  72.       Size:      ARRAY [0 .. 6] OF CHAR;
  73.       Sp3:       CHAR;
  74.       Month:     ARRAY [0 .. 1] OF CHAR;
  75.       Dash1:     CHAR;
  76.       Day:       ARRAY [0 .. 1] OF CHAR;
  77.       Dash2:     CHAR;
  78.       Year:      ARRAY [0 .. 1] OF CHAR;
  79.       Sp4:       CHAR;
  80.       Hour:      ARRAY [0 .. 1] OF CHAR;
  81.       Colon:     CHAR;
  82.       Minute:    ARRAY [0 .. 1] OF CHAR;
  83.       ReadOnly:  CHAR;
  84.       Hidden:    CHAR;
  85.       System:    CHAR;
  86.     END;
  87. VAR
  88.   RelativePos: CARDINAL;
  89.   extension: ARRAY [0 .. 2] OF CHAR;
  90.   filename: ARRAY [0 .. 7] OF CHAR;
  91.   DisplayRecord: DisplayRecPtr;
  92.  
  93. PROCEDURE CommonFields;
  94. BEGIN
  95.   WITH directory^ . FileInfoArray [filenum] DO
  96.     Concat (filename, '        ', filename);
  97.     Assign (filename, DisplayRecord^ . Filename);
  98.     Assign (extension, DisplayRecord^ . Extension);
  99.     CardinalToStr (FileMonth, 2, DisplayRecord^ . Month);
  100.     IF DisplayRecord^ . Month [0] = ' ' THEN
  101.       DisplayRecord^ . Month [0] := '0';
  102.     END;
  103.     CardinalToStr (FileDay, 2, DisplayRecord^ . Day);
  104.     IF DisplayRecord^ . Day [0] = ' ' THEN
  105.       DisplayRecord^ . Day [0] := '0';
  106.     END;
  107.     CardinalToStr (FileYear, 2, DisplayRecord^ . Year);
  108.     IF DisplayRecord^ . Year [0] = ' ' THEN
  109.       DisplayRecord^ . Year [0] := '0';
  110.     END;
  111.     CardinalToStr (FileHour, 2, DisplayRecord^ . Hour);
  112.     IF DisplayRecord^ . Hour [0] = ' ' THEN
  113.       DisplayRecord^ . Hour [0] := '0';
  114.     END;
  115.     CardinalToStr (FileMinute, 2, DisplayRecord^ . Minute);
  116.     IF DisplayRecord^ . Minute [0] = ' ' THEN
  117.       DisplayRecord^ . Minute [0] := '0';
  118.     END;
  119.     IF ReadOnlyFile IN FileAttribute THEN
  120.       DisplayRecord^ .ReadOnly := 'R'
  121.     ELSE
  122.       DisplayRecord^ .ReadOnly := ' '
  123.     END;
  124.     IF HiddenFile IN FileAttribute THEN
  125.       DisplayRecord^ .Hidden := 'H'
  126.     ELSE
  127.       DisplayRecord^ .Hidden := ' '
  128.     END;
  129.     IF SystemFile IN FileAttribute THEN
  130.       DisplayRecord^ .System := 'S'
  131.     ELSE
  132.       DisplayRecord^ .System := ' '
  133.     END;
  134.     DisplayRecord^ . Dash1 := '-';
  135.     DisplayRecord^ . Dash2 := '-';
  136.     DisplayRecord^ . Colon := ':';
  137.   END;
  138. END CommonFields;
  139.  
  140. BEGIN
  141.   DisplayRecord := ADR (DisplayLine);
  142.   IF directory^ . CurrentFile # filenum THEN
  143.     DisplayRecord^ . Cursor := ' ';
  144.   ELSE
  145.     IF WindowActive THEN
  146.       DisplayRecord^ . Cursor := '';
  147.     ELSE
  148.       DisplayRecord^ . Cursor := ' ';
  149.     END;
  150.   END;
  151.   IF directory^ . FileInfoArray [filenum] . tagged THEN
  152.     DisplayRecord^ . TagMark := '√';
  153.   ELSE
  154.     DisplayRecord^ . TagMark := ' ';
  155.   END;
  156.   DisplayRecord^ . Sp1 := ' ';
  157.   DisplayRecord^ . Sp2 := ' ';
  158.   DisplayRecord^ . Sp3 := ' ';
  159.   DisplayRecord^ . Sp4 := ' ';
  160.   DisplayRecord^ . Dash1 := ' ';
  161.   DisplayRecord^ . Dash2 := ' ';
  162.   DisplayRecord^ . Colon := ' ';
  163.   WITH directory^ . FileInfoArray [filenum] DO
  164.     IF (FileName [0] = '.') OR                 (* special DOS *)
  165.       ((FileName [0] = '.') AND
  166.       (FileName [1] = '.')) THEN               (* files       *)
  167.       Assign (FileName, filename);
  168.       extension := '   ';
  169.       IF (FileName [0] = '.') AND
  170.      (FileName [1] = '.') THEN
  171.     DisplayRecord^ . Size := '   <   ';
  172.       ELSE
  173.     DisplayRecord^ . Size := '       ';
  174.       END;
  175.       CommonFields ();
  176.     ELSIF FileName [0] # CHR (255) THEN              (* not empty *)
  177.       Assign (FileName, filename);
  178.       Assign (FileExtension, extension);
  179.       IF SubdirectoryFile IN FileAttribute THEN
  180.     DisplayRecord^ . Size := '   >   ';
  181.       ELSE
  182.     LongIntegerToStr (FileSize, 7, DisplayRecord^ . Size);
  183.       END;
  184.       CommonFields ();
  185.     ELSE
  186.       FillChar (DisplayRecord^ . Filename, Length (DisplayRecord^ . Filename), ' ');
  187.       FillChar (DisplayRecord^ . Extension, Length (DisplayRecord^ . Extension), ' ');
  188.       FillChar (DisplayRecord^ . Size, Length (DisplayRecord^ . Size), ' ');
  189.       FillChar (DisplayRecord^ . Month, Length (DisplayRecord^ . Month), ' ');
  190.       FillChar (DisplayRecord^ . Day, Length (DisplayRecord^ . Day), ' ');
  191.       FillChar (DisplayRecord^ . Year, Length (DisplayRecord^ . Year), ' ');
  192.       FillChar (DisplayRecord^ . Hour, Length (DisplayRecord^ . Hour), ' ');
  193.       FillChar (DisplayRecord^ . Minute, Length (DisplayRecord^ . Minute), ' ');
  194.       DisplayRecord^ . ReadOnly := ' ';
  195.       DisplayRecord^ . Hidden := ' ';
  196.       DisplayRecord^ . System := ' ';
  197.     END;
  198.   END;
  199.   RelativePos := filenum - directory^ . FirstDisplayed + 1;
  200.   WriteAt (ColNum (),
  201.        RowNum (RelativePos),
  202.        DisplayLine);
  203. END DisplayFileLine;
  204.  
  205. PROCEDURE DisplaySummaryLine (directory: DirectoryRecPtr);
  206. TYPE
  207.   SummaryRecPtr =
  208.     POINTER TO SummaryRec;
  209.   SummaryRec =
  210.     RECORD
  211.       Sp1:             CHAR;
  212.       CurrentNumber:   ARRAY [0 .. 2] OF CHAR;
  213.       Sp2:             ARRAY [0 .. 3] OF CHAR;
  214.       NumberOfFiles:   ARRAY [0 .. 2] OF CHAR;
  215.       Sp3:             CHAR;
  216.       SizeOfDirectory: ARRAY [0 .. 6] OF CHAR;
  217.       Sp4:             ARRAY [0 .. 7] OF CHAR;
  218.       NumberOfTagged:  ARRAY [0 .. 2] OF CHAR;
  219.       Sp5:             CHAR;
  220.       SizeOfTagged:    ARRAY [0 .. 6] OF CHAR;
  221.       Sp6:             ARRAY [0 .. 1] OF CHAR;
  222.     END;
  223. VAR
  224.   SummaryRecord: SummaryRecPtr;
  225. BEGIN
  226.   SummaryRecord := ADR (DisplayLine);
  227.   WITH directory^ DO
  228.     SummaryRecord^ . Sp1 := ' ';
  229.     CardinalToStr (CurrentFile + 1, 3, SummaryRecord^ . CurrentNumber);
  230.     SummaryRecord^ . Sp2 := ' of ';
  231.     CardinalToStr (NumberOfEntries + 1, 3, SummaryRecord^ . NumberOfFiles);
  232.     SummaryRecord^ . Sp3 := '/';
  233.     LongIntegerToStr (DirectorySize, 7, SummaryRecord^ . SizeOfDirectory);
  234.     SummaryRecord^ . Sp4 := "  √'d - ";
  235.     CardinalToStr (NumberTagged, 3, SummaryRecord^ . NumberOfTagged);
  236.     SummaryRecord^ . Sp5 := '/';
  237.     LongIntegerToStr (TaggedSize, 7, SummaryRecord^ . SizeOfTagged);
  238.     SummaryRecord^ . Sp6 := '  ';
  239.   END;
  240.   WriteAt (ColNum (), 24, DisplayLine);
  241. END DisplaySummaryLine;
  242.  
  243. PROCEDURE DisplayInfo (directory: DirectoryRecPtr;
  244.                start: CARDINAL;
  245.                WindowActive: BOOLEAN);
  246. VAR
  247.   i: CARDINAL;
  248.   ThePath: ARRAY [0 .. 65] OF CHAR;
  249. BEGIN
  250.   (* First, build and then display the path *)
  251.   WriteAt (ColNum (), 3, HalfLine);
  252.   Concat (directory^ . DirectoryDrive, ':', ThePath);
  253.   Concat (ThePath, directory^ . DirectoryPath, ThePath);
  254.   IF ThePath [Length (ThePath) - 1] # '\' THEN
  255.     Concat (ThePath, '\', ThePath);
  256.   END;
  257.   CAPstr (ThePath);
  258.   WriteAt (ColNum () + 2, 3, ThePath);
  259.  
  260.   (* Next, make certain that CurrentFile is not outside the boundaries
  261.      of the screen *)
  262.   IF directory^ . CurrentFile > directory^ . NumberOfEntries THEN
  263.     directory^ . CurrentFile := directory^ . NumberOfEntries;
  264.   END;
  265.   IF    directory^ . CurrentFile > start + MaxDisplayLines THEN
  266.     directory^ . CurrentFile := start + MaxDisplayLines;
  267.   ELSIF directory^ . CurrentFile < start THEN
  268.     directory^ . CurrentFile := start;
  269.   ELSE
  270.   END;
  271.  
  272.   (* Finally, display the window one file at a time *)
  273.   directory^ . FirstDisplayed := start;
  274.   FOR i := 0 TO MaxDisplayLines DO
  275.     DisplayFileLine (directory, start + i, WindowActive);
  276.   END;
  277.   DisplaySummaryLine (directory);
  278. END DisplayInfo;
  279.  
  280. PROCEDURE DECMenuPos (max: CARDINAL;
  281.           VAR pos: CARDINAL);
  282. BEGIN
  283.   IF pos = 0 THEN
  284.     pos := max;
  285.   ELSE
  286.     DEC (pos);
  287.   END;
  288. END DECMenuPos;
  289.  
  290. PROCEDURE INCMenuPos (max: CARDINAL;
  291.           VAR pos: CARDINAL);
  292. BEGIN
  293.   IF pos = max THEN
  294.     pos := 0;
  295.   ELSE
  296.     INC (pos);
  297.   END;
  298. END INCMenuPos;
  299.  
  300. PROCEDURE DisplayMainMenu ();
  301. VAR
  302.   i: CARDINAL;
  303. BEGIN
  304.   WriteAt (1, MainMenu [0] . RowNum, BlankLine);
  305.   FOR i := 0 TO HIGH (MainMenu) DO
  306.     WITH MainMenu [i] DO
  307.       IF i = MainMenuPos THEN
  308.     ReverseColors ();
  309.     WriteAt (ColNum, RowNum, Command);
  310.     ReverseColors ();
  311.     WriteAt (2, 2, HelpText);
  312.       ELSE
  313.     WriteAt (ColNum, RowNum, Command);
  314.       END;
  315.     END;
  316.   END;
  317. END DisplayMainMenu;
  318.  
  319. PROCEDURE DisplaySubMenu (menu: ARRAY OF SubmenuType;
  320.               pos: CARDINAL;
  321.               blank: BOOLEAN);
  322. VAR
  323.   i: CARDINAL;
  324. BEGIN
  325.   IF blank THEN
  326.     WriteAt (1, menu [1] . RowNum, BlankLine);
  327.   END;
  328.   FOR i := 0 TO HIGH (menu) DO
  329.     WITH menu [i] DO
  330.       IF i = pos THEN
  331.     ReverseColors ();
  332.     WriteAt (ColNum, RowNum, Command);
  333.     ReverseColors ();
  334.       ELSE
  335.     WriteAt (ColNum, RowNum, Command);
  336.       END;
  337.     END;
  338.   END;
  339. END DisplaySubMenu;
  340.  
  341. PROCEDURE DisplayAdditionalMenu ();
  342. BEGIN
  343.   ClearPart (AdditionalMenu [0] . ColNum - 5,
  344.          AdditionalMenu [0] . RowNum,
  345.          AdditionalMenu [9] . ColNum + Length (AdditionalMenu [9] . Command) + 5,
  346.          AdditionalMenu [9] . RowNum + 2);
  347.   WriteAt (AdditionalMenu [0] . ColNum - 3,
  348.        AdditionalMenu [0] . RowNum,
  349.        '│');
  350.   WriteAt (AdditionalMenu [0] . ColNum - 2,
  351.        AdditionalMenu [0] . RowNum,
  352.        AdditionalMenu [0] . KeyEquivalent);
  353.   WriteAt (AdditionalMenu [0] . ColNum + Length (AdditionalMenu [0] . Command),
  354.        AdditionalMenu [0] . RowNum,
  355.        '│');
  356.   WriteAt (AdditionalMenu [1] . ColNum - 3,
  357.        AdditionalMenu [1] . RowNum,
  358.        '│');
  359.   WriteAt (AdditionalMenu [1] . ColNum - 2,
  360.        AdditionalMenu [1] . RowNum,
  361.        AdditionalMenu [1] . KeyEquivalent);
  362.   WriteAt (AdditionalMenu [1] . ColNum + Length (AdditionalMenu [1] . Command),
  363.        AdditionalMenu [1] . RowNum,
  364.        '│');
  365.   WriteAt (AdditionalMenu [2] . ColNum - 3,
  366.        AdditionalMenu [2] . RowNum,
  367.        '│');
  368.   WriteAt (AdditionalMenu [2] . ColNum - 2,
  369.        AdditionalMenu [2] . RowNum,
  370.        AdditionalMenu [2] . KeyEquivalent);
  371.   WriteAt (AdditionalMenu [2] . ColNum + Length (AdditionalMenu [2] . Command),
  372.        AdditionalMenu [2] . RowNum,
  373.        '│');
  374.   WriteAt (AdditionalMenu [3] . ColNum - 3,
  375.        AdditionalMenu [3] . RowNum,
  376.        '│');
  377.   WriteAt (AdditionalMenu [3] . ColNum - 2,
  378.        AdditionalMenu [3] . RowNum,
  379.        AdditionalMenu [3] . KeyEquivalent);
  380.   WriteAt (AdditionalMenu [3] . ColNum + Length (AdditionalMenu [3] . Command),
  381.        AdditionalMenu [3] . RowNum,
  382.        '│');
  383.   WriteAt (AdditionalMenu [4] . ColNum - 3,
  384.        AdditionalMenu [4] . RowNum,
  385.        '│');
  386.   WriteAt (AdditionalMenu [4] . ColNum - 2,
  387.        AdditionalMenu [4] . RowNum,
  388.        AdditionalMenu [4] . KeyEquivalent);
  389.   WriteAt (AdditionalMenu [4] . ColNum + Length (AdditionalMenu [4] . Command),
  390.        AdditionalMenu [4] . RowNum,
  391.        '│');
  392.   WriteAt (AdditionalMenu [5] . ColNum - 3,
  393.        AdditionalMenu [5] . RowNum,
  394.        '│');
  395.   WriteAt (AdditionalMenu [5] . ColNum - 2,
  396.        AdditionalMenu [5] . RowNum,
  397.        AdditionalMenu [5] . KeyEquivalent);
  398.   WriteAt (AdditionalMenu [5] . ColNum + Length (AdditionalMenu [5] . Command),
  399.        AdditionalMenu [5] . RowNum,
  400.        '│');
  401.   WriteAt (AdditionalMenu [6] . ColNum - 3,
  402.        AdditionalMenu [6] . RowNum,
  403.        '│');
  404.   WriteAt (AdditionalMenu [6] . ColNum - 2,
  405.        AdditionalMenu [6] . RowNum,
  406.        AdditionalMenu [6] . KeyEquivalent);
  407.   WriteAt (AdditionalMenu [6] . ColNum + Length (AdditionalMenu [6] . Command),
  408.        AdditionalMenu [6] . RowNum,
  409.        '│');
  410.   WriteAt (AdditionalMenu [7] . ColNum - 3,
  411.        AdditionalMenu [7] . RowNum,
  412.        '│');
  413.   WriteAt (AdditionalMenu [7] . ColNum - 2,
  414.        AdditionalMenu [7] . RowNum,
  415.        AdditionalMenu [7] . KeyEquivalent);
  416.   WriteAt (AdditionalMenu [7] . ColNum + Length (AdditionalMenu [7] . Command),
  417.        AdditionalMenu [7] . RowNum,
  418.        '│');
  419.   WriteAt (AdditionalMenu [8] . ColNum - 3,
  420.        AdditionalMenu [8] . RowNum,
  421.        '│');
  422.   WriteAt (AdditionalMenu [8] . ColNum - 2,
  423.        AdditionalMenu [8] . RowNum,
  424.        AdditionalMenu [8] . KeyEquivalent);
  425.   WriteAt (AdditionalMenu [8] . ColNum + Length (AdditionalMenu [8] . Command),
  426.        AdditionalMenu [8] . RowNum,
  427.        '│');
  428.   WriteAt (AdditionalMenu [9] . ColNum - 3,
  429.        AdditionalMenu [9] . RowNum,
  430.        '│');
  431.   WriteAt (AdditionalMenu [9] . ColNum - 2,
  432.        AdditionalMenu [9] . RowNum,
  433.        AdditionalMenu [9] . KeyEquivalent);
  434.   WriteAt (AdditionalMenu [9] . ColNum + Length (AdditionalMenu [9] . Command),
  435.        AdditionalMenu [9] . RowNum,
  436.        '│');
  437.   WriteAt (AdditionalMenu [9] . ColNum - 3,
  438.        AdditionalMenu [9] . RowNum + 1,
  439.        '└───────────────────────┘');
  440. END DisplayAdditionalMenu;
  441.  
  442. PROCEDURE YesAnswer (TheQuestion: ARRAY OF CHAR): BOOLEAN;
  443. VAR
  444.   Yes,
  445.   ExtendedKey: BOOLEAN;
  446.   Key: CHAR;
  447. BEGIN
  448.   WriteAt (1, 2, BlankLine);
  449.   WriteAt (1, 2, TheQuestion);
  450.   GetKey (YesNoKeySet, Key, ExtendedKey);
  451.   CASE Key OF
  452.     'Y', 'y':
  453.       Yes := TRUE
  454.     ELSE
  455.       Yes := FALSE;
  456.   END;
  457.   RETURN Yes;
  458. END YesAnswer;
  459.  
  460. PROCEDURE GetMoreInfo (ThePrompt: ARRAY OF CHAR;
  461.             VAR TheOtherName: ARRAY OF CHAR);
  462. VAR
  463.   info: ARRAY [0 .. 65] OF CHAR;
  464. BEGIN
  465.   SetCursorHeight (2);
  466.   WriteAt (1, 2, BlankLine);
  467.   WriteAt (1, 2, ThePrompt);
  468.   GotoXY (Length (ThePrompt) + 2, 2);
  469.   ReadStr (inp, info);
  470.   Assign (info, TheOtherName);
  471.   SetCursorHeight (0);
  472. END GetMoreInfo;
  473.  
  474. PROCEDURE DisplayError (TheError: ErrorMessage);
  475. VAR
  476.   TheMsg: ARRAY [0 .. 79] OF CHAR;
  477. BEGIN
  478.   WriteAt (1, 25, BlankLine);
  479.   ErrorMsgToStr (TheError, TheMsg);
  480.   ReverseColors ();
  481.   WriteAt (1, 25, TheMsg);
  482.   ReverseColors ();
  483. END DisplayError;
  484.  
  485. PROCEDURE DisplayMessage (TheMessage: ARRAY OF CHAR);
  486. BEGIN
  487.   WriteAt (1, 25, BlankLine);
  488.   WriteAt (1, 25, TheMessage);
  489. END DisplayMessage;
  490.  
  491. PROCEDURE ClearMessage ();
  492. BEGIN
  493.   WriteAt (1, 25, BlankLine);
  494. END ClearMessage;
  495.  
  496. PROCEDURE NoErrorMsg (error: ErrorMessage): BOOLEAN;
  497. BEGIN
  498.   IF error # NoError THEN
  499.     DisplayError (error);
  500.     RETURN FALSE;
  501.   ELSE
  502.     RETURN TRUE;
  503.   END;
  504. END NoErrorMsg;
  505.  
  506. PROCEDURE DisplayHelpScreen ();
  507. BEGIN
  508.   ClearScreen ();
  509.   WriteAt (1,  1, '                 FILETOOL V1.02                                                           ');
  510.   WriteAt (1,  3, '  Up/Down Arrow      - Up/Down 1 file                                                     ');
  511.   WriteAt (1,  4, '  Home/End           - Top/Bottom of window                                               ');
  512.   WriteAt (1,  5, '  PgUp/PgDn          - Up/Down 20 files                                                   ');
  513.   WriteAt (1,  6, '  Ctrl-Home          - Beginning of list                                                  ');
  514.   WriteAt (1,  7, '  Ctrl-End           - End of list                                                        ');
  515.   WriteAt (1,  8, '  Tab/Shift-Tab      - Next/Previous command                                              ');
  516.   WriteAt (1,  9, '  Left/Right Arrow   - Left/Right window                                                  ');
  517.   WriteAt (1, 10, '  <                  - Up 1 directory level                                               ');
  518.   WriteAt (1, 11, '  >                  - Down 1 directory level                                             ');
  519.   WriteAt (1, 12, '  Space              - Tag/Untag current file                                             ');
  520.   WriteAt (1, 13, '  Esc                - Cancel current operation                                           ');
  521.   WriteAt (1, 14, '  Enter              - Execute current operation                                          ');
  522.   WriteAt (1, 15, '  Capitalized Letter - Execute appropriate command                                        ');
  523.   WriteAt (1, 17, '  Configuration file keywords are:                                                        ');
  524.   WriteAt (1, 18, '    BCOLOR= background color       FCOLOR= foreground color                               ');
  525.   WriteAt (1, 19, '    EDIT= edit utility             LIST= list (browse) utility                            ');
  526.   WriteAt (1, 20, '    OPTION= eXecute Menu options                                                          ');
  527. END DisplayHelpScreen;
  528.  
  529. BEGIN
  530.   MakeKeySet (' "y";"Y";"n";"N";27 ', YesNoKeySet);
  531.   MainMenuPos := 0;
  532.   MainMenu [0] . Command := 'Attributes';
  533.   MainMenu [0] . HelpText := "Change date/time stamp, read/hidden flag for a file or group of files          ";
  534.   MainMenu [0] . KeyEquivalent := 'A';
  535.   MainMenu [0] . RowNum := 1;
  536.   MainMenu [0] . ColNum := 2;
  537.   MainMenu [1] . Command := 'Copy';
  538.   MainMenu [1] . HelpText := "Copy a file or a group of files to another location                            ";
  539.   MainMenu [1] . KeyEquivalent := 'C';
  540.   MainMenu [1] . RowNum := 1;
  541.   MainMenu [1] . ColNum := 13;
  542.   MainMenu [2] . Command := 'Delete';
  543.   MainMenu [2] . HelpText := "Delete a file or a group of files                                              ";
  544.   MainMenu [2] . KeyEquivalent := 'D';
  545.   MainMenu [2] . RowNum := 1;
  546.   MainMenu [2] . ColNum := 18;
  547.   MainMenu [3] . Command := 'Edit';
  548.   MainMenu [3] . HelpText := "Edit a file                                                                    ";
  549.   MainMenu [3] . KeyEquivalent := 'E';
  550.   MainMenu [3] . RowNum := 1;
  551.   MainMenu [3] . ColNum := 25;
  552.   MainMenu [4] . Command := 'Help';
  553.   MainMenu [4] . HelpText := "Summary of available commands                                                  ";
  554.   MainMenu [4] . KeyEquivalent := 'H';
  555.   MainMenu [4] . RowNum := 1;
  556.   MainMenu [4] . ColNum := 30;
  557.   MainMenu [5] . Command := 'List';
  558.   MainMenu [5] . HelpText := "List a file to the screen                                                      ";
  559.   MainMenu [5] . KeyEquivalent := 'L';
  560.   MainMenu [5] . RowNum := 1;
  561.   MainMenu [5] . ColNum := 35;
  562.   MainMenu [6] . Command := 'Move';
  563.   MainMenu [6] . HelpText := "Move a file or a group of files to another location                            ";
  564.   MainMenu [6] . KeyEquivalent := 'M';
  565.   MainMenu [6] . RowNum := 1;
  566.   MainMenu [6] . ColNum := 40;
  567.   MainMenu [7] . Command := 'Other';
  568.   MainMenu [7] . HelpText := "Create/Delete directories; Left/Right window; Tag/Untag all; Set configuration ";
  569.   MainMenu [7] . KeyEquivalent := 'O';
  570.   MainMenu [7] . RowNum := 1;
  571.   MainMenu [7] . ColNum := 45;
  572.   MainMenu [8] . Command := 'Quit';
  573.   MainMenu [8] . HelpText := "Quit this program and return to DOS                                            ";
  574.   MainMenu [8] . KeyEquivalent := 'Q';
  575.   MainMenu [8] . RowNum := 1;
  576.   MainMenu [8] . ColNum := 51;
  577.   MainMenu [9] . Command := 'Rename';
  578.   MainMenu [9] . HelpText := "Rename a file                                                                  ";
  579.   MainMenu [9] . KeyEquivalent := 'R';
  580.   MainMenu [9] . RowNum := 1;
  581.   MainMenu [9] . ColNum := 56;
  582.   MainMenu [10] . Command := 'Sort';
  583.   MainMenu [10] . HelpText := "Sort the directory list by Filename, Extension, Date, or Size                  ";
  584.   MainMenu [10] . KeyEquivalent := 'S';
  585.   MainMenu [10] . RowNum := 1;
  586.   MainMenu [10] . ColNum := 63;
  587.   MainMenu [11] . Command := 'eXecute';
  588.   MainMenu [11] . HelpText := "Temporarily exit this program and execute another program                      ";
  589.   MainMenu [11] . KeyEquivalent := 'X';
  590.   MainMenu [11] . RowNum := 1;
  591.   MainMenu [11] . ColNum := 68;
  592.   CopyMenu [0] . Command := 'Current';
  593.   CopyMenu [0] . KeyEquivalent := 'C';
  594.   CopyMenu [0] . RowNum := 2;
  595.   CopyMenu [0] . ColNum := 2;
  596.   CopyMenu [1] . Command := 'Other';
  597.   CopyMenu [1] . KeyEquivalent := 'O';
  598.   CopyMenu [1] . RowNum := 2;
  599.   CopyMenu [1] . ColNum := 11;
  600.   CopyMenu [2] . Command := 'Tagged';
  601.   CopyMenu [2] . KeyEquivalent := 'T';
  602.   CopyMenu [2] . RowNum := 2;
  603.   CopyMenu [2] . ColNum := 18;
  604.   RenameMenu [0] . Command := 'Current';
  605.   RenameMenu [0] . KeyEquivalent := 'C';
  606.   RenameMenu [0] . RowNum := 2;
  607.   RenameMenu [0] . ColNum := 2;
  608.   RenameMenu [1] . Command := 'Other';
  609.   RenameMenu [1] . KeyEquivalent := 'O';
  610.   RenameMenu [1] . RowNum := 2;
  611.   RenameMenu [1] . ColNum := 11;
  612.   ExecuteMenu [0] . Command := 'Current';
  613.   ExecuteMenu [0] . KeyEquivalent := 'C';
  614.   ExecuteMenu [0] . RowNum := 2;
  615.   ExecuteMenu [0] . ColNum := 2;
  616.   ExecuteMenu [1] . Command := 'Menu';
  617.   ExecuteMenu [1] . KeyEquivalent := 'M';
  618.   ExecuteMenu [1] . RowNum := 2;
  619.   ExecuteMenu [1] . ColNum := 11;
  620.   ExecuteMenu [2] . Command := 'Other';
  621.   ExecuteMenu [2] . KeyEquivalent := 'O';
  622.   ExecuteMenu [2] . RowNum := 2;
  623.   ExecuteMenu [2] . ColNum := 17;
  624.   ExecuteMenu [3] . Command := 'Shell';
  625.   ExecuteMenu [3] . KeyEquivalent := 'S';
  626.   ExecuteMenu [3] . RowNum := 2;
  627.   ExecuteMenu [3] . ColNum := 24;
  628.   AdditionalMenu [0] . Command := '                     ';
  629.   AdditionalMenu [0] . KeyEquivalent := 'A';
  630.   AdditionalMenu [0] . RowNum := 3;
  631.   AdditionalMenu [0] . ColNum := 10;
  632.   AdditionalMenu [1] . Command := '                     ';
  633.   AdditionalMenu [1] . KeyEquivalent := 'B';
  634.   AdditionalMenu [1] . RowNum := 4;
  635.   AdditionalMenu [1] . ColNum := 10;
  636.   AdditionalMenu [2] . Command := '                     ';
  637.   AdditionalMenu [2] . KeyEquivalent := 'C';
  638.   AdditionalMenu [2] . RowNum := 5;
  639.   AdditionalMenu [2] . ColNum := 10;
  640.   AdditionalMenu [3] . Command := '                     ';
  641.   AdditionalMenu [3] . KeyEquivalent := 'D';
  642.   AdditionalMenu [3] . RowNum := 6;
  643.   AdditionalMenu [3] . ColNum := 10;
  644.   AdditionalMenu [4] . Command := '                     ';
  645.   AdditionalMenu [4] . KeyEquivalent := 'E';
  646.   AdditionalMenu [4] . RowNum := 7;
  647.   AdditionalMenu [4] . ColNum := 10;
  648.   AdditionalMenu [5] . Command := '                     ';
  649.   AdditionalMenu [5] . KeyEquivalent := 'F';
  650.   AdditionalMenu [5] . RowNum := 8;
  651.   AdditionalMenu [5] . ColNum := 10;
  652.   AdditionalMenu [6] . Command := '                     ';
  653.   AdditionalMenu [6] . KeyEquivalent := 'G';
  654.   AdditionalMenu [6] . RowNum := 9;
  655.   AdditionalMenu [6] . ColNum := 10;
  656.   AdditionalMenu [7] . Command := '                     ';
  657.   AdditionalMenu [7] . KeyEquivalent := 'H';
  658.   AdditionalMenu [7] . RowNum := 10;
  659.   AdditionalMenu [7] . ColNum := 10;
  660.   AdditionalMenu [8] . Command := '                     ';
  661.   AdditionalMenu [8] . KeyEquivalent := 'I';
  662.   AdditionalMenu [8] . RowNum := 11;
  663.   AdditionalMenu [8] . ColNum := 10;
  664.   AdditionalMenu [9] . Command := '                     ';
  665.   AdditionalMenu [9] . KeyEquivalent := 'J';
  666.   AdditionalMenu [9] . RowNum := 12;
  667.   AdditionalMenu [9] . ColNum := 10;
  668.   SortMenu [0] . Command := 'Date';
  669.   SortMenu [0] . KeyEquivalent := 'D';
  670.   SortMenu [0] . RowNum := 2;
  671.   SortMenu [0] . ColNum := 2;
  672.   SortMenu [1] . Command := 'Extension';
  673.   SortMenu [1] . KeyEquivalent := 'E';
  674.   SortMenu [1] . RowNum := 2;
  675.   SortMenu [1] . ColNum := 8;
  676.   SortMenu [2] . Command := 'Name';
  677.   SortMenu [2] . KeyEquivalent := 'N';
  678.   SortMenu [2] . RowNum := 2;
  679.   SortMenu [2] . ColNum := 19;
  680.   SortMenu [3] . Command := 'Size';
  681.   SortMenu [3] . KeyEquivalent := 'S';
  682.   SortMenu [3] . RowNum := 2;
  683.   SortMenu [3] . ColNum := 25;
  684.   AttributesMenu [0] . Command := 'Date/Time';
  685.   AttributesMenu [0] . KeyEquivalent := 'D';
  686.   AttributesMenu [0] . RowNum := 2;
  687.   AttributesMenu [0] . ColNum := 2;
  688.   AttributesMenu [1] . Command := 'Hide';
  689.   AttributesMenu [1] . KeyEquivalent := 'H';
  690.   AttributesMenu [1] . RowNum := 2;
  691.   AttributesMenu [1] . ColNum := 13;
  692.   AttributesMenu [2] . Command := 'Protect';
  693.   AttributesMenu [2] . KeyEquivalent := 'P';
  694.   AttributesMenu [2] . RowNum := 2;
  695.   AttributesMenu [2] . ColNum := 19;
  696.   AttributesMenu [3] . Command := 'Show';
  697.   AttributesMenu [3] . KeyEquivalent := 'S';
  698.   AttributesMenu [3] . RowNum := 2;
  699.   AttributesMenu [3] . ColNum := 28;
  700.   AttributesMenu [4] . Command := 'Unprotect';
  701.   AttributesMenu [4] . KeyEquivalent := 'U';
  702.   AttributesMenu [4] . RowNum := 2;
  703.   AttributesMenu [4] . ColNum := 34;
  704.   OtherMenu [0] . Command := 'Create dir';
  705.   OtherMenu [0] . KeyEquivalent := 'C';
  706.   OtherMenu [0] . RowNum := 2;
  707.   OtherMenu [0] . ColNum := 2;
  708.   OtherMenu [1] . Command := 'Delete dir';
  709.   OtherMenu [1] . KeyEquivalent := 'D';
  710.   OtherMenu [1] . RowNum := 2;
  711.   OtherMenu [1] . ColNum := 14;
  712.   OtherMenu [2] . Command := 'Left win';
  713.   OtherMenu [2] . KeyEquivalent := 'L';
  714.   OtherMenu [2] . RowNum := 2;
  715.   OtherMenu [2] . ColNum := 26;
  716.   OtherMenu [3] . Command := 'Right win';
  717.   OtherMenu [3] . KeyEquivalent := 'R';
  718.   OtherMenu [3] . RowNum := 2;
  719.   OtherMenu [3] . ColNum := 36;
  720.   OtherMenu [4] . Command := 'Set config';
  721.   OtherMenu [4] . KeyEquivalent := 'S';
  722.   OtherMenu [4] . RowNum := 2;
  723.   OtherMenu [4] . ColNum := 47;
  724.   OtherMenu [5] . Command := 'Tag all';
  725.   OtherMenu [5] . KeyEquivalent := 'T';
  726.   OtherMenu [5] . RowNum := 2;
  727.   OtherMenu [5] . ColNum := 59;
  728.   OtherMenu [6] . Command := 'Untag all';
  729.   OtherMenu [6] . KeyEquivalent := 'U';
  730.   OtherMenu [6] . RowNum := 2;
  731.   OtherMenu [6] . ColNum := 69;
  732. END ToolDisplay.
  733.