home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* BROWSER.PAS *)
- (* Objekt zum Darstellen von Dateien *)
- (* ------------------------------------------------------ *)
- UNIT Browser;
-
- {$A+,B-,D+,E+,F-,G-,I+,L+,N-,O-,P-,Q+,R+,S+,T-,V+,X+,Y+}
- {$M 16384,0,655360}
-
- INTERFACE
-
- USES Dos, Objects, Drivers, Memory, Views, MsgBox, App;
-
- TYPE
- pLineCollection = ^tLineCollection;
- tLineCollection = OBJECT (tCollection)
- PROCEDURE FreeItem(P : Pointer); VIRTUAL;
- END;
-
- pFileViewer = ^tFileViewer;
- tFileViewer = OBJECT (tScroller)
- FileLines : pCollection;
- IsValid : BOOLEAN;
-
- CONSTRUCTOR Init(VAR Bounds : tRect;
- aHScrollBar, aVScrollBar : pScrollBar;
- VAR FileName : PathStr);
- DESTRUCTOR Done; VIRTUAL;
- PROCEDURE Draw; VIRTUAL;
- FUNCTION Valid(Command : WORD) : BOOLEAN; VIRTUAL;
- END;
-
- pFileWindow = ^tFileWindow;
- tFileWindow = OBJECT (tWindow)
- CONSTRUCTOR Init(Bounds : tRect;
- VAR FileName : PathStr);
- END;
-
- CONST
- rLineCollection : tStreamRec = (
- ObjType : 10100;
- VmtLink : Ofs(TypeOf(tLineCollection)^);
- Load : @tLineCollection.Load;
- Store : @tLineCollection.Store);
-
- rFileViewer : tStreamRec = (
- ObjType : 10110;
- VmtLink : Ofs(TypeOf(tFileViewer)^);
- Load : @tFileViewer.Load;
- Store : @tFileViewer.Store);
-
- rFileWindow : tStreamRec = (
- ObjType : 10120;
- VmtLink : Ofs(TypeOf(tFileWindow)^);
- Load : @tFileWindow.Load;
- Store : @tFileViewer.Store);
-
- PROCEDURE RegisterBrowser;
-
- IMPLEMENTATION
-
- PROCEDURE tLineCollection.FreeItem(P : Pointer);
- BEGIN
- DisposeStr(P);
- END;
-
- CONSTRUCTOR tFileViewer.Init(VAR Bounds : tRect;
- aHScrollBar, aVScrollBar : pScrollBar;
- VAR FileName : PathStr);
- VAR
- FileToView : Text;
- Line : STRING;
- MaxWidth : INTEGER;
- BEGIN
- inherited Init(Bounds, aHScrollBar, aVScrollBar);
- IsValid := TRUE;
- FileLines := New(pLineCollection, Init(5, 5));
- {$I-}
- Assign(FileToView, FileName);
- Reset(FileToView);
- IF IOResult <> 0 THEN BEGIN
- MessageBox('Cannot open file ' + FileName + '.',
- NIL, mfError + mfOkButton);
- IsValid := FALSE;
- END ELSE BEGIN
- MaxWidth := 0;
- WHILE NOT EoF(FileToView) AND NOT LowMemory DO BEGIN
- ReadLn(FileToView, Line);
- IF Length(Line) > MaxWidth THEN
- MaxWidth := Length(Line);
- FileLines^.Insert(NewStr(Line));
- END;
- Close(FileToView);
- END;
- {$I+}
- SetLimit(MaxWidth, FileLines^.Count);
- END;
-
- DESTRUCTOR tFileViewer.Done;
- BEGIN
- Dispose(FileLines, Done);
- inherited Done;
- END;
-
- PROCEDURE tFileViewer.Draw;
- VAR
- B : tDrawBuffer;
- C : BYTE;
- I : INTEGER;
- S : STRING;
- P : pSTRING;
- BEGIN
- C := GetColor(1);
- FOR i := 0 TO Size.y - 1 DO BEGIN
- MoveChar(B, ' ', C, Size.X);
- IF Delta.Y + i < FileLines^.Count THEN BEGIN
- P := FileLines^.At(Delta.Y + i);
- IF P <> NIL THEN
- S := Copy(P^, Delta.X + 1, Size.X)
- ELSE
- S := '';
- MoveStr(B, S, C);
- END;
- WriteLine(0, i, Size.X, 1, B);
- END;
- END;
-
- FUNCTION tFileViewer.Valid(Command : WORD) : BOOLEAN;
- BEGIN
- Valid := IsValid;
- END;
-
- CONSTRUCTOR tFileWindow.Init(Bounds : tRect; VAR FileName : PathStr);
- VAR
- R : tRect;
- BEGIN
- inherited Init(Bounds, FileName, wnNoNumber);
- Options := Options OR ofTileable;
- GetExtent(R);
- R.Grow(-1, -1);
- Insert(New(pFileViewer, Init(R,
- StandardScrollBar(sbHorizontal + sbHandleKeyboard),
- StandardScrollBar(sbVertical + sbHandleKeyboard),
- FileName)));
- END;
-
- PROCEDURE RegisterBrowser;
- BEGIN
- RegisterType(rLineCollection);
- RegisterType(rFileViewer);
- RegisterType(rFileWindow);
- END;
-
- END.
- (* ------------------------------------------------------ *)
- (* Ende von BROWSER.PAS *)
-