home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* ASCIITAB.PAS *)
- (* Ascii table viewer. See TVDEMO.PAS for an example *)
- (* program that uses this unit. *)
- (* *)
- (* Turbo Vision Demo *)
- (* Copyright (c) 1990 by Borland International *)
- (* ------------------------------------------------------ *)
- UNIT ASCIITab;
-
- {$F+,O+,X+,S-,D-}
-
- INTERFACE
-
- USES Objects, App, Views, Drivers;
-
- TYPE
- pTable = ^tTable;
- tTable = OBJECT (tView)
- PROCEDURE Draw; VIRTUAL;
- PROCEDURE HandleEvent(VAR Event : tEvent); VIRTUAL;
- END;
-
- pReport = ^tReport;
- tReport = OBJECT (tView)
- ASCIIChar : LongInt;
-
- CONSTRUCTOR Load(VAR S : tStream);
- PROCEDURE Draw; VIRTUAL;
- PROCEDURE HandleEvent(VAR Event : tEvent); VIRTUAL;
- PROCEDURE Store(VAR S : tStream);
- END;
-
- pASCIIChart = ^tASCIIChart;
- tASCIIChart = OBJECT (tWindow)
- CONSTRUCTOR Init;
- END;
-
- CONST
- AsciiTableCommandBase : WORD = 910;
-
- rTable : tStreamRec = (
- ObjType : 10030;
- VmtLink : Ofs(TypeOf(tTable)^);
- Load : @tTable.Load;
- Store : @tTable.Store);
-
- rReport : tStreamRec = (
- ObjType : 10031;
- VmtLink : Ofs(TypeOf(tReport)^);
- Load : @tReport.Load;
- Store : @tReport.Store);
-
- rASCIIChart : tStreamRec = (
- ObjType : 10032;
- VmtLink : Ofs(TypeOf(tASCIIChart)^);
- Load : @tASCIIChart.Load;
- Store : @tASCIIChart.Store);
-
- PROCEDURE RegisterASCIITab;
-
- (* ------------------------------------------------------ *)
-
- IMPLEMENTATION
-
- CONST
- cmCharacterFocused = 0;
-
- PROCEDURE tTable.Draw;
- VAR
- Buf : tDrawBuffer;
- x, y : INTEGER;
- Color : BYTE;
- BEGIN
- Color := GetColor(6);
- FOR y := 0 TO Size.Y - 1 DO BEGIN
- MoveChar(Buf, ' ', Color, Size.X);
- FOR x := 0 TO Size.X - 1 DO
- MoveChar(Buf[X], Chr(32 * y + x), Color, 1);
- WriteLine(0, Y, Size.X, 1, Buf);
- END;
- ShowCursor;
- END;
-
- PROCEDURE tTable.HandleEvent(VAR Event : tEvent);
- VAR
- CurrentSpot : tPoint;
-
- PROCEDURE CharFocused;
- BEGIN
- Message(Owner, evBroadcast,
- AsciiTableCommandBase + cmCharacterFocused,
- Pointer(Cursor.X + 32 * Cursor.Y));
- END;
-
- BEGIN
- inherited HandleEvent(Event);
- IF Event.What = evMouseDown THEN BEGIN
- REPEAT
- IF MouseInView(Event.Where) THEN BEGIN
- MakeLocal(Event.Where, CurrentSpot);
- SetCursor(CurrentSpot.X, CurrentSpot.Y);
- CharFocused;
- END;
- UNTIL NOT MouseEvent(Event, evMouseMove);
- ClearEvent(Event);
- END ELSE IF Event.What = evKeyDown THEN
- WITH Cursor DO BEGIN
- CASE Event.KeyCode OF
- kbHome : SetCursor(0, 0);
- kbEnd : SetCursor(Size.X - 1, Size.Y - 1);
- kbUp : IF Y > 0 THEN SetCursor(X, Y - 1);
- kbDown : IF Y < Size.Y - 1 THEN SetCursor(X, Y + 1);
- kbLeft : IF X > 0 THEN SetCursor(X - 1, Y);
- kbRight : IF X < Size.X - 1 THEN SetCursor(X + 1, Y);
- ELSE
- SetCursor(Ord(Event.CharCode) MOD 32, Ord(Event.CharCode) DIV 32);
- END;
- CharFocused;
- ClearEvent(Event);
- END;
- END;
-
- { --- tReport ------------------------------------------ }
-
- CONSTRUCTOR tReport.Load(VAR S : tStream);
- BEGIN
- inherited Load(S);
- S.Read(ASCIIChar, SizeOf(ASCIIChar));
- END;
-
- PROCEDURE tReport.Draw;
- VAR
- Ch : LongInt;
- Color : BYTE;
- Buf : tDrawBuffer;
- TempStr : STRING;
- BEGIN
- FormatStr(TempStr, ' Char: %c Decimal: %0#%3d Hex: %0#%02x ', ASCIIChar);
- WriteStr(0, 0, TempStr, 6);
- END;
-
- PROCEDURE tReport.HandleEvent(VAR Event : tEvent);
- VAR
- Table : pTable;
- BEGIN
- inherited HandleEvent(Event);
- IF Event.What = evBroadcast THEN
- IF Event.Command =
- AsciiTableCommandBase + cmCharacterFocused THEN BEGIN
- ASCIIChar := Event.InfoLong;
- DrawView;
- END;
- END;
-
- PROCEDURE tReport.Store(VAR S : tStream);
- BEGIN
- inherited Store(S);
- S.Write(ASCIIChar, SizeOf(ASCIIChar));
- END;
-
- CONSTRUCTOR tASCIIChart.Init;
- VAR
- R : tRect;
- Control : pView;
- BEGIN
- R.Assign(0, 0, 34, 12);
- tWindow.Init(R, 'ASCII Chart', wnNoNumber);
- Flags := Flags AND NOT(wfGrow + wfZoom);
- Palette := wpGrayWindow;
-
- R.Grow(- 1, - 1);
- R.A.Y := R.B.Y - 1;
- Control := New(pReport, Init(R));
- WITH Control^ DO BEGIN
- Options := Options OR ofFramed;
- EventMask := EventMask OR evBroadcast;
- END;
- Insert(Control);
-
- GetExtent(R);
- R.Grow(- 1, - 1);
- R.B.Y := R.B.Y - 2;
- Control := New(PTable, Init(R));
- WITH Control^ DO BEGIN
- Options := Options OR ofFramed;
- BlockCursor;
- END;
- Insert(Control);
- Control^.Select;
- END;
-
- PROCEDURE RegisterASCIITab;
- BEGIN
- RegisterType(rTable);
- RegisterType(rReport);
- RegisterType(rASCIIChart);
- END;
-
- END.
- (* ------------------------------------------------------ *)
- (* Ende von ASCIITAB.PAS *)
-