diff options
Diffstat (limited to 'os2/BldLevelInf.cmd')
-rw-r--r-- | os2/BldLevelInf.cmd | 570 |
1 files changed, 0 insertions, 570 deletions
diff --git a/os2/BldLevelInf.cmd b/os2/BldLevelInf.cmd deleted file mode 100644 index 40a85f3782a..00000000000 --- a/os2/BldLevelInf.cmd +++ /dev/null @@ -1,570 +0,0 @@ -/* $Id: BldLevelInf.cmd,v 1.5 2001/01/26 21:33:13 phaller Exp $ - * - * Adds a Description string to the given .def-file. - * Fills in default values; like build time and host. - * - */ - -if RxFuncQuery('SysLoadFuncs') = 1 then -do - call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'; - call SysLoadFuncs; -end - - -/* - * Set default parameter values. - */ -sDefFileIn = ''; -sDefFileOut = ''; -sASDFeatureId = ''; -sCountryCode = ''; -sDateTime = left(' 'date()' 'time(), 26); -sDescription = 'Odin32'; -sFixPakVer = ''; -sHostname = strip(substr(VALUE('HOSTNAME',,'OS2ENVIRONMENT'), 1, 11)); -sLanguageCode = ''; -sMiniVer = ''; -sVendor = 'Project Odin'; -sVersion = '0.5'; - - -/* - * Parse parameters. - */ -parse arg sArgs -if (sArgs = '') then -do - call syntax; - exit(1); -end - -do while (sArgs <> '') - sArgs = strip(sArgs); - if (substr(sArgs, 1, 1) = '-' | substr(sArgs, 1, 1) = '/') then - do /* - * Option. - */ - ch = translate(substr(sArgs, 2, 1)); - if (pos(ch, 'ACDHLMNPRTV') < 1) then - do - say 'invalid option:' substr(sArgs, 1, 2); - call syntax; - exit(2); - end - - /* get value and advance sArgs to next or to end. */ - if (substr(sArgs, 3, 1) = '"') then - do - iNext = pos('"', sArgs, 4); - fQuote = 1; - end - else - do - iNext = pos(' ', sArgs, 3); - if (iNext <= 0) then - iNext = length(sArgs); - fQuote = 0; - end - - if (iNext > 3 | ch = 'R') then - do - sValue = substr(sArgs, 3 + fQuote, iNext - 3 - fQuote); - sArgs = strip(substr(sArgs, iNext+1)); - /*say 'iNext:' iNext 'sValue:' sValue 'sArgs:' sArgs; */ - - /* check if we're gonna search for something in an file. */ - if (sValue <> '' & pos('#define=', sValue) > 0) then - sValue = LookupDefine(sValue); - end - else - do - say 'syntax error near' substr(sArgs, 1, 2)'.'; - call syntax; - exit(3); - end - - - /* set value */ - select - when (ch = 'A') then /* ASD Feature Id */ - sASDFeatureId = sValue; - - when (ch = 'C') then /* Country code */ - sCountryCode = sValue; - - when (ch = 'D') then /* Description */ - sDescription = sValue; - - when (ch = 'H') then /* Hostname */ - sHostname = sValue; - - when (ch = 'L') then /* Language code */ - sLanguageCode = sValue; - - when (ch = 'M') then /* MiniVer */ - sMiniVer = sValue; - - when (ch = 'N') then /* Vendor */ - sVendor = sValue; - - when (ch = 'R') then /* Vendor */ - sDescription = ReadDescription(sValue, sDefFile); - - when (ch = 'P') then /* Fixpak version */ - sFixPakVer = sValue; - - when (ch = 'T') then /* Date Time */ - sDateTime = sValue; - - when (ch = 'V') then /* Version */ - sVersion = sValue; - - /* Otherwise it's an illegal option */ - otherwise - say 'invalid option:' substr(sArgs, 1, 2); - call syntax; - exit(2); - end /* select */ - end - else - do /* - * Defition file... - */ - if (sDefFileOut <> '') then - do - say 'Syntax error: Can''t specify more than two defintion files!'; - exit(4); - end - if (sDefFileIn = '') then - parse value sArgs with sDefFileIn' 'sArgs - else - parse value sArgs with sDefFileOut' 'sArgs - sArgs = strip(sArgs); - end -end - - -/* check that a defintion file was specified. */ -if (sDefFileIn = '') then -do - say 'Syntax error: Will have to specify a .def-file to update.'; - call syntax; - exit(5); -end - - -/* - * Trim strings to correct lengths. - */ -sVendor = strip(substr(sVendor, 1, 31)); -if (substr(sDateTime, 1, 1) <> ' ') then - sDateTime = ' ' || sDateTime; -sDateTime = left(sDateTime, 26); -sHostname = strip(substr(sHostname, 1, 11)); -sMiniVer = strip(substr(sMiniVer, 1, 11)); -sDescription = strip(substr(sDescription, 1, 80)); -sCountryCode = strip(substr(sCountryCode, 1, 4)); -sLanguageCode = strip(substr(sLanguageCode, 1, 4)); -sASDFeatureId = strip(substr(sASDFeatureId, 1, 11)); -sFixPakVer = strip(substr(sFixPakVer, 1, 11)); - - -/* - * Signature - */ -sEnhSign = '##1##' - -/* - * Build description string. - */ -sDescription = '@#'sVendor':'sVersion'#@'sEnhSign||, - sDateTime||sHostname||, - ':'sASDFeatureId':'sLanguageCode':'sCountryCode':'sMiniVer||, - '::'sFixPakVer'@@'sDescription; - -/* - * Update .def-file. - */ -call SysFileDelete(sDefFileIn); -rc = lineout( sDefFileIn, 'RCDATA 1 { "' || sDescription || '" }'); - -/*rc = UpdateDefFile(sDefFileIn, sDefFileOut, sDescription);*/ -exit(rc); - - -/** - * Display script syntax. - */ -syntax: procedure - say 'Syntax: MakeDesc.cmd [options] <deffile in> <deffile out> [options]' - say ' <deffile> Defitionfile which will have an DESCRIPTION appended.' - say 'Options:' - say ' -A<string> ASD Feature Id.' - say ' -C<string> Country code.' - say ' -D<string> Description.' - say ' -R[deffile] Read description from .def file.' - say ' -H<string> Hostname.' - say ' -L<string> Language code.' - say ' -M<string> MiniVer.' - say ' -N<string> Vendor.' - say ' -P<string> Fixpak version.' - say ' -T<string> Date Time.' - say ' -V<string> Version.' - say '<string> could be a double qoute qouted string or a single word.' - say ' You could also reference #defines in C/C++ include files.' - say ' The string should then have this form:' - say ' "#define=<DEFINE_NAME>,<includefile.h>"' - say ''; - - return; - - -/** - * Search for a #define in an C/C++ header or source file. - * - * @returns String containing the defined value - * found for the define in the header file. - * Quits on fatal errors. - * @param A string on the form: "#define=DEFINETOFIND,includefile.h" - * @remark Write only code... - let's hope it works. - */ -LookupDefine: procedure - parse arg '#'sDefine'='sMacro','sIncludeFile - - /* - * Validate parameters. - */ - sMacro = strip(sMacro); - sIncludeFile = strip(sIncludeFile); - if (sMacro = '') then - do - say 'syntax error: #define=<DEFINE_NAME>,<includefile.h>.'; - say ' <DEFINE_NAME> was empty.'; - exit(-20); - end - if (sIncludeFile = '') then - do - say 'syntax error: #define=<DEFINE_NAME>,<includefile.h>.'; - say ' <includefile.h> was empty.'; - exit(-20); - end - - - sIllegal = translate(translate(sMacro),, - '!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!',, - 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_'); - - if (strip(translate(sIllegal, ' ', '!')) <> '') then - do - say 'syntax error: #define=<DEFINE_NAME>,<includefile.h>.'; - say ' <DEFINE_NAME> contains illegal charater(s).' - say ' 'sMacro; - say ' 'translate(sIllegal, ' ', '!'); - exit(-20); - end - - /* - * Open include file. - */ - sRc = stream(sIncludeFile, 'c', 'open read'); - if (pos('READY', sRc) <> 1) then - do /* search INCLUDE variable */ - sFile = SysSearchPath('INCLUDE', sIncludeFile); - if (sFile = '') then - do - say 'Can''t find include file 'sIncludeFile'.'; - exit(-20); - end - sIncludeFile = sFile; - - sRc = stream(sIncludeFile, 'c', 'open read'); - if (pos('READY', sRc) <> 1) then - do - say 'Failed to open include file' sIncludeFile'.'; - exit(-20); - end - end - - /* - * Search the file line by line. - * We'll check for lines starting with a hash (#) char. - * Then check that the word after the hash is 'define'. - * Then match the next word with the macro name. - * Then then get the next rest of the line to comment or continuation char. - * (continuation is not supported) - * Finally strip quotes. - */ - sValue = ''; - do while (lines(sIncludeFile) > 0) - sLine = strip(linein(sIncludeFile)); - if (sLine = '') then - iterate; - if (substr(sLine, 1, 1) <> '#') then - iterate; - sLine = substr(sLine, 2); - if (word(sLine, 1) <> 'define') then - iterate; - sLine = strip(substr(sLine, wordpos(sLine, 1) + length('define')+1)); - if ( substr(sLine, 1, length(sMacro)) <> sMacro, - | substr(sLine, length(sMacro)+1, 1) <> ' ') then - iterate; - sLine = strip(substr(sLine, length(sMacro) + 1)); - if (sLine = '') then - do - say 'error: #define' sMacro' is empty.'; - call stream sIncludeFile, 'c', 'close'; - exit(-20); - end - - chQuote = substr(sLine, 1, 1); - if (chQuote = '"' | chQuote = "'") then - do /* quoted string */ - iLastQuote = 0; - do forever - iLast = pos(chQuote, sLine, 2); - if (iLast <= 0) then - leave; - if (substr(sLine, iLast, 1) = '\') then - iterate; - iLastQuote = iLast; - leave; - end - - if (iLastQuote <= 0) then - do - say 'C/C++ syntax error in 'sIncludefile': didn''t find end quote.'; - call stream sIncludeFile, 'c', 'close'; - exit(-20); - end - - call stream sIncludeFile, 'c', 'close'; - sValue = substr(sLine, 2, iLastQuote - 2); - say 'Found 'sMacro'='sValue; - return sValue; - end - else - do - iCommentCPP = pos('//',sLine); - iCommentC = pos('/*',sLine); - if (iCommentC > 0 & iCommentCPP > 0 & iCommentC > iCommentCPP) then - iComment = iCommentCPP; - else if (iCommentC > 0 & iCommentCPP > 0 & iCommentC < iCommentCPP) then - iComment = iCommentC; - else if (iCommentCPP > 0) then - iComment = iCommentCPP; - else if (iCommentC > 0) then - iComment = iCommentC; - else - iComment = 0; - - if (iComment > 0) then - sValue = strip(substr(sLine, 1, iComment-1)); - else - sValue = strip(sLine); - - if (sValue <> '') then - do - if (substr(sValue, length(sValue)) = '\') then - do - say 'Found continuation char: Multiline definitions are not supported!\n'; - call stream sIncludeFile, 'c', 'close'; - exit(-20); - end - end - - if (sValue = '') then - say 'warning: The #define has no value.'; - - call stream sIncludeFile, 'c', 'close'; - say 'Found 'sMacro'='sValue; - return sValue; - end - end - - call stream sIncludeFile, 'c', 'close'; - say 'error: didn''t find #define' sMacro'.'; - exit(-20); - - - -/** - * Reads the description line for a .def-file. - * @returns The Description string, with quotes removed. - * Empty string is acceptable. - * On error we'll terminate the script. - * @param sDefFile Filaname of .def-file to read the description from. - * @param sDefFile2 Used if sDefFile is empty. - * @author knut st. osmundsen (knut.stange.osmundsen@mynd.no) - */ -ReadDescription: procedure; - parse arg sDefFile, sDefFile2 - - /* - * Validate parameters. - */ - if (sDefFile = '') then - sDefFile = sDefFile2; - if (sDefFile = '') then - do - say 'error: no definition file to get description from.' - exit(-1); - end - - /* - * Open file - */ - rc = stream(sDefFile, 'c', 'open read'); - if (pos('READY', rc) <> 1) then - do - say 'error: failed to open deffile file.'; - exit(-1); - end - - - /* - * Search for the 'DESCRIPTION' line. - */ - do while (lines(sDefFile) > 0) - sLine = strip(linein(sDefFile)); - if (sLine = '') then - iterate; - if (translate(word(sLine, 1)) <> 'DESCRIPTION') then - iterate; - sLine = strip(substr(sLine, wordpos(sLine, 1) + length('DESCRIPTION')+1)); - - ch = substr(sLine, 1, 1); - if (ch <> "'" & ch <> '"') then - do - say 'syntax error: description line in' sDefFile 'is misformed.'; - call stream sDefFile, 'c', 'close'; - exit(-10); - end - - iEnd = pos(ch, sLine, 2); - if (iEnd <= 0) then - do - say 'syntax error: description line in' sDefFile 'is misformed.'; - call stream sDefFile, 'c', 'close'; - exit(-10); - end - - call stream sDefFile, 'c', 'close'; - sValue = substr(sLine, 2, iEnd - 2); - say 'Found Description:' sValue; - return sValue; - end - - call stream sDefFile, 'c', 'close'; - say 'info: Didn''t find description line in' sDefFile'.'; - return ''; - - -/** - * This is a function which reads sDefFileIn into and - * internal array and changes the DESCRIPTION text if found. - * If DESCRIPTION isn't found, it is added at the end. - * The array is written to sDefFileOut. - * @returns 0 on succes. - * Errorcode on error. - * @param sDefFileIn Input .def-file. - * @param sDefFileOut Output .def-file. Overwritten. - * @param sDescription New description string. - * @author knut st. osmundsen (knut.stange.osmundsen@mynd.no) - */ -UpdateDefFile: procedure; - parse arg sDefFileIn, sDefFileOut, sDescription - - /* - * Validate parameters. - */ - if (sDefFileOut = '') then - sDefFileOut = sDefFileIn; - - /* - * Open file input file. - */ - rc = stream(sDefFileIn, 'c', 'open read'); - if (pos('READY', rc) <> 1) then - do - say 'error: failed to open' sDefFileIn 'file.'; - return 110; - end - - - /* - * Search for the 'BLDLEVEL' line. - */ - i = 0; - fDescription = 0; - do while (lines(sDefFileIn) > 0) - /* - * Read line. - */ - i = i + 1; - asFile.i = linein(sDefFileIn); - - /* - * Look for BLDLEVEL; - */ - if (asFile.i = '') then - iterate; - if (translate(word(strip(asFile.i), 1)) <> 'BLDLEVEL') then - iterate; - if (fDescription) then - do - say 'warning: multiple descriptions lines. Line' i 'removed'; - i = i - 1; - iterate; - end - - /* - * Found description - replace with new description. - */ - asFile.i = "BldLevel = '"||sDescription||"'"; - fDescription = 1; - end - - /* - * Add description is none was found. - */ - if (\fDescription) then - do - i = i + 1; - asFile.i = "BldLevel = '"||sDescription||"'"; - end - asFile.0 = i; - - - /* - * Close input file and open output file. - */ - call stream sDefFileIn, 'c', 'close'; - call SysFileDelete(sDefFileOut); - rc = stream(sDefFileOut, 'c', 'open write'); - if (pos('READY', rc) <> 1) then - do - say 'error: failed to open outputfile' sDefFileOut 'file.'; - return 110; - end - - /* - * Make firstline and write all the lines to the output file. - */ - /*call lineout sDefFileOut, '; Updated by makedesc.cmd', 1;*/ - do i = 1 to asFile.0 - rc = lineout(sDefFileOut, asFile.i); - if (rc > 0) then - do - say 'error: failed to write line' i 'to' sDefFileOut'.' - call stream sDefFileOut, 'c', 'close'; - return 5; - end - end - - /* - * Close output file and return succesfully. - */ - call stream sDefFileOut, 'c', 'close'; - return 0; - |