Changeset 9201 for trunk/tools


Ignore:
Timestamp:
Sep 3, 2002, 8:41:28 PM (23 years ago)
Author:
bird
Message:

Wrote syslevel checker routine. syslevel.exe doesn't work the same on all systems.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/bin/buildenv.cmd

    r9192 r9201  
    1 /* $Id: buildenv.cmd,v 1.27 2002-09-02 15:16:32 bird Exp $
     1/* $Id: buildenv.cmd,v 1.28 2002-09-03 18:41:28 bird Exp $
    22 *
    33 * This is the master tools environment script. It contains environment
     
    2727     * Version
    2828     */
    29     sVersion = '1.0.5 [2002-08-30]';
     29    sVersion = '1.0.6 [2002-09-03]';
    3030
    3131    /*
     
    11091109
    11101110/**
     1111 * Add sToAdd in front of sEnvVar.
     1112 * Note: sToAdd now is allowed to be alist!
     1113 *
     1114 * Known features: Don't remove sToAdd from original value if sToAdd
     1115 *                 is at the end and don't end with a ';'.
     1116 */
     1117EnvAddFront: procedure
     1118    parse arg fRM, sEnvVar, sToAdd, sSeparator
     1119
     1120    /* sets default separator if not specified. */
     1121    if (sSeparator = '') then sSeparator = ';';
     1122
     1123    /* checks that sToAdd ends with an ';'. Adds one if not. */
     1124    if (substr(sToAdd, length(sToAdd), 1) <> sSeparator) then
     1125        sToAdd = sToAdd || sSeparator;
     1126
     1127    /* check and evt. remove ';' at start of sToAdd */
     1128    if (substr(sToAdd, 1, 1) = ';') then
     1129        sToAdd = substr(sToAdd, 2);
     1130
     1131    /* loop thru sToAdd */
     1132    rc = 0;
     1133    i = length(sToAdd);
     1134    do while i > 1 & rc = 0
     1135        j = lastpos(sSeparator, sToAdd, i-1);
     1136        rc = EnvAddFront2(fRM, sEnvVar, substr(sToAdd, j+1, i - j), sSeparator);
     1137        i = j;
     1138    end
     1139
     1140return rc;
     1141
     1142/**
     1143 * Add sToAdd in front of sEnvVar.
     1144 *
     1145 * Known features: Don't remove sToAdd from original value if sToAdd
     1146 *                 is at the end and don't end with a ';'.
     1147 */
     1148EnvAddFront2: procedure
     1149    parse arg fRM, sEnvVar, sToAdd, sSeparator
     1150
     1151    /* sets default separator if not specified. */
     1152    if (sSeparator = '') then sSeparator = ';';
     1153
     1154    /* checks that sToAdd ends with a separator. Adds one if not. */
     1155    if (substr(sToAdd, length(sToAdd), 1) <> sSeparator) then
     1156        sToAdd = sToAdd || sSeparator;
     1157
     1158    /* check and evt. remove the separator at start of sToAdd */
     1159    if (substr(sToAdd, 1, 1) = sSeparator) then
     1160        sToAdd = substr(sToAdd, 2);
     1161
     1162    /* Get original variable value */
     1163    sOrgEnvVar = EnvGet(sEnvVar);
     1164
     1165    /* Remove previously sToAdd if exists. (Changing sOrgEnvVar). */
     1166    i = pos(translate(sToAdd), translate(sOrgEnvVar));
     1167    if (i > 0) then
     1168        sOrgEnvVar = substr(sOrgEnvVar, 1, i-1) || substr(sOrgEnvVar, i + length(sToAdd));
     1169
     1170    /* set environment */
     1171    if (fRM) then
     1172        return EnvSet(0, sEnvVar, sOrgEnvVar);
     1173return EnvSet(0, sEnvVar, sToAdd||sOrgEnvVar);
     1174
     1175
     1176/**
     1177 * Add sToAdd as the end of sEnvVar.
     1178 * Note: sToAdd now is allowed to be alist!
     1179 *
     1180 * Known features: Don't remove sToAdd from original value if sToAdd
     1181 *                 is at the end and don't end with a ';'.
     1182 */
     1183EnvAddEnd: procedure
     1184    parse arg fRM, sEnvVar, sToAdd, sSeparator
     1185
     1186    /* sets default separator if not specified. */
     1187    if (sSeparator = '') then sSeparator = ';';
     1188
     1189    /* checks that sToAdd ends with a separator. Adds one if not. */
     1190    if (substr(sToAdd, length(sToAdd), 1) <> sSeparator) then
     1191        sToAdd = sToAdd || sSeparator;
     1192
     1193    /* check and evt. remove ';' at start of sToAdd */
     1194    if (substr(sToAdd, 1, 1) = sSeparator) then
     1195        sToAdd = substr(sToAdd, 2);
     1196
     1197    /* loop thru sToAdd */
     1198    rc = 0;
     1199    i = length(sToAdd);
     1200    do while i > 1 & rc = 0
     1201        j = lastpos(sSeparator, sToAdd, i-1);
     1202        rc = EnvAddEnd2(fRM, sEnvVar, substr(sToAdd, j+1, i - j), sSeparator);
     1203        i = j;
     1204    end
     1205
     1206return rc;
     1207
     1208/**
     1209 * Add sToAdd as the end of sEnvVar.
     1210 *
     1211 * Known features: Don't remove sToAdd from original value if sToAdd
     1212 *                 is at the end and don't end with a ';'.
     1213 */
     1214EnvAddEnd2: procedure
     1215    parse arg fRM, sEnvVar, sToAdd, sSeparator
     1216
     1217    /* sets default separator if not specified. */
     1218    if (sSeparator = '') then sSeparator = ';';
     1219
     1220    /* checks that sToAdd ends with a separator. Adds one if not. */
     1221    if (substr(sToAdd, length(sToAdd), 1) <> sSeparator) then
     1222        sToAdd = sToAdd || sSeparator;
     1223
     1224    /* check and evt. remove separator at start of sToAdd */
     1225    if (substr(sToAdd, 1, 1) = sSeparator) then
     1226        sToAdd = substr(sToAdd, 2);
     1227
     1228    /* Get original variable value */
     1229    sOrgEnvVar = EnvGet(sEnvVar);
     1230
     1231    if (sOrgEnvVar <> '') then
     1232    do
     1233        /* Remove previously sToAdd if exists. (Changing sOrgEnvVar). */
     1234        i = pos(translate(sToAdd), translate(sOrgEnvVar));
     1235        if (i > 0) then
     1236            sOrgEnvVar = substr(sOrgEnvVar, 1, i-1) || substr(sOrgEnvVar, i + length(sToAdd));
     1237
     1238        /* checks that sOrgEnvVar ends with a separator. Adds one if not. */
     1239        if (sOrgEnvVar = '') then
     1240            if (right(sOrgEnvVar,1) <> sSeparator) then
     1241                sOrgEnvVar = sOrgEnvVar || sSeparator;
     1242    end
     1243
     1244    /* set environment */
     1245    if (fRM) then return EnvSet(0, sEnvVar, sOrgEnvVar);
     1246return EnvSet(0, sEnvVar, sOrgEnvVar||sToAdd);
     1247
     1248
     1249/**
     1250 * Sets sEnvVar to sValue.
     1251 */
     1252EnvSet: procedure
     1253    parse arg fRM, sEnvVar, sValue
     1254
     1255    /* if we're to remove this, make valuestring empty! */
     1256    if (fRM) then
     1257        sValue = '';
     1258    sEnvVar = translate(sEnvVar);
     1259
     1260    /*
     1261     * Begin/EndLibpath fix:
     1262     *      We'll have to set internal these using both commandline 'SET'
     1263     *      and internal VALUE in order to export it and to be able to
     1264     *      get it (with EnvGet) again.
     1265     */
     1266    if ((sEnvVar = 'BEGINLIBPATH') | (sEnvVar = 'ENDLIBPATH')) then
     1267    do
     1268        if (length(sValue) >= 1024) then
     1269            say 'Warning: 'sEnvVar' is too long,' length(sValue)' char.';
     1270        return SysSetExtLibPath(sValue, substr(sEnvVar, 1, 1));
     1271    end
     1272
     1273    if (length(sValue) >= 1024) then
     1274    do
     1275        say 'Warning: 'sEnvVar' is too long,' length(sValue)' char.';
     1276        say '    This may make CMD.EXE unstable after a SET operation to print the environment.';
     1277    end
     1278    sRc = VALUE(sEnvVar, sValue, 'OS2ENVIRONMENT');
     1279return 0;
     1280
     1281/**
     1282 * Gets the value of sEnvVar.
     1283 */
     1284EnvGet: procedure
     1285    parse arg sEnvVar
     1286    if ((translate(sEnvVar) = 'BEGINLIBPATH') | (translate(sEnvVar) = 'ENDLIBPATH')) then
     1287        return SysQueryExtLibPath(substr(sEnvVar, 1, 1));
     1288return value(sEnvVar,, 'OS2ENVIRONMENT');
     1289
     1290
     1291/**
     1292 *  Workaround for bug in CMD.EXE.
     1293 *  It messes up when REXX have expanded the environment.
     1294 */
     1295FixCMDEnv: procedure
     1296    /* check for 4OS2 first */
     1297    Address CMD 'set 4os2test_env=%@eval[2 + 2]';
     1298    if (value('4os2test_env',, 'OS2ENVIRONMENT') = '4') then
     1299        return 0;
     1300
     1301    /* force environment expansion by setting a lot of variables and freeing them. */
     1302    do i = 1 to 100
     1303        Address CMD '@set dummyenvvar'||i'=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
     1304    end
     1305    do i = 1 to 100
     1306        Address CMD '@set dummyenvvar'||i'=';
     1307    end
     1308return 0;
     1309
     1310
     1311/**
    11111312 * Execute a command and match output and return code.
    11121313 *
     
    11611362
    11621363
    1163 
    11641364/**
    1165  * Add sToAdd in front of sEnvVar.
    1166  * Note: sToAdd now is allowed to be alist!
    1167  *
    1168  * Known features: Don't remove sToAdd from original value if sToAdd
    1169  *                 is at the end and don't end with a ';'.
    1170  */
    1171 EnvAddFront: procedure
    1172     parse arg fRM, sEnvVar, sToAdd, sSeparator
    1173 
    1174     /* sets default separator if not specified. */
    1175     if (sSeparator = '') then sSeparator = ';';
    1176 
    1177     /* checks that sToAdd ends with an ';'. Adds one if not. */
    1178     if (substr(sToAdd, length(sToAdd), 1) <> sSeparator) then
    1179         sToAdd = sToAdd || sSeparator;
    1180 
    1181     /* check and evt. remove ';' at start of sToAdd */
    1182     if (substr(sToAdd, 1, 1) = ';') then
    1183         sToAdd = substr(sToAdd, 2);
    1184 
    1185     /* loop thru sToAdd */
    1186     rc = 0;
    1187     i = length(sToAdd);
    1188     do while i > 1 & rc = 0
    1189         j = lastpos(sSeparator, sToAdd, i-1);
    1190         rc = EnvAddFront2(fRM, sEnvVar, substr(sToAdd, j+1, i - j), sSeparator);
    1191         i = j;
    1192     end
    1193 
    1194 return rc;
    1195 
    1196 /**
    1197  * Add sToAdd in front of sEnvVar.
    1198  *
    1199  * Known features: Don't remove sToAdd from original value if sToAdd
    1200  *                 is at the end and don't end with a ';'.
    1201  */
    1202 EnvAddFront2: procedure
    1203     parse arg fRM, sEnvVar, sToAdd, sSeparator
    1204 
    1205     /* sets default separator if not specified. */
    1206     if (sSeparator = '') then sSeparator = ';';
    1207 
    1208     /* checks that sToAdd ends with a separator. Adds one if not. */
    1209     if (substr(sToAdd, length(sToAdd), 1) <> sSeparator) then
    1210         sToAdd = sToAdd || sSeparator;
    1211 
    1212     /* check and evt. remove the separator at start of sToAdd */
    1213     if (substr(sToAdd, 1, 1) = sSeparator) then
    1214         sToAdd = substr(sToAdd, 2);
    1215 
    1216     /* Get original variable value */
    1217     sOrgEnvVar = EnvGet(sEnvVar);
    1218 
    1219     /* Remove previously sToAdd if exists. (Changing sOrgEnvVar). */
    1220     i = pos(translate(sToAdd), translate(sOrgEnvVar));
    1221     if (i > 0) then
    1222         sOrgEnvVar = substr(sOrgEnvVar, 1, i-1) || substr(sOrgEnvVar, i + length(sToAdd));
    1223 
    1224     /* set environment */
    1225     if (fRM) then
    1226         return EnvSet(0, sEnvVar, sOrgEnvVar);
    1227 return EnvSet(0, sEnvVar, sToAdd||sOrgEnvVar);
    1228 
    1229 
    1230 /**
    1231  * Add sToAdd as the end of sEnvVar.
    1232  * Note: sToAdd now is allowed to be alist!
    1233  *
    1234  * Known features: Don't remove sToAdd from original value if sToAdd
    1235  *                 is at the end and don't end with a ';'.
    1236  */
    1237 EnvAddEnd: procedure
    1238     parse arg fRM, sEnvVar, sToAdd, sSeparator
    1239 
    1240     /* sets default separator if not specified. */
    1241     if (sSeparator = '') then sSeparator = ';';
    1242 
    1243     /* checks that sToAdd ends with a separator. Adds one if not. */
    1244     if (substr(sToAdd, length(sToAdd), 1) <> sSeparator) then
    1245         sToAdd = sToAdd || sSeparator;
    1246 
    1247     /* check and evt. remove ';' at start of sToAdd */
    1248     if (substr(sToAdd, 1, 1) = sSeparator) then
    1249         sToAdd = substr(sToAdd, 2);
    1250 
    1251     /* loop thru sToAdd */
    1252     rc = 0;
    1253     i = length(sToAdd);
    1254     do while i > 1 & rc = 0
    1255         j = lastpos(sSeparator, sToAdd, i-1);
    1256         rc = EnvAddEnd2(fRM, sEnvVar, substr(sToAdd, j+1, i - j), sSeparator);
    1257         i = j;
    1258     end
    1259 
    1260 return rc;
    1261 
    1262 /**
    1263  * Add sToAdd as the end of sEnvVar.
    1264  *
    1265  * Known features: Don't remove sToAdd from original value if sToAdd
    1266  *                 is at the end and don't end with a ';'.
    1267  */
    1268 EnvAddEnd2: procedure
    1269     parse arg fRM, sEnvVar, sToAdd, sSeparator
    1270 
    1271     /* sets default separator if not specified. */
    1272     if (sSeparator = '') then sSeparator = ';';
    1273 
    1274     /* checks that sToAdd ends with a separator. Adds one if not. */
    1275     if (substr(sToAdd, length(sToAdd), 1) <> sSeparator) then
    1276         sToAdd = sToAdd || sSeparator;
    1277 
    1278     /* check and evt. remove separator at start of sToAdd */
    1279     if (substr(sToAdd, 1, 1) = sSeparator) then
    1280         sToAdd = substr(sToAdd, 2);
    1281 
    1282     /* Get original variable value */
    1283     sOrgEnvVar = EnvGet(sEnvVar);
    1284 
    1285     if (sOrgEnvVar <> '') then
     1365 * Checks syslevel info.
     1366 * @returns 0 if match.
     1367 *          <>0 if mismatch.
     1368 * @param   sFile           Name of the syslevel file.
     1369 * @param   fQuiet          Quiet / verbose flag.
     1370 * @param   sMatchCid       Component id. (optional)
     1371 * @param   sMatchVer       Version id. (optional)
     1372 * @param   sMatchLevel     Current Level. (optional)
     1373 * @param   sMatchTitle     Product title. (optional)
     1374 * @param   sMatchKind      Product kind. (optional)
     1375 * @param   sMatchType      Product type. (optional)
     1376 */
     1377CheckSyslevel: procedure
     1378parse arg sFile, fQuiet, sMatchCId,sMatchVer,sMatchLevel,sMatchTitle,iMatchKind,sMatchType,dummy
     1379
     1380    iRc = -1;
     1381
     1382    /* Open the file */
     1383    rc = stream(sFile, 'c', 'open read');
     1384    if (pos('READY', rc) = 1) then
    12861385    do
    1287         /* Remove previously sToAdd if exists. (Changing sOrgEnvVar). */
    1288         i = pos(translate(sToAdd), translate(sOrgEnvVar));
    1289         if (i > 0) then
    1290             sOrgEnvVar = substr(sOrgEnvVar, 1, i-1) || substr(sOrgEnvVar, i + length(sToAdd));
    1291 
    1292         /* checks that sOrgEnvVar ends with a separator. Adds one if not. */
    1293         if (sOrgEnvVar = '') then
    1294             if (right(sOrgEnvVar,1) <> sSeparator) then
    1295                 sOrgEnvVar = sOrgEnvVar || sSeparator;
    1296     end
    1297 
    1298     /* set environment */
    1299     if (fRM) then return EnvSet(0, sEnvVar, sOrgEnvVar);
    1300 return EnvSet(0, sEnvVar, sOrgEnvVar||sToAdd);
    1301 
    1302 
    1303 /**
    1304  * Sets sEnvVar to sValue.
    1305  */
    1306 EnvSet: procedure
    1307     parse arg fRM, sEnvVar, sValue
    1308 
    1309     /* if we're to remove this, make valuestring empty! */
    1310     if (fRM) then
    1311         sValue = '';
    1312     sEnvVar = translate(sEnvVar);
    1313 
    1314     /*
    1315      * Begin/EndLibpath fix:
    1316      *      We'll have to set internal these using both commandline 'SET'
    1317      *      and internal VALUE in order to export it and to be able to
    1318      *      get it (with EnvGet) again.
    1319      */
    1320     if ((sEnvVar = 'BEGINLIBPATH') | (sEnvVar = 'ENDLIBPATH')) then
    1321     do
    1322         if (length(sValue) >= 1024) then
    1323             say 'Warning: 'sEnvVar' is too long,' length(sValue)' char.';
    1324         return SysSetExtLibPath(sValue, substr(sEnvVar, 1, 1));
    1325     end
    1326 
    1327     if (length(sValue) >= 1024) then
    1328     do
    1329         say 'Warning: 'sEnvVar' is too long,' length(sValue)' char.';
    1330         say '    This may make CMD.EXE unstable after a SET operation to print the environment.';
    1331     end
    1332     sRc = VALUE(sEnvVar, sValue, 'OS2ENVIRONMENT');
    1333 return 0;
    1334 
    1335 /**
    1336  * Gets the value of sEnvVar.
    1337  */
    1338 EnvGet: procedure
    1339     parse arg sEnvVar
    1340     if ((translate(sEnvVar) = 'BEGINLIBPATH') | (translate(sEnvVar) = 'ENDLIBPATH')) then
    1341         return SysQueryExtLibPath(substr(sEnvVar, 1, 1));
    1342 return value(sEnvVar,, 'OS2ENVIRONMENT');
    1343 
    1344 
    1345 /**
    1346  *  Workaround for bug in CMD.EXE.
    1347  *  It messes up when REXX have expanded the environment.
    1348  */
    1349 FixCMDEnv: procedure
    1350     /* check for 4OS2 first */
    1351     Address CMD 'set 4os2test_env=%@eval[2 + 2]';
    1352     if (value('4os2test_env',, 'OS2ENVIRONMENT') = '4') then
    1353         return 0;
    1354 
    1355     /* force environment expansion by setting a lot of variables and freeing them. */
    1356     do i = 1 to 100
    1357         Address CMD '@set dummyenvvar'||i'=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    1358     end
    1359     do i = 1 to 100
    1360         Address CMD '@set dummyenvvar'||i'=';
    1361     end
    1362 return 0;
    1363 
    1364 
    1365 
    1366 
     1386        if (charin(sFile, 1, 11) = 'FF'x'FF'x'SYSLEVEL'||'00'x) then
     1387        do
     1388            /* read base offset (binary long) */
     1389            iBase = c2x(charin(sFile, 34, 4));
     1390            iBase = 1 + x2d(right(iBase,2)||substr(iBase,5,2)||substr(iBase,3,2)||left(iBase,2));
     1391
     1392            /* Read fields...
     1393             *
     1394             *  typedef struct _SYSLEVELDATA {      offset
     1395             *     unsigned char d_reserved1[2];     0
     1396             *     unsigned char d_kind;             2
     1397             *     unsigned char d_version[2];       3
     1398             *     unsigned char d_reserved2[2];     5
     1399             *     unsigned char d_clevel[7];        7
     1400             *     unsigned char d_reserved3;       14
     1401             *     unsigned char d_plevel[7];       15
     1402             *     unsigned char d_reserved4;       22
     1403             *     unsigned char d_title[80];       23
     1404             *     unsigned char d_cid[9];         103
     1405             *     unsigned char d_revision;       112
     1406             *     unsigned char d_type[1];        113
     1407             *  } SYSLEVELDATA;
     1408             */
     1409            iKind       =   c2d(charin(sFile, iBase+  2,  1));
     1410            iVer        =       charin(sFile, iBase+  3,  2);
     1411            sCurLevel   = strip(charin(sFile, iBase+  7,  7), 'T', '00'x);
     1412            sPreLevel   = strip(charin(sFile, iBase+ 15,  7), 'T', '00'x);
     1413            sTitle      = strip(charin(sFile, iBase+ 23, 80), 'T', '00'x);
     1414            sCId        =       charin(sFile, iBase+103,  9);
     1415            iRev        =       charin(sFile, iBase+112,  1);
     1416            sType       = strip(charin(sFile, iBase+113, 10), 'T', '00'x);
     1417
     1418            sVer = substr(c2x(substr(iVer, 1, 1)), 1, 1)||,
     1419                   '.'||,
     1420                   substr(c2x(substr(iVer, 1, 1)), 2, 1)||,
     1421                   d2c(c2d(substr(iVer, 2, 1)) + 48);
     1422            if (iRev <> 0) then
     1423                sVer = sVer ||'.'|| d2c(c2d(iRev) + 48);
     1424
     1425            /*
     1426             * Compare.
     1427             */
     1428            iRc = 0;
     1429            if (sMatchCId <> '' & sMatchCId <> sCid) then
     1430            do
     1431                if (\fQuiet) then
     1432                    say 'syslevel '''sFile''': cid '''sCId''' != '''sMatchCId'''.';
     1433                iRc = 2;
     1434            end
     1435            if (sMatchVer <> '' & sMatchVer <> sVer) then
     1436            do
     1437                if (\fQuiet) then
     1438                    say 'syslevel '''sFile''': ver '''sVer''' != '''sMatchVer'''.';
     1439                iRc = 3;
     1440            end
     1441            if (sMatchLevel <> '' & sMatchLevel <> sCurLevel) then
     1442            do
     1443                if (\fQuiet) then
     1444                    say 'syslevel '''sFile''': level '''sCurLevel''' != '''sMatchLevel'''.';
     1445                iRc = 4;
     1446            end
     1447            if (sMatchTitle <> '' & sMatchTitle <> sTitle) then
     1448            do
     1449                if (\fQuiet) then
     1450                    say 'syslevel '''sFile''': title '''sTitle''' != '''sMatchTitle'''.';
     1451                iRc = 5;
     1452            end
     1453            if (iMatchKind <> '' & iMatchKind <> iKind) then
     1454            do
     1455                if (\fQuiet) then
     1456                    say 'syslevel '''sFile''': kind '''iKind''' != '''iMatchKind'''.';
     1457                iRc = 6;
     1458            end
     1459            if (sMatchType <> '' & sMatchType <> sType) then
     1460            do
     1461                if (\fQuiet) then
     1462                    say 'syslevel '''sFile''': type '''sType''' != '''sMatchType'''.';
     1463                iRc = 7;
     1464            end
     1465            /*
     1466            say 'debug:'
     1467            say 'iKind       =' iKind
     1468            say 'sCurLevel   =' sCurLevel
     1469            say 'sPreLevel   =' sPreLevel
     1470            say 'sTitle      =' sTitle
     1471            say 'sCId        =' sCId
     1472            say 'sType       =' sType
     1473            say 'sVer        =' sVer
     1474            */
     1475        end
     1476        else
     1477            say 'bad signature';
     1478
     1479        /* finished, close file */
     1480        call stream sFile, 'c', 'close';
     1481    end
     1482    else say 'open failed, rc='rc;
     1483return iRc;
    13671484
    13681485
     
    25712688        ) then
    25722689        return 2;
    2573     rc = CheckCmdOutput('syslevel '||sPathTK||'\bin', 0, fQuiet, 'IBM Developer''s Toolkit for OS/2 Warp Version 4'||'0d0a'x||'Version 4.00.');
     2690
     2691    rc = CheckSyslevel(sPathTK||'\bin\syslevel.tlk', fQuiet,,,,,
     2692                       'IBM Developer''s Toolkit for OS/2 Warp Version 4',,
     2693                       15, '0');
    25742694    if (rc = 0) then
    25752695        rc = CheckCmdOutput('sc -V', -1, fQuiet, '", Version: 2.54.');
     
    26592779        ) then
    26602780        return 2;
    2661     rc = CheckCmdOutput('syslevel '||sPathTK||'\bin', 0, fQuiet, 'IBM OS/2 Developer''s Toolkit Version 4.5'||'0d0a'x||'Version 4.50     Component ID 5639F9300');
     2781
     2782    rc = CheckSyslevel(sPathTK||'\bin\syslevel.tlk', fQuiet,,
     2783                       '5639F9300', '4.50', 'XR04500',,
     2784                       'IBM OS/2 Developer''s Toolkit Version 4.5',,
     2785                       15, '0');
    26622786    if (rc = 0) then
    26632787        rc = CheckCmdOutput('rc', 0, fQuiet, 'IBM RC (Resource Compiler) Version 5.00.004');
     
    27452869        ) then
    27462870        return 2;
    2747     rc = CheckCmdOutput('syslevel '||sPathTK||'\bin', 0, fQuiet, 'IBM OS/2 Developer''s Toolkit Version 4.5'||'0d0a'x||'Version 4.50.1     Component ID 5639F9300');
     2871
     2872    rc = CheckSyslevel(sPathTK||'\bin\syslevel.tlk', fQuiet,,
     2873                       '5639F9300', '4.50.1', 'XR04510',,
     2874                       'IBM OS/2 Developer''s Toolkit Version 4.5',,
     2875                       15, '0');
    27482876    if (rc = 0) then
    27492877        rc = CheckCmdOutput('sc -V', -1, fQuiet, '", Version: 2.54.');
     
    28402968        ) then
    28412969        return 2;
    2842     rc = CheckCmdOutput('syslevel '||sPathTK||'\bin', 0, fQuiet, 'IBM OS/2 Developer''s Toolkit Version 4.5'||'0d0a'x||'Version 4.50.2     Component ID 5639F9300');
     2970
     2971    rc = CheckSyslevel(sPathTK||'\bin\syslevel.tlk', fQuiet,,
     2972                       '5639F9300', '4.50.2', 'XR04520',,
     2973                       'IBM OS/2 Developer''s Toolkit Version 4.5',,
     2974                       15, '0');
    28432975    if (rc = 0) then
    28442976        rc = CheckCmdOutput('sc -V', -1, fQuiet, '", Version: 2.54.');
     
    30093141        ) then
    30103142        return 2;
    3011     rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, fQuiet, 'Version 3.00     Component ID 562201703'||'0d0a'x||'Current CSD level: CTC308');
    3012     if (rc = 0) then
    3013         rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, fQuiet, 'Version 3.00     Component ID 562201704'||'0d0a'x||'Current CSD level: CTU308');
     3143
     3144
     3145    rc = CheckSyslevel(sPathCPP||'\syslevel\syslevel.ct3', fQuiet,'562201703',,'CTC308',);
     3146    if (rc = 0) then
     3147        rc = CheckSyslevel(sPathCPP||'\syslevel\syslevel.ct4', fQuiet,'562201704',,'CTU308',);
    30143148    /*if (rc = 0) then
    30153149        rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, fQuiet, 'Version 3.00     Component ID 562201707'||'0d0a'x||'Current CSD level: CTV308');
    30163150    if (rc = 0) then
    3017         rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, fQuiet, 'Version 3.00     Component ID 562201708'||'0d0a'x||'Current CSD level: CTD308');*/
    3018     if (rc = 0) then
    3019         rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, fQuiet, 'Version 3.00     Component ID 562201605'||'0d0a'x||'Current CSD level: CTC308');
     3151        rc = CheckSyslevel(sPathCPP||'\syslevel\syslevel.ct8', fQuiet,'562201708',,'CTD308',);
     3152        */
     3153    if (rc = 0) then
     3154        rc = CheckSyslevel(sPathCPP||'\syslevel\syslevel.wf5', fQuiet,'562201605',,'CTC308',);
    30203155    /*if (rc = 0) then
    3021         rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, fQuiet, 'Version 3.00     Component ID 562201602'||'0d0a'x||'Current CSD level: CTO308');*/
     3156        rc = CheckSyslevel(sPathCPP||'\syslevel\syslevel.wf2', fQuiet,'562201602',,'CTO308',);
     3157        */
    30223158    if (rc = 0) then
    30233159        rc = CheckCmdOutput('icc', 0, fQuiet, 'IBM VisualAge C++ for OS/2, Version 3');
Note: See TracChangeset for help on using the changeset viewer.