home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / pascal / vdl020d.zip / VFORMNEW.DOC < prev    next >
Text File  |  1993-04-14  |  20KB  |  560 lines

  1. {
  2.  ═══════════════════════════════════════════════════════════════════════════
  3.  
  4.  Visionix Win/User Interface "Forms" Unit (VFORM)
  5.  Copyright 1991,92,93 Visionix
  6.  ALL RIGHTS RESERVED
  7.  
  8.  Form Tool Library.  It makes it possible to automatically create and use
  9.  a Form for Data Input.
  10.  
  11.  ───────────────────────────────────────────────────────────────────────────
  12.  
  13.  Revision history in reverse chronological order:
  14.  
  15.  Initials  Date      Comment
  16.  --------  --------  -------------------------------------------------------
  17.  
  18.  jrt       03/15/93  Completely rewritten.  Switched to CUA style
  19.                      control keys; change set "pointer" method to new
  20.                      method that uses SetBegin/SetEnd nodes; changed
  21.                      all node info structures; added support for
  22.                      list-boxes, etc. etc.
  23.  
  24.                      TODO:  Mouse support, hotkey support, support for
  25.                             being called in event mode.
  26.  
  27.  lpg       03/06/93  Fixed bug with WTextMask Node.  Needed GotoXY()
  28.  
  29.  mep       02/11/93  Cleaned up code for beta release
  30.  
  31.  jrt       02/08/93  Sync with beta 0.12 release
  32.  
  33.  jrt       12/07/92  Sync with beta 0.11 release
  34.  
  35.  jrt       11/21/92  Sync with beta 0.08
  36.  
  37.  
  38.  lpg       10/05/92  Added Support for Float, TxtMask, & NumMask nodes.
  39.                      Increased Node Info Size to 16 Bytes
  40.  
  41.  jrt       09/01/92  First logged revision.
  42.  
  43.  jrt       ??/??/91  Fixed FNT_RadioB fields so they are no longer
  44.                      hardcoded to white on blue
  45.  
  46.  jrt       ??/??/91  Fixed FNT_Opt fields handling of <ESC>
  47.  
  48.  ═══════════════════════════════════════════════════════════════════════════
  49. }
  50.  
  51.  
  52. Unit VFormNew;
  53.  
  54.  
  55. Uses
  56.  
  57.   VTypes,
  58.   VIn,
  59.   VWinlow,
  60.   VWinhigh,
  61.   VGen,
  62.   VCrt,
  63.   DOS;
  64.  
  65. {────────────────────────────────────────────────────────────────────────────}
  66.  
  67. {-----------------}
  68. { Form Node Types }
  69. {-----------------}
  70.  
  71. Const
  72.  
  73.   FNT_Master    = 0;   { Master Node           }
  74.  
  75.   FNT_FormBegin = 1;   { FormBegin node }
  76.   FNT_FormEnd   = 2;   { FormEnd   node }
  77.  
  78.   FNT_SetBegin  = 3;   { SetBegin node }
  79.   FNT_SetEnd    = 4;   { SetEnd   node }
  80.  
  81.   FNT_Text      = 5;   { read text node        }
  82.   FNT_Num       = 6;   { read num node         }
  83.   FNT_XBox      = 7;   { check box node        }
  84.   FNT_Opt       = 8;   { readopt field node    }
  85.   FNT_Proc      = 9;   { vendor procedure node }
  86.   FNT_Header    = 10;  { text header node      }
  87.   FNT_Button    = 11;  { push button node      }
  88.   FNT_RadioB    = 12;  { radio button node     }
  89.   FNT_Hex       = 13;  { hex node              }
  90.  
  91.   FNT_Float     = 14;  { read float node       }
  92.   FNT_TMask     = 15;  { read TxtMask node     }
  93.   FNT_NMask     = 16;  { read NumMask node     }
  94.   FNT_List      = 17;  { list-box/menu node    }
  95.  
  96. {------------------}
  97. { FNT_Proc Actions }
  98. {------------------}
  99.  
  100. Const
  101.  
  102.   FPA_Draw  = 1;
  103.   FPA_Read  = 2;
  104.  
  105. {-----------------------------}
  106. { form retcode/ status values }
  107. {-----------------------------}
  108.  
  109. Const
  110.  
  111.   fsNone   = 0;
  112.   fsEscape = 1;
  113.   fsEnter  = 2;
  114.   fsEvent  = 3;
  115.  
  116.  
  117. {----------------------------------------}
  118. { Form procedure node types and messages }
  119. {----------------------------------------}
  120.  
  121. Type
  122.  
  123.   TFormNodeProc      = PROCEDURE( Msg    : LONGINT;
  124.                                   FM     : POINTER;
  125.                                   Node   : BYTE          );
  126.  
  127.   Const
  128.  
  129.     fnpmDraw = 1;
  130.     fnpmRead = 2;
  131.  
  132.  
  133. {-------------------------------}
  134. { Form node Information records }
  135. {-------------------------------}
  136.  
  137.  
  138. Type
  139.  
  140.   FNI_Master = RECORD
  141.     NumAlloced   : BYTE;
  142.     NumUsed      : BYTE;
  143.     SaveSetDepth : BYTE;
  144.     SaveTabbing  : BOOLEAN;
  145.     SaveGoingDown: BOOLEAN;
  146.     SaveLastNode : BYTE;
  147.   END;
  148.  
  149.   FNI_FormBegin = RECORD
  150.     F          : Array[1..4] of INTEGER;
  151.     B          : Array[1..4] of INTEGER;
  152.   END;
  153.  
  154.   FNI_FormEnd = RECORD
  155.     zzz      : BYTE;
  156.   END;
  157.  
  158.   FNI_SetBegin = RECORD
  159.     zzz      : BYTE;
  160.   END;
  161.  
  162.   FNI_SetEnd = RECORD
  163.     zzz      : BYTE;
  164.   END;
  165.  
  166.   FNI_Text = RECORD
  167.     Ptr         : POINTER;
  168.     Str         : ST80;
  169.     Length      : BYTE;
  170.   END;
  171.  
  172.   FNI_Header = RECORD
  173.     Ptr         : POINTER;
  174.     Str         : ST80;
  175.   END;
  176.  
  177.   FNI_Num    = RECORD
  178.     Val         : LONGINT;
  179.     Length      : BYTE;
  180.   END;
  181.  
  182.   FNI_XBox   = RECORD
  183.     Setting     : BOOLEAN;
  184.   END;
  185.  
  186.   FNI_Button = RECORD
  187.     Ptr         : POINTER;
  188.     BType       : BYTE;
  189.     Str         : ST80;
  190.     RetCode     : INTEGER;
  191.   END;
  192.  
  193.   FNI_RadioB = RECORD
  194.     Setting     : BOOLEAN;
  195.   END;
  196.  
  197.   FNI_Opt    = RECORD
  198.     Ptr         : Pointer;
  199.     NumChoices  : BYTE;
  200.     CurChoice   : INTEGER;
  201.   END;
  202.  
  203.   FNI_Hex    = RECORD
  204.     Val         : LONGINT;
  205.     Length      : BYTE;
  206.   END;
  207.  
  208.   FNI_Proc   = RECORD
  209.     ThePRoc     : TFormNodeProc;
  210.     Action      : BYTE;
  211.     ProcWidth   : BYTE;
  212.     ProcHeight  : BYTE;
  213.     S           : ST80;
  214.   END;
  215.  
  216.   FNI_Float  = RECORD  {8 bytes}
  217.     Val         : REAL; {6 bytes}
  218.     Width       : BYTE;
  219.     Decimal     : BYTE;
  220.   END;
  221.  
  222.   FNI_TMask  = RECORD  {13 bytes - 5 too many!}
  223.     Mask        : POINTER;
  224.     Keys        : POINTER;
  225.     Fill        : CHAR;
  226.     LJust       : BOOLEAN;
  227.     Ptr         : POINTER;
  228.     Str         : ST80;
  229.   END;
  230.  
  231.   FNI_NMask  = RECORD  {8 bytes}
  232.     Mask        : POINTER;
  233.     Val         : LONGINT;
  234.   END;
  235.  
  236.   FNI_List   = RECORD
  237.     Ptr         : POINTER;
  238.     NumChoices  : BYTE;
  239.     Cols        : BYTE;
  240.     Rows        : BYTE;
  241.     Frame       : INTEGER;
  242.     CurChoice   : INTEGER;
  243.     Keys        : ST80;
  244.   END;
  245.  
  246.  
  247.  
  248.  
  249. {-------------------------------}
  250. { All-inclusive formnode record }
  251. {-------------------------------}
  252.  
  253. Type
  254.  
  255.   TFormNode = RECORD
  256.  
  257.     T           : WORD;                 { type }
  258.     Awake       : BOOLEAN;
  259.     Parent      : BYTE;
  260.     X           : BYTE;                 { x location }
  261.     Y           : BYTE;                 { Y locatio  }
  262.     F           : INTEGER;              { fore       }
  263.     B           : INTEGER;              { back       }
  264.     HF          : INTEGER;
  265.     HB          : INTEGER;
  266.     Key         : BYTE;
  267.     ExtKey      : BYTE;
  268.  
  269.     Case Word Of
  270.  
  271.      FNT_Master     : (Master       : FNI_Master);
  272.  
  273.      FNT_FormBegin  : (FormBegin    : FNI_FormBegin);
  274.      FNT_FormEnd    : (FormEnd      : FNI_FormEnd);
  275.  
  276.      FNT_SetBegin   : (SetBegin     : FNI_SetBegin);
  277.      FNT_SetEnd     : (SetEnd       : FNI_SetEnd);
  278.  
  279.      FNT_Text       : (Text         : FNI_Text);
  280.      FNT_Num        : (Num          : FNI_Num);
  281.      FNT_XBox       : (XBox         : FNI_Xbox);
  282.      FNT_Opt        : (Opt          : FNI_Opt);
  283.      FNT_Proc       : (Proc         : FNI_Proc);
  284.      FNT_Header     : (Header       : FNI_Header);
  285.      FNT_Button     : (Button       : FNI_Button);
  286.      FNT_RadioB     : (RadioB       : FNI_RadioB);
  287.      FNT_Hex        : (Hex          : FNI_Hex);
  288.  
  289.      FNT_Float      : (Float        : FNI_Float);
  290.      FNT_TMask      : (TMask        : FNI_TMask);
  291.      FNT_NMask      : (NMask        : FNI_Nmask);
  292.      FNT_List       : (List         : FNI_List);
  293.  
  294.   END;
  295.  
  296.   PFormNode     = ^TFormNode;
  297.  
  298.  
  299. {-----------}
  300. { Form Type }
  301. {-----------}
  302.  
  303. Type
  304.  
  305.   TForm         = Array[0..0] of TFormNode;
  306.   PForm         = ^TForm;
  307.  
  308.   TFormMax      = Array[0..255] of TFormNode;
  309.   PFormMax      = ^TFormMax;
  310.  
  311.  
  312. {────────────────────────────────────────────────────────────────────────────}
  313.  
  314.  
  315. {--------------------------}
  316. { Form draw/read functions }
  317. {--------------------------}
  318.  
  319. Procedure WFormDrawNode( FM      : PFormMax;
  320.                          NodeNum : BYTE;
  321.                          UseHigh : BOOLEAN );
  322.  
  323.  
  324. Procedure WFormDraw(              FM             : PFormMax    );
  325.  
  326. Procedure WFormRead(              FM             : PFormMax;
  327.                               Var CurNode        : BYTE;
  328.                               Var RetCode        : INTEGER     );
  329.  
  330.  
  331.  
  332. {---------------------------------------}
  333. { Form allocation and control functions }
  334. {---------------------------------------}
  335.  
  336. Procedure WFormZero(                   FormPtr    : PFormmax;
  337.                                        NumNodes   : WORD        );
  338.  
  339.  
  340.  
  341.  
  342. Procedure WFormPrepare(                FM         : PFormMax;
  343.                                        NumNodes   : WORD        );
  344.  
  345.  
  346.  
  347.  
  348. Function  WFormNew(                    NumNodes   : WORD        ) : PFormMax;
  349.  
  350. Procedure WFormDispose(                FormPtr    : PFormMax    );
  351.  
  352.  
  353. {-------------------------}
  354. { Form building functions }
  355. {-------------------------}
  356.  
  357.  
  358. Procedure WFormAddBegin(               FM         : PFormMax;
  359.                                        X          : INTEGER;
  360.                                        Y          : INTEGER;
  361.                                        Fore1      : INTEGER;
  362.                                        Back1      : INTEGER;
  363.                                        HighFore   : INTEGER;
  364.                                        HighBack   : INTEGER;
  365.                                        Awake      : BOOLEAN     );
  366.  
  367. Procedure WFormAddEnd(                 FM         : PFormMax    );
  368.  
  369. Procedure WFormAddSetBegin(            FM         : PFormMax;
  370.                                        Awake      : BOOLEAN;
  371.                                        Parent     : BYTE     );
  372.  
  373. Procedure WFormAddSetEnd(              FM         : PFormMax    );
  374.  
  375. Procedure WFormAddText(                FM         : PFormMax;
  376.                                        X          : INTEGER;
  377.                                        Y          : INTEGER;
  378.                                        F          : INTEGER;
  379.                                        B          : INTEGER;
  380.                                        HF         : INTEGER;
  381.                                        HB         : INTEGER;
  382.                                        Key        : BYTE;
  383.                                        ExtKey     : BYTE;
  384.                                        Awake      : BOOLEAN;
  385.                                        Parent     : INTEGER;
  386.                                        Len        : BYTE;
  387.                                        S          : ST80;
  388.                                        SPtr       : POINTER     );
  389.  
  390.  
  391. Procedure WFormAddNum(                 FM         : PFormMax;
  392.                                        X          : INTEGER;
  393.                                        Y          : INTEGER;
  394.                                        F          : INTEGER;
  395.                                        B          : INTEGER;
  396.                                        HF         : INTEGER;
  397.                                        HB         : INTEGER;
  398.                                        Key        : BYTE;
  399.                                        ExtKey     : BYTE;
  400.                                        Awake      : BOOLEAN;
  401.                                        Parent     : INTEGER;
  402.                                        Len        : BYTE;
  403.                                        Num        : LONGINT     );
  404.  
  405. Procedure WFormAddXBox(                FM         : PFormMax;
  406.                                        X          : INTEGER;
  407.                                        Y          : INTEGER;
  408.                                        F          : INTEGER;
  409.                                        B          : INTEGER;
  410.                                        HF         : INTEGER;
  411.                                        HB         : INTEGER;
  412.                                        Key        : BYTE;
  413.                                        ExtKey     : BYTE;
  414.                                        Awake      : BOOLEAN;
  415.                                        Parent     : INTEGER;
  416.                                        Setting    : BOOLEAN     );
  417.  
  418.  
  419. Procedure WFormAddButton(              FM         : PFormMax;
  420.                                        X          : INTEGER;
  421.                                        Y          : INTEGER;
  422.                                        F          : INTEGER;
  423.                                        B          : INTEGER;
  424.                                        HF         : INTEGER;
  425.                                        HB         : INTEGER;
  426.                                        Key        : BYTE;
  427.                                        ExtKey     : BYTE;
  428.                                        Awake      : BOOLEAN;
  429.                                        Parent     : INTEGER;
  430.                                        BType      : BYTE;
  431.                                        ButtonStr  : ST80;
  432.                                        ButtonPtr  : POINTER;
  433.                                        RetCode    : INTEGER      );
  434.  
  435. Procedure WFormAddRadioB(              FM         : PFormMax;
  436.                                        X          : INTEGER;
  437.                                        Y          : INTEGER;
  438.                                        F          : INTEGER;
  439.                                        B          : INTEGER;
  440.                                        HF         : INTEGER;
  441.                                        HB         : INTEGER;
  442.                                        Key        : BYTE;
  443.                                        ExtKey     : BYTE;
  444.                                        Awake      : BOOLEAN;
  445.                                        Parent     : INTEGER;
  446.                                        Setting    : BOOLEAN     );
  447.  
  448. Procedure WFormAddOpt(                 FM         : PFormMax;
  449.                                        X          : INTEGER;
  450.                                        Y          : INTEGER;
  451.                                        F          : INTEGER;
  452.                                        B          : INTEGER;
  453.                                        HF         : INTEGER;
  454.                                        HB         : INTEGER;
  455.                                        Key        : BYTE;
  456.                                        ExtKey     : BYTE;
  457.                                        Awake      : BOOLEAN;
  458.                                        Parent     : INTEGER;
  459.                                        OptList    : POINTER;
  460.                                        NumOpt     : BYTE;
  461.                                        CurOpt     : INTEGER     );
  462.  
  463. Procedure WFormAddHex(                 FM         : PFormMax;
  464.                                        X          : INTEGER;
  465.                                        Y          : INTEGER;
  466.                                        F          : INTEGER;
  467.                                        B          : INTEGER;
  468.                                        HF         : INTEGER;
  469.                                        HB         : INTEGER;
  470.                                        Key        : BYTE;
  471.                                        ExtKey     : BYTE;
  472.                                        Awake      : BOOLEAN;
  473.                                        Parent     : INTEGER;
  474.                                        Len        : BYTE;
  475.                                        Num        : LONGINT     );
  476.  
  477. Procedure WFormAddProc(                FM         : PFormMax;
  478.                                        X          : INTEGER;
  479.                                        Y          : INTEGER;
  480.                                        F          : INTEGER;
  481.                                        B          : INTEGER;
  482.                                        HF         : INTEGER;
  483.                                        HB         : INTEGER;
  484.                                        Key        : BYTE;
  485.                                        ExtKey     : BYTE;
  486.                                        Awake      : BOOLEAN;
  487.                                        Parent     : INTEGER;
  488.                                        Proc       : TFormNodeProc;
  489.                                        Width      : BYTE;
  490.                                        Height     : BYTE        );
  491.  
  492. Procedure WFormAddFloat(               FM         : PFormMax;
  493.                                        X          : INTEGER;
  494.                                        Y          : INTEGER;
  495.                                        F          : INTEGER;
  496.                                        B          : INTEGER;
  497.                                        HF         : INTEGER;
  498.                                        HB         : INTEGER;
  499.                                        Key        : BYTE;
  500.                                        ExtKey     : BYTE;
  501.                                        Awake      : BOOLEAN;
  502.                                        Parent     : INTEGER;
  503.                                        Float      : REAL;
  504.                                        Width      : BYTE;
  505.                                        Decimal    : BYTE        );
  506.  
  507. Procedure WFormAddTMask(               FM         : PFormMax;
  508.                                        X          : INTEGER;
  509.                                        Y          : INTEGER;
  510.                                        F          : INTEGER;
  511.                                        B          : INTEGER;
  512.                                        HF         : INTEGER;
  513.                                        HB         : INTEGER;
  514.                                        Key        : BYTE;
  515.                                        ExtKey     : BYTE;
  516.                                        Awake      : BOOLEAN;
  517.                                        Parent     : INTEGER;
  518.                                        Mask       : POINTER;
  519.                                        Keys       : POINTER;
  520.                                        Fill       : CHAR;
  521.                                        LJust      : BOOLEAN;
  522.                                        TxtPtr     : POINTER;
  523.                                        TxtStr     : ST80        );
  524.  
  525. Procedure WFormAddNMask(               FM         : PFormMax;
  526.                                        X          : INTEGER;
  527.                                        Y          : INTEGER;
  528.                                        F          : INTEGER;
  529.                                        B          : INTEGER;
  530.                                        HF         : INTEGER;
  531.                                        HB         : INTEGER;
  532.                                        Key        : BYTE;
  533.                                        ExtKey     : BYTE;
  534.                                        Awake      : BOOLEAN;
  535.                                        Parent     : INTEGER;
  536.                                        Mask       : POINTER;
  537.                                        MaskNum    : LONGINT   );
  538.  
  539. Procedure WFormAddListBox(             FM         : PFormMax;
  540.                                        X          : INTEGER;
  541.                                        Y          : INTEGER;
  542.                                        F          : INTEGER;
  543.                                        B          : INTEGER;
  544.                                        HF         : INTEGER;
  545.                                        HB         : INTEGER;
  546.                                        Key        : BYTE;
  547.                                        ExtKey     : BYTE;
  548.                                        Awake      : BOOLEAN;
  549.                                        Parent     : INTEGER;
  550.                                        List       : POINTER;
  551.                                        ListNum    : BYTE;
  552.                                        Cols       : BYTE;
  553.                                        Rows       : BYTE;
  554.                                        FrameStart : INTEGER;
  555.                                        ListCur    : INTEGER;
  556.                                        ListKeys   : ST80       );
  557.  
  558. {────────────────────────────────────────────────────────────────────────────}
  559.  
  560.