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

  1. IMPLEMENTATION MODULE ToolCommands;
  2.  
  3. (*
  4. Title    : TOOLCOMM.MOD
  5. LastEdit : 01/04/88
  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 Strings IMPORT
  15.   Assign;
  16. FROM Drectory IMPORT (* REPERTOIRE *)
  17.   FileMode;
  18. FROM Drectory IMPORT (* REPERTOIRE *)
  19.   ChDir, SetDefaultDrive, GetDefaultDrive, GetCurrentDir;
  20. FROM ToolUtilities IMPORT
  21.   InitDirectoryInfo, ReadInfo;
  22. FROM ToolDisplay IMPORT
  23.   MaxDisplayLines,
  24.   DisplayInfo, DisplayFileLine, DisplaySummaryLine, NoErrorMsg;
  25. FROM ToolTypes IMPORT
  26.   DirectoryRecPtr,
  27.   WindowType, ActiveWindow, BothWindowsActive;
  28.  
  29. PROCEDURE UpOneFile (directory: DirectoryRecPtr);
  30. BEGIN
  31.   WITH directory^ DO
  32.     IF CurrentFile = 0 THEN
  33.       CurrentFile := NumberOfEntries;
  34.       IF NumberOfEntries + 1 < MaxDisplayLines THEN
  35.     FirstDisplayed := 0;
  36.       ELSE
  37.     FirstDisplayed := NumberOfEntries - MaxDisplayLines;
  38.       END;
  39.       DisplayInfo (directory, FirstDisplayed, TRUE);
  40.     ELSE
  41.       DEC (CurrentFile);
  42.       IF CurrentFile < FirstDisplayed THEN
  43.     FirstDisplayed := CurrentFile;
  44.     DisplayInfo (directory, FirstDisplayed, TRUE);
  45.       ELSE
  46.     DisplayFileLine (directory, CurrentFile + 1, TRUE);
  47.     DisplayFileLine (directory, CurrentFile, TRUE);
  48.       END;
  49.     END;
  50.   END;
  51.   DisplaySummaryLine (directory);
  52. END UpOneFile;
  53.  
  54. PROCEDURE DownOneFile (directory: DirectoryRecPtr);
  55. BEGIN
  56.   WITH directory^ DO
  57.     IF CurrentFile = NumberOfEntries THEN
  58.       CurrentFile := 0;
  59.       FirstDisplayed := 0;
  60.       IF NumberOfEntries + 1 <= MaxDisplayLines THEN
  61.     DisplayFileLine (directory, NumberOfEntries, TRUE);
  62.     DisplayFileLine (directory, CurrentFile, TRUE);
  63.       ELSE
  64.     DisplayInfo (directory, FirstDisplayed, TRUE);
  65.       END;
  66.     ELSE
  67.       INC (CurrentFile);
  68.       IF FirstDisplayed + MaxDisplayLines < CurrentFile THEN
  69.     INC (FirstDisplayed);
  70.     DisplayInfo (directory, FirstDisplayed, TRUE);
  71.       ELSE
  72.     DisplayFileLine (directory, CurrentFile - 1, TRUE);
  73.     DisplayFileLine (directory, CurrentFile, TRUE);
  74.       END;
  75.     END;
  76.   END;
  77.   DisplaySummaryLine (directory);
  78. END DownOneFile;
  79.  
  80. PROCEDURE UpOnePage (directory: DirectoryRecPtr);
  81. VAR
  82.   relpos: CARDINAL;
  83. BEGIN
  84.   WITH directory^ DO
  85.     IF NumberOfEntries + 1 > MaxDisplayLines THEN (* > 1 page *)
  86.       relpos := CurrentFile - FirstDisplayed;
  87.       IF FirstDisplayed = 0 THEN
  88.     FirstDisplayed := NumberOfEntries - MaxDisplayLines;
  89.       ELSIF FirstDisplayed <= MaxDisplayLines THEN  (* 1 .. MaxDisplayLines *)
  90.     FirstDisplayed := 0;
  91.       ELSE
  92.     FirstDisplayed := FirstDisplayed - MaxDisplayLines - 1;
  93.       END;
  94.       CurrentFile := FirstDisplayed + relpos;
  95.       DisplayInfo (directory, FirstDisplayed, TRUE);
  96.       DisplaySummaryLine (directory);
  97.     END;
  98.   END;
  99. END UpOnePage;
  100.  
  101. PROCEDURE DownOnePage (directory: DirectoryRecPtr);
  102. VAR
  103.   relpos: CARDINAL;
  104. BEGIN
  105.   WITH directory^ DO
  106.     IF NumberOfEntries + 1 > MaxDisplayLines THEN (* > 1 page *)
  107.       relpos := CurrentFile - FirstDisplayed;
  108.       FirstDisplayed := FirstDisplayed + MaxDisplayLines + 1;
  109.       IF FirstDisplayed > NumberOfEntries THEN
  110.     FirstDisplayed := 0;
  111.       END;
  112.       CurrentFile := FirstDisplayed + relpos;
  113.       IF CurrentFile > NumberOfEntries THEN
  114.     CurrentFile := NumberOfEntries;
  115.       END;
  116.       DisplayInfo (directory, FirstDisplayed, TRUE);
  117.       DisplaySummaryLine (directory);
  118.     END;
  119.   END;
  120. END DownOnePage;
  121.  
  122. PROCEDURE TopOfPage (directory: DirectoryRecPtr);
  123. VAR
  124.   OldCurrent: CARDINAL;
  125. BEGIN
  126.   WITH directory^ DO
  127.     OldCurrent := CurrentFile;
  128.     CurrentFile := FirstDisplayed;
  129.     DisplayFileLine (directory, OldCurrent, TRUE);
  130.     DisplayFileLine (directory, CurrentFile, TRUE);
  131.   END;
  132.   DisplaySummaryLine (directory);
  133. END TopOfPage;
  134.  
  135. PROCEDURE BottomOfPage (directory: DirectoryRecPtr);
  136. VAR
  137.   OldCurrent: CARDINAL;
  138. BEGIN
  139.   WITH directory^ DO
  140.     OldCurrent := CurrentFile;
  141.     IF NumberOfEntries > FirstDisplayed + MaxDisplayLines - 1 THEN (* Full Page *)
  142.       CurrentFile := FirstDisplayed + MaxDisplayLines;
  143.     ELSE                                                (* Last or Partial Page *)
  144.       CurrentFile := NumberOfEntries;
  145.     END;
  146.     DisplayFileLine (directory, OldCurrent, TRUE);
  147.     DisplayFileLine (directory, CurrentFile, TRUE);
  148.   END;
  149.   DisplaySummaryLine (directory);
  150. END BottomOfPage;
  151.  
  152. PROCEDURE BeginningOfList (directory: DirectoryRecPtr);
  153. BEGIN
  154.   WITH directory^ DO
  155.     CurrentFile := 0;
  156.     FirstDisplayed := 0;
  157.     DisplayInfo (directory, FirstDisplayed, TRUE);
  158.   END;
  159.   DisplaySummaryLine (directory);
  160. END BeginningOfList;
  161.  
  162. PROCEDURE EndOfList (directory: DirectoryRecPtr);
  163. BEGIN
  164.   WITH directory^ DO
  165.     CurrentFile := NumberOfEntries;
  166.     IF NumberOfEntries + 1 > MaxDisplayLines THEN
  167.       FirstDisplayed := NumberOfEntries - MaxDisplayLines;
  168.     ELSE
  169.       FirstDisplayed := 0;
  170.     END;
  171.     DisplayInfo (directory, FirstDisplayed, TRUE);
  172.   END;
  173.   DisplaySummaryLine (directory);
  174. END EndOfList;
  175.  
  176. PROCEDURE TagCurrentFile (directory: DirectoryRecPtr);
  177. BEGIN
  178.   WITH directory^ DO
  179.     WITH FileInfoArray [CurrentFile] DO
  180.       IF SubdirectoryFile IN FileAttribute THEN
  181.       ELSIF (FileName [0] = '.') OR               (* special DOS *)
  182.        ((FileName [0] = '.') AND              (* directory   *)
  183.         (FileName [1] = '.')) THEN            (* files       *)
  184.       ELSE
  185.     tagged := NOT (tagged);
  186.     IF tagged THEN
  187.       INC (NumberTagged);
  188.       TaggedSize := TaggedSize + FileSize;
  189.     ELSE
  190.       DEC (NumberTagged);
  191.       TaggedSize := TaggedSize - FileSize;
  192.     END;
  193.       END;
  194.     END;
  195.   END;
  196.   DownOneFile (directory);
  197. END TagCurrentFile;
  198.  
  199. PROCEDURE MoveUpOneLevel (directory: DirectoryRecPtr);
  200. VAR
  201.   SaveMask: ARRAY [0 .. 11] OF CHAR;
  202. BEGIN
  203.   WITH directory^ DO
  204.     WITH FileInfoArray [CurrentFile] DO
  205.       IF (FileName [0] = '.') AND
  206.      (FileName [1] = '.') THEN
  207.     IF NoErrorMsg (ChDir (FileName)) THEN
  208.       Assign (DirectoryMask, SaveMask);
  209.       InitDirectoryInfo (directory);
  210.       Assign (SaveMask, DirectoryMask);
  211.       IF NoErrorMsg (GetCurrentDir (GetDefaultDrive (), DirectoryPath)) THEN
  212.         ReadInfo (directory);
  213.         IF (FileInfoArray [1] . FileName [0] = '.') AND
  214.            (FileInfoArray [1] . FileName [1] = '.') THEN
  215.           DisplayInfo (directory, 1, TRUE);
  216.         ELSE
  217.           DisplayInfo (directory, 0, TRUE);
  218.         END;
  219.       END;
  220.     END;
  221.       END;
  222.     END;
  223.   END;
  224. END MoveUpOneLevel;
  225.  
  226. PROCEDURE MoveDownOneLevel (directory: DirectoryRecPtr);
  227. VAR
  228.   SaveMask: ARRAY [0 .. 11] OF CHAR;
  229. BEGIN
  230.   WITH directory^ DO
  231.     WITH FileInfoArray [CurrentFile] DO
  232.       IF (SubdirectoryFile IN FileAttribute) AND
  233.      (FileName [0] # '.') THEN
  234.     IF NoErrorMsg (ChDir (FileName)) THEN
  235.       Assign (DirectoryMask, SaveMask);
  236.       InitDirectoryInfo (directory);
  237.       Assign (SaveMask, DirectoryMask);
  238.       IF NoErrorMsg (GetCurrentDir (GetDefaultDrive (), DirectoryPath)) THEN
  239.         ReadInfo (directory);
  240.         DisplayInfo (directory, 1, TRUE);
  241.       END;
  242.     END;
  243.       END;
  244.     END;
  245.   END;
  246. END MoveDownOneLevel;
  247.  
  248. PROCEDURE ActivateNewWindow (window: WindowType;
  249.                  LeftDirectory,
  250.                  RightDirectory: DirectoryRecPtr);
  251. BEGIN
  252.   IF window = LeftWindow THEN
  253.     IF BothWindowsActive THEN
  254.       ActiveWindow := RightWindow;
  255.       DisplayFileLine (RightDirectory, RightDirectory^ . CurrentFile, FALSE);
  256.     END;
  257.     ActiveWindow := LeftWindow;
  258.     SetDefaultDrive (LeftDirectory^ . DirectoryDrive);
  259.     IF NoErrorMsg (ChDir (LeftDirectory^ . DirectoryPath)) THEN
  260.       DisplayFileLine (LeftDirectory, LeftDirectory^ . CurrentFile, TRUE);
  261.     END;
  262.   ELSE (* window = RightWindow *)
  263.     IF BothWindowsActive THEN
  264.       ActiveWindow := LeftWindow;
  265.       DisplayFileLine (LeftDirectory, LeftDirectory^ . CurrentFile, FALSE);
  266.       ActiveWindow := RightWindow;
  267.       SetDefaultDrive (RightDirectory^ . DirectoryDrive);
  268.       IF NoErrorMsg (ChDir (RightDirectory^ . DirectoryPath)) THEN
  269.     DisplayFileLine (RightDirectory, RightDirectory^ . CurrentFile, TRUE);
  270.       END;
  271.     END;
  272.   END;
  273. END ActivateNewWindow;
  274.  
  275. BEGIN
  276. END ToolCommands.
  277.