home *** CD-ROM | disk | FTP | other *** search
/ Black Box 4 / BlackBox.cdr / dbase / ccb_fix.arj / CCB_FORM.GEN < prev    next >
Encoding:
Text File  |  1991-06-09  |  50.3 KB  |  923 lines

  1.  
  2. Format (.fmt) File Template with POPUP or BROWSE field validation
  3. -----------------------------------------------------------------
  4. Version 1.11.33
  5. Ashton-Tate (c) 1987, 1988, 1989, 1990
  6. Written by Kirk J. Nason & Bill Ramos
  7.  
  8. ════════════════════════════════════════════════════════════════════════════════
  9.          *****  NOT AN OFFICIAL ASHTON-TATE RELEASE OF FORM.GEN  *****
  10.             Key assignments and features could change WITHOUT notice
  11.  
  12. GENERAL NOTE:
  13.   dBASE has a new REQUIRED keyword for the @ GET command. Currently the
  14.   Screen Designer does not have a option for this!  If you want the 
  15.   REQUIRED keyword after every VALID use the DOS environment variable:
  16.   SET DTL_REQ=ON and restart dBASE.  NOW every generated VALID will look like
  17.   @ <row>,<col> ... GET <var> VALID REQUIRED <exp>
  18.   This environment variable will be removed at some future date!
  19.  
  20. ════════════════════════════════════════════════════════════════════════════════
  21.  
  22. This template will support POPUPs or BROWSE for VALID clause field validations
  23. and context sensitive help for each field.  If you choose these features,
  24. please note the following:  F1: calls the context sensitive help,  F2:(switch to
  25. edit/browse) is disabled, but if the ZOOM option is used F9 will ZOOM to another 
  26. form,  F6:invokes the "cut" portion of cut/paste,  Ctrl-F5:invokes editing of 
  27. "cut" data, and  F8:invokes the "paste" code,  F7:Allows you to move "windows"
  28. around.
  29.  
  30. Example:
  31.  In FORM Design - "ACCEPT value when" under "Edit options" enter,
  32.  "POPUP" = "vendor->vendor_id ORDER vendor_id REQ SHADOW ZOOM vendors"
  33.  "BROWSE" ="vendor->vendor_id ORDER vendor_id FIELDS id,name FROM 5,0 TO 6,30"
  34.  -------------------------------------------------------------------------------
  35.  this will activate a popup or BROWSE if the data entered is invalid for
  36.  that field and will also make the field REQUIRED.
  37.  
  38. ************   SET DBTRAP OFF  is required to use these features  ************
  39.  
  40. Explanation of the string follows:
  41.  
  42. POPUP               Indicates that a POPUP will be used for this field.
  43. BROWSE              Indicates that BROWSE will be used for this field.
  44. <file>-><fieldname> Indicates the .DBF to open and FIELD to use as validation.
  45. ORDER <tag name>    Indicates which INDEX TAG to SEEK in.            
  46. REQ                 Indicates the FIELD requires data (can't be left empty).
  47.                     Leave REQ out if the field is NOT required.      OPTIONAL!
  48. SHADOW              Use shadowing effect on POPUPs or BROWSE.        OPTIONAL!
  49.  
  50. FROM <r,c> TO <r,c> Window coordinates for the BROWSE table.         OPTIONAL!
  51. FIELDS <fld list>   Field list for the BROWSE table.                 OPTIONAL!
  52. UPDATE              Allow APPENDing and EDITing of BROWSE table.     OPTIONAL!
  53.                     Note: "FIELDS <fld list>" is REQUIRED for UPDATE
  54. FORMAT <file name>  Format file to use with BROWSE FORMAT            OPTIONAL!
  55.                     Note: overrides FIELDS <fld list>
  56. ZOOM <file name>    Format file to use with "ZOOMed" EDIT            OPTIONAL!
  57.                     Note: Zooms to EDIT another FORM based on file->fieldname
  58.                           info above.
  59. NOTE: The string must be entered with the quotes as in the example.  
  60.  
  61. ════════════════════════════════════════════════════════════════════════════════
  62.  
  63. Explanation of the Context Sensitive Help file follows:
  64.  
  65. If you want to create your own help file, here is the structure that is required.
  66.  
  67. Structure for Help Database (.dbf):
  68. <first 6 chars. of the format filename>_H.dbf
  69.                        ---------------
  70.  
  71. Field   Field Name  Type        Width  Dec   Tag
  72. -------------------------------------------------
  73.     1   FLD_NAME    Character     10         Yes  Field name to lookup on F1
  74.     2   FLD_HEADNG  Character     25          No  Heading to show user on window
  75.     3   FLD_HELP    Memo          10          No  Help text to show user
  76. -------------------------------------------------
  77.         Total                     46
  78. ε¡∞(x╔╚▐»╛∩@O░:.H@O░::@TP;86 @Uç;(=8m@Vñ;8n@W╢; ;@W╢;@Y└;.î@Y└;:@]U<8m@^r<8n@_å< ;@_å<@aÉ<. @aÉ<:@d°<6∞@e=8; 8< 8?@f;= >@f;=@gE=;@hW=<@hW=@ja=.Ç@ja=:@o╠=>@o╠=@pµ=5i80 8n@r>.,@r>@s><@t'><@t'>@v1>.╓@v1>:@xû>8< 8= 8< 8>@y┘> ;<@y┘>@{π>.#@{π>:@}F?/.@}F?@}F?;@~f?<@~f?@^╡ 1ù@_D    :Can't use FORM.GEN on non-form objects.  Press any key ...8N@`d.]@as@Éß     #
  79. 80@æ≥ @Æ    $" @ô(
  80. @òT    "9ô3@Ö─    .fmt9àC /]@¢±9r2@£19|@¥p9h!@₧Ñ9∞,@ƒ█9êG@á-9j╝@íy9╧»@ó╜9├n@ú93╖@ñK0╦/▐@ªê9¡i@ºá@¬≤/°9*w@½
  81.  @¡  2H@«'     )Form design was empty.  Press any key ...8N@»H @▒R     .fmo8{@▓ÿ @│í ;@╣1!.V!@╣1!:
  82. *-- Format file initialization code --------------------------------------------
  83.  
  84. *-- Some of these PRIVATE variables are created based on CodeGen and may not 
  85. *-- be used by your particular .fmt file
  86. PRIVATE lc_talk, lc_cursor, lc_display, lc_status, lc_carry, lc_proc,;
  87.         ln_typeahd
  88.  
  89. IF SET("TALK") = "ON"
  90.    SET TALK OFF
  91.    lc_talk = "ON"
  92. ELSE
  93.    lc_talk = "OFF"
  94. ENDIF
  95. lc_cursor = SET("CURSOR")
  96. SET CURSOR ON
  97. @╬+#    439╘4 8. /Ü
  98. *-- This form was created in @╨Q#9╘4 ? mode
  99. lc_display = SET("display")
  100. IF .NOT. "43" $ lc_display                             && In 25 line mode
  101.    IF "EGA" $ lc_display
  102.       *-- If EGA is in lc_display try EGA43
  103.       SET DISPLAY TO EGA43
  104.    ELSE
  105.       *-- Otherwise try MONO43
  106.       SET DISPLAY TO MONO43
  107.    ENDIF
  108. ENDIF
  109. @▄═$
  110. lc_escape = SET("ESCAPE")
  111. SET ESCAPE OFF
  112. lc_status = SET("STATUS")
  113. *-- SET STATUS was @Γ4%/^ON when you went into the Forms Designer.
  114. IF lc_status = "OFF"
  115.    SET STATUS ON
  116. @µ£%.┐@µ£%OFF when you went into the Forms Designer.
  117. IF lc_status = "ON"
  118.    SET STATUS OFF
  119. @Ω°%ENDIF
  120. @≡▐&j@±∙&8F @±∙&8I 0ß9_ƒ@≥ 'X/$,>@≥ '@≤C'@80     M2╥¬/╥6╥@⌡£',    wndow    ,
  121. *-- Window for memo field @°┘'=9Æ ?.
  122. DEFINE WINDOW @∙(9< ?@·4(@√>(,.Θ@√>(@ⁿJ(8B@■m(/p
  123. lc_carry = SET("CARRY")
  124. *-- Fields to carry forward during APPEND.
  125. SET CARRY TO @╖(9┤> ?
  126.  
  127. @╫(@α(9Ω¢@ ) /#
  128. IF TYPE("gc_cut") = "U"
  129.    PRIVATE gc_cut
  130.    gc_cut     = SPACE(254)                  && Global variable for cut and paste
  131. ENDIF
  132. lc_proc    = SET("procedure")               && Store procedure file name
  133. ln_typeahd = SET("typeahead")               && Store "typeahead" setting for _Paste
  134. lc_design  = SET("design")                  && Store "design" setting 
  135.  
  136. SET PROCEDURE TO u_@£*(8< ?
  137. SET TYPEAHEAD TO 255
  138. SET DESIGN OFF
  139.  
  140. DO _key_vars                               && Initialize Keyboard variables
  141.  
  142. IF SET("DBTRAP") = "ON"                    && If dbtrap is on warn user
  143.    DO _dbtrap                              && Put up error box
  144.    KEYBOARD CHR( kn_Esc)                   && Escape out of the form since
  145. ENDIF                                      &&   UDF's won't run
  146. @P,#5/
  147. DO S_@î,(8< 8> ?(8S ?&& Open up Lookup Files
  148. @╬,@┌,@ ÷,/¼
  149. ON KEY LABEL @" -    F1? DO @#*-(8< 88 8>    H_ ? WITH VARREAD() && Call Help code
  150. @%-.µ@%-/▀ON KEY LABEL @&¢-    F1?
  151. @'╖-@(┬-@)╦-/ON KEY LABEL F2 ?? CHR(7)
  152. @+√-@,./íON KEY LABEL @-.    F5? DO @.:.(8< 88 8>    R_ ? WITH VARREAD() && Call Recalc code
  153. @0É..█@0É./╘ON KEY LABEL @1¼.    F5?
  154. @2╩.@3╓.@4▀./c ON KEY LABEL @5≤.    F9? DO @6/(8< 88 8>    Z_ ? WITH VARREAD() && Call Zoom code
  155. @8f/.¥ @8f//û ON KEY LABEL @9é/    F9?
  156. @:₧/@;⌐/@<▓//,!ON KEY LABEL @=╠/    F6? DO _Cut
  157. ON KEY LABEL @>∩/    Ctrl-F5? DO _Edpaste
  158. ON KEY LABEL @?0    F8? DO _Paste
  159.  
  160. @AC0@Cd0/F!9
  161. ╟@Dç0@Eæ0<@G┤0<@G┤0@J1.┌,@J1:
  162. *-- @ SAY GETS Processing. -----------------------------------------------------
  163.  
  164.  
  165. *--  Format Page: @Qö1
  166. 
  167. ? 
  168. @T╬1    Φ@UΓ18F @UΓ18I 0╖,½W9╤5@V*2 %9_ƒ@WB2 /¥"9ⁿ╗@Xa2    "READ
  169.  
  170. *-- Format Page: @\é2
  171. ?
  172.  
  173. @^í2@a▒2=1─"j2ñ#@b√2?2#*-- Calculated field: @c 3=9Æ ? - L?
  174. @dc3@eo3?2l#*-- Memory variable: @fû3=9Æ ?
  175. @g╟3@ @h╘3ß9Φ     ?,]9Φ ? @i4@j4>2╫#@ @kF49╔< ?@l_4@nn4.i,@oç4SAY @v╓5_8-  6¬$@w∙5_86 2W$CHR(@x6_8- ?) @y86.ƒ$@y86REPLICATE(CHR(@zG6_8- ?), _86 ?) @{}6@}ÿ6.%%@}ÿ6_8<     "2±$@üc7    [@éå7    ]>@éå7@âû7_? @à8    ">@à8@å89j; ?@ç"8.î,@ç"8@ê48áí9½: ?@ë`89j; ?@èt8.î,@èt8@ïå8W0░&SAY @ì╣8?2&@Å$9M@ÉU98F @ÉU98I 0√%M?@æu9,.╒%@æu9 @ò:.l&@ò:?21&     .H&@ò:    m-> @ò:@ûL:>=9Æ ? @ù:@ÿÅ:9B /Ñ&PICTURE "@Ö▒:9hA" @Ü╘:@¢Σ:.+,@¢Σ:GET @¥;?2▐&     .⌡&@¥;    m-> @¥;@₧O;>"=@ƒâ;    ,"=9Æ ? @á░;@80     M2í'¬/í'6í'@í<,¬2à'OPEN @í<WINDOW wndow? @óK<@ú[<9B /┌'PICTURE "@ñ}<9ó@" @Ñá<@ª░<O0≈'P/I(@ª░<;
  176.    RANGE @¿≡<O?P/?(,P?@¿≡< @⌐4=@¬D=S/+;
  177. @¼u=    POPUPS87 8= 8.     22≡(@¡╣=    7Picklist coordinates exceed column 79 - move field left9æB@«∩= 0#)@«∩=@»>    BROWSES87 8= 8.     22*@▓τ>   VALID @│Ω>S9τÑ 0o)@┤?    dtl_req8g 8=     ON2ê)@┤?REQUIRED @┤?@╡[?=9┴ú ?( =9Æ ? ) @╖σ?    .AND.S8= 8.@╕@ /*S    .AND.S8= 8. 8< ? @╣i@@╗æ@.ä*@╗æ@9╩₧ 0}*   VALID @╜┴@    dtl_req8g 8=     ON2k*REQUIRED @╜┴@S? @┐A@└/A@┬DAT/ +;
  178.    ERROR @┼uA    IIFT8= 8. 0╬*"@┼uAT?@╞╛A    IIFT8= 8. 0+"@╞╛A @╟√A@╚B@╔-BR/Q+;
  179.    WHEN @╦^BR? @═zB@╬èBQ/ô+;
  180.    DEFAULT @╨╗BQ? @╤╫B@╥τBc/$,;
  181.    MESSAGE @╒&C    IIFc8= 8. 0τ+"@╒&Cc?@╓lC    IIFc8= 8. 0,"@╓lC @╫ªC@╪╢C@┘╘C9j; ?@┌τC@█²C.î,@█²C.í,@▄D.î,@▄D7=≡#>E%jü%.Z,@▄D
  182. @πáD ,@Σ½D@σ╕D,."@σ╕D@µ┬D9ⁿ╗@τ D<@Θ"E<@Θ"E@∞nE.`2@∞nE:
  183. *-- Format file exit code -----------------------------------------------------
  184.  
  185. @±▐E/M/*-- Get rid of the ON KEY set above
  186. @≤F/▒-ON KEY LABEL @⌠1F    F1?
  187. @⌡MFON KEY LABEL F2
  188. @≈iF/÷-ON KEY LABEL @°ÇF    F5?
  189. @∙₧FON KEY LABEL @·⌐F    F6?
  190. ON KEY LABEL @√─F    Ctrl-F5?
  191. ON KEY LABEL @ⁿπF    F8?
  192. @²G/ä.ON KEY LABEL @■G    F9?
  193. @ 1G@;G#5≤./≤.
  194. DO C_@wG(8< 8> ?(8S ?&& Close up Lookup Files
  195. @║G
  196. SET PROCEDURE TO (lc_proc)
  197. SET TYPEAHEAD TO (ln_typeahd)
  198. SET DESIGN &lc_design.
  199. @H
  200. *-- SET STATUS was @ =H/0ON when you went into the Forms Designer.
  201. IF lc_status = "OFF"  && Entered form with status off
  202.    SET STATUS OFF     && Turn STATUS "OFF" on the way out
  203. @∩H.┐0@∩HOFF when you went into the Forms Designer.
  204. IF lc_status = "ON"  && Entered form with status on
  205.    SET STATUS ON     && Turn STATUS "ON" on the way out
  206. @æIENDIF
  207. @íI/⌠0
  208. SET CARRY &lc_carry.
  209. @╬ISET CURSOR &lc_cursor.
  210. @∩I    439╘4 8. /q1SET DISPLAY TO &lc_display.      && Reset Screen size if changed
  211. @UJSET ESCAPE &lc_escape.
  212. SET TALK &lc_talk.
  213.  
  214. @ îJ/δ1RELEASE WINDOWS @!íJ86 < ?
  215. @"▀J@#τJ//2
  216. RELEASE ALL LIKE kn_*
  217. RELEASE ALL LIKE rn_*
  218. @'0K*-- EOP: @(9K83 ?FMT
  219. @)[K<@+K<@+K@.╦K.ü3@.╦K:@0ⁿK    *P8V 8B*-- Name.......: @1%L83 ?FMT
  220. *-- Date.......: @2OL8M 8< 87 ?
  221. *-- Version....: dBASE IV, Format @3Lû?.1
  222. *-- Notes......: Format files use "" as delimiters!
  223. @5σL    *P8V 8B@6M<@6M@ ═.┬4@ ═:@8k@= 4ε3@p'@ë$@Æ.@Æ@⌐@┬@┬@>'8k@6 2q40q4@w@Å>@Å@Ö'2▓40▓4@δ*@ '>@ @!<@"<@"@%e.┐5@%e:@(┐.x5@)╘@*≥    MONO.Ñ5@*≥@+    COLOR.Ñ5@+@,0    EGA25.Ñ5@,0@-P    MONO43.Ñ5@-P@.o    EGA43.Ñ5@.o7≤45*5F5c5@.o@/};@0É<@0É@3▄.Ö:@3▄:@C    @D9Ç!@E]!!056@F₧!/66@F₧@G┬p!@HΓ!@I    !@K(    !0ü:@Ms    /░6>@Ms    @O¿    1⌠71⌠7@P▌    .á7@Q⌡    @R
  224.     n.Γ7@R
  225. @S)
  226.     b.Γ7@S)
  227. @TC
  228.     g.Γ7@TC
  229. @U^
  230.     bg.Γ7@U^
  231. @Vx
  232.     r.Γ7@Vx
  233. @Wô
  234.     rb.Γ7@Wô
  235. @X«
  236.     gr.Γ7@X«
  237. @Y╚
  238.     w.Γ7@Y╚
  239. 7Σ6ⁿ67,7E7]7v7Å7@Y╚
  240. @[Γ
  241. .8@[Γ
  242. @\°
  243.     w>@\°
  244. @_ /98@`9     i>@`9 @bY /a8@cy     u>@cy @eÜ /ë8@f║     +>@f║ @h╫ /▒8@i≈     *>@i≈ @m#     /1:1:@nX .╦9@oq @pò     n.:@pò @q╣     b.:@q╣ @r▌     g.:@r▌ @s    bg.:@s@t&    r.:@t&@uK    rb.:@uK@vp    gr.:@vp@wö    w.:@wö7∩8 9'9C9`9|9Ö9╢9@wö@y«.@:@y«@z╬    n>@z╬@|█/z:/z:@}     ,@~)>@~)@Ç6@üO8T ;@éj<@éj@à╢.X;@à╢:@èy.;@ïè@î½     .>;@î½@ì╔     DOUBLE .>;@ì╔     CHR(@Ä∩    ) .>;@Ä∩7╩:Γ:;@Ä∩@Å√;@É<@É@ôZ. <@ôZ:@û«    @ù╛%86 4∙;@Ü+/╦;    ;8U@¢S >@¢S@£_    COLOR %@¥Ä     >@¥Ä@₧ù;@ƒ⌐<@ƒ⌐@ó⌡.╖<@ó⌡:@Ñj    wndow     FROM 9╔<@ª½ áüíü9½:@º∞ ½üWü9╤5@¿$ %9j;@⌐E ;@¬X<@¬X@¡ñ.ó>@¡ñ:@░D
  245. @│⌐úü9Φ @┤∩5#=@╡.α<@╡@╖G
  246. 2U=@╣v>@╣v@║Ç
  247. 2Ç=@╝»>@╝»@┐█0⌐=@┴@┬.╙=@┬@├K@├K@┼W>úü9Φ @╞è    ,óü9Φ @╟└     TO úü9Φ Ñü@╚  4^> >@╚@╔5     ,óü9Φ ñü@╩à;@╦ÿ<@╦ÿ@╬Σ.É@@╬Σ:@╤>@╥Rj@╙o8F @╙o8I 0j@@╘êX/[@=    ,86@╒├ =    ,86@╓ Φ4¢?@╫$    SET CARRY TO 8B@┘x>@┘x@┌êK4▌?@█¬    ;      8B@▌∞>@▌∞@▐ⁿ=9Æ@▀&  0+@@αE 8B@Γ{@πè.L@@πè    , 8B@Σ⌐ @Σ⌐@σ╣>@σ╣@µ╞,.√>@µ╞@τ╒         ADDITIVE8B@Θ≈<<@Θ≈@∞C.VA@∞C:@φ^Kü/ⁿ@@Kü?@εè    SKü8. /≥@╖ü?@εè @≡Σ@±≡    MKü8.@≥ /0A┤ü?@⌠;.FA@⌠;Jü?@⌡U@÷a<@≈k<@≈k@·╖.B@·╖:@√╥Kü/┬A@Kü?@ⁿ■    SKü8. /╕A╖ü?@ⁿ■ @■X@ g    MKü8. 0≥A@îJü?@ª@▓<@╝<@╝@.B@:@KJü/jB@ü80     D1jB@î@ü80     M1jB@    ╨;@ ε;@<@@W.sC@W:@≈ ]ü9Φ Jü86 P4^C@p!/QC9@»!8o@┴!
  248. =ü    Error on Field: =9≈@" 9≈@'"    Press any key ...8N@B"@Q";@o";@!Ä"<@!Ä"@$┌".ΣD@$┌":@&!#8=@'7#  8l@(}# @)└#*(8Y 07D@*ß#0D@,$(@-&$.(D@-&$    :@.T$(@.T$@/a$>@/a$@0k$8=@1è$ 8C 0╧D@2▒$82     - can't be opened - possible read-only file.      Press any key ...8N@3≡$;@4%@5%;@6%<@6%@9i%.σE@9i%:@<═%*    u_(8< 88@=&     .PRG8C 0│E@>H&    .PRG    - can't be opened - possible read-only file.      Press any key ...8N@?ê&;@@Ö&@B╠&    .DBO8{@D<';@EJ'<@EJ'@Hû'.vG@Hû':@J╧'    -N8V    * 8B*-- Name....: @K°'*?u_(8< 88 ?.PRG
  249. *-- Date....: @L3(8M 8< 87 ?
  250. *-- Version.: dBASE IV, Procedures for Format (.fmt) v@M^(û?.1
  251. *-- Notes...: Procedure file for VALID POPUPs and/or Context Sensitive Help
  252. *-- ........: for @O≡(83 ?FMT
  253. @P)    -N8V    * 8B@Q@)<@Q@)@Tî).¢i@Tî):@^G+/ïi9÷D 0╛G@_i+;@`å+@a¢+9≈E@c╚+#5KPROCEDURE S_@eⁿ+(8< 8> ?(8S ?&& Open Lookup files for faster processing
  254. @fX,j@g~,8F @g~,8I 0~I9╩₧@h«, /oIS9ú@iµ, $8. 0hI@j%-$    ,$  USE @lr-? ORDER S9
  255. ñ ? IN SELECT() @m▒-8= <2MIAGAIN ALIAS @n÷-8<    A ?
  256. @o ..aI@o . 
  257. @qU.@rs.@sÄ.@tª.,.eH@tª.RETURN
  258. *-- EOP: S_@w╔.(8< 8> ?
  259.  
  260. PROCEDURE C_@y±.(8< 8> ?(8S ?&& Close Lookup files
  261. @{X/    $j@|~/8F @|~/8I 0K9╩₧@}«/ /∙JS9ú @~τ/$8. 0≥J@&0$    ,$  USE IN ALIAS("@üs08= <2╘J8<    A .σJ@üs0@üs0?")
  262. @é╓0@â±0@ä    1,.3J@ä    1@à!1RETURN
  263. *-- EOP: C_@ê=1(8< 8> ?
  264.  
  265. FUNCTION Empty                       && Determine if the passed argument is NULL
  266. @ï╖18P ?PARAMETER x
  267. PRIVATE retval, lc_type
  268. lc_type = TYPE("x")
  269. DO CASE
  270.   CASE lc_type = "C"
  271.     retval = (LEN(TRIM(x))=0)
  272.   CASE lc_type$"NF"
  273.     retval = (x=0)
  274.   CASE lc_type = "D"
  275.     retval = (" "$DTOC(x))
  276.   OTHERWISE lc_type = "U"
  277.     retval = .T.
  278. ENDCASE
  279. @Ö╥28P ?RETURN (retval)
  280. *-- EOP: _Empty
  281.  
  282. @¥3    -N8V    * 8BPROCEDURE _DbfEmpty
  283.    *-- Error box if Lookup .dbf is empty
  284.    *-- Save the screen and setup window
  285.    PRIVATE ALL LIKE l?_*
  286.    DEFINE WINDOW u_error FROM 5,15 TO 11,55
  287.    SAVE SCREEN TO u_error
  288.    DO _Shadowg WITH 5,15,11,55
  289.  
  290.    *-- Activate the window and put up error message
  291.    ACTIVATE WINDOW u_error
  292.    lc_fpath = SET("fullpath")
  293.    SET FULLPATH OFF
  294.    @ 1,2 SAY "Lookup table: " + SUBSTR( DBF(),3) + " is empty!"
  295.    @ 2,2 SAY "@½┌4    Press any key ...?"
  296.    ln_errorky = INKEY(10)
  297.  
  298.    *-- Restore the screen and clean up
  299.    SET FULLPATH &lc_fpath.
  300.    RELEASE WINDOW u_error
  301.    RESTORE SCREEN FROM u_error
  302.    RELEASE SCREEN u_error
  303. RETURN
  304. *-- EOP: _DbfEmpty
  305.  
  306. @╕Σ5    @║■5
  307. j@╝$68F @╝$68I 0}i    POPUPS87 8= 8.     22P.)P@╝$6@╝$6 @╛v69_ƒ@┐ò69╩₧@└├6 /niß9Φ @┴7    ]9Φ@┬>7 ½W9╤5@─Ö7 % /═P    9æB /ni@─Ö7@╞ε7    -N8V    * 8BFUNCTION @╚)8=9┴ú ?
  308. @╔P88P ?PARAMETER fld_name
  309. PRIVATE ALL LIKE l?_*
  310. PRIVATE fld_name, rtn_fld
  311.  
  312. ll_return = .T.                      && Declare return variable for function
  313. ln_row = ROW()                       && Current Row of Get
  314. ln_col = COL()                       && Current Column of Get
  315. rtn_fld = fld_name                   && Current Value of Get
  316.  
  317. @╙▓9S9τÑ 0SIF EMPTY(fld_name)                   && Not a required field
  318.   RETURN (.T.)                       && if null field
  319. ENDIF
  320.  
  321. @╪h:@┘ä:/;S
  322. ON KEY LABEL @█¡:    F1?
  323. @▄╔:@▌σ:/nSON KEY LABEL @▐;    F5?
  324. @▀,;@αH;/íSON KEY LABEL @ßo;    F9?
  325. @Γï;
  326. lc_alias = ALIAS()                   && Grab current workarea
  327.  
  328. IF ln_row = @Ω±<ß? .AND. (ln_col >= ]? .AND. ln_col <= ]A? )
  329.    ll_edit = .T.
  330. ELSE
  331.    ll_edit = .F.
  332. ENDIF
  333.  
  334. @≡ê=S9ú @±┴=S9
  335. ñ 8T !@≤>#5$USELECT ("@⌡@>8= <2U8<    A @÷Ä>.U@÷Ä>@÷Ä>?")
  336. @≈═>.UV@≈═>SELECT SELECT()
  337. IF FILE("@∙∙>?.dbf")
  338.    USE @·?? ORDER !? @√>?8= <2⌐UAGAIN
  339. @²ë?.╜U@²ë? 
  340. @ ╜?ELSE
  341.    SET MESSAGE TO "@ß??.dbf     
  342. not found!?      Press any key ...?"
  343.    ll_wait = INKEY(0)
  344.    SET MESSAGE TO
  345.    RETURN .F.
  346. ENDIF
  347. @\@
  348. lc_exact = SET("EXACT")              && Store value of EXACT
  349. SET EXACT ON
  350. @
  351. ╫@ 0;Wlc_near =  SET("NEAR")               && Store value of NEAR
  352. SET NEAR ON                          && Do "soft" seek into "BROWSE"
  353.  
  354. @éA@¥A@80     C2óWfld_name = IIF( EMPTY( TRIM( fld_name)), fld_name, TRIM( fld_name))
  355. @BSEEK fld_name
  356.  
  357. SET EXACT &lc_exact.                 && Restore SET EXACT to org. value
  358. @æB 0ZXSET NEAR  &lc_near.                  && Restore SET NEAR  to org. value
  359. @C
  360. IF .NOT. FOUND()
  361.  
  362. @2CS9ÖÑ @oC /åZ   DEFINE POPUP @¡C? FROM @╤C6)Y@  D?,? ;
  363.     TO @!GD?,J86 ? ;
  364. @#óD.äY@#óD ?,? ;
  365.     TO @$αD?,J86 ? ;
  366. @%"E    PROMPT FIELD @&AES9τñ ? ;
  367.     MESSAGE @'nE    3[Select:]+CHR(17)+CHR(196)+CHR(217)+[   Cancel:Esc]?
  368.  
  369.    ON SELECTION POPUP @)ïE? DEACTIVATE POPUP
  370.  
  371. @+┴E@80     C2{Z   KEYBOARD TRIM( fld_name ) CLEAR
  372.  
  373. @.#F@1îF.╝[@1îFS9Sº /![S9w⌐ /![   IF RECCOUNT() = 0
  374.       DO _DbfEmpty
  375.       ll_return = .F.
  376.    ENDIF
  377.  
  378.    IF ll_return
  379.  
  380. @D╣H8P@EΣH   DEFINE WINDOW @FI? FROM @G(IS9⌐@H_I /ü[9»@IÆI @J»I.¬[@J»I    14,0 TO 20,798B@KßI @KßI@L I?
  381. @NJ   SAVE SCREEN TO @O J?
  382.  
  383. @QAJS9ܪ@RuJ /$] /å\    5Shadow coordinates exceed column 79 - move field left9æB /å\   DO _Shadowg WITH @T╠JJ9T½
  384. @UK@VK 0]   DO _Shadowg WITH @X_KS9⌐@YÖK /Φ\S9¼@Z╓K @[÷K.]@[÷K    
  385. 14,0,20,778B@\(L @\(L@]IL>@]IL@^gL@_éL /┼]   ACTIVATE POPUP @`ºL?
  386.  
  387.    rtn_fld = PROMPT()               && Get user choice from Picklist
  388.  
  389.    RELEASE POPUP @dM?
  390. @e.M.4b@e.M
  391.    lc_message = @gKM    3[Select:]+CHR(17)+CHR(196)+CHR(217)+[   Cancel:Esc]? +;
  392.                 @hmM    0[   Pan Left:F3   Pan Right:F4   Move Window:F7]?
  393.  
  394.    lc_message = IIF("500" $ VERSION(1), ;
  395.                  LEFT( lc_message, LEN( lc_message) - 17) , lc_message)
  396.    SET MESSAGE TO lc_message
  397.  
  398.    ON KEY LABEL Ctrl-M KEYBOARD( CHR( kn_CtrlEnd)) CLEAR   && Same as Enter send Ctrl-W
  399.  
  400. @p}NS9 ¿ @q┴N/≈_   IF FILE("@rΘNS9E» 82     .FMT?")
  401.       SET FORMAT TO @s,OS9E» 82 ?
  402.    ENDIF
  403.  
  404. @vwO   IF .NOT. "500" $ VERSION(1)
  405.       ON KEY LABEL @x│O    F7? DO _MoveWind WITH WINDOW(), lc_message
  406.    ENDIF
  407.  
  408.    BROWSE WINDOW @{P? NOMENU COMPRESS NOFOLLOW NODELETE LOCK 1 @|QPS9Sº /a@}åPS9w⌐ /a@~╗P8= @√P<2,a@√P;
  409.       NOAPPEND NOEDIT @é7Q@âRQ/Ra;
  410.       FORMAT @åìQ@ç¿QS9w⌐ /ûa;
  411.       FIELDS @ëαQ9« ? @ï\R
  412.  
  413. @ÿ┤S/┬a   SET FORMAT TO
  414. @ÜεS   ON KEY LABEL @¢
  415. T    F7?
  416.    ON KEY LABEL Ctrl-M
  417.    SET MESSAGE TO
  418.  
  419.    RELEASE WINDOW @ƒVT?
  420. @áuT
  421.    RESTORE SCREEN FROM @óôT?
  422.  
  423. @¿sUS9Sº /▒bS9w⌐ /▒b@½aV8P@¼çV ?   ENDIF
  424. @«öV
  425.    IF LASTKEY() <> kn_esc
  426. @▒═V 0c     rtn_fld = @▓≤VS9τñ 9Æ ?
  427. @│'W@┤CWS9τÑ /»c
  428.      IF EMPTY(rtn_fld)             && Is a required field, so return .F.
  429.         ll_return = .F.
  430.      ELSE
  431. @╣ΩW8P@║X
  432.      IF ll_edit
  433.         @ @┴IY?,? GET rtn_fld @┬~Y9B /4dPICTURE "@├úY9ó@" @─╔Y9j; ?@┼ΓY
  434.      ENDIF
  435.  
  436.      REPLACE @╩QZ<9Æ ?->=9Æ ? WITH @╦£Z@80     C1┼d@╠╥Z    BROWSES87 8= 8.     22ßd@╠╥Zrtn_fld
  437. @╬([.■d@╬([VAL(rtn_fld)
  438. @╨Q[
  439.      ll_return = .T.
  440. @╙à[S9τÑ@╘╗[ /Te8P ?     ENDIF
  441. @╓ε[   ELSE
  442.      ll_return = .F.
  443. @┌,\S9τÑ 0f
  444.      IF EMPTY(fld_name)             && Not a required field, so return .t.
  445.         ll_return = .T.
  446.      ENDIF
  447.  
  448. @ß█\   ENDIF
  449.  
  450. ELSE
  451.   ll_return = .T.
  452. ENDIF
  453. @τ#]S9≡¬ /g
  454. IF ll_return
  455.    DO U_@ΩV]=8< 8> ? WITH ll_edit, @δÆ]@80     C1╫f@∞╚]    BROWSES87 8= 8.     22≤f@∞╚]rtn_fld
  456. @ε^.g@ε^VAL(rtn_fld)
  457. @≡G^ENDIF
  458. @≥j^
  459. @⌠u^#4CgUSE
  460.  
  461. @≈ñ^SELECT (lc_alias)                    && Go back to the edit file
  462.  
  463. @·±^/hON KEY LABEL @√_    F1? DO @ⁿ"_(8< 88 8>    H_ ? WITH VARREAD() && Call Help code
  464. @²o_@■w_/ùhON KEY LABEL @ î_    F5? DO @¼_(8< 88 8>    R_ ? WITH VARREAD() && Call Recalc code
  465. @√_@`/iON KEY LABEL @`    F9? DO @4`(8< 88 8>    Z_ ? WITH VARREAD() && Call Zoom code
  466. @ü`@ë`8P ?RETURN (ll_return)
  467. *-- EOP: @⌐`=9┴ú ?
  468.  
  469. @
  470. ╥`@ Φ`,.▌O@ Φ`@ ²`@0a<@Xa<@Xa@ña.▒n@ña:@Ωa    -N8V    * 8BPROCEDURE _Shadowg                      && displays shadow that grows
  471. @]b8P ?PARAMETER x1,y1,x2,y2
  472. PRIVATE   x1,y1,x2,y2
  473.  
  474. x0 = x2+1
  475. y0 = y2+2
  476. dx = 1
  477. dy = (y2-y1) / (x2-x1)
  478. DO WHILE x0 <> x1 .OR. y0 <> y1+2
  479.   @ x0,y0 FILL TO x2+1,y2+2 COLOR n+/n
  480.   x0 = IIF(x0<>x1,x0 - dx,x0)
  481.   y0 = IIF(y0<>y1+2,y0 - dy,y0)
  482.   y0 = IIF(y0<y1+2,y1+2,y0)
  483. ENDDO
  484. @&çc8P ?RETURN
  485. *-- EOP: _Shadowg
  486.  
  487. @*┤c    -N8V    * 8BPROCEDURE _dbtrap                             && error routine for SET("dbtrap")
  488. @-Vd    (ERROR - SET DBTRAP OFF to use this FORM.86@.~d (=@/╖d(=@0≡d8PSET CURSOR OFF
  489. PRIVATE ALL LIKE l?_*
  490. SAVE SCREEN TO _dbtrap
  491. DO _Shadowg WITH 10, @5Ge?, 15, ?
  492. DEFINE WINDOW _dbtrap FROM 10,@6re? TO 15,? DOUBLE
  493. ACTIVATE WINDOW _dbtrap
  494. lc_error = "@8╟e    (ERROR - SET DBTRAP OFF to use this FORM.?"
  495. lc_error2 = "@9Γe    Press any key ...?"
  496. @ 1, CENTER( lc_error,  @:√e?) SAY lc_error
  497. @ 2, CENTER( lc_error2, @;2f?) SAY lc_error2
  498. lc_wait = INKEY(10)
  499. RELEASE WINDOW _dbtrap
  500. RESTORE SCREEN FROM _dbtrap
  501. RELEASE SCREEN _dbtrap
  502. SET CURSOR ON
  503. @A█f8P ?RETURN
  504. *-- EOP: _dbtrap
  505. @Dg<@Eg<@Eg@Hug.=o@Hug:@OÄh/-o0o@P⌐h9÷D 0o@Q╔h;@RΓh@Ti9≈E@U2i@Wqi9Oo@Xåi@Yôi<@Z£i<@Z£i@]Φi.w@]Φi:@`3j(8< 88 8>@aij    H_     -N8V    * 8B
  506. PROCEDURE @dòj?
  507. @e¼j8P ?*-- Activates the HELP window
  508. PARAMETER lc_var
  509. PRIVATE ALL LIKE l?_*
  510. IF .NOT. FILE("@i    k82 ?.dbf")
  511.    *-- Help file has been deleted or can't be found
  512.    RETURN
  513. ENDIF
  514.  
  515. SET CURSOR OFF
  516. ON KEY LABEL @oìk    F1?
  517.  
  518. *-- Select workarea and open Help dbf
  519. lc_area = ALIAS()
  520. SELECT SELECT()
  521. USE @t÷k82 ? ORDER fld_name NOUPDATE   && Open HELP .dbf
  522.  
  523. lc_exact = SET("EXACT")                && Store value of EXACT
  524. SET EXACT ON
  525. SEEK lc_var
  526. SET EXACT &lc_exact.
  527.  
  528. IF FOUND()                             && If found show Help
  529.   ln_t = 5
  530.   ln_l = 6
  531.   ln_b = 15
  532.   ln_r = 74
  533.   DEFINE WINDOW @Ç!m8> ? FROM ln_t+1, ln_l+2 TO ln_b-1, ln_r-2 NONE
  534.   ON ERROR lc_error = error()
  535.   SAVE SCREEN TO @éÅm8> ?
  536.  
  537.   *-- Make Help Box
  538.   DO _Shadowg WITH ln_t, ln_l, ln_b, ln_r
  539.   @ ln_t+1, ln_l+1 CLEAR TO ln_b-1, ln_r-1
  540.   @ ln_t, ln_l TO ln_b, ln_r DOUBLE
  541.  
  542.   ln_memline = SET("MEMO")
  543.   SET MEMOWIDTH TO 65
  544.   IF MEMLINES(fld_help) > 9
  545.     @ ln_t+1,ln_r SAY CHR(24)
  546.     @ ln_b-1,ln_r SAY CHR(25)
  547.     SET CURSOR ON
  548.   ENDIF
  549.   lc_string = CHR(185)+ [ Help for ] + TRIM(fld_headng) +[ ] + CHR(204)
  550.   lc_message = IIF( MEMLINES(fld_help) > 9 , ;
  551.                     "@Ælo    5Scroll thru Help:Ctrl-Home   Exit Viewing Help:Esc   ?" , ;
  552.                     "" ;
  553.                   )
  554.  
  555.   @ ln_t,CENTER(lc_string,80) SAY lc_string
  556.   @ 0,0 GET fld_help OPEN WINDOW @ÖMp8> ? MESSAGE lc_message
  557.   READ
  558.   SET MEMOWIDTH TO ln_memline
  559.   ON ERROR
  560.   RELEASE WINDOW @í~q8> ?
  561.   RESTORE SCREEN FROM @óúq8> ?
  562.   RELEASE SCREEN @ú═q8> ?
  563. ENDIF
  564. SET MESSAGE TO
  565. SET CURSOR ON
  566. USE                                              && Close help file
  567. SELECT (lc_area)                                 && Back to edit work area
  568. ON KEY LABEL @⌐⌐r    F1? DO ? WITH VARREAD()
  569. @¬πr8P ?RETURN
  570. *-- EOP: @¼√r?
  571.  
  572. @├gu<@─qu<@─qu@╟╜u.╪¢@╟╜u:@╔v    *    -N8V 8BPROCEDURE _Cut
  573. @╠Ov8P ?*-- Cut data from a field
  574. PRIVATE ALL LIKE l?_*
  575.  
  576. lc_field = VARREAD()
  577. lc_type = TYPE( lc_field)
  578. SAVE SCREEN TO _cut
  579.  
  580. DO CASE
  581. CASE lc_type = "C"
  582.     gc_cut = TRIM( &lc_field.)
  583. CASE lc_type $ "NF"
  584.     ln_cnt = 0
  585.     ln_number = &lc_field.
  586.     DO WHILE _numdec( ln_number)
  587.        ln_number = ln_number * 10
  588.        ln_cnt = ln_cnt + 1
  589.     ENDDO
  590.     gc_cut = LTRIM( STR( &lc_field., 14, ln_cnt))
  591. CASE lc_type = "D"
  592.     gc_cut = DTOC( &lc_field.)
  593. CASE lc_type = "L"
  594.     gc_cut = IIF( &lc_field., "Y", "F")
  595. CASE lc_type = "M"
  596.     gc_cut = SUBSTR( &lc_field., 1, 254)
  597.     ln_len = LEN( TRIM( gc_cut))
  598.     ln_cnt = 1
  599.  
  600.     DO WHILE ln_cnt <= ln_len
  601.        *-- Get rid of MODI COMM's soft carriage returns characters
  602.        IF ASC( SUBSTR( gc_cut, ln_cnt, 1)) = 141 .OR.;
  603.           ASC( SUBSTR( gc_cut, ln_cnt, 1)) =  10 .OR.;
  604.           ASC( SUBSTR( gc_cut, ln_cnt, 1)) =  13
  605.  
  606.           IF ASC( SUBSTR( gc_cut, ln_cnt, 1)) =  13
  607.              gc_cut = STUFF( gc_cut, ln_cnt, 1, " ")
  608.           ELSE
  609.              gc_cut = STUFF( gc_cut, ln_cnt, 1, "")
  610.           ENDIF
  611.  
  612.           ln_len = LEN( TRIM( gc_cut))             && Length of string can change
  613.           LOOP
  614.        ENDIF
  615.        ln_cnt = ln_cnt + 1
  616.       ENDDO
  617. ENDCASE
  618.  
  619. lc_message = SUBSTR( gc_cut, 1, @√O{    * - cut to scrap.   Edit:Ctrl-F5   Paste:F886O ?) + "    * - cut to scrap.   Edit:Ctrl-F5   Paste:F8?"
  620. @ⁿ⌐{1≡|*2A}@ⁿ⌐{@ @²▌{?, CENTER(lc_message, P?) SAY lc_message
  621. @■|.k}@■|SET MESSAGE TO lc_message
  622. @F|ln_key = INKEY(2.5)
  623. gc_cut = gc_cut + SPACE( 254 - LEN( gc_cut))
  624. SET MESSAGE TO
  625. RESTORE SCREEN FROM _cut
  626. RELEASE SCREEN _cut
  627. @╒|8P ?RETURN
  628.  
  629. @    ∩|    -N8V    * 8BPROCEDURE _Paste
  630. @ +}8P ?*-- Cut data to a field
  631. PRIVATE ALL LIKE l?_*
  632.  
  633. lc_field = VARREAD()                               && Grab field we left from
  634. lc_type = TYPE( lc_field)                          && Grab the data type
  635. lc_cut = TRIM( gc_cut)                             && Trim blanks from cut data
  636.  
  637. IF lc_type = "D"
  638.     *-- Remove "/" from character data so that KEYBOARD will work on a
  639.     *-- date field
  640.     lc_cut = STUFF(lc_cut, AT("/", lc_cut), 1, "") && Get rid of first  "/"
  641.     lc_cut = STUFF(lc_cut, AT("/", lc_cut), 1, "") && Get rid of second "/"
  642. ENDIF
  643. *-- Keyboard cut data into the field
  644. DO CASE
  645.    CASE lc_type $ "NFD"
  646.       *-- Start at the beginning of the field and clear it.
  647.       KEYBOARD ( CHR(kn_home) + CHR(kn_CtrlY) + lc_cut) CLEAR
  648.    CASE lc_type <> "M"
  649.       *-- Paste at the location of the cursor
  650.       KEYBOARD (lc_cut) CLEAR
  651.    OTHERWISE
  652.       IF LEN( &lc_field.) > 0
  653.          *-- Pad space to offset "scrap" from end of memo
  654.          lc_cut = " " + lc_cut
  655.       ENDIF
  656.       REPLACE &lc_field. WITH lc_cut ADDITIVE         && Replace into memo field
  657.       ln_keyboard = CHR(kn_ctrlhme) + CHR(kn_ctrlpdn) + ;
  658.                     CHR(kn_space) + CHR(kn_bakspce)   && Makes EDIT think data has changed
  659.       KEYBOARD (ln_keyboard) CLEAR                    && Move to bottom of memo
  660. ENDCASE
  661. @,ïé8P ?RETURN
  662.  
  663. @/Ñé    -N8V    * 8BPROCEDURE _Edpaste
  664. @1πé8P ?*-- Edit Cut data
  665. PRIVATE ALL LIKE l?_*
  666.  
  667. lc_deli = SET("DELIMITERS")
  668. lc_form = SET("FORMAT")
  669. SET DELIMITERS OFF
  670. SET FORMAT TO
  671. SAVE SCREEN TO _edpaste
  672. DEFINE WINDOW _edpaste FROM @;╡â1┴ä*1┴ä@<Θâ?,0 TO ?,79
  673. @>ä.±ä@>ä?,0 TO ?,79
  674. @?Jä
  675. lc_message = "@AYä    &Editing paste string.   Move Window:F7?"
  676. lc_message = IIF("500" $ VERSION(1), ;
  677.                  LEFT( lc_message, LEN( lc_message) - 17) , lc_message)
  678. IF .NOT. "500" $ VERSION(1)
  679.    ON KEY LABEL @Eà    F7? DO _MoveWind WITH WINDOW(), lc_message
  680. ENDIF
  681. ACTIVATE WINDOW _edpaste
  682. SET MESSAGE TO lc_message
  683. @ 0,0 GET gc_cut PICTURE "@S78"
  684. READ
  685. ON KEY LABEL @K¡à    F7?
  686. SET MESSAGE TO
  687. RELEASE WINDOW _edpaste
  688. RESTORE SCREEN FROM _edpaste
  689. RELEASE SCREEN _edpaste
  690. SET DELIMITERS &lc_deli.
  691. SET FORM TO (lc_form)
  692. @RZå8P ?RETURN
  693.  
  694. @Utå    -N8V    * 8BPROCEDURE _MoveWind
  695. PARAMETER wind_name, message
  696. @Xц8P ?*----------------------------------------------------------
  697. *- Move the &wind_name. window based on arrow keys.  Any 
  698. *- other key stops the move process.
  699. *----------------------------------------------------------
  700. ON KEY LABEL @]┴ç    F7?
  701. ON ERROR ?? CHR(7)
  702. SET MESSAGE TO
  703. DO WHILE .T.
  704.   SET MESSAGE TO @aê    ;[Position: ]+CHR(27)+CHR(26)+CHR(25)+CHR(24)+[   Exit: Esc]?
  705.   ln_keyhit = INKEY(0)
  706.   IF ln_keyhit <> 0
  707.     DO CASE
  708.       CASE ln_keyhit = kn_RghtArw               && Right arrow
  709.          MOVE WINDOW &wind_name. BY 0,1
  710.       CASE ln_keyhit = kn_UpArw                 && Up arrow
  711.          MOVE WINDOW &wind_name. BY -1,0
  712.       CASE ln_keyhit = kn_LeftArw               && Left arrow
  713.          MOVE WINDOW &wind_name. BY 0,-1
  714.       CASE ln_keyhit = kn_DownArw               && Down Arrow
  715.          MOVE WINDOW &wind_name. BY 1,0
  716.       OTHERWISE
  717.          EXIT
  718.     ENDCASE
  719.   ENDIF
  720. ENDDO
  721. ON ERROR
  722. ON KEY LABEL @sOè    F7? DO _MoveWind WITH WINDOW(), "&message."
  723. SET MESSAGE TO message
  724. @u½è8P ?RETURN
  725. *-- EOP: _MoveWind
  726.  
  727. @y┘è    -N8V    * 8BFUNCTION _numdec
  728. PARAMETER ln_dec
  729. IF ln_dec - INT(ln_dec) > 0
  730.    RETURN .T.
  731. ELSE
  732.    RETURN .F.
  733. ENDIF
  734. *-- EOF: _numdec
  735.  
  736. @ââï    -N8V    * 8BFUNCTION Center
  737. *-- UDF to center a string.
  738. *-- lc_string = String to center
  739. *-- ln_width = Width of screen to center in
  740. *--
  741. *-- Ex. @ 15,center(string,80) say string
  742. *-- Will center the <string> withing 80 columns
  743. PARAMETER lc_string, ln_width
  744. RETURN ((ln_width/2)-(LEN(lc_string)/2))
  745. *-- EOP: Center()
  746.  
  747. @ÅΘî    -N8V    * 8BPROCEDURE _key_vars
  748. *----------------------------------------------------------------------------
  749. * Enumerate the key values for LASTKEY() and INKEY() functions
  750. *
  751. * To check for the Escape key after the INKEY()
  752. *   ln_key = INKEY(0)   && Wait for any key press
  753. *   IF ln_key = kn_Esc  && Escape was pressed
  754. *     DO esc_hand
  755. *   ENDIF
  756. *
  757. *----------------------------------------------------------------------------
  758. IF TYPE("kn_end") = "U"
  759. @¥╓Ä8P ?PUBLIC kn_End     , kn_Tab     , kn_Enter   , kn_CtrlEnd , kn_CtrlY   , ;
  760.        kn_Home    , kn_Esc     , kn_CtrlHme , kn_CtrlPDn , kn_CtrlPUp , ;
  761.        kn_Space   , kn_BakSpce , kn_RghtArw , kn_UpArw   , kn_LeftArw , ;
  762.        kn_DownArw , kn_PgDn    , kn_PgUp    , kn_F1      , kn_Del     , ;
  763.        kn_CtrLArw , kn_CtrRArw , kn_f7      , kn_ShftF7
  764.  
  765.   kn_End     =   2      && Ctrl-B
  766.   kn_Tab     =   9      && Ctrl-I
  767.   kn_Enter   =  13      && Ctrl-M
  768.   kn_CtrlEnd =  23      && Ctrl-W
  769.   kn_CtrlY   =  25
  770.   kn_Home    =  26      && Ctrl-Z
  771.   kn_Esc     =  27      && Ctrl-[
  772.   kn_CtrlHme =  29      && Ctrl-]
  773.   kn_CtrlPDn =  30      && Ctrl-PgDn
  774.   kn_CtrlPUp =  31      && Ctrl-PgUp
  775.   kn_Space   =  32
  776.   kn_BakSpce = 127
  777.   kn_RghtArw =   4      && Ctrl-D
  778.   kn_UpArw   =   5      && Ctrl-E
  779.   kn_LeftArw =  19      && Ctrl-S
  780.   kn_DownArw =  24      && Ctrl-X
  781.   kn_PgDn    =   3      && Ctrl-C
  782.   kn_PgUp    =  18      && Ctrl-R
  783.   kn_F1      =  28      && Ctrl-  kn_Del     =   7      && Ctrl-G
  784.   kn_CtrLArw =   1      && Ctrl-A
  785.   kn_CtrRArw =   6      && Ctrl-F
  786.   kn_F7      =  -6
  787.   kn_ShftF7   = -26
  788.  
  789. *----------------------------------------------------------------------------
  790. * Enumerate the key values for READKEY()
  791. *
  792. * To check to see if data has changed
  793. *
  794. *   IF READKEY() >= rn_updated   && Data has changed
  795. *     REPLACE name WITH m->name
  796. *   ENDIF
  797. *
  798. * To check for page down regardless of data change
  799. *
  800. *   ln_readkey = READKEY()
  801. *   IF ln_readkey = rn_PgDn .OR. ln_readkey = rn_PgDn+rn_Updated
  802. *     DO pgdn_hand
  803. *   ENDIF
  804. *
  805. *----------------------------------------------------------------------------
  806. PUBLIC rn_Updated , rn_LeftArw , rn_BakSpce , rn_RghtArw , rn_CtrLArw , ;
  807.        rn_CtrRArw , rn_UpArw   , rn_DownArw , rn_PgUp    , rn_PgDn    , ;
  808.        rn_Esc     , rn_CtrlEnd , rn_Enter   , rn_EnterA  , rn_CtrlHme , ;
  809.        rn_CtrlPUp , rn_CtrlPDn , rn_F1
  810.  
  811.   rn_Updated = 256      && Add to rn_key value for updated condition
  812.   rn_LeftArw =   0      && Includes Ctrl-S and Ctrl-H - backward one character
  813.   rn_BakSpce =   0      && backward one character                                   
  814.   rn_RghtArw =   1      && Includes Ctrl-D and Ctrl-L - forward one character
  815.   rn_CtrLArw =   2      && Ctrl-Left Arrow, includes Ctrl-A - previous word
  816.   rn_CtrRArw =   3      && Ctrl-Right Arrow, includes Ctrl-F - next word
  817.   rn_UpArw   =   4      && Includes Ctrl-E and Ctrl-K - backward one field
  818.   rn_DownArw =   5      && Includes Ctrl-J and Ctrl-X - forward one field
  819.   rn_PgUp    =   6      && Includes Ctrl-R - backward one screen
  820.   rn_PgDn    =   7      && Includes Ctrl-C - forward one screen
  821.   rn_Esc     =  12      && Includes Ctrl-Q - Terminate w/o save
  822.   rn_CtrlEnd =  14 + rn_updated  && Includes Ctrl-W - Terminate w/save
  823.   rn_Enter   =  15      && Includes Ctrl-M  RETURN of fill last record
  824.   rn_EnterA  =  16      && Enter at the beginning of a record in APPEND
  825.   rn_CtrlHme =  33      && Ctrl-Home - Menu display toggle
  826.   rn_CtrlPUp =  34      && Ctrl-PgUp - Zoom Out
  827.   rn_CtrlPDn =  35      && Ctrl-PgDn - Zoom In
  828.   rn_F1      =  36      && Help function key
  829. @σA¢8P ?ENDIF
  830.  
  831. RETURN
  832. *-- EOP: _key_vars
  833.  
  834. @δt¢<@∞~¢<@∞~¢@≡╠¢.╕₧@≡╠¢:@⌡¼£82 8< 88* @÷∙£    _H    .DBF8W /l£    .DBT8W /l£@ⁿl₧@²w₧.C¥@²w₧    ;Enter dbf name for help support or press ENTER to continue      8X@■╙₧ 82 8< 88* @  ƒ    _H    .DBF8W /4¥    .DBT8W /4¥@}ƒ>@}ƒ@àƒ@àƒ@îƒ>j@╠ƒ8F @╠ƒ8I 0e₧9╩₧@≥ƒ /▒¥@
  835. á@5á##>@5á@
  836. [áS9┌⌐@ Çá /Φ¥@ ùá>@ ùá@┐áL9Ŭ@τá /₧@í>@í@0íS9≡¬@Yí /V₧@sí>@sí@üí,.f¥@üí@Åí0û₧0û₧0û₧0û₧/ú₧@╒í;@∩í;@
  837. ó<@
  838. ó@Vó.Mƒ@Vó:@ ╫ó    POPUPSü87 8= 8.     21+ƒ@!ú    BROWSESü87 8= 8.     228ƒ@"Sú;@$mú;@&êú<@&êú@)╘ú.╙ƒ@)╘ú:@+Sñßü9Φ     4╛ƒ@,Åñ        @-╗ñ
  839. ,@.╬ñ;@/▀ñ@0Θñ;@1⌠ñ<@1⌠ñ@4@Ñ. í@4@Ñ:@<√ª8= 8.@='º 23á@?]º    ;@@wº@Bàº<@C▓º 8<@D┌º 86 <@F¿ @G4¿86 @I£¿@J▐¿86@K,⌐ 8<@Lg⌐ 9í@M£⌐ 8<@N╝⌐ 8T@O╘⌐ ;@Q·⌐<@Q·⌐@TF¬.
  840. ú@TF¬:@WѬ86@X╟¬ 8=@Zε¬  @Zε¬@\½ 3Ωó     ORDER 8< 8. 1Ωó@]H½     REQ 8< 8. 1Ωó@^é½     SHADOW 8< 8. 1Ωó@_╝½     FIELDS 8< 8. 1Ωó@`÷½     UPDATE 8< 8. 1Ωó@a0¼     FORMAT 8< 8. 1Ωó@bj¼     FROM 8< 8. 1Ωó@cñ¼     REPLACE 8< 8. 1Ωó@dß¼     ZOOM 8< 8. 1Ωó@h=¡ *.[í@h=¡@iF¡ @jZ¡<@jZ¡@qw«.»ú@qw«:@|░    ->@}░    =9σƒ@~l░ 8/@▓░ 8.@ǰ░ <@éE▒ 9Æ ;@âg▒<@âg▒@å│▒.°ú@å│▒:@êΘ▒8<    l_ 9Æ ;@ë ▓<@ë ▓@îl▓.╒ñ@îl▓:@ö┤│    ORDER 9σƒ@ò┤      8.@û#┤ 2Æñ@ù?┤86 8<@ÿç┤ @ÖÆ┤.╗ñ@ÖÆ┤8<@Ü╟┤ @Ü╟┤@¢╙┤>9Æ ;@£÷┤<@£÷┤@ƒB╡.çÑ@ƒB╡:@ºæ╢    ->@¿╕╢9σƒ@⌐╖      8.@½%╖ 2GÑ.kÑ@½%╖< @½%╖@¡x╖9Æ ;@«Ü╖<@«Ü╖@▒µ╖.╒Ñ@▒µ╖:@│ ╕9τñ 8<    l_ 8> ;@┤e╕<@┤e╕@╖▒╕.êª@╖▒╕:@╣╣     REQ 8= 8. /ª.,ª@╣╣@╣╣0}ª@║Z╣     REQ"8= 8. /Xª.kª@║Z╣@║Z╣@╗ö╣/~ª@╗ö╣;@╝ñ╣<@╝ñ╣@┐≡╣.Aº@┐≡╣:@┴G║     SHADOW 8= 8. /╧ª.Γª@┴G║@┴G║06º@┬ç║     SHADOW"8= 8. /º.$º@┬ç║@┬ç║@├─║/7º@├─║;@─╘║<@─╘║@╟ ╗.·º@╟ ╗:@╔z╗     UPDATE 8= 8. /êº.¢º@╔z╗@╔z╗0∩º@╩║╗     UPDATE"8= 8. /╩º.▌º@╩║╗@╩║╗@╦≈╗/≡º@╦≈╗;@╠╝<@╠╝@╧S╝.⌐@╧S╝:@╙ß╝     FORMAT 8= 8. /A¿.T¿@╙ß╝@╙ß╝@╓9╜/±¿    Sü    FORMAT 9σƒ@╫x╜     .8. /¥¿.╡¿@╫x╜    .fmt@╫x╜@╪╦╜8W /╘¿.τ¿@╪╦╜@╪╦╜@┘╛@█╛;@▄)╛<@▄)╛@▀u╛.e⌐@▀u╛:@ß═╛     FROM 8= 8. /I⌐.\⌐@ß═╛@ß═╛;@Γ┐<@Γ┐@σQ┐.╚⌐@σQ┐:@τ¡┐     FIELDS 8= 8. /¼⌐.┐⌐@τ¡┐@τ¡┐;@Φτ┐<@Φτ┐@δ3└.}¬@δ3└:@φ₧└     ZOOM 8= 8. /¬. ¬@φ₧└@φ₧└0r¬@ε▄└     ZOOM"8= 8. /M¬.`¬@ε▄└@ε▄└@∩┴/s¬@∩┴;@≡'┴<@≡'┴@≤s┴.▐¬@≤s┴:@⌡╒┴    RECALC8= 8. /┬¬.╒¬@⌡╒┴@⌡╒┴;@÷┬<@÷┬@∙^┬.B½@∙^┬:@√┐┬         REPLACE 8= 8. /&½.9½@√┐┬@√┐┬;@ⁿ²┬<@ⁿ²┬@ I├.¼@ I├:@¢├6╕½@├├?,?,?,86 ?
  841. @(─.²½@(─ ?,?,?,86 ?
  842. @ç─@ô─<@í─<@í─@    φ─. «@    φ─:@▒┼        FROM 9σƒ 8= 8T@·┼ 0g¼    ;@·┼@F╞    TO8. < 8T@û╞     ,8. <@╧╞     ,8. 8<@#╟     TO8. 8< 8T@p╟     ,8. <@┌╟ 8? 5T¡.p¡@┌╟ @┌╟@ ╚    ,8. 8<@ å╚ 8? O5╗¡.╙¡@ å╚M8; @ å╚@"╢╚    ,    ,    ,8B@#Φ╚<@$÷╚<@$÷╚@'B╔.±«@'B╔:@+╙╔    Sü    FIELDS 9σƒ@, ╩ !86@.-╩ Sü9Sº@0Ü╩ /▐«!8= 8= 8. <@1÷╩      /R@2╦!8= 8= 8. 8< ;@4k╦;@6î╦<@6î╦@9╪╦.3»@9╪╦:@;;╠    Sü    FROM 9σƒ ;@<m╠<@<m╠@?╣╠.y»@?╣╠:@A ═        FORMAT 9σƒ 9Æ@BV═ ;<@BV═@D`═.╜»@D`═:@F╬═        ZOOM 9σƒ 9Æ ;@G╬<@G╬@I╬.!╖@I╬:@KG╬(8< 88 8>@L|╬    Z_ 0'░@MÉ╬;@Nƒ╬@O¿╬    *    -N8V 8BPROCEDURE @Q╪╬?
  843. *-- Branch to another EDIT form based on lc_var
  844. PARAMETER lc_var
  845. PRIVATE ALL LIKE l?_*
  846.  
  847. ON KEY LABEL @VK╧    F9?
  848. SAVE SCREEN TO @Wg╧?
  849. lc_area = ALIAS()
  850. ll_edit = .F.
  851. SELECT SELECT()
  852. DO CASE
  853. @\┐╧j@]▄╧8F @]▄╧8I 0┤S9┌⌐@^╨ /≥│S9ú    CASE lc_var = "@`2╨=?"
  854. @aV╨#4ì▓      IF FILE("@bå╨?.dbf")
  855.          USE @c⌐╨? ORDER S9
  856. ñ 8T ?
  857. @dδ╨@80     C2é▓         lc_var = IIF( EMPTY( TRIM( lc_var)), lc_var, TRIM( lc_var))
  858. @fd╤@hç╤.│@hç╤         SELECT ("@iè╤8= <2Ω▓@j─╤8<    A @k╥.√▓@k╥@k╥?")
  859. @lO╥         SEEK &lc_area.->&lc_var.
  860.  
  861.          IF FILE("@oë╥S9ï» 82     .FMT?")
  862.              SET FORMAT TO @p╫╥S9ï» 82 ?
  863.          ENDIF
  864.          ll_edit = .T.
  865. @sJ╙#4δ│      ENDIF
  866. @uç╙@vÿ╙@w¼╙,.P▒@w¼╙   OTHERWISE
  867.        KEYBOARD CHR( kn_CtrlHme ) CLEAR          && Gets user into memo field
  868. ENDCASE
  869.  
  870. IF ll_edit
  871.    EDIT NEXT 1                                   && Edit the Zoomed record
  872. ENDIF
  873.  
  874. @üü╘#4δ┤USE
  875. @â░╘SELECT (lc_area)                                 && Back to edit work area
  876. RESTORE SCREEN FROM @à╒?
  877. RELEASE SCREEN @å(╒?
  878. @çD╒/Γ╡ON KEY LABEL @êY╒    F1? DO (8< 88 8>    H_ ? WITH VARREAD()
  879. @ë»╒@è╣╒/M╢ON KEY LABEL @ï╨╒    F5? DO (8< 88 8>    R_ ? WITH VARREAD()
  880. @î(╓ON KEY LABEL @ì3╓    F6? DO _Cut
  881. ON KEY LABEL @ÄV╓    F8? DO _Paste
  882. ON KEY LABEL @Å}╓    Ctrl-F5? DO _Edpaste
  883. ON KEY LABEL @É¿╓    F9? DO ? WITH VARREAD()
  884. RETURN
  885. *-- EOP: @ÆΩ╓?
  886. @ô╫<@ô╫@ò ╫.Ω╗@ò ╫:@ù:╫(8< 88 8>@ÿq╫    R_ 0ï╖@Öç╫;@Üû╫@¢ƒ╫0╤╖@£┤╫9÷D 0╛╖@¥╬╫;@₧ß╫@á ╪9≈E@í╪@ó(╪    *    -N8V 8BPROCEDURE @ñX╪?
  887. *-- Recalculate calculated fields
  888. PARAMETER lc_var
  889. PRIVATE ALL LIKE l?_*
  890. ON KEY LABEL @¿╜╪    F5?
  891.  
  892. @¬▌╪    .tmp8s@½ⁿ╪8v  @¼┘
  893. 4ε╕DO CASE
  894.    CASE lc_var $ "@»4┘ ?"
  895. @░O┘8P@▒d┘@▓l┘    @│ê┘j@┤á┘8F @┤á┘8I 0╗9_ƒ@╡╕┘ /¥╣8v  @╢╥┘8P@╖τ┘ ?
  896.  CASE lc_var $ "@╣∞┘ ?"
  897. @║┌8P@╗┌@╝&┌½W9╤5@╜n┌ %?2∙║L9Ŭ /∙║*-- Calculated field: @╛¡┌=9Æ ? - L?
  898. @ @┐≡┌ß9Φ     ?,]9Φ ? SAY @┴l█M@┬ÿ█8F @┬ÿ█8I 0₧║M?@├│█,.x║@├│█ @╞▄9B /ß║PICTURE "@╟2▄9hA" @╚U▄@╔c▄9j; ?
  899. @╦y▄@╠â▄,.#╣@╠â▄@═ì▄
  900. 4L╗@╬ñ▄8P@╧▒▄ ?ENDCASE
  901. @╤╜▄
  902. ON KEY LABEL @╙╚▄    F5? DO (8< 88 8>    R_ ? WITH VARREAD()
  903. RETURN
  904. *-- EOP: @╒(▌?
  905. @╓@▌8t@╫O▌    .tmp8{@╪p▌ ;@╪p▌@┌z▌.X╝@┌z▌:@▄ß▌/P╝    .tmp8D@▌ ▐"8B@▐=▐    .fmt8D@▀]▐@αe▐<@αe▐@π▒▐.▌┴@π▒▐:@τL▀0û╝@Φc▀;@Θr▀@δ}▀    @φ£▀j@ε╡▀8F @ε╡▀8I 0╞┴S9≡¬@∩√▀ /╖┴=8< 88 8>    U_ @≡Lα    *    -N8V 8BPROCEDURE @≥Çα?
  906.    PARAMETER is_edit, key_field
  907.    *-- Update Look'ed up fields for @⌠┬α=9Æ ?
  908.  
  909. @÷ß    POPUPS87 8= 8. /÷╜   SEEK key_field
  910.  
  911. @∙Sß@·`ß8P@√pß9∩┴@ⁿôß9╟─@²╡ß8P@■┼ß ?
  912.    IF is_edit
  913. @┘ßj@÷ß8F @÷ß8I 0⌐┴Sü9≡¬ /Ü┴2Ü┴@0Γ    Sü    REPLACE 9σƒ 8=@Γ >@Γ86 @¬Γ4W┴     WITH8. < 8=@ Γ      M-> 8= 8.@2π /`┐     M-> 8= 8. 8< @    wπ.q┐@    wπ @    wπ@
  914. òπj@ ╝π8F @ ╝π8I 0╪└8T= 2╔└@ ·π½üWü9╤5 %      @ @]Σßü?,]ü? GET @èΣ    M-> 8= 8.@┴Σ /7└ ?@²Σ.l└@²Σ<ü9Æ ?->@5σ=ü9Æ ?@lσ@ëσ9B /┤└ PICTURE "@╕σ9ó@" @▄σ9j; ?@µ
  915. @"µ.╪└@>µ@Xµ,.û┐@Xµ@pµ    ,8. 40┴@óµ    ,8. 8<@≥µ @ τ.K┴@ τ@!,τ    @!,τ@"Cτ>.╚╛@"Cτ   ENDIF
  916. RETURN
  917. *-- EOP: @&lτ?
  918.  
  919. @(ìτ.⌐┴@)áτ@*░τ,.p╛@*░τ@+┐τ@,╩τ,.╦╝@,╩τ@-╘τ<@.▐τ<@.▐τ@1*Φ.╡─@1*Φ:@5╩Φ@7·Φ    Sü    REPLACE 9σƒ 8=@:qΘ >@:qΘ86 @;ÆΘ4É─    M->     WITH8. < 8= 8. 0ε├@=Ω/─┬    REPLACE 8B@?<Ω@@JΩ.≥┬@@JΩ    , ;8U 8B@AwΩ @AwΩ@BåΩ><ü9Æ     ->@C║Ω     WITH8. < 8T 9Æ @E/δ     WITH 8B@GAδ    WITH8. 8< 8T 9Æ@HÖδ      , 8. 4┘├@I╜δ     , 8. <@J÷δ  >@J÷δ@L∞ 8B@M∞@N)∞    ,8. 4i─@OP∞    ,8. 8< @Pò∞8T 86 2^─@Rπ∞    >@Rπ∞@T²∞.à─@T²∞@Uφ    >@Uφ@V"φ.9┬@V"φ@W+φ8B@X<φ<@YHφ<@YHφ@[Rφ.°╞@[Rφ:@`÷φ    Sü    REPLACE 9σƒ 8=@bwε >@bwε86 @cÿε4ß╞    M->     WITH8. < 8= 8.@e∩ /?╞@fA∩     WITH8. < 8T 9Æ @hÆ∩     = 8B@j╗∩    WITH8. 8< 8T 9Æ@k≡      , 8. 4&╞@l7≡     , 8. <@mp≡  >@mp≡@n≡ 8B@o£≡@q¬≡    ,8. 4║╞@r╤≡    ,8. 8<@s± 8T 86 2»╞@ud±    >@ud±@w~±.╓╞@w~±@xù±    >@xù±@yú±.┼@yú±@z¼±<@{╕±<@{╕±@}┬±.║╚@}┬±:@Ç ≥j8F @Ç ≥8I 0ú╚?2ö╚IF TYPE("M->@éK≥=?") = "U"
  920.    m->@âp≥=? = @äï≥@80     C2╥╟@à║≥J86    SPACE(     )8B@å⌠≥@ç≤@80     NF8.@ê7≤ /╚    08B@ëR≤@èd≤@80     D2=╚@ïÆ≤    {      }8B@î╢≤@ì╚≤@80     L2n╚@Ä÷≤    .F.8B@Å⌠@É,⌠8B@æD⌠ ?ENDIF
  921. @öQ⌠@ò_⌠,./╟@ò_⌠@ûj⌠<@ùy⌠<@ùy⌠@<
  922. 4Hccb_form.codT╛ccb_form.defUδbuiltin.def:ïMccb_fext.cod