123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322 |
- {********[ SOURCE FILE OF GRAPHICAL FREE VISION ]**********}
- { }
- { System independent GRAPHICAL clone of ASCIITAB.PAS }
- { }
- { Interface Copyright (c) 1992 Borland International }
- { }
- { Copyright (c) 2002 by Pierre Muller }
- { [email protected] }
- {****************[ THIS CODE IS FREEWARE ]*****************}
- { }
- { This sourcecode is released for the purpose to }
- { promote the pascal language on all platforms. You may }
- { redistribute it and/or modify with the following }
- { DISCLAIMER. }
- { }
- { This SOURCE CODE is distributed "AS IS" WITHOUT }
- { WARRANTIES AS TO PERFORMANCE OF MERCHANTABILITY OR }
- { ANY OTHER WARRANTIES WHETHER EXPRESSED OR IMPLIED. }
- { }
- {*****************[ SUPPORTED PLATFORMS ]******************}
- { 16 and 32 Bit compilers }
- { DPMI - FPC 0.9912+ (GO32V2) (32 Bit) }
- { WIN95/NT - FPC 0.9912+ (32 Bit) }
- { }
- UNIT AsciiTab;
- {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
- INTERFACE
- {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
- {====Include file to sort compiler platform out =====================}
- {$I Platform.inc}
- {====================================================================}
- {==== Compiler directives ===========================================}
- {$X+} { Extended syntax is ok }
- {$R-} { Disable range checking }
- {$S-} { Disable Stack Checking }
- {$I-} { Disable IO Checking }
- {$Q-} { Disable Overflow Checking }
- {$V-} { Turn off strict VAR strings }
- {====================================================================}
- USES FVConsts, Objects, Drivers, Views, App; { Standard GFV units }
- {***************************************************************************}
- { PUBLIC OBJECT DEFINITIONS }
- {***************************************************************************}
- {---------------------------------------------------------------------------}
- { TTABLE OBJECT - 32x32 matrix of all chars }
- {---------------------------------------------------------------------------}
- type
- PTable = ^TTable;
- TTable = object(TView)
- procedure Draw; virtual;
- procedure HandleEvent(var Event:TEvent); virtual;
- private
- procedure DrawCurPos(enable : boolean);
- end;
- {---------------------------------------------------------------------------}
- { TREPORT OBJECT - View with details of current char }
- {---------------------------------------------------------------------------}
- 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;
- {---------------------------------------------------------------------------}
- { TASCIIChart OBJECT - the complete AsciiChar window }
- {---------------------------------------------------------------------------}
- PASCIIChart = ^TASCIIChart;
- TASCIIChart = object(TWindow)
- Report: PReport;
- Table: PTable;
- constructor Init;
- constructor Load(var S: TStream);
- procedure Store(var S: TStream);
- procedure HandleEvent(var Event:TEvent); virtual;
- end;
- {---------------------------------------------------------------------------}
- { AsciiTableCommandBase }
- {---------------------------------------------------------------------------}
- const
- AsciiTableCommandBase: Word = 910;
- {---------------------------------------------------------------------------}
- { Registrations records }
- {---------------------------------------------------------------------------}
- RTable: TStreamRec = (
- ObjType: idTable;
- VmtLink: Ofs(TypeOf(TTable)^);
- Load: @TTable.Load;
- Store: @TTable.Store
- );
- RReport: TStreamRec = (
- ObjType: idReport;
- VmtLink: Ofs(TypeOf(TReport)^);
- Load: @TReport.Load;
- Store: @TReport.Store
- );
- RASCIIChart: TStreamRec = (
- ObjType: idASCIIChart;
- VmtLink: Ofs(TypeOf(TASCIIChart)^);
- Load: @TASCIIChart.Load;
- Store: @TASCIIChart.Store
- );
- {---------------------------------------------------------------------------}
- { Registration procedure }
- {---------------------------------------------------------------------------}
- procedure RegisterASCIITab;
- {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
- IMPLEMENTATION
- {<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>}
- {***************************************************************************}
- { OBJECT METHODS }
- {***************************************************************************}
- {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
- { TTable OBJECT METHODS }
- {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
- procedure TTable.Draw;
- var
- NormColor : byte;
- B : TDrawBuffer;
- x,y : sw_integer;
- begin
- NormColor:=GetColor(1);
- For y:=0 to size.Y-1 do begin
- For x:=0 to size.X-1 do
- B[x]:=(NormColor shl 8) or ((y*Size.X+x) and $ff);
- WriteLine(0,Y,Size.X,1,B);
- end;
- DrawCurPos(true);
- end;
- procedure TTable.DrawCurPos(enable : boolean);
- var
- Color : byte;
- B : word;
- begin
- Color:=GetColor(1);
- { add blinking if enable }
- If Enable then
- Color:=((Color and $F) shl 4) or (Color shr 4);
- B:=(Color shl 8) or ((Cursor.Y*Size.X+Cursor.X) and $ff);
- WriteLine(Cursor.X,Cursor.Y,1,1,B);
- end;
- procedure TTable.HandleEvent(var Event:TEvent);
- var
- CurrentPos : TPoint;
- Handled : boolean;
- procedure SetTo(xpos, ypos : sw_integer);
- var
- newchar : ptrint;
- begin
- newchar:=(ypos*size.X+xpos) and $ff;
- DrawCurPos(false);
- SetCursor(xpos,ypos);
- Message(Owner,evCommand,AsciiTableCommandBase,
- pointer(newchar));
- DrawCurPos(true);
- ClearEvent(Event);
- end;
-
- begin
- case Event.What of
- evMouseDown :
- begin
- If MouseInView(Event.Where) then
- begin
- MakeLocal(Event.Where, CurrentPos);
- SetTo(CurrentPos.X, CurrentPos.Y);
- exit;
- end;
- end;
- evKeyDown :
- begin
- Handled:=true;
- case Event.Keycode of
- kbUp : if Cursor.Y>0 then
- SetTo(Cursor.X,Cursor.Y-1);
- kbDown : if Cursor.Y<Size.Y-1 then
- SetTo(Cursor.X,Cursor.Y+1);
- kbLeft : if Cursor.X>0 then
- SetTo(Cursor.X-1,Cursor.Y);
- kbRight: if Cursor.X<Size.X-1 then
- SetTo(Cursor.X+1,Cursor.Y);
- kbHome : SetTo(0,0);
- kbEnd : SetTo(Size.X-1,Size.Y-1);
- else
- Handled:=false;
- end;
- if Handled then
- exit;
- end;
- end;
- inherited HandleEvent(Event);
- end;
- {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
- { TReport OBJECT METHODS }
- {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
- constructor TReport.Load(var S: TStream);
- begin
- Inherited Load(S);
- S.Read(AsciiChar,Sizeof(AsciiChar));
- end;
- procedure TReport.Draw;
- var
- stHex,stDec : string[3];
- s : string;
- begin
- Str(AsciiChar,StDec);
- while length(stDec)<3 do
- stDec:=' '+stDec;
- stHex:=hexstr(AsciiChar,2);
- s:='Char "'+chr(AsciiChar)+'" Decimal: '+
- StDec+' Hex: $'+StHex+
- ' '; // //{!ss:fill gap. FormatStr function using be better}
- WriteStr(0,0,S,1);
- end;
- procedure TReport.HandleEvent(var Event:TEvent);
- begin
- if (Event.what=evCommand) and
- (Event.Command = AsciiTableCommandBase) then
- begin
- AsciiChar:=Event.InfoLong;
- Draw;
- ClearEvent(Event);
- end
- else inherited HandleEvent(Event);
- end;
- procedure TReport.Store(var S: TStream);
- begin
- Inherited Store(S);
- S.Write(AsciiChar,Sizeof(AsciiChar));
- end;
- {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
- { TAsciiChart OBJECT METHODS }
- {+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
- constructor TASCIIChart.Init;
- var
- R : Trect;
- begin
- R.Assign(0,0,34,12);
- Inherited Init(R,'Ascii table',wnNoNumber);
- Flags:=Flags and not (wfGrow or wfZoom);
- Palette:=wpGrayWindow;
- R.Assign(1,10,33,11);
- New(Report,Init(R));
- Report^.Options:=Report^.Options or ofFramed;
- Insert(Report);
- R.Assign(1,1,33,9);
- New(Table,Init(R));
- Table^.Options:=Table^.Options or (ofSelectable+ofTopSelect);
- Insert(Table);
- Table^.Select;
- end;
- constructor TASCIIChart.Load(var S: TStream);
- begin
- Inherited Load(S);
- GetSubViewPtr(S,Table);
- GetSubViewPtr(S,Report);
- end;
- procedure TASCIIChart.Store(var S: TStream);
- begin
- Inherited Store(S);
- PutSubViewPtr(S,Table);
- PutSubViewPtr(S,Report);
- end;
- procedure TASCIIChart.HandleEvent(var Event:TEvent);
- begin
- if (Event.what=evCommand) and
- (Event.Command = AsciiTableCommandBase) then
- begin
- Report^.HandleEvent(Event);
- end
- else inherited HandleEvent(Event);
- end;
- {---------------------------------------------------------------------------}
- { Registration procedure }
- {---------------------------------------------------------------------------}
- procedure RegisterASCIITab;
- begin
- RegisterType(RTable);
- RegisterType(RReport);
- RegisterType(RAsciiChart);
- end;
- END.
|