Back to home page

Enduro/X

 
 

    


0001 #!/usr/bin/pscript
0002 
0003 userlog("Generate UBF table files");
0004 
0005 //Include wizard base.
0006 compilestring(getwizardbase())();
0007 
0008 //Provision class
0009 class UBFTab extends WizardBase {
0010 
0011         constructor()
0012         {
0013                 base.constructor();
0014         }
0015         
0016         //Configure it:
0017         </ order=0, name = "UBF Table name (.fd will be added)", type = "string", min=1, max=512 /> 
0018         table_name = "test";
0019 
0020         </ order=1, name = "Base number", type = "number", min=0/> 
0021         base_number = "6000";
0022         
0023         </ order=2, name = "Add test fields", type = "yn"/> 
0024         testfields = "y";
0025         
0026         </ order=3, name = "Gen Exfields", type = "yn"/> 
0027         genexfields = "y";
0028         
0029         </ order=4, name = "Gen makefile", type = "yn"/> 
0030         genmake = "y";
0031         
0032         </ order=5, name = "Target language (c/go/java)", type = "string"
0033                 depend="(::prov.genmake==\"y\")" regex="^c|go|java$" /> 
0034         makeLang = "c";
0035         
0036         </ order=6, name = "Go Pakcage name", type = "string", 
0037                 depend="(::prov.genmake==\"go\")" /> 
0038         go_pkg_name = "ubftab";
0039         
0040         tabFile = "";
0041         exfieldsFile = "";
0042         makeFile = "";
0043         makeFileCommon = "";
0044         
0045         function getOutputFiles()
0046         {
0047                 tabFile=appHome+"/"+table_name+".fd";
0048                 exfieldsFile=appHome+"/Exfields";
0049                 
0050                 makeFileCommon=appHome+"/Makefile";
0051                 
0052                 if (makeLang=="c")
0053                 {
0054                         makeFile=appHome+"/Mclang";
0055                 }
0056                 else if (makeLang=="go")
0057                 {
0058                         makeFile=appHome+"/Mgolang";
0059                 }
0060                 else if (makeLang=="java")
0061                 {
0062                         makeFile=appHome+"/Mjava";
0063                 }
0064         }
0065         
0066         ////////////////////////////////////////////////////////////////////////
0067         //Table file
0068         ////////////////////////////////////////////////////////////////////////
0069         tabFileVal = "";
0070         function buildTabFile()
0071         {
0072         
0073                 tabFileVal = @"
0074 $#ifndef __"+table_name.toupper()+@"_FD
0075 $#define __"+table_name.toupper()+@"_FD
0076 
0077 *base "+base_number.tostring()+@"
0078 
0079 "+(testfields=="y"?@"
0080 T_CHAR_FLD              11      char    - 1 Chart test field 1
0081 T_CHAR_2_FLD            12      char    - 1 Chart test field 2
0082 T_SHORT_FLD             21      short   - 1 Short test field 1
0083 T_SHORT_2_FLD           22      short   - 1 Short test field 2
0084 T_LONG_FLD              31      long    - 1 Long test field 1
0085 T_LONG_2_FLD            32      long    - 1 Long test field 2
0086 T_FLOAT_FLD             41      float   - 1 Float test field 1
0087 T_FLOAT_2_FLD           42      float   - 1 Float test field 2
0088 T_FLOAT_3_FLD           43      float   - 1 Float test field 3
0089 T_DOUBLE_FLD            51      double  - 1 Double test field 1
0090 T_DOUBLE_2_FLD          52      double  - 1 Double test field 2
0091 T_DOUBLE_3_FLD          53      double  - 1 Double test field 3
0092 T_DOUBLE_4_FLD          54      double  - 1 Double test field 4
0093 T_STRING_FLD            61      string  - 1 String test field 1
0094 T_STRING_2_FLD          62      string  - 1 String test field 2
0095 T_STRING_3_FLD          63      string  - 1 String test field 3
0096 T_STRING_4_FLD          64      string  - 1 String test field 4
0097 T_STRING_5_FLD          65      string  - 1 String test field 5
0098 T_STRING_6_FLD          66      string  - 1 String test field 6
0099 T_STRING_7_FLD          67      string  - 1 String test field 7
0100 T_STRING_8_FLD          68      string  - 1 String test field 8
0101 T_STRING_9_FLD          69      string  - 1 String test field 9
0102 T_STRING_10_FLD         10      string  - 1 String test field 10
0103 T_CARRAY_FLD            81      carray  - 1 Carray test field 1
0104 T_CARRAY_2_FLD          82      carray  - 1 Carray test field 2
0105 ":"")+@"
0106 
0107 $#endif
0108 ";
0109         }
0110         
0111         
0112         ////////////////////////////////////////////////////////////////////////
0113         //Build makefile, END
0114         ////////////////////////////////////////////////////////////////////////
0115         makeFileVal = "";
0116         function buildMakefile()
0117         {
0118                 //Get the suffix
0119                 local suffix = "";
0120                 local langMode = "";
0121                 if (makeLang=="c")
0122                 {
0123                         suffix = ".h";
0124                         langMode = "0"; //It is c
0125                 }
0126                 else
0127                 {
0128                         suffix = ".go";
0129                         langMode = "1"; //It is go
0130                 }
0131                 
0132                 if (makeLang=="java")
0133                 {
0134                     makeFileVal = @"
0135 JAVAC=javac
0136 SOURCEDIR=.
0137 SOURCES := $(wildcard *.fd)
0138 SOURCES += Exfields
0139 
0140 OUTPUT = $(addsuffix .java, $(basename $(SOURCES)))
0141 CLASS = $(addsuffix .class, $(basename $(SOURCES)))
0142 
0143 comma:= ,
0144 empty:=
0145 space:= $(empty) $(empty)
0146 
0147 export FIELDTBLS=$(subst $(space),$(comma),$(SOURCES))
0148 export FLDTBLDIR=$(shell pwd)
0149 unexport NDRX_CCONFIG
0150 
0151 $(info $$SOURCES is [${SOURCES}])
0152 $(info $$CLASS is [${CLASS}])
0153 $(info $$OUTPUT is [${OUTPUT}])
0154 $(info $$FIELDTBLS is [${FIELDTBLS}])
0155 
0156 PACKAGE=ubftab.jar
0157 
0158 %.java : $(SOURCES)
0159         mkfldhdr -m2 $(SOURCES)
0160 
0161 %.class : %.java
0162         $(JAVAC) $(basename $<).java
0163 
0164 $(PACKAGE) : $(CLASS)
0165         @echo ""Manifest-Version: 1.0"" > manifest.txt
0166         @echo ""Class-Path: ."" >> manifest.txt
0167         jar -cmf manifest.txt ${PACKAGE} $(CLASS)
0168         - rm manifest.txt
0169 
0170 .PHONY: clean
0171 clean:
0172         - rm *.java *.class *.jar manifest.txt
0173 ";
0174                 }
0175                 else
0176                 {
0177                     makeFileVal = @"
0178 SOURCEDIR=.
0179 SOURCES := $(shell find $(SOURCEDIR) -name '*.fd')
0180 "+(genexfields=="y"?"SOURCES += Exfields":"")+@"
0181 
0182 OUTPUT = $(addsuffix "+suffix+@", $(SOURCES))
0183 
0184 comma:= ,
0185 empty:=
0186 space:= $(empty) $(empty)
0187 
0188 export FIELDTBLS=$(subst $(space),$(comma),$(SOURCES))
0189 export FLDTBLDIR=$(shell pwd)
0190 unexport NDRX_CCONFIG
0191 
0192 $(info $$SOURCES is [${SOURCES}])
0193 $(info $$OUTPUT is [${OUTPUT}])
0194 $(info $$FIELDTBLS is [${FIELDTBLS}])
0195 
0196 PACKAGE="+go_pkg_name+@"
0197 
0198 .DEFAULT_GOAL: $(OUTPUT)
0199 LDFLAGS=
0200 
0201 $(OUTPUT): $(SOURCES)
0202         mkfldhdr -m"+langMode+@" -p${PACKAGE}
0203 "+ (makeLang=="go"? @"  go build ${LDFLAGS} -o ${PACKAGE} *.go
0204         go install ${LDFLAGS} ./...":"")+@"
0205 
0206 .PHONY: clean
0207 clean:
0208         - rm *"+suffix+@"
0209 ";
0210             }
0211         }
0212         
0213         ////////////////////////////////////////////////////////////////////////
0214         //Build makefile, END
0215         ////////////////////////////////////////////////////////////////////////
0216         makeFileCommonVal = "";
0217         function makeFileCommonGen()
0218         {
0219                 
0220                 makeFileCommonVal = @"
0221 .DEFAULT_GOAL: all
0222 .PHONY: clean all
0223 
0224 all:
0225         -$(MAKE) -f Mclang
0226         -$(MAKE) -f Mgolang
0227         -$(MAKE) -f Mjava
0228 clean:
0229         -$(MAKE) -f Mclang clean
0230         -$(MAKE) -f Mgolang clean
0231         -$(MAKE) -f Mjava clean
0232 ";
0233         }
0234 }
0235 
0236 //Run the mater installer
0237 function install() 
0238 {
0239         local root = getroottable();
0240 
0241         //Create a provision object
0242         root["prov"] <- UBFTab();
0243 
0244         if (!::prov.isDefaulted)
0245         {
0246                 ::prov.runInteractive();
0247         }
0248 
0249         if (::prov.validatAndPrintConfig())
0250         {
0251                 ::prov.getOutputFiles();
0252                 ::prov.buildTabFile();
0253 
0254                 if (!::prov.writeFile(::prov.tabFile, ::prov.tabFileVal))
0255                 {
0256                         return false;
0257                 }
0258                 
0259                 //Write Exfields if requested...
0260                 if ("y"==::prov.genexfields)
0261                 {
0262                         if (root.rawin("getExfields"))
0263                         {
0264                                 if (!::prov.writeFile(::prov.exfieldsFile, ::getExfields()))
0265                                 {
0266                                         return false;
0267                                 }
0268                         }
0269                 }
0270                 
0271                 //Build makefile if needed...
0272                 if ("y"==::prov.genmake)
0273                 {
0274                         ::prov.buildMakefile();
0275                         
0276                         if (!::prov.writeFile(::prov.makeFile, ::prov.makeFileVal))
0277                         {
0278                                 return false;
0279                         }
0280                         
0281                         ::prov.makeFileCommonGen();
0282                         
0283                         if (!::prov.writeFile(::prov.makeFileCommon, 
0284                                 ::prov.makeFileCommonVal))
0285                         {
0286                                 return false;
0287                         }
0288                 }
0289         }
0290         else
0291         {
0292                 return false;
0293         }
0294 
0295         return true;
0296 }
0297 
0298 if (::install())
0299 {
0300         print("Gen ok!\n");
0301         
0302         return 0;
0303 }
0304 else
0305 {
0306         print("Gen failed!\n");
0307         return -1;
0308 }