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.