home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
modula2
/
library
/
filetool
/
toolcomm.mod
< prev
next >
Wrap
Text File
|
1987-12-29
|
8KB
|
277 lines
IMPLEMENTATION MODULE ToolCommands;
(*
Title : TOOLCOMM.MOD
LastEdit : 01/04/88
Author : Russell G. Osterlund, Jr.
System : LOGITECH MODULA-2/86, REPERTOIRE, BlackBeard
This product has been developed with the use of, and embodies portions of,
LOGITECH software development tools - compiler, linker, and M2MAKE.
*)
FROM Strings IMPORT
Assign;
FROM Drectory IMPORT (* REPERTOIRE *)
FileMode;
FROM Drectory IMPORT (* REPERTOIRE *)
ChDir, SetDefaultDrive, GetDefaultDrive, GetCurrentDir;
FROM ToolUtilities IMPORT
InitDirectoryInfo, ReadInfo;
FROM ToolDisplay IMPORT
MaxDisplayLines,
DisplayInfo, DisplayFileLine, DisplaySummaryLine, NoErrorMsg;
FROM ToolTypes IMPORT
DirectoryRecPtr,
WindowType, ActiveWindow, BothWindowsActive;
PROCEDURE UpOneFile (directory: DirectoryRecPtr);
BEGIN
WITH directory^ DO
IF CurrentFile = 0 THEN
CurrentFile := NumberOfEntries;
IF NumberOfEntries + 1 < MaxDisplayLines THEN
FirstDisplayed := 0;
ELSE
FirstDisplayed := NumberOfEntries - MaxDisplayLines;
END;
DisplayInfo (directory, FirstDisplayed, TRUE);
ELSE
DEC (CurrentFile);
IF CurrentFile < FirstDisplayed THEN
FirstDisplayed := CurrentFile;
DisplayInfo (directory, FirstDisplayed, TRUE);
ELSE
DisplayFileLine (directory, CurrentFile + 1, TRUE);
DisplayFileLine (directory, CurrentFile, TRUE);
END;
END;
END;
DisplaySummaryLine (directory);
END UpOneFile;
PROCEDURE DownOneFile (directory: DirectoryRecPtr);
BEGIN
WITH directory^ DO
IF CurrentFile = NumberOfEntries THEN
CurrentFile := 0;
FirstDisplayed := 0;
IF NumberOfEntries + 1 <= MaxDisplayLines THEN
DisplayFileLine (directory, NumberOfEntries, TRUE);
DisplayFileLine (directory, CurrentFile, TRUE);
ELSE
DisplayInfo (directory, FirstDisplayed, TRUE);
END;
ELSE
INC (CurrentFile);
IF FirstDisplayed + MaxDisplayLines < CurrentFile THEN
INC (FirstDisplayed);
DisplayInfo (directory, FirstDisplayed, TRUE);
ELSE
DisplayFileLine (directory, CurrentFile - 1, TRUE);
DisplayFileLine (directory, CurrentFile, TRUE);
END;
END;
END;
DisplaySummaryLine (directory);
END DownOneFile;
PROCEDURE UpOnePage (directory: DirectoryRecPtr);
VAR
relpos: CARDINAL;
BEGIN
WITH directory^ DO
IF NumberOfEntries + 1 > MaxDisplayLines THEN (* > 1 page *)
relpos := CurrentFile - FirstDisplayed;
IF FirstDisplayed = 0 THEN
FirstDisplayed := NumberOfEntries - MaxDisplayLines;
ELSIF FirstDisplayed <= MaxDisplayLines THEN (* 1 .. MaxDisplayLines *)
FirstDisplayed := 0;
ELSE
FirstDisplayed := FirstDisplayed - MaxDisplayLines - 1;
END;
CurrentFile := FirstDisplayed + relpos;
DisplayInfo (directory, FirstDisplayed, TRUE);
DisplaySummaryLine (directory);
END;
END;
END UpOnePage;
PROCEDURE DownOnePage (directory: DirectoryRecPtr);
VAR
relpos: CARDINAL;
BEGIN
WITH directory^ DO
IF NumberOfEntries + 1 > MaxDisplayLines THEN (* > 1 page *)
relpos := CurrentFile - FirstDisplayed;
FirstDisplayed := FirstDisplayed + MaxDisplayLines + 1;
IF FirstDisplayed > NumberOfEntries THEN
FirstDisplayed := 0;
END;
CurrentFile := FirstDisplayed + relpos;
IF CurrentFile > NumberOfEntries THEN
CurrentFile := NumberOfEntries;
END;
DisplayInfo (directory, FirstDisplayed, TRUE);
DisplaySummaryLine (directory);
END;
END;
END DownOnePage;
PROCEDURE TopOfPage (directory: DirectoryRecPtr);
VAR
OldCurrent: CARDINAL;
BEGIN
WITH directory^ DO
OldCurrent := CurrentFile;
CurrentFile := FirstDisplayed;
DisplayFileLine (directory, OldCurrent, TRUE);
DisplayFileLine (directory, CurrentFile, TRUE);
END;
DisplaySummaryLine (directory);
END TopOfPage;
PROCEDURE BottomOfPage (directory: DirectoryRecPtr);
VAR
OldCurrent: CARDINAL;
BEGIN
WITH directory^ DO
OldCurrent := CurrentFile;
IF NumberOfEntries > FirstDisplayed + MaxDisplayLines - 1 THEN (* Full Page *)
CurrentFile := FirstDisplayed + MaxDisplayLines;
ELSE (* Last or Partial Page *)
CurrentFile := NumberOfEntries;
END;
DisplayFileLine (directory, OldCurrent, TRUE);
DisplayFileLine (directory, CurrentFile, TRUE);
END;
DisplaySummaryLine (directory);
END BottomOfPage;
PROCEDURE BeginningOfList (directory: DirectoryRecPtr);
BEGIN
WITH directory^ DO
CurrentFile := 0;
FirstDisplayed := 0;
DisplayInfo (directory, FirstDisplayed, TRUE);
END;
DisplaySummaryLine (directory);
END BeginningOfList;
PROCEDURE EndOfList (directory: DirectoryRecPtr);
BEGIN
WITH directory^ DO
CurrentFile := NumberOfEntries;
IF NumberOfEntries + 1 > MaxDisplayLines THEN
FirstDisplayed := NumberOfEntries - MaxDisplayLines;
ELSE
FirstDisplayed := 0;
END;
DisplayInfo (directory, FirstDisplayed, TRUE);
END;
DisplaySummaryLine (directory);
END EndOfList;
PROCEDURE TagCurrentFile (directory: DirectoryRecPtr);
BEGIN
WITH directory^ DO
WITH FileInfoArray [CurrentFile] DO
IF SubdirectoryFile IN FileAttribute THEN
ELSIF (FileName [0] = '.') OR (* special DOS *)
((FileName [0] = '.') AND (* directory *)
(FileName [1] = '.')) THEN (* files *)
ELSE
tagged := NOT (tagged);
IF tagged THEN
INC (NumberTagged);
TaggedSize := TaggedSize + FileSize;
ELSE
DEC (NumberTagged);
TaggedSize := TaggedSize - FileSize;
END;
END;
END;
END;
DownOneFile (directory);
END TagCurrentFile;
PROCEDURE MoveUpOneLevel (directory: DirectoryRecPtr);
VAR
SaveMask: ARRAY [0 .. 11] OF CHAR;
BEGIN
WITH directory^ DO
WITH FileInfoArray [CurrentFile] DO
IF (FileName [0] = '.') AND
(FileName [1] = '.') THEN
IF NoErrorMsg (ChDir (FileName)) THEN
Assign (DirectoryMask, SaveMask);
InitDirectoryInfo (directory);
Assign (SaveMask, DirectoryMask);
IF NoErrorMsg (GetCurrentDir (GetDefaultDrive (), DirectoryPath)) THEN
ReadInfo (directory);
IF (FileInfoArray [1] . FileName [0] = '.') AND
(FileInfoArray [1] . FileName [1] = '.') THEN
DisplayInfo (directory, 1, TRUE);
ELSE
DisplayInfo (directory, 0, TRUE);
END;
END;
END;
END;
END;
END;
END MoveUpOneLevel;
PROCEDURE MoveDownOneLevel (directory: DirectoryRecPtr);
VAR
SaveMask: ARRAY [0 .. 11] OF CHAR;
BEGIN
WITH directory^ DO
WITH FileInfoArray [CurrentFile] DO
IF (SubdirectoryFile IN FileAttribute) AND
(FileName [0] # '.') THEN
IF NoErrorMsg (ChDir (FileName)) THEN
Assign (DirectoryMask, SaveMask);
InitDirectoryInfo (directory);
Assign (SaveMask, DirectoryMask);
IF NoErrorMsg (GetCurrentDir (GetDefaultDrive (), DirectoryPath)) THEN
ReadInfo (directory);
DisplayInfo (directory, 1, TRUE);
END;
END;
END;
END;
END;
END MoveDownOneLevel;
PROCEDURE ActivateNewWindow (window: WindowType;
LeftDirectory,
RightDirectory: DirectoryRecPtr);
BEGIN
IF window = LeftWindow THEN
IF BothWindowsActive THEN
ActiveWindow := RightWindow;
DisplayFileLine (RightDirectory, RightDirectory^ . CurrentFile, FALSE);
END;
ActiveWindow := LeftWindow;
SetDefaultDrive (LeftDirectory^ . DirectoryDrive);
IF NoErrorMsg (ChDir (LeftDirectory^ . DirectoryPath)) THEN
DisplayFileLine (LeftDirectory, LeftDirectory^ . CurrentFile, TRUE);
END;
ELSE (* window = RightWindow *)
IF BothWindowsActive THEN
ActiveWindow := LeftWindow;
DisplayFileLine (LeftDirectory, LeftDirectory^ . CurrentFile, FALSE);
ActiveWindow := RightWindow;
SetDefaultDrive (RightDirectory^ . DirectoryDrive);
IF NoErrorMsg (ChDir (RightDirectory^ . DirectoryPath)) THEN
DisplayFileLine (RightDirectory, RightDirectory^ . CurrentFile, TRUE);
END;
END;
END;
END ActivateNewWindow;
BEGIN
END ToolCommands.