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