=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Command: END_PROCEDURE Parameters: None. Description: =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= JJT-5.1 #COMMAND END_PROCEDURE . #SET B$ (!b & 3) // reset flag to in_procedure #POP U$ #REPLACE OBJ$!Za$LNUM |CI!Zg // Update the count in the local cmd. // !A [] OBJ$END$HANDLER |CI0 !A [] $0455 |CI0 #REPLACE OBJ$!Za$ENDPROC !a #POP U$ #POP ZG$ #STKSYM #ENDCOMMAND =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Command: FUNCTION_RETURN {OptionalReturnValue} Parameters: Return value may be a variable or constant of any type, including the literals TRUE or FALSE. Description: =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= JJT-5.1 #COMMAND FUNCTION_RETURN GO . #IF (!0 > 0) #IFSAME !1 $0 // !A [] OBJ$HRET |CI0 !A [] $0450 |CI0 #ELSE #IFSAME !1 $1 // !A [] OBJ$HRET |CI1 !A [] $0450 |CI1 #ELSE #CHECK !1 U // !A [] OBJ$HRET !1 !A [] $0450 !1 #ENDIF #ENDIF #ELSE // !A [] OBJ$HRET |CI0 !A [] $0450 |CI0 #ENDIF #ENDCOMMAND =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Command: LOCAL {STRING | NUMBER | DATE | INTEGER | REAL} LocalName {...} Parameters: Description: =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= JJT-5.1 #COMMAND LOCAL T T #IF (!0>0) #CHECK !1 '"STRING""NUMBER""DATE""INTEGER""REAL"' #CHECK !2 RT #IFDEF NUM_ARGUMENTS #IF (!Zg = 0) // !A [] LOCAL$ARGUMENT |CI0 // Create the command to save the local count, !A [] $0456 |CI0 #FREF OBJ$!Za$LNUM !a // and tell flex to update it later. #ENDIF #IFSAME !1 STRING #REPLACE !2 |SS!ZG #ELSE #IFSAME !1 NUMBER #REPLACE !2 |SN!ZG #ELSE #IFSAME !1 DATE #REPLACE !2 |SD!ZG #ELSE #IFSAME !1 INTEGER #REPLACE !2 |SI!ZG #ELSE #IFSAME !1 REAL #REPLACE !2 |SR!ZG #ENDIF #ENDIF #ENDIF #ENDIF #ENDIF #ELSE !1 !2 #ENDIF #IF (!0>2) LOCAL !1 !3 !4 !5 !6 !7 !8 !9 #ENDIF #ENDIF #ENDCOMMAND =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Command: Class New_Class IS A|AN Old_Class {STARTMAC StartMacro} {ENDMAC EndMacro} {FgColor BgColor {HandlerName}} Parameters: Description: =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= JJT-5.1 #COMMAND CLASS _RCDNSO "IS" "A""AN" _RDNO //_UGBO#L _UGBO#L _GBO#L . #CHECK U_!4 _U // does class exist? #REPLACE !1$SC !4 //define superclass of new class #IFSAME !5 STARTMAC //if start macro specified, #REPLACE !1$SM !6 //remember its name #IFSAME !7 ENDMAC //if end macro specified, #REPLACE !1$EM !8 //remember it BASE_CREATE_CLASS !1 !2 !3 !4 !9 #ELSE BASE_CREATE_CLASS !1 !2 !3 !4 !7 !8 !9 #ENDIF #ELSE #IFSAME !5 ENDMAC //no STARTMAC - if ENDMAC specified, #REPLACE !1$EM !6 //remember it BASE_CREATE_CLASS !1 !2 !3 !4 !7 !8 !9 #ELSE BASE_CREATE_CLASS !1 !2 !3 !4 !5 !6 !7 !8 !9 #ENDIF #ENDIF #ENDCOMMAND =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Command: BASE_CREATE_CLASS New_Class IS A|AN Old_Class {FgColor BgColor {HandlerName}} Parameters: Description: =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= JJT-5.1 #COMMAND BASE_CREATE_CLASS _RCDNSO "IS" "A""AN" _RDNO _UGBO#L _UGBO#L _GBO#L . #PUSH !b // save obj_flag #PUSH !Zb // save current_dep #PUSH !Zf // save the super_class_count #SET B$ (!b | 2) // set flag to in_class #SET ZB$ 0 // based on atomic class object #IF ( (!b & 1) = 0 ) // are we NOT in a create_object? #IFDEF !4.AGG // bump dep number by already #SET ZB$ !4.AGG // defined sub objects #ENDIF #ENDIF #SET ZF$ !Zb // save the super_class_count #PUSH !Zi // save current sub object count #SET ZI$ 0 // and init for new class #PUSH !x // save old property index #SET X$ 0 //init to first array index# (0) #SPUSH !$ // save the old class name #SET $$ !1 // retain the name of the class #IFDEF U_!1 // if the new class id has already #ELSE // been defined, dont bother INTEGER U_!1 // else put it into a int of that name #ENDIF #DATA // wind up the stream #IFDEF !4 #DPUSH !4 #ELSE #DPUSH U_!4 // based upon #ENDIF #IF (!0<5) #DPUSH |CI0 // no colors defined, use default #ELSE #DPUSH !5 // else do what they say #ENDIF #IF (!0<6) #DPUSH |CI0 // no colors defined, use default #ELSE #DPUSH !6 // else do what they say #ENDIF #IF (!0=7) // if parameter used, this will be #DPUSH |CS"!7" // the name of a 'C' function. #ELSE #DPUSH |CS"" // else inherit one from the parent #ENDIF !A [] CREATE$CLASS U_!1 |VL // let 'er rip #ENDCOMMAND =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Command: END_CLASS Parameters: None. Description: =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= JJT-5.1 #COMMAND END_CLASS . #SET ZI$ (!Zi+!Zf) //subobject count = self + superclass #REPLACE !$.AGG |CI!Zi //define subobject count !A [] END$CLASS U_!$ |CI!Zi #SPOP // restore the old class name #POP X$ // reset the property index #POP ZI$ // reset old sub_object_count #POP ZF$ // reset super_class_count #POP ZB$ // reset current_dep #POP B$ // reset obj_flag #ENDCOMMAND =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Command: PROPERTY Type Name PRIVATE | PUBLIC {InitialValue} Parameters: Type is a primitive DataFlex variable type, i.e. Integer, String... Name is the local name of the property PRIVATE indicates that no access handlers should be built PUBLIC indicates that access/set handlers should be built (default) InitialValue is the value the property is to have on creation Description: PROPERTY declares an attribute of a class, and optionally provides get and set handlers to manipulate its value. The class receiving the property is assumed to have defined an array-object named Attributes; properties will be stored in the Attributes array in the order in which they are declared. =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= JJT-5.1 #COMMAND PROPERTY R R """PRIVATE""PUBLIC" UGO . #IFSAME !3 PRIVATE PROPERTY !1 !$.!2 PUBLIC !4 #ELSE #IF (!b & 1) // in_object, instance method !A [] CLONE$CLASS // Create a new class #ENDIF #DATA // Start the property MESSAGE$ADDRESS GET_!2 #DPUSH GET_!2 // Push the get property id #FREG GET_!2 RETURNS !1 MESSAGE$ADDRESS SET_!2 #DPUSH SET_!2 // Push the set property id #DTYPE Q$ !1 // get the property type in q #DPUSH |CI!q // push the type #IF (!0 > 3) #DPUSH !4 #ELSE // 10/30/1997: If no default param is passed force #IFSAME !1 STRING // a default value. String types require #DPUSH |CS'' // a string, all others are numeric. This #ELSE // fixes a problem in the runtime where #DPUSH |CI0 // dates and numbers did not initialize properly #ENDIF // when no initial param was passed in the command #ENDIF !A [] CREATE$PROPERTY |CI0 |VL #ENDIF #ENDCOMMAND =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Command: CALL RoutineName {Parameters ...} Parameters: Description: =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
SEND !1 TO DESKTOP !2 !3 !4 !5 !6 !7 !8 !9