IMPLEMENTATION MODULE DirManager;
(*
* REPERTOIRE
* Release 1.6
* By Charles Bradford and Cole Brecheen
* (c) Copyright 1985-1992 PMI
* Green Bay, Wisconsin
* All rights reserved
* (414) 468-6040
*
* $Header: D:/logfiles/mods/dirmanag.mov 1.5 10 Mar 1991 15:26:24 coleb $
*
*)
IMPORT ControlUtils;
IMPORT Drectory;
IMPORT ErrStrgs;
IMPORT InputManager;
IMPORT FramePainter;
IMPORT M2Strings;
IMPORT PosUtils;
IMPORT ScrnTypes;
IMPORT ScrnUtl1;
IMPORT StrConv;
IMPORT StrEdit;
IMPORT StringIO;
VAR
Initialized : BOOLEAN;
PROCEDURE Init();
BEGIN
IF Initialized THEN
RETURN;
ELSE
Initialized := TRUE;
END;
ControlUtils.Init();
Drectory.Init();
ErrStrgs.Init();
InputManager.Init();
FramePainter.Init();
M2Strings.Init();
PosUtils.Init();
ScrnTypes.Init();
ScrnUtl1.Init();
StrConv.Init();
StrEdit.Init();
StringIO.Init();
END Init;
PROCEDURE MakeFileDataStr( FileInfo: Drectory.FileInfoRec; Columns:
CARDINAL; VAR TheStr: ARRAY OF CHAR );
VAR
dumstr: ARRAY [0..79] OF CHAR;
BEGIN
StrEdit.AssignStr( FileInfo.name, TheStr );
M2Strings.Concat(' ',TheStr,TheStr);
IF Columns > 1 THEN
WHILE M2Strings.Length(TheStr) < 12 DO
StrEdit.Append( TheStr, ' ' );
END;
IF Drectory.SubdirectoryFile IN FileInfo.attribute THEN
StrEdit.Append( TheStr, '
' );
ELSE
StrConv.LongIntegerToStr( FileInfo.size, 8, dumstr );
StrEdit.Append( TheStr, dumstr );
END;
END;
IF Columns > 2 THEN
StrConv.DateToStr( FileInfo.month, FileInfo.day, FileInfo.year,
dumstr );
StrEdit.Append( TheStr, ' ' );
StrEdit.Append( TheStr, dumstr );
END;
IF Columns > 3 THEN
StrConv.TimeToStr( FileInfo.hour, FileInfo.minute, FileInfo.second,
FileInfo.second, dumstr );
M2Strings.Delete( dumstr, M2Strings.Length(dumstr) - 7, 6 );
StrEdit.Append( TheStr, ' ' );
StrEdit.Append( TheStr, dumstr );
END;
END MakeFileDataStr;
PROCEDURE DirToFrame( FileSpec: ARRAY OF CHAR; TheFrame:
ScrnTypes.DisplayFrame; ColumnsPerFile: CARDINAL ): CARDINAL;
VAR
lngth1, VertSep, HorizSep, NextCol, NextRow: CARDINAL;
DirHandle, SavedMessage: CARDINAL;
InfoRec: Drectory.FileInfoRec;
tmpstr: ARRAY [0..79] OF CHAR;
LastCh: CHAR;
PROCEDURE AddOne( VAR TheStr: ARRAY OF CHAR; VAR col, row:
CARDINAL );
VAR
width: CARDINAL;
BEGIN
ControlUtils.AddMenuItem( TheFrame, col, row, TheStr,
M2Strings.Length(TheStr), 0, TheFrame^.normlnext );
IF ColumnsPerFile > 1 THEN
width := M2Strings.Length(TheStr) + HorizSep;
ELSE
width := 12 + HorizSep;
END;
INC( col, width );
IF (col + width) > (TheFrame^.endcol
+ 1) THEN
col := HorizSep;
INC( row, VertSep );
END;
END AddOne;
BEGIN
(*DirToFrame*)
VertSep := 1;
HorizSep := 4;
NextCol := HorizSep;
NextRow := VertSep + TheFrame^.headline;
StrEdit.DeleteChar( ' ', FileSpec );
lngth1 := M2Strings.Length( FileSpec );
IF lngth1 > 0 THEN
LastCh := FileSpec[ lngth1 - 1 ];
ELSE
LastCh := ':';
END;
CASE LastCh OF
':', '\', '/': StrEdit.Append( FileSpec, '*.*' );
ELSE
(*do nothing*)
END;
DirHandle := 1;
SavedMessage := Drectory.FindFirstFile( FileSpec, DirHandle, InfoRec );
IF SavedMessage # StringIO.NoError THEN
IF SavedMessage = StringIO.NoMoreFiles THEN
SavedMessage := StringIO.FileNotFound;
END;
ErrStrgs.NumToStr( SavedMessage, tmpstr );
M2Strings.Insert( 'Error: ', tmpstr, 0 );
AddOne( tmpstr, NextCol, NextRow );
RETURN SavedMessage;
END;
WHILE SavedMessage = StringIO.NoError DO
MakeFileDataStr( InfoRec, ColumnsPerFile, tmpstr );
AddOne( tmpstr, NextCol, NextRow );
SavedMessage := Drectory.FindNextFile( DirHandle, InfoRec );
END;
RETURN StringIO.NoError;
END DirToFrame;
PROCEDURE ControlDirectory( FileSpec: ARRAY OF CHAR;
TheFrame: ScrnTypes.DisplayFrame; ColumnsPerFile: CARDINAL;
VAR SelectedFile: ARRAY OF CHAR; VAR NextFrame:
ScrnTypes.AFrameName );
VAR
SavedMessage: CARDINAL;
TmpName: ScrnTypes.AFrameName;
spot: CARDINAL;
DriveLetter: CHAR;
PathName: ARRAY [0..127] OF CHAR;
ImageRec: ScrnTypes.ImageElement;
BEGIN
Drectory.GetDrivePathAndName( FileSpec, DriveLetter, PathName,
SelectedFile );
SavedMessage := DirToFrame( FileSpec, TheFrame,
ColumnsPerFile );
FramePainter.ShowDisplayFrame( TheFrame, 0, 0, 0, 0 );
InputManager.ControlFrame( TheFrame, 1, '', FALSE, TmpName );
ScrnUtl1.GetFieldImageRec( TheFrame, TheFrame^.CurrentField, ImageRec );
StrEdit.AssignStr( ImageRec.text, SelectedFile );
IF HIGH(SelectedFile) > 12 THEN
SelectedFile[13]:=0C
END;
StrEdit.DeleteChar( ' ', SelectedFile );
IF M2Strings.Length(SelectedFile) > 0 THEN
M2Strings.Insert( PathName, SelectedFile, 0 );
M2Strings.Insert( ':', SelectedFile, 0 );
M2Strings.Insert( DriveLetter, SelectedFile, 0 );
END;
M2Strings.Assign( TmpName, NextFrame );
END ControlDirectory;
PROCEDURE OldControlDirectory( FileSpec: ARRAY OF CHAR;
TheFrame: ScrnTypes.DisplayFrame; ColumnsPerFile: CARDINAL;
VAR SelectedFile: ARRAY OF CHAR ): ScrnTypes.FrameKey;
VAR
NextFrame: ScrnTypes.AFrameName;
BEGIN
ControlDirectory( FileSpec, TheFrame, ColumnsPerFile,
SelectedFile, NextFrame );
RETURN StrConv.ReturnedInt(NextFrame);
END OldControlDirectory;
BEGIN
Initialized := FALSE;
Init();
END DirManager.