home *** CD-ROM | disk | FTP | other *** search
- {
- ═══════════════════════════════════════════════════════════════════════════
-
- Visionix Win/User Interface "Forms" Unit (VFORM)
- Copyright 1991,92,93 Visionix
- ALL RIGHTS RESERVED
-
- Form Tool Library. It makes it possible to automatically create and use
- a Form for Data Input.
-
- ───────────────────────────────────────────────────────────────────────────
-
- Revision history in reverse chronological order:
-
- Initials Date Comment
- -------- -------- -------------------------------------------------------
-
- jrt 03/15/93 Completely rewritten. Switched to CUA style
- control keys; change set "pointer" method to new
- method that uses SetBegin/SetEnd nodes; changed
- all node info structures; added support for
- list-boxes, etc. etc.
-
- TODO: Mouse support, hotkey support, support for
- being called in event mode.
-
- lpg 03/06/93 Fixed bug with WTextMask Node. Needed GotoXY()
-
- mep 02/11/93 Cleaned up code for beta release
-
- jrt 02/08/93 Sync with beta 0.12 release
-
- jrt 12/07/92 Sync with beta 0.11 release
-
- jrt 11/21/92 Sync with beta 0.08
-
-
- lpg 10/05/92 Added Support for Float, TxtMask, & NumMask nodes.
- Increased Node Info Size to 16 Bytes
-
- jrt 09/01/92 First logged revision.
-
- jrt ??/??/91 Fixed FNT_RadioB fields so they are no longer
- hardcoded to white on blue
-
- jrt ??/??/91 Fixed FNT_Opt fields handling of <ESC>
-
- ═══════════════════════════════════════════════════════════════════════════
- }
-
-
- Unit VFormNew;
-
-
- Uses
-
- VTypes,
- VIn,
- VWinlow,
- VWinhigh,
- VGen,
- VCrt,
- DOS;
-
- {────────────────────────────────────────────────────────────────────────────}
-
- {-----------------}
- { Form Node Types }
- {-----------------}
-
- Const
-
- FNT_Master = 0; { Master Node }
-
- FNT_FormBegin = 1; { FormBegin node }
- FNT_FormEnd = 2; { FormEnd node }
-
- FNT_SetBegin = 3; { SetBegin node }
- FNT_SetEnd = 4; { SetEnd node }
-
- FNT_Text = 5; { read text node }
- FNT_Num = 6; { read num node }
- FNT_XBox = 7; { check box node }
- FNT_Opt = 8; { readopt field node }
- FNT_Proc = 9; { vendor procedure node }
- FNT_Header = 10; { text header node }
- FNT_Button = 11; { push button node }
- FNT_RadioB = 12; { radio button node }
- FNT_Hex = 13; { hex node }
-
- FNT_Float = 14; { read float node }
- FNT_TMask = 15; { read TxtMask node }
- FNT_NMask = 16; { read NumMask node }
- FNT_List = 17; { list-box/menu node }
-
- {------------------}
- { FNT_Proc Actions }
- {------------------}
-
- Const
-
- FPA_Draw = 1;
- FPA_Read = 2;
-
- {-----------------------------}
- { form retcode/ status values }
- {-----------------------------}
-
- Const
-
- fsNone = 0;
- fsEscape = 1;
- fsEnter = 2;
- fsEvent = 3;
-
-
- {----------------------------------------}
- { Form procedure node types and messages }
- {----------------------------------------}
-
- Type
-
- TFormNodeProc = PROCEDURE( Msg : LONGINT;
- FM : POINTER;
- Node : BYTE );
-
- Const
-
- fnpmDraw = 1;
- fnpmRead = 2;
-
-
- {-------------------------------}
- { Form node Information records }
- {-------------------------------}
-
-
- Type
-
- FNI_Master = RECORD
- NumAlloced : BYTE;
- NumUsed : BYTE;
- SaveSetDepth : BYTE;
- SaveTabbing : BOOLEAN;
- SaveGoingDown: BOOLEAN;
- SaveLastNode : BYTE;
- END;
-
- FNI_FormBegin = RECORD
- F : Array[1..4] of INTEGER;
- B : Array[1..4] of INTEGER;
- END;
-
- FNI_FormEnd = RECORD
- zzz : BYTE;
- END;
-
- FNI_SetBegin = RECORD
- zzz : BYTE;
- END;
-
- FNI_SetEnd = RECORD
- zzz : BYTE;
- END;
-
- FNI_Text = RECORD
- Ptr : POINTER;
- Str : ST80;
- Length : BYTE;
- END;
-
- FNI_Header = RECORD
- Ptr : POINTER;
- Str : ST80;
- END;
-
- FNI_Num = RECORD
- Val : LONGINT;
- Length : BYTE;
- END;
-
- FNI_XBox = RECORD
- Setting : BOOLEAN;
- END;
-
- FNI_Button = RECORD
- Ptr : POINTER;
- BType : BYTE;
- Str : ST80;
- RetCode : INTEGER;
- END;
-
- FNI_RadioB = RECORD
- Setting : BOOLEAN;
- END;
-
- FNI_Opt = RECORD
- Ptr : Pointer;
- NumChoices : BYTE;
- CurChoice : INTEGER;
- END;
-
- FNI_Hex = RECORD
- Val : LONGINT;
- Length : BYTE;
- END;
-
- FNI_Proc = RECORD
- ThePRoc : TFormNodeProc;
- Action : BYTE;
- ProcWidth : BYTE;
- ProcHeight : BYTE;
- S : ST80;
- END;
-
- FNI_Float = RECORD {8 bytes}
- Val : REAL; {6 bytes}
- Width : BYTE;
- Decimal : BYTE;
- END;
-
- FNI_TMask = RECORD {13 bytes - 5 too many!}
- Mask : POINTER;
- Keys : POINTER;
- Fill : CHAR;
- LJust : BOOLEAN;
- Ptr : POINTER;
- Str : ST80;
- END;
-
- FNI_NMask = RECORD {8 bytes}
- Mask : POINTER;
- Val : LONGINT;
- END;
-
- FNI_List = RECORD
- Ptr : POINTER;
- NumChoices : BYTE;
- Cols : BYTE;
- Rows : BYTE;
- Frame : INTEGER;
- CurChoice : INTEGER;
- Keys : ST80;
- END;
-
-
-
-
- {-------------------------------}
- { All-inclusive formnode record }
- {-------------------------------}
-
- Type
-
- TFormNode = RECORD
-
- T : WORD; { type }
- Awake : BOOLEAN;
- Parent : BYTE;
- X : BYTE; { x location }
- Y : BYTE; { Y locatio }
- F : INTEGER; { fore }
- B : INTEGER; { back }
- HF : INTEGER;
- HB : INTEGER;
- Key : BYTE;
- ExtKey : BYTE;
-
- Case Word Of
-
- FNT_Master : (Master : FNI_Master);
-
- FNT_FormBegin : (FormBegin : FNI_FormBegin);
- FNT_FormEnd : (FormEnd : FNI_FormEnd);
-
- FNT_SetBegin : (SetBegin : FNI_SetBegin);
- FNT_SetEnd : (SetEnd : FNI_SetEnd);
-
- FNT_Text : (Text : FNI_Text);
- FNT_Num : (Num : FNI_Num);
- FNT_XBox : (XBox : FNI_Xbox);
- FNT_Opt : (Opt : FNI_Opt);
- FNT_Proc : (Proc : FNI_Proc);
- FNT_Header : (Header : FNI_Header);
- FNT_Button : (Button : FNI_Button);
- FNT_RadioB : (RadioB : FNI_RadioB);
- FNT_Hex : (Hex : FNI_Hex);
-
- FNT_Float : (Float : FNI_Float);
- FNT_TMask : (TMask : FNI_TMask);
- FNT_NMask : (NMask : FNI_Nmask);
- FNT_List : (List : FNI_List);
-
- END;
-
- PFormNode = ^TFormNode;
-
-
- {-----------}
- { Form Type }
- {-----------}
-
- Type
-
- TForm = Array[0..0] of TFormNode;
- PForm = ^TForm;
-
- TFormMax = Array[0..255] of TFormNode;
- PFormMax = ^TFormMax;
-
-
- {────────────────────────────────────────────────────────────────────────────}
-
-
- {--------------------------}
- { Form draw/read functions }
- {--------------------------}
-
- Procedure WFormDrawNode( FM : PFormMax;
- NodeNum : BYTE;
- UseHigh : BOOLEAN );
-
-
- Procedure WFormDraw( FM : PFormMax );
-
- Procedure WFormRead( FM : PFormMax;
- Var CurNode : BYTE;
- Var RetCode : INTEGER );
-
-
-
- {---------------------------------------}
- { Form allocation and control functions }
- {---------------------------------------}
-
- Procedure WFormZero( FormPtr : PFormmax;
- NumNodes : WORD );
-
-
-
-
- Procedure WFormPrepare( FM : PFormMax;
- NumNodes : WORD );
-
-
-
-
- Function WFormNew( NumNodes : WORD ) : PFormMax;
-
- Procedure WFormDispose( FormPtr : PFormMax );
-
-
- {-------------------------}
- { Form building functions }
- {-------------------------}
-
-
- Procedure WFormAddBegin( FM : PFormMax;
- X : INTEGER;
- Y : INTEGER;
- Fore1 : INTEGER;
- Back1 : INTEGER;
- HighFore : INTEGER;
- HighBack : INTEGER;
- Awake : BOOLEAN );
-
- Procedure WFormAddEnd( FM : PFormMax );
-
- Procedure WFormAddSetBegin( FM : PFormMax;
- Awake : BOOLEAN;
- Parent : BYTE );
-
- Procedure WFormAddSetEnd( FM : PFormMax );
-
- Procedure WFormAddText( FM : PFormMax;
- X : INTEGER;
- Y : INTEGER;
- F : INTEGER;
- B : INTEGER;
- HF : INTEGER;
- HB : INTEGER;
- Key : BYTE;
- ExtKey : BYTE;
- Awake : BOOLEAN;
- Parent : INTEGER;
- Len : BYTE;
- S : ST80;
- SPtr : POINTER );
-
-
- Procedure WFormAddNum( FM : PFormMax;
- X : INTEGER;
- Y : INTEGER;
- F : INTEGER;
- B : INTEGER;
- HF : INTEGER;
- HB : INTEGER;
- Key : BYTE;
- ExtKey : BYTE;
- Awake : BOOLEAN;
- Parent : INTEGER;
- Len : BYTE;
- Num : LONGINT );
-
- Procedure WFormAddXBox( FM : PFormMax;
- X : INTEGER;
- Y : INTEGER;
- F : INTEGER;
- B : INTEGER;
- HF : INTEGER;
- HB : INTEGER;
- Key : BYTE;
- ExtKey : BYTE;
- Awake : BOOLEAN;
- Parent : INTEGER;
- Setting : BOOLEAN );
-
-
- Procedure WFormAddButton( FM : PFormMax;
- X : INTEGER;
- Y : INTEGER;
- F : INTEGER;
- B : INTEGER;
- HF : INTEGER;
- HB : INTEGER;
- Key : BYTE;
- ExtKey : BYTE;
- Awake : BOOLEAN;
- Parent : INTEGER;
- BType : BYTE;
- ButtonStr : ST80;
- ButtonPtr : POINTER;
- RetCode : INTEGER );
-
- Procedure WFormAddRadioB( FM : PFormMax;
- X : INTEGER;
- Y : INTEGER;
- F : INTEGER;
- B : INTEGER;
- HF : INTEGER;
- HB : INTEGER;
- Key : BYTE;
- ExtKey : BYTE;
- Awake : BOOLEAN;
- Parent : INTEGER;
- Setting : BOOLEAN );
-
- Procedure WFormAddOpt( FM : PFormMax;
- X : INTEGER;
- Y : INTEGER;
- F : INTEGER;
- B : INTEGER;
- HF : INTEGER;
- HB : INTEGER;
- Key : BYTE;
- ExtKey : BYTE;
- Awake : BOOLEAN;
- Parent : INTEGER;
- OptList : POINTER;
- NumOpt : BYTE;
- CurOpt : INTEGER );
-
- Procedure WFormAddHex( FM : PFormMax;
- X : INTEGER;
- Y : INTEGER;
- F : INTEGER;
- B : INTEGER;
- HF : INTEGER;
- HB : INTEGER;
- Key : BYTE;
- ExtKey : BYTE;
- Awake : BOOLEAN;
- Parent : INTEGER;
- Len : BYTE;
- Num : LONGINT );
-
- Procedure WFormAddProc( FM : PFormMax;
- X : INTEGER;
- Y : INTEGER;
- F : INTEGER;
- B : INTEGER;
- HF : INTEGER;
- HB : INTEGER;
- Key : BYTE;
- ExtKey : BYTE;
- Awake : BOOLEAN;
- Parent : INTEGER;
- Proc : TFormNodeProc;
- Width : BYTE;
- Height : BYTE );
-
- Procedure WFormAddFloat( FM : PFormMax;
- X : INTEGER;
- Y : INTEGER;
- F : INTEGER;
- B : INTEGER;
- HF : INTEGER;
- HB : INTEGER;
- Key : BYTE;
- ExtKey : BYTE;
- Awake : BOOLEAN;
- Parent : INTEGER;
- Float : REAL;
- Width : BYTE;
- Decimal : BYTE );
-
- Procedure WFormAddTMask( FM : PFormMax;
- X : INTEGER;
- Y : INTEGER;
- F : INTEGER;
- B : INTEGER;
- HF : INTEGER;
- HB : INTEGER;
- Key : BYTE;
- ExtKey : BYTE;
- Awake : BOOLEAN;
- Parent : INTEGER;
- Mask : POINTER;
- Keys : POINTER;
- Fill : CHAR;
- LJust : BOOLEAN;
- TxtPtr : POINTER;
- TxtStr : ST80 );
-
- Procedure WFormAddNMask( FM : PFormMax;
- X : INTEGER;
- Y : INTEGER;
- F : INTEGER;
- B : INTEGER;
- HF : INTEGER;
- HB : INTEGER;
- Key : BYTE;
- ExtKey : BYTE;
- Awake : BOOLEAN;
- Parent : INTEGER;
- Mask : POINTER;
- MaskNum : LONGINT );
-
- Procedure WFormAddListBox( FM : PFormMax;
- X : INTEGER;
- Y : INTEGER;
- F : INTEGER;
- B : INTEGER;
- HF : INTEGER;
- HB : INTEGER;
- Key : BYTE;
- ExtKey : BYTE;
- Awake : BOOLEAN;
- Parent : INTEGER;
- List : POINTER;
- ListNum : BYTE;
- Cols : BYTE;
- Rows : BYTE;
- FrameStart : INTEGER;
- ListCur : INTEGER;
- ListKeys : ST80 );
-
- {────────────────────────────────────────────────────────────────────────────}
-
-