@=~ ~p typesetter = texinfo ~p maximum_input_line_length = infinity ********************************************************************** Generierung der Dateien ~O~~{ ~ ~} ~O~~{ ~ ~} ~O~~{ ~ ~} ~O~~{ ~ ~} ******************************************** Makros zum Setzen und Transportieren von Werten ~$~+=~{ #ifdef __STDC__ #define STR(attr) #attr #else #define STR(attr) "attr" #endif #define SETPERS_STRING(attr, value) \ IF(strcmp(THIS.attr,value), PTGBasicCheckExecute(2,PTGSetAttr(_currn,STR(attr),value))) #define SETPERS_INT(attr, value) \ IF(NOT(EQ(THIS.attr,value)), PTGBasicCheckExecute(2,PTGSetAttr2(_currn,STR(attr),PTGNumb(value)))) #define DEFPERS_STRING(attr, value) \ IF(NOT(strcmp(THIS.attr,"")),SETPERS_STRING(attr,value)) #define VLTYPE_STRING VLCharPtr /* BUG: ersetzen durch VLString */ #define VLTYPE_INT int ~} Arg1: Datentyp (INT, STRING) Arg2: Quellsymbol (wird auch zur Namensgenerierung genutzt) Arg3: Quellattribut (z.B: THIS.attr) Arg4: Name der Querverbindung (z.B: attr) Arg5: Name der Property (wird auch zur Namensgenerierung genutzt) Arg6: Zielsymbol Arg7: persistentes Zielattribut (z.B: persAttr) Arg8: Defaultwert, wenn keine Verbindung existiert ~! SETPERS_~1(~7,Get~5(KEYOF(THIS.~4), ~8)) <- INCLUDING ROOTCLASS.all~2_~5Defined; ~$~~(~8~)~Z~M==~{ SYMBOL ROOT COMPUTE SYNT.all~2_~5Defined = CONSTITUENTS ~2.~5Defined; END; SYMBOL ~2 COMPUTE SYNT.~5Defined = Reset~5(KEYOF(THIS.~4), ~3); END; SYMBOL ~6: tmp_~7: VLTYPE_~1; SYMBOL ~6 COMPUTE SYNT.tmp_~7 = Get~5(KEYOF(THIS.~4), ~8) <- INCLUDING ROOTCLASS.all~2_~5Defined; SETPERS_~1(~7,THIS.tmp_~7); END; ~} ********************************************************************** Symbolklassen ~$~+=~{ SYMBOL TableInstanceHeadElement INHERITS TableInstanceElementClass END; SYMBOL TableInstanceLineElement INHERITS TableInstanceElementClass END; SYMBOL TableDefinitionClass: tableName: VLCharPtr; SYMBOL FieldDefinitionClass: fieldName: VLCharPtr; SYMBOL TableDefinition INHERITS TableDefinitionClass COMPUTE SYNT.tableName=CONSTITUENT TableName.persName; END; SYMBOL Field INHERITS FieldDefinitionClass COMPUTE SYNT.fieldName=CONSTITUENT FieldName.persName; END; SYMBOL Query INHERITS TableDefinitionClass COMPUTE SYNT.tableName=CONSTITUENT QueryName.persName; END; SYMBOL PrintAs INHERITS FieldDefinitionClass COMPUTE SYNT.fieldName=THIS.persName; END; ~} ********************************************************************** Tabellen-Instanziierung ~$~+=~{ $/Visual/InstanceModule.gnrc+instance=TableHead+referto=persTable:inst $/Visual/InstanceModule.gnrc+instance=TableLine+referto=persTable:inst ~} ~$~+=~{ SYMBOL ROOTCLASS COMPUTE PTGBasicCheckExecute(1,PTGAsIs("")); PTGBasicCheckExecute(1,PTGAsIs("")); END; SYMBOL TableInstanceLine: persTableDefInstConnection: VLPropertyPtr; /* praefix "pers" muss aus technischen Gruenden gewaehlt werden */ SYMBOL TableInstanceLine COMPUTE SYNT.persTableDefInstConnection=INCLUDING TableInstance.persTableDefInstConnection; END; /* Generierung der Tabellenkoepfe von Queries */ SYMBOL TableDefinitionClass INHERITS IM_TableHeadDefinition END; SYMBOL FieldDefinitionClass INHERITS IM_TableHeadInterface COMPUTE SYNT.IM_OblTableHeadInterfaceRepProduction="pTableHeadElem"; END; SYMBOL TableInstance INHERITS IM_TableHeadInstance COMPUTE SYNT.IM_OptObtainTableHeadPortOrder=1; END; SYMBOL TableInstanceHeadElement INHERITS IM_TableHeadInterfaceRep END; SYMBOL _List_TableInstanceHeadElement INHERITS IM_TableHeadInterfaceRepCreationNode END; /* Analog fuer die Tabellenzeilen von Queries */ SYMBOL TableDefinitionClass INHERITS IM_TableLineDefinition END; SYMBOL FieldDefinitionClass INHERITS IM_TableLineInterface COMPUTE SYNT.IM_OblTableLineInterfaceRepProduction="pTableLineElem"; END; SYMBOL TableInstanceLine INHERITS IM_TableLineInstance COMPUTE SYNT.IM_OptObtainTableLinePortOrder=1; END; SYMBOL TableInstanceLineElement INHERITS IM_TableLineInterfaceRep END; SYMBOL _List_TableInstanceLineElement INHERITS IM_TableLineInterfaceRepCreationNode END; ~} ********************************************************************* Transportieren der Werte ~$~+=~{ SYMBOL TableInstanceHeadElement: pers3Name: VLString; SYMBOL TableInstanceLineElement: pers3Name: VLString; SYMBOL TableInstance: pers3TableDefName: VLString; ~} ~$~+=~{ Name: VLCharPtr; ~} ~$~+=~{ ~~(STRING~,TableDefinitionClass~,THIS.tableName~, persTableDefInstConnection~,Name~,TableInstance~,pers3TableDefName~,"(deleted)"~) ~~(STRING~,FieldDefinitionClass~,THIS.fieldName~, persTableInterfaceDefInstConnection~,Name~,TableInstanceElementClass~,pers3Name~,"error"~) ~} ************************************************************** Generierung eindeutiger Namen ~$~+=~{ $/Visual/AutoNameModule.gnrc+referto=persName:inst ~} ~$~+=~{ SYMBOL Queries: persAutoNameCounter: VLInt; SYMBOL TableDefinitions: persAutoNameCounter: VLInt; SYMBOL Fields: persAutoNameCounter: VLInt; ~} ~$~+=~{ SYMBOL Queries INHERITS AutoNameRoot COMPUTE SYNT.AutoNamePrefix="Query"; END; SYMBOL QueryName INHERITS AutoNameClass END; SYMBOL TableDefinitions INHERITS AutoNameRoot COMPUTE SYNT.AutoNamePrefix="Table"; END; SYMBOL TableName INHERITS AutoNameClass END; SYMBOL Fields INHERITS AutoNameRoot COMPUTE SYNT.AutoNamePrefix="Field"; END; SYMBOL FieldName INHERITS AutoNameClass END; ~}