Module FMAC
1#REM DataFlex standard MACROs
2#REM Copyright 1987-2001 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.1
5#REM IT MUST BE PACKed INTO FLEX.CFL WITH THE COMMAND "DFPACK FMAC"
6#REM THIS SUPPORTS FMACS FOR BOTH 3.1 AND 4.0 (WINDOWS). THE COMPILER
7#REM VARIABLE IS$WINDOWS DETERMINES IF THIS IS CHARACTER MODE OR GUI.
8
9#REM 3/10/2001 mg - Using VDF7 service pack 1 fmac. Converted to allow character mode.
10#REM To set for windows define IS$WINDOWS.Separated messages by purpose (VDF, WAS, XML)
11#REM so that they can be turned on or off depending on a compiler variable. This has
12#REM not yet been implemented, so everything is on.
13#REM This FMAC needs to be checked against the FMAC that John sent in Feb 2001 for
14#REM changes.
15
16#REM Changes 5/20/98 -JJT
17#REM Changes in many commands to make this friendlier for VDF5.1
18#REM Changed syntax/Better error checking. Most commands are
19#REM added to the end. Note we now use !Zk, !Zl, !Zm, !Zn, !Zo
20#REM 1. All changes marked JJT-5.1
21
22
23#REM GENERAL FORMAT OF AN ICODE LINE:
24
25#REM !A [] $000 ARG1 ARG2
26#REM !A Generates the next line number
27#REM [] is a place holder for the indicators
28#REM $000 is a hex number that calls the appropriate 'C' routine
29#REM arg1, arg2 - two arguments of any type/class
30#REM can be passed to the routine.
31
32#REM THE FOLLOWING ARE THE COMPILE-TIME VARIABLES USED
33#REM UPPERCASE WILL AUTO-INCREMENT (FIRST);
34#REM LOWER CASE WILL NOT. THEN SUBSTITUTE TO AN INTEGER VALUE.
35
36#REM !A - Next line number
37#REM !B - Reserved
38#REM !C - Next indicator number
39#REM !D - Next integer number
40#REM !E - Autopage, window #
41#REM !F - Autopage, page #
42#REM G,H,I,J,K,L,M - You may use these
43#REM !N - Static nesting level
44#REM !O - Used by ?ET*ATTRIBUTE
45#REM !P - Used by report
46#REM !Q - Low level temporary
47#REM !R - Static structure number (Begin/End)
48#REM !S - Temporary used by end/loop/until
49#REM !T,!U - Reserved
50#REM !V - Next variable number.
51#REM !W - Reserved
52#REM !X - Temporary for enter & report - file numbers.
53#REM !Y - Temporary for keyproc
54#REM !Z - Reserved
55
56#REM Type checking in command args use negative logic and
57#REM conform to the following:
58
59#REM C - Constant V - Memory variable
60#REM F - File element G - Group
61#REM W - Window
62#REM S - String E - Expression
63#REM N - Number L - Label
64#REM D - Date O - Group options
65#REM I - Integer B - Group indicators
66#REM # - Indicator . - No more arguments
67#REM X - Not an indicator R - Argument required
68#REM T - Error if typed $ - Changes window to string
69#REM U - Error if untyped "constant" - Must be constant
70
71#REM
72#REM Types from Runtime. Command
73#REM ARGSTR = 0, S String
74#REM ARGNUM = 1, N Number
75#REM ARGDATE = 2, D Date
76#REM ARGINT = 3, I Integer
77#REM ARGBIGINT = 4, H BigInt
78#REM ARGREAL = 5, R Real
79#REM ARGBOOL = 6, B Logical - this is actually only used for indicators
80#REM ARGMEM = 7, X Binary
81#REM ARGTIME = 8, T Time
82#REM ARGTIMESTAMP = 9, M DateTime
83#REM ARGFLOAT = 10, F Float
84#REM ARGBYTE = 11, Y Char
85#REM ARGUBYTE = 12 C UChar
86#REM ARGSHORT = 13, W Short
87#REM ARGUSHORT = 14, U UShort
88#REM ARGULONG = 15, V UInteger
89#REM ARGBIT = 16, Z Boolean (This is what you use for boolean)
90#REM ARGBIGUINT = 17, G UBigInt
91#REM ARGSQLNUMERIC = 18, O Currency (Visual Basic Decimal)
92#REM ARGCSTRING = 19, K Struct
93#REM ARGTIMESPAN = 20, P Timepsan (PERIOD)
94#REM ARGUNICODE = 21, A Array
95#REM ARGSUPERBCD = 22, Q Decimal (Very large decimal)
96#REM J Variant
97#REM ARG_UNUSED
98#REM
99#REM Classes from Runtime.
100#REM ARGNOTHING,
101#REM ARGFLDSTR, Field (string) F
102#REM ARGFLDNUM, Field (BCD, Integer or Date) F
103#REM ARGWNDSTR, Window (string) W
104#REM ARGWNDNUM, Window (BCD, Integer or Date) W
105#REM ARGDATSTR, String or Expression CV
106#REM ARGDATNUM, BCD or Numeric CV
107#REM ARGCONINT, Int or Long CV
108#REM ARGSYSINT, System Integers
109#REM ARGSYSDATE, System Date
110#REM ARGSYSTIME, System Time
111#REM ARGDATREAL, Reals CV
112#REM ARGEXP, Expression E
113#REM ARGWNDRL, Window Real W
114#REM ARGSTACK, Stack S
115#REM ARGHEAP, Global Heap Address H
116#REM ARGPROC Pointer into shared memory P (for process)
117#REM
118
119#REM Method Overloading
120#REM NOTE: As of 15.0 we are deprecating the use of Overloaded messages. The existing technology will
121#REM continue to be supported as-is and it will not be extended
122#REM
123#REM Function Foo Overloaded Integer i Integer j Returns Integer
124#REM Function Foo Overloaded Integer i
125#REM
126#REM Set Entry_Msg To (Get_Foo(Integer, Integer))
127#REM Move (Foo(self,10)) To windowindex
128#REM
129#REM Overloaded types create mangled symbol:
130#REM
131#REM Get_Foo@2
132#REM Get_Foo@1
133#REM Also defines symbol Get_Foo_Overloaded
134#REM
135#REM Non-Overloaded types create non-mangled symbol:
136#REM
137#REM Get_Foo
138#REM
139#REM Rules
140#REM 1. Overloaded and non-overloaded messages may not have the same name (compiler error)
141#REM 2. Global procedures and functions cannot be overloaded (compiler error)...only class methods
142#REM 3. Class methods (regular and overloaded), global proc/funcs, and object name (when function) cannot
143#REM have the same name. The first "type" to use the name locks it for that type.
144#REM
145#REM Fixups:
146#REM
147#REM When compiling, FREFs are created for code fixups. At that point, it
148#REM is unclear how the method name will be declared (overloaded or non-overloaded),
149#REM so a mangled name is created. When fixups are processed, method identifiers
150#REM are resolved in this order:
151#REM
152#REM 1. Non-overloaded method (class or global)
153#REM 2. Object overloaded Method
154#REM Since there can be no overlap of naming across types, the order or resolution does not matter
155#REM
156#REM
157#REM Object names:
158#REM
159#REM Object access methods are not overloaded.
160#REM
161#REM Properties:
162#REM
163#REM Properties are not overloaded.
164#REM
165
166#REM Example: #COMMAND EXAMPLE SND means arg1 cannot be string,number,or date
167
168#COMMAND ABORT &.
169 !A [] $040
170#ENDCOMMAND
171
172#COMMAND ACCEPT #L #L #LUC #LUWFC .
173 #SET Q$ !0
174 #IF !q=0
175 AUTO2$ ACCEPT PAGE!f
176 #ELSE
177 #IF !q=1
178 #IFCLASS !1 "G"
179 AUTO2$ ACCEPT PAGE!f !1
180 #ELSE
181 #CHECK !1 _CVFG#L
182 !A [] $1C1 !1 |CI0
183 #ENDIF
184 #ELSE
185 #IF !q=2
186 #IFCLASS !2 "G"
187 #FORMAT !1 !2
188 #CHECK !1 _CVFG#L
189 !A [] $1C1 !1 |CI0
190 #ELSE
191 AUTO2$ ACCEPT PAGE!f TO !2
192 #ENDIF
193 #ELSE
194 #IF !q>2
195 #IFCLASS !3 "G"
196 #CHECK !1 "TO"
197 AUTO2$ ACCEPT PAGE!f TO !2 !3
198 #ELSE
199 #IFCLASS !4 "G"
200 #FORMAT !1 !4
201 #ENDIF
202 #CHECK !1 _CVFG#L
203 #CHECK !2 "TO"
204 #CHECK !3 _CG#LE
205 !A [] $1C1 !1 !3
206 #ENDIF
207 #ENDIF
208 #ENDIF
209 #ENDIF
210 #ENDIF
211#ENDCOMMAND
212
213#COMMAND APPEND #LGULCE$ #LGULR$
214 !A [] $243 !1 !2
215 #IF !0>2
216 APPEND !1 !3 !4 !5 !6 !7 !8 !9
217 #ENDIF
218#ENDCOMMAND
219
220#COMMAND ASCII &#GRLU "TO" #UGRLCE .
221 !A [] $247 !1 !3
222#ENDCOMMAND
223
224#REM The AUTO commands are used internally to generate the
225#REM next AUTOPAGE window number at compile time.
226
227#COMMAND AUTO2$
228 !1 !2.!E !3 !4 !5
229 #CHECK !2.!e _RUCVF#L
230#ENDCOMMAND
231
232#COMMAND AUTO3$
233 !1 !2 !3.!E !4 !5
234 #CHECK !3.!e _RUCVF#L
235#ENDCOMMAND
236
237#COMMAND AUTO4$
238 !1 !2 !3 !4.!E !5
239 #CHECK !4.!e _RUCVF#L
240#ENDCOMMAND
241
242#COMMAND AUTOPAGE &T %USNVLE# .
243 #CHECK !1.N _WFVSG#LU
244 #SET F$ !1.N
245 #SET E$ !2
246 #IF !e>0
247 #SET E$ !e-1
248 #ENDIF
249#ENDCOMMAND
250
251#REM BACKFIELD can only be used in a KEY PROCedure. It returns to the
252#REM window (COMMAND) PRIOR to the one that called it.
253
254#COMMAND BACKFIELD &.
255 !A [] $288
256#ENDCOMMAND
257
258#COMMAND BEGIN &.
259 #SET N$ !N
260 #PUSH !R
261 #XPUSH !n $INIT // Init IF/ELSE stack at this nesting level.
262 #IFIND //INCLUDE JUMPS IF INDICATORS ON LINE.
263 // GOTO BEGIN$!r
264 !A [] $041 |CI0
265 #FREF BEGIN$!r !a
266 #$ !A 0 0 0 $041 |CL0
267 #FREF END$!r !a
268 #ENDIF
269 #$ BEGIN$!r:
270#ENDCOMMAND
271
272#COMMAND BLANKFORM &%CVFG#EL "THRU""THROUGH""" %CVFG#LUE .
273 #IF !0>0
274 #IFDEF !1
275 !A [] $1C4 !1 !3
276 #ELSE
277 #CHECK !1.N _#RLGVU
278 !A [] $1C4 !1.N
279 #ENDIF
280 #ELSE
281 !A [] $1C4 |CI0
282 #ENDIF
283#ENDCOMMAND
284
285#COMMAND BREAK$ // does breakpoint for all
286 #IF (!0>0)
287 #IFCLASS !1 _F
288 BREAKPOINT |CI!P !1
289 #ELSE
290 #CHECK !1 _LGBCVWIEOU#
291 #ENDIF
292 #ENDIF
293 #IF (!0>1)
294 BREAK$ !2 !3 !4 !5 !6 !7 !8 !9
295 #ENDIF
296#ENDCOMMAND
297
298#COMMAND BREAK$DOWN R // does gosub to break
299 #IF !x>0 // sections from N to 0
300 #IF !0>1
301 // GOSUB !1!x
302 !A [] $42 |CL0
303 #FREF !1!x !a
304 #ELSE
305 //[!x] GOSUB !1!x
306 !A [!x] $42 |CL0
307 #FREF !1!x !a
308 #ENDIF
309 #ENDIF
310 #SET X$ !x-1
311 #IF !x>0
312 BREAK$DOWN !1 !2
313 #ENDIF
314#ENDCOMMAND
315
316#COMMAND BREAK$PRT // prints all SUBHEADERs
317 #IF !x<!p // for page
318 #IFDEF !1!X.N
319 !A [~ !x] $202 !1!x.N // OUTPUT
320 #ENDIF
321 BREAK$PRT !1 !2
322 #ENDIF
323#ENDCOMMAND
324
325#COMMAND BREAK$T3
326 #IF !x<!p // makes unused sections defined
327 MAKEDEF$ RPT.SUBHEADER!X RPT.SUBTOTAL!x
328 BREAK$T3
329 #ENDIF
330#ENDCOMMAND
331
332#COMMAND BREAK$UP // does GOSUB to break
333 #IF !x<!p // sections from 0 to N
334 #IF !0=1
335 //[!X] GOSUB !1!x
336 !A [!X] $42 |CL0
337 #FREF !1!x !a
338 #ELSE
339 // GOSUB !1!X
340 !A [] $42 |CL0
341 #FREF !1!X !a
342 #ENDIF
343 BREAK$UP !1 !2
344 #ENDIF
345#ENDCOMMAND
346
347#COMMAND BREAKINIT &. // set up breakpoints for REPORT
348 !A [] $207
349#ENDCOMMAND
350
351#COMMAND BREAKPOINT &UVFW UCI // test breakpoint and set indicators
352 !A [] $204 !1 !2
353#ENDCOMMAND
354
355#COMMAND CALCULATE &#ULG "TO" #UCLGER .
356 #IFTYPE !3 "R"
357 !A [] $085 !1 !3 //MOVE REAL
358 #ELSE
359 !A [] $081 !1 !3 //MOVE NUM
360 #ENDIF
361#ENDCOMMAND
362
363#COMMAND CHAIN RNDIG#L NDG#L
364 #SET Q$ 0
365 #IFSAME !1 WAIT
366 CHAIN$HELP !3 !4 !5 !6 !7 !8 !9
367 !A [] $049 !2 |CI!q
368 #ELSE
369 #CHECK !1 _U
370 CHAIN$HELP !2 !3 !4 !5 !6 !7 !8 !9
371 !A [] $045 !1 |CI!q
372 #ENDIF
373#ENDCOMMAND
374
375#COMMAND CHAIN$HELP UVNDEG#L
376 #IF (!0>0)
377 #SET Q$ (!q+!1)
378 CHAIN$HELP !2 !3 !4 !5 !6 !7 !8 !9
379 #ENDIF
380#ENDCOMMAND
381
382#COMMAND CHARACTER &#%GULD "TO" #GRULCE .
383 !A [] $248 !1 !3
384#ENDCOMMAND
385
386#COMMAND CLEAR_OPTION #LGRE . // Clears window options which
387 #IFCLASS !1 _C // have been set ON by set option
388 #SET Q$ !1 // or by dfsetup.
389 !A [] $04B |CI!q |CI0 // CLEAR_OPTION AUTORETURN
390 #ELSE
391 !A [] $04B !1 |CI0 // THIS COMMAND IS FOR INTERNAL USE.
392 #ENDIF
393#ENDCOMMAND
394
395#COMMAND CLEARFORM &%CVFG#LE "THRU""THROUGH""" %CVFG#LUE .
396 #IF !0>0
397 #IFDEF !1
398 !A [] $1C3 !1 !3 |CI0
399 #ELSE
400 #CHECK !1.N _R#LGVU
401 !A [] $1C3 !1.N |CI0
402 #ENDIF
403 #ELSE
404 !A [] $1C3 |CI0
405 #ENDIF
406#ENDCOMMAND
407
408#COMMAND CLEARSCREEN & .
409 !A [] $144 !1
410#ENDCOMMAND
411
412#COMMAND CLEARWARNING &.
413 !A [] $048
414#ENDCOMMAND
415
416#COMMAND CLEARXY &%#USGL %#USGLR .
417 !A [] $146 !1 !2
418#ENDCOMMAND
419
420#COMMAND CLOSE_INPUT
421 #IFSAME !1 CHANNEL
422 !A [] $10A |CI0 !2
423 #ENDIF
424 !A [] $100 |CS'CON:'
425#ENDCOMMAND
426
427#COMMAND CLOSE_OUTPUT
428 #IFSAME !1 CHANNEL
429 !A [] $10A |CI1 !2
430 #ENDIF
431 !A [] $101 |CS'LST:'
432#ENDCOMMAND
433
434#COMMAND CMDLINE &#RLUGE .
435 !A [] $24A !1 |CS''
436#ENDCOMMAND
437
438// With the name mangling code, we need a way to define external C messages.
439// The CMSG command does just that. It uses the #FGEN command to parse over a special syntax
440// that defines a prototype in this form:
441//
442// Example: CMSG I GET_AUX_VALUE |CI$31 I
443//
444// This generates in !? a name GET_AUX_VALUE@I if we mangle on the parameter list types
445// This generates in !? a name GET_AUX_VALUE@I@I if we mangle on the parameter list and return type
446// This generates in !? a name GET_AUX_VALUE@1 if we mangle on the number of the parameters
447//
448// CMSG V GET_FOO |CI$099 V
449//
450// Returns GET_FOO_# and receives a variable argument list.
451//
452
453//#IFDEF MANGLE_NAMES
454 #COMMAND CMSG RIND RIND RSND
455 #IFNDEF !2
456 #REPLACE !2 !3
457 #ENDIF
458 #ENDCOMMAND
459//#ENDIF
460
461#COMMAND COPYFILE &#LGU "TO" R#LGU .
462 !A [] $2C5 !1 !3
463#ENDCOMMAND
464
465#COMMAND CONSTRAINT_SAVE_INIT .
466 !A [] $0DE
467#ENDCOMMAND
468
469#COMMAND CONSTRAINT_SET R#LG """DELETE""CLEAR"
470 #IFSAME !2 DELETE
471 !A [] $0DA !1 // DELETE
472 #ELSE
473 #IFSAME !2 CLEAR
474 !A [] $0DA !1 // DELETE FIRST
475 #ENDIF
476 !A [] $0D0 !1 // QUERY ID
477 #ENDIF
478#ENDCOMMAND
479
480#COMMAND CONSTRAINT_VALIDATE .
481 !A [] $0DF
482#ENDCOMMAND
483
484#COMMAND CONSTRAINT_INIT r r "BY" r // mode file by index
485 #IFSAME !1 $0 $1 $2 $3 $4 $5
486 #SET Q$ !1
487 MOVE |CI!q TO INDEX_NUMBER
488 #ELSE
489 MOVE !1 TO INDEX_NUMBER
490 #ENDIF
491 #IFDEF !2
492 !A [] $0D6 !2 !4 // VARIABLE FILE NUMBER
493 #ELSE
494 #SET Q$ !2.FILE_NUMBER // FILE NAME ONLY
495 !A [] $0D6 |CI!q !4
496 #ENDIF
497#ENDCOMMAND
498
499#COMMAND CONSTRAINED_CLEAR
500 #IF !0>0
501 CONSTRAINT_INIT !1 !2 !3 !4
502 #ENDIF
503 !A [] $DC // Find clear
504#ENDCOMMAND
505
506#COMMAND CONSTRAINED_FIND // MODE FILE by INDEX
507 #IFSAME !1 NEXT
508 #IF !0>1
509 !A [] $0D0 !2 // QUERY ID
510 #ENDIF
511 !A [] $D8 // find NEXT
512 #ELSE
513 #IFSAME !1 FIRST
514 CONSTRAINED_CLEAR GE !2 !3 !4
515 #ELSE
516 #IFSAME !1 LAST
517 CONSTRAINED_CLEAR LE !2 !3 !4
518 #ELSE
519 #IF !0>0
520 CONSTRAINT_INIT !1 !2 !3 !4
521 #ENDIF
522 // THIS USES RB DATA ,IT DOES NOT CLEAR THE rb.
523 #ENDIF
524 #ENDIF
525 !A [] $D7 |CI0 // find init, sets found on status of constrained relates.
526 !A [FOUND] $D8 // find NEXT (first)
527 #ENDIF
528#ENDCOMMAND
529
530// JJT-5.1
531//#COMMAND DATE TR
532// #NUM V$
533// #REPLACE !1 |VD!v
534// #IF (!0>1)
535// DATE !2 !3 !4 !5 !6 !7 !8 !9
536// #ENDIF
537//#ENDCOMMAND
538
539#COMMAND DEBUG &.
540 !A [] $044
541#ENDCOMMAND
542
543#COMMAND DECREMENT #ELCRUG .
544 #IFTYPE !1 "IV"
545 !A [] $087 !1 |CI0
546 #ELSE
547 Move (!1 - 1) to !1
548 #ENDIF
549#ENDCOMMAND
550
551#COMMAND DESPOOL &. // O/S dependent function
552 !A [] $2C6
553#ENDCOMMAND
554
555#COMMAND DIRECTORY &R#LGU .
556 !A [] $2C4 !1
557#ENDCOMMAND
558
559#COMMAND DIRECT_INPUT
560 #IFSAME !1 CHANNEL
561 !A [] $10A |CI0 !2
562 #IF !0>2
563 DIRECT_INPUT !3 !4
564 #ENDIF
565 #ELSE
566 #IFSAME !1 RESOURCE
567 #IFDEF !2 // allow variable string for resource name/id
568 DIRECT_INPUT ('!1:' + string(!2)) !3 !4 !5 !6 !7 !8 !9
569 #ELSE
570 #SET Q$ !2.RSC
571 !A [] $100 |CS"!1:!q"
572 #ENDIF
573 #ELSE
574 #IFSAME !1 DBMS IMAGE
575 #IFSAME !1 IMAGE
576 #IFDEF !2 // allow variable for image number
577 DIRECT_INPUT ('!1:' + string(!2)) !3 !4 !5 !6 !7 !8 !9
578 #ELSE
579 #SET Q$ !2.N
580 !A [] $100 |CS"!1:!q"
581 #ENDIF
582 #ELSE
583 #IFCLASS !2 "F" // if field ref, use as is
584 !A [] $100 |CS"!1:!2"
585 #ELSE
586 #IFDEF !2 // for all classes/types, assume variable string for field ref
587 DIRECT_INPUT ('!1:' + string(!2)) !3 !4 !5 !6 !7 !8 !9
588 #ELSE
589 #CHECK !2 _U // force cannot be untyped error.
590 #ENDIF
591 #ENDIF
592 #ENDIF
593 #ELSE
594 #CHECK !2 .
595 !A [] $100 !1
596 #ENDIF
597 #ENDIF
598 #ENDIF
599#ENDCOMMAND
600
601#COMMAND DIRECT_OUTPUT
602 #IFSAME !1 CHANNEL
603 !A [] $10A |CI1 !2
604 #IF !0>2
605 DIRECT_OUTPUT !3 !4
606 #ENDIF
607 #ELSE
608 #IFSAME !1 DBMS IMAGE
609 #IFSAME !1 IMAGE
610 #IFDEF !2 // allow variable for image number
611 DIRECT_OUTPUT ('!1:' + string(!2)) !3 !4 !5 !6 !7 !8 !9
612 #ELSE
613 #SET Q$ !2.N
614 !A [] $101 |CS"!1:!q"
615 #ENDIF
616 #ELSE
617 #IFCLASS !2 "F" // if field ref, use as is
618 !A [] $101 |CS"!1:!2"
619 #ELSE
620 #IFDEF !2 // for all classes/types, assume variable string for field ref
621 DIRECT_OUTPUT ('!1:' + string(!2)) !3 !4 !5 !6 !7 !8 !9
622 #ELSE
623 #CHECK !2 _U // force cannot be untyped error.
624 #ENDIF
625 #ENDIF
626 #ENDIF
627 #ELSE
628 #CHECK !2 .
629 !A [] $101 !1
630 #ENDIF
631 #ENDIF
632#ENDCOMMAND
633
634#COMMAND APPEND_OUTPUT
635 #IFSAME !1 CHANNEL
636 !A [] $10A |CI1 !2
637 #IF !0>2
638 APPEND_OUTPUT !3 !4
639 #ENDIF
640 #ELSE
641 #IFSAME !1 DBMS IMAGE
642 #IFSAME !1 IMAGE
643 #IFDEF !2 // allow variable for image number
644 APPEND_OUTPUT ('!1:' + string(!2)) !3 !4 !5 !6 !7 !8 !9
645 #ELSE
646 #SET Q$ !2.N
647 !A [] $101 |CS"!1:!q" |CI2
648 #ENDIF
649 #ELSE
650 #IFCLASS !2 "F" // if field ref, use as is
651 !A [] $101 |CS"!1:!2" |CI2
652 #ELSE
653 #IFDEF !2 // for all classes/types, assume variable string for field ref
654 APPEND_OUTPUT ('!1:' + string(!2)) !3 !4 !5 !6 !7 !8 !9
655 #ELSE
656 #CHECK !2 _U // force cannot be untyped error.
657 #ENDIF
658 #ENDIF
659 #ENDIF
660 #ELSE
661 #CHECK !2 .
662 !A [] $101 !1 |CI2
663 #ENDIF
664 #ENDIF
665#ENDCOMMAND
666
667#COMMAND DISKFREE #LIDNRUG "TO" #LDRCUGE .
668 !A [] $2d5 !3 !1
669#ENDCOMMAND
670
671#COMMAND DISPLAY RUG#L
672 #IF !0>2
673 #CHECK !2 "TO"
674 #CHECK !3 _RGC#LE
675 !A [] $1C2 !1 !3
676 #IF !0>3
677 #CHECK !4 _#LWFCV
678 #FORMAT !3 !4
679 #ENDIF
680 #ELSE
681 AUTO4$ DISPLAY !1 TO PAGE!f !2
682 #ENDIF
683#ENDCOMMAND
684
685#COMMAND ELSE
686 #$ !A [] $41 |CI0 //jump over else code.
687 #XPOP !n S$ // GET GOTO LINE NUMBER FROM LAST IF.
688 #XPUSH 1 !a // Save line number of ELSE jump.
689 #XPUSH 0 !n // Save static nest level.
690 #FREF (!a+1) !s // Modify goto line number with ELSE command
691 !1 !2 !3 !4 !5 !6 !7 !8 !9
692 #XPOP 0 Q$ // Restore static nest level to Q.
693 #XPOP 1 S$ // Restore line number of else jump.
694 #IF (!n>!q)
695 #FREF END$!r !s // Modify ELSE jump to after BEGIN block.
696 #ELSE
697 #FREF (!a+1) !s // Modify ELSE jump to after the ELSE command.
698 #ENDIF
699#ENDCOMMAND
700
701#COMMAND END &.
702 #POP S$
703 #IFDEF WHILE$!s
704 !A [] $041 WHILE$!s
705 #ENDIF
706 END$!s:
707 #SET N$ !n-1
708#ENDCOMMAND
709
710#COMMAND ENDGROUP &.
711 //ENTUPDATE // update record buffer
712 !A [] $280 |CI0
713 //GOTO ENT$END!x
714 !A [] $41 |CL0
715 #FREF ENT$END!x !a
716 //RETURN // RETURN stops entry command list
717 !A [] $43 |CI0
718 ENT$END!x:
719#ENDCOMMAND
720
721#COMMAND ENT$KEY
722 ENT$DISP:
723 IF ENTER$DISPLAY NE 0 BEGIN
724 !A [FOUND] $042 ENTER$DISPLAY
725 END
726 ELSE BEGIN
727 [FOUND] ENTDISPLAY // JUST DO AN ENTDISPLAY
728 END
729 // ENTAGAIN
730 !A [] $287
731 // RETURN
732 !A [] $43 |CL0
733
734 //<<<<<<< STANDARD KEY PROCEDURES FOR ENTER GROUP >>>>>>>>>>
735 //KEYPROC KEY.FIND
736 ENTER$.FIND:
737 // ENTFIND GE // no, FIND
738 !A [] $281 |CI3
739 #KEYPROC 7 !a
740 // GOTO ENT$DISP
741 !A [] $41 ENT$DISP
742
743 //KEYPROC KEY.NEXT // FIND next record
744 ENTER$.NEXT:
745 // ENTFIND GT
746 !A [] $281 |CI4
747 #KEYPROC 15 !a
748 // GOTO ENT$DISP
749 !A [] $41 ENT$DISP
750
751 //KEYPROC KEY.PREVIOUS // FIND prv record
752 ENTER$.PREVIOUS:
753 // ENTFIND LT
754 !A [] $281 |CI0
755 #KEYPROC 14 !a
756 // GOTO ENT$DISP
757 !A [] $41 ENT$DISP
758 //KEYPROC KEY.UP
759 //KEYPROC KEY.FIELD // BACK FIELD
760 ENTER$.FIELD:
761 // BACKFIELD
762 !A [] $288
763 #KEYPROC 16 !a
764 #KEYPROC 6 !a
765 // RETURN
766 !A [] $43 |CI0
767 //KEYPROC KEY.CLEAR // CLEAR SCREEN
768 ENTER$.CLEAR:
769 // INDICATE ERR FALSE
770 !A [] $4028 |CI0 |CI0 |127
771 #KEYPROC 13 !a
772 !A [] $284 // ENTCLEAR
773 // RETURN
774 !A [] $43 |CI0
775 //KEYPROC KEY.SAVE
776 ENTER$.SAVE:
777 !A [] $285 // ENTSKIP
778 #KEYPROC 9 !a
779 // RETURN
780 !A [] $43 |CI0
781 //KEYPROC KEY.HELP
782 ENTER$.HELP:
783 //HELP
784 !A [] $1C5 |CI0
785 #KEYPROC 18 !a
786 //ENTAGAIN
787 !A [] $287
788 //RETURN
789 !A [] $43 |CI0
790
791 // KEYPROC KEY.PRINT
792 ENTER$.PRINT:
793 // output current page
794 !A [] $202 |VI9
795 #KEYPROC 2 !a
796 //ENTAGAIN and RETURN
797 !A [] $287
798 !A [] $43 |CI0
799#ENDCOMMAND
800
801#REM ENTAGAIN can only be used in a KEY PROCedure. It returns to the
802#REM same window (COMMAND) that called the KEY PROCedure.
803
804#COMMAND ENTAGAIN &.
805 !A [] $287
806#ENDCOMMAND
807
808// only works with recnum tables. Command not used in VDF
809#COMMAND ENTDISPLAY &TVWG#LE . // Display all entries for a file
810 #IF (!0>0)
811 //RELATE !1
812 !A [] $C4 !1.RECNUM // only works with recnum (obsolete)
813 #ENDIF
814 //display from entry section
815 !A [] $283
816#ENDCOMMAND
817
818// This command has Not been changed to support file_number instead of recnum. This is not a VDF command and I
819// cannot imagine how it could be used. However, if someone is using this, they can only use recnum tables. Updating this
820// command would somehow imply that this command is supported in vdf -- it's not.
821#COMMAND ENTER CVWSRL#E
822 // INDICATE CONTINUE TRUE
823 #REPLACE CONTINUE |!C
824 !A [] $4028 |CI0 |CI0 CONTINUE~
825 // INDICATE ENT$QUERY FALSE
826 #REPLACE ENT$QUERY |9
827 !A [] $4028 |CI0 |CI0 |9
828 #IF !0>0 // ENT$QUERY tells us if
829 #SET X$ !1.RECNUM // we are in QUERY(SUPERFIND) mode
830 #ELSE
831 #SET X$ 0
832 #ENDIF
833 //MOVEINT |CI!x TO |VI8 // set ENTMFILE (ENTER's main file variable)
834 !A [] $82 |CI!x |VI8 // to main file for ENTSFIND
835 ENT$LP: // start of enter loop
836 // GOSUB ENTRYSEC // do ENTRY section
837 !A [] $042 |CL0
838 #FREF ENTRYSEC !a
839 //[KEY.ESCAPE] GOTO END_ENTER // dropped thru
840 !A [|103] $041 |CL0
841 #FREF END_ENTER !a
842 // INDICATE ERR FALSE // set error false
843 !A [] $4028 |CI0 |CI0 |127
844 // temp disable ON ERROR
845 !A [] $82 |VI31 |VI32
846 !A [] $82 |CI0 |VI31
847 // REREAD command
848 !A [] $0C9
849 //[ENT$QUERY] GOSUB ENTER.EDIT // user procedure
850 !A [|9] $042 |CL0
851 #FREF ENTER.EDIT !a
852 //[NOT ERR] ENTUPDATE // update files from ENTRY
853 !A [~|127] $280 |CI0
854 //[NOT ERR] GOSUB ENTER.SAVE // user procedure
855 !A [~|127] $042 |CL0
856 #FREF ENTER.SAVE !a
857 [NOT ERR] MULTIBACK$ SAVE !1 !2 !3 !4 !5 !6 !7 !8 !9 // save
858 // UNLOCK command
859 !A [] $0C8
860 //[NOT ERR] GOSUB ENT$CLEAR // clear screen
861 !A [~ |127] $042 |CL0
862 #FREF ENT$CLEAR !a
863 // RE ENABLE ON ERROR
864 !A [] $82 |VI32 |VI31
865 //[CONTINUE] GOTO ENT$LP // loop
866 !A [CONTINUE] $041 ENT$LP
867 // GOTO END_ENTER // end if NOT CONTINUE
868 !A [] $041 |CL0
869 #FREF END_ENTER !a
870 // this clears the screen and all data files
871 ENT$CLEAR: MULTIBACK$ CLEAR !1 !2 !3 !4 !5 !6 !7 !8 !9
872 // INDICATE ENT$QUERY FALSE
873 !A [] $4028 |CI0 |CI0 |9
874 // ENTCLEAR - clear ENTRY section
875 !A [] $284
876 // RETURN
877 !A [] $043 |CI0
878 //<<<<<<< STANDARD KEY PROCEDURES FOR ENTER >>>>>>>>>>
879 //KEYPROC KEY.SAVE
880 ENTER$.SAVE:
881 !A [] $285 //ENTSKIP (skip rest of entries)
882 #KEYPROC 9 !a
883 // RETURN
884 !A [] $043 |CI0
885 //KEYPROC KEY.DELETE
886 // INDICATE ERR FALSE //default
887 ENTER$.DELETE:
888 !A [] $4028 |CI0 |CI0 |127
889 #KEYPROC 10 !a
890 // DISABLE ON ERROR
891 !A [] $82 |VI31 |VI32
892 !A [] $82 |CI0 |VI31
893 // REREAD
894 !A [] $C9
895 //[NOT ENT$QUERY] ERROR 71 // check for active record
896 !A [~|9] $47 |CI71
897 //[NOT ERR] GOSUB ENTER.DELETE // user procedure
898 !A [~|127] $042 |CL0
899 #FREF ENTER.DELETE !a
900 //[NOT ERR] GOSUB ENTER.EDIT // user procedure
901 !A [~|127] $042 |CL0
902 #FREF ENTER.EDIT !a
903 //[NOT ERR] DELETE !1 // delete records
904 !A [~|127] $C3 !1.RECNUM
905 [NOT ERR] MULTIBACK$ SAVE !2 !3 !4 !5 !6 !7 !8 !9 // related
906 // UNLOCK
907 !A [] $C8
908 //[NOT ERR] GOSUB ENT$CLEAR // clear systems
909 !A [~|127] $042 ENT$CLEAR
910 // enable ON ERROR
911 !A [] $82 |VI32 |VI31
912 // RETURN ENTRYSEC
913 !A [] $43
914 #FREF ENTRYSEC !a
915 // will GOSUB here for all find keys //
916 // INDICATE WAS$QUERY GROUP ANY [ENT$QUERY]
917 ENTER$.FIND:
918 #REPLACE WAS$QUERY |!C
919 !A [] $4020 |GB[|9] |GB[0] WAS$QUERY IN$GLANY |3
920 #KEYPROC 8 !a // SUPERFIND
921 #KEYPROC 7 !a // FIND
922 #KEYPROC 15 !a // NEXT
923 #KEYPROC 14 !a // PREVIOUS
924 //[KEY.SFIND] INDICATE ENT$QUERY TRUE
925 !A [|108] $4028 |CI0 |CI0 |9~
926 //[NOT ENT$QUERY] INDICATE ENT$QUERY AS |CI!x EQ |VI15 // query mode?
927 !A [~ |9] $4008 |CI!x |VI15 |9 |2
928 //[KEY.SFIND] ENTSFIND GE
929 !A [|108] $282 |CI3
930 //[KEY.FIND][ENT$QUERY][ENT$PERMISSIVE] ENTFIND GE
931 !A [|107 |9 |10] $281 |CI3
932 //[KEY.FIND][ENT$QUERY][NOT ENT$PERMISSIVE] ENTSFIND GE // yes, SUPERFIND
933 !A [|107 |9 ~ |10] $282 |CI3
934 //[KEY.FIND][NOT ENT$QUERY] ENTFIND GE // no, FIND
935 !A [|107 ~ |9] $281 |CI3
936 //[KEY.NEXT][ENT$QUERY] ENTSFIND GT // yes, SUPERFIND
937 !A [|115 |9] $282 |CI4
938 //[KEY.NEXT][NOT ENT$QUERY] ENTFIND GT // no, FIND
939 !A [|115 ~ |9] $281 |CI4
940 //[KEY.PREVIOUS][ENT$QUERY] ENTSFIND LT // yes, SUPERFIND
941 !A [|114 |9] $282 |CI0
942 //[KEY.PREVIOUS][NOT ENT$QUERY] ENTFIND LT // no, FIND
943 !A [|114 ~ |9] $281 |CI0
944 [FINDERR] INDCT$GROUP ENT$QUERY GROUP ANY [WAS$QUERY]
945 //!A [FOUND] $283 // display records
946 !A [FOUND] $042 ENTER$DISPLAY
947 // ENTAGAIN // same window
948 !A [] $287
949 // RETURN
950 !A [] $43 |CI0
951 ////// define ENTER's KEY PROCedures ////////////
952 // KEYPROC BACKFIELD
953 // BACKFIELD
954 ENTER$.FIELD:
955 !A [] $288
956 #KEYPROC 16 !a
957 #KEYPROC 6 !a
958 ENTXRET:// RETURN
959 !A [] $43 |CL0
960 // KEYPROC CLEARSCREEN
961 ENTER$.CLEAR:
962 // INDICATE ERR FALSE
963 !A [] $4028 |CI0 |CI0 |127
964 #KEYPROC 13 !a
965 // GOSUB ENTER.CLEAR
966 !A [] $042 |CL0
967 #FREF ENTER.CLEAR !a
968 //[NOT ERR] GOSUB ENT$CLEAR
969 !A [~ |127] $042 ENT$CLEAR
970 // RETURN ENTRYSEC
971 !A [] $043
972 #FREF ENTRYSEC !a
973 // KEYPROC ESCAPE key
974 ENTER$.ESCAPE:
975 // INDICATE ERR FALSE
976 !A [] $4028 |CI0 |CI0 |127
977 #KEYPROC 3 !a
978 // GOSUB ENTER.EXIT
979 !A [] $42 |CL0
980 #FREF ENTER.EXIT !a
981 //[NOT ERR] RETURN ENTXRET
982 !A [~ |127] $43 ENTXRET
983 // RETURN
984 !A [] $43 |CI0
985 //KEYPROC KEY.HELP
986 //HELP
987 ENTER$.HELP:
988 !A [] $1C5 |CI0
989 #KEYPROC 18 !a
990 //ENTAGAIN
991 !A [] $287
992 //RETURN
993 !A [] $43 |CI0
994 //KEYPROC KEY.PRINT
995 //output current page
996 ENTER$.PRINT:
997 !A [] $202 |VI9
998 #KEYPROC 2 !a
999 //ENTAGAIN and RETURN
1000 !A [] $287
1001 !A [] $43 |CI0
1002
1003 ENTRYSEC:// ENTERMODE // start entry section
1004 !A [] $82 |CI!a |VI14
1005 !A [] $286
1006#ENDCOMMAND
1007
1008#COMMAND ENTEREND // end of ENTER
1009 MAKEDEF$ ENTER.SAVE ENTER.EDIT ENTER.DELETE ENTER.CLEAR ENTER.EXIT
1010 //RETURN
1011 !A [] $43 |CI0
1012 #IFDEF ENTER.DISPLAY
1013 #ELSE
1014 ENTER.DISPLAY:
1015 ENTDISPLAY
1016 !A [] $43 |CI0
1017 #ENDIF
1018 END_ENTER:
1019 // CLEARSCREEN
1020 !A [] $144
1021#ENDCOMMAND
1022
1023#COMMAND ENTERGROUP . // independent entry section
1024 #IFDEF ENT$DISP
1025 #ELSE
1026 //INTEGER ENT$START
1027 INTEGER ENT$END
1028 //#$ GOTO ENTK$END
1029 #$ !A [] $41 |CL0
1030 #FREF ENTK$END !a
1031 #$ ENT$KEY
1032 #SET X$ 0
1033 ENTK$END:
1034 #ENDIF
1035
1036 ENTRYSEC!X:// ENTERMODE // start entry section
1037 !A [] $82 |CI!a |VI14
1038 !A [] $286
1039 // INDICATE ENT$QUERY FALSE
1040 !A [] $4028 |CI0 |CI0 |9
1041#ENDCOMMAND
1042
1043#REM ENTERMODE defines the top of the ENTRY section.
1044
1045#COMMAND ENTERMODE &.
1046 //set start of ENTRY section
1047 !A [] $082 |CI!a |VI14
1048 //clear SAVE key
1049 !A [] $286
1050#ENDCOMMAND
1051
1052#REM ENTFIND FINDs a record based on the file/field of the last executed
1053#REM ENTRY command, and displays the results on a FIND. THE FIND mode
1054#REM is the only argument.
1055#REM ENTFIND also maintains the ENT$QUERY indicator.
1056
1057#COMMAND ENTFIND &"$0""$1""$2""$3""$4""$5"
1058 !A [] $281 |CI!1
1059#ENDCOMMAND
1060
1061#COMMAND ENTRY RWV#LUG UVC#LF UFVW#BC
1062 #IF !0=1
1063 AUTO3$ ENTRY !1 PAGE!f
1064 #ELSE
1065 #IFTYPE !2 "O"
1066 AUTO3$ ENTRY !1 PAGE!f !2
1067 #ELSE
1068 #CHECK !2 _RVCLE
1069 #IFCLASS !1 "E"
1070 !A [] $8000 !1 !2 {$C002,$C003 !3
1071 #ELSE
1072 !A [] $8000 !1 !2 !3
1073 #ENDIF
1074 #ENDIF
1075 #ENDIF
1076#ENDCOMMAND
1077
1078#REM ENTSFIND (SUPERFIND) FINDs a record in the main file, based on the
1079#REM file/field of the last ENTRY command, and displays the results.
1080#REM This depends on the main file number being in SYSINT 8 (|VI8).
1081
1082#COMMAND ENTSFIND &"$0""$1""$2""$3""$4""$5" .
1083 !A [] $282 |CI!1
1084#ENDCOMMAND
1085
1086#REM ENTUPDATE moves all changed windows from the
1087#REM window buffer to the record buffer
1088
1089// only works with recnum tables. Command not used in VDF
1090#COMMAND ENTUPDATE &T .
1091 #IF !0>0
1092 !A [] $280 !1.RECNUM // only works with recnum tables (obsolete command)
1093 #ELSE
1094 !A [] $280 |CI0
1095 #ENDIF
1096#ENDCOMMAND
1097
1098#COMMAND ERASEFILE &R#LGU .
1099 !A [] $2C1 !1
1100#ENDCOMMAND
1101
1102#COMMAND ERROR &#L%RGU #LUG .
1103 !A [] $047 !1 !2
1104#ENDCOMMAND
1105
1106#COMMAND ERROR_REPORT SU#LGO .
1107 #IF !0>0
1108 !A [] $04C !1
1109 #ELSE
1110 !A [] $04C |CI0
1111 #ENDIF
1112#ENDCOMMAND
1113
1114#COMMAND FIELD_DEF _E U#LG "TO" #LGUCE #LGRUEC .
1115 #IFDEF !1
1116 !A [] $82 !1 FILENUMBER
1117 #ELSE
1118 #CHECK !1.FILE_NUMBER _U
1119 #SET Q$ !1.FILE_NUMBER
1120 !A [] $82 |CI!q FILENUMBER
1121 #ENDIF
1122 !A [] $82 !2 FIELDNUMBER
1123 !A [] $345 !4 !5
1124#ENDCOMMAND
1125
1126#COMMAND FILELIST &R#%LG "TO""" #LUGCE #LUCGE .
1127 #IFSAME !1 NEXT
1128 !A [] $301 !3 !4
1129 #ELSE
1130 #IFSAME !1 PATHNAME
1131 !A [] $302 !3 !4
1132 #ELSE
1133 #CHECK !1 _U
1134 !A [] $82 !1 FILENUMBER
1135 !A [] $300 !3 !4
1136 #ENDIF
1137 #ENDIF
1138#ENDCOMMAND
1139
1140#REM Put back into FILELIST. The file number must be in "FILENUMBER"
1141#REM Three values are: ROOT NAME, DISPLAY NAME, LOGICAL NAME.
1142
1143#COMMAND FILELIST$PUT &#LRU #LRU #LU
1144 #IF !0>2
1145 !A [] $309 !3
1146 #ENDIF
1147 !A [] $30A !1 !2
1148#ENDCOMMAND
1149
1150#COMMAND FILE$MODE$HELP R "READ_ONLY""SINGLE_USER""ALIAS""MASTER_ALIAS""DEFAULT" .
1151// #CHECK !1.RECNUM _CVWLR#GU
1152 #IFSAME !2 READ_ONLY
1153 SET_ATTRIBUTE DF_FILE_ALIAS OF FILENUMBER TO DF_FILE_ALIAS_DEFAULT
1154 !A [] $0CB INDIRECT_FILE.RECNUM |CI91
1155 #ELSE
1156 #IFSAME !2 SINGLE_USER
1157 SET_ATTRIBUTE DF_FILE_ALIAS OF FILENUMBER TO DF_FILE_ALIAS_DEFAULT
1158 !A [] $0CB INDIRECT_FILE.RECNUM |CI7
1159 #ELSE
1160 #IFSAME !2 DEFAULT
1161 !A [] $0CB INDIRECT_FILE.RECNUM |CI0
1162 SET_ATTRIBUTE DF_FILE_ALIAS OF FILENUMBER TO DF_FILE_ALIAS_DEFAULT
1163 #ELSE
1164 #IFSAME !2 ALIAS
1165 !A [] $0CB INDIRECT_FILE.RECNUM |CI130
1166 SET_ATTRIBUTE DF_FILE_ALIAS OF FILENUMBER TO DF_FILE_IS_ALIAS
1167 #ELSE
1168 #IFSAME !2 MASTER_ALIAS
1169 !A [] $0CB INDIRECT_FILE.RECNUM |CI128
1170 SET_ATTRIBUTE DF_FILE_ALIAS OF FILENUMBER TO DF_FILE_IS_MASTER
1171 #ENDIF
1172 #ENDIF
1173 #ENDIF
1174 #ENDIF
1175 #ENDIF
1176#ENDCOMMAND
1177
1178#COMMAND FILE_MODE
1179 //#IFSAME !1 |FS0,0& |FN0,0& |FD0,0&
1180 // This supports both Indirect_file and Indirect_file.Recnum -JJT
1181 #IFSAME !1.FILE_NUMBER |FS0,0& |FN0,0& |FD0,0& |FS0,0&.RECNUM
1182 #ELSE
1183 #SET Q$ !1.FILE_NUMBER
1184 !A [] $82 |CI!q FILENUMBER
1185 #ENDIF
1186 FILE$MODE$HELP !1 !2 !3 !4 !5 !6 !7 !8 !9
1187#ENDCOMMAND
1188
1189#REM FILE$MODE <FILE> <MODE NUMBER>
1190#REM MODE VALUES (VALUES ARE ADDITIVE)
1191#REM 1 NO AUTOMATIC REREAD OF RECORD BUFFERS.
1192#REM 2 NO LOCKS (LOCK OR REREAD)
1193#REM 4 NO RE-READ OF BLOCK ZERO OF DATA FILE OR INDEXES
1194#REM 8 NO EDITS OF ACTIVE RECORDS (ERROR 66)
1195#REM 16 NO DELETES OF RECORDS (ERROR 63)
1196#REM 32 NO FINDS (ERROR 64)
1197#REM 64 NO CREATES OF NEW RECORDS. (ERROR 65)
1198#REM 128 ALWAYS RE_READ BLOCK 0
1199#REM Warning; Improper combinations of the above could disable
1200#REM multiuser checking and destroy the data base.
1201#REM 8 Thru 64 are non destructive and can be used in applications.
1202#REM FOR EXPERTS ONLY!
1203
1204// see Old_open command for notes on this removal
1205//#COMMAND FILE$MODE RT #LGSU .
1206// #CHECK !1.RECNUM _RULG
1207// !A [] $0CB !1.RECNUM !2
1208//#ENDCOMMAND
1209
1210#COMMAND FILE_SIZE R#LGSD "TO" R#LGE #LUGE #LGUE .
1211 #IFDEF !1 // SET FILE SIZE
1212 #CHECK !3.FILE_NUMBER _RU
1213 #SET Q$ !3.FILE_NUMBER
1214 !A [] $343 |CI!q !1
1215 #ELSE
1216 #CHECK !1.FILE_NUMBER _U
1217 #SET Q$ !1.FILE_NUMBER
1218 !A [] $82 |CI!q FILENUMBER
1219 !A [] $341 !3 !4
1220 !A [] $82 STRMARK !5
1221 #ENDIF
1222#ENDCOMMAND
1223
1224#COMMAND FIND &"$0""$1""$2""$3""$4""$5" R "BY""" % .
1225 #IFCLASS !2 "F"
1226 #CHECK !2 _U#LGWV
1227 #CHECK !3 .
1228 !A [] $0C0 !2 |CI!1
1229 #ELSE
1230 #CHECK !2.FILE_NUMBER _U#LGWV
1231 #CHECK !4 _RUL#GVFW
1232 #SET Q$ !2.FILE_NUMBER
1233 #SET Y$ !4
1234 !A [] $0C6 |FS!q.!y |CI!1
1235 #ENDIF
1236#ENDCOMMAND
1237
1238#COMMAND FIND$PAGE "AT""COLORS""" #LUG U#LG .
1239 #IF !0>0
1240 #IFSAME !1 AT
1241 !A [] $1C8 !2 !3
1242 #ELSE
1243 #IFSAME !1 COLORS
1244 !A [] $1C9 !2 !3
1245 #ENDIF
1246 #ENDIF
1247 #ENDIF
1248#ENDCOMMAND
1249
1250#REM FLEX$INIT - STANDARD REPLACES
1251#REM These are the standard symbols that are required for the compiler
1252#REM This procedure will be automatically executed
1253#REM when the compiler starts
1254
1255#COMMAND FLEX$INIT &.
1256 #REPLACE CALC CALCULATE
1257 #REPLACE LT $0 // internal value for the find/indicate modes.
1258 #REPLACE LE $1
1259 #REPLACE EQ $2
1260 #REPLACE GE $3
1261 #REPLACE GT $4
1262 #REPLACE NE $5
1263// #REPLACE TRUE $1
1264// #REPLACE FALSE $0
1265 #REPLACE TRUE |CZ1 // changed to bit constants so we can use true or false in
1266 #REPLACE FALSE |CZ0 // any command (e.g. move true to bStat). Also required change in indicate
1267 #REPLACE NOT ~
1268 #SET C$ 11
1269 #REPLACE LASTIF |!C
1270 #REPLACE ENT$PERMISSIVE |10
1271 #REPLACE IN$0 $4000
1272 #REPLACE IN$1 $4004
1273 #REPLACE IN$2 $4008
1274 #REPLACE IN$3 $400C
1275 #REPLACE IN$4 $4010
1276 #REPLACE IN$5 $4014
1277 #REPLACE IN$GLANY |0
1278 #REPLACE IN$GLALL |4
1279 #REPLACE IN$GRANY |0
1280 #REPLACE IN$GRALL |2
1281 #REPLACE IN$GMOR |0
1282 #REPLACE IN$GMAND |1
1283 #REPLACE ERR |127
1284 #REPLACE ERRLINE |VI6
1285 #REPLACE LAST_CRIT_ERR |VI102
1286 #REPLACE EXT_CRIT_ERR |VI103
1287 #REPLACE CONSTRAIN_TESTS_COUNT |VI106
1288 #REPLACE CONSTRAIN_FOUND_COUNT |VI107
1289 #REPLACE FINDERR |126
1290 #REPLACE SEQEOF |125
1291 #REPLACE SEQEOL |121
1292 #REPLACE MULTIUSER |120
1293 #REPLACE FIELDINDEX |VI1
1294 #REPLACE WINDOWINDEX |VI2
1295 #REPLACE LASTERR |VI5
1296 #REPLACE KEYPRESS |123
1297 #REPLACE TERMCHAR |VI3
1298 #REPLACE FLEXKEY |VI4
1299 #REPLACE SCREENEND |VI17
1300 #REPLACE MEMAVAIL |VI18
1301 #REPLACE LASTENTRY |VI19
1302 #REPLACE FLX_REVISION |VI36
1303 #REPLACE ENTER$DISPLAY |VI38
1304 #REPLACE NOKEYCHECK |VI80
1305 #REPLACE CHAIN_DEPTH |VI81
1306 #REPLACE CURSOR_SET |VI82 // THESE ARE USED BY AUTOBACK
1307 #REPLACE CURSOR_RETURN |VI83
1308 #REPLACE MINIMUM_MEMORY |VI86
1309 #REPLACE INDEX_NUMBER |VI90
1310 #REPLACE SCREEN_WIDTH |VI91
1311 #REPLACE KEY.ANY |100
1312 #REPLACE KEY.RETURN |101
1313 #REPLACE KEY.PRINT |102
1314 #REPLACE KEY.ESCAPE |103
1315 #REPLACE KEY.LEFT |104
1316 #REPLACE KEY.RIGHT |105
1317 #REPLACE KEY.FIELD |106
1318 #REPLACE KEY.FIND |107
1319 #REPLACE KEY.SFIND |108
1320 #REPLACE KEY.SAVE |109
1321 #REPLACE KEY.DELETE |110
1322 #REPLACE KEY.CALCULATE |111
1323 #REPLACE KEY.USER |112
1324 #REPLACE KEY.CLEAR |113
1325 #REPLACE KEY.NEXT |115
1326 #REPLACE KEY.PREVIOUS |114
1327 #REPLACE KEY.UP |116
1328 #REPLACE KEY.DOWN |117
1329 #REPLACE KEY.HELP |118
1330 #REPLACE KEY.USER2 |119
1331 #REPLACE NUMPAGE |VI28
1332 #REPLACE NUMWINDOW |VI29
1333 #REPLACE #$
1334 #SET F$ 1
1335 #REPLACE NEXT_MENU |VI127
1336 #REPLACE CURRENT_IMAGE |VI9
1337 #REPLACE CURRENT_WINDOW |VI7
1338 #REPLACE LAST_GOSUB |VI0
1339 #REPLACE FOUND |254
1340 #REPLACE STRMARK |VI12
1341 #REPLACE STRLEN |VI13
1342 // ENTER & REPORT DEF'S
1343 #REPLACE LINECOUNT |VI10
1344 #REPLACE PAGECOUNT |VI11
1345 #REPLACE PAGEEND |VI25
1346 #REPLACE PAGEFEED |VI26
1347 #SET D$ 128 // INTEGERS NOW START HERE.
1348 #SET P$ 0
1349 #REPLACE AUTOFIND $C000
1350 #REPLACE AUTOFIND_GE $C000,$C008
1351 #REPLACE FINDREQ $C001
1352 #REPLACE NOPUT $C002
1353 #REPLACE NOENTER $C003
1354 #REPLACE SKIPFOUND $C004
1355 #REPLACE RETAINALL $C005
1356 #REPLACE RETAIN $C006
1357 #REPLACE FORCEPUT $C007
1358 #REPLACE DISPLAYONLY $C002,$C003
1359 #REPLACE CAPSLOCK $C023
1360 #REPLACE ZERO_SUPPRESS $C024
1361 #REPLACE THOUSANDS $C025
1362 #REPLACE SUPPRESS $C040=''
1363 #REPLACE FLOAT$ $C026
1364 #REPLACE UPPER $C023
1365 #REPLACE SIGNRT $C027
1366 #REPLACE CHECK $C012
1367 #REPLACE RANGE $C013
1368 #REPLACE REQUIRED $C022
1369 #REPLACE AUTORETURN $C028
1370 #REPLACE AUTOBACK $C029
1371 #REPLACE NO_CALC $C02B // Disable Calculate (internal)
1372 #REPLACE MODAL_INSERT $C02A // Change insert style (internal)
1373 #REPLACE AUTOCLEAR $C02D
1374 #REPLACE WP_BACKSP $C02E
1375 #REPLACE PAGEBREAK |124
1376 #REPLACE FILL $C040
1377 #REPLACE POINTS $C080
1378 #REPLACE FILENUMBER |VI15
1379 #REPLACE FIELDNUMBER |VI16
1380 #REPLACE INDEX.1 |CI1 // the indexes are just integers.
1381 #REPLACE INDEX.2 |CI2
1382 #REPLACE INDEX.3 |CI3
1383 #REPLACE INDEX.4 |CI4
1384 #REPLACE INDEX.5 |CI5
1385 #REPLACE INDEX.6 |CI6
1386 #REPLACE INDEX.7 |CI7
1387 #REPLACE INDEX.8 |CI8
1388 #REPLACE INDEX.9 |CI9
1389 #REPLACE INDEX.10 |CI10
1390 #REPLACE INDEX.11 |CI11
1391 #REPLACE INDEX.12 |CI12
1392 #REPLACE INDEX.13 |CI13
1393 #REPLACE INDEX.14 |CI14
1394 #REPLACE INDEX.15 |CI15
1395 #REPLACE INDEX.BATCH |CI10
1396 #REPLACE RECNUM |CI0
1397 #REPLACE EXPORT_FILES 1
1398 #REPLACE EXPORT_ONLY 2
1399 #REPLACE SEQ_EXPORT 4
1400 #REPLACE INDIRECT_FILE.RECNUM |FS0,0&
1401 // note we are defining indirect_file.file_number so one can use indirect_file directly. Note that this
1402 // technique (any use of indirect_file in any form) is not a recommended technique because there are API commands
1403 // to do anything it does. Therefore, we will not create yet another way to use indirect_file.
1404 #REPLACE INDIRECT_FILE.FILE_NUMBER |FS0,0&
1405 #REPLACE DESKTOP |CI2
1406 #REPLACE END_FUNCTION END_PROCEDURE
1407 #REPLACE PROCEDURE_RETURN FUNCTION_RETURN
1408
1409 #REPLACE TOTAL_RESOURCES |VI104
1410
1411 // video related replaces
1412 #REPLACE BW40 0
1413 #REPLACE C40 1
1414 #REPLACE BW80 2
1415 #REPLACE C80 3
1416 #REPLACE MONO 7
1417 #REPLACE EXTENDED_EGAVGA 64
1418 #REPLACE EXTENDED_VGA 128
1419
1420 // API Constants
1421 #REPLACE DFERR_ERROR |CI-1
1422 #REPLACE DF_SUCCESS |CI0
1423 #REPLACE DFFALSE |CI0
1424 #REPLACE DFTRUE |CI1
1425
1426 // DataFlex driver specific constants
1427 #REPLACE FLEX_SET_MAX_SORT_BUFFER |CI1
1428 #REPLACE FLEX_GET_MAX_SORT_BUFFER |CI2
1429 #REPLACE FLEX_REPAIR_FILE |CI3
1430 #REPLACE FLEX_GET_REPAIRS_NEEDED |CI4
1431 #REPLACE FLEX_SET_INDEX_OPT |CI5
1432 #REPLACE FLEX_GET_INDEX_OPT |CI6
1433 #REPLACE FLEX_GET_STRICT_TRANSACTIONS |CI7
1434 #REPLACE FLEX_SET_STRICT_TRANSACTIONS |CI8
1435
1436 // DataFlex specific file damage types
1437 #REPLACE FLEX_HEADER_OK |CI0
1438 #REPLACE FLEX_BLOCK0_BAD |CI1
1439 #REPLACE FLEX_HEADER_BAD |CI2
1440 #REPLACE FLEX_HEADER_INTEGRITY_OFF |CI4
1441 #REPLACE FLEX_HEADER_UNREADABLE |CI8
1442
1443 // Index optimization modes
1444 #REPLACE FLEX_INDEX_OPT_ON |CI1
1445 #REPLACE FLEX_INDEX_OPT_PERMISSIVE |CI2
1446 #REPLACE FLEX_INDEX_OPT_OFF |CI3
1447
1448 // Flex revision codes (for use with DF_FILE_REVISION)
1449 #REPLACE FLEX_REVISION_23 |CS"2.3B"
1450 #REPLACE FLEX_REVISION_30 |CS"3.0"
1451
1452
1453 // Attributes: Runtime
1454 #REPLACE DF_RUNTIME_PROGRESS_FREQUENCY |CI4097
1455
1456 // Attributes: Global
1457 #REPLACE DF_LOCK_DELAY |CI1
1458 #REPLACE DF_LOCK_TIMEOUT |CI2
1459 #REPLACE DF_OPEN_PATH |CI3
1460 #REPLACE DF_DATE_FORMAT |CI4
1461 #REPLACE DF_DATE_SEPARATOR |CI5
1462 #REPLACE DF_DECIMAL_SEPARATOR |CI6
1463 #REPLACE DF_THOUSANDS_SEPARATOR |CI7
1464 #REPLACE DF_ALL_FILES_TOUCHED |CI8
1465 #REPLACE DF_HIGH_DATA_INTEGRITY |CI9
1466 #REPLACE DF_TRAN_COUNT |CI10
1467 #REPLACE DF_TRANSACTION_ABORT |CI11
1468 #REPLACE DF_REREAD_REQUIRED |CI12
1469 #REPLACE DF_FILELIST_NAME |CI13
1470 #REPLACE DF_REPORT_UNSUPPORTED_ATTRIBUTES |CI14
1471 #REPLACE DF_STRICT_ATTRIBUTES |CI15
1472 #REPLACE DF_NUMBER_DRIVERS |CI16
1473 #REPLACE DF_DRIVER_NAME |CI17
1474 #REPLACE DF_DRIVER_NUMBER_SERVERS |CI18
1475 #REPLACE DF_DRIVER_SERVER_NAME |CI19
1476 #REPLACE DF_API_DISABLED |CI20
1477 #REPLACE DF_API_DISABLED_ERROR |CI21
1478 #REPLACE DF_TRANABORT_ONERROR |CI22
1479 #REPLACE DF_OPEN_FILE_COUNT |CI23
1480 #REPLACE DF_DATE_4_STATE |CI24
1481 #REPLACE DF_EPOCH_VALUE |CI25
1482 #REPLACE DF_SYSDATE_4_STATE |CI26
1483 #REPLACE DF_NUMBER_FILES_SUPPORTED |CI27
1484
1485
1486
1487 // Attributes: File
1488 #REPLACE DF_FILE_STATUS |CI101
1489 #REPLACE DF_FILE_MODE |CI102
1490 #REPLACE DF_FILE_MAX_RECORDS |CI103
1491 #REPLACE DF_FILE_RECORDS_USED |CI104
1492 #REPLACE DF_FILE_TYPE |CI105
1493 #REPLACE DF_FILE_MULTIUSER |CI106
1494 #REPLACE DF_FILE_REUSE_DELETED |CI107
1495 #REPLACE DF_FILE_NUMBER |CI108
1496 #REPLACE DF_FILE_COMPRESSION |CI109
1497 #REPLACE DF_FILE_LAST_INDEX_NUMBER |CI110
1498 #REPLACE DF_FILE_NUMBER_FIELDS |CI111
1499 #REPLACE DF_FILE_LOGICAL_NAME |CI112
1500 #REPLACE DF_FILE_ROOT_NAME |CI113
1501 #REPLACE DF_FILE_CHANGED |CI114
1502 #REPLACE DF_FILE_ALIAS |CI115
1503 #REPLACE DF_FILE_TOUCHED |CI116
1504 #REPLACE DF_FILE_TRANSACTION |CI117
1505 #REPLACE DF_FILE_OPENED |CI118
1506 #REPLACE DF_FILE_DISPLAY_NAME |CI119
1507 #REPLACE DF_FILE_PHYSICAL_NAME |CI120
1508 #REPLACE DF_FILE_NEXT_OPENED |CI121
1509 #REPLACE DF_FILE_NEXT_USED |CI122
1510 #REPLACE DF_FILE_NEXT_EMPTY |CI123
1511 #REPLACE DF_FILE_RECORD_LENGTH |CI124
1512 #REPLACE DF_FILE_RESTRUCTURE |CI125
1513 #REPLACE DF_FILE_OPEN_MODE |CI126
1514 #REPLACE DF_FILE_INTEGRITY_CHECK |CI127
1515 #REPLACE DF_FILE_OWNER |CI128
1516 #REPLACE DF_FILE_IS_SYSTEM_FILE |CI129
1517 #REPLACE DF_FILE_LOCK_TYPE |CI130
1518 #REPLACE DF_FILE_COMMITTED |CI131
1519 #REPLACE DF_FILE_DRIVER |CI132
1520 #REPLACE DF_FILE_RECORD_LENGTH_USED |CI133
1521 #REPLACE DF_FILE_HANDLE_TYPE |CI134
1522 #REPLACE DF_FILE_RECORD_IDENTITY |CI135
1523 #REPLACE DF_FILE_LOGIN |CI136
1524 #REPLACE DF_FILE_RECORD_PRIVILEGE |CI137 // PRIVATE, DO NOT USE
1525 #REPLACE DF_FILE_PRIVILEGE |CI138 // PRIVATE, DO NOT USE
1526 #REPLACE DF_FILE_CREATION_SERIAL |CI139 // PRIVATE, DO NOT USE
1527 #REPLACE DF_FILE_REVISION |CI140
1528 #REPLACE DF_FILE_RELATED_COUNT |CI141 // PRIVATE, DO NOT USE
1529 #REPLACE DF_FILE_RELATED_FIELDS |CI142 // PRIVATE, DO NOT USE
1530 #REPLACE DF_FILE_SYSTEM_FILE |CI143
1531 #REPLACE DF_FILE_SYSTEM_FIELD |CI144
1532 #REPLACE DF_FILE_RECORD_REREAD |CI145
1533 #REPLACE DF_FILE_RECNUM_TABLE |CI1401
1534 #REPLACE DF_FILE_PRIMARY_INDEX |CI1402
1535
1536
1537 // Attributes: Fields
1538
1539 #REPLACE DF_FIELD_NUMBER |CI201
1540 #REPLACE DF_FIELD_TYPE |CI202
1541 #REPLACE DF_FIELD_LENGTH |CI203
1542 #REPLACE DF_FIELD_PRECISION |CI204
1543 #REPLACE DF_FIELD_RELATED_FILE |CI205
1544 #REPLACE DF_FIELD_RELATED_FIELD |CI206
1545 #REPLACE DF_FIELD_NAME |CI207
1546 #REPLACE DF_FIELD_INDEX |CI208
1547 #REPLACE DF_FIELD_OFFSET |CI209
1548 #REPLACE DF_FIELD_OLD_NUMBER |CI210
1549 #REPLACE DF_FIELD_OVERLAP |CI211
1550 #REPLACE DF_FIELD_NATIVE_LENGTH |CI212
1551
1552 // Attributes: Index
1553 #REPLACE DF_INDEX_NUMBER_SEGMENTS |CI301
1554 #REPLACE DF_INDEX_NUMBER_BUFFERS |CI302
1555 #REPLACE DF_INDEX_TYPE |CI303
1556 #REPLACE DF_INDEX_LEVELS |CI304
1557 #REPLACE DF_INDEX_KEY_LENGTH |CI305
1558
1559 // Attributes: Index Segments
1560 #REPLACE DF_INDEX_SEGMENT_DIRECTION |CI401
1561 #REPLACE DF_INDEX_SEGMENT_CASE |CI402
1562 #REPLACE DF_INDEX_SEGMENT_FIELD |CI403
1563 // Attributes: Driver
1564 #REPLACE DF_DRIVER_CONFORMANCE |CI1201
1565
1566
1567 // Date types
1568 #REPLACE DF_DATE_USA |CI0
1569 #REPLACE DF_DATE_EUROPEAN |CI1
1570 #REPLACE DF_DATE_MILITARY |CI2
1571
1572 // Callback Types
1573 #REPLACE DF_MESSAGE_TEXT |CI0
1574 #REPLACE DF_MESSAGE_HEADING_1 |CI1
1575 #REPLACE DF_MESSAGE_HEADING_2 |CI2
1576 #REPLACE DF_MESSAGE_HEADING_3 |CI3
1577 #REPLACE DF_MESSAGE_HEADING_4 |CI4
1578 #REPLACE DF_MESSAGE_HEADING_5 |CI5
1579 #REPLACE DF_MESSAGE_WARNING |CI6
1580 #REPLACE DF_MESSAGE_PROGRESS_TITLE |CI7
1581 #REPLACE DF_MESSAGE_PROGRESS_VALUE |CI8
1582
1583 // Aux file types
1584 #REPLACE DF_AUX_FILE_FD |CI0
1585 #REPLACE DF_AUX_FILE_DEF |CI1
1586
1587 // File status values
1588 #REPLACE DF_FILE_INACTIVE |CI0
1589 #REPLACE DF_FILE_ACTIVE |CI1
1590 #REPLACE DF_FILE_ACTIVE_CHANGED |CI2
1591
1592 // File user values
1593 #REPLACE DF_FILE_USER_SINGLE |CI0
1594 #REPLACE DF_FILE_USER_MULTI |CI1
1595
1596 // File deleted values
1597 #REPLACE DF_FILE_DELETED_NOREUSE |CI0
1598 #REPLACE DF_FILE_DELETED_REUSE |CI1
1599
1600 // Compressions types
1601 #REPLACE DF_FILE_COMPRESS_NONE |CI0
1602 #REPLACE DF_FILE_COMPRESS_FAST |CI1
1603 #REPLACE DF_FILE_COMPRESS_STANDARD |CI2
1604 #REPLACE DF_FILE_COMPRESS_CUSTOM |CI3
1605
1606 // File alias
1607 #REPLACE DF_FILE_ALIAS_DEFAULT |CI0
1608 #REPLACE DF_FILE_IS_MASTER |CI1
1609 #REPLACE DF_FILE_IS_ALIAS |CI2
1610
1611 // File handle types
1612 #REPLACE DF_FILE_HANDLE_BAD |CI0
1613 #REPLACE DF_FILE_HANDLE_CLOSED |CI1
1614 #REPLACE DF_FILE_HANDLE_OPENED |CI2
1615 #REPLACE DF_FILE_HANDLE_EXISTING_RESTRUCTURE |CI3
1616 #REPLACE DF_FILE_HANDLE_NEW_RESTRUCTURE |CI4
1617
1618 // File transaction types
1619 #REPLACE DF_FILE_TRANSACTION_NONE |CI0
1620 #REPLACE DF_FILE_TRANSACTION_CLIENT_ATOMIC |CI1
1621 #REPLACE DF_FILE_TRANSACTION_SERVER_ATOMIC |CI2
1622 #REPLACE DF_FILE_TRANSACTION_SERVER_LOGGED |CI3
1623
1624 // Types of restructure required
1625 #REPLACE DF_NO_RESTRUCTURE |CI0
1626 #REPLACE DF_RESTRUCTURE_FILE |CI1
1627 #REPLACE DF_RESTRUCTURE_INDEX |CI2
1628 #REPLACE DF_RESTRUCTURE_BOTH |CI3
1629
1630 // File touched attribute
1631 #REPLACE DF_FILE_NOT_TOUCHED |CI48
1632 #REPLACE DF_FILE_TOUCHED_INACTIVE |CI49
1633 #REPLACE DF_FILE_TOUCHED_ACTIVE |CI50
1634
1635 #REPLACE DF_FILEMODE_ORIGINAL -1 // only valid for smart_filemode in data sets
1636 #REPLACE DF_FILEMODE_DEFAULT 0
1637 #REPLACE DF_FILEMODE_NO_REREAD 1
1638 #REPLACE DF_FILEMODE_NO_LOCKS 2
1639 #REPLACE DF_FILEMODE_NO_EDITS 8
1640 #REPLACE DF_FILEMODE_NO_DELETES 16
1641 #REPLACE DF_FILEMODE_NO_FINDS 32
1642 #REPLACE DF_FILEMODE_NO_CREATES 64
1643 #REPLACE DF_FILEMODE_READONLY 91
1644 #REPLACE DF_FILEMODE_SINGLE_USER 3
1645
1646 // File closing type
1647 #REPLACE DF_PERMANENT 0
1648 #REPLACE DF_TEMPORARY 1
1649
1650 // File locking types
1651 #REPLACE DF_LOCK_TYPE_NONE |CI0
1652 #REPLACE DF_LOCK_TYPE_FILE |CI1
1653 #REPLACE DF_LOCK_TYPE_RECORD |CI2
1654
1655 // Modes for openning a file.
1656 #REPLACE DF_SHARE |CI0
1657 #REPLACE DF_EXCLUSIVE |CI1
1658
1659 // Index types
1660 #REPLACE DF_INDEX_TYPE_ONLINE |CI0
1661 #REPLACE DF_INDEX_TYPE_BATCH |CI1
1662
1663 // Segment case used?
1664 #REPLACE DF_CASE_USED |CI0
1665 #REPLACE DF_CASE_IGNORED |CI1
1666
1667 // Segment direction
1668 #REPLACE DF_ASCENDING |CI0
1669 #REPLACE DF_DESCENDING |CI1
1670
1671 // Field Types
1672 #REPLACE DF_ASCII |CI0
1673 #REPLACE DF_BCD |CI1
1674 #REPLACE DF_DATE |CI2
1675 #REPLACE DF_OVERLAP |CI3
1676 #REPLACE DF_TEXT |CI5
1677 #REPLACE DF_BINARY |CI6
1678 #REPLACE DF_DATETIME |CI7
1679
1680 // dfStructureEnd Option bits
1681 #REPLACE DF_STRUCTEND_OPT_NONE |CI0
1682 #REPLACE DF_STRUCTEND_OPT_FORCE |CI1
1683 #REPLACE DF_STRUCTEND_OPT_RECOMPRESS |CI2
1684 #REPLACE DF_STRUCTEND_OPT_IN_PLACE |CI4
1685
1686 #REPLACE DF_SORT_OPTION_NONE |CI0
1687 #REPLACE DF_SORT_OPTION_NO_DATA_CHECK |CI8
1688 #REPLACE DF_SORT_OPTION_BAD_DATA_FIXUP |CI16
1689 #REPLACE DF_SORT_OPTION_BAD_DATA_FILE |CI32
1690 #REPLACE DF_SORT_OPTION_BAD_DATA_ABORT |CI64
1691 #REPLACE DF_SORT_OPTION_DUP_DATA_FILE |CI128
1692 #REPLACE DF_SORT_OPTION_DUP_DATA_ABORT |CI256
1693
1694 // Field fill types
1695 #REPLACE DF_HIGH |CI0
1696 #REPLACE DF_LOW |CI1
1697
1698 // Resource Types
1699 // DAC reservers the negative values, you may use the positive values,
1700 // 0 means uninitialized or error.
1701 #REPLACE DF_RESOURCE_TYPE_ERROR |CI0 // if resource is invalid
1702 // or uninitialized.
1703 #REPLACE DF_RESOURCE_TYPE_BINARY |CI-1 // use this with include_resource for
1704 // bitmaps and other binary files.
1705 #REPLACE DF_RESOURCE_TYPE_LINE |CI-2 // default type for resources.
1706
1707 // These symbols are passed to the SYSCONF function to determine
1708 // which OS specific item is returned.
1709 #REPLACE SYSCONF_TIMER_RESOLUTION |CI0
1710 #REPLACE SYSCONF_DIR_SEPARATOR |CI1
1711 #REPLACE SYSCONF_OS_SHORT_NAME |CI2
1712 #REPLACE SYSCONF_OS_MAJOR_REV |CI3
1713 #REPLACE SYSCONF_OS_MINOR_REV |CI4
1714 #REPLACE SYSCONF_OS_NAME |CI5
1715 #REPLACE SYSCONF_MACHINE_NAME |CI6
1716 #REPLACE SYSCONF_FILE_MASK |CI7
1717 #REPLACE SYSCONF_DATAFLEX_REV |CI8
1718 #REPLACE SYSCONF_SYSTEM_NAME |CI9
1719 #REPLACE SYSCONF_PATH_SEPARATOR |CI10
1720 #REPLACE SYSCONF_RUNTIME_NAME |CI11
1721 #REPLACE SYSCONF_UTC_TIME_OFFSET |CI12
1722
1723 // Subsystem numbers
1724 #REPLACE DF_CMD_SUBSYSTEM_REV |CI5
1725 #REPLACE DF_UI_SUBSYSTEM_REV |CI1
1726 #REPLACE DF_DS_SUBSYSTEM_REV |CI1
1727
1728 #REPLACE DF_CMD_SUBSYSTEM |CI0
1729 #REPLACE DF_UI_SUBSYSTEM |CI1
1730 #REPLACE DF_DS_SUBSYSTEM |CI2
1731
1732 #REPLACE DF_NUMBER_SUBSYSTEMS |CI3
1733
1734 #REPLACE ENUM_LIST ENUMERATION_LIST
1735 #REPLACE END_ENUM_LIST END_ENUMERATION_LIST
1736
1737 //
1738 // Date Constants
1739 //
1740 #REPLACE DATE4_STATE |CI0
1741 #REPLACE EPOCH_VALUE |CI1
1742 #REPLACE SYSDATE4_STATE |CI2
1743
1744 // These are values to be used by the raw file commands
1745 // representing different file permission bits
1746 #REPLACE DF_FLEX_UID_EXECUTE |CI1024 //04000
1747 #REPLACE DF_FLEX_GID_EXECUTE |CI512 //02000
1748 #REPLACE DF_FLEX_OWNER_READ |CI256 //00400
1749 #REPLACE DF_FLEX_OWNER_WRITE |CI128 //00200
1750 #REPLACE DF_FLEX_OWNER_EXECUTE |CI64 //00100
1751 #REPLACE DF_FLEX_GROUP_READ |CI32 //00040
1752 #REPLACE DF_FLEX_GROUP_WRITE |CI16 //00020
1753 #REPLACE DF_FLEX_GROUP_EXECUTE |CI8 //00010
1754 #REPLACE DF_FLEX_WORLD_READ |CI4 //00004
1755 #REPLACE DF_FLEX_WORLD_WRITE |CI2 //00002
1756 #REPLACE DF_FLEX_WORLD_EXECUTE |CI1 //00001
1757 #REPLACE DF_FLEX_ALL_RIGHTS |CI20471
1758
1759 // Error Codes used by the Compiler
1760 #REPLACE DFERR_COMP_BAD_IMAGE_NAME |CI4293
1761 #REPLACE DFERR_COMP_CONSTANT_EXPECTED |CI4299
1762 #REPLACE DFERR_COMP_ILLEGAL_RETURN_TYPE |CI4310
1763 #REPLACE DFERR_COMP_IMAGE_NOT_FOUND |CI4311
1764 #REPLACE DFERR_COMP_INVALID_DATATYPE |CI4315
1765 #REPLACE DFERR_COMP_INVALID_TYPE |CI4317
1766 #REPLACE DFERR_COMP_MISSING_ARGUMENT |CI4320
1767 #REPLACE DFERR_COMP_MISSING_END_OBJECT |CI4323
1768 #REPLACE DFERR_COMP_UNDEFINED_SYMBOL_IN_ARGUMENT |CI4328
1769 #REPLACE DFERR_COMP_SYMBOL_ALREADY_DEFINED |CI4332
1770 #REPLACE DFERR_COMP_TOO_MANY_MESSAGES |CI4339
1771 #REPLACE DFERR_COMP_UNRESOVLED_CONTROL_BLOCK |CI4348
1772
1773 #REPLACE DFERR_COMP_ILLEGAL_OBJECT_DEFINTION |CI4388 // object name used is not valid
1774 #REPLACE DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION |CI4389 // property name cannot be used
1775 #REPLACE DFERR_COMP_ILLEGAL_METHOD_DEFINTION |CI4390 // method name cannot be used
1776 #REPLACE DFERR_COMP_ILLEGAL_CODE_PLACEMENT |CI4391 // Location of code, nesting, is wrong
1777 #REPLACE DFERR_COMP_INVALID_METHOD_SYNTAX |CI4392 // syntax is incorrect for method definition
1778 #REPLACE DFERR_COMP_INVALID_MESSAGE_SYNTAX |CI4393 // sysntax is incorrect for sending message
1779 #REPLACE DFERR_COMP_INVALID_OBJECT_REFERENCE |CI4394 // object named in message is invalid
1780 #REPLACE DFERR_COMP_OBSOLETE_UNSUPPORTED_FEATURE |CI4395 // Obsolete - was 101 (Moveused by fmac)
1781 #REPLACE DFERR_COMP_INVALID_ARGUMENT |CI4396 // Agument in line is incorrect
1782 #REPLACE DFERR_COMP_ILLEGAL_EXTERNAL_FUNCTION_DEFINITION |CI4397 // name cannot be used
1783 //
1784 #REPLACE DFERR_COMP_MISSING_DEBUG_INFORMATION |CI4500 // debug information is not provided
1785 #REPLACE DFERR_COMP_INCOMPATIBLE_DEBUG_INFORMATION |CI4501 // debug inforamtion is is not correct
1786 #REPLACE DFERR_COMP_RECURSIVE_STRUCT_DECLARATION |CI4513 // recursive struct definition
1787 #REPLACE DFERR_COMP_AMBIGUOUS_SYNTAX. |CI4514 // either Left of "'[' is not array, use '(' if indicator" or "Left of '.' is not of type struct or table"
1788
1789 // constants used by rich edit class
1790 #REPLACE FR_WHOLEWORD 2
1791 #REPLACE FR_MATCHCASE 4
1792
1793 #REPLACE SCF_ALL 4
1794 #REPLACE SCF_SELECTION 1
1795 #REPLACE SCF_WORD 2
1796 #REPLACE SCF_DEFAULT 0
1797
1798 #REPLACE ERR_RE_ATTR_INCONSISTENT_THROUGH_SELECTION |CI40001
1799 #REPLACE ERR_RE_SUCCESS |CI0
1800 #REPLACE ERR_RE_CANNOT_SETTEXT |CI40002
1801 #REPLACE ERR_RE_CONVERSION_CODEPAGE |CI40003
1802 #REPLACE ERR_RE_FNAME_TOO_LONG |CI40004
1803 #REPLACE ERR_RE_CANNOT_OPEN_FILE |CI40005
1804
1805
1806
1807
1808 // Error handler may return source information as "Source = module.function". This is the
1809 // text that returned from the runtime that contains this information.
1810 #REPLACE C_ErrorContextSourceText |CS"Source ="
1811
1812 #SET N$ 2 // save 0,1 stacks for IF/ELSE
1813 #SET ZR$ 0 // for compile-time-assigned resource_ids
1814 #SET ZS$ 0 // for enumerated lists
1815 #SET ZT$ 0 // " " "
1816 #XPUSH !n $INIT
1817
1818// Note that for this build of FMAC the subsystems are the same for character mode
1819// and windows.
1820
1821 #CHKSUB 0 6 // Verify the General Flex subsystem. Version 0 of command system. Revision 4.
1822 // This was changed from 0 3 to 0 4 to force recompilation of programs from 3.1 to 3.2.
1823 // And changed from 0 5 to force recompilation when we changed the size of the argument and command line.
1824 // And changed from 0 6 to force recompilation on 7.1.13 build.
1825#ENDCOMMAND
1826
1827#COMMAND FOR &ECFWGSNR#LU "FROM" %UGLR# "TO""" %UGL# .
1828 // we do iftype checks because the command checking does not understand A and K
1829 #IFTYPE !1 "K"
1830 #ERROR 4345 "!1, Struct not allowed"
1831 #ELSE
1832 #IFTYPE !1 "A"
1833 #ERROR 4345 "!1, Array not allowed"
1834 #ELSE
1835 #SET N$ !N
1836 #PUSH !R
1837 #XPUSH !n $INIT
1838 //MOVEINT !3 TO !1
1839 !A [] $082 !3 !1
1840 #IF (!0>3)
1841 // IF !1 LE !5 GOTO FOR$!r
1842 !A [] $4004 !1 !5 |11 |2
1843 !A [|11] $041 |CL0
1844 #FREF FOR$!r !a
1845 #ENDIF
1846 #$ !A 0 0 0 $041 |CL0
1847 #FREF END$!r !a
1848 #$ BEGIN$!r:
1849 #$ WHILE$!r:
1850 #IF !0=3
1851 #$ !A [] $083 !1
1852 #ELSE
1853 #$ !A [] $083 !1 !5
1854 #$ !A [|122] $041 |CL0
1855 #FREF END$!r !a
1856 #ENDIF
1857 FOR$!r:
1858 #ENDIF
1859 #ENDIF
1860#ENDCOMMAND
1861
1862// FORMAT window {}
1863// FORMAT window THRU window {}
1864
1865#COMMAND FORMAT RUVCFL#G
1866 #IF !0>2
1867 FORMAT$RANGE !1 !2 !3 !4 !5
1868 #ELSE
1869 #CHECK !2 _RVCFWL#BE
1870 #CHECK !3 .
1871 #FORMAT !1 !2
1872 #ENDIF
1873#ENDCOMMAND
1874
1875#COMMAND FORMAT$RANGE ERUVCFL#G "THRU""THROUGH" ERUVCFL#G RVCFWL#B .
1876 #FORMAT !1 !4
1877 #IF (!1<!3)
1878 #SET Q$ !1
1879 FORMAT$RANGE |WS!Q THRU !3 !4
1880 #ENDIF
1881#ENDCOMMAND
1882
1883#COMMAND FORMFEED &. // just like PAGECHECK 500
1884 !A [] $203 |CI500 |CI0
1885#ENDCOMMAND
1886
1887#COMMAND GET_ARGUMENT_SIZE "TO" _RUDCE#LGB .
1888 !A [] $24F !2
1889#ENDCOMMAND
1890
1891//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
1892//
1893// Command:
1894// GET_CHANNEL_SIZE channelNumber TO integerVariable
1895//
1896// Descrtiption:
1897// A command to retrieve the "size" of a sequential device (opened with
1898// direct_input). Warning, devices that do not support the concept of
1899// "size" (such as LST:) report an error.
1900//
1901// Parmeters:
1902// channelNumber
1903// Number of a valid (open) channel.
1904// integerVariable
1905// Variable to return the channel size to. If the channel is not
1906// open, 0 is returned.
1907//
1908//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
1909
1910#COMMAND GET_CHANNEL_SIZE #LRUG$ "TO" #LRUG$EC .
1911 !A [] $111 !1 !3
1912#ENDCOMMAND
1913
1914//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
1915//
1916// Command:
1917// GET_RESOURCE_TYPE resourceName|resourceId TO integerVariable
1918//
1919// Descrtiption:
1920// A command to retrieve the type of a resource at runtime. (Note: the
1921// resource type is set a compile-time.) For the first parameter, you may
1922// pass either the resource name (not in quotes) or the integer value of
1923// the resource id.
1924//
1925// Parmeters:
1926// resourceName
1927// Name of a resource.
1928// resourceId
1929// Integer value of a resource id. (The resource name is just a
1930// symbolic replacement (with a .RSC suffix) of a constant integer
1931// equal to the resource id.)
1932// integerVariable
1933// Variable to return the resource type to.
1934//
1935//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
1936
1937#COMMAND GET_RESOURCE_TYPE _R TO %#USGLR
1938 #IFDEF !1
1939 !A [] $112 !1 !3
1940 #ELSE
1941 !A [] $112 !1.RSC !3
1942 #ENDIF
1943#ENDCOMMAND
1944
1945#COMMAND GET_CURRENT_COLORS "TO" _RUDCE#LGB _RUDCE#LGB .
1946 !A [] $14E !2 !3
1947#ENDCOMMAND
1948
1949#COMMAND GET_CURRENT_DIRECTORY "TO" _RUDCE#LGB .
1950 !A [] $2D1 !2
1951#ENDCOMMAND
1952
1953#COMMAND GET_CURRENT_INPUT_CHANNEL "TO" _RUDCE#LGB .
1954 !A [] $10D !2
1955#ENDCOMMAND
1956
1957#COMMAND GET_CURRENT_LOCKCOUNT "TO" _RUDCE#LGB .
1958 !A [] $0E6 !2
1959#ENDCOMMAND
1960
1961#COMMAND GET_CURRENT_OUTPUT_CHANNEL "TO" _RUDCE#LGB .
1962 !A [] $10E !2
1963#ENDCOMMAND
1964
1965#COMMAND GET_CURRENT_USER_COUNT "TO" _RUDCE#LGB .
1966 !A [] $2DB !2
1967#ENDCOMMAND
1968
1969#COMMAND GET_DATE_FORMAT "TO" _RUDCE#LGB .
1970 !A [] $2D8 !2
1971#ENDCOMMAND
1972
1973#COMMAND GET_ENVIRONMENT &RD#GOBLU "TO" _RCEUGOB# .
1974 !A [] $2CF !1 !3
1975#ENDCOMMAND
1976
1977#COMMAND GET_LICENSED_MAX_USERS "TO" _RUDCE#LGB .
1978 !A [] $2DA !2
1979#ENDCOMMAND
1980
1981#COMMAND GET_NUMBER_FORMAT "TO" _RUDCE#LGB .
1982 !A [] $2D9 !2
1983#ENDCOMMAND
1984
1985#COMMAND GETXY #USGLR #USGLR .
1986 !A [] $14D !1 !2
1987#ENDCOMMAND
1988
1989#COMMAND GOSUB &RVFWSNDE#G .
1990 #IFDEF !1
1991 !A [] $042 !1
1992 #ELSE
1993 !A [] $042 |CL0
1994 #FREF !1 !a
1995 #ENDIF
1996#ENDCOMMAND
1997
1998#COMMAND GOTO &RVFWSNDE#G .
1999 #IFDEF !1
2000 !A [] $041 !1
2001 #ELSE
2002 !A [] $041 |CL0
2003 #FREF !1 !a
2004 #ENDIF
2005#ENDCOMMAND
2006
2007#COMMAND GOTOXY &%#USGL %#USGLR .
2008 !A [] $145 !1 !2
2009#ENDCOMMAND
2010
2011#COMMAND HELP &T .
2012 #IF !0>0
2013 #CHECK !1.N _U
2014 !A [] $1C5 !1.N
2015 #ELSE
2016 !A [] $1C5 |CI0
2017 #ENDIF
2018#ENDCOMMAND
2019
2020#COMMAND IF LR
2021 #IFSAME !1 ~
2022 IFNOT !2 !3 !4 !5 !6 !7 !8 !9
2023 #ELSE
2024 #IFLOGICAL !1 // added to 12.0 to support indicators outside of expressions
2025 IF (!1) !2 !3 !4 !5 !6 !7 !8 !9 // if indicator, place it within an expression
2026 #ELSE
2027 #IFSAME !1 STATUS
2028 INDCT$STATUS LASTIF STATUS !2
2029 IF$HELP !3 !4 !5 !6 !7 !8 !9
2030 #ELSE
2031 #IFSAME !2 $0 $1 $2 $3 $4 $5 MATCH IN
2032 INDCT$AS LASTIF AS !1 !2 !3
2033 IF$HELP !4 !5 !6 !7 !8 !9
2034 #ELSE
2035 #IFCLASS !1 "G"
2036 INDCT$GROUP LASTIF GROUP ALL !1
2037 #ELSE
2038 INDCT$AS LASTIF AS !1
2039 #ENDIF
2040 IF$HELP !2 !3 !4 !5 !6 !7 !8 !9
2041 #ENDIF
2042 #ENDIF
2043 #ENDIF
2044 #ENDIF
2045#ENDCOMMAND
2046
2047#COMMAND IFNOT LR
2048 #IFSAME !1 ~
2049 IF !2 !3 !4 !5 !6 !7 !8 !9
2050 #ELSE
2051 #IFLOGICAL !1 // added to 12.0 to support indicators outside of expressions
2052 IFNOT (!1) !2 !3 !4 !5 !6 !7 !8 !9 // if indicator, place it within an expression
2053 #ELSE
2054 #IFSAME !1 STATUS
2055 INDCT$STATUS LASTIF~ STATUS !2
2056 IF$HELP !3 !4 !5 !6 !7 !8 !9
2057 #ELSE
2058 #IFSAME !2 $0 $1 $2 $3 $4 $5 MATCH IN
2059 INDCT$AS LASTIF~ AS !1 !2 !3
2060 IF$HELP !4 !5 !6 !7 !8 !9
2061 #ELSE
2062 #IFCLASS !1 "G"
2063 INDCT$GROUP LASTIF~ GROUP ALL !1
2064 #ELSE
2065 INDCT$AS LASTIF~ AS !1
2066 #ENDIF
2067 IF$HELP !2 !3 !4 !5 !6 !7 !8 !9
2068 #ENDIF
2069 #ENDIF
2070 #ENDIF
2071 #ENDIF
2072#ENDCOMMAND
2073
2074// note that IF_ and IFNOT_ are private and old. They do not work in all
2075// cases. For example, "If_ Indicator" will not work. Use IF
2076#COMMAND IF_ LR // THIS IF_ WILL NOT WORK WITH ELSE!
2077 #IFSAME !1 ~
2078 IFNOT_ !2 !3 !4 !5 !6 !7 !8 !9
2079 #ELSE
2080 #IFSAME !1 STATUS
2081 INDCT$STATUS LASTIF STATUS !2
2082 [LASTIF] !3 !4 !5 !6 !7 !8 !9
2083 #ELSE
2084 #IFSAME !2 $0 $1 $2 $3 $4 $5 MATCH IN
2085 INDCT$AS LASTIF AS !1 !2 !3
2086 [LASTIF] !4 !5 !6 !7 !8 !9
2087 #ELSE
2088 #IFCLASS !1 "G"
2089 INDCT$GROUP LASTIF GROUP ALL !1
2090 #ELSE
2091 INDCT$AS LASTIF AS !1
2092 #ENDIF
2093 [LASTIF] !2 !3 !4 !5 !6 !7 !8 !9
2094 #ENDIF
2095 #ENDIF
2096 #ENDIF
2097#ENDCOMMAND
2098
2099#COMMAND IFNOT_ LR // THIS IFNOT_ WILL NOT WORK WITH ELSE!
2100 #IFSAME !1 ~
2101 IF_ !2 !3 !4 !5 !6 !7 !8 !9
2102 #ELSE
2103 #IFSAME !1 STATUS
2104 INDCT$STATUS LASTIF~ STATUS !2
2105 [LASTIF] !3 !4 !5 !6 !7 !8 !9
2106 #ELSE
2107 #IFSAME !2 $0 $1 $2 $3 $4 $5 MATCH IN
2108 INDCT$AS LASTIF~ AS !1 !2 !3
2109 [LASTIF] !4 !5 !6 !7 !8 !9
2110 #ELSE
2111 #IFCLASS !1 "G"
2112 INDCT$GROUP LASTIF~ GROUP ALL !1
2113 #ELSE
2114 INDCT$AS LASTIF~ AS !1
2115 #ENDIF
2116 [LASTIF] !2 !3 !4 !5 !6 !7 !8 !9
2117 #ENDIF
2118 #ENDIF
2119 #ENDIF
2120#ENDCOMMAND
2121
2122#COMMAND IF$HELP
2123 !A [~LASTIF] $41 |CI0 // If LASTIF is false jump to end of IF command.
2124 #XPUSH 1 !a // Save line number of jump at static nesting level.
2125 #XPUSH 0 !n // Save nesting level in stack 0.
2126 !1 !2 !3 !4 !5 !6 !7 !8 !9
2127 #XPOP 0 Q$ // Restore nesting level into Q.
2128 #XPOP 1 S$ // Restore IF JUMP line number
2129 #XPUSH !q !s // Push it back for the ELSE.
2130 #IF (!n>!q) // after a begin
2131 #FREF END$!r !s // Make IF JUMP goto end of begin block.
2132 #ELSE // same or lower nesting level
2133 #FREF (!a+1) !s // Make IF JUMP goto end of the IF.
2134 #ENDIF
2135#ENDCOMMAND
2136
2137#COMMAND IFCHANGE R R
2138 #IFDEF !1
2139 #CHECK !1 _RFCVGE
2140 !A [] $1C6 !1
2141 #ELSE
2142 #CHECK !1.FILE_NUMBER _URWGV
2143 !A [] $303 !1.FILE_NUMBER // should work with filename or indirect_file (which is obsolete)
2144 #ENDIF
2145 [|122] !2 !3 !4 !5 !6 !7 !8 !9
2146#ENDCOMMAND
2147
2148//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
2149//
2150// Command:
2151// INCLUDE_RESOURCE fileName AS resourceName {TYPE resourceType}
2152//
2153// Descrtiption:
2154// A command to include (embed) a file as a resource.
2155//
2156// Parmeters:
2157// fileName
2158// Name of a file (NOT in quotes) to include. May include a path.
2159// resourceName
2160// Name of the resource (NOT in quotes).
2161// resourceType
2162// A constant integer (or a symbolic replacement for a constant
2163// integer) that is recorded in the .flx to indicate the type of
2164// resource. If omitted, DF_RESOURCE_TYPE_LINE is assumed. You
2165// uase any positive value for user-defined types. Do NOT use
2166// 0. 0 means the resource is uninitialized (registered, but not
2167// included.) DAC reserves the negative values.
2168//
2169//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
2170
2171#COMMAND INCLUDE_RESOURCE _TR "AS" _R """TYPE" _%USNVLE#
2172 #IF (!0>3)
2173 #SET Q$ !5 // specified type.
2174 #ELSE
2175 #SET Q$ DF_RESOURCE_TYPE_LINE // default to line.
2176 #ENDIF
2177 #IFDEF !3.RSC
2178 #RESOURCE !1 !3.RSC !q $0 // re-register resource; $0 = already named (just
2179 #ELSE // setting resource filename and type).
2180 #REPLACE !3.RSC |CI!ZR // create unique resource id.
2181 #RESOURCE !1 !Zr !q !3 // register new resource.
2182 #ENDIF
2183#ENDCOMMAND
2184
2185#COMMAND INCREMENT #ELCRUG .
2186 #IFTYPE !1 "IV"
2187 !A [] $083 !1 |CI0
2188 #ELSE
2189 Move (!1 + 1) to !1
2190 #ENDIF
2191#ENDCOMMAND
2192
2193#COMMAND INDCT$$0 &
2194 !A [] $4028 |CI0 |CI0 !1 !3
2195#ENDCOMMAND
2196
2197#COMMAND INDCT$$1 &RX R .
2198 !A [] $4028 |CI0 |CI0 !1~ !3
2199#ENDCOMMAND
2200
2201#COMMAND INDCT$AS //&RX "AS" LU "$0""$1""$2""$3""$4""$5""MATCH""IN""" #LUG .
2202 #IF (!0<4)
2203 #IFCLASS !3 "G"
2204 #CHECK !4 "" // INDICATE IND1 AS IND2
2205 #CHECK !3 _SNDI#LO
2206 !A [] $4020 !3 |GB[0] !1 |3
2207 #ELSE
2208
2209 // If here we've got either a single variable if
2210 // If Var .... <or>
2211 // If (Var)
2212 //
2213 // Not all data types are supported in this format and the compiler will create an error if
2214 // you pick the wrong one.
2215 //
2216 // Those Allowed are: Real, Number, Date, String, Integer, Boolean, Short, UShort, Char, UChar, Address
2217 //
2218 // Those not Allowed are: Float, Decimal, Currency, Time, DateTime, TimeSpan, Variant, BigInt, UBigInt, UInteger
2219 //
2220 // This was changed for 8.3. Prior to 8.3 types which were not supported (e.g. float) compiled but did not work.
2221 // Now you get an error message at compile time. Also, address types which did not work now are allowed and work properly.
2222 //
2223 // Struct and arrays can only be used if they are members (e.g. not MyIntArray, but MyIntArray[1]; not MyStruct, but MyStruct.bMem)
2224 // and if the member is within an expression (e.g. not MyIntArray[1], but (MyIntArray[1]) ).
2225 // In addition you cannot use deprecated "If X[1] EQ Y[1]" syntax with structs and arrays. You must use expressions "if (x[1]=y[1])"
2226
2227 // INDICATE IND AS X
2228 #CHECK !3 _U
2229 // compare real 0 against real
2230 #IFTYPE !3 "R"
2231 !A [] IN$5 !3 |CR0 !1 |3
2232 #ELSE
2233 // compar number 0 for date and number
2234 #IFTYPE !3 "ND"
2235 !A [] IN$5 !3 |CN0 !1 |1
2236 #ELSE
2237 // compare integer 0 for integer, Long(?), Boolean, UBigint, UInteger, UShort, BigInt, Short, Char, UChar, Address
2238 // prior to 8.3 this was "ILZOQGVUWCYH". In 8.3 we removed currency (O) and decimal (Q), BigInt (H), UBigInt (G), UInteger (V), added address (X)
2239 #IFTYPE !3 "ILZUWCYX"
2240 !A [] IN$5 !3 |CI0 !1 |2
2241 #ELSE
2242 // compare string "" against string
2243 #IFTYPE !3 "S"
2244 !A [] IN$5 !3 |CS"" !1 |0
2245 #ELSE
2246 // if type is a struct or array, we cannot use this. One of two types of errors
2247 #IFTYPE !3 "KA"
2248 #IFCLASS !3 "E"
2249 // if within an expression, it must be returning the entire struct or array which cannot be evaludated
2250 #ERROR DFERR_COMP_INVALID_TYPE "The expression returns a struct or array. This cannot used for logical evaluation."
2251 #ELSE
2252 // if not an expression. This could be a non-member which is never allowed.
2253 // or it might be a member which requires parenthesis. eg: "if Var.bMem" should be "if (Var.bMem)"
2254 #ERROR DFERR_COMP_INVALID_TYPE "Structs and Arrays must be members and can only be evaluated within an expression. Use (bVars[x]) or (Var.bMem)"
2255 #ENDIF
2256 #ELSE
2257 // types of BigInt, UBingInt, UInteger, time, timedate, float, currency, decimal, variant and timespan cannot be used directly in expression or as variables.
2258 // They can be used inside of a boolean expression. So you can not do "If fFloatVar" or "If (fFloatVar)" but you can do
2259 // "If (fFloatVar<>0)" instead. We don't support variant types because at compile time we just don't know what kind of data they
2260 // will contain.
2261 #IFTYPE !3 "TMFOPQJHGV"
2262 #ERROR DFERR_COMP_INVALID_TYPE "The variable data-type is not valid for logical evaluation. Use (var<>0)"
2263 #ELSE
2264 #CHECK !3 _O
2265 !A [] $4020 !3 |GB[0] !1 IN$GLALL |3
2266 #ENDIF
2267 #ENDIF
2268 #ENDIF
2269 #ENDIF
2270 #ENDIF
2271 #ENDIF
2272 #ENDIF
2273 #ELSE
2274 #CHECK !5 _R
2275 #IFSAME !4 MATCH
2276 !A [] $4031 !3 !5 !1 !6
2277 #ELSE
2278 #IFSAME !4 IN
2279 !A [] $4030 !3 !5 !1 !6
2280 #ELSE
2281 #CHECK !3 _U
2282
2283 // If here we've got either a old style if statement
2284 // If Var NE Xxxx <or>
2285 // If Var EQ Var
2286 //
2287 // First of all note that this is a deprecated style and not all of the newer types are supported. If we
2288 // find an invalid type in either side of the comparison, we will generate a compiler error
2289 //
2290 // Those Allowed are: Real, Number, Date, String, Integer, Boolean, Short, UShort, Char, UChar, Address
2291 //
2292 // Those not Allowed are: Float, Decimal, Currency, Time, DateTime, TimeSpan, Variant, BigInt, UBigInt, UInteger
2293 // Struct or Arrays (even members of a valid data-type)
2294 //
2295 // This was changed for 8.3 and this may generate new compiler errors. That's good as it is catching errors.
2296
2297 // note that the order of these are important.
2298 #IF2TYPE !3 !5 "TMFOPQJHGVAK" // bad guys are: time, datetime, timespan, float, currency, decimal, variant, BigInt, UBigInit, UInteger, Struct, Array
2299 #ERROR DFERR_COMP_INVALID_TYPE "One or both comparision variable datatypes are not valid for logical evaluation. Use (var<>xx)"
2300 #ELSE
2301 #IF2TYPE !3 !5 "R" // real
2302 !A [] IN!4 !3 !5 !1 !6 |3
2303 #ELSE
2304 #IF2TYPE !3 !5 "ND" // number, date
2305 #IF2TYPE !3 !5 "X" // cannot compare address to number/date.
2306 #ERROR DFERR_COMP_INVALID_TYPE "You cannot compare an address to a number or a date"
2307 #ELSE
2308 !A [] IN!4 !3 !5 !1 !6 |1
2309 #ENDIF
2310 #ELSE
2311 // #IF2TYPE !3 !5 "IL" // pre-8.3 it was this (we let just about everything act as string, which did not work)
2312 #IF2TYPE !3 !5 "ILZUWCYX" // integer, (long), boolean, Short, uShort, Char, UChar, Address
2313 !A [] IN!4 !3 !5 !1 !6 |2
2314 #ELSE
2315 !A [] IN!4 !3 !5 !1 !6 |0 // if nothing else, string
2316 #ENDIF
2317 #ENDIF
2318 #ENDIF
2319 #ENDIF
2320 #ENDIF
2321 #ENDIF
2322 #ENDIF
2323#ENDCOMMAND
2324
2325#COMMAND INDCT$GROUP &XR "GROUP" R"ALL""ANY" CVFWSN#LRU "AND""OR""" "ANY""ALL""" CVFWSN#LU .
2326 #IF !0>4
2327 #CHECK !7 _R
2328 !A [] $4020 !4 !7 !1 IN$GL!3 IN$GR!6 IN$GM!5
2329 #ELSE
2330 !A [] $4020 !4 |GB[0] !1 IN$GL!3 |3
2331 #ENDIF
2332#ENDCOMMAND
2333
2334#COMMAND INDCT$STATUS &R R #LWV
2335 #IFDEF !3
2336 !A [] $4029 !3 |CI0 !1 !4
2337 #ELSE
2338 #CHECK !3.FILE_NUMBER _U#LWV
2339 #SET Q$ !3.FILE_NUMBER
2340 !A [] $4029 |CI!q |CI0 !1 !4
2341 #ENDIF
2342#ENDCOMMAND
2343
2344#COMMAND INDEX_DEF R R#LGU "TO" #LGRNDCE #LGNDCE #LGNDCE
2345 #IFDEF !1
2346 !A [] $82 !1 FILENUMBER
2347 #ELSE
2348 #CHECK !1.FILE_NUMBER _UE
2349 #SET Q$ !1.FILE_NUMBER
2350 !A [] $82 |CI!q FILENUMBER
2351 #ENDIF
2352 !A [] $344 !2 !4 // index fields
2353 #IF !0>4
2354 !A [] $82 STRLEN !5 // number of fields
2355 #IF !0>5
2356 !A [] $349 !2 !6 // index attributes
2357 #ENDIF
2358 #ENDIF
2359#ENDCOMMAND
2360
2361#COMMAND INDICATE R
2362 #IFSAME !1 ~
2363 #IFDEF !2
2364 #ELSE
2365 #REPLACE !2 |!C
2366 #ENDIF
2367 INDICATE !2~ !3 !4 !5 !6 !7 !8 !9
2368 #ELSE
2369 // #CHECK !2 "AS""STATUS""$0""$1""GROUP"
2370 #IFDEF !1
2371 #CHECK !1 _X
2372 #ELSE
2373 #REPLACE !1 |!C
2374 #ENDIF
2375 // INDCT$!2 !1 !2 !3 !4 !5 !6 !7 !8 !9 // old logic
2376
2377 // Logic changed to handle true/false defined as constants instead of $0 $1
2378 // False is |CZ0, dfFalse is |CI0. If either, use $0.
2379 // True is |CZ1, dfTrue is |CI1 If either, use $1.
2380 #IFSAME !2 false dfFalse
2381 INDCT$$0 !1 $0 !3 !4 !5 !6 !7 !8 !9 // special command for Indicate !1 False
2382 #ELSE
2383 #IFSAME !2 true dftrue
2384 INDCT$$1 !1 $1 !3 !4 !5 !6 !7 !8 !9 // special command for Indicate !1 True
2385 #ELSE
2386 INDCT$!2 !1 !2 !3 !4 !5 !6 !7 !8 !9 // old fashion command uses !2 to assemble the command
2387 #ENDIF
2388 #ENDIF
2389 #ENDIF
2390#ENDCOMMAND
2391
2392#COMMAND INDICATOR RT
2393 #REPLACE !1 |!C
2394 #IF (!0>1)
2395 INDICATOR !2 !3 !4 !5 !6 !7 !8 !9
2396 #ENDIF
2397#ENDCOMMAND
2398
2399#COMMAND INHERIT_SCREEN &.
2400 !A [] $14B
2401#ENDCOMMAND
2402
2403#COMMAND INKEY #LUCRE &.
2404 !A [] $147 !1
2405#ENDCOMMAND
2406
2407#COMMAND INKEY$ #LUCRE &.
2408 !A [] $149 !1
2409#ENDCOMMAND
2410
2411#COMMAND INPUT &#ULGR #LUG #ULG .
2412 #IFCLASS !1 "C"
2413 #CHECK !2 _RCLUEG _RCLUG
2414 //move 0 to strmark
2415 !A [] $086 |CI0 |VI12
2416 !A [] $142 !1
2417 // INPUT !2 !3
2418 !A [] $140 !2 !3 |CI79
2419 #ELSE
2420 #CHECK !1 _RCLUEG
2421 !A [] $140 !1 !2 |CI79
2422 #ENDIF
2423#ENDCOMMAND
2424
2425#COMMAND INSERT #LGR "IN" #LGRCE "AT"""
2426 #IF (!0>3)
2427 #CHECK !5 _#LGR%
2428 //MOVEINT !5 TO STRMARK
2429 !A [] $82 !5 STRMARK
2430 #ENDIF
2431 !A [] $24C !3 !1
2432#ENDCOMMAND
2433
2434//JJT-5.1
2435//#COMMAND INTEGER TR
2436// // ALLOW FOR MORE INTS
2437// #REPLACE !1 |VI!D
2438// #IF (!0>1)
2439// INTEGER !2 !3 !4 !5 !6 !7 !8 !9
2440// #ENDIF
2441//#ENDCOMMAND
2442
2443#COMMAND IS_FILE_INCLUDED R R "TO"""
2444 !A [] $E0 !1 !2
2445 #IF !0>2
2446 #CHECK !4 _CUEGRL
2447 MOVE (FOUND) TO !4
2448 #ENDIF
2449#ENDCOMMAND
2450
2451#COMMAND KEYCHECK
2452 !A [] $046
2453 #IF !0>0
2454 [KEYPRESS] !1 !2 !3 !4 !5 !6 !7 !8
2455 #ENDIF
2456#ENDCOMMAND
2457
2458#COMMAND KEYPROC &R%WVF """GOSUB" WFVNSD# .
2459 #IFSAME !1 ON
2460 !A [] $82 |CI0 |VI33
2461 #ELSE
2462 #IFSAME !1 OFF
2463 !A [] $82 |CI9999 |VI33
2464 #ELSE
2465 #SET Y$ !a
2466 #IF (!0>1)
2467 // MOVEINT ADR(3) TO KEY LOC
2468 #SET Q$ (!1-100+40) // address in SYSINT
2469 #IFDEF !3
2470 !A [] $082 !3 |VI!q
2471 #ELSE
2472 !A [] $082 |CI0 |VI!q
2473 #FREF !3 !a
2474 #ENDIF
2475 #ELSE
2476 #SET Q$ (!1-100)
2477 #KEYPROC !q !Y
2478 #ENDIF
2479 #ENDIF
2480 #ENDIF
2481#ENDCOMMAND
2482
2483#COMMAND LEFT &#UGL$ "TO" #UEGRLC L#% .
2484 #IF !0>3
2485 !A [] $082 !4 STRMARK
2486 #ENDIF
2487 !A [] $241 !1 !3
2488#ENDCOMMAND
2489
2490#COMMAND LENGTH &#LUG$ "TO" C#LREUG .
2491 !A [] $246 !1 !3
2492#ENDCOMMAND
2493
2494#COMMAND LOCK &.
2495 !A [] $0C7
2496#ENDCOMMAND
2497
2498#COMMAND LOOP &.
2499 #POP S$
2500 #CHECK BEGIN$!s _RVFWSNDEU
2501 !A [] $041 BEGIN$!s
2502 END$!s:
2503 #SET N$ !n-1
2504#ENDCOMMAND
2505
2506#COMMAND MAKEDEF$ // make a list of symbols defined
2507 #IF !0>0
2508 #IFDEF !1
2509 #ELSE
2510 !1:
2511 #ENDIF
2512 #IF !0>1
2513 MAKEDEF$ !2 !3 !4 !5 !6 !7 !8 !9
2514 #ENDIF
2515 #ENDIF
2516#ENDCOMMAND
2517
2518#COMMAND MAKE_FILE RU#LG U#LG U#LG U#LG .
2519 !A [] $34A !4
2520 #IF !0>2
2521 !A [] $82 !3 FILENUMBER
2522 #ELSE
2523 !A [] $82 |CI0 FILENUMBER
2524 #ENDIF
2525 #IF !0>1
2526 !A [] $346 !1 !2
2527 #ELSE
2528 !A [] $346 !1 |CS''
2529 #ENDIF
2530#ENDCOMMAND
2531
2532#COMMAND MEMORY #LRCUGE &.
2533 !A [] $2CA !1
2534#ENDCOMMAND
2535
2536#COMMAND MID &#UGL$ "TO" #UGRLEC #L%U #L% .
2537 #IF !0>4
2538 !A [] $082 !5 STRMARK
2539 #ENDIF
2540 !A [] $082 !4 STRLEN
2541 !A [] $245 !1 !3
2542#ENDCOMMAND
2543
2544#REM The type of a move is determined at compile time, based on the
2545#REM type of the destination. The move type refers to the intermediate
2546#REM value to which the source will be converted.
2547
2548//JJT-5.1
2549//#COMMAND MOVE #LU "TO" #GLEURC .
2550// #IFCLASS !1 "G" // MOVE INDICATOR
2551// #CHECK !1 _VWFC
2552// !A [] $4020 !1 |GB[0] !3 IN$GLALL |3
2553// #ELSE
2554//// Type independent move as of 2.3
2555// !A [] $086 !1 !3
2556// #ENDIF
2557//#ENDCOMMAND
2558
2559#COMMAND MOVEDATE &%#GULI "TO" #UCIGERL .
2560 !A [] $084 !1 !3
2561#ENDCOMMAND
2562
2563#COMMAND MOVEINT &%#GULD "TO" #UCSDEGRL .
2564 !A [] $082 !1 !3
2565#ENDCOMMAND
2566
2567#COMMAND MOVENUM &#ULG "TO" #UCLGREL .
2568 !A [] $081 !1 !3
2569#ENDCOMMAND
2570
2571#COMMAND MOVEREAL &#ULG "TO" #UCLGER .
2572 !A [] $085 !1 !3
2573#ENDCOMMAND
2574
2575#COMMAND MOVESTR &#ULG$ "TO" #UCLGR$E .
2576 !A [] $080 !1 !3
2577#ENDCOMMAND
2578
2579#COMMAND MULTI$ // repeat a command for each argument (internal)
2580 #IF !0>1
2581 !1 !2
2582 #ENDIF
2583 #IF !0>2
2584 MULTI$ !1 !3 !4 !5 !6 !7 !8 !9
2585 #ENDIF
2586#ENDCOMMAND
2587
2588#COMMAND MULTIBACK$ // same as above, except that arguments
2589 #IF !0>2 // are output in reverse order
2590 MULTIBACK$ !1 !3 !4 !5 !6 !7 !8 !9
2591 #ENDIF
2592 #IF !0>1
2593 !1 !2
2594 #ENDIF
2595#ENDCOMMAND
2596
2597#COMMAND NAME R#L T
2598 #IFDEF !1
2599 #REPLACE !2 !1
2600 #CHECK !3 .
2601 #ELSE
2602 #IFCLASS !1.1 "W"
2603 AUTOPAGE !1
2604 #ELSE
2605 AUTO3$ #REPLACE !1 PAGE!f
2606 #ENDIF
2607 #IF !0>1
2608 NAME !2 !3 !4 !5 !6 !7 !8 !9
2609 #ENDIF
2610 #ENDIF
2611#ENDCOMMAND
2612
2613// JJT-5.1
2614//#COMMAND NUMBER TR
2615// #NUM V$
2616// #REPLACE !1 |VN!v
2617// #IF (!0>1)
2618// NUMBER !2 !3 !4 !5 !6 !7 !8 !9
2619// #ENDIF
2620//#ENDCOMMAND
2621
2622#COMMAND ON R "GOTO""GOSUB""OFF" SNOBIODE
2623 #IFSAME !1 ERROR
2624 // MOVEINT ADDR to ONERROR (|VI31)
2625 #IFDEF !3
2626 !A [] $082 !3 |VI31
2627 #CHECK !2 "GOSUB"
2628 #ELSE
2629 !A [] $082 |CI0 |VI31
2630 #IFSAME !2 GOSUB
2631 #FREF !3 !a
2632 #ELSE
2633 #CHECK !2 "OFF"
2634 #ENDIF
2635 #ENDIF
2636 #ELSE
2637 #SET Q$ (!0-1)
2638 // INDICATE OK$1 AS !1 GT 0
2639 #IFDEF OK$1
2640 #ELSE
2641 #REPLACE OK$1 |!C
2642 #REPLACE OK$2 |!C
2643 #ENDIF
2644 #CHECK !1 _#ULGRS
2645 !A [] $4010 !1 |CI0 OK$1 |2
2646 // INDICATE OK$2 AS !1 LT !q
2647 !A [] $4000 !1 |CI!q OK$2 |2
2648 #SET Q$ (!a+2)
2649 #IFSAME !2 GOTO
2650 !A [OK$1 OK$2] $041 |CE(!q+!1 )
2651 #ELSE
2652 !A [OK$1 OK$2] $042 |CE(!q+!1 )
2653 #ENDIF
2654 #SET Q$ (!a+!0)
2655 !A [] $041 |CL!q //ERROR jump around GOTOs
2656 MULTI$ GOTO !3 !4 !5 !6 !7 !8 !9
2657 #ENDIF
2658#ENDCOMMAND
2659
2660
2661#REM OS$CALL makes a system BDOS call. Only calls that can be passed
2662#REM integer (not pointer) values can be used. Use at your own risk!
2663#REM Format of command:
2664#REM OS$CALL <FUNCTION> <ARGUMENT> {TO <RESULT>}
2665#REM <FUNCTION> - BDOS function code - See O/S documentation.
2666#REM <ARGUMENT> - Integer value to pass with function (optional)
2667#REM <RESULT> - Result code returned by function
2668
2669#REM Example to set CP/M I/O byto to "NEW_IO_BYTE (integer):
2670#REM OS$CALL 8 NEW_IO_BYTE
2671
2672#REM Example to get console status:
2673#REM OS$CALL 12 0 TO CONSTAT //integer
2674
2675#COMMAND OS$CALL &#LRU%DG #L%UG "TO""" #LCGUE .
2676 !A [] $2C8 !1 !2
2677 #IF !0>3
2678 //MOVEINT STRMARK TO !4
2679 !A [] $82 STRMARK !4
2680 #ENDIF
2681#ENDCOMMAND
2682
2683#COMMAND OUTCLOSE &.
2684 // OUTFILE 'CON:'
2685 !A [] $200 |CS'CON:'
2686#ENDCOMMAND
2687
2688#COMMAND OUTFILE &NDILU#G .
2689 !A [] $200 !1
2690#ENDCOMMAND
2691
2692#COMMAND OUTPUT
2693 #IFSAME !1 CHANNEL
2694 !A [] $10A |CI1 !2
2695 OUTPUT !3
2696 #ELSE
2697 #CHECK !2 .
2698 #IF !0>0
2699 #CHECK !1.N _#LUGFV
2700 !A [] $202 !1.N
2701 #ELSE
2702 !A [] $202 |VI9
2703 #ENDIF
2704 #ENDIF
2705#ENDCOMMAND
2706
2707#COMMAND OUTPUT_WRAP R
2708 #IFSAME !1 CHANNEL
2709 !A [] $10A |CI1 !2
2710 OUTPUT_WRAP !3
2711 #ELSE
2712 #CHECK !2 .
2713 #CHECK !1.N _#LUGFV
2714 !A [] $20A !1.N // Fill wrap fields and set |122 if empty
2715 OUTPUT !1
2716 [NOT |122] BLANKFORM !1
2717 !A [NOT |122] $20A !1.N
2718 [NOT |122] REPEAT
2719 #IFDEF NEWPAGE
2720 PAGECHECK !1.LINES
2721 [PAGEBREAK] GOSUB NEWPAGE
2722 #ENDIF
2723 OUTPUT !1
2724 !A [] $20A !1.N // get more from wrap fields
2725 [NOT |122] LOOP
2726 #ENDIF
2727#ENDCOMMAND
2728
2729#COMMAND PAD &#ULG$ "TO" #ULGRCE L%# .
2730 #IF !0>3
2731 !A [] $082 !4 STRMARK
2732 #ENDIF
2733 !A [] $240 !1 !3
2734#ENDCOMMAND
2735
2736#COMMAND PAGE R%
2737 #IFSAME !1 SET
2738 #IF !0>1
2739 // Set attributes for future use
2740 #CHECK !2.N _RU#LG
2741 MOVE !2.N TO STRMARK
2742 FIND$PAGE !3 !4 !5
2743 FIND$PAGE !6 !7 !8
2744 #ELSE
2745 // Page an image named SET immediately
2746 !A [] $1C0 !1.N
2747 #ENDIF
2748 #ELSE
2749 #IF !0>1
2750 // Set attributes for use now
2751 #CHECK !1.N _RU#LG
2752 MOVE !1.N TO STRMARK
2753 FIND$PAGE !2 !3 !4
2754 FIND$PAGE !5 !6 !7
2755 #ENDIF
2756 // Put image with new attributes on screen now
2757 // OR, put regular image on screen now.
2758 !A [] $1C0 !1.N
2759 #ENDIF
2760#ENDCOMMAND
2761
2762#COMMAND PAGECHECK &#LG% .
2763 #IFDEF !1 |CI0
2764 !A [] $203 !1 |CI0
2765 #ELSE
2766 #CHECK !1.LINES _VFWU#LG
2767 !A [] $203 !1.LINES |CI0
2768 #ENDIF
2769#ENDCOMMAND
2770
2771#COMMAND POS &#UGRL$ "IN" #UGRL$ #L% #L% .
2772 !A [] $244 !1 !3
2773 #IF !0>3
2774 #CHECK !4 "TO"
2775 #CHECK !5 _RCEUL
2776 !A [] $082 STRMARK !5
2777 #ENDIF
2778#ENDCOMMAND
2779
2780#COMMAND PRINT #L
2781 #IF !0>2
2782 #IF !0>3
2783 #FORMAT !3 !4
2784 #CHECK !4 _CVFW#L
2785 #ENDIF
2786 #CHECK !2 "TO"
2787 #CHECK !3 _CVF#L
2788 #IFTYPE !3 "IND"
2789 !A [] $206 !1 !3
2790 #ELSE
2791 #IFTYPE !3 "R"
2792 !A [] $208 !1 !3
2793 #ELSE
2794 !A [] $205 !1 !3
2795 #ENDIF
2796 #ENDIF
2797 #ELSE
2798 AUTO4$ PRINT !1 TO PAGE!f !2
2799 #ENDIF
2800#ENDCOMMAND
2801
2802#COMMAND PRINT_WRAP #L
2803 #IF !0>2
2804 #IF !0>3
2805 #FORMAT !3 !4
2806 #CHECK !4 _CVFW#L
2807 #ENDIF
2808 #CHECK !2 "TO"
2809 #CHECK !3 _CVF#L
2810 #IFCLASS !1 "F"
2811 !A [] $209 |CS"DBMS:!1" !3 // assign seq file to wrap window.
2812 #ELSE
2813 !A [] $209 !1 !3
2814 #ENDIF
2815 #ELSE
2816 AUTO4$ PRINT_WRAP !1 TO PAGE!f !2
2817 #ENDIF
2818#ENDCOMMAND
2819
2820#COMMAND READ
2821 #IFSAME !1 CHANNEL
2822 !A [] $10A |CI0 !2
2823 #IF !0>2
2824 #CHECK !3 _ULEC
2825 READ !3 !4 !5 !6 !7 !8 !9
2826 #ENDIF
2827 #ELSE
2828 !A [] $108 !1
2829 #IF !0>1
2830 #CHECK !2 _ULEC
2831 READ !2 !3 !4 !5 !6 !7 !8 !9
2832 #ENDIF
2833 #ENDIF
2834#ENDCOMMAND
2835
2836#COMMAND READLN
2837 #IFSAME !1 CHANNEL
2838 #CHECK !3 _ULE
2839 !A [] $10A |CI0 !2
2840 READLN !3 !4 !5 !6 !7 !8 !9
2841 #ELSE
2842 #IF !0=0
2843 !A [] $104 |CS''
2844 #ENDIF
2845 #IF !0=1
2846 !A [] $104 !1
2847 #ENDIF
2848 #IF !0>1
2849 #CHECK !1 _ULE
2850 !A [] $108 !1
2851 READLN !2 !3 !4 !5 !6 !7 !8 !9
2852 #ENDIF
2853 #ENDIF
2854#ENDCOMMAND
2855
2856#COMMAND READ_BLOCK
2857 #IFSAME !1 CHANNEL
2858 !A [] $10A |CI0 !2
2859 #IF !0>2
2860 #CHECK !3 _ULE
2861 #CHECK !4 _RU
2862 !A [] $109 !3 !4
2863 #ENDIF
2864 #ELSE
2865 #CHECK !1 _ULEC
2866 #CHECK !2 _RU
2867 !A [] $109 !1 !2
2868 #ENDIF
2869#ENDCOMMAND
2870
2871#COMMAND READ_DFINI &#LGOBDR .
2872 !A [] $14C !1
2873#ENDCOMMAND
2874
2875//#COMMAND REAL TR
2876// #REAL V$
2877// #REPLACE !1 |VR!v
2878// #IF (!0>1)
2879// REAL !2 !3 !4 !5 !6 !7 !8 !9
2880// #ENDIF
2881//#ENDCOMMAND
2882
2883//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
2884//
2885// Command:
2886// REGISTER_RESOURCE resourceName
2887//
2888// Descrtiption:
2889// A command to register a resource for use prior to its inclusion.
2890//
2891// Parmeters:
2892// resourceName
2893// Name of the resource (NOT in quotes).
2894//
2895//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
2896
2897#COMMAND REGISTER_RESOURCE _R
2898 #IFDEF !1.RSC
2899 #ELSE
2900 #REPLACE !1.RSC |CI!ZR // create unique resource symbol.
2901 #RESOURCE $0 !Zr 0 !1 // register resource; $0 = no filename; 0 = no type.
2902 #ENDIF
2903#ENDCOMMAND
2904
2905#COMMAND REGISTRATION &#RLUGCE #LUGEC .
2906 !A [] $307 !1 !2
2907#ENDCOMMAND
2908
2909#COMMAND RENAMEFILE &#LGU "TO" R#LGU .
2910 !A [] $2C2 !1 !3
2911#ENDCOMMAND
2912
2913#COMMAND REPEAT &.
2914 #SET N$ !N
2915 #PUSH !R
2916 #XPUSH !n $INIT
2917 #IFIND // INCLUDE JUMPS IF INDICATORS ON LINE
2918 // GOTO BEGIN$!r
2919 !A [] $041 |CL0
2920 #FREF BEGIN$!r !a
2921 #$ !A 0 0 0 $041 |CL0
2922 #FREF END$!r !a
2923 #ENDIF
2924 #$ WHILE#!r:
2925 #$ BEGIN$!r:
2926#ENDCOMMAND
2927
2928
2929
2930#COMMAND REPLACE #LG "IN" #LGCE "WITH" #LRG
2931 #IFIND
2932 [] BEGIN
2933 POS !1 IN !3
2934 #$ [FOUND] MOVESTR (REPLACE(!1,!3,!5)) TO !3
2935 END
2936 #ELSE
2937 POS !1 IN !3
2938 [FOUND] MOVESTR (REPLACE(!1,!3,!5)) TO !3
2939 #ENDIF
2940#ENDCOMMAND
2941
2942// not updated for File_number vs recnum support. This should not be used with VDF. See Enter command for notes
2943#COMMAND REPORT T "BY""DOWN" VFW%LGR "BREAK"""
2944 #CHECK !1.RECNUM _UVCWGL
2945 INTEGER RECCOUNT
2946 #SET P$ 0
2947 // MOVEINT 20000 TO LINECOUNT // start with a full page
2948 !A [] $82 |CI20000 |VI10
2949 // MOVE 0 TO RECCOUNT
2950 !A [] $82 |CI0 RECCOUNT
2951 // BREAKINIT // init breakpoints
2952 !A [] $207
2953 // INDICATE FIRSTREC TRUE // used for subtotals
2954 #IFDEF FIRSTREC
2955 #ELSE
2956 #REPLACE FIRSTREC |!C
2957 #ENDIF
2958 !A [] $4028 |CI0 |CI0 FIRSTREC~
2959 #IFSAME !2 BY
2960 FIND GE !1 BY !3 // FIND first record
2961 #ELSE
2962 FIND LE !1 BY !3
2963 #ENDIF
2964 [~FOUND] GOTO END$OF$REPORT
2965 // CLEARSCREEN // start with a clear screen
2966 !A [] $144
2967 RPT.LOOP:// INDICATE SELECT TRUE // default for SELECT
2968 #IFDEF SELECT
2969 #ELSE
2970 #REPLACE SELECT |!C
2971 #ENDIF
2972 !A [] $4028 |CI0 |CI0 SELECT~
2973 // GOSUB RPT.SELECTION // go to user selection
2974 !A [] $42 |CL0
2975 #FREF RPT.SELECTION !a
2976 //[NOT SELECT] GOTO RPT.CONT // test SELECT
2977 !A [~ SELECT] $41 |CL0
2978 #FREF RPT.CONT !a
2979 BREAK$ !5 !6 !7 !8 !9 // set breakpoints
2980 #SET X$ !p // set up to break down
2981 [NOT FIRSTREC] BREAK$DOWN RPT.SUBTOTAL // break down for SUBTOTAL
2982 #SET X$ 0 // set up to break up
2983 // RELATE !1 // get related records
2984 !A [] $C4 !1.RECNUM
2985 BREAK$UP RPT.SUBHEADER // break up for SUBHEADER
2986 // INCREMENT RECCOUNT
2987 !A [] $083 RECCOUNT |CI0
2988 // GOSUB RPT.BODY // print body
2989 !A [] $42 |CL0
2990 #FREF RPT.BODY !a
2991 // INDICATE FIRSTREC FALSE // not first any more
2992 !A [] $4028 |CI0 |CI0 FIRSTREC
2993 RPT.CONT:
2994 #IFSAME !2 BY
2995 FIND GT !1 BY !3 // FIND next record
2996 #ELSE
2997 FIND LT !1 BY !3
2998 #ENDIF
2999 // KEYCHECK // check keyboard
3000 !A [] $46
3001 //[FOUND NOT KEYPRESS] GOTO RPT.LOOP // if ok, loop
3002 !A [FOUND ~ KEYPRESS] $41 RPT.LOOP
3003 //[KEYPRESS] GOSUB RPT.KEYPRESS // user can disable KEYPRESS
3004 !A [FOUND KEYPRESS] $42 |CL0
3005 #FREF RPT.KEYPRESS !a
3006 !A [FOUND ~ KEYPRESS] $41 RPT.LOOP
3007 #SET X$ !p // set up for break down
3008 END.OF.REPORT:
3009 [~ FIRSTREC] BREAK$DOWN RPT.SUBTOTAL $X // break down for last subtotals
3010 //[FIRSTREC] GOSUB RPT.TOTAL // print TOTAL
3011 !A [~ FIRSTREC] $42 |CL0
3012 #FREF RPT.TOTAL !a
3013 // GOTO END$OF$REPORT // GOTO end
3014 !A [] $41 |CL0
3015 #FREF END$OF$REPORT !a
3016 NEWPAGE:// GOSUB RPT.HEADER // new page, print HEADER
3017 !A [] $42 |CL0
3018 #FREF RPT.HEADER !a
3019 #SET X$ 0 // this will reprint the page headers if included //
3020 [NOT FIRSTREC] BREAK$PRT SUBHEADER // reprint pages
3021 // RETURN // end of NEWPAGE
3022 !A [] $43 |CI0
3023 RPT.SELECTION: // selection starts after REPORT
3024#ENDCOMMAND
3025
3026#COMMAND REPORTEND . // end of REPORT
3027 MAKEDEF$ RPT.HEADER RPT.SELECTION RPT.BODY RPT.TOTAL
3028 #SET X$ 0
3029 BREAK$T3
3030 // RETURN
3031 !A [] $43 |CI0
3032 #IFDEF RPT.KEYPRESS
3033 #ELSE
3034 RPT.KEYPRESS:
3035 // STRING AKEY$ 1
3036 #IFDEF AKEY$
3037 #ELSE
3038 #STR V$ 1
3039 #REPLACE AKEY$ |VS!v
3040 #ENDIF
3041 // SHOWLN 'A KEY HAS BEEN PRESSED.'
3042 !A [] $142 |CS'A KEY HAS BEEN PRESSED.'
3043 !A [] $143
3044 // SHOW 'DO YOU WANT TO STOP THE REPORT (Y or N)? '
3045 !A [] $142 |CS'DO YOU WANT TO STOP THE REPORT (Y or N)? '
3046 // INKEY AKEY$
3047 !A [] $147 AKEY$
3048 !A [] $141 AKEY$
3049 // IF NOT AKEY$ IN 'Yy' RETURN RPT.LOOP
3050 INDCT$AS SELECT AS AKEY$ IN 'Yy'
3051 //JJT-5.1
3052 //[~ SELECT] RETURN RPT.LOOP
3053 [~ SELECT] Gosub_RETURN RPT.LOOP
3054 //JJT-5.1
3055 //RETURN END$OF$REPORT // Necessary to pop stack
3056 Gosub_RETURN END$OF$REPORT // Necessary to pop stack
3057 #ENDIF
3058 END$OF$REPORT:
3059#ENDCOMMAND
3060
3061// JJT-5.1
3062//#COMMAND RETURN VFWNDE#G
3063// #IF !0=0
3064// !A [] $043 |CL0
3065// #ELSE
3066// #IFSAME !1 RETURN
3067// #SET Q$ (!a+2)
3068// !A [] $043 |CL!q // RETURN RETURN
3069// RETURN !2 !3 !4 !5 !6 !7 !8 !9
3070// #ELSE
3071// #IFDEF !1
3072// #CHECK !1 _S
3073// #CHECK !2 .
3074// !A [] $043 !1
3075// #ELSE
3076// !A [] $043 |CL0
3077// #FREF !1 !a
3078// #ENDIF
3079// #ENDIF
3080// #ENDIF
3081//#ENDCOMMAND
3082
3083#COMMAND RIGHT &#UGRL$ "TO" #UGRLEC L#% .
3084 #IF !0>3
3085 !A [] $082 !4 STRLEN
3086 #ENDIF
3087 !A [] $242 !1 !3
3088#ENDCOMMAND
3089
3090#COMMAND RUNPROGRAM_PIPE #RLGU #RLGU #RLGU .
3091 !A [] $2D6 !3 // Specify the object to receive MSG_INSERT
3092 // with the output from the pipe.
3093 !A [] $2D7 !1 !2 // Execute the OS command with any arguments.
3094#ENDCOMMAND
3095
3096#COMMAND RUNPROGRAM #RLG #LG #LGU #LGU .
3097 // 14.0 SHELL option does a ShellExecute. Can be:
3098 // SHELL must be the first parameter
3099 #IFSAME !1 SHELL
3100 Runprogram$Shell !2 !3 !4
3101 #ELSE
3102 #IFSAME !1 WAIT BACKGROUND
3103 #IF !0>3
3104 #ERROR DFERR_COMP_INVALID_ARGUMENT TOO MANY ARGUMENTS TO RUNPROGRAM !1
3105 #ELSE
3106 #IFSAME !1 WAIT
3107 !A [] $2CC !2 !3
3108 #ELSE // BACKGROUND
3109 !A [] $2CD !2 !3
3110 #ENDIF
3111 #ENDIF
3112 #ELSE
3113 // Number of args is checked by type checking of command for PIPE.
3114 #IFSAME !1 PIPE
3115 #IF !0<4
3116 RUNPROGRAM_PIPE !2 "" !3 !4 !5 !6 !7 !8 !9
3117 #ELSE
3118 RUNPROGRAM_PIPE !2 !3 !4 !5 !6 !7 !8 !9
3119 #ENDIF
3120 #ELSE // Plain RUNPROGRAM.
3121 #IF !0>2
3122 #ERROR DFERR_COMP_INVALID_ARGUMENT TOO MANY ARGUMENTS TO RUNPROGRAM
3123 #ELSE
3124 !A [] $2C0 !1 !2
3125 #ENDIF
3126 #ENDIF
3127 #ENDIF
3128 #ENDIF
3129#ENDCOMMAND
3130
3131#COMMAND Runprogram$Shell "WAIT""BACKGROUND" #LGU #LGU .
3132 #IFSAME !1 Wait
3133 !A [] $2f2 !2 !3
3134 #ELSE
3135 !A [] $2f1 !2 !3
3136 #ENDIF
3137#ENDCOMMAND
3138
3139
3140#COMMAND SCREENMODE #%LGR # .
3141 #IFSAME !1 ON
3142 !A [] $148 |CE(458752) // SCREENMODE on 0x70000
3143 #ELSE
3144 #IFSAME !1 OFF
3145 !A [] $148 |CE(196608) // SCREENMODE off 0x30000
3146 #ELSE
3147 #CHECK !1 _U
3148 !A [] $148 !1
3149 #ENDIF
3150 #ENDIF
3151 #IF !0>1
3152 SCREENMODE !2
3153 #ENDIF
3154#ENDCOMMAND
3155
3156#COMMAND SECTION &RT #LGU .
3157 #IFSAME !1 SELECTION // SELECTION is null SECTION
3158 #ELSE
3159 // RETURN // RETURN from last routine
3160 !A [] $43 |CI0
3161 RPT.!1: // label SECTION
3162 #IFDEF !2 // LINES REQ SPEC
3163 // PAGECHECK !2
3164 !A [] $203 !2
3165 // [PAGEBREAK] GOSUB NEWPAGE
3166 !A [PAGEBREAK] $42 NEWPAGE
3167 #IFDEF !1.LINES
3168 #SET F$ !1.N
3169 #SET E$ 0
3170 #ENDIF
3171 #ELSE
3172 #IFDEF !1.LINES // is there a page?
3173 // PAGECHECK !1.LINES // check for end of page
3174 !A [] $203 !1.LINES |CI0
3175 //[PAGEBREAK] GOSUB NEWPAGE // if end, GOSUB NEWPAGE
3176 !A [PAGEBREAK] $42 NEWPAGE
3177 // AUTOPAGE !1 // start default page
3178 #SET F$ !1.N
3179 #SET E$ 0
3180 #ENDIF
3181 #ENDIF
3182 #ENDIF
3183#ENDCOMMAND
3184
3185#COMMAND SET_ARGUMENT_SIZE &#LGRBOUSD .
3186 !A [] $24E !1
3187#ENDCOMMAND
3188
3189#COMMAND SET_DFPATH "TO" &#LGRBOUD .
3190 !A [] $2D0 !2
3191#ENDCOMMAND
3192
3193#COMMAND SET_CHANNEL_POSITION &#LRUG$ "TO" &#LRUG$ .
3194 !A [] $10C !1 !3
3195#ENDCOMMAND
3196
3197#COMMAND SET_OPTION #LGR . // Sets window options
3198 #IFCLASS !1 _C // To stay on perminantly until
3199 #SET Q$ !1 // Turned off with CLEAR_OPTION.
3200 !A [] $04A |CI!q |CI0 // SET_OPTION NO_CALC // Turn off calculate.
3201 #ELSE
3202 !A [] $04A !1 |CI0 // THIS COMMAND IS FOR INTERNAL USE.
3203 #ENDIF
3204#ENDCOMMAND
3205
3206#COMMAND SET_RELATE &#LGOBRWCV "TO" #LGOBRWCV .
3207 !A [] $348 !1 !3
3208#ENDCOMMAND
3209
3210#COMMAND SET_TERMLIST &#LGOBDR #LGOBDIN .
3211 !A [] $14A !1 !2
3212#ENDCOMMAND
3213
3214#COMMAND SETCHANGE &RCVF%G .
3215 !A [] $1C7 !1
3216#ENDCOMMAND
3217
3218#COMMAND SHOW #ULRG$
3219 !A [] $142 !1
3220 #IF (!0>1)
3221 SHOW !2 !3 !4 !5 !6 !7 !8 !9
3222 #ENDIF
3223#ENDCOMMAND
3224
3225#COMMAND SHOWLN #LGU$
3226 #IF (!0>0)
3227 SHOW !1 !2 !3 !4 !5 !6 !7 !8 !9
3228 #ENDIF
3229 !A [] $143
3230#ENDCOMMAND
3231
3232#COMMAND SLEEP #LGURDBO .
3233 !A [] $02CE !1
3234#ENDCOMMAND
3235
3236// removed along with the other Old_Xxxxx commands. Note that there is no current status command.
3237//#COMMAND STATUS$ &CVW#LG "TO" #LUGRE
3238// #IFDEF !1
3239// !A [] $304 !1 !3
3240// #ELSE
3241// #CHECK !1.RECNUM _CVWLR#GU
3242// !A [] $304 !1.RECNUM !3
3243// #ENDIF
3244//#ENDCOMMAND
3245
3246#COMMAND STOP &.
3247 !A [] $144
3248 !A [] $040
3249#ENDCOMMAND
3250
3251#COMMAND STOP_HERE
3252 !A [] $4d !1
3253#ENDCOMMAND
3254
3255// JJT-5.1
3256//#COMMAND STRING TR E#L%
3257// #IF (!0>1)
3258// #IFDEF !2
3259// #CHECK !2 _VSWDF
3260// #STR V$ !2
3261// #REPLACE !1 |VS!v
3262// #IF (!0>2)
3263// STRING !3 !4 !5 !6 !7 !8 !9
3264// #ENDIF
3265// #ELSE
3266// #STR V$ 80
3267// #REPLACE !1 |VS!v
3268// STRING !2 !3 !4 !5 !6 !7 !8 !9
3269// #ENDIF
3270// #ELSE
3271// #STR V$ 80
3272// #REPLACE !1 |VS!v
3273// #ENDIF
3274//#ENDCOMMAND
3275
3276#COMMAND SUBTOTAL RFVC#LSD
3277 PRINT !1% !2 !3 !4 !5
3278 !A [] $082 |CI0 !1%
3279#ENDCOMMAND
3280
3281#REM Get system date, hour, min, seconds.
3282#REM WILL NOT WORK UNDER CPM 2.2
3283
3284#COMMAND SYSDATE$HELP
3285// #IFDEF IS$WINDOWS // This code is no longer required in VDF5. KCR
3286// !A [] $2E2 |CI2 !2
3287// #ENDIF
3288 !A [] $2C9 !1 !2
3289 #IF !0>2
3290 //MOVE STRLEN TO !3
3291 !A [] $82 STRLEN !3
3292 #ENDIF
3293 #IF !0>3
3294 //MOVE STRMARK TO !4
3295 !A [] $82 STRMARK !4
3296 #IF !0>4
3297 //MOVE |VI37 TO !5
3298 !A [] $82 |VI37 !5
3299 #ENDIF
3300 #ENDIF
3301#ENDCOMMAND
3302
3303#COMMAND SYSDATE #ERCUGL #ECUGL #ECUGL #ECUGL . // SYSDATE DATE HR MIN SECOND
3304 SYSDATE$HELP !1 DFFALSE !2 !3 !4 !5 !6 !7 !8 !9
3305#ENDCOMMAND
3306
3307#COMMAND SYSDATE4 #ERCUGL #ECUGL #ECUGL #ECUGL . // SYSDATE DATE HR MIN SECOND
3308 SYSDATE$HELP !1 DFTRUE !2 !3 !4 !5 !6 !7 !8 !9
3309#ENDCOMMAND
3310
3311#COMMAND SYSTEM &.
3312 !A [] $2C7
3313#ENDCOMMAND
3314
3315#COMMAND TRIM &#LUG$ "TO" C#ELRUG . // remove pre- and trailing spaces
3316 !A [] $24B !1 !3
3317#ENDCOMMAND
3318
3319#COMMAND UNLOCK &.
3320 !A [] $0C8
3321#ENDCOMMAND
3322
3323#COMMAND UNTIL R L L L .
3324 #POP S$
3325 IFNOT_ !1 !2 !3 !4 GOTO BEGIN$!s
3326 END$!s:
3327 #SET N$ !n-1
3328#ENDCOMMAND
3329
3330#COMMAND UPPERCASE &C#LUGRND$ "TO""" C#LUG$END .
3331 #IF !0>1
3332 !A [] $249 !1 !3
3333 #ELSE
3334 !A [] $249 !1 !1
3335 #ENDIF
3336#ENDCOMMAND
3337
3338#COMMAND WHILE R L L L .
3339 #SET N$ !N
3340 #PUSH !R
3341 #XPUSH !n $INIT
3342 // GOTO WHILE$!r
3343 !A [] $041 |CL0
3344 #FREF WHILE$!r !a
3345 #$ !A 0 0 0 $041 |CL!a
3346 #FREF END$!r !a
3347 #$ WHILE$!r:
3348 #$ BEGIN$!r:
3349 #$ IFNOT_ !1 !2 !3 !4 GOTO END$!r
3350#ENDCOMMAND
3351
3352#COMMAND WRITE$STR #ULRG$
3353 !A [] $106 !1
3354 #IF (!0>1)
3355 WRITE$STR !2 !3 !4 !5 !6 !7 !8 !9
3356 #ENDIF
3357#ENDCOMMAND
3358
3359#COMMAND WRITE
3360 #IFSAME !1 CHANNEL
3361 !A [] $10A |CI1 !2
3362 #IF !0>2
3363 WRITE$STR !3 !4 !5 !6 !7 !8 !9
3364 #ENDIF
3365 #ELSE
3366 #IF (!0>0)
3367 WRITE$STR !1 !2 !3 !4 !5 !6 !7 !8 !9
3368 #ENDIF
3369 #ENDIF
3370#ENDCOMMAND
3371
3372#COMMAND WRITELN
3373 #IFSAME !1 CHANNEL
3374 !A [] $10A |CI1 !2
3375 #IF !0>2
3376 WRITE$STR !3 !4 !5 !6 !7 !8 !9
3377 #ENDIF
3378 #ELSE
3379 #IF (!0>0)
3380 WRITE$STR !1 !2 !3 !4 !5 !6 !7 !8 !9
3381 #ENDIF
3382 #ENDIF
3383 !A [] $107
3384#ENDCOMMAND
3385
3386#COMMAND GET_CHANNEL_POSITION &#LRUG$ "TO" &#LRUG$EC .
3387 !A [] $10B !1 !3
3388#ENDCOMMAND
3389
3390
3391
3392// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
3393//
3394// Command:
3395// INITIALIZE_INTERFACE
3396//
3397// Parameters:
3398// None.
3399//
3400// Description:
3401// INITIALIZE_INTERFACE initializes the object resource information.
3402// It should be executed before any other object related operations
3403// are performed.
3404//
3405// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
3406
3407#COMMAND INITIALIZE_INTERFACE .&
3408 // B$ obj_flag bit 0 = in_object, bit 1 = in_class, bit 2 = in proc/func
3409 // X.AGG agg_count(class) defined count of objects in class
3410
3411 // ZA$ procedure/function label for procedures and functions
3412 // ZB$ current_dep the current dependant number to assign
3413 // ZC$ current_message the current flex message number
3414 // ZD$ group_size size of the current item group
3415 // ZE$ group_id unique id of current item group
3416 // ZF$ super_class_count count of objects in superclass
3417 // ZG$ temp temp counter (items, functions etc)
3418 // ZH$ access_method the current access method identifyer
3419 // ZI$ sub_obj_count the sub object counter
3420 // ZJ$ current_object the current_object number
3421
3422// #SET ZC$ $400 // begin up high, past predefinded
3423 #SET ZC$ $1000 // now reserving 4K for predefined msgs
3424
3425// #SET ZH$ $4001 // begin access methods here
3426 #SET ZH$ $40000001 // now using 32-bit msg ids; allows for 256M objs
3427
3428 #SET ZJ$ 2 // desktop and clipboard are first
3429
3430 #REPLACE IS$NEW$FMAC |CI1 // indicates that this is the new fmac
3431// #REPLACE IS$WINDOWS |CI1 // comment this to create character mode version
3432
3433 #REPLACE MANGLE_NAMES |CI1 // Adds name mangling.
3434 #REPLACE EXTENDED_DATA_TYPES |CI1 // Adds extended data types.
3435 #IFNDEF SUPPORT$ADDRESS
3436 #IFDEF EXTENDED_DATA_TYPES
3437 #REPLACE SUPPORT$ADDRESS |CI1
3438 #ENDIF
3439 #ENDIF
3440 //#REPLACE WINBASE_CONSOLIDATION |CI1 // Moves messages into dfmsg.pkg
3441
3442
3443// Informational output to screen/printer/file.
3444// This information is essential to know whether things are right at compile time.
3445
3446 #IFDEF IS$WINDOWS
3447 #REM FMAC FOR VISUAL DATAFLEX AND WEB APP STUDIO.
3448 #ELSE
3449 #REM FMAC FOR DATAFLEX CHARACTER MODE.
3450 #ENDIF
3451
3452 #IFDEF MANGLE_NAMES
3453 #REM NAME MANGLING ENABLED!
3454 #ENDIF
3455
3456 #IFDEF EXTENDED_DATA_TYPES
3457 #REM EXTENDED DATA TYPES ENABLED!
3458 #ENDIF
3459
3460 // Current FMAC Version, Revision and Build
3461 #REPLACE FMAC_VERSION |CI16
3462 #REPLACE FMAC_REVISION |CI1
3463 #REPLACE FMAC_BUILD |CI81
3464
3465
3466#IFDEF IS$WINDOWS
3467
3468 // Define object class types.
3469 #REPLACE U_cObject |CI1 // Basic object support.
3470 #REPLACE U_cUIObject |CI2 // UI Object
3471
3472 // removed in 8.3 --- might have #replaces defined in dfbase.pkg
3473 //#REPLACE U_DESKTOP |CI1 // a desktop class object - obsolete
3474 //#REPLACE U_BaseClass |CI1 // a desktop class object - obsolete
3475 //#REPLACE U_MESSAGE |CI2 // a message class object -obsolete
3476
3477 #REPLACE U_cm_MENU |CI3 // a menu class object
3478 #REPLACE U_cm_EDIT |CI4 // a edit class object
3479 #REPLACE U_SCROLLB |CI5 // a scroll bar class object
3480 #REPLACE U_cm_LIST |CI6 // a list class object
3481 #REPLACE U_cm_BUTTON |CI7 // a button class object
3482 #REPLACE U_cm_CHECKBOX |CI8 // a check box class object
3483 #REPLACE U_cm_CHECKLIST |CI9 // a check box class object
3484 #REPLACE U_cm_FORM |CI10 // a form class object
3485 #REPLACE U_cm_FORMLIST |CI11 // a form class object
3486 #REPLACE U_CLIENT |CI12 // a client area class object
3487 #REPLACE U_cm_TITLE |CI13 // a title bar class object
3488 #REPLACE U_cm_ACTION_BAR |CI14 // a action bar class object
3489 #REPLACE U_cm_WARNING_MSG |CI15 // a warning message class object
3490 #REPLACE U_cm_CRIT_MSG |CI16 // a critical error class object
3491 #REPLACE U_cm_ERROR |CI17 // a standard error class object
3492 #REPLACE U_cm_HELP |CI18 // a help class object
3493 #REPLACE U_ARRAY |CI19 // a array class of mixed scalars
3494 #REPLACE U_TRACE |CI20 // a trace class object
3495 #REPLACE U_cm_ENTRY |CI21 // a data entry class object
3496 #REPLACE U_cm_ENTRYLIST |CI22 // a data entry class object
3497 #REPLACE U_cm_DIALOG |CI23 // a DIALOG area class object
3498 #REPLACE U_cm_RADIO |CI24 // a radio button area
3499 #REPLACE U_cm_RADIOLIST |CI25 // a radio list area
3500 #REPLACE U_cm_VCONSOLE |CI26 // a virtual console area
3501 #REPLACE U_CLIPBOARD |CI27 // the clipboard handler
3502
3503 #REPLACE U_DFBaseObject |CI28
3504 #REPLACE U_DFBaseWindow |CI29
3505 #REPLACE U_DFBaseUIWindow |CI30
3506 #REPLACE U_DFBaseContainer |CI31
3507 #REPLACE U_DFBaseDialog |CI32
3508 #REPLACE U_DFBasePanel |CI33
3509 #REPLACE U_cDesktop |CI34 // prior to 8.3 this was dfBaseDesktop
3510 #REPLACE U_DFBaseControl |CI35
3511 #REPLACE U_DFBaseMenu |CI36
3512 #REPLACE U_DFBaseButton |CI37
3513 #REPLACE U_DFBasePushButton |CI38
3514 //#REPLACE U_DFComboButton |CI39 // no longer exists
3515 #REPLACE U_DFBaseCheckBox |CI40
3516 #REPLACE U_DFBaseRadioButton |CI41
3517 #REPLACE U_DFBaseTriState |CI42 // not supported at highlevel
3518 #REPLACE U_DFBaseForm |CI43
3519 #REPLACE U_DFBaseEntry |CI44
3520 //#REPLACE U_DFComboForm |CI45 // no longer exists
3521 #REPLACE U_DFBaseList |CI46
3522 #REPLACE U_DFBaseFormList |CI47
3523 #REPLACE U_DFBaseCheckList |CI48 // not used
3524 #REPLACE U_DFBaseRadioList |CI49 // not used
3525 #REPLACE U_DFBaseEntryList |CI50 // not used
3526 #REPLACE U_DFBaseComboBox |CI51
3527 #REPLACE U_DFBaseTriStateList |CI52
3528 #REPLACE U_DFBasePushButtonList |CI53
3529 #REPLACE U_DFBaseActionBar |CI54
3530 #REPLACE U_DFBasePullDown |CI55
3531 #REPLACE U_DFBaseSysMenu |CI56
3532 #REPLACE U_DFBaseGroup |CI57
3533 #REPLACE U_DFBaseScrollBar |CI58
3534 #REPLACE U_DFBaseHorzScrollBar |CI59
3535 #REPLACE U_DFRubberBand |CI60 // no longer exists
3536 #REPLACE U_DFBaseTextBox |CI61
3537 #REPLACE U_DFBaseEdit |CI62
3538 #REPLACE U_DFBaseSession |CI63
3539 #REPLACE U_DFBaseDllSession |CI64
3540 #REPLACE U_DFBaseSerial |CI65
3541 #REPLACE U_DFBaseLineForm |CI66
3542 //#REPLACE U_DFVconsole |CI67 // no longer exists
3543 #REPLACE U_DFBaseToolPanel |CI68
3544 #REPLACE U_DFBaseMapiSession |CI69
3545 #REPLACE U_DFBaseImageList |CI70
3546 #REPLACE U_DFBaseTabDialog |CI71
3547 #REPLACE U_DFBaseToolBar |CI72 // was dfbuttonbar
3548 #REPLACE U_DFBaseComboBoxEntry |CI73
3549 #REPLACE U_DFBaseMdiClient |CI74
3550 #REPLACE U_DFBaseListBox |CI75
3551 #REPLACE U_DFBaseEditPulldown |CI76
3552 #REPLACE U_DFBaseLineControl |CI77
3553
3554 // inet classes
3555 #REPLACE U_INETTRANSFER |CI78
3556 #REPLACE U_CFTPTRANSFER |CI79
3557 #REPLACE U_CBASEHTTPTRANSFER |CI80
3558
3559
3560 // XML Classes
3561 #REPLACE U_BaseXMLDOMNODE |CI81
3562 #REPLACE U_BaseXMLDOMNODELIST |CI82
3563 #REPLACE U_BaseXMLDOMNAMEDNODEMAP |CI83
3564 #REPLACE U_BaseXMLDOMPARSEERROR |CI84
3565 #REPLACE U_BaseXMLDOMIMPLEMENTATION |CI85
3566 #REPLACE U_BaseXMLDOMDOCUMENTFRAGMENT |CI86
3567 #REPLACE U_BaseXMLDOMDOCUMENT |CI87
3568 #REPLACE U_BaseXMLDOMCHARACTERDATA |CI88
3569 #REPLACE U_BaseXMLDOMTEXTNODE |CI89
3570 #REPLACE U_BaseXMLDOMCDATASECTION |CI90
3571 #REPLACE U_BaseXMLDOMCOMMENT |CI91
3572 #REPLACE U_BaseXMLDOMATTRIBUTE |CI92
3573 #REPLACE U_BaseXMLDOMELEMENT |CI93
3574 #REPLACE U_BaseXMLDOMPROCESSINGINSTRUCTION |CI94
3575 #REPLACE U_BaseXMLDOMDOCUMENTTYPE |CI95
3576 #REPLACE U_BaseXMLDOMNOTATION |CI96
3577 #REPLACE U_BaseXMLDOMENTITY |CI97
3578 #REPLACE U_BaseXMLDOMENTITYREFERENCE |CI98
3579
3580 #REPLACE U_CBASEWEBSERVICE |CI00105
3581
3582 // flexcom2 runtime classes
3583
3584 #REPLACE U_DFCOMAUTOMATIONOBJECT |CI107
3585 #REPLACE U_DFCOMDOCUMENTOBJECT |CI108
3586 #REPLACE U_DFCOMACTIVEXCONTROL |CI109
3587 #REPLACE U_DFCOMDESIGNCONTROL |CI110
3588 #REPLACE U_DFCOMIDISPATCHDRIVER |CI111
3589
3590 #REPLACE U_DFBaseRichEdit |CI112 // added 11.0
3591 #REPLACE U_DFBaseTextEdit |CI113 // added 11.0
3592
3593 #Replace U_cIdleHandler |CI128 // added 12.1
3594
3595
3596#ELSE
3597
3598 // character mode class defintions
3599
3600 // Define object class types.
3601 #REPLACE U_DESKTOP |CI1 // a desktop class object
3602 #REPLACE U_MESSAGE |CI2 // a message class object
3603 #REPLACE U_MENU |CI3 // a menu class object
3604 #REPLACE U_EDIT |CI4 // a edit class object
3605 #REPLACE U_SCROLLB |CI5 // a scroll bar class object
3606 #REPLACE U_LIST |CI6 // a list class object
3607 #REPLACE U_BUTTON |CI7 // a button class object
3608 #REPLACE U_CHECKBOX |CI8 // a check box class object
3609 #REPLACE U_CHECKLIST |CI9 // a check box class object
3610 #REPLACE U_FORM |CI10 // a form class object
3611 #REPLACE U_FORMLIST |CI11 // a form class object
3612 #REPLACE U_CLIENT |CI12 // a client area class object
3613 #REPLACE U_TITLE |CI13 // a title bar class object
3614 #REPLACE U_ACTION_BAR |CI14 // a action bar class object
3615 #REPLACE U_WARNING_MSG |CI15 // a warning message class object
3616 #REPLACE U_CRIT_MSG |CI16 // a critical error class object
3617 #REPLACE U_ERROR |CI17 // a standard error class object
3618 #REPLACE U_HELP |CI18 // a help class object
3619 #REPLACE U_ARRAY |CI19 // a array class of mixed scalars
3620 #REPLACE U_TRACE |CI20 // a trace class object
3621 #REPLACE U_ENTRY |CI21 // a data entry class object
3622 #REPLACE U_ENTRYLIST |CI22 // a data entry class object
3623 #REPLACE U_DIALOG |CI23 // a DIALOG area class object
3624 #REPLACE U_RADIO |CI24 // a radio button area
3625 #REPLACE U_RADIOLIST |CI25 // a radio list area
3626 #REPLACE U_VCONSOLE |CI26 // a virtual console area
3627 #REPLACE U_CLIPBOARD |CI27 // the clipboard handler
3628#ENDIF
3629
3630 // Base data structures
3631 #REPLACE MESSAGE_CLASS |CI0
3632 #REPLACE MENU_CLASS |CI1
3633 #REPLACE LIST_CLASS |CI2
3634 #REPLACE EDIT_CLASS |CI3
3635 #REPLACE SCROLL_CLASS |CI4
3636 #REPLACE ARRAY_CLASS |CI5
3637
3638
3639 // Define physical key names
3640 #REPLACE KEY_ALT |VI$8200
3641 #REPLACE KEY_SHIFT |VI$8400
3642 #REPLACE KEY_CTRL |VI$8800
3643
3644 #REPLACE KEY_ENTER |VI$9001
3645 #REPLACE KEY_TAB |VI$9002
3646 #REPLACE KEY_BACK_SPACE |VI$9003
3647 #REPLACE KEY_ESCAPE |VI$9004
3648 #REPLACE KEY_UP_ARROW |VI$9005
3649 #REPLACE KEY_DOWN_ARROW |VI$9006
3650 #REPLACE KEY_LEFT_ARROW |VI$9007
3651 #REPLACE KEY_RIGHT_ARROW |VI$9008
3652 #REPLACE KEY_HOME |VI$9009
3653 #REPLACE KEY_END |VI$900A
3654 #REPLACE KEY_PGUP |VI$900B
3655 #REPLACE KEY_PGDN |VI$900C
3656 #REPLACE KEY_INSERT |VI$900D
3657 #REPLACE KEY_DELETE |VI$900E
3658 #REPLACE KEY_F1 |VI$9010
3659 #REPLACE KEY_F2 |VI$9011
3660 #REPLACE KEY_F3 |VI$9012
3661 #REPLACE KEY_F4 |VI$9013
3662 #REPLACE KEY_F5 |VI$9014
3663 #REPLACE KEY_F6 |VI$9015
3664 #REPLACE KEY_F7 |VI$9016
3665 #REPLACE KEY_F8 |VI$9017
3666 #REPLACE KEY_F9 |VI$9018
3667 #REPLACE KEY_F10 |VI$9019
3668 #REPLACE KEY_F11 |VI$901A
3669 #REPLACE KEY_F12 |VI$901B
3670 #REPLACE KEY_A |VI$8041
3671 #REPLACE KEY_B |VI$8042
3672 #REPLACE KEY_C |VI$8043
3673 #REPLACE KEY_D |VI$8044
3674 #REPLACE KEY_E |VI$8045
3675 #REPLACE KEY_F |VI$8046
3676 #REPLACE KEY_G |VI$8047
3677 #REPLACE KEY_H |VI$8048
3678 #REPLACE KEY_I |VI$8049
3679 #REPLACE KEY_J |VI$804A
3680 #REPLACE KEY_K |VI$804B
3681 #REPLACE KEY_L |VI$804C
3682 #REPLACE KEY_M |VI$804D
3683 #REPLACE KEY_N |VI$804E
3684 #REPLACE KEY_O |VI$804F
3685 #REPLACE KEY_P |VI$8050
3686 #REPLACE KEY_Q |VI$8051
3687 #REPLACE KEY_R |VI$8052
3688 #REPLACE KEY_S |VI$8053
3689 #REPLACE KEY_T |VI$8054
3690 #REPLACE KEY_U |VI$8055
3691 #REPLACE KEY_V |VI$8056
3692 #REPLACE KEY_W |VI$8057
3693 #REPLACE KEY_X |VI$8058
3694 #REPLACE KEY_Y |VI$8059
3695 #REPLACE KEY_Z |VI$805A
3696 #REPLACE KEY_SPACE |VI$8020
3697 #REPLACE KSPACE |VI$8020
3698 #REPLACE KEY_0 |VI$8030
3699 #REPLACE KEY_1 |VI$8031
3700 #REPLACE KEY_2 |VI$8032
3701 #REPLACE KEY_3 |VI$8033
3702 #REPLACE KEY_4 |VI$8034
3703 #REPLACE KEY_5 |VI$8035
3704 #REPLACE KEY_6 |VI$8036
3705 #REPLACE KEY_7 |VI$8037
3706 #REPLACE KEY_8 |VI$8038
3707 #REPLACE KEY_9 |VI$8039
3708 #REPLACE KEY_PLUS |VI$802B
3709 #REPLACE KEY_MINUS |VI$802D
3710 #REPLACE KEY_EQUAL |VI$803D
3711 #REPLACE KEY_BACK_SLASH |VI$805C
3712 #REPLACE KEY_SLASH |VI$802F
3713
3714 // Define Accelerator key names.
3715 #REPLACE KHELP |CI274
3716 #REPLACE KSAVE_RECORD |CI265
3717 #REPLACE KDELETE_RECORD |CI266
3718 #REPLACE KEXIT_FUNCTION |CI281
3719 #REPLACE KEXIT_APPLICATION |CI282
3720 #REPLACE KPROMPT |CI283
3721 #REPLACE KPRINT_SCREEN |CI258
3722 #REPLACE KCLEAR |CI269
3723 #REPLACE KREFRESH_SCREEN |CI284
3724 #REPLACE KSWITCH |CI285
3725 #REPLACE KSWITCH_BACK |CI286
3726 #REPLACE KFIND |CI263
3727 #REPLACE KFIND_PREVIOUS |CI270
3728 #REPLACE KFIND_NEXT |CI271
3729 #REPLACE KSUPER_FIND |CI264
3730 #REPLACE KSUPER_FIND_PREVIOUS |CI287
3731 #REPLACE KSUPER_FIND_NEXT |CI288
3732 #REPLACE KACTION_BAR |CI289
3733 #REPLACE KENTER |CI257
3734 #REPLACE KUPARROW |CI272
3735 #REPLACE KDOWNARROW |CI273
3736 #REPLACE KLEFTARROW |CI260
3737 #REPLACE KRIGHTARROW |CI261
3738 #REPLACE KSCROLL_BACK |CI290
3739 #REPLACE KSCROLL_FORWARD |CI291
3740 #REPLACE KSCROLL_LEFT |CI292
3741 #REPLACE KSCROLL_RIGHT |CI293
3742 #REPLACE KBEGIN_OF_LINE |CI294
3743 #REPLACE KEND_OF_LINE |CI295
3744 #REPLACE KNEXT_ITEM |CI296
3745 #REPLACE KPREVIOUS_ITEM |CI262
3746 #REPLACE KDELETE_CHARACTER |CI277
3747 #REPLACE KERASE_END_OF_LINE |CI297
3748 #REPLACE KBACK_SPACE |CI278
3749 #REPLACE KCANCEL |CI259
3750 #REPLACE KBEGIN_OF_PANEL |CI298
3751 #REPLACE KEND_OF_PANEL |CI299
3752 #REPLACE KBEGIN_OF_DATA |CI300
3753 #REPLACE KEND_OF_DATA |CI301
3754 #REPLACE KWORD_LEFT |CI302
3755 #REPLACE KWORD_RIGHT |CI303
3756 #REPLACE KINSERT |CI276
3757 #REPLACE KCLEAR_AND_RETURN |CI279
3758 #REPLACE KADD_MODE |CI304
3759 #REPLACE KPASTE |CI305
3760 #REPLACE KCOPY |CI306
3761 #REPLACE KCUT |CI307
3762 #REPLACE KCLEAR_ALL |CI308
3763 #REPLACE KMOUSE |CI309
3764 #REPLACE KMARK |CI310
3765 #REPLACE KZOOM |CI311
3766 #REPLACE KCLOSE_PANEL |CI312
3767
3768 //OLD KEY DEFINITIONS
3769 #REPLACE KCALCULATE |CI267
3770 #REPLACE KUSER |CI268
3771 #REPLACE KUSER2 |CI275
3772 #REPLACE KCLEOW |CI280
3773
3774
3775 //#FREG |CI$01CE STRING PERCENTAGE RETURNS INTEGER
3776
3777 #REPLACE DFLT$VALUE __X__
3778 #REPLACE DFLT$MESSAGE __X__
3779 #REPLACE DFLT$AUX_VALUE __X__
3780 #REPLACE DFLT$SHADOW_STATE __X__
3781 #REPLACE DFLT$SELECT_STATE __X__
3782 #REPLACE DFLT$CHECKBOX_ITEM_STATE __X__
3783 #REPLACE DFLT$AUTOCLEAR_STATE __X__
3784 #REPLACE DFLT$CENTER_STATE __X__
3785 #REPLACE DFLT$ENTRY_STATE __X__
3786 #REPLACE DFLT$ITEM_CHANGED_STATE __X__
3787 #REPLACE DFLT$ITEM_ENTRY_MSG __X__
3788 #REPLACE DFLT$ITEM_EXIT_MSG __X__
3789 #REPLACE DFLT$ITEM_VALIDATE_MSG __X__
3790 #REPLACE DFLT$DATA_FILE __X__
3791 #REPLACE DFLT$DATA_FIELD __X__
3792 #REPLACE DFLT$DATA_WINDOW __X__
3793 #REPLACE DFLT$ITEM_OPTIONS __X__
3794 #REPLACE DFLT$ITEM_OPTION __X__
3795 #REPLACE DFLT$PROMPT_OBJECT __X__
3796 #REPLACE DFLT$ZOOM_OBJECT __X__
3797
3798#IFDEF IS$WINDOWS
3799
3800 // Define all Form properties that require an index (item). If the item parameter
3801 // is omitted item 0 is used as a default. This allows single item objects (e.g. Form)
3802 // to omit the item number. (e.g. Set Password_State to True).
3803
3804 #REPLACE DFLT$FORM_WIDTH __F__
3805 #REPLACE DFLT$FORM_COLOR __F__
3806 #REPLACE DFLT$FORM_DATATYPE __F__
3807 #REPLACE DFLT$FORM_OPTIONS __F__
3808 #REPLACE DFLT$FORM_FONT __F__
3809 #REPLACE DFLT$FORM_ROW __F__
3810 #REPLACE DFLT$FORM_COLUMN __F__
3811 #REPLACE DFLT$FORM_TYPEFACE __F__
3812 #REPLACE DFLT$FORM_FONTHEIGHT __F__
3813 #REPLACE DFLT$FORM_FONTWEIGHT __F__
3814 #REPLACE DFLT$FORM_FONTITALICS __F__
3815 #REPLACE DFLT$FORM_FONTUNDERLINE __F__
3816 #REPLACE DFLT$BUTTON_ASPECT __F__
3817 #REPLACE DFLT$FORM_HEIGHT __F__
3818 #REPLACE DFLT$FORM_GUIWIDTH __F__
3819 #REPLACE DFLT$FORM_GUIHEIGHT __F__
3820 #REPLACE DFLT$FORM_GUIROW __F__
3821 #REPLACE DFLT$FORM_GUICOLUMN __F__
3822 #REPLACE DFLT$FORM_MARGIN __F__
3823 #REPLACE DFLT$FORM_OPTION __F__
3824 #REPLACE DFLT$FORM_STYLE __F__
3825 #REPLACE DFLT$FORM_EXTENDED_STYLE __F__
3826 #REPLACE DFLT$FORM_BORDER __F__
3827 #REPLACE DFLT$PASSWORD_STATE __F__
3828 #REPLACE DFLT$FORM_MASK __F__
3829 #REPLACE DFLT$FORM_BUTTON __F__
3830 #REPLACE DFLT$FORM_BUTTON_VALUE __F__
3831 #REPLACE DFLT$FORM_WINDOW_HANDLE __F__
3832 #REPLACE DFLT$FORM_BUTTON_WINDOW_HANDLE __F__
3833 #REPLACE DFLT$MASKED_VALUE __F__ // these are really form properties
3834 #REPLACE DFLT$UNMASKED_VALUE __F__ // so if no param use 0
3835 #REPLACE DFLT$FORM_JUSTIFICATION_MODE __F__
3836
3837 // These are index (item or form) tem based properties that require two
3838 // parameters in the set statement following the "to". Please do not
3839 // create any more of these kinds of messages
3840 #REPLACE DFLT$2$ITEM_OPTION __2__
3841 #REPLACE DFLT$2$FORM_COLOR __2__
3842 #REPLACE DFLT$2$FORM_STYLE __2__
3843 #REPLACE DFLT$2$FORM_EXTENDED_STYLE __2__
3844
3845#ENDIF
3846
3847
3848
3849 //Reserve$Internal$Functions // this disallows these names to be used in
3850 // in functions, properties or cts.
3851 #REPLACE FN$Abs __F__
3852 #REPLACE FN$Acos __F__
3853 #REPLACE FN$Append __F__
3854 #REPLACE FN$Ascii __F__
3855 #REPLACE FN$Asin __F__
3856 #REPLACE FN$Atan __F__
3857 #REPLACE FN$Center __F__
3858 #REPLACE FN$Character __F__
3859 #REPLACE FN$Cos __F__
3860 #REPLACE FN$Date __F__
3861 #REPLACE FN$Eval __F__
3862 #REPLACE FN$Exp __F__
3863 #REPLACE FN$Hi __F__
3864 #REPLACE FN$If __F__
3865 #REPLACE FN$Insert __F__
3866 #REPLACE FN$Integer __F__
3867 #REPLACE FN$Left __F__
3868 #REPLACE FN$Length __F__
3869 #REPLACE FN$Log __F__
3870 #REPLACE FN$Low __F__
3871 #REPLACE FN$Lowercase __F__
3872 #REPLACE FN$Ltrim __F__
3873 #REPLACE FN$Mid __F__
3874 #REPLACE FN$Mod __F__
3875 #REPLACE FN$Not __F__
3876 #REPLACE FN$Number __F__
3877 #REPLACE FN$Overstrike __F__
3878 #REPLACE FN$Pad __F__
3879 #REPLACE FN$Pos __F__
3880 #REPLACE FN$Random __F__
3881 #REPLACE FN$Real __F__
3882 #REPLACE FN$Remove __F__
3883 #REPLACE FN$Repeat __F__
3884 #REPLACE FN$Replace __F__
3885 #REPLACE FN$Replaces __F__
3886 #REPLACE FN$Right __F__
3887 #REPLACE FN$Round __F__
3888 #REPLACE FN$Rtrim __F__
3889 #REPLACE FN$Sin __F__
3890 #REPLACE FN$Sqrt __F__
3891 #REPLACE FN$String __F__
3892 #REPLACE FN$Tan __F__
3893 #REPLACE FN$Trim __F__
3894 #REPLACE FN$Uppercase __F__
3895
3896 #IFDEF EXTENDED_DATA_TYPES
3897 #REPLACE FN$CurrentDateTime __F__
3898 #REPLACE FN$DateGetDay __F__
3899 #REPLACE FN$DateGetDayofWeek __F__
3900 #REPLACE FN$DateGetDayofYear __F__
3901 #REPLACE FN$DateGetHour __F__
3902 #REPLACE FN$DateGetMinute __F__
3903 #REPLACE FN$DateGetMonth __F__
3904 #REPLACE FN$DateGetSecond __F__
3905 #REPLACE FN$DateGetYear __F__
3906 #REPLACE FN$DateSetDay __F__
3907 #REPLACE FN$DateSetHour __F__
3908 #REPLACE FN$DateSetMinute __F__
3909 #REPLACE FN$DateSetMonth __F__
3910 #REPLACE FN$DateSetSecond __F__
3911 #REPLACE FN$DateSetYear __F__
3912 #REPLACE FN$IsDateValid __F__
3913 #REPLACE FN$SpanDays __F__
3914 #REPLACE FN$SpanHours __F__
3915 #REPLACE FN$SpanMinutes __F__
3916 #REPLACE FN$SpanSeconds __F__
3917 #REPLACE FN$SpanTotalDays __F__
3918 #REPLACE FN$SpanTotalHours __F__
3919 #REPLACE FN$SpanTotalMinutes __F__
3920 #REPLACE FN$SpanTotalSeconds __F__
3921 #REPLACE FN$Addressof __F__
3922 #REPLACE FN$Cast __F__
3923 #REPLACE FN$Convert __F__
3924 #REPLACE FN$InvokeXML __F__
3925 //
3926 #REPLACE FN$Storec __F__
3927 #REPLACE FN$Storew __F__
3928 #REPLACE FN$Storedw __F__
3929 #REPLACE FN$Derefc __F__
3930 #REPLACE FN$Derefw __F__
3931 #REPLACE FN$Derefdw __F__
3932 #REPLACE FN$MemCopy __F__
3933 #REPLACE FN$MemSet __F__
3934
3935 #REPLACE FN$IsSameCOMObject __F__
3936 #REPLACE FN$IsNullCOMObject __F__
3937 #REPLACE FN$NullCOMObject __F__
3938
3939
3940 // 11.0 changes
3941 #REPLACE FN$FindByRowId __F__
3942 #REPLACE FN$GetRowId __F__
3943 #REPLACE FN$NullRowId __F__
3944 #REPLACE FN$IsNullRowId __F__
3945 #REPLACE FN$IsSameRowId __F__
3946 #REPLACE FN$SerializeRowId __F__
3947 #REPLACE FN$DeSerializeRowId __F__
3948 #REPLACE FN$SizeOfArray __F__
3949 #REPLACE FN$ResizeArray __F__
3950 #REPLACE FN$CStringLength __F__
3951 #REPLACE FN$SizeOfType __F__ // size of any data type including structs
3952
3953 // 11.1 changes
3954 #REPLACE FN$BinarySearchArray __F__
3955 #REPLACE FN$CopyArray __F__
3956 #REPLACE FN$CountArray __F__
3957 #REPLACE FN$FillArray __F__
3958 #REPLACE FN$MinArray __F__
3959 #REPLACE FN$MaxArray __F__
3960 #REPLACE FN$ReverseArray __F__
3961 #REPLACE FN$SearchArray __F__
3962 #REPLACE FN$ShuffleArray __F__
3963 #REPLACE FN$SortArray __F__
3964 // 15.0 changes added post 15.0
3965 #REPLACE FN$RemoveFromArray __F__
3966 #REPLACE FN$InsertInArray __F__
3967 #REPLACE FN$RightPos __F__
3968
3969 #ENDIF // is windows
3970
3971 // Object commands
3972 #REPLACE OBJ$INIT $0440
3973 #REPLACE OBJ$CREATE $0441
3974 #REPLACE OBJ$ILIST $0442
3975 #REPLACE OBJ$ITEM $0443
3976 #REPLACE OBJ$ENDILIST $0444
3977 #REPLACE OBJ$ACCLIST $0445 // not used
3978 #REPLACE OBJ$ONKEY $0446
3979 #REPLACE OBJ$ENDALIST $0447 // not used
3980 #REPLACE OBJ$ENDDEFINE $0448 // not used
3981 #REPLACE OBJ$IODISPATCH $0449
3982 #REPLACE OBJ$SET $044A
3983 #REPLACE OBJ$GET $044B
3984 #REPLACE OBJ$SEND $044C
3985 #REPLACE OBJ$FIX $044D // not used
3986 #REPLACE OBJ$END $044E
3987 #REPLACE OBJ$FWDFIX $044F // not used
3988 #REPLACE OBJ$HRET $0450
3989 #REPLACE OBJ$ITEM_EXEC $0451
3990 #REPLACE OBJ$ACCEPT $0452
3991 #REPLACE CREATE$CLASS $0453
3992 #REPLACE HANDLE$FOR $0454
3993 #REPLACE OBJ$END$HANDLER $0455
3994 #REPLACE LOCAL$ARGUMENT $0456
3995 #REPLACE FIND$OBJECT $0457
3996 #REPLACE END$CLASS $0458
3997 #REPLACE CREATE$SUB$PAGE $0459
3998 #REPLACE CLONE$CLASS $045A
3999 #REPLACE OBJ$ENTRY$ITEM $045B
4000 #REPLACE MOVE$SUB$PAGE $045C
4001 #REPLACE OBJ$TIMER $045D
4002 #REPLACE SCREEN$OPT $045E
4003 #REPLACE CREATE$PROPERTY $045F
4004 #REPLACE REDEFINE$SUB$PAGE $0464
4005
4006 //Focus modes:
4007 #REPLACE FOCUSABLE |CI0
4008 #REPLACE NONFOCUSABLE |CI1
4009 #REPLACE POINTER_ONLY |CI2
4010 #REPLACE NO_ACTIVATE |CI3
4011
4012 //Search modes:
4013 #REPLACE FIRST_CHARACTER |CI0
4014 #REPLACE INCREMENTAL |CI1
4015 #REPLACE CAPITAL |CI2
4016 #REPLACE NO_SEARCH |CI3
4017
4018 //Delegation modes:
4019 #REPLACE DELEGATE_TO_PARENT |CI0
4020 #REPLACE NO_DELEGATE_OR_ERROR |CI1
4021 #REPLACE NO_DELEGATION |CI2
4022 #REPLACE RETURN_INVALID_MESSAGE |CI3
4023 #REPLACE DELEGATE_PRIOR_LEVEL |CI4
4024
4025 //Location modes:
4026 #REPLACE ABSOLUTE |CI0
4027 #REPLACE RELATIVE |CI1
4028 #REPLACE ITEM_RELATIVE |CI2
4029
4030 //Sort modes:
4031 #REPLACE ASCENDING |CI0
4032 #REPLACE DESCENDING |CI1
4033
4034 //Select Modes:
4035 #REPLACE NO_SELECT |CI0
4036 #REPLACE SINGLE_SELECT |CI1
4037 #REPLACE MULTI_SELECT |CI2
4038 #REPLACE AUTO_SELECT |CI3
4039
4040 //Entry item options:
4041 #REPLACE IWINDOW $C0A1
4042 #REPLACE IENTRY $C0A2
4043 #REPLACE IEXIT $C0A3
4044 #REPLACE IVALIDATE $C0A4
4045 #REPLACE IZOOM $C0A5
4046 #REPLACE IPROMPT $C0A6
4047
4048 //Import modes
4049 #REPLACE INHERIT 1
4050 #REPLACE NO_OVERWRITE 2
4051
4052 //System integers
4053 #REPLACE CURRENT_OBJECT |VI85
4054 #REPLACE SELF |VI85 // as of 12.0 this is now part of fmac
4055 #REPLACE FORWARD$MESSAGE |VI87
4056 #REPLACE CURRENT_MESSAGE |VI88
4057 #REPLACE TOTAL_OBJECTS |VI89
4058
4059 // Define the desktop objects
4060 #REPLACE NULL_OBJECT |CI0
4061 #REPLACE CLIPBOARD |CI1
4062 #REPLACE CLIPBOARD.N |CI0
4063 //#REPLACE DESKTOP |CI2 // now defined in flex$init
4064 #REPLACE DESKTOP.N |CI0
4065 //#REPLACE END_FUNCTION END_PROCEDURE // now defined in flex$init
4066 //#REPLACE PROCEDURE_RETURN FUNCTION_RETURN // now defined in flex$init
4067 #REPLACE NO_IMAGE |CI-9999
4068
4069 #REPLACE CURRENT |CI-99 //use current item#
4070 #REPLACE TOGGLE_STATE |CI3 //toggle boolean state
4071 #REPLACE UPWARD_DIRECTION |CI0 //scroll up
4072 #REPLACE DOWNWARD_DIRECTION |CI1 //scroll down
4073
4074// #REPLACE GET_SCROLLBAR |CI$4000
4075// #REPLACE GET_CLIPBOARD |CI$4001
4076// #FREG |CI$4000 RETURNS INTEGER
4077// #FREG |CI$4001 RETURNS INTEGER
4078
4079// bumped up for 32-bit msg ids
4080 #REPLACE GET_SCROLLBAR |CI$40000000
4081 #REPLACE GET_CLIPBOARD |CI$40000001
4082 #FREG |CI$40000000 RETURNS INTEGER
4083 #FREG |CI$40000001 RETURNS INTEGER
4084
4085 #REPLACE ERROR_OBJECT_ID |VI100
4086 #REPLACE ERROR_TYPE |VI101
4087
4088 #REPLACE ERROR_CHILD_INHERITS_PARENT |CI0
4089 #REPLACE ERROR_OFF_IN_CHILD |CI1
4090 #REPLACE ERROR_DEFAULT_IN_CHILD |CI2
4091
4092 //deactivate search modes
4093 #REPLACE SCOPE_TYPE |CI1
4094 #REPLACE POPUP_TYPE |CI2
4095 #REPLACE AREA_TYPE |CI3
4096
4097 //add_focus/activate/deactivate/release_focus error return codes
4098 #REPLACE ERROR_ENTERING |CI1
4099 #REPLACE ERROR_EXITING |CI2
4100 #REPLACE ERROR_ACTIVATING |CI3
4101 #REPLACE ERROR_DEACTIVATING |CI4
4102 #REPLACE ERROR_CANT_ACCEPT_FOCUS |CI5
4103 #REPLACE ERROR_CANT_CREATE_TREE |CI6
4104 #REPLACE ERROR_ADD_TO_INACTIVE_OBJECT |CI7
4105 #REPLACE ERROR_NO_FOCUSABLE_CHILDREN |CI8
4106
4107 // modes for peInNeighborHood
4108 #REPLACE nhNo |CI0 // not a neighbor, check to see if parent is neighbor
4109 #REPLACE nhPublic |CI1 // Is a neighbor hood, All descendant objects may address each other
4110 #REPLACE nhPrivate |CI2 // Is a private neighborhood. descendants can not addres each other
4111
4112 // alias data-types. These used to be in dll.pkg but are best defined here.
4113 #REPLACE Pointer Integer // Parameter is a POINTER
4114 #REPLACE DWord Integer // Parameter is a DWORD (32 bits)
4115 #REPLACE Handle DWord // Parameter is a HANDLE (32 bits)
4116 #REPLACE Void_Type Integer // Return type is VOID
4117
4118 // The following set of replacements define the type of load for the
4119 // DLL. Each load type has the standard set of trade offs, speed
4120 // vs memory. A lib that is loaded each time is probable the most memory
4121 // efficient, but suffers from load speed overhead. However, large DLLs
4122 // that are retained in memory are not using system resources as
4123 // efficientry as possible. Note that some DLLs are already in memory.
4124 // The Windows Kernel and USER libs are already loaded by Windows, and
4125 // do not take up more memory.
4126 // These are used by command SET_DEFAULT_CALLTYPE (which is actually rarely if ever used)
4127
4128 #REPLACE LOAD_ON_EACH_USE |CI0 // Load and free on each call (slow)
4129 #REPLACE LOAD_LIBRARY |CI1 // Load Lib on definition
4130 #REPLACE DELETE_ENTRY |CI2 // Delete lib entry in reg DataBase
4131 #REPLACE FREE_LIBRARY |CI4 // Free lib in Reg DataBase
4132 #REPLACE LOAD_ON_USE |CI8 // Load lib on first use (call)
4133
4134
4135
4136
4137 #CHKSUB 1 1 // Verify the UI subsystem.
4138 !A [] OBJ$INIT |CI0 // INITIALIZE_INTERFACE
4139 #FREF OBJ$DESK$NUM !a // Number of desktop dependants
4140#ENDCOMMAND
4141
4142// define all messages used by object system. This is new to VDF7. All messages
4143// are now defined here.
4144
4145// define all runtime messages common to VDF and CM DF
4146
4147// Note: make sure number of lines in command is less than 1024
4148
4149#COMMAND Define$BuiltIn$DF$Messages
4150 CMSG I GET_ACTIVE_STATE |CI$001
4151 CMSG I GET_PARENT |CI$002
4152 CMSG V SET_PARENT |CI$003 I
4153 CMSG I MSG_PAGE_OBJECT |CI$004 I
4154 CMSG I GET_LOCATION |CI$005
4155 CMSG V SET_LOCATION |CI$006 I I
4156 CMSG I GET_ENTRY_MSG |CI$007
4157 CMSG V SET_ENTRY_MSG |CI$008 I
4158 CMSG I GET_EXIT_MSG |CI$009
4159 CMSG V SET_EXIT_MSG |CI$00A I
4160 CMSG V SET_SIZE |CI$00B I I
4161 CMSG I GET_SIZE |CI$00C
4162 CMSG I GET_CURRENT_ITEM |CI$00D
4163 CMSG V SET_CURRENT_ITEM |CI$00E I
4164 CMSG I GET_TOP_ITEM |CI$00F
4165 CMSG V SET_TOP_ITEM |CI$010 I
4166 CMSG S GET_VALUE |CI$011 I
4167 CMSG V SET_VALUE |CI$012 I S
4168 CMSG I GET_MESSAGE |CI$013 I
4169 CMSG V SET_MESSAGE |CI$014 I I
4170 CMSG I GET_ITEM_COUNT |CI$015
4171 CMSG V SET_ITEM_COUNT |CI$016 I
4172 CMSG I GET_SELECT_COUNT |CI$017
4173 CMSG V SET_SELECT_COUNT |CI$018 I
4174 CMSG I GET_MULTI_SELECT_MSG |CI$019
4175 CMSG V SET_MULTI_SELECT_MSG |CI$01A I
4176 CMSG V SET_FOCUS_MODE |CI$01B I
4177 CMSG I GET_FOCUS_MODE |CI$01C
4178 CMSG V SET_VISIBLE_STATE |CI$01D I
4179 CMSG I GET_VISIBLE_STATE |CI$01E
4180 CMSG V SET_SELECT_MODE |CI$01F I
4181 CMSG I GET_SELECT_MODE |CI$020
4182 CMSG V SET_WRAP_STATE |CI$021 I
4183 CMSG I GET_WRAP_STATE |CI$022
4184 CMSG V SET_SHADOW_STATE |CI$023 I I
4185 CMSG I GET_SHADOW_STATE |CI$024 I
4186 CMSG I GET_SELECT_STATE |CI$025 I
4187 CMSG V SET_SELECT_STATE |CI$026 I I
4188 CMSG V SET_AUTOCLEAR_STATE |CI$027 I I
4189 CMSG I GET_AUTOCLEAR_STATE |CI$028 I
4190 CMSG V SET_CENTER_STATE |CI$029 I I
4191 CMSG I GET_CENTER_STATE |CI$02A I
4192 CMSG V SET_CHECKBOX_ITEM_STATE |CI$02B I I
4193 CMSG I GET_CHECKBOX_ITEM_STATE |CI$02C I
4194 CMSG I MSG_STOP_UI |CI$02D
4195 CMSG S MSG_ERROR |CI$02E I
4196 CMSG V MSG_HELP |CI$02F
4197 CMSG V MSG_BELL |CI$030
4198 CMSG V MSG_PAINT |CI$031
4199 CMSG V MSG_NONE |CI$032
4200 CMSG V MSG_EXIT |CI$033
4201 CMSG V MSG_NEXT |CI$034
4202 CMSG V MSG_PULL_RIGHT |CI$035
4203 CMSG V MSG_PULL_LEFT |CI$036
4204 CMSG I MSG_KEY |CI$037 I
4205 CMSG I MSG_INSERT_ITEM |CI$038 I S
4206 CMSG I MSG_ADD_ITEM |CI$039 I S
4207 CMSG V MSG_DELETE_ITEM |CI$03A I
4208 CMSG V MSG_DELETE_DATA |CI$03B
4209 CMSG V MSG_SORT_ITEMS |CI$03C I
4210 CMSG I GET_ITEM_MATCHING |CI$03D S
4211 CMSG I GET_AUX_VALUE |CI$03E I
4212 CMSG V SET_AUX_VALUE |CI$03F I I
4213 CMSG I GET_SEARCH_MODE |CI$040
4214 CMSG V SET_SEARCH_MODE |CI$041 I
4215 CMSG I GET_INVERSE_STATE |CI$042
4216 CMSG V SET_INVERSE_STATE |CI$043 I
4217 CMSG V MSG_SCROLL |CI$044 I I
4218 CMSG V SET_CLASS_COLORS |CI$045 I I I
4219 CMSG I GET_HORIZONTAL_INCREMENT |CI$046
4220 CMSG V SET_HORIZONTAL_INCREMENT |CI$047 I
4221 CMSG V MSG_UP |CI$048
4222 CMSG V MSG_DOWN |CI$049
4223 CMSG V MSG_RIGHT |CI$04A
4224 CMSG V MSG_LEFT |CI$04B
4225 CMSG V MSG_BEGINNING_OF_DATA |CI$04C
4226 CMSG V MSG_END_OF_DATA |CI$04D
4227 CMSG V MSG_BEGINNING_OF_PANEL |CI$04E
4228 CMSG V MSG_END_OF_PANEL |CI$04F
4229 CMSG V MSG_BEGINNING_OF_LINE |CI$050
4230 CMSG V MSG_END_OF_LINE |CI$051
4231 CMSG V MSG_PAGE_UP |CI$052
4232 CMSG V MSG_PAGE_DOWN |CI$053
4233 CMSG V SET_INSERT_MODE |CI$054 I
4234 CMSG V MSG_GOTO_LINE |CI$055 I
4235 CMSG V MSG_MOVE_ABSOLUTE |CI$056 I I
4236 CMSG V MSG_MOVE_RELATIVE |CI$057 I I
4237 CMSG V MSG_MARK_ON |CI$058
4238 CMSG V MSG_PASTE |CI$059 I I I
4239 CMSG V MSG_CUT |CI$05A I I I
4240 CMSG V MSG_COPY |CI$05B I I I
4241 CMSG V MSG_INSERT |CI$05C S
4242 CMSG V MSG_DELETE_CHAR |CI$05D
4243 CMSG V MSG_DELETE_LINE |CI$05E
4244 CMSG V MSG_DELETE_TO_EOL |CI$05F
4245 CMSG I MSG_FIND |CI$060 S
4246 CMSG I MSG_REPLACE |CI$061 S S
4247 CMSG V MSG_PRINT |CI$062
4248 CMSG I GET_MARK |CI$063
4249 CMSG I GET_CHANGED_STATE |CI$064
4250 CMSG V SET_CHANGED_STATE |CI$065 I
4251 CMSG V SET_RIGHT_MARGIN |CI$066 I
4252 CMSG I GET_LINE_COUNT |CI$067
4253 CMSG V SET_STATUS_LINE_STATE |CI$068 I
4254 CMSG V SET_BLOCK_MOUSE_STATE |CI$069 I
4255 CMSG I GET_BLOCK_MOUSE_STATE |CI$06A
4256 CMSG V SET_COLUMN_MODE |CI$06B I
4257 CMSG I GET_COLUMN_MODE |CI$06C
4258 CMSG V SET_FILE_NAME |CI$06D S
4259 CMSG S GET_FILE_NAME |CI$06E
4260 CMSG V MSG_DEFAULT_KEY |CI$06F
4261 CMSG V SET_DYNAMIC_UPDATE_STATE |CI$070 I
4262 CMSG I GET_FOCUS |CI$071
4263 CMSG V MSG_REFRESH_SCREEN |CI$072 I
4264 CMSG V MSG_PREVIOUS |CI$073
4265 CMSG V SET_CHECK_STRING |CI$074 S S
4266 CMSG I MSG_ACTIVATE |CI$075 V
4267 CMSG I MSG_ACTIVATE_GROUP |CI$076
4268 CMSG I GET_MSG_DEACTIVATE |CI$077 I // <<< Awful hack!
4269 CMSG I MSG_DEACTIVATE |CI$077 I // <<< Awful hack!
4270 CMSG I MSG_DEACTIVATE_GROUP |CI$078
4271 CMSG V SET_LOCAL_ROTATE_STATE |CI$079 I
4272 CMSG I GET_LOCAL_ROTATE_STATE |CI$07A
4273 CMSG V SET_CLIENT_AREA_STATE |CI$07B I
4274 CMSG I GET_CLIENT_AREA_STATE |CI$07C
4275 CMSG I GET_READ_ONLY_STATE |CI$07D
4276 CMSG V SET_READ_ONLY_STATE |CI$07E I
4277 CMSG V SET_LINE_WIDTH |CI$07F I I
4278 CMSG I GET_LINE_SIZE |CI$080
4279 CMSG I GET_DISPLAY_SIZE |CI$081
4280 CMSG V SET_SCROLL_BAR_VISIBLE_STATE |CI$082 I
4281 CMSG V SET_ORIGIN |CI$083 I I
4282 CMSG I GET_ORIGIN |CI$084
4283 CMSG I GET_POSITION |CI$085
4284 CMSG I MSG_TRUE |CI$086
4285 CMSG I MSG_FALSE |CI$087
4286 CMSG I MSG_LAST_KEY_PRESSED |CI$088
4287 CMSG V SET_RADIO_STRING |CI$089 S S
4288 CMSG V SET_ENTRY_STATE |CI$08A I I
4289 CMSG I GET_ENTRY_STATE |CI$08B I
4290 CMSG V MSG_READ |CI$08C
4291 CMSG V MSG_WRITE |CI$08D
4292 CMSG V SET_SCROLL_BAR_OFFSET |CI$08E I
4293 CMSG I GET_SCROLL_BAR_OFFSET |CI$08F
4294 CMSG I MSG_ITEM_CHANGE |CI$090 I I
4295 CMSG I GET_ITEM_CHANGED_STATE |CI$091 I
4296 CMSG V SET_ITEM_CHANGED_STATE |CI$092 I I
4297 CMSG I GET_AUTO_TOP_ITEM_STATE |CI$093
4298 CMSG V SET_AUTO_TOP_ITEM_STATE |CI$094 I
4299 CMSG V SET_KBD_INPUT_MODE |CI$095 I
4300 CMSG I MSG_SUPPLY_KEY |CI$096 I
4301 CMSG I GET_INSERT_MODE |CI$097
4302 CMSG I MSG_OK |CI$098
4303 CMSG I MSG_CANCEL |CI$099
4304 CMSG Q GET_ARRAY_VALUE |CI$09A I // This has a ghost untyped parameter
4305 CMSG V SET_ARRAY_VALUE |CI$09B I Q // This has a ghost untyped parameter
4306 CMSG V MSG_CONSTRUCT_OBJECT |CI$09C
4307 CMSG I MSG_ACTIVATING |CI$09D
4308 CMSG V MSG_TRACE_SWITCH |CI$09E I I
4309 CMSG V MSG_TRACE_MESSAGE |CI$09F
4310 CMSG V MSG_TRACE_STEP |CI$0A0 I
4311 CMSG V MSG_TRACE_OUTPUT |CI$0A1 S
4312 CMSG I MSG_DEACTIVATING |CI$0A2
4313 CMSG I GET_CLASS |CI$0A3
4314 CMSG S GET_HELP_NAME |CI$0A4
4315 CMSG V MSG_EXIT_APPLICATION |CI$0A5
4316 CMSG V MSG_PRINT_SCREEN |CI$0A6 S
4317 CMSG I GET_RIGHT_MARGIN |CI$0A7
4318 CMSG I GET_DELEGATION_MODE |CI$0A8
4319 CMSG V SET_DELEGATION_MODE |CI$0A9 I
4320 CMSG I GET_BASE_CLASS |CI$0AA
4321 CMSG V SET_ITEM_ENTRY_MSG |CI$0AB I I
4322 CMSG I GET_ITEM_ENTRY_MSG |CI$0AC I
4323 CMSG V SET_ITEM_EXIT_MSG |CI$0AD I I
4324 CMSG I GET_ITEM_EXIT_MSG |CI$0AE I
4325 CMSG V SET_ITEM_VALIDATE_MSG |CI$0AF I I
4326 CMSG I GET_ITEM_VALIDATE_MSG |CI$0B0 I
4327 CMSG V SET_DATA_FILE |CI$0B1 I I
4328 CMSG I GET_DATA_FILE |CI$0B2 I
4329 CMSG V SET_DATA_FIELD |CI$0B3 I I
4330 CMSG I GET_DATA_FIELD |CI$0B4 I
4331 CMSG V SET_DATA_WINDOW |CI$0B5 I I
4332 CMSG I GET_DATA_WINDOW |CI$0B6 I
4333 CMSG V SET_ITEM_OPTIONS |CI$0B7 I I
4334 CMSG I GET_ITEM_OPTIONS |CI$0B8 I
4335 CMSG V SET_ITEM_OPTION |CI$0B9 I I I
4336 CMSG I GET_ITEM_OPTION |CI$0BA I I
4337 CMSG V MSG_ENTRY_UPDATE |CI$0BB I I
4338 CMSG V MSG_ENTRY_FIND |CI$0BC I
4339 CMSG V MSG_ENTRY_SUPERFIND |CI$0BD I I
4340 CMSG V MSG_ENTRY_DISPLAY |CI$0BE I I
4341 CMSG V MSG_ENTRY_CLEAR |CI$0BF I
4342 CMSG I GET_VALIDATE_ITEMS |CI$0C0 I
4343 CMSG I GET_ITEM_WINDOW |CI$0C1 // takes no params?
4344 CMSG V MSG_COPY_ITEMS |CI$0C2 * // sav_cur_obj - params on the flex stack
4345 CMSG I GET_IMAGE_NUMBER |CI$0C3 // 6/2/98 5:39
4346 CMSG V MSG_ENTRY_CLEAR_ALL |CI$0C4 I
4347 CMSG V MSG_SELECT_TOGGLING |CI$0C5 I I
4348 CMSG I GET_ITEM_ENTRY |CI$0C6 I
4349 CMSG I GET_ITEM_EXIT |CI$0C7 I
4350 CMSG I GET_ITEM_VALIDATE |CI$0C8 I
4351 CMSG I GET_READ_ONLY_ERROR |CI$0C9 I I
4352 CMSG S GET_NAME |CI$0CA
4353 CMSG I GET_ENTRY |CI$0CB
4354 CMSG V MSG_DESTROY_OBJECT |CI$0CC V
4355 CMSG V MSG_DESTROY_ALL_OBJECTS |CI$0CD
4356 CMSG I GET_MOUSE_HIT |CI$0CE
4357 CMSG V SET_OBJECT_COLOR |CI$0CF I I
4358 CMSG V SET_ARROWS |CI$0D0 I I I
4359 CMSG V MSG_SWITCH |CI$0D1
4360 CMSG V MSG_SWITCH_BACK |CI$0D2
4361 CMSG I GET_WAS_FOUND |CI$0D3 I // Invalid coding.
4362 CMSG I GET_STATUS_LINE_STATE |CI$0D4
4363 CMSG V SET_HIGHLIGHT_STATE |CI$0D5 I
4364 CMSG V MSG_ROTATE_UP |CI$0D6
4365 CMSG V MSG_POP_PAGES |CI$0D7
4366 CMSG V SET_CLASS |CI$0D8 I
4367 CMSG V MSG_FETCH_HELP |CI$0D9
4368 CMSG I GET_OBJECT_ID |CI$0DA
4369 CMSG V MSG_INIT_INSTANCE |CI$0DB
4370 CMSG I MSG_PAGE |CI$0DC I
4371 CMSG I MSG_PAGE_DELETE |CI$0DD
4372 CMSG I GET_COLORS |CI$0DE
4373 CMSG I GET_BAR_LOCATION |CI$0DF
4374 CMSG V RETURN_LOCATION |CI$0E0 // called from "C" only. 2 pointer to ints.
4375 CMSG V CHANGE_LOCATION |CI$0E1 // called from "C" only. 2 pointer to ints.
4376 CMSG V MSG_WRITE_DBMS |CI$0E2 * // variable params, pushed on to flex stack
4377 CMSG V MSG_READ_DBMS |CI$0E3 * // variable params, pushed on to flex stack.
4378 CMSG S GET_STRING_VALUE |CI$0E4 I
4379 CMSG N GET_NUMBER_VALUE |CI$0E5 I
4380 CMSG D GET_DATE_VALUE |CI$0E6 I
4381 CMSG I GET_INTEGER_VALUE |CI$0E7 I
4382 CMSG R GET_REAL_VALUE |CI$0E8 I
4383 CMSG V SET_BASE_ITEM |CI$0E9 I
4384 CMSG I GET_BASE_ITEM |CI$0EA
4385 CMSG V SET_ITEM_LIMIT |CI$0EB I
4386 CMSG I GET_ITEM_LIMIT |CI$0EC
4387 CMSG V MSG_MARK_OFF |CI$0ED
4388 CMSG V SET_SEARCH_CASE |CI$0EE I
4389 CMSG V SET_PRIOR_FOCUS |CI$0EF I
4390 CMSG I GET_PRIOR_FOCUS |CI$0F0
4391 CMSG V SET_NEXT_FOCUS |CI$0F1 I
4392 CMSG I GET_NEXT_FOCUS |CI$0F2
4393 CMSG V SET_SCROLLBAR |CI$0F3 I
4394 CMSG I GET_ASCII_STATE |CI$0F4
4395 CMSG V SET_ASCII_STATE |CI$0F5 I
4396 CMSG I GET_TEXT_INDENT |CI$0F6
4397 CMSG V SET_TEXT_INDENT |CI$0F7 I
4398 CMSG V MSG_ENTRY_AUTOFIND |CI$0F8 I
4399 CMSG V SET_SCOPE_STATE |CI$0F9 I
4400 CMSG I GET_SCOPE_STATE |CI$0FA
4401 CMSG V MSG_MOUSE_CHANGE_FOCUS |CI$0FB I
4402 CMSG I GET_CHILD_COUNT |CI$0FC
4403 CMSG V MSG_MOUSE_UP |CI$0FD I I
4404 CMSG V MSG_MOUSE_UP2 |CI$0FE I I
4405 CMSG V MSG_MOUSE_UP3 |CI$0FF I I
4406 CMSG V MSG_MOUSE_CLICK |CI$100 I I
4407 CMSG V MSG_MOUSE_CLICK2 |CI$101 I I
4408 CMSG V MSG_MOUSE_CLICK3 |CI$102 I I
4409 CMSG V MSG_MOUSE_DOWN |CI$103 I I
4410 CMSG V MSG_MOUSE_DOWN2 |CI$104 I I
4411 CMSG V MSG_MOUSE_DOWN3 |CI$105 I I
4412 CMSG V MSG_MOUSE_DRAG |CI$106 I I
4413 CMSG V MSG_MOUSE_DRAG2 |CI$107 I I
4414 CMSG V MSG_MOUSE_DRAG3 |CI$108 I I
4415 CMSG I GET_ABSOLUTE_MOUSE_LOCATION |CI$109
4416 CMSG V SET_ABSOLUTE_MOUSE_LOCATION |CI$10A I I I
4417 CMSG I GET_DYNAMIC_UPDATE_STATE |CI$10B
4418 CMSG V SET_MAX_LINES |CI$10C I
4419 CMSG I GET_MAX_LINES |CI$10D
4420 CMSG V MSG_VIRTUAL_CONSOLE |CI$10E
4421 CMSG I GET_NEXT_ENTRY_OK |CI$10F
4422 CMSG I GET_PREVIOUS_ENTRY_OK |CI$110
4423 CMSG V SET_DYNAMIC_COLORS |CI$111 I I
4424 CMSG V SET_NEW_ITEM |CI$112 I
4425 CMSG V SET_BROADCAST_STATE |CI$113 I
4426 CMSG I GET_BROADCAST_STATE |CI$114
4427 CMSG I GET_WRAPPING |CI$115
4428 CMSG I GET_ROW_CHANGING |CI$116 I I
4429 CMSG V MSG_ADD_FOCUS |CI$117 I
4430 CMSG V MSG_REMOVE_OBJECT |CI$118
4431 CMSG V MSG_RELEASE_FOCUS |CI$119
4432 CMSG I MSG_ENTERING |CI$11A
4433 CMSG I MSG_EXITING |CI$11B I
4434 CMSG I MSG_ENTERING_SCOPE |CI$11C
4435 CMSG I MSG_EXITING_SCOPE |CI$11D I
4436 CMSG V MSG_SWITCH_NEXT_GROUP |CI$11E
4437 CMSG V MSG_SWITCH_PRIOR_GROUP |CI$11F
4438 CMSG I GET_CURRENT_SCOPE |CI$120
4439 CMSG V SET_CURRENT_SCOPE |CI$121 I
4440 CMSG V MSG_POPUP |CI$122
4441 CMSG V MSG_POPUP_GROUP |CI$123
4442 CMSG V SET_POPUP_STATE |CI$124 I
4443 CMSG I GET_POPUP_STATE |CI$125
4444 CMSG V SET_RING_STATE |CI$126 I
4445 CMSG I GET_RING_STATE |CI$127
4446 CMSG V MSG_MOVE_FOCUS_TREE |CI$128 I
4447 CMSG V SET_PROMPT_OBJECT |CI$129 I I
4448 CMSG I GET_PROMPT_OBJECT |CI$12A I
4449 CMSG V SET_ZOOM_OBJECT |CI$12B I I
4450 CMSG I GET_ZOOM_OBJECT |CI$12C I
4451 CMSG I GET_PRIOR_LEVEL |CI$12D
4452 CMSG I GET_NEXT_LEVEL |CI$12E
4453 CMSG I GET_PRIOR_SCOPE |CI$12F
4454 CMSG I GET_NEXT_SCOPE |CI$130
4455 CMSG V MSG_SWITCH_PRIOR_SCOPE |CI$131
4456 CMSG V MSG_SWITCH_NEXT_SCOPE |CI$132
4457 CMSG V SET_ATTACH_PARENT_STATE |CI$133 I
4458 CMSG I GET_ATTACH_PARENT_STATE |CI$134
4459 CMSG V MSG_CHILD_WRAPPING |CI$135 I
4460 CMSG V SET_DISPLAY_MODE |CI$136 I I
4461 CMSG I GET_DISPLAY_MODE |CI$137 I
4462 CMSG V MSG_COLOR_BLOCK |CI$138 I I
4463 CMSG V MSG_NEXT_OBJECT |CI$139
4464 CMSG V MSG_PRIOR_OBJECT |CI$13A
4465 CMSG V SET_APPLICATION_NAME |CI$13B S
4466 CMSG S GET_APPLICATION_NAME |CI$13C
4467 CMSG V SET_MODULE_NAME |CI$13D S
4468 CMSG S GET_MODULE_NAME |CI$13E
4469 CMSG I GET_LAST_CHILD |CI$13F
4470 CMSG V SET_WINDOW_COLOR |CI$140 I I
4471 CMSG I GET_WINDOW_COLOR |CI$141 I
4472 CMSG I MSG_PROCESS_KEY |CI$142 I
4473 CMSG V MSG_ACTIVATE_SCOPE |CI$143
4474 CMSG I GET_FIND_SCOPE |CI$144
4475 CMSG I GET_SCOPE_FOCUS |CI$145
4476 CMSG I GET_VALID_ITEM |CI$146 I
4477 CMSG V MSG_UPDATE_DISPLAY |CI$147
4478 CMSG V SET_ITEM |CI$148 I
4479 CMSG V MSG_TRACE_COMMAND |CI$149
4480 CMSG I GET_OBJECT_COLOR |CI$14A
4481 CMSG V SET_OBJECT_VALIDATION |CI$14B I
4482 CMSG I GET_OBJECT_VALIDATION |CI$14C
4483 CMSG I GET_NEXT_OBJECT_ID |CI$14D I
4484 CMSG I GET_PRIOR_OBJECT_ID |CI$14E I
4485 CMSG I GET_CLASS_COLORS |CI$14F I
4486 CMSG I GET_LOCATION_TYPE |CI$150
4487 CMSG I GET_OBJECT_SIZE |CI$151
4488 CMSG I GET_IN_USE_STATE |CI$152
4489 CMSG V SET_IN_USE_STATE |CI$153 I
4490 CMSG V MSG_ATTACH_DEO_TO_SERVER |CI$154
4491 CMSG V MSG_REQUEST_CLEAR_ALL |CI$155
4492 CMSG V MSG_CLEAR |CI$156
4493 CMSG V SET_CURRENT_RECORD |CI$157 I
4494 CMSG I GET_CURRENT_RECORD |CI$158
4495 CMSG V MSG_REBUILD_CONSTRAINTS |CI$159
4496 CMSG V MSG_CONSTRAIN |CI$15A
4497 CMSG V SET_MAIN_FILE |CI$15B I
4498 CMSG I GET_MAIN_FILE |CI$15C
4499 CMSG I GET_FIND_SERVER |CI$15D
4500 CMSG I GET_LOCATE_SERVER |CI$15E
4501 CMSG V MSG_MARK_AS_COMPONENT |CI$15F
4502 CMSG V MSG_DELETING |CI$160
4503 CMSG I GET_VALIDATE_DELETE |CI$161
4504 CMSG V MSG_REQUEST_DELETE |CI$162
4505 CMSG V MSG_DISPLAY |CI$163
4506 CMSG V MSG_RELATE_MAIN_FILE |CI$164
4507 CMSG V MSG_CLEAR_UI |CI$165
4508 CMSG V MSG_DISPLAY_UI |CI$166
4509 CMSG V MSG_REQUEST_ASSIGN |CI$167 I
4510 CMSG I GET_VALIDATE_SAVE |CI$168
4511 CMSG V MSG_ATTACH_MAIN_FILE |CI$169
4512 CMSG V MSG_REQUEST_CLEAR |CI$16A
4513 CMSG V MSG_BACKOUT |CI$16B
4514 CMSG V MSG_UPDATE |CI$16C
4515 CMSG V MSG_SAVE_MAIN_FILE |CI$16D
4516 CMSG V MSG_DELETE_MAIN_FILE |CI$16E
4517 CMSG I GET_ENTRY_PERMISSIVE_STATE |CI$16F
4518 CMSG V SET_ENTRY_PERMISSIVE_STATE |CI$170 I
4519 CMSG V SET_ORDERING |CI$171 I
4520 CMSG I GET_ORDERING |CI$172
4521 CMSG I GET_COMPONENT_STATE |CI$173
4522 CMSG V SET_COMPONENT_STATE |CI$174 I
4523 CMSG I GET_HAS_COMPONENTS_STATE |CI$175
4524 CMSG V SET_HAS_COMPONENTS_STATE |CI$176 I
4525 CMSG V MSG_REQUEST_SAVE |CI$177
4526 CMSG V MSG_REMOVE_FOCUS |CI$178
4527 CMSG V MSG_ATTACH_SERVER |CI$179 I
4528 CMSG V MSG_DETACH_SERVER |CI$17A I
4529 CMSG V MSG_ATTACH_CLIENT |CI$17B I
4530 CMSG V MSG_DETACH_CLIENT |CI$17C I
4531 CMSG V MSG_ADD_USER_INTERFACE |CI$17D V
4532 CMSG V MSG_REMOVE_USER_INTERFACE |CI$17E V
4533 CMSG V MSG_MAIN_FILE_CHANGED |CI$17F I
4534 CMSG I GET_IS_SUPERFIND_REQUIRED |CI$180 I
4535 CMSG V MSG_REQUEST_FIND |CI$181 I I I
4536 CMSG V MSG_ADD_PARENT_FILE |CI$182 I
4537 CMSG V MSG_REMOVE_PARENT_FILE |CI$183 I
4538 CMSG V MSG_REQUEST_SUPERFIND |CI$184 I I I
4539 CMSG V MSG_REQUEST_READ |CI$185 I I I
4540 CMSG V MSG_READ_BY_RECNUM |CI$186 I I
4541 CMSG V MSG_FIND_BY_RECNUM |CI$187 I I
4542 CMSG V MSG_ESTABLISH_FIND_DIRECTION |CI$188 I I I
4543 CMSG V MSG_LOCATE_NEXT |CI$189
4544 CMSG I GET_RECORD_NOT_FOUND |CI$18A I
4545 CMSG V MSG_INIT_CLASS |CI$18B
4546 CMSG V SET_IMAGE_NUMBER |CI$18C I
4547 CMSG I GET_ROW |CI$18D I
4548 CMSG I GET_CURRENT_ROW |CI$18E
4549 CMSG I GET_TOP_ROW |CI$18F
4550 CMSG I GET_BOTTOM_ITEM |CI$190
4551 CMSG I GET_BOTTOM_ROW |CI$191
4552 CMSG I GET_ROW_COUNT |CI$192
4553 CMSG I GET_DISPLAYABLE_ROWS |CI$193
4554 CMSG V MSG_ADD_ROW |CI$194 I
4555 CMSG V MSG_INSERT_ROW |CI$195 I I
4556 CMSG V SET_PALETTE_COLOR |CI$196 I I I
4557 CMSG I GET_PALETTE_COLOR |CI$197 I I
4558 CMSG V SET_CLASS_PALETTE |CI$198 I I
4559 CMSG I GET_CLASS_PALETTE |CI$199 I
4560 CMSG I GET_NO_DELETE_STATE |CI$19A
4561 CMSG V SET_NO_DELETE_STATE |CI$19B I
4562 CMSG V MSG_REQUEST_ENTRY_UPDATE |CI$19C I I
4563 CMSG V MSG_SCROLL_PAINT |CI$19D
4564 CMSG V MSG_SHOW_ITEM |CI$19E I
4565 CMSG V SET_EXTERNAL_PAINT_STATE |CI$19F I
4566 CMSG I GET_EXTERNAL_PAINT_STATE |CI$1A0
4567 CMSG V SET_MATRIX_SIZE |CI$1A1 I I
4568 CMSG I GET_MATRIX_SIZE |CI$1A2
4569 CMSG V SET_SKIP_STATE |CI$1A3 I
4570 CMSG I GET_SKIP_STATE |CI$1A4
4571 CMSG I GET_REQUEST_VALIDATE |CI$1A5
4572 CMSG I GET_AUTO_FILL_STATE |CI$1A6
4573 CMSG V SET_AUTO_FILL_STATE |CI$1A7 I
4574 CMSG I GET_FIND_PERMISSIVE_STATE |CI$1A8
4575 CMSG V SET_FIND_PERMISSIVE_STATE |CI$1A9 I
4576 CMSG V MSG_TRANSACTION_ABORTED |CI$1AA I
4577 CMSG V MSG_CLEAR_ALL |CI$1AB
4578 CMSG V MSG_CREATING |CI$1AC
4579 CMSG V MSG_DESTROYING |CI$1AD
4580 CMSG I GET_SHOULD_SAVE |CI$1AE
4581 CMSG I GET_WHICH_DATA_SET |CI$1AF I
4582 CMSG I GET_VALIDATE_CONSTRAINTS |CI$1B0
4583 CMSG V MSG_ERROR_REPORT |CI$1B1 V
4584 CMSG V MSG_REQUEST_RELATE |CI$1B2 I
4585 CMSG S GET_ERROR_TEXT |CI$1B3 I
4586 CMSG I GET_SUGGESTED_ORDERING |CI$1B4
4587 CMSG V SET_SUGGESTED_ORDERING |CI$1B5 I
4588 CMSG I GET_NO_RELATE_STATE |CI$1B6
4589 CMSG V SET_NO_RELATE_STATE |CI$1B7 I
4590 CMSG I GET_WINDOW_LOCATION |CI$1B8 I
4591 CMSG I GET_SIGNON_STATUS |CI$1B9
4592 CMSG V MSG_ADD_WATCHER |CI$1BA I
4593 CMSG V MSG_REMOVE_WATCHER |CI$1BB I
4594 CMSG I GET_SEARCH_CASE |CI$1BC
4595 CMSG I GET_SHOULD_SAVE_ROW |CI$1BD
4596 CMSG V MSG_DISPLAY_STATUS |CI$1BE S
4597 CMSG V MSG_CLEAR_SET |CI$1BF
4598 CMSG I GET_AUTOFIND_ITEM |CI$1C0
4599 CMSG V SET_KEY_PATH |CI$1C1 I
4600 CMSG I GET_KEY_PATH |CI$1C2
4601 CMSG I GET_CAN_DELETE |CI$1C3
4602 CMSG V MSG_UPDATE_DEPENDENT_ITEMS |CI$1C4
4603 CMSG I GET_SUPERFIND_FIELD |CI$1C5 I I
4604 CMSG V MSG_REFRESH |CI$1C6 I
4605 CMSG V MSG_PROCESS_ACCELERATOR |CI$1C7 I I
4606 CMSG I GET_ERROR_TEXT_AVAILABLE |CI$1C8 I
4607 CMSG I GET_PROTOTYPE_OBJECT |CI$1C9
4608 CMSG V MSG_REFIND_RECORDS |CI$1CA
4609 CMSG V MSG_END_CONSTRUCT_OBJECT |CI$1CB
4610 CMSG V MSG_CLEAR_MAIN_FILE |CI$1CC
4611 CMSG V MSG_REQUEST_CLEAR_FILE |CI$1CD I
4612 CMSG I GET_CALLBACK |CI$1CE S I
4613 CMSG I GET_IS_CRITICAL |CI$1CF I
4614 CMSG I GET_VIRTUAL_CONSOLE |CI$1D0
4615 CMSG V SET_VIRTUAL_CONSOLE |CI$1D1 I
4616 CMSG I GET_KBD_INPUT_MODE |CI$1D2
4617 CMSG I GET_VERIFY_RETRY |CI$1D3
4618
4619 // added to VDF 8.2
4620 CMSG I GET_PENEIGHBORHOOD |CI$0539 // get peNeighborHood to eHood
4621 CMSG I SET_PENEIGHBORHOOD |CI$053A // set peNeighborHood to nhPrivate|nhPublic|nhNo
4622 CMSG I GET_ONCHILDWRAPPING |CI$053B // get onChildWrapping hoDest bDown to hoNewDest
4623 CMSG I GET_CONTAINSFOCUS |CI$053C // get ContainsFocus to bHasFocus
4624 CMSG I GET_RINGPARENT |CI$053D // get RingParent to hoRingOwner
4625 CMSG I GET_ISCOLUMNVISIBLE |CI$053e // get IsColumnVisible iColumn to bIsVisible
4626 CMSG I MSG_DOMAKECOLUMNVISIBLE |CI$053f // Send DoMakeColumnVisible iColumn
4627 CMSG I GET_PBAUTOFILLFROMFIRST |CI$0540 // Get/Set pbAutoFillFromFirst to bFirst (true=dflt)
4628 CMSG I SET_PBAUTOFILLFROMFIRST |CI$0541
4629 CMSG I GET_PBINHERITCONSTRAINTS |CI$057A // should DSO/DDO inherit constraints from servers (dflt=true)
4630 CMSG I SET_PBINHERITCONSTRAINTS |CI$057B
4631
4632#ENDCOMMAND
4633
4634// define all runtime messages used just by VDF
4635// Note: make sure number of lines in command is less than 1024
4636#COMMAND Define$BuiltIn$VDF$Messages
4637
4638 CMSG I GET_FONT |CI$1D4
4639 CMSG V SET_MAP_MODE |CI$1D5 I
4640 CMSG I GET_MAP_MODE |CI$1D6
4641 CMSG V SET_TYPEFACE |CI$1D7 S
4642 CMSG S GET_TYPEFACE |CI$1D8
4643 CMSG V SET_FONTSIZE |CI$1D9 I I
4644 CMSG I GET_FONTSIZE |CI$1DA
4645 CMSG V SET_FONTWEIGHT |CI$1DB I
4646 CMSG I GET_FONTWEIGHT |CI$1DC
4647 CMSG V SET_FONTITALICS |CI$1DD I
4648 CMSG I GET_FONTITALICS |CI$1DE
4649 CMSG V SET_FONTUNDERLINE |CI$1DF I
4650 CMSG I GET_FONTUNDERLINE |CI$1E0
4651 CMSG I GET_FOREIGNLINK |CI$1E1
4652 CMSG V SET_FOREIGNLINK |CI$1E2 I
4653 CMSG I GET_ACKSTATE |CI$1E3
4654 CMSG V SET_ACKSTATE |CI$1E4 I
4655 CMSG I GET_LINKTEMPERATURE |CI$1E5
4656 CMSG V SET_LINKTEMPERATURE |CI$1E6 I
4657 CMSG I GET_RETRYCOUNT |CI$1E7
4658 CMSG V SET_RETRYCOUNT |CI$1E8 I
4659 CMSG I GET_DDE_INITIATE |CI$1E9 I S
4660 CMSG S GET_SESS_REQUEST |CI$1EA S
4661 CMSG I GET_SESS_RECEIVE |CI$1EB S S
4662 CMSG I GET_SESS_TERMINATE |CI$1EC
4663 CMSG I GET_SESS_EXECUTE |CI$1ED S
4664 CMSG I GET_SESS_CONNECT |CI$1EE S S
4665 CMSG S GET_SESS_READ |CI$1EF S
4666 CMSG I GET_SESS_WRITE |CI$1F0 S S
4667 CMSG I GET_SESS_DISCONNECT |CI$1F1
4668 CMSG I GET_SESS_PERFORM |CI$1F2 S
4669 CMSG I GET_PRIVATEFOREIGNLINK |CI$1F3
4670 CMSG V SET_PRIVATEFOREIGNLINK |CI$1F4 I
4671 CMSG I GET_GUILOCATION |CI$1F5
4672 CMSG V SET_GUILOCATION |CI$1F6 I I
4673 CMSG I GET_MAP_RATIOS |CI$1F7
4674 CMSG V SET_MAP_RATIOS |CI$1F8 I I
4675 CMSG I GET_BORDER_STYLE |CI$1F9
4676 CMSG V SET_BORDER_STYLE |CI$1FA I
4677 CMSG I GET_CLIPPING_MODE |CI$1FB
4678 CMSG V SET_CLIPPING_MODE |CI$1FC I
4679 CMSG I GET_CAPTION_BAR |CI$1FD
4680 CMSG V SET_CAPTION_BAR |CI$1FE I
4681 CMSG I GET_MINIMIZE_ICON |CI$1FF
4682 CMSG V SET_MINIMIZE_ICON |CI$200 I
4683 CMSG I GET_MAXIMIZE_ICON |CI$201
4684 CMSG V SET_MAXIMIZE_ICON |CI$202 I
4685 CMSG I GET_SYSMENU_ICON |CI$203
4686 CMSG V SET_SYSMENU_ICON |CI$204 I
4687 CMSG I GET_VIEW_MODE |CI$205
4688 CMSG V SET_VIEW_MODE |CI$206 I
4689 CMSG I GET_BORDER_WIDTH |CI$207
4690 CMSG V SET_BORDER_WIDTH |CI$208 I
4691 CMSG I GET_SCROLL_RANGE |CI$209
4692 CMSG V SET_SCROLL_RANGE |CI$20A I I
4693 CMSG I GET_PAGESIZE |CI$20B
4694 CMSG V SET_PAGESIZE |CI$20C I
4695 CMSG I GET_LINESIZE |CI$20D
4696 CMSG V SET_LINESIZE |CI$20E I
4697 CMSG I GET_COLUMN_WIDTH |CI$20F
4698 CMSG V SET_COLUMN_WIDTH |CI$210 I
4699 CMSG I GET_SORTED_STATE |CI$211
4700 CMSG V SET_SORTED_STATE |CI$212 I
4701 CMSG I GET_UNDO |CI$213
4702 CMSG I GET_ITEM_TYPE |CI$214 I
4703 CMSG V SET_ITEM_TYPE |CI$215 I I
4704 CMSG I GET_SELECTED_OBJECTID |CI$216
4705 CMSG V SET_FORM_WIDTH |CI$217 I I
4706 CMSG I GET_FORM_WIDTH |CI$218 I
4707 // This message isn't really used anymore, except once in the IDE.
4708 CMSG V SET_FORM_COLOR |CI$219 I I I
4709 CMSG I GET_FORM_COLOR |CI$21A I
4710 CMSG V SET_FORM_DATATYPE |CI$21B I I
4711 CMSG I GET_FORM_DATATYPE |CI$21C I
4712 CMSG V SET_FORM_OPTIONS |CI$21D I I
4713 CMSG I GET_FORM_OPTIONS |CI$21E I
4714 CMSG V SET_FORM_FONT |CI$21F I I
4715 CMSG I GET_FORM_FONT |CI$220 I
4716 CMSG V SET_FORM_ROW |CI$221 I I
4717 CMSG I GET_FORM_ROW |CI$222 I
4718 CMSG V SET_FORM_COLUMN |CI$223 I I
4719 CMSG I GET_FORM_COLUMN |CI$224 I
4720 CMSG V SET_JUSTIFICATION_MODE |CI$225 I
4721 CMSG I GET_JUSTIFICATION_MODE |CI$226
4722 CMSG V SET_FORM_TYPEFACE |CI$227 I S
4723 CMSG S GET_FORM_TYPEFACE |CI$228 I
4724 CMSG V SET_FORM_FONTHEIGHT |CI$229 I I
4725 CMSG I GET_FORM_FONTHEIGHT |CI$22A I
4726 CMSG V SET_FORM_FONTWEIGHT |CI$22B I I
4727 CMSG I GET_FORM_FONTWEIGHT |CI$22C I
4728 CMSG V SET_FORM_FONTITALICS |CI$22D I I
4729 CMSG I GET_FORM_FONTITALICS |CI$22E I
4730 CMSG V SET_FORM_FONTUNDERLINE |CI$22F I I
4731 CMSG I GET_FORM_FONTUNDERLINE |CI$230 I
4732 CMSG V SET_NAME |CI$231 S
4733 CMSG V SET_BITMAP |CI$232 S
4734 CMSG V SET_BUTTON_ASPECT |CI$233 I I
4735 CMSG I GET_BUTTON_ASPECT |CI$234 I
4736 CMSG V SET_BUTTON_POSITION |CI$235 I
4737 CMSG I GET_BUTTON_POSITION |CI$236
4738 CMSG I GET_ITEM_COLOR |CI$237 I
4739 CMSG I GET_BANDED_OBJECT |CI$238
4740 CMSG V SET_FORM_HEIGHT |CI$239 I I
4741 CMSG I GET_FORM_HEIGHT |CI$23A I
4742 CMSG V SET_AUTO_ALIGN |CI$23B I
4743 CMSG I GET_AUTO_ALIGN |CI$23C
4744 CMSG V SET_COMBO_DATA_OBJECT |CI$23D I
4745 CMSG I GET_COMBO_DATA_OBJECT |CI$23E
4746 CMSG V SET_LINE_THICKNESS |CI$23F I
4747 CMSG I GET_LINE_THICKNESS |CI$240
4748 CMSG V SET_LINE_OFFSET |CI$241 I
4749 CMSG I GET_LINE_OFFSET |CI$242
4750 CMSG V SET_WINDOW_HANDLE |CI$243 I
4751 CMSG I GET_CONTAINER_HANDLE |CI$244
4752 CMSG V SET_HORIZONTAL_STATE |CI$245 I
4753 CMSG I GET_HORIZONTAL_STATE |CI$246
4754 CMSG V MSG_LOAD_FORM_FROM_PAGE |CI$247 I // 6:36 6/2/98
4755 CMSG V SET_FORM_GUIWIDTH |CI$248 I I
4756 CMSG I GET_FORM_GUIWIDTH |CI$249 I
4757 CMSG V SET_FORM_GUIHEIGHT |CI$24A I I
4758 CMSG I GET_FORM_GUIHEIGHT |CI$24B I
4759 CMSG V SET_FORM_GUIROW |CI$24C I I
4760 CMSG I GET_FORM_GUIROW |CI$24D I
4761 CMSG V SET_FORM_GUICOLUMN |CI$24E I I
4762 CMSG I GET_FORM_GUICOLUMN |CI$24F I
4763 CMSG V MSG_HSCROLL |CI$250 I I
4764 CMSG V MSG_EXPORT_CLIPBOARD_DATA |CI$251
4765 CMSG V MSG_IMPORT_CLIPBOARD_DATA |CI$252
4766 CMSG V SET_FORM_MARGIN |CI$253 I I
4767 CMSG I GET_FORM_MARGIN |CI$254 I
4768 CMSG V MSG_ENUMERATE_FONTS |CI$255 S
4769 CMSG I GET_USER_FONTNAME |CI$256 S I
4770 CMSG V SET_ICON |CI$257 S
4771 CMSG I GET_PARENT_RATIOS |CI$258
4772 CMSG V SET_BANDING_OBJECT |CI$259 I
4773 CMSG I GET_BANDING_OBJECT |CI$25A
4774 CMSG V MSG_MAKE_PROPORTIONAL |CI$25B I I
4775 CMSG I GET_PHYSICAL_FONTSIZE |CI$25C
4776 CMSG V MSG_SYSTEM_HELP |CI$25D S S
4777 CMSG S GET_DLL_NAME |CI$25E
4778 CMSG V SET_LINE_STYLE |CI$25F I
4779 CMSG I GET_LINE_STYLE |CI$260
4780 CMSG V MSG_CHOOSE |CI$261
4781 CMSG V SET_TOP_LINE_COLOR |CI$262 I
4782 CMSG I GET_TOP_LINE_COLOR |CI$263
4783 CMSG V SET_BOTTOM_LINE_COLOR |CI$264 I
4784 CMSG I GET_BOTTOM_LINE_COLOR |CI$265
4785 CMSG V SET_FOREGROUND_COLOR |CI$266 I
4786 CMSG I GET_FOREGROUND_COLOR |CI$267
4787 CMSG V SET_BKGRND_COLOR |CI$268 I
4788 CMSG I GET_BKGRND_COLOR |CI$269
4789 CMSG I GET_BRUSH |CI$26A
4790 CMSG V MSG_EXIT_CASCADE |CI$26B
4791 CMSG V MSG_REDIRECT_MESSAGE |CI$26C
4792 CMSG V MSG_ACTIVATE_PULL_DOWN |CI$26D
4793 CMSG V SET_ACTION_BAR_LOCATION |CI$26E I
4794 CMSG I GET_ACTION_BAR_KEYS_MSG |CI$26F
4795 CMSG V SET_ACTION_BAR_KEYS_MSG |CI$270 I
4796 CMSG V SET_AUTO_SCALE_FONT_STATE |CI$271 I
4797 CMSG I GET_AUTO_SCALE_FONT_STATE |CI$272
4798 CMSG V MSG_SCALE_FONTS |CI$273
4799 CMSG V SET_FORM_OPTION |CI$274 I I I
4800 CMSG I GET_FORM_OPTION |CI$275 I I
4801 CMSG V MSG_ADJUST_LOGICALS |CI$276
4802 CMSG V SET_PHYSICAL_FONTSIZE |CI$277 I I
4803 CMSG I GET_EXIT_SYSTEM_CONFIRMATION |CI$278
4804 CMSG V SET_CAPTION_BAR_HIGHLIGHT |CI$279 I
4805 CMSG V MSG_ACTIVATE_SYSMENU |CI$27A I
4806 CMSG V SET_HIGHLIGHT_ROW_TEXT_COLOR |CI$27b I
4807 CMSG I GET_HIGHLIGHT_ROW_TEXT_COLOR |CI$27c
4808 CMSG V SET_CURRENT_ITEM_TEXT_COLOR |CI$27d I
4809 CMSG I GET_CURRENT_ITEM_TEXT_COLOR |CI$27e
4810 CMSG V SET_ITEM_TEXT_COLOR |CI$27f I I
4811 CMSG I GET_ITEM_TEXT_COLOR |CI$280 I
4812 CMSG I GET_TEXT_EXTENT |CI$281 S
4813 CMSG V MSG_SYSTEM_CONTEXT_HELP |CI$282 S I
4814 CMSG V SET_MOUSE_CAPTURE |CI$283
4815 CMSG I GET_MOUSE_CAPTURE |CI$284
4816 CMSG V MSG_RELEASE_MOUSE_CAPTURE |CI$285
4817 CMSG V SET_WINDOW_STYLE |CI$286 I I
4818 CMSG I GET_WINDOW_STYLE |CI$287 I
4819 CMSG V MSG_COMMAND |CI$288 I I
4820 CMSG I GET_GUISIZE |CI$289
4821 CMSG V SET_GUISIZE |CI$28A I I
4822 CMSG I GET_ABSOLUTE_GUIORIGIN |CI$28B
4823 CMSG I GET_WINDOW_HANDLE |CI$28C
4824 CMSG V SET_FONT |CI$28D I
4825 CMSG V MSG_NOTIFY_FOCUS_CHANGE |CI$28E I
4826 CMSG V MSG_EXIT_MENU |CI$28F
4827 CMSG I GET_CURSOR |CI$290
4828 CMSG V SET_CURSOR |CI$291 I
4829 CMSG I GET_DATA_SET_SERVER |CI$292 I
4830 CMSG I GET_DATA_SET_CLIENT |CI$293 I
4831 CMSG I GET_DATA_SET_USER_INTERFACE |CI$294 I
4832 CMSG I GET_DATA_SET_SERVER_COUNT |CI$295
4833 CMSG I GET_DATA_SET_CLIENT_COUNT |CI$296
4834 CMSG I GET_DATA_SET_USER_INTERFACE_COUNT |CI$297
4835 CMSG V SET_ALWAYS_REFRESH_STATE |CI$298 I
4836 CMSG I GET_ALWAYS_REFRESH_STATE |CI$299
4837 CMSG V MSG_RESET_FILEMODES_FOR_LOCK |CI$29A
4838 CMSG V SET_SMART_FILEMODE_STATE |CI$29B I
4839 CMSG I GET_SMART_FILEMODE_STATE |CI$29C
4840 CMSG V SET_SMART_FILEMODE_FOR_LOCK |CI$29D I
4841 CMSG I GET_SMART_FILEMODE_FOR_LOCK |CI$29E
4842 CMSG V SET_SMART_FILEMODE_FOR_NO_LOCK |CI$29F I
4843 CMSG I GET_SMART_FILEMODE_FOR_NO_LOCK |CI$2A0
4844 CMSG V SET_CASCADE_DELETE_STATE |CI$2A1 I
4845 CMSG I GET_CASCADE_DELETE_STATE |CI$2A2
4846 CMSG I GET_VALIDATE_DELETE_NO_CASCADE |CI$2A3
4847 CMSG V MSG_ADD_CLIENT_FILE |CI$2A4 I
4848 CMSG V MSG_REMOVE_CLIENT_FILE |CI$2A5 I
4849 CMSG I GET_CLIENT_FILE |CI$2A6 I
4850 CMSG I GET_CLIENT_FILE_COUNT |CI$2A7
4851 CMSG V MSG_ADD_SERVER_FILE |CI$2A8 I
4852 CMSG V MSG_REMOVE_SERVER_FILE |CI$2A9 I
4853 CMSG I GET_SERVER_FILE |CI$2AA I
4854 CMSG I GET_SERVER_FILE_COUNT |CI$2AB
4855 CMSG I GET_PARENT_FILE |CI$2AC I
4856 CMSG I GET_PARENT_FILE_COUNT |CI$2AD
4857 CMSG V MSG_OPERATION_NOT_ALLOWED |CI$2AE I
4858 CMSG V MSG_NEW_CURRENT_RECORD |CI$2AF I I
4859 CMSG V SET_EXTERNAL_CLASS_NAME |CI$2B0 S S
4860 CMSG V SET_EXTERNAL_MESSAGE |CI$2B1 I I
4861 CMSG V MSG_WINDOWS_MESSAGE |CI$2B2 I I I
4862 CMSG V SET_HEADER_LABEL |CI$2B3 I S
4863 CMSG S GET_HEADER_LABEL |CI$2B4 I
4864 CMSG V SET_FORM_BITMAP |CI$2B5 I S
4865 CMSG V SET_HIGHLIGHT_ROW_STATE |CI$2B6 I
4866 CMSG I GET_HIGHLIGHT_ROW_STATE |CI$2B7
4867 CMSG V SET_HIGHLIGHT_ROW_COLOR |CI$2B8 I
4868 CMSG I GET_HIGHLIGHT_ROW_COLOR |CI$2B9
4869 CMSG V SET_HEADER_VISIBLE_STATE |CI$2BA I
4870 CMSG I GET_HEADER_VISIBLE_STATE |CI$2BB
4871 CMSG V MSG_BEGIN_EVENT |CI$2BC I
4872 CMSG V MSG_END_EVENT |CI$2BD I
4873 CMSG V SET_FOCUS |CI$2BE I I
4874 CMSG V SET_FORM_STYLE |CI$2BF I I
4875 CMSG I GET_FORM_STYLE |CI$2C0 I
4876 CMSG V SET_FORM_EXTENDED_STYLE |CI$2C1 I I
4877 CMSG I GET_FORM_EXTENDED_STYLE |CI$2C2 I
4878 CMSG V SET_FORM_BORDER |CI$2C3 I I
4879 CMSG I GET_FORM_BORDER |CI$2C4 I
4880 CMSG V SET_GRIDLINE_MODE |CI$2C5 I
4881 CMSG I GET_GRIDLINE_MODE |CI$2C6
4882 CMSG V MSG_CREATE_DIALOG |CI$2C7 I I
4883 CMSG I GET_MAPI_SEND_DOCUMENTS |CI$2C8 S S
4884 CMSG I GET_MAPI_INITMESSAGE |CI$2C9 S S
4885 CMSG I GET_MAPI_SEND_MAIL |CI$2CA I
4886 CMSG I GET_MAPI_ADDRESS_BOOK |CI$2CB S I
4887 CMSG S GET_MAPI_FIND_NEXT |CI$2CC S I
4888 CMSG S GET_MAPI_MESSAGE_SUBJECT |CI$2CD
4889 CMSG I GET_MAPI_READMAIL |CI$2CE S I
4890 CMSG S GET_MAPI_MESSAGE_SENDERNAME |CI$2CF
4891 CMSG S GET_MAPI_MESSAGE_DATERECEIVED |CI$2D0
4892 CMSG V MSG_EDIT_TO_MAIL |CI$2D1 I
4893 CMSG V MSG_MAIL_TO_EDIT |CI$2D2 I
4894 CMSG I MSG_NOTIFY |CI$2D3 I I
4895 CMSG S GET_MAPI_MESSAGE_RECEIVERNAME |CI$2D4 I
4896 CMSG V SET_BITMAP_SIZE |CI$2D5 I I
4897 CMSG V SET_IMAGELIST_SIZE |CI$2D6 I I
4898 CMSG V SET_IMAGELIST_TYPE |CI$2D7 I
4899 CMSG V MSG_IMAGELIST_CREATE |CI$2D8
4900 CMSG V MSG_IMAGELIST_DESTROY |CI$2D9
4901 CMSG V MSG_IMAGELIST_ADD |CI$2DA S
4902 CMSG V MSG_IMAGELIST_BEGINDRAG |CI$2DB I
4903 CMSG V SET_IMAGELIST_DRAGOBJECT |CI$2DC I
4904 CMSG V MSG_IMAGELIST_DRAGENTER |CI$2DD I I
4905 CMSG V MSG_IMAGELIST_DRAGMOVE |CI$2DE I I
4906 CMSG V MSG_IMAGELIST_DRAGLEAVE |CI$2DF I
4907 CMSG V MSG_IMAGELIST_ENDDRAG |CI$2E0
4908 CMSG I GET_IMAGELIST_DRAGOBJECT |CI$2E1
4909 CMSG V SET_TOOLTIP_STATE |CI$2E2 I
4910 CMSG I GET_TOOLTIP_STATE |CI$2E3
4911 CMSG V SET_TOOLTIP_VALUE |CI$2E4 I S
4912 CMSG S GET_TOOLTIP_VALUE |CI$2E5 I
4913 CMSG V SET_IMAGELIST |CI$2E6 I
4914 CMSG V SET_FORM_IMAGE_INDEX |CI$2E7 I I
4915 CMSG I GET_FORM_IMAGE_INDEX |CI$2E8 I
4916 CMSG V SET_BUTTON_STYLE |CI$2E9 I I
4917 CMSG I GET_BUTTON_STYLE |CI$2EA I
4918 CMSG V MSG_AUTO_SIZE |CI$2EB I I
4919 CMSG V MSG_AUTO_PAGE |CI$2EC I
4920 CMSG V SET_TIMEOUT_VALUE |CI$2ED I
4921 CMSG I GET_TIMEOUT_VALUE |CI$2EE
4922 CMSG V SET_LEFT_MARGIN |CI$2EF I
4923 CMSG I GET_LEFT_MARGIN |CI$2F0
4924 CMSG V SET_STATUS_LINE_OBJECT |CI$2F1 I
4925 CMSG I GET_STATUS_LINE_OBJECT |CI$2F2
4926 CMSG V SET_WINDOWS_OVERRIDE_STATE |CI$2F3 I
4927 CMSG I GET_WINDOWS_OVERRIDE_STATE |CI$2F4
4928 CMSG I GET_MENU_HANDLE |CI$2F5
4929 CMSG V MSG_INITIALIZE_MENU |CI$2F6 I
4930 CMSG V MSG_CHANGE_MENU |CI$2F7 I I I
4931 CMSG V MSG_UNDO |CI$2F8
4932 CMSG V MSG_DELETE |CI$2F9
4933 CMSG V SET_HEADER_JUSTIFICATION_MODE |CI$2FA I I
4934 CMSG I GET_HEADER_JUSTIFICATION_MODE |CI$2FB I
4935 CMSG V SET_BITMAP_FORMAT |CI$2FC I
4936 CMSG I GET_BITMAP_FORMAT |CI$2FD
4937 CMSG V SET_PASSWORD_STATE |CI$2FE I I
4938 CMSG I GET_PASSWORD_STATE |CI$2FF I
4939 CMSG V SET_MDI_STATE |CI$300 I
4940 CMSG I GET_MDI_STATE |CI$301
4941 CMSG V SET_MDI_LEFT_MARGIN |CI$302 I
4942 CMSG I GET_MDI_LEFT_MARGIN |CI$303
4943 CMSG V SET_MDI_TOP_MARGIN |CI$304 I
4944 CMSG I GET_MDI_TOP_MARGIN |CI$305
4945 CMSG V SET_MDI_RIGHT_MARGIN |CI$306 I
4946 CMSG I GET_MDI_RIGHT_MARGIN |CI$307
4947 CMSG V SET_MDI_BOTTOM_MARGIN |CI$308 I
4948 CMSG I GET_MDI_BOTTOM_MARGIN |CI$309
4949 CMSG V SET_MDI_WINDOW_PULLDOWN |CI$30A I
4950 CMSG I GET_MDI_WINDOW_PULLDOWN |CI$30B
4951 CMSG V MSG_ARRANGE_ICONS |CI$30C
4952 CMSG V MSG_CASCADE_WINDOWS |CI$30D
4953 CMSG V MSG_TILE_WINDOWS_HORIZONTAL |CI$30E
4954 CMSG V MSG_TILE_WINDOWS_VERTICAL |CI$30F
4955 CMSG V MSG_SWITCH_NEXT_VIEW |CI$310
4956 CMSG V MSG_SWITCH_PRIOR_VIEW |CI$311
4957 CMSG I GET_FORM_WINDOW_HANDLE |CI$312 I
4958 CMSG V MSG_NOTIFY_APPLICATION_ACTIVATION |CI$313 I
4959 CMSG V SET_RESIZE_COLUMN_STATE |CI$314 I
4960 CMSG I GET_RESIZE_COLUMN_STATE |CI$315
4961 CMSG V SET_AUTOSIZE_HEIGHT_STATE |CI$316 I
4962 CMSG I GET_AUTOSIZE_HEIGHT_STATE |CI$317
4963 CMSG V SET_CURRENT_ITEM_COLOR |CI$318 I
4964 CMSG I GET_CURRENT_ITEM_COLOR |CI$319
4965 CMSG V MSG_INITIALIZE_SYSMENU |CI$31A I
4966 CMSG V SET_UNDO_STATE |CI$31B I
4967 CMSG I GET_UNDO_STATE |CI$31C
4968 CMSG V MSG_RESET_FIND |CI$31D
4969 CMSG V MSG_RESET_REPLACE |CI$31E
4970 CMSG V MSG_APPEND_TEXT |CI$31F S
4971 CMSG V MSG_SELECT |CI$320 I I
4972 CMSG I GET_EDIT_BUFFER_COUNT |CI$321
4973 CMSG V SET_EDIT_BUFFER_SIZE |CI$322 I
4974 CMSG I GET_EDIT_BUFFER_SIZE |CI$323
4975 CMSG V SET_TEXT_LIMIT |CI$324 I
4976 CMSG I GET_TEXT_LIMIT |CI$325
4977 CMSG V SET_EDIT_ERRSPACE_MESSAGE |CI$326 I
4978 CMSG I GET_EDIT_ERRSPACE_MESSAGE |CI$327
4979 CMSG V SET_TABSTOP |CI$328 I I
4980 CMSG I GET_TABSTOP |CI$329 I
4981 CMSG V SET_FORMAT_ORIGIN |CI$32A I I I
4982 CMSG I GET_FORMAT_ORIGIN |CI$32B I
4983 CMSG V SET_FORMAT_SIZE |CI$32C I I I
4984 CMSG I GET_FORMAT_SIZE |CI$32D I
4985 CMSG V SET_HORZ_SCROLL_BAR_VISIBLE_STATE |CI$32E I
4986 CMSG I GET_HORZ_SCROLL_BAR_VISIBLE_STATE |CI$32F
4987 CMSG V MSG_HEADER_NOTIFICATION |CI$330 I I
4988 CMSG I GET_TIMEOUT_REQUEST |CI$331 I I
4989 CMSG V SET_TIMEOUT_MESSAGE |CI$332 I
4990 CMSG I GET_TIMEOUT_MESSAGE |CI$333
4991 CMSG V MSG_MAPI_ADD_RECEIVER |CI$334 I S
4992 CMSG I GET_CLIENT_SIZE |CI$335
4993 CMSG V SET_EXTENDED_WINDOW_STYLE |CI$336 I I
4994 CMSG I GET_EXTENDED_WINDOW_STYLE |CI$337 I
4995 CMSG V SET_DDE_TIMEOUT_VALUE |CI$338 I
4996 CMSG I GET_DDE_TIMEOUT_VALUE |CI$339
4997 CMSG V SET_DDE_TIMEOUT_OBJECT |CI$33A I
4998 CMSG I GET_DDE_TIMEOUT_OBJECT |CI$33B
4999 CMSG V SET_ITEM_COLOR |CI$33C I I
5000 CMSG V SET_FORM_MASK |CI$33D I S
5001 CMSG S GET_FORM_MASK |CI$33E I
5002 CMSG V SET_FORM_BUTTON |CI$33F I I
5003 CMSG V SET_FORM_BUTTON_VALUE |CI$340 I S
5004 CMSG V SET_OEM_TRANSLATE_STATE |CI$341 I
5005 CMSG I GET_OEM_TRANSLATE_STATE |CI$342
5006 CMSG S GET_MASKED_VALUE |CI$343 I
5007 CMSG V MSG_MOUSE_NCCHANGE_FOCUS |CI$344 I
5008 CMSG V MSG_MOUSE_NCUP |CI$345 I I
5009 CMSG V MSG_MOUSE_NCUP2 |CI$346 I I
5010 CMSG V MSG_MOUSE_NCUP3 |CI$347 I I
5011 CMSG V MSG_MOUSE_NCCLICK |CI$348 I I
5012 CMSG V MSG_MOUSE_NCCLICK2 |CI$349 I I
5013 CMSG V MSG_MOUSE_NCCLICK3 |CI$34A I I
5014 CMSG V MSG_MOUSE_NCDOWN |CI$34B I I
5015 CMSG V MSG_MOUSE_NCDOWN2 |CI$34C I I
5016 CMSG V MSG_MOUSE_NCDOWN3 |CI$34D I I
5017 CMSG V MSG_MOUSE_NCDRAG |CI$34E I I
5018 CMSG V MSG_MOUSE_NCDRAG2 |CI$34F I I
5019 CMSG V MSG_MOUSE_NCDRAG3 |CI$350 I I
5020 CMSG V SET_SENTINEL_PROGRAM |CI$351 S
5021 CMSG S GET_SENTINEL_PROGRAM |CI$352
5022 CMSG I GET_START_SENTINEL_PROGRAM |CI$353
5023 CMSG I GET_STOP_SENTINEL_PROGRAM |CI$354
5024 CMSG V SET_SENTINEL_RETURN_VALUE |CI$355 I
5025 CMSG I GET_SENTINEL_RETURN_VALUE |CI$356
5026 CMSG V MSG_NOTIFY_SELECT_STATE |CI$357 I I
5027 CMSG V MSG_SELECT_ALL |CI$358
5028 CMSG V SET_SENTINELDATA |CI$359 I I I
5029 CMSG S GET_SENTINELDATA |CI$35A I I
5030 CMSG V SET_HOSTDATA |CI$35B I I I
5031 CMSG S GET_HOSTDATA |CI$35C I I
5032 CMSG V MSG_ONSENTINELDATACHANGE |CI$35D I I
5033 CMSG V SET_SENTINELWINDOW |CI$35E I
5034 CMSG I GET_SENTINELWINDOW |CI$35F
5035 CMSG V MSG_FORM_BUTTON_NOTIFICATION |CI$360 I I
5036 CMSG I GET_FORM_BUTTON_WINDOW_HANDLE |CI$361 I
5037 CMSG V SET_FORM_JUSTIFICATION_MODE |CI$362 I I
5038 CMSG I GET_FORM_JUSTIFICATION_MODE |CI$363 I
5039 CMSG V MSG_FORM_BUTTON_MOUSE_DOWN |CI$364 I
5040 CMSG V SET_FORM_BUTTON_BITMAP |CI$365 I S
5041 CMSG I MSG_ONDELTAPOS |CI$366 I I
5042 CMSG V SET_DEFAULT_ICONS |CI$367 I I
5043 CMSG I GET_DEFAULT_ICONS |CI$368
5044 CMSG V SET_FORM_MASK_VALUE_STATE |CI$369 I I
5045 CMSG I GET_FORM_MASK_VALUE_STATE |CI$36A I
5046 CMSG V SET_MASKED_VALUE |CI$36B I S
5047 CMSG V SET_UNMASKED_VALUE |CI$36C I S
5048 CMSG S GET_UNMASKED_VALUE |CI$36D I
5049 CMSG V SET_MAIN_WINDOW |CI$36E I
5050 CMSG I GET_MAIN_WINDOW |CI$36F
5051 CMSG V SET_BITMAP_STYLE |CI$370 I
5052 CMSG I GET_BITMAP_STYLE |CI$371
5053 CMSG I GET_BITMAP_WIDTH |CI$372
5054 CMSG I GET_BITMAP_HEIGHT |CI$373
5055 CMSG V SET_TRANSPARENT_STATE |CI$374 I
5056 CMSG I GET_TRANSPARENT_STATE |CI$375
5057 CMSG I GET_MAPI_RECEIVER_COUNT |CI$376
5058 CMSG V SET_MAPI_MESSAGE_RECEIVERNAME |CI$377 I S
5059 CMSG V SET_MAPI_MESSAGE_RECEIVERADRESS |CI$378 I S
5060 CMSG S GET_MAPI_MESSAGE_RECEIVERADRESS |CI$379 I
5061 CMSG V SET_MAPI_MESSAGE_RECEIVERTYPE |CI$37A I I
5062 CMSG I GET_MAPI_MESSAGE_RECEIVERTYPE |CI$37B I
5063 CMSG V SET_MAPI_MESSAGE_SUBJECT |CI$37C S
5064 CMSG V MSG_MAPI_REPLY |CI$37D
5065 CMSG V MSG_MAPI_REMOVE_RECEIVERS |CI$37E
5066 CMSG V MSG_MAPI_REMOVE_ATTACHMENTS |CI$37F
5067 CMSG V MSG_MAPI_ADD_ATTACHMENT |CI$380 S S
5068 CMSG I GET_MAPI_ATTACHMENT_COUNT |CI$381
5069 CMSG S GET_MAPI_ATTACHMENT_PATH |CI$382 I
5070 CMSG S GET_MAPI_ATTACHMENT_FILE |CI$383 I
5071 CMSG V SET_COMM_DCB |CI$384 I
5072 CMSG V MSG_FILL_DCB |CI$385 I
5073 CMSG V MSG_FILL_COMM_TIMEOUTS |CI$386 I // This is really a pointer to a COMMTIMEOUT struct
5074 CMSG V SET_COMM_TIMEOUTS |CI$387 I // same
5075 CMSG V MSG_FILL_COMM_PROPERTIES |CI$388 I // same
5076 CMSG V SET_COMM_MASK |CI$389 I
5077 CMSG I GET_COMM_MASK |CI$38A
5078 CMSG I GET_COMM_MODEM_STATUS |CI$38B
5079 CMSG V MSG_GENERATE_VIRTUAL_KEY |CI$38C I I
5080 CMSG V MSG_GENERATE_DF_KEY |CI$38D I I
5081 CMSG I GET_CURRENT_OFFSET |CI$38E
5082 CMSG I GET_CURRENT_SELECTION_RANGE |CI$38F
5083 CMSG V MSG_ONKEYUP |CI$390 I I
5084 CMSG V MSG_ONSYSKEYUP |CI$391 I I
5085 CMSG V MSG_ADD_POPUP_MENU |CI$392 I S
5086 CMSG I GET_REG_KEY_ENUM |CI$393 I S
5087 CMSG I GET_REG_INTEGER_VALUE_ENUM |CI$394 S I
5088 CMSG I GET_REG_STRING_VALUE_ENUM |CI$395 S S
5089 CMSG V SET_DDE_SERVER_LINK |CI$396 I
5090 // Old internet client and NetMeeting removed...
5091 CMSG V SET_PSUSERNAME |CI$3D7 S
5092 CMSG S GET_PSUSERNAME |CI$3D8
5093 CMSG V SET_PSPASSWORD |CI$3D9 S
5094 CMSG S GET_PSPASSWORD |CI$3DA
5095 CMSG V SET_PSACCEPTTYPES |CI$3DB S
5096 CMSG S GET_PSACCEPTTYPES |CI$3DC
5097 CMSG I GET_DESTROY_RUBBER_BAND |CI$3DD I
5098 CMSG I GET_CREATE_RUBBER_BAND |CI$3DE I
5099 CMSG I GET_CREATE_RUBBER_BAND_MANUAL |CI$3DF I
5100 CMSG I GET_TRACK_DF_WINDOW |CI$3E0 I
5101 CMSG I GET_TRACK_CURRENT_WINDOW |CI$3E1
5102 CMSG I GET_TRACK_NUMBER_OF_BANDS |CI$3E2
5103 CMSG I GET_TRACK_GET_RECTANGLE |CI$3E3 I I // second param is actually a pointer
5104 CMSG I GET_TRACK_SET_POSITION |CI$3E4 I
5105 CMSG V SET_BAND_POSITION |CI$3E5 I I
5106 CMSG V SET_BAND_SIZE |CI$3E6 I I
5107 CMSG V SET_BAND_TRANSPARENT_FLAG |CI$3E7 I
5108 CMSG V SET_BAND_SIZE_MOVE_FLAG |CI$3E8 I
5109 CMSG V SET_BAND_SIZE_MOVE_MIN |CI$3E9 I I
5110 CMSG V SET_BAND_MULTISELECT_FLAG |CI$3EA I
5111 CMSG I GET_VIRTUAL_KEY |CI$3EB
5112 CMSG I GET_SHIFT_STATE |CI$3EC
5113 CMSG S GET_OBJECT_LABEL |CI$3ED
5114 CMSG I GET_OBJECT_ACCESS |CI$3EE
5115 CMSG V MSG_HEADER_ENDTRACK |CI$3EF
5116
5117
5118 // Message number replacements without parameters.
5119
5120 //#REPLACE GET_ITEM_OPTIONS GET_ITEM_OPTIONS@1
5121 //#REPLACE GET_ITEM_ENTRY_MSG GET_ITEM_ENTRY_MSG@1
5122 //#REPLACE GET_ITEM_EXIT_MSG GET_ITEM_EXIT_MSG@1
5123 //#REPLACE GET_ITEM_VALIDATE_MSG GET_ITEM_VALIDATE_MSG@1
5124 //#REPLACE GET_CHECKBOX_ITEM_STATE GET_CHECKBOX_ITEM_STATE@1
5125 //#REPLACE MSG_PASTE MSG_PASTE@3
5126 //#REPLACE MSG_CUT MSG_CUT@3
5127 //#REPLACE MSG_COPY MSG_COPY@3
5128
5129
5130 Define USE_RGB_COLORS // this determines if RGB support is being used
5131
5132 #IFDEF USE_RGB_COLORS
5133
5134 CMSG V SET_TextColor |CI$0266 I
5135 CMSG I GET_TextColor |CI$0267
5136 CMSG V SET_Color |CI$0268 I
5137 CMSG I GET_Color |CI$0269
5138 CMSG V SET_CURRENTCELLCOLOR |CI$0318 I
5139 CMSG I GET_CURRENTCELLCOLOR |CI$0319
5140 CMSG V SET_CURRENTCELLTEXTCOLOR |CI$027D I
5141 CMSG I GET_CURRENTCELLTEXTCOLOR |CI$027E
5142 CMSG V SET_ITEMCOLOR |CI$033C I I
5143 CMSG I GET_ITEMCOLOR |CI$0237 I
5144 CMSG V SET_ITEMTEXTCOLOR |CI$027F I I
5145 CMSG I GET_ITEMTEXTCOLOR |CI$0280 I
5146 CMSG V SET_CURRENTROWCOLOR |CI$02B8 I
5147 CMSG I GET_CURRENTROWCOLOR |CI$02B9
5148 CMSG V SET_CURRENTROWTEXTCOLOR |CI$027B I
5149 CMSG I GET_CURRENTROWTEXTCOLOR |CI$027C
5150
5151 #ENDIF
5152
5153 CMSG V MSG_SETVSCROLLINFO |CI$04A6 I I I //sav_cur_obj,
5154 CMSG V MSG_SETVSCROLLPOS |CI$04A7 I
5155 CMSG V MSG_SETVSCROLLBOX |CI$04A8 I I
5156
5157 // anchor logic added with VDFX
5158 CMSG V SET_PEANCHORS |CI$51A
5159 CMSG I GET_PEANCHORS |CI$51B
5160 CMSG V SET_PBANCHORCREATED |CI$51C
5161 CMSG I GET_PBANCHORCREATED |CI$51D
5162 CMSG V SET_PBANCHORSTATE |CI$51E
5163 CMSG I GET_PBANCHORSTATE |CI$51F
5164 CMSG V SET_PIANCHORLEFT |CI$520
5165 CMSG I GET_PIANCHORLEFT |CI$521
5166 CMSG V SET_PIANCHORTOP |CI$522
5167 CMSG I GET_PIANCHORTOP |CI$523
5168 CMSG V SET_PIANCHORRIGHT |CI$524
5169 CMSG I GET_PIANCHORRIGHT |CI$525
5170 CMSG V SET_PIANCHORBOTTOM |CI$526
5171 CMSG I GET_PIANCHORBOTTOM |CI$527
5172 CMSG V SET_PIMINSIZE |CI$528
5173 CMSG I GET_PIMINSIZE |CI$529
5174 CMSG V SET_PIMAXSIZE |CI$52A
5175 CMSG I GET_PIMAXSIZE |CI$52B
5176 CMSG I MSG_DOCREATEANCHORS |CI$518
5177 CMSG I MSG_DOAPPLYANCHORS |CI$519
5178 CMSG I GET_GETCONTAINERCLIENTSIZE |CI$538
5179 // form button get values exposed
5180 CMSG I GET_FORM_BUTTON |CI$052C
5181 CMSG I GET_FORM_BUTTON_VALUE |CI$052D
5182 CMSG I GET_FORM_BUTTON_BITMAP |CI$052E
5183
5184 // added to VDF 8.2
5185 CMSG I GET_PEGRIDLINECOLOR |CI$0545 // get/sets color of grid lines
5186 CMSG I SET_PEGRIDLINECOLOR |CI$0546
5187 CMSG I GET_PEDISABLEDTEXTCOLOR |CI$0547 // get/sets disabled (shadowed) text color
5188 CMSG I SET_PEDISABLEDTEXTCOLOR |CI$0548
5189 CMSG I GET_PEDISABLEDCOLOR |CI$0549 // get/sets disabled (shadowed) background color
5190 CMSG I SET_PEDISABLEDCOLOR |CI$054a
5191 CMSG I GET_PBUSEDISABLEDCOLOR |CI$054b
5192 CMSG I SET_PBUSEDISABLEDCOLOR |CI$054c
5193 CMSG I MSG_ONWMMOUSEWHEEL |CI$054d // lowlevel mouse event for grids
5194 // added 10.0
5195 CMSG X MSG_SUSPENDGUI |CI$0587
5196 CMSG X MSG_PUMPMSGQUEUE |CI$0588
5197 // added 10.1
5198 CMSG X GET_SELECTCLIENTCERTIFICATE |CI$058c // http
5199 CMSG X GET_PBSHOWERRORDIALOG |CI$058d // http
5200 CMSG X SET_PBSHOWERRORDIALOG |CI$058e // http
5201
5202// // Added 11.0 to support combos in grids and rich edit
5203 CMSG X SET_COLUMN_COMBO_STATE |CI$05eb
5204 CMSG X GET_COLUMN_COMBO_STATE |CI$05ec
5205 CMSG X MSG_COLUMN_COMBO_ADD_ITEM |CI$05ed
5206 CMSG X MSG_COLUMN_COMBO_DELETE_ITEM |CI$05ee
5207 CMSG X SET_COLUMN_COMBO_SORT_STATE |CI$05ef
5208 CMSG X GET_COLUMN_COMBO_SORT_STATE |CI$05f0
5209 CMSG X SET_COLUMN_COMBO_LISTROWCOUNT |CI$05f1
5210 CMSG X GET_COLUMN_COMBO_LISTROWCOUNT |CI$05f2
5211 CMSG X MSG_COLUMN_COMBO_DELETE_DATA |CI$05f3
5212 CMSG X GET_COLUMN_COMBO_ITEM_COUNT |CI$05f4
5213 CMSG X GET_COLUMN_COMBO_VALUE |CI$05f5
5214 CMSG X GET_COLUMN_COMBO_FIND |CI$05f6
5215 CMSG X MSG_COLUMN_COMBO_REFRESH |CI$05f7
5216 CMSG X SET_COLUMN_COMBO_ENTRY_STATE |CI$05f8
5217 CMSG X GET_COLUMN_COMBO_ENTRY_STATE |CI$05f9
5218 CMSG X SET_PBCOMBONAVIGATION |CI$05fa
5219 CMSG X GET_PBCOMBONAVIGATION |CI$05fb
5220
5221 // rich edit messages
5222 CMSG X SET_PBBOLD |CI$058f
5223 CMSG X SET_PBSTRIKEOUT |CI$0590
5224 CMSG X SET_PBSUPERSCRIPT |CI$0591
5225 CMSG X SET_PBSUBSCRIPT |CI$0592
5226 CMSG X SET_PBLINK |CI$0593
5227 CMSG X SET_PBPROTECT |CI$0594
5228 CMSG X SET_PEPITCHANDFAMILY |CI$0595
5229 CMSG X SET_PECHARSET |CI$0596
5230 CMSG X GET_PBBOLD |CI$0597
5231 CMSG X GET_PBSTRIKEOUT |CI$0598
5232 CMSG X GET_PBSUPERSCRIPT |CI$0599
5233 CMSG X GET_PBSUBSCRIPT |CI$059a
5234 CMSG X GET_PBLINK |CI$059b
5235 CMSG X GET_PBPROTECT |CI$059c
5236 CMSG X GET_PEPITCHANDFAMILY |CI$059d
5237 CMSG X GET_PECHARSET |CI$059e
5238 CMSG X SET_TEXTBACKCOLOR |CI$059f
5239 CMSG X GET_TEXTBACKCOLOR |CI$05a0
5240
5241 CMSG X SET_PEBULLETS |CI$05a1
5242 CMSG X SET_PIPARAGRAPHINDENT |CI$05a2
5243 CMSG X SET_PIRIGHTMARGIN |CI$05a3
5244 CMSG X SET_PIOFFSETINDENT |CI$05a4
5245 CMSG X SET_PEALIGNMENT |CI$05a5
5246 CMSG X SET_PISPACINGBEFORE |CI$05a6
5247 CMSG X SET_PISPACINGAFTER |CI$05a7
5248 CMSG X SET_PILINESPACING |CI$05a8
5249 CMSG X SET_PELINESPACINGTYPE |CI$05a9
5250 CMSG X SET_PIBULLETSTART |CI$05aa
5251 CMSG X SET_PEBULLETSTYLE |CI$05ab
5252 CMSG X SET_PIBULLETTAB |CI$05ac
5253 CMSG X GET_PEBULLETS |CI$05ad
5254 CMSG X GET_PIPARAGRAPHINDENT |CI$05ae
5255 CMSG X GET_PIRIGHTMARGIN |CI$05af
5256 CMSG X GET_PIOFFSETINDENT |CI$05b0
5257 CMSG X GET_PEALIGNMENT |CI$05b1
5258 CMSG X GET_PISPACINGBEFORE |CI$05b2
5259 CMSG X GET_PISPACINGAFTER |CI$05b3
5260 CMSG X GET_PILINESPACING |CI$05b4
5261 CMSG X GET_PELINESPACINGTYPE |CI$05b5
5262 CMSG X GET_PIBULLETSTART |CI$05b6
5263 CMSG X GET_PEBULLETSTYLE |CI$05b7
5264 CMSG X GET_PIBULLETTAB |CI$05b8
5265
5266 CMSG X GET_PBAUTOURL |CI$05b9
5267 CMSG X SET_PBAUTOURL |CI$05ba
5268 CMSG X SET_PBWRAP |CI$05bb
5269 CMSG X GET_PBWRAP |CI$05bc
5270 CMSG X GET_FINDTEXT |CI$05bd
5271 CMSG X GET_REPLACEALL |CI$05be
5272 CMSG X MSG_REPLACESEL |CI$05bf
5273 CMSG X MSG_SETSEL |CI$05c0
5274 CMSG X GET_SELSTART |CI$05c1
5275 CMSG X GET_SELEND |CI$05c2
5276
5277 CMSG X GET_PBCANUNDO |CI$05c3
5278 CMSG X MSG_CLEARUNDOBUFFER |CI$05c4
5279 CMSG X GET_FIRSTVISIBLELINE |CI$05c5
5280 CMSG X GET_LINE |CI$05c6
5281 CMSG X GET_LINEFROMCHAR |CI$05c7
5282 CMSG X GET_FIRSTCHARINLINEPOS |CI$05c8
5283 CMSG X GET_LINELENGTH |CI$05c9
5284 CMSG X MSG_SCROLLLINES |CI$05ca
5285 CMSG X MSG_SCROLLCARET |CI$05cb
5286 CMSG X GET_PBCANPASTE |CI$05cc
5287 CMSG X GET_PBCANREDO |CI$05cd
5288 CMSG X GET_UNDOTYPE |CI$05ce
5289 CMSG X GET_REDOTYPE |CI$05cf
5290 CMSG X GET_SELTEXT |CI$05d0
5291 CMSG X GET_TEXTRANGE |CI$05d1
5292 CMSG X MSG_HIDESELECTION |CI$05d2
5293 CMSG X MSG_REDO |CI$05d3
5294 CMSG X MSG_STOPGROUPTYPING |CI$05d4
5295 CMSG X GET_PAVALUE |CI$05d5
5296 CMSG X SET_PAVALUE |CI$05d6
5297
5298 CMSG X MSG_ONLINKCLICKED |CI$05d7
5299
5300 CMSG X SET_PBITALICS |CI$05dd
5301 CMSG X GET_PBITALICS |CI$05de
5302 CMSG X SET_PBUNDERLINE |CI$05df
5303 CMSG X GET_PBUNDERLINE |CI$05e0
5304 CMSG X SET_PSTYPEFACE |CI$05e1
5305 CMSG X GET_PSTYPEFACE |CI$05e2
5306 CMSG X SET_PIFONTSIZE |CI$05e3
5307 CMSG X GET_PIFONTSIZE |CI$05e4
5308 CMSG X SET_PIFONTWEIGHT |CI$05e5
5309 CMSG X GET_PIFONTWEIGHT |CI$05e6
5310
5311 CMSG X GET_CHARCOUNT |CI$05e7
5312 CMSG X SET_PIMAXCHARS |CI$05e8
5313 CMSG X GET_PIMAXCHARS |CI$05e9
5314 CMSG X MSG_APPENDTEXT |CI$05ea
5315 CMSG X MSG_ONSELECTIONCHANGED |CI$05fd
5316
5317#ENDCOMMAND
5318
5319
5320#COMMAND Define$BuiltIn$XML$Messages
5321
5322 CMSG V SET_XMLINTERFACE |CI$03F0 I
5323 CMSG I GET_XMLINTERFACE |CI$03F1
5324
5325
5326 // NODE Properties
5327
5328 CMSG I GET_PHATTRIBUTES |CI$03F2
5329 CMSG S GET_PSBASENAME |CI$03F3
5330 CMSG I GET_PHCHILDNODES |CI$03F4
5331 CMSG I GET_PHDEFINITION |CI$03F5
5332 CMSG I GET_PHFIRSTCHILD |CI$03F6
5333 CMSG I GET_PHLASTCHILD |CI$03F7
5334 CMSG I GET_PHNEXTSIBLING |CI$03F8
5335 CMSG S GET_PSNAMESPACEURI |CI$03F9
5336 CMSG S GET_PSNODENAME |CI$03FA
5337 CMSG I GET_PINODETYPE |CI$03FB
5338 CMSG S GET_PSNODETYPESTRING |CI$03FC
5339 CMSG I GET_PHOWNERDOCUMENT |CI$03FD
5340 CMSG I GET_PHPARENTNODE |CI$03FE
5341 CMSG I GET_PBPARSED |CI$03FF
5342 CMSG S GET_PSPREFIX |CI$0400
5343 CMSG I GET_PHPREVIOUSSIBLING |CI$0401
5344 CMSG I GET_PBSPECIFIED |CI$0402
5345 CMSG S GET_PSTEXT |CI$0403
5346 CMSG S GET_PSXML |CI$0404
5347
5348 // Node Read write properties
5349
5350 CMSG V SET_PSDATATYPE |CI$0405 S
5351 CMSG S GET_PSDATATYPE |CI$0406
5352 CMSG V SET_PVNODETYPEDVALUE |CI$0407 I I
5353 CMSG I GET_PVNODETYPEDVALUE |CI$0408 I
5354 CMSG V SET_PSNODEVALUE |CI$0409 S
5355 CMSG S GET_PSNODEVALUE |CI$040A
5356
5357 // Node Methods
5358
5359 CMSG I GET_APPENDCHILD |CI$040B I
5360 CMSG I GET_CLONEINFCNODE |CI$040C I
5361 CMSG I GET_HASCHILDNODES |CI$040D
5362 CMSG I GET_INSERTBEFORE |CI$040E I I
5363 CMSG I GET_REMOVECHILD |CI$040F I
5364 CMSG I GET_REPLACECHILD |CI$0410 I I
5365 CMSG I GET_SELECTNODES |CI$0411 S
5366 CMSG I GET_SELECTSINGLENODE |CI$0412 S
5367
5368 // Node Collections
5369 // READONLY PROPERTIES
5370
5371 CMSG I GET_PHITEM |CI$0413 I
5372 CMSG I GET_PILENGTH |CI$0414
5373
5374 CMSG I GET_ENUMNODELIST |CI$0415 I
5375 CMSG I GET_RESET |CI$0416
5376
5377 // Named Node Map
5378
5379 CMSG I GET_NAMEDITEM |CI$0417 S
5380 CMSG I GET_QUALIFIEDITEM |CI$0418 S S
5381 CMSG I GET_REMOVENAMEDITEM |CI$0419 S
5382 CMSG I GET_REMOVEQUALIFIEDITEM |CI$041A S S
5383 CMSG I GET_SETNAMEDITEM |CI$041B I
5384
5385 // XML DOM Document
5386 // Read only properties
5387
5388 CMSG I GET_PHDOCTYPE |CI$041C
5389 CMSG I GET_PHIMPLEMENTATION |CI$041D
5390 CMSG I GET_PHPARSEERROR |CI$041E
5391 CMSG I GET_PBREADYSTATE |CI$041F
5392 CMSG S GET_PSURL |CI$0420
5393
5394 // Read Write Properties
5395
5396 CMSG V SET_PBASYNC |CI$0421 I
5397 CMSG I GET_PBASYNC |CI$0422
5398 CMSG V SET_PHDOCUMENTELEMENT |CI$0423 I
5399 CMSG I GET_PHDOCUMENTELEMENT |CI$0424
5400 CMSG V SET_PBPRESERVEWHITESPACE |CI$0425 I
5401 CMSG I GET_PBPRESERVEWHITESPACE |CI$0426
5402 CMSG V SET_PBRESOLVEEXTERNALS |CI$0427 I
5403 CMSG I GET_PBRESOLVEEXTERNALS |CI$0428
5404 CMSG V SET_PBVALIDATEONPARSE |CI$0429 I
5405 CMSG I GET_PBVALIDATEONPARSE |CI$042A
5406
5407 // Events
5408
5409 CMSG I MSG_ONDATAAVAILABLE |CI$042B
5410 CMSG I MSG_ONREADYSTATECHANGE |CI$042C
5411
5412 // Methods
5413
5414 CMSG I GET_ABORT |CI$042D
5415 CMSG I GET_ELEMENTSBYTAGNAME |CI$042E S
5416 CMSG I GET_LOADDOCUMENT |CI$042F S
5417 CMSG I GET_LOADXML |CI$0430 S
5418 CMSG I GET_NODEFROMID |CI$0431 S
5419 CMSG I GET_SAVEDOCUMENT |CI$0432 S
5420
5421 // Parse Error
5422 // Read Only Properties
5423
5424 CMSG I GET_PIERRORCODE |CI$0433
5425 CMSG I GET_PIFILEPOS |CI$0434
5426 CMSG I GET_PILINE |CI$0435
5427 CMSG I GET_PILINEPOS |CI$0436
5428 CMSG S GET_PSREASON |CI$0437
5429 CMSG S GET_PSSRCTEXT |CI$0438
5430 CMSG S GET_PSERRORURL |CI$0439
5431
5432 // DOM Implementation
5433 // Method
5434
5435 CMSG I GET_HASFEATURE |CI$043A S S
5436
5437 // Methods
5438
5439 CMSG S GET_SUBSTRINGDATA |CI$043B I I
5440 CMSG I GET_APPENDDATA |CI$043C S
5441 CMSG I GET_INSERTDATA |CI$043D I S
5442 CMSG I GET_DELETEDATA |CI$043E I I
5443 CMSG I GET_REPLACEDATA |CI$043F I I S
5444
5445 // Attributes
5446
5447 CMSG S GET_PSNAME |CI$0440
5448
5449 // Elements
5450 // Read Only properties
5451
5452 CMSG S GET_PSTAGNAME |CI$0441
5453
5454 // Methods
5455
5456 CMSG V SET_ATTRIBUTEVALUE |CI$0442 S S
5457 CMSG S GET_ATTRIBUTEVALUE |CI$0443 S
5458 CMSG I GET_REMOVEATTRIBUTE |CI$0444 S
5459 CMSG I GET_ATTRIBUTENODE |CI$0445 S
5460 CMSG V SET_ATTRIBUTENODE |CI$0446 I
5461 CMSG I GET_REMOVEATTRIBUTENODE |CI$0447 I
5462 //CMSG I GET_ELEMENTSBYTAGNAME |CI$0448 S
5463
5464 // DOM Text
5465 // Methods
5466
5467 CMSG I GET_SPLITTEXT |CI$0449 I
5468
5469 // DOM Processing Instruction
5470 // Read Only Properties
5471 CMSG S GET_PSTARGET |CI$044A
5472
5473 // DOM Document Type
5474 CMSG I GET_PHENTITIES |CI$044B
5475 CMSG I GET_PHNOTATIONS |CI$044C
5476
5477 // DOM Notations
5478
5479 CMSG S GET_PSPUBLICID |CI$044D
5480 CMSG S GET_PSSYSTEMID |CI$044E
5481 CMSG S GET_PSNOTATIONNAME |CI$044F
5482
5483 // added to document
5484
5485 CMSG I GET_CREATEATTRIBUTE |CI$0450 S
5486 CMSG I GET_CREATECDATASECTION |CI$0451 S
5487 CMSG I GET_CREATECOMMENT |CI$0452 S
5488 CMSG I GET_CREATEDOCUMENTFRAGMENT |CI$0453
5489 CMSG I GET_CREATEELEMENT |CI$0454 S
5490 CMSG I GET_CREATEENTITYREFERENCE |CI$0455 S
5491 CMSG I GET_CREATENODE |CI$0456 I S S
5492 CMSG I GET_CREATEPROCESSINGINSTRUCTION |CI$0457 S S
5493 CMSG I GET_CREATETEXTNODE |CI$0458 S
5494
5495 // added to element (r/w property)
5496
5497 CMSG V SET_PSTEXT |CI$0459 S
5498 CMSG I GET_CHANGENODETYPE |CI$045A I I
5499 CMSG I GET_PHELEMENTITEM |CI$045B I
5500
5501 CMSG S GET_TRANSFORMNODE |CI$04A9 I
5502 CMSG A GET_PAXML |CI$0502
5503 CMSG I GET_LOADXMLFROMADDRESS |CI$0503 A
5504 CMSG I GET_TRANSFORMNODETOADDRESS |CI$0517
5505#ENDCOMMAND
5506
5507#COMMAND Define$BuiltIn$FlexCom2$Messages
5508
5509 CMSG S GET_PSPROGID |CI$0554
5510 CMSG S SET_PSPROGID |CI$0555
5511 CMSG S GET_pvComObject |CI$0556
5512 CMSG S SET_pvComObject |CI$0557
5513 CMSG S MSG_CREATECOMOBJECT |CI$0558
5514 CMSG S MSG_RELEASECOMOBJECT |CI$0559
5515 CMSG S MSG_COMADDREF |CI$055a
5516 CMSG S GET_COMQUERYINTERFACE |CI$055b
5517 CMSG S MSG_PREPAREPARAMS |CI$055c
5518 CMSG S MSG_DEFINEPARAM |CI$055d
5519 CMSG S GET_INVOKECOMMETHOD |CI$055e
5520 CMSG S MSG_INVOKECOMMETHOD |CI$055e
5521 CMSG S GET_COMPROPERTY |CI$055f
5522 CMSG S SET_COMPROPERTY |CI$0560
5523 CMSG S MSG_REGISTERCOMEVENT |CI$0561
5524 CMSG S GET_OLECONTAINER |CI$0562
5525 CMSG S GET_OLEFRAMECONTAINER |CI$0563
5526 CMSG S MSG_ONDFFOCUS |CI$0564
5527 CMSG S MSG_DISPLAYPROPERTYSHEET |CI$0565
5528 CMSG S MSG_CREATECOMOBJECTFROMFILE |CI$0566
5529 CMSG S MSG_SAVETOFILE |CI$0567
5530 CMSG S MSG_SAVETORESOURCEFILE |CI$0568
5531 CMSG S GET_PSRESOURCEFILE |CI$0569
5532 CMSG S SET_PSRESOURCEFILE |CI$056a
5533 CMSG S GET_PSRESOURCENAME |CI$056b
5534 CMSG S SET_PSRESOURCENAME |CI$056c
5535 CMSG S SET_PSRESOURCEDATA |CI$056d
5536 CMSG S GET_PEAUTOCREATE |CI$056e
5537 CMSG S SET_PEAUTOCREATE |CI$056f
5538 CMSG S GET_PSLICENSEKEY |CI$0570
5539 CMSG S SET_PSLICENSEKEY |CI$0571
5540 CMSG S MSG_REGISTERPROPERTYCHANGEEVENT |CI$0572
5541 CMSG S GET_PHDISPATCHDRIVER |CI$0573
5542 CMSG S MSG_CLEARDISPATCHDRIVER |CI$0574
5543 CMSG S MSG_ONCREATE |CI$0575
5544 CMSG S MSG_ONINPLACEACTIVATE |CI$0576
5545 CMSG S GET_COMLOADPICTURE |CI$0577
5546 CMSG S GET_COMACTIVEOBJECT |CI$0578
5547 CMSG S GET_PSEVENTID |CI$057C
5548 CMSG S SET_PSEVENTID |CI$057D
5549 CMSG S GET_PABASE64RESOURCEFROMFILE |CI$0644 // internal - added for 12.0 migration
5550
5551#ENDCOMMAND
5552
5553#COMMAND Define$BuiltIn$Transfer$Messages
5554 // ftp and http transfer
5555
5556 CMSG S GET_PSREMOTEHOST |CI$045C
5557 CMSG V SET_PSREMOTEHOST |CI$045D S
5558 CMSG S GET_PSAGENT |CI$045E
5559 CMSG V SET_PSAGENT |CI$045F S
5560 CMSG S GET_PSPROXY |CI$0460
5561 CMSG V SET_PSPROXY |CI$0461 S
5562 CMSG I GET_PIREMOTEPORT |CI$0462
5563 CMSG V SET_PIREMOTEPORT |CI$0463 I
5564 CMSG I GET_PETRANSFERFLAGS |CI$0464
5565 CMSG V SET_PETRANSFERFLAGS |CI$0465 I
5566 CMSG I GET_PIBUFFERSIZE |CI$0466
5567 CMSG V SET_PIBUFFERSIZE |CI$0467 I
5568 CMSG I GET_ROOTHANDLE |CI$0468
5569 CMSG I GET_LASTERRORCODE |CI$0469
5570
5571 CMSG I GET_FILESIZE |CI$046A S
5572 CMSG I GET_FILEATTRIBUTES |CI$046B S
5573 CMSG I GET_PETRANSFERTYPE |CI$046C
5574 CMSG V SET_PETRANSFERTYPE |CI$046D I
5575 CMSG I GET_PBPASSIVEMODE |CI$046E
5576 CMSG V SET_PBPASSIVEMODE |CI$046F I
5577 CMSG I GET_CONNECTIONHANDLE |CI$0470
5578 CMSG I GET_CONNECT |CI$0471
5579 CMSG I GET_DISCONNECT |CI$0472
5580 CMSG S GET_CURRENTDIRECTORY |CI$0473
5581 CMSG I GET_CHANGEDIRECTORY |CI$0474 S
5582 CMSG I GET_UPLOADFILE |CI$0475 S S
5583 CMSG I GET_DOWNLOADFILE |CI$0476 S S
5584 CMSG I GET_CREATEFTPDIRECTORY |CI$0477 S
5585 CMSG I GET_REMOVEFTPDIRECTORY |CI$0478 S
5586 CMSG I GET_RENAMEFTPFILE |CI$0479 S S
5587 CMSG I GET_DELETEFTPFILE |CI$047A S
5588 CMSG S GET_FINDFIRSTFTPFILE |CI$047B S
5589 CMSG S GET_FINDNEXTFTPFILE |CI$047C
5590 CMSG V MSG_ENDFTPFILEFIND |CI$047D
5591 CMSG I GET_FTPFILEEXIST |CI$047E S
5592 CMSG V MSG_DIRECTORYLIST |CI$047F S
5593 CMSG V MSG_CANCELTRANSFER |CI$0480
5594 CMSG V MSG_ONTRANSFERSTATUS |CI$0481 I I
5595 CMSG V MSG_ONDIRECTORYLIST |CI$0482 S I
5596
5597 CMSG S GET_PSPROTOCOLVERSION |CI$0483
5598 CMSG V SET_PSPROTOCOLVERSION |CI$0484 S
5599 CMSG S GET_PSSAVEASFILE |CI$0485
5600 CMSG V SET_PSSAVEASFILE |CI$0486 S
5601 CMSG I GET_ADDHEADER |CI$0487 S S
5602 CMSG V MSG_CLEARHEADERS |CI$0488
5603 CMSG I GET_HTTPGETREQUEST |CI$0489 S
5604 //SF - The arguments are not used, see command cmsg for definition,
5605 //nowadays it just makes a replace, so we simply supply bogus arguments
5606 CMSG X GET_HTTPPOSTADDRREQUEST |CI$048A
5607 CMSG X GET_HTTPPUTADDRREQUEST |CI$048B
5608 CMSG X MSG_ONDATARECEIVED |CI$048C
5609 // added to 10.0
5610 CMSG X GET_RESPONSEHEADER |CI$0589
5611 CMSG X GET_RESPONSESTATUSCODE |CI$058a
5612
5613
5614#ENDCOMMAND
5615
5616
5617#COMMAND Define$BuiltIn$WAS$Messages
5618 CMSG V MSG_START_WEBAPP_SESSION |CI$048D
5619 CMSG V MSG_OUTPUTHTML |CI$048E S
5620 CMSG V MSG_OUTPUTPLAINTEXT |CI$048F S
5621 CMSG V MSG_LOGEVENT |CI$0490 I S
5622 CMSG S GET_HTMLFORMVALUE |CI$0491 S
5623 CMSG S GET_HTMLQUERYSTRING |CI$0492 S
5624 CMSG V MSG_OUTPUTIMAGE |CI$0493 S
5625 CMSG V MSG_OUTPUTTEXTFILE |CI$0494 S
5626 CMSG V MSG_REQUESTFILERECORDS |CI$0495 I
5627 CMSG V MSG_REQUESTFILEFIELDVALUES |CI$0496 I
5628 CMSG S GET_HTTPCOOKIE |CI$0497 S S
5629 CMSG V SET_HTTPCOOKIE |CI$0498 V
5630 CMSG V SET_HTTPCOOKIEATTRIB |CI$0499 V
5631 CMSG S GET_HTTPSERVERVARIABLE |CI$049A S
5632 CMSG V MSG_ONSETFILERECORDID |CI$049B V
5633 CMSG V MSG_ONSETFILEFIELDVALUE |CI$049C V
5634 CMSG S GET_ONDDVALUE |CI$049D V
5635 CMSG I GET_ONREQUESTDELETE |CI$049E S S
5636 CMSG I GET_ONREQUESTFIND |CI$049F V
5637 CMSG I GET_ONREQUESTSAVE |CI$04A0 S S
5638 CMSG I GET_ONDOPROCESS |CI$04A1 V
5639 CMSG I GET_ONREQUESTCLEAR |CI$04A2 V
5640 CMSG I GET_ONDFFUNC |CI$04A3 S S
5641 CMSG I GET_ONREQUESTFINDBYRECID |CI$04A4 V
5642 CMSG I GET_ONREQUESTDDUPDATE |CI$04A5 V
5643
5644
5645
5646 CMSG V MSG_ONATTACHSESSION |CI$0500
5647 CMSG V MSG_ONDETACHSESSION |CI$0501
5648 CMSG I GET_DOCALL |CI$0504 A
5649 CMSG S GET_INTERFACEMESSAGENAME |CI$0505 S
5650 CMSG I GET_INTERFACEMESSAGEID |CI$0506 I
5651 CMSG S GET_INTERFACEMESSAGEPARAMS |CI$0507 S
5652 CMSG S GET_INTERFACEMESSAGECOMMENT |CI$0508 S
5653 CMSG I GET_FINDSERVICEINDEX |CI$0509 S
5654 CMSG I GET_FINDMESSAGEID |CI$050A S
5655 CMSG V MSG_REGISTERSIMPLEINTERFACE |CI$050B V
5656 CMSG V MSG_REMOVEINTERFACE |CI$050C I
5657 CMSG V MSG_REMOVEALLINTERFACES |CI$050D
5658 CMSG V SET_PHOWEBSERVICEIMPLEMENTOR |CI$050E I
5659 CMSG I GET_PHOWEBSERVICEIMPLEMENTOR |CI$050F
5660 CMSG V MSG_REGISTERINTERFACE |CI$0510 V
5661 CMSG I GET_MIMICCALL |CI$0511 V
5662 CMSG I GET_INTERFACEMESSAGECOUNT |CI$0512
5663 CMSG I GET_WEBREQUESTARGUMENTCOUNT |CI$0513
5664 CMSG S GET_WEBREQUESTSERVICENAME |CI$0514
5665 CMSG S GET_WEBREQUESTARGUMENT |CI$0515 I
5666 CMSG I GET_INTERFACEMESSAGEISEXTENDED |CI$0516 I
5667 // added to 10.0 for Webservice support
5668 CMSG X GET_DESERIALIZEXML |CI$057e
5669 CMSG X GET_SERIALIZEXML |CI$057f
5670 CMSG X MSG_DISPOSEOBJECT |CI$0580
5671 CMSG X MSG_WEBSERVICEEXCEPTION |CI$058B
5672
5673 CMSG X GET_INTERFACEMESSAGEPARAMCOUNT |CI$0581
5674 CMSG X GET_INTERFACEMESSAGEPARAMTYPE |CI$0582
5675 CMSG X GET_INTERFACEMESSAGEPARAMTYPENAME |CI$0583
5676 CMSG X GET_INTERFACEMESSAGEPARAMDIMCOUNT |CI$0584
5677 CMSG X GET_INTERFACEMESSAGEPARAMNAME |CI$0585
5678 CMSG X GET_INTERFACETYPEDEFINITIONS |CI$0586
5679 CMSG X GET_INTERFACEMESSAGEPARAMBYREF |CI$05fc
5680
5681
5682
5683 CMSG X GET_CURRENTROWID |CI$05d8
5684 CMSG X GET_HASRECORD |CI$05d9
5685 CMSG X MSG_ONNEWCURRENTRECORD |CI$05da
5686 CMSG X MSG_FINDBYROWID |CI$05db
5687 CMSG X MSG_READBYROWID |CI$05dc
5688
5689 CMSG X GET_DFSTRICMP |CI$05fe
5690
5691 // File Drag&Drop Support: added to 12.0
5692 CMSG X GET_PBACCEPTDROPFILES |CI$0648
5693 CMSG X SET_PBACCEPTDROPFILES |CI$0649
5694 CMSG X MSG_ONFILEDROPPED |CI$064a
5695 CMSG X MSG_ONFILEDROPPEDINTERNAL |CI$064b
5696
5697 // Send EnableNewModalityLogic turns on and off the new modality logic which determines if
5698 // disabling the main_window also disables windows in other ownerless top level windows. By default this
5699 // is True and it should only be changed with the greatest of care and reset ASAP. This is used to make
5700 // the old winprint viewer work.
5701 CMSG X MSG_ENABLENEWMODALITYLOGIC |CI$64e
5702
5703 // Support for cIdleHandler added 12.1
5704 CMSG X SET_PBENABLED |CI$601
5705 CMSG X GET_PBENABLED |CI$61f
5706 CMSG X MSG_ONIDLE |CI$61c
5707 // added to all UI objects to better support menus
5708 CMSG X GET_CANUNDO |CI$67a
5709 CMSG X GET_CANCOPY |CI$67b
5710 CMSG X GET_CANDELETE |CI$67c
5711 CMSG X GET_CANCUT |CI$67d
5712 CMSG X GET_CANPASTE |CI$67e
5713 CMSG X GET_CANSELECT |CI$67f
5714 CMSG X GET_CANREDO |CI$680
5715
5716 // added 14.0
5717
5718 CMSG X MSG_SETHSCROLLBOX |CI$0685
5719 CMSG X Get_pbSizeToClientArea |CI$68E
5720 CMSG X Set_pbSizeToClientArea |CI$68F
5721 CMSG X Get_GuiWindowSize |CI$690
5722 CMSG X Get_DialogToGui |CI$691
5723 CMSG X Get_GuiToDialog |CI$692
5724 // this is the same as get_client_size. We added another name
5725 // and will be considering the old name to be obsolete. This one
5726 // is clearer
5727 CMSG X Get_GuiClientSize |CI$335
5728
5729 // added in 15.1 for MSXML6 support
5730 CMSG X Get_psDomSecondLevelProperty |CI$06a1
5731 CMSG X Set_psDomSecondLevelProperty |CI$06a2
5732 CMSG X Get_pbDomSecondLevelProperty |CI$06a3
5733 CMSG X Set_pbDomSecondLevelProperty |CI$06a4
5734 CMSG X Get_piDomSecondLevelProperty |CI$06a5
5735 CMSG X Set_piDomSecondLevelProperty |CI$06a6
5736 CMSG X Get_AddExternalSchemaFile |CI$06a7
5737 CMSG X Get_AddExternalSchemaDocument |CI$06a8
5738 CMSG X Get_ValidateDocument |CI$06a9
5739 CMSG X Get_piErrorCount |CI$06aa
5740 CMSG X Get_ErrorItem |CI$06ab
5741 CMSG X Get_psErrorXPath |CI$06ac
5742
5743 // added 16.1
5744 CMSG X Get_PARENT_CHANGED_STATE |CI$06b5
5745
5746#ENDCOMMAND
5747
5748
5749// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
5750//
5751// Command:
5752// Object ObjectName IS [A|AN] ObjectClass {ImageName} {SubImageNames...}
5753//
5754// Parameters:
5755// ObjectName is a string.
5756// ObjectClass is an integer.
5757// ImageName is a string.
5758//
5759// Description:
5760//
5761// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
5762
5763// JJT-5.1
5764//#COMMAND OBJECT R "IS" "A""AN" RVD#I
5765// #IF (!0<5) // if no image try to aquire one
5766// OBJECT !1 !2 !3 !4 !1
5767// #ELSE
5768// #DATA // start up the data stream
5769// #PUSH !Zj // save the unique object label
5770// #PUSH !b // save current definition state
5771// #IF (!b = 4) // if in procedure and not class
5772// #SET ZJ$ 0 // do not inc z
5773// #ELSE
5774// #SET ZJ$ !ZB // assign the next object id
5775// #ENDIF
5776// #PUSH !Zb // save this level on stack
5777// #IFDEF !4.AGG // was this a class with sub objects?
5778// #SET ZB$ !4.AGG // sub objects will begin at the
5779// #ELSE // next object after superclass
5780// #SET ZB$ 0 // base classes start at 0
5781// #ENDIF
5782// #SET ZI$ !ZI // count this object at the current level
5783// #PUSH !Zi // and push the level
5784// #IF (!b > 0) // if (in_object | in_class)
5785// #IF (!b & 2) // obj_flag == in_class?
5786// #IF (!b & 1) // obj_flag == in_Object?
5787// #ELSE // No Name for Subobject in constructor
5788// #REPLACE !$.!1.OBJ |CI-!Zj // object_name = -current_object
5789// #ENDIF
5790// #ENDIF
5791//// (LS) removed setting of ZJ; it is NOT being used.
5792//// (Removed when max lines increased > 32k)
5793//// #SET ZJ$ (32766-!a) // a very unique label for this object
5794// #DPUSH |CS".!1" // make name from parent and child
5795// #ELSE // global object name
5796// #DPUSH |CS"!1" // assign an absolute name to object
5797// #ENDIF
5798// #CHECK U_!4 _U // does class exist?
5799// #DPUSH U_!4 // define then class the class id
5800// GET$OBJ$IMAGE !5 // define the objects image
5801// #IF ((!b & 3) = 2) // if in_class & !in_object
5802// #DPUSH !$.!1.OBJ // pick the assigned dependant number
5803// #ELSE //
5804// #IF (!b = 0) // A global object must assign #
5805// #IFDEF !1.OBJ // Is the symbol defined, name_object?
5806// #DPUSH |CI0 // pick the next dependant number
5807// #ELSE
5808// #DPUSH |CI!Zj // force the dependant number
5809//// #SET ZJ$ ($1000+!Zj) // mark as global object
5810// #SET ZJ$ ($10000000+!Zj) // using 32-bit ids now
5811// #REPLACE !1.OBJ |CI!Zj // Assign an ID to this object
5812// #ENDIF
5813// #ELSE
5814// #DPUSH |CI0 // pick the next dependant number
5815// #ENDIF
5816// #ENDIF
5817// REGISTER_OBJECT !1
5818// #DPUSH GET_!1
5819// #SET B$ (!b | 1) // we are in a object definition
5820// !A [] OBJ$CREATE |VL // create the object now
5821
5822// #IFDEF !1.OBJ
5823// #IFCLASS !1.OBJ V$ // does this object have a global?
5824// MOVE CURRENT_OBJECT TO !1.OBJ // Move the object id to its global
5825// #ENDIF
5826// #ENDIF
5827
5828// #SPUSH //save the old class name
5829// #SET $$ !4
5830// #IFSUB '!$$SC' // if flex-defined class
5831// #IFSUB '!$$SM' // if begin-instance macro exists
5832// !$$SM !$ !5 !6 !7 !8 !9
5833// #ELSE
5834// FORWARD_BEGIN_CONSTRUCT !$ !5 !6 !7 !8 !9
5835// #ENDIF
5836// #ELSE
5837// ADD$IMAGE$ARGS MSG_CONSTRUCT_OBJECT !5 !6 !7 !8 !9 //else use default
5838// #ENDIF
5839// #ENDIF
5840//#ENDCOMMAND
5841
5842#COMMAND GET$OBJ$IMAGE // identify the image type
5843 #IFDEF !1 // is it a int (dynamic?)
5844 #DPUSH !1
5845 #ELSE
5846 #IFDEF !1.N // try typical naming scheme
5847 #DPUSH !1.N
5848 #ELSE
5849 #DPUSH |CI0 // not found, make it dynamic
5850 #ENDIF
5851 #ENDIF
5852#ENDCOMMAND
5853
5854#COMMAND ADD$IMAGE$ARGS // pass sub image args to constructor
5855 #IF (!0>0) // while there are args to process
5856 #IFDEF !1 // image name a int?
5857 #IFSAME !1 MSG_CONSTRUCT_OBJECT // a special flag to get it going
5858 #DATA // start the data stream
5859 #ENDIF
5860 #DPUSH !1 // save the message or image id
5861 #ELSE
5862 #IFDEF !1.N // typical image name
5863 #DPUSH !1.N
5864 #ELSE
5865 #DPUSH |CI0 // dynamic image name
5866 #ENDIF
5867 #ENDIF
5868 ADD$IMAGE$ARGS !2 !3 !4 !5 !6 !7 !8 !9
5869 #ELSE
5870 !A [] OBJ$SEND CURRENT_OBJECT |VL
5871 #ENDIF
5872#ENDCOMMAND
5873
5874// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
5875//
5876// Command:
5877// Register_Object Object_Name
5878//
5879// Parameters:
5880//
5881// Description:
5882//
5883// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
5884
5885// JJT-5.1
5886//#COMMAND REGISTER_OBJECT R
5887// #IFDEF UI.EXISTS
5888// #ELSE
5889// USE UI
5890// #ENDIF
5891// #IFDEF GET_!1
5892// #ELSE
5893// #REPLACE GET_!1 |CI!ZH
5894// #FREG GET_!1 RETURNS INTEGER
5895// #ENDIF
5896//#ENDCOMMAND
5897
5898// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
5899//
5900// Command:
5901// ITEM_LIST
5902//
5903// Parameters:
5904// None.
5905//
5906// Description:
5907// This is the startment that markes the beginning of a list of
5908// items to be attached to the current object. A list class object
5909// can not have a item list.
5910//
5911// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
5912
5913// JJT-5.1
5914//#COMMAND ITEM_LIST .
5915// #PUSH !Zg
5916// #PUSH !Zj
5917// #SET ZJ$ !a
5918// #PUSH !Zj
5919// #SET ZG$ 0 // Set the item counter to zero. This is used to
5920// // count and assign ID's to the items.
5921// !A [] OBJ$ILIST |CI0 // Create the command to save the item count,
5922// #FREF OBJ$!Zj$INUM !a // and tell flex to update it later.
5923//#ENDCOMMAND
5924
5925// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
5926//
5927// Command:
5928// ON_Item {Value} {[SEND Message {TO Object} | BEGIN_PULL_DOWN Pull_Down_Name {Pull_Down_Image}]}
5929//
5930// Parameters:
5931// Value is a string.
5932// Message is a integer.
5933// Object is a integer.
5934//
5935// Description:
5936// The ITEM command adds the next item to the current object list.
5937// The Message is the value which will be passed to the handler
5938// if this item is selected.
5939//
5940// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
5941
5942//#COMMAND ON_ITEM NDI """SEND""BEGIN_PULL_DOWN"
5943// #IF (!0<2)
5944// #IF (!0<1)
5945// ON_ITEM '' SEND MSG_NONE
5946// #ELSE
5947// ON_ITEM !1 SEND MSG_NONE
5948// #ENDIF
5949// #ELSE
5950// #IFSAME !1 SEND
5951// ON_ITEM '' !1 !2 !3 !4 !5 !6 !7 !8 !9
5952// #ELSE
5953// #IFSAME !2 SEND
5954// #SET ZG$ !ZG // Increment the item counter
5955// #IFSAME !4 TO
5956// #CHECK !6 .
5957// #DATA
5958// #IFDEF !3
5959// #DPUSH !3 // Push the (variable) message
5960// #ELSE
5961// #IFDEF MSG_!3
5962// #DPUSH MSG_!3 // Push the constant message
5963// #ELSE
5964// #DPUSH |CI0
5965// #FREF MSG_!3 !a,0 // Forward fef the message
5966// #ENDIF
5967// #ENDIF
5968// #IFDEF !5
5969// #DPUSH !5 // Push the (expression, var) dest object
5970// #ELSE
5971// #IFDEF !5.OBJ
5972// #DPUSH !5.OBJ // Push the global object
5973// #ELSE
5974// #DPUSH |CI0
5975// #FREF !5.OBJ !a,1 // Forward ref the object
5976// #ENDIF
5977// #ENDIF
5978// !A [] OBJ$ITEM_EXEC !1 |VL
5979// #ELSE
5980// #IF (!0 > 3)
5981// #CHECK !4 "TO"
5982// #ENDIF
5983// #IFDEF MSG_!3
5984// !A [] OBJ$ITEM MSG_!3 !1 // Create the item passing name and value.
5985// #ELSE
5986// #IFDEF !3
5987// !A [] OBJ$ITEM !3 !1 // Create the item passing name and value.
5988// #ELSE
5989// !A [] OBJ$ITEM |CI0 !1 // Create the item passing name and value.
5990// #FREF MSG_!3 !a // fix value later with procedure address
5991// #ENDIF
5992// #ENDIF
5993// #ENDIF
5994// #ELSE
5995// #IFSAME !2 BEGIN_PULL_DOWN
5996// #CHECK !3 _R
5997// REGISTER_OBJECT !3
5998// ON_ITEM !1 SEND ACTIVATE_PULL_DOWN TO (!3(CURRENT_OBJECT))
5999// #IFSUB 'END_MENU'
6000// CREATE_MENU !3 SUB_LOCATION !4 !5 !6 !7 !8 !9
6001// #ELSE
6002// #ERROR DFERR_COMP_INVALID_ARGUMENT "BEGIN_PULL_DOWN" REQUIRES MENU_SYSTEM PACKAGE
6003// #ENDIF
6004// #ENDIF
6005// #ENDIF
6006// #ENDIF
6007// #ENDIF
6008//#ENDCOMMAND
6009
6010// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6011//
6012// Command:
6013// Repeat_Item Count# TIMES {Item_Syntax}
6014//
6015// Parameters:
6016//
6017// Description:
6018//
6019// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6020
6021#COMMAND REPEAT_ITEM _RNDE "TIMES"
6022 ON_ITEM !3 !4 !5 !6 !7 !8 !9
6023 #SET Q$ (!1-1)
6024 #IF (!q>0)
6025 REPEAT_ITEM !q TIMES !3 !4 !5 !6 !7 !8 !9
6026 #ENDIF
6027#ENDCOMMAND
6028
6029// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6030//
6031// Command:
6032// Entry_Item File.Field {Entry_Options}
6033//
6034// Parameters:
6035//
6036// Description:
6037//
6038// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6039
6040// JJT-5.1
6041//#COMMAND ENTRY_ITEM R
6042// #SET ZG$ !ZG
6043// #DATA
6044// #IFCLASS !1 "EC"
6045// #ENTOPT {$C0A0=!1,$C002,$C003,!2}
6046// #ELSE
6047// #ENTOPT {$C0A0=!1,!2}
6048// #ENDIF
6049// !A [] OBJ$ENTRY$ITEM |CI0 |VL
6050//#ENDCOMMAND
6051
6052// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6053//
6054// Command:
6055// END_ITEM_LIST
6056//
6057// Parameters:
6058// None.
6059//
6060// Description:
6061// The END_ITEM_LIST command marks the end of a list of items.
6062//
6063// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6064
6065// JJT-5.1
6066//#COMMAND END_ITEM_LIST .
6067// #POP ZJ$
6068// #REPLACE OBJ$!Zj$INUM |CI!Zg // Update the count in the ITEM_LIST cmd.
6069// !A [] OBJ$ENDILIST OBJ$!Zj$INUM // Tell runtime this is the end of list.
6070// #POP ZJ$
6071// #POP ZG$
6072//#ENDCOMMAND
6073
6074// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6075//
6076// Command:
6077// END_PULL_DOWN
6078//
6079// Parameters:
6080// None.
6081//
6082// Description:
6083// Ends the structure of an ON_ITEM ... BEGIN_PULL_DOWN ... as used by
6084// Menu_System package.
6085//
6086// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6087
6088#COMMAND END_PULL_DOWN .
6089 #IFSUB 'END_MENU'
6090 END_ITEM_LIST
6091 END_OBJECT
6092 #ELSE
6093 #ERROR DFERR_COMP_INVALID_ARGUMENT "BEGIN_PULL_DOWN" REQUIRES MENU_SYSTEM PACKAGE
6094 #ENDIF
6095#ENDCOMMAND
6096
6097// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6098//
6099// Command:
6100// On_Key KeyName SEND Message {TO Object} {PRIVATE}
6101//
6102// Parameters:
6103// KeyName is a valid hot key name.
6104// Message is valid message name.
6105// Object is the a valid object name.
6106//
6107// Description:
6108// The ON_KEY command tells the menu manager to pass the
6109// specified Message code to the specified Object when the
6110// KeyNAme is pressed. If no Object name is passed, the current
6111// object is used. Passing MSG_NONE for Message causes the key to do
6112// nothing, passing MSG_DEFAULT_KEY will restore the default key definition.
6113//
6114// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6115
6116//#COMMAND ON_KEY RULGBO#SDN "SEND" RLGBO#SDN """TO""PRIVATE" _DNOB """PRIVATE" .
6117// #IFSAME !4 PRIVATE
6118// ON_KEY !1 !2 !3 TO |CI-1 PRIVATE
6119// #ELSE
6120// #DATA
6121// #DPUSH !1
6122// #IFSAME !4 TO
6123// #IFDEF !5
6124// #DPUSH !5
6125// #ELSE
6126// #IFDEF !5.OBJ
6127// #DPUSH !5.OBJ
6128// #ELSE
6129// #DPUSH |CI0
6130// #FREF !5.OBJ !a,1
6131// #ENDIF
6132// #ENDIF
6133// #ELSE
6134// #DPUSH |CI-1
6135// #ENDIF
6136// #IFSAME !6 PRIVATE
6137// #DPUSH |CI1
6138// #ENDIF
6139// #IFDEF !3
6140// !A [] OBJ$ONKEY !3 |VL
6141// #ELSE
6142// #IFDEF MSG_!3
6143// !A [] OBJ$ONKEY MSG_!3 |VL
6144// #ELSE // else the command is defined in flex code
6145// !A [] OBJ$ONKEY |CI0 |VL // get flex to fix the fwd ref
6146// #FREF MSG_!3 !a
6147// #ENDIF
6148// #ENDIF
6149// #ENDIF
6150//#ENDCOMMAND
6151
6152// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6153//
6154// Command:
6155// END_OBJECT
6156//
6157// Parameters:
6158// None required
6159//
6160// Description:
6161// END_OBJECT tells the manager we are done defining an object.
6162//
6163// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6164
6165// JJT-5.1
6166//#COMMAND END_OBJECT
6167// //
6168// // The following section was added 01-08-90 by SAL to support inheritable
6169// // end-instance macros for classes
6170// //
6171// #IFSUB '!$$SC' //if flex-defined class
6172// #IFSUB '!$$EM' //if end-instance macro defined for class,
6173// !$$EM !$ !1 !2 !3 !4 !5 !6 !7 !8 !9
6174// #ELSE
6175// FORWARD_END_CONSTRUCT !$ !1 !2 !3 !4 !5 !6 !7 !8 !9
6176// #ENDIF
6177// #ELSE
6178// DEFAULT_END_OBJECT //else use default
6179// #ENDIF
6180// #SPOP //restore old class name
6181// //
6182// // end of addition 01-08-90 by SAL
6183// //
6184//#ENDCOMMAND
6185
6186// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6187//
6188// Command:
6189// DEFAULT_END_OBJECT
6190//
6191// Parameters:
6192// NONE
6193//
6194// Description:
6195// This command terminates an object declaration
6196//
6197// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6198
6199#COMMAND DEFAULT_END_OBJECT .
6200 !A [] OBJ$END //Mark the end of the object list.
6201 #POP ZI$ //restore sub_obj_count
6202 #POP ZB$ //restore current_dep
6203 #POP B$ //restore obj_flag
6204 #POP ZJ$ //restore temp label
6205#ENDCOMMAND
6206
6207// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6208//
6209// Command:
6210// Start_Ui {Object}
6211//
6212// Parameters:
6213// NONE
6214//
6215// Description:
6216// This command will dispatch io to the current focus. it will
6217// remain in this routine until a non-zero return code is received.
6218//
6219// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6220
6221#COMMAND START_UI
6222 #IF (!0>0)
6223 SEND ACTIVATE TO !1
6224 #ENDIF
6225 !A [] OBJ$IODISPATCH |CI0 |CI0
6226#ENDCOMMAND
6227
6228// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6229//
6230// Command:
6231// UI_ACCEPT Object {GROUP | OBJECT} TO ReturnValue
6232//
6233// Parameters:
6234//
6235// Description:
6236//
6237// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6238
6239#COMMAND UI_ACCEPT RSDGBO#L RDGBO#L RDGBO#L _CEL#BOG .
6240 #IFSAME !2 GROUP OBJECT
6241 #CHECK !3 "TO"
6242 #DATA
6243 #IFSAME !2 GROUP
6244 #DPUSH |CI1
6245 #ELSE
6246 #IFSAME !2 OBJECT
6247 #DPUSH |CI0
6248 #ENDIF
6249 #ENDIF
6250 #DPUSH !4
6251 #IFDEF !1
6252 !A [] OBJ$ACCEPT !1 |VL
6253 #ELSE
6254 #IFDEF !1.OBJ
6255 !A [] OBJ$ACCEPT !1.OBJ |VL
6256 #ELSE
6257 !A [] OBJ$ACCEPT |CI0 |VL
6258 #FREF !1.OBJ !a
6259 #ENDIF
6260 #ENDIF
6261 #ELSE
6262 UI_ACCEPT !1 OBJECT !2 !3 !4 !5 !6 !7
6263 #ENDIF
6264#ENDCOMMAND
6265
6266// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6267//
6268// Command:
6269// SET Property {OF Object} {ITEM #} TO Value {...}
6270//
6271// Parameters:
6272//
6273// Description:
6274//
6275// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6276
6277#COMMAND SET
6278 GET$SET SET !1 !2 !3 !4 !5 !6 !7 !8 !9
6279#ENDCOMMAND
6280
6281// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6282//
6283// Command:
6284// GET Property {OF Object} {ITEM #} TO Value {...}
6285//
6286// Parameters:
6287//
6288// Description:
6289//
6290// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6291
6292#COMMAND GET
6293 GET$SET GET !1 !2 !3 !4 !5 !6 !7 !8 !9
6294#ENDCOMMAND
6295
6296// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6297//
6298// Command:
6299// FORWARD {GET | SET | SEND} Property {...}
6300//
6301// Parameters:
6302//
6303// Description:
6304//
6305// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6306
6307#COMMAND FORWARD "GET""SET""SEND"
6308// #REPLACE __@INSIDE_FORWARD@__
6309 MOVE 1 TO FORWARD$MESSAGE
6310 !1 !2 !3 !4 !5 !6 !7 !8 !9
6311// #UNDEF __@INSIDE_FORWARD@__ // Leaving function/proc.
6312#ENDCOMMAND
6313
6314// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6315//
6316// Command:
6317// DELEGATE {GET | SET | SEND} Property {...}
6318//
6319// Parameters:
6320//
6321// Description:
6322//
6323// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6324
6325#COMMAND DELEGATE "GET""SET""SEND"
6326// #REPLACE __@INSIDE_DELEGATE@__
6327 MOVE 8 TO FORWARD$MESSAGE
6328 !1 !2 !3 !4 !5 !6 !7 !8 !9
6329// #UNDEF __@INSIDE_DELEGATE@__ // Leaving function/proc.
6330#ENDCOMMAND
6331
6332// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6333//
6334// Command:
6335// BROADCAST {RECURSIVE | RECURSIVE_UP} {IGNORE_RETURN} {GET | SET | SEND} Property {...}
6336//
6337// Parameters:
6338//
6339// Description:
6340//
6341// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6342
6343#COMMAND BROADCAST "GET""SET""SEND""RECURSIVE""RECURSIVE_UP""NO_STOP"
6344 #IFSAME !1 RECURSIVE RECURSIVE_UP
6345 #CHECK !2 '"GET""SET""SEND""NO_STOP"'
6346 #IFSAME !1 RECURSIVE
6347 MOVE 20 TO FORWARD$MESSAGE // broadcast + recursive_down
6348 #ELSE
6349 MOVE 68 TO FORWARD$MESSAGE // broadcast + recursive_up
6350 #ENDIF
6351 #IFSAME !2 NO_STOP
6352 #CHECK !3 '"GET""SET""SEND"'
6353 MOVE (FORWARD$MESSAGE+128) TO FORWARD$MESSAGE // no stop on non-0 return
6354 !3 !4 !5 !6 !7 !8 !9
6355 #ELSE
6356 !2 !3 !4 !5 !6 !7 !8 !9
6357 #ENDIF
6358 #ELSE
6359 MOVE 4 TO FORWARD$MESSAGE // broadcast
6360 #IFSAME !1 NO_STOP
6361 #CHECK !2 '"GET""SET""SEND"'
6362 MOVE (FORWARD$MESSAGE+128) TO FORWARD$MESSAGE // + no_stop
6363 !2 !3 !4 !5 !6 !7 !8 !9
6364 #ELSE
6365 !1 !2 !3 !4 !5 !6 !7 !8 !9
6366 #ENDIF
6367 #ENDIF
6368#ENDCOMMAND
6369
6370#COMMAND BROADCAST_FOCUS "GET""SET""SEND""RECURSIVE""RECURSIVE_UP""NO_STOP"
6371 #IFSAME !1 RECURSIVE RECURSIVE_UP
6372 #CHECK !2 '"GET""SET""SEND""NO_STOP"'
6373 #IFSAME !1 RECURSIVE
6374 MOVE 52 TO FORWARD$MESSAGE // broadcast + focus + recursive_down
6375 #ELSE
6376 MOVE 100 TO FORWARD$MESSAGE // broadcast + focus + recursive_up
6377 #ENDIF
6378 #IFSAME !2 NO_STOP
6379 #CHECK !3 '"GET""SET""SEND"'
6380 MOVE (FORWARD$MESSAGE+128) TO FORWARD$MESSAGE // no stop on non-0 return
6381 !3 !4 !5 !6 !7 !8 !9
6382 #ELSE
6383 !2 !3 !4 !5 !6 !7 !8 !9
6384 #ENDIF
6385 #ELSE
6386 MOVE 36 TO FORWARD$MESSAGE // broadcast + focus
6387 #IFSAME !1 NO_STOP
6388 #CHECK !2 '"GET""SET""SEND"'
6389 MOVE (FORWARD$MESSAGE+128) TO FORWARD$MESSAGE // + no_stop
6390 !2 !3 !4 !5 !6 !7 !8 !9
6391 #ELSE
6392 !1 !2 !3 !4 !5 !6 !7 !8 !9
6393 #ENDIF
6394 #ENDIF
6395#ENDCOMMAND
6396
6397
6398// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6399//
6400// Command:
6401// Procedure {Set} Message {FOR Class} {{Type Argument} ...}
6402//
6403// Parameters:
6404//
6405// Description:
6406//
6407// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6408
6409#COMMAND PROCEDURE R
6410 // The interface to handle$message is slightly different in the mangling system.
6411 // The set is not concatenated with the symbol, because the mangling will generate its own symbol later.
6412 #IFSAME !1 SET
6413 #IFDEF MANGLE_NAMES
6414 HANDLE$MESSAGE SET !2 !3 !4 !5 !6 !7 !8 !9
6415 #ELSE
6416 HANDLE$MESSAGE SET_!2 !3 !4 !5 !6 !7 !8 !9
6417 #ENDIF
6418 #ELSE
6419 #IFDEF MANGLE_NAMES
6420 HANDLE$MESSAGE MSG !1 !2 !3 !4 !5 !6 !7 !8 !9
6421 #ELSE
6422 HANDLE$MESSAGE MSG_!1 !2 !3 !4 !5 !6 !7 !8 !9
6423 #ENDIF
6424 #ENDIF
6425#ENDCOMMAND
6426
6427
6428#COMMAND MESSAGE$ADDRESS
6429 #IFDEF !1
6430 #ELSE // assign the next message number now
6431 #SET ZC$ !ZC
6432 #IF (!Zc>$0FFFFFFF) // using 32-bit msg ids now (256M total allowed)
6433 #ERROR DFERR_COMP_TOO_MANY_MESSAGES Maximum number of message/property definitions exceeded
6434 #ELSE
6435// #XREF Message !1 as |CI!Zc was defined on line !a
6436 #REPLACE !1 |CI!Zc // this will cause all fwd refs to be fixed.
6437 #ENDIF
6438 #ENDIF
6439#ENDCOMMAND
6440
6441// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6442//
6443// Command:
6444// Register_Procedure Message {FOR Class} {{Type Argument} ...}
6445//
6446// Parameters:
6447//
6448// Description:
6449//
6450// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6451
6452
6453#COMMAND REGISTER_PROCEDURE R
6454 #IFDEF UI.EXISTS
6455 #ELSE
6456 USE UI
6457 #ENDIF
6458 #IFSAME GLOBAL !2 !3 // procedure or procedure set
6459 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION GLOBAL PROCEDURES CANNOT BE REGISTERED
6460 #ELSE
6461 #IFSAME !1 SET
6462 // Error if already defined as global
6463 #IFDEF SET_!2
6464 #IF (SET_!2<0)
6465 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION Set !2 is already defined as a global message
6466 #ENDIF
6467 #ENDIF
6468
6469 // Make sure the argument list is correct
6470 CHECK$METHOD$ARGUMENT$LIST !3 !4 !5 !6 !7 !8 !9
6471 // Even if there were errors parsing the argument list, try to make the symbol so that we resolve fwd refs correctly.
6472 #IFDEF MANGLE_NAMES
6473 // For mangling, #MARG is used to read the line and parse the argument list.
6474 #IFSAME OVERLOADED !3 !4 !5 !6 !7 !8 !9
6475 #IFDEF SET_!2
6476 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION This Method Was Previously Defined As Non-Overloaded
6477 #ENDIF
6478 // #MARG returns the mangled name in !? which gets new message number.
6479 // we don't support Byref with overloading
6480 #IFSAME BYREF !3 !4 !5 !6 !7 !8 !9
6481 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION "BYREF not allowed in overloaded methods"
6482 #ENDIF
6483 #MARG SET_!2 !3 !4 !5 !6 !7 !8 !9
6484 MESSAGE$ADDRESS !?
6485 // only create overloaded symbol if first time
6486 #IFNDEF SET_!2_OVERLOADED
6487 #REPLACE SET_!2_OVERLOADED |CI1
6488 #ENDIF
6489 #ELSE
6490 #IFDEF SET_!2_OVERLOADED
6491 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION This Method Was Previously Defined As Overloaded
6492 #ENDIF
6493 MESSAGE$ADDRESS SET_!2
6494 #ENDIF
6495 #ELSE
6496 MESSAGE$ADDRESS SET_!2
6497 #ENDIF
6498 #ELSE
6499 // check for already defined as global
6500 #IFDEF MSG_!1
6501 #IF (MSG_!1<0)
6502 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION MSG !1 is already defined as a global message
6503 #ENDIF
6504 #ENDIF
6505 // Check the argument list first
6506 CHECK$METHOD$ARGUMENT$LIST !2 !3 !4 !5 !6 !7 !8 !9
6507 // Likewise for messages with MSG prefix. #MARG is again used to parse the register_procedure line.
6508 #IFDEF MANGLE_NAMES
6509 #IFSAME OVERLOADED !2 !3 !4 !5 !6 !7 !8 !9
6510 #IFDEF MSG_!1
6511 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION This Method Was Previously Defined As Non-Overloaded
6512 #ENDIF
6513 // #MARG returns the mangled name in !? which gets new message number.
6514 // we don't support Byref with overloading
6515 #IFSAME BYREF !2 !3 !4 !5 !6 !7 !8 !9
6516 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION "BYREF not allowed in overloaded methods"
6517 #ENDIF
6518 #MARG MSG_!1 !2 !3 !4 !5 !6 !7 !8 !9
6519 MESSAGE$ADDRESS !?
6520 // only create overloaded symbol if first time
6521 #IFNDEF MSG_!1_OVERLOADED
6522 #REPLACE MSG_!1_OVERLOADED |CI1
6523 #ENDIF
6524 #ELSE
6525 #IFDEF MSG_!1_OVERLOADED
6526 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION This Method Was Previously Defined As Overloaded
6527 #ENDIF
6528 MESSAGE$ADDRESS MSG_!1
6529 #ENDIF
6530 #ELSE
6531 MESSAGE$ADDRESS MSG_!1
6532 #ENDIF
6533 #ENDIF
6534 #ENDIF
6535#ENDCOMMAND
6536
6537
6538// Argument list validation rules:
6539//
6540// The expected format is
6541//
6542// type1 id1 type2 id2 ... typen idn
6543//
6544// Functions have "Returns TypeReturn" at the end of the line.
6545// The keyword OVERLOADED cannot be placed between the ids or types.
6546// The keyword Global can proceed the list of parameters
6547//
6548
6549// Here are a list of the possible parsing errors.
6550
6551#COMMAND CHECK$ARGUMENT$LIST$ERROR1
6552 #ERROR DFERR_COMP_INVALID_METHOD_SYNTAX TYPE FOLLOWS TYPE IN DECLARATION
6553#ENDCOMMAND
6554
6555#COMMAND CHECK$ARGUMENT$LIST$ERROR2
6556 #ERROR DFERR_COMP_INVALID_METHOD_SYNTAX MISSING TYPE IN METHOD DECLARATION
6557#ENDCOMMAND
6558
6559#COMMAND CHECK$ARGUMENT$LIST$ERROR3
6560 #ERROR DFERR_COMP_INVALID_METHOD_SYNTAX KEYWORD OVERLOADED CANNOT BE BETWEEN A TYPE AND AN IDENTIFIER
6561#ENDCOMMAND
6562
6563#COMMAND CHECK$ARGUMENT$LIST$ERROR4
6564 #ERROR DFERR_COMP_INVALID_METHOD_SYNTAX RETURNS MUST BE FOLLOWED BY A RETURN TYPE
6565#ENDCOMMAND
6566
6567#COMMAND CHECK$ARGUMENT$LIST$ERROR5
6568 #ERROR DFERR_COMP_INVALID_METHOD_SYNTAX MISSING IDENTIFIER BEFORE RETURNS KEYWORD
6569#ENDCOMMAND
6570
6571#COMMAND CHECK$ARGUMENT$LIST$ERROR6
6572 #ERROR DFERR_COMP_INVALID_METHOD_SYNTAX MISSING TYPE IN METHOD DECLARATION
6573#ENDCOMMAND
6574
6575#COMMAND CHECK$ARGUMENT$LIST$ERROR7
6576 #ERROR DFERR_COMP_INVALID_METHOD_SYNTAX MISSING RETURN TYPE AFTER KEYWORD RETURNS IN METHOD DECLARATION
6577#ENDCOMMAND
6578
6579#COMMAND CHECK$ARGUMENT$LIST$ERROR8
6580 #ERROR DFERR_COMP_INVALID_METHOD_SYNTAX UNEXPECTED SYMBOL ENCOUNTERED AFTER RETURN TYPE IN METHOD DECLARATION
6581#ENDCOMMAND
6582
6583#COMMAND CHECK$ARGUMENT$LIST$ERROR9
6584 #ERROR DFERR_COMP_INVALID_METHOD_SYNTAX EXPECTING IDENTIFIER AFTER TYPE IN METHOD DECLARATION
6585#ENDCOMMAND
6586
6587#COMMAND CHECK$ARGUMENT$LIST$ERROR10
6588 #ERROR DFERR_COMP_INVALID_METHOD_SYNTAX UNEXPECTED DIMENSION SIZE SPECIFIER IN ARRAY TYPE DECLARATION
6589#ENDCOMMAND
6590
6591// Validation code is like this:
6592//
6593// CHECK$METHOD$ARGUMENT$LIST is called in register_function, register_procedure, and external$function
6594//
6595
6596#COMMAND CHECK$METHOD$ARGUMENT$LIST$FOR$ID // This is called after a type is read.
6597 #IFADIM !1
6598 //Make sure it has no specified dimension size
6599 #SPUSH
6600 #DIMSTRIP !1
6601 #IFSAME !$ 0 |CI0
6602 CHECK$METHOD$ARGUMENT$LIST$FOR$ID !2 !3 !4 !5 !6 !7 !8 !9
6603 #ELSE
6604 CHECK$ARGUMENT$LIST$ERROR10
6605 #ENDIF
6606 #SPOP
6607 #ELSE
6608 #IFSAME !1 BYREF
6609 CHECK$METHOD$ARGUMENT$LIST$FOR$ID2 !2 !3 !4 !5 !6 !7 !8 !9
6610 #ELSE
6611 CHECK$METHOD$ARGUMENT$LIST$FOR$ID2 !1 !2 !3 !4 !5 !6 !7 !8 !9
6612 #ENDIF
6613 #ENDIF
6614#ENDCOMMAND
6615
6616
6617#COMMAND CHECK$METHOD$ARGUMENT$LIST$FOR$ID2 // This is called after a type is read.
6618 #IF (!0>0)
6619 #IFSAME !1 OVERLOADED // Check for Overloaded between type and variable name
6620 CHECK$ARGUMENT$LIST$ERROR3
6621 #ELSE
6622 #IFSAME !1 RETURNS // Check if missing identifier before returns
6623 CHECK$ARGUMENT$LIST$ERROR5
6624 #ELSE
6625 #IFSAME !1 BYREF // Check for additional byref before identifier
6626 CHECK$ARGUMENT$LIST$ERROR9
6627 #ELSE
6628 // Parse now for the next type.
6629 CHECK$METHOD$ARGUMENT$LIST !2 !3 !4 !5 !6 !7 !8 !9
6630 #ENDIF
6631 #ENDIF
6632 #ENDIF
6633 #ELSE
6634 CHECK$ARGUMENT$LIST$ERROR9 // Missing identifier after type.
6635 #ENDIF
6636#ENDCOMMAND
6637
6638
6639#COMMAND CHECK$FOR$BOGUS$TRAILING$STUFF
6640 #IF (!0>0)
6641 #IFADIM !1
6642 //Array type
6643 //Make sure it has no specified dimension size
6644 #SPUSH
6645 #DIMSTRIP !1
6646 #IFSAME !$ 0 |CI0
6647 CHECK$FOR$BOGUS$TRAILING$STUFF !2
6648 #ELSE
6649 CHECK$ARGUMENT$LIST$ERROR10
6650 #ENDIF
6651 #SPOP
6652 #ELSE
6653 CHECK$ARGUMENT$LIST$ERROR8 // Garbage trailing on line
6654 #ENDIF
6655 #ENDIF
6656#ENDCOMMAND
6657
6658// Return type must follow Returns Keyword
6659#COMMAND CHECK$FOR$RETURN$TYPE
6660 #IF (!0=0)
6661 CHECK$ARGUMENT$LIST$ERROR7 // Error: Missing return type after keyword RETURNS
6662 #ELSE
6663 #DTYPE Q$ !1 // only check if there is a valid data type
6664 #If (!q=-1) // Check for the various types. If we find them, parse for an identifier with CHECK$METHOD$ARGUMENT$LIST$FOR$ID
6665 #ERROR DFERR_COMP_INVALID_DATATYPE (!1)
6666 #ELSE
6667 CHECK$FOR$BOGUS$TRAILING$STUFF !2 // Ok, look for garbage at end of line.
6668 #ENDIF
6669 #ENDIF
6670#ENDCOMMAND
6671
6672// Check list of arguments.
6673//
6674// Expected line could start with OVERLOADED or RETURNS.
6675// Otherwise it will start with a list of type, identifier ordered pairs.
6676
6677#COMMAND CHECK$METHOD$ARGUMENT$LIST
6678 #PUSH !q
6679 #IF (!0>0)
6680 #IFSAME !1 OVERLOADED
6681 // Start parse from the beginning (just ignores OVERLOADED)
6682 CHECK$METHOD$ARGUMENT$LIST !2 !3 !4 !5 !6 !7 !8 !9
6683 #ElSE
6684 #IFSAME !1 RETURNS
6685 // Look for return type that must follow it.
6686 CHECK$FOR$RETURN$TYPE !2 !3 !4 !5 !6 !7 !8 !9
6687 #ELSE
6688 #DTYPE Q$ !1 // only check if there is a valid data type
6689 #If (!q>-1) // Check for the various types. If we find them, parse for an identifier with CHECK$METHOD$ARGUMENT$LIST$FOR$ID
6690 CHECK$METHOD$ARGUMENT$LIST$FOR$ID !2 !3 !4 !5 !6 !7 !8 !9
6691 #ENDIF
6692 #ENDIF
6693 #ENDIF
6694 #ENDIF
6695 #POP Q$
6696#ENDCOMMAND
6697
6698
6699// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6700//
6701// Command:
6702// CALL RoutineName {Parameters ...}
6703//
6704// Parameters:
6705//
6706// Description:
6707//
6708// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6709
6710#COMMAND CALL RGBO#L
6711 SEND !1 TO DESKTOP !2 !3 !4 !5 !6 !7 !8 !9
6712#ENDCOMMAND
6713
6714// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6715//
6716// Command:
6717// SUB_PAGE NewPage FROM FromPage ;
6718// { (WindowNumber) | ;
6719// ({VERTICAL|HORIZONTAL} FromWindow ForWindows) | ;
6720// (RECTANGULAR FromWindow NumColumns NumRows) } {...}
6721//
6722// Parameters:
6723//
6724// Description:
6725//
6726// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6727
6728#COMMAND SUB_PAGE RT "FROM" RGBO#L
6729 #PUSH !Zg // h is the number of windows on
6730 #SET ZG$ 0 // the sub page.
6731 #DATA // start up the arguments
6732 #IFDEF !3
6733 #DPUSH !3 // based on variable page number
6734 #ELSE
6735 #CHECK !3.N _U
6736 #DPUSH !3.N // based on absolute page number
6737 #ENDIF
6738 SUB$IMAGE$DEFINE !4 !5 !6 !7 !8 !9 // loop thru the passed arguments
6739 #DPUSH |CI!Zg // store the number of windows
6740 #IFDEF !1.N
6741 #IFCLASS !1.N "C"
6742 #ERROR DFERR_COMP_DUPLICATE_PAGE_NAME SUB_PAGE !1 ALREADY DEFINED AS A PHYSICAL IMAGE
6743 #ELSE
6744 !A [] REDEFINE$SUB$PAGE !1.N |VL // create the sub image
6745 #ENDIF
6746 #ELSE
6747 INTEGER !1.N // create a int to place page # into
6748 !A [] CREATE$SUB$PAGE !1.N |VL // create the sub image
6749 #ENDIF
6750 #POP ZG$ // restore our general counter
6751#ENDCOMMAND
6752
6753#COMMAND SUB$IMAGE$DEFINE
6754 #IF (!0>0)
6755 #IFSAME !1 VERTICAL // define a vertical set of windows
6756 #DPUSH |CI-1 // vertical flag
6757 #DPUSH !2 // push the start window number
6758 #DPUSH !3 // and the number of windows
6759 #SET ZG$ (!Zg+!3) // how many was that?
6760 SUB$IMAGE$DEFINE !4 !5 !6 !7 !8 !9 // one more time
6761 #ENDIF
6762 #IFSAME !1 HORIZONTAL // horzontal (contiguous) windows
6763 #DPUSH |CI-2 // horizontal flag
6764 #DPUSH !2 // push the start window number
6765 #DPUSH !3 // and the number of windows
6766 #SET ZG$ (!Zg+!3) // how many was that?
6767 SUB$IMAGE$DEFINE !4 !5 !6 !7 !8 !9 // one more time
6768 #ENDIF
6769 #IFSAME !1 RECTANGULAR // a rectangular array of windows
6770 #DPUSH |CI-3 // the rect. flag
6771 #DPUSH !2 // push the start window number
6772 #DPUSH !3 // number of windows per row
6773 #DPUSH !4 // number of rows
6774 #SET ZG$ (!Zg+(!3*!4)) // not bad huh
6775 SUB$IMAGE$DEFINE !5 !6 !7 !8 !9 // and again
6776 #ENDIF
6777 #IFSAME !1 VERTICAL RECTANGULAR HORIZONTAL // May look strange, but reduces
6778 #ELSE // use of #if stack levels.
6779 #DPUSH !1 // its just a single window def
6780 #SET ZG$ !ZG // just add one
6781 SUB$IMAGE$DEFINE !2 !3 !4 !5 !6 !7 !8 !9 // recurse
6782 #ENDIF
6783 #ENDIF
6784#ENDCOMMAND
6785
6786// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6787//
6788// Command:
6789//
6790// Parameters:
6791//
6792// Description:
6793//
6794// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6795
6796#COMMAND MOVE_SUB_PAGE _RDOBR "TO" _RDOBRU
6797 #IFDEF !1
6798 !A [] MOVE$SUB$PAGE !1 !3
6799 #ELSE
6800 #CHECK !1.N _U
6801 !A [] MOVE$SUB$PAGE !1.N !3
6802 #ENDIF
6803#ENDCOMMAND
6804
6805// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6806//
6807// Command:
6808// USE PackageName | UI
6809//
6810// Parameters:
6811//
6812// Description:
6813//
6814// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6815#COMMAND USE R
6816 #IFSAME !1 UI
6817 #IFSUB '!1.EXISTS'
6818 #ELSE
6819 #REPLACE !1.EXISTS |CI!a
6820 INITIALIZE_INTERFACE
6821 Define$BuiltIn$DF$Messages // Define built in DF messages
6822 Define$BuiltIn$VDF$Messages // Define built in VDF messages
6823 Define$BuiltIn$WAS$Messages // Define built in Web App messages
6824 Define$BuiltIn$XML$Messages // Define built in XML messages
6825 Define$BuiltIn$Transfer$Messages // For FTP and HTTP classes
6826 Define$BuiltIn$Flexcom2$Messages // flexcom2
6827 #ENDIF
6828 #ELSE
6829 #USE !1
6830 #ENDIF
6831#ENDCOMMAND
6832
6833// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6834//
6835// Command:
6836//
6837// Parameters:
6838//
6839// Description:
6840//
6841// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6842
6843#COMMAND VFIND R R R .
6844 MOVE !2 TO INDEX_NUMBER
6845 #IFSAME !3 $0 $1 $2 $3 $4
6846 #SET Q$ !3
6847 !A [] $CC !1 |CI!q
6848 #ELSE
6849 !A [] $CC !1 !3
6850 #ENDIF
6851#ENDCOMMAND
6852
6853// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6854//
6855// Command:
6856//
6857// Parameters:
6858//
6859// Description:
6860//
6861// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6862
6863#COMMAND SCREEN_OPTIMIZE RL .
6864 #IFSAME !1 $0 $1
6865 #PUSH !Zg
6866 #SET ZG$ !1
6867 !A [] SCREEN$OPT |CI!Zg
6868 #POP ZG$
6869 #ELSE
6870 !A [] SCREEN$OPT !1
6871 #ENDIF
6872#ENDCOMMAND
6873
6874// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6875//
6876// Command:
6877// FORWARD_BEGIN_CONSTRUCT ClassName { <argument> ... }
6878//
6879// Parameters:
6880// ClassName is the name of the class which owns the macro that is
6881// forwarding.
6882// <argument> is any argument required
6883//
6884// Description:
6885// This command allows the instance-creation macros defined for classes
6886// to 'inherit' the instance-creation macro(s) defined by their
6887// superclass(es).
6888//
6889// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6890
6891#COMMAND FORWARD_BEGIN_CONSTRUCT R //<currentClassName> { <arg> ... }
6892 #IFSUB '!1$SC' // if flex-defined class
6893 #SPUSH
6894 #SET $$ !1$SC //get superclass name
6895 #IFSUB '!$$SM' //if class defines start macro
6896 !$$SM !$ !2 !3 !4 !5 !6 !7 !8 !9 //invoke it
6897 #ELSE //else not defined
6898 FORWARD_BEGIN_CONSTRUCT !$ !2 !3 !4 !5 !6 !7 !8 !9
6899 #ENDIF
6900 #SPOP
6901 #ELSE
6902 ADD$IMAGE$ARGS MSG_CONSTRUCT_OBJECT !2 !3 !4 !5 !6 !7 !8 !9 //use default
6903 #ENDIF
6904#ENDCOMMAND
6905
6906// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6907//
6908// Command:
6909// FORWARD_END_CONSTRUCT ClassName { <argument> ... }
6910//
6911// Parameters:
6912// ClassName is the name of the class which owns the macro that is
6913// forwarding.
6914// <argument> is any argument required
6915//
6916// Description:
6917// This command allows the instance-ending macros defined for classes
6918// to 'inherit' the instance-ending macro(s) defined by their
6919// superclass(es).
6920//
6921// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6922
6923#COMMAND FORWARD_END_CONSTRUCT R //<currentClassName> { <arg> ... }
6924 #IFSUB '!1$SC' // if flex-defined class
6925 #SPUSH // note: #SPUSH with no arg it pushes !$ (with no replacement). Don't pass arguments (obsolete technique as of 11.1)
6926 #SET $$ !1$SC //get superclass name
6927 #IFSUB '!$$EM' //if end-instance macro defined,
6928 !$$EM !$ !2 !3 !4 !5 !6 !7 !8 !9 //use it
6929 #ELSE
6930 FORWARD_END_CONSTRUCT !$ !2 !3 !4 !5 !6 !7 !8 !9
6931 #ENDIF
6932 #SPOP // note: #SPOP always pops to $$ - it never takes an argument
6933 #ELSE
6934 DEFAULT_END_OBJECT //else use default
6935 #ENDIF
6936#ENDCOMMAND
6937
6938#COMMAND SET_DEFERRED &R .
6939 !A [] $460 !1
6940#ENDCOMMAND
6941
6942// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6943//
6944// Command:
6945// NAME_ITEM <object_name> item names...
6946//
6947// Description:
6948// Gives names to items of objects in the form: object.item
6949// Assumes item number has already been set.
6950//
6951// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6952#COMMAND NAME_ITEM RT#L R
6953 #IFDEF !2
6954 #CHECK !2 _#LUVFEWNSG
6955 #SET Q$ !2
6956 NAME_ITEM !1 !3 !4 !5 !6 !7 !8 !9
6957 #ELSE
6958 #IFSAME !2 ITEM
6959 NAME_ITEM !1 !3 !4 !5 !6 !7 !8 !9
6960 #ELSE
6961 #IFSAME !2 COLUMN
6962 NAME_COLUMN !1 !3 !4 !5 !6 !7 !8 !9
6963 #ELSE
6964 #IFSAME !2 PROPERTY
6965 NAME_PROPERTY !1 !3 !4 !5 !6 !7 !8 !9
6966 #ELSE
6967 #REPLACE !1.!2 !1.OBJ ITEM !q
6968 #SET Q$ (!q+1)
6969 #IF !0>2
6970 NAME_ITEM !1 !3 !4 !5 !6 !7 !8 !9
6971 #ENDIF
6972 #ENDIF
6973 #ENDIF
6974 #ENDIF
6975 #ENDIF
6976#ENDCOMMAND
6977
6978// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6979//
6980// Command:
6981// NAME_COLUMN <object_name> item names...
6982//
6983// Description:
6984// Gives names to items of objects in the form: object.item
6985// Just like name_item except item numbers are relative to
6986// base_item.
6987// Assumes item number has already been set.
6988//
6989// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6990#COMMAND NAME_COLUMN RT#L R
6991 #IFDEF !2
6992 #CHECK !2 _#LUVFEWNSG
6993 #SET Q$ !2
6994 NAME_COLUMN !1 !3 !4 !5 !6 !7 !8 !9
6995 #ELSE
6996 #IFSAME !2 ITEM
6997 NAME_ITEM !1 !3 !4 !5 !6 !7 !8 !9
6998 #ELSE
6999 #IFSAME !2 COLUMN
7000 NAME_COLUMN !1 !3 !4 !5 !6 !7 !8 !9
7001 #ELSE
7002 #IFSAME !2 PROPERTY
7003 NAME_PROPERTY !1 !3 !4 !5 !6 !7 !8 !9
7004 #ELSE
7005 #REPLACE !1.!2 !1.OBJ ITEM (BASE_ITEM(!1.OBJ)+!q)
7006 #SET Q$ (!q+1)
7007 #IF !0>2
7008 NAME_COLUMN !1 !3 !4 !5 !6 !7 !8 !9
7009 #ENDIF
7010 #ENDIF
7011 #ENDIF
7012 #ENDIF
7013 #ENDIF
7014#ENDCOMMAND
7015
7016
7017// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7018//
7019// Command:
7020// NAME_PROPERTY <object_name> property names...
7021//
7022// Description:
7023// Gives names to property of objects in the form: object.item
7024//
7025// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7026
7027#COMMAND NAME_PROPERTY RT#L RT
7028 #IFSAME !2 ITEM
7029 NAME_ITEM !1 !3 !4 !5 !6 !7 !8 !9
7030 #ELSE
7031 #IFSAME !2 COLUMN
7032 NAME_COLUMN !1 !3 !4 !5 !6 !7 !8 !9
7033 #ELSE
7034 #IFSAME !2 PROPERTY
7035 NAME_PROPERTY !1 !3 !4 !5 !6 !7 !8 !9
7036 #ELSE
7037 #REPLACE !1.!2 (!2(!1.OBJ))
7038 #IF !0>2
7039 NAME_PROPERTY !1 !3 !4 !5 !6 !7 !8 !9
7040 #ENDIF
7041 #ENDIF
7042 #ENDIF
7043 #ENDIF
7044#ENDCOMMAND
7045
7046
7047// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7048//
7049// Command:
7050// NAME_OBJECT <object_name> ACCESS item names...
7051// ACCESS = CHILD, GLOBAL, COLUMN, PROPERTY, ITEM or ACCESS METHOD.
7052//
7053// Description:
7054// Gives names to objects in the form: object.obj
7055// and allows items, properties and COLUMNs to be defined.
7056// Inits item number to zero and assumes item names follow.
7057//
7058// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7059
7060#COMMAND NAME_OBJECT RT#L R
7061 #SET Q$ 0
7062 #IFDEF !2
7063 #CHECK !2 _R#LSD
7064 #REPLACE !1.OBJ !2
7065 #IF !0>2
7066 NAME_ITEM !1 !3 !4 !5 !6 !7 !8 !9
7067 #ENDIF
7068 #ELSE
7069// #CHECK !2 "CHILD""ITEM""GLOBAL""COLUMN""PROPERTY"
7070 #IFSAME !2 CHILD
7071 REGISTER_OBJECT !1
7072 #IFDEF !3
7073 NAME_OBJECT !1 (!1(!3)) !4 !5 !6 !7 !8 !9
7074 #ELSE
7075 #CHECK !3.OBJ _#LU
7076 NAME_OBJECT !1 (!1(!3.OBJ)) !4 !5 !6 !7 !8 !9
7077 #ENDIF
7078 #ELSE
7079 #IFSAME !2 GLOBAL
7080 #IFDEF !1.OBJ
7081 #CHECK !1.OBJ _NSDFW#L
7082 #ELSE
7083 INTEGER !1.OBJ
7084 #ENDIF
7085 #IFCLASS !1.OBJ V$
7086 #IF (!b & 1)
7087 MOVE CURRENT_OBJECT TO !1.OBJ
7088 #ELSE
7089 #IF (!b)
7090 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT NAME_OBJECT MUST PRECEDE CLASS OR PROCEDURE
7091 #ELSE
7092 MOVE 1023 TO !1.OBJ
7093 #ENDIF
7094 #ENDIF
7095 #ENDIF
7096 #IF !0>2
7097 NAME_ITEM !1 !3 !4 !5 !6 !7 !8 !9
7098 #ENDIF
7099 #ELSE
7100 NAME_!2 !1 !3 !4 !5 !6 !7 !8 !9
7101 #ENDIF
7102 #ENDIF
7103 #ENDIF
7104#ENDCOMMAND
7105
7106#COMMAND ITEM_GROUP .
7107 #PUSH !Zd
7108 #PUSH !Ze
7109 #SET ZD$ 0
7110 !A [] $462 |CI0 //create new item group; size is fwd-ref'd
7111 #SET ZE$ !a
7112 #FREF ITEM$GROUP!Ze !a
7113#ENDCOMMAND
7114
7115#COMMAND END_ITEM_GROUP .
7116 #REPLACE ITEM$GROUP!Ze |CI!Zd //define size of item group
7117 #POP ZE$
7118 #POP ZD$
7119#ENDCOMMAND
7120
7121#COMMAND DEPENDENT_ITEM R
7122 #IFSAME !2 ITEM //if ITEM is second arg, item name replacement was used
7123 #IFDEF !1
7124 !A [] $463 !1 !3 //add obj#,item# pair to current item group
7125 #ELSE
7126 !A [] $463 !1.OBJ !3 //add obj#,item# pair to current item group
7127 #ENDIF
7128 #SET ZD$ !ZD //increment element counter
7129 #IF (!0>3)
7130 DEPENDENT_ITEM !4 !5 !6 !7 !8 !9
7131 #ENDIF
7132 #ELSE
7133 #IFDEF !1
7134 !A [] $463 !1 !2 //add obj#,item# pair to current item group
7135 #ELSE
7136 !A [] $463 !1.OBJ !2 //add obj#,item# pair to current item group
7137 #ENDIF
7138 #SET ZD$ !ZD //increment element counter
7139 #IF (!0>2)
7140 DEPENDENT_ITEM !3 !4 !5 !6 !7 !8 !9
7141 #ENDIF
7142 #ENDIF
7143#ENDCOMMAND
7144
7145
7146// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7147//
7148// Command:
7149// IMPORT_CLASS_PROTOCOL Source Dest {Msg | ALL} {Flag}
7150//
7151// Description:
7152// This command will copy the message definitions of the Source
7153// class to the Dest class. The program may choose to copy ALL
7154// of the messages or only one of the messages from the Source.
7155// The program has the option to stop any message that would overwrite
7156// and to stop the copying of messages not directly defined in the
7157// Source class.
7158//
7159// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7160
7161#COMMAND IMPORT_CLASS_PROTOCOL _RSNDLOB# _SNDLOB#
7162 #IF (!0<2)
7163 IMPORT_CLASS_PROTOCOL !1 CURRENT_CLASS
7164 #ELSE
7165 #DATA // Begining of data
7166 #IFDEF !1 // class is variable (integer) or constant
7167 #DPUSH !1 // defined_in
7168 #ELSE
7169 #IFDEF U_!1
7170 #DPUSH U_!1 // class is normal symbol type (integer)
7171 #ELSE
7172 #ERROR DFERR_COMP_UNDEFINED_SYMBOL_IN_ARGUMENT UNDEFINED CLASS U_!1
7173 #ENDIF
7174 #ENDIF
7175 #IFDEF !2 // is the destination defined?
7176 #DPUSH !2 // add to class
7177 #ELSE
7178 #IFSAME !2 CURRENT_CLASS // use this symbol for "current class"
7179 #DPUSH U_!$ // cc is in this symbol (set by class)
7180 #ELSE
7181 #IFDEF U_!2
7182 #DPUSH U_!2 // another standard class id
7183 #ELSE
7184 #ERROR DFERR_COMP_UNDEFINED_SYMBOL_IN_ARGUMENT UNDEFINED CLASS U_!2
7185 #ENDIF
7186 #ENDIF
7187 #ENDIF
7188 #IF (!0>2) // message or all specified
7189 #IFSAME !3 ALL // copy all messages
7190 #DPUSH |CI0 // 0 is all
7191 #ELSE
7192 #IFDEF !3
7193 #DPUSH !3 // message name, note full name required
7194 #ELSE
7195 #IFDEF MSG_!3
7196 #DPUSH MSG_!3
7197 #ELSE
7198 #IFDEF SET_!3
7199 #DPUSH SET_!3
7200 #ELSE
7201 #IFDEF GET_!3
7202 #DPUSH GET_!3
7203 #ELSE
7204 #ERROR DFERR_COMP_UNDEFINED_SYMBOL_IN_ARGUMENT UNDEFINED MESSAGE NAME !3
7205 #ENDIF
7206 #ENDIF
7207 #ENDIF
7208 #ENDIF
7209 #ENDIF
7210 #IF (!0>3)
7211 #SET Q$ 0
7212 CHAIN$HELP !4 !5 // NO_INHERIT and NO_OVERWRITE
7213 #DPUSH |CI!q // flags
7214 #ELSE
7215 #DPUSH |CI0 // no flags
7216 #ENDIF
7217 #ELSE
7218 #DPUSH |CI0 // all messages
7219 #DPUSH |CI0 // overwrite and superclasses
7220 #ENDIF
7221 !A [] $0465 |CI0 |VL
7222 #ENDIF
7223#ENDCOMMAND
7224
7225
7226// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7227//
7228// Command:
7229// LOGOUT {Driver Name {Server Name}}
7230//
7231// Description:
7232//
7233// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7234
7235#COMMAND LOGOUT
7236 !A [] $4c6 !1 !2
7237#ENDCOMMAND
7238
7239// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7240//
7241// Command:
7242// SET_TRANSACTION_RETRY
7243//
7244// Description:
7245//
7246// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7247
7248#COMMAND SET_TRANSACTION_RETRY "TO" &#LGRBOUSD .
7249 !A [] $4c8 !2
7250#ENDCOMMAND
7251
7252
7253// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7254//
7255// Command:
7256// GET_TRANSACTION_RETRY
7257//
7258// Description:
7259//
7260// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7261
7262#COMMAND GET_TRANSACTION_RETRY "TO" R .
7263 !A [] $4c9 !2
7264#ENDCOMMAND
7265
7266
7267// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7268//
7269// Command:
7270// COPY_DB
7271//
7272// Description:
7273//
7274// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7275
7276#COMMAND COPY_DB RNDI#G_ "TO" RN_DI#G
7277 COPY$DB$CALLBACK 0
7278 COPY$DB$COMPRESSION DF_FILE_COMPRESS_NONE DFFALSE
7279 #IF ( !0 > 3 )
7280 #IF ( !0 > 5 )
7281 #IFSAME !4 !6
7282 #ERROR DFERR_COMP_INVALID_ARGUMENT PARAMETER DUPLICATION !4 !6
7283 #ELSE
7284 #IFSAME !6 COMPRESSION
7285 COPY$DB$COMPRESSION !7 DFTRUE
7286 #ELSE
7287 #IFSAME !6 CALLBACK
7288 COPY$DB$CALLBACK !7
7289 #ELSE
7290 #ERROR DFERR_COMP_INVALID_ARGUMENT INVALID PARAMETER !6
7291 #ENDIF
7292 #ENDIF
7293 #ENDIF
7294 #ENDIF
7295 #IFSAME !4 COMPRESSION
7296 COPY$DB$COMPRESSION !5 DFTRUE
7297 #ELSE
7298 #IFSAME !4 CALLBACK
7299 COPY$DB$CALLBACK !5
7300 #ELSE
7301 #ERROR DFERR_COMP_INVALID_ARGUMENT INVALID PARAMETER !4
7302 #ENDIF
7303 #ENDIF
7304 #ENDIF
7305 !A [] $0e3 !1 !3
7306#ENDCOMMAND
7307
7308#COMMAND COPY$DB$CALLBACK R .
7309 !A [] $0e4 !1
7310#ENDCOMMAND
7311
7312#COMMAND COPY$DB$COMPRESSION R R .
7313 !A [] $0e5 !1 !2
7314#ENDCOMMAND
7315
7316
7317// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7318//
7319// Command:
7320// DECLARE_DATAFILE logicalFileName*n
7321//
7322// Description:
7323// Include the .FD for the named file and define any related symbols,
7324// e.g., FILE.FILE_NUMBER
7325//
7326// Parameter
7327// logicalFileName
7328// Base name of the .FD file, e.g., for PERSON.FD, it would be
7329// PERSON.
7330//
7331// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7332
7333//#COMMAND DECLARE_DATAFILE L#GT
7334// #IF (!0>0)
7335// #IFDEF !1.RECNUM
7336// #IFDEF !1.FILE_NUMBER
7337// #ELSE
7338// #SET Q$ !1.RECNUM
7339// #REPLACE !1.FILE_NUMBER |CI!q
7340// #ENDIF
7341// #ELSE
7342// #INCLUDE !1.FD
7343// #SET Q$ !1.RECNUM
7344// #REPLACE !1.FILE_NUMBER |CI!q
7345// #ENDIF
7346// DECLARE_DATAFILE !2 !3 !4 !5 !6 !7 !8 !9
7347// #ENDIF
7348//#ENDCOMMAND
7349
7350// Newer files may include the file_number symbol within the fd file. The rules should be:
7351// 1. If file has a recnum, it must define recnum in the file and it must NOT define file_number
7352// (we don't define file_number so these fd files will be compatible with older DFs). In this case, file_number
7353// will be defined in this command.
7354// 2. If file is new and does not support recnum, we define File_number but not recnum. Recnum will not
7355// be defined at all.
7356// Therefore, by the end of this command, file_number is always defined and recnum is defined only if it exists
7357
7358#COMMAND DECLARE_DATAFILE L#GT
7359 #IF (!0>0)
7360 #IFNDEF !1.RECNUM
7361 #IFNDEF !1.FILE_NUMBER
7362 // if neither file_number or recnum is defined, we must include the fd file
7363 #INCLUDE !1.FD
7364 #ENDIF
7365 #ENDIF
7366 // if file_number does not exist at this point we have an FD that does not
7367 // directly define it (i.e., pre rowID FD or table that suports recnum). Create the symbol
7368 #IFNDEF !1.FILE_NUMBER
7369 #SET Q$ !1.RECNUM
7370 #REPLACE !1.FILE_NUMBER |CI!q
7371 #ENDIF
7372 DECLARE_DATAFILE !2 !3 !4 !5 !6 !7 !8 !9
7373 #ENDIF
7374#ENDCOMMAND
7375
7376// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7377//
7378// Command:
7379// SET_FILE_FIELD fileNum fieldNum
7380// SET_FILE_INDEX fileNum indexNum
7381//
7382// Description:
7383// Used by API commands requiring more than 2 parameters. Assigns
7384// the fileNum and field or index number. Two commands were provided
7385// to allow improve readability of code.
7386//
7387// Parameters:
7388// fileNum:
7389// The number of the file.
7390// fieldNum:
7391// indexNum:
7392// The number of the field or index ( depending on the command.
7393//
7394// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7395
7396#COMMAND SET_FILE_FIELD ULG# ULG# .
7397 !A [] $502 !1 !2
7398#ENDCOMMAND
7399
7400#COMMAND SET_FILE_INDEX ULG# ULG# .
7401 !A [] $502 !1 !2
7402#ENDCOMMAND
7403
7404
7405// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7406//
7407// Command:
7408// SET_SEGMENT_MISC segmentNum miscNum
7409//
7410// Description:
7411// Used by API commands requiring more than 2 parameters. Assigns
7412// the segmentNum and miscNum.
7413//
7414// Parameters:
7415// segmentNum:
7416// The number of the segment of an index
7417// miscNum:
7418// A command dependent numeric value.
7419//
7420// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7421
7422#COMMAND SET_SEGMENT_MISC ULG# ULG# .
7423 !A [] $503 !1 !2
7424#ENDCOMMAND
7425
7426
7427// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7428//
7429// Command:
7430// SET_LENGTH_OFFSET length offset
7431//
7432// Description:
7433// Used by API commands requiring additional length and offset
7434// parameters.
7435//
7436// Parameters:
7437// length:
7438// Typically in bytes.
7439// offset:
7440// Typically in bytes.
7441//
7442// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7443
7444#COMMAND SET_LENGTH_OFFSET ULG# ULG# .
7445 !A [] $52E !1 !2
7446#ENDCOMMAND
7447
7448
7449// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7450//
7451// Command:
7452// GET_ATTRIBUTE attribute;
7453// {OF fileNum {fieldNum|(indexNum {segmentNum})} "TO" VARIABLE
7454//
7455// Description:
7456// Get a global, file, field, or index attribute.
7457//
7458// Parameters
7459// attribute
7460// Attribute id (as defined by API) to be set
7461// fileNum
7462// Optional handle for either a file or a structure
7463// fieldNum
7464// Optional field to be interrogated
7465// indexNum
7466// Optional index to be interrogated
7467// segmentNum
7468// Num of segment in index to be interrogated
7469//
7470// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7471
7472#COMMAND GET_ATTRIBUTE RLGU#
7473 #IFSAME !2 TO
7474 #CHECK !3 _RLGUC#
7475 #CHECK !4 .
7476 SET_FILE_FIELD |CI0 |CI0
7477 SET_SEGMENT_MISC |CI0 |CI0
7478 !A [] $501 !1 !3
7479 #ELSE
7480 #IFSAME !2 OF
7481 #ELSE
7482 #ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX Missing keyword "OF"
7483 #ENDIF
7484 #IFSAME !4 TO
7485 #CHECK !3 _RLGU#
7486 #CHECK !5 _RLGU#
7487 #CHECK !6 .
7488 SET_FILE_FIELD !3 |CI0
7489 SET_SEGMENT_MISC |CI0 |CI0
7490 !A [] $501 !1 !5
7491 #ELSE
7492 #IFSAME !5 TO
7493 #CHECK !3 _RLGU#
7494 #CHECK !4 _RLGU#
7495 #CHECK !6 _RCLGU#
7496 #CHECK !7 .
7497 SET_FILE_FIELD !3 !4
7498 SET_SEGMENT_MISC |CI0 |CI0
7499 !A [] $501 !1 !6
7500 #ELSE
7501 #IFSAME !6 TO
7502 #CHECK !3 _RLGU#
7503 #CHECK !4 _RLGU#
7504 #CHECK !5 _RLGU#
7505 #CHECK !7 _RCLGU#
7506 #CHECK !8 .
7507 SET_FILE_FIELD !3 !4
7508 SET_SEGMENT_MISC !5 |CI0
7509 !A [] $501 !1 !7
7510 #ELSE
7511 #ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX Missing keyword "TO"
7512 #ENDIF
7513 #ENDIF
7514 #ENDIF
7515 #ENDIF
7516#ENDCOMMAND
7517
7518
7519//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7520//
7521// Command:
7522// SET_ATTRIBUTE attribute;
7523// {OF fileNum {fieldNum|(indexNum {segmentNum})} "TO" VARIABLE
7524//
7525// Description:
7526// Get a global, file, field, or index attribute.
7527//
7528// Parameters
7529// attribute
7530// Attribute id (as defined by API) to be set
7531// fileNum
7532// Optional handle for either a file or a structure
7533// fieldNum
7534// Optional field to be modified
7535// indexNum
7536// Optional index to be modified
7537// segmentNum
7538// Num of segment in index to be modified
7539//
7540//=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7541
7542#COMMAND SET_ATTRIBUTE RLG#
7543 #IFSAME !2 TO
7544 #CHECK !3 _RLGU#
7545 #CHECK !4 .
7546 SET_FILE_FIELD |CI0 |CI0
7547 SET_SEGMENT_MISC |CI0 |CI0
7548 !A [] $504 !1 !3
7549 #ELSE
7550 #IFSAME !2 OF
7551 #ELSE
7552 #ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX Missing keyword "OF"
7553 #ENDIF
7554 #IFSAME !4 TO
7555 #CHECK !3 _RLGU#
7556 #CHECK !5 _RLGU#
7557 #CHECK !6 .
7558 SET_FILE_FIELD !3 |CI0
7559 SET_SEGMENT_MISC |CI0 |CI0
7560 !A [] $504 !1 !5
7561 #ELSE
7562 #IFSAME !5 TO
7563 #CHECK !3 _RLGU#
7564 #CHECK !4 _RLGU#
7565 #CHECK !6 _RLGU#
7566 #CHECK !7 .
7567 SET_FILE_FIELD !3 !4
7568 SET_SEGMENT_MISC |CI0 |CI0
7569 !A [] $504 !1 !6
7570 #ELSE
7571 #IFSAME !6 TO
7572 #CHECK !3 _RLGU#
7573 #CHECK !4 _RLGU#
7574 #CHECK !5 _RLGU#
7575 #CHECK !7 _RLGU#
7576 #CHECK !8 .
7577 SET_FILE_FIELD !3 !4
7578 SET_SEGMENT_MISC !5 |CI0
7579 !A [] $504 !1 !7
7580 #ELSE
7581 #ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX Missing keyword "TO"
7582 #ENDIF
7583 #ENDIF
7584 #ENDIF
7585 #ENDIF
7586#ENDCOMMAND
7587
7588
7589// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7590//
7591// Command:
7592// STRUCTURE_START fileNum driverName
7593//
7594// Description:
7595// This function begins creation of a new file or modification of
7596// an existing file.
7597//
7598// Parameters:
7599// fileNum:
7600// The number for an existing file. It must be 0 if starting a
7601// new file or the number of a file being modified. In either
7602// case, a handle to the structure is written back into fileNum
7603// so that attributes of the new structure can be queried.
7604//
7605// driverName:
7606// Name of the driver to use when creating a new file.
7607//
7608// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7609
7610#COMMAND STRUCTURE_START RLG#U INDLG#U .
7611 !A [] $505 !1 !2
7612#ENDCOMMAND
7613
7614
7615// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7616//
7617// Command:
7618// STRUCTURE_ABORT structureHandle
7619//
7620// Description:
7621// Terminates a file structure operation without completing it.
7622//
7623// Parameters:
7624// structureHandle
7625// Handle from the structure_start.
7626//
7627// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7628
7629#COMMAND STRUCTURE_ABORT RLG#U .
7630 !A [] $508 !1
7631#ENDCOMMAND
7632
7633
7634// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7635//
7636// Command:
7637// STRUCTURE_END fileNum {restructureOptions {tempDir {callBackObject}}}
7638//
7639// Description:
7640// This function commits a structure operation, performing restructure
7641// on the file if necessary.
7642//
7643// Parameters:
7644// fileNum:
7645// The number of the file ( or handle returned by STRUCTURE_START
7646// for a new file ) which a STRUCTURE_START has been done on.
7647//
7648// restructureOptions:
7649// The IAND'ing of the following API attributes:
7650// DF_STRUCTEND_OPT_NONE
7651// DF_STRUCTEND_OPT_FORCE
7652// DF_STRUCTEND_OPT_RECOMPRESS
7653// DF_STRUCTEND_OPT_INPLACE
7654//
7655// tempDir:
7656// A temporary directory to be used in not restructuring in place.
7657//
7658// callBackObject:
7659// An object id which will receive MSG_CALLBACK during the restructure
7660// operation. This the first parameter of this message is a string
7661// containing progress information.
7662//
7663// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7664
7665#COMMAND STRUCTURE_END RLUG# LUG# NDILUG# LUG# .
7666 !A [] $506 !1 !2
7667 !A [] $507 !3 !4
7668#ENDCOMMAND
7669
7670
7671// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7672//
7673// Command:
7674// STRUCTURE_COPY fromFileNumber TO toFileNumber
7675//
7676// Descriptiion:
7677// Copies structure of one file to another
7678//
7679// Parameters:
7680// fromFileNumber:
7681// File Number of the file from where the structure is to be copied
7682//
7683// toFileNumber:
7684// Number of the file to which the structure is to be copied
7685//
7686//
7687// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7688
7689
7690#COMMAND STRUCTURE_COPY RLUG# "TO" RLUG# .
7691 !A [] $51C !1 !3
7692#ENDCOMMAND
7693
7694// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7695//
7696// Command:
7697// FILL_FIELD FileNumber fieldNumber { "WITH" <Fill_Type> }
7698//
7699// Description:
7700// Fill a field with the highest or lowest value ot the type.
7701// Fill_type:
7702// DF_HIGH or DF_LOW. For example for a numeric field, DF_HIGH is
7703// all 9's and lowest being all 0's
7704//
7705// Parameters:
7706// FileNumber:
7707// Number of the file
7708//
7709// Field Number:
7710// Number of the field which is to be filled
7711//
7712// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7713
7714#COMMAND FILL_FIELD RLUG# RLUG# "WITH" RLUG# .
7715 !A [] $51D !1
7716 !A [] $51E !2 !4
7717#ENDCOMMAND
7718
7719
7720// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7721//
7722// Command:
7723// CREATE_FIELD fileNum {"AT" fieldNum}
7724//
7725// Description:
7726// Creates a new field. If fieldNum is ommitted or 0,
7727// field is appended to record. Actual fieldNum assigned
7728// to new field is returned in fieldNum. fileNum must
7729// be the number of a file currently being restructured or
7730// created.
7731//
7732// Parameter:
7733// fileNum
7734// Handle for either a file or a structure
7735// fieldNum
7736// Field to be modified
7737//
7738// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7739
7740#COMMAND CREATE_FIELD RLUG# "AT""" LUG# .
7741 !A [] $509 !1 !3
7742#ENDCOMMAND
7743
7744
7745// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7746//
7747// Command:
7748// DELETE_FIELD fileNum fieldNum
7749//
7750// Description:
7751// Delete the field described by fieldNum and fileNum. NOTE:
7752// the fileNum handle must be for a file that has had a STRUCTURE_START
7753// done on it.
7754//
7755// Parameter:
7756// fileNum
7757// Handle for either a file or a structure
7758// fieldNum
7759// Field to be modified
7760//
7761// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7762
7763#COMMAND DELETE_FIELD R R .
7764 !A [] $50b !1 !2
7765#ENDCOMMAND
7766
7767
7768// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7769//
7770// Command:
7771// CREATE_INDEX fileNum {"AT" indexNum}
7772//
7773// Description:
7774// Creates a new index for file fileNum. STRUCTURE_START must have
7775// been called for fileNum. IndexNum will contain the number of
7776// the index created; any value in it prior to the call is ignored.
7777//
7778// Parameter:
7779// indexNum
7780// Handle for either a file or a structure
7781// fieldNum
7782// Field to be modified
7783//
7784// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7785
7786#COMMAND CREATE_INDEX RLUG# "AT" RLUG#C .
7787 !A [] $50a !1 !3
7788#ENDCOMMAND
7789
7790
7791// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7792//
7793// Command:
7794// DELETE_INDEX fileNum indexNum
7795//
7796// Description:
7797// Delete the index described by indexNum and fileNum. NOTE:
7798// the fileNum handle must be for a file that has had a
7799// STRUCTURE_START done on it.
7800//
7801// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7802
7803#COMMAND DELETE_INDEX RLUG# RLUG# .
7804 !A [] $50c !1 !2
7805#ENDCOMMAND
7806
7807
7808// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7809//
7810// Command:
7811// VARIABLE_FILE_COMMAND command [fileSymbol|fileNum]
7812//
7813// Description:
7814// This command allows the execution of any other command,
7815// handling both file numbers ( 102 ) and file symbols
7816// ( PERSON )
7817//
7818// Parameters:
7819// command:
7820// The DataFlex command number
7821// fileSymbol:
7822// The symbol used to load the .FD file; the logical name of the file.
7823// fileNum:
7824// The number of the file ( obviously ).
7825//
7826// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7827
7828#COMMAND VARIABLE_FILE_COMMAND
7829 //#IFSAME !2 |FS0,0& |FN0,0& |FD0,0&
7830 // This supports both Indirect_file and Indirect_file.Recnum -JJT
7831 #IFSAME !2.FILE_NUMBER |FS0,0& |FN0,0& |FD0,0& |FS0,0&.RECNUM
7832 !A [] !1 |CI0 !3
7833 #ELSE
7834 #IFCLASS !2 SNDIECWVF
7835 !A [] !1 !2 !3
7836 #ELSE
7837 DECLARE_DATAFILE !2
7838 !A [] !1 !2.FILE_NUMBER !3
7839 #ENDIF
7840 #ENDIF
7841#ENDCOMMAND
7842
7843
7844// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7845//
7846// Command:
7847// OPEN {fileName AS} [logicalName|fileNum|] {MODE fileMode} index
7848//
7849// Description:
7850// Open a DataFile using the specified filename of filenumber.
7851//
7852// Parameters:
7853// fileName:
7854// A string containing the physical name of the file
7855// logicalName:
7856// The symbolic name used to find the .FD file.
7857// fileNum:
7858// A number which will be used to open the file. If using the "AS"
7859// form, fileNum may be a variable containing a 0. In that case,
7860// filelist will be searched for an entry with a logical name
7861// matching fileName; the number of the first entry matching will
7862// be used as the number to open the file and will be written
7863// back to the variable used for fileNum.
7864// fileMode:
7865// The mode to open the file in ( e.g., DF_EXCLUSIVE ).
7866// index:
7867// Index to buffer, may be either a number or an index symbol (INDEX.1)
7868//
7869// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7870
7871#COMMAND API_OPEN RLG#
7872 #IFSAME !2 AS
7873 //#IFSAME !3 |FS0,0& |FN0,0& |FD0,0&
7874 // This supports both Indirect_file and Indirect_file.Recnum -JJT
7875 #IFSAME !3.FILE_NUMBER |FS0,0& |FN0,0& |FD0,0& |FS0,0&.RECNUM
7876 #SET Q$ $516 // Open indirect
7877 #ELSE
7878 #SET Q$ $50d // Open normally
7879 #ENDIF
7880 #IFSAME !4 MODE
7881 #CHECK !5 _RLUG#
7882 !A [] $517 !5 !6
7883 VARIABLE_FILE_COMMAND !q !3 !1
7884 #ELSE
7885 !A [] $517 DF_SHARE !4
7886 VARIABLE_FILE_COMMAND !q !3 !1
7887 #ENDIF
7888 #ELSE
7889 //#IFSAME !1 |FS0,0& |FN0,0& |FD0,0&
7890 // This supports both Indirect_file and Indirect_file.Recnum -JJT
7891 #IFSAME !1.FILE_NUMBER |FS0,0& |FN0,0& |FD0,0& |FS0,0&.RECNUM
7892 #SET Q$ $516 // Open indirect
7893 #ELSE
7894 #SET Q$ $50d // Open normally
7895 #ENDIF
7896 #IFSAME !2 MODE
7897 #CHECK !3 _RLUG#
7898 !A [] $517 !3 !4
7899 VARIABLE_FILE_COMMAND !q !1 |CS""
7900 #ELSE
7901 !A [] $517 DF_SHARE !2
7902 VARIABLE_FILE_COMMAND !q !1 |CS""
7903 #ENDIF
7904 #ENDIF
7905#ENDCOMMAND
7906
7907// Removed for 11.0 - only works with recnum tables. This was never documented and never designed to be used.
7908// The Old_xxx commands were created when the API was added and probably left here for testing.
7909// Anyone using the direct old command value (e.g. $c4 for relate) will only work with recnum tables. It is
7910// very unikely anyone is using the actual command codes (a very bad practice that this not at all supported).
7911//#COMMAND OLD_OPEN
7912// #IFSAME !2 AS
7913// DECLARE_DATAFILE !3
7914// #CHECK !3 _TR
7915// #CHECK !1 _#LG
7916// #CHECK !5 .
7917// #CHECK !3.RECNUM _URW#LG
7918// #IF (!0>3)
7919// #CHECK !4 _DGLOBU#
7920// MOVEINT !4 TO FIELDNUMBER
7921// !A [] $182 !3.RECNUM !1
7922// #ELSE
7923// MOVEINT |CI0 TO FIELDNUMBER
7924// !A [] $182 !3.RECNUM !1
7925// #ENDIF
7926// #ELSE
7927// #CHECK !3 .
7928// DECLARE_DATAFILE !1
7929// #CHECK !1.RECNUM _URW#LG
7930// #IF (!0>1)
7931// #CHECK !2 _FWSNDELG#U
7932// !A [] $180 !1.RECNUM !2
7933// #ELSE
7934// !A [] $180 !1.RECNUM |CI0
7935// #ENDIF
7936// #ENDIF
7937//#ENDCOMMAND
7938
7939#COMMAND OPEN
7940 API_OPEN !1 !2 !3 !4 !5 !6 !7 !8 !9
7941#ENDCOMMAND
7942
7943
7944// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7945//
7946// Command:
7947// CLEAR {logicalName|fileNum}*n
7948//
7949// Description:
7950// Clear the current record in the file.
7951//
7952// Parameters:
7953// logicalName:
7954// The name used to identify the file in a DataFlex program.
7955// fileNum:
7956// The number used to open the file.
7957//
7958// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7959
7960#COMMAND API_CLEAR RLG#
7961 VARIABLE_FILE_COMMAND $50e !1
7962 #IF (!0>1)
7963 API_CLEAR !2 !3 !4 !5 !6 !7 !8 !9
7964 #ENDIF
7965#ENDCOMMAND
7966
7967// see Old_open command for notes on this removal
7968//#COMMAND OLD_CLEAR CVWR#LGE
7969// #IFDEF !1
7970// !A [] $C1 !1
7971// #ELSE
7972// #CHECK !1.RECNUM _CVWLR#GU
7973// !A [] $C1 !1.RECNUM
7974// #ENDIF
7975// #IF !0>1
7976// OLD_CLEAR !2 !3 !4 !5 !6 !7 !8 !9
7977// #ENDIF
7978//#ENDCOMMAND
7979
7980#COMMAND CLEAR
7981 #IFSAME !1 DF_ALL
7982 !A [] $52C
7983 #ELSE
7984 API_CLEAR !1 !2 !3 !4 !5 !6 !7 !8 !9
7985 #ENDIF
7986#ENDCOMMAND
7987
7988
7989// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7990//
7991// Command:
7992// NewRecord {logicalName|fileNum}*n
7993//
7994// Description:
7995// Sets the record buffer to inactive while retaining all existing data (w/ exception of recnum which is 0ed)
7996//
7997// Parameters:
7998// logicalName:
7999// The name used to identify the file in a DataFlex program.
8000// fileNum:
8001// The number used to open the file.
8002//
8003// added as of 12.0 - This is the recommended way to "inactivate" a record so it can be saved as a new record.
8004// if recnum is used, this always moves 0 to recnum.
8005// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8006
8007#COMMAND NEWRECORD RLG#
8008 VARIABLE_FILE_COMMAND $531 !1
8009 #IF (!0>1)
8010 NEWRECORD !2 !3 !4 !5 !6 !7 !8 !9
8011 #ENDIF
8012#ENDCOMMAND
8013
8014
8015
8016// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8017//
8018// Command:
8019// CLOSE {logicalName|fileNum}*n
8020//
8021// Description:
8022// Closes the file.
8023//
8024// Parameters:
8025// logicalName:
8026// The name used to identify the file in a DataFlex program.
8027// fileNum:
8028// The number used to open the file.
8029//
8030// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8031
8032#COMMAND API_CLOSE RLG#
8033 VARIABLE_FILE_COMMAND $50f !1
8034 #IF (!0>1)
8035 API_CLOSE !2 !3 !4 !5 !6 !7 !8 !9
8036 #ENDIF
8037#ENDCOMMAND
8038
8039// see Old_open command for notes on this removal
8040//#COMMAND OLD_CLOSE RTE
8041// #CHECK !1.RECNUM _CVWLR#GU
8042// !A [] $181 !1.RECNUM
8043// #IF (!0>1)
8044// OLD_CLOSE !2 !3 !4 !5 !6 !7 !8 !9
8045// #ENDIF
8046//#ENDCOMMAND
8047
8048#COMMAND CLOSE
8049 #IFSAME !1 DF_ALL
8050 !A [] $52D !2
8051 #ELSE
8052 API_CLOSE !1 !2 !3 !4 !5 !6 !7 !8 !9
8053 #ENDIF
8054#ENDCOMMAND
8055
8056
8057// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8058//
8059// Command:
8060// GET_FIELD_VALUE fileNum fieldNum "TO" destVariable;
8061// {"LENGTH" iLength {"OFFSET" iOffset}}
8062//
8063// Description:
8064// Gets the value of a field into the destVariable doing any
8065// type conversion necessary.
8066//
8067// Parameters:
8068// fileNum:
8069// The number used to open the file.
8070// fieldNum:
8071// The number of the field.
8072// destVariable:
8073// Where the fields value will be put.
8074// iLength:
8075// The length of the data to be used. By default, all
8076// data (or as much as can be) is written into the field.
8077// A length of 0 causes all data to be written.
8078// iOffset:
8079// The first byte in the field where data will be written, from 0.
8080// Default is that data will be written into the field starting at
8081// byte 0.
8082//
8083// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8084
8085#COMMAND GET$FIELD$VALUE$HELP RLGU# RLGU# "TO" CRLGU# "LENGTH" RLGU# "OFFSET" RLGU# .
8086 SET_FILE_FIELD !1 !2
8087 SET_LENGTH_OFFSET !6 !8
8088 !A [] $510 !4
8089#ENDCOMMAND
8090
8091#COMMAND GET_FIELD_VALUE RLGU# RLGU# "TO" CRLGU#
8092 #IF (!0=4)
8093 GET$FIELD$VALUE$HELP !1 !2 !3 !4 LENGTH 0 OFFSET 0
8094 #ELSE
8095 #IF (!0=6)
8096 GET$FIELD$VALUE$HELP !1 !2 !3 !4 !5 !6 OFFSET 0
8097 #ELSE
8098 GET$FIELD$VALUE$HELP !1 !2 !3 !4 !5 !6 !7 !8 !9
8099 #ENDIF
8100 #ENDIF
8101#ENDCOMMAND
8102
8103
8104// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8105//
8106// Command:
8107// SET_FIELD_VALUE fileNum fieldNum "TO" newValue;
8108// {"LENGTH" iLength {"OFFSET" iOffset {noTruncateFlag}}}
8109//
8110// Description:
8111// Sets the value of a field to newValue doing any type conversion
8112// necessary.
8113//
8114// Parameters:
8115// fileNum:
8116// The number used to open the file.
8117// fieldNum:
8118// The number of the field.
8119// newValue:
8120// The value to be put into the field.
8121// iLength:
8122// The length of the data to be used. By default, all
8123// data (or as much as can be) is written into the field.
8124// A length of 0 causes all data to be written.
8125// iOffset:
8126// The first byte in the field where data will be written, from 0.
8127// Default is that data will be written into the field starting at
8128// byte 0.
8129// noTruncateFlag:
8130// Flag which signifies whether existing data in the field
8131// following data that is edited will be truncated or not. By
8132// default, all old data following new data written is truncated.
8133//
8134// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8135
8136#COMMAND SET$FIELD$VALUE$HELP$2 "LENGTH" RLGU# "OFFSET" RLGU# .
8137 SET_LENGTH_OFFSET !2 !4
8138#ENDCOMMAND
8139
8140#COMMAND SET$FIELD$VALUE$HELP RLGU# RLGU# "TO" RLGU# RLGU# .
8141 SET_FILE_FIELD !1 !2
8142 !A [] $511 !4 !5
8143#ENDCOMMAND
8144
8145#COMMAND SET_FIELD_VALUE RLGU# RLGU# "TO" RLGU#
8146 #IF (!0=4)
8147 SET$FIELD$VALUE$HELP$2 LENGTH 0 OFFSET 0
8148 SET$FIELD$VALUE$HELP !1 !2 !3 !4 DFFALSE
8149 #ELSE
8150 #IF (!0=6)
8151 SET$FIELD$VALUE$HELP$2 !5 !6 OFFSET 0
8152 SET$FIELD$VALUE$HELP !1 !2 !3 !4 DFFALSE
8153 #ELSE
8154 #IF (!0=8)
8155 SET$FIELD$VALUE$HELP$2 !5 !6 !7 !8
8156 SET$FIELD$VALUE$HELP !1 !2 !3 !4 DFFALSE
8157 #ELSE
8158 SET$FIELD$VALUE$HELP$2 !5 !6 !7 !8
8159 SET$FIELD$VALUE$HELP !1 !2 !3 !4 !9
8160 #ENDIF
8161 #ENDIF
8162 #ENDIF
8163#ENDCOMMAND
8164
8165
8166// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8167//
8168// Command:
8169// SAVERECORD {logicalName|fileNum}*n
8170//
8171// Description:
8172// Saves the current record in the specified files.
8173//
8174// Parameters:
8175// logicalName:
8176// The name used to identify the file in a DataFlex program.
8177// fileNum:
8178// The number used to open the file.
8179//
8180// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8181
8182#COMMAND API_SAVERECORD RLG#
8183 VARIABLE_FILE_COMMAND $512 !1
8184 #IF !0>1
8185 API_SAVERECORD !2 !3 !4 !5 !6 !7 !8 !9
8186 #ENDIF
8187#ENDCOMMAND
8188
8189// see Old_open command for notes on this removal
8190//#COMMAND OLD_SAVERECORD CVWR#LGE
8191// #IFDEF !1
8192// !A [] $C2 !1
8193// #ELSE
8194// #CHECK !1.RECNUM _CVWLR#GU
8195// !A [] $C2 !1.RECNUM
8196// #ENDIF
8197// #IF !0>1
8198// OLD_SAVERECORD !2 !3 !4 !5 !6 !7 !8 !9
8199// #ENDIF
8200//#ENDCOMMAND
8201
8202#COMMAND SAVERECORD
8203 API_SAVERECORD !1 !2 !3 !4 !5 !6 !7 !8 !9
8204#ENDCOMMAND
8205
8206
8207// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8208//
8209// Command:
8210// ATTACH {logicalName|fileNum}*n
8211//
8212// Description:
8213// Updates all fields in the current record which relate to another file
8214// with the values of those fields in the parent ( or related-to) files.
8215//
8216// Parameters:
8217// logicalName:
8218// The name used to identify the file in a DataFlex program.
8219// fileNum:
8220// The number used to open the file.
8221//
8222// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8223
8224#COMMAND API_ATTACH RLG#
8225 VARIABLE_FILE_COMMAND $513 !1
8226 #IF !0>1
8227 API_ATTACH !2 !3 !4 !5 !6 !7 !8 !9
8228 #ENDIF
8229#ENDCOMMAND
8230
8231// see Old_open command for notes on this removal
8232//#COMMAND OLD_ATTACH CVWR#LGE
8233// #IFDEF !1
8234// !A [] $C5 !1
8235// #ELSE
8236// #CHECK !1.RECNUM _CVWLR#GU
8237// !A [] $C5 !1.RECNUM
8238// #ENDIF
8239// #IF !0>1
8240// OLD_ATTACH !2 !3 !4 !5 !6 !7 !8 !9
8241// #ENDIF
8242//#ENDCOMMAND
8243
8244#COMMAND ATTACH
8245 API_ATTACH !1 !2 !3 !4 !5 !6 !7 !8 !9
8246#ENDCOMMAND
8247
8248
8249// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8250//
8251// Command:
8252// SAVE {logicalName|fileNum}*n
8253//
8254// Description:
8255// Save the contents of the currently active record, updating the
8256// records with any data in parent files from related fields (as per
8257// attach).
8258//
8259// Parameters:
8260// logicalName:
8261// The name used to identify the file in a DataFlex program.
8262// fileNum:
8263// The number used to open the file.
8264//
8265// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8266
8267#COMMAND API_SAVE RLG#
8268 ATTACH !1
8269 SAVERECORD !1
8270 #IF (!0>1)
8271 API_SAVE !2 !3 !4 !5 !6 !7 !8 !9
8272 #ENDIF
8273#ENDCOMMAND
8274
8275// see Old_open command for notes on this removal
8276//#COMMAND OLD_SAVE CVWR#LGE
8277// #IFDEF !1
8278// !A [] $C5 !1
8279// !A [] $C2 !1
8280// #ELSE
8281// #CHECK !1.RECNUM _CLVWLR#GU
8282// !A [] $C5 !1.RECNUM
8283// !A [] $C2 !1.RECNUM
8284// #ENDIF
8285// #IF !0>1
8286// OLD_SAVE !2 !3 !4 !5 !6 !7 !8 !9
8287// #ENDIF
8288//#ENDCOMMAND
8289
8290#COMMAND SAVE
8291 API_SAVE !1 !2 !3 !4 !5 !6 !7 !8 !9
8292#ENDCOMMAND
8293
8294
8295// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8296//
8297// Command:
8298// DELETE {fileNum|logicalName}*n
8299//
8300// Description:
8301// Delete the currently active record from the datafile
8302//
8303// Parameters:
8304// logicalName:
8305// The name used to identify the file in a DataFlex program.
8306// fileNum:
8307// The number used to open the file.
8308//
8309// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8310
8311// see Old_open command for notes on this removal
8312//#COMMAND OLD_DELETE CVWR#LGE
8313// #IFDEF !1
8314// !A [] $C3 !1
8315// #ELSE
8316// #CHECK !1.RECNUM _CVWLR#GU
8317// !A [] $C3 !1.RECNUM
8318// #ENDIF
8319// #IF !0>1
8320// OLD_DELETE !2 !3 !4 !5 !6 !7 !8 !9
8321// #ENDIF
8322//#ENDCOMMAND
8323
8324#COMMAND API_DELETE RLG#
8325 VARIABLE_FILE_COMMAND $514 !1
8326 #IF !0>1
8327 API_DELETE !2 !3 !4 !5 !6 !7 !8 !9
8328 #ENDIF
8329#ENDCOMMAND
8330
8331#COMMAND DELETE
8332 API_DELETE !1 !2 !3 !4 !5 !6 !7 !8 !9
8333#ENDCOMMAND
8334
8335
8336// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8337//
8338// Command:
8339// RELATE {fileNum|logicalName}*n
8340//
8341// Description:
8342// Moves all related fields into the parent files and then performs a
8343// find in the parents using the main index of the first (or primary)
8344// related field for each parent.
8345//
8346// Parameters:
8347// logicalName:
8348// The name used to identify the file in a DataFlex program.
8349// fileNum:
8350// The number used to open the file.
8351//
8352// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8353
8354// see Old_open command for notes on this removal
8355//#COMMAND OLD_RELATE CVWR#LGR
8356// $c4 is not public anywhere now. It only works with recnum (e.g. |fnXxxx,00). If anyone one is actually using
8357// $c4 in their code (highly unlikely) this will only work with recnum tables
8358// #IFDEF !1
8359// !A [] $C4 !1
8360// #ELSE
8361// #CHECK !1.RECNUM _CVWLR#GU
8362// !A [] $C4 !1.RECNUM
8363// #ENDIF
8364// #IF !0>1
8365// OLD_RELATE !2 !3 !4 !5 !6 !7 !8 !9
8366// #ENDIF
8367//#ENDCOMMAND
8368
8369#COMMAND API_RELATE RLG#
8370 VARIABLE_FILE_COMMAND $515 !1
8371 #IF !0>1
8372 API_RELATE !2 !3 !4 !5 !6 !7 !8 !9
8373 #ENDIF
8374#ENDCOMMAND
8375
8376#COMMAND RELATE
8377 API_RELATE !1 !2 !3 !4 !5 !6 !7 !8 !9
8378#ENDCOMMAND
8379
8380
8381// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8382//
8383// Command:
8384// REREAD {fileNum|logicalName}*n
8385//
8386// Description:
8387// Locks all files and then re-finds the current record in each file
8388// specified as an argument to the command. If no files are specified,
8389// then all files are reread.
8390//
8391// Parameters:
8392// logicalName:
8393// The name used to identify the file in a DataFlex program.
8394// fileNum:
8395// The number used to open the file.
8396//
8397// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8398
8399// see Old_open command for notes on this removal
8400//#COMMAND OLD_REFRESH T // Re-find all files listed by record identity
8401// #CHECK !1.RECNUM _RUWG
8402// !A [] $C0 !1.RECNUM |CI2 // FIND command
8403// !A [FINDERR] $047 |CI25 |CS"!1" // ERROR command
8404// #IF !0>1
8405// OLD_REFRESH !2 !3 !4 !5 !6 !7 !8 !9
8406// #ENDIF
8407//#ENDCOMMAND
8408
8409// see Old_open command for notes on this removal
8410//#COMMAND OLD_REREAD
8411// #IF !0=0
8412// !A [] $0C9 // REREAD command
8413// #ELSE
8414// !A [] $0C7 // LOCK command
8415// [MULTIUSER] OLD_REFRESH !1 !2 !3 !4 !5 !6 !7 !8 !9
8416// #ENDIF
8417//#ENDCOMMAND
8418
8419// private. Does a reread for passed file using GetRowId function
8420#COMMAND VARIABLE_ROWKEY_REFRESH_COMMAND
8421 // This supports both Indirect_file and Indirect_file.Recnum
8422 #IFSAME !1.FILE_NUMBER |FS0,0& |FN0,0& |FD0,0& |FS0,0&.RECNUM
8423 // if someone is doing a Reread and passing indirect_file, then they need to support recnum
8424 // tables. This technique is not recommended and I doubt if anyone is actually doing this!
8425 !A [] $CC |CI0 |CI2
8426 #ELSE
8427 // the old api_refresh used index_number this so we can safely use this variable (it is not used)
8428 #IFCLASS !1 SNDIECWVF
8429 Move (FindByRowId(!1,GetRowId(!1))) to Index_number
8430 #ELSE
8431 DECLARE_DATAFILE !1
8432 Move (FindByRowId(!1.FILE_NUMBER,GetRowId(!1.FILE_NUMBER))) to Index_number
8433 #ENDIF
8434 #ENDIF
8435#ENDCOMMAND
8436
8437#COMMAND API_REFRESH
8438 #IF (!0>0)
8439 #CHECK !1 _LG#
8440 // uses GetRowId function to do the reread
8441 VARIABLE_ROWKEY_REFRESH_COMMAND !1
8442 #IFCLASS !1 SNDIECWV
8443 [FINDERR] ERROR 25 !1
8444 #ELSE
8445 [FINDERR] ERROR 25 |CS"!1"
8446 #ENDIF
8447 API_REFRESH !2 !3 !4 !5 !6 !7 !8 !9
8448 // the old api_refresh used index_number and set it to zero. We do this to
8449 // in the unlikely event that someone is counting on this being zero outside of the command
8450 MOVE 0 to INDEX_NUMBER
8451 #ENDIF
8452#ENDCOMMAND
8453
8454
8455//#COMMAND API_REFRESH
8456// #IF (!0>0)
8457// #CHECK !1 _LG#
8458// MOVE 0 to INDEX_NUMBER
8459// VARIABLE_FILE_COMMAND $CC !1 |CI2
8460// #IFCLASS !1 SNDIECWV
8461// [FINDERR] ERROR 25 !1
8462// #ELSE
8463// [FINDERR] ERROR 25 |CS"!1"
8464// #ENDIF
8465// API_REFRESH !2 !3 !4 !5 !6 !7 !8 !9
8466// #ENDIF
8467//#ENDCOMMAND
8468
8469#COMMAND API_REREAD
8470 #IF (!0=0)
8471 !A [] $0C9 // REREAD ALL
8472 #ELSE
8473 !A [] $0C7 // LOCK
8474 [MULTIUSER] API_REFRESH !1 !2 !3 !4 !5 !6 !7 !8 !9
8475 #ENDIF
8476#ENDCOMMAND
8477
8478#COMMAND REREAD
8479 API_REREAD !1 !2 !3 !4 !5 !6 !7 !8 !9
8480#ENDCOMMAND
8481
8482
8483// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8484//
8485// Command:
8486// ZEROFILE {fileNum|logicalName}
8487//
8488// Description:
8489// Erases all data within the file.
8490//
8491// Parameters:
8492// logicalName:
8493// The name used to identify the file in a DataFlex program.
8494// fileNum:
8495// The number used to open the file.
8496//
8497// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8498
8499// see Old_open command for notes on this removal
8500//#COMMAND OLD_ZEROFILE $RT .
8501// #IFDEF !1.RECNUM
8502// #SET Q$ !1.RECNUM
8503// !A [] $308 |CI!q
8504// #ELSE
8505// #CHECK !1 _SG#L
8506// !A [] $308 !1
8507// #ENDIF
8508//#ENDCOMMAND
8509
8510#COMMAND API_ZEROFILE RLG# .
8511 VARIABLE_FILE_COMMAND $308 !1
8512#ENDCOMMAND
8513
8514#COMMAND ZEROFILE
8515 API_ZEROFILE !1 !2 !3 !4 !5 !6 !7 !8 !9
8516#ENDCOMMAND
8517
8518
8519// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8520//
8521// Command:
8522// VCONSTRAIN fileNum RELATES fileNum2
8523// VCONSTRAIN fileNum AS boolExpression
8524// VCONSTRAIN fileNum fieldNum mode expression
8525// VCONSTRAIN fileNum fieldNum mode fileNum2 fieldNum2
8526//
8527// Description:
8528// This command allows a variable constraint to be created.
8529//
8530// Parameters:
8531// fileNum
8532// Num of the file to be constrained
8533// fieldNum
8534// Num of the field to be constrained
8535// boolExpression
8536// An expression which is treated as FALSE if it evaluates to zero,
8537// TRUE if non-zero
8538// expression
8539// Any DataFlex expression
8540// fileNum2
8541// Num of the file to be constrained to
8542// fieldNum2
8543// Num of the field to be constrained to
8544// mode
8545// Either the symbols LT, LE, EQ, NE, GT, GE, CONTAINS, and MATCHES,
8546// or an expression that corresponds to their symbolic value.
8547// MATCHES = 6, CONTAINS = 7.
8548//
8549// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8550
8551#COMMAND CONSTRAIN R
8552 #IFSAME !2 AS
8553 #CHECK !3 _CFLVNSWG#
8554 #CHECK !1.FILE_NUMBER _R#ULWV
8555 #SET Q$ !1.FILE_NUMBER
8556 !A [] $DB |CI!q !3 // FILE AS (BOOL-EXP)
8557 #ELSE
8558 #IFSAME !2 BETWEEN // FIELD BETWEEN A AND B
8559 #CHECK !4 "AND"
8560 CONSTRAIN !1 GE !3
8561 CONSTRAIN !1 LE !5
8562 #ELSE
8563 #IFSAME !2 RELATES
8564 #CHECK !3 "TO"
8565 #IFDEF !1
8566 #IFDEF !4
8567 !A [] $D9 !1 !4 // FILE RELATES TO FILE
8568 #ELSE
8569 !A [] $D9 !1 !4.FILE_NUMBER // FILE RELATES TO FILE
8570 #ENDIF
8571 #ELSE
8572 #IFDEF !4
8573 !A [] $D9 !1.FILE_NUMBER !4
8574 #ELSE
8575 !A [] $D9 !1.FILE_NUMBER !4.FILE_NUMBER
8576 #ENDIF
8577 #ENDIF
8578 #ELSE
8579 #CHECK !1 _R#LWVCEBG
8580 #IF !0>1
8581 #IFSAME !2 MATCHES
8582 #SET Q$ 6
8583 #ELSE
8584 #IFSAME !2 CONTAINS
8585 #SET Q$ 7
8586 #ELSE
8587 #CHECK !2 _U
8588 #SET Q$ !2
8589 #ENDIF
8590 #ENDIF
8591 MOVE |CI!q TO INDEX_NUMBER
8592 #IFCLASS !3 "F"
8593 !A [] $D2 !1 !3 // FILE MODE FILE
8594 #ELSE
8595 !A [] $D1 !1 !3 // FILE MODE VALUE
8596 #ENDIF
8597 #ELSE
8598 #CHECK !1 _CVW#GRE
8599 !A [] $D3 !1 // FIELD ONLY
8600 #ENDIF
8601 #ENDIF
8602 #ENDIF
8603 #ENDIF
8604#ENDCOMMAND
8605
8606// Handles comparing file.field to expression|file.field.
8607#COMMAND VCONSTRAIN_COMPARE #LGUR #LGUR LR #LGUR #LGU .
8608 !A [] $E7 !1 !2 // Store fileNum fieldNum
8609 #IFSAME !3 MATCHES CONTAINS $0 $1 $2 $3 $4 $5 $6 $7
8610 #IFSAME !3 MATCHES
8611 #SET Q$ 6
8612 #ELSE
8613 #IFSAME !3 CONTAINS
8614 #SET Q$ 7
8615 #ELSE
8616 #CHECK !3 _U
8617 #SET Q$ !3
8618 #ENDIF
8619 #ENDIF
8620 !A [] $E8 |CI!q // Store comparison mode
8621 #ELSE
8622 !A [] $E8 !3 // Store comparison mode
8623 #ENDIF
8624 #IF (!0>4)
8625 !A [] $E9 !4 !5 // fileNum2 fieldNum2
8626 #ELSE
8627 !A [] $EA !4 // Expression
8628 #ENDIF
8629#ENDCOMMAND
8630
8631#COMMAND VCONSTRAIN_AS #LGUR "AS" #LGUR .
8632 !A [] $DB !1 !3
8633#ENDCOMMAND
8634
8635#COMMAND VCONSTRAIN_RELATE #LGUR "RELATES" #LGUR .
8636 !A [] $D9 !1 !3
8637#ENDCOMMAND
8638
8639#COMMAND VCONSTRAIN
8640 #IFSAME !2 RELATES
8641 VCONSTRAIN_RELATE !1 !2 !3 !4 !5 !6 !7 !8 !9
8642 #ELSE
8643 #IFSAME !2 AS
8644 VCONSTRAIN_AS !1 !2 !3 !4 !5 !6 !7 !8 !9
8645 #ELSE
8646 VCONSTRAIN_COMPARE !1 !2 !3 !4 !5 !6 !7 !8 !9
8647 #ENDIF
8648 #ENDIF
8649#ENDCOMMAND
8650
8651// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8652//
8653// Command:
8654// SORT fileNum {indexNumbers {options {callBackObject}}}
8655//
8656// Description:
8657//
8658// Parameters:
8659// logicalName:
8660// The name used to identify the file in a DataFlex program.
8661// fileNum:
8662// The number used to open the file.
8663// indexNumbers:
8664// Optional string listing all index numbers to sort.
8665// callBackObject:
8666// An object id which will receive MSG_CALLBACK during the restructure
8667// operation. This the first parameter of this message is a string
8668// containing progress information.
8669//
8670// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8671#COMMAND SORT R#LGU #LGU #LUG #LGU .
8672 !A [] $519 !3 !4
8673 !A [] $518 !1 !2
8674#ENDCOMMAND
8675
8676
8677// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8678//
8679// Command:
8680// OUTPUT_AUX_FILE fileType FOR fileNum {NUMBER logicalNum} {TO optPath}
8681//
8682// Description:
8683// Output a database related file.
8684//
8685// Parameters:
8686// fileNum:
8687// The number used to open the file.
8688// logicalNum:
8689// The logical number to be used to create the file. Only used if the
8690// file to be created is a new file (thus has no set file number).
8691// fileType:
8692// The type of file to be created, e.g., DF_AUX_FILE_FD or
8693// DF_AUX_FILE_DEF.
8694// optPath:
8695// Optional filename/sequential device where output will be written.
8696//
8697// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8698
8699#COMMAND OUTPUT_AUX_FILE_HELP "NUMBER" L#GU "TO" L#GUIND .
8700 !A [] $51A !2 !4
8701#ENDCOMMAND
8702
8703#COMMAND OUTPUT_AUX_FILE R#LGU "FOR" R#LGU
8704 #IF (!0>5)
8705 #IFSAME !6 NUMBER
8706 OUTPUT_AUX_FILE_HELP !6 !7 !4 !5 !8 !9
8707 #ELSE
8708 OUTPUT_AUX_FILE_HELP !4 !5 !6 !7 !8 !9
8709 #ENDIF
8710 #ELSE
8711 #IF (!0>3)
8712 #IFSAME !4 NUMBER
8713 OUTPUT_AUX_FILE_HELP !4 !5 TO |CS"" !6 !7 !8 !9
8714 #ELSE
8715 #IFSAME !4 TO
8716 OUTPUT_AUX_FILE_HELP NUMBER |CI0 !4 !5 !6 !7 !8 !9
8717 #ELSE // Something is wrong, compiler will say what
8718 OUTPUT_AUX_FILE_HELP !4 !5 !6 !7 !8 !9
8719 #ENDIF
8720 #ENDIF
8721 #ELSE
8722 OUTPUT_AUX_FILE_HELP NUMBER |CI0 TO |CS""
8723 #ENDIF
8724 #ENDIF
8725 !A [] $51B !1 !3
8726#ENDCOMMAND
8727
8728
8729// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8730//
8731// Command:
8732// OUTPUT_DEF_FILE fileNum {NUMBER logicalNum} {TO optPath}
8733//
8734// Description:
8735// Output a .DEF file.
8736//
8737// Parameters:
8738// fileNum:
8739// The number used to open the file.
8740// logicalNum:
8741// The logical number to be used to create the file. Only used if the
8742// file to be created is a new file (thus has no set file number).
8743// optPath:
8744// Optional filename/sequential device where output will be written.
8745//
8746// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8747
8748#COMMAND OUTPUT_DEF_FILE
8749 OUTPUT_AUX_FILE DF_AUX_FILE_DEF FOR !1 !2 !3 !4 !5 !6 !7 !8 !9
8750#ENDCOMMAND
8751
8752
8753// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8754//
8755// Command:
8756// OUTPUT_FD_FILE fileNum {NUMBER logicalNum} {TO optPath}
8757//
8758// Description:
8759// Output an FD file.
8760//
8761// Parameters:
8762// fileNum:
8763// The number used to open the file.
8764// logicalNum:
8765// The logical number to be used to create the file. Only used if the
8766// file to be created is a new file (thus has no set file number).
8767// optPath:
8768// Optional filename/sequential device where output will be written.
8769//
8770// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8771
8772#COMMAND OUTPUT_FD_FILE
8773 OUTPUT_AUX_FILE DF_AUX_FILE_FD FOR !1 !2 !3 !4 !5 !6 !7 !8 !9
8774#ENDCOMMAND
8775
8776
8777// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8778//
8779// Command:
8780// DELETE_DB fileNumber | logicalNameString {IGNORE_ERRORS}
8781//
8782// Description:
8783// Deletes a dGatafile. If IGNORE_ERRORS is passed, all errors
8784// are suppressed. This should be used when deleting a file that
8785// may or may not exist.
8786//
8787// Parameters:
8788// fileNumber:
8789// Number of file to delete. File can be open but does not have
8790// to be
8791// logicalNameString:
8792// String containing the logical name of the file to delete.
8793//
8794// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8795
8796#COMMAND DELETE_DB RL#G """IGNORE_ERRORS" .
8797 #IFSAME !2 IGNORE_ERRORS
8798 !A [] $0e2 !1 |CI1
8799 #ELSE
8800 !A [] $0e2 !1 |CI0
8801 #ENDIF
8802#ENDCOMMAND
8803
8804//-=-=-=-==-==--=-=-=-=-=--=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8805//
8806// Command:
8807// COPY_RECORDS FileNumber1 TO fileNumber2 {NoOfRecords};
8808// {USING indexNum} {CALLBACK callback_id}
8809//
8810// Description:
8811// Copies NoOfRecords from fileNumber1 to fileNumber2. If USING is not
8812// specified, recnum is used otherwise records are copied using the
8813// specified indexNum. If CALLBACK is specified, the callback function
8814// in the object callback_id is called. FileNumber1 AND FileNumber2
8815// should have identical fields.
8816//
8817// Parameters:
8818// FileNumber1:
8819// Number of file FROM where records are to be copied.
8820// FileNumber2:
8821// Number of fiel TO which recordsare to be copied.
8822// NoOfRecords:
8823// Number of records to be copied.
8824// indexNum:
8825// Index Number. If not specified, files are copied in the order of recnum.
8826// callback_id:
8827// Object id of the object containing the callback function.
8828//
8829//-=-=-=-==-==--=-=-=-=-=--=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8830
8831#COMMAND COPY$RECORD$HELP "USING" #RLUG "CALLBACK" #RLUG .
8832 !A [] $521 !2 !4
8833#ENDCOMMAND
8834
8835#COMMAND COPY_RECORDS #RLUG "TO" #RLUG
8836 #IF (!0 > 3)
8837 #IFSAME !4 USING CALLBACK
8838 !A [] $522 |CI0
8839 #IFSAME !4 USING
8840 #IF (!0>5)
8841 COPY$RECORD$HELP !4 !5 !6 !7 !8 !9
8842 #ELSE
8843 COPY$RECORD$HELP !4 !5 CALLBACK |CI0 !7 !8 !9
8844 #ENDIF
8845 #ELSE
8846 #IFSAME !4 CALLBACK
8847 COPY$RECORD$HELP USING |CI0 !4 !5 !6 !7 !8 !9
8848 #ELSE
8849 COPY$RECORD$HELP !4 !5 !6 !7 !8 !9
8850 #ENDIF
8851 #ENDIF
8852 #ELSE
8853 !A [] $522 !4
8854 #IF (!0>4)
8855 #IFSAME !5 USING
8856 #IF (!0>6)
8857 COPY$RECORD$HELP !5 !6 !7 !8 !9
8858 #ELSE
8859 COPY$RECORD$HELP !5 !6 CALLBACK |CI0 !7 !8 !9
8860 #ENDIF
8861 #ELSE
8862 #IFSAME !5 CALLBACK
8863 COPY$RECORD$HELP USING |CI0 !5 !6 !7 !8 !9
8864 #ELSE
8865 COPY$RECORD$HELP !5 !6 !7 !8 !9
8866 #ENDIF
8867 #ENDIF
8868 #ELSE
8869 COPY$RECORD$HELP USING |CI0 CALLBACK |CI0
8870 #ENDIF
8871 #ENDIF
8872 #ELSE
8873 !A [] $522 |CI0
8874 COPY$RECORD$HELP USING |CI0 CALLBACK |CI0
8875 #ENDIF
8876 !A [] $524 !1 !3
8877#ENDCOMMAND
8878
8879//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8880//
8881// Command:
8882// FIELD_MAP FileNumber <field_name> "TO" FieldNumber
8883//
8884// Description:
8885// converts <field_name> into field number and puts it in FieldNumber
8886// Parameters:
8887// FileNumber:
8888// No of the file containing the fields.
8889// field_name:
8890// name of the field to be converted into number.
8891// FieldNumber:
8892// Value returned by FIELD_MAP
8893//
8894//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=---=-=-=-=-=-=--=-=-=-=-
8895
8896#COMMAND FIELD_MAP #RLUG #RLI "TO" #RLUG .
8897 !A [] $525 !1 !2
8898 !A [] $526 !4
8899#ENDCOMMAND
8900
8901
8902//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8903//
8904// Command:
8905// LOAD_DRIVER driver_name
8906//
8907// Description:
8908// Loads a database driver
8909//
8910// Parameter:
8911// driver_name:
8912// Name of the database driver.
8913//
8914//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8915
8916#COMMAND LOAD_DRIVER #RLI .
8917 !A [] $527 !1
8918#ENDCOMMAND
8919
8920//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8921//
8922// Command:
8923// UNLOAD_DRIVER driver_name
8924//
8925// Description:
8926// Loads a database driver
8927//
8928// Parameter:
8929// driver_name:
8930// Name of the database driver.
8931//
8932//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8933
8934#COMMAND UNLOAD_DRIVER #RlI .
8935 !A [] $528 !1
8936#ENDCOMMAND
8937
8938
8939// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8940//
8941// Command:
8942// READ_HEX {CHANNEL channelNum} varName {numHexBytes}
8943//
8944// Description:
8945// Read a stream of hex bytes from the sequential channel chosen. The
8946// stream must be in the form of a string containing two byte printable
8947// hex numbers, e.g., "616263" would correspond the the string "abc".
8948// The value is converted into ASCII before it is store in varName.
8949//
8950// Parameters:
8951// channelNum:
8952// The number of the sequential device channel to be read from. If
8953// not specified, the currently active input channel is read from.
8954// varName:
8955// The variable to read the bytes into.
8956// numHexBytes:
8957// The number of two digit hex codes to read in, e.g., "616263" is
8958// 3 hex codes (even though it is actually 6 bytes). If ommitted or
8959// zero, READ_HEX will read until it encounters the end of the line.
8960// If data is read which cannot be converted from hex to ascii,
8961// READ_HEX stops at that point.
8962//
8963// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8964
8965#COMMAND READ_HEX
8966 #IFSAME !1 CHANNEL
8967 !A [] $10A |CI0 !2
8968 #IF !0>2
8969 #CHECK !3 _ULE
8970 #CHECK !4 _RU
8971 !A [] $110 !3 !4
8972 #ENDIF
8973 #ELSE
8974 #CHECK !1 _ULEC
8975 #CHECK !2 _RU
8976 !A [] $110 !1 !2
8977 #ENDIF
8978#ENDCOMMAND
8979
8980
8981// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8982//
8983// Command:
8984// WRITE_HEX {CHANNEL channelNum} {value}*n
8985//
8986// Description:
8987// Writes any set of values (expressions, variables, etc.) to the chosen
8988// sequential channel in the form of a stream of two digit hex codes,
8989// e.g., the string "abc" would be written as "616263".
8990//
8991// Parameters:
8992// channelNum:
8993// The number of the sequential device channel to be read from. If
8994// not specified, the currently active input channel is read from.
8995// value:
8996// Any variable, expression, etc. to be written out. The value is
8997// evaluated and converted to a string before being written, e.g.,
8998// a value of (1 + 1) would be converted to the string "2" and
8999// then written out as "50" which is the hex code corresponding to
9000// the character '2'.
9001//
9002// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9003
9004#COMMAND WRITE$HEX$HELP
9005 #IF (!0>0)
9006 !A [] $10F !1
9007 WRITE$HEX$HELP !2 !3 !4 !5 !6 !7 !8 !9
9008 #ENDIF
9009#ENDCOMMAND
9010
9011#COMMAND WRITE_HEX
9012 #IFSAME !1 CHANNEL
9013 !A [] $10A |CI1 !2
9014 #IF !0>2
9015 WRITE$HEX$HELP !3 !4 !5 !6 !7 !8 !9
9016 #ENDIF
9017 #ELSE
9018 WRITE$HEX$HELP !1 !2 !3 !4 !5 !6 !7 !8 !9
9019 #ENDIF
9020#ENDCOMMAND
9021
9022
9023// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9024//
9025// Command:
9026// GET_CURSOR_VISIBLE
9027//
9028// Description:
9029// Returns 0 if the cursor is hidden, non-zero if it is visible. NOTE:
9030// this only reflects whether the cursor will be shown during the next
9031// user input action, not whether it is currently shown.
9032//
9033// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9034
9035#COMMAND GET_CURSOR_VISIBLE R#LGUC .
9036 !A [] $154 !1
9037#ENDCOMMAND
9038
9039
9040// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9041//
9042// Command:
9043// SET_CURSOR_VISIBLE visibleFlag
9044//
9045// Description:
9046// Sets the cursor hidden or displayable. NOTE: this only affects
9047// whether the cursor will be shown during the next user input action,
9048// not whether it is currently shown.
9049//
9050// Parameters:
9051// visibleFlag
9052// If this value is non-zero, the cursor will be displayed. If zero,
9053// the cursor will be hidden.
9054//
9055// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9056
9057#COMMAND SET_CURSOR_VISIBLE R#LGU .
9058 !A [] $155 !1
9059#ENDCOMMAND
9060
9061
9062// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9063 //
9064// Command:
9065// COMPUTE_SCREEN_CRC {startX startY endX endY "TO"} crcVariable
9066//
9067// Description:
9068// Returns a CRC for a region of the screen. This can be used by
9069// automated testing programs to verify that the screen has the
9070// expected display.
9071//
9072// Parameters:
9073// startX, startY, endX, endY
9074// Starting and ending coordinates of the region to be CRC'd. If
9075// not given, the whole screen is checked.
9076// crcVariable
9077// A variable which will contain the CRC.
9078//
9079// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9080
9081#COMMAND COMPUTE$CRC$HELP R#LGU R#LGU R#LGU R#LGU "TO" R#LGUC
9082 !A [] $151 !1 !2
9083 !A [] $152 !3 !4
9084 !A [] $153 !6
9085#ENDCOMMAND
9086
9087#COMMAND COMPUTE_SCREEN_CRC
9088 #IFSAME !1 TO
9089 COMPUTE$CRC$HELP |CI-1 |CI-1 |CI-1 |CI-1 !1 !2 !3 !4 !5 !6 !7 !8 !9
9090 #ELSE
9091 COMPUTE$CRC$HELP !1 !2 !3 !4 !5 !6 !7 !8 !9
9092 #ENDIF
9093#ENDCOMMAND
9094
9095
9096//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9097//
9098// Command:
9099// CALL_DRIVER fileNumber driverName;
9100// FUNCTION driverFunction CALLBACK objectID;
9101// PASSING aString aString2 aLong RESULT returnValue
9102//
9103// Descrtiption:
9104// A function call used directly access driver specific functions.
9105//
9106// Parmeters:
9107// fileNumber
9108// Number of the file
9109// driverName
9110// Name of the driver
9111// driverFunction
9112// Numeric value corresponding to a driver specific function
9113// returnValue
9114// Value returned by CALL_DRIVER
9115// aString
9116// A string
9117// aString2
9118// Another string
9119// aLoing
9120// A long
9121// objectID
9122// Object id for an object that will be sent the GET_CALLBACK
9123// message
9124//
9125//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9126
9127#COMMAND CALL$DRIVER$1 #RLUG #RLDNIGU "FUNCTION" #RGUL "CALLBACK" #RGUL .
9128 !A [] $529 !1 !2
9129 !A [] $52A !4 !6
9130#ENDCOMMAND
9131
9132#COMMAND CALL$DRIVER$2 "PASSING" #CRUG #CRUG #RLUG "RESULT" #RLUG .
9133 !A [] $530 !4
9134 !A [] $52B !2 !3
9135 !A [] $082 STRMARK !6
9136#ENDCOMMAND
9137
9138#COMMAND CALL_DRIVER
9139 CALL$DRIVER$1 !1 !2 !3 !4 !5 !6
9140 CALL$DRIVER$2 !7 !8 !9
9141#ENDCOMMAND
9142
9143
9144//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9145//
9146// Command:
9147// LOAD_DEF defName ONTO structureHandle
9148//
9149// Descrtiption:
9150// Will load the file definition from defName on top of the structure
9151// defined by structureHandle. While the structure may be for an
9152// existing file, no structure operations (other than STRUCTURE_START)
9153// should be performed on structureHandle prior to calling LOAD_DEF.
9154//
9155// Parmeters:
9156// structureHandle
9157// Handle to an new or modified structure.
9158// defName
9159// Name of the sequential device which contains the .DEF
9160// specification.
9161//
9162//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9163
9164#COMMAND LOAD_DEF #RLUG "ONTO" #RLUG .
9165 !A [] $52F !1 !3
9166#ENDCOMMAND
9167
9168
9169//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9170//
9171// Command:
9172// SET_FILELIST newName
9173//
9174// Descrtiption:
9175// Sets the filelist.cfg file to the name specified. If the specified
9176// file cannot be opened, the current filelist file remains unchanged.
9177//
9178// Parmeters:
9179// newName
9180// The name of the file to use as filelist.cfg
9181//
9182//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9183
9184#COMMAND SET_FILELIST RL#UGDNI .
9185 SET_ATTRIBUTE DF_FILELIST_NAME TO !1
9186#ENDCOMMAND
9187
9188
9189//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9190//
9191// Command:
9192// GET_FILELIST Name
9193//
9194// Descrtiption:
9195// Gets the name of the current filelist file.
9196//
9197// Parmeters:
9198// Name
9199// The name of the file being used as filelist.
9200//
9201//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9202
9203#COMMAND GET_FILELIST RL#UGDNI .
9204 GET_ATTRIBUTE DF_FILELIST_NAME TO !1
9205#ENDCOMMAND
9206
9207
9208// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9209//
9210// Command:
9211// LOGIN ServerName UserName Password {DriverName}
9212//
9213// Description:
9214// Login to the specified server using the passed user and password.
9215//
9216// Parameters
9217// ServerName
9218// Name of the server (driver specific) to be logged into
9219//
9220// UserName
9221// Name of the user to be used for the login
9222//
9223// Password
9224// Password to use for the login
9225//
9226// DriverName
9227// Optional database driver to use for the login. API defaults
9228// to attempting a login with all drivers.
9229//
9230// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9231
9232#COMMAND LOGIN #ULGR$ #ULGR$ #ULGR$ #ULG$ .
9233 !A [] $4c4 !1 !4
9234 !A [] $4c5 !2 !3
9235#ENDCOMMAND
9236
9237
9238//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9239//
9240// Commands:
9241// ENUM_LIST, DEFINE, and END_ENUM_LIST
9242//
9243// Descrtiption:
9244// Altogether, these commands can be used to enumerate symbol
9245// replacements for lists of symbols.
9246//
9247// DEFINE outside of an ENUM/ENUM_LIST block can be used to define
9248// individual symbolic replacements, and to define "flags". (However,
9249// there is no UNDEFINE. Sorry.)
9250//
9251// Parmeters:
9252// ENUM_LIST and END_ENUM_LIST take no parameters.
9253// DEFINE supports several syntaxes:
9254//
9255// DEFINE symbol
9256// If outside an enum list, defines a symbolic replacement named
9257// symbol as |CI1 (to be used with #IFDEF compiler directive).
9258//
9259// DEFINE symbol1 symbol2 ...
9260// If within an enum list, defines a symbolic replacement named
9261// symbol1 as a constant integer one greater than the previous
9262// symbolic replacement in the enum list (and symbol2 and each
9263// additional parameter are defined one greater than the symbol
9264// before it).
9265//
9266// DEFINE symbol FOR originalSymbol
9267// If outside an enum list, defines a symbolic replacement named
9268// symbol for originalSymbol. In this instance, originalSymbol may
9269// be any valid symbol name or constant value.
9270//
9271// DEFINE symbol FOR constInt
9272// If within an enum list, defines a symbolic replacement named
9273// symbol for the constant integer constInt. Only constant integers
9274// can be used for constInt with the AS syntax option within enum
9275// lists.
9276//
9277// Examples:
9278//
9279// enumeration_list
9280// define ddd // starts at 0 by default
9281// define eee // 1
9282// define fff ggg hhh // 2 3 4
9283// end_enumeration_list
9284//
9285// enum_list
9286// define rrr for 5 // start at 5
9287// define sss // 6
9288// define ttt for 21 // jump to 21
9289// define uuu // 22
9290// end_enum_list
9291//
9292// define aaa for ttt // generic symbolic replacements
9293// define aaa for "Hello"
9294//
9295// define zzz // defines zzz as |CI1 (to be used with #IFDEF)
9296//
9297// Note: Defining multiple "flags" (define sss ttt) is not allowed in order
9298// to allow proper type-checking. (The compiler's preprocessor substitutes
9299// the symbols too early; therefore, it becomes impossible to differentiate
9300// the allowable syntaxes if multiple arguments are allowed.)
9301//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9302
9303#COMMAND ENUMERATION_LIST .
9304 #IF (!Zs=1)
9305 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT ENUMERATION LISTS CANNOT BE BE NESTED
9306 #ENDIF
9307 #SET ZS$ 1 // enum_flag
9308 #SET ZT$ 0 // initial enum_value
9309#ENDCOMMAND
9310
9311// Define with better protections against alias datatype naming
9312#COMMAND DEFINE R
9313 #IFSAME !2 FOR
9314 #IF (!Zs=0) // if not enum
9315 #IFDEF !1 // ignore redefinition of symbols (only if not enum)
9316 // if def'ed it means that !1 is a constant (has already been defined). If we are trying to turn this
9317 // into a datatype, we know that this is wrong and we should warn the developer. So check if replacement is a variable name.
9318 // Note in all cases, alias types will get converted to one of these real names.
9319 #IFSAME !3 STRING NUMBER DATE INTEGER REAL BIGINT BOOLEAN ADDRESS TIME DATETIME FLOAT CHAR UCHAR SHORT USHORT UINTEGER UBIGINT CURRENCY TIMESPAN DECIMAL VARIANT
9320 #ERROR DFERR_COMP_SYMBOL_ALREADY_DEFINED "Attempt to redefine a constant as a data type"
9321 #ELSE
9322 // if not a data type, we ignore the redefinition and assume all is OK
9323 #ENDIF
9324 #ELSE
9325 #IFSAME !1 $0 // ignore redefinition if already defined as FALSE
9326 #ELSE
9327 #IFSAME !1 $1 // ignore redefinition if already defined as TRUE
9328 #ELSE
9329 #IFSAME !1 STRING NUMBER DATE INTEGER REAL BIGINT BOOLEAN ADDRESS TIME DATETIME FLOAT CHAR UCHAR SHORT USHORT UINTEGER UBIGINT CURRENCY TIMESPAN DECIMAL VARIANT
9330 // if here this must be an alias datatype that has already been defined. Either this is a duplicate
9331 // definition (which we ignore) or a new definition (which is an error)
9332 #IFSAME !1 !3 // if same ok..redefinition
9333 // #REM define datatype ok
9334 #ELSE
9335 #ERROR DFERR_COMP_SYMBOL_ALREADY_DEFINED "Attempt to redefine a data type"
9336 #ENDIF
9337 #ELSE
9338 #CHECK !4 .
9339 #IFSAME !1 !3 // ignore self definitions. e.g. define cat for cat
9340 // #REM define to .self. is dumb but ok
9341 #ELSE
9342 #REPLACE !1 !3
9343 #ENDIF
9344 #ENDIF
9345 #ENDIF
9346 #ENDIF
9347 #ENDIF
9348 #ELSE // else enum
9349 // check that symbol to be replaced is not a datatype or alias datatype
9350 #IFSAME !1 STRING NUMBER DATE INTEGER REAL BIGINT BOOLEAN ADDRESS TIME DATETIME FLOAT CHAR UCHAR SHORT USHORT UINTEGER UBIGINT CURRENCY TIMESPAN DECIMAL VARIANT
9351 #ERROR DFERR_COMP_SYMBOL_ALREADY_DEFINED "Attempt to redefine a data type"
9352 #ELSE
9353 #IFTYPE !3 "I"
9354 #IFCLASS !3 "C"
9355 #CHECK !4 .
9356 #REPLACE !1 !3
9357 #SET ZT$ (!3+1)
9358 #ELSE
9359 #ERROR DFERR_COMP_CONSTANT_EXPECTED ENUMERATION VALUE MUST BE A CONSTANT
9360 #ENDIF
9361 #ELSE
9362 #ERROR DFERR_COMP_CONSTANT_EXPECTED ENUMERATION VALUE MUST BE A CONSTANT
9363 #ENDIF
9364 #ENDIF
9365 #ENDIF
9366 #ELSE // not "FOR"
9367 // check that symbol to be replaced is not a datatype or alias datatype
9368 #IFSAME !1 STRING NUMBER DATE INTEGER REAL BIGINT BOOLEAN ADDRESS TIME DATETIME FLOAT CHAR UCHAR SHORT USHORT UINTEGER UBIGINT CURRENCY TIMESPAN DECIMAL VARIANT
9369 #ERROR DFERR_COMP_SYMBOL_ALREADY_DEFINED "Attempt to redefine a data type"
9370 #ELSE
9371 #IF (!Zs=0) // if not enum
9372 #CHECK !2 .
9373 #IFDEF !1 // define for |CI1 if they were previously undefined
9374 #IFSAME !1 |CI1
9375 #ELSE
9376 #ERROR DFERR_COMP_SYMBOL_ALREADY_DEFINED "ATTEMPT TO REDEFINE SYMBOL FOR DIFFERENT VALUE"
9377 #ENDIF
9378 #ELSE
9379 #IFSUB '!1'
9380 #ERROR DFERR_COMP_SYMBOL_ALREADY_DEFINED "ATTEMPT TO REDEFINE SYMBOL FOR DIFFERENT VALUE"
9381 #ELSE
9382 #REPLACE !1 |CI1
9383 #ENDIF
9384 #ENDIF
9385 #ELSE
9386 #REPLACE !1 |CI!Zt
9387 #SET ZT$ !ZT
9388 #IF (!0>1)
9389 DEFINE !2 !3 !4 !5 !6 !7 !8 !9
9390 #ENDIF
9391 #ENDIF
9392 #ENDIF
9393 #ENDIF
9394#ENDCOMMAND
9395
9396
9397
9398#COMMAND END_ENUMERATION_LIST .
9399 #IF (!Zs=0) // if not enum
9400 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT END_ENUMERATION_LIST WITHOUT ENUMERATION_LIST COMMAND
9401 #ELSE
9402 #SET ZS$ 0 // reset enum_flag
9403 #ENDIF
9404#ENDCOMMAND
9405
9406
9407//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9408//
9409// Command:
9410// ENTRY_NAME_ITEM itemName file.field ...
9411//
9412// Description:
9413// Just like Entry_Item except the first parameter is a (global) Item
9414// Name.
9415//
9416// Parameters:
9417// itemName
9418// The (global) name of the item being defined/created.
9419//
9420//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9421
9422#COMMAND ENTRY_NAME_ITEM R R
9423 #IFDEF !1 // Already exists?
9424 #IFTYPE !1 "CI" // If a constant integer
9425 #IF (!1=!Zg) // of the correct value...all is well.
9426 #ELSE // Else, It is a duplicate item.
9427 #ERROR DFERR_COMP_SYMBOL_ALREADY_DEFINED DUPLICATE ITEM NAME
9428 #ENDIF
9429 #ELSE // else defined as something else.
9430 #ERROR DFERR_COMP_SYMBOL_ALREADY_DEFINED NAME ALREADY DEFINED
9431 #ENDIF
9432 #ELSE // this names the item (!Zg is the trick)
9433 #REPLACE !1 !Zg
9434 #ENDIF // now a regular entry_Item
9435 ENTRY_ITEM !2 !3 !4 !5 !6 !7 !8 !9
9436#ENDCOMMAND
9437
9438
9439//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9440//
9441// Command:
9442// ON_NAME_ITEM itemName itemValue ...
9443//
9444// Description:
9445// Just like On_Item except the first parameter is a (global) Item
9446// Name.
9447//
9448// Parameters:
9449// itemName
9450// The (global) name of the item being defined/created.
9451//
9452//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9453
9454#COMMAND ON_NAME_ITEM R
9455 #IFDEF !1 // Already exists?
9456 #IFTYPE !1 "CI" // If a constant integer
9457 #IF (!1=!Zg) // of the correct value...all is well.
9458 #ELSE // Else, It is a duplicate item.
9459 #ERROR DFERR_COMP_SYMBOL_ALREADY_DEFINED DUPLICATE ITEM NAME
9460 #ENDIF
9461 #ELSE // else defined as something else.
9462 #ERROR DFERR_COMP_SYMBOL_ALREADY_DEFINED NAME ALREADY DEFINED
9463 #ENDIF
9464 #ELSE // this names the item (!Zg is the trick)
9465 #REPLACE !1 !Zg
9466 #ENDIF // now a regular entry_Item
9467 ON_ITEM !2 !3 !4 !5 !6 !7 !8 !9
9468#ENDCOMMAND
9469
9470
9471// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9472//
9473// Command:
9474// BEGIN_TRANSACTION
9475//
9476// Description:
9477// Starts a transaction on any open files.
9478//
9479// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9480
9481#COMMAND BEGIN_TRANSACTION .
9482 #SET N$ !N
9483 #PUSH !R
9484 #XPUSH !n $INIT // Init IF/ELSE stack at this nesting level.
9485 #IFIND //INCLUDE JUMPS IF INDICATORS ON LINE.
9486 // GOTO BEGIN$TRAN$!r
9487 !A [] $041 |CI0
9488 #FREF BEGIN$TRAN$!r !a
9489 #$ !A 0 0 0 $041 |CL0
9490 #FREF END$TRAN$!r !a
9491 #ENDIF
9492 #$ BEGIN$TRAN$!r:
9493 #$ BEGIN$!r:
9494 #$ !A [0 0 0] $0C7 |CI0
9495 #FREF END$TRAN$!r !a
9496#ENDCOMMAND
9497
9498
9499// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9500//
9501// Command:
9502// END_TRANSACTION
9503//
9504// Description:
9505// Attempts to commit all operations in the current transaction.
9506//
9507// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9508
9509#COMMAND END_TRANSACTION .
9510 #POP S$
9511 !A [] $0C8
9512 #IFDEF WHILE$!s
9513 !A [] $041 WHILE$!s
9514 #ENDIF
9515 END$!s:
9516 END$TRAN$!s:
9517 #SET N$ !n-1
9518#ENDCOMMAND
9519
9520
9521// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9522//
9523// Command:
9524// ABORT_TRANSACTION
9525//
9526// Description:
9527// Aborts any currently active transactions, unlocking the files.
9528//
9529// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9530
9531#COMMAND ABORT_TRANSACTION .
9532 !A [] $0EB
9533#ENDCOMMAND
9534
9535
9536//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9537//
9538// Command:
9539// SET_RESOURCE_LIBRARY newName
9540//
9541// Description:
9542// Tells the program to look in the specified file when opening
9543// resources (with the DIRECT_INPUT command). Specifying "" (the empty
9544// string) as the newName resets the resource library to look in the
9545// currently executing program for resources. The new library must be a
9546// properly compiled DataFlex program; all commands and non-resource
9547// data in the program/library are ignored. The filename MUST include
9548// the extension, but is not required to be .FLX. If the specified
9549// file cannot be opened, an error occurs and the current resource
9550// library continues to be used.
9551//
9552// Note: Any resources that are currently open when the resource
9553// library is changed remain open; i.e. you may continue to read from
9554// them. The setting of the resource library only affects the
9555// DIRECT_INPUT command when opening resources.
9556//
9557// Parameters:
9558// newName
9559// The name of the file to use as the library of resources.
9560//
9561//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9562
9563#COMMAND SET_RESOURCE_LIBRARY #RLUGOB .
9564 !A [] $113 !1
9565#ENDCOMMAND
9566
9567
9568//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9569//
9570// Command:
9571// GET_RESOURCE_NAME resourceName|resourceId TO stringVariable
9572//
9573// Description:
9574// A command to retrieve the name of a resource at runtime. For the first
9575// parameter, you may pass either the resource name (not in quotes) (I
9576// know that sounds strange, and you'd probably never do it, but it WILL
9577// work) or the integer value of the resource id.
9578//
9579// Parameters:
9580// resourceId
9581// Integer value of a resource id.
9582// stringVariable
9583// Variable to return the resource name to.
9584//
9585//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9586
9587#COMMAND GET_RESOURCE_NAME R#LG "TO" RL#OBUGDNI .
9588 #IFDEF !1
9589 !A [] $114 !1 !3
9590 #ELSE
9591 !A [] $114 !1.RSC !3
9592 #ENDIF
9593#ENDCOMMAND
9594
9595
9596//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9597//
9598// Command:
9599// ADD value TO variable
9600//
9601// Description:
9602// Adds the specified value to the target variable.
9603//
9604// Parameters:
9605// value:
9606// Any expression
9607// variable
9608// Any window, variable, etc. that can receive a value
9609//
9610//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9611
9612#COMMAND ADD R#OBLG "TO" UR#OLGC .
9613 Move (!3 + !1) to !3
9614#ENDCOMMAND
9615
9616
9617//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9618//
9619// Command:
9620// SUBTRACT value FROM variable
9621//
9622// Description:
9623// Subtracts the specified value to the target variable.
9624//
9625// Parameters:
9626// value:
9627// Any expression
9628// variable
9629// Any window, variable, etc. that can receive a value
9630//
9631//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9632
9633#COMMAND SUBTRACT R#OBLG "FROM" UR#OLGC .
9634 Move (!3 - !1) to !3
9635#ENDCOMMAND
9636
9637
9638//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9639//
9640// Command:
9641// BREAK [BEGIN|END]
9642//
9643// Description:
9644// Exit or jump to start of a control loop (WHILE, REPEAT, FOR). Default
9645// action is to exit if no argument supplied.
9646//
9647// Parameters:
9648// BEGIN:
9649// Jump to start of loop.
9650// END:
9651// Jump to end of loop and exit.
9652//
9653//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9654
9655#COMMAND BREAK "BEGIN""END""" .
9656 #POP S$
9657 #PUSH !s
9658 #IFSAME !1 BEGIN
9659 Goto BEGIN$!s
9660 #ELSE
9661 Goto END$!s
9662 #ENDIF
9663#ENDCOMMAND
9664
9665//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9666//
9667// Command:
9668// HARD$EXIT <integer>
9669//
9670// THIS COMMAND IS INTENDED FOR INTERNAL DAC TESTING USE ONLY
9671// USE WITHIN AN APPLICATION WILL PROBABLY CAUSE SYSTEM INTEGRITY
9672// PROBLEMS!
9673//
9674// This command causes the runtime to do an exit(#) without
9675// any internal cleanup. It is intended for testing server
9676// transaction support.
9677//
9678//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9679
9680#COMMAND HARD$EXIT R#LG .
9681 !A [] $54 !1
9682#ENDCOMMAND
9683
9684//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9685//
9686// Command:
9687// netware_get_tts_flag <path name> to <integer boolean>
9688//
9689// THIS COMMAND IS INTENDED FOR INTERNAL DAC TESTING USE ONLY!
9690//
9691// This command returns the state of the TTS flag of a file (by path name),
9692// returns false (0) if not a tts volume.
9693//
9694//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9695
9696#COMMAND NETWARE_GET_TTS_FLAG R#LG "TO" RL#OBUGD .
9697 !A [] $30D !1 !3
9698#ENDCOMMAND
9699
9700//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9701//
9702// Command:
9703// netware_set_tts_flag <path name> to <integer boolean>
9704//
9705// THIS COMMAND IS INTENDED FOR INTERNAL DAC TESTING USE ONLY!
9706//
9707// This command sets the state of the TTS flag of a file (by path name),
9708// returns [FOUND] if status could be set.
9709//
9710//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9711
9712#COMMAND NETWARE_SET_TTS_FLAG R#LG "TO" RL#OBUGD .
9713 !A [] $30E !1 !3
9714#ENDCOMMAND
9715
9716//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9717//
9718// Command:
9719// netware_get_available <integer boolean>
9720//
9721// THIS COMMAND IS INTENDED FOR INTERNAL DAC TESTING USE ONLY!
9722//
9723// This command returns non-zero if netware is loaded.
9724//
9725//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9726
9727#COMMAND NETWARE_GET_AVAILABLE RL#OBUGD .
9728 !A [] $30F !1 |CI0
9729#ENDCOMMAND
9730
9731//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9732//
9733// Command:
9734// VALID_DRIVE driveLetter retVal
9735//
9736// Description:
9737// This command returns non-zero if the drive is a valid drive letter
9738// This command is only useful under dos/os2/windows
9739//
9740// Parameters:
9741// driveLetter
9742// Drive letter to check if valid. Must be a letter.
9743// retVal
9744// Integer results of command
9745//
9746//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9747
9748#COMMAND VALID_DRIVE R R
9749 !A [] $581 !1 !2
9750#ENDCOMMAND
9751
9752//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9753//
9754// Command:
9755//
9756// SET_DIRECTORY directory
9757//
9758// Description:
9759// Sets the current directory. The directory argument may contain a drive
9760// letter to set the current directory on a particular drive.
9761//
9762// Parameters:
9763// directory
9764// The new current directory to be set. The directory argument may
9765// contain a drive letter to set the current directory on a particular
9766// drive.
9767//
9768// NOTE: This command will be removed for final VDF 4.0 release. A new message
9769// will be added to provide replacement functionality. KCR
9770//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9771
9772#COMMAND SET_DIRECTORY R
9773 !A [] $58C !1
9774#ENDCOMMAND
9775
9776//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9777//
9778// Command:
9779//
9780// FILE_EXIST fileName result
9781//
9782// Description:
9783// Returns non-zero if the specified file exists.
9784//
9785// Parameters:
9786// fileName
9787// The name of the file to check the existance of.
9788// result
9789// Non-zero if the file exists or zero if does not exist.
9790//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9791
9792#COMMAND FILE_EXIST R R
9793 !A [] $58D !1 !2
9794#ENDCOMMAND
9795
9796//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9797//
9798// Command:
9799//
9800// GET_DIRECTORY {drive} currentDirectory
9801//
9802// Description:
9803// Returns the current directory.
9804//
9805// Parameters:
9806// {drive}
9807// The drive letter to get the current directory for. If drive is
9808// not specifed then the current drive is assumed.
9809// currentDirectory
9810// The current directory for the appropriate drive.
9811//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9812
9813#COMMAND GET_DIRECTORY R
9814 #IF (!0 > 1)
9815 !A [] $58E !1 !2
9816 #ELSE
9817 !A [] $58E |CS"" !1
9818 #ENDIF
9819#ENDCOMMAND
9820
9821//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9822//
9823// Command:
9824//
9825// MAKE_DIRECTORY directory {permissions}
9826//
9827// Description:
9828// Makes a directory on the current drive. Uses the optional permissions
9829// value for the directory if it is specified.
9830//
9831// Parameters:
9832// directory
9833// The name of the new directory to be made.
9834// {permissions}
9835// The access permissions of the new directory. If this is not
9836// specified then the default is DF_FLEX_ALL_RIGHTS.
9837//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9838
9839#COMMAND MAKE_DIRECTORY R
9840 #IF !0 < 2
9841 !A [] $58F !1 |CI2047
9842 #ELSE
9843 !A [] $58F !1 !2
9844 #ENDIF
9845#ENDCOMMAND
9846
9847//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9848//
9849// Command:
9850//
9851// REMOVE_DIRECTORY directory
9852//
9853// Description:
9854// Removes the specified directory.
9855//
9856// Parameters:
9857// directory
9858// The name of the directory to be removed.
9859//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9860
9861#COMMAND REMOVE_DIRECTORY R
9862 !A [] $590 !1
9863#ENDCOMMAND
9864
9865//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9866//
9867// Command:
9868//
9869// MAKE_TEMP_FILE tempExtension tempFile
9870//
9871// Description:
9872// Makes a temporary file with a unique name with the specified extension
9873// and returns the unique name that was generated.
9874//
9875// Parameters:
9876// tempExtension
9877// The extension to use when making the temporary file.
9878// tempFile
9879// The name of the temporary file that is returned.
9880//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9881
9882#COMMAND MAKE_TEMP_FILE R R .
9883 !A [] $591 !1 !2
9884#ENDCOMMAND
9885
9886//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9887//
9888// Command:
9889//
9890// GET_FILE_MOD_TIME fileName "TO" date {hour} {minute} {second}
9891//
9892// Description:
9893// Returns the file modified date/time stamp for the specified file.
9894//
9895// Parameters:
9896// fileName
9897// The file to get the date/time stamp for.
9898// date
9899// The date the file was last modifed.
9900// {hour}
9901// The hour of the day that the file was last modified.
9902// {minute}
9903// The minute that the file was last modified.
9904// {second}
9905// The second that the file was last modified.
9906//
9907//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9908
9909#COMMAND GET_FILE_MOD_TIME R "TO" R
9910 !A [] $592 !1 !3
9911
9912 #IF !0 > 3
9913 !A [] $593 !4
9914 #ENDIF
9915
9916 #IF !0 > 4
9917 !A [] $594 !5
9918 #ENDIF
9919
9920 #IF !0 > 5
9921 !A [] $595 !6
9922 #ENDIF
9923
9924#ENDCOMMAND
9925
9926//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9927//
9928// Command:
9929//
9930// SET_FILE_MOD_TIME fileName "TO" date {hour} {minute} {second}
9931//
9932// Description:
9933// Sets the file modified date/time stamp for the specified file.
9934//
9935// Parameters:
9936// fileName
9937// The file to set the date/time stamp for.
9938// date
9939// The new date that the file was modified.
9940// {hour}
9941// The new hour that the file was modified.
9942// {minute}
9943// The new minute that the file was modified.
9944// {second}
9945// The new second that the file was modified.
9946//
9947//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9948
9949#COMMAND SET_FILE_MOD_TIME R "TO" R
9950 !A [] $597 !1 !3 //Date
9951
9952 #IF (!0 > 3)
9953 !A [] $598 !4 //Hour
9954 #ENDIF
9955
9956 #IF (!0 > 4)
9957 !A [] $599 !5 //Minutes
9958 #ENDIF
9959
9960 #IF (!0 > 5)
9961 !A [] $59A !6 //Seconds
9962 #ENDIF
9963
9964 !A [] $596 !1
9965#ENDCOMMAND
9966
9967// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9968//
9969// Command:
9970// SET_VIDEO_MODE
9971// GET_VIDEO_MODE
9972//
9973// Description:
9974// Video Modes for DOS
9975//
9976// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9977
9978
9979#COMMAND SET_VIDEO_MODE "TO" _RUSD#
9980 !A [] $150 !2
9981#ENDCOMMAND
9982
9983#COMMAND GET_VIDEO_MODE "TO" _RUSD#
9984 !A [] $14F !2
9985#ENDCOMMAND
9986
9987
9988// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9989//
9990// Command:
9991// DEFINE_SYMBOL
9992//
9993// Description:
9994// Like #REPLACE except it checks if the symbol exists first.
9995//
9996// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
9997
9998#COMMAND DEFINE_SYMBOL R "FOR" R
9999 #IFDEF !1
10000 #ELSE
10001 #REPLACE !1 !3
10002 #ENDIF
10003#ENDCOMMAND
10004
10005// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10006//
10007// Command:
10008// GET_DATE_ATTRIBUTE
10009//
10010// Description:
10011//
10012// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10013
10014#COMMAND GET_DATE_ATTRIBUTE R "TO" R .
10015 !A [] $2E1 !1 !3
10016#ENDCOMMAND
10017
10018// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10019//
10020// Command:
10021// SET_DATE_ATTRIBUTE
10022//
10023// Description:
10024//
10025// =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10026
10027#COMMAND SET_DATE_ATTRIBUTE R "TO" R .
10028 !A [] $2E2 !1 !3
10029#ENDCOMMAND
10030
10031#IFDEF IS$WINDOWS
10032#ELSE
10033
10034//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10035//
10036// Command:
10037// SET_GROUP_ID groupId
10038//
10039// Description:
10040// This command sets the group id to be used.
10041//
10042// Parameters:
10043// groupId
10044// The group id to set as the current group id
10045//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10046
10047#COMMAND SET_GROUP_ID R
10048 !A [] $582 !1
10049#ENDCOMMAND
10050
10051//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10052//
10053// Command:
10054//
10055// SET_USER_ID userId
10056//
10057// Description:
10058// This command sets the user id to be used.
10059//
10060// Parameters:
10061// userId
10062// The user id to set as the current user id
10063//
10064//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10065
10066#COMMAND SET_USER_ID R
10067 !A [] $583 !1
10068#ENDCOMMAND
10069
10070//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10071//
10072// Command:
10073//
10074// GET_GROUP_ID retVal
10075//
10076// Description:
10077// This command returns the current group id.
10078//
10079// Parameters:
10080// retVal
10081// the value returned is the current user group id
10082//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10083
10084#COMMAND GET_GROUP_ID R
10085 !A [] $584 !1
10086#ENDCOMMAND
10087
10088//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10089//
10090// Command:
10091//
10092// GET_EFFECTIVE_GROUP_ID retVal
10093//
10094// Description:
10095// This command returns the current effective group id. This may be
10096// different from the actual group id if, say, the user has become
10097// superuser under unix.
10098//
10099// Parameters:
10100// retVal
10101// the value returned is the current effective user group id
10102//
10103//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10104
10105#COMMAND GET_EFFECTIVE_GROUP_ID R
10106 !A [] $585 !1
10107#ENDCOMMAND
10108
10109//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10110//
10111// Command:
10112//
10113// GET_USER_ID retVal
10114//
10115// Description:
10116// This command returns the current user id.
10117//
10118// Parameters:
10119// retVal
10120// the value returned is the current user id
10121//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10122
10123#COMMAND GET_USER_ID R
10124 !A [] $586 !1
10125#ENDCOMMAND
10126
10127//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10128//
10129// Command:
10130//
10131// GET_EFFECTIVE_USER_ID retVal
10132//
10133// Description:
10134// This command returns the current effective user id. This may be
10135// different from the actual user id if, say, the user has become
10136// superuser under unix.
10137//
10138// Parameters:
10139// retVal
10140// the value returned is the current effective user group id
10141//
10142//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10143
10144#COMMAND GET_EFFECTIVE_USER_ID R
10145 !A [] $587 !1
10146#ENDCOMMAND
10147
10148//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10149//
10150// Command:
10151//
10152// GET_PERMISSION fileName "TO" retVal
10153//
10154// Description:
10155// This command returns the current access privledeges for the specified
10156// file
10157//
10158// Parameters:
10159// fileName
10160// The name of the file to check the permissions for
10161// retVal
10162// An value containing all the permission bits for the file
10163//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10164
10165#COMMAND GET_PERMISSION R "TO" R
10166 !A [] $588 !1 !3
10167#ENDCOMMAND
10168
10169//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10170//
10171// Command:
10172//
10173// SET_PERMISSION fileName "TO" permissions
10174//
10175// Description:
10176// This command sets the access privledeges for the specified file.
10177// The various permissions must be and'ed together to form one argument
10178//
10179// Parameters:
10180// fileName
10181// The name of the file to set the permissions for
10182// permissions
10183// An value containing all the permission bits for the file and'ed
10184// together to form one integer value
10185//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10186
10187#COMMAND SET_PERMISSION R "TO" R
10188 !A [] $589 !1 !3
10189#ENDCOMMAND
10190
10191//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10192//
10193// Command:
10194//
10195// ADD_PERMISSION fileName permissions
10196//
10197// Description:
10198// This command adds the requested access privledeges for the specified
10199// file to the access permissions already set for this file.
10200// The various permissions must be and'ed together to form one argument.
10201// These permission bits will then be and'ed together with the existing
10202// permission bits for the file.
10203//
10204// Parameters:
10205// fileName
10206// The name of the file to add the permissions for
10207// permissions
10208// An value containing the permission bits to be changed for the file
10209// and'ed together to form one integer value
10210//
10211//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10212
10213#COMMAND ADD_PERMISSION R R
10214 !A [] $58A !1 !2
10215#ENDCOMMAND
10216
10217//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10218//
10219// Command:
10220//
10221// DELETE_PERMISSION fileName permissions
10222//
10223// Description:
10224// This command removes the requested access privledeges for the specified
10225// file from the access permissions already set for this file.
10226// The various permissions must be and'ed together to form one argument
10227//
10228// Parameters:
10229// fileName
10230// The name of the file to remove the permissions for
10231// permissions
10232// An value containing the permission bits to be removed for the file
10233// and'ed together to form one integer value
10234//
10235//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10236
10237#COMMAND DELETE_PERMISSION R R
10238 !A [] $58B !1 !2
10239#ENDCOMMAND
10240
10241//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10242//
10243// Command:
10244//
10245// SET_FILE_OWNER fileName "TO" owner {group}
10246//
10247// Description:
10248// Sets the file owner of the specifed file and optionally sets the
10249// group id of the file.
10250//
10251// Parameters:
10252// fileName
10253// The file to set the owner for.
10254// owner
10255// The new owner for the file.
10256// {group}
10257// The new group id for the file.
10258//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10259
10260#COMMAND SET_FILE_OWNER R "TO" R
10261 #IF (!0 > 3)
10262 !A [] $59D !3 !4
10263 #ELSE
10264 !A [] $59D !3 0
10265 #END
10266
10267 !A [] $59C !1
10268#ENDCOMMAND
10269
10270//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10271//
10272// Command:
10273//
10274// GET_FILE_OWNER fileName "TO" owner {group}
10275//
10276// Description:
10277// Gets the file owner of the specifed file and optionally gets the
10278// group id of the file.
10279//
10280// Parameters:
10281// fileName
10282// The file to get the owner for.
10283// owner
10284// The owner of the file.
10285// {group}
10286// The group id of the file.
10287//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
10288
10289#COMMAND GET_FILE_OWNER R "TO" R
10290 !A [] $59B !1 !3
10291
10292 #IF (!0 > 3)
10293 !A [] $59C !4
10294 #ENDIF
10295#ENDCOMMAND
10296
10297#ENDIF
10298
10299// JJT-5.1
10300// Changed commands
10301
10302#COMMAND COMPILER_DESKTOP_METHOD_WARNINGS "ON""OFF"
10303 #IFSAME !1 ON
10304 #SET ZL$ (!Zl | 4) // add bit 3
10305 #ELSE
10306 #SET ZL$ (!Zl & 3) // strip bit 3 - the default fir 8.3, will change in future
10307 #REM AMBIGUOUS .DESKTOP. METHODS ARE ALLOWED (THIS IS .NOT. RECOMMENDED)
10308 #ENDIF
10309#ENDCOMMAND
10310
10311#COMMAND COMPILER_WARNINGS "ON""OFF""OLD""OLDOFF"
10312 #IFSAME !1 ON
10313 #SET ZL$ (!Zl & 6) // strip bit 1
10314 #REM STRICT COMPILER WARNINGS ON
10315 #ELSE
10316 #IFSAME !1 OFF
10317 #SET ZL$ (!Zl | 1) // add bit 1
10318 #REM STRICT COMPILER WARNINGS OFF
10319 #ELSE
10320 #IFSAME !1 OLD
10321 #SET ZL$ (!Zl | 2) // add bit 2
10322 #REM OLD STYLE COMPILER CHECKING ON (written to .prn file)
10323 #ELSE
10324 #SET ZL$ (!Zl & 5) // strip bit 2
10325 #REM OLD STYLE COMPILER CHECKING OFF
10326 #ENDIF
10327 #ENDIF
10328 #ENDIF
10329#ENDCOMMAND
10330
10331// changes: 1. declare an error if not within a procedure or function
10332// 2. Check for mismatched Begin/End blocks.
10333// 3. Check for child objects within end_object
10334//
10335#COMMAND END_PROCEDURE .
10336 // This tracks number of nested objects in method.
10337 // !Zn is the level of !n when the proc/funct started. Upon
10338 // completion !n should be that value. If not error.
10339 // If error, compiler stack is messed up
10340 #IF (!Zn = !n)
10341 #ELSE
10342 #ERROR DFERR_COMP_UNRESOVLED_CONTROL_BLOCK Mismatch in Method
10343 #SET B$ (!b | 4) // stack is screwed up..we have no idea if we are in proc
10344 #ENDIF
10345
10346 // When Proc started we set !Zm to 0. It counts nested objects. It
10347 // should be zero. If not we have an error.
10348 // If error, compiler stack is messed up
10349 #IF (!Zm > 0)
10350 #ERROR DFERR_COMP_MISSING_END_OBJECT Mismatch in Method
10351 #SET B$ (!b | 4) // stack is screwed up..we have no idea if we are in proc
10352 #ENDIF
10353
10354#IFDEF MANGLE_NAMES
10355 // Let NUM_ARGUMENTS get referenced again in the code, if it has been turned off.
10356 #ALLOW NUM_ARGUMENTS
10357 #UNDEF __@INSIDE_FUNCTION@__ // Leaving function/proc.
10358
10359#ENDIF
10360
10361 #IF (!b & 4) // are we within a Procedure
10362 #SET B$ (!b & 3) // reset flag to in_procedure
10363 #POP U$
10364 #REPLACE OBJ$!Za$LNUM |CI!Zg // Update the count in the local cmd.
10365 // !A [] OBJ$END$HANDLER |CI0
10366 !A [] $0455 |CI0
10367 #REPLACE OBJ$!Za$ENDPROC !a
10368 #POP U$
10369 #POP ZG$
10370
10371 #STKSYM
10372 #ELSE
10373 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT End_Funct/End_proc command .not. within a method
10374 #ENDIF
10375
10376#ENDCOMMAND
10377
10378
10379
10380// changes: 1. declare an error if not within a class
10381// 2. declare an error if within a procedure/function
10382// 3. declare an error in object (implies missing end_object)
10383// Note: it is possible that under advanced usage you might be
10384// creating a class in a method. If this is the case you should
10385// use base_end_class
10386#COMMAND END_CLASS .
10387 #IF (!b & 2) // must be within class or an error
10388 #IF (!b & 4) // end-class within procedure is probably wrong
10389 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT CLASS/END_CLASS should .not. be inside a method
10390 #ELSE
10391 #IF (!b & 1) // if object must be error. Should be end object
10392 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT End_object expected before End_class
10393 #ENDIF
10394 BASE_END_CLASS
10395 #ENDIF
10396 #ELSE
10397 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT End_class without class
10398 #ENDIF
10399#ENDCOMMAND
10400
10401// this is lower level end_class. It doesn't check that the
10402// command apppears in the "right" spot.
10403#COMMAND BASE_END_CLASS .
10404 #SET ZI$ (!Zi+!Zf) //subobject count = self + superclass
10405 #REPLACE !$.AGG |CI!Zi //define subobject count
10406 !A [] END$CLASS U_!$ |CI!Zi
10407
10408 #SPOP // restore the old class name
10409 #POP X$ // reset the property index
10410 #POP ZI$ // reset old sub_object_count
10411 #POP ZF$ // reset super_class_count
10412 #POP ZB$ // reset current_dep
10413 #POP B$ // reset obj_flag
10414#ENDCOMMAND
10415
10416
10417// changes: declare an error if not within an object
10418// if within a class, this should be inside of a method
10419#COMMAND END_OBJECT
10420 #IF (!b & 1) // if not within an object..error
10421 // if within a class (2) but not within a procedure (4) we have an error
10422 // you should not place objects in classes outside of methods
10423 #IF (!b = 3) // 3 = in class and in object, not in method
10424 #IF (!Zl & 1)
10425 #REM WARNING 4391: Object/End_object within class is .NOT. in a method
10426 #ELSE
10427 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Object/End_object within class should be in a method
10428 #ENDIF
10429 #ENDIF
10430
10431 // If within method, we count number of nested objects.
10432 // If lt 0, declare an error, End_procedure will check for >0
10433 #IF ( !b & 4 ) // if object within method
10434 #SET ZM$ !Zm-1 // decrement count
10435 #IF (!Zm < 0) // if lt 0, declare error
10436 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT End_Object without Object in Method
10437 #ENDIF
10438 #ENDIF
10439
10440 // if here we are within a object.
10441 // if we are within a class we are also within a procedure
10442
10443 //
10444 // The following section was added 01-08-90 by SAL to support inheritable
10445 // end-instance macros for classes
10446 //
10447 #IFSUB '!$$SC' //if flex-defined class
10448 #IFSUB '!$$EM' //if end-instance macro defined for class,
10449 !$$EM !$ !1 !2 !3 !4 !5 !6 !7 !8 !9
10450 #ELSE
10451 FORWARD_END_CONSTRUCT !$ !1 !2 !3 !4 !5 !6 !7 !8 !9
10452 #ENDIF
10453 #ELSE
10454 DEFAULT_END_OBJECT //else use default
10455 #ENDIF
10456 #SPOP //restore old class name
10457 //
10458 // end of addition 01-08-90 by SAL
10459 //
10460 #ELSE
10461 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT End_Object without Object
10462 #ENDIF
10463#ENDCOMMAND
10464
10465// changes: declare an error if not within a procedure or function
10466//
10467#COMMAND FUNCTION_RETURN GO .
10468 #IF (!b & 4) // are we within a Procedure
10469 #IF (!0 > 0)
10470 #IFSAME !1 $0
10471 // !A [] OBJ$HRET |CI0
10472 !A [] $0450 |CI0
10473 #ELSE
10474 #IFSAME !1 $1
10475 // !A [] OBJ$HRET |CI1
10476 !A [] $0450 |CI1
10477 #ELSE
10478 #CHECK !1 _U
10479 // !A [] OBJ$HRET !1
10480 !A [] $0450 !1
10481 #ENDIF
10482 #ENDIF
10483 #ELSE
10484 // !A [] OBJ$HRET |CI0
10485 !A [] $0450 |CI0
10486 #ENDIF
10487 #ELSE
10488 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Method return .not. within a method
10489 #ENDIF
10490#ENDCOMMAND
10491
10492// change: return can be used in methods or in sub-routines
10493// perhaps next revision
10494//#COMMAND RETURN
10495// #IF (!b & 4) // are we within a Procedure/function
10496// #IF (!Zl & 2)
10497// #REM #ERROR DFERR_COMP_OBSOLETE_UNSUPPORTED_FEATURE Old Style Usage: Possible gosub return inside of method
10498// #ENDIF
10499// Procedure_Return !1 // we are returning from a method
10500// #ELSE
10501// // tells us what we need to fix.
10502// #IF (!Zl & 2)
10503// #REM #ERROR DFERR_COMP_OBSOLETE_UNSUPPORTED_FEATURE Old Style Usage: Gosub style/Return s/b Gosub_return
10504// #ENDIF
10505// #IF (!Zl & 1) // if relaxed...
10506// Gosub_Return !1 !2 // we are doing an old style sub-routine return
10507// #ELSE
10508// Procedure_Return !1 // we are returning from a method.. will gen an error
10509// #ENDIF
10510// #ENDIF
10511//#ENDCOMMAND
10512
10513// change: if within a method declare an error. Force use of
10514// gosub_return. This catches errors where developer types
10515// return instead of procedure_return.
10516//
10517#COMMAND RETURN
10518 #IF (!b & 4) // are we within a Procedure/function
10519 #IF (!Zl & 1) // if relaxed...
10520 #REM WARNING 4388: Old Style Usage: s/b gosub_return
10521 Gosub_Return !1 !2 !3 !4 !5 !6 !7 !8 !9 // we are doing an old style sub-routine return
10522 #ELSE
10523 #ERROR DFERR_COMP_OBSOLETE_UNSUPPORTED_FEATURE Old Style Usage: s/b gosub_return
10524 #ENDIF
10525 #ELSE // we are not within method. Normal gosub/return usage
10526 Gosub_Return !1 !2 !3 !4 !5 !6 !7 !8 !9 // we are doing an old style sub-routine return
10527 #ENDIF
10528#ENDCOMMAND
10529
10530#COMMAND Gosub_Return VFWNDE#G
10531
10532 #IF !0=0
10533 !A [] $043 |CL0
10534 #ELSE
10535 #IFSAME !1 RETURN GOSUB_RETURN
10536 #SET Q$ (!a+2)
10537 !A [] $043 |CL!q // RETURN RETURN
10538 GOSUB_RETURN !2 !3 !4 !5 !6 !7 !8 !9
10539 #ELSE
10540 #IFDEF !1
10541 #CHECK !1 _S
10542 #CHECK !2 .
10543 !A [] $043 !1
10544 #ELSE
10545 !A [] $043 |CL0
10546 #FREF !1 !a
10547 #ENDIF
10548 #ENDIF
10549 #ENDIF
10550#ENDCOMMAND
10551
10552
10553// if not defined as local make it local if needed
10554//
10555
10556#COMMAND INTEGER R
10557 DEFINE$VARIABLE$HELP Integer !1 !2 !3 !4 !5 !6 !7 !8 !9
10558#ENDCOMMAND
10559
10560#COMMAND STRING R E#L%
10561 DEFINE$VARIABLE$HELP String !1 !2 !3 !4 !5 !6 !7 !8 !9
10562#ENDCOMMAND
10563
10564#COMMAND DATE R
10565 DEFINE$VARIABLE$HELP Date !1 !2 !3 !4 !5 !6 !7 !8 !9
10566#ENDCOMMAND
10567
10568#COMMAND NUMBER R
10569 DEFINE$VARIABLE$HELP Number !1 !2 !3 !4 !5 !6 !7 !8 !9
10570#ENDCOMMAND
10571
10572#COMMAND REAL R
10573 DEFINE$VARIABLE$HELP Real !1 !2 !3 !4 !5 !6 !7 !8 !9
10574#ENDCOMMAND
10575
10576#COMMAND ADDRESS R
10577 DEFINE$VARIABLE$HELP Address !1 !2 !3 !4 !5 !6 !7 !8 !9
10578#ENDCOMMAND
10579
10580#COMMAND BIGINT R
10581 DEFINE$VARIABLE$HELP BIGINT !1 !2 !3 !4 !5 !6 !7 !8 !9
10582#ENDCOMMAND
10583
10584//#COMMAND LOGICAL R
10585// DEFINE$VARIABLE$HELP LOGICAL !1 !2 !3 !4 !5 !6 !7 !8 !9
10586//#ENDCOMMAND
10587
10588#COMMAND TIME R
10589 DEFINE$VARIABLE$HELP TIME !1 !2 !3 !4 !5 !6 !7 !8 !9
10590#ENDCOMMAND
10591
10592#COMMAND DATETIME R
10593 DEFINE$VARIABLE$HELP DATETIME !1 !2 !3 !4 !5 !6 !7 !8 !9
10594#ENDCOMMAND
10595
10596#COMMAND FLOAT R
10597 DEFINE$VARIABLE$HELP FLOAT !1 !2 !3 !4 !5 !6 !7 !8 !9
10598#ENDCOMMAND
10599
10600#COMMAND CHAR R
10601 DEFINE$VARIABLE$HELP CHAR !1 !2 !3 !4 !5 !6 !7 !8 !9
10602#ENDCOMMAND
10603
10604#COMMAND UCHAR R
10605 DEFINE$VARIABLE$HELP UCHAR !1 !2 !3 !4 !5 !6 !7 !8 !9
10606#ENDCOMMAND
10607
10608#COMMAND SHORT R
10609 DEFINE$VARIABLE$HELP SHORT !1 !2 !3 !4 !5 !6 !7 !8 !9
10610#ENDCOMMAND
10611
10612#COMMAND USHORT R
10613 DEFINE$VARIABLE$HELP USHORT !1 !2 !3 !4 !5 !6 !7 !8 !9
10614#ENDCOMMAND
10615
10616#COMMAND UINTEGER R
10617 DEFINE$VARIABLE$HELP UINTEGER !1 !2 !3 !4 !5 !6 !7 !8 !9
10618#ENDCOMMAND
10619
10620#COMMAND BOOLEAN R
10621 DEFINE$VARIABLE$HELP BOOLEAN !1 !2 !3 !4 !5 !6 !7 !8 !9
10622#ENDCOMMAND
10623
10624#COMMAND UBIGINT R
10625 DEFINE$VARIABLE$HELP UBIGINT !1 !2 !3 !4 !5 !6 !7 !8 !9
10626#ENDCOMMAND
10627
10628#COMMAND CURRENCY R
10629 DEFINE$VARIABLE$HELP CURRENCY !1 !2 !3 !4 !5 !6 !7 !8 !9
10630#ENDCOMMAND
10631
10632#COMMAND TIMESPAN R
10633 DEFINE$VARIABLE$HELP TIMESPAN !1 !2 !3 !4 !5 !6 !7 !8 !9
10634#ENDCOMMAND
10635
10636#COMMAND DECIMAL R
10637 DEFINE$VARIABLE$HELP DECIMAL !1 !2 !3 !4 !5 !6 !7 !8 !9
10638#ENDCOMMAND
10639
10640#COMMAND VARIANT R
10641 DEFINE$VARIABLE$HELP VARIANT !1 !2 !3 !4 !5 !6 !7 !8 !9
10642#ENDCOMMAND
10643
10644#COMMAND ROWID R
10645 DEFINE$VARIABLE$HELP RowID !1 !2 !3 !4 !5 !6 !7 !8 !9
10646#ENDCOMMAND
10647
10648
10649#COMMAND DEFINE$VARIABLE$HELP
10650 #IFDEF __@INSIDE_STRUCT@__
10651 #IFADIM !2
10652 STRUCT_ARRAY_MEMBER !1 !2 !3 !4 !5 !6 !7 !8 !9
10653 #ELSE
10654 STRUCT_SCALAR_MEMBER !1 !2 !3 !4 !5 !6 !7 !8 !9
10655 #ENDIF
10656 #ELSE
10657 #IFDEF __@INSIDE_FUNCTION@__
10658 //#IF (!Zl & 2) // warn if old style and odd
10659 // #REM #ERROR DFERR_COMP_OBSOLETE_UNSUPPORTED_FEATURE Old style usage: Possible global variable in method
10660 //#ENDIF
10661
10662 // jjt - used to be "& 1" which was wrong. 2 is old style flag, 1 is strict. changed in 9.1
10663 // I would hope that no-one is using this feature anymore.
10664 #IF (!Zl & 2) // old style - force to global
10665 Global_Variable !1 !2 !3 !4 !5 !6 !7 !8 !9
10666 #REM WARNING: Global Variable defined in method
10667 #ELSE
10668 Local !1 !2 !3 !4 !5 !6 !7 !8 !9
10669 #ENDIF
10670 #ELSE
10671 Global_Variable !1 !2 !3 !4 !5 !6 !7 !8 !9
10672 #ENDIF
10673 #ENDIF
10674#ENDCOMMAND
10675
10676// Change: Check that U_!1 is not yet defined
10677// Error if within class
10678// Error if within a method
10679#COMMAND CLASS _RCDNSO "IS" "A""AN" _RDNO //_UGBO#L _UGBO#L _GBO#L .
10680 #IF (!b & 6) // if within class or procedure...error
10681 #IF (!b & 2) // if within class
10682 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Classes cannot be nested within classes
10683 #ELSE // if within method
10684 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Classes cannot be nested within methods
10685 #ENDIF
10686 #ELSE
10687 #CHECK U_!1 _T // does new class exist? If yes error
10688 #CHECK U_!4 _U // does superclass exist? if no error
10689 #REPLACE !1$SC !4 //define superclass of new class
10690 #IFSAME !5 STARTMAC //if start macro specified,
10691 #REPLACE !1$SM !6 //remember its name
10692 #IFSAME !7 ENDMAC //if end macro specified,
10693 #REPLACE !1$EM !8 //remember it
10694 BASE_CREATE_CLASS !1 !2 !3 !4 !9
10695 #ELSE
10696 BASE_CREATE_CLASS !1 !2 !3 !4 !7 !8 !9
10697 #ENDIF
10698 #ELSE
10699 #IFSAME !5 ENDMAC //no STARTMAC - if ENDMAC specified,
10700 #REPLACE !1$EM !6 //remember it
10701 BASE_CREATE_CLASS !1 !2 !3 !4 !7 !8 !9
10702 #ELSE
10703 BASE_CREATE_CLASS !1 !2 !3 !4 !5 !6 !7 !8 !9
10704 #ENDIF
10705 #ENDIF
10706 #ENDIF
10707#ENDCOMMAND
10708
10709// Change: Clear In object Flag. If a class is created within an object
10710// it is not relevant.
10711
10712#COMMAND BASE_CREATE_CLASS _RCDNSO "IS" "A""AN" _RDNO _UGBO#L _UGBO#L _GBO#L .
10713 #PUSH !b // save obj_flag
10714 #PUSH !Zb // save current_dep
10715 #PUSH !Zf // save the super_class_count
10716 #SET B$ (!b | 2) // set flag to in_class
10717 // we want to strip in in-object flag. This will get restored when
10718 // the class is ended. When a class is defined it is not relevant if
10719 // it is in an object or not.
10720 #SET B$ (!b & 14) // set flag to not in_class (remove bit 0)
10721 #SET ZB$ 0 // based on atomic class object
10722 #IF ( (!b & 1) = 0 ) // are we NOT in a create_object?
10723 #IFDEF !4.AGG // bump dep number by already
10724 #SET ZB$ !4.AGG // defined sub objects
10725 #ENDIF
10726 #ENDIF
10727 #SET ZF$ !Zb // save the super_class_count
10728 #PUSH !Zi // save current sub object count
10729 #SET ZI$ 0 // and init for new class
10730
10731 #PUSH !x // save old property index
10732 #SET X$ 0 //init to first array index# (0)
10733
10734 #SPUSH // save the old class name
10735 #SET $$ !1 // retain the name of the class
10736 #IFDEF U_!1 // if the new class id has already
10737 #ELSE // been defined, dont bother
10738 Global_variable INTEGER U_!1 // else put it into a int of that name
10739 #ENDIF
10740 #DATA // wind up the stream
10741 #IFDEF !4
10742 #DPUSH !4
10743 #ELSE
10744 #DPUSH U_!4 // based upon
10745 #ENDIF
10746 #IF (!0<5)
10747 #DPUSH |CI0 // no colors defined, use default
10748 #ELSE
10749 #DPUSH !5 // else do what they say
10750 #ENDIF
10751 #IF (!0<6)
10752 #DPUSH |CI0 // no colors defined, use default
10753 #ELSE
10754 #DPUSH !6 // else do what they say
10755 #ENDIF
10756 #IF (!0=7) // if parameter used, this will be
10757 #DPUSH |CS"!7" // the name of a 'C' function.
10758 #ELSE
10759 #DPUSH |CS"" // else inherit one from the parent
10760 #ENDIF
10761 !A [] CREATE$CLASS U_!1 |VL // let 'er rip
10762#ENDCOMMAND
10763
10764
10765// changes: 1. Allow New syntax: Property type Name {dflt} public|private is optional
10766// 2. Check placement as follows:
10767// 2.1. Must be in class or object
10768// 2.2. Cannot be in a child object defined by a class
10769// 2.3. If in class, must be in procedure (constructor)
10770// 2.4. If in object, must not be in procedure.
10771// 3. Check for Property Name conflicts (Get_name conflict)
10772// 3.1. If defined as object access - error
10773// 3.2. If defined as global method - error
10774// 3.3. If defined with different param list - error (already does this)
10775
10776
10777// Changes: 1. No_image is optional if windows (always provided by compiler)
10778// 2. If within class, s/b within a class (in df$object)
10779#COMMAND OBJECT R "IS" "A""AN" RVD#I
10780 #IFDEF IS$WINDOWS
10781 // If windows we can check for no_image and if it is not presented then
10782 // we will provide a no_image argument. Therefore you should NEVER need to use
10783 // No_image with windows.
10784 #IF (!0<5) // if no image try to aquire one
10785 #IFDEF !1.N // if image exists with object name, use that
10786 OBJECT !1 !2 !3 !4 !1
10787 #ELSE
10788 OBJECT !1 !2 !3 !4 NO_IMAGE // else use no_image
10789 #ENDIF
10790 #ELSE
10791 #IFDEF !5.N // if passed a valid image or
10792 DF$OBJECT !1 !2 !3 !4 !5 !6 !7 !8 !9 // no_image use them. Else add
10793 #ELSE // the no_image parameter.
10794 #IFSAME !5 NO_IMAGE
10795 DF$OBJECT !1 !2 !3 !4 !5 !6 !7 !8 !9
10796 #ELSE
10797 DF$OBJECT !1 !2 !3 !4 NO_IMAGE !5 !6 !7 !8 !9
10798 #ENDIF
10799 #ENDIF
10800 #ENDIF
10801 #ELSE
10802 // If character mode no_image must be explicitly provided (as it has always been).
10803 // we cannot use the no_image replacement because it does not work with dynamic
10804 // visual objects (like edits).
10805 #IF (!0<5) // if no image try to aquire one
10806 DF$OBJECT !1 !2 !3 !4 !1
10807 #ELSE
10808 DF$OBJECT !1 !2 !3 !4 !5 !6 !7 !8 !9
10809 #ENDIF
10810 #ENDIF
10811#ENDCOMMAND
10812
10813#COMMAND DF$OBJECT R "IS" "A""AN" RVD#I
10814
10815 #IF (!b & 2) // if within a class
10816 #IF ( (!b & 4)=0 ) // should be within a method
10817 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Objects in classes should be within a method
10818 #ENDIF
10819 #ENDIF
10820
10821 // if we are within a method we will keep track of the number of
10822 // nested objects. When the method ends we will verify that this is 0.
10823 // This lets us warn about mismathed object/end-object commands
10824 #IF ( !b & 4) // if object within method
10825 #SET ZM$ !ZM // increment
10826 #ENDIF
10827
10828
10829 #DATA // start up the data stream
10830 #PUSH !Zj // save the unique object label
10831 #PUSH !b // save current definition state
10832
10833 #IF (!b > 0) // if not global..we make no guesses about
10834 // dependent numbers. Let the runtime assign
10835 // dependent order.
10836 //#IF (!b = 4) // if in procedure and not class
10837 #SET ZJ$ 0 // do not inc z
10838 #ELSE
10839 #SET ZJ$ !ZB // assign the next object id
10840 #ENDIF
10841 #PUSH !Zb // save this level on stack
10842 #IFDEF !4.AGG // was this a class with sub objects?
10843 #SET ZB$ !4.AGG // sub objects will begin at the
10844 #ELSE // next object after superclass
10845 #SET ZB$ 0 // base classes start at 0
10846 #ENDIF
10847 #SET ZI$ !ZI // count this object at the current level
10848 #PUSH !Zi // and push the level
10849 #IF (!b > 0) // if (in_object | in_class)
10850 #IF (!b & 2) // obj_flag == in_class?
10851 #IF (!b & 1) // obj_flag == in_Object?
10852 #ELSE // No Name for Subobject in constructor
10853 // don't define this anymore...
10854 //#REPLACE !$.!1.OBJ |CI-!Zj // object_name = -current_object
10855 #ENDIF
10856 #ENDIF
10857 // (LS) removed setting of ZJ; it is NOT being used.
10858 // (Removed when max lines increased > 32k)
10859 // #SET ZJ$ (32766-!a) // a very unique label for this object
10860 #DPUSH |CS".!1" // make name from parent and child
10861 #ELSE // global object name
10862 #DPUSH |CS"!1" // assign an absolute name to object
10863 #ENDIF
10864 #CHECK U_!4 _U // does class exist?
10865 #DPUSH U_!4 // define then class the class id
10866 GET$OBJ$IMAGE !5 // define the objects image
10867 #IF ((!b & 3) = 2) // if in_class & !in_object
10868 // don't assign dep nums anymore
10869 //#DPUSH !$.!1.OBJ // pick the assigned dependant number
10870 // New code just sets 0
10871 #DPUSH |CI0 // pick the next dependant number
10872 #ELSE //
10873 #IF (!b = 0) // A global object must assign #
10874 #IFDEF !1.OBJ // Is the symbol defined, name_object?
10875 #DPUSH |CI0 // pick the next dependant number
10876 #ELSE
10877 #DPUSH |CI!Zj // force the dependant number
10878// #SET ZJ$ ($1000+!Zj) // mark as global object
10879 #SET ZJ$ ($10000000+!Zj) // using 32-bit ids now
10880 // as of 8.3 we no longer use dependent lists so we cannot create the ObjName.obj symbol anymore. This method of ussage has
10881 // been deprecated since early framework days and it is now no longer suppoted. The only way you can use the .obj method is to
10882 // use name_object, which moves this into a global integer variable. Developers are advised to change the ObjName.obj to
10883 // (ObjName(desktop)).
10884 // Also I don't think the above Zj is even needed, but for now they remain.
10885 //#REPLACE !1.OBJ |CI!Zj // Assign an ID to this object
10886 #ENDIF
10887 #ELSE
10888 #DPUSH |CI0 // pick the next dependant number
10889 #ENDIF
10890 #ENDIF
10891 REGISTER_OBJECT !1
10892 #DPUSH GET_!1
10893 #SET B$ (!b | 1) // we are in a object definition
10894 !A [] OBJ$CREATE |VL // create the object now
10895
10896 #IFDEF !1.OBJ
10897 #IFCLASS !1.OBJ V$ // does this object have a global?
10898 MOVE CURRENT_OBJECT TO !1.OBJ // Move the object id to its global
10899 #ENDIF
10900 #ENDIF
10901
10902 #SPUSH //save the old class name
10903 #SET $$ !4
10904 #IFSUB '!$$SC' // if flex-defined class
10905 #IFSUB '!$$SM' // if begin-instance macro exists
10906 #IFDEF IS$WINDOWS
10907 // in windows we know that an image is always passed (object creates one if needed)
10908 // and that images are never used. Therefore replace image argument with 0.
10909 !$$SM !$ 0 !6 !7 !8 !9
10910 #ELSE
10911 // character might be passing an image and it might not. We must pass the value
10912 !$$SM !$ !5 !6 !7 !8 !9
10913 #ENDIF
10914 #ELSE
10915 FORWARD_BEGIN_CONSTRUCT !$ !5 !6 !7 !8 !9
10916 #ENDIF
10917 #ELSE
10918 ADD$IMAGE$ARGS MSG_CONSTRUCT_OBJECT !5 !6 !7 !8 !9 //else use default
10919 #ENDIF
10920#ENDCOMMAND
10921
10922// Changes: 1. Methods not allowed in class child-objects
10923// 2. If on desktop and not Global/for..is for cDesktop (changed in 8.3, was Desktop)
10924
10925
10926
10927#COMMAND GET$SET "GET""SET" RD#OBLG
10928
10929 #IFSAME !3 OF
10930// #IFSAME !5 FILE_FIELD // is the file_field keyword used?
10931// #IFCLASS !6 F // test for file element
10932// #PUSH !h
10933// #PUSH !g
10934// #SET H$ %!6 // get the fieldnumber of parameter
10935// #SET G$ !6 // get the filenumber of parameter
10936// GET$SET$HELP !1 !2 !3 !4 |CI!g |CI!h !7 !8 !9
10937// #POP G$
10938// #POP H$
10939// #ELSE
10940// #ERROR DFERR_COMP_UNDEFINED_SYMBOL_IN_ARGUMENT UNKNOWN FILE_FIELD: !6
10941// #ENDIF
10942// #ELSE
10943// #IFSAME !5 FIELD // is the field keyword used?
10944// #IFCLASS !6 F // test for file element
10945// #PUSH !h
10946// #SET H$ %!6 // get the fieldnumber of parameter
10947// GET$SET$HELP !1 !2 !3 !4 |CI!h !7 !8 !9
10948// #POP H$
10949// #ELSE
10950// #ERROR DFERR_COMP_UNDEFINED_SYMBOL_IN_ARGUMENT UNKNOWN FIELD: !6
10951// #ENDIF
10952// #ELSE
10953 GET$SET$HELP !1 !2 !3 !4 !5 !6 !7 !8 !9
10954// #ENDIF
10955// #ENDIF
10956 #ELSE // !3 not OF. Provide Object
10957 GET$SET !1 !2 OF CURRENT_OBJECT !3 !4 !5 !6 !7 !8 !9
10958 #ENDIF
10959#ENDCOMMAND
10960
10961#COMMAND GET$SET$HELP "GET""SET" RD#OBLG "OF" RSND#OBLG R
10962
10963 #IF ( (!Zl & 1)=0)
10964 #IFCLASS !2 "EFWV"
10965 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Unusual Usage: Variable or Expression used as message
10966 #ENDIF
10967
10968 #IF (!b = 2) // within class but not in object or method
10969 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Messages in class should be in method
10970 #ENDIF
10971 #ENDIF
10972
10973 #IFSAME DFLT$!2 __X__ __F__ // is this a item type message?
10974 #IFSAME !5 ITEM // is the item keyword used?
10975 OBJECT$PROPERTIES !1 !2 !4 !6 !7 !8 !9 // pass it on
10976 #ELSE
10977 #IFSAME !5 TO // if no param passed create a default
10978 #IFSAME DFLT$!2 __F__ // is this a form type message?
10979 #IF (!Zl & 2)
10980 // if a Form_ message, and no item was passed before the TO
10981 // and there are two params after the two this is an old syntax.
10982 #IF (!0>6)
10983 // this one must be fixed!
10984 #ERROR DFERR_COMP_OBSOLETE_UNSUPPORTED_FEATURE OBSOLETE SYNTAX: GET/SET FORM_XXX TO X Y
10985 #REM #ERROR DFERR_COMP_OBSOLETE_UNSUPPORTED_FEATURE OBSOLETE SYNTAX: GET/SET FORM_XXX TO X Y
10986 #ENDIF
10987 #ENDIF
10988 OBJECT$PROPERTIES !1 !2 !4 0 !5 !6 !7 !8 !9 // use 0 as dflt
10989 #ELSE
10990 #IF (!Zl & 2)
10991 // if a item_ message, and no item was passed before the TO
10992 // it used to replace with current which is now changed to
10993 // 0. Warn that this might cause a problem in old programs.
10994 #REM #ERROR DFERR_COMP_OBSOLETE_UNSUPPORTED_FEATURE Old Style Usage: No ITEM keyword. Is replacement for .current. or 0
10995 #ENDIF
10996 //OBJECT$PROPERTIES !1 !2 !4 0 !5 !6 !7 !8 !9 // use 0 as dflt
10997 OBJECT$PROPERTIES !1 !2 !4 -99 !5 !6 !7 !8 !9 // use CURRENT as dflt
10998 #ENDIF
10999 #ELSE // params are passed. Just Use them
11000 OBJECT$PROPERTIES !1 !2 !4 !5 !6 !7 !8 !9 // pass it on
11001 //#REM ITEM KEYWORD OMITTED. USE !5
11002 #ENDIF
11003 #ENDIF
11004 #ELSE // not Item or Form based
11005 OBJECT$PROPERTIES !1 !2 !4 !5 !6 !7 !8 !9 // just supply args
11006 #ENDIF
11007#ENDCOMMAND
11008
11009
11010#COMMAND OBJECT$PROPERTIES "GET""SET" RD#OBLG RSND#OBLG R
11011 #DATA
11012
11013 #IFDEF !2 // is message in a variable?
11014 #DPUSH !2 // yes, just push the value
11015 #ELSE
11016 #IFDEF !1_!2 // is this message defined?
11017 #DPUSH !1_!2 // yes, push the definition
11018 #ELSE
11019 // If there is no message defined, try matching with mangled symbol.
11020 #IFSAME !1 GET
11021 #MANG !1_!2 !4 !5 !6 !7 !8 !9
11022 #ELSE
11023 #MING !1_!2 !4 !5 !6 !7 !8 !9
11024 #ENDIF
11025 // Push it, if we can, or push a fref to the mangled name.
11026 // Fwd refs try to match without the syntactic sugar first.
11027 #IFDEF !?
11028
11029 // Overloading does not allow File_Field, Field or Item (get only)
11030 #IFSAME FILE_FIELD !2 !3 !4 !5 !6 !7 !8 !9
11031 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION "FILE_FIELD keyword not allowed in Overloaded messages"
11032 #ELSE
11033 #IFSAME FIELD !2 !3 !4 !5 !6 !7 !8 !9
11034 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION "FIELD keyword not allowed in Overloaded messages"
11035 #ELSE
11036 #IFSAME !1 GET // GET's #mang does not test for ITEM so we disallow it here.
11037 #IFSAME ITEM !2 !3 !4 !5 !6 !7 !8 !9
11038 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION "ITEM keyword not allowed or needed in GET Overloaded messages"
11039 #ENDIF
11040 #ENDIF
11041 #ENDIF
11042 #ENDIF
11043
11044 #DPUSH !?
11045 #ELSE
11046 #DPUSH |CI0 // forward reference the message
11047 #FREF !? !a,0 // add the reference to be defined
11048 #ENDIF
11049 #ENDIF
11050 #ENDIF
11051
11052 #PUSH !Zg
11053 #SET ZG$ 0
11054
11055 #PUSH !Zh
11056 #SET ZH$ 2 // 3 unrestricted params following TO and TO is optional
11057 #IF (!Zl & 1)
11058 #SET ZH$ 3 // Its ok...no fancy checking
11059 #ELSE
11060 #IFSAME !1 GET
11061 #SET ZH$ 1 // 1 means 1 param following TO
11062 #ELSE
11063 #IFSAME DFLT$2$!2 __2__ // is this a complex set message? (more than 1 param)
11064 #ELSE
11065 #IFSAME DFLT$!2 __X__ __F__ // is this a item or form type message?
11066 //#IFSAME DFLT$!2 __F__ // is this a item or form type message?
11067 #SET ZH$ 1 // 1 means 1 param following TO
11068 #ENDIF
11069 #ENDIF
11070 #ENDIF
11071 #ENDIF
11072
11073 PROPERTY$HELP !4 !5 !6 !7 !8 !9
11074
11075 #POP ZH$
11076 #POP ZG$
11077
11078 // Precedence of Object ID resolution
11079 // 1. If variable (hopefully local)
11080 // 2. if expression
11081 // 3. If .obj (old style, to be avoided)
11082 // 4. If object access id
11083
11084 #IFDEF !3 // if a variable, constant or expression...it's defined
11085 OBJECT$DEFINE !1 !3
11086 #ELSE
11087
11088 // remove object.OBJ check - must explicitly add .obj if you want it
11089 //#IFDEF !3.OBJ // old style: If global object or defined w/ .obj (ugh)
11090 // OBJECT$DEFINE !1 !3.OBJ
11091 //#ELSE
11092
11093 #IFDEF GET_!3 // if defined as a function
11094 #IF (GET_!3>$40000000) // and an object access method
11095 // replace simple name with expression syntax
11096 OBJECT$DEFINE !1 (!3(Current_object))
11097 #ELSE // if defined as a function but not an access method. This is an error
11098 #ERROR DFERR_COMP_INVALID_OBJECT_REFERENCE "Already defined as a function"
11099 #ENDIF
11100 #ELSE
11101 // 12.0 change:
11102 // !3 is not defined but we will pass this on and allow the compiler to attempt to resolve it
11103 OBJECT$DEFINE !1 (!3(Current_object))
11104
11105 //// not yet defined. We could either forward ref as object or
11106 //// declare an error. For now let's just do an error.
11107 //#ERROR DFERR_COMP_INVALID_OBJECT_REFERENCE Object .not. yet defined
11108 //// here is how we would forward ref as obj
11109 ////Register_object !3
11110 ////!A [] OBJ$!1 (!3(Current_object)) |VL
11111 #ENDIF
11112
11113 //#ENDIF
11114 #ENDIF
11115#ENDCOMMAND
11116
11117#COMMAND OBJECT$DEFINE R R
11118 !A [] OBJ$!1 !2 |VL
11119#ENDCOMMAND
11120
11121// this forces the param passed to be subsituted for an expression
11122// you can directly dpush an expression
11123#COMMAND DPUSH$EXP R .
11124 #DPUSH !1
11125#ENDCOMMAND
11126
11127
11128
11129
11130#COMMAND PROPERTY$HELP
11131 #IF (!0>0)
11132 // check that none of the params are indicators. We wrap this in an IFLOGICAL because the # test
11133 // also fires on other symbols like EQ
11134 #IFLOGICAL !1
11135 #CHECK !1 _#
11136 #ENDIF
11137 #IFSAME !1 FIELD
11138 #IFCLASS !2 F // test for file element
11139 #PUSH !h
11140 #SET H$ %!2 // get the fieldnumber of parameter
11141 PROPERTY$HELP |CI!h !3 !4 !5 !6 !7 !8 !9
11142 #POP H$
11143 #ELSE
11144 #ERROR DFERR_COMP_UNDEFINED_SYMBOL_IN_ARGUMENT UNKNOWN FIELD: !2
11145 #ENDIF
11146 #ELSE
11147 #IFSAME !1 FILE_FIELD
11148 #IFCLASS !2 F // test for file element
11149 #PUSH !h
11150 #PUSH !g
11151 #SET H$ %!2 // get the fieldnumber of parameter
11152 #SET G$ !2 // get the filenumber of parameter
11153 PROPERTY$HELP |CI!g |CI!h !3 !4 !5 !6 !7 !8 !9
11154 #POP G$
11155 #POP H$
11156 #ELSE
11157 #ERROR DFERR_COMP_UNDEFINED_SYMBOL_IN_ARGUMENT UNKNOWN FILE_FIELD: !2
11158 #ENDIF
11159 #ELSE
11160
11161 #IFSAME !1 OF // "of" should have already been processed. This is an error
11162 #ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX INVALID USE OF 'OF'
11163 #SET ZH$ 4 // 4 means error occurred
11164 #ELSE
11165
11166 // Check that TO is used properly.
11167 #IFSAME !1 TO
11168 #IF (!Zl & 1)
11169 #ELSE
11170 #IF (!Zh=3) // TO already encountered. TOO many Tos
11171 #ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX TOO MANY 'TO'
11172 #SET ZH$ 4 // 4 means error occurred
11173 #ELSE
11174 #IF (!0=1) // missing param after to
11175 #ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX NO VALUE FOLLOWING 'TO'
11176 #SET ZH$ 4 // 4 means error occurred
11177 #ELSE
11178 #SET ZH$ 3 // Mark as found a to. May get changed if an error
11179 #IF (!Zh=1) // A GET or ITEM SET without a TO yet
11180 #IF (!0>2) // too many params after the to
11181 #IFSAME !1 FIELD // if FIELD we expect another param
11182 #ELSE
11183 #IFSAME !1 FILE_FIELD // if FILE_FIELD we expect another param
11184 #ELSE
11185 #ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX TOO MANY PARAMS AFTER 'TO'
11186 #SET ZH$ 4 // 4 means error occurred
11187 #ENDIF
11188 #ENDIF
11189 #ENDIF
11190 #ENDIF
11191 #ENDIF
11192 #ENDIF
11193 #ENDIF
11194 #ELSE
11195 #IFSAME !1 ITEM
11196 #ELSE
11197 #SET ZG$ !ZG
11198 #IFDEF !1
11199 #DPUSH !1
11200 #ELSE
11201 #IFCLASS !1 0123456789ABCDEF
11202 #DPUSH !1
11203 #ELSE
11204 //#IFDEF MSG_!1
11205 // #DPUSH MSG_!1
11206 //#ELSE
11207 // #DPUSH |CI0
11208 // #FREF MSG_!1 !a,!Zg
11209 //#ENDIF
11210
11211 #IFDEF GET_!1 // if defined as a function
11212 // This would support passing of object names as parameters. Not supported
11213 // for now.
11214 #IF (GET_!1>$40000000) // and an object access method..we will help out
11215 // replace simple name with expression syntax
11216 DPUSH$EXP (!1(current_object))
11217 #ELSE // if defined as a function but not an access method. This is an error
11218 #DPUSH !1 // will generate an Error
11219 #ENDIF
11220 #ELSE // If undefined
11221 // this could be msg_!1 but we will call than an error
11222 //#DPUSH !1 // will generate an Error
11223 #IFDEF MSG_!1
11224 #DPUSH MSG_!1
11225 #ELSE
11226 #DPUSH |CI0
11227 #FREF MSG_!1 !a,!Zg
11228 #ENDIF
11229
11230 #ENDIF
11231 #ENDIF
11232 #ENDIF
11233 #ENDIF
11234 #ENDIF
11235
11236 #ENDIF
11237 #IF (!Zh<4) // 4 indicates an error occurred
11238 PROPERTY$HELP !2 !3 !4 !5 !6 !7 !8 !9 // as long as there is still no error
11239 #ENDIF
11240 #ENDIF
11241 #ENDIF
11242 #ELSE
11243 #IF (!Zh<3) // If 1 or 2, TO was never found
11244 #ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX MISSING 'TO' KEYWORD
11245 #ENDIF
11246 #ENDIF
11247#ENDCOMMAND
11248
11249//
11250////old
11251//#COMMAND PROPERTY$HELP
11252// #IF (!0>0)
11253// #IFSAME !1 OF // "of" should have already been processed. This is an error
11254// #ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX INVALID USE OF 'OF'
11255// #SET ZH$ 4 // 4 means error occurred
11256// #ELSE
11257// // Check that TO is used properly.
11258// #IFSAME !1 TO
11259// #IF (!Zl & 1)
11260// #ELSE
11261// #IF (!Zh=3) // TO already encountered. TOO many Tos
11262// #ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX TOO MANY 'TO'
11263// #SET ZH$ 4 // 4 means error occurred
11264// #ELSE
11265// #IF (!0=1) // missing param after to
11266// #ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX NO VALUE FOLLOWING 'TO'
11267// #SET ZH$ 4 // 4 means error occurred
11268// #ELSE
11269// #IF (!Zh=1) // A GET or ITEM SET without a TO yet
11270// #IF (!0>2) // too many params after the to
11271// #ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX TOO MANY PARAMS AFTER 'TO'
11272// #SET ZH$ 4 // 4 means error occurred
11273// #ELSE
11274// #SET ZH$ 3 // Mark as found a to
11275// #ENDIF
11276// #ELSE // If here a non-item SET
11277// #SET ZH$ 3 // Mark as found a to
11278// #ENDIF
11279// #ENDIF
11280// #ENDIF
11281// #ENDIF
11282// #ELSE
11283// #IFSAME !1 ITEM
11284// #ELSE
11285// #SET ZG$ !ZG
11286// #IFDEF !1
11287// #DPUSH !1
11288// #ELSE
11289// #IFCLASS !1 0123456789ABCDEF
11290// #DPUSH !1
11291// #ELSE
11292// //#IFDEF MSG_!1
11293// // #DPUSH MSG_!1
11294// //#ELSE
11295// // #DPUSH |CI0
11296// // #FREF MSG_!1 !a,!Zg
11297// //#ENDIF
11298//
11299// #IFDEF GET_!1 // if defined as a function
11300// // This would support passing of object names as parameters. Not supported
11301// // for now.
11302// #IF (GET_!1>$40000000) // and an object access method..we will help out
11303// // replace simple name with expression syntax
11304// DPUSH$EXP (!1(current_object))
11305// #ELSE // if defined as a function but not an access method. This is an error
11306// #DPUSH !1 // will generate an Error
11307// #ENDIF
11308// #ELSE // If undefined
11309// // this could be msg_!1 but we will call than an error
11310// //#DPUSH !1 // will generate an Error
11311// #IFDEF MSG_!1
11312// #DPUSH MSG_!1
11313// #ELSE
11314// #DPUSH |CI0
11315// #FREF MSG_!1 !a,!Zg
11316// #ENDIF
11317//
11318// #ENDIF
11319// #ENDIF
11320// #ENDIF
11321// #ENDIF
11322// #ENDIF
11323// #ENDIF
11324// #IF (!Zh<4) // 4 indicates an error occurred
11325// PROPERTY$HELP !2 !3 !4 !5 !6 !7 !8 !9 // as long as there is still no error
11326// #ENDIF
11327// #ELSE
11328// #IF (!Zh<3) // If 1 or 2, TO was never found
11329// #ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX MISSING 'TO' KEYWORD
11330// #ENDIF
11331// #ENDIF
11332//#ENDCOMMAND
11333
11334// Changes: 1. support "OF" as well as "TO". OF is preferred
11335// 2. Check location of "OF" keyword
11336// 3. Check for improper message type (expression)
11337// 4. If sent directly within class (not method)...error
11338#COMMAND SEND RSD#OBLG
11339
11340 #IF ( (!Zl & 1)=0)
11341 // we expect message to be msg_xxx, constant or local var.
11342 // Actually locals are weird, but much more acceptable
11343 #IFCLASS !1 "EFWV" // if exp, file, window or global...weird
11344 #ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX Unusual Usage: Variable or Expression used as message
11345 #ENDIF
11346
11347 #IF (!b = 2) // within class but not in object or method
11348 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Messages in class should be in method
11349 #ENDIF
11350 #ENDIF
11351
11352 #DATA
11353 #IFDEF !1
11354 #DPUSH !1
11355 #ELSE
11356
11357 #IFNDEF MANGLE_NAMES
11358
11359 #IFDEF MSG_!1
11360 #DPUSH MSG_!1
11361 #ELSE
11362 #DPUSH |CI0
11363 #FREF MSG_!1 !a,0
11364 #ENDIF
11365
11366 #ELSE
11367
11368 #IFSAME !2 TO OF
11369 #IFDEF MSG_!1
11370 #DPUSH MSG_!1
11371 #ELSE
11372 #MANG MSG_!1 !4 !5 !6 !7 !8 !9
11373 #IFDEF !?
11374 #IFSAME FILE_FIELD !2 !3 !4 !5 !6 !7 !8 !9
11375 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION "FILE_FIELD keyword not allowed in Overloaded messages"
11376 #ELSE
11377 #IFSAME FIELD !2 !3 !4 !5 !6 !7 !8 !9
11378 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION "FIELD keyword not allowed in Overloaded messages"
11379 #ENDIF
11380 #ENDIF
11381 #DPUSH !?
11382 #ELSE // message undefined. push obj function fixup.
11383 #DPUSH |CI0
11384 #FREF !? !a,0
11385 #ENDIF
11386 #ENDIF
11387 #ELSE
11388 #IFDEF MSG_!1
11389 #DPUSH MSG_!1
11390 #ELSE
11391 #MANG MSG_!1 !2 !3 !4 !5 !6 !7 !8 !9
11392 #IFDEF !?
11393 #IFSAME FILE_FIELD !2 !3 !4 !5 !6 !7 !8 !9
11394 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION "FILE_FIELD keyword not allowed in Overloaded messages"
11395 #ELSE
11396 #IFSAME FIELD !2 !3 !4 !5 !6 !7 !8 !9
11397 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION "FIELD keyword not allowed in Overloaded messages"
11398 #ENDIF
11399 #ENDIF
11400 #DPUSH !?
11401 #ELSE
11402 #DPUSH |CI0 // can't tell if it's object or global. push object.
11403 #FREF !? !a,0
11404 #ENDIF
11405 #ENDIF
11406 #ENDIF
11407
11408 #ENDIF // Name Mangling Case
11409
11410 #ENDIF
11411 #IFSAME !2 TO OF // support both OF (suggested) and TO (old)
11412 SEND$HELP !4 !5 !6 !7 !8 !9
11413 SEND$CMD TO TO !3
11414 #ELSE
11415 SEND$HELP !2 !3 !4 !5 !6 !7 !8 !9
11416 SEND$CMD TO TO CURRENT_OBJECT
11417 #ENDIF
11418#ENDCOMMAND
11419
11420#COMMAND SEND$CMD
11421 #IFSAME !1 !2
11422 #IFDEF !3 // if a variable, constant or expression...it's defined
11423 OBJECT$SEND$DEFINE !3
11424 #ELSE
11425 // remove .obj resolution. must manually add this
11426 //#IFDEF !3.OBJ // old style: If global object or defined w/ .obj (ugh)
11427 // OBJECT$SEND$DEFINE !3.OBJ
11428 //#ELSE
11429 #IFDEF GET_!3 // if defined as a function
11430 #IF (GET_!3>$40000000) // and an object access method
11431 // replace simple name with expression syntax
11432 OBJECT$SEND$DEFINE (!3(Current_object))
11433 #ELSE // if defined as a function but not an access method. This is an error
11434 #ERROR DFERR_COMP_INVALID_OBJECT_REFERENCE "Already defined as a function"
11435 #ENDIF
11436 #ELSE
11437 // 12.0 change:
11438 // !3 is not defined but we will pass this on and allow the compiler to attempt to resolve it
11439 OBJECT$SEND$DEFINE (!3(Current_object))
11440
11441 //// not yet defined. We could either forward ref as object or
11442 //// declare an error. For now let's just do an error.
11443 //#ERROR DFERR_COMP_INVALID_OBJECT_REFERENCE Object .Not. yet defined
11444 //// here is how we would forward ref as obj
11445 ////!A [] OBJ$SEND |CI0 |VL
11446 ////#FREF (!3(Current_object)) !a
11447 #ENDIF
11448 //#ENDIF
11449 #ENDIF
11450 #ELSE
11451 !A [] OBJ$SEND CURRENT_OBJECT |VL
11452 #ENDIF
11453#ENDCOMMAND
11454
11455#COMMAND OBJECT$SEND$DEFINE R
11456 !A [] OBJ$SEND !1 |VL
11457#ENDCOMMAND
11458
11459
11460#COMMAND SEND$HELP
11461 #IF (!0>0)
11462 // check that none of the params are indicators. We wrap this in an IFLOGICAL because the # test
11463 // also fires on other symbols like EQ
11464 #IFLOGICAL !1
11465 #CHECK !1 _#
11466 #ENDIF
11467 #IFSAME !1 OF TO
11468 #ERROR DFERR_COMP_INVALID_MESSAGE_SYNTAX INVALID POSITION FOR '!1'
11469 #ELSE
11470 #IFSAME !1 FIELD
11471 #IFCLASS !2 F // test for file element
11472 #PUSH !h
11473 #SET H$ %!2 // get the fieldnumber of parameter
11474 SEND$HELP |CI!h !3 !4 !5 !6 !7 !8 !9
11475 #POP H$
11476 #ELSE
11477 #ERROR DFERR_COMP_UNDEFINED_SYMBOL_IN_ARGUMENT UNKNOWN FIELD: !2
11478 #ENDIF
11479 #ELSE
11480 #IFSAME !1 FILE_FIELD
11481 #IFCLASS !2 F // test for file element
11482 #PUSH !h
11483 #PUSH !g
11484 #SET H$ %!2 // get the fieldnumber of parameter
11485 #SET G$ !2 // get the filenumber of parameter
11486 SEND$HELP |CI!g |CI!h !3 !4 !5 !6 !7 !8 !9
11487 #POP G$
11488 #POP H$
11489 #ELSE
11490 #ERROR DFERR_COMP_UNDEFINED_SYMBOL_IN_ARGUMENT UNKNOWN FILE_FIELD: !2
11491 #ENDIF
11492 #ELSE
11493 // As of 10.1 we will support passing of object names as parameters.
11494 #IFDEF !1 // if value is defined, just use it
11495 #DPUSH !1
11496 #ELSE
11497 #IFCLASS !1 0123456789ABCDEF // this allows one to pass hex constants (e.g. $C003, NOENTER)
11498 #DPUSH !1
11499 #ELSE // not defined, see if this is an object, referecne
11500 #IFDEF GET_!1 // if defined as a function and is an object access, use it
11501 #IF (GET_!1>$40000000)
11502 DPUSH$EXP (!1(current_object))
11503 #ELSE
11504 #DPUSH !1 // will generate a symbol not defined error
11505 #ENDIF
11506 #ELSE
11507 #DPUSH !1 // will generate a symbol not defined error
11508 #ENDIF
11509 #ENDIF
11510 #ENDIF
11511 SEND$HELP !2 !3 !4 !5 !6 !7 !8 !9
11512 #ENDIF
11513 #ENDIF
11514 #ENDIF
11515 #ENDIF
11516#ENDCOMMAND
11517
11518// Create Move command that will move object access methods
11519// to a var with simple name
11520#COMMAND MOVE R "TO" R .
11521 #IFDEF !1 // if Move Var to Var...normal move.
11522 MoveVar !1 !2 !3
11523 #ELSE
11524 #IFDEF GET_!1 // if defined as a function
11525 #IF (GET_!1>$40000000) // If move Object-access to (var|property)
11526 MoveObj !1 !2 !3
11527 #ELSE
11528 MoveVar !1 !2 !3 // this will generate an error
11529 #ENDIF
11530 #ELSE
11531 MoveVar !1 !2 !3 // will gen an error
11532 #ENDIF
11533 #ENDIF
11534#ENDCOMMAND
11535
11536//#COMMAND MOVEVAR #L "TO" #GLEURC .
11537// #IFCLASS !1 "G" // MOVE INDICATOR // 12.0 note: this logic, which has been in fmac forever
11538// #CHECK !1 _VWFC // would never work.
11539// !A [] $4020 !1 |GB[0] !3 IN$GLALL |3
11540// #ELSE
11541// // Type independent move as of 2.3
11542// !A [] $086 !1 !3
11543// #ENDIF
11544//#ENDCOMMAND
11545
11546// changed for 12.0 to support moving indicators
11547
11548#COMMAND MOVEVAR GL "TO" GLEURC .
11549 // The ability to move to and from indicators was added to 12.0 along with the #IFLOGICAL compiler command.
11550 // This allows developers to treat indicators just like booleans removing the need to create
11551 // indicate and indicator commands. The Move command can now and should be used for all assignments.
11552 #IFCLASS !1 "G" // allowing this case through hangs the compiler .. error is reported already above in argument check
11553 #ELSE
11554 #IFLOGICAL !1
11555 #IFLOGICAL !3
11556 Indicate !3 as [!1] // Move Indicator to Indicator becomes: Indicate Indicator as [Indicator]
11557 #ELSE
11558 Movevar (!1) to !3 // Move Indicator to Var
11559 #ENDIF
11560 #ELSE
11561 #IFLOGICAL !3
11562 // if dest is indicator, check source to decide what kind of statement to build
11563 #IFSAME !1 true false dftrue dffalse
11564 Indicate !3 !1 // Move true|false to Indicator becomes: Indicate Indicator true|false
11565 #ELSE
11566 #IFCLASS !1 _E
11567 Indicate !3 as !1 // Move (exp) to Indicator becomes: Indicate Indicator as (exp)
11568 #ELSE
11569 Indicate !3 as (!1) // Move var to Indicator becomes: Indicate Indicator as (var)
11570 #ENDIF
11571 #ENDIF
11572 #ELSE
11573 // if source and dest are both not indicators use the standard Move logic
11574 //Type independent move as of 2.3
11575 !A [] $086 !1 !3
11576 #ENDIF
11577 #ENDIF
11578 #ENDIF
11579#ENDCOMMAND
11580
11581
11582#COMMAND MOVEOBJ #L "TO" #GLEURC .
11583
11584 #IFDEF GET_!1 // if defined as a function
11585 #IF (GET_!1>$40000000) // If move Object-access to (var|property)
11586 MoveVar (!1(Current_object)) to !3
11587 #ELSE
11588 #ERROR DFERR_COMP_INVALID_OBJECT_REFERENCE "Already defined as a function"
11589 #ENDIF
11590 #ELSE
11591 #ERROR DFERR_COMP_INVALID_OBJECT_REFERENCE "Object not yet defined"
11592 #ENDIF
11593
11594#ENDCOMMAND
11595
11596
11597// changes: Check that object name is not already a global/class function
11598// Add alternate access syntax @Name
11599// check that the name is not an internal function
11600// MG: 7/2/99 No mangling here for object access method, because no parameters.
11601// If we decide to mangle on return type (not likely) we can change this and
11602// use MARG.
11603
11604#COMMAND REGISTER_OBJECT R .
11605 #IFDEF UI.EXISTS
11606 #ELSE
11607 USE UI
11608 #ENDIF
11609
11610 // check for following errors
11611 // 1. name defined as internal function
11612 // 2. name defined as overloaded function
11613 // 3. name defined as global function
11614 // 4. name defined as non-overloaded class function
11615
11616 #IF ( (!Zl & 1)=0)
11617 #IFSAME FN$!1 __F__
11618 #ERROR DFERR_COMP_ILLEGAL_OBJECT_DEFINTION !1 is an internal function name
11619 #ENDIF
11620 #ENDIF
11621
11622 // check if name is already used for overloaded function, if so, error
11623 #IFDEF GET_!1_OVERLOADED
11624 #ERROR DFERR_COMP_ILLEGAL_OBJECT_DEFINTION !1 Already defined as a overloaded function
11625 #ELSE
11626 // Check that object name is not already a global or class function.
11627 #IFDEF GET_!1
11628 #IF (GET_!1<$40000001)
11629 #IF (GET_!1<0)
11630 #ERROR DFERR_COMP_ILLEGAL_OBJECT_DEFINTION !1 Already defined as a global function
11631 #ELSE
11632 #ERROR DFERR_COMP_ILLEGAL_OBJECT_DEFINTION !1 Already defined as a function/Property
11633 #ENDIF
11634 #ENDIF
11635 #ELSE
11636 #REPLACE GET_!1 |CI!ZH
11637 #FREG GET_!1 RETURNS INTEGER
11638 // register additional object access methods
11639 // #REPLACE @!1 (!1(current_object))
11640 #ENDIF // if Get_ defined
11641 #ENDIF // if Get_ overloaded
11642
11643#ENDCOMMAND
11644
11645// Changes: Check for Global error (used to check !1)
11646// Check for Object access name error
11647// Check that the name is not a global name
11648
11649#COMMAND REGISTER_FUNCTION R
11650 #IFDEF UI.EXISTS
11651 #ELSE
11652 USE UI
11653 #ENDIF
11654
11655 #IF ( (!Zl & 1)=0)
11656 #IFSAME FN$!1 __F__
11657 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION !1 is an internal function name
11658 #ENDIF
11659 #ENDIF
11660
11661 #IFSAME RETURNS !2 !3 !4 !5 !6 !7 !8 !9
11662 #ELSE
11663 #ERROR DFERR_COMP_INVALID_METHOD_SYNTAX MISSING KEYWORD RETURNS ON FUNCTION DECLARATION
11664 #ENDIF
11665
11666 #IFSAME !2 GLOBAL
11667 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION GLOBAL FUNCTIONS CANNOT BE REGISTERED
11668 #ELSE
11669 // Check if non-mangled symbol is already defined.
11670 // If it is, it might be an object name...error
11671 // also make sure new function is not an overload..error
11672 #IFDEF GET_!1
11673
11674 #IF (GET_!1<0)
11675 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION !1 is already defined as a global function
11676 #ENDIF
11677
11678 #IF (GET_!1>$40000000)
11679 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION !1 is already defined as an object
11680 #ENDIF
11681
11682 #IFDEF MANGLE_NAMES
11683 #IFSAME OVERLOADED !2 !3 !4 !5 !6 !7 !8 !9
11684 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION This Method Was Previously Defined As Non-Overloaded
11685 #ENDIF
11686 #ENDIF
11687 // Validate the argument list.
11688 CHECK$METHOD$ARGUMENT$LIST !2 !3 !4 !5 !6 !7 !8 !9
11689 // We will get more chance of matching fixups (and creating fewer errors) if we just register the function anyway.
11690 // The parameter list could generate the right name and if it does later fixups will resolve correctly without error.
11691 // It's possible that the list changes the mangled name. If it does, when the function is fixed, fixup errors may
11692 // appear. They can be fixed then.
11693 MESSAGE$ADDRESS GET_!1 // Generate the constant for message identifier. Message$Address checks if it already exists.
11694 #ELSE
11695 // Verify that the argument list is syntactically correct.
11696 CHECK$METHOD$ARGUMENT$LIST !2 !3 !4 !5 !6 !7 !8 !9
11697
11698 // Create the constant identifier for the message if it's not already defined.
11699 #IFNDEF MANGLE_NAMES
11700 MESSAGE$ADDRESS GET_!1
11701 #ELSE
11702 #IFSAME OVERLOADED !2 !3 !4 !5 !6 !7 !8 !9
11703 // we don't support Byref with overloading
11704 #IFSAME BYREF !2 !3 !4 !5 !6 !7 !8 !9
11705 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION "BYREF not allowed in overloaded methods"
11706 #ENDIF
11707 #MARG GET_!1 !2 !3 !4 !5 !6 !7 !8 !9 // Genearte the mangled symbol.
11708 MESSAGE$ADDRESS !? // Generate the message identifer.
11709 // if this is the first time we've defined this, create overloaded symbol
11710 #IFNDEF GET_!1_OVERLOADED
11711 #REPLACE GET_!1_OVERLOADED |CI1
11712 #ENDIF
11713 #ELSE
11714 // We are defining a non-overload function. Make sure we have not already
11715 // defined it as overloaded
11716 #IFDEF GET_!1_OVERLOADED
11717 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION !1 is already defined as an overloaded function
11718 #ELSE
11719 MESSAGE$ADDRESS GET_!1
11720 #ENDIF
11721 #ENDIF
11722 #ENDIF
11723 #ENDIF
11724
11725 // Register the function here.
11726 #IFNDEF MANGLE_NAMES
11727 #IFSAME !2 FOR
11728 #FREG GET_!1 !4 !5 !6 !7 !8 !9
11729 #ELSE
11730 #FREG GET_!1 !2 !3 !4 !5 !6 !7 !8 !9
11731 #ENDIF
11732 #ELSE
11733 #IFSAME OVERLOADED !2 !3 !4 !5 !6 !7 !8 !9
11734 #IFSAME !2 FOR
11735 #FREG !? !4 !5 !6 !7 !8 !9
11736 #ELSE
11737 #FREG !? !2 !3 !4 !5 !6 !7 !8 !9
11738 #ENDIF
11739 #ELSE
11740 #IFSAME !2 FOR
11741 #FREG GET_!1 !4 !5 !6 !7 !8 !9
11742 #ELSE
11743 #FREG GET_!1 !2 !3 !4 !5 !6 !7 !8 !9
11744 #ENDIF
11745 #ENDIF
11746 #ENDIF
11747
11748 #ENDIF // Not a global
11749
11750#ENDCOMMAND
11751
11752// Changes: Check for Object access name error
11753#COMMAND FUNCTION R
11754
11755 #IF ( (!Zl & 1)=0)
11756 #IFSAME FN$!1 __F__
11757 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION !1 is an internal function name
11758 #ENDIF
11759 #ENDIF
11760
11761
11762 #IFDEF MANGLE_NAMES
11763 #IFDEF GET_!1
11764 #IF (GET_!1>$40000000)
11765 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION !1 is already defined as an object
11766 #ENDIF
11767 #ENDIF
11768 #IFSAME RETURNS !2 !3 !4 !5 !6 !7 !8 !9
11769 #ELSE
11770 #ERROR DFERR_COMP_INVALID_METHOD_SYNTAX MISSING KEYWORD RETURNS ON FUNCTION DECLARATION
11771 #ENDIF
11772 HANDLE$MESSAGE GET !1 !2 !3 !4 !5 !6 !7 !8 !9
11773 #ELSE
11774 #IFDEF GET_!1
11775 #IF (GET_!1>$40000000)
11776 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION !1 is already defined as an object
11777 #ENDIF
11778 #ENDIF
11779 HANDLE$MESSAGE GET_!1 !2 !3 !4 !5 !6 !7 !8 !9
11780 #ENDIF
11781
11782#ENDCOMMAND
11783
11784// called by Set/Get
11785// Changes: 1. If in object and msg_consruct_object..error
11786// 2. Cannot nest methods (already was there)
11787// 3. Methods not allowed in class child-objects
11788// 4. If on desktop and not Global/for..is for cDesktop
11789//
11790
11791//#IFDEF MANGLE_NAMES
11792 #COMMAND HANDLE$MESSAGE$HELP RGOBL#
11793 #IFSAME !1 MSG
11794 #PREG !2 !3 !4 !5 !6 !7 !8 !9
11795 #ELSE
11796 #FREG !2 !3 !4 !5 !6 !7 !8 !9
11797 #ENDIF
11798 #ENDCOMMAND
11799//#ENDIF
11800
11801#COMMAND HANDLE$MESSAGE RGOBL#
11802
11803 // support new 8.3 syntax for desktop methods (e.g. procedure Foo DESKTOP .....)
11804 #IFNDEF MANGLE_NAMES
11805 #IFSAME !2 DESKTOP
11806 #IFDEF IS$WINDOWS
11807 Handle$message$2 !1 For cDesktop !3 !4 !5 !6 !7 !8 !9
11808 #ELSE
11809 Handle$message$2 !1 For Desktop !3 !4 !5 !6 !7 !8 !9
11810 #ENDIF
11811 #ELSE
11812 Handle$message$2 !1 !2 !3 !4 !5 !6 !7 !8 !9
11813 #ENDIF
11814 #ELSE
11815 #IFSAME !3 DESKTOP
11816 #IFDEF IS$WINDOWS
11817 Handle$message$2 !1 !2 For cDesktop !4 !5 !6 !7 !8 !9
11818 #ELSE
11819 Handle$message$2 !1 !2 For Desktop !4 !5 !6 !7 !8 !9
11820 #ENDIF
11821 #ELSE
11822 Handle$message$2 !1 !2 !3 !4 !5 !6 !7 !8 !9
11823 #ENDIF
11824 #ENDIF
11825#ENDCOMMAND
11826
11827#COMMAND HANDLE$MESSAGE$2 RGOBL#
11828
11829 #IFDEF UI.EXISTS
11830 #ELSE
11831 USE UI
11832 #ENDIF
11833
11834 // if the publish meta-attribute is set, we want to generate the RegisterInterface command before we do anything in this new method.
11835 // we will also check as many things as possible to make sure this is a valid place for this. We expect this:
11836 // 1. to appear in classes and not objects
11837 // 2. cannot be global, FOR, or desktop
11838 // 3. cannnot be override
11839
11840 // If the meta attribute Published is true, we handle special case for webapps.
11841 // note I am not checking for the Mangle_names ifdef - I just assume it's true (hasn't been unset for many versions).
11842 #IFMATTR Published true // This is true if the Published attribute is active and its value is true
11843 // method must be an object method and not For, global or overloaded
11844 #IFSAME !3 GLOBAL FOR OVERLOADED // any of these are not allowed. Note that DESKTOP is already converted to For cDesktop at this point
11845 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT "The Publish meta tag cannot be used with GLOBAL, DESKTOP, FOR, or OVERLOADED methods."
11846 #ELSE
11847 #IF (!b = 1) // the only valid place for this is within a method within an object.
11848 MESSAGE$ADDRESS !1_!2 // create id symbol for this message. We do this to avoid fowward reference error in registerInterface
11849 #SPUSH
11850 #PUBLISH // This creates the Send RegisterInterface line and puts the result in !$, based on the original source line which is expected to be something like Function Foo Integer iArg...
11851 !$ // This would then actually call Send RegisterInterface
11852 #REM !$
11853 #SPOP
11854 #ELSE
11855 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT "The Publish meta tag can only be used within methods defined directly inside of objects."
11856 #ENDIF
11857 #ENDIF
11858 #ENDIF
11859
11860
11861
11862 // procedure construct_object only allowed in class
11863 #IF (!b & 1) // if in object
11864 #IFDEF MANGLE_NAMES
11865 #IFSAME !1 MSG
11866 #IFSAME !2 CONSTRUCT_OBJECT
11867 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Construct_object .not. allowed in objects
11868 #ENDIF
11869 #ENDIF
11870 #ELSE
11871 #IFSAME !1 MSG_CONSTRUCT_OBJECT
11872 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Construct_object .not. allowed in objects
11873 #ENDIF
11874 #ENDIF
11875 #ENDIF
11876
11877 // not allowed to nest methods
11878 // Check flag to determine whether we are already in a method.
11879 #IF (!b & 4)
11880 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Procedures and Functions may .not. be nested.
11881 #ELSE
11882 // non global methods are not allowed class child-objects
11883
11884 #IFNDEF MANGLE_NAMES
11885
11886 #IFSAME !2 GLOBAL
11887 #ELSE
11888 #IF ((!b & 3)=3) // if in class object
11889 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Methods .not. allowed in class child-objects
11890 #ENDIF
11891 #ENDIF
11892
11893 #ELSE
11894
11895 #IFSAME !3 GLOBAL
11896 #ELSE
11897 #IF ((!b & 3)=3) // if in class object
11898 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Methods .not. allowed in class child-objects
11899 #ENDIF
11900 #ENDIF
11901
11902 #ENDIF
11903 #ENDIF
11904
11905 // Give error if the stack symbol NUM_ARGUMENTS is defined.
11906 #CHECK NUM_ARGUMENTS _T
11907
11908 //
11909 #SET ZN$ !n // static nesting level
11910 #SET ZM$ 0 // # objects in method
11911 #PUSH !Zg
11912 #PUSH !Za
11913 #SET ZA$ !a
11914 #PUSH !Zu
11915 #DATA
11916 #STKSYM // forget all old stack symbols
11917 #SET B$ (!b | 4) // set flag to in_procedure
11918
11919 // This was changed to allow us to prohibit arguments with num_arguments inside the scope of a function.
11920 #REPLACE NUM_ARGUMENTS |SI0 // define the arg count
11921
11922 #IFDEF MANGLE_NAMES
11923 #SREP __@INSIDE_FUNCTION@__ |CI1 // lets other commands check that they are inside a function scope.
11924 #ENDIF
11925
11926 #IFNDEF MANGLE_NAMES
11927
11928
11929 #ELSE
11930
11931 // This is the mangling code.
11932
11933 #IFSAME !3 GLOBAL
11934 #DPUSH |CI0 // No message
11935 #DPUSH |CI0 // for no class
11936 // Check if overloaded symbol is already defined.
11937 #IFSAME OVERLOADED !4 !5 !6 !7 !8 !9
11938 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION Global functions/procedures cannot be overloaded
11939 #ELSE
11940 #IFDEF !1_!2_OVERLOADED
11941 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION This Method Was Previously Defined As Overloaded
11942 #ELSE
11943 #IFDEF !1_!2
11944 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION Global method !1 !2 Already Defined
11945 #ELSE
11946 #SET ZG$ (0-!a-2) // make it negative to distuinguish it
11947 #REPLACE !1_!2 |CI!Zg
11948 #ENDIF
11949 #ENDIF
11950 #ENDIF
11951 CHECK$METHOD$ARGUMENT$LIST !4 !5 !6 !7 !8 !9
11952 #IF (!0>1) // do we have arguments?
11953 #SET ZG$ 1 // starting argument number
11954 DEFINE_ARGUMENTS !4 !5 !6 !7 !8 !9
11955 #ENDIF
11956
11957 HANDLE$MESSAGE$HELP !1 !1_!2 !3 !4 !5 !6 !7 !8 !9
11958
11959 #ELSE // not global functions
11960
11961 // make sure message is not already defined as a global
11962 #IFDEF !1_!2
11963 #IF (!1_!2<0) // if defined as a global already, we have an error
11964 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION !1 !2 already defined as a Global method
11965 #ENDIF
11966 #ENDIF
11967
11968 // Mangling case & Using FOR
11969 #IFSAME !3 FOR // are we explicit about the class?
11970
11971 #IFSAME OVERLOADED !5 !6 !7 !8 !9
11972 #IFDEF !1_!2
11973 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION This Method Was Previously Defined As non-overloaded
11974 #ELSE
11975 // we don't support Byref with overloading
11976 #IFSAME BYREF !5 !6 !7 !8 !9
11977 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION "BYREF not allowed in overloaded methods"
11978 #ENDIF
11979 // Mangle name of method.
11980 #MARG !1_!2 !5 !6 !7 !8 !9
11981 // Also lock name without parameters and sugar.
11982 #IFNDEF !1_!2_OVERLOADED
11983 #REPLACE !1_!2_OVERLOADED |CI1
11984 #ENDIF
11985 MESSAGE$ADDRESS !? // create id symbol for this message
11986 #DPUSH !?
11987 #ENDIF
11988 #ELSE // FOR class, but not an overloaded function.
11989
11990 #IFDEF !1_!2_OVERLOADED
11991 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION This Method Was Previously Defined As Overloaded
11992 #ELSE
11993 MESSAGE$ADDRESS !1_!2 // create id symbol for this message
11994 #DPUSH !1_!2
11995 #ENDIF
11996
11997 #ENDIF
11998
11999 #IFDEF !4
12000 #IFSAME !4 DESKTOP
12001 #IFDEF IS$WINDOWS
12002 #DPUSH U_cObject // Message for the desktop class
12003 #ELSE
12004 #DPUSH U_DESKTOP // Message for the desktop class
12005 #ENDIF
12006 #ELSE
12007 #DPUSH !4 // Message for the named class
12008 #ENDIF
12009 #ELSE
12010 #CHECK U_!4 _RSDNU // Check the class to see if it exists.
12011 #DPUSH U_!4 // Message for the named class
12012 #ENDIF
12013
12014 CHECK$METHOD$ARGUMENT$LIST !5 !6 !7 !8 !9
12015
12016 #IF (!0>3)
12017 #SET ZG$ 1 // starting argument number
12018 DEFINE_ARGUMENTS !5 !6 !7 !8 !9
12019 #ENDIF
12020
12021 #IFSAME OVERLOADED !4 !5 !6 !7 !8 !9 // Non global
12022 HANDLE$MESSAGE$HELP !1 !? !5 !6 !7 !8 !9
12023 #ELSE
12024 HANDLE$MESSAGE$HELP !1 !1_!2 !5 !6 !7 !8 !9
12025 #ENDIF
12026
12027 #ELSE // Method is declared in a class or in an object
12028 #IF (!b & 2) // obj_flag == in_class?
12029 #ELSE
12030 #IF (!b & 1) // in_object, instance method
12031 !A [] CLONE$CLASS // if in object, clone the class
12032 #ENDIF
12033 #ENDIF
12034
12035 #IFSAME OVERLOADED !3 !4 !5 !6 !7 !8 !9
12036 #IFDEF !1_!2
12037 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION This Method Was Previously Defined As non-overloaded
12038 #ELSE
12039 // we don't support Byref with overloading
12040 #IFSAME BYREF !3 !4 !5 !6 !7 !8 !9
12041 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION "BYREF not allowed in overloaded methods"
12042 #ENDIF
12043 #MARG !1_!2 !3 !4 !5 !6 !7 !8 !9
12044 MESSAGE$ADDRESS !?
12045 #IFNDEF !1_!2_OVERLOADED
12046 #REPLACE !1_!2_OVERLOADED |CI1
12047 #ENDIF
12048 #DPUSH !? // the message
12049 #ENDIF
12050 #ELSE
12051 // a non-overlaoded message
12052 #IFDEF !1_!2_OVERLOADED
12053 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION This Method Was Previously Defined As Overloaded
12054 #ELSE
12055 MESSAGE$ADDRESS !1_!2 // create id symbol for this message
12056 #DPUSH !1_!2
12057 #ENDIF
12058 #ENDIF
12059
12060 // push the proper destination for the message
12061 #IF (!b & 2) // obj_flag == in_class?
12062 #DPUSH U_!$ // handle msg for "current class"
12063 #ELSE
12064 #IF (!b & 1) // in_object, instance method
12065 #DPUSH |CI0 // handle for objects class
12066 #ELSE // Message is out on desktop and not identfied w/ FOR Xxxxx
12067 #IFDEF IS$WINDOWS // 8.3: if windows we are going to place this on the cDesktop object
12068 // which will allow all objects to delegate to it, which is probably
12069 // what people expect. Prior to 8.3, it create a "for desktop" so all classes/objects
12070 // immediately understood this. This represents a change in behavior.
12071 #REM Ambiguous methods on .DESKTOP. are .not. recommended (Obsolete technique)
12072 // this is not a real error but we can use this to look at ambiguous desktop methods to make make sure
12073 // that they are being used in the proper 8.3 style. This warning is controlled by the method
12074 // Compiler_desktop_method_warnings ON|OFF (OFF is default)
12075 #IF (!Zl & 4)
12076 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION Ambiguous method on .Desktop. Should be "Desktop" or "Global" or moved.
12077 #ENDIF
12078 #DPUSH U_cObject // Message for the desktop (UI_OBJECT) class. Not advised for VDF after 8.2
12079 #ELSE
12080 #DPUSH U_DESKTOP // Message for the desktop (UI_OBJECT) class. Not advised for VDF after 8.2
12081 #ENDIF
12082 #ENDIF // stand alone message that gets defined as U_DESKTOP
12083 #ENDIF // end of else of object method
12084 CHECK$METHOD$ARGUMENT$LIST !3 !4 !5 !6 !7 !8 !9
12085 #IF (!0>1) // do we have arguments?
12086 #SET ZG$ 1 // starting argument number
12087 DEFINE_ARGUMENTS !3 !4 !5 !6 !7 !8 !9
12088 #ENDIF
12089
12090 #IFSAME OVERLOADED !3 !4 !5 !6 !7 !8 !9
12091 HANDLE$MESSAGE$HELP !1 !? !3 !4 !5 !6 !7 !8 !9
12092 #ELSE
12093 HANDLE$MESSAGE$HELP !1 !1_!2 !3 !4 !5 !6 !7 !8 !9
12094 #ENDIF
12095
12096 #ENDIF // class method
12097 #ENDIF
12098 #ENDIF // mangling case
12099
12100// !A [] HANDLE$FOR |CI0 |VL // handle the message
12101 !A [] $0454 |CI0 |VL
12102 #FREF OBJ$!Za$ENDPROC !a // fref the end procedure line
12103
12104 #IFDEF MANGLE_NAMES
12105 // MG added code here to check the parameter count.
12106 #IFDEF !1_!2_OVERLOADED
12107 // Check parameter count
12108 #DATA
12109 #DPUSH NUM_ARGUMENTS
12110 #DPUSH |CI!Zg
12111 #DPUSH !?
12112
12113 #IFSAME !1 GET
12114 #DPUSH |CI1
12115 #ELSE
12116 #IFSAME !1 MSG
12117 #DPUSH |CI2
12118 #ELSE
12119 #IFSAME !1 SET
12120 #DPUSH |CI3
12121 #ENDIF
12122 #ENDIF
12123 #ENDIF
12124 !A [] $0467 |CI0 |VL
12125 #FORBID NUM_ARGUMENTS 300 "NUM_ARGUMENTS was used in an overloaded method"
12126 #ENDIF
12127 #ENDIF
12128 #SET ZG$ 0 // starting argument number for locals
12129
12130 // JJT - changed in 9.1. This used to occur when the first local was created. Since this is executed at runtime
12131 // this created a situation where the first local might be in a block that is not executed. When moved to here
12132 // the local init command is always executed. We still strongly discourage the declartion of variables anywhere
12133 // accept the top of a method block. This simply fixes and unintended side-effect of our implementation.
12134 //!A [] LOCAL$ARGUMENT |CI0 // Create the command to save the local count,
12135 !A [] $0456 |CI0
12136 #FREF OBJ$!Za$LNUM !a // and tell flex to update it later.
12137
12138#ENDCOMMAND
12139
12140#COMMAND ITEM_LIST .
12141 #PUSH !Zd
12142 #SET ZD$ |CI-1 // -1 means in an item list.
12143
12144 #PUSH !Zg
12145 #PUSH !Zj
12146 #SET ZJ$ !a
12147 #PUSH !Zj
12148 #SET ZG$ 0 // Set the item counter to zero. This is used to
12149 // count and assign ID's to the items.
12150 !A [] OBJ$ILIST |CI0 // Create the command to save the item count,
12151 #FREF OBJ$!Zj$INUM !a // and tell flex to update it later.
12152#ENDCOMMAND
12153
12154
12155#COMMAND END_ITEM_LIST .
12156 #POP ZJ$
12157 #REPLACE OBJ$!Zj$INUM |CI!Zg // Update the count in the ITEM_LIST cmd.
12158 !A [] OBJ$ENDILIST OBJ$!Zj$INUM // Tell runtime this is the end of list.
12159 #POP ZJ$
12160 #POP ZG$
12161 #POP ZD$ // Restore "in item list" marker
12162#ENDCOMMAND
12163
12164#COMMAND ENTRY_ITEM R
12165 #IF (!Zd = -1) // if within a On_item group
12166 ENTRY$ITEM !1 !2 !3 !4 !5 !6 !7 !8 !9
12167 #ELSE
12168 #IF (!0>1)
12169 ENTRY$ITEM !1 !2 !3 !4 !5 !6 !7 !8 !9
12170 #ELSE
12171 #IFCLASS !1 "F"
12172 #PUSH !h
12173 #PUSH !g
12174 #SET H$ %!1 // get the fieldnumber of parameter
12175 #SET G$ !1 // get the filenumber of parameter
12176 Send Bind_Data |CI!g |CI!h
12177 #POP G$
12178 #POP H$
12179 #ELSE
12180 ENTRY$ITEM !1 !2 !3 !4 !5 !6 !7 !8 !9
12181 #ENDIF
12182 #ENDIF
12183 #ENDIF
12184#ENDCOMMAND
12185
12186#COMMAND ENTRY$ITEM R
12187 #SET ZG$ !ZG
12188 #DATA
12189 #IFCLASS !1 "EC"
12190 #ENTOPT {$C0A0=!1,$C002,$C003,!2}
12191 #ELSE
12192 #ENTOPT {$C0A0=!1,!2}
12193 #ENDIF
12194 !A [] OBJ$ENTRY$ITEM |CI0 |VL
12195#ENDCOMMAND
12196
12197#COMMAND REPLACE_CLASS_NAME R R
12198 #IFDEF U_!2
12199 #Replace U_!1 U_!2
12200 #IFSUB '!2$SC'
12201 #Replace !1$SC !2$SC
12202 #ENDIF
12203 #IFSUB '!2$SM'
12204 #Replace !1$SM !2$SM
12205 #ENDIF
12206 #IFSUB '!2$EM'
12207 #Replace !1$EM !2$EM
12208 #ENDIF
12209 #ENDIF
12210#ENDCOMMAND
12211
12212#COMMAND ON_KEY RULGBO#SDN "SEND" RLGBO#SDN """TO""OF""PRIVATE" _DNOB """PRIVATE" .
12213 #IFSAME !4 PRIVATE
12214 ON_KEY !1 !2 !3 TO |CI-1 PRIVATE
12215 #ELSE
12216 #DATA
12217 #DPUSH !1
12218 #IFSAME !4 TO OF
12219 #IFDEF !5
12220 #DPUSH !5
12221 #ELSE
12222 //#IFDEF !5.OBJ
12223 // #DPUSH !5.OBJ
12224 //#ELSE
12225 // #DPUSH |CI0
12226 // #FREF !5.OBJ !a,1
12227 //#ENDIF
12228 #IFDEF GET_!5 // if defined as a function
12229 #IF (GET_!5>$40000000) // and an object access method..we will help out
12230 // replace simple name with expression syntax
12231 DPUSH$EXP (!5(current_object))
12232 #ELSE // if defined as a function but not an access method. This is an error
12233 #DPUSH !5 // will generate an Error
12234 #ENDIF
12235 #ELSE // If undefined
12236 // 12.0 change. If not defined, this will get pushed as an object expression
12237 // allowing one to not have to use register_object if the object is defined later
12238 // in the file.
12239 DPUSH$EXP (!5(current_object))
12240 //#DPUSH !5 // will generate an Error
12241 #ENDIF
12242 #ENDIF
12243 #ELSE
12244 #DPUSH |CI-1
12245 #ENDIF
12246 #IFSAME !6 PRIVATE
12247 #DPUSH |CI1
12248 #ENDIF
12249 #IFDEF !3
12250 !A [] OBJ$ONKEY !3 |VL
12251 #ELSE
12252 #IFDEF MSG_!3
12253 !A [] OBJ$ONKEY MSG_!3 |VL
12254 #ELSE // else the command is defined in flex code
12255 !A [] OBJ$ONKEY |CI0 |VL // get flex to fix the fwd ref
12256 #FREF MSG_!3 !a
12257 #ENDIF
12258 #ENDIF
12259 #ENDIF
12260#ENDCOMMAND
12261
12262#COMMAND ON_ITEM NDI """SEND""BEGIN_PULL_DOWN"
12263 #IF (!0<2)
12264 #IF (!0<1)
12265 ON_ITEM '' SEND MSG_NONE
12266 #ELSE
12267 ON_ITEM !1 SEND MSG_NONE
12268 #ENDIF
12269 #ELSE
12270 #IFSAME !1 SEND
12271 ON_ITEM '' !1 !2 !3 !4 !5 !6 !7 !8 !9
12272 #ELSE
12273 #IFSAME !2 SEND
12274 #SET ZG$ !ZG // Increment the item counter
12275 #IFSAME !4 TO OF
12276 #CHECK !6 .
12277 #DATA
12278 #IFDEF !3
12279 #DPUSH !3 // Push the (variable) message
12280 #ELSE
12281 #IFDEF MSG_!3
12282 #DPUSH MSG_!3 // Push the constant message
12283 #ELSE
12284 #DPUSH |CI0
12285 #FREF MSG_!3 !a,0 // Forward fef the message
12286 #ENDIF
12287 #ENDIF
12288 #IFDEF !5
12289 #DPUSH !5 // Push the (expression, var) dest object
12290 #ELSE
12291 //#IFDEF !5.OBJ
12292 // #DPUSH !5.OBJ // Push the global object
12293 //#ELSE
12294 // #DPUSH |CI0
12295 // #FREF !5.OBJ !a,1 // Forward ref the object
12296 //#ENDIF
12297
12298 #IFDEF GET_!5 // if defined as a function
12299 #IF (GET_!5>$40000000) // and an object access method..we will help out
12300 // this is where we can get tricky and use access methods
12301 DPUSH$EXP (!5(current_object))
12302 #ELSE // if defined as a function but not an access method. This is an error
12303 #DPUSH !5 // will generate an Error
12304 #ENDIF
12305 #ELSE // If object name not defined (this is a new block for 12.0)
12306 // 12.0 change. If not defined, this will get pushed as an object expression
12307 // allowing one to not have to use register_object if the object is defined later
12308 // in the file.
12309 DPUSH$EXP (!5(current_object))
12310 #ENDIF
12311 #ENDIF
12312
12313 !A [] OBJ$ITEM_EXEC !1 |VL
12314
12315 #ELSE
12316 #IF (!0 > 3)
12317 #CHECK !4 "TO"
12318 #ENDIF
12319 #IFDEF MSG_!3
12320 !A [] OBJ$ITEM MSG_!3 !1 // Create the item passing name and value.
12321 #ELSE
12322 #IFDEF !3
12323 !A [] OBJ$ITEM !3 !1 // Create the item passing name and value.
12324 #ELSE
12325 !A [] OBJ$ITEM |CI0 !1 // Create the item passing name and value.
12326 #FREF MSG_!3 !a // fix value later with procedure address
12327 #ENDIF
12328 #ENDIF
12329 #ENDIF
12330 #ELSE
12331 #IFSAME !2 BEGIN_PULL_DOWN
12332 #CHECK !3 _R
12333 REGISTER_OBJECT !3
12334 ON_ITEM !1 SEND ACTIVATE_PULL_DOWN TO (!3(CURRENT_OBJECT))
12335 #IFSUB 'END_MENU'
12336 CREATE_MENU !3 SUB_LOCATION !4 !5 !6 !7 !8 !9
12337 #ELSE
12338 #ERROR DFERR_COMP_INVALID_ARGUMENT "BEGIN_PULL_DOWN" REQUIRES MENU_SYSTEM PACKAGE
12339 #ENDIF
12340 #ENDIF
12341 #ENDIF
12342 #ENDIF
12343 #ENDIF
12344#ENDCOMMAND
12345
12346//****************************************************************************//
12347// //
12348// Returns the field number of a fieldnumber passed. //
12349// //
12350// USAGE: //
12351// GET_FIELDNUMBER FlexErrs.Note to MyVar //
12352// //
12353//****************************************************************************//
12354
12355#COMMAND GET_FIELDNUMBER R "TO" R .
12356 #PUSH !g
12357 #SET G$ %!1
12358 Move |CI!g to !3
12359 #POP G$
12360#ENDCOMMAND
12361
12362
12363
12364//****************************************************************************//
12365// //
12366// Returns the file number of a fieldnumber passed. //
12367// //
12368// USAGE: //
12369// GET_FILENUMBER FlexErrs.Note to MyVar //
12370// //
12371//****************************************************************************//
12372
12373#COMMAND GET_FILENUMBER R "TO" R .
12374 #PUSH !g
12375 #SET G$ !1
12376 Move |CI!g to !3
12377 #POP G$
12378#ENDCOMMAND
12379
12380// Private command to start event loop for web applications (added in vdf9.1)
12381//
12382#COMMAND START_WEBAPP .
12383 !A [] $468
12384#ENDCOMMAND
12385
12386// Used by Web-services to properly convert data-types
12387// for XML/web services
12388
12389// Convert from XML to VDF:
12390// ConvertFromXml eType sData to sData
12391//
12392#COMMAND ConvertFromXML R R "TO" R
12393 #DATA
12394 #DPUSH !1
12395 #DPUSH !2
12396 #DPUSH !4
12397 !A [] $2ED |CI0 |VL
12398#ENDCOMMAND
12399
12400// Convert to XML from VDF:
12401// ConvertToXml eType sData to sData
12402//
12403#COMMAND ConvertToXML R R "TO" R
12404 #DATA
12405 #DPUSH !1
12406 #DPUSH !2
12407 #DPUSH !4
12408 !A [] $2EE |CI0 |VL
12409#ENDCOMMAND
12410
12411// Used in 11.0 to handle structs/arrays in client web-services. Reads and writes from a ValueTree to the variable.
12412// The type of variable is determined by the variable type you use. Value tree is:
12413// Struct tValueTree
12414// String sValue // data value. Value only exists if there are no children
12415// tValueTree[] children // child values. If a struct or array, we have children and no value
12416// End_Struct
12417//
12418
12419#COMMAND ValueTreeSerializeParameter R "TO" R
12420 !A [] $2ef !1 !3
12421#ENDCOMMAND
12422
12423#COMMAND ValueTreeDeserializeParameter R "TO" R
12424 !A [] $2f0 !1 !3
12425#ENDCOMMAND
12426
12427
12428
12429// sets !q to num of dimensions. !q must be initialized before this is called
12430#COMMAND ARRAY_DIM_COUNT_HELPER R
12431 #IFADIM !1
12432 #SET Q$ !Q
12433 ARRAY_DIM_COUNT_HELPER !2 !3 !4 !5 !6 !7 !8 !9
12434 #ENDIF
12435#ENDCOMMAND
12436
12437// dpushes the size of each dimension
12438#COMMAND ARRAY_DIM_SIZE_HELPER R
12439 #IFADIM !1
12440 #SPUSH
12441 #DIMSTRIP !1
12442 #DPUSH !$
12443 #SPOP
12444 ARRAY_DIM_SIZE_HELPER !2 !3 !4 !5 !6 !7 !8 !9
12445 #ENDIF
12446#ENDCOMMAND
12447
12448#COMMAND ARRAY_LOCAL_VARIABLE_REPLACE_HELPER R
12449 #IFADIM !1
12450 ARRAY_LOCAL_VARIABLE_REPLACE_HELPER !2 !3 !4 !5 !6 !7 !8 !9
12451 #ELSE
12452 #IFSAME !$ K
12453 #REPLACE !1 |SA!ZG!$!qV!h
12454 #ELSE
12455 #REPLACE !1 |SA!ZG!$!q
12456 #ENDIF
12457 #ENDIF
12458#ENDCOMMAND
12459
12460#COMMAND ARRAY_GLOBAL_VARIABLE_REPLACE_HELPER R
12461 #IFADIM !1
12462 ARRAY_GLOBAL_VARIABLE_REPLACE_HELPER !2 !3 !4 !5 !6 !7 !8 !9
12463 #ELSE
12464 #IFSAME !$ K
12465 #REPLACE !1 |VA!v!$!qV!h
12466 #ELSE
12467 #REPLACE !1 |VA!v!$!q
12468 #ENDIF
12469 #ENDIF
12470#ENDCOMMAND
12471
12472#COMMAND ARRAY_ARGUMENT_REPLACE_HELPER R
12473 #IFADIM !1 // first skip past all []s
12474 ARRAY_ARGUMENT_REPLACE_HELPER !2 !3 !4 !5 !6 !7 !8 !9
12475 #ELSE
12476 // start of line is now either "BYREF VarName" or "varName"
12477 #IFSAME !1 BYREF
12478 #IFSAME !$ K
12479 #REPLACE !2 |RA-!ZG!$!qV!h
12480 #ELSE
12481 #REPLACE !2 |RA-!ZG!$!q
12482 #ENDIF
12483 #ELSE
12484 #IFSAME !$ K
12485 #REPLACE !1 |SA-!ZG!$!qV!h
12486 #ELSE
12487 #REPLACE !1 |SA-!ZG!$!q
12488 #ENDIF
12489 #ENDIF
12490 #ENDIF
12491#ENDCOMMAND
12492
12493#COMMAND ARRAY_INIT_HELPER R
12494 #IFADIM !1
12495 ARRAY_INIT_HELPER !2 !3 !4 !5 !6 !7 !8 !9
12496 #ELSE
12497 !A [] $088 !1 |VL
12498 #ENDIF
12499#ENDCOMMAND
12500
12501#COMMAND LOCAL$ARRAY T R R
12502 #DATA
12503 #SET Q$ 0
12504 ARRAY_DIM_COUNT_HELPER !2 !3 !4 !5 !6 !7 !8 !9 // sets !q to num of dims
12505 #PUSH !q // we need this a bit later
12506 #DPUSH |CI!q //Push the number of dimensions
12507
12508 #PUSH !g
12509 #DTYPE G$ !1
12510 #IF (!g=19)
12511 #PUSH !h
12512 #STRG H$ !1
12513 #SPUSH
12514 #DTSYM !1 // moves datatype Letter ID into !$
12515 ARRAY_LOCAL_VARIABLE_REPLACE_HELPER !2 !3 !4 !5 !6 !7 !8 !9
12516 #SPOP
12517 #DPUSH |CI19
12518 #DPUSH |CI!h
12519 #POP H$
12520 #ELSE
12521 #PUSH !g
12522 #SPUSH
12523 #DTSYM !1 // moves datatype Letter ID into !$
12524 ARRAY_LOCAL_VARIABLE_REPLACE_HELPER !2 !3 !4 !5 !6 !7 !8 !9
12525 #SPOP
12526 #POP G$
12527 #DPUSH |CI!g //Push the element type
12528 #ENDIF
12529 #POP G$
12530
12531 ARRAY_DIM_SIZE_HELPER !2 !3 !4 !5 !6 !7 !8 !9 //Push the size of each dimension
12532 ARRAY_INIT_HELPER !2 !3 !4 !5 !6 !7 !8 !9
12533
12534 // at the moment only support multiple array variables with single dimension arrays
12535 // e.g. "integer[] i1 i2" is allowed, "integer[][] i1 i2" is not allowed.
12536 // this limit was created because it will be very difficult to make fmac do this and this should be a rare occurance.
12537 #POP Q$ // number of dimensions
12538 #IF (!q>1) // if more than one dimension
12539 #IF (!0>(!q+2)) // num of params must be num of dimensions plus 2
12540 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT 'Multi Dimensional array variables must be defined one per line'
12541 #ENDIF
12542 #ELSE
12543 #IF (!0>3)
12544 LOCAL$ARRAY !1 !2 !4 !5 !6 !7 !8 !9
12545 #ENDIF
12546 #ENDIF
12547
12548#ENDCOMMAND
12549
12550#COMMAND GLOBAL$ARRAY T R R
12551 #DATA
12552
12553 #SET Q$ 0
12554 ARRAY_DIM_COUNT_HELPER !2 !3 !4 !5 !6 !7 !8 !9 // sets !q to num of dims
12555 #PUSH !q // we need this a bit later
12556 ARRAY_DIM_SIZE_HELPER !2 !3 !4 !5 !6 !7 !8 !9 //Push the size of each dimension
12557
12558 #PUSH !g
12559 #DTYPE G$ !1
12560 #IF (!g=19)
12561 #PUSH !h
12562 #STRG H$ !1
12563 #DPUSH |CI!h
12564 #DPUSH |CI19
12565 #DPUSH |CI!q //Push the number of dimensions
12566 #ARRV V$
12567 #SPUSH
12568 #DTSYM !1 // moves datatype Letter ID into !$
12569 ARRAY_GLOBAL_VARIABLE_REPLACE_HELPER !2 !3 !4 !5 !6 !7 !8 !9
12570 #SPOP
12571 #POP H$
12572 #ELSE
12573 #DPUSH |CI!g //Push the element type
12574 #DPUSH |CI!q //Push the number of dimensions
12575 #ARRV V$
12576 #SPUSH
12577 #DTSYM !1 // moves datatype Letter ID into !$
12578 ARRAY_GLOBAL_VARIABLE_REPLACE_HELPER !2 !3 !4 !5 !6 !7 !8 !9
12579 #SPOP
12580 #ENDIF
12581 #POP G$
12582
12583 // at the moment only support multiple array variables with single dimension arrays
12584 // e.g. "integer[] i1 i2" is allowed, "integer[][] i1 i2" is not allowed.
12585 // this limit was created because it will be very difficult to make fmac do this and this should be a rare occurance.
12586 #POP Q$ // number of dimensions
12587 #IF (!q>1) // if more than one dimension
12588 #IF (!0>(!q+2)) // num of params must be num of dimensions plus 2
12589 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT 'Multi Dimensional array variables must be defined one per line'
12590 #ENDIF
12591 #ELSE
12592 #IF (!0>3)
12593 Global$Array !1 !2 !4 !5 !6 !7 !8 !9
12594 #ENDIF
12595 #ENDIF
12596
12597#ENDCOMMAND
12598
12599#COMMAND DEFINE_SCALAR_ARGUMENT
12600 #PUSH !q
12601 #DTYPE Q$ !1
12602 #IF (!q=-1) // undefined type error
12603 #ERROR DFERR_COMP_INVALID_DATATYPE (!1)
12604 #ELSE
12605 #IF (!q=19) // a struct
12606 #PUSH !h
12607 #STRG H$ !1
12608 #IFSAME !2 BYREF
12609 #REPLACE !3 |RK-!ZGV!h
12610 #ELSE
12611 #REPLACE !2 |SK-!ZGV!h
12612 #ENDIF
12613 #POP H$
12614 #ELSE // not a struct
12615 #SPUSH
12616 #DTSYM !1 // moves datatype Letter ID into !$
12617 #IFSAME !2 BYREF
12618 #REPLACE !3 |R!$-!ZG
12619 #ELSE
12620 #REPLACE !2 |S!$-!ZG
12621 #ENDIF
12622 #SPOP
12623 #ENDIF
12624 #ENDIF
12625 #POP Q$
12626#ENDCOMMAND
12627
12628#COMMAND DEFINE_ARRAY_ARGUMENT T R R
12629 #SET Q$ 0
12630 ARRAY_DIM_COUNT_HELPER !2 !3 !4 !5 !6 !7 !8 !9 // sets !q to num of dims
12631
12632 #PUSH !g
12633 #DTYPE G$ !1
12634 #IF (!g=-1) // undefined type error
12635 #ERROR DFERR_COMP_INVALID_DATATYPE (!1)
12636 #ELSE
12637 #IF (!g=19)
12638 #PUSH !h
12639 #STRG H$ !1
12640 #SPUSH
12641 #DTSYM !1 // moves datatype Letter ID into !$
12642 ARRAY_ARGUMENT_REPLACE_HELPER !2 !3 !4 !5 !6 !7 !8 !9
12643 #SPOP
12644 #POP H$
12645 #ELSE
12646 #SPUSH
12647 #DTSYM !1 // moves datatype Letter ID into !$
12648 ARRAY_ARGUMENT_REPLACE_HELPER !2 !3 !4 !5 !6 !7 !8 !9
12649 #SPOP
12650 #ENDIF
12651 #ENDIF
12652 #POP G$
12653#ENDCOMMAND
12654
12655#COMMAND DEFINE_ARGUMENTS
12656 #IF (!0>0)
12657 #IFSAME !1 OVERLOADED
12658 DEFINE_ARGUMENTS !2 !3 !4 !5 !6 !7 !8 !9
12659 #ElSE
12660 #IFSAME !1 RETURNS
12661 #ELSE
12662 #IFADIM !2
12663 DEFINE_ARRAY_ARGUMENT !1 !2 !3 !4 !5 !6 !7 !8 !9
12664 #ELSE
12665 DEFINE_SCALAR_ARGUMENT !1 !2 !3 !4 !5 !6 !7 !8 !9
12666 #ENDIF
12667 DEFINE_NEXT_ARGUMENT !2 !3 !4 !5 !6 !7 !8 !9
12668 #ENDIF
12669 #ENDIF
12670 #ENDIF
12671#ENDCOMMAND
12672
12673// get next argument. Skip past all []s and the BYREF symbol
12674#COMMAND DEFINE_NEXT_ARGUMENT
12675 #IF (!0>0)
12676 #IFADIM !1
12677 DEFINE_NEXT_ARGUMENT !2 !3 !4 !5 !6 !7 !8 !9
12678 #ELSE
12679 #IFSAME !1 BYREF
12680 DEFINE_ARGUMENTS !3 !4 !5 !6 !7 !8 !9
12681 #ELSE
12682 DEFINE_ARGUMENTS !2 !3 !4 !5 !6 !7 !8 !9
12683 #ENDIF
12684 #ENDIF
12685 #ENDIF
12686#ENDCOMMAND
12687
12688
12689#COMMAND SCALAR$PROPERTY R R
12690 #IFSAME !3 PRIVATE
12691 PROPERTY !1 !$.!2 PUBLIC !4
12692 #ELSE
12693 #IFSAME !3 PUBLIC
12694
12695 // Check property for proper placement
12696 // 1. Must be in class or object
12697 // 2. Cannot be in a child object defined by a class
12698 // 3. If in class, must be in procedure (constructor)
12699 // 4. If in object, must not be in procedure.
12700
12701 #IF ((!Zl & 1) = 0)
12702 #IF (!b & 3 ) // Within class or object? It should be
12703 #IF ((!b & 3)=3 ) // but not both....Error
12704 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Property cannot be defined in an object within a class
12705 #ELSE
12706 #IF (!b & 2) // in-class: Must be within a method (constructor)
12707 #IF ( (!b & 4)=0) // in-class and not in method...bad
12708 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Class Property must be defined within a constructor procedure
12709 #ENDIF
12710 #ELSE // in-object: Cannot be in method
12711 #IF (!b & 4) // if within object and within method...an error
12712 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Object Property cannot be in a method
12713 #ENDIF
12714 #ENDIF
12715 #ENDIF
12716 #ELSE
12717 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Property can only be defined within a class or object
12718 #ENDIF
12719 #ENDIF
12720
12721 #IF (!b & 1 ) // if within object
12722 !A [] CLONE$CLASS // Create a new class
12723 #ENDIF
12724
12725 #IF ( (!Zl & 1)=0)
12726 #IFSAME FN$!2 __F__
12727 #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION !2 is an internal function name
12728 #ENDIF
12729 #ENDIF
12730
12731 // Check for GET_ name conflicts as follows:
12732 // 1. If defined as an overloaded message - error
12733 // 2. If defined as object access - error
12734 // 3. If defined as global method - error
12735
12736 #IFDEF GET_!2_OVERLOADED
12737 #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION This GET Method Was Previously Defined As Overloaded
12738 #ELSE
12739 #IFDEF GET_!2
12740 #IF (GET_!2>$40000000)
12741 #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION GET !2 is already defined as an object name
12742 #ELSE
12743 #IF (GET_!2<0)
12744 #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION GET !2 is already defined as a global function
12745 #ENDIF // note else condition...defined as proeprty or class function...this is ok
12746 #ENDIF
12747 #ELSE
12748 MESSAGE$ADDRESS GET_!2
12749 #ENDIF
12750 #ENDIF
12751
12752 #DATA // Start the property
12753
12754 #DPUSH GET_!2 // Push the get property id
12755 #FREG GET_!2 RETURNS !1
12756
12757 // Make sure Set message not defined as overloaded or global
12758 #IFDEF SET_!2_OVERLOADED
12759 #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION This SET Method Was Previously Defined As Overloaded
12760 #ELSE
12761 #IFDEF SET_!2
12762 #IF (SET_!2<0)
12763 #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION SET !2 is already defined as a global message
12764 #ENDIF
12765 #ELSE
12766 MESSAGE$ADDRESS SET_!2
12767 #ENDIF
12768 #ENDIF
12769
12770 #DPUSH SET_!2 // Push the set property id
12771 #PREG SET_!2 !1
12772 #DTYPE Q$ !1 // get the property type in q
12773 #DPUSH |CI!q // push the type
12774 #IF (!q=19)
12775 //It's a struct, so we must push the struct metadata as well
12776 #PUSH !h
12777 #STRG H$ !1
12778 #DPUSH |CI!h
12779 #POP H$
12780 #ENDIF
12781 #IF (!0 > 3)
12782 #DPUSH !4
12783 //#ELSE // 10/30/1997: If no default param is passed force
12784 //SF - This has been moved to the runtime now
12785 //SF - We may want to change this logic and not provide a default value at all.
12786 //The runtime can easily be changed to handle this better.
12787 //#IFSAME !1 ROWID
12788 // //Do nothing, RowID should not have a default value
12789 // //i.e. there are no constant RowIDs, and string to RowID conversion is illegal
12790 //#ELSE
12791 // #IFSAME !1 STRING DATETIME TIME TIMESPAN // a default value. String types require
12792 // #DPUSH |CS'' // a string, all others are numeric. This
12793 // #ELSE // fixes a problem in the runtime where
12794 // #DPUSH |CI0 // dates and numbers did not initialize properly
12795 // #ENDIF // when no initial param was passed in the command
12796 //#ENDIF
12797 #ENDIF
12798 !A [] CREATE$PROPERTY |CI0 |VL
12799 #ELSE
12800 // this supports syntax of "property Integer Prop 10"
12801 PROPERTY !1 !2 PUBLIC !3
12802 #ENDIF
12803 #ENDIF
12804#ENDCOMMAND
12805
12806#COMMAND ARRAY_PROPERTY_NAME_HELPER2 R R
12807 // Check property for proper placement
12808 // 1. Must be in class or object
12809 // 2. Cannot be in a child object defined by a class
12810 // 3. If in class, must be in procedure (constructor)
12811 // 4. If in object, must not be in procedure.
12812
12813 #IF ((!Zl & 1) = 0)
12814 #IF (!b & 3 ) // Within class or object? It should be
12815 #IF ((!b & 3)=3 ) // but not both....Error
12816 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Property cannot be defined in an object within a class
12817 #ELSE
12818 #IF (!b & 2) // in-class: Must be within a method (constructor)
12819 #IF ( (!b & 4)=0) // in-class and not in method...bad
12820 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Class Property must be defined within a constructor procedure
12821 #ENDIF
12822 #ELSE // in-object: Cannot be in method
12823 #IF (!b & 4) // if within object and within method...an error
12824 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Object Property cannot be in a method
12825 #ENDIF
12826 #ENDIF
12827 #ENDIF
12828 #ELSE
12829 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT Property can only be defined within a class or object
12830 #ENDIF
12831 #ENDIF
12832
12833 #IF (!b & 1 ) // if within object
12834 !A [] CLONE$CLASS // Create a new class
12835 #ENDIF
12836
12837 #IF ( (!Zl & 1)=0)
12838 #IFSAME FN$!2 __F__
12839 #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION !2 is an internal function name
12840 #ENDIF
12841 #ENDIF
12842
12843 // Check for GET_ name conflicts as follows:
12844 // 1. If defined as an overloaded message - error
12845 // 2. If defined as object access - error
12846 // 3. If defined as global method - error
12847
12848 #IFDEF GET_!2_OVERLOADED
12849 #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION This GET Method Was Previously Defined As Overloaded
12850 #ELSE
12851 #IFDEF GET_!2
12852 #IF (GET_!2>$40000000)
12853 #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION GET !2 is already defined as an object name
12854 #ELSE
12855 #IF (GET_!2<0)
12856 #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION GET !2 is already defined as a global function
12857 #ENDIF // note else condition...defined as proeprty or class function...this is ok
12858 #ENDIF
12859 #ELSE
12860 MESSAGE$ADDRESS GET_!2
12861 #ENDIF
12862 #ENDIF
12863
12864 #DPUSH GET_!2 // Push the get property id
12865
12866 #FREG GET_!2 RETURNS !1 |GB[] //Make it array type by appending [], the number of dimensions are not used here
12867
12868 // Make sure Set message not defined as overloaded or global
12869 #IFDEF SET_!2_OVERLOADED
12870 #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION This SET Method Was Previously Defined As Overloaded
12871 #ELSE
12872 #IFDEF SET_!2
12873 #IF (SET_!2<0)
12874 #ERROR DFERR_COMP_ILLEGAL_PROPERTY_DEFINTION SET !2 is already defined as a global message
12875 #ENDIF
12876 #ELSE
12877 MESSAGE$ADDRESS SET_!2
12878 #ENDIF
12879 #ENDIF
12880
12881 #DPUSH SET_!2 // Push the set property id
12882 #PREG SET_!2 !1 |GB[] //Make it array type by appending [], the number of dimensions are not used here
12883#ENDCOMMAND
12884
12885
12886#COMMAND ARRAY_PROPERTY_NAME_HELPER R R
12887 #IFADIM !2
12888 ARRAY_PROPERTY_NAME_HELPER !1 !3 !4 !5 !6 !7 !8 !9
12889 #ELSE
12890 #IFSAME !3 PRIVATE
12891 ARRAY_PROPERTY_NAME_HELPER !1 !$.!2 PUBLIC !4 !5 !6 !7 !8 !9
12892 #ELSE
12893 #IFSAME !3 PUBLIC
12894 ARRAY_PROPERTY_NAME_HELPER2 !1 !2 !3 !4 !5 !6 !7 !8 !9
12895 #ELSE
12896 ARRAY_PROPERTY_NAME_HELPER !1 !2 PUBLIC !3 !4 !5 !6 !7 !8 !9
12897 #ENDIF
12898 #ENDIF
12899 #ENDIF
12900#ENDCOMMAND
12901
12902#COMMAND ARRAY$PROPERTY R R
12903 #DATA // Start the property
12904
12905 //Push the get and set messages
12906 ARRAY_PROPERTY_NAME_HELPER !1 !2 !3 !4 !5 !6 !7 !8 !9
12907
12908 #DPUSH |CI21 // Push ARGARRAY
12909 #SET Q$ 0
12910 ARRAY_DIM_COUNT_HELPER !2 !3 !4 !5 !6 !7 !8 !9 // sets !q to num of dims
12911 #DPUSH |CI!q //Push the number of dimensions
12912
12913 #DTYPE Q$ !1 // get the property type in q
12914 #DPUSH |CI!q // Push the array type
12915 #IF (!q=19)
12916 //It's a struct, so we must push the struct metadata as well
12917 #PUSH !h
12918 #STRG H$ !1
12919 #DPUSH |CI!h
12920 #POP H$
12921 #ENDIF
12922 ARRAY_DIM_SIZE_HELPER !2 !3 !4 !5 !6 !7 !8 !9 //Push the size of each dimension
12923 !A [] CREATE$PROPERTY |CI0 |VL
12924#ENDCOMMAND
12925
12926#COMMAND PROPERTY R R
12927 #PUSH !q
12928 #DTYPE Q$ !1 // get the property type in q
12929 #IF (!q=-1) // undefined type error
12930 #ERROR DFERR_COMP_INVALID_DATATYPE (!1)
12931 #ELSE
12932 #IFADIM !2
12933 ARRAY$PROPERTY !1 !2 !3 !4 !5 !6 !7 !8 !9
12934 #ELSE
12935 SCALAR$PROPERTY !1 !2 !3 !4 !5 !6 !7 !8 !9
12936 #ENDIF
12937 #ENDIF
12938 #POP Q$
12939#ENDCOMMAND
12940
12941// note that this command also creates a symbol _struct_XYZ where XYZ is the struct name. This can
12942// be used with #ifdef to see if a struct is defined
12943#COMMAND STRUCT R
12944 #IFDEF __@INSIDE_STRUCT@__
12945 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT "STRUCT command within a STRUCT. Structs cannot be Nested"
12946 #ELSE
12947 #STRU !1
12948 #SREP __@INSIDE_STRUCT@__ |CI1 // lets other commands check that they are inside a struct scope.
12949 #ENDIF
12950#ENDCOMMAND
12951
12952#COMMAND END_STRUCT
12953 #IFNDEF __@INSIDE_STRUCT@__
12954 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT "END_STRUCT command without STRUCT"
12955 #ELSE
12956 #STRE
12957 #UNDEF __@INSIDE_STRUCT@__ // Leaving struct declaration
12958 #ENDIF
12959#ENDCOMMAND
12960
12961#COMMAND STRUCT_SCALAR_MEMBER R R
12962 #PUSH !q
12963 #DTYPE Q$ !1 // get the property type in q
12964 #IF (!q =-1)
12965 #ERROR DFERR_COMP_INVALID_DATATYPE (!1)
12966 #ELSE
12967 #IF (!q=19)
12968 #PUSH !h
12969 #STRG H$ !1
12970 #STRM STRUCT |CI!h !2
12971 #POP H$
12972 #ELSE
12973 #STRM SCALAR |CI!q !2
12974 #ENDIF
12975 #ENDIF
12976 #POP Q$
12977#ENDCOMMAND
12978
12979#COMMAND STRUCT_ARRAY_TYPE_HELPER R
12980 #PUSH !q
12981 #DTYPE Q$ !1 // get the property type in q
12982 #IF (!q =-1)
12983 #ERROR DFERR_COMP_INVALID_DATATYPE (!1)
12984 #ELSE
12985 #IF (!q=19)
12986 #PUSH !h
12987 #STRG H$ !1
12988 #DPUSH |CI!h
12989 #DPUSH |CI19
12990 #POP H$
12991 #ELSE
12992 #DPUSH |CI!q
12993 #ENDIF
12994 #ENDIF
12995 #POP Q$
12996#ENDCOMMAND
12997
12998#COMMAND STRUCT_ARRAY_MEMBER_HELPER R
12999 #IFADIM !1
13000 STRUCT_ARRAY_MEMBER_HELPER !2 !3 !4 !5 !6 !7 !8 !9
13001 #ELSE
13002 #STRM ARRAY !1
13003 #ENDIF
13004#ENDCOMMAND
13005
13006#COMMAND STRUCT_ARRAY_MEMBER T R R
13007 #DATA
13008 ARRAY_DIM_SIZE_HELPER !2 !3 !4 !5 !6 !7 !8 !9
13009 STRUCT_ARRAY_TYPE_HELPER !1
13010 #SET Q$ 0
13011 ARRAY_DIM_COUNT_HELPER !2 !3 !4 !5 !6 !7 !8 !9 // sets !q to num of dims
13012 #DPUSH |CI!q //Push the number of dimensions
13013 STRUCT_ARRAY_MEMBER_HELPER !2 !3 !4 !5 !6 !7 !8 !9
13014#ENDCOMMAND
13015
13016
13017#COMMAND Local$Scalar R R
13018 #CHECK !2 _RT
13019 #PUSH !q
13020 #DTYPE Q$ !1 // get the property type in q
13021 #IF (!q=19)
13022 //It's a struct
13023 #PUSH !h
13024 #STRG H$ !1
13025 #REPLACE !2 |SK!ZGV!h
13026 #POP H$
13027 #ELSE
13028 #SPUSH
13029 #DTSYM !1 // moves datatype Letter ID into !$
13030 #REPLACE !2 |S!$!ZG
13031 #SPOP
13032 #ENDIF
13033 #POP Q$
13034
13035 #IF (!0>2)
13036 Local$Scalar !1 !3 !4 !5 !6 !7 !8 !9
13037 #ENDIF
13038#ENDCOMMAND
13039
13040#COMMAND LOCAL R R // T T
13041 #IFDEF __@INSIDE_FUNCTION@__
13042 #PUSH !q
13043 #DTYPE Q$ !1
13044 #IF (!q=-1)
13045 #ERROR DFERR_COMP_INVALID_DATATYPE (!1)
13046 #ELSE
13047 #IFADIM !2
13048 Local$Array !1 !2 !3 !4 !5 !6 !7 !8 !9
13049 #ELSE
13050 Local$Scalar !1 !2 !3 !4 !5 !6 !7 !8 !9
13051 #ENDIF
13052 #ENDIF
13053 #POP Q$
13054 #ELSE
13055 #ERROR DFERR_COMP_ILLEGAL_CODE_PLACEMENT LOCAL Variables can only be defined within methods
13056 #ENDIF
13057#ENDCOMMAND
13058
13059
13060//#COMMAND GLOBAL$Scalar R R
13061
13062// #CHECK !2 _RT
13063
13064// #IFSAME !1 STRING
13065// // strings are treated as special because they have a set of values.
13066// #IF (!0>2)
13067// #IFDEF !3
13068// #CHECK !3 _VSWDF
13069// #STR V$ !3
13070// #REPLACE !2 |VS!v
13071// #IF (!0>3)
13072// Global$Scalar !1 !4 !5 !6 !7 !8 !9
13073// #ENDIF
13074// #ELSE
13075// #STR V$ 80
13076// #REPLACE !2 |VS!v
13077// Global$Scalar !1 !3 !4 !5 !6 !7 !8 !9
13078// #ENDIF
13079// #ELSE
13080// #STR V$ 80
13081// #REPLACE !2 |VS!v
13082// #ENDIF
13083// #ELSE
13084// #PUSH !q
13085// #DTYPE Q$ !1 // get the property type in q
13086// #IF (!q=19)
13087// //It's a struct
13088// #PUSH !h
13089// #STRG H$ !1
13090// #STRV V$ !h
13091// #REPLACE !2 |VK!vV!h
13092// #POP H$
13093// #ELSE
13094// #SPUSH
13095//// #SET $$ TYPE$SYMBOL$!1
13096//// #REM arg is !$
13097//// Scalar$Variable$Help !2 TYPE$SYMBOL$G$!1 // V
13098//// Scalar$Variable$Help !2 !$ V
13099// #DTSYM !1
13100// #REPLACE !2 |V!$!v // ZG
13101// #REM !2 ------------------------------------
13102// #SPOP
13103
13104// #ENDIF
13105// #POP Q$
13106
13107// #IF (!0>2)
13108// GLOBAL$Scalar !1 !3 !4 !5 !6 !7 !8 !9
13109// #ENDIF
13110//#ENDCOMMAND
13111
13112
13113#COMMAND GLOBAL_VARIABLE R R
13114 #PUSH !q
13115 #DTYPE Q$ !1
13116 #IF (!q=-1)
13117 #ERROR DFERR_COMP_INVALID_DATATYPE (!1)
13118 #ELSE
13119 #IFADIM !2 // if a global array, treat as such
13120 Global$Array !1 !2 !3 !4 !5 !6 !7 !8 !9
13121 #ELSE
13122 Global$Scalar !1 !2 !3 !4 !5 !6 !7 !8 !9
13123 #ENDIF // if aDim
13124 #ENDIF // if (!q=-1)
13125 #POP Q$
13126#ENDCOMMAND
13127
13128#COMMAND Global$Scalar
13129 #IF (!0>0)
13130 #CHECK !2 _RT
13131
13132 #IFSAME !1 STRING
13133 // strings are treated as special because they have a set of values.
13134 #IF (!0>2)
13135 #IFDEF !3
13136 #CHECK !3 _VSWDF
13137 #STR V$ !3
13138 #REPLACE !2 |VS!v
13139 #IF (!0>3)
13140 Global$Scalar !1 !4 !5 !6 !7 !8 !9
13141 #ENDIF
13142 #ELSE
13143 #STR V$ 80
13144 #REPLACE !2 |VS!v
13145 Global$Scalar !1 !3 !4 !5 !6 !7 !8 !9
13146 #ENDIF
13147 #ELSE
13148 #STR V$ 80
13149 #REPLACE !2 |VS!v
13150 #ENDIF
13151 #ELSE
13152 #IFSAME !1 INTEGER
13153 #REPLACE !2 |VI!D
13154 #ELSE
13155 #IFSAME !1 DATE
13156 #NUM V$
13157 #REPLACE !2 |VD!v
13158 #ELSE
13159 #IFSAME !1 NUMBER
13160 #NUM V$
13161 #REPLACE !2 |VN!v
13162 #ELSE
13163 #IFSAME !1 REAL
13164 #REAL V$
13165 #REPLACE !2 |VR!v
13166 #ELSE
13167 #IFSAME !1 ADDRESS
13168 #ADDRESS V$
13169 #REPLACE !2 |VX!v
13170 #ELSE
13171 #IFSAME !1 BIGINT
13172 #BIGINT V$
13173 #REPLACE !2 |VH!v
13174 #ELSE
13175 #IFSAME !1 TIME
13176 #TIME V$
13177 #REPLACE !2 |VT!v
13178 #ELSE
13179 #IFSAME !1 DATETIME
13180 #STAM V$
13181 #REPLACE !2 |VM!v
13182 #ELSE
13183 #IFSAME !1 FLOAT
13184 #FLOAT V$
13185 #REPLACE !2 |VF!v
13186 #ELSE
13187 #IFSAME !1 CHAR
13188 #CHAR V$
13189 #REPLACE !2 |VY!v
13190 #ELSE
13191 #IFSAME !1 UCHAR
13192 #UCHAR V$
13193 #REPLACE !2 |VC!v
13194 #ELSE
13195 #IFSAME !1 SHORT
13196 #SHORT V$
13197 #REPLACE !2 |VW!v
13198 #ELSE
13199 #IFSAME !1 USHORT
13200 #USHORT V$
13201 #REPLACE !2 |VU!v
13202 #ELSE
13203 #IFSAME !1 UINTEGER
13204 #ULONG V$
13205 #REPLACE !2 |VV!v
13206 #ELSE
13207 #IFSAME !1 BOOLEAN
13208 #BIT V$
13209 #REPLACE !2 |VZ!v
13210 #ELSE
13211 #IFSAME !1 UBIGINT
13212 #BIGU V$
13213 #REPLACE !2 |VG!v
13214 #ELSE
13215 #IFSAME !1 CURRENCY
13216 #CURR V$
13217 #REPLACE !2 |VO!v
13218 #ELSE
13219 #IFSAME !1 TIMESPAN
13220 #SPAN V$
13221 #REPLACE !2 |VP!v
13222 #ELSE
13223 #IFSAME !1 DECIMAL
13224 #BIGN V$
13225 #REPLACE !2 |VQ!v
13226 #ELSE
13227 #IFSAME !1 VARIANT
13228 #VRNT V$
13229 #REPLACE !2 |VJ!v
13230 #ELSE
13231 #IFSAME !1 ROWID
13232 #ROWI V$
13233 #REPLACE !2 |V@!v
13234 #ELSE
13235 #PUSH !h
13236 #STRG H$ !1
13237 #IF !h
13238 #STRV V$ !h
13239 #REPLACE !2 |VK!vV!h
13240 #ELSE
13241 #ERROR DFERR_COMP_INVALID_DATATYPE (!1)
13242 #ENDIF
13243 #POP H$
13244 #ENDIF // RowID
13245 #ENDIF // Variant
13246 #ENDIF // Decimal
13247 #ENDIF // TimeSpan
13248 #ENDIF // Currenct
13249 #ENDIF // UBigInt
13250 #ENDIF // Boolean
13251 #ENDIF // UInteger
13252 #ENDIF // UShort
13253 #ENDIF // Short
13254 #ENDIF // UChar
13255 #ENDIF // Char
13256 #ENDIF // Float
13257 #ENDIF // TimeDate
13258 #ENDIF // Time
13259 #ENDIF // BigInt
13260 #ENDIF // address
13261 #ENDIF // real
13262 #ENDIF // number
13263 #ENDIF // date
13264 #ENDIF // integer
13265 #IF (!0>2)
13266 Global$Scalar !1 !3 !4 !5 !6 !7 !8 !9
13267 #ENDIF
13268 #ENDIF // end of string
13269 #ENDIF // if there are parameters
13270#ENDCOMMAND
13271
13272// External function command declairs the external entry point to
13273// The DF system. The compiler creates a reference to the function
13274// complete with return type and parameter information. The macro
13275// also generates code that retains the name of the function and the
13276// name of the library in a runtime array. This array is used when
13277// the DLL is "loaded".
13278
13279#COMMAND SET_DEFAULT_CALLTYPE _R .
13280 #IF (!1=16)
13281 #SET ZK$ 1
13282 #ELSE
13283 #SET ZK$ 0
13284 #ENDIF
13285#ENDCOMMAND
13286
13287
13288//External_Function FunctionName "FunctionName" DLLName {Parameters ...} Returns DataType
13289#COMMAND EXTERNAL_FUNCTION
13290 #IF !Zk=0
13291 EXTERNAL$FUNCTION $54C LOAD_ON_USE GET_ !1 !2 !3 !4 !5 !6 !7 !8 !9
13292 #ELSE
13293 EXTERNAL$FUNCTION $54D LOAD_ON_USE GET_ !1 !2 !3 !4 !5 !6 !7 !8 !9
13294 #ENDIF
13295#ENDCOMMAND
13296
13297#COMMAND EXTERNAL_PROCEDURE
13298 #IF !Zk=0
13299 EXTERNAL$FUNCTION $54C LOAD_ON_USE MSG_ !1 !2 !3 !4 !5 !6 !7 !8 !9
13300 #ELSE
13301 EXTERNAL$FUNCTION $54D LOAD_ON_USE MSG_ !1 !2 !3 !4 !5 !6 !7 !8 !9
13302 #ENDIF
13303#ENDCOMMAND
13304
13305#COMMAND EXTERNAL_FUNCTION16
13306 EXTERNAL$FUNCTION $54D LOAD_ON_USE GET_ !1 !2 !3 !4 !5 !6 !7 !8 !9
13307#ENDCOMMAND
13308
13309#COMMAND EXTERNAL_PROCEDURE16
13310 EXTERNAL$FUNCTION $54D LOAD_ON_USE MSG_ !1 !2 !3 !4 !5 !6 !7 !8 !9
13311#ENDCOMMAND
13312
13313#COMMAND EXTERNAL_FUNCTION32
13314 EXTERNAL$FUNCTION $54C LOAD_ON_USE GET_ !1 !2 !3 !4 !5 !6 !7 !8 !9
13315#ENDCOMMAND
13316
13317#COMMAND EXTERNAL_PROCEDURE32
13318 EXTERNAL$FUNCTION $54C LOAD_ON_USE MSG_ !1 !2 !3 !4 !5 !6 !7 !8 !9
13319#ENDCOMMAND
13320
13321//External$Function Command Flag GET_|MSG_ FunctionName {"FunctionName"} DLLName {Parameters ...} Returns DataType
13322#COMMAND EXTERNAL$FUNCTION _R _R "GET_""MSG_" TR RIDN
13323 #IFTYPE !5 S
13324
13325 // check that the function name is not one of our reserved internal functions
13326 #IFSAME !3 GET_
13327 #IFSAME FN$!4 __F__
13328 #ERROR DFERR_COMP_ILLEGAL_EXTERNAL_FUNCTION_DEFINTION !4 is an internal function name
13329 #ENDIF
13330 #ENDIF
13331
13332 #IFDEF !3!4 // if defined as object, function, property, external, an error
13333 // We have an error. This just generates more accurate information
13334 #IFSAME !3 GET_ // function errors can be name already used as Object, global function, or reg function
13335 #IF (GET_!4>$40000000)
13336 #ERROR DFERR_COMP_ILLEGAL_EXTERNAL_FUNCTION_DEFINTION !4 is already defined as an object
13337 #ELSE
13338 #IF (GET_!4<0)
13339 #ERROR DFERR_COMP_ILLEGAL_EXTERNAL_FUNCTION_DEFINTION !4 is already defined as a global function
13340 #ELSE
13341 #ERROR DFERR_COMP_ILLEGAL_METHOD_DEFINTION !4 is already defined as a function or external_function
13342 #ENDIF
13343 #ENDIF
13344 #ELSE // if procecure it can be global or regular
13345 #IF (MSG_!4<0)
13346 #ERROR DFERR_COMP_ILLEGAL_EXTERNAL_FUNCTION_DEFINTION !4 is already defined as a global procedure
13347 #ELSE
13348 #ERROR DFERR_COMP_ILLEGAL_EXTERNAL_FUNCTION_DEFINTION !4 is already defined as a procedure or external_procedure
13349 #ENDIF
13350 #ENDIF
13351 #ELSE
13352 MESSAGE$ADDRESS !3!4 // create any symbol (for global)
13353 CHECK$METHOD$ARGUMENT$LIST !7 !8 !9
13354 #DATA
13355 #FREG !3!4 GLOBAL !7 !8 !9
13356 #DPUSH !3!4 // Message ID
13357 #DPUSH !2 // Load Type
13358 #DPUSH |CS"!6" // DLL Name
13359 #DPUSH !5 // Function Name
13360 GET$RETURN$TYPE !7 !8 !9 // Push Return Type
13361 !A [] !1 |CI0 |VL
13362 #ENDIF
13363 #ELSE
13364 EXTERNAL$FUNCTION !1 !2 !3 !4 |CS"!4" !5 !6 !7 !8 !9
13365 #ENDIF
13366#ENDCOMMAND
13367
13368#COMMAND GET$RETURN$TYPE
13369 #IF !0=1
13370 #IFSAME !1 INTEGER
13371 #DPUSH |CI3
13372 #ELSE
13373 #IFSAME !1 UINTEGER
13374 #DPUSH |CI15
13375 #ELSE
13376 #IFSAME !1 STRING
13377 #DPUSH |CI0
13378 #ELSE
13379 #IFSAME !1 REAL
13380 #DPUSH |CI5
13381 #ELSE
13382 #IFSAME !1 FLOAT
13383 #DPUSH |CI10
13384 #ELSE
13385 #IFSAME !1 ADDRESS
13386 #DPUSH |CI7
13387 #ELSE
13388 #IFSAME !1 SHORT
13389 #DPUSH |CI13
13390 #ELSE
13391 #IFSAME !1 USHORT
13392 #DPUSH |CI14
13393 #ELSE
13394 #IFSAME !1 CHAR
13395 #DPUSH |CI11
13396 #ELSE
13397 #IFSAME !1 UCHAR
13398 #DPUSH |CI12
13399 #ELSE
13400 #IFSAME !1 BOOLEAN
13401 #DPUSH |CI3 // Push an int for boolean return type
13402 #ELSE
13403 #DPUSH |CI3 // Push an int return value anyway
13404 #ERROR DFERR_COMP_ILLEGAL_RETURN_TYPE Unknown return type for external function
13405 #ENDIF
13406 #ENDIF
13407 #ENDIF
13408 #ENDIF
13409 #ENDIF
13410 #ENDIF
13411 #ENDIF
13412 #ENDIF
13413 #ENDIF
13414 #ENDIF
13415 #ENDIF
13416 #ELSE
13417 GET$RETURN$TYPE !2 !3 !4 !5 !6 !7 !8 !9
13418 #ENDIF
13419#ENDCOMMAND
13420
13421// Commands used for active-x stuff. Moved from flexcom20_base.pkg. The Embed_activeX_resource stuff results in very
13422// strange long errors if this command i snot always available.
13423#COMMAND Include_ActiveX_Resource R R
13424 #BSTR V$ file storage !1 !2
13425 Set psResourceData to |VS!v
13426#ENDCOMMAND
13427
13428#COMMAND EMBED_ACTIVEX_RESOURCE
13429 #BSTR V$ READ BASE64RESOURCE
13430#ENDCOMMAND
13431
13432#COMMAND END_EMBED_ACTIVEX_RESOURCE
13433 Set psResourceData to |VS!v
13434#ENDCOMMAND
13435
13436// for internal use only for generating the errordisplay stack dump dialog
13437// ErrorDisplay iErrorLine sMessage sCaption sOkText sCopyText
13438#COMMAND ErrorDisplay R R R R R
13439 #DATA
13440 #DPUSH !1
13441 #DPUSH !2
13442 #DPUSH !3
13443 #DPUSH !4
13444 #DPUSH !5
13445 !A[] $57 |VL
13446#ENDCOMMAND
13447
13448
13449// Low level command that can be used within error handlers (e.g. error_report) to get a string of the current call stack.
13450#COMMAND CALLSTACKDUMP R
13451 !A [] $058 !1
13452#ENDCOMMAND
13453
13454// This forces the entire application to use the old MSXML3 parser.
13455// This must be used before you create any XML object. Only provided
13456// for backwards compatibility. Added 15.1
13457#COMMAND USE_LEGACY_XML_LIB
13458 !A [] $057c
13459#ENDCOMMAND
13460
13461