home *** CD-ROM | disk | FTP | other *** search
/ The Developer Connection…ice Driver Kit for OS/2 3 / DEV3-D1.ISO / devtools / dataflex / fmac < prev    next >
Encoding:
Text File  |  1993-10-27  |  156.8 KB  |  5,670 lines

  1. #REM  DataFlex standard MACROs
  2. #REM  Copyright 1987-1992 Data Access Corporation, Miami FL, USA
  3. #REM  All Rights reserved.
  4. #REM  THIS IS THE FILE THAT DEFINES THE COMMANDS IN DATAFLEX VERSION 3.01
  5. #REM  IT MUST BE PACKed INTO FLEX.CFL WITH THE COMMAND "DFPACK FMAC"
  6.  
  7. #REM  GENERAL FORMAT OF AN ICODE LINE:
  8.  
  9. #REM  !A [] $000 ARG1 ARG2
  10. #REM  !A Generates the next line number
  11. #REM  [] is a place holder for the indicators
  12. #REM  $000 is a hex number that calls the appropriate 'C' routine
  13. #REM  arg1, arg2 - two arguments of any type/class
  14. #REM           can be passed to the routine.
  15.  
  16. #REM  THE FOLLOWING ARE THE COMPILE-TIME VARIABLES USED
  17. #REM  UPPERCASE WILL AUTO-INCREMENT (FIRST);
  18. #REM  LOWER CASE WILL NOT.  THEN SUBSTITUTE TO AN INTEGER VALUE.
  19.  
  20. #REM  !A - Next line number
  21. #REM  !B - Reserved
  22. #REM  !C - Next indicator number
  23. #REM  !D - Next integer number
  24. #REM  !E - Autopage, window #
  25. #REM  !F - Autopage, page #
  26. #REM  G,H,I,J,K,L,M - You may use these
  27. #REM  !N - Static nesting level
  28. #REM  !O - Reserved
  29. #REM  !P - Used by report
  30. #REM  !Q - Low level temporary
  31. #REM  !R - Static structure number (Begin/End)
  32. #REM  !S - Temporary used by end/loop/until
  33. #REM  !T,!U - Reserved
  34. #REM  !V - Next variable number.
  35. #REM  !W - Reserved
  36. #REM  !X - Temporary for enter & report - file numbers.
  37. #REM  !Y - Temporary for keyproc
  38. #REM  !Z - Reserved
  39.  
  40. #REM Type checking in command args use negative logic and
  41. #REM conform to the following:
  42.  
  43. #REM C - Constant      V - Memory variable 
  44. #REM F - File element      G - Group           
  45. #REM W - Window
  46. #REM S - String        E - Expression      
  47. #REM N - Number        L - Label           
  48. #REM D - Date          O - Group options   
  49. #REM I - Integer       B - Group indicators
  50. #REM # - Indicator     . - No more arguments         
  51. #REM X - Not an indicator  R - Argument required
  52. #REM T - Error if typed    $ - Changes window to string      
  53. #REM U - Error if untyped  "constant" - Must be constant
  54.  
  55. #REM Example: #COMMAND EXAMPLE SND means arg1 cannot be string,number,or date
  56.  
  57. #COMMAND ABORT &.
  58.   !A [] $040
  59. #ENDCOMMAND
  60.  
  61. #COMMAND ACCEPT #L #L #LUC #LUWFC .
  62.   #SET Q$ !0
  63.   #IF !q=0
  64.     AUTO2$ ACCEPT PAGE!f
  65.   #ELSE
  66.     #IF !q=1
  67.       #IFCLASS !1 "G"
  68.         AUTO2$ ACCEPT PAGE!f !1
  69.       #ELSE
  70.         #CHECK !1 _CVFG#L
  71.         !A [] $1C1 !1 |CI0
  72.       #ENDIF
  73.     #ELSE
  74.       #IF !q=2
  75.         #IFCLASS !2 "G"
  76.           #FORMAT !1 !2
  77.           #CHECK !1 _CVFG#L
  78.           !A [] $1C1 !1 |CI0
  79.         #ELSE
  80.           AUTO2$ ACCEPT PAGE!f TO !2
  81.         #ENDIF
  82.       #ELSE
  83.         #IF !q>2
  84.           #IFCLASS !3 "G"
  85.             #CHECK !1 "TO"
  86.             AUTO2$ ACCEPT PAGE!f TO !2 !3
  87.           #ELSE
  88.             #IFCLASS !4 "G"
  89.               #FORMAT !1 !4
  90.             #ENDIF
  91.             #CHECK !1 _CVFG#L
  92.             #CHECK !2 "TO"
  93.             #CHECK !3 _CG#LE
  94.             !A [] $1C1 !1 !3
  95.           #ENDIF
  96.         #ENDIF
  97.       #ENDIF
  98.     #ENDIF
  99.   #ENDIF
  100. #ENDCOMMAND
  101.  
  102. #COMMAND APPEND #LGULCE$ #LGULR$
  103.   !A [] $243 !1 !2
  104.   #IF !0>2
  105.     APPEND !1 !3 !4 !5 !6 !7 !8 !9
  106.   #ENDIF
  107. #ENDCOMMAND
  108.  
  109. #COMMAND ASCII &#GRLU "TO" #UGRLCE .
  110.   !A [] $247 !1 !3
  111. #ENDCOMMAND
  112.  
  113. #COMMAND ATTACH CVWR#LGE
  114.   #IFDEF !1
  115.     !A [] $C5 !1
  116.   #ELSE
  117.     #CHECK !1.RECNUM _CVWLR#GU
  118.     !A [] $C5 !1.RECNUM
  119.   #ENDIF
  120.   #IF !0>1
  121.     ATTACH !2 !3 !4 !5 !6 !7 !8 !9
  122.   #ENDIF
  123. #ENDCOMMAND
  124.  
  125. #REM  The AUTO commands are used internally to generate the 
  126. #REM  next AUTOPAGE window number at compile time.
  127.  
  128. #COMMAND AUTO2$
  129.   !1 !2.!E !3 !4 !5
  130.   #CHECK !2.!e _RUCVF#L
  131. #ENDCOMMAND
  132.  
  133. #COMMAND AUTO3$
  134.   !1 !2 !3.!E !4 !5
  135.   #CHECK !3.!e _RUCVF#L
  136. #ENDCOMMAND
  137.  
  138. #COMMAND AUTO4$
  139.   !1 !2 !3 !4.!E !5
  140.   #CHECK !4.!e _RUCVF#L
  141. #ENDCOMMAND
  142.  
  143. #COMMAND AUTOPAGE &T %USNVLE# .
  144.   #CHECK !1.N _WFVSG#LU
  145.   #SET F$ !1.N
  146.   #SET E$ !2
  147.   #IF !e>0
  148.     #SET E$ !e-1
  149.   #ENDIF
  150. #ENDCOMMAND
  151.  
  152. #REM BACKFIELD can only be used in a KEY PROCedure. It returns to the
  153. #REM window (COMMAND) PRIOR to the one that called it.
  154.  
  155. #COMMAND BACKFIELD &.
  156.   !A [] $288
  157. #ENDCOMMAND
  158.  
  159. #COMMAND BEGIN &.
  160.   #SET N$ !N
  161.   #PUSH !R
  162.   #XPUSH !n $INIT  // Init IF/ELSE stack at this nesting level.
  163.   #IFIND //INCLUDE JUMPS IF INDICATORS ON LINE.
  164.     // GOTO BEGIN$!r
  165.     !A [] $041 |CI0
  166.     #FREF BEGIN$!r !a
  167.     #$ !A 0 0 0 $041 |CL0
  168.     #FREF END$!r !a
  169.   #ENDIF
  170.   #$ BEGIN$!r:
  171. #ENDCOMMAND
  172.  
  173. #COMMAND BLANKFORM &%CVFG#EL  "THRU""THROUGH""" %CVFG#LUE .
  174.   #IF !0>0
  175.     #IFDEF !1
  176.       !A [] $1C4 !1 !3
  177.     #ELSE
  178.       #CHECK !1.N _#RLGVU
  179.       !A [] $1C4 !1.N
  180.     #ENDIF
  181.   #ELSE
  182.     !A [] $1C4 |CI0
  183.   #ENDIF
  184. #ENDCOMMAND
  185.  
  186. #COMMAND BREAK$             // does breakpoint for all
  187.   #IF (!0>0)
  188.     #IFCLASS !1 _F
  189.       BREAKPOINT |CI!P !1
  190.     #ELSE
  191.       #CHECK !1 _LGBCVWIEOU#
  192.     #ENDIF
  193.   #ENDIF
  194.   #IF (!0>1)
  195.     BREAK$ !2 !3 !4 !5 !6 !7 !8 !9
  196.   #ENDIF
  197. #ENDCOMMAND
  198.  
  199. #COMMAND BREAK$DOWN R           // does gosub to break
  200.   #IF !x>0                // sections from N to 0
  201.     #IF !0>1
  202.       // GOSUB !1!x
  203.       !A [] $42 |CL0
  204.       #FREF !1!x !a
  205.     #ELSE
  206.       //[!x] GOSUB !1!x
  207.       !A [!x] $42 |CL0
  208.       #FREF !1!x !a
  209.     #ENDIF
  210.   #ENDIF
  211.   #SET X$ !x-1
  212.   #IF !x>0
  213.     BREAK$DOWN !1 !2
  214.   #ENDIF
  215. #ENDCOMMAND
  216.  
  217. #COMMAND BREAK$PRT          // prints all SUBHEADERs
  218.   #IF !x<!p               // for page
  219.     #IFDEF !1!X.N
  220.       !A [~ !x] $202 !1!x.N  // OUTPUT
  221.     #ENDIF
  222.     BREAK$PRT !1 !2
  223.   #ENDIF
  224. #ENDCOMMAND
  225.  
  226. #COMMAND BREAK$T3
  227.   #IF !x<!p               // makes unused sections defined
  228.     MAKEDEF$ RPT.SUBHEADER!X RPT.SUBTOTAL!x
  229.     BREAK$T3
  230.   #ENDIF
  231. #ENDCOMMAND
  232.  
  233. #COMMAND BREAK$UP           // does GOSUB to break
  234.   #IF !x<!p               // sections from 0 to N
  235.     #IF !0=1
  236.       //[!X] GOSUB !1!x
  237.       !A [!X] $42 |CL0
  238.       #FREF !1!x !a
  239.     #ELSE
  240.       // GOSUB !1!X
  241.       !A [] $42 |CL0
  242.       #FREF !1!X !a
  243.     #ENDIF
  244.     BREAK$UP !1 !2
  245.   #ENDIF
  246. #ENDCOMMAND
  247.  
  248. #COMMAND BREAKINIT  &.  // set up breakpoints for REPORT
  249.   !A [] $207
  250. #ENDCOMMAND
  251.  
  252. #COMMAND BREAKPOINT &UVFW UCI   // test breakpoint and set indicators
  253.   !A [] $204 !1 !2
  254. #ENDCOMMAND
  255.  
  256. #COMMAND CALCULATE &#ULG "TO" #UCLGER .
  257.   #IFTYPE !3 "R"
  258.     !A [] $085 !1 !3 //MOVE REAL
  259.   #ELSE
  260.     !A [] $081 !1 !3 //MOVE NUM
  261.   #ENDIF
  262. #ENDCOMMAND
  263.  
  264. #COMMAND CHAIN RNDIG#L  NDG#L
  265.   #SET Q$ 0
  266.   #IFSAME !1 WAIT
  267.     CHAIN$HELP !3 !4 !5 !6 !7 !8 !9
  268.     !A [] $049 !2 |CI!q
  269.   #ELSE
  270.     #CHECK !1 _U
  271.     CHAIN$HELP !2 !3 !4 !5 !6 !7 !8 !9
  272.     !A [] $045 !1 |CI!q
  273.   #ENDIF
  274. #ENDCOMMAND
  275.  
  276. #COMMAND CHAIN$HELP UVNDEG#L
  277.   #IF (!0>0)
  278.     #SET Q$ (!q+!1)
  279.     CHAIN$HELP !2 !3 !4 !5 !6 !7 !8 !9
  280.   #ENDIF
  281. #ENDCOMMAND
  282.  
  283. #COMMAND CHARACTER &#%GULD "TO" #GRULCE .
  284.   !A [] $248 !1 !3
  285. #ENDCOMMAND
  286.  
  287. #COMMAND CLEAR CVWR#LGE
  288.   #IFDEF !1
  289.     !A [] $C1 !1
  290.   #ELSE
  291.     #CHECK !1.RECNUM _CVWLR#GU
  292.     !A [] $C1 !1.RECNUM
  293.   #ENDIF
  294.   #IF !0>1
  295.     CLEAR !2 !3 !4 !5 !6 !7 !8 !9
  296.   #ENDIF
  297. #ENDCOMMAND
  298.  
  299. #COMMAND CLEAR_OPTION #LGRE . // Clears window options which
  300.   #IFCLASS !1 _C           // have been set ON by set option
  301.     #SET Q$ !1           // or by dfsetup.
  302.     !A [] $04B |CI!q |CI0       // CLEAR_OPTION AUTORETURN
  303.   #ELSE
  304.     !A [] $04B !1 |CI0      // .
  305.   #ENDIF
  306. #ENDCOMMAND
  307.  
  308. #COMMAND CLEARFORM &%CVFG#LE  "THRU""THROUGH""" %CVFG#LUE .
  309.   #IF !0>0
  310.     #IFDEF !1
  311.       !A [] $1C3 !1 !3 |CI0
  312.     #ELSE
  313.       #CHECK !1.N _R#LGVU
  314.       !A [] $1C3 !1.N |CI0
  315.     #ENDIF
  316.   #ELSE
  317.     !A [] $1C3 |CI0
  318.   #ENDIF
  319. #ENDCOMMAND
  320.  
  321. #COMMAND CLEARSCREEN & .
  322.   !A [] $144 !1
  323. #ENDCOMMAND
  324.  
  325. #COMMAND CLEARWARNING &.
  326.   !A [] $048
  327. #ENDCOMMAND
  328.  
  329. #COMMAND CLEARXY &%#USGL %#USGLR .
  330.   !A [] $146 !1 !2
  331. #ENDCOMMAND
  332.  
  333. #COMMAND CLOSE RTE
  334.   #CHECK !1.RECNUM _CVWLR#GU
  335.   !A [] $181 !1.RECNUM
  336.   #IF (!0>1)
  337.     CLOSE !2 !3 !4 !5 !6 !7 !8 !9
  338.   #ENDIF
  339. #ENDCOMMAND
  340.  
  341. #COMMAND CLOSE_INPUT 
  342.   #IFSAME !1 CHANNEL
  343.     !A [] $10A |CI0 !2
  344.   #ENDIF
  345.   !A [] $100 |CS'CON:'
  346. #ENDCOMMAND
  347.  
  348. #COMMAND CLOSE_OUTPUT 
  349.   #IFSAME !1 CHANNEL
  350.     !A [] $10A |CI1 !2
  351.   #ENDIF
  352.   !A [] $101 |CS'LST:'
  353. #ENDCOMMAND
  354.  
  355. #COMMAND CMDLINE &#RLUGE .
  356.   !A [] $24A !1 |CS''
  357. #ENDCOMMAND
  358.  
  359. #COMMAND COPYFILE &#LGU "TO" R#LGU .
  360.   !A [] $2C5 !1 !3
  361. #ENDCOMMAND
  362.  
  363. #COMMAND CONSTRAINT_SET R#LG """DELETE""CLEAR"
  364.   #IFSAME !2 DELETE
  365.     !A [] $0DA !1    // DELETE 
  366.   #ELSE
  367.     #IFSAME !2 CLEAR
  368.       !A [] $0DA !1    // DELETE FIRST
  369.     #ENDIF
  370.     !A [] $0D0 !1   // QUERY ID
  371.   #ENDIF
  372. #ENDCOMMAND
  373.  
  374. #COMMAND CONSTRAINT_SAVE_INIT .
  375.   !A [] $0DE
  376. #ENDCOMMAND
  377.  
  378. #COMMAND CONSTRAINT_VALIDATE .
  379.   !A [] $0DF
  380. #ENDCOMMAND
  381.  
  382. #COMMAND CONSTRAINT_INIT r r "BY" r // mode file by index
  383.   #IFSAME !1 $0 $1 $2 $3 $4 $5
  384.     #SET Q$ !1
  385.     MOVE |CI!q TO INDEX_NUMBER
  386.   #ELSE
  387.     MOVE !1 TO INDEX_NUMBER
  388.   #ENDIF
  389.   #IFDEF !2
  390.     !A [] $0D6 !2 !4    // VARIABLE FILE NUMBER
  391.   #ELSE
  392.     #SET Q$ !2.RECNUM   // FILE NAME ONLY
  393.     !A [] $0D6 |CI!q !4
  394.   #ENDIF
  395. #ENDCOMMAND
  396.  
  397. #COMMAND CONSTRAINED_CLEAR
  398.   #IF !0>0
  399.     CONSTRAINT_INIT !1 !2 !3 !4
  400.   #ENDIF
  401.   !A [] $DC   // Find clear
  402. #ENDCOMMAND
  403.  
  404. #COMMAND CONSTRAIN R
  405.   #IFSAME !2 AS
  406.     #CHECK !3 CFLVNSWG#
  407.     #CHECK !1.RECNUM R#ULWVC
  408.     #SET Q$ !1.RECNUM
  409.     !A [] $DB |CI!q !3        // FILE AS (BOOL-EXP)
  410.   #ELSE
  411.     #IFSAME !2 BETWEEN      // FIELD BETWEEN A AND B
  412.       #CHECK !4 "AND"
  413.       CONSTRAIN !1 GE !3
  414.       CONSTRAIN !1 LE !5
  415.     #ELSE
  416.       #IFSAME !2 RELATES
  417.         #CHECK !3 "TO"
  418.         #IFDEF !1
  419.           #IFDEF !4
  420.             !A [] $D9 !1 !4        // FILE RELATES TO FILE
  421.           #ELSE
  422.             !A [] $D9 !1 !4.FILE_NUMBER // FILE RELATES TO FILE
  423.           #ENDIF
  424.         #ELSE
  425.           #IFDEF !4
  426.             !A [] $D9 !1.FILE_NUMBER !4 
  427.           #ELSE
  428.             !A [] $D9 !1.FILE_NUMBER !4.FILE_NUMBER
  429.           #ENDIF
  430.         #ENDIF
  431.       #ELSE
  432.         #CHECK !1 R#LWVCEBG
  433.         #IF !0>1
  434.           #IFSAME !2 MATCHES
  435.             #SET Q$ 6
  436.           #ELSE
  437.             #IFSAME !2 CONTAINS
  438.               #SET Q$ 7
  439.             #ELSE
  440.               #CHECK !2 _U
  441.               #SET Q$ !2
  442.             #ENDIF
  443.           #ENDIF
  444.           MOVE |CI!q TO INDEX_NUMBER
  445.           #IFCLASS !3 "F"
  446.             !A [] $D2 !1 !3 // FILE MODE FILE
  447.           #ELSE
  448.             !A [] $D1 !1 !3 // FILE MODE VALUE
  449.           #ENDIF
  450.         #ELSE
  451.           #CHECK !1 CVW#GRE
  452.           !A [] $D3 !1 // FIELD ONLY
  453.         #ENDIF
  454.       #ENDIF
  455.     #ENDIF
  456.   #ENDIF
  457. #ENDCOMMAND
  458.  
  459. #COMMAND CONSTRAINED_FIND // MODE FILE by INDEX
  460.   #IFSAME !1 NEXT
  461.     #IF !0>1
  462.       !A [] $0D0 !2   // QUERY ID
  463.     #ENDIF
  464.     !A [] $D8       // find NEXT
  465.   #ELSE
  466.     #IFSAME !1 FIRST
  467.       CONSTRAINED_CLEAR GE !2 !3 !4
  468.     #ELSE
  469.       #IFSAME !1 LAST
  470.         CONSTRAINED_CLEAR LE !2 !3 !4
  471.       #ELSE
  472.         #IF !0>0
  473.           CONSTRAINT_INIT !1 !2 !3 !4
  474.         #ENDIF
  475.         // THIS USES RB DATA ,IT DOES NOT CLEAR THE rb.
  476.       #ENDIF
  477.     #ENDIF
  478.     !A [] $D7  |CI0 // find init, sets found on status of constrained relates.
  479.     !A [FOUND] $D8  // find NEXT (first)
  480.   #ENDIF
  481. #ENDCOMMAND
  482.  
  483. #COMMAND DATE TR
  484.   #NUM V$
  485.   #REPLACE !1 |VD!v
  486.   #IF (!0>1)
  487.     DATE !2 !3 !4 !5 !6 !7 !8 !9
  488.   #ENDIF
  489. #ENDCOMMAND
  490.  
  491. #COMMAND DEBUG &.
  492.   !A [] $044
  493. #ENDCOMMAND
  494.  
  495. #COMMAND DECREMENT &#LCNSFWGRUE .
  496.   !A [] $087 !1 |CI0
  497. #ENDCOMMAND
  498.  
  499. #COMMAND DELETE CVWR#LGE
  500.   #IFDEF !1
  501.     !A [] $C3 !1
  502.   #ELSE
  503.     #CHECK !1.RECNUM _CVWLR#GU
  504.     !A [] $C3 !1.RECNUM
  505.   #ENDIF
  506.   #IF !0>1
  507.     DELETE !2 !3 !4 !5 !6 !7 !8 !9
  508.   #ENDIF
  509. #ENDCOMMAND
  510.  
  511. #COMMAND DESPOOL &. // This calls the system despool command, if available.
  512.   !A [] $2C6        // Multiuser only, and only if the OS has program-
  513. #ENDCOMMAND     // call-able Despool (many don't!)
  514.  
  515. #COMMAND DIRECTORY &R#LGU .
  516.   !A [] $2C4 !1
  517. #ENDCOMMAND
  518.  
  519. #COMMAND DIRECT_INPUT 
  520.   #IFSAME !1 CHANNEL
  521.     !A [] $10A |CI0 !2
  522.     #IF !0>2
  523.       DIRECT_INPUT !3 !4
  524.     #ENDIF
  525.   #ELSE
  526.     #IFSAME !1 DBMS IMAGE
  527.       #IFSAME !1 IMAGE
  528.         #SET Q$ !2.N
  529.         !A [] $100 |CS"!1:!q"
  530.       #ELSE
  531.         !A [] $100 |CS"!1:!2"
  532.       #ENDIF
  533.     #ELSE
  534.       #CHECK !2 .
  535.       !A [] $100 !1
  536.     #ENDIF
  537.   #ENDIF
  538. #ENDCOMMAND
  539.  
  540. #COMMAND DIRECT_OUTPUT 
  541.   #IFSAME !1 CHANNEL
  542.     !A [] $10A |CI1 !2
  543.     #IF !0>2
  544.       DIRECT_OUTPUT !3 !4
  545.     #ENDIF
  546.   #ELSE
  547.     #IFSAME !1 DBMS IMAGE
  548.       #IFSAME !1 IMAGE
  549.         #SET Q$ !2.N
  550.         !A [] $101 |CS"!1:!q"
  551.       #ELSE
  552.         !A [] $101 |CS"!1:!2"
  553.       #ENDIF
  554.     #ELSE
  555.       #CHECK !2 .
  556.       !A [] $101 !1
  557.     #ENDIF
  558.   #ENDIF
  559. #ENDCOMMAND
  560.  
  561. #COMMAND APPEND_OUTPUT 
  562.   #IFSAME !1 CHANNEL
  563.     !A [] $10A |CI1 !2
  564.     #IF !0>2
  565.       APPEND_OUTPUT !3 !4
  566.     #ENDIF
  567.   #ELSE
  568.     #IFSAME !1 DBMS IMAGE
  569.       #IFSAME !1 IMAGE
  570.         #SET Q$ !2.N
  571.         !A [] $101 |CS"!1:!q" |CI2
  572.       #ELSE
  573.         !A [] $101 |CS"!1:!2" |CI2
  574.       #ENDIF
  575.     #ELSE
  576.       #CHECK !2 .
  577.       !A [] $101 !1 |CI2
  578.     #ENDIF
  579.   #ENDIF
  580. #ENDCOMMAND
  581.  
  582. #COMMAND DISKFREE #LIDNRUG "TO" #LDRCUGE .
  583.   !A [] $2d5 !3 !1
  584. #ENDCOMMAND
  585.  
  586. #COMMAND DISPLAY RUG#L
  587.   #IF !0>2
  588.     #CHECK !2 "TO"
  589.     #CHECK !3 _RGC#LE
  590.     !A [] $1C2 !1 !3
  591.     #IF !0>3
  592.       #CHECK !4 _#LWFCV
  593.       #FORMAT !3 !4
  594.     #ENDIF
  595.   #ELSE
  596.     AUTO4$ DISPLAY !1 TO PAGE!f !2
  597.   #ENDIF
  598. #ENDCOMMAND
  599.  
  600. #COMMAND ELSE
  601.   #$ !A [] $41 |CI0 //jump over else code.
  602.   #XPOP !n S$ // GET GOTO LINE NUMBER FROM LAST IF.
  603.   #XPUSH 1 !a // Save line number of ELSE jump.
  604.   #XPUSH 0 !n // Save static nest level.
  605.   #FREF (!a+1) !s // Modify goto line number with ELSE command
  606.   !1 !2 !3 !4 !5 !6 !7 !8 !9
  607.   #XPOP 0 Q$  // Restore static nest level to Q.
  608.   #XPOP 1 S$  // Restore line number of else jump.
  609.   #IF (!n>!q)
  610.     #FREF END$!r !s // Modify ELSE jump to after BEGIN block.
  611.   #ELSE
  612.     #FREF (!a+1) !s // Modify ELSE jump to after the ELSE command.
  613.   #ENDIF
  614. #ENDCOMMAND
  615.  
  616. #COMMAND END &.
  617.   #POP S$
  618.   #IFDEF WHILE$!s
  619.     !A [] $041 WHILE$!s
  620.   #ENDIF
  621.   END$!s:
  622.   #SET N$ !n-1
  623. #ENDCOMMAND
  624.  
  625. #COMMAND ENDGROUP &.
  626.   //ENTUPDATE         // update record buffer
  627.   !A [] $280 |CI0
  628.   //GOTO ENT$END!x
  629.   !A [] $41 |CL0
  630.   #FREF ENT$END!x !a
  631.   //RETURN            // RETURN stops entry command list
  632.   !A [] $43 |CI0
  633.   ENT$END!x:
  634. #ENDCOMMAND
  635.  
  636. #COMMAND ENT$KEY
  637.   ENT$DISP:
  638.   IF ENTER$DISPLAY NE 0 BEGIN
  639.     !A [FOUND] $042 ENTER$DISPLAY
  640.   END
  641.   ELSE BEGIN
  642.     [FOUND] ENTDISPLAY // JUST DO AN ENTDISPLAY
  643.   END
  644.   //              ENTAGAIN
  645.   !A [] $287
  646.   //              RETURN
  647.   !A [] $43 |CL0
  648.   
  649.   //<<<<<<< STANDARD KEY PROCEDURES FOR ENTER GROUP >>>>>>>>>>
  650.   //KEYPROC KEY.FIND
  651.   ENTER$.FIND:
  652.   //              ENTFIND GE          // no, FIND
  653.   !A [] $281 |CI3
  654.   #KEYPROC 7 !a
  655.   //              GOTO ENT$DISP
  656.   !A [] $41 ENT$DISP
  657.   
  658.   //KEYPROC KEY.NEXT                  // FIND next record
  659.   ENTER$.NEXT:
  660.   //              ENTFIND GT
  661.   !A [] $281 |CI4
  662.   #KEYPROC 15 !a
  663.   //              GOTO ENT$DISP
  664.   !A [] $41 ENT$DISP
  665.   
  666.   //KEYPROC KEY.PREVIOUS              // FIND prv record
  667.   ENTER$.PREVIOUS:
  668.   //              ENTFIND LT
  669.   !A [] $281 |CI0
  670.   #KEYPROC 14 !a
  671.   //              GOTO ENT$DISP
  672.   !A [] $41 ENT$DISP
  673.   //KEYPROC KEY.UP
  674.   //KEYPROC KEY.FIELD                 // BACK FIELD
  675.   ENTER$.FIELD:
  676.   //              BACKFIELD
  677.   !A [] $288
  678.   #KEYPROC 16 !a
  679.   #KEYPROC 6 !a
  680.   //              RETURN
  681.   !A [] $43 |CI0
  682.   //KEYPROC KEY.CLEAR                 // CLEAR SCREEN
  683.   ENTER$.CLEAR:
  684.   //              INDICATE ERR FALSE
  685.   !A [] $4028 |CI0 |CI0 |127
  686.   #KEYPROC 13 !a
  687.   !A []           $284 // ENTCLEAR
  688.   //              RETURN
  689.   !A [] $43 |CI0
  690.   //KEYPROC KEY.SAVE
  691.   ENTER$.SAVE:
  692.   !A []           $285 // ENTSKIP
  693.   #KEYPROC 9 !a
  694.   //              RETURN
  695.   !A [] $43 |CI0
  696.   //KEYPROC KEY.HELP
  697.   ENTER$.HELP:
  698.   //HELP
  699.   !A [] $1C5 |CI0
  700.   #KEYPROC 18 !a
  701.   //ENTAGAIN
  702.   !A [] $287
  703.   //RETURN
  704.   !A [] $43 |CI0
  705.   
  706.   // KEYPROC KEY.PRINT
  707.   ENTER$.PRINT:
  708.   // output current page
  709.   !A [] $202 |VI9
  710.   #KEYPROC 2 !a
  711.   //ENTAGAIN and RETURN
  712.   !A [] $287
  713.   !A [] $43 |CI0
  714. #ENDCOMMAND
  715.  
  716. #REM ENTAGAIN can only be used in a KEY PROCedure. It returns to the
  717. #REM same window (COMMAND) that called the KEY PROCedure.
  718.  
  719. #COMMAND ENTAGAIN &.
  720.   !A [] $287
  721. #ENDCOMMAND
  722.  
  723. #COMMAND ENTDISPLAY &TCVWG#LE .  // Display all entries for a file
  724.   #IF (!0>0)
  725.     //RELATE !1
  726.     !A [] $C4 !1.RECNUM
  727.   #ENDIF
  728.   //display from entry section
  729.   !A [] $283
  730. #ENDCOMMAND
  731.  
  732. #COMMAND ENTER CVWSRL#E
  733.   //              INDICATE CONTINUE TRUE
  734.   #REPLACE CONTINUE |!C
  735.   !A [] $4028 |CI0 |CI0 CONTINUE~
  736.   //              INDICATE ENT$QUERY FALSE
  737.   #REPLACE ENT$QUERY |9
  738.   !A [] $4028 |CI0 |CI0 |9
  739.   #IF !0>0            // ENT$QUERY tells us if
  740.     #SET X$ !1.RECNUM           // we are in QUERY(SUPERFIND) mode
  741.   #ELSE
  742.     #SET X$ 0
  743.   #ENDIF
  744.   //MOVEINT |CI!x TO |VI8     // set ENTMFILE (ENTER's main file variable)
  745.   !A [] $82 |CI!x |VI8        // to main file for ENTSFIND
  746.   ENT$LP:             // start of enter loop
  747.   //              GOSUB ENTRYSEC      // do ENTRY section
  748.   !A [] $042 |CL0
  749.   #FREF ENTRYSEC !a
  750.   //[KEY.ESCAPE]      GOTO END_ENTER      // dropped thru
  751.   !A [|103] $041 |CL0
  752.   #FREF END_ENTER !a
  753.   //              INDICATE ERR FALSE      // set error false
  754.   !A [] $4028 |CI0 |CI0 |127
  755.   // temp disable ON ERROR
  756.   !A [] $82 |VI31 |VI32
  757.   !A [] $82 |CI0 |VI31
  758.   //              REREAD          // multiuser reread
  759.   !A [|120] $0C9
  760.   //[ENT$QUERY]       GOSUB ENTER.EDIT    // user procedure
  761.   !A [|9] $042 |CL0
  762.   #FREF ENTER.EDIT !a
  763.   //[NOT ERR]         ENTUPDATE       // update files from ENTRY
  764.   !A [~|127] $280 |CI0
  765.   //[NOT ERR]         GOSUB ENTER.SAVE    // user procedure
  766.   !A [~|127] $042 |CL0
  767.   #FREF ENTER.SAVE !a
  768.   [NOT ERR]       MULTIBACK$ SAVE !1 !2 !3 !4 !5 !6 !7 !8 !9  // save
  769.   //              UNLOCK          //multiuser
  770.   !A [|120] $0C8
  771.   //[NOT ERR]         GOSUB ENT$CLEAR     // clear screen
  772.   !A [~ |127] $042 |CL0
  773.   #FREF ENT$CLEAR !a
  774.   // RE ENABLE ON ERROR
  775.   !A [] $82 |VI32 |VI31
  776.   //[CONTINUE]        GOTO ENT$LP         // loop
  777.   !A [CONTINUE] $041 ENT$LP
  778.   //              GOTO END_ENTER      // end if NOT CONTINUE
  779.   !A [] $041 |CL0
  780.   #FREF END_ENTER !a
  781.   // this clears the screen and all data files
  782.   ENT$CLEAR:          MULTIBACK$ CLEAR !1 !2 !3 !4 !5 !6 !7 !8 !9
  783.   //              INDICATE ENT$QUERY FALSE
  784.   !A [] $4028 |CI0 |CI0 |9
  785.   //              ENTCLEAR - clear ENTRY section
  786.   !A [] $284
  787.   //              RETURN
  788.   !A [] $043 |CI0
  789.   //<<<<<<< STANDARD KEY PROCEDURES FOR ENTER >>>>>>>>>>
  790.   //KEYPROC KEY.SAVE
  791.   ENTER$.SAVE:
  792.   !A []           $285 //ENTSKIP (skip rest of entries)
  793.   #KEYPROC 9 !a
  794.   //              RETURN
  795.   !A [] $043 |CI0
  796.   //KEYPROC KEY.DELETE
  797.   //              INDICATE ERR FALSE      //default
  798.   ENTER$.DELETE:
  799.   !A [] $4028 |CI0 |CI0 |127
  800.   #KEYPROC 10 !a
  801.   // DISABLE ON ERROR
  802.   !A [] $82 |VI31 |VI32
  803.   !A [] $82 |CI0 |VI31
  804.   //              REREAD
  805.   !A [|120] $C9
  806.   //[NOT ENT$QUERY]   ERROR 71    // check for active record
  807.   !A [~|9] $47 |CI71
  808.   //[NOT ERR]         GOSUB ENTER.DELETE      // user procedure
  809.   !A [~|127] $042 |CL0
  810.   #FREF ENTER.DELETE !a
  811.   //[NOT ERR]         GOSUB ENTER.EDIT    // user procedure
  812.   !A [~|127] $042 |CL0
  813.   #FREF ENTER.EDIT !a
  814.   //[NOT ERR]         DELETE !1       // delete records
  815.   !A [~|127] $C3 !1.RECNUM
  816.   [NOT ERR]       MULTIBACK$ SAVE !2 !3 !4 !5 !6 !7 !8 !9 // related
  817.   //              UNLOCK
  818.   !A [|120] $C8
  819.   //[NOT ERR]         GOSUB ENT$CLEAR       // clear systems
  820.   !A [~|127] $042 ENT$CLEAR
  821.   // enable ON ERROR
  822.   !A [] $82 |VI32 |VI31
  823.   //              RETURN ENTRYSEC
  824.   !A [] $43
  825.   #FREF ENTRYSEC !a
  826.   // will GOSUB here for all find keys //
  827.   //              INDICATE WAS$QUERY GROUP ANY [ENT$QUERY]
  828.   ENTER$.FIND:
  829.   #REPLACE WAS$QUERY |!C
  830.   !A [] $4020 |GB[|9] |GB[0] WAS$QUERY IN$GLANY |3
  831.   #KEYPROC 8 !a // SUPERFIND
  832.   #KEYPROC 7 !a // FIND
  833.   #KEYPROC 15 !a // NEXT
  834.   #KEYPROC 14 !a // PREVIOUS
  835.   //[KEY.SFIND]       INDICATE ENT$QUERY TRUE
  836.   !A [|108] $4028 |CI0 |CI0 |9~
  837.   //[NOT ENT$QUERY]   INDICATE ENT$QUERY AS |CI!x EQ |VI15    // query mode?
  838.   !A [~ |9] $4008 |CI!x |VI15 |9 |2
  839.   //[KEY.SFIND]         ENTSFIND GE
  840.   !A [|108] $282 |CI3
  841.   //[KEY.FIND][ENT$QUERY][ENT$PERMISSIVE] ENTFIND GE
  842.   !A [|107 |9 |10] $281 |CI3
  843.   //[KEY.FIND][ENT$QUERY][NOT ENT$PERMISSIVE] ENTSFIND GE   // yes, SUPERFIND
  844.   !A [|107 |9 ~ |10] $282 |CI3
  845.   //[KEY.FIND][NOT ENT$QUERY]     ENTFIND GE        // no, FIND
  846.   !A [|107 ~ |9] $281 |CI3
  847.   //[KEY.NEXT][ENT$QUERY]   ENTSFIND GT     // yes, SUPERFIND
  848.   !A [|115 |9] $282 |CI4
  849.   //[KEY.NEXT][NOT ENT$QUERY]     ENTFIND GT        // no, FIND
  850.   !A [|115 ~ |9] $281 |CI4
  851.   //[KEY.PREVIOUS][ENT$QUERY]     ENTSFIND LT       // yes, SUPERFIND
  852.   !A [|114 |9] $282 |CI0
  853.   //[KEY.PREVIOUS][NOT ENT$QUERY] ENTFIND LT        // no, FIND
  854.   !A [|114 ~ |9] $281 |CI0
  855.   [FINDERR]       INDCT$GROUP ENT$QUERY GROUP ANY [WAS$QUERY]
  856.   //!A [FOUND]        $283            // display records
  857.   !A [FOUND] $042 ENTER$DISPLAY
  858.   //              ENTAGAIN        // same window
  859.   !A [] $287
  860.   //              RETURN
  861.   !A [] $43 |CI0
  862.   ////// define ENTER's KEY PROCedures ////////////
  863.   // KEYPROC BACKFIELD
  864.   //              BACKFIELD
  865.   ENTER$.FIELD:
  866.   !A [] $288
  867.   #KEYPROC 16 !a
  868.   #KEYPROC 6 !a
  869.   ENTXRET://          RETURN
  870.   !A [] $43 |CL0
  871.   // KEYPROC CLEARSCREEN
  872.   ENTER$.CLEAR:
  873.   //              INDICATE ERR FALSE
  874.   !A [] $4028 |CI0 |CI0 |127
  875.   #KEYPROC 13 !a
  876.   //              GOSUB ENTER.CLEAR
  877.   !A [] $042 |CL0
  878.   #FREF ENTER.CLEAR !a
  879.   //[NOT ERR]         GOSUB ENT$CLEAR
  880.   !A [~ |127] $042 ENT$CLEAR
  881.   //              RETURN ENTRYSEC
  882.   !A [] $043
  883.   #FREF ENTRYSEC !a
  884.   // KEYPROC ESCAPE key
  885.   ENTER$.ESCAPE:
  886.   //              INDICATE ERR FALSE
  887.   !A [] $4028 |CI0 |CI0 |127
  888.   #KEYPROC 3 !a
  889.   //              GOSUB ENTER.EXIT
  890.   !A [] $42 |CL0
  891.   #FREF ENTER.EXIT !a
  892.   //[NOT ERR]         RETURN ENTXRET
  893.   !A [~ |127] $43 ENTXRET
  894.   //              RETURN
  895.   !A [] $43 |CI0
  896.   //KEYPROC KEY.HELP
  897.   //HELP
  898.   ENTER$.HELP:
  899.   !A [] $1C5 |CI0
  900.   #KEYPROC 18 !a
  901.   //ENTAGAIN
  902.   !A [] $287
  903.   //RETURN
  904.   !A [] $43 |CI0
  905.   //KEYPROC KEY.PRINT
  906.   //output current page
  907.   ENTER$.PRINT:
  908.   !A [] $202 |VI9
  909.   #KEYPROC 2 !a
  910.   //ENTAGAIN and RETURN
  911.   !A [] $287
  912.   !A [] $43 |CI0
  913.   
  914.   ENTRYSEC://         ENTERMODE       // start entry section
  915.   !A [] $82 |CI!a |VI14
  916.   !A [] $286
  917. #ENDCOMMAND
  918.  
  919. #COMMAND ENTEREND               // end of ENTER
  920.   MAKEDEF$ ENTER.SAVE ENTER.EDIT ENTER.DELETE ENTER.CLEAR ENTER.EXIT
  921.   //RETURN
  922.   !A [] $43 |CI0
  923.   #IFDEF ENTER.DISPLAY
  924.   #ELSE
  925.     ENTER.DISPLAY:
  926.     ENTDISPLAY
  927.     !A [] $43 |CI0
  928.   #ENDIF
  929.   END_ENTER:
  930.   // CLEARSCREEN
  931.   !A [] $144
  932. #ENDCOMMAND
  933.  
  934. #COMMAND ENTERGROUP .   // independent entry section
  935.   #IFDEF ENT$DISP
  936.   #ELSE
  937.     //INTEGER ENT$START
  938.     INTEGER ENT$END
  939.     //#$ GOTO ENTK$END
  940.     #$ !A [] $41 |CL0
  941.     #FREF ENTK$END !a
  942.     #$ ENT$KEY
  943.     #SET X$ 0
  944.     ENTK$END:
  945.   #ENDIF
  946.   
  947.   ENTRYSEC!X://       ENTERMODE       // start entry section
  948.   !A [] $82 |CI!a |VI14
  949.   !A [] $286
  950.   //              INDICATE ENT$QUERY FALSE
  951.   !A [] $4028 |CI0 |CI0 |9
  952. #ENDCOMMAND
  953.  
  954. #REM ENTERMODE defines the top of the ENTRY section.
  955.  
  956. #COMMAND ENTERMODE &.
  957.   //set start of ENTRY section
  958.   !A [] $082 |CI!a  |VI14
  959.   //clear SAVE key
  960.   !A [] $286
  961. #ENDCOMMAND
  962.  
  963. #REM ENTFIND FINDs a record based on the file/field of the last executed
  964. #REM ENTRY command, and displays the results on a FIND. THE FIND mode
  965. #REM is the only argument.
  966. #REM ENTFIND also maintains the ENT$QUERY indicator.
  967.  
  968. #COMMAND ENTFIND &"$0""$1""$2""$3""$4""$5"
  969.   !A [] $281 |CI!1
  970. #ENDCOMMAND
  971.  
  972. #COMMAND ENTRY RWV#LUG UVC#LF UFVW#BC
  973.   #IF !0=1
  974.     AUTO3$ ENTRY !1 PAGE!f
  975.   #ELSE
  976.     #IFTYPE !2 "O"
  977.       AUTO3$ ENTRY !1 PAGE!f !2
  978.     #ELSE
  979.       #CHECK !2 _RVCLE
  980.       #IFCLASS !1 "E"
  981.         !A [] $8000 !1 !2 {$C002,$C003 !3
  982.       #ELSE
  983.         !A [] $8000 !1 !2 !3
  984.       #ENDIF
  985.     #ENDIF
  986.   #ENDIF
  987. #ENDCOMMAND
  988.  
  989. #REM ENTSFIND (SUPERFIND) FINDs a record in the main file, based on the
  990. #REM file/field of the last ENTRY command, and displays the results.
  991. #REM This depends on the main file number being in SYSINT 8 (|VI8).
  992.  
  993. #COMMAND ENTSFIND &"$0""$1""$2""$3""$4""$5" .
  994.   !A [] $282 |CI!1
  995. #ENDCOMMAND
  996.  
  997. #REM ENTUPDATE moves all changed windows from the
  998. #REM window buffer to the record buffer
  999.  
  1000. #COMMAND ENTUPDATE &T .
  1001.   #IF !0>0
  1002.     !A [] $280 !1.RECNUM
  1003.   #ELSE
  1004.     !A [] $280 |CI0
  1005.   #ENDIF
  1006. #ENDCOMMAND
  1007.  
  1008. #COMMAND ERASEFILE &R#LGU .
  1009.   !A [] $2C1 !1
  1010. #ENDCOMMAND
  1011.  
  1012. #COMMAND ERROR &#L%RGU #LUG .
  1013.   !A [] $047 !1 !2
  1014. #ENDCOMMAND
  1015.  
  1016. #COMMAND ERROR_REPORT SU#LGO .
  1017.   #IF !0>0
  1018.     !A [] $04C !1
  1019.   #ELSE
  1020.     !A [] $04C |CI0
  1021.   #ENDIF
  1022. #ENDCOMMAND
  1023.  
  1024. #COMMAND FIELD_DEF _E U#LG "TO" #LGUCE #LGRUEC .
  1025.   #IFDEF !1
  1026.     !A [] $82 !1 FILENUMBER
  1027.   #ELSE
  1028.     #CHECK !1.RECNUM _U
  1029.     #SET Q$ !1.RECNUM
  1030.     !A [] $82 |CI!q FILENUMBER
  1031.   #ENDIF
  1032.   !A [] $82 !2 FIELDNUMBER
  1033.   !A [] $345 !4 !5
  1034. #ENDCOMMAND
  1035.  
  1036. #COMMAND FILELIST &R#%LG "TO""" #LUGCE #LUCGE .
  1037.   #IFSAME !1 NEXT
  1038.     !A [] $301 !3 !4
  1039.   #ELSE
  1040.     #IFSAME !1 PATHNAME
  1041.       !A [] $302 !3 !4
  1042.     #ELSE
  1043.       #CHECK !1 _U
  1044.       !A [] $82 !1 FILENUMBER
  1045.       !A [] $300 !3 !4
  1046.     #ENDIF
  1047.   #ENDIF
  1048. #ENDCOMMAND
  1049.  
  1050. #REM Put back into FILELIST.  The file number must be in "FILENUMBER"
  1051. #REM Three values are: ROOT NAME, DISPLAY NAME, LOGICAL NAME.
  1052.  
  1053. #COMMAND FILELIST$PUT &#LRU #LRU #LU
  1054.   #IF !0>2
  1055.     !A [] $309 !3
  1056.   #ENDIF
  1057.   !A [] $30A !1 !2
  1058. #ENDCOMMAND
  1059.  
  1060. #COMMAND FILE_MODE RT "READ_ONLY""SINGLE_USER""ALIAS""MASTER_ALIAS""DEFAULT" .
  1061.   #CHECK !1.RECNUM _CVWLR#GU
  1062.   #IFSAME !2 READ_ONLY
  1063.     !A [] $0CB !1.RECNUM |CI91
  1064.   #ELSE
  1065.     #IFSAME !2 SINGLE_USER
  1066.       !A [] $0CB !1.RECNUM |CI7
  1067.     #ELSE
  1068.       #IFSAME !2 DEFAULT
  1069.         !A [] $0CB !1.RECNUM |CI0
  1070.       #ELSE
  1071.         #IFSAME !2 ALIAS
  1072.           !A [] $0CB !1.RECNUM |CI130
  1073.         #ELSE
  1074.           #IFSAME !2 MASTER_ALIAS
  1075.             !A [] $0CB !1.RECNUM |CI128
  1076.           #ENDIF
  1077.         #ENDIF
  1078.       #ENDIF
  1079.     #ENDIF
  1080.   #ENDIF
  1081. #ENDCOMMAND
  1082.  
  1083. #REM FILE$MODE <FILE> <MODE NUMBER>
  1084. #REM    MODE VALUES (VALUES ARE ADDITIVE)
  1085. #REM    1   NO AUTOMATIC REREAD OF RECORD BUFFERS.
  1086. #REM    2   NO LOCKS (LOCK OR REREAD)
  1087. #REM    4   NO RE-READ OF BLOCK ZERO OF DATA FILE OR INDEXES
  1088. #REM    8   NO EDITS OF ACTIVE RECORDS (ERROR 66)
  1089. #REM    16  NO DELETES OF RECORDS (ERROR 63)
  1090. #REM    32  NO FINDS (ERROR 64)
  1091. #REM    64  NO CREATES OF NEW RECORDS. (ERROR 65)
  1092. #REM    128 ALWAYS RE_READ BLOCK 0
  1093. #REM Warning; Improper combinations of the above could disable
  1094. #REM multiuser checking and destroy the data base.
  1095. #REM 8 Thru 64 are non destructive and can be used in applications.
  1096. #REM FOR EXPERTS ONLY!
  1097.  
  1098. #COMMAND FILE$MODE RT #LGSU .
  1099.   #CHECK !1.RECNUM _RULG
  1100.   !A [] $0CB !1.RECNUM !2
  1101. #ENDCOMMAND
  1102.  
  1103. #COMMAND FILE_SIZE R#LGSD "TO" R#LGE #LUGE #LGUE .
  1104.   #IFDEF !1 // SET FILE SIZE
  1105.     #CHECK !3.RECNUM _RU
  1106.     #SET Q$ !3.RECNUM
  1107.     !A [] $343 |CI!q !1
  1108.   #ELSE
  1109.     #CHECK !1.RECNUM _U
  1110.     #SET Q$ !1.RECNUM
  1111.     !A [] $82 |CI!q FILENUMBER
  1112.     !A [] $341 !3 !4
  1113.     !A [] $82 STRMARK !5
  1114.   #ENDIF
  1115. #ENDCOMMAND
  1116.  
  1117. #COMMAND FIND &"$0""$1""$2""$3""$4""$5" R "BY""" % .
  1118.   #IFCLASS !2 "F"
  1119.     #CHECK !2 _U#LGWV
  1120.     #CHECK !3 .
  1121.     !A [] $0C0 !2 |CI!1
  1122.   #ELSE
  1123.     #CHECK !2.RECNUM _U#LGWV
  1124.     #CHECK !4 _RUL#GVFW
  1125.     #SET Q$ !2.RECNUM
  1126.     #SET Y$ !4
  1127.     !A [] $0C6 |FS!q.!y |CI!1
  1128.   #ENDIF
  1129. #ENDCOMMAND
  1130.  
  1131. #COMMAND FIND$PAGE "AT""COLORS""" #LUG U#LG .
  1132.   #IF !0>0
  1133.     #IFSAME !1 AT
  1134.       !A [] $1C8 !2 !3
  1135.     #ELSE
  1136.       #IFSAME !1 COLORS
  1137.         !A [] $1C9 !2 !3
  1138.       #ENDIF
  1139.     #ENDIF
  1140.   #ENDIF
  1141. #ENDCOMMAND
  1142.  
  1143. #REM  FLEX$INIT - STANDARD REPLACES
  1144. #REM  These are the standard symbols that are required for the compiler
  1145. #REM  This procedure will be automatically executed
  1146. #REM  when the compiler starts
  1147.  
  1148. #COMMAND FLEX$INIT &.
  1149.   #REPLACE CALC CALCULATE
  1150.   #REPLACE LT $0  // internal value for the find/indicate modes.
  1151.   #REPLACE LE $1
  1152.   #REPLACE EQ $2
  1153.   #REPLACE GE $3
  1154.   #REPLACE GT $4
  1155.   #REPLACE NE $5
  1156.   #REPLACE TRUE $1
  1157.   #REPLACE FALSE $0
  1158.   #REPLACE NOT ~
  1159.   #SET C$ 11
  1160.   #REPLACE LASTIF |!C
  1161.   #REPLACE ENT$PERMISSIVE |10
  1162.   #REPLACE IN$0 $4000
  1163.   #REPLACE IN$1 $4004
  1164.   #REPLACE IN$2 $4008
  1165.   #REPLACE IN$3 $400C
  1166.   #REPLACE IN$4 $4010
  1167.   #REPLACE IN$5 $4014
  1168.   #REPLACE IN$GLANY |0
  1169.   #REPLACE IN$GLALL |4
  1170.   #REPLACE IN$GRANY |0
  1171.   #REPLACE IN$GRALL |2
  1172.   #REPLACE IN$GMOR  |0
  1173.   #REPLACE IN$GMAND |1
  1174.   #REPLACE ERR |127
  1175.   #REPLACE ERRLINE |VI6
  1176.   #REPLACE LAST_CRIT_ERR |VI102
  1177.   #REPLACE EXT_CRIT_ERR |VI103
  1178.   #REPLACE FINDERR |126
  1179.   #REPLACE SEQEOF |125
  1180.   #REPLACE SEQEOL |121
  1181.   #REPLACE MULTIUSER |120
  1182.   #REPLACE FIELDINDEX |VI1
  1183.   #REPLACE WINDOWINDEX |VI2
  1184.   #REPLACE LASTERR |VI5
  1185.   #REPLACE KEYPRESS |123
  1186.   #REPLACE TERMCHAR |VI3
  1187.   #REPLACE FLEXKEY |VI4
  1188.   #REPLACE SCREENEND |VI17
  1189.   #REPLACE MEMAVAIL |VI18
  1190.   #REPLACE LASTENTRY |VI19
  1191.   #REPLACE FLX_REVISION |VI36
  1192.   #REPLACE ENTER$DISPLAY |VI38
  1193.   #REPLACE NOKEYCHECK |VI80
  1194.   #REPLACE CHAIN_DEPTH |VI81
  1195.   #REPLACE CURSOR_SET |VI82 // THESE ARE USED BY AUTOBACK
  1196.   #REPLACE CURSOR_RETURN |VI83
  1197.   #REPLACE MINIMUM_MEMORY |VI86 
  1198.   #REPLACE INDEX_NUMBER |VI90
  1199.   #REPLACE SCREEN_WIDTH |VI91
  1200.   #REPLACE KEY.ANY  |100
  1201.   #REPLACE KEY.RETURN   |101
  1202.   #REPLACE KEY.PRINT    |102
  1203.   #REPLACE KEY.ESCAPE   |103
  1204.   #REPLACE KEY.LEFT |104
  1205.   #REPLACE KEY.RIGHT    |105
  1206.   #REPLACE KEY.FIELD    |106
  1207.   #REPLACE KEY.FIND |107
  1208.   #REPLACE KEY.SFIND    |108
  1209.   #REPLACE KEY.SAVE |109
  1210.   #REPLACE KEY.DELETE   |110
  1211.   #REPLACE KEY.CALCULATE |111
  1212.   #REPLACE KEY.USER |112
  1213.   #REPLACE KEY.CLEAR    |113
  1214.   #REPLACE KEY.NEXT |115
  1215.   #REPLACE KEY.PREVIOUS |114
  1216.   #REPLACE KEY.UP   |116
  1217.   #REPLACE KEY.DOWN |117
  1218.   #REPLACE KEY.HELP |118
  1219.   #REPLACE KEY.USER2    |119
  1220.   #REPLACE NUMPAGE  |VI28
  1221.   #REPLACE NUMWINDOW    |VI29
  1222.   #REPLACE #$
  1223.   #SET F$ 1
  1224.   #REPLACE NEXT_MENU |VI127
  1225.   #REPLACE CURRENT_IMAGE |VI9
  1226.   #REPLACE CURRENT_WINDOW |VI7
  1227.   #REPLACE LAST_GOSUB |VI0
  1228.   #REPLACE FOUND |254
  1229.   #REPLACE STRMARK |VI12
  1230.   #REPLACE STRLEN |VI13
  1231.   //   ENTER & REPORT DEF'S
  1232.   #REPLACE LINECOUNT |VI10
  1233.   #REPLACE PAGECOUNT |VI11
  1234.   #REPLACE PAGEEND |VI25
  1235.   #REPLACE PAGEFEED |VI26
  1236.   #SET D$ 128   // INTEGERS NOW START HERE.
  1237.   #SET P$ 0
  1238.   #REPLACE AUTOFIND $C000
  1239.   #REPLACE AUTOFIND_GE $C000,$C008
  1240.   #REPLACE FINDREQ  $C001
  1241.   #REPLACE NOPUT    $C002
  1242.   #REPLACE NOENTER  $C003
  1243.   #REPLACE SKIPFOUND $C004
  1244.   #REPLACE RETAINALL $C005
  1245.   #REPLACE RETAIN    $C006
  1246.   #REPLACE FORCEPUT $C007
  1247.   #REPLACE DISPLAYONLY $C002,$C003
  1248.   #REPLACE CAPSLOCK $C023
  1249.   #REPLACE ZERO_SUPPRESS $C024
  1250.   #REPLACE SUPPRESS $C040=''
  1251.   #REPLACE FLOAT$ $C026
  1252.   #REPLACE UPPER $C023
  1253.   #REPLACE SIGNRT $C027
  1254.   #REPLACE CHECK $C012
  1255.   #REPLACE RANGE $C013
  1256.   #REPLACE REQUIRED $C022
  1257.   #REPLACE AUTORETURN $C028
  1258.   #REPLACE AUTOBACK   $C029
  1259.   #REPLACE NO_CALC    $C02B   // Disable Calculate (internal)
  1260.   #REPLACE MODAL_INSERT $C02A // Change insert style (internal)
  1261.   #REPLACE AUTOCLEAR $C02D
  1262.   #REPLACE WP_BACKSP $C02E
  1263.   #REPLACE PAGEBREAK |124
  1264.   #REPLACE FILL $C040
  1265.   #REPLACE POINTS $C080
  1266.   #REPLACE FILENUMBER |VI15
  1267.   #REPLACE FIELDNUMBER |VI16
  1268.   #REPLACE INDEX.1 |CI1   // the indexes are just integers.
  1269.   #REPLACE INDEX.2 |CI2
  1270.   #REPLACE INDEX.3 |CI3
  1271.   #REPLACE INDEX.4 |CI4
  1272.   #REPLACE INDEX.5 |CI5
  1273.   #REPLACE INDEX.6 |CI6
  1274.   #REPLACE INDEX.7 |CI7
  1275.   #REPLACE INDEX.8 |CI8
  1276.   #REPLACE INDEX.9 |CI9
  1277.   #REPLACE INDEX.10 |CI10
  1278.   #REPLACE INDEX.11 |CI11
  1279.   #REPLACE INDEX.12 |CI12
  1280.   #REPLACE INDEX.13 |CI13
  1281.   #REPLACE INDEX.14 |CI14
  1282.   #REPLACE INDEX.15 |CI15
  1283.   #REPLACE INDEX.BATCH |CI10
  1284.   #REPLACE RECNUM |CI0
  1285.   #REPLACE EXPORT_FILES 1
  1286.   #REPLACE EXPORT_ONLY 2
  1287.   #REPLACE SEQ_EXPORT 4
  1288.   #REPLACE INDIRECT_FILE.RECNUM |FS0,0&
  1289.   #REPLACE DESKTOP |CI2
  1290.   #REPLACE END_FUNCTION END_PROCEDURE
  1291.   #REPLACE PROCEDURE_RETURN FUNCTION_RETURN
  1292.  
  1293.   // These symbols are passed to the SYSCONF function to determine 
  1294.   // which OS specific item is returned.
  1295.   #REPLACE SYSCONF_TIMER_RESOLUTION     |CI0
  1296.   #REPLACE SYSCONF_DIR_SEPARATOR        |CI1
  1297.   #REPLACE SYSCONF_OS_SHORT_NAME        |CI2
  1298.   #REPLACE SYSCONF_OS_MAJOR_REV         |CI3
  1299.   #REPLACE SYSCONF_OS_MINOR_REV         |CI4
  1300.   #REPLACE SYSCONF_OS_NAME              |CI5
  1301.   #REPLACE SYSCONF_MACHINE_NAME         |CI6
  1302.   #REPLACE SYSCONF_FILE_MASK            |CI7
  1303.   #REPLACE SYSCONF_DATAFLEX_REV         |CI8
  1304.  
  1305.   #SET  N$ 2 // save 0,1 stacks for IF/ELSE
  1306.   #XPUSH !n $INIT
  1307.   #CHKSUB 0 1  // Verify the General Flex subsystem.
  1308. #ENDCOMMAND
  1309.  
  1310. #COMMAND FOR &ECFWGSNR#LU "FROM" %UGLR# "TO""" %UGL#
  1311.   #SET N$ !N
  1312.   #PUSH !R
  1313.   #XPUSH !n $INIT
  1314.   //MOVEINT !3 TO !1
  1315.   !A [] $082 !3 !1
  1316.   #IF (!0>3)
  1317.     // IF !1 LE !5 GOTO FOR$!r
  1318.     !A [] $4004 !1 !5 |11 |2
  1319.     !A [|11] $041 |CL0
  1320.     #FREF FOR$!r !a
  1321.   #ENDIF
  1322.   #$ !A 0 0 0 $041 |CL0
  1323.   #FREF END$!r !a
  1324.   #$ BEGIN$!r:
  1325.   #$ WHILE$!r:
  1326.   #IF !0=3
  1327.     #$ !A [] $083 !1
  1328.   #ELSE
  1329.     #$ !A [] $083 !1 !5
  1330.     #$ !A [|122] $041 |CL0
  1331.     #FREF END$!r !a
  1332.   #ENDIF
  1333.   FOR$!r:
  1334. #ENDCOMMAND
  1335.  
  1336. // FORMAT window {}
  1337. // FORMAT window THRU window {}
  1338.  
  1339. #COMMAND FORMAT RUVCFL#G
  1340.   #IF !0>2
  1341.     FORMAT$RANGE !1 !2 !3 !4 !5
  1342.   #ELSE
  1343.     #CHECK !2 _RVCFWL#BE
  1344.     #CHECK !3 .
  1345.     #FORMAT !1 !2
  1346.   #ENDIF
  1347. #ENDCOMMAND
  1348.  
  1349. #COMMAND FORMAT$RANGE ERUVCFL#G "THRU""THROUGH" ERUVCFL#G RVCFWL#B .
  1350.   #FORMAT !1 !4
  1351.   #IF (!1<!3)
  1352.     #SET Q$ !1
  1353.     FORMAT$RANGE |WS!Q THRU !3 !4
  1354.   #ENDIF
  1355. #ENDCOMMAND
  1356.  
  1357. #COMMAND FORMFEED &.    // just like PAGECHECK 500
  1358.   !A [] $203 |CI500 |CI0
  1359. #ENDCOMMAND
  1360.  
  1361. #COMMAND GET_ARGUMENT_SIZE "TO" _RUDCE#LGB .
  1362.   !A [] $24F !2
  1363. #ENDCOMMAND
  1364.  
  1365. #COMMAND GET_CURRENT_DIRECTORY "TO" _RUNRIDCE .
  1366.   !A [] $2D1 !2
  1367. #ENDCOMMAND
  1368.  
  1369. #COMMAND GET_ENVIRONMENT &RD#GOBLU "TO" _RCEUGOB# .
  1370.   !A [] $2CF !1 !3
  1371. #ENDCOMMAND
  1372.  
  1373. #COMMAND GOSUB &RVFWSNDE#G .
  1374.   #IFDEF !1
  1375.     !A [] $042 !1
  1376.   #ELSE
  1377.     !A [] $042 |CL0
  1378.     #FREF !1 !a
  1379.   #ENDIF
  1380. #ENDCOMMAND
  1381.  
  1382. #COMMAND GOTO &RVFWSNDE#G .
  1383.   #IFDEF !1
  1384.     !A [] $041 !1
  1385.   #ELSE
  1386.     !A [] $041 |CL0
  1387.     #FREF !1 !a
  1388.   #ENDIF
  1389. #ENDCOMMAND
  1390.  
  1391. #COMMAND GOTOXY &%#USGL %#USGLR .
  1392.   !A [] $145 !1 !2
  1393. #ENDCOMMAND
  1394.  
  1395. #COMMAND HELP &T .
  1396.   #IF !0>0
  1397.     #CHECK !1.N _U
  1398.     !A [] $1C5 !1.N
  1399.   #ELSE
  1400.     !A [] $1C5 |CI0
  1401.   #ENDIF
  1402. #ENDCOMMAND
  1403.  
  1404. #COMMAND IF LR
  1405.   #IFSAME !1 ~
  1406.     IFNOT !2 !3 !4 !5 !6 !7 !8 !9
  1407.   #ELSE
  1408.     #IFSAME !1 STATUS
  1409.       INDCT$STATUS LASTIF STATUS !2
  1410.       IF$HELP !3 !4 !5 !6 !7 !8 !9
  1411.     #ELSE
  1412.       #IFSAME !2 $0 $1 $2 $3 $4 $5 MATCH IN
  1413.         INDCT$AS LASTIF AS !1 !2 !3
  1414.         IF$HELP  !4 !5 !6 !7 !8 !9
  1415.       #ELSE
  1416.         #IFCLASS !1 "G"
  1417.           INDCT$GROUP LASTIF GROUP ALL !1
  1418.         #ELSE
  1419.           INDCT$AS LASTIF AS !1
  1420.         #ENDIF
  1421.         IF$HELP !2 !3 !4 !5 !6 !7 !8 !9
  1422.       #ENDIF
  1423.     #ENDIF
  1424.   #ENDIF
  1425. #ENDCOMMAND
  1426.  
  1427. #COMMAND IFNOT LR
  1428.   #IFSAME !1 ~
  1429.     IF !2 !3 !4 !5 !6 !7 !8 !9
  1430.   #ELSE
  1431.     #IFSAME !1 STATUS
  1432.       INDCT$STATUS LASTIF~ STATUS !2
  1433.       IF$HELP !3 !4 !5 !6 !7 !8 !9
  1434.     #ELSE
  1435.       #IFSAME !2 $0 $1 $2 $3 $4 $5 MATCH IN
  1436.         INDCT$AS LASTIF~ AS !1 !2 !3
  1437.         IF$HELP  !4 !5 !6 !7 !8 !9
  1438.       #ELSE
  1439.         #IFCLASS !1 "G"
  1440.           INDCT$GROUP LASTIF~ GROUP ALL !1
  1441.         #ELSE
  1442.           INDCT$AS LASTIF~ AS !1
  1443.         #ENDIF
  1444.         IF$HELP !2 !3 !4 !5 !6 !7 !8    !9
  1445.       #ENDIF
  1446.     #ENDIF
  1447.   #ENDIF
  1448. #ENDCOMMAND
  1449.  
  1450. #COMMAND IF_ LR // THIS IF_ WILL NOT WORK WITH ELSE!
  1451.   #IFSAME !1 ~
  1452.     IFNOT_ !2 !3 !4 !5 !6 !7 !8 !9
  1453.   #ELSE
  1454.     #IFSAME !1 STATUS
  1455.       INDCT$STATUS LASTIF STATUS !2
  1456.       [LASTIF] !3 !4 !5 !6 !7 !8 !9
  1457.     #ELSE
  1458.       #IFSAME !2 $0 $1 $2 $3 $4 $5 MATCH IN
  1459.         INDCT$AS LASTIF AS !1 !2 !3
  1460.         [LASTIF] !4 !5 !6 !7 !8 !9
  1461.       #ELSE
  1462.         #IFCLASS !1 "G"
  1463.           INDCT$GROUP LASTIF GROUP ALL !1
  1464.         #ELSE
  1465.           INDCT$AS LASTIF AS !1
  1466.         #ENDIF
  1467.         [LASTIF] !2 !3 !4 !5 !6 !7 !8 !9
  1468.       #ENDIF
  1469.     #ENDIF
  1470.   #ENDIF
  1471. #ENDCOMMAND
  1472.  
  1473. #COMMAND IFNOT_ LR // THIS IFNOT_ WILL NOT WORK WITH ELSE!
  1474.   #IFSAME !1 ~
  1475.     IF_ !2 !3 !4 !5 !6 !7 !8 !9
  1476.   #ELSE
  1477.     #IFSAME !1 STATUS
  1478.       INDCT$STATUS LASTIF~ STATUS !2
  1479.       [LASTIF] !3 !4 !5 !6 !7 !8 !9
  1480.     #ELSE
  1481.       #IFSAME !2 $0 $1 $2 $3 $4 $5 MATCH IN
  1482.         INDCT$AS LASTIF~ AS !1 !2 !3
  1483.         [LASTIF] !4 !5 !6 !7 !8 !9
  1484.       #ELSE
  1485.         #IFCLASS !1 "G"
  1486.           INDCT$GROUP LASTIF~ GROUP ALL !1
  1487.         #ELSE
  1488.           INDCT$AS LASTIF~ AS !1
  1489.         #ENDIF
  1490.         [LASTIF] !2 !3 !4 !5 !6 !7 !8 !9
  1491.       #ENDIF
  1492.     #ENDIF
  1493.   #ENDIF
  1494. #ENDCOMMAND
  1495.  
  1496. #COMMAND IF$HELP 
  1497.   !A [~LASTIF] $41 |CI0   // If LASTIF is false jump to end of IF command.
  1498.   #XPUSH 1 !a     // Save line number of jump at static nesting level.
  1499.   #XPUSH 0 !n     // Save nesting level in stack 0.
  1500.   !1 !2 !3 !4 !5 !6 !7 !8 !9
  1501.   #XPOP 0 Q$      // Restore nesting level into Q.
  1502.   #XPOP  1 S$     // Restore IF JUMP line number
  1503.   #XPUSH !q !s        // Push it back for the ELSE.
  1504.   #IF (!n>!q)     // after a begin
  1505.     #FREF END$!r !s    // Make IF JUMP goto end of begin block.
  1506.   #ELSE       // same or lower nesting level
  1507.     #FREF (!a+1) !s    // Make IF JUMP goto end of the IF.
  1508.   #ENDIF
  1509. #ENDCOMMAND
  1510.  
  1511. #COMMAND IFCHANGE R R
  1512.   #IFDEF !1
  1513.     #CHECK !1 _RFCVGE
  1514.     !A [] $1C6 !1
  1515.   #ELSE
  1516.     #CHECK !1.RECNUM _RWCVG
  1517.     !A [] $303 !1.RECNUM
  1518.   #ENDIF
  1519.   [|122] !2 !3 !4 !5 !6 !7 !8 !9
  1520. #ENDCOMMAND
  1521.  
  1522.  
  1523. #COMMAND INCREMENT &#LCNSFWGRUE .
  1524.   !A [] $083 !1 |CI0
  1525. #ENDCOMMAND
  1526.  
  1527. #COMMAND INDCT$$0 &
  1528.   !A [] $4028 |CI0 |CI0 !1 !3
  1529. #ENDCOMMAND
  1530.  
  1531. #COMMAND INDCT$$1 &RX R .
  1532.   !A [] $4028 |CI0 |CI0 !1~ !3
  1533. #ENDCOMMAND
  1534.  
  1535. #COMMAND INDCT$AS &RX "AS" LU "$0""$1""$2""$3""$4""$5""MATCH""IN""" #LUG .
  1536.   #IF (!0<4)
  1537.     #IFCLASS !3 "G"
  1538.       #CHECK !4 ""     // INDICATE IND1 AS IND2
  1539.       #CHECK !3 _SNDI#LO
  1540.       !A [] $4020 !3 |GB[0] !1 |3
  1541.     #ELSE
  1542.       // INDICATE IND AS X          
  1543.       #CHECK !3 _U
  1544.       #IFTYPE  !3 "R"
  1545.         !A [] IN$5 !3 |CR0 !1 |3
  1546.       #ELSE
  1547.         #IFTYPE  !3 "ND"
  1548.           !A [] IN$5 !3 |CN0 !1 |1
  1549.         #ELSE
  1550.           #IFTYPE !3 "IL"
  1551.             !A [] IN$5 !3 |CI0 !1 |2
  1552.           #ELSE
  1553.             #IFTYPE !3 "S"
  1554.               !A [] IN$5 !3 |CS"" !1 |0
  1555.             #ELSE
  1556.               #CHECK !3 _O
  1557.               !A [] $4020 !3 |GB[0] !1 IN$GLALL |3
  1558.             #ENDIF
  1559.           #ENDIF
  1560.         #ENDIF
  1561.       #ENDIF
  1562.     #ENDIF     
  1563.   #ELSE
  1564.     #CHECK !5 _R
  1565.     #IFSAME !4 MATCH
  1566.       !A [] $4031 !3 !5 !1 !6
  1567.     #ELSE
  1568.       #IFSAME !4 IN
  1569.         !A [] $4030 !3 !5 !1 !6
  1570.       #ELSE
  1571.         #CHECK !3 _U
  1572.         #IF2TYPE  !3 !5 "R"
  1573.           !A [] IN!4 !3 !5 !1 !6 |3
  1574.         #ELSE
  1575.           #IF2TYPE  !3 !5 "ND"
  1576.             !A [] IN!4 !3 !5 !1 !6 |1
  1577.           #ELSE
  1578.             #IF2TYPE !3 !5 "IL"
  1579.               !A [] IN!4 !3 !5 !1 !6 |2
  1580.             #ELSE
  1581.               !A [] IN!4 !3 !5 !1 !6 |0
  1582.             #ENDIF
  1583.           #ENDIF
  1584.         #ENDIF
  1585.       #ENDIF
  1586.     #ENDIF
  1587.   #ENDIF
  1588. #ENDCOMMAND
  1589.  
  1590. #COMMAND INDCT$GROUP &XR "GROUP" R"ALL""ANY" CVFWSN#LRU "AND""OR""" "ANY""ALL""" CVFWSN#LU .
  1591.   #IF !0>4
  1592.     #CHECK !7 _R
  1593.     !A [] $4020 !4 !7 !1 IN$GL!3 IN$GR!6 IN$GM!5
  1594.   #ELSE
  1595.     !A [] $4020 !4 |GB[0] !1 IN$GL!3 |3
  1596.   #ENDIF
  1597. #ENDCOMMAND
  1598.  
  1599. #COMMAND INDCT$STATUS &R R #LWCV
  1600.   #IFDEF !3
  1601.     !A [] $4029 !3 |CI0 !1 !4
  1602.   #ELSE
  1603.     #CHECK !3.RECNUM U#LWCV
  1604.     !A [] $4029 !3.RECNUM |CI0 !1 !4
  1605.   #ENDIF
  1606. #ENDCOMMAND
  1607.  
  1608. #COMMAND INDEX_DEF R R#LGU "TO" #LGRNDCE #LGNDCE #LGNDCE
  1609.   #IFDEF !1
  1610.     !A [] $82 !1 FILENUMBER
  1611.   #ELSE
  1612.     #CHECK !1.RECNUM _UE
  1613.     #SET Q$ !1.RECNUM
  1614.     !A [] $82 |CI!q FILENUMBER
  1615.   #ENDIF
  1616.   !A [] $344 !2 !4 // index fields
  1617.   #IF !0>4
  1618.     !A [] $82 STRLEN !5 // number of fields
  1619.     #IF !0>5
  1620.       !A [] $349 !2 !6 // index attributes
  1621.     #ENDIF
  1622.   #ENDIF
  1623. #ENDCOMMAND
  1624.  
  1625. #COMMAND INDICATE R
  1626.   #IFSAME !1 ~
  1627.     #IFDEF !2
  1628.     #ELSE
  1629.       #REPLACE !2 |!C
  1630.     #ENDIF
  1631.     INDICATE !2~ !3 !4 !5 !6 !7 !8 !9
  1632.   #ELSE
  1633.     // #CHECK !2 "AS""STATUS""$0""$1""GROUP"
  1634.     #IFDEF !1
  1635.       #CHECK !1 _X
  1636.     #ELSE
  1637.       #REPLACE !1 |!C
  1638.     #ENDIF
  1639.     INDCT$!2 !1 !2 !3 !4 !5 !6 !7 !8 !9
  1640.   #ENDIF
  1641. #ENDCOMMAND
  1642.  
  1643. #COMMAND INDICATOR RT
  1644.   #REPLACE !1 |!C
  1645.   #IF (!0>1)
  1646.     INDICATOR !2 !3 !4 !5 !6 !7 !8 !9
  1647.   #ENDIF
  1648. #ENDCOMMAND
  1649.  
  1650. #COMMAND INHERIT_SCREEN &.
  1651.   !A [] $14B
  1652. #ENDCOMMAND
  1653.  
  1654. #COMMAND INKEY #LUCRE &.
  1655.   !A [] $147 !1
  1656. #ENDCOMMAND
  1657.  
  1658. #COMMAND INKEY$ #LUCRE &.
  1659.   !A [] $149 !1
  1660. #ENDCOMMAND
  1661.  
  1662. #COMMAND INPUT &#ULGR #LUG #ULG .
  1663.   #IFCLASS !1 "C"
  1664.     #CHECK !2 _RCLUEG _RCLUG
  1665.     !A [] $142 !1
  1666.     // INPUT !2 !3
  1667.     !A [] $140 !2 !3 |CI79
  1668.   #ELSE
  1669.     #CHECK !1 _RCLUEG
  1670.     !A [] $140 !1 !2 |CI79
  1671.   #ENDIF
  1672. #ENDCOMMAND
  1673.  
  1674. #COMMAND INSERT #LGR "IN" #LGRCE "AT"""
  1675.   #IF (!0>3)
  1676.     #CHECK !5 #LGR%
  1677.     //MOVEINT !5 TO STRMARK
  1678.     !A [] $82 !5 STRMARK
  1679.   #ENDIF
  1680.   !A [] $24C !3 !1
  1681. #ENDCOMMAND
  1682.  
  1683. #COMMAND INTEGER TR
  1684.   // ALLOW FOR MORE INTS
  1685.   #REPLACE !1 |VI!D
  1686.   #IF (!0>1)
  1687.     INTEGER !2 !3 !4 !5 !6 !7 !8 !9
  1688.   #ENDIF
  1689. #ENDCOMMAND
  1690.  
  1691. #COMMAND IS_FILE_INCLUDED R R "TO"""
  1692.   !A [] $E0 !1 !2
  1693.   #IF !0>2
  1694.     #CHECK !4 _CUEGRL
  1695.     MOVE [FOUND] TO !4
  1696.   #ENDIF
  1697. #ENDCOMMAND
  1698.  
  1699. #COMMAND KEYCHECK
  1700.   !A [] $046
  1701.   #IF !0>0
  1702.     [KEYPRESS] !1 !2 !3 !4 !5 !6 !7 !8
  1703.   #ENDIF
  1704. #ENDCOMMAND
  1705.  
  1706. #COMMAND KEYPROC &R%WVF """GOSUB" WFVNSD# .
  1707.   #IFSAME !1 ON
  1708.     !A [] $82 |CI0 |VI33
  1709.   #ELSE
  1710.     #IFSAME !1 OFF
  1711.       !A [] $82 |CI9999 |VI33
  1712.     #ELSE
  1713.       #SET Y$ !a
  1714.       #IF (!0>1)
  1715.         // MOVEINT ADR(3) TO KEY LOC
  1716.         #SET Q$ (!1-100+40) // address in SYSINT
  1717.         #IFDEF !3
  1718.           !A [] $082 !3 |VI!q
  1719.         #ELSE
  1720.           !A [] $082 |CI0 |VI!q
  1721.           #FREF !3 !a
  1722.         #ENDIF
  1723.       #ELSE
  1724.         #SET Q$ (!1-100)
  1725.         #KEYPROC !q !Y
  1726.       #ENDIF
  1727.     #ENDIF
  1728.   #ENDIF
  1729. #ENDCOMMAND
  1730.  
  1731. #COMMAND LEFT &#UGL$ "TO" #UEGRLC L#% .
  1732.   #IF !0>3
  1733.     !A [] $082 !4 STRMARK
  1734.   #ENDIF
  1735.   !A [] $241 !1 !3
  1736. #ENDCOMMAND
  1737.  
  1738. #COMMAND LENGTH &#LUG$ "TO" C#LREUG .
  1739.   !A [] $246 !1 !3
  1740. #ENDCOMMAND
  1741.  
  1742. #COMMAND LOCK &.
  1743.   !A [|120] $0C7
  1744. #ENDCOMMAND
  1745.  
  1746. #COMMAND LOOP &.
  1747.   #POP S$
  1748.   #CHECK BEGIN$!s _RVFWSNDEU
  1749.   !A [] $041 BEGIN$!s
  1750.   END$!s:
  1751.   #SET N$ !n-1
  1752. #ENDCOMMAND
  1753.  
  1754. #COMMAND MAKEDEF$   // make a list of symbols defined
  1755.   #IF !0>0
  1756.     #IFDEF !1
  1757.     #ELSE
  1758.       !1:
  1759.     #ENDIF
  1760.     #IF !0>1
  1761.       MAKEDEF$ !2 !3 !4 !5 !6 !7 !8 !9
  1762.     #ENDIF
  1763.   #ENDIF
  1764. #ENDCOMMAND
  1765.  
  1766. #COMMAND MAKE_FILE RU#LG U#LG U#LG .
  1767.   #IF !0>2
  1768.     !A [] $82 !3 FILENUMBER
  1769.   #ELSE
  1770.     !A [] $82 |CI0 FILENUMBER
  1771.   #ENDIF
  1772.   #IF !0>1
  1773.     !A [] $346 !1 !2
  1774.   #ELSE
  1775.     !A [] $346 !1 |CS''
  1776.   #ENDIF
  1777. #ENDCOMMAND
  1778.  
  1779. #COMMAND MEMORY #LRCUGE &.
  1780.   !A [] $2CA !1
  1781. #ENDCOMMAND
  1782.  
  1783. #COMMAND MID &#UGL$ "TO" #UGRLEC #L%U #L% .
  1784.   #IF !0>4
  1785.     !A [] $082 !5 STRMARK
  1786.   #ENDIF
  1787.   !A [] $082 !4 STRLEN
  1788.   !A [] $245 !1 !3
  1789. #ENDCOMMAND
  1790.  
  1791. #REM  The type of a move is determined at compile time, based on the 
  1792. #REM  type of the destination.  The move type refers to the intermediate
  1793. #REM  value to which the source will be converted.
  1794.  
  1795. #COMMAND MOVE #LU "TO" LEURC .
  1796.   #IFCLASS !1 "G"  // MOVE INDICATOR
  1797.     #CHECK !1 _VWFC
  1798.     !A [] $4020 !1 |GB[0] !3 IN$GLALL |3
  1799.   #ELSE
  1800. // Type independent move as of 2.3
  1801.     !A  [] $086 !1 !3
  1802.   #ENDIF
  1803. #ENDCOMMAND
  1804.  
  1805. #COMMAND MOVEDATE &%#GULI "TO" #UCIGER .
  1806.   !A [] $084 !1 !3
  1807. #ENDCOMMAND
  1808.  
  1809. #COMMAND MOVEINT &%#GULD "TO" #UCSDEGR .
  1810.   !A [] $082 !1 !3
  1811. #ENDCOMMAND
  1812.  
  1813. #COMMAND MOVENUM &#ULG "TO" #UCLGRE .
  1814.   !A [] $081 !1 !3
  1815. #ENDCOMMAND
  1816.  
  1817. #COMMAND MOVEREAL &#ULG "TO" #UCLGER .
  1818.   !A [] $085 !1 !3
  1819. #ENDCOMMAND
  1820.  
  1821. #COMMAND MOVESTR &#ULG$ "TO" #UCLGR$E .
  1822.   !A [] $080 !1 !3
  1823. #ENDCOMMAND
  1824.  
  1825. #COMMAND MULTI$     // repeat a command for each argument (internal)
  1826.   #IF !0>1
  1827.     !1 !2
  1828.   #ENDIF
  1829.   #IF !0>2
  1830.     MULTI$ !1 !3 !4 !5 !6 !7 !8 !9
  1831.   #ENDIF
  1832. #ENDCOMMAND
  1833.  
  1834. #COMMAND MULTIBACK$ // same as above, except that arguments
  1835.   #IF !0>2        // are output in reverse order
  1836.     MULTIBACK$ !1 !3 !4 !5 !6 !7 !8 !9
  1837.   #ENDIF
  1838.   #IF !0>1
  1839.     !1 !2
  1840.   #ENDIF
  1841. #ENDCOMMAND
  1842.  
  1843. #COMMAND NAME R#L T
  1844.   #IFDEF !1
  1845.     #REPLACE !2 !1
  1846.     #CHECK !3 .
  1847.   #ELSE
  1848.     #IFCLASS !1.1 "W"
  1849.       AUTOPAGE !1
  1850.     #ELSE
  1851.       AUTO3$ #REPLACE !1 PAGE!f
  1852.     #ENDIF
  1853.     #IF !0>1
  1854.       NAME !2 !3 !4 !5 !6 !7 !8 !9
  1855.     #ENDIF
  1856.   #ENDIF
  1857. #ENDCOMMAND
  1858.  
  1859. #COMMAND NUMBER TR
  1860.   #NUM V$
  1861.   #REPLACE !1 |VN!v
  1862.   #IF (!0>1)
  1863.     NUMBER !2 !3 !4 !5 !6 !7 !8 !9
  1864.   #ENDIF
  1865. #ENDCOMMAND
  1866.  
  1867. #COMMAND ON R "GOTO""GOSUB""OFF" SNOBIODE
  1868.   #IFSAME !1 ERROR
  1869.     // MOVEINT ADDR to ONERROR (|VI31)
  1870.     #IFDEF !3
  1871.       !A [] $082 !3 |VI31
  1872.       #CHECK !2 "GOSUB"
  1873.     #ELSE
  1874.       !A [] $082 |CI0 |VI31
  1875.       #IFSAME !2 GOSUB
  1876.         #FREF !3 !a
  1877.       #ELSE
  1878.         #CHECK !2 "OFF"
  1879.       #ENDIF
  1880.     #ENDIF
  1881.   #ELSE
  1882.     #SET Q$ (!0-1)
  1883.     // INDICATE OK$1 AS !1 GT 0
  1884.     #IFDEF OK$1
  1885.     #ELSE
  1886.       #REPLACE OK$1 |!C
  1887.       #REPLACE OK$2 |!C
  1888.     #ENDIF
  1889.     #CHECK !1 _#ULGRS
  1890.     !A [] $4010 !1 |CI0 OK$1 |2
  1891.     // INDICATE OK$2 AS !1 LT !q
  1892.     !A [] $4000 !1 |CI!q OK$2 |2
  1893.     #SET Q$ (!a+2)
  1894.     #IFSAME !2 GOTO
  1895.       !A [OK$1 OK$2] $041 |CE(!q+!1 )
  1896.     #ELSE
  1897.       !A [OK$1 OK$2] $042 |CE(!q+!1 )
  1898.     #ENDIF
  1899.     #SET Q$ (!a+!0)
  1900.     !A [] $041 |CL!q  //ERROR jump around GOTOs
  1901.     MULTI$ GOTO !3 !4 !5 !6 !7 !8 !9
  1902.   #ENDIF
  1903. #ENDCOMMAND
  1904.  
  1905. #REM OPEN FILENAME INDEX
  1906. #REM OPEN "STRING" AS FILENAME INDEX
  1907.  
  1908. #COMMAND OPEN
  1909.   #IFSAME !2 AS
  1910.     #IFDEF !3.RECNUM
  1911.     #ELSE
  1912.       #INCLUDE !3.FD
  1913.       #SET Q$ !3.RECNUM
  1914.       #REPLACE !3.FILE_NUMBER |CI!q
  1915.     #ENDIF
  1916.     #CHECK !3 _TR
  1917.     #CHECK !1 _#LG
  1918.     #CHECK !5 . 
  1919.     #CHECK !3.RECNUM _URW#LG
  1920.     #IF (!0>3)
  1921.       #CHECK !4 _DGLOBU#
  1922.       MOVEINT !4 TO FIELDNUMBER
  1923.       !A [] $182 !3.RECNUM !1
  1924.     #ELSE
  1925.       MOVEINT |CI0 TO FIELDNUMBER
  1926.       !A [] $182 !3.RECNUM !1
  1927.     #ENDIF
  1928.   #ELSE
  1929.     #CHECK !3 . 
  1930.     #IFDEF !1.RECNUM
  1931.     #ELSE
  1932.       #INCLUDE !1.FD
  1933.       #SET Q$ !1.RECNUM
  1934.       #REPLACE !1.FILE_NUMBER |CI!q
  1935.     #ENDIF
  1936.     #CHECK !1.RECNUM _URW#LG
  1937.     #IF (!0>1)
  1938.       #CHECK !2 FWSNDELG#U
  1939.       !A [] $180 !1.RECNUM !2
  1940.     #ELSE
  1941.       !A [] $180 !1.RECNUM |CI0
  1942.     #ENDIF
  1943.   #ENDIF
  1944. #ENDCOMMAND
  1945.  
  1946. #REM OS$CALL makes a system BDOS call.  Only calls that can be passed
  1947. #REM integer (not pointer) values can be used.  Use at your own risk!
  1948. #REM Format of command:
  1949. #REM OS$CALL <FUNCTION> <ARGUMENT> {TO <RESULT>}
  1950. #REM <FUNCTION>    - BDOS function code - See O/S documentation.
  1951. #REM <ARGUMENT>    - Integer value to pass with function (optional)
  1952. #REM <RESULT>      - Result code returned by function
  1953.  
  1954. #REM Example to set CP/M I/O byto to "NEW_IO_BYTE (integer):
  1955. #REM OS$CALL 8 NEW_IO_BYTE
  1956.  
  1957. #REM Example to get console status:
  1958. #REM OS$CALL 12 0 TO CONSTAT //integer
  1959.  
  1960. #COMMAND OS$CALL &#LRU%DG #L%UG "TO""" #LCGUE .
  1961.   !A [] $2C8 !1 !2
  1962.   #IF !0>3
  1963.     //MOVEINT STRMARK TO !4
  1964.     !A [] $82 STRMARK !4
  1965.   #ENDIF
  1966. #ENDCOMMAND
  1967.  
  1968. #COMMAND OUTCLOSE &.
  1969.   // OUTFILE 'CON:'
  1970.   !A [] $200 |CS'CON:'
  1971. #ENDCOMMAND
  1972.  
  1973. #COMMAND OUTFILE &NDILU#G .
  1974.   !A [] $200 !1
  1975. #ENDCOMMAND
  1976.  
  1977. #COMMAND OUTPUT 
  1978.   #IFSAME !1 CHANNEL
  1979.     !A [] $10A |CI1 !2
  1980.     OUTPUT !3 
  1981.   #ELSE
  1982.     #CHECK !2 .
  1983.     #IF !0>0
  1984.       #CHECK !1.N _#LUGFV
  1985.       !A [] $202 !1.N
  1986.     #ELSE
  1987.       !A [] $202 |VI9
  1988.     #ENDIF
  1989.   #ENDIF
  1990. #ENDCOMMAND
  1991.  
  1992. #COMMAND OUTPUT_WRAP R
  1993.   #IFSAME !1 CHANNEL
  1994.     !A [] $10A |CI1 !2
  1995.     OUTPUT_WRAP !3 
  1996.   #ELSE
  1997.     #CHECK !2 .
  1998.     #CHECK !1.N _#LUGFV
  1999.     !A [] $20A !1.N // Fill wrap fields and set |122 if empty
  2000.     OUTPUT !1
  2001.     [NOT |122] BLANKFORM !1
  2002.     !A [NOT |122] $20A !1.N
  2003.     [NOT |122] REPEAT
  2004.     #IFDEF NEWPAGE
  2005.       PAGECHECK !1.LINES
  2006.       [PAGEBREAK] GOSUB NEWPAGE
  2007.     #ENDIF
  2008.     OUTPUT !1
  2009.     !A [] $20A !1.N // get more from wrap fields
  2010.     [NOT |122] LOOP
  2011.   #ENDIF
  2012. #ENDCOMMAND
  2013.  
  2014. #COMMAND PAD &#ULG$ "TO" #ULGRCE L%# .
  2015.   #IF !0>3
  2016.     !A [] $082 !4 STRMARK
  2017.   #ENDIF
  2018.   !A [] $240 !1 !3
  2019. #ENDCOMMAND
  2020.  
  2021. #COMMAND PAGE R%
  2022.   #IFSAME !1 SET
  2023.     #IF !0>1
  2024.       //  Set attributes for future use
  2025.       #CHECK !2.N _RU#LG
  2026.       MOVE !2.N TO STRMARK
  2027.       FIND$PAGE !3 !4 !5
  2028.       FIND$PAGE !6 !7 !8
  2029.     #ELSE
  2030.       //  Page an image named SET immediately
  2031.       !A [] $1C0 !1.N
  2032.     #ENDIF
  2033.   #ELSE
  2034.     #IF !0>1
  2035.       //  Set attributes for use now
  2036.       #CHECK !1.N _RU#LG
  2037.       MOVE !1.N TO STRMARK
  2038.       FIND$PAGE !2 !3 !4
  2039.       FIND$PAGE !5 !6 !7
  2040.     #ENDIF
  2041.     //  Put image with new attributes on screen now
  2042.     //  OR, put regular image on screen now.
  2043.     !A [] $1C0 !1.N
  2044.   #ENDIF
  2045. #ENDCOMMAND
  2046.  
  2047. #COMMAND PAGECHECK &#LG% .
  2048.   #IFDEF !1  |CI0
  2049.     !A [] $203 !1 |CI0
  2050.   #ELSE
  2051.     #CHECK !1.LINES _VFWU#LG
  2052.     !A [] $203 !1.LINES |CI0
  2053.   #ENDIF
  2054. #ENDCOMMAND
  2055.  
  2056. #COMMAND POS &#UGRL$ "IN" #UGRL$ #L% #L% .
  2057.   !A [] $244 !1 !3
  2058.   #IF !0>3
  2059.     #CHECK !4 "TO"
  2060.     #CHECK !5 _RCEUL
  2061.     !A [] $082 STRMARK !5
  2062.   #ENDIF
  2063. #ENDCOMMAND
  2064.  
  2065. #COMMAND PRINT #L
  2066.   #IF !0>2
  2067.     #IF !0>3
  2068.       #FORMAT !3 !4
  2069.       #CHECK !4 _CVFW#L
  2070.     #ENDIF
  2071.     #CHECK !2 "TO"
  2072.     #CHECK !3 _CVF#L
  2073.     #IFTYPE !3 "IND"
  2074.       !A [] $206 !1 !3
  2075.     #ELSE
  2076.       #IFTYPE !3 "R"
  2077.         !A [] $208 !1 !3
  2078.       #ELSE
  2079.         !A [] $205 !1 !3
  2080.       #ENDIF
  2081.     #ENDIF
  2082.   #ELSE
  2083.     AUTO4$ PRINT !1 TO PAGE!f !2
  2084.   #ENDIF
  2085. #ENDCOMMAND
  2086.  
  2087. #COMMAND PRINT_WRAP #L
  2088.   #IF !0>2
  2089.     #IF !0>3
  2090.       #FORMAT !3 !4
  2091.       #CHECK !4 _CVFW#L
  2092.     #ENDIF
  2093.     #CHECK !2 "TO"
  2094.     #CHECK !3 _CVF#L
  2095.     #IFCLASS !1 "F"
  2096.       !A [] $209 |CS"DBMS:!1" !3 // assign seq file to wrap window.
  2097.     #ELSE
  2098.       !A [] $209 !1 !3
  2099.     #ENDIF
  2100.   #ELSE
  2101.     AUTO4$ PRINT_WRAP !1 TO PAGE!f !2
  2102.   #ENDIF
  2103. #ENDCOMMAND
  2104.  
  2105. #COMMAND RE$ T  // re-find all files listed by record number if multiuser
  2106.   #CHECK !1.RECNUM _RUWG
  2107.   !A [|120] $C0 !1.RECNUM |CI2    // |120 is multiuser flag.
  2108.   !A [|120 FINDERR] $047 |CI25 |CS"!1"
  2109.   #IF !0>1
  2110.     RE$ !2 !3 !4 !5 !6 !7 !8 !9
  2111.   #ENDIF
  2112. #ENDCOMMAND
  2113.  
  2114. #COMMAND READ 
  2115.   #IFSAME !1 CHANNEL
  2116.     !A [] $10A |CI0 !2
  2117.     #IF !0>2
  2118.       #CHECK !3 _ULEC
  2119.       READ !3 !4 !5 !6 !7 !8 !9
  2120.     #ENDIF
  2121.   #ELSE
  2122.     !A [] $108 !1
  2123.     #IF !0>1
  2124.       #CHECK !2 _ULEC
  2125.       READ !2 !3 !4 !5 !6 !7 !8 !9
  2126.     #ENDIF
  2127.   #ENDIF
  2128. #ENDCOMMAND
  2129.  
  2130. #COMMAND READLN 
  2131.   #IFSAME !1 CHANNEL
  2132.     #CHECK !3 _ULE
  2133.     !A [] $10A |CI0 !2
  2134.     READLN !3 !4 !5 !6 !7 !8 !9
  2135.   #ELSE
  2136.     #IF !0=0
  2137.       !A [] $104 |CS''
  2138.     #ENDIF
  2139.     #IF !0=1
  2140.       !A [] $104 !1
  2141.     #ENDIF
  2142.     #IF !0>1
  2143.       #CHECK !1 _ULE
  2144.       !A [] $108 !1
  2145.       READLN !2 !3 !4 !5 !6 !7 !8 !9
  2146.     #ENDIF
  2147.   #ENDIF
  2148. #ENDCOMMAND
  2149.  
  2150. #COMMAND READ_BLOCK 
  2151.   #IFSAME !1 CHANNEL
  2152.     !A [] $10A |CI0 !2
  2153.     #IF !0>2
  2154.       #CHECK !3 _ULE
  2155.       #CHECK !4 _RU
  2156.       !A [] $109 !3 !4
  2157.     #ENDIF
  2158.   #ELSE
  2159.     #CHECK !1 _ULEC
  2160.     #CHECK !2 _RU
  2161.     !A [] $109 !1 !2
  2162.   #ENDIF
  2163. #ENDCOMMAND
  2164.  
  2165. #COMMAND READ_DFINI &#LGOBDR .
  2166.   !A [] $14C !1
  2167. #ENDCOMMAND
  2168.  
  2169. #COMMAND REAL TR
  2170.   #REAL V$
  2171.   #REPLACE !1 |VR!v
  2172.   #IF (!0>1)
  2173.     REAL !2 !3 !4 !5 !6 !7 !8 !9
  2174.   #ENDIF
  2175. #ENDCOMMAND
  2176.  
  2177. #COMMAND REGISTRATION &#RLUGCE #LUGEC .
  2178.   !A [] $307 !1 !2
  2179. #ENDCOMMAND
  2180.  
  2181. #COMMAND RELATE CVWR#LGR
  2182.   #IFDEF !1
  2183.     !A [] $C4 !1
  2184.   #ELSE
  2185.     #CHECK !1.RECNUM _CVWLR#GU
  2186.     !A [] $C4 !1.RECNUM
  2187.   #ENDIF
  2188.   #IF !0>1
  2189.     RELATE !2 !3 !4 !5 !6 !7 !8 !9
  2190.   #ENDIF
  2191. #ENDCOMMAND
  2192.  
  2193. #COMMAND RENAMEFILE &#LGU "TO" R#LGU .
  2194.   !A [] $2C2 !1 !3
  2195. #ENDCOMMAND
  2196.  
  2197. #COMMAND REPEAT &.
  2198.   #SET N$ !N
  2199.   #PUSH !R
  2200.   #XPUSH !n $INIT
  2201.   #IFIND // INCLUDE JUMPS IF INDICATORS ON LINE
  2202.   // GOTO BEGIN$!r
  2203.   !A [] $041 |CL0
  2204.   #FREF BEGIN$!r !a
  2205.   #$ !A 0 0 0 $041 |CL0
  2206.   #FREF END$!r !a
  2207.   #ENDIF
  2208.   #$ WHILE#!r:
  2209.   #$ BEGIN$!r:
  2210. #ENDCOMMAND
  2211.  
  2212.  
  2213.  
  2214. #COMMAND REPLACE #LG "IN" #LGCE "WITH" #LRG
  2215.   #IFIND 
  2216.     [] BEGIN
  2217.     POS !1 IN !3 TO STRMARK
  2218.     #$ [FOUND] MOVESTR (REPLACE(!1,!3,!5)) TO !3
  2219.     END
  2220.  #ELSE
  2221.     POS !1 IN !3 TO STRMARK
  2222.     [FOUND] MOVESTR (REPLACE(!1,!3,!5)) TO !3
  2223.  #ENDIF
  2224. #ENDCOMMAND
  2225.  
  2226. #COMMAND REPORT T "BY""DOWN" VFW%LGR "BREAK"""
  2227.   #CHECK !1.RECNUM _UVCWGL
  2228.   INTEGER RECCOUNT
  2229.   #SET P$ 0
  2230.   //          MOVEINT 20000 TO LINECOUNT  // start with a full page
  2231.   !A [] $82 |CI20000 |VI10
  2232.   //          MOVE 0 TO RECCOUNT
  2233.   !A [] $82 |CI0 RECCOUNT
  2234.   //          BREAKINIT           // init breakpoints
  2235.   !A [] $207
  2236.   //          INDICATE FIRSTREC TRUE      // used for subtotals
  2237.   #IFDEF FIRSTREC
  2238.   #ELSE
  2239.     #REPLACE FIRSTREC |!C
  2240.   #ENDIF
  2241.   !A [] $4028 |CI0 |CI0 FIRSTREC~
  2242.   #IFSAME !2 BY
  2243.     FIND GE !1 BY !3          // FIND first record
  2244.   #ELSE
  2245.     FIND LE !1 BY !3
  2246.   #ENDIF
  2247.   [~FOUND] GOTO END$OF$REPORT
  2248.   //          CLEARSCREEN         // start with a clear screen
  2249.   !A [] $144
  2250.   RPT.LOOP://   INDICATE SELECT TRUE      // default for SELECT
  2251.   #IFDEF SELECT
  2252.   #ELSE
  2253.     #REPLACE SELECT |!C
  2254.   #ENDIF
  2255.   !A [] $4028 |CI0 |CI0 SELECT~
  2256.   //          GOSUB RPT.SELECTION     // go to user selection
  2257.   !A [] $42 |CL0
  2258.   #FREF RPT.SELECTION !a
  2259.   //[NOT SELECT] GOTO RPT.CONT        // test SELECT
  2260.   !A [~ SELECT] $41 |CL0
  2261.   #FREF RPT.CONT !a
  2262.   BREAK$ !5 !6 !7 !8 !9       // set breakpoints
  2263.   #SET X$ !p                  // set up to break down
  2264.   [NOT FIRSTREC] BREAK$DOWN RPT.SUBTOTAL  // break down for SUBTOTAL
  2265.   #SET X$ 0               // set up to break up
  2266.   //          RELATE !1           // get related records
  2267.   !A [] $C4 !1.RECNUM
  2268.   BREAK$UP RPT.SUBHEADER      // break up for SUBHEADER
  2269.   //          INCREMENT RECCOUNT
  2270.   !A [] $083 RECCOUNT |CI0
  2271.   //          GOSUB RPT.BODY          // print body
  2272.   !A [] $42 |CL0
  2273.   #FREF RPT.BODY !a
  2274.   //          INDICATE FIRSTREC FALSE     // not first any more
  2275.   !A [] $4028 |CI0 |CI0 FIRSTREC
  2276.   RPT.CONT:
  2277.   #IFSAME !2 BY
  2278.     FIND GT !1 BY !3          // FIND next record
  2279.   #ELSE
  2280.     FIND LT !1 BY !3
  2281.   #ENDIF
  2282.   //          KEYCHECK            // check keyboard
  2283.   !A [] $46
  2284.   //[FOUND NOT KEYPRESS] GOTO RPT.LOOP    // if ok, loop
  2285.   !A [FOUND ~ KEYPRESS] $41 RPT.LOOP
  2286.   //[KEYPRESS]  GOSUB RPT.KEYPRESS    // user can disable KEYPRESS
  2287.   !A [FOUND KEYPRESS]   $42 |CL0
  2288.   #FREF RPT.KEYPRESS !a
  2289.   !A [FOUND ~ KEYPRESS] $41 RPT.LOOP
  2290.   #SET X$ !p                  // set up for break down
  2291.   END.OF.REPORT:
  2292.   [~ FIRSTREC]  BREAK$DOWN RPT.SUBTOTAL $X    // break down for last subtotals
  2293.   //[FIRSTREC]  GOSUB RPT.TOTAL       // print TOTAL
  2294.   !A [~ FIRSTREC] $42 |CL0
  2295.   #FREF RPT.TOTAL !a
  2296.   //          GOTO END$OF$REPORT      // GOTO end
  2297.   !A [] $41 |CL0
  2298.   #FREF END$OF$REPORT !a
  2299.   NEWPAGE://    GOSUB RPT.HEADER      // new page, print HEADER
  2300.   !A [] $42 |CL0
  2301.   #FREF RPT.HEADER !a
  2302.   #SET X$ 0    // this will reprint the page headers if included //
  2303.   [NOT FIRSTREC] BREAK$PRT SUBHEADER      // reprint pages
  2304.   //          RETURN              // end of NEWPAGE
  2305.   !A [] $43 |CI0
  2306.   RPT.SELECTION:              // selection starts after REPORT
  2307. #ENDCOMMAND
  2308.  
  2309. #COMMAND REPORTEND .         // end of REPORT
  2310.   MAKEDEF$ RPT.HEADER RPT.SELECTION RPT.BODY RPT.TOTAL
  2311.   #SET X$ 0
  2312.   BREAK$T3
  2313.   // RETURN
  2314.   !A [] $43 |CI0
  2315.   #IFDEF RPT.KEYPRESS
  2316.   #ELSE
  2317.     RPT.KEYPRESS:
  2318.     // STRING AKEY$ 1
  2319.     #IFDEF AKEY$
  2320.     #ELSE
  2321.       #STR V$ 1
  2322.       #REPLACE AKEY$ |VS!v
  2323.     #ENDIF
  2324.     // SHOWLN 'A KEY HAS BEEN PRESSED.'
  2325.     !A [] $142 |CS'A KEY HAS BEEN PRESSED.'
  2326.     !A [] $143
  2327.     // SHOW   'DO YOU WANT TO STOP THE REPORT (Y or N)? '
  2328.     !A [] $142 |CS'DO YOU WANT TO STOP THE REPORT (Y or N)? '
  2329.     // INKEY AKEY$
  2330.     !A [] $147 AKEY$
  2331.     !A [] $141 AKEY$
  2332.     // IF NOT AKEY$ IN 'Yy' RETURN RPT.LOOP
  2333.     INDCT$AS SELECT AS AKEY$ IN 'Yy'
  2334.     [~ SELECT] RETURN RPT.LOOP
  2335.     RETURN END$OF$REPORT  // Necessary to pop stack
  2336.   #ENDIF
  2337.   END$OF$REPORT:
  2338. #ENDCOMMAND
  2339.  
  2340. #COMMAND REREAD
  2341.   #IF !0=0
  2342.     !A [|120] $0C9
  2343.   #ELSE
  2344.     !A [|120] $0C7
  2345.     RE$ !1 !2 !3 !4 !5 !6 !7 !8 !9
  2346.   #ENDIF
  2347. #ENDCOMMAND
  2348.  
  2349. #COMMAND RETURN VFWNDE#G
  2350.   #IF !0=0
  2351.     !A [] $043 |CL0
  2352.   #ELSE
  2353.     #IFSAME !1 RETURN
  2354.       #SET Q$ (!a+2)
  2355.       !A [] $043 |CL!q // RETURN RETURN
  2356.       RETURN !2 !3 !4 !5 !6 !7 !8 !9
  2357.     #ELSE
  2358.       #IFDEF !1
  2359.         #CHECK !1 _S
  2360.         #CHECK !2 .
  2361.         !A [] $043 !1
  2362.       #ELSE
  2363.         !A [] $043 |CL0
  2364.         #FREF !1 !a
  2365.       #ENDIF
  2366.     #ENDIF
  2367.   #ENDIF
  2368. #ENDCOMMAND
  2369.  
  2370. #COMMAND RIGHT &#UGRL$ "TO" #UGRLEC L#% .
  2371.   #IF !0>3
  2372.     !A [] $082 !4 STRLEN
  2373.   #ENDIF
  2374.   !A [] $242 !1 !3
  2375. #ENDCOMMAND
  2376.  
  2377. #COMMAND RUNPROGRAM_PIPE #RLGU #RLGU #RLGU .
  2378.     !A [] $2D6 !3    // Specify the object to receive MSG_INSERT
  2379.                      // with the output from the pipe.
  2380.     !A [] $2D7 !1 !2 // Execute the OS command with any arguments.
  2381. #ENDCOMMAND
  2382.  
  2383. #COMMAND RUNPROGRAM #RLG #LGU #LGU #LGU .
  2384.     #IFSAME !1 WAIT BACKGROUND
  2385.     #IF !0>3
  2386.         #ERROR 162 TOO MANY ARGUMENTS TO RUNPROGRAM !1
  2387.     #ELSE
  2388.         #IFSAME !1 WAIT
  2389.             !A [] $2CC !2 !3
  2390.             #ELSE // BACKGROUND
  2391.             !A [] $2CD !2 !3   
  2392.             #ENDIF
  2393.     #ENDIF
  2394.     #ELSE 
  2395.         // Number of args is checked by type checking of command for PIPE.
  2396.     #IFSAME !1 PIPE
  2397.         #IF !0<4
  2398.             RUNPROGRAM_PIPE !2 "" !3 !4 !5 !6 !7 !8 !9
  2399.         #ELSE
  2400.             RUNPROGRAM_PIPE !2 !3 !4 !5 !6 !7 !8 !9
  2401.         #ENDIF     
  2402.     #ELSE // Plain RUNPROGRAM.
  2403.         #IF !0>2
  2404.             #ERROR 162 TOO MANY ARGUMENTS TO RUNPROGRAM
  2405.         #ELSE
  2406.                 !A [] $2C0 !1 !2
  2407.         #ENDIF
  2408.     #ENDIF
  2409.     #ENDIF
  2410. #ENDCOMMAND
  2411.  
  2412. #COMMAND SAVE CVWR#LGE
  2413.   #IFDEF !1
  2414.     !A [] $C5 !1
  2415.     !A [] $C2 !1
  2416.   #ELSE
  2417.     #CHECK !1.RECNUM _CLVWLR#GU
  2418.     !A [] $C5 !1.RECNUM
  2419.     !A [] $C2 !1.RECNUM
  2420.   #ENDIF
  2421.   #IF !0>1
  2422.     SAVE !2 !3 !4 !5 !6 !7 !8 !9
  2423.   #ENDIF
  2424. #ENDCOMMAND
  2425.  
  2426. #COMMAND SAVERECORD CVWR#LGE
  2427.   #IFDEF !1
  2428.     !A [] $C2 !1
  2429.   #ELSE
  2430.     #CHECK !1.RECNUM _CVWLR#GU
  2431.     !A [] $C2 !1.RECNUM
  2432.   #ENDIF
  2433.   #IF !0>1
  2434.     SAVERECORD !2 !3 !4 !5 !6 !7 !8 !9
  2435.   #ENDIF
  2436. #ENDCOMMAND
  2437.  
  2438. #COMMAND SCREENMODE #%LGR # .
  2439.   #IFSAME !1 ON
  2440.     !A [] $148 |CE(458752)     // SCREENMODE on 0x70000
  2441.   #ELSE
  2442.     #IFSAME !1 OFF
  2443.       !A [] $148 |CE(196608)       // SCREENMODE off 0x30000
  2444.     #ELSE
  2445.       #CHECK !1 _U
  2446.       !A [] $148 !1 
  2447.     #ENDIF
  2448.   #ENDIF
  2449.   #IF !0>1
  2450.     SCREENMODE !2
  2451.   #ENDIF
  2452. #ENDCOMMAND
  2453.  
  2454. #COMMAND SECTION &RT #LGU .
  2455.   #IFSAME !1 SELECTION            // SELECTION is null SECTION
  2456.   #ELSE
  2457.     // RETURN                   // RETURN from last routine
  2458.     !A [] $43 |CI0
  2459.     RPT.!1:                 // label SECTION
  2460.     #IFDEF !2       // LINES REQ SPEC
  2461.       // PAGECHECK !2
  2462.       !A [] $203 !2
  2463.       // [PAGEBREAK] GOSUB NEWPAGE
  2464.       !A [PAGEBREAK] $42 NEWPAGE
  2465.       #IFDEF !1.LINES   
  2466.         #SET F$ !1.N
  2467.         #SET E$ 0
  2468.       #ENDIF
  2469.     #ELSE
  2470.       #IFDEF !1.LINES                 // is there a page?
  2471.         // PAGECHECK !1.LINES           // check for end of page
  2472.         !A [] $203 !1.LINES |CI0
  2473.         //[PAGEBREAK] GOSUB NEWPAGE     // if end, GOSUB NEWPAGE
  2474.         !A [PAGEBREAK] $42 NEWPAGE
  2475.         // AUTOPAGE !1              // start default page
  2476.         #SET F$ !1.N
  2477.         #SET E$ 0
  2478.       #ENDIF
  2479.     #ENDIF
  2480.   #ENDIF
  2481. #ENDCOMMAND
  2482.  
  2483. #COMMAND SET_ARGUMENT_SIZE &#LGRBOUSD .
  2484.   !A [] $24E !1
  2485. #ENDCOMMAND
  2486.  
  2487. #COMMAND SET_DFPATH "TO" &#LGRBOUD .
  2488.   !A [] $2D0 !2
  2489. #ENDCOMMAND
  2490.  
  2491. #COMMAND SET_CHANNEL_POSITION  &#LRUG$ "TO" &#LRUG$ .
  2492.   !A [] $10C !1 !3
  2493. #ENDCOMMAND
  2494.  
  2495. #COMMAND SET_OPTION #LGR . // Sets window options
  2496.   #IFCLASS !1 _C         // To stay on perminantly until
  2497.     #SET Q$ !1         // Turned off with CLEAR_OPTION.
  2498.     !A [] $04A |CI!q |CI0     // SET_OPTION NO_CALC // Turn off calculate.
  2499.   #ELSE
  2500.     !A [] $04A !1 |CI0    // .
  2501.   #ENDIF             
  2502. #ENDCOMMAND
  2503.  
  2504. #COMMAND SET_RELATE &#LGOBRWCV "TO" #LGOBRWCV . 
  2505.   !A [] $348 !1 !3
  2506. #ENDCOMMAND
  2507.  
  2508. #COMMAND SET_TERMLIST &#LGOBDR #LGOBDIN . 
  2509.   !A [] $14A !1 !2
  2510. #ENDCOMMAND
  2511.  
  2512. #COMMAND SETCHANGE &RCVF%G .
  2513.   !A [] $1C7 !1
  2514. #ENDCOMMAND
  2515.  
  2516. #COMMAND SHOW #ULRG$
  2517.   !A [] $142 !1
  2518.   #IF (!0>1)
  2519.     SHOW !2 !3 !4 !5 !6 !7 !8 !9
  2520.   #ENDIF
  2521. #ENDCOMMAND
  2522.  
  2523. #COMMAND SHOWLN #LGU$
  2524.   #IF (!0>0)
  2525.     SHOW !1 !2 !3 !4 !5 !6 !7 !8 !9
  2526.   #ENDIF
  2527.   !A [] $143
  2528. #ENDCOMMAND
  2529.  
  2530. #COMMAND SLEEP #LGURDBO .
  2531.   !A [] $02CE !1
  2532. #ENDCOMMAND
  2533.  
  2534. #COMMAND STATUS$ &CVW#LG "TO" #LUGRE
  2535.   #IFDEF !1
  2536.     !A [] $304 !1 !3
  2537.   #ELSE
  2538.     #CHECK !1.RECNUM _CVWLR#GU
  2539.     !A [] $304 !1.RECNUM !3
  2540.   #ENDIF
  2541. #ENDCOMMAND
  2542.  
  2543. #COMMAND STOP &.
  2544.   !A [] $144
  2545.   !A [] $040
  2546. #ENDCOMMAND
  2547.  
  2548. #COMMAND STRING TR E#L%
  2549.   #IF (!0>1)
  2550.     #IFDEF !2
  2551.       #CHECK !2 _VSWDF
  2552.       #STR V$ !2
  2553.       #REPLACE !1 |VS!v
  2554.       #IF (!0>2)
  2555.         STRING !3 !4 !5 !6 !7 !8 !9
  2556.       #ENDIF
  2557.     #ELSE
  2558.       #STR V$ 80
  2559.       #REPLACE !1 |VS!v
  2560.       STRING !2 !3 !4 !5 !6 !7 !8 !9
  2561.     #ENDIF
  2562.   #ELSE
  2563.     #STR V$ 80
  2564.     #REPLACE !1 |VS!v
  2565.   #ENDIF
  2566. #ENDCOMMAND
  2567.  
  2568. #COMMAND SUBTOTAL RFVC#LSD
  2569.   PRINT !1% !2 !3 !4 !5
  2570.   !A [] $082 |CI0 !1%
  2571. #ENDCOMMAND
  2572.  
  2573. #REM Get system date, hour, min, seconds.
  2574. #REM WILL NOT WORK UNDER CPM 2.2
  2575.  
  2576. #COMMAND SYSDATE &#ERCUGL #ECUGL #ECUGL #ECUGL . // SYSDATE DATE HR MIN SECOND
  2577.   !A [] $2C9 !1
  2578.   #IF !0>1
  2579.     //MOVE STRLEN TO !2
  2580.     !A [] $82 STRLEN !2
  2581.   #ENDIF
  2582.   #IF !0>2
  2583.     //MOVE STRMARK TO !3
  2584.     !A [] $82 STRMARK !3
  2585.     #IF !0>3
  2586.       //MOVE |VI37 TO !4
  2587.       !A [] $82 |VI37 !4
  2588.     #ENDIF
  2589.   #ENDIF
  2590. #ENDCOMMAND
  2591.  
  2592. #COMMAND SYSTEM &.
  2593.   !A [] $2C7
  2594. #ENDCOMMAND
  2595.  
  2596. #COMMAND TRIM &#LUG$ "TO" C#ELRUG .  // remove pre- and trailing spaces
  2597.   !A [] $24B !1 !3
  2598. #ENDCOMMAND
  2599.  
  2600. #COMMAND UNLOCK &.
  2601.   !A [|120] $0C8
  2602. #ENDCOMMAND
  2603.  
  2604. #COMMAND UNTIL R L L L .
  2605.   #POP S$
  2606.   IFNOT_ !1 !2 !3 !4 GOTO BEGIN$!s
  2607.   END$!s:
  2608.   #SET N$ !n-1
  2609. #ENDCOMMAND
  2610.  
  2611. #COMMAND UPPERCASE &C#LUGRND$ "TO""" C#LUG$END .
  2612.   #IF !0>1
  2613.     !A [] $249 !1 !3
  2614.   #ELSE
  2615.     !A [] $249 !1 !1
  2616.   #ENDIF
  2617. #ENDCOMMAND
  2618.  
  2619. #COMMAND WHILE R L L L .
  2620.   #SET N$ !N
  2621.   #PUSH !R
  2622.   #XPUSH !n $INIT
  2623.   // GOTO WHILE$!r
  2624.   !A [] $041 |CL0
  2625.   #FREF WHILE$!r !a
  2626.   #$ !A 0 0 0 $041 |CL!a
  2627.   #FREF END$!r !a
  2628.   #$ WHILE$!r:
  2629.   #$ BEGIN$!r:
  2630.   #$ IFNOT_ !1 !2 !3 !4 GOTO END$!r
  2631. #ENDCOMMAND
  2632.  
  2633. #COMMAND WRITE$STR #ULRG$
  2634.     !A [] $106 !1
  2635.     #IF (!0>1)
  2636.       WRITE$STR !2 !3 !4 !5 !6 !7 !8 !9
  2637.     #ENDIF
  2638. #ENDCOMMAND
  2639.  
  2640. #COMMAND WRITE 
  2641.   #IFSAME !1 CHANNEL
  2642.     !A [] $10A |CI1 !2
  2643.     #IF !0>2
  2644.       WRITE$STR !3 !4 !5 !6 !7 !8 !9
  2645.     #ENDIF
  2646.   #ELSE
  2647.     #IF (!0>0)
  2648.       WRITE$STR !1 !2 !3 !4 !5 !6 !7 !8 !9
  2649.     #ENDIF
  2650.   #ENDIF
  2651. #ENDCOMMAND
  2652.  
  2653. #COMMAND WRITELN 
  2654.   #IFSAME !1 CHANNEL
  2655.     !A [] $10A |CI1 !2
  2656.     #IF !0>2
  2657.       WRITE$STR !3 !4 !5 !6 !7 !8 !9
  2658.     #ENDIF
  2659.   #ELSE
  2660.     #IF (!0>0)
  2661.       WRITE$STR !1 !2 !3 !4 !5 !6 !7 !8 !9
  2662.     #ENDIF
  2663.   #ENDIF
  2664.   !A [] $107
  2665. #ENDCOMMAND
  2666.  
  2667. #COMMAND ZEROFILE $RT .
  2668.   #IFDEF !1.RECNUM
  2669.     #SET Q$ !1.RECNUM
  2670.     !A [] $308 |CI!q
  2671.   #ELSE
  2672.     #CHECK !1 _SG#L
  2673.     !A [] $308 !1
  2674.   #ENDIF
  2675. #ENDCOMMAND
  2676.  
  2677. #COMMAND SOUND &_L#RUG .
  2678.   !A [] $395 !1  // .
  2679. #ENDCOMMAND
  2680.  
  2681. #COMMAND GRAPHIC "ON""OFF" GDLOB# GNDIELOB# .
  2682.   #IFSAME !1 ON
  2683.     !A [] $382 !2 !3        //cmdgraphon mode device
  2684.   #ELSE
  2685.     !A [] $383 !2 |CN0      //cmdgraphoff
  2686.   #ENDIF
  2687. #ENDCOMMAND
  2688.  
  2689. #COMMAND GRXY &GDLOB# RGDLOB# .
  2690.   !A [] $384 !1 !2        //cmdgraphxy row column
  2691. #ENDCOMMAND
  2692.  
  2693. #COMMAND GET_GRXY &#GDLOBCE R#GDLOBCE .
  2694.   !A [] $38C !1 !2        //cmdgraphgetpos row column
  2695. #ENDCOMMAND
  2696.  
  2697. #COMMAND GET_CHANNEL_POSITION &#LRUG$ "TO" &#LRUG$EC .
  2698.   !A [] $10B !1 !3
  2699. #ENDCOMMAND
  2700.  
  2701. #COMMAND CIRCLE R#GDLOB R#GDLOB R#GDLOB #GDLOB .
  2702.   #IF !0>3
  2703.     SCREENMODE !4
  2704.   #ENDIF
  2705.   !A [] $384 !1 !2        //cmdgraphxy row column
  2706.   #IF !0>3
  2707.     !A [] $388 !3           //cmdgraphfcircle radius
  2708.   #ELSE
  2709.     !A [] $390 !3           //cmdgraphcircle radius
  2710.   #ENDIF
  2711. #ENDCOMMAND
  2712.  
  2713. #COMMAND BOX R#GDLOB R#GDLOB R#GDLOB R#GDLOB #GDLOB .
  2714.   #IF !0>4
  2715.     SCREENMODE !5
  2716.   #ENDIF
  2717.   !A [] $381 !1 !2        //cmdgraphtmp row1 column1
  2718.   !A [] $387 !3 !4        //cmdgraphbox row2 column2
  2719. #ENDCOMMAND
  2720.  
  2721. #COMMAND BAR R#GDLOB R#GDLOB R#GDLOB R#GDLOB #GDLOB .
  2722.   #IF !0>4
  2723.     SCREENMODE !5
  2724.   #ENDIF
  2725.   !A [] $381 !1 !2        //cmdgraphtmp row1 column1
  2726.   !A [] $391 !3 !4        //cmdgraphbox row2 column2
  2727. #ENDCOMMAND
  2728.  
  2729. #COMMAND LINE R#GDLOB R#GDLOB #GDLOB .
  2730.   #IF !0>2
  2731.     SCREENMODE !3
  2732.   #ENDIF
  2733.   !A [] $385 !1 !2        //cmdgraphline end_row end_column
  2734. #ENDCOMMAND
  2735.  
  2736. #COMMAND PLOT R#GDLOB R#GDLOB #GDLOB .
  2737.   #IF !0>2
  2738.     SCREENMODE !3
  2739.   #ENDIF
  2740.   !A [] $386 !1 !2        //cmdgraphplot row column
  2741. #ENDCOMMAND
  2742.  
  2743. #COMMAND PIE R#GDLOB R#GDLOB R#GDLOB R#GDLOB #GDLOB .
  2744.   #IF !0>4
  2745.     SCREENMODE !5
  2746.   #ENDIF
  2747.   !A [] $381 !1 !2        //cmdgraphtmp radius arc1
  2748.   !A [] $389 !3 !4        //cmdgraphpie arc2 fill_color
  2749. #ENDCOMMAND
  2750.  
  2751. #COMMAND ARC R#GDLOB R#GDLOB R#GDLOB #GDLOB .
  2752.   #IF !0>3
  2753.     SCREENMODE !4
  2754.   #ENDIF
  2755.   !A [] $381 !1 !2        //cmdgraphtmp radius arc1
  2756.   !A [] $38A !3           //cmdgrapharc arc2 
  2757. #ENDCOMMAND
  2758.  
  2759. #COMMAND ELLIPSE R#GDLOB R#GDLOB #GDLOB .
  2760.   #IF !0>2
  2761.     SCREENMODE !3
  2762.   #ENDIF
  2763.   !A [] $38B !1 !2        //cmdgraphellipse RADIUS ASPECT
  2764. #ENDCOMMAND
  2765.  
  2766. #COMMAND FLOOD &R#GDLOB .
  2767.   !A [] $3A0 !1           //cmdgraphflood color
  2768. #ENDCOMMAND
  2769.  
  2770. #COMMAND PALETTE &#GDLOB R#GDLOB .
  2771.   !A [] $38E !1 !2        //cmdgraphpalette background palette
  2772. #ENDCOMMAND
  2773.  
  2774. #COMMAND GR_PRINT &#GDLOBI .
  2775.   !A [] $392 !1
  2776. #ENDCOMMAND
  2777.  
  2778. #COMMAND SET_LINE_STYLE &GDLOB# GDLOB# .
  2779.   !A [] $3A1 !1 !2            //cmdsetlnstyle STYLE WIDTH
  2780. #ENDCOMMAND
  2781.  
  2782. #COMMAND SET_TEXT &#GDLOB R#GDLOB .
  2783.   !A [] $394 !1 !2            //cmdsettext SIZE ROTATION
  2784. #ENDCOMMAND
  2785.  
  2786. #COMMAND DISPLAY_GRAPHIC &R#GDLOBI .
  2787.   !A [] $397 !1
  2788. #ENDCOMMAND
  2789.  
  2790. #COMMAND SAVE_GRAPHIC &R#GDLOBI .
  2791.   !A [] $396 !1
  2792. #ENDCOMMAND
  2793.  
  2794. #COMMAND SAVE_CUT #GDLOBNIE #GDLOB #GDLOB #GDLOB R#GDLOB
  2795.   #IFSAME !1 DBMS
  2796.     SAVE_CUT |CS"DBMS:!2" !3 !4 !5 !6
  2797.   #ELSE
  2798.     GRXY !2 !3            //Start x and y
  2799.     !A [] $381 !4 !5      //End x and y
  2800.     !A [] $3A3 !1
  2801.   #ENDIF
  2802. #ENDCOMMAND
  2803.  
  2804. #COMMAND DISPLAY_CUT #GDLOBNI #GDLOB R#GDLOB #GDLOB
  2805.   #IFSAME !1 DBMS
  2806.     DISPLAY_CUT |CS"DBMS:!2" !3 !4 !5 !6
  2807.   #ELSE
  2808.     !A [] $381 !2 !3      //Display at x and y
  2809.     !A [] $3A2 !1 !4      //cmdgetcut CUT_NAME MODE
  2810.   #ENDIF
  2811. #ENDCOMMAND
  2812.  
  2813. #COMMAND SETWORLD &#GDLOB #GDLOB #GDLOB R#GDLOB .
  2814.   !A [] $381 !1 !2        //cmdgraphtmp LOWER LEFT
  2815.   !A [] $398 !3 !4        //setworld UPPER RIGHT
  2816. #ENDCOMMAND
  2817.  
  2818. #COMMAND GETDRANGE &E#GDLOBC ER#GDLOBC .
  2819.   !A [] $399 !1 !2
  2820. #ENDCOMMAND
  2821.  
  2822. #COMMAND GRAPH_INIT &.
  2823.   !A [] $39A
  2824. #ENDCOMMAND
  2825.  
  2826. #COMMAND GRAPH_VALUE &#GDLOB R#GDLOB .
  2827.   !A [] $39B !1 !2
  2828. #ENDCOMMAND
  2829.  
  2830. #COMMAND GRAPH_SUM &#GDLOBC R#GDLOBC .
  2831.   !A [] $39C !1 !2
  2832. #ENDCOMMAND
  2833.  
  2834. #COMMAND GRAPH_STAT &E#GDLOBC ER#GDLOBC .
  2835.   !A [] $39D !1 !2
  2836. #ENDCOMMAND
  2837.  
  2838. #COMMAND GRAPH_GETFIRST #GDLOBIENC ER#GDLOBC .
  2839.   !A [] $39E !1 !2
  2840. #ENDCOMMAND
  2841.  
  2842. #COMMAND GRAPH_GETNEXT #GDLOBCIENC ER#GDLOBC .
  2843.   !A [] $39F !1 !2
  2844. #ENDCOMMAND
  2845.  
  2846. #COMMAND ASPECT R#GDLOBCE #GDLOB .
  2847.   !A [] $3A5 !1 !2
  2848. #ENDCOMMAND
  2849.  
  2850. #COMMAND CHART_INIT .
  2851.   #IFDEF GRAPH$NUM
  2852.   #ELSE
  2853.     string  graph$label graph$title graph$ytitle graph$xtitle
  2854.     real    total$value min$value max$value value$
  2855.     real    radius mid$radian last$radian radian value$step
  2856.     integer text$size text$center graph$num num$values bar$width bar$space
  2857.     integer lower$left$x lower$left$y upper$right$x upper$right$y axis$base
  2858.     integer last$x last$y dev$x dev$y label$color chart$color axis$color gr$tmp
  2859.     indicator bar$chart line$chart pie$chart
  2860.     move 1 to label$color
  2861.     move 1 to chart$color
  2862.     move 1 to axis$color
  2863.   #ENDIF
  2864.   graph_init
  2865.   indicate bottom$label true
  2866. #ENDCOMMAND
  2867.  
  2868. #COMMAND CHART "BAR""LINE""PIE" 
  2869.   #IFSAME !1 BAR
  2870.     indicate bar$chart true
  2871.   #ENDIF
  2872.   #IFSAME !1 LINE
  2873.     indicate line$chart true
  2874.   #ENDIF
  2875.   #IFSAME !1 PIE
  2876.     indicate pie$chart true
  2877.   #ENDIF
  2878.   #IF (!0>1)
  2879.     trim !2 to graph$title
  2880.   #ELSE
  2881.     move '' to graph$title
  2882.   #ENDIF
  2883.   #IFSAME !1 PIE
  2884.   #ELSE
  2885.     #IF (!0>2)
  2886.       trim !3 to graph$ytitle
  2887.     #ELSE
  2888.       move '' to graph$ytitle
  2889.     #ENDIF
  2890.   #ENDIF
  2891.   #IFSAME !1 PIE
  2892.   #ELSE
  2893.     #IF (!0>3)
  2894.       trim !4 to graph$xtitle
  2895.     #ELSE
  2896.       move '' to graph$xtitle
  2897.     #ENDIF
  2898.   #ENDIF
  2899.   move |VI34 to |VI35
  2900.   gosub do$chart
  2901.   screenmode |VI35
  2902.   #IFSAME !1 BAR
  2903.     indicate bar$chart false
  2904.   #ENDIF
  2905.   #IFSAME !1 LINE
  2906.     indicate line$chart false
  2907.   #ENDIF
  2908.   #IFSAME !1 PIE
  2909.     indicate pie$chart false
  2910.   #ENDIF
  2911.  
  2912.   #IFDEF DO$CHART
  2913.   #ELSE
  2914.     goto do$chart$end
  2915.  
  2916.     do$chart:
  2917.     graph_sum total$value num$values
  2918.     graph_stat min$value max$value
  2919.     gosub sc$init
  2920.     gosub calc$value
  2921.     gosub draw$axis
  2922.     indicate first$value true
  2923.     for graph$num from 1 to num$values
  2924.       [first$value]  graph_getfirst graph$label value$
  2925.       [~first$value] graph_getnext graph$label value$
  2926.       trim graph$label to graph$label
  2927.       [bar$chart] gosub graph$bar
  2928.       [line$chart] gosub graph$line
  2929.       [pie$chart] gosub graph$pie
  2930.       indicate first$value false
  2931.     loop
  2932.     return
  2933.  
  2934.     graph$bar:
  2935.     move (axis$base+((value$/(max$value-min$value))*800)) to upper$right$y
  2936.     move (lower$left$x+bar$width) to upper$right$x
  2937.     bar lower$left$x lower$left$y upper$right$x upper$right$y chart$color
  2938.     [~bottom$label] grxy lower$left$x (upper$right$y-50)
  2939.     [ bottom$label] grxy lower$left$x 50
  2940.     screenmode label$color
  2941.     show graph$label
  2942.     move (lower$left$x+bar$width+bar$space) to lower$left$x
  2943.     return
  2944.  
  2945.     graph$line:
  2946.     move (axis$base+((value$/(max$value-min$value))*800)) to lower$left$y
  2947.     grxy lower$left$x lower$left$y
  2948.     [~first$value] line last$x last$y chart$color
  2949.     circle lower$left$x lower$left$y 5 axis$color
  2950.     move lower$left$x to last$x
  2951.     move lower$left$y to last$y
  2952.     [~bottom$label] grxy lower$left$x (lower$left$y-50)
  2953.     [ bottom$label] grxy lower$left$x 50
  2954.     screenmode label$color
  2955.     show graph$label
  2956.     move (lower$left$x+bar$width+bar$space) to lower$left$x
  2957.     return
  2958.  
  2959.     graph$pie:
  2960.     move ((6.28318 * (value$/total$value)) + last$radian) to radian
  2961.     move ((radian+last$radian)/2) to mid$radian
  2962.     move (cos(mid$radian)*30+500) to last$x
  2963.     move (sin(mid$radian)*30) to last$y
  2964.     move (last$y + (last$y*dev$y/dev$x) + 500) to last$y
  2965.     grxy last$x last$y
  2966.     pie radius last$radian radian chart$color axis$color
  2967.     move radian to last$radian
  2968.     move (cos(mid$radian)*(radius+50)+500) to last$x
  2969.     move (sin(mid$radian)*(radius+50)) to last$y
  2970.     move (last$y + (last$y*dev$y/dev$x) + 500) to last$y
  2971.     if last$x lt 500 ;
  2972.       move (0 max (last$x - (length(graph$label)*8000/dev$x))) to last$x
  2973.     grxy last$x last$y
  2974.     screenmode label$color
  2975.     show graph$label
  2976.     return
  2977.  
  2978.     sc$init:
  2979.     setworld 0 0 1000 1000
  2980.     clearscreen
  2981.     return
  2982.  
  2983.     calc$value:
  2984.     move (max$value*1.05) to max$value
  2985.     move (min$value*1.05) to min$value
  2986.     if min$value gt 0 move 0 to min$value  // zero base pos ranges
  2987.     if max$value lt 0 move 0 to max$value
  2988.  
  2989.     real scaler$
  2990.     integer increments$
  2991.     move (10^(integer(log(max$value max -min$value)/log(10)))) to scaler$
  2992.     move (max$value/scaler$+1) to increments$
  2993.     move (scaler$*increments$) to max$value
  2994.     if min$value lt 0 begin
  2995.       move (scaler$*integer(min$value/scaler$-1)) to min$value
  2996.       move (increments$-integer(min$value/scaler$)) to increments$
  2997.     end
  2998.     if increments$ le 6 move (increments$*2) to increments$
  2999.  
  3000.     move ((((-min$value max min$value)/(max$value-min$value)) ;
  3001.       * 800)+100) to axis$base
  3002.     move axis$base to lower$left$y
  3003.     return
  3004.  
  3005.     center$title:
  3006.     move 3 to text$size
  3007.     center$title2:
  3008.     repeat
  3009.       move (text$size-1) to text$size
  3010.       move (((gr$tmp-((length(graph$label)+1)* ;
  3011.         (text$size*8)))/2)*1000/gr$tmp) to text$center
  3012.     until text$center ge 0
  3013.     return
  3014.  
  3015.     draw$axis:
  3016.     getdrange dev$x dev$y
  3017.     screenmode label$color
  3018.     if (length(graph$title)) gt 0 begin
  3019.       move dev$x to gr$tmp
  3020.       move graph$title to graph$label
  3021.       gosub center$title
  3022.       if (text$size*8000/dev$y) gt 50 gosub center$title2
  3023.       set_text text$size 0
  3024.       grxy text$center 950
  3025.       show graph$title
  3026.     end
  3027.  
  3028.     [pie$chart] begin
  3029.       indicate first$value true
  3030.       move 0 to gr$tmp
  3031.       for graph$num from 1 to num$values
  3032.         [first$value]  graph_getfirst graph$label value$
  3033.         [~first$value] graph_getnext graph$label value$
  3034.         trim graph$label to graph$label
  3035.         move (gr$tmp max length(graph$label)) to gr$tmp
  3036.         indicate first$value false
  3037.       loop
  3038.       set_text 1 0
  3039.       move 0 to last$radian
  3040.       move ((50 max ((dev$x*0.4)-(gr$tmp*8)*1000/dev$x)) min 190) to radius
  3041.       return
  3042.     end
  3043.  
  3044.     if (length(graph$xtitle)) gt 0 begin
  3045.       move graph$xtitle to graph$label
  3046.       gosub center$title
  3047.       set_text text$size 0
  3048.       move (text$size*8000.0/dev$y) to gr$tmp
  3049. //    move ((text$size+1)*8000.0/dev$y) to gr$tmp
  3050.       grxy text$center gr$tmp
  3051.       show graph$xtitle
  3052.       setworld 0 (-gr$tmp) 1000 1000
  3053.     end
  3054.  
  3055.     if (length(graph$ytitle)) gt 0 begin
  3056.       move dev$y to gr$tmp
  3057.       move graph$ytitle to graph$label
  3058.       gosub center$title
  3059.       set_text text$size 1
  3060.       grxy 0 text$center
  3061.       show graph$ytitle
  3062.     end
  3063.     else move 0 to text$size
  3064.  
  3065.     set_text 1 0
  3066.     screenmode label$color
  3067.  
  3068.     move min$value to value$
  3069.     integer indent$
  3070.     move 0 to indent$
  3071.     move ((max$value-min$value)/increments$) to value$step
  3072.     while value$ le max$value
  3073.       move (axis$base+((value$/(max$value-min$value))*800)) ;
  3074.         to upper$right$y
  3075.       grxy (((text$size*8)+2)*1000/dev$x) upper$right$y
  3076.       show value$
  3077.       move (indent$ max length(value$)) to indent$
  3078.       move (value$+value$step) to value$
  3079.     end
  3080.     move ((((indent$+text$size)*8)+12)*1000/dev$x) to indent$
  3081.     move (real(900-indent$)/num$values * 0.8) to bar$width
  3082.     move (real(900-indent$)/num$values * 0.2) to bar$space
  3083.     move (indent$+bar$space) to lower$left$x
  3084.     bar (indent$-10) 90 indent$ 900 axis$color
  3085.     bar indent$ 90 900 100 axis$color
  3086.     grxy indent$ axis$base
  3087.     line 900 axis$base
  3088.     return
  3089.  
  3090.     do$chart$end:
  3091.   #ENDIF
  3092. #ENDCOMMAND
  3093.  
  3094. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  3095. //
  3096. //   Command:
  3097. //     INITIALIZE_INTERFACE
  3098. //
  3099. //   Parameters:
  3100. //     None.
  3101. //
  3102. //   Description:
  3103. //     INITIALIZE_INTERFACE initializes the object resource information.  
  3104. //     It should be executed before any other object related operations
  3105. //     are performed.
  3106. //
  3107. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  3108.  
  3109. #COMMAND INITIALIZE_INTERFACE &.
  3110.   // B$ obj_flag        bit 0 = in_object, bit 1 = in_class
  3111.   // X.AGG agg_count(class)     defined count of objects in class
  3112.  
  3113.   // ZA$ procedure/function label for procedures and functions
  3114.   // ZB$ current_dep        the current dependant number to assign
  3115.   // ZC$ current_message    the current flex message number
  3116.   // ZD$ group_size         size of the current item group
  3117.   // ZE$ group_id           unique id of current item group
  3118.   // ZF$ super_class_count  count of objects in superclass
  3119.   // ZG$ temp               temp counter (items, functions etc)
  3120.   // ZH$ access_method      the current access method identifyer
  3121.   // ZI$ sub_obj_count      the sub object counter
  3122.   // ZJ$ current_object     the current_object number
  3123.  
  3124.   #SET ZC$ $400             // begin up high, past predefinded
  3125.   #SET ZH$ $4001            // begin access methods here
  3126.   #SET ZJ$ 2                // desktop and clipboard are first
  3127.  
  3128.   // Define object class types.
  3129.   #REPLACE U_DESKTOP            |CI1    // a desktop class object
  3130.   #REPLACE U_MESSAGE            |CI2    // a message class object
  3131.   #REPLACE U_MENU               |CI3    // a menu class object
  3132.   #REPLACE U_EDIT               |CI4    // a edit class object
  3133.   #REPLACE U_SCROLLB            |CI5    // a scroll bar class object
  3134.   #REPLACE U_LIST               |CI6    // a list class object
  3135.   #REPLACE U_BUTTON             |CI7    // a button class object
  3136.   #REPLACE U_CHECKBOX           |CI8    // a check box class object
  3137.   #REPLACE U_CHECKLIST          |CI9    // a check box class object
  3138.   #REPLACE U_FORM               |CI10   // a form class object
  3139.   #REPLACE U_FORMLIST           |CI11   // a form class object
  3140.   #REPLACE U_CLIENT             |CI12   // a client area class object
  3141.   #REPLACE U_TITLE              |CI13   // a title bar class object
  3142.   #REPLACE U_ACTION_BAR         |CI14   // a action bar class object
  3143.   #REPLACE U_WARNING_MSG        |CI15   // a warning message class object
  3144.   #REPLACE U_CRIT_MSG           |CI16   // a critical error class object
  3145.   #REPLACE U_ERROR              |CI17   // a standard error class object
  3146.   #REPLACE U_HELP               |CI18   // a help class object
  3147.   #REPLACE U_ARRAY              |CI19   // a array class of mixed scalars
  3148.   #REPLACE U_TRACE              |CI20   // a trace class object
  3149.   #REPLACE U_ENTRY              |CI21   // a data entry class object
  3150.   #REPLACE U_ENTRYLIST          |CI22   // a data entry class object
  3151.   #REPLACE U_DIALOG             |CI23   // a DIALOG area class object
  3152.   #REPLACE U_RADIO              |CI24   // a radio button area
  3153.   #REPLACE U_RADIOLIST          |CI25   // a radio list  area
  3154.   #REPLACE U_VCONSOLE           |CI26   // a virtual console area
  3155.   #REPLACE U_CLIPBOARD          |CI27   // the clipboard handler
  3156.  
  3157.   // Base data structures
  3158.   #REPLACE MESSAGE_CLASS        |CI0
  3159.   #REPLACE MENU_CLASS           |CI1
  3160.   #REPLACE LIST_CLASS           |CI2
  3161.   #REPLACE EDIT_CLASS           |CI3
  3162.   #REPLACE SCROLL_CLASS         |CI4
  3163.   #REPLACE ARRAY_CLASS          |CI5
  3164.  
  3165.  
  3166.   // Define physical key names
  3167.   #REPLACE KEY_ALT              |VI$8200
  3168.   #REPLACE KEY_SHIFT            |VI$8400
  3169.   #REPLACE KEY_CTRL             |VI$8800
  3170.   
  3171.   #REPLACE KEY_ENTER            |VI$9001
  3172.   #REPLACE KEY_TAB              |VI$9002
  3173.   #REPLACE KEY_BACK_SPACE       |VI$9003
  3174.   #REPLACE KEY_ESCAPE           |VI$9004
  3175.   #REPLACE KEY_UP_ARROW         |VI$9005
  3176.   #REPLACE KEY_DOWN_ARROW       |VI$9006
  3177.   #REPLACE KEY_LEFT_ARROW       |VI$9007
  3178.   #REPLACE KEY_RIGHT_ARROW      |VI$9008
  3179.   #REPLACE KEY_HOME             |VI$9009
  3180.   #REPLACE KEY_END              |VI$900A
  3181.   #REPLACE KEY_PGUP             |VI$900B
  3182.   #REPLACE KEY_PGDN             |VI$900C
  3183.   #REPLACE KEY_INSERT           |VI$900D
  3184.   #REPLACE KEY_DELETE           |VI$900E
  3185.   #REPLACE KEY_F1               |VI$9010
  3186.   #REPLACE KEY_F2               |VI$9011
  3187.   #REPLACE KEY_F3               |VI$9012
  3188.   #REPLACE KEY_F4               |VI$9013
  3189.   #REPLACE KEY_F5               |VI$9014
  3190.   #REPLACE KEY_F6               |VI$9015
  3191.   #REPLACE KEY_F7               |VI$9016
  3192.   #REPLACE KEY_F8               |VI$9017
  3193.   #REPLACE KEY_F9               |VI$9018
  3194.   #REPLACE KEY_F10              |VI$9019
  3195.   #REPLACE KEY_F11              |VI$901A
  3196.   #REPLACE KEY_F12              |VI$901B
  3197.   #REPLACE KEY_A                |VI$8041
  3198.   #REPLACE KEY_B                |VI$8042
  3199.   #REPLACE KEY_C                |VI$8043
  3200.   #REPLACE KEY_D                |VI$8044
  3201.   #REPLACE KEY_E                |VI$8045
  3202.   #REPLACE KEY_F                |VI$8046
  3203.   #REPLACE KEY_G                |VI$8047
  3204.   #REPLACE KEY_H                |VI$8048
  3205.   #REPLACE KEY_I                |VI$8049
  3206.   #REPLACE KEY_J                |VI$804A
  3207.   #REPLACE KEY_K                |VI$804B
  3208.   #REPLACE KEY_L                |VI$804C
  3209.   #REPLACE KEY_M                |VI$804D
  3210.   #REPLACE KEY_N                |VI$804E
  3211.   #REPLACE KEY_O                |VI$804F
  3212.   #REPLACE KEY_P                |VI$8050
  3213.   #REPLACE KEY_Q                |VI$8051
  3214.   #REPLACE KEY_R                |VI$8052
  3215.   #REPLACE KEY_S                |VI$8053
  3216.   #REPLACE KEY_T                |VI$8054
  3217.   #REPLACE KEY_U                |VI$8055
  3218.   #REPLACE KEY_V                |VI$8056
  3219.   #REPLACE KEY_W                |VI$8057
  3220.   #REPLACE KEY_X                |VI$8058
  3221.   #REPLACE KEY_Y                |VI$8059
  3222.   #REPLACE KEY_Z                |VI$805A
  3223.   #REPLACE KEY_SPACE            |VI$8020
  3224.   #REPLACE KSPACE               |VI$8020
  3225.   #REPLACE KEY_0                |VI$8030
  3226.   #REPLACE KEY_1                |VI$8031
  3227.   #REPLACE KEY_2                |VI$8032
  3228.   #REPLACE KEY_3                |VI$8033
  3229.   #REPLACE KEY_4                |VI$8034
  3230.   #REPLACE KEY_5                |VI$8035
  3231.   #REPLACE KEY_6                |VI$8036
  3232.   #REPLACE KEY_7                |VI$8037
  3233.   #REPLACE KEY_8                |VI$8038
  3234.   #REPLACE KEY_9                |VI$8039
  3235.   #REPLACE KEY_PLUS             |VI$802B
  3236.   #REPLACE KEY_MINUS            |VI$802D
  3237.   #REPLACE KEY_EQUAL            |VI$803D
  3238.   #REPLACE KEY_BACK_SLASH       |VI$805C
  3239.   #REPLACE KEY_SLASH            |VI$802F
  3240.   
  3241.   // Define Accelerator key names.
  3242.   #REPLACE KHELP                |CI274
  3243.   #REPLACE KSAVE_RECORD         |CI265
  3244.   #REPLACE KDELETE_RECORD       |CI266
  3245.   #REPLACE KEXIT_FUNCTION       |CI281
  3246.   #REPLACE KEXIT_APPLICATION    |CI282
  3247.   #REPLACE KPROMPT              |CI283
  3248.   #REPLACE KPRINT_SCREEN        |CI258
  3249.   #REPLACE KCLEAR               |CI269
  3250.   #REPLACE KREFRESH_SCREEN      |CI284
  3251.   #REPLACE KSWITCH              |CI285
  3252.   #REPLACE KSWITCH_BACK         |CI286
  3253.   #REPLACE KFIND                |CI263
  3254.   #REPLACE KFIND_PREVIOUS       |CI270
  3255.   #REPLACE KFIND_NEXT           |CI271
  3256.   #REPLACE KSUPER_FIND          |CI264
  3257.   #REPLACE KSUPER_FIND_PREVIOUS |CI287
  3258.   #REPLACE KSUPER_FIND_NEXT     |CI288
  3259.   #REPLACE KACTION_BAR          |CI289
  3260.   #REPLACE KENTER               |CI257
  3261.   #REPLACE KUPARROW             |CI272
  3262.   #REPLACE KDOWNARROW           |CI273
  3263.   #REPLACE KLEFTARROW           |CI260
  3264.   #REPLACE KRIGHTARROW          |CI261
  3265.   #REPLACE KSCROLL_BACK         |CI290
  3266.   #REPLACE KSCROLL_FORWARD      |CI291
  3267.   #REPLACE KSCROLL_LEFT         |CI292
  3268.   #REPLACE KSCROLL_RIGHT        |CI293
  3269.   #REPLACE KBEGIN_OF_LINE       |CI294
  3270.   #REPLACE KEND_OF_LINE         |CI295
  3271.   #REPLACE KNEXT_ITEM           |CI296
  3272.   #REPLACE KPREVIOUS_ITEM       |CI262
  3273.   #REPLACE KDELETE_CHARACTER    |CI277
  3274.   #REPLACE KERASE_END_OF_LINE   |CI297
  3275.   #REPLACE KBACK_SPACE          |CI278
  3276.   #REPLACE KCANCEL              |CI259
  3277.   #REPLACE KBEGIN_OF_PANEL      |CI298
  3278.   #REPLACE KEND_OF_PANEL        |CI299
  3279.   #REPLACE KBEGIN_OF_DATA       |CI300
  3280.   #REPLACE KEND_OF_DATA         |CI301
  3281.   #REPLACE KWORD_LEFT           |CI302
  3282.   #REPLACE KWORD_RIGHT          |CI303
  3283.   #REPLACE KINSERT              |CI276
  3284.   #REPLACE KCLEAR_AND_RETURN    |CI279
  3285.   #REPLACE KADD_MODE            |CI304
  3286.   #REPLACE KPASTE               |CI305
  3287.   #REPLACE KCOPY                |CI306
  3288.   #REPLACE KCUT                 |CI307
  3289.   #REPLACE KCLEAR_ALL           |CI308
  3290.   #REPLACE KMOUSE               |CI309
  3291.   #REPLACE KMARK                |CI310
  3292.   #REPLACE KZOOM                |CI311
  3293.   #REPLACE KCLOSE_PANEL         |CI312
  3294.  
  3295.   //OLD KEY DEFINITIONS
  3296.   #REPLACE KCALCULATE           |CI267
  3297.   #REPLACE KUSER                |CI268
  3298.   #REPLACE KUSER2               |CI275
  3299.   #REPLACE KCLEOW               |CI280
  3300.  
  3301.   // Built in UI messages
  3302.   #REPLACE GET_ACTIVE_STATE         |CI$0001
  3303.   #REPLACE GET_PARENT               |CI$0002
  3304.   #REPLACE SET_PARENT               |CI$0003
  3305.   #REPLACE MSG_PAGE_OBJECT          |CI$0004
  3306.   #REPLACE GET_LOCATION             |CI$0005
  3307.   #REPLACE SET_LOCATION             |CI$0006
  3308.   #REPLACE GET_ENTRY_MSG            |CI$0007
  3309.   #REPLACE SET_ENTRY_MSG            |CI$0008
  3310.   #REPLACE GET_EXIT_MSG             |CI$0009
  3311.   #REPLACE SET_EXIT_MSG             |CI$000A
  3312.   #REPLACE SET_SIZE                 |CI$000B
  3313.   #REPLACE GET_SIZE                 |CI$000C
  3314.   #REPLACE GET_CURRENT_ITEM         |CI$000D
  3315.   #REPLACE SET_CURRENT_ITEM         |CI$000E
  3316.   #REPLACE GET_TOP_ITEM             |CI$000F
  3317.   #REPLACE SET_TOP_ITEM             |CI$0010
  3318.   #REPLACE GET_VALUE                |CI$0011
  3319.   #REPLACE SET_VALUE                |CI$0012
  3320.   #REPLACE GET_MESSAGE              |CI$0013
  3321.   #REPLACE SET_MESSAGE              |CI$0014
  3322.   #REPLACE GET_ITEM_COUNT           |CI$0015
  3323.   #REPLACE SET_ITEM_COUNT           |CI$0016
  3324.   #REPLACE GET_SELECT_COUNT         |CI$0017
  3325.   #REPLACE SET_SELECT_COUNT         |CI$0018
  3326.   #REPLACE GET_MULTI_SELECT_MSG     |CI$0019
  3327.   #REPLACE SET_MULTI_SELECT_MSG     |CI$001A
  3328.   #REPLACE SET_FOCUS_MODE           |CI$001B
  3329.   #REPLACE GET_FOCUS_MODE           |CI$001C
  3330.   #REPLACE SET_VISIBLE_STATE        |CI$001D
  3331.   #REPLACE GET_VISIBLE_STATE        |CI$001E
  3332.   #REPLACE SET_SELECT_MODE          |CI$001F
  3333.   #REPLACE GET_SELECT_MODE          |CI$0020
  3334.   #REPLACE SET_WRAP_STATE           |CI$0021
  3335.   #REPLACE GET_WRAP_STATE           |CI$0022
  3336.   #REPLACE SET_SHADOW_STATE         |CI$0023
  3337.   #REPLACE GET_SHADOW_STATE         |CI$0024
  3338.   #REPLACE GET_SELECT_STATE         |CI$0025
  3339.   #REPLACE SET_SELECT_STATE         |CI$0026
  3340.   #REPLACE SET_AUTOCLEAR_STATE      |CI$0027
  3341.   #REPLACE GET_AUTOCLEAR_STATE      |CI$0028
  3342.   #REPLACE SET_CENTER_STATE         |CI$0029
  3343.   #REPLACE GET_CENTER_STATE         |CI$002A
  3344.   #REPLACE SET_CHECKBOX_ITEM_STATE  |CI$002B
  3345.   #REPLACE GET_CHECKBOX_ITEM_STATE  |CI$002C
  3346.   #REPLACE MSG_STOP_UI              |CI$002D
  3347.   #REPLACE MSG_ERROR                |CI$002E
  3348.   #REPLACE MSG_HELP                 |CI$002F
  3349.   #REPLACE MSG_BELL                 |CI$0030
  3350.   #REPLACE MSG_PAINT                |CI$0031
  3351.   #REPLACE MSG_NONE                 |CI$0032
  3352.   #REPLACE MSG_EXIT                 |CI$0033
  3353.   #REPLACE MSG_NEXT                 |CI$0034
  3354.   #REPLACE MSG_PULL_RIGHT           |CI$0035
  3355.   #REPLACE MSG_PULL_LEFT            |CI$0036
  3356.   #REPLACE MSG_KEY                  |CI$0037
  3357.   #REPLACE MSG_INSERT_ITEM          |CI$0038
  3358.   #REPLACE MSG_ADD_ITEM             |CI$0039
  3359.   #REPLACE MSG_DELETE_ITEM          |CI$003A
  3360.   #REPLACE MSG_DELETE_DATA          |CI$003B
  3361.   #REPLACE MSG_SORT_ITEMS           |CI$003C
  3362.   #REPLACE GET_ITEM_MATCHING        |CI$003D
  3363.   #REPLACE GET_AUX_VALUE            |CI$003E
  3364.   #REPLACE SET_AUX_VALUE            |CI$003F
  3365.   #REPLACE GET_SEARCH_MODE          |CI$0040
  3366.   #REPLACE SET_SEARCH_MODE          |CI$0041
  3367.   #REPLACE GET_INVERSE_STATE        |CI$0042
  3368.   #REPLACE SET_INVERSE_STATE        |CI$0043
  3369.   #REPLACE MSG_SCROLL               |CI$0044
  3370.   #REPLACE SET_CLASS_COLORS         |CI$0045
  3371.   #REPLACE GET_HORIZONTAL_INCREMENT |CI$0046
  3372.   #REPLACE SET_HORIZONTAL_INCREMENT |CI$0047
  3373.   #REPLACE MSG_UP                   |CI$0048
  3374.   #REPLACE MSG_DOWN                 |CI$0049
  3375.   #REPLACE MSG_RIGHT                |CI$004A
  3376.   #REPLACE MSG_LEFT                 |CI$004B
  3377.   #REPLACE MSG_BEGINNING_OF_DATA    |CI$004C
  3378.   #REPLACE MSG_END_OF_DATA          |CI$004D
  3379.   #REPLACE MSG_BEGINNING_OF_PANEL   |CI$004E
  3380.   #REPLACE MSG_END_OF_PANEL         |CI$004F
  3381.   #REPLACE MSG_BEGINNING_OF_LINE    |CI$0050
  3382.   #REPLACE MSG_END_OF_LINE          |CI$0051
  3383.   #REPLACE MSG_PAGE_UP              |CI$0052
  3384.   #REPLACE MSG_PAGE_DOWN            |CI$0053
  3385.   #REPLACE SET_INSERT_MODE          |CI$0054
  3386.   #REPLACE MSG_GOTO_LINE            |CI$0055
  3387.   #REPLACE MSG_MOVE_ABSOLUTE        |CI$0056
  3388.   #REPLACE MSG_MOVE_RELATIVE        |CI$0057
  3389.   #REPLACE MSG_MARK_ON              |CI$0058
  3390.   #REPLACE MSG_PASTE                |CI$0059
  3391.   #REPLACE MSG_CUT                  |CI$005A
  3392.   #REPLACE MSG_COPY                 |CI$005B
  3393.   #REPLACE MSG_INSERT               |CI$005C
  3394.   #REPLACE MSG_DELETE_CHAR          |CI$005D
  3395.   #REPLACE MSG_DELETE_LINE          |CI$005E
  3396.   #REPLACE MSG_DELETE_TO_EOL        |CI$005F
  3397.   #REPLACE MSG_FIND                 |CI$0060
  3398.   #REPLACE GET_FIND                 |CI$0060 //dup
  3399.   #REPLACE MSG_REPLACE              |CI$0061
  3400.   #REPLACE GET_REPLACE              |CI$0061 //dup
  3401.   #REPLACE MSG_PRINT                |CI$0062
  3402.   #REPLACE GET_MARK                 |CI$0063
  3403.   #REPLACE GET_CHANGED_STATE        |CI$0064
  3404.   #REPLACE SET_CHANGED_STATE        |CI$0065
  3405.   #REPLACE SET_RIGHT_MARGIN         |CI$0066
  3406.   #REPLACE GET_LINE_COUNT           |CI$0067
  3407.   #REPLACE SET_STATUS_LINE_STATE    |CI$0068
  3408.   #REPLACE SET_BLOCK_MOUSE_STATE    |CI$0069
  3409.   #REPLACE GET_BLOCK_MOUSE_STATE    |CI$006A
  3410.   #REPLACE SET_COLUMN_MODE          |CI$006B
  3411.   #REPLACE GET_COLUMN_MODE          |CI$006C
  3412.   #REPLACE SET_FILE_NAME            |CI$006D
  3413.   #REPLACE GET_FILE_NAME            |CI$006E
  3414.   #REPLACE MSG_DEFAULT_KEY          |CI$006F
  3415.   #REPLACE SET_DYNAMIC_UPDATE_STATE |CI$0070
  3416.   #REPLACE GET_FOCUS                |CI$0071
  3417.   #REPLACE MSG_REFRESH_SCREEN       |CI$0072
  3418.   #REPLACE MSG_PREVIOUS             |CI$0073
  3419.   #REPLACE SET_CHECK_STRING         |CI$0074
  3420.   #REPLACE MSG_ACTIVATE             |CI$0075
  3421.   #REPLACE MSG_ACTIVATE_GROUP       |CI$0076
  3422.   #REPLACE MSG_DEACTIVATE           |CI$0077
  3423.   #REPLACE MSG_DEACTIVATE_GROUP     |CI$0078
  3424.   #REPLACE SET_LOCAL_ROTATE_STATE   |CI$0079
  3425.   #REPLACE GET_LOCAL_ROTATE_STATE   |CI$007A
  3426.   #REPLACE SET_CLIENT_AREA_STATE    |CI$007B
  3427.   #REPLACE GET_CLIENT_AREA_STATE    |CI$007C
  3428.   #REPLACE GET_READ_ONLY_STATE      |CI$007D
  3429.   #REPLACE SET_READ_ONLY_STATE      |CI$007E
  3430.   #REPLACE SET_LINE_WIDTH           |CI$007F
  3431.   #REPLACE GET_LINE_SIZE            |CI$0080
  3432.   #REPLACE GET_DISPLAY_SIZE         |CI$0081
  3433.   #REPLACE SET_SCROLL_BAR_VISIBLE_STATE |CI$0082
  3434.   #REPLACE SET_ORIGIN               |CI$0083
  3435.   #REPLACE GET_ORIGIN               |CI$0084
  3436.   #REPLACE GET_POSITION             |CI$0085
  3437.   #REPLACE MSG_TRUE                 |CI$0086
  3438.   #REPLACE MSG_FALSE                |CI$0087
  3439.   #REPLACE MSG_LAST_KEY_PRESSED     |CI$0088
  3440.   #REPLACE GET_LAST_KEY_PRESSED     |CI$0088 //dup
  3441.   #REPLACE SET_RADIO_STRING         |CI$0089
  3442.   #REPLACE SET_ENTRY_STATE          |CI$008A
  3443.   #REPLACE GET_ENTRY_STATE          |CI$008B
  3444.   #REPLACE MSG_READ                 |CI$008C
  3445.   #REPLACE MSG_WRITE                |CI$008D
  3446.   #REPLACE SET_SCROLL_BAR_OFFSET    |CI$008E
  3447.   #REPLACE GET_SCROLL_BAR_OFFSET    |CI$008F
  3448.   #REPLACE MSG_ITEM_CHANGE          |CI$0090
  3449.   #REPLACE GET_ITEM_CHANGED_STATE   |CI$0091
  3450.   #REPLACE SET_ITEM_CHANGED_STATE   |CI$0092
  3451.   #REPLACE GET_AUTO_TOP_ITEM_STATE  |CI$0093
  3452.   #REPLACE SET_AUTO_TOP_ITEM_STATE  |CI$0094
  3453.   #REPLACE SET_KBD_INPUT_MODE       |CI$0095
  3454.   #REPLACE MSG_SUPPLY_KEY           |CI$0096
  3455.   #REPLACE GET_INSERT_MODE          |CI$0097
  3456.   #REPLACE MSG_OK                   |CI$0098
  3457.   #REPLACE MSG_CANCEL               |CI$0099
  3458.   #REPLACE GET_ARRAY_VALUE          |CI$009A
  3459.   #REPLACE SET_ARRAY_VALUE          |CI$009B
  3460.   #REPLACE MSG_CONSTRUCT_OBJECT     |CI$009C
  3461.   #REPLACE MSG_ACTIVATING           |CI$009D
  3462.   #REPLACE MSG_TRACE_SWITCH         |CI$009E
  3463.   #REPLACE MSG_TRACE_MESSAGE        |CI$009F
  3464.   #REPLACE MSG_TRACE_STEP           |CI$00A0
  3465.   #REPLACE MSG_TRACE_OUTPUT         |CI$00A1
  3466.   #REPLACE MSG_DEACTIVATING         |CI$00A2
  3467.   #REPLACE GET_CLASS                |CI$00A3
  3468.   #REPLACE GET_HELP_NAME            |CI$00A4
  3469.   #REPLACE MSG_EXIT_APPLICATION     |CI$00A5
  3470.   #REPLACE MSG_PRINT_SCREEN         |CI$00A6
  3471.   #REPLACE GET_RIGHT_MARGIN         |CI$00A7
  3472.   #REPLACE GET_DELEGATION_MODE      |CI$00A8
  3473.   #REPLACE SET_DELEGATION_MODE      |CI$00A9
  3474.   #REPLACE GET_BASE_CLASS           |CI$00AA
  3475.   #REPLACE SET_ITEM_ENTRY_MSG       |CI$00AB
  3476.   #REPLACE GET_ITEM_ENTRY_MSG       |CI$00AC
  3477.   #REPLACE SET_ITEM_EXIT_MSG        |CI$00AD
  3478.   #REPLACE GET_ITEM_EXIT_MSG        |CI$00AE
  3479.   #REPLACE SET_ITEM_VALIDATE_MSG    |CI$00AF
  3480.   #REPLACE GET_ITEM_VALIDATE_MSG    |CI$00B0
  3481.   #REPLACE SET_DATA_FILE            |CI$00B1
  3482.   #REPLACE GET_DATA_FILE            |CI$00B2
  3483.   #REPLACE SET_DATA_FIELD           |CI$00B3
  3484.   #REPLACE GET_DATA_FIELD           |CI$00B4
  3485.   #REPLACE SET_DATA_WINDOW          |CI$00B5
  3486.   #REPLACE GET_DATA_WINDOW          |CI$00B6
  3487.   #REPLACE SET_ITEM_OPTIONS         |CI$00B7
  3488.   #REPLACE GET_ITEM_OPTIONS         |CI$00B8
  3489.   #REPLACE SET_ITEM_OPTION          |CI$00B9
  3490.   #REPLACE GET_ITEM_OPTION          |CI$00BA
  3491.   #REPLACE MSG_ENTRY_UPDATE         |CI$00BB
  3492.   #REPLACE MSG_ENTRY_FIND           |CI$00BC
  3493.   #REPLACE MSG_ENTRY_SUPERFIND      |CI$00BD
  3494.   #REPLACE MSG_ENTRY_DISPLAY        |CI$00BE
  3495.   #REPLACE MSG_ENTRY_CLEAR          |CI$00BF
  3496.   #REPLACE GET_VALIDATE_ITEMS       |CI$00C0
  3497.   #REPLACE GET_ITEM_WINDOW          |CI$00C1
  3498.   #REPLACE MSG_COPY_ITEMS           |CI$00C2
  3499.   #REPLACE GET_IMAGE_NUMBER         |CI$00C3
  3500.   #REPLACE MSG_ENTRY_CLEAR_ALL      |CI$00C4
  3501.   #REPLACE MSG_SELECT_TOGGLING      |CI$00C5
  3502.   #REPLACE GET_ITEM_ENTRY           |CI$00C6
  3503.   #REPLACE GET_ITEM_EXIT            |CI$00C7
  3504.   #REPLACE GET_ITEM_VALIDATE        |CI$00C8
  3505.   #REPLACE GET_READ_ONLY_ERROR      |CI$00C9
  3506.   #REPLACE GET_NAME                 |CI$00CA
  3507.   #REPLACE GET_ENTRY                |CI$00CB
  3508.   #REPLACE MSG_DESTROY_OBJECT       |CI$00CC
  3509.   #REPLACE MSG_DESTROY_ALL_OBJECTS  |CI$00CD
  3510.   #REPLACE GET_MOUSE_HIT            |CI$00CE
  3511.   #REPLACE SET_OBJECT_COLOR         |CI$00CF
  3512.   #REPLACE SET_ARROWS               |CI$00D0
  3513.   #REPLACE MSG_SWITCH               |CI$00D1
  3514.   #REPLACE MSG_SWITCH_BACK          |CI$00D2
  3515.   #REPLACE GET_WAS_FOUND            |CI$00D3
  3516.   #REPLACE GET_STATUS_LINE_STATE    |CI$00D4
  3517.   #REPLACE SET_HIGHLIGHT_STATE      |CI$00D5    // INTERNAL
  3518.   #REPLACE MSG_ROTATE_UP            |CI$00D6    // INTERNAL
  3519.   #REPLACE MSG_POP_PAGES            |CI$00D7    // INTERNAL
  3520.   #REPLACE SET_CLASS                |CI$00D8    // INTERNAL
  3521.   #REPLACE MSG_FETCH_HELP           |CI$00D9    // INTERNAL
  3522.   #REPLACE GET_OBJECT_ID            |CI$00DA    // INTERNAL
  3523.   #REPLACE MSG_INIT_INSTANCE        |CI$00DB    // INTERNAL
  3524.   #REPLACE MSG_PAGE                 |CI$00DC    // INTERNAL
  3525.   #REPLACE MSG_PAGE_DELETE          |CI$00DD    // INTERNAL
  3526.   //#REPLACE GET_COLORS             |CI$00DE    // INTERNAL
  3527.   #REPLACE GET_BAR_LOCATION         |CI$00DF    // INTERNAL
  3528.   #REPLACE RETURN_LOCATION          |CI$00E0    // INTERNAL
  3529.   #REPLACE MSG_CHANGE_LOCATION      |CI$00E1    // INTERNAL
  3530.   #REPLACE MSG_WRITE_DBMS           |CI$00E2
  3531.   #REPLACE MSG_READ_DBMS            |CI$00E3
  3532.   #REPLACE MSG_WRITE_IMAGE          |CI$00E2    // same as dbms
  3533.   #REPLACE MSG_READ_IMAGE           |CI$00E3    // same as dbms
  3534.   #REPLACE GET_STRING_VALUE         |CI$00E4
  3535.   #REPLACE GET_NUMBER_VALUE         |CI$00E5
  3536.   #REPLACE GET_DATE_VALUE           |CI$00E6
  3537.   #REPLACE GET_INTEGER_VALUE        |CI$00E7
  3538.   #REPLACE GET_REAL_VALUE           |CI$00E8
  3539.   #REPLACE SET_BASE_ITEM            |CI$00E9
  3540.   #REPLACE GET_BASE_ITEM            |CI$00EA
  3541.   #REPLACE SET_ITEM_LIMIT           |CI$00EB
  3542.   #REPLACE GET_ITEM_LIMIT           |CI$00EC
  3543.   #REPLACE MSG_MARK_OFF             |CI$00ED
  3544.   #REPLACE SET_SEARCH_CASE          |CI$00EE
  3545.   #REPLACE SET_PRIOR_FOCUS          |CI$00EF
  3546.   #REPLACE GET_PRIOR_FOCUS          |CI$00F0
  3547.   #REPLACE SET_NEXT_FOCUS           |CI$00F1
  3548.   #REPLACE GET_NEXT_FOCUS           |CI$00F2
  3549.   #REPLACE SET_SCROLLBAR            |CI$00F3
  3550.   #REPLACE GET_ASCII_STATE          |CI$00F4
  3551.   #REPLACE SET_ASCII_STATE          |CI$00F5
  3552.   #REPLACE GET_TEXT_INDENT          |CI$00F6
  3553.   #REPLACE SET_TEXT_INDENT          |CI$00F7
  3554.   #REPLACE MSG_ENTRY_AUTOFIND       |CI$00F8
  3555.   #REPLACE SET_SCOPE_STATE          |CI$00F9
  3556.   #REPLACE GET_SCOPE_STATE          |CI$00FA
  3557.   #REPLACE MSG_MOUSE_CHANGE_FOCUS   |CI$00FB
  3558.   #REPLACE GET_CHILD_COUNT          |CI$00FC
  3559.   #REPLACE MSG_MOUSE_UP             |CI$00FD
  3560.   #REPLACE MSG_MOUSE_UP2            |CI$00FE
  3561.   #REPLACE MSG_MOUSE_UP3            |CI$00FF
  3562.   #REPLACE MSG_MOUSE_CLICK          |CI$0100
  3563.   #REPLACE MSG_MOUSE_CLICK2         |CI$0101
  3564.   #REPLACE MSG_MOUSE_CLICK3         |CI$0102
  3565.   #REPLACE MSG_MOUSE_DOWN           |CI$0103
  3566.   #REPLACE MSG_MOUSE_DOWN2          |CI$0104
  3567.   #REPLACE MSG_MOUSE_DOWN3          |CI$0105
  3568.   #REPLACE MSG_MOUSE_DRAG           |CI$0106
  3569.   #REPLACE MSG_MOUSE_DRAG2          |CI$0107
  3570.   #REPLACE MSG_MOUSE_DRAG3          |CI$0108
  3571.   #REPLACE GET_ABSOLUTE_MOUSE_LOCATION |CI$0109
  3572.   #REPLACE SET_ABSOLUTE_MOUSE_LOCATION |CI$010A
  3573.   #REPLACE GET_DYNAMIC_UPDATE_STATE |CI$010B
  3574.   #REPLACE SET_MAX_LINES            |CI$010C
  3575.   #REPLACE GET_MAX_LINES            |CI$010D
  3576.   #REPLACE MSG_VIRTUAL_CONSOLE      |CI$010E
  3577.   #REPLACE GET_NEXT_ENTRY_OK        |CI$010F
  3578.   #REPLACE GET_PREVIOUS_ENTRY_OK    |CI$0110
  3579.   #REPLACE SET_DYNAMIC_COLORS       |CI$0111
  3580.   #REPLACE SET_NEW_ITEM             |CI$0112
  3581.   #REPLACE SET_BROADCAST_STATE      |CI$0113
  3582.   #REPLACE GET_BROADCAST_STATE      |CI$0114
  3583.   #REPLACE GET_WRAPPING             |CI$0115
  3584.   #REPLACE GET_ROW_CHANGING         |CI$0116
  3585.   #REPLACE MSG_ADD_FOCUS            |CI$0117
  3586.   #REPLACE MSG_REMOVE_OBJECT        |CI$0118
  3587.   #REPLACE MSG_RELEASE_FOCUS        |CI$0119
  3588.   #REPLACE MSG_ENTERING             |CI$011A
  3589.   #REPLACE MSG_EXITING              |CI$011B
  3590.   #REPLACE MSG_ENTERING_SCOPE       |CI$011C
  3591.   #REPLACE MSG_EXITING_SCOPE        |CI$011D
  3592.   #REPLACE MSG_SWITCH_NEXT_GROUP    |CI$011E
  3593.   #REPLACE MSG_SWITCH_PRIOR_GROUP   |CI$011F
  3594.   #REPLACE GET_CURRENT_SCOPE        |CI$0120
  3595.   #REPLACE SET_CURRENT_SCOPE        |CI$0121
  3596.   #REPLACE MSG_POPUP                |CI$0122
  3597.   #REPLACE MSG_POPUP_GROUP          |CI$0123
  3598.   #REPLACE SET_POPUP_STATE          |CI$0124
  3599.   #REPLACE GET_POPUP_STATE          |CI$0125
  3600.   #REPLACE SET_RING_STATE           |CI$0126
  3601.   #REPLACE GET_RING_STATE           |CI$0127
  3602.   #REPLACE MSG_MOVE_FOCUS_TREE      |CI$0128
  3603.   #REPLACE SET_PROMPT_OBJECT        |CI$0129
  3604.   #REPLACE GET_PROMPT_OBJECT        |CI$012A
  3605.   #REPLACE SET_ZOOM_OBJECT          |CI$012B
  3606.   #REPLACE GET_ZOOM_OBJECT          |CI$012C
  3607.   #REPLACE GET_PRIOR_LEVEL          |CI$012D
  3608.   #REPLACE GET_NEXT_LEVEL           |CI$012E
  3609.   #REPLACE GET_PRIOR_SCOPE          |CI$012F
  3610.   #REPLACE GET_NEXT_SCOPE           |CI$0130
  3611.   #REPLACE MSG_SWITCH_PRIOR_SCOPE   |CI$0131
  3612.   #REPLACE MSG_SWITCH_NEXT_SCOPE    |CI$0132
  3613.   #REPLACE SET_ATTACH_PARENT_STATE  |CI$0133
  3614.   #REPLACE GET_ATTACH_PARENT_STATE  |CI$0134
  3615.   #REPLACE MSG_CHILD_WRAPPING       |CI$0135
  3616.   #REPLACE SET_DISPLAY_MODE         |CI$0136
  3617.   #REPLACE GET_DISPLAY_MODE         |CI$0137
  3618.   #REPLACE MSG_COLOR_BLOCK          |CI$0138
  3619.   #REPLACE MSG_NEXT_OBJECT          |CI$0139
  3620.   #REPLACE MSG_PRIOR_OBJECT         |CI$013A
  3621.   #REPLACE SET_APPLICATION_NAME     |CI$013B
  3622.   #REPLACE GET_APPLICATION_NAME     |CI$013C
  3623.   #REPLACE SET_MODULE_NAME          |CI$013D
  3624.   #REPLACE GET_MODULE_NAME          |CI$013E
  3625.   #REPLACE GET_LAST_CHILD           |CI$013F
  3626.   #REPLACE SET_WINDOW_COLOR         |CI$0140
  3627.   #REPLACE GET_WINDOW_COLOR         |CI$0141
  3628.   #REPLACE MSG_PROCESS_KEY          |CI$0142
  3629.   #REPLACE MSG_ACTIVATE_SCOPE       |CI$0143
  3630.   #REPLACE GET_FIND_SCOPE           |CI$0144
  3631.   #REPLACE GET_SCOPE_FOCUS          |CI$0145
  3632.   #REPLACE GET_VALID_ITEM           |CI$0146
  3633.   #REPLACE MSG_UPDATE_DISPLAY       |CI$0147
  3634.   #REPLACE SET_ITEM                 |CI$0148
  3635.   #REPLACE MSG_TRACE_COMMAND        |CI$0149    // INTERNAL 
  3636.   #REPLACE GET_OBJECT_COLOR         |CI$014A
  3637.   #REPLACE SET_OBJECT_VALIDATION    |CI$014B
  3638.   #REPLACE GET_OBJECT_VALIDATION    |CI$014C
  3639.   #REPLACE GET_NEXT_OBJECT_ID       |CI$014D
  3640.   #REPLACE GET_PRIOR_OBJECT_ID      |CI$014E
  3641.   #REPLACE GET_CLASS_COLORS         |CI$014F
  3642.   #REPLACE GET_LOCATION_TYPE        |CI$0150
  3643.   #REPLACE GET_OBJECT_SIZE          |CI$0151
  3644.   #REPLACE GET_IN_USE_STATE         |CI$0152
  3645.   #REPLACE SET_IN_USE_STATE         |CI$0153
  3646.   #REPLACE MSG_ATTACH_DEO_TO_SERVER |CI$0154
  3647.   #REPLACE MSG_REQUEST_CLEAR_ALL    |CI$0155
  3648.   #REPLACE MSG_CLEAR                |CI$0156
  3649.   #REPLACE SET_CURRENT_RECORD       |CI$0157
  3650.   #REPLACE GET_CURRENT_RECORD       |CI$0158
  3651.   #REPLACE MSG_REBUILD_CONSTRAINTS  |CI$0159
  3652.   #REPLACE MSG_CONSTRAIN            |CI$015A
  3653.   #REPLACE SET_MAIN_FILE            |CI$015B
  3654.   #REPLACE GET_MAIN_FILE            |CI$015C
  3655.   #REPLACE GET_FIND_SERVER          |CI$015D
  3656.   #REPLACE GET_LOCATE_SERVER        |CI$015E
  3657.   #REPLACE MSG_MARK_AS_COMPONENT    |CI$015F
  3658.   #REPLACE MSG_DELETING             |CI$0160
  3659.   #REPLACE GET_VALIDATE_DELETE      |CI$0161
  3660.   #REPLACE MSG_REQUEST_DELETE       |CI$0162
  3661.   #REPLACE MSG_DISPLAY              |CI$0163
  3662.   #REPLACE MSG_RELATE_MAIN_FILE     |CI$0164
  3663.   #REPLACE MSG_CLEAR_UI             |CI$0165
  3664.   #REPLACE MSG_DISPLAY_UI           |CI$0166
  3665.   #REPLACE MSG_REQUEST_ASSIGN       |CI$0167
  3666.   #REPLACE GET_VALIDATE_SAVE        |CI$0168
  3667.   #REPLACE MSG_ATTACH_MAIN_FILE     |CI$0169
  3668.   #REPLACE MSG_REQUEST_CLEAR        |CI$016A
  3669.   #REPLACE MSG_BACKOUT              |CI$016B
  3670.   #REPLACE MSG_UPDATE               |CI$016C
  3671.   #REPLACE MSG_SAVE_MAIN_FILE       |CI$016D
  3672.   #REPLACE MSG_DELETE_MAIN_FILE     |CI$016E
  3673.   #REPLACE GET_ENTRY_PERMISSIVE_STATE |CI$016F
  3674.   #REPLACE SET_ENTRY_PERMISSIVE_STATE |CI$0170
  3675.   #REPLACE SET_ORDERING             |CI$0171
  3676.   #REPLACE GET_ORDERING             |CI$0172
  3677.   #REPLACE GET_COMPONENT_STATE      |CI$0173
  3678.   #REPLACE SET_COMPONENT_STATE      |CI$0174
  3679.   #REPLACE GET_HAS_COMPONENTS_STATE |CI$0175
  3680.   #REPLACE SET_HAS_COMPONENTS_STATE |CI$0176
  3681.   #REPLACE MSG_REQUEST_SAVE         |CI$0177
  3682.   #REPLACE MSG_REMOVE_FOCUS         |CI$0178
  3683.   #REPLACE MSG_ATTACH_SERVER        |CI$0179
  3684.   #REPLACE MSG_DETACH_SERVER        |CI$017A
  3685.   #REPLACE MSG_ATTACH_CLIENT        |CI$017B
  3686.   #REPLACE MSG_DETACH_CLIENT        |CI$017C
  3687.   #REPLACE MSG_ADD_USER_INTERFACE   |CI$017D
  3688.   #REPLACE MSG_REMOVE_USER_INTERFACE |CI$017E
  3689.   #REPLACE MSG_MAIN_FILE_CHANGED    |CI$017F
  3690.   #REPLACE GET_IS_SUPERFIND_REQUIRED |CI$0180
  3691.   #REPLACE MSG_REQUEST_FIND         |CI$0181
  3692.   #REPLACE MSG_ADD_PARENT_FILE      |CI$0182
  3693.   #REPLACE MSG_REMOVE_PARENT_FILE   |CI$0183
  3694.   #REPLACE MSG_REQUEST_SUPERFIND    |CI$0184
  3695.   #REPLACE MSG_REQUEST_READ         |CI$0185
  3696.   #REPLACE MSG_READ_BY_RECNUM       |CI$0186
  3697.   #REPLACE MSG_FIND_BY_RECNUM       |CI$0187
  3698.   #REPLACE MSG_ESTABLISH_FIND_DIRECTION |CI$0188
  3699.   #REPLACE MSG_LOCATE_NEXT          |CI$0189
  3700.   #REPLACE GET_RECORD_NOT_FOUND     |CI$018A
  3701.   #REPLACE MSG_INIT_CLASS           |CI$018B
  3702.   #REPLACE SET_IMAGE_NUMBER         |CI$018C
  3703.   #REPLACE GET_ROW                  |CI$018D
  3704.   #REPLACE GET_CURRENT_ROW          |CI$018E
  3705.   #REPLACE GET_TOP_ROW              |CI$018F
  3706.   #REPLACE GET_BOTTOM_ITEM          |CI$0190
  3707.   #REPLACE GET_BOTTOM_ROW           |CI$0191
  3708.   #REPLACE GET_ROW_COUNT            |CI$0192
  3709.   #REPLACE GET_DISPLAYABLE_ROWS     |CI$0193
  3710.   #REPLACE MSG_ADD_ROW              |CI$0194
  3711.   #REPLACE MSG_INSERT_ROW           |CI$0195
  3712.   #REPLACE SET_PALETTE_COLOR        |CI$0196
  3713.   #REPLACE GET_PALETTE_COLOR        |CI$0197
  3714.   #REPLACE SET_CLASS_PALETTE        |CI$0198
  3715.   #REPLACE GET_CLASS_PALETTE        |CI$0199
  3716.   #REPLACE GET_NO_DELETE_STATE      |CI$019A
  3717.   #REPLACE SET_NO_DELETE_STATE      |CI$019B
  3718.   #REPLACE MSG_REQUEST_ENTRY_UPDATE |CI$019C
  3719.   #REPLACE MSG_SCROLL_PAINT         |CI$019D
  3720.   #REPLACE MSG_SHOW_ITEM            |CI$019E
  3721.   #REPLACE SET_EXTERNAL_PAINT_STATE |CI$019F
  3722.   #REPLACE GET_EXTERNAL_PAINT_STATE |CI$01A0
  3723.   #REPLACE SET_MATRIX_SIZE          |CI$01A1
  3724.   #REPLACE GET_MATRIX_SIZE          |CI$01A2
  3725.   #REPLACE SET_SKIP_STATE           |CI$01A3
  3726.   #REPLACE GET_SKIP_STATE           |CI$01A4
  3727.   #REPLACE GET_REQUEST_VALIDATE     |CI$01A5
  3728.   #REPLACE GET_AUTO_FILL_STATE      |CI$01A6
  3729.   #REPLACE SET_AUTO_FILL_STATE      |CI$01A7
  3730.   #REPLACE GET_FIND_PERMISSIVE_STATE |CI$01A8
  3731.   #REPLACE SET_FIND_PERMISSIVE_STATE |CI$01A9
  3732.   #REPLACE MSG_TRANSACTION_ABORTED  |CI$01AA
  3733.   #REPLACE MSG_CLEAR_ALL            |CI$01AB
  3734.   #REPLACE MSG_CREATING             |CI$01AC
  3735.   #REPLACE MSG_DESTROYING           |CI$01AD
  3736.   #REPLACE GET_SHOULD_SAVE          |CI$01AE
  3737.   #REPLACE GET_WHICH_DATA_SET       |CI$01AF
  3738.   #REPLACE GET_VALIDATE_CONSTRAINTS |CI$01B0
  3739.   #REPLACE MSG_ERROR_REPORT         |CI$01B1
  3740.   #REPLACE MSG_REQUEST_RELATE       |CI$01B2
  3741.   #REPLACE GET_ERROR_TEXT           |CI$01B3
  3742.   #REPLACE GET_SUGGESTED_ORDERING   |CI$01B4
  3743.   #REPLACE SET_SUGGESTED_ORDERING   |CI$01B5
  3744.   #REPLACE GET_NO_RELATE_STATE      |CI$01B6
  3745.   #REPLACE SET_NO_RELATE_STATE      |CI$01B7
  3746.   #REPLACE GET_WINDOW_LOCATION      |CI$01B8
  3747.   #REPLACE GET_SIGNON_STATUS        |CI$01B9
  3748. //  #REPLACE MSG_ADD_WATCHER          |CI$01BA
  3749. //  #REPLACE MSG_REMOVE_WATCHER       |CI$01BB
  3750.   #REPLACE GET_SEARCH_CASE          |CI$01BC
  3751.   #REPLACE GET_SHOULD_SAVE_ROW      |CI$01BD
  3752.   #REPLACE MSG_DISPLAY_STATUS       |CI$01BE
  3753.   #REPLACE MSG_CLEAR_SET            |CI$01BF
  3754.   #REPLACE GET_AUTOFIND_ITEM        |CI$01C0
  3755.   #REPLACE SET_KEY_PATH             |CI$01C1
  3756.   #REPLACE GET_KEY_PATH             |CI$01C2
  3757.   #REPLACE GET_CAN_DELETE           |CI$01C3
  3758.   #REPLACE MSG_UPDATE_DEPENDENT_ITEMS |CI$01C4
  3759.   #REPLACE GET_SUPERFIND_FIELD      |CI$01C5
  3760.   #REPLACE MSG_REFRESH              |CI$01C6
  3761.   #REPLACE MSG_PROCESS_ACCELERATOR  |CI$01C7
  3762.   #REPLACE GET_ERROR_TEXT_AVAILABLE |CI$01C8
  3763.   #REPLACE GET_PROTOTYPE_OBJECT     |CI$01C9
  3764.   #REPLACE MSG_REFIND_RECORDS       |CI$01CA
  3765.   #REPLACE MSG_END_CONSTRUCT_OBJECT |CI$01CB
  3766.   #REPLACE MSG_CLEAR_MAIN_FILE      |CI$01CC
  3767.   #REPLACE MSG_REQUEST_CLEAR_FILE   |CI$01CD
  3768.  
  3769.   #REPLACE DFLT$VALUE X
  3770.   #REPLACE DFLT$MESSAGE X
  3771.   #REPLACE DFLT$AUX_VALUE X
  3772.   #REPLACE DFLT$SHADOW_STATE X
  3773.   #REPLACE DFLT$SELECT_STATE X
  3774.   #REPLACE DFLT$CHECKBOX_ITEM_STATE X
  3775.   #REPLACE DFLT$AUTOCLEAR_STATE X
  3776.   #REPLACE DFLT$CENTER_STATE X
  3777.   #REPLACE DFLT$ENTRY_STATE X
  3778.   #REPLACE DFLT$ITEM_CHANGED_STATE X
  3779.   #REPLACE DFLT$ITEM_ENTRY_MSG X
  3780.   #REPLACE DFLT$ITEM_EXIT_MSG X
  3781.   #REPLACE DFLT$ITEM_VALIDATE_MSG X
  3782.   #REPLACE DFLT$DATA_FILE X
  3783.   #REPLACE DFLT$DATA_FIELD X
  3784.   #REPLACE DFLT$DATA_WINDOW X
  3785.   #REPLACE DFLT$ITEM_OPTIONS X
  3786.   #REPLACE DFLT$ITEM_OPTION X
  3787.   #REPLACE DFLT$PROMPT_OBJECT X
  3788.   #REPLACE DFLT$ZOOM_OBJECT X
  3789.  
  3790.   // Object commands
  3791.   #REPLACE OBJ$INIT         $0440
  3792.   #REPLACE OBJ$CREATE       $0441
  3793.   #REPLACE OBJ$ILIST        $0442
  3794.   #REPLACE OBJ$ITEM         $0443
  3795.   #REPLACE OBJ$ENDILIST     $0444
  3796.   #REPLACE OBJ$ACCLIST      $0445 // not used
  3797.   #REPLACE OBJ$ONKEY        $0446
  3798.   #REPLACE OBJ$ENDALIST     $0447 // not used
  3799.   #REPLACE OBJ$ENDDEFINE    $0448 // not used
  3800.   #REPLACE OBJ$IODISPATCH   $0449
  3801.   #REPLACE OBJ$SET          $044A
  3802.   #REPLACE OBJ$GET          $044B
  3803.   #REPLACE OBJ$SEND         $044C
  3804.   #REPLACE OBJ$FIX          $044D  // not used
  3805.   #REPLACE OBJ$END          $044E
  3806.   #REPLACE OBJ$FWDFIX       $044F  // not used
  3807.   #REPLACE OBJ$HRET         $0450
  3808.   #REPLACE OBJ$ITEM_EXEC    $0451
  3809.   #REPLACE OBJ$ACCEPT       $0452
  3810.   #REPLACE CREATE$CLASS     $0453
  3811.   #REPLACE HANDLE$FOR       $0454
  3812.   #REPLACE OBJ$END$HANDLER  $0455
  3813.   #REPLACE LOCAL$ARGUMENT   $0456
  3814.   #REPLACE FIND$OBJECT      $0457
  3815.   #REPLACE END$CLASS        $0458
  3816.   #REPLACE CREATE$SUB$PAGE  $0459
  3817.   #REPLACE CLONE$CLASS      $045A
  3818.   #REPLACE OBJ$ENTRY$ITEM   $045B
  3819.   #REPLACE MOVE$SUB$PAGE    $045C
  3820.   #REPLACE OBJ$TIMER        $045D
  3821.   #REPLACE SCREEN$OPT       $045E
  3822.   #REPLACE CREATE$PROPERTY  $045F
  3823.   #REPLACE REDEFINE$SUB$PAGE $0464
  3824.  
  3825.   //Focus modes:
  3826.   #REPLACE FOCUSABLE    |CI0
  3827.   #REPLACE NONFOCUSABLE |CI1
  3828.   #REPLACE POINTER_ONLY |CI2
  3829.   #REPLACE NO_ACTIVATE  |CI3
  3830.  
  3831.   //Search modes:
  3832.   #REPLACE FIRST_CHARACTER  |CI0
  3833.   #REPLACE INCREMENTAL      |CI1
  3834.   #REPLACE CAPITAL          |CI2
  3835.   #REPLACE NO_SEARCH        |CI3
  3836.  
  3837.   //Delegation modes:
  3838.   #REPLACE DELEGATE_TO_PARENT       |CI0
  3839.   #REPLACE NO_DELEGATE_OR_ERROR     |CI1
  3840.   #REPLACE NO_DELEGATION            |CI2
  3841.   #REPLACE RETURN_INVALID_MESSAGE   |CI3
  3842.   #REPLACE DELEGATE_PRIOR_LEVEL     |CI4
  3843.  
  3844.   //Location modes:
  3845.   #REPLACE ABSOLUTE         |CI0
  3846.   #REPLACE RELATIVE         |CI1
  3847.   #REPLACE ITEM_RELATIVE    |CI2
  3848.  
  3849.   //Sort modes:
  3850.   #REPLACE ASCENDING        |CI0
  3851.   #REPLACE DESCENDING       |CI1
  3852.  
  3853.   //Select Modes:
  3854.   #REPLACE NO_SELECT        |CI0
  3855.   #REPLACE SINGLE_SELECT    |CI1
  3856.   #REPLACE MULTI_SELECT     |CI2
  3857.   #REPLACE AUTO_SELECT      |CI3
  3858.  
  3859.   //Entry item options:
  3860.   #REPLACE IWINDOW          $C0A1
  3861.   #REPLACE IENTRY           $C0A2
  3862.   #REPLACE IEXIT            $C0A3
  3863.   #REPLACE IVALIDATE        $C0A4
  3864.   #REPLACE IZOOM            $C0A5
  3865.   #REPLACE IPROMPT          $C0A6
  3866.  
  3867.   //Import modes
  3868.   #REPLACE INHERIT          1
  3869.   #REPLACE NO_OVERWRITE     2
  3870.  
  3871.   //System integers
  3872.   #REPLACE CURRENT_OBJECT     |VI85 
  3873.   #REPLACE FORWARD$MESSAGE    |VI87
  3874.   #REPLACE CURRENT_MESSAGE    |VI88 
  3875.   #REPLACE TOTAL_OBJECTS      |VI89
  3876.  
  3877.   // Define the desktop objects
  3878.   #REPLACE NULL_OBJECT          |CI0
  3879.   #REPLACE CLIPBOARD            |CI1
  3880.   #REPLACE CLIPBOARD.N          |CI0
  3881.   //#REPLACE DESKTOP              |CI2            // now defined in flex$init
  3882.   #REPLACE DESKTOP.N            |CI0
  3883.   //#REPLACE END_FUNCTION         END_PROCEDURE   // now defined in flex$init
  3884.   //#REPLACE PROCEDURE_RETURN     FUNCTION_RETURN // now defined in flex$init
  3885.   #REPLACE NO_IMAGE             |CI-9999
  3886.  
  3887.   #REPLACE CURRENT              |CI-99 //use current item#
  3888.   #REPLACE TOGGLE_STATE         |CI3   //toggle boolean state
  3889.   #REPLACE UPWARD_DIRECTION     |CI0   //scroll up
  3890.   #REPLACE DOWNWARD_DIRECTION   |CI1   //scroll down
  3891.  
  3892.   #REPLACE GET_SCROLLBAR        |CI$4000
  3893.   #REPLACE GET_CLIPBOARD        |CI$4001
  3894.   #FREG |CI$4000 RETURNS INTEGER
  3895.   #FREG |CI$4001 RETURNS INTEGER
  3896.  
  3897.   #REPLACE ERROR_OBJECT_ID      |VI100
  3898.   #REPLACE ERROR_TYPE           |VI101
  3899.  
  3900.   #REPLACE ERROR_CHILD_INHERITS_PARENT  |CI0
  3901.   #REPLACE ERROR_OFF_IN_CHILD           |CI1
  3902.   #REPLACE ERROR_DEFAULT_IN_CHILD       |CI2
  3903.  
  3904.   //deactivate search modes
  3905.   #REPLACE SCOPE_TYPE                   |CI1
  3906.   #REPLACE POPUP_TYPE                   |CI2
  3907.   #REPLACE AREA_TYPE                    |CI3
  3908.   
  3909.   //add_focus/activate/deactivate/release_focus error return codes
  3910.   #REPLACE ERROR_ENTERING               |CI1
  3911.   #REPLACE ERROR_EXITING                |CI2
  3912.   #REPLACE ERROR_ACTIVATING             |CI3
  3913.   #REPLACE ERROR_DEACTIVATING           |CI4
  3914.   #REPLACE ERROR_CANT_ACCEPT_FOCUS      |CI5
  3915.   #REPLACE ERROR_CANT_CREATE_TREE       |CI6
  3916.   #REPLACE ERROR_ADD_TO_INACTIVE_OBJECT |CI7
  3917.   #REPLACE ERROR_NO_FOCUSABLE_CHILDREN  |CI8
  3918.  
  3919.   #CHKSUB 1 1                   // Verify the UI subsystem.
  3920.   !A [] OBJ$INIT |CI0           // INITIALIZE_INTERFACE
  3921.   #FREF OBJ$DESK$NUM !a         // Number of desktop dependants
  3922. #ENDCOMMAND
  3923.  
  3924. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  3925. //
  3926. //   Command:
  3927. //     Object ObjectName IS [A|AN] ObjectClass {ImageName} {SubImageNames...}
  3928. //
  3929. //   Parameters:
  3930. //     ObjectName is a string.
  3931. //     ObjectClass is an integer.
  3932. //     ImageName is a string.
  3933. //
  3934. //   Description:
  3935. //
  3936. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  3937.  
  3938. #COMMAND OBJECT R "IS" "A""AN" RVD#I
  3939.   #IF (!0<5)                // if no image try to aquire one
  3940.     OBJECT !1 !2 !3 !4 !1
  3941.   #ELSE
  3942.     #DATA               // start up the data stream
  3943.     #PUSH !Zj               // save the unique object label
  3944.     #PUSH !b                // save current definition state
  3945.     #IF (!b = 4)            // if in procedure and not class
  3946.       #SET ZJ$ 0                // do not inc z
  3947.     #ELSE
  3948.       #SET ZJ$ !ZB          // assign the next object id
  3949.     #ENDIF
  3950.     #PUSH !Zb               // save this level on stack
  3951.     #IFDEF !4.AGG           // was this a class with sub objects?
  3952.       #SET ZB$ !4.AGG           // sub objects will begin at the
  3953.     #ELSE               // next object after superclass
  3954.       #SET ZB$ 0                // base classes start at 0
  3955.     #ENDIF
  3956.     #SET ZI$ !ZI                // count this object at the current level
  3957.     #PUSH !Zi               // and push the level
  3958.     #IF (!b > 0)            // if (in_object | in_class)
  3959.       #IF (!b & 2)              // obj_flag == in_class?
  3960.         #REPLACE !$.!1.OBJ |CI-!Zj  // object_name = -current_object
  3961.       #ENDIF
  3962.       #SET ZJ$ (32766-!a)           // a very unique label for this object
  3963.       #DPUSH |CS".!1"           // make name from parent and child
  3964.     #ELSE               // global object name
  3965.       #DPUSH |CS"!1"            // assign an absolute name to object
  3966.     #ENDIF    
  3967.     #CHECK U_!4 _U          // does class exist?
  3968.     #DPUSH U_!4             // define then class the class id
  3969.     GET$OBJ$IMAGE !5            // define the objects image
  3970.     #IF ((!b & 3) = 2)          // if in_class & !in_object
  3971.       #DPUSH !$.!1.OBJ          // pick the assigned dependant number
  3972.     #ELSE               // 
  3973.       #IF (!b = 0)          // A global object must assign #
  3974.         #IFDEF !1.OBJ           // Is the symbol defined, name_object?
  3975.           #DPUSH |CI0           // pick the next dependant number
  3976.         #ELSE
  3977.           #DPUSH |CI!Zj         // force the dependant number
  3978.           #SET ZJ$ ($1000+!Zj)       // mark as global object
  3979.           #REPLACE !1.OBJ |CI!Zj        // Assign an ID to this object
  3980.         #ENDIF
  3981.       #ELSE
  3982.         #DPUSH |CI0         // pick the next dependant number
  3983.       #ENDIF
  3984.     #ENDIF
  3985.     REGISTER_OBJECT !1
  3986.     #DPUSH GET_!1
  3987.     #SET B$ (!b | 1)            // we are in a object definition
  3988.     !A [] OBJ$CREATE |VL        // create the object now
  3989.  
  3990.     #IFDEF !1.OBJ
  3991.       #IFCLASS !1.OBJ V$        // does this object have a global?
  3992.         MOVE CURRENT_OBJECT TO !1.OBJ   // Move the object id to its global
  3993.       #ENDIF
  3994.     #ENDIF
  3995.  
  3996.     #SPUSH !$   //save the old class name
  3997.     #SET $$ !4
  3998.     #IFSUB '!$$SC' // if flex-defined class
  3999.       #IFSUB '!$$SM' // if begin-instance macro exists
  4000.         !$$SM !$ !5 !6 !7 !8 !9
  4001.       #ELSE
  4002.         FORWARD_BEGIN_CONSTRUCT !$ !5 !6 !7 !8 !9
  4003.       #ENDIF
  4004.     #ELSE
  4005.       ADD$IMAGE$ARGS MSG_CONSTRUCT_OBJECT !5 !6 !7 !8 !9  //else use default
  4006.     #ENDIF
  4007.   #ENDIF
  4008. #ENDCOMMAND
  4009.  
  4010. #COMMAND GET$OBJ$IMAGE          // identify the image type
  4011.   #IFDEF !1             // is it a int (dynamic?)
  4012.     #DPUSH !1
  4013.   #ELSE
  4014.     #IFDEF !1.N             // try typical naming scheme
  4015.       #DPUSH !1.N
  4016.     #ELSE
  4017.       #DPUSH |CI0           // not found, make it dynamic
  4018.     #ENDIF
  4019.   #ENDIF
  4020. #ENDCOMMAND
  4021.  
  4022. #COMMAND ADD$IMAGE$ARGS         // pass sub image args to constructor
  4023.   #IF (!0>0)                // while there are args to process
  4024.     #IFDEF !1               // image name a int?
  4025.       #IFSAME !1 MSG_CONSTRUCT_OBJECT   // a special flag to get it going
  4026.         #DATA               // start the data stream
  4027.       #ENDIF
  4028.       #DPUSH !1             // save the message or image id
  4029.     #ELSE
  4030.       #IFDEF !1.N           // typical image name
  4031.         #DPUSH !1.N
  4032.       #ELSE
  4033.         #DPUSH |CI0         // dynamic image name
  4034.       #ENDIF
  4035.     #ENDIF
  4036.     ADD$IMAGE$ARGS !2 !3 !4 !5 !6 !7 !8 !9
  4037.   #ELSE
  4038.     !A [] OBJ$SEND CURRENT_OBJECT |VL
  4039.   #ENDIF    
  4040. #ENDCOMMAND
  4041.  
  4042. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4043. //
  4044. //   Command:
  4045. //  Register_Object Object_Name
  4046. //
  4047. //   Parameters:
  4048. //
  4049. //   Description:
  4050. //
  4051. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4052.  
  4053. #COMMAND REGISTER_OBJECT R
  4054.   #IFDEF GET_!1
  4055.   #ELSE
  4056.     #REPLACE GET_!1 |CI!ZH
  4057.     #FREG GET_!1 RETURNS INTEGER
  4058.   #ENDIF
  4059. #ENDCOMMAND
  4060.  
  4061. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4062. //
  4063. //   Command:
  4064. //     ITEM_LIST
  4065. //
  4066. //   Parameters:
  4067. //     None.
  4068. //
  4069. //   Description:
  4070. //     This is the startment that markes the beginning of a list of
  4071. //     items to be attached to the current object.  A list class object
  4072. //     can not have a item list.    
  4073. //
  4074. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4075.  
  4076. #COMMAND ITEM_LIST .
  4077.   #PUSH !Zg
  4078.   #PUSH !Zj
  4079.   #SET ZJ$ !a
  4080.   #PUSH !Zj
  4081.   #SET ZG$ 0              // Set the item counter to zero.  This is used to
  4082.                          // count and assign ID's to the items.
  4083.   !A [] OBJ$ILIST |CI0   // Create the command to save the item count,
  4084.   #FREF OBJ$!Zj$INUM !a    // and tell flex to update it later.
  4085. #ENDCOMMAND
  4086.  
  4087. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4088. //
  4089. //   Command:
  4090. //    ON_Item {Value} {[SEND Message {TO Object} | BEGIN_PULL_DOWN Pull_Down_Name {Pull_Down_Image}]}
  4091. //
  4092. //   Parameters:
  4093. //     Value is a string.
  4094. //     Message is a integer.
  4095. //     Object is a integer.
  4096. //
  4097. //   Description:
  4098. //     The ITEM command adds the next item to the current object list.
  4099. //     The Message is the value which will be passed to the handler
  4100. //     if this item is selected.
  4101. //
  4102. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4103.  
  4104. #COMMAND ON_ITEM NDI """SEND""BEGIN_PULL_DOWN"
  4105.   #IF (!0<2)
  4106.     #IF (!0<1)
  4107.       ON_ITEM '' SEND MSG_NONE
  4108.     #ELSE
  4109.       ON_ITEM !1 SEND MSG_NONE
  4110.     #ENDIF
  4111.   #ELSE
  4112.     #IFSAME !1 SEND
  4113.       ON_ITEM '' !1 !2 !3 !4 !5 !6 !7 !8 !9
  4114.     #ELSE
  4115.       #IFSAME !2 SEND
  4116.         #SET ZG$ !ZG                   // Increment the item counter 
  4117.         #IFSAME !4 TO
  4118.           #CHECK !6 .
  4119.           #DATA
  4120.           #IFDEF !3
  4121.             #DPUSH !3           // Push the (variable) message
  4122.           #ELSE
  4123.             #IFDEF MSG_!3
  4124.               #DPUSH MSG_!3     // Push the constant message
  4125.             #ELSE
  4126.               #DPUSH |CI0
  4127.               #FREF MSG_!3 !a,0     // Forward fef the message
  4128.             #ENDIF  
  4129.           #ENDIF  
  4130.           #IFDEF !5
  4131.             #DPUSH !5           // Push the (expression, var) dest object 
  4132.           #ELSE
  4133.             #IFDEF !5.OBJ
  4134.               #DPUSH !5.OBJ     // Push the global object
  4135.             #ELSE
  4136.               #DPUSH |CI0
  4137.               #FREF !5.OBJ !a,1     // Forward ref the object
  4138.             #ENDIF
  4139.           #ENDIF
  4140.           !A [] OBJ$ITEM_EXEC !1 |VL
  4141.         #ELSE
  4142.           #IF (!0 > 3)
  4143.             #CHECK !4 "TO"
  4144.           #ENDIF
  4145.           #IFDEF MSG_!3
  4146.             !A [] OBJ$ITEM MSG_!3 !1       // Create the item passing name and value.
  4147.           #ELSE
  4148.             #IFDEF !3
  4149.               !A [] OBJ$ITEM !3 !1         // Create the item passing name and value.
  4150.             #ELSE
  4151.               !A [] OBJ$ITEM |CI0 !1       // Create the item passing name and value.
  4152.               #FREF MSG_!3 !a              // fix value later with procedure address
  4153.             #ENDIF
  4154.           #ENDIF
  4155.         #ENDIF
  4156.       #ELSE
  4157.         #IFSAME !2 BEGIN_PULL_DOWN
  4158.           #CHECK !3 R
  4159.           REGISTER_OBJECT !3
  4160.           ON_ITEM !1 SEND ACTIVATE_PULL_DOWN TO (!3(CURRENT_OBJECT))
  4161.           #IFSUB 'END_MENU'
  4162.             CREATE_MENU !3 SUB_LOCATION !4 !5 !6 !7 !8 !9
  4163.           #ELSE
  4164.             #ERROR 1000 INVALID ARGUMENT: "BEGIN_PULL_DOWN" REQUIRES MENU_SYSTEM PACKAGE
  4165.           #ENDIF
  4166.         #ENDIF
  4167.       #ENDIF
  4168.     #ENDIF
  4169.   #ENDIF
  4170. #ENDCOMMAND
  4171.  
  4172. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4173. //
  4174. //   Command: 
  4175. //      Repeat_Item Count# TIMES {Item_Syntax}
  4176. //
  4177. //   Parameters:
  4178. //
  4179. //   Description:
  4180. //
  4181. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4182.  
  4183. #COMMAND REPEAT_ITEM _RNDE "TIMES"
  4184.   ON_ITEM !3 !4 !5 !6 !7 !8 !9
  4185.   #SET Q$ (!1-1)
  4186.   #IF (!q>0)
  4187.     REPEAT_ITEM !q TIMES !3 !4 !5 !6 !7 !8 !9
  4188.   #ENDIF
  4189. #ENDCOMMAND
  4190.  
  4191. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4192. //
  4193. //   Command: 
  4194. //  Entry_Item File.Field {Entry_Options}
  4195. //
  4196. //   Parameters:
  4197. //
  4198. //   Description:
  4199. //
  4200. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4201.  
  4202. #COMMAND ENTRY_ITEM R
  4203.   #SET ZG$ !ZG
  4204.   #DATA
  4205.   #IFCLASS !1 "EC"
  4206.     #ENTOPT {$C0A0=!1,$C002,$C003,!2}
  4207.   #ELSE
  4208.     #ENTOPT {$C0A0=!1,!2}
  4209.   #ENDIF
  4210.   !A [] OBJ$ENTRY$ITEM |CI0 |VL
  4211. #ENDCOMMAND
  4212.  
  4213. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4214. //
  4215. //   Command:
  4216. //     END_ITEM_LIST
  4217. //
  4218. //   Parameters:
  4219. //     None.
  4220. //
  4221. //   Description:
  4222. //     The END_ITEM_LIST command marks the end of a list of items.
  4223. //
  4224. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4225.  
  4226. #COMMAND END_ITEM_LIST .
  4227.   #POP ZJ$
  4228.   #REPLACE OBJ$!Zj$INUM |CI!Zg     // Update the count in the ITEM_LIST cmd.
  4229.   !A [] OBJ$ENDILIST OBJ$!Zj$INUM         // Tell runtime this is the end of list.
  4230.   #POP ZJ$
  4231.   #POP ZG$
  4232. #ENDCOMMAND
  4233.  
  4234. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4235. //
  4236. //   Command:
  4237. //  END_PULL_DOWN
  4238. //
  4239. //   Parameters:
  4240. //  None.
  4241. //
  4242. //   Description:
  4243. //      Ends the structure of an ON_ITEM ... BEGIN_PULL_DOWN ... as used by
  4244. //      Menu_System package.
  4245. //
  4246. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4247.  
  4248. #COMMAND END_PULL_DOWN .
  4249.   #IFSUB 'END_MENU'
  4250.     END_ITEM_LIST
  4251.     END_OBJECT
  4252.   #ELSE
  4253.     #ERROR 1000 INVALID ARGUMENT: "BEGIN_PULL_DOWN" REQUIRES MENU_SYSTEM PACKAGE
  4254.   #ENDIF
  4255. #ENDCOMMAND
  4256.  
  4257. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4258. //
  4259. //   Command:
  4260. //  On_Key KeyName SEND Message {TO Object} {PRIVATE}
  4261. //
  4262. //   Parameters:
  4263. //     KeyName is a valid hot key name.
  4264. //     Message is valid message name.
  4265. //     Object is the a valid object name.
  4266. //
  4267. //   Description:
  4268. //     The ON_KEY command tells the menu manager to pass the
  4269. //     specified Message code to the specified Object when the 
  4270. //     KeyNAme is pressed.  If no Object name is passed, the current
  4271. //     object is used.  Passing MSG_NONE for Message causes the key to do
  4272. //     nothing, passing MSG_DEFAULT_KEY will restore the default key definition.
  4273. //
  4274. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4275.  
  4276. #COMMAND ON_KEY RULGBO#SDN "SEND" RLGBO#SDN """TO""PRIVATE" _DNOB """PRIVATE" .
  4277.   #IFSAME !4 PRIVATE
  4278.     ON_KEY !1 !2 !3 TO |CI-1 PRIVATE
  4279.   #ELSE      
  4280.     #DATA
  4281.     #DPUSH !1
  4282.     #IFSAME !4 TO
  4283.       #IFDEF !5
  4284.         #DPUSH !5
  4285.       #ELSE
  4286.         #IFDEF !5.OBJ
  4287.           #DPUSH !5.OBJ
  4288.         #ELSE
  4289.           #DPUSH |CI0
  4290.           #FREF !5.OBJ !a,1
  4291.         #ENDIF
  4292.       #ENDIF
  4293.     #ELSE
  4294.       #DPUSH |CI-1
  4295.     #ENDIF
  4296.     #IFSAME !6 PRIVATE
  4297.       #DPUSH |CI1
  4298.     #ENDIF
  4299.     #IFDEF !3
  4300.       !A [] OBJ$ONKEY !3 |VL
  4301.     #ELSE
  4302.       #IFDEF MSG_!3
  4303.         !A [] OBJ$ONKEY MSG_!3 |VL
  4304.       #ELSE             // else the command is defined in flex code
  4305.         !A [] OBJ$ONKEY |CI0 |VL        // get flex to fix the fwd ref
  4306.         #FREF MSG_!3 !a
  4307.       #ENDIF
  4308.     #ENDIF
  4309.   #ENDIF
  4310. #ENDCOMMAND
  4311.  
  4312. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4313. //
  4314. //   Command:
  4315. //     END_OBJECT
  4316. //
  4317. //   Parameters:
  4318. //     None required
  4319. //
  4320. //   Description:
  4321. //     END_OBJECT tells the manager we are done defining an object.
  4322. //
  4323. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4324.  
  4325. #COMMAND END_OBJECT 
  4326.   //
  4327.   // The following section was added 01-08-90 by SAL to support inheritable
  4328.   // end-instance macros for classes
  4329.   //
  4330.   #IFSUB '!$$SC'  //if flex-defined class
  4331.     #IFSUB '!$$EM'  //if end-instance macro defined for class,
  4332.       !$$EM !$ !1 !2 !3 !4 !5 !6 !7 !8 !9
  4333.     #ELSE
  4334.       FORWARD_END_CONSTRUCT !$ !1 !2 !3 !4 !5 !6 !7 !8 !9
  4335.     #ENDIF
  4336.   #ELSE
  4337.     DEFAULT_END_OBJECT  //else use default
  4338.   #ENDIF
  4339.   #SPOP           //restore old class name
  4340.   //
  4341.   // end of addition 01-08-90 by SAL
  4342.   //
  4343. #ENDCOMMAND
  4344.  
  4345. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4346. //
  4347. //   Command:
  4348. //     DEFAULT_END_OBJECT
  4349. //
  4350. //   Parameters:
  4351. //     NONE
  4352. //
  4353. //   Description:
  4354. //     This command terminates an object declaration
  4355. //
  4356. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4357.  
  4358. #COMMAND DEFAULT_END_OBJECT .
  4359.   !A [] OBJ$END //Mark the end of the object list.
  4360.   #POP ZI$              //restore sub_obj_count
  4361.   #POP ZB$              //restore current_dep
  4362.   #POP B$               //restore obj_flag
  4363.   #POP ZJ$              //restore temp label
  4364. #ENDCOMMAND
  4365.  
  4366. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4367. //
  4368. //   Command:
  4369. //  Start_Ui {Object}
  4370. //
  4371. //   Parameters:
  4372. //     NONE
  4373. //
  4374. //   Description:
  4375. //  This command will dispatch io to the current focus.  it will
  4376. //  remain in this routine until a non-zero return code is received.
  4377. //
  4378. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4379.  
  4380. #COMMAND START_UI
  4381.   #IF (!0>0)
  4382.     SEND ACTIVATE TO !1
  4383.   #ENDIF
  4384.   !A [] OBJ$IODISPATCH |CI0 |CI0
  4385. #ENDCOMMAND
  4386.  
  4387. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4388. //
  4389. //   Command:
  4390. //  UI_ACCEPT Object {GROUP | OBJECT} TO ReturnValue
  4391. //
  4392. //   Parameters:
  4393. //
  4394. //   Description:
  4395. //
  4396. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4397.  
  4398. #COMMAND UI_ACCEPT RSDGBO#L RDGBO#L RDGBO#L _CEL#BOG .
  4399.   #IFSAME !2  GROUP OBJECT
  4400.     #CHECK !3 "TO"
  4401.     #DATA
  4402.     #IFSAME !2 GROUP
  4403.       #DPUSH |CI1
  4404.     #ELSE
  4405.       #IFSAME !2 OBJECT
  4406.         #DPUSH |CI0
  4407.       #ENDIF
  4408.     #ENDIF
  4409.     #DPUSH !4
  4410.     #IFDEF !1
  4411.       !A [] OBJ$ACCEPT !1 |VL
  4412.     #ELSE
  4413.       #IFDEF !1.OBJ
  4414.         !A [] OBJ$ACCEPT !1.OBJ |VL
  4415.       #ELSE
  4416.         !A [] OBJ$ACCEPT |CI0 |VL
  4417.         #FREF !1.OBJ !a
  4418.       #ENDIF
  4419.     #ENDIF
  4420.   #ELSE
  4421.     UI_ACCEPT !1 OBJECT !2 !3 !4 !5 !6 !7
  4422.   #ENDIF
  4423. #ENDCOMMAND
  4424.  
  4425. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4426. //
  4427. //   Command:
  4428. //  SET Property {OF Object} {ITEM #} TO Value {...}
  4429. //
  4430. //   Parameters:
  4431. //
  4432. //   Description:
  4433. //
  4434. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4435.  
  4436. #COMMAND SET
  4437.   GET$SET SET !1 !2 !3 !4 !5 !6 !7 !8 !9
  4438. #ENDCOMMAND
  4439.  
  4440. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4441. //
  4442. //   Command:
  4443. //  GET Property {OF Object} {ITEM #} TO Value {...}
  4444. //
  4445. //   Parameters:
  4446. //
  4447. //   Description:
  4448. //
  4449. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4450.  
  4451. #COMMAND GET
  4452.   GET$SET GET !1 !2 !3 !4 !5 !6 !7 !8 !9
  4453. #ENDCOMMAND
  4454.  
  4455. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4456. //
  4457. //   Command:
  4458. //  FORWARD {GET | SET | SEND} Property {...}
  4459. //
  4460. //   Parameters:
  4461. //
  4462. //   Description:
  4463. //
  4464. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4465.  
  4466. #COMMAND FORWARD "GET""SET""SEND"
  4467.   MOVE 1 TO FORWARD$MESSAGE
  4468.   !1 !2 !3 !4 !5 !6 !7 !8 !9
  4469. #ENDCOMMAND
  4470.  
  4471. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4472. //
  4473. //   Command:
  4474. //  DELEGATE {GET | SET | SEND} Property {...}
  4475. //
  4476. //   Parameters:
  4477. //
  4478. //   Description:
  4479. //
  4480. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4481.  
  4482. #COMMAND DELEGATE "GET""SET""SEND"
  4483.   MOVE 8 TO FORWARD$MESSAGE
  4484.   !1 !2 !3 !4 !5 !6 !7 !8 !9
  4485. #ENDCOMMAND
  4486.  
  4487. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4488. //
  4489. //   Command:
  4490. //  BROADCAST {RECURSIVE | RECURSIVE_UP} {IGNORE_RETURN} {GET | SET | SEND} Property {...}
  4491. //
  4492. //   Parameters:
  4493. //
  4494. //   Description:
  4495. //
  4496. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4497.  
  4498. #COMMAND BROADCAST "GET""SET""SEND""RECURSIVE""RECURSIVE_UP""NO_STOP"
  4499.   #IFSAME !1 RECURSIVE RECURSIVE_UP
  4500.     #CHECK !2 '"GET""SET""SEND""NO_STOP"'
  4501.     #IFSAME !1 RECURSIVE
  4502.       MOVE 20 TO FORWARD$MESSAGE    // broadcast + recursive_down
  4503.     #ELSE
  4504.       MOVE 68 TO FORWARD$MESSAGE    // broadcast + recursive_up
  4505.     #ENDIF
  4506.     #IFSAME !2 NO_STOP
  4507.       #CHECK !3 '"GET""SET""SEND"'
  4508.       MOVE (FORWARD$MESSAGE+128) TO FORWARD$MESSAGE // no stop on non-0 return
  4509.       !3 !4 !5 !6 !7 !8 !9
  4510.     #ELSE
  4511.       !2 !3 !4 !5 !6 !7 !8 !9
  4512.     #ENDIF
  4513.   #ELSE
  4514.     MOVE 4 TO FORWARD$MESSAGE       // broadcast
  4515.     #IFSAME !1 NO_STOP
  4516.       #CHECK !2 '"GET""SET""SEND"'
  4517.       MOVE (FORWARD$MESSAGE+128) TO FORWARD$MESSAGE // + no_stop
  4518.       !2 !3 !4 !5 !6 !7 !8 !9
  4519.     #ELSE
  4520.       !1 !2 !3 !4 !5 !6 !7 !8 !9
  4521.     #ENDIF
  4522.   #ENDIF
  4523. #ENDCOMMAND
  4524.  
  4525. #COMMAND BROADCAST_FOCUS "GET""SET""SEND""RECURSIVE""RECURSIVE_UP""NO_STOP"
  4526.   #IFSAME !1 RECURSIVE RECURSIVE_UP
  4527.     #CHECK !2 '"GET""SET""SEND""NO_STOP"'
  4528.     #IFSAME !1 RECURSIVE
  4529.       MOVE 52 TO FORWARD$MESSAGE    // broadcast + focus + recursive_down
  4530.     #ELSE
  4531.       MOVE 100 TO FORWARD$MESSAGE   // broadcast + focus + recursive_up
  4532.     #ENDIF
  4533.     #IFSAME !2 NO_STOP
  4534.       #CHECK !3 '"GET""SET""SEND"'
  4535.       MOVE (FORWARD$MESSAGE+128) TO FORWARD$MESSAGE // no stop on non-0 return
  4536.       !3 !4 !5 !6 !7 !8 !9
  4537.     #ELSE
  4538.       !2 !3 !4 !5 !6 !7 !8 !9
  4539.     #ENDIF
  4540.   #ELSE
  4541.     MOVE 36 TO FORWARD$MESSAGE      // broadcast + focus
  4542.     #IFSAME !1 NO_STOP
  4543.       #CHECK !2 '"GET""SET""SEND"'
  4544.       MOVE (FORWARD$MESSAGE+128) TO FORWARD$MESSAGE // + no_stop
  4545.       !2 !3 !4 !5 !6 !7 !8 !9
  4546.     #ELSE
  4547.       !1 !2 !3 !4 !5 !6 !7 !8 !9
  4548.     #ENDIF
  4549.   #ENDIF
  4550. #ENDCOMMAND
  4551.  
  4552. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4553. //
  4554. //   Command:
  4555. //
  4556. //   Parameters:
  4557. //
  4558. //   Description:
  4559. //
  4560. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4561.  
  4562. #COMMAND GET$SET
  4563.   #IFSAME !3 OF
  4564.     #IFSAME DFLT$!2 X       // is this a item type message?
  4565.       #IFSAME !5 ITEM       // is the item keyword used?
  4566.         OBJECT$PROPERTIES !1 !2 !4 !6 !7 !8 !9 // pass it on
  4567.       #ELSE
  4568.         OBJECT$PROPERTIES !1 !2 !4 -99 !5 !6 !7 !8 !9  // use dflt
  4569.       #ENDIF
  4570.     #ELSE
  4571.       #IFSAME !5 TO
  4572.         OBJECT$PROPERTIES !1 !2 !4 !6 !7 !8 !9  // just supply args
  4573.       #ELSE
  4574.         OBJECT$PROPERTIES !1 !2 !4 !5 !6 !7 !8 !9  // just supply args
  4575.       #ENDIF
  4576.     #ENDIF
  4577.   #ELSE
  4578.     GET$SET !1 !2 OF CURRENT_OBJECT !3 !4 !5 !6 !7 !8 !9
  4579.   #ENDIF
  4580. #ENDCOMMAND
  4581.  
  4582.  
  4583. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4584. //
  4585. //   Command: OBJECT$PROPERTIES
  4586. //
  4587. //   Parameters:
  4588. //  {GET | SET} PROPERTY OBJECT { {ITEM #} | TO } VALUE {...}
  4589. //
  4590. //   Description:
  4591. //
  4592. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4593.  
  4594. #COMMAND OBJECT$PROPERTIES "GET""SET" RD#OBLG RSND#OBLG R
  4595.   #DATA
  4596.   #IFDEF !2         // is message in a variable?
  4597.     #DPUSH !2           // yes, just push the value
  4598.   #ELSE
  4599.     #IFDEF !1_!2        // is this message defined?
  4600.       #DPUSH !1_!2      // yes, push the definition
  4601.     #ELSE
  4602.       #DPUSH |CI0       // forward reference the message
  4603.       #FREF !1_!2 !a,0      // add the reference to be defined
  4604.     #ENDIF
  4605.   #ENDIF
  4606.   #PUSH !Zg
  4607.   #SET ZG$ 0
  4608.   PROPERTY$HELP !4 !5 !6 !7 !8 !9
  4609.   #POP ZG$
  4610.   #IFDEF !3
  4611.     !A [] OBJ$!1 !3 |VL
  4612.   #ELSE
  4613.     #IFDEF !3.OBJ
  4614.       !A [] OBJ$!1 !3.OBJ |VL
  4615.     #ELSE
  4616.       !A [] OBJ$!1 |CI0 |VL
  4617.       #FREF !3.OBJ !a
  4618.     #ENDIF
  4619.   #ENDIF
  4620. #ENDCOMMAND
  4621.  
  4622. #COMMAND PROPERTY$HELP
  4623.   #IF (!0>0)
  4624.     #IFSAME !1 TO
  4625.     #ELSE
  4626.       #IFSAME !1 ITEM
  4627.       #ELSE
  4628.         #SET ZG$ !ZG
  4629.         #IFDEF !1
  4630.           #DPUSH !1
  4631.         #ELSE
  4632.           #IFCLASS !1 0123456789ABCDEF
  4633.             #DPUSH !1
  4634.           #ELSE
  4635.             #IFDEF MSG_!1
  4636.               #DPUSH MSG_!1
  4637.             #ELSE
  4638.               #DPUSH |CI0
  4639.               #FREF MSG_!1 !a,!Zg
  4640.             #ENDIF
  4641.           #ENDIF
  4642.         #ENDIF
  4643.       #ENDIF
  4644.     #ENDIF
  4645.     PROPERTY$HELP !2 !3 !4 !5 !6 !7 !8 !9
  4646.   #ENDIF
  4647. #ENDCOMMAND
  4648.  
  4649. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4650. //
  4651. //   Command:
  4652. //  Send Message {OptionalArguments...} {TO Object} {OptionalArguments...}
  4653. //
  4654. //   Parameters:
  4655. //
  4656. //   Description:
  4657. //
  4658. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4659.  
  4660. #COMMAND SEND RSD#OBLG
  4661.   #DATA
  4662.   #IFDEF !1
  4663.     #DPUSH !1
  4664.   #ELSE
  4665.     #IFDEF MSG_!1
  4666.       #DPUSH MSG_!1
  4667.     #ELSE
  4668.       #DPUSH |CI0
  4669.       #FREF MSG_!1 !a,0
  4670.     #ENDIF
  4671.   #ENDIF
  4672.   #IFSAME !2 TO
  4673.     SEND$HELP !4 !5 !6 !7 !8 !9
  4674.     SEND$CMD TO !2 !3
  4675.   #ELSE
  4676.     SEND$HELP !2 !3 !4 !5 !6 !7 !8 !9
  4677.     SEND$CMD TO TO CURRENT_OBJECT
  4678.   #ENDIF
  4679. #ENDCOMMAND 
  4680.  
  4681. #COMMAND SEND$HELP U
  4682.   #IF (!0>0)
  4683.     #DPUSH !1
  4684.     SEND$HELP !2 !3 !4 !5 !6 !7 !8 !9
  4685.   #ENDIF
  4686. #ENDCOMMAND
  4687.  
  4688. #COMMAND SEND$CMD
  4689.   #IFSAME !1 !2
  4690.     #IFDEF !3
  4691. //      !A [] OBJ$SEND !3 |VL
  4692.       !A [] $044C !3 |VL
  4693.     #ELSE
  4694.       #IFDEF !3.OBJ
  4695.         !A [] OBJ$SEND !3.OBJ |VL
  4696.       #ELSE
  4697.         !A [] OBJ$SEND |CI0 |VL
  4698.         #FREF !3.OBJ !a
  4699.       #ENDIF
  4700.     #ENDIF
  4701.   #ELSE
  4702.     !A [] OBJ$SEND CURRENT_OBJECT |VL
  4703.   #ENDIF
  4704. #ENDCOMMAND
  4705.  
  4706. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4707. //
  4708. //   Command:
  4709. //  Procedure {Set} Message {FOR Class} {{Type Argument} ...}
  4710. //
  4711. //   Parameters:
  4712. //
  4713. //   Description:
  4714. //
  4715. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4716.  
  4717. #COMMAND PROCEDURE R
  4718.   #IFSAME !1 SET
  4719.     HANDLE$MESSAGE SET_!2 !3 !4 !5 !6 !7 !8 !9
  4720.   #ELSE
  4721.     HANDLE$MESSAGE MSG_!1 !2 !3 !4 !5 !6 !7 !8 !9
  4722.   #ENDIF
  4723. #ENDCOMMAND
  4724.  
  4725. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4726. //
  4727. //   Command:
  4728. //  Function Message {FOR Class} {Type Argument} RETURNS Type
  4729. //
  4730. //   Parameters:
  4731. //
  4732. //   Description:
  4733. //
  4734. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4735.  
  4736. #COMMAND FUNCTION R
  4737.     HANDLE$MESSAGE GET_!1 !2 !3 !4 !5 !6 !7 !8 !9
  4738. #ENDCOMMAND
  4739.  
  4740.  
  4741. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4742. //
  4743. //   Command: HANDLE$MESSAGE Message { FOR Class } { RETURNS Type } { Type Argument }
  4744. //
  4745. //   Parameters:
  4746. //
  4747. //   Description:
  4748. //
  4749. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4750.  
  4751. #COMMAND HANDLE$MESSAGE RGOBL#
  4752.   #IF (!b & 4)
  4753.     #ERROR 100 Procedures and Functions may .not. be nested.
  4754.   #ENDIF
  4755.   #CHECK NUM_ARGUMENTS _T
  4756.   #PUSH !Zg
  4757.   #PUSH !Za
  4758.   #SET ZA$ !a
  4759.   #PUSH !Zu
  4760.   #DATA
  4761.   #STKSYM               // forget all old stack symbols
  4762.   #SET B$ (!b | 4)          // set flag to in_procedure
  4763.   #REPLACE NUM_ARGUMENTS |SI0       // define the arg count
  4764.   #IFSAME !2 GLOBAL
  4765.     #DPUSH |CI0         // No message
  4766.     #DPUSH |CI0         // for no class
  4767.     #CHECK !1 T         // cant have dups of these globals
  4768.     #SET ZG$ (0-!a-2)       // make it negative to distuinguish it
  4769.     #REPLACE !1 |CI!Zg      // this will cause all fwd refs to be fixed.
  4770.     #IF (!0>1)              // do we have arguments?
  4771.       #SET ZG$ 1                    // starting argument number
  4772.       DEFINE_ARGUMENTS !3 !4 !5 !6 !7 !8 !9
  4773.     #ENDIF
  4774.     #FREG !1 !2 !3 !4 !5 !6 !7 !8 !9
  4775.   #ELSE
  4776.     #IFSAME !2 FOR          // are we explict about the class?
  4777.       MESSAGE$ADDRESS !1            // create id symbol for this message
  4778.       #DPUSH !1
  4779.       #IFDEF !3
  4780.         #IFSAME !3 DESKTOP
  4781.           #DPUSH U_DESKTOP      // Message for the desktop class
  4782.         #ELSE
  4783.           #DPUSH !3         // Message for the named class
  4784.         #ENDIF
  4785.       #ELSE
  4786.         #CHECK U_!3 RSDNU           // check the class for goodness
  4787.         #DPUSH U_!3         // Message for the named class
  4788.       #ENDIF
  4789.       #IF (!0>3)
  4790.         #SET ZG$ 1                  // starting argument number
  4791.         DEFINE_ARGUMENTS !4 !5 !6 !7 !8 !9
  4792.       #ENDIF
  4793.       #FREG !1 !4 !5 !6 !7 !8 !9
  4794.     #ELSE
  4795.       #IF (!b & 2)              // obj_flag == in_class?
  4796.         MESSAGE$ADDRESS !1      // yes, same as handle "for"
  4797.         #DPUSH !1               // the message
  4798.         #DPUSH U_!$         // handle msg for "current class"
  4799.       #ELSE
  4800.         #IF (!b & 1)            // in_object, instance method
  4801.           !A [] CLONE$CLASS
  4802.           MESSAGE$ADDRESS !1        // yes, same as handle "for"
  4803.           #DPUSH !1         // the message
  4804.           #DPUSH |CI0           // handle for objects class
  4805.         #ELSE               // just your simple global message
  4806.           #DPUSH |CI0           // No message
  4807.           #DPUSH |CI0           // for no class
  4808.           #CHECK !1 T           // cant have dups of these globals
  4809.           #SET ZG$ (0-!a-2)     // make it negative to distuinguish it
  4810.           #REPLACE !1 |CI!Zg        // this will cause all fwd refs to be fixed.
  4811.         #ENDIF
  4812.       #ENDIF
  4813.       #IF (!0>1)                // do we have arguments?
  4814.         #SET ZG$ 1                  // starting argument number
  4815.         DEFINE_ARGUMENTS !2 !3 !4 !5 !6 !7 !8 !9
  4816.       #ENDIF
  4817.       #FREG !1 !2 !3 !4 !5 !6 !7 !8 !9
  4818.     #ENDIF
  4819.   #ENDIF
  4820. //  !A [] HANDLE$FOR |CI0 |VL     // handle the message
  4821.   !A [] $0454 |CI0 |VL
  4822.   #FREF OBJ$!Za$ENDPROC !a      // fref the end procedure line
  4823.   #SET ZG$ 0                    // starting argument number for locals
  4824. #ENDCOMMAND
  4825.  
  4826. #COMMAND MESSAGE$ADDRESS
  4827.   #IFDEF !1
  4828.   #ELSE             // assign the next message number now
  4829.     #SET ZC$ !ZC
  4830.     #IF (!Zc>$0FFF)
  4831.       #ERROR 100 Maximum number of message/property definitions exceeded
  4832.     #ELSE
  4833.       #REPLACE !1 |CI!Zc      // this will cause all fwd refs to be fixed.
  4834.     #ENDIF
  4835.   #ENDIF
  4836. #ENDCOMMAND
  4837.  
  4838. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4839. //
  4840. //   Command:
  4841. //  Register_Procedure Message {FOR Class} {{Type Argument} ...}
  4842. //
  4843. //   Parameters:
  4844. //
  4845. //   Description:
  4846. //
  4847. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4848.  
  4849. #COMMAND REGISTER_PROCEDURE R
  4850.   #IFSAME !1 GLOBAL
  4851.     #ERROR 101 GLOBAL PROCEDURES CANNOT BE REGISTERED
  4852.   #ELSE
  4853.     #IFSAME !1 SET
  4854.       MESSAGE$ADDRESS SET_!2
  4855.     #ELSE
  4856.       MESSAGE$ADDRESS MSG_!1
  4857.     #ENDIF
  4858.   #ENDIF
  4859. #ENDCOMMAND
  4860.  
  4861. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4862. //
  4863. //   Command:
  4864. //  Register_Function Message {FOR Class} {{Type Argument} ...} RETURNS Type
  4865. //
  4866. //   Parameters:
  4867. //
  4868. //   Description:
  4869. //
  4870. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4871.  
  4872. #COMMAND REGISTER_FUNCTION R
  4873.   #IFSAME !1 GLOBAL
  4874.     #ERROR 101 GLOBAL FUNCTIONS CANNOT BE REGISTERED
  4875.   #ELSE
  4876.     MESSAGE$ADDRESS GET_!1
  4877.     #IFSAME !2 FOR
  4878.       #FREG GET_!1 !4 !5 !6 !7 !8 !9
  4879.     #ELSE
  4880.       #FREG GET_!1 !2 !3 !4 !5 !6 !7 !8 !9
  4881.     #ENDIF
  4882.   #ENDIF
  4883. #ENDCOMMAND
  4884.  
  4885. #COMMAND DEFINE_ARGUMENTS
  4886.   #IF (!0>0)
  4887.     #IFSAME !1 STRING
  4888.       #REPLACE !2 |SS-!ZG
  4889.     #ELSE
  4890.       #IFSAME !1 NUMBER
  4891.         #REPLACE !2 |SN-!ZG
  4892.       #ELSE
  4893.         #IFSAME !1 INTEGER
  4894.           #REPLACE !2 |SI-!ZG
  4895.         #ELSE
  4896.           #IFSAME !1 DATE
  4897.             #REPLACE !2 |SD-!ZG
  4898.           #ELSE
  4899.             #IFSAME !1 REAL
  4900.               #REPLACE !2 |SR-!ZG
  4901.             #ENDIF
  4902.           #ENDIF
  4903.         #ENDIF
  4904.       #ENDIF
  4905.     #ENDIF
  4906.     DEFINE_ARGUMENTS !3 !4 !5 !6 !7 !8 !9
  4907.   #ENDIF
  4908. #ENDCOMMAND
  4909.  
  4910. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4911. //
  4912. //   Command:
  4913. //  END_PROCEDURE
  4914. //
  4915. //   Parameters:
  4916. //  None.
  4917. //
  4918. //   Description:
  4919. //
  4920. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4921.  
  4922. #COMMAND END_PROCEDURE .
  4923.   #SET B$ (!b & 3)       // reset flag to in_procedure
  4924.   #POP U$
  4925.   #REPLACE OBJ$!Za$LNUM |CI!Zg     // Update the count in the local cmd.
  4926. //  !A [] OBJ$END$HANDLER |CI0
  4927.   !A [] $0455 |CI0
  4928.   #REPLACE OBJ$!Za$ENDPROC !a
  4929.   #POP U$
  4930.   #POP ZG$
  4931.   #STKSYM
  4932. #ENDCOMMAND
  4933.  
  4934. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4935. //
  4936. //   Command:
  4937. //  FUNCTION_RETURN {OptionalReturnValue}
  4938. //
  4939. //   Parameters:
  4940. //
  4941. //   Description:
  4942. //
  4943. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4944.  
  4945. #COMMAND FUNCTION_RETURN UGO .
  4946.   #IF (!0 > 0)
  4947. //    !A [] OBJ$HRET !1
  4948.     !A [] $0450 !1
  4949.   #ELSE
  4950. //    !A [] OBJ$HRET |CI0
  4951.     !A [] $0450 |CI0
  4952.   #ENDIF
  4953. #ENDCOMMAND
  4954.  
  4955. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4956. //
  4957. //   Command: 
  4958. //  LOCAL {STRING | NUMBER | DATE | INTEGER | REAL} LocalName {...}
  4959. //
  4960. //   Parameters:
  4961. //
  4962. //   Description:
  4963. //
  4964. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  4965.  
  4966. #COMMAND LOCAL T T
  4967.   #IF (!0>0)
  4968.     #CHECK !1 '"STRING""NUMBER""DATE""INTEGER""REAL"'
  4969.     #CHECK !2 RT
  4970.     #IFDEF NUM_ARGUMENTS
  4971.       #IF (!Zg = 0)
  4972. //        !A [] LOCAL$ARGUMENT |CI0  // Create the command to save the local count,
  4973.         !A [] $0456 |CI0
  4974.         #FREF OBJ$!Za$LNUM !a       // and tell flex to update it later.
  4975.       #ENDIF
  4976.       #IFSAME !1 STRING
  4977.         #REPLACE !2 |SS!ZG
  4978.       #ELSE
  4979.         #IFSAME !1 NUMBER
  4980.           #REPLACE !2 |SN!ZG
  4981.         #ELSE
  4982.           #IFSAME !1 DATE
  4983.             #REPLACE !2 |SD!ZG
  4984.           #ELSE
  4985.             #IFSAME !1 INTEGER
  4986.               #REPLACE !2 |SI!ZG
  4987.             #ELSE
  4988.               #IFSAME !1 REAL
  4989.                 #REPLACE !2 |SR!ZG
  4990.               #ENDIF
  4991.             #ENDIF
  4992.           #ENDIF
  4993.         #ENDIF
  4994.       #ENDIF
  4995.     #ELSE
  4996.       !1 !2
  4997.     #ENDIF
  4998.     #IF (!0>2)
  4999.       LOCAL !1 !3 !4 !5 !6 !7 !8 !9
  5000.     #ENDIF
  5001.   #ENDIF
  5002. #ENDCOMMAND
  5003.  
  5004. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5005. //
  5006. //   Command: 
  5007. //  Class New_Class IS A|AN Old_Class {STARTMAC StartMacro} {ENDMAC EndMacro}
  5008. //        {FgColor BgColor {HandlerName}}
  5009. //
  5010. //   Parameters:
  5011. //
  5012. //   Description:
  5013. //
  5014. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5015.  
  5016. #COMMAND CLASS _RCDNSO "IS" "A""AN" _RDNO //_UGBO#L _UGBO#L _GBO#L .
  5017.   #CHECK U_!4 _U                      // does class exist?
  5018.   #REPLACE !1$SC !4                   //define superclass of new class
  5019.   #IFSAME !5 STARTMAC                 //if start macro specified,
  5020.     #REPLACE !1$SM !6                 //remember its name
  5021.     #IFSAME !7 ENDMAC                 //if end macro specified,
  5022.       #REPLACE !1$EM !8               //remember it
  5023.       BASE_CREATE_CLASS !1 !2 !3 !4 !9
  5024.     #ELSE
  5025.       BASE_CREATE_CLASS !1 !2 !3 !4 !7 !8 !9
  5026.     #ENDIF
  5027.   #ELSE
  5028.     #IFSAME !5 ENDMAC                 //no STARTMAC - if ENDMAC specified,
  5029.       #REPLACE !1$EM !6               //remember it
  5030.       BASE_CREATE_CLASS !1 !2 !3 !4 !7 !8 !9
  5031.     #ELSE
  5032.       BASE_CREATE_CLASS !1 !2 !3 !4 !5 !6 !7 !8 !9
  5033.     #ENDIF
  5034.   #ENDIF
  5035. #ENDCOMMAND
  5036.  
  5037. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5038. //
  5039. //   Command: 
  5040. // BASE_CREATE_CLASS New_Class IS A|AN Old_Class {FgColor BgColor {HandlerName}}
  5041. //
  5042. //   Parameters:
  5043. //
  5044. //   Description:
  5045. //
  5046. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5047.  
  5048. #COMMAND BASE_CREATE_CLASS _RCDNSO "IS" "A""AN" _RDNO _UGBO#L _UGBO#L _GBO#L .
  5049.   #PUSH !b              // save obj_flag
  5050.   #PUSH !Zb             // save current_dep
  5051.   #PUSH !Zf             // save the super_class_count
  5052.   #SET B$ (!b | 2)          // set flag to in_class
  5053.   #SET ZB$ 0                // based on atomic class object
  5054.   #IF ( (!b & 1) = 0 )          // are we NOT in a create_object?
  5055.     #IFDEF !4.AGG               // bump dep number by already
  5056.       #SET ZB$ !4.AGG           // defined sub objects
  5057.     #ENDIF
  5058.   #ENDIF
  5059.   #SET ZF$ !Zb              // save the super_class_count
  5060.   #PUSH !Zi             // save current sub object count
  5061.   #SET ZI$ 0                // and init for new class
  5062.  
  5063.   #PUSH !x                  // save old property index
  5064.   #SET X$ 0                 //init to first array index# (0)
  5065.  
  5066.   #SPUSH !$             // save the old class name
  5067.   #SET $$ !1                // retain the name of the class
  5068.   #IFDEF U_!1               // if the new class id has already
  5069.   #ELSE                 // been defined, dont bother
  5070.     INTEGER U_!1            // else put it into a int of that name
  5071.   #ENDIF
  5072.   #DATA                 // wind up the stream
  5073.   #IFDEF !4
  5074.     #DPUSH !4
  5075.   #ELSE
  5076.     #DPUSH U_!4             // based upon
  5077.   #ENDIF
  5078.   #IF (!0<5)                
  5079.     #DPUSH |CI0             // no colors defined, use default
  5080.   #ELSE
  5081.     #DPUSH !5               // else do what they say
  5082.   #ENDIF
  5083.   #IF (!0<6)
  5084.     #DPUSH |CI0             // no colors defined, use default
  5085.   #ELSE
  5086.     #DPUSH !6               // else do what they say
  5087.   #ENDIF
  5088.   #IF (!0=7)                // if parameter used, this will be
  5089.     #DPUSH |CS"!7"          // the name of a 'C' function.
  5090.   #ELSE
  5091.     #DPUSH |CS""            // else inherit one from the parent
  5092.   #ENDIF
  5093.   !A [] CREATE$CLASS U_!1 |VL       // let 'er rip
  5094. #ENDCOMMAND
  5095.  
  5096. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5097. //
  5098. //   Command: 
  5099. //  END_CLASS
  5100. //
  5101. //   Parameters:
  5102. //  None.
  5103. //
  5104. //   Description:
  5105. //
  5106. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5107.  
  5108. #COMMAND END_CLASS .
  5109.   #SET ZI$ (!Zi+!Zf)                //subobject count = self + superclass
  5110.   #REPLACE !$.AGG |CI!Zi        //define subobject count
  5111.   !A [] END$CLASS U_!$ |CI!Zi
  5112.  
  5113.   #SPOP                 // restore the old class name
  5114.   #POP X$                   // reset the property index
  5115.   #POP ZI$                      // reset old sub_object_count
  5116.   #POP ZF$                      // reset super_class_count
  5117.   #POP ZB$              // reset current_dep
  5118.   #POP B$                   // reset obj_flag
  5119. #ENDCOMMAND
  5120.  
  5121. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5122. //
  5123. //   Command:
  5124. //  PROPERTY Type Name PRIVATE | PUBLIC {InitialValue}
  5125. //
  5126. //   Parameters:
  5127. //      Type is a primitive DataFlex variable type, i.e. Integer, String...
  5128. //      Name is the local name of the property
  5129. //      PRIVATE indicates that no access handlers should be built
  5130. //      PUBLIC indicates that access/set handlers should be built (default)
  5131. //  InitialValue is the value the property is to have on creation
  5132. //
  5133. //   Description:
  5134. //      PROPERTY declares an attribute of a class, and optionally provides
  5135. //      get and set handlers to manipulate its value.  The class receiving
  5136. //      the property is assumed to have defined an array-object named
  5137. //      Attributes; properties will be stored in the Attributes array in the
  5138. //      order in which they are declared.
  5139. //
  5140. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5141.  
  5142. #COMMAND PROPERTY R R """PRIVATE""PUBLIC" UGO .
  5143.   #IFSAME !3 PRIVATE
  5144.     PROPERTY !1 !$.!2 PUBLIC !4
  5145.   #ELSE
  5146.     #IF (!b & 1)        // in_object, instance method
  5147.       !A [] CLONE$CLASS     // Create a new class
  5148.     #ENDIF
  5149.     #DATA           // Start the property
  5150.     MESSAGE$ADDRESS GET_!2
  5151.     #DPUSH GET_!2       // Push the get property id
  5152.     #FREG GET_!2 RETURNS !1
  5153.     MESSAGE$ADDRESS SET_!2
  5154.     #DPUSH SET_!2       // Push the set property id
  5155.     #DTYPE Q$ !1        // get the property type in q
  5156.     #DPUSH |CI!q        // push the type
  5157.     #IF (!0 > 3)
  5158.       #DPUSH !4
  5159.     #ENDIF
  5160.     !A [] CREATE$PROPERTY |CI0 |VL
  5161.   #ENDIF
  5162. #ENDCOMMAND
  5163.  
  5164. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5165. //
  5166. //   Command: 
  5167. //  CALL RoutineName {Parameters ...}
  5168. //
  5169. //   Parameters:
  5170. //
  5171. //   Description:
  5172. //
  5173. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5174.  
  5175. #COMMAND CALL RGBO#L
  5176.   SEND !1 TO DESKTOP !2 !3 !4 !5 !6 !7 !8 !9
  5177. #ENDCOMMAND
  5178.  
  5179. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5180. //
  5181. //   Command: 
  5182. //  SUB_PAGE NewPage FROM FromPage ;
  5183. //      { (WindowNumber) | ;
  5184. //      ({VERTICAL|HORIZONTAL} FromWindow ForWindows) | ;
  5185. //      (RECTANGULAR FromWindow NumColumns NumRows) } {...}
  5186. //
  5187. //   Parameters:
  5188. //
  5189. //   Description:
  5190. //
  5191. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5192.  
  5193. #COMMAND SUB_PAGE RT "FROM" RGBO#L
  5194.   #PUSH !Zg             // h is the number of windows on
  5195.   #SET ZG$ 0                // the sub page.
  5196.   #DATA                 // start up the arguments
  5197.   #IFDEF !3
  5198.     #DPUSH !3               // based on variable page number
  5199.   #ELSE
  5200.     #CHECK !3.N U
  5201.     #DPUSH !3.N             // based on absolute page number
  5202.   #ENDIF
  5203.   SUB$IMAGE$DEFINE !4 !5 !6 !7 !8 !9    // loop thru the passed arguments
  5204.   #DPUSH |CI!Zg             // store the number of windows
  5205.   #IFDEF !1.N
  5206.     #IFCLASS !1.N "C"
  5207.       #ERROR 102 SUB_PAGE !1 ALREADY DEFINED AS A PHYSICAL IMAGE
  5208.     #ELSE
  5209.       !A [] REDEFINE$SUB$PAGE !1.N |VL    // create the sub image
  5210.     #ENDIF
  5211.   #ELSE
  5212.     INTEGER !1.N            // create a int to place page # into
  5213.     !A [] CREATE$SUB$PAGE !1.N |VL  // create the sub image
  5214.   #ENDIF
  5215.   #POP ZG$              // restore our general counter
  5216. #ENDCOMMAND
  5217.  
  5218. #COMMAND SUB$IMAGE$DEFINE
  5219.   #IF (!0>0)
  5220.     #IFSAME !1 VERTICAL         // define a vertical set of windows
  5221.         #DPUSH |CI-1          // vertical flag
  5222.         #DPUSH !2             // push the start window number
  5223.         #DPUSH !3             // and the number of windows
  5224.         #SET ZG$ (!Zg+!3)         // how many was that?
  5225.         SUB$IMAGE$DEFINE !4 !5 !6 !7 !8 !9    // one more time
  5226.     #ENDIF
  5227.     #IFSAME !1 HORIZONTAL     // horzontal (contiguous) windows
  5228.         #DPUSH |CI-2            // horizontal flag
  5229.         #DPUSH !2           // push the start window number
  5230.         #DPUSH !3           // and the number of windows
  5231.         #SET ZG$ (!Zg+!3)           // how many was that?
  5232.         SUB$IMAGE$DEFINE !4 !5 !6 !7 !8 !9  // one more time
  5233.     #ENDIF
  5234.     #IFSAME !1 RECTANGULAR      // a rectangular array of windows
  5235.         #DPUSH |CI-3          // the rect. flag
  5236.         #DPUSH !2         // push the start window number
  5237.         #DPUSH !3         // number of windows per row
  5238.         #DPUSH !4         // number of rows
  5239.         #SET ZG$ (!Zg+(!3*!4))        // not bad huh
  5240.         SUB$IMAGE$DEFINE !5 !6 !7 !8 !9   // and again
  5241.     #ENDIF
  5242.     #IFSAME !1 VERTICAL RECTANGULAR HORIZONTAL // May look strange, but reduces
  5243.     #ELSE                                      // use of #if stack levels.
  5244.         #DPUSH !1         // its just a single window def
  5245.         #SET ZG$ !ZG          // just add one
  5246.         SUB$IMAGE$DEFINE !2 !3 !4 !5 !6 !7 !8 !9  // recurse
  5247.     #ENDIF
  5248.   #ENDIF
  5249. #ENDCOMMAND
  5250.  
  5251. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5252. //
  5253. //   Command: 
  5254. //
  5255. //   Parameters:
  5256. //
  5257. //   Description:
  5258. //
  5259. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5260.  
  5261. #COMMAND MOVE_SUB_PAGE _RDOBR "TO" _RDOBRU
  5262.   #IFDEF !1
  5263.     !A [] MOVE$SUB$PAGE !1 !3
  5264.   #ELSE
  5265.     #CHECK !1.N U
  5266.     !A [] MOVE$SUB$PAGE !1.N !3
  5267.   #ENDIF
  5268. #ENDCOMMAND
  5269.  
  5270. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5271. //
  5272. //   Command: 
  5273. //  USE PackageName | UI
  5274. //
  5275. //   Parameters:
  5276. //
  5277. //   Description:
  5278. //
  5279. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5280.  
  5281. #COMMAND USE R
  5282.   #IFSUB '!1.EXISTS'
  5283.   #ELSE
  5284.     #REPLACE !1.EXISTS |CI!a
  5285.     #IFSAME !1 UI
  5286.       INITIALIZE_INTERFACE
  5287.     #ELSE
  5288.       #USE !1
  5289.     #ENDIF
  5290.   #ENDIF
  5291. #ENDCOMMAND
  5292.  
  5293. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5294. //
  5295. //   Command: 
  5296. //
  5297. //   Parameters:
  5298. //
  5299. //   Description:
  5300. //
  5301. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5302.  
  5303. #COMMAND VFIND R R R .
  5304.   MOVE !2 TO INDEX_NUMBER
  5305.   #IFSAME !3 $0 $1 $2 $3 $4
  5306.     #SET Q$ !3
  5307.     !A [] $CC !1 |CI!q
  5308.   #ELSE
  5309.     !A [] $CC !1 !3
  5310.   #ENDIF
  5311. #ENDCOMMAND
  5312.  
  5313. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5314. //
  5315. //   Command: 
  5316. //
  5317. //   Parameters:
  5318. //
  5319. //   Description:
  5320. //
  5321. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5322.  
  5323. #COMMAND SCREEN_OPTIMIZE RL .
  5324.   #IFSAME !1 $0 $1
  5325.     #PUSH !Zg
  5326.     #SET ZG$ !1
  5327.     !A [] SCREEN$OPT |CI!Zg
  5328.     #POP ZG$
  5329.   #ELSE
  5330.     !A [] SCREEN$OPT !1
  5331.   #ENDIF
  5332. #ENDCOMMAND
  5333.  
  5334. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5335. //
  5336. //   Command: 
  5337. //     FORWARD_BEGIN_CONSTRUCT ClassName { <argument> ... }
  5338. //
  5339. //   Parameters:
  5340. //     ClassName is the name of the class which owns the macro that is
  5341. //         forwarding.
  5342. //     <argument> is any argument required
  5343. //
  5344. //   Description:
  5345. //     This command allows the instance-creation macros defined for classes
  5346. //     to 'inherit' the instance-creation macro(s) defined by their
  5347. //     superclass(es).
  5348. //
  5349. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5350.  
  5351. #COMMAND FORWARD_BEGIN_CONSTRUCT R //<currentClassName> { <arg> ... }
  5352.   #IFSUB '!1$SC' // if flex-defined class
  5353.     #SPUSH !$
  5354.     #SET $$ !1$SC  //get superclass name
  5355.     #IFSUB '!$$SM' //if class defines start macro
  5356.       !$$SM !$ !2 !3 !4 !5 !6 !7 !8 !9   //invoke it
  5357.     #ELSE          //else not defined
  5358.       FORWARD_BEGIN_CONSTRUCT !$ !2 !3 !4 !5 !6 !7 !8 !9
  5359.     #ENDIF
  5360.     #SPOP
  5361.   #ELSE
  5362.     ADD$IMAGE$ARGS MSG_CONSTRUCT_OBJECT !2 !3 !4 !5 !6 !7 !8 !9  //use default
  5363.   #ENDIF
  5364. #ENDCOMMAND
  5365.  
  5366. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5367. //
  5368. //   Command: 
  5369. //     FORWARD_END_CONSTRUCT ClassName { <argument> ... }
  5370. //
  5371. //   Parameters:
  5372. //     ClassName is the name of the class which owns the macro that is
  5373. //       forwarding.
  5374. //     <argument> is any argument required
  5375. //
  5376. //   Description:
  5377. //     This command allows the instance-ending macros defined for classes
  5378. //     to 'inherit' the instance-ending macro(s) defined by their
  5379. //     superclass(es).
  5380. //
  5381. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5382.  
  5383. #COMMAND FORWARD_END_CONSTRUCT R //<currentClassName> { <arg> ... }
  5384.   #IFSUB '!1$SC' // if flex-defined class
  5385.     #SPUSH !$
  5386.     #SET $$ !1$SC  //get superclass name
  5387.     #IFSUB '!$$EM' //if end-instance macro defined,
  5388.       !$$EM !$ !2 !3 !4 !5 !6 !7 !8 !9  //use it
  5389.     #ELSE
  5390.       FORWARD_END_CONSTRUCT !$ !2 !3 !4 !5 !6 !7 !8 !9
  5391.     #ENDIF
  5392.     #SPOP
  5393.   #ELSE
  5394.     DEFAULT_END_OBJECT  //else use default
  5395.   #ENDIF
  5396. #ENDCOMMAND
  5397.  
  5398. #COMMAND SET_DEFERRED &R .
  5399.   !A [] $460 !1
  5400. #ENDCOMMAND
  5401.  
  5402. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5403. //
  5404. //   Command: 
  5405. //     NAME_ITEM <object_name> item names...
  5406. //
  5407. //   Description:
  5408. //      Gives names to items of objects in the form: object.item
  5409. //      Assumes item number has already been set.
  5410. //
  5411. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5412. #COMMAND NAME_ITEM RT#L R
  5413.   #IFDEF !2
  5414.     #CHECK !2 #LUVFEWNSG
  5415.     #SET Q$ !2
  5416.     NAME_ITEM !1 !3 !4 !5 !6 !7 !8 !9
  5417.   #ELSE
  5418.     #IFSAME !2 ITEM
  5419.       NAME_ITEM !1 !3 !4 !5 !6 !7 !8 !9
  5420.     #ELSE
  5421.       #IFSAME !2 COLUMN
  5422.         NAME_COLUMN !1 !3 !4 !5 !6 !7 !8 !9
  5423.       #ELSE
  5424.         #IFSAME !2 PROPERTY
  5425.           NAME_PROPERTY !1 !3 !4 !5 !6 !7 !8 !9
  5426.         #ELSE
  5427.           #REPLACE !1.!2 !1.OBJ ITEM !q
  5428.           #SET Q$ (!q+1)
  5429.           #IF !0>2
  5430.               NAME_ITEM !1 !3 !4 !5 !6 !7 !8 !9
  5431.           #ENDIF
  5432.         #ENDIF
  5433.       #ENDIF
  5434.     #ENDIF
  5435.   #ENDIF
  5436. #ENDCOMMAND
  5437.  
  5438. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5439. //
  5440. //   Command: 
  5441. //     NAME_COLUMN <object_name> item names...
  5442. //
  5443. //   Description:
  5444. //      Gives names to items of objects in the form: object.item
  5445. //      Just like name_item except item numbers are relative to
  5446. //      base_item.    
  5447. //      Assumes item number has already been set.
  5448. //
  5449. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5450. #COMMAND NAME_COLUMN RT#L R
  5451.   #IFDEF !2
  5452.     #CHECK !2 #LUVFEWNSG
  5453.     #SET Q$ !2
  5454.     NAME_COLUMN !1 !3 !4 !5 !6 !7 !8 !9
  5455.   #ELSE
  5456.     #IFSAME !2 ITEM
  5457.       NAME_ITEM !1 !3 !4 !5 !6 !7 !8 !9
  5458.     #ELSE
  5459.       #IFSAME !2 COLUMN
  5460.         NAME_COLUMN !1 !3 !4 !5 !6 !7 !8 !9
  5461.       #ELSE
  5462.         #IFSAME !2 PROPERTY
  5463.           NAME_PROPERTY !1 !3 !4 !5 !6 !7 !8 !9
  5464.         #ELSE
  5465.           #REPLACE !1.!2 !1.OBJ ITEM (BASE_ITEM(!1.OBJ)+!q)
  5466.           #SET Q$ (!q+1)
  5467.           #IF !0>2
  5468.             NAME_COLUMN !1 !3 !4 !5 !6 !7 !8 !9
  5469.           #ENDIF
  5470.         #ENDIF
  5471.       #ENDIF
  5472.     #ENDIF
  5473.   #ENDIF
  5474. #ENDCOMMAND
  5475.  
  5476. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5477. //
  5478. //   Command: 
  5479. //     NAME_PROPERTY <object_name> property names...
  5480. //
  5481. //   Description:
  5482. //      Gives names to property of objects in the form: object.item
  5483. //
  5484. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5485. #COMMAND NAME_PROPERTY RT#L RT
  5486.   #IFSAME !2 ITEM
  5487.     NAME_ITEM !1 !3 !4 !5 !6 !7 !8 !9
  5488.   #ELSE
  5489.     #IFSAME !2 COLUMN
  5490.       NAME_COLUMN !1 !3 !4 !5 !6 !7 !8 !9
  5491.     #ELSE
  5492.       #IFSAME !2 PROPERTY
  5493.         NAME_PROPERTY !1 !3 !4 !5 !6 !7 !8 !9
  5494.       #ELSE
  5495.         #REPLACE !1.!2 (!2(!1.OBJ))
  5496.         #IF !0>2
  5497.           NAME_PROPERTY !1 !3 !4 !5 !6 !7 !8 !9
  5498.         #ENDIF
  5499.       #ENDIF
  5500.     #ENDIF
  5501.   #ENDIF
  5502. #ENDCOMMAND
  5503.  
  5504. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5505. //
  5506. //   Command: 
  5507. //     NAME_OBJECT <object_name> ACCESS item names...
  5508. //          ACCESS = CHILD, GLOBAL, COLUMN, PROPERTY, ITEM or ACCESS METHOD.
  5509. //
  5510. //   Description:
  5511. //      Gives names to objects in the form: object.obj
  5512. //      and allows items, properties and COLUMNs to be defined.
  5513. //      Inits item number to zero and assumes item names follow.
  5514. //
  5515. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5516.  
  5517. #COMMAND NAME_OBJECT RT#L R
  5518.   #SET Q$ 0
  5519.   #IFDEF !2
  5520.     #CHECK !2 R#LSD
  5521.     #REPLACE !1.OBJ !2
  5522.     #IF !0>2
  5523.       NAME_ITEM !1 !3 !4 !5 !6 !7 !8 !9
  5524.     #ENDIF
  5525.   #ELSE
  5526. //    #CHECK !2 "CHILD""ITEM""GLOBAL""COLUMN""PROPERTY"
  5527.     #IFSAME !2 CHILD
  5528.       REGISTER_OBJECT !1
  5529.       #IFDEF !3
  5530.         NAME_OBJECT !1 (!1(!3))  !4 !5 !6 !7 !8 !9
  5531.       #ELSE
  5532.         #CHECK !3.OBJ #LU
  5533.         NAME_OBJECT !1 (!1(!3.OBJ))  !4 !5 !6 !7 !8 !9
  5534.       #ENDIF
  5535.     #ELSE
  5536.       #IFSAME !2 GLOBAL
  5537.         #IFDEF !1.OBJ
  5538.           #CHECK !1.OBJ NSDFW#L
  5539.         #ELSE
  5540.           INTEGER !1.OBJ
  5541.         #ENDIF
  5542.         #IFCLASS !1.OBJ V$
  5543.           #IF (!b & 1)
  5544.             MOVE CURRENT_OBJECT TO !1.OBJ
  5545.           #ELSE
  5546.             #IF (!b)
  5547.               #ERROR 100 NAME_OBJECT MUST PRECEDE CLASS OR PROCEDURE
  5548.             #ELSE
  5549.               MOVE 1023 TO !1.OBJ
  5550.             #ENDIF
  5551.           #ENDIF
  5552.         #ENDIF
  5553.         #IF !0>2
  5554.           NAME_ITEM !1 !3 !4 !5 !6 !7 !8 !9
  5555.         #ENDIF
  5556.       #ELSE
  5557.         NAME_!2 !1 !3 !4 !5 !6 !7 !8 !9
  5558.       #ENDIF
  5559.     #ENDIF
  5560.   #ENDIF
  5561. #ENDCOMMAND
  5562.     
  5563. #COMMAND ITEM_GROUP .
  5564.   #PUSH !Zd
  5565.   #PUSH !Ze
  5566.   #SET ZD$ 0
  5567.   !A [] $462 |CI0        //create new item group; size is fwd-ref'd
  5568.   #SET ZE$ !a
  5569.   #FREF ITEM$GROUP!Ze !a
  5570. #ENDCOMMAND
  5571.  
  5572. #COMMAND END_ITEM_GROUP .
  5573.   #REPLACE ITEM$GROUP!Ze |CI!Zd  //define size of item group
  5574.   #POP ZE$
  5575.   #POP ZD$
  5576. #ENDCOMMAND
  5577.  
  5578. #COMMAND DEPENDENT_ITEM R
  5579.   #IFSAME !2 ITEM    //if ITEM is second arg, item name replacement was used
  5580.     #IFDEF !1
  5581.       !A [] $463 !1 !3 //add obj#,item# pair to current item group
  5582.     #ELSE
  5583.       !A [] $463 !1.OBJ !3 //add obj#,item# pair to current item group
  5584.     #ENDIF
  5585.     #SET ZD$ !ZD         //increment element counter
  5586.     #IF (!0>3)
  5587.       DEPENDENT_ITEM !4 !5 !6 !7 !8 !9
  5588.     #ENDIF
  5589.   #ELSE
  5590.     #IFDEF !1
  5591.       !A [] $463 !1 !2 //add obj#,item# pair to current item group
  5592.     #ELSE
  5593.       !A [] $463 !1.OBJ !2 //add obj#,item# pair to current item group
  5594.     #ENDIF
  5595.     #SET ZD$ !ZD         //increment element counter
  5596.     #IF (!0>2)
  5597.       DEPENDENT_ITEM !3 !4 !5 !6 !7 !8 !9
  5598.     #ENDIF
  5599.   #ENDIF
  5600. #ENDCOMMAND
  5601.  
  5602. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5603. //
  5604. //   Command: 
  5605. //  IMPORT_CLASS_PROTOCOL Source Dest {Msg | ALL} {Flag}
  5606. //
  5607. //   Description:
  5608. //  This command will copy the message definitions of the Source
  5609. //  class to the Dest class.  The program may choose to copy ALL
  5610. //  of the messages or only one of the messages from the Source.
  5611. //  The program has the option to stop any message that would overwrite
  5612. //  and to stop the copying of messages not directly defined in the
  5613. //  Source class.
  5614. //
  5615. // =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  5616.  
  5617. #COMMAND IMPORT_CLASS_PROTOCOL _RSNDLOB# _SNDLOB# 
  5618.   #IF (!0<2)
  5619.     IMPORT_CLASS_PROTOCOL !1 CURRENT_CLASS
  5620.   #ELSE
  5621.     #DATA       // Begining of data
  5622.     #IFDEF !1       // class is variable (integer) or constant
  5623.       #DPUSH !1     // defined_in
  5624.     #ELSE
  5625.       #DPUSH U_!1   // class is normal symbol type (integer)
  5626.     #ENDIF
  5627.     #IFDEF !2       // is the destination defined?
  5628.       #DPUSH !2     // add to class
  5629.     #ELSE
  5630.       #IFSAME !2 CURRENT_CLASS  // use this symbol for "current class"
  5631.         #DPUSH U_!$     // cc is in this symbol (set by class)
  5632.       #ELSE
  5633.         #DPUSH U_!2     // another standard class id
  5634.       #ENDIF
  5635.     #ENDIF
  5636.     #IF (!0>2)      // message or all specified
  5637.       #IFSAME !3 ALL    // copy all messages
  5638.         #DPUSH |CI0 // 0 is all
  5639.       #ELSE
  5640.         #IFDEF !3
  5641.           #DPUSH !3 // message name, note full name required
  5642.         #ELSE
  5643.           #IFDEF MSG_!3
  5644.             #DPUSH MSG_!3
  5645.           #ELSE
  5646.             #IFDEF SET_!3
  5647.               #DPUSH SET_!3
  5648.             #ELSE
  5649.               #IFDEF GET_!3
  5650.                 #DPUSH GET_!3
  5651.               #ENDIF
  5652.             #ENDIF
  5653.           #ENDIF
  5654.         #ENDIF
  5655.       #ENDIF
  5656.       #IF (!0>3)
  5657.         #SET Q$ 0
  5658.         CHAIN$HELP !4 !5    // NO_INHERIT and NO_OVERWRITE
  5659.         #DPUSH |CI!q    // flags
  5660.       #ELSE
  5661.         #DPUSH |CI0 // no flags
  5662.       #ENDIF
  5663.     #ELSE
  5664.       #DPUSH |CI0   // all messages
  5665.       #DPUSH |CI0   // overwrite and superclasses
  5666.     #ENDIF
  5667.     !A [] $0465 |CI0 |VL
  5668.   #ENDIF
  5669. #ENDCOMMAND
  5670.