Changeset 8583 for trunk/tools


Ignore:
Timestamp:
Jun 7, 2002, 3:37:07 AM (23 years ago)
Author:
bird
Message:

Rewrote it a bit again. better now :)

File:
1 edited

Legend:

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

    r8424 r8583  
    1 /* $Id: buildenv.cmd,v 1.7 2002-05-16 11:50:22 bird Exp $
     1/* $Id: buildenv.cmd,v 1.8 2002-06-07 01:37:07 bird Exp $
    22 *
    3  * This is the master environment script. It contains settings for many
    4  * enviroment configurations. Environments may be set and unset
    5  * interchangably.
    6  *
     3 * This is the master tools environment script. It contains environment
     4 * configurations for many development tools. Each tool can be installed
     5 * and uninstalled from the environment interchangably.
    76 *
    87 * Note:    Of historic reasons, there are some environments here which
     
    1312 *     - LANG is set to en_US by both VAC36 and TOOLKIT45. When unsetting
    1413 *       those the original value, for example of no_NO, is not restored.
     14 *     - Same goes for some other stuff, we have no stack of previous values.
    1515 */
    1616
     
    2222     * Create argument array with lowercase arguments.
    2323     */
    24     parse arg sEnv.1 sEnv.2 sEnv.3 sEnv.4 sEnv.5 sEnv.6 sEnv.7 sEnv.8 sEnv.9 sEnv.10 sEnv.11 sEnv.12 sEnv.13 sEnv.14 sEnv.15 sEnv.16 sEnv.17 sEnv.18 sEnv.19 sEnv.20 sEnv.21
     24    parse arg sEnv.1 sEnv.2 sEnv.3 sEnv.4 sEnv.5 sEnv.6 sEnv.7 sEnv.8 sEnv.9 sEnv.10 sEnv.11 sEnv.12 sEnv.13 sEnv.14 sEnv.15 sEnv.16 sEnv.17 sEnv.18 sEnv.19 sEnv.20 sEnv.21 sEnv.22 sEnv.23
    2525
    2626    i = 1;
     
    5757
    5858    i = 1;
    59     /* environment id               The function with args.                 Optional verify data.                       increment index */
    60     aCfg.i.sId = 'cvs';             aCfg.i.sSet = 'CVS';                    aCfg.i.sDesc = 'CVS v1.10 or later';        i = i + 1;
    61     aCfg.i.sId = 'db2v52';          aCfg.i.sSet = 'db2v52';                 aCfg.i.sDesc = 'DB2 v5.2 Dev Edition';      i = i + 1;
    62     aCfg.i.sId = 'ddkbase';         aCfg.i.sSet = 'DDKBase';                aCfg.i.sDesc = 'DDK base (recent)';  i = i + 1;
    63     aCfg.i.sId = 'emx';             aCfg.i.sSet = 'EMX';                    aCfg.i.sDesc = 'EMX v0.9d fixpack 04';      i = i + 1;
    64     aCfg.i.sId = 'emxpgcc';         aCfg.i.sSet = 'EMXPGCC';                aCfg.i.sDesc = 'Pentium Optimized GCC/EMX v1.1.1 r2 with binutils 2.9.1'; i = i + 1;
    65     aCfg.i.sId = 'icatgam';         aCfg.i.sSet = 'ICATGam';                aCfg.i.sDesc = 'ICAT for OS/2 latest'; i = i + 1;
    66     aCfg.i.sId = 'icatgam406rc1';   aCfg.i.sSet = 'ICATGam406RC1';          aCfg.i.sDesc = 'ICAT for OS/2 v4.0.6 release candidate 1'; i = i + 1;
    67     aCfg.i.sId = 'icatpe';          aCfg.i.sSet = 'ICATPe';                 aCfg.i.sDesc = 'ICAT for OS/2 with PE support (test version)'; i = i + 1;
    68     aCfg.i.sId = 'ida';             aCfg.i.sSet = 'IDA414';                 aCfg.i.sDesc = 'Interactive DisAssembler (IDA) (latest)'; i = i + 1;
    69     aCfg.i.sId = 'ida38';           aCfg.i.sSet = 'IDA38';                  aCfg.i.sDesc = 'Interactive DisAssembler (IDA) v3.80 (historical)'; i = i + 1;
    70     aCfg.i.sId = 'ida40';           aCfg.i.sSet = 'IDA40';                  aCfg.i.sDesc = 'Interactive DisAssembler (IDA) v4.0 (historical)'; i = i + 1;
    71     aCfg.i.sId = 'ida414';          aCfg.i.sSet = 'IDA414';                 aCfg.i.sDesc = 'Interactive DisAssembler (IDA) v4.14'; i = i + 1;
    72     aCfg.i.sId = 'idasdk';          aCfg.i.sSet = 'IDASDK';                 aCfg.i.sDesc = 'Interactive DisAssembler (IDA) SDK'; i = i + 1;
    73     aCfg.i.sId = 'mode12050';       aCfg.i.sSet = 'Mode,120,50';            aCfg.i.sDesc = 'mode 120,50'; i = i + 1;
    74     aCfg.i.sId = 'mode8050';        aCfg.i.sSet = 'Mode,80,50';             aCfg.i.sDesc = 'mode 80,50'; i = i + 1;
    75 /* obsolete id   aCfg.i.sId = 'msc60';           aCfg.i.sSet = 'MSCV6_16';               aCfg.i.sDesc = 'MicroSoft C v6.0a 16-bit'; i = i + 1; */
    76     aCfg.i.sId = 'mscv6';           aCfg.i.sSet = 'MSCV6_32';               aCfg.i.sDesc = 'MicroSoft C v6.0 32-bit'; i = i + 1;
    77     aCfg.i.sId = 'mscv6-16';        aCfg.i.sSet = 'MSCV6_16';               aCfg.i.sDesc = 'MicroSoft C v6.0a 16-bit'; i = i + 1;
    78     aCfg.i.sId = 'mysql';           aCfg.i.sSet = 'mySQL';                  aCfg.i.sDesc = 'MySql any version (latest from Yuri is recommended)'; i = i + 1;
    79     aCfg.i.sId = 'netqos2';         aCfg.i.sSet = 'NetQOS2';                aCfg.i.sDesc = 'NetQOS2 - help system for VAC40,VAC365,DB2 and more.'; i = i + 1;
    80     aCfg.i.sId = 'odin32testcase';  aCfg.i.sSet = 'Odin32Testcase';         aCfg.i.sDesc = 'Odin32 testcase setup'; i = i + 1;
    81     aCfg.i.sId = 'perl';            aCfg.i.sSet = 'Perl';                   aCfg.i.sDesc = 'Perl v5.0053'; i = i + 1;
    82     aCfg.i.sId = 'python';          aCfg.i.sSet = 'Python';                 aCfg.i.sDesc = 'Python v1.5'; i = i + 1;
    83     aCfg.i.sId = 'toolkit40';       aCfg.i.sSet = 'Toolkit40';              aCfg.i.sDesc = 'Toolkit v4.0 CSD 4'; i = i + 1;
    84     aCfg.i.sId = 'toolkit45';       aCfg.i.sSet = 'Toolkit45';              aCfg.i.sDesc = 'Toolkit v4.5'; i = i + 1;
    85     aCfg.i.sId = 'toolkit451';      aCfg.i.sSet = 'Toolkit451';             aCfg.i.sDesc = 'Toolkit v4.5.1'; i = i + 1;
    86     aCfg.i.sId = 'unix';            aCfg.i.sSet = 'Unix';                   aCfg.i.sDesc = 'Misc unix stuff.'; i = i + 1;
    87 /* obsolete id   aCfg.i.sId = 'vac30';           aCfg.i.sSet = 'VAC308';                 aCfg.i.sDesc = 'VisualAge for C++ v3.08'; i = i + 1; */
    88     aCfg.i.sId = 'vac308';           aCfg.i.sSet = 'VAC308';                 aCfg.i.sDesc = 'VisualAge for C++ v3.08'; i = i + 1;
    89 /* osbolete id    aCfg.i.sId = 'vac36';           aCfg.i.sSet = 'VAC365';                 aCfg.i.sDesc = ''; i = i + 1; */
    90     aCfg.i.sId = 'vac365';          aCfg.i.sSet = 'VAC365';                 aCfg.i.sDesc = 'VisualAge for C++ v3.6.5 FP2 with latest optimizer fixes.'; i = i + 1;
    91     aCfg.i.sId = 'vac40';           aCfg.i.sSet = 'VAC40';                  aCfg.i.sDesc = 'VisualAge for C++ v4.0 FP2(??)'; i = i + 1;
    92     aCfg.i.sId = 'warpin';          aCfg.i.sSet = 'WarpIn';                 aCfg.i.sDesc = 'WarpIn 0.9.18+ (for Odin32 18 with fix is required)'; i = i + 1;
    93     aCfg.i.sId = 'watcomc11';       aCfg.i.sSet = 'WatComC11,32,';          aCfg.i.sDesc = 'Watcom C/C++ v11.0 32-bit (no fixes)'; i = i + 1;
    94     aCfg.i.sId = 'watcomc11-16';    aCfg.i.sSet = 'WatComC11,16';           aCfg.i.sDesc = 'Watcom C/C++ v11.0 16-bit (no fixes)'; i = i + 1;
    95     aCfg.i.sId = 'watcomc11c';      aCfg.i.sSet = 'WatComC11c,32';          aCfg.i.sDesc = 'Watcom C/C++ v11.0c 32-bit (beta)'; i = i + 1;
    96     aCfg.i.sId = 'watcomc11c-16';   aCfg.i.sSet = 'WatComC11c,16';          aCfg.i.sDesc = 'Watcom C/C++ v11.0c 16-bit (beta)'; i = i + 1;
     59    /* Tool id                      The tool's group            The function with args.                 Optional verify data.                       increment index */
     60    aCfg.i.sId = 'cvs';             aCfg.i.sGrp = 'version';    aCfg.i.sSet = 'CVS';                    aCfg.i.sDesc = 'CVS v1.10 or later';        i = i + 1;
     61    aCfg.i.sId = 'db2v52';          aCfg.i.sGrp = 'database';   aCfg.i.sSet = 'db2v52';                 aCfg.i.sDesc = 'DB2 v5.2 Dev Edition';      i = i + 1;
     62    aCfg.i.sId = 'ddkbase';         aCfg.i.sGrp = 'ddk';        aCfg.i.sSet = 'DDKBase';                aCfg.i.sDesc = 'DDK base (recent)';         i = i + 1;
     63    aCfg.i.sId = 'emx';             aCfg.i.sGrp = 'comp32';     aCfg.i.sSet = 'EMX';                    aCfg.i.sDesc = 'EMX v0.9d fixpack 04';      i = i + 1;
     64    aCfg.i.sId = 'emxpgcc';         aCfg.i.sGrp = 'comp32';     aCfg.i.sSet = 'EMXPGCC';                aCfg.i.sDesc = 'Pentium Optimized GCC/EMX v1.1.1 r2 with binutils 2.9.1'; i = i + 1;
     65    aCfg.i.sId = 'icatgam';         aCfg.i.sGrp = 'debugger';   aCfg.i.sSet = 'ICATGam';                aCfg.i.sDesc = 'ICAT for OS/2 latest';      i = i + 1;
     66    aCfg.i.sId = 'icatgam406rc1';   aCfg.i.sGrp = 'debugger';   aCfg.i.sSet = 'ICATGam406RC1';          aCfg.i.sDesc = 'ICAT for OS/2 v4.0.6 release candidate 1'; i = i + 1;
     67    aCfg.i.sId = 'icatpe';          aCfg.i.sGrp = 'debugger';   aCfg.i.sSet = 'ICATPe';                 aCfg.i.sDesc = 'ICAT for OS/2 with PE support (test version)'; i = i + 1;
     68    aCfg.i.sId = 'ida';             aCfg.i.sGrp = 'misc';       aCfg.i.sSet = 'IDA414';                 aCfg.i.sDesc = 'Interactive DisAssembler (IDA) (latest)'; i = i + 1;
     69    aCfg.i.sId = 'ida38';           aCfg.i.sGrp = 'misc';       aCfg.i.sSet = 'IDA38';                  aCfg.i.sDesc = 'Interactive DisAssembler (IDA) v3.80 (historical)'; i = i + 1;
     70    aCfg.i.sId = 'ida40';           aCfg.i.sGrp = 'misc';       aCfg.i.sSet = 'IDA40';                  aCfg.i.sDesc = 'Interactive DisAssembler (IDA) v4.0 (historical)'; i = i + 1;
     71    aCfg.i.sId = 'ida414';          aCfg.i.sGrp = 'misc';       aCfg.i.sSet = 'IDA414';                 aCfg.i.sDesc = 'Interactive DisAssembler (IDA) v4.14'; i = i + 1;
     72    aCfg.i.sId = 'idasdk';          aCfg.i.sGrp = 'misc';       aCfg.i.sSet = 'IDASDK';                 aCfg.i.sDesc = 'Interactive DisAssembler (IDA) SDK'; i = i + 1;
     73    aCfg.i.sId = 'mode12050';       aCfg.i.sGrp = 'misc';       aCfg.i.sSet = 'Mode,120,50';            aCfg.i.sDesc = 'mode 120,50';               i = i + 1;
     74    aCfg.i.sId = 'mode8050';        aCfg.i.sGrp = 'misc';       aCfg.i.sSet = 'Mode,80,50';             aCfg.i.sDesc = 'mode 80,50';                i = i + 1;
     75    aCfg.i.sId = 'mscv6';           aCfg.i.sGrp = 'comp32';     aCfg.i.sSet = 'MSCV6_32';               aCfg.i.sDesc = 'MicroSoft C v6.0 32-bit';   i = i + 1;
     76    aCfg.i.sId = 'mscv6-16';        aCfg.i.sGrp = 'comp16';     aCfg.i.sSet = 'MSCV6_16';               aCfg.i.sDesc = 'MicroSoft C v6.0a 16-bit';  i = i + 1;
     77    aCfg.i.sId = 'mysql';           aCfg.i.sGrp = 'database';   aCfg.i.sSet = 'mySQL';                  aCfg.i.sDesc = 'MySql any version (latest from Yuri is recommended)'; i = i + 1;
     78    aCfg.i.sId = 'netqos2';         aCfg.i.sGrp = 'misc';       aCfg.i.sSet = 'NetQOS2';                aCfg.i.sDesc = 'NetQOS2 - help system for VAC40,VAC365,DB2 and more.'; i = i + 1;
     79    aCfg.i.sId = 'odin32testcase';  aCfg.i.sGrp = 'tests';      aCfg.i.sSet = 'Odin32Testcase';         aCfg.i.sDesc = 'Odin32 testcase setup'; i = i + 1;
     80    aCfg.i.sId = 'perl';            aCfg.i.sGrp = 'script';     aCfg.i.sSet = 'Perl';                   aCfg.i.sDesc = 'Perl v5.0053'; i = i + 1;
     81    aCfg.i.sId = 'python';          aCfg.i.sGrp = 'script';     aCfg.i.sSet = 'Python';                 aCfg.i.sDesc = 'Python v1.5'; i = i + 1;
     82    aCfg.i.sId = 'toolkit40';       aCfg.i.sGrp = 'tlktos2';    aCfg.i.sSet = 'Toolkit40';              aCfg.i.sDesc = 'Toolkit v4.0 CSD 4'; i = i + 1;
     83    aCfg.i.sId = 'toolkit45';       aCfg.i.sGrp = 'tlktos2';    aCfg.i.sSet = 'Toolkit45';              aCfg.i.sDesc = 'Toolkit v4.5'; i = i + 1;
     84    aCfg.i.sId = 'toolkit451';      aCfg.i.sGrp = 'tlktos2';    aCfg.i.sSet = 'Toolkit451';             aCfg.i.sDesc = 'Toolkit v4.5.1'; i = i + 1;
     85    aCfg.i.sId = 'unix';            aCfg.i.sGrp = 'misc';       aCfg.i.sSet = 'Unix';                   aCfg.i.sDesc = 'Misc unix stuff.'; i = i + 1;
     86    aCfg.i.sId = 'vac308';          aCfg.i.sGrp = 'comp32';     aCfg.i.sSet = 'VAC308';                 aCfg.i.sDesc = 'VisualAge for C++ v3.08'; i = i + 1;
     87    aCfg.i.sId = 'vac365';          aCfg.i.sGrp = 'comp32';     aCfg.i.sSet = 'VAC365';                 aCfg.i.sDesc = 'VisualAge for C++ v3.6.5 FP2 with latest optimizer fixes.'; i = i + 1;
     88    aCfg.i.sId = 'vac40';           aCfg.i.sGrp = 'comp32';     aCfg.i.sSet = 'VAC40';                  aCfg.i.sDesc = 'VisualAge for C++ v4.0 FP2(??)'; i = i + 1;
     89    aCfg.i.sId = 'warpin';          aCfg.i.sGrp = 'misc';       aCfg.i.sSet = 'WarpIn';                 aCfg.i.sDesc = 'WarpIn 0.9.18+ (for Odin32 18 with fix is required)'; i = i + 1;
     90    aCfg.i.sId = 'watcomc11';       aCfg.i.sGrp = 'comp32';     aCfg.i.sSet = 'WatComC11,32,';          aCfg.i.sDesc = 'Watcom C/C++ v11.0 32-bit (no fixes)'; i = i + 1;
     91    aCfg.i.sId = 'watcomc11-16';    aCfg.i.sGrp = 'comp16';     aCfg.i.sSet = 'WatComC11,16';           aCfg.i.sDesc = 'Watcom C/C++ v11.0 16-bit (no fixes)'; i = i + 1;
     92    aCfg.i.sId = 'watcomc11c';      aCfg.i.sGrp = 'comp32';     aCfg.i.sSet = 'WatComC11c,32';          aCfg.i.sDesc = 'Watcom C/C++ v11.0c 32-bit (beta)'; i = i + 1;
     93    aCfg.i.sId = 'watcomc11c-16';   aCfg.i.sGrp = 'comp16';     aCfg.i.sSet = 'WatComC11c,16';          aCfg.i.sDesc = 'Watcom C/C++ v11.0c 16-bit (beta)'; i = i + 1;
    9794    aCfg.0 = i - 1;
    9895
     
    114111         */
    115112        ch = substr(sEnv.i, length(sEnv.i), 1);
    116         if (ch = '-' | ch = '+' | ch = '*') then
     113        if (ch = '-' | ch = '+' | ch = '*' | ch = '!' | ch = '@') then
    117114            sEnv.i = substr(sEnv.i, 1, length(sEnv.i) - 1);
    118115        fRM = (ch = '-');
    119116        fCfg = (ch = '*');
     117        fForcedCfg = (ch = '!');
     118        fVerify = (ch = '@')
    120119
    121120        /*
     
    124123        rc = 0;
    125124        select
     125
     126            /*
     127             * Multi tool operations.
     128             */
     129            when (sEnv.i = 'allconfig') then do
     130                do j = 1 to aCfg.0
     131                    rc = CfgConfigure(j, 0);
     132                    if (rc >= 8) then
     133                        exit(rc);
     134                end
     135            end
     136
     137            when (sEnv.i = 'allconfig') then do
     138                do j = 1 to aCfg.0
     139                    if (CfgVerify(j, 0, 1) <> 0) then
     140                    do
     141                        rc = CfgConfigure(j, 1);
     142                        if (rc >= 8) then
     143                            exit(rc);
     144                    end
     145                end
     146            end
     147
     148            when (sEnv.i = 'allreconfig') then do
     149                do j = 1 to aCfg.0
     150                    rc = CfgConfigure(j, 1);
     151                    if (rc >= 8) then
     152                        exit(rc);
     153                end
     154            end
     155
     156            when (sEnv.i = 'allverify') then do
     157                do j = 1 to aCfg.0
     158                    if (CfgIsConfigured(j)) then
     159                        call CfgVerify j, 0, 1;
     160                end
     161            end
     162
     163            when (sEnv.i = 'alluninstall') then do
     164                do j = 1 to aCfg.0
     165                    if (CfgIsConfigured(j)) then
     166                        call CfgInstallUninstall j, 1;
     167                end
     168            end
     169
     170            when (sEnv.i = 'showall') then do
     171                do j = 1 to aCfg.0
     172                    say left(aCfg.j.sId, 15) '-' left(aCfg.j.sGrp, 8) '-' aCfg.j.sDesc
     173                end
     174            end
     175            when (sEnv.i = 'showconfigured') then do
     176                do j = 1 to aCfg.0
     177                    if (CfgIsConfigured(j)) then
     178                        say left(aCfg.j.sId, 15) '-' left(aCfg.j.sGrp, 8) '-' aCfg.j.sDesc
     179                end
     180            end
     181
     182            when (sEnv.i = 'shownotconfigured') then do
     183                do j = 1 to aCfg.0
     184                    if (\CfgIsConfigured(j)) then
     185                        say left(aCfg.j.sId, 15) '-' left(aCfg.j.sGrp, 8) '-' aCfg.j.sDesc
     186                end
     187            end
     188
     189
     190            /*
     191             * Special 'tools'.
     192             */
    126193            when (sEnv.i = 'debug') then do
    127                 rc = EnvVar_Set(0, 'DEBUG','1');
    128                 rc = EnvVar_Set(0, 'RELEASE','');
    129                 rc = EnvVar_Set(0, 'BUILD_MODE','DEBUG');
     194                rc = EnvSet(0, 'DEBUG','1');
     195                rc = EnvSet(0, 'RELEASE','');
     196                rc = EnvSet(0, 'BUILD_MODE','DEBUG');
    130197            end
    131198            when (sEnv.i = 'profile') then do
    132                 rc = EnvVar_Set(0, 'DEBUG','1');
    133                 rc = EnvVar_Set(0, 'RELEASE','');
    134                 rc = EnvVar_Set(0, 'BUILD_MODE','PROFILE');
     199                rc = EnvSet(0, 'DEBUG','1');
     200                rc = EnvSet(0, 'RELEASE','');
     201                rc = EnvSet(0, 'BUILD_MODE','PROFILE');
    135202            end
    136203            when (sEnv.i = 'release') then do
    137                 rc = EnvVar_Set(0, 'DEBUG','');
    138                 rc = EnvVar_Set(0, 'RELEASE','1');
    139                 rc = EnvVar_Set(0, 'BUILD_MODE','RELEASE');
     204                rc = EnvSet(0, 'DEBUG','');
     205                rc = EnvSet(0, 'RELEASE','1');
     206                rc = EnvSet(0, 'BUILD_MODE','RELEASE');
    140207            end
    141208
    142209            when (sEnv.i = 'buildsetup') then
    143                 rc = EnvVar_Set(0, 'BUILD_SETUP_MAK','make\setup.mak');
    144 
     210                rc = EnvSet(0, 'BUILD_SETUP_MAK','make\setup.mak');
     211
     212            /*
     213             * Generic
     214             */
    145215            otherwise
    146216            do
     
    153223                         */
    154224                        fFound = 1;
    155                         if (fCfg) then; say 'Verify & Config of the 'sEnv.i' ('CfgDesc(sEnv.i)') environment...';
    156                         if (pos(',', aCfg.j.sSet) > 0) then
    157                             sRexx = substr(aCfg.j.sSet, 1, pos(',', aCfg.j.sSet) - 1) || '(aCfg.j.sSet,fRM,fCfg',
    158                                  || substr(aCfg.j.sSet, pos(',', aCfg.j.sSet)) || ')';
     225
     226                        /*
     227                         * Take requested action.
     228                         */
     229                        rc = -16;
     230                        if (fCfg | fForcedCfg) then
     231                            rc = CfgConfigure(j, fForcedCfg);
     232                        else if (fVerify) then
     233                            rc = CfgVerify(j, 0, 1);
    159234                        else
    160                             sRexx = aCfg.j.sSet || '(sEnv.i,fRM,fCfg)';
    161                         interpret 'rc = '||sRexx;
    162 
    163                         /*
    164                          * Loop till rc=0 or leave.
    165                          */
    166                         do while (rc <> 0)
    167                             select
    168                                 when (rc = 1) then
    169                                 do
    170                                     if (fCfg = 0) then
    171                                     do
    172                                         say 'fatal error: One of the paths for environment '''sEnv.i''' wasn'' found.';
    173                                         say '             Please (re-)configure the environment.';
    174                                         call SysSleep 5;
    175                                         exit(16);
    176                                     end
    177                                     say 'warning: The user refused to give a path, continuing.';
    178                                 end
    179 
    180                                 when (rc = 2) then
    181                                     say 'error: verify failed ''cause some vital file wasn''t found.';
    182 
    183                                 when (rc = 49) then
    184                                     say 'error: verify failed ''cause some vital command didn''t return as expected.';
    185 
    186                                 when (rc = 99) then
    187                                     say 'error: verify failed ''cause some vital command didn''t return the expected output.';
    188 
    189                                 otherwise
    190                                 do
    191                                     say 'internal error: bad return code from '''sRexx''' rc=' rc'.';
    192                                     call SysSleep 5;
    193                                     exit(16);
    194                                 end
    195                             end
    196 
    197                             /*
    198                              * Retry the config if the user wan't so.
    199                              */
    200                             fCfg = 3; /* forced reconfig. */
    201                             say '(Re)Try to config the environment' sEnv.i '('CfgDesc(sEnv.i)')? (y/N)';
    202                             sAnswer = PullUser(1);
    203                             if (substr(strip(sAnswer),1,1) <> 'Y') then
    204                                 leave;
    205                             interpret 'rc = '||sRexx;
    206                         end
    207                         rc = 0;
     235                            rc = CfgInstallUninstall(j, fRM);
    208236                        leave;
    209237                    end
    210                 end
     238                end /* loop */
    211239
    212240                if (\fFound) then
    213241                do
    214                     say 'error: unknown environment! - 'sEnv.i;
    215                     call SysSleep 5;
     242                    say 'error: unknown tool! - 'sEnv.i;
     243                    call SysSleep 2;
    216244                    exit(16)
    217245                end
     
    253281NoValueHandler:
    254282    say 'NoValueHandler: line 'SIGL;
    255 return
     283return;
     284
     285
     286/**
     287 * Get the description of an tool.
     288 * @returns Description string.
     289 *          '' if not found.
     290 * @param   sToolId      Tool id.
     291 */
     292CfgDesc: procedure expose aCfg. aPath. sPathFile
     293    parse arg sToolId
     294    do i = 1 to aCfg.0
     295        if (aCfg.i.sId = sToolId) then
     296            return aCfg.i.sDesc;
     297    end
     298return sToolId;
     299
     300
     301/**
     302 * Lookups up an env. config in the aCfg. array.
     303 * @return  Index of sToolId.
     304 *          aCfg.0+1 on error.
     305 * @param   sToolId      Tool id.
     306 */
     307CfgLookup: procedure expose aCfg. aPath. sPathFile
     308    parse arg sToolId
     309    iTool = 1;
     310    do while ((iTool <= aCfg.0) & (aCfg.iTool.sId <> sToolId))
     311        iTool = iTool + 1;
     312    end
     313return iTool;
     314
     315
     316/**
     317 * Verifies a configuration.
     318 * @returns 0 on success.
     319 *          4 on error/warnings which is continuable.
     320 *          8 or higher or on fatal errors.
     321 * @param   iTool   The tool index in aCfg.
     322 * @param   fRM     If set we'll uninstall the tool from the environment.
     323 */
     324CfgInstallUninstall: procedure expose aCfg. aPath. sPathFile
     325    parse arg iTool, fRM
     326
     327    /* make rexx expression */
     328    if (pos(',', aCfg.iTool.sSet) > 0) then
     329        sRexx = substr(aCfg.iTool.sSet, 1, pos(',', aCfg.iTool.sSet) - 1) || '(aCfg.iTool.sSet,sOperation,fRM,fQuiet',
     330             || substr(aCfg.iTool.sSet, pos(',', aCfg.iTool.sSet)) || ')';
     331    else
     332        sRexx = aCfg.iTool.sSet || '(aCfg.iTool.sSet,sOperation,fRM,fQuiet)';
     333    fQuiet = 0;
     334    if (\fRM) then  sOperation = 'install';
     335    else            sOperation = 'uninstall';
     336
     337    /* call the tool procedure with a verify operation. */
     338    interpret 'iRc = '||sRexx;
     339
     340    /* On failure we'll complain and quietly uninstall the tool. */
     341    if (iRc <> 0) then
     342    do
     343        /* complain */
     344        if (\fQuiet) then
     345        do
     346            select
     347                when (iRc = 1) then
     348                    say 'error - 'aCfg.iTool.sId': 'sOperation' not configured - ie. no path.';
     349                when (iRc = 2) then
     350                    say 'error - 'aCfg.iTool.sId': 'sOperation' failed ''cause some vital file/dir wasn''t found.';
     351                when (iRc = 49) then
     352                    say 'error - 'aCfg.iTool.sId': 'sOperation' failed ''cause some vital command didn''t return as expected.';
     353                when (iRc = 99) then
     354                    say 'error - 'aCfg.iTool.sId': 'sOperation' failed ''cause some vital command didn''t return the expected output.';
     355                otherwise
     356                    say 'internal error- 'aCfg.iTool.sId': bad return code from '''sRexx''' rc=' iRc'.';
     357            end
     358        end
     359
     360        /* uninstall silently */
     361        fRM = 1;
     362        fQuiet = 1;
     363        sOperation = 'quietuninstall';
     364        interpret 'rcignore = '||sRexx;
     365    end
     366return iRc;
     367
     368
     369
     370
     371/**
     372 * Configures an tool.
     373 * @returns 0 on success.
     374 *          4 on error/warnings which is continuable.
     375 *          8 or higher or on fatal errors.
     376 * @param   iTool       The tool configuration to configure.
     377 * @param   fForced     If set, we'll force a reconfiguration of the tool.
     378 */
     379CfgConfigure: procedure expose aCfg. aPath. sPathFile
     380    parse arg iTool, fForced
     381
     382    /*
     383     * First verfiy the configuration quietly, we don't have to do anything if it's ok.
     384     */
     385    if (\fForced & (CfgVerify(iTool, 1, 1) = 0)) then
     386        return 0;
     387
     388    /*
     389     * We have to configure it!
     390     */
     391    say 'Config of the 'aCfg.iTool.sId' ('CfgDesc(aCfg.iTool.sId)') tool.';
     392
     393    /* make rexx expression */
     394    if (pos(',', aCfg.iTool.sSet) > 0) then
     395        sRexx = substr(aCfg.iTool.sSet, 1, pos(',', aCfg.iTool.sSet) - 1) || '(aCfg.iTool.sSet,sOperation,fRM,fQuiet',
     396             || substr(aCfg.iTool.sSet, pos(',', aCfg.iTool.sSet)) || ')';
     397    else
     398        sRexx = aCfg.iTool.sSet || '(aCfg.iTool.sSet,sOperation,fRM,fQuiet)';
     399    if (fForced) then   sOperation = 'forcedconfig';
     400    else                sOperation = 'config';
     401    fRM = 0;
     402    fQuiet = 0;
     403
     404
     405    /*
     406     * Loop till rc=0 or user gives up.
     407     */
     408    rc = -1
     409    do while (rc <> 0)
     410        /* configure */
     411        interpret 'rc = '||sRexx;
     412
     413        if (rc <> 0) then do
     414            say 'warning: The user refused to give a path, continuing.';
     415            return 4;
     416        end
     417
     418        /* verifying */
     419        rc = CfgVerify(iTool, 0, 1);
     420        sOperation = 'verify';
     421        if (rc = 0) then
     422            leave;
     423
     424        /* Retry the config if the user wanna do so. */
     425        say ''
     426        say 'Retry configuring the tool' aCfg.iTool.sId '('CfgDesc(aCfg.iTool.sId)')? (y/N)';
     427        sAnswer = PullUser(1);
     428        if (substr(strip(sAnswer),1,1) <> 'Y') then
     429            return 4;
     430        sOperation = 'forcedconfig';
     431    end
     432
     433    /*
     434     * Write path file and return successfully.
     435     */
     436    call PathWrite;
     437return 0;
     438
     439
     440/**
     441 * Verifies a configuration.
     442 * @returns Return code from the environment procedure.
     443 * @param   iTool       The tool index in aCfg.
     444 * @param   fQuiet      If set we'll to a quiet verify.
     445 * @param   fCleanup    If set we'll clean properly.
     446 */
     447CfgVerify: procedure expose aCfg. aPath. sPathFile
     448    parse arg iTool, fQuiet, fCleanup
     449
     450    /* make rexx expression */
     451    if (pos(',', aCfg.iTool.sSet) > 0) then
     452        sRexx = substr(aCfg.iTool.sSet, 1, pos(',', aCfg.iTool.sSet) - 1) || '(aCfg.iTool.sSet,sOperation,fRM,fQuiet',
     453             || substr(aCfg.iTool.sSet, pos(',', aCfg.iTool.sSet)) || ')';
     454    else
     455        sRexx = aCfg.iTool.sSet || '(aCfg.iTool.sSet,sOperation,fRM,fQuiet)';
     456    if (fQuiet) then    sOperation = 'quietverify';
     457    else                sOperation = 'verify';
     458    fRM = 0;
     459
     460    /* call the tool procedure with a verify operation. */
     461    interpret 'iRc = '||sRexx;
     462
     463    /* On failure we'll complain and quietly uninstall the tool. */
     464    if (iRc <> 0) then
     465    do
     466        /* complain */
     467        if (\fQuiet) then
     468        do
     469            select
     470                when (iRc = 1) then
     471                    say 'warning - 'aCfg.iTool.sId': The user refused to give a path, continuing.';
     472                when (iRc = 2) then
     473                    say 'error - 'aCfg.iTool.sId': verify failed ''cause some vital file/dir wasn''t found.';
     474                when (iRc = 49) then
     475                    say 'error - 'aCfg.iTool.sId': verify failed ''cause some vital command didn''t return as expected.';
     476                when (iRc = 99) then
     477                    say 'error - 'aCfg.iTool.sId': verify failed ''cause some vital command didn''t return the expected output.';
     478                otherwise
     479                    say 'internal error- 'aCfg.iTool.sId': bad return code from '''sRexx''' iRc=' iRc'.';
     480            end
     481        end
     482        fCleanup = 1;
     483    end
     484
     485    /* uninstall */
     486    if (fCleanup) then
     487    do
     488        fRM = 1;
     489        fQuiet = 1;
     490        sOperation = 'quietuninstall';
     491        interpret 'rcignore = '||sRexx;
     492    end
     493return iRc;
     494
     495
     496/**
     497 * Verifies a configuration.
     498 * @returns Return code from the environment procedure.
     499 * @param   iTool   The tool index in aCfg.
     500 * @param   fQuiet  If set we'll to a quiet verify.
     501 */
     502CfgIsConfigured: procedure expose aCfg. aPath. sPathFile
     503    parse arg iTool
     504
     505    /* make rexx expression */
     506    if (pos(',', aCfg.iTool.sSet) > 0) then
     507        sRexx = substr(aCfg.iTool.sSet, 1, pos(',', aCfg.iTool.sSet) - 1) || '(aCfg.iTool.sSet,''quietisconfig'',0,1',
     508             || substr(aCfg.iTool.sSet, pos(',', aCfg.iTool.sSet)) || ')';
     509    else
     510        sRexx = aCfg.iTool.sSet || '(aCfg.iTool.sSet,''quietisconfig'',0,1)';
     511    interpret 'iRc = '||sRexx;
     512return (iRc = 0);
     513
     514
     515
     516/**
     517 * Checks if a file exists.
     518 * @param   sFile   Name of the file to look for.
     519 * @param   fQuiet  Flag which tells whether to be quiet or not.
     520 * @returns TRUE if file exists.
     521 *          FALSE if file doesn't exists.
     522 */
     523CfgVerifyFile: procedure expose aCfg. aPath. sPathFile
     524    parse arg sFile, fQuiet
     525    rc = stream(sFile, 'c', 'query exist');
     526    if ((rc = '') & \fQuiet) then
     527        say 'Verify existance of '''sFile''' failed.';
     528return rc <> '';
     529
     530
     531/**
     532 * Checks if a directory exists.
     533 * @param   sDir   Name of the dir to look for.
     534 * @param   fQuiet  Flag which tells whether to be quiet or not.
     535 * @returns TRUE if file exists.
     536 *          FALSE if file doesn't exists.
     537 */
     538CfgVerifyDir: procedure expose aCfg. aPath. sPathFile
     539    parse arg sDir, fQuiet
     540    rc = SysFileTree(sDir, 'sDirs', 'DO');
     541    if (rc = 0 & sDirs.0 = 1) then
     542        return 1;
     543    if (\fQuiet) then
     544        say 'Verify existance of '''sDir''' failed.';
     545return 0;
     546
     547
     548
    256549
    257550
     
    261554 * @returns Lower cased, absolute, backward slashed, path to program.
    262555 * @param   sPathId     Program identifier. (lowercase!)
    263  *
    264  * @remark
    265  * Unless this causes a lot of trouble, we'll keep it in the script.
    266  * Having this externaly will slow down the script execution
    267  * somewhat I'm afraid. And the script is slow enought as it is.
    268  *
    269556 */
    270557PathQuery: procedure expose aCfg. aPath. sPathFile
    271     parse arg sPathId, sEnvId, fCfg, fOptional
     558    parse arg sPathId, sToolId, sOperation, fOptional
    272559
    273560    if (fOptional = '') then
     
    281568
    282569        /*
    283          * If no data found fill in defaults.
     570         * If no data found fill in defaults (if known host).
    284571         */
    285572        if (aPath.0 = 0) then
    286573        do
    287             say 'Info: No or empty path file, using defaults.';
    288             i = 1;
    289             aPath.i.sPId = 'cvs';                       aPath.i.sPath = 'f:\cvs';                       i = i + 1;
    290             aPath.i.sPId = 'emx';                       aPath.i.sPath = 'f:\emx';                       i = i + 1;
    291             aPath.i.sPId = 'emxpgcc';                   aPath.i.sPath = 'f:\emxpgcc';                   i = i + 1;
    292             aPath.i.sPId = 'db2v52';                    aPath.i.sPath = 'f:\sqllib52';                  i = i + 1;
    293             aPath.i.sPId = 'icatgam';                   aPath.i.sPath = 'f:\icatos2';                   i = i + 1;
    294             aPath.i.sPId = 'icatgam406rc1';             aPath.i.sPath = 'f:\icatos2.4.0.6.rc1';         i = i + 1;
    295             aPath.i.sPId = 'icatpe';                    aPath.i.sPath = 'f:\icatpe';                    i = i + 1;
    296             aPath.i.sPId = 'ida38';                     aPath.i.sPath = 'f:\ida38';                     i = i + 1;
    297             aPath.i.sPId = 'ida40';                     aPath.i.sPath = 'f:\ida401';                    i = i + 1;
    298             aPath.i.sPId = 'ida414';                    aPath.i.sPath = 'f:\ida414';                    i = i + 1;
    299             aPath.i.sPId = 'idasdk';                    aPath.i.sPath = 'f:\idasdk';                    i = i + 1;
    300             aPath.i.sPId = 'ddkbase';                   aPath.i.sPath = 'f:\ddk\base';                  i = i + 1;
    301             aPath.i.sPId = 'home';                      aPath.i.sPath = 'e:\user\kso';                  i = i + 1;
    302             aPath.i.sPId = 'mscv6-16';                  aPath.i.sPath = 'f:\ddktools\toolkits\msc60';   i = i + 1;
    303             aPath.i.sPId = 'mysql';                     aPath.i.sPath = 'f:\mysql2';                    i = i + 1;
    304             aPath.i.sPId = 'netqos2';                   aPath.i.sPath = 'f:\netqos2';                   i = i + 1;
    305             aPath.i.sPId = 'perl';                      aPath.i.sPath = 'f:\perllib';                   i = i + 1;
    306             aPath.i.sPId = 'python';                    aPath.i.sPath = 'f:\python';                    i = i + 1;
    307             aPath.i.sPId = 'toolkit40';                 aPath.i.sPath = 'f:\toolkit';                   i = i + 1;
    308             aPath.i.sPId = 'toolkit45';                 aPath.i.sPath = 'f:\toolkit45';                 i = i + 1;
    309             aPath.i.sPId = 'toolkit451';                aPath.i.sPath = 'f:\toolkit451';                i = i + 1;
    310             aPath.i.sPId = 'unixroot';                  aPath.i.sPath = 'e:\unix';                      i = i + 1;
    311             aPath.i.sPId = 'xfree86';                   aPath.i.sPath = 'e:\xfree86';                   i = i + 1;
    312             aPath.i.sPId = 'vac308';                    aPath.i.sPath = 'f:\ibmcpp';                    i = i + 1;
    313             aPath.i.sPId = 'vac365';                    aPath.i.sPath = 'f:\ibmcxxo';                   i = i + 1;
    314             aPath.i.sPId = 'vac40';                     aPath.i.sPath = 'f:\ibmcpp40';                  i = i + 1;
    315             aPath.i.sPId = 'warpin';                    aPath.i.sPath = 'f:\warpin';                    i = i + 1;
    316             aPath.i.sPId = 'watcom11';                  aPath.i.sPath = 'f:\watcom';                    i = i + 1;
    317             aPath.i.sPId = 'watcom11c';                 aPath.i.sPath = 'f:\watcom11c';                 i = i + 1;
    318             aPath.i.sPId = 'testcase_drive_unused';     aPath.i.sPath = 'l'; /* reqired */              i = i + 1;
    319             aPath.i.sPId = 'testcase_drive_fixed';      aPath.i.sPath = 'c'; /* reqired */              i = i + 1;
    320             aPath.i.sPId = 'testcase_drive_floppy';     aPath.i.sPath = 'a'; /* reqired */              i = i + 1;
    321             aPath.i.sPId = 'testcase_drive_cdrom';      aPath.i.sPath = 'k'; /* optional */             i = i + 1;
    322             aPath.i.sPId = 'testcase_drive_network';    aPath.i.sPath = 's'; /* optional */             i = i + 1;
    323             /*aPath.i.sPId = 'testcase_drive_ramdisk';    aPath.i.sPath = '';  /* optional */             i = i + 1;*/
    324             /*aPath.i.sPId = '';          aPath.i.sPath =      i = i + 1;*/
    325             aPath.0 = i - 1;
    326 
    327             /*
    328              * Write to file.
    329              */
     574            call PathSetDefault;
    330575            call PathWrite;
    331576        end
     
    335580     * Check for forced config.
    336581     */
    337     if (fCfg = 3) then
     582    if (sOperation = 'forcedconfig') then
    338583        call PathRemove sPathId;
    339584    else
     
    352597
    353598    /*
    354      * Configure then we'll ask the user.
    355      */
    356     if (fCfg > 0) then
    357         return PathConfig(fCfg, sPathId, sEnvId);
    358 
    359     /*
    360      * Error
    361      */
     599     * Path wasn't found!
     600     */
     601
     602    /* for quiet verify and configured test, fail sliently. */
     603    if ((sOperation = 'quietisconfig') | (sOperation = 'quietverify')) then
     604        return '';
     605
     606    /* if configure operation the configure it. */
     607    if (pos('config', sOperation) > 0) then
     608        return PathConfig(sOperation, sPathId, sToolId);
     609
     610    /* elsewise this is an fatal error */
    362611    if (\fOptional) then
    363612    do
    364         say 'Fatal error: Path information for program '''sPathId''' was not found.';
     613        say 'Fatal error: Path information for '''sPathId''' was not found.';
    365614        call SysSleep 5;
    366615        exit(16);
     
    468717
    469718
     719
     720/**
     721 * Fills 'aPath.' with default settings overwriting anything in the table.
     722 */
     723PathSetDefault: procedure expose aCfg. aPath. sPathFile
     724    i = 1;
     725
     726    /*
     727     * Bird: home boxes.
     728     */
     729    if ((translate(EnvGet('HOSTNAME')) = 'UNIVAC') | (translate(EnvGet('HOSTNAME')) = 'ENIAC')) then
     730    do
     731        say 'Info: No or empty path file, using birds defaults.';
     732        aPath.i.sPId = 'cvs';                       aPath.i.sPath = 'f:\cvs';                       i = i + 1;
     733        aPath.i.sPId = 'emx';                       aPath.i.sPath = 'f:\emx';                       i = i + 1;
     734        aPath.i.sPId = 'emxpgcc';                   aPath.i.sPath = 'f:\emxpgcc';                   i = i + 1;
     735        aPath.i.sPId = 'db2v52';                    aPath.i.sPath = 'f:\sqllib52';                  i = i + 1;
     736        aPath.i.sPId = 'icatgam';                   aPath.i.sPath = 'f:\icatos2';                   i = i + 1;
     737        aPath.i.sPId = 'icatgam406rc1';             aPath.i.sPath = 'f:\icatos2.4.0.6.rc1';         i = i + 1;
     738        aPath.i.sPId = 'icatpe';                    aPath.i.sPath = 'f:\icatpe';                    i = i + 1;
     739        aPath.i.sPId = 'ida38';                     aPath.i.sPath = 'f:\ida38';                     i = i + 1;
     740        aPath.i.sPId = 'ida40';                     aPath.i.sPath = 'f:\ida401';                    i = i + 1;
     741        aPath.i.sPId = 'ida414';                    aPath.i.sPath = 'f:\ida414';                    i = i + 1;
     742        aPath.i.sPId = 'idasdk';                    aPath.i.sPath = 'f:\idasdk';                    i = i + 1;
     743        aPath.i.sPId = 'ddkbase';                   aPath.i.sPath = 'f:\ddk\base';                  i = i + 1;
     744        aPath.i.sPId = 'home';                      aPath.i.sPath = 'e:\user\kso';                  i = i + 1;
     745        aPath.i.sPId = 'mscv6-16';                  aPath.i.sPath = 'f:\ddktools\toolkits\msc60';   i = i + 1;
     746        aPath.i.sPId = 'mysql';                     aPath.i.sPath = 'f:\mysql2';                    i = i + 1;
     747        aPath.i.sPId = 'netqos2';                   aPath.i.sPath = 'f:\netqos2';                   i = i + 1;
     748        aPath.i.sPId = 'perl';                      aPath.i.sPath = 'f:\perllib';                   i = i + 1;
     749        aPath.i.sPId = 'python';                    aPath.i.sPath = 'f:\python';                    i = i + 1;
     750        aPath.i.sPId = 'toolkit40';                 aPath.i.sPath = 'f:\toolkit';                   i = i + 1;
     751        aPath.i.sPId = 'toolkit45';                 aPath.i.sPath = 'f:\toolkit45';                 i = i + 1;
     752        aPath.i.sPId = 'toolkit451';                aPath.i.sPath = 'f:\toolkit451';                i = i + 1;
     753        aPath.i.sPId = 'unixroot';                  aPath.i.sPath = 'e:\unix';                      i = i + 1;
     754        aPath.i.sPId = 'xfree86';                   aPath.i.sPath = 'e:\xfree86';                   i = i + 1;
     755        aPath.i.sPId = 'vac308';                    aPath.i.sPath = 'f:\ibmcpp';                    i = i + 1;
     756        aPath.i.sPId = 'vac365';                    aPath.i.sPath = 'f:\ibmcxxo';                   i = i + 1;
     757        aPath.i.sPId = 'vac40';                     aPath.i.sPath = 'f:\ibmcpp40';                  i = i + 1;
     758        aPath.i.sPId = 'warpin';                    aPath.i.sPath = 'f:\warpin';                    i = i + 1;
     759        aPath.i.sPId = 'watcom11';                  aPath.i.sPath = 'f:\watcom';                    i = i + 1;
     760        aPath.i.sPId = 'watcom11c';                 aPath.i.sPath = 'f:\watcom11c';                 i = i + 1;
     761        aPath.i.sPId = 'testcase_drive_unused';     aPath.i.sPath = 'l'; /* reqired */              i = i + 1;
     762        aPath.i.sPId = 'testcase_drive_fixed';      aPath.i.sPath = 'c'; /* reqired */              i = i + 1;
     763        aPath.i.sPId = 'testcase_drive_floppy';     aPath.i.sPath = 'a'; /* reqired */              i = i + 1;
     764        aPath.i.sPId = 'testcase_drive_cdrom';      aPath.i.sPath = 'k'; /* optional */             i = i + 1;
     765        aPath.i.sPId = 'testcase_drive_network';    aPath.i.sPath = 's'; /* optional */             i = i + 1;
     766        /*aPath.i.sPId = 'testcase_drive_ramdisk';    aPath.i.sPath = '';  /* optional */             i = i + 1;*/
     767        /*aPath.i.sPId = '';          aPath.i.sPath =      i = i + 1;*/
     768    end
     769
     770
     771    /*
     772     * Bird: work box.
     773     */
     774    if (translate(EnvGet('HOSTNAME')) = 'BIRD') then
     775    do
     776        say 'Info: No or empty path file, using birds work defaults.';
     777        aPath.i.sPId = 'cvs';                       aPath.i.sPath = 'e:\cvs';                       i = i + 1;
     778        aPath.i.sPId = 'emx';                       aPath.i.sPath = 'e:\emx';                       i = i + 1;
     779        aPath.i.sPId = 'emxpgcc';                   aPath.i.sPath = 'e:\emxpgcc';                   i = i + 1;
     780        aPath.i.sPId = 'db2v52';                    aPath.i.sPath = 'e:\sqllib52';                  i = i + 1;
     781        aPath.i.sPId = 'icatgam';                   aPath.i.sPath = 'e:\icatos2';                   i = i + 1;
     782        aPath.i.sPId = 'icatgam406rc1';             aPath.i.sPath = 'e:\icatos2.4.0.6.rc1';         i = i + 1;
     783        aPath.i.sPId = 'icatpe';                    aPath.i.sPath = 'e:\icatpe';                    i = i + 1;
     784        aPath.i.sPId = 'ida38';                     aPath.i.sPath = 'e:\ida38';                     i = i + 1;
     785        aPath.i.sPId = 'ida40';                     aPath.i.sPath = 'e:\ida401';                    i = i + 1;
     786        aPath.i.sPId = 'ida414';                    aPath.i.sPath = 'e:\ida414';                    i = i + 1;
     787        aPath.i.sPId = 'idasdk';                    aPath.i.sPath = 'e:\idasdk';                    i = i + 1;
     788        aPath.i.sPId = 'ddkbase';                   aPath.i.sPath = 'e:\ddk\base';                  i = i + 1;
     789        aPath.i.sPId = 'home';                      aPath.i.sPath = 'e:\user\kso';                  i = i + 1;
     790        aPath.i.sPId = 'mscv6-16';                  aPath.i.sPath = 'e:\ddktools\toolkits\msc60';   i = i + 1;
     791        aPath.i.sPId = 'mysql';                     aPath.i.sPath = 'e:\mysql2';                    i = i + 1;
     792        aPath.i.sPId = 'netqos2';                   aPath.i.sPath = 'e:\netqos2';                   i = i + 1;
     793        aPath.i.sPId = 'perl';                      aPath.i.sPath = 'e:\perllib';                   i = i + 1;
     794        aPath.i.sPId = 'python';                    aPath.i.sPath = 'e:\python';                    i = i + 1;
     795        aPath.i.sPId = 'toolkit40';                 aPath.i.sPath = 'e:\toolkit';                   i = i + 1;
     796        aPath.i.sPId = 'toolkit45';                 aPath.i.sPath = 'e:\toolkit45';                 i = i + 1;
     797        aPath.i.sPId = 'toolkit451';                aPath.i.sPath = 'e:\toolkit451';                i = i + 1;
     798        aPath.i.sPId = 'unixroot';                  aPath.i.sPath = 'e:\unix';                      i = i + 1;
     799        aPath.i.sPId = 'xfree86';                   aPath.i.sPath = 'e:\xfree86';                   i = i + 1;
     800        aPath.i.sPId = 'vac308';                    aPath.i.sPath = 'e:\ibmcpp';                    i = i + 1;
     801        aPath.i.sPId = 'vac365';                    aPath.i.sPath = 'e:\ibmcxxo';                   i = i + 1;
     802        aPath.i.sPId = 'vac40';                     aPath.i.sPath = 'e:\ibmcpp40';                  i = i + 1;
     803        aPath.i.sPId = 'warpin';                    aPath.i.sPath = 'e:\warpin';                    i = i + 1;
     804        aPath.i.sPId = 'watcom11';                  aPath.i.sPath = 'e:\watcom';                    i = i + 1;
     805        aPath.i.sPId = 'watcom11c';                 aPath.i.sPath = 'e:\watcom11c';                 i = i + 1;
     806        aPath.i.sPId = 'testcase_drive_unused';     aPath.i.sPath = 't'; /* reqired */              i = i + 1;
     807        aPath.i.sPId = 'testcase_drive_fixed';      aPath.i.sPath = 'd'; /* reqired */              i = i + 1;
     808        aPath.i.sPId = 'testcase_drive_floppy';     aPath.i.sPath = 'a'; /* reqired */              i = i + 1;
     809        aPath.i.sPId = 'testcase_drive_cdrom';      aPath.i.sPath = 'f'; /* optional */             i = i + 1;
     810        aPath.i.sPId = 'testcase_drive_network';    aPath.i.sPath = 'x'; /* optional */             i = i + 1;
     811        /*aPath.i.sPId = 'testcase_drive_ramdisk';    aPath.i.sPath = '';  /* optional */             i = i + 1;*/
     812        /*aPath.i.sPId = '';          aPath.i.sPath =      i = i + 1;*/
     813    end
     814
     815    /* add your own stuff here.. */
     816    aPath.0 = i - 1;
     817return 0;
     818
     819
    470820/**
    471821 * Configure a path.
    472822 * @returns Path on success.
    473823 *          '' on failure.
    474  * @param   fCfg        The config flags.
    475  *                      1 = configure if needed.
    476  *                      3 = force config.
     824 * @param   sOperation  The operation - 'config' or 'forcedconfig'
    477825 * @param   sPathId     The path to configure.
    478  * @param   sEnvId      The environment Id.
     826 * @param   sToolId     The tool Id.
    479827 */
    480828PathConfig: procedure expose aCfg. aPath. sPathFile
    481     parse arg fCfg, sPathId, sEnvId
    482 
    483     /*
    484      * Config loop.
    485      */
    486     if (fCfg = 1) then
     829    parse arg sOperation, sPathId, sToolId
     830
     831    /*
     832     * If not forced we'll ask first.
     833     */
     834    if (sOperation <> 'forcedconfig') then
    487835    do
    488         say 'Do you want to configure the path '''sPathId''' for the '''sEnvId'''('CfgDesc(sEnvId)') environment? (y/N)';
     836        say 'Do you want to configure the path '''sPathId''' for the '''sToolId'''('CfgDesc(sToolId)') tool? (y/N)';
    489837        sAnswer = PullUser(1);
    490838        if (substr(strip(sAnswer),1,1) <> 'Y') then
    491839            return '';
    492840    end
     841
     842    /*
     843     * Config loop.
     844     */
    493845    do i = 1 to 128
    494846
    495         say 'Give us the path then:'
     847        say 'Give us the path for '''sPathId'''('''sToolId'''/'CfgDesc(sToolId)'):'
    496848        sThePath = translate(strip(strip(strip(PullUser()), 'T','\'),'T','/'), '\', '/');
    497849        /*say 'Debug: sThePath='sThePath;*/
     
    506858            aPath.j.sPath = translate(strip(strip(strip(sThePath), 'T','\'),'T','/'), '\', '/');
    507859            aPath.0 = j;
    508 
    509             /*
    510              * Write to file and return successfully.
    511              */
    512             call PathWrite;
    513860            return sThePath;
    514861        end
    515862        else
    516863            say 'error: invalid path name.';
     864        say 'Debug 9'
    517865
    518866        /* ask if retry */
    519867        if (i >= 2) then
    520868            say 'You''re not trying hard, are you?';
    521         say 'Wanna try giving us an *valid* path for the path '''sPathId''' for the '''sEnvId'''('CfgDesc(sEnvId)') environment? (y/N)';
     869        say 'Wanna try giving us an *valid* path for the path '''sPathId''' for the '''sToolId'''('CfgDesc(sToolId)') tool? (y/N)';
    522870        sAnswer = PullUser(1);
    523871        if (substr(strip(sAnswer),1,1) <> 'Y') then
     
    527875    say 'Giving up!';
    528876return '';
    529 
    530 
    531 /**
    532  * Get the description of an environment.
    533  * @returns Description string.
    534  *          '' if not found.
    535  * @param   sEnvId      Environment id.
    536  */
    537 CfgDesc: procedure expose aCfg. aPath. sPathFile
    538     parse arg sEnvId
    539     do i = 1 to aCfg.0
    540         if (aCfg.i.sId = sEnvId) then
    541             return aCfg.i.sDesc;
    542     end
    543 return sEnvId;
    544 
    545 
    546 /**
    547  * Lookups up an env. config in the aCfg. array.
    548  * @return  Index of sEnvId.
    549  *          aCfg.0+1 on error.
    550  * @param   sEnvId      Environment id.
    551  */
    552 CfgLookup: procedure expose aCfg. aPath. sPathFile
    553     parse arg sEnvId
    554     iEnv = 1;
    555     do while ((iEnv <= aCfg.0) & (aCfg.iEnv.sId <> sEnvId))
    556         iEnv = iEnv + 1;
    557     end
    558 return iEnv;
    559877
    560878
     
    607925    if (rc = 0 & sDirs.0 = 1) then
    608926        return 1;
    609     say sComplain ''''sDir'''.';
     927    if (sComplain <> '') then do
     928        say sComplain ''''sDir'''.';
    610929return 0;
    611930
     
    622941 */
    623942CheckCmdOutput: procedure
    624     parse arg sCmd, rcCmdExpected, sOutputPartExpected
     943    parse arg sCmd, rcCmdExpected, fQuiet, sOutputPartExpected
    625944
    626945    /*
     
    643962     * If command
    644963     */
    645     rc = 0
     964    rc = 0;
    646965    if (rcCmd = rcCmdExpected) then
    647966    do
    648967        if (pos(sOutputPartExpected, sOutput) <= 0) then
    649968        do
     969            /*
    650970            say 'Debug - start'
    651971            say 'Debug:' sOutputPartExpected
     
    653973            say sOutput
    654974            say 'Debug - end'
     975            */
    655976            rc = 99
    656977        end
     
    658979    else
    659980        rc = 49
    660     if (rc <> 0) then
    661         say 'Debug:' sCmd 'rc='rc' rcCmd='rcCmd;
     981
     982    if (\fQuiet & rc <> 0) then
     983        say 'Debug:' sCmd 'rc='rc' rcCmd='rcCmd 'rcCmdExpected='rcCmdExpected;
    662984return rc;
    663985
    664 
    665 /**
    666  * Environment procedures section
    667  * @returns 0 on success.
    668  *          1 if PathQuery() failed.
    669  *          2 if some vital file wasn't found in the config verify.
    670  *          49 if verify command rc mismatched.
    671  *          99 if verify command output mismatched.
    672  **/
    673 
    674 
    675 /*
    676  * Concurrent Versions System (CVS)
    677  */
    678 CVS: procedure expose aCfg. aPath. sPathFile
    679     parse arg sEnvId,fRM,fCfg
    680 
    681 
    682     /*
    683      * Concurrent Versions System (CVS) main directory.
    684      */
    685     sPathCVS    = PathQuery('cvs', sEnvId, fCfg);
    686     if (sPathCVS = '') then
    687         return 1;
    688     sPathHome   = PathQuery('home', sEnvId, fCfg);
    689     if (sPathHome = '') then
    690         return 1;
    691 
    692     call EnvVar_Set      fRM, 'PATH_CVS',    sPathCVS;
    693     call EnvVar_AddFront fRM, 'path',        sPathCVS'\bin;'
    694     call EnvVar_AddFront fRM, 'bookshelf',   sPathCVS'\book;'
    695     call EnvVar_AddFront fRM, 'bookshelf',   sPathCVS'\book;'
    696     call EnvVar_Set      fRM, 'home',        translate(sPathHome, '/','\');
    697 
    698     /* verify */
    699     if (fCfg > 0) then
    700     do
    701         if (\FileExists(sPathCVS'\bin\cvs.exe', 'error: verify didn''t find')) then
    702             return 2;
    703         if (length(sPathHome) <= 2) then
    704         do
    705             say 'Error: The home directory is to short!';
    706             return 2;
    707         end
    708         if (\DirExists(sPathHome)) then
    709         do
    710             say 'Error: The home directory must exist!';
    711             return 2;
    712         end
    713         return CheckCmdOutput('cvs --version', 0, 'Concurrent Versions System (CVS) 1.1');
    714     end
    715 return 0;
    716 
    717 
    718 /*
    719  * EMX
    720  */
    721 EMX: procedure expose aCfg. aPath. sPathFile
    722     parse arg sEnvId,fRM,fCfg
    723 
    724     /*
    725      * EMX/GCC main directory.
    726      */
    727     sEMX        = PathQuery('emx', sEnvId, fCfg);
    728     if (sEMX = '') then
    729         return 1;
    730 
    731     sEMXBack    = translate(sEMX, '\', '/');
    732     sEMXForw    = translate(sEMX, '/', '\');
    733     call EnvVar_Set      fRM, 'PATH_EMX', sEMXBack;
    734     call EnvVar_Set      fRM, 'CCENV',      'EMX'
    735     call EnvVar_Set      fRM, 'BUILD_ENV',  'EMX'
    736     call EnvVar_Set      fRM, 'BUILD_PLATFORM', 'OS2'
    737 
    738     call EnvVar_AddFront fRM, 'BEGINLIBPATH',       sEMXBack'\dll;'
    739     call EnvVar_AddFront fRM, 'PATH',               sEMXBack'\bin;'
    740     call EnvVar_AddFront fRM, 'DPATH',              sEMXBack'\book;'
    741     call EnvVar_AddFront fRM, 'BOOKSHELF',          sEMXBack'\book;'
    742     call EnvVar_AddFront fRM, 'HELP',               sEMXBack'\help;'
    743     call EnvVar_AddFront fRM, 'C_INCLUDE_PATH',     sEMXForw'/include'
    744     call EnvVar_AddFront fRM, 'LIBRARY_PATH',       sEMXForw'/lib'
    745     call EnvVar_AddFront fRM, 'CPLUS_INCLUDE_PATH', sEMXForw'/include/cpp;'sEMXForw'/include'
    746     call EnvVar_Set      fRM, 'PROTODIR',           sEMXForw'/include/cpp/gen'
    747     call EnvVar_Set      fRM, 'OBJC_INCLUDE_PATH',  sEMXForw'/include'
    748     call EnvVar_Set      fRM, 'GCCLOAD',            '5'
    749     call EnvVar_Set      fRM, 'GCCOPT',             '-pipe'
    750     call EnvVar_AddFront fRM, 'INFOPATH',           sEMXForw'/info'
    751     call EnvVar_Set      fRM, 'EMXBOOK',            'emxdev.inf+emxlib.inf+emxgnu.inf+emxbsd.inf'
    752     call EnvVar_AddFront fRM, 'HELPNDX',            'emxbook.ndx', '+', 1
    753     call EnvVar_Set      fRM, 'EMXOPT',             '-c -n -h1024'
    754     if EnvVar_Get('TERM') = '' then do
    755         call EnvVar_Set  fRM, 'TERM',               'ansi'
    756         call EnvVar_Set  fRM, 'TERMCAP',            sEMXForw'/etc/termcap.dat'
    757     end
    758 
    759     /* verify */
    760     if (fCfg > 0) then
    761     do
    762         if (    \FileExists(sEmxBack'\bin\gcc.exe', 'error: verify didn''t find'),
    763             |   \FileExists(sEmxBack'\bin\emxomf.exe', 'error: verify didn''t find'),
    764             |   \FileExists(sEmxBack'\bin\emxrev.cmd', 'error: verify didn''t find'),
    765             |   \FileExists(sEmxBack'\lib\mt\c.a', 'error: verify didn''t find'),
    766             |   \FileExists(sEmxBack'\lib\mt\c.lib', 'error: verify didn''t find'),
    767             |   \FileExists(sEmxBack'\lib\mt\sys.lib', 'error: verify didn''t find'),
    768             |   \FileExists(sEmxBack'\lib\mt\emx.a', 'error: verify didn''t find'),
    769             |   \FileExists(sEmxBack'\lib\mt\emx.lib', 'error: verify didn''t find'),
    770             |   \FileExists(sEmxBack'\lib\mt\c_import.a', 'error: verify didn''t find'),
    771             |   \FileExists(sEmxBack'\lib\mt\c_import.lib', 'error: verify didn''t find'),
    772             |   \FileExists(sEmxBack'\lib\c_alias.a', 'error: verify didn''t find'),
    773             |   \FileExists(sEmxBack'\lib\c_alias.lib', 'error: verify didn''t find'),
    774             |   \FileExists(sEmxBack'\lib\emx2.a', 'error: verify didn''t find'),
    775             |   \FileExists(sEmxBack'\lib\emx2.lib', 'error: verify didn''t find'),
    776             ) then
    777             return 2;
    778         rc = CheckCmdOutput('gcc --version', 0, '2.8.1');
    779         if (rc = 0) then
    780             rc = CheckCmdOutput('emxrev.cmd', 0,,
    781                                 'EMX : revision = 61'||'0d0a'x ||,
    782                                 'EMXIO : revision = 60'||'0d0a'x||,
    783                                 'EMXLIBC : revision = 63'||'0d0a'x||,
    784                                 'EMXLIBCM : revision = 64'||'0d0a'x||,
    785                                 'EMXLIBCS : revision = 64'||'0d0a'x||,
    786                                 'EMXWRAP : revision = 60'||'0d0a'x);
    787         return rc;
    788     end
    789 return 0;
    790 
    791 
    792 /*
    793  * EMX PGCC - must be installed on to the ordinar EMX.
    794  */
    795 EMXPGCC: procedure expose aCfg. aPath. sPathFile
    796     parse arg sEnvId,fRM,fCfg
    797 
    798     /*
    799      * EMX/GCC main directory.
    800      */
    801     sEMXPGCC    = PathQuery('emxpgcc', sEnvId, fCfg);
    802     if (sEMXPGCC = '') then
    803         return 1;
    804     sEMXBack    = translate(sEMXPGCC, '\', '/');
    805     sEMXForw    = translate(sEMXPGCC, '/', '\');
    806     call EnvVar_Set      fRM, 'PATH_EMXPGCC',   sEMXBack;
    807     call EnvVar_Set      fRM, 'CCENV',          'EMX'
    808     call EnvVar_Set      fRM, 'BUILD_ENV',      'EMX'
    809     call EnvVar_Set      fRM, 'BUILD_PLATFORM', 'OS2'
    810 
    811     call EnvVar_AddFront fRM, 'BEGINLIBPATH',       sEMXBack'\dll;'
    812     call EnvVar_AddFront fRM, 'PATH',               sEMXBack'\bin;'
    813     call EnvVar_AddFront fRM, 'DPATH',              sEMXBack'\book;'
    814     call EnvVar_AddFront fRM, 'BOOKSHELF',          sEMXBack'\book;'
    815     call EnvVar_AddFront fRM, 'HELP',               sEMXBack'\help;'
    816     call EnvVar_AddFront fRM, 'C_INCLUDE_PATH',     sEMXForw'/include'
    817     call EnvVar_AddFront fRM, 'LIBRARY_PATH',       sEMXForw'/lib'
    818     call EnvVar_AddFront fRM, 'CPLUS_INCLUDE_PATH', sEMXForw'/include/cpp;'sEMXForw'/include'
    819     call EnvVar_Set      fRM, 'PROTODIR',           sEMXForw'/include/cpp/gen'
    820     call EnvVar_Set      fRM, 'OBJC_INCLUDE_PATH',  sEMXForw'/include'
    821     call EnvVar_AddFront fRM, 'INFOPATH',           sEMXForw'/info'
    822     call EnvVar_Set      fRM, 'EMXBOOK',            'emxdev.inf+emxlib.inf+emxgnu.inf+emxbsd.inf'
    823     call EnvVar_AddFront fRM, 'HELPNDX',            'emxbook.ndx', '+', 1
    824 
    825     /* verify */
    826     if (fCfg > 0) then
    827     do
    828         if (    \FileExists(sEmxBack'\bin\gcc.exe', 'error: verify didn''t find'),
    829             |   \FileExists(sEmxBack'\bin\g++.exe', 'error: verify didn''t find'),
    830             |   \FileExists(sEmxBack'\bin\as.exe', 'error: verify didn''t find'),
    831             |   \FileExists(sEmxBack'\bin\emxomf.exe', 'error: verify didn''t find'),
    832             |   \FileExists(sEmxBack'\lib\gcc29160.a', 'error: verify didn''t find'),
    833             |   \FileExists(sEmxBack'\lib\gcc29160.lib', 'error: verify didn''t find'),
    834             |   \FileExists(sEmxBack'\lib\iberty.a', 'error: verify didn''t find'),
    835             |   \FileExists(sEmxBack'\lib\iberty.lib', 'error: verify didn''t find'),
    836             |   \FileExists(sEmxBack'\lib\iberty_s.a', 'error: verify didn''t find'),
    837             |   \FileExists(sEmxBack'\lib\iberty_s.lib', 'error: verify didn''t find'),
    838             |   \FileExists(sEmxBack'\lib\opcodes.a', 'error: verify didn''t find'),
    839             |   \FileExists(sEmxBack'\lib\opcodes.lib', 'error: verify didn''t find'),
    840             |   \FileExists(sEmxBack'\lib\opcodes_s.a', 'error: verify didn''t find'),
    841             |   \FileExists(sEmxBack'\lib\opcodes_s.lib', 'error: verify didn''t find'),
    842             ) then
    843             return 2;
    844         rc = CheckCmdOutput('gcc --version', 0, 'pgcc-2.95.2');
    845         if (rc = 0) then
    846             rc = CheckCmdOutput('g++ --version', 0, 'pgcc-2.95.2');
    847         if (rc = 0) then
    848             rc = CheckCmdOutput('as --version', 0, 'GNU assembler 2.9.1');
    849         return rc;
    850     end
    851 return 0;
    852 
    853 /*
    854  * IBM DB2 v5.2
    855  */
    856 db2v52: procedure expose aCfg. aPath. sPathFile
    857     parse arg sEnvId,fRM,fCfg
    858     sPathDB2   = PathQuery('db2v52', sEnvId, fCfg);
    859     if (sPathDB2 = '') then
    860         return 1;
    861     call EnvVar_Set      fRm, 'PATH_DB2',    sPathDB2;
    862     call EnvVar_Set      fRm, 'db2path',     sPathDB2;
    863     call EnvVar_AddFront fRm, 'beginlibpath',sPathDB2'\dll;'sPathDB2'\alt;'
    864     call EnvVar_AddFront fRm, 'path',        sPathDB2'\bin;'sPathDB2'\alt;'
    865     call EnvVar_AddFront fRm, 'dpath',       sPathDB2'\bin;'sPathDB2';'
    866     call EnvVar_AddFront fRm, 'help',        sPathDB2'\help;'
    867     call EnvVar_AddEnd   fRm, 'classpath',   '.;'sPathDB2'\JAVA\DB2JAVA.ZIP;'sPathDB2'\JAVA\RUNTIME.ZIP;'sPathDB2'\JAVA\SQLJ.ZIP;'
    868     call EnvVar_Set      fRM, 'db2instace',  'DB2'
    869     /*call EnvVar_Set      fRM, 'odbc_path',   'f:\odbc' -- huh? what's this? */
    870     call EnvVar_AddFront fRM, 'cobcpy',      sPathDB2'\include\cobol_mf'
    871     call EnvVar_Set      fRM, 'finclude',    sPathDB2'\include'
    872     call EnvVar_AddFront fRM, 'include',     sPathDB2'\include;'
    873     call EnvVar_AddFront fRM, 'lib',         sPathDB2'\lib;'
    874 
    875     /* verify */
    876     if (fCfg > 0) then
    877     do
    878         if (    \FileExists(sPathDB2'\bin\db2.exe', 'error: verify didn''t find'),
    879             |   \FileExists(sPathDB2'\bin\sqlbind.exe', 'error: verify didn''t find'),
    880             |   \FileExists(sPathDB2'\bin\sqlprep.exe', 'error: verify didn''t find'),
    881             |   \FileExists(sPathDB2'\lib\db2api.lib', 'error: verify didn''t find'),
    882             |   \FileExists(sPathDB2'\lib\db2cli.lib', 'error: verify didn''t find'),
    883             |   \FileExists(sPathDB2'\lib\db2gmf32.lib', 'error: verify didn''t find'),
    884             |   \FileExists(sPathDB2'\include\sql.h', 'error: verify didn''t find'),
    885             |   \FileExists(sPathDB2'\include\sqlcodes.h', 'error: verify didn''t find'),
    886             |   \FileExists(sPathDB2'\include\sqlsystm.h', 'error: verify didn''t find'),
    887             |   \FileExists(sPathDB2'\include\sqlcli.h', 'error: verify didn''t find'),
    888             ) then
    889             return 2;
    890         rc = CheckCmdOutput('echo quit | db2', 0, 'Command Line Processor for DB2 SDK 5.2.0');
    891         return rc;
    892     end
    893 return 0;
    894 
    895 
    896 /*
    897  *  Device Driver Kit (DDK) base.
    898  */
    899 DDKBase: procedure expose aCfg. aPath. sPathFile
    900     parse arg sEnvId,fRM,fCfg
    901 
    902     /*
    903      * Device Driver Kit (DDK) (v4.0+) base (important not main) directory.
    904      */
    905     sPathDDKBase    = PathQuery('ddkbase', sEnvId, fCfg);
    906     if (sPathDDKBase = '') then
    907         return 1;
    908     call EnvVar_Set      fRM, 'PATH_DDKBASE',sPathDDKBase;
    909     call EnvVar_AddFront fRM, 'path',        sPathDDKBase'\tools;'
    910     call EnvVar_AddFront fRM, 'include',     sPathDDKBase'\h;'sPathDDKBase'\inc;'sPathDDKBase'\inc32;'
    911     call EnvVar_AddFront fRM, 'include16',   sPathDDKBase'\h;'
    912     call EnvVar_AddFront fRM, 'lib',         sPathDDKBase'\lib;'
    913     call EnvVar_AddFront fRM, 'bookshelf',   sPathDDKBase'\..\docs;'
    914 
    915     /* verify */
    916     if (fCfg > 0) then
    917     do
    918         if (    \FileExists(sPathDDKBase'\tools\link.exe', 'error: verify didn''t find'),
    919             |   \FileExists(sPathDDKBase'\tools\link386.exe', 'error: verify didn''t find'),
    920             |   \FileExists(sPathDDKBase'\tools\cl386.exe', 'error: verify didn''t find'),
    921             |   \FileExists(sPathDDKBase'\tools\masm.exe', 'error: verify didn''t find'),
    922             |   \FileExists(sPathDDKBase'\tools\h2inc.exe', 'error: verify didn''t find'),
    923             |   \FileExists(sPathDDKBase'\tools\lib.exe', 'error: verify didn''t find'),
    924             |   \FileExists(sPathDDKBase'\lib\os2286.lib', 'error: verify didn''t find'),
    925             |   \FileExists(sPathDDKBase'\lib\os2286p.lib', 'error: verify didn''t find'),
    926             |   \FileExists(sPathDDKBase'\lib\os2386.lib', 'error: verify didn''t find'),
    927             |   \FileExists(sPathDDKBase'\lib\os2386p.lib', 'error: verify didn''t find'),
    928             |   \FileExists(sPathDDKBase'\lib\doscalls.lib', 'error: verify didn''t find'),
    929             |   \FileExists(sPathDDKBase'\lib\dhcalls.lib', 'error: verify didn''t find'),
    930             |   \FileExists(sPathDDKBase'\lib\addcalls.lib', 'error: verify didn''t find'),
    931             |   \FileExists(sPathDDKBase'\lib\rmcalls.lib', 'error: verify didn''t find'),
    932             |   \FileExists(sPathDDKBase'\lib\vdh.lib', 'error: verify didn''t find'),
    933             |   \FileExists(sPathDDKBase'\h\infoseg.h', 'error: verify didn''t find'),
    934             |   \FileExists(sPathDDKBase'\h\include.h', 'error: verify didn''t find'),
    935             |   \FileExists(sPathDDKBase'\h386\pmddi.h', 'error: verify didn''t find'),
    936             |   \FileExists(sPathDDKBase'\h386\pmddim.h', 'error: verify didn''t find'),
    937             |   \FileExists(sPathDDKBase'\h386\limits.h', 'error: verify didn''t find'),
    938             |   \FileExists(sPathDDKBase'\h386\string.h', 'error: verify didn''t find'),
    939             |   \FileExists(sPathDDKBase'\inc\v8086.inc', 'error: verify didn''t find'),
    940             |   \FileExists(sPathDDKBase'\inc\sas.inc', 'error: verify didn''t find'),
    941             |   \FileExists(sPathDDKBase'\inc\pmwinx.inc', 'error: verify didn''t find'),
    942             |   \FileExists(sPathDDKBase'\inc\infoseg.inc', 'error: verify didn''t find'),
    943             |   \FileExists(sPathDDKBase'\inc\devhlp.inc', 'error: verify didn''t find'),
    944             |   \FileExists(sPathDDKBase'\inc\devhlpp.inc', 'error: verify didn''t find'),
    945             ) then
    946             return 2;
    947         rc = CheckCmdOutput('cl386', 0, 'Microsoft (R) Microsoft 386 C Compiler. Version 6.00.054');
    948         if (rc = 0) then
    949             rc = CheckCmdOutput('masm nul,nul,nul,nul;', 2, 'Microsoft (R) Macro Assembler Version 5.10A.15 Jul 07 15:25:03 1989');
    950         if (rc = 0) then
    951             rc = CheckCmdOutput('h2inc -?', 0, 'h2inc - .H to .INC file translator (version 13.29)');
    952         if (rc = 0) then
    953             rc = CheckCmdOutput('type' sPathDDKBase'\inc\devhlp.inc', 0, 'DevHlp_ReadFileAt');
    954         return rc;
    955     end
    956 return 0;
    957 
    958 
    959 /*
    960  * ICAT Debugger
    961  */
    962 ICATGam: procedure expose aCfg. aPath. sPathFile
    963     parse arg sEnvId,fRM,fCfg
    964     sPathICAT   = PathQuery('icatgam', sEnvId, fCfg);
    965     if (sPathICAT = '') then
    966         return 1;
    967     call EnvVar_Set      fRm, 'PATH_ICATGAM', sPathICAT;
    968     call EnvVar_AddFront fRm, 'beginlibpath',sPathICAT'\dll;'
    969     call EnvVar_AddFront fRm, 'path',        sPathICAT'\bin;'
    970     call EnvVar_AddFront fRm, 'dpath',       sPathICAT'\help;'
    971     call EnvVar_AddFront fRm, 'help',        sPathICAT'\help;'
    972 
    973     /* verify */
    974     if (fCfg > 0) then
    975     do
    976         if (    \FileExists(sPathICAT'\bin\icatgam.exe', 'error: verify didn''t find'),
    977             |   \FileExists(sPathICAT'\dll\gamoou3.dll', 'error: verify didn''t find'),
    978             |   \FileExists(sPathICAT'\dll\gam5lde.dll', 'error: verify didn''t find'),
    979             |   \FileExists(sPathICAT'\dll\gam5cx.dll', 'error: verify didn''t find'),
    980             ) then
    981             return 2;
    982         return 0;
    983     end
    984 return 0;
    985 
    986 
    987 /*
    988  * ICAT Debugger
    989  */
    990 ICATGam406RC1: procedure expose aCfg. aPath. sPathFile
    991     parse arg sEnvId,fRM,fCfg
    992     sPathICAT   = PathQuery('icatgam406rc1', sEnvId, fCfg);
    993     if (sPathICAT = '') then
    994         return 1;
    995     call EnvVar_Set      fRm, 'PATH_ICATGAM', sPathICAT;
    996     call EnvVar_AddFront fRm, 'beginlibpath',sPathICAT'\dll;'
    997     call EnvVar_AddFront fRm, 'path',        sPathICAT'\bin;'
    998     call EnvVar_AddFront fRm, 'dpath',       sPathICAT'\help;'
    999     call EnvVar_AddFront fRm, 'help',        sPathICAT'\help;'
    1000 
    1001     /* verify */
    1002     if (fCfg > 0) then
    1003     do
    1004         if (    \FileExists(sPathICAT'\bin\icatgam.exe', 'error: verify didn''t find'),
    1005             |   \FileExists(sPathICAT'\dll\gamoou3.dll', 'error: verify didn''t find'),
    1006             |   \FileExists(sPathICAT'\dll\gam5lde.dll', 'error: verify didn''t find'),
    1007             |   \FileExists(sPathICAT'\dll\gam5cx.dll', 'error: verify didn''t find'),
    1008             ) then
    1009             return 2;
    1010         return 0;
    1011     end
    1012 return 0;
    1013 
    1014 
    1015 
    1016 /*
    1017  * ICAT Debugger for PE images.
    1018  */
    1019 ICATPe: procedure expose aCfg. aPath. sPathFile
    1020     parse arg sEnvId,fRM,fCfg
    1021     sPathICAT   = PathQuery('icatgam', sEnvId, fCfg);
    1022     if (sPathICAT = '') then
    1023         return 1;
    1024     sPathICATPe = PathQuery('icatpe', sEnvId, fCfg);
    1025     if (sPathICATPe = '') then
    1026         return 1;
    1027     call EnvVar_Set      fRm, 'PATH_ICATGAM',sPathICAT;
    1028     call EnvVar_Set      fRm, 'PATH_ICATPE', sPathICATPe;
    1029     call EnvVar_AddFront fRm, 'beginlibpath',sPathICATPe'\bin;'sPathICAT'\dll;'
    1030     call EnvVar_AddFront fRm, 'path',        sPathICATPe'\bin;'sPathICAT'\bin;'
    1031     call EnvVar_AddFront fRm, 'dpath',       sPathICATPe'\bin;'sPathICAT'\help;'
    1032     call EnvVar_AddFront fRm, 'help',        sPathICATPe'\bin;'sPathICAT'\help;'
    1033 
    1034     /* verify */
    1035     if (fCfg > 0) then
    1036     do
    1037         if (    \FileExists(sPathICAT'\bin\icatgam.exe', 'error: verify didn''t find'),
    1038             |   \FileExists(sPathICAT'\dll\gamoou3.dll', 'error: verify didn''t find'),
    1039             |   \FileExists(sPathICAT'\dll\gam5lde.dll', 'error: verify didn''t find'),
    1040             |   \FileExists(sPathICAT'\dll\gam5cx.dll', 'error: verify didn''t find'),
    1041             |   \FileExists(sPathICATPe'\bin\icatgam.exe', 'error: verify didn''t find'),
    1042             |   \FileExists(sPathICATPe'\bin\gamoou3.dll', 'error: verify didn''t find'),
    1043             |   \FileExists(sPathICATPe'\bin\gam5lde.dll', 'error: verify didn''t find'),
    1044             |   \FileExists(sPathICATPe'\bin\gam5cx.dll', 'error: verify didn''t find'),
    1045             ) then
    1046             return 2;
    1047         return 0;
    1048     end
    1049 return 0;
    1050 
    1051 
    1052 
    1053 /*
    1054  * Interactive Disassembler (IDA) v3.80a
    1055  */
    1056 IDA38: procedure expose aCfg. aPath. sPathFile
    1057     parse arg sEnvId,fRM,fCfg
    1058     /*
    1059      * IDA main directory.
    1060      */
    1061     sPathIDA = PathQuery('ida38', sEnvId, fCfg);
    1062     if (sPathIDA = '') then
    1063         return 1;
    1064     call EnvVar_Set      fRM, 'PATH_IDA',       sPathIDA
    1065     call EnvVar_AddFront fRM, 'path',           sPathIDA
    1066     call EnvVar_AddFront fRM, 'beginlibpath',   sPathIDA
    1067 
    1068     /* verify */
    1069     if (fCfg > 0) then
    1070     do
    1071         if (    \FileExists(sPathIDA'\ida2.exe', 'error: verify didn''t find'),
    1072             |   \FileExists(sPathIDA'\idaw.exe', 'error: verify didn''t find'),
    1073             |   \FileExists(sPathIDA'\ida.dll', 'error: verify didn''t find'),
    1074             |   \FileExists(sPathIDA'\pc.dll', 'error: verify didn''t find'),
    1075             ) then
    1076             return 2;
    1077         return 0;
    1078     end
    1079 return 0;
    1080 
    1081 
    1082 /*
    1083  * Interactive Disassembler (IDA) v4.01
    1084  */
    1085 IDA40: procedure expose aCfg. aPath. sPathFile
    1086     parse arg sEnvId,fRM,fCfg
    1087     /*
    1088      * IDA main directory.
    1089      */
    1090     sPathIDA = PathQuery('ida40', sEnvId, fCfg);
    1091     if (sPathIDA = '') then
    1092         return 1;
    1093     call EnvVar_Set      fRM, 'PATH_IDA',       sPathIDA
    1094     call EnvVar_AddFront fRM, 'path',           sPathIDA
    1095     call EnvVar_AddFront fRM, 'beginlibpath',   sPathIDA
    1096 
    1097     /* verify */
    1098     if (fCfg > 0) then
    1099     do
    1100         if (    \FileExists(sPathIDA'\ida2.exe', 'error: verify didn''t find'),
    1101             |   \FileExists(sPathIDA'\idaw.exe', 'error: verify didn''t find'),
    1102             |   \FileExists(sPathIDA'\ida.dll', 'error: verify didn''t find'),
    1103             |   \FileExists(sPathIDA'\pc.dll', 'error: verify didn''t find'),
    1104             ) then
    1105             return 2;
    1106         return 0;
    1107     end
    1108 return 0;
    1109 
    1110 
    1111 /*
    1112  * Interactive Disassembler (IDA) v4.14
    1113  */
    1114 IDA414: procedure expose aCfg. aPath. sPathFile
    1115     parse arg sEnvId,fRM,fCfg
    1116     /*
    1117      * IDA main directory.
    1118      */
    1119     sPathIDA = PathQuery('ida414', sEnvId, fCfg);
    1120     if (sPathIDA = '') then
    1121         return 1;
    1122     call EnvVar_Set      fRM, 'PATH_IDA',       sPathIDA
    1123     call EnvVar_AddFront fRM, 'path',           sPathIDA
    1124     call EnvVar_AddFront fRM, 'beginlibpath',   sPathIDA
    1125 
    1126     /* verify */
    1127     if (fCfg > 0) then
    1128     do
    1129         if (    \FileExists(sPathIDA'\ida2.exe', 'error: verify didn''t find'),
    1130             |   \FileExists(sPathIDA'\idaw.exe', 'error: verify didn''t find'),
    1131             |   \FileExists(sPathIDA'\ida.dll', 'error: verify didn''t find'),
    1132             |   \FileExists(sPathIDA'\pc.dll', 'error: verify didn''t find'),
    1133             ) then
    1134             return 2;
    1135         return 0;
    1136     end
    1137 return 0;
    1138 
    1139 
    1140 /*
    1141  * Interactive Disassembler (IDA) Plugin SDK (v5.0?)
    1142  */
    1143 IDASDK: procedure expose aCfg. aPath. sPathFile
    1144     parse arg sEnvId,fRM,fCfg
    1145     /*
    1146      * IDA main directory.
    1147      */
    1148     sPathIDASDK = PathQuery('idasdk', sEnvId, fCfg);
    1149     if (sPathIDASDK = '') then
    1150         return 1;
    1151     call EnvVar_Set      fRM, 'PATH_IDASDK',    sPathIDASDK
    1152     call EnvVar_AddFront fRM, 'include',        sPathIDASDK'\include;'
    1153     call EnvVar_AddFront fRM, 'lib',            sPathIDASDK'\libwat.os2;'
    1154     call EnvVar_AddFront fRM, 'path',           sPathIDASDK'\bin\os2;'
    1155     call EnvVar_AddFront fRM, 'beginlibpath',   sPathIDASDK'\bin\os2;'
    1156 
    1157     /* verify */
    1158     if (fCfg > 0) then
    1159     do
    1160         if (    \FileExists(sPathIDASDK'\os2wat.cfg', 'error: verify didn''t find'),
    1161             |   \FileExists(sPathIDASDK'\d32wat.cfg', 'error: verify didn''t find'),
    1162             |   \FileExists(sPathIDASDK'\include\exehdr.h', 'error: verify didn''t find'),
    1163             |   \FileExists(sPathIDASDK'\include\ida.hpp', 'error: verify didn''t find'),
    1164             |   \FileExists(sPathIDASDK'\include\vm.hpp', 'error: verify didn''t find'),
    1165             |   \FileExists(sPathIDASDK'\libwat.os2\ida.lib', 'error: verify didn''t find'),
    1166             |   \FileExists(sPathIDASDK'\libwat.d32\ida.lib', 'error: verify didn''t find'),
    1167             |   \FileExists(sPathIDASDK'\libwat.d32\INIRT386.OBJ', 'error: verify didn''t find'),
    1168             |   \FileExists(sPathIDASDK'\libbor.d32\ida.lib', 'error: verify didn''t find'),
    1169             ) then
    1170             return 2;
    1171         return 0;
    1172     end
    1173 return 0;
    1174 
    1175 
    1176 /*
    1177  * Mode commandline.
    1178  */
    1179 Mode: procedure expose aCfg. aPath. sPathFile
    1180     parse arg sEnvId,fRM,fCfg,cols,rows
    1181     if (fRM) then
    1182     do
    1183         cols = 80;
    1184         rows = 25;
    1185     end
    1186     Address CMD 'mode' cols','rows
    1187 return 0;
    1188 
    1189 
    1190 /*
    1191  * Microsoft C v6.0a 16-bit
    1192  */
    1193 MSCV6_16: procedure expose aCfg. aPath. sPathFile
    1194     parse arg sEnvId,fRM,fCfg
    1195 
    1196     /*
    1197      * Microsoft C v6.0a main directory.
    1198      */
    1199     sPathMSC    = PathQuery('mscv6-16', sEnvId, fCfg);
    1200     if (sPathMSC = '') then
    1201         return 1;
    1202     call EnvVar_Set      fRM, 'BUILD_ENV',  'MSCV6-16'
    1203     call EnvVar_Set      fRM, 'BUILD_PLATFORM', 'OS2'
    1204     call EnvVar_Set      fRM, 'PATH_MSC',   sPathMSC;
    1205     call EnvVar_AddFront fRM, 'path',       sPathMSC'\binp;'
    1206     call EnvVar_AddFront fRM, 'include',    sPathMSC'\include;'
    1207     call EnvVar_AddFront fRM, 'include16',  sPathMSC'\include;'
    1208     call EnvVar_AddFront fRM, 'lib',        sPathMSC'\lib;'
    1209 
    1210     /* verify */
    1211     if (fCfg > 0) then
    1212     do
    1213         if (    \FileExists(sPathMSC'\binp\cl.exe', 'error: verify didn''t find'),
    1214             |   \FileExists(sPathMSC'\lib\clibcep.lib', 'error: verify didn''t find'),
    1215             |   \FileExists(sPathMSC'\lib\llibcep.lib', 'error: verify didn''t find'),
    1216             |   \FileExists(sPathMSC'\lib\mlibcep.lib', 'error: verify didn''t find'),
    1217             |   \FileExists(sPathMSC'\lib\slibcep.lib', 'error: verify didn''t find'),
    1218             |   \FileExists(sPathMSC'\include\sysbits.h', 'error: verify didn''t find'),
    1219             |   \FileExists(sPathMSC'\include\dos.h', 'error: verify didn''t find'),
    1220             |   \FileExists(sPathMSC'\include\bios.h', 'error: verify didn''t find'),
    1221             |   \FileExists(sPathMSC'\include\string.h', 'error: verify didn''t find'),
    1222             |   \FileExists(sPathMSC'\include\stdio.h', 'error: verify didn''t find'),
    1223             ) then
    1224             return 2;
    1225         rc = CheckCmdOutput('cl', 0, 'Microsoft (R) C Optimizing Compiler Version 6.00A.04');
    1226         return rc;
    1227     end
    1228 return 0;
    1229 
    1230 
    1231 /*
    1232  * Microsoft C v6.0a 32-bit
    1233  */
    1234 MSCV6_32: procedure expose aCfg. aPath. sPathFile
    1235     parse arg sEnvId,fRM,fCfg
    1236 
    1237     /*
    1238      * This is where the compiler really is.
    1239      */
    1240     call DDKBase 'ddkbase',fRM,fCfg;
    1241 
    1242     /*
    1243      * Microsoft C v6.0a 32-bit main directory.
    1244      */
    1245     sPathDDKBase    = PathQuery('ddkbase', sEnvId, fCfg);
    1246     if (sPathDDKBase = '') then
    1247         return 1;
    1248     call EnvVar_Set      fRM, 'BUILD_ENV',  'MSCV6'
    1249     call EnvVar_Set      fRM, 'BUILD_PLATFORM', 'OS2'
    1250     call EnvVar_Set      fRM, 'PATH_MSC',   sPathDDKBase;
    1251     call EnvVar_AddFront fRM, 'include',    sPathDDKBase'\h386;'
    1252     call EnvVar_AddFront fRM, 'lib',        sPathDDKBase'\lib;'
    1253 
    1254     /* verify */
    1255     if (fCfg > 0) then
    1256     do
    1257         if (    \FileExists(sPathDDKBase'\tools\cl386.exe', 'error: verify didn''t find'),
    1258             |   \FileExists(sPathDDKBase'\h386\limits.h', 'error: verify didn''t find'),
    1259             |   \FileExists(sPathDDKBase'\h386\string.h', 'error: verify didn''t find'),
    1260             ) then
    1261             return 2;
    1262         rc = CheckCmdOutput('cl386', 0, 'Microsoft (R) Microsoft 386 C Compiler. Version 6.00.054');
    1263         return rc;
    1264     end
    1265 return 0;
    1266 
    1267 
    1268 /*
    1269  * mySQL Database system
    1270  */
    1271 mySQL: procedure expose aCfg. aPath. sPathFile
    1272     parse arg sEnvId,fRM,fCfg
    1273 
    1274     /*
    1275      * mySQL Database system main directory.
    1276      */
    1277     sPathMySQL    = PathQuery('mysql', sEnvId, fCfg);
    1278     if (sPathMySQL = '') then
    1279         return 1;
    1280     call EnvVar_Set      fRM, 'PATH_MYSQL',     sPathMySQL;
    1281     call EnvVar_AddFront fRM, 'path',           sPathMySQL'\bin;'
    1282     call EnvVar_AddFront fRM, 'beginlibpath',   sPathMySQL'\dll;'
    1283     call EnvVar_AddFront fRM, 'include',        sPathMySQL'\include;'
    1284     call EnvVar_AddFront fRM, 'bookshelf',      sPathMySQL'\doc;'sPathMySQL'\book';
    1285     /*call EnvVar_AddFront fRM, 'lib',            sPathMySQL'\lib;'*/
    1286 
    1287     /* verify */
    1288     if (fCfg > 0) then
    1289     do
    1290         if (    \FileExists(sPathMySQL'\bin\mysql.exe', 'error: verify didn''t find'),
    1291             |   \FileExists(sPathMySQL'\bin\mysqld.exe', 'error: verify didn''t find'),
    1292             |   \FileExists(sPathMySQL'\bin\mysqladmin.exe', 'error: verify didn''t find'),
    1293             |   \FileExists(sPathMySQL'\dll\mysql.dll', 'error: verify didn''t find'),
    1294             |   \FileExists(sPathMySQL'\include\mysql.h', 'error: verify didn''t find'),
    1295             |   \FileExists(sPathMySQL'\include\mysql_com.h', 'error: verify didn''t find'),
    1296             |   \FileExists(sPathMySQL'\include\mysql_version.h', 'error: verify didn''t find'),
    1297             ) then
    1298             return 2;
    1299         rc = CheckCmdOutput('mysql --version', 0, ', for ');
    1300         return rc;
    1301     end
    1302 return 0;
    1303 
    1304 
    1305 
    1306 /*
    1307  * NetQOS2 - help subsystem++ for VAC 3.6.5 and VAC 4.0
    1308  */
    1309 NetQOS2: procedure expose aCfg. aPath. sPathFile
    1310     parse arg sEnvId,fRM,fCfg
    1311     sPathNetQOS2 = PathQuery('netqos2', sEnvId, fCfg);
    1312     if (sPathNetQOS2 = '') then
    1313         return 1;
    1314     call EnvVar_Set      fRM, 'PATH_NETQOS2',   sPathNetQOS2
    1315     call EnvVar_AddFront fRM, 'path',           sPathNetQOS2';'
    1316     call EnvVar_AddFront fRM, 'dpath',          sPathNetQOS2';'
    1317     call EnvVar_AddFront fRM, 'beginlibpath',   sPathNetQOS2';'
    1318     call EnvVar_Set      fRM, 'imndatasrv',     sPathNetQOS2'\DATA'
    1319     call EnvVar_Set      fRM, 'imndatacl',      sPathNetQOS2'\DATA'
    1320     call EnvVar_Set      fRM, 'imnworksrv',     sPathNetQOS2'\WORK'
    1321     call EnvVar_Set      fRM, 'imnworkcl',      sPathNetQOS2'\WORK'
    1322     call EnvVar_Set      fRM, 'imnnlpssrv',     sPathNetQOS2
    1323     call EnvVar_Set      fRM, 'imnnlpscl',      sPathNetQOS2
    1324     call EnvVar_Set      fRM, 'imncccfgfile',   'NETQ.CFG'
    1325     call EnvVar_Set      fRM, 'imncscfgfile',   'NETQ.CFG'
    1326     call EnvVar_Set      fRM, 'imqconfigsrv',   sPathNetQOS2'\instance'
    1327     call EnvVar_Set      fRM, 'imqconfigcl',    sPathNetQOS2'\instance\dbcshelp'
    1328 
    1329     /* verify */
    1330     if (fCfg > 0) then
    1331     do
    1332         if (    \FileExists(sPathNetQOS2'\netq.exe', 'error: verify didn''t find'),
    1333             ) then
    1334             return 2;
    1335         rc = CheckCmdOutput('netq', 999, 'NETQ {START | STOP');
    1336         return rc;
    1337     end
    1338 return 0;
    1339 
    1340 
    1341 /*
    1342  * Odin32 testcase setup.
    1343  */
    1344 Odin32Testcase: procedure expose aCfg. aPath. sPathFile
    1345     parse arg sEnvId,fRM,fCfg
    1346     if (  PathQuery('testcase_drive_unused', sEnvId, fCfg) = '',
    1347         | PathQuery('testcase_drive_fixed', sEnvId, fCfg) = '',
    1348         | PathQuery('testcase_drive_floppy', sEnvId, fCfg) = '',
    1349         | PathQuery('testcase_drive_cdrom', sEnvId, fCfg) = '',
    1350         ) then
    1351         return 1;
    1352 
    1353     call EnvVar_Set      fRM, 'odin32_testcase_drive_unused',       PathQuery('testcase_drive_unused', sEnvId, fCfg);
    1354     call EnvVar_Set      fRM, 'odin32_testcase_drive_fixed',        PathQuery('testcase_drive_fixed', sEnvId, fCfg);
    1355     call EnvVar_Set      fRM, 'odin32_testcase_drive_floppy',       PathQuery('testcase_drive_floppy', sEnvId, fCfg);
    1356     call EnvVar_Set      fRM, 'odin32_testcase_drive_cdrom',        PathQuery('testcase_drive_cdrom', sEnvId, fCfg);
    1357     call EnvVar_Set      fRM, 'odin32_testcase_drive_network',      PathQuery('testcase_drive_network', sEnvId, fCfg, 1);
    1358     call EnvVar_Set      fRM, 'odin32_testcase_drive_ramdisk',      PathQuery('testcase_drive_ramdisk', sEnvId, fCfg, 1);
    1359 return 0;
    1360 
    1361 /*
    1362  * PERL 5005_53
    1363  */
    1364 Perl: procedure expose aCfg. aPath. sPathFile
    1365     parse arg sEnvId,fRM,fCfg
    1366 
    1367     /*
    1368      * Perl main directory.
    1369      */
    1370 /* BAD
    1371     sPathPerl       = PathQuery('perl', sEnvId, fCfg);
    1372     if (sPathPerl = '') then
    1373         return 1;
    1374     sPathPerlForw   = translate(sPathPerl, '/', '\');
    1375     call EnvVar_Set      fRM, 'PATH_PERL',      sPathPerl;
    1376     call EnvVar_AddFront fRM, 'path',           sPathPerl'\bin;'
    1377     call EnvVar_AddFront fRM, 'beginlibpath',   sPathPerl'\dll;'
    1378     call EnvVar_AddEnd   fRM, 'bookshelf',      sPathPerl'\book;'
    1379     call EnvVar_Set      fRM, 'perllib_prefix', sPathPerlForw'/lib;'sPathPerl'\lib'
    1380     call EnvVar_Set      fRM, 'perl5lib',       sPathPerlForw'/lib/site_perl/5.00553/os2;'sPathPerlForw'/lib/site_perl/5.00553'
    1381     call EnvVar_Set      fRM, 'perl5load',      '2'
    1382     call EnvVar_Set      fRM, 'perl_sh_dir',    sPathPerlForw'/bin_sh/sh.exe'
    1383     call EnvVar_Set      fRM, 'manpath',        sPathPerlForw'/man'
    1384     call EnvVar_Set      fRM, 'perl_badlang',   '0'
    1385 /*    call EnvVar_Set      fRM, 'LANG',           'en_US' /* dirty fix... */*/
    1386 */
    1387 /* seems ok */
    1388     sPathPerl       = PathQuery('perl', sEnvId, fCfg);
    1389     if (sPathPerl = '') then
    1390         return 1;
    1391     sPathPerlForw   = translate(sPathPerl, '/', '\');
    1392     call EnvVar_Set      fRM, 'PATH_PERL',      sPathPerl;
    1393     call EnvVar_AddFront fRM, 'path',           sPathPerl'\bin;'
    1394     call EnvVar_AddFront fRM, 'beginlibpath',   sPathPerl'\dll;'
    1395     call EnvVar_AddEnd   fRM, 'bookshelf',      sPathPerl'\book;'
    1396     call EnvVar_Set      fRM, 'perllib_prefix', sPathPerlForw'/lib;'sPathPerlForw'/lib'
    1397     call EnvVar_Set      fRM, 'perl_sh_dir',    sPathPerlForw'/bin_sh'
    1398     call EnvVar_Set      fRM, 'manpath',        sPathPerlForw'/man'
    1399     call EnvVar_Set      fRM, 'perl5lib',       sPathPerlForw'/lib'
    1400     call EnvVar_Set      fRM, 'perl_badlang',   '0'
    1401 
    1402     /* verify */
    1403     if (fCfg > 0) then
    1404     do
    1405         if (    \FileExists(sPathPerl'\bin\perl.exe', 'error: verify didn''t find'),
    1406             |   \FileExists(sPathPerl'\dll\perlE0AC.dll', 'error: verify didn''t find'),
    1407             ) then
    1408             return 2;
    1409         rc = CheckCmdOutput('perl --version', 0, 'This is perl, version 5.005_53 built for os2');
    1410         return rc;
    1411     end
    1412 return 0;
    1413 
    1414 
    1415 /*
    1416  * Python/2 v1.5.2
    1417  */
    1418 Python: procedure expose aCfg. aPath. sPathFile
    1419     parse arg sEnvId,fRM,fCfg
    1420 
    1421     /*
    1422      * The Python Home directory
    1423      */
    1424     sPythonHome = PathQuery('python', sEnvId, fCfg);
    1425     if (sPythonHome = '') then
    1426         return 1;
    1427     call EnvVar_Set      fRM, 'PATH_PYTHON',    sPythonHome
    1428     call EnvVar_Set      fRM, 'pythonhome',     sPythonHome
    1429     call EnvVar_Set      fRM, 'pythonpath',     '.;'sPythonHome'\Lib;'sPythonHome'\Lib\plat-win;'sPythonHome'\Lib\lib-tk;'sPythonHome'\Lib\lib-dynload;'sPythonHome'\Lib\site-packages;'sPythonHome'\Lib\dos-8x3'
    1430     call EnvVar_AddFront fRM, 'beginlibpath',   sPythonHome
    1431     call EnvVar_AddFront fRM, 'path',           sPythonHome
    1432 
    1433     /* verify */
    1434     if (fCfg > 0) then
    1435     do
    1436         if (    \FileExists(sPythonHome'\Python.exe', 'error: verify didn''t find'),
    1437             |   \FileExists(sPythonHome'\Python15.dll', 'error: verify didn''t find'),
    1438             ) then
    1439             return 2;
    1440         rc = CheckCmdOutput('echo print "hello world" | python', 0, 'hello world');
    1441         return rc;
    1442     end
    1443 return 0;
    1444 
    1445 
    1446 /*
    1447  * OS/2 Programmers Toolkit v4.0 (CSD1/4)
    1448  */
    1449 Toolkit40: procedure expose aCfg. aPath. sPathFile
    1450     parse arg sEnvId,fRM,fCfg
    1451 
    1452     /*
    1453      * Toolkit (4.0) main directory.
    1454      */
    1455     sPathTK    = PathQuery('toolkit40', sEnvId, fCfg);
    1456     if (sPathTK = '') then
    1457         return 1;
    1458     call EnvVar_Set      fRM, 'PATH_TOOLKIT',  sPathTK;
    1459 
    1460     call EnvVar_AddFront fRM, 'beginlibpath',   sPathTK'\BETA\DLL;'sPathTK'\SAMPLES\MM\DLL;'sPathTK'\SAMPLES\OPENDOC\PARTS\DLL;'sPathTK'\SOM\COMMON\DLL;'sPathTK'\SOM\LIB;'sPathTK'\OPENDOC\BASE\DLL;'sPathTK'\OPENDOC\BASE\LOCALE\EN_US;'sPathTK'\DLL;'
    1461     call EnvVar_AddFront fRM, 'path',           sPathTK'\BETA\BIN;'sPathTK'\SOM\COMMON;'sPathTK'\SOM\BIN;.;'sPathTK'\OPENDOC\BASE\BIN;'sPathTK'\BIN;'
    1462     call EnvVar_AddFront fRM, 'dpath',          sPathTK'\SOM\COMMON\SYSTEM;'sPathTK'\SOM\MSG;'sPathTK'\OPENDOC\BASE\MSG;'sPathTK'\BOOK;'sPathTK'\MSG;'
    1463     call EnvVar_AddFront fRM, 'help',           sPathTK'\BETA\HELP;'sPathTK'\OPENDOC\BASE\LOCALE\EN_US;'sPathTK'\HELP;'
    1464     call EnvVar_AddFront fRM, 'bookshelf',      sPathTK'\BETA\BOOK;'sPathTK'\BOOK;'sPathTK'\ARCHIVED;'
    1465     call EnvVar_AddFront fRM, 'somir',          sPathTK'\SOM\COMMON\ETC\214\SOM.IR;'sPathTK'\OPENDOC\BASE\AVLSHELL.IR;'
    1466     call EnvVar_AddEnd   fRM, 'somir',          sPathTK'\OPENDOC\CUSTOM\OD.IR;'sPathTK'\SAMPLES\REXX\SOM\ANIMAL\ORXSMP.IR;'
    1467     call EnvVar_AddFront fRM, 'include',        sPathTK'\SPEECH\H;'sPathTK'\BETA\H;'sPathTK'\SAMPLES\OPENDOC\PARTS\INCLUDE;'sPathTK'\SOM\INCLUDE;'sPathTK'\INC;'sPathTK'\H\GL;'sPathTK'\H;'
    1468     call EnvVar_AddEnd   fRM, 'include',        sPathTK'\H\LIBC;.;'
    1469     call EnvVar_AddFront fRM, 'lib',            sPathTK'\SPEECH\LIB;'sPathTK'\SAMPLES\MM\LIB;'sPathTK'\LIB;'sPathTK'\SOM\LIB;'sPathTK'\OPENDOC\BASE\LIB;'
    1470     call EnvVar_AddFront fRM, 'nlspath',        sPathTK'\OPENDOC\BASE\LOCALE\EN_US\%N;'sPathTK'\MSG\%N;C:\MPTN\MSG\NLS\%N;C:\TCPIP\msg\ENUS850\%N;'
    1471     call EnvVar_AddFront fRM, 'locpath',        sPathTK'\OPENDOC\BASE\LOCALE;'
    1472     call EnvVar_AddFront fRM, 'ipfc',           sPathTK'\IPFC;'
    1473     call EnvVar_Set      fRM, 'odbase',         sPathTK'\OPENDOC\BASE'
    1474     call EnvVar_Set      fRM, 'odlang',         'en_US'
    1475     call EnvVar_AddFront fRM, 'odbasepaths',    sPathTK'\OPENDOC\BASE;'
    1476     call EnvVar_Set      fRM, 'odcfg',          sPathTK'\OPENDOC\CUSTOM'
    1477     call EnvVar_Set      fRM, 'odtmp',          EnvVar_Get('tmp');
    1478     call EnvVar_Set      fRM, 'sombase',        sPathTK'\SOM'
    1479     call EnvVar_Set      fRM, 'somruntime',     sPathTK'\SOM\COMMON'
    1480 
    1481     call EnvVar_Set      fRM, 'cpref',          'CP1.INF+CP2.INF+CP3.INF'
    1482     call EnvVar_Set      fRM, 'gpiref',         'GPI1.INF+GPI2.INF+GPI3.INF+GPI4.INF'
    1483     call EnvVar_Set      fRM, 'mmref',          'MMREF1.INF+MMREF2.INF+MMREF3.INF'
    1484     call EnvVar_Set      fRM, 'pmref',          'PM1.INF+PM2.INF+PM3.INF+PM4.INF+PM5.INF'
    1485     call EnvVar_Set      fRM, 'wpsref',         'WPS1.INF+WPS2.INF+WPS3.INF'
    1486     call EnvVar_AddFront fRM, 'sminclude',      sPathTK'\H;'sPathTK'\IDL;'sPathTK'\SOM\INCLUDE;.;'sPathTK'\OPENDOC\BASE\INCLUDE;'sPathTK'\SAMPLES\OPENDOC\PARTS\INCLUDE;'
    1487     call EnvVar_Set      fRM, 'smaddstar',      '1'
    1488     call EnvVar_Set      fRM, 'smemit',         'h;ih;c'
    1489     call EnvVar_Set      fRM, 'smtmp',          EnvVar_Get('tmp');
    1490     call EnvVar_Set      fRM, 'smclasses',      'WPTYPES.IDL'
    1491     call EnvVar_Set      fRM, 'odparts',        sPathTK'\SAMPLES\OPENDOC\PARTS'
    1492     call EnvVar_Set      fRM, 'odsrc',          sPathTK'\SAMPLES\OPENDOC\PARTS'
    1493     call EnvVar_AddFront fRM, 'odpartspaths',   sPathTK'\SAMPLES\OPENDOC\PARTS;'
    1494     call EnvVar_AddFront fRM, 'odsrcpaths',     sPathTK'\SAMPLES\OPENDOC\PARTS;'
    1495     /*
    1496     call EnvVar_Set      fRM, 'CAT_MACHINE=COM1:57600'
    1497     call EnvVar_Set      fRM, 'CAT_HOST_BIN_PATH='sPathTK'\BIN'
    1498     call EnvVar_Set      fRM, 'CAT_COMMUNICATION_TYPE=ASYNC_SIGBRK'
    1499     call EnvVar_AddFront fRM, 'CAT_HOST_SOURCE_PATH='sPathTK'\BIN;'
    1500     */
    1501 
    1502     /* verify */
    1503     if (fCfg > 0) then
    1504     do
    1505         if (    \FileExists(sPathTK'\bin\alp.exe', 'error: verify didn''t find'),
    1506             |   \FileExists(sPathTK'\bin\rc.exe', 'error: verify didn''t find'),
    1507             |   \FileExists(sPathTK'\bin\ipfc.exe', 'error: verify didn''t find'),
    1508             |   \FileExists(sPathTK'\bin\implib.exe', 'error: verify didn''t find'),
    1509             |   \FileExists(sPathTK'\bin\mkmsgf.exe', 'error: verify didn''t find'),
    1510             |   \FileExists(sPathTK'\bin\mapsym.exe', 'error: verify didn''t find'),
    1511             |   \FileExists(sPathTK'\lib\os2386.lib', 'error: verify didn''t find'),
    1512             |   \FileExists(sPathTK'\lib\pmbidi.lib', 'error: verify didn''t find'),
    1513             |   \FileExists(sPathTK'\lib\tcpip32.lib', 'error: verify didn''t find'),
    1514             |   \FileExists(sPathTK'\h\os2.h', 'error: verify didn''t find'),
    1515             |   \FileExists(sPathTK'\h\os2win.h', 'error: verify didn''t find'),
    1516             |   \FileExists(sPathTK'\h\stack16\pmwsock.h', 'error: verify didn''t find'),
    1517             |   \FileExists(sPathTK'\som\bin\sc.exe', 'error: verify didn''t find'),
    1518             ) then
    1519             return 2;
    1520         rc = CheckCmdOutput('syslevel '||sPathTK||'\bin', 0, 'IBM Developer''s Toolkit for OS/2 Warp Version 4'||'0d0a'x||'Version 4.00.');
    1521         if (rc = 0) then
    1522             rc = CheckCmdOutput('sc -V', -1, '", Version: 2.54.');
    1523         if (rc = 0) then
    1524             rc = CheckCmdOutput('rc', 0, 'IBM RC (Resource Compiler) Version 5.00.00');
    1525         if (rc = 0) then
    1526             rc = CheckCmdOutput('ipfc', 0, 'Version 4.00.00');
    1527 
    1528         return rc;
    1529     end
    1530 return 0;
    1531 
    1532 
    1533 
    1534 /*
    1535  * OS/2 Programmers Toolkit v4.5
    1536  */
    1537 Toolkit45: procedure expose aCfg. aPath. sPathFile
    1538     parse arg sEnvId,fRM,fCfg
    1539 
    1540     /*
    1541      * Toolkit (4.5) main directory.
    1542      */
    1543      sPathTK    = PathQuery('toolkit45', sEnvId, fCfg);
    1544     if (sPathTK = '') then
    1545         return 1;
    1546     call EnvVar_Set      fRM, 'PATH_TOOLKIT',  sPathTK;
    1547 
    1548     call EnvVar_AddFront fRM, 'path',        sPathTK'\bin;'
    1549     call EnvVar_AddFront fRM, 'dpath',       sPathTK'\book;'
    1550     call EnvVar_AddFront fRM, 'dpath',       sPathTK'\msg;'
    1551     call EnvVar_AddFront fRM, 'beginlibpath', sPathTK'\dll;'
    1552     call EnvVar_AddFront fRM, 'help',        sPathTK'\help;'
    1553     call EnvVar_AddFront fRM, 'bookshelf',   sPathTK'\archived;'
    1554     call EnvVar_AddFront fRM, 'bookshelf',   sPathTK'\book;'
    1555     call EnvVar_AddFront fRM, 'nlspath',     sPathTK'\msg\%N;'
    1556     call EnvVar_AddEnd   fRM, 'ulspath',     sPathTK'\language;'
    1557     call EnvVar_AddFront fRM, 'include',     sPathTK'\H;'
    1558     call EnvVar_AddFront fRM, 'include',     sPathTK'\H\GL;'
    1559     call EnvVar_AddFront fRM, 'include',     sPathTK'\SPEECH\H;'
    1560     call EnvVar_AddFront fRM, 'include',     sPathTK'\H\RPC;'
    1561     call EnvVar_AddFront fRM, 'include',     sPathTK'\H\NETNB;'
    1562     call EnvVar_AddFront fRM, 'include',     sPathTK'\H\NETINET;'
    1563     call EnvVar_AddFront fRM, 'include',     sPathTK'\H\NET;'
    1564     call EnvVar_AddFront fRM, 'include',     sPathTK'\H\ARPA;'
    1565     call EnvVar_AddFront fRM, 'include',     sPathTK'\INC;'
    1566     call EnvVar_AddEnd   fRM, 'lib',         sPathTK'\SAMPLES\MM\LIB;'
    1567     call EnvVar_AddEnd   fRM, 'lib',         sPathTK'\SPEECH\LIB;'
    1568     call EnvVar_AddFront fRM, 'lib',         sPathTK'\lib;'
    1569     call EnvVar_AddFront fRM, 'helpndx',     'EPMKWHLP.NDX+', '+'
    1570     call EnvVar_AddFront fRM, 'ipfc',        sPathTK'\ipfc;'
    1571     call EnvVar_Set      fRM, 'LANG',        'en_us'
    1572     call EnvVar_Set      fRM, 'CPREF',       'CP1.INF+CP2.INF+CP3.INF'
    1573     call EnvVar_Set      fRM, 'GPIREF',      'GPI1.INF+GPI2.INF+GPI3.INF+GPI4.INF'
    1574     call EnvVar_Set      fRM, 'MMREF',       'MMREF1.INF+MMREF2.INF+MMREF3.INF'
    1575     call EnvVar_Set      fRM, 'PMREF',       'PM1.INF+PM2.INF+PM3.INF+PM4.INF+PM5.INF'
    1576     call EnvVar_Set      fRM, 'WPSREF',      'WPS1.INF+WPS2.INF+WPS3.INF'
    1577     /*
    1578     call EnvVar_Set      fRM, 'CAT_MACHINE', 'COM1:57600'
    1579     call EnvVar_Set      fRM, 'CAT_HOST_BIN_PATH', TKMAIN'\BIN'
    1580     call EnvVar_Set      fRM, 'CAT_COMMUNICATION_TYPE', 'ASYNC_SIGBRK'
    1581     call EnvVar_Set      fRM, 'CAT_HOST_SOURCE_PATH',TKMAIN'\BIN;'
    1582     */
    1583 
    1584     /* verify */
    1585     if (fCfg > 0) then
    1586     do
    1587         if (    \FileExists(sPathTK'\bin\alp.exe', 'error: verify didn''t find'),
    1588             |   \FileExists(sPathTK'\bin\rc.exe', 'error: verify didn''t find'),
    1589             |   \FileExists(sPathTK'\bin\ipfc.exe', 'error: verify didn''t find'),
    1590             |   \FileExists(sPathTK'\bin\implib.exe', 'error: verify didn''t find'),
    1591             |   \FileExists(sPathTK'\bin\mkmsgf.exe', 'error: verify didn''t find'),
    1592             |   \FileExists(sPathTK'\bin\mapsym.exe', 'error: verify didn''t find'),
    1593             |   \FileExists(sPathTK'\lib\os2386.lib', 'error: verify didn''t find'),
    1594             |   \FileExists(sPathTK'\lib\pmbidi.lib', 'error: verify didn''t find'),
    1595             |   \FileExists(sPathTK'\lib\tcpip32.lib', 'error: verify didn''t find'),
    1596             |   \FileExists(sPathTK'\h\os2.h', 'error: verify didn''t find'),
    1597             |   \FileExists(sPathTK'\h\os2win.h', 'error: verify didn''t find'),
    1598             |   \FileExists(sPathTK'\h\stack16\pmwsock.h', 'error: verify didn''t find'),
    1599             |    FileExists(sPathTK'\som\bin\sc.exe'),
    1600             ) then
    1601             return 2;
    1602         rc = CheckCmdOutput('syslevel '||sPathTK||'\bin', 0, 'IBM OS/2 Developer''s Toolkit Version 4.5'||'0d0a'x||'Version 4.50     Component ID 5639F9300');
    1603         if (rc = 0) then
    1604             rc = CheckCmdOutput('rc', 0, 'IBM RC (Resource Compiler) Version 5.00.004');
    1605         if (rc = 0) then
    1606             rc = CheckCmdOutput('ipfc', 0, 'Version 4.00.006 July 21 1998');
    1607         return rc;
    1608     end
    1609 return 0;
    1610 
    1611 
    1612 /*
    1613  * OS/2 Programmers Toolkit v4.5.1
    1614  */
    1615 Toolkit451: procedure expose aCfg. aPath. sPathFile
    1616     parse arg sEnvId,fRM,fCfg
    1617 
    1618     /*
    1619      * Toolkit (4.5.1) main directory.
    1620      */
    1621      sPathTK    = PathQuery('toolkit451', sEnvId, fCfg);
    1622     if (sPathTK = '') then
    1623         return 1;
    1624     call EnvVar_Set      fRM, 'PATH_TOOLKIT',  sPathTK;
    1625 
    1626     call EnvVar_AddFront fRM, 'path',        sPathTK'\bin;'sPathTK'\som\common;'sPathTK'\som\bin'
    1627     call EnvVar_AddFront fRM, 'dpath',       sPathTK'\msg;'sPathTK'\book;'sPathTK'\SOM\COMMON\SYSTEM;'sPathTK'\SOM\MSG;'
    1628     call EnvVar_AddFront fRM, 'beginlibpath', sPathTK'\dll;'sPathTK'\som\common\dll;'sPathTK'\som\lib;'
    1629     call EnvVar_AddFront fRM, 'help',        sPathTK'\help;'
    1630     call EnvVar_AddFront fRM, 'bookshelf',   sPathTK'\book;'sPathTK'\archived;'
    1631     call EnvVar_AddFront fRM, 'somir',       sPathTK'\SOM\COMMON\ETC\214\SOM.IR;'
    1632     call EnvVar_AddEnd   fRM, 'somir',       sPathTK'\SAMPLES\REXX\SOM\ANIMAL\ORXSMP.IR;'
    1633     call EnvVar_AddFront fRM, 'nlspath',     sPathTK'\msg\%N;'
    1634     call EnvVar_AddEnd   fRM, 'ulspath',     sPathTK'\language;'
    1635     call EnvVar_AddFront fRM, 'include',     sPathTK'\H\ARPA;'sPathTK'\H\NET;'sPathTK'\H\NETINET;'sPathTK'\H\NETNB;'sPathTK'\H\RPC;'sPathTK'\SPEECH\H;'sPathTK'\H\GL;'sPathTK'\H;'sPathTK'\SOM\INCLUDE;'sPathTK'\INC;'
    1636     call EnvVar_AddFront fRM, 'lib',         sPathTK'\lib;'
    1637     call EnvVar_AddEnd   fRM, 'lib',         sPathTK'\SAMPLES\MM\LIB;'sPathTK'\SPEECH\LIB;'
    1638     call EnvVar_AddFront fRM, 'helpndx',     'EPMKWHLP.NDX+', '+'
    1639     call EnvVar_AddFront fRM, 'ipfc',        sPathTK'\ipfc;'
    1640     call EnvVar_Set      fRM, 'sombase',     sPathTK'\SOM'
    1641     call EnvVar_Set      fRM, 'somruntime',  sPathTK'\SOM\COMMON'
    1642     call EnvVar_Set      fRM, 'LANG',        'en_us'
    1643 
    1644     call EnvVar_Set      fRM, 'CPREF',       'CP1.INF+CP2.INF+CP3.INF'
    1645     call EnvVar_Set      fRM, 'GPIREF',      'GPI1.INF+GPI2.INF+GPI3.INF+GPI4.INF'
    1646     call EnvVar_Set      fRM, 'MMREF',       'MMREF1.INF+MMREF2.INF+MMREF3.INF'
    1647     call EnvVar_Set      fRM, 'PMREF',       'PM1.INF+PM2.INF+PM3.INF+PM4.INF+PM5.INF'
    1648     call EnvVar_Set      fRM, 'WPSREF',      'WPS1.INF+WPS2.INF+WPS3.INF'
    1649     call EnvVar_AddFront fRM, 'sminclude',   sPathTK'\H;'sPathTK'\IDL;'sPathTK'\SOM\INCLUDE;.;'
    1650     call EnvVar_Set      fRM, 'smaddstar',   '1'
    1651     call EnvVar_Set      fRM, 'smemit',      'h;ih;c'
    1652     call EnvVar_Set      fRM, 'smtmp',       EnvVar_Get('tmp');
    1653     call EnvVar_Set      fRM, 'smclasses',   'WPTYPES.IDL'
    1654     /*
    1655     call EnvVar_Set      fRM, 'CAT_MACHINE', 'COM1:57600'
    1656     call EnvVar_Set      fRM, 'CAT_HOST_BIN_PATH', TKMAIN'\BIN'
    1657     call EnvVar_Set      fRM, 'CAT_COMMUNICATION_TYPE', 'ASYNC_SIGBRK'
    1658     call EnvVar_Set      fRM, 'CAT_HOST_SOURCE_PATH',TKMAIN'\BIN;'
    1659     */
    1660 
    1661     /* verify */
    1662     if (fCfg > 0) then
    1663     do
    1664         if (    \FileExists(sPathTK'\bin\alp.exe', 'error: verify didn''t find'),
    1665             |   \FileExists(sPathTK'\bin\rc.exe', 'error: verify didn''t find'),
    1666             |   \FileExists(sPathTK'\bin\ipfc.exe', 'error: verify didn''t find'),
    1667             |   \FileExists(sPathTK'\bin\implib.exe', 'error: verify didn''t find'),
    1668             |   \FileExists(sPathTK'\bin\mkmsgf.exe', 'error: verify didn''t find'),
    1669             |   \FileExists(sPathTK'\bin\mapsym.exe', 'error: verify didn''t find'),
    1670             |   \FileExists(sPathTK'\bin\nmake.exe', 'error: verify didn''t find'),
    1671             |   \FileExists(sPathTK'\bin\nmake32.exe', 'error: verify didn''t find'),
    1672             |   \FileExists(sPathTK'\lib\os2386.lib', 'error: verify didn''t find'),
    1673             |   \FileExists(sPathTK'\lib\pmbidi.lib', 'error: verify didn''t find'),
    1674             |   \FileExists(sPathTK'\lib\tcpip32.lib', 'error: verify didn''t find'),
    1675             |   \FileExists(sPathTK'\h\os2.h', 'error: verify didn''t find'),
    1676             |   \FileExists(sPathTK'\h\os2win.h', 'error: verify didn''t find'),
    1677             |   \FileExists(sPathTK'\h\stack16\pmwsock.h', 'error: verify didn''t find'),
    1678             |   \FileExists(sPathTK'\som\bin\sc.exe', 'error: verify didn''t find'),
    1679             ) then
    1680             return 2;
    1681         rc = CheckCmdOutput('syslevel '||sPathTK||'\bin', 0, 'IBM OS/2 Developer''s Toolkit Version 4.5'||'0d0a'x||'Version 4.50.1     Component ID 5639F9300');
    1682         if (rc = 0) then
    1683             rc = CheckCmdOutput('sc -V', -1, '", Version: 2.54.');
    1684         if (rc = 0) then
    1685             rc = CheckCmdOutput('rc', 0, 'IBM RC (Resource Compiler) Version 5.00.006 Oct 20 2000');
    1686         if (rc = 0) then
    1687             rc = CheckCmdOutput('ipfc', 0, 'Version 4.00.007 Oct 02 2000');
    1688         if (rc = 0) then
    1689             rc = CheckCmdOutput('nmake', 2, 'Version 4.00.000 Oct 20 2000');
    1690         if (rc = 0) then
    1691             rc = CheckCmdOutput('nmake32', 0, 'Version 5.00.003 Oct 20 2000');
    1692         return rc;
    1693     end
    1694 return 0;
    1695 
    1696 
    1697 
    1698 /**
    1699  * This will envolve into an full UNIX like environment some day perhaps...
    1700  */
    1701 Unix: procedure expose aCfg. aPath. sPathFile
    1702     parse arg sEnvId,fRM,fCfg
    1703 
    1704     /*
    1705      * Unix root directory.
    1706      */
    1707     sUnixBack = PathQuery('unixroot', sEnvId, fCfg);
    1708     if (sUnixBack = '') then
    1709         return 1;
    1710     sUnixForw = translate(sUnixBack, '/', '\');
    1711     call EnvVar_Set      fRM, 'PATH_UNIX',          sUnixBack
    1712     call EnvVar_Set      fRM, 'unixroot',           sUnixBack
    1713     call EnvVar_AddFront fRM, 'path',               sUnixBack'\bin;'sUnixBack'\usr\local\bin;'
    1714     call EnvVar_AddFront fRM, 'beginlibpath',       sUnixBack'\dll;'
    1715     call EnvVar_Set      fRM, 'groff_font_path',    sUnixForw'/lib/groff/font'
    1716     call EnvVar_Set      fRM, 'groff_tmac_path',    sUnixForw'/lib/groff/tmac'
    1717     call EnvVar_Set      fRM, 'refer',              sUnixForw'/lib/groff/dict/papers/ind'
    1718 
    1719     call EnvVar_Set      fRM, 'editor',             'e:/verkty/boxer/b2.exe -Vr25'
    1720 
    1721     /*
    1722      * XFree86 main directory.
    1723      */
    1724     sXF86Back = PathQuery('xfree86', sEnvId, fCfg);
    1725     if (sXF86Back = '') then
    1726         return 1;
    1727     sXF86Forw = translate(sXF86Back, '/', '\');
    1728     call EnvVar_Set      fRM, 'PATH_XFREE86',       sXF86Back
    1729     call EnvVar_AddFront fRM, 'C_INCLUDE_PATH',     sXF86Forw'/include'
    1730     call EnvVar_AddFront fRM, 'CPLUS_INCLUDE_PATH', sXF86Forw'/include'
    1731     call EnvVar_Set      fRM, 'OBJC_INCLUDE_PATH',  sXF86Forw'/include'
    1732     call EnvVar_AddFront fRM, 'LIBRARY_PATH',       sXF86Forw'/lib'
    1733 
    1734     /* verify */
    1735     if (fCfg > 0) then
    1736     do
    1737         if (    \FileExists(sUnixBack'\bin\bash.exe', 'error: verify didn''t find'),
    1738             |   \FileExists(sUnixBack'\bin\sh.exe', 'error: verify didn''t find'),
    1739             |   \FileExists(sUnixBack'\bin\yes.exe', 'error: verify didn''t find'),
    1740             |   \FileExists(sUnixBack'\bin\rm.exe', 'error: verify didn''t find'),
    1741             |   \FileExists(sUnixBack'\bin\cp.exe', 'error: verify didn''t find'),
    1742             |   \FileExists(sUnixBack'\bin\mv.exe', 'error: verify didn''t find'),
    1743             |   \FileExists(sXF86Back'\bin\xf86config.exe', 'error: verify didn''t find'),
    1744             ) then
    1745             return 2;
    1746         return rc;
    1747     end
    1748 return EMX(fRM);
    1749 
    1750 
    1751 
    1752 /*
    1753  * IBM Visual Age for C++ v3.08 for OS/2
    1754  */
    1755 VAC308: procedure expose aCfg. aPath. sPathFile
    1756     parse arg sEnvId,fRM,fCfg
    1757 
    1758     /*
    1759      * IBM Visual Age for C++ Version 3.08 main directory.
    1760      */
    1761     sPathCPP = PathQuery('vac308', sEnvId, fCfg);
    1762     if (sPathCPP = '') then
    1763         return 1;
    1764     call EnvVar_Set      fRM, 'PATH_VAC308',    sPathCPP
    1765     call EnvVar_Set      fRM, 'CCENV',      'VAC3'
    1766     call EnvVar_Set      fRM, 'BUILD_ENV',  'VAC308'
    1767     call EnvVar_Set      fRM, 'BUILD_PLATFORM', 'OS2'
    1768 
    1769     call EnvVar_AddFront fRM, 'beginlibpath',   sPathCPP'\DLL;'sPathCPP'\SAMPLES\TOOLKIT\DLL;'
    1770     call EnvVar_AddFront fRM, 'path',           sPathCPP'\BIN;'sPathCPP'\SMARTS\SCRIPTS;'sPathCPP'\HELP;'
    1771     call EnvVar_AddFront fRM, 'dpath',          sPathCPP'\HELP;'sPathCPP';'sPathCPP'\LOCALE;'sPathCPP'\MACROS;'sPathCPP'\BND;'
    1772     call EnvVar_AddFront fRM, 'help',           sPathCPP'\HELP;'sPathCPP'\SAMPLES\TOOLKIT\HELP;'
    1773     call EnvVar_AddFront fRM, 'bookshelf',      sPathCPP'\HELP;'
    1774     call EnvVar_AddFront fRM, 'somir',          sPathCPP'\ETC\SOM.IR;'
    1775     call EnvVar_AddFront fRM, 'cpphelp_ini',    'C:\OS2\SYSTEM'
    1776     call EnvVar_AddFront fRM, 'locpath',        sPathCPP'\LOCALE;%LOCPATH%;'
    1777     call EnvVar_AddFront fRM, 'include',        sPathCPP'\INCLUDE;'sPathCPP'\INCLUDE\OS2;'sPathCPP'\INC;'sPathCPP'\INCLUDE\SOM;'
    1778     call EnvVar_AddFront fRM, 'sminclude',      sPathCPP'\INCLUDE\OS2;'sPathCPP'\INCLUDE;'sPathCPP'\INCLUDE\SOM;'
    1779 
    1780     call EnvVar_AddFront fRM, 'vbpath',         '.;'sPathCPP'\DDE4VB;'
    1781     call EnvVar_Set      fRM, 'tmpdir',         EnvVar_Get('tmp')
    1782     call EnvVar_Set      fRM, 'lxevfref',       'EVFELREF.INF+LPXCREF.INF'
    1783     call EnvVar_Set      fRM, 'lxevfhdi',       'EVFELHDI.INF+LPEXHDI.INF'
    1784     call EnvVar_AddFront fRM, 'lpath',          sPathCPP'\MACROS;'
    1785     call EnvVar_AddFront fRM, 'codelpath',      sPathCPP'\CODE\MACROS;'sPathCPP'\MACROS;'
    1786     call EnvVar_Set      fRM, 'clref',          'CPPCLRF.INF+CPPDAT.INF+CPPAPP.INF+CPPWIN.INF+CPPCTL.INF+CPPADV.INF+CPP2DG.INF+CPPDDE.INF+CPPDM.INF+CPPMM.INF+CPPCLRB.INF'
    1787     call EnvVar_AddFront fRM, 'ipfc',           sPathCPP'\IPFC'
    1788     call EnvVar_AddFront fRM, 'lib',            sPathCPP'\LIB;'sPathCPP'\DLL;'
    1789     call EnvVar_Set      fRM, 'cpplocal',       sPathCPP
    1790     call EnvVar_Set      fRM, 'cppmain',        sPathCPP
    1791     call EnvVar_Set      fRM, 'cppwork',        sPathCPP
    1792     call EnvVar_Set      fRM, 'iwf.default_prj','CPPDFTPRJ'
    1793 
    1794     call EnvVar_Set      fRM, 'iwf.solution_lang_support', 'CPPIBS30;ENG'
    1795     call EnvVar_Set      fRM, 'vacpp_shared'    'FALSE'
    1796     call EnvVar_Set      fRM, 'iwfhelp',        'IWFHDI.INF'
    1797     call EnvVar_Set      fRM, 'iwfopt',         sPathCPP
    1798 
    1799     call EnvVar_Set      fRM, 'somruntime',     sPathCPP'\DLL'
    1800     call EnvVar_Set      fRM, 'smaddstar',      '1'
    1801     call EnvVar_Set      fRM, 'smemit',         'h;ih;c'
    1802     call EnvVar_Set      fRM, 'sombase',        sPathCPP
    1803     call EnvVar_Set      fRM, 'smtmp',          EnvVar_Get('tmp')
    1804     call EnvVar_Set      fRM, 'smclasses',      'WPTYPES.IDL'
    1805 
    1806     call EnvVar_AddFront fRM, 'helpndx',        'EPMKWHLP.NDX+CPP.NDX+CPPBRS.NDX', '+'
    1807     call EnvVar_AddFront fRM, 'ipf_keys',       'SHOWNAV'
    1808 
    1809     /* verify */
    1810     if (fCfg > 0) then
    1811     do
    1812         if (    \FileExists(sPathCPP'\bin\icc.exe', 'error: verify didn''t find'),
    1813             |   \FileExists(sPathCPP'\bin\ilib.exe', 'error: verify didn''t find'),
    1814             |   \FileExists(sPathCPP'\bin\ilink.exe', 'error: verify didn''t find'),
    1815             |   \FileExists(sPathCPP'\bin\icsperf.exe', 'error: verify didn''t find'),
    1816             |   \FileExists(sPathCPP'\bin\icsdebug.exe', 'error: verify didn''t find'),
    1817             |   \FileExists(sPathCPP'\bin\cppfilt.exe', 'error: verify didn''t find'),
    1818             |   \FileExists(sPathCPP'\bin\dllrname.exe', 'error: verify didn''t find'),
    1819             |   \FileExists(sPathCPP'\lib\demangl.lib', 'error: verify didn''t find'),
    1820             |   \FileExists(sPathCPP'\lib\cppom30.lib', 'error: verify didn''t find'),
    1821             |   \FileExists(sPathCPP'\lib\cppom30i.lib', 'error: verify didn''t find'),
    1822             |   \FileExists(sPathCPP'\lib\cppom30o.lib', 'error: verify didn''t find'),
    1823             |   \FileExists(sPathCPP'\lib\cppon30i.lib', 'error: verify didn''t find'),
    1824             |   \FileExists(sPathCPP'\lib\cppon30o.lib', 'error: verify didn''t find'),
    1825             |   \FileExists(sPathCPP'\lib\_doscall.lib', 'error: verify didn''t find'),
    1826             |   \FileExists(sPathCPP'\lib\_pmwin.lib', 'error: verify didn''t find'),
    1827             |   \FileExists(sPathCPP'\include\builtin.h', 'error: verify didn''t find'),
    1828             |   \FileExists(sPathCPP'\include\conio.h', 'error: verify didn''t find'),
    1829             |   \FileExists(sPathCPP'\include\ismkss.h', 'error: verify didn''t find'),
    1830             |    FileExists(sPathCPP'\include\os2.h'),
    1831             |    FileExists(sPathCPP'\include\os2win.h'),
    1832             |    FileExists(sPathCPP'\include\pm.h'),
    1833             |   \FileExists(sPathCPP'\include\sys\utime.h', 'error: verify didn''t find'),
    1834             |   \FileExists(sPathCPP'\help\cpplib.inf', 'error: verify didn''t find'),
    1835             ) then
    1836             return 2;
    1837         rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, 'Version 3.00     Component ID 562201703'||'0d0a'x||'Current CSD level: CTC308');
    1838         if (rc = 0) then
    1839             rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, 'Version 3.00     Component ID 562201704'||'0d0a'x||'Current CSD level: CTU308');
    1840         if (rc = 0) then
    1841             rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, 'Version 3.00     Component ID 562201707'||'0d0a'x||'Current CSD level: CTV308');
    1842         if (rc = 0) then
    1843             rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, 'Version 3.00     Component ID 562201708'||'0d0a'x||'Current CSD level: CTD308');
    1844         if (rc = 0) then
    1845             rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, 'Version 3.00     Component ID 562201605'||'0d0a'x||'Current CSD level: CTC308');
    1846         if (rc = 0) then
    1847             rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, 'Version 3.00     Component ID 562201602'||'0d0a'x||'Current CSD level: CTO308');
    1848         if (rc = 0) then
    1849             rc = CheckCmdOutput('icc', 0, 'IBM VisualAge C++ for OS/2, Version 3');
    1850         if (rc = 0) then
    1851             rc = CheckCmdOutput('ilink', 16, 'IBM(R) Linker for OS/2(R), Version 01.08.r1a_CTC308c');
    1852         if (rc = 0) then
    1853             rc = CheckCmdOutput('ilib /?', 8, 'IBM(R) Library Manager for OS/2(R), Version 01.00.03 cc_CTC308c');
    1854         return rc;
    1855     end
    1856 return 0;
    1857 
    1858 
    1859 
    1860 /*
    1861  * Visual Age / C and C++ tools v3.6.5 for OS/2
    1862  */
    1863 VAC365: procedure expose aCfg. aPath. sPathFile
    1864     parse arg sEnvId,fRM,fCfg
    1865 
    1866     /*
    1867      * IBM C/C++ Compiler and Tools Version 3.6.5 main directory.
    1868      */
    1869     sPathCxx    = PathQuery('vac365', sEnvId, fCfg);
    1870     if (sPathCxx = '') then
    1871         return 1;
    1872     call EnvVar_Set      fRM, 'PATH_VAC365', sPathCxx;
    1873     call EnvVar_Set      fRM, 'CCENV',      'VAC36'
    1874     call EnvVar_Set      fRM, 'BUILD_ENV',  'VAC365'
    1875     call EnvVar_Set      fRM, 'BUILD_PLATFORM', 'OS2'
    1876 
    1877     call EnvVar_Set      fRM, 'cxxmain',     sPathCxx;
    1878     call EnvVar_AddFront fRM, 'path',        sPathCxx'\bin;'
    1879     call EnvVar_AddFront fRM, 'dpath',       sPathCxx'\local;'sPathCxx'\help;'
    1880     call EnvVar_AddFront fRM, 'beginlibpath',sPathCxx'\dll;'sPathCxx'\runtime;'
    1881     call EnvVar_AddFront fRM, 'nlspath',     sPathCxx'\msg\%N;'
    1882     call EnvVar_AddFront fRM, 'include',     sPathCxx'\include;'
    1883     call EnvVar_AddFront fRM, 'lib',         sPathCxx'\lib;'
    1884     call EnvVar_AddFront fRM, 'ipfc',        sPathCxx'\ipfc;'
    1885     call EnvVar_Set      fRM, 'LANG',        'en_us'
    1886     call EnvVar_Set      fRM, 'CPP_DBG_LANG', 'CPP'
    1887 
    1888     /* verify */
    1889     if (fCfg > 0) then
    1890     do
    1891         if (    \FileExists(sPathCxx'\bin\icc.exe', 'error: verify didn''t find'),
    1892             |   \FileExists(sPathCxx'\bin\ilib.exe', 'error: verify didn''t find'),
    1893             |   \FileExists(sPathCxx'\bin\ilink.exe', 'error: verify didn''t find'),
    1894             |   \FileExists(sPathCxx'\bin\idebug.exe', 'error: verify didn''t find'),
    1895             |   \FileExists(sPathCxx'\bin\cppfilt.exe', 'error: verify didn''t find'),
    1896             |   \FileExists(sPathCxx'\bin\dllrname.exe', 'error: verify didn''t find'),
    1897             |   \FileExists(sPathCxx'\bin\cppcbe36.exe', 'error: verify didn''t find'),
    1898             |   \FileExists(sPathCxx'\lib\cpprms36.lib', 'error: verify didn''t find'),
    1899             |   \FileExists(sPathCxx'\lib\cpprmi36.lib', 'error: verify didn''t find'),
    1900             |   \FileExists(sPathCxx'\lib\cpprmo36.lib', 'error: verify didn''t find'),
    1901             |   \FileExists(sPathCxx'\lib\cpprni36.lib', 'error: verify didn''t find'),
    1902             |   \FileExists(sPathCxx'\lib\cpprds36.lib', 'error: verify didn''t find'),
    1903             |   \FileExists(sPathCxx'\include\builtin.h', 'error: verify didn''t find'),
    1904             |   \FileExists(sPathCxx'\include\conio.h', 'error: verify didn''t find'),
    1905             |   \FileExists(sPathCxx'\include\ismavl.h', 'error: verify didn''t find'),
    1906             |    FileExists(sPathCxx'\include\os2.h'),
    1907             |    FileExists(sPathCxx'\include\os2win.h'),
    1908             |    FileExists(sPathCxx'\include\pm.h'),
    1909             |   \FileExists(sPathCxx'\include\sys\utime.h', 'error: verify didn''t find'),
    1910             |   \FileExists(sPathCxx'\help\cpplbm36.msg', 'error: verify didn''t find'),
    1911             ) then
    1912             return 2;
    1913         rc = CheckCmdOutput('icc', 0, 'IBM* C and C++ Compilers for OS/2*, AIX* and for Windows NT**, Version 3.6');
    1914         if (rc = 0) then
    1915             rc = CheckCmdOutput('ilink', 16, 'IBM(R) Linker for OS/2(R), Version 03.06.PPK1990125');
    1916         if (rc = 0) then
    1917             rc = CheckCmdOutput('ilib /?', 0, 'IBM Librarian for OS/2(R) Version 03.99.PPK1990310');
    1918         if (stream(sPathCxx'\bin\cppcbe36.exe', 'c', 'query size') <> 603122) then
    1919         do
    1920             say 'Error!!! Get latest vac365 optimizer fixes from the OS2 Mozilla project.';
    1921             say '         http://www.mozilla.org/ports/os2/setup.html';
    1922             rc = 99;
    1923         end
    1924         return rc;
    1925     end
    1926 return 0;
    1927 
    1928 
    1929 /*
    1930  * Visual Age for C++ v4.0 for OS/2
    1931  */
    1932 VAC40: procedure expose aCfg. aPath. sPathFile
    1933     parse arg sEnvId,fRM,fCfg
    1934 
    1935     /*
    1936      * IBM VisualAge for C++ v4.0 main directory.
    1937      */
    1938     sPathCPP    = PathQuery('vac40', sEnvId, fCfg);
    1939     if (sPathCPP = '') then
    1940         return 1;
    1941     call EnvVar_Set      fRM, 'PATH_VAC40',  sPathCPP;
    1942     call EnvVar_Set      fRM, 'CCENV',      'VAC40'
    1943     call EnvVar_Set      fRM, 'BUILD_ENV',  'VAC40'
    1944     call EnvVar_Set      fRM, 'BUILD_PLATFORM', 'OS2'
    1945 
    1946     call EnvVar_AddFront fRM, 'path',        sPathCPP'\bin;'
    1947     call EnvVar_AddFront fRM, 'dpath',       sPathCPP'\etc;'sPathCPP'\help;'
    1948     call EnvVar_AddFront fRM, 'beginlibpath',sPathCPP'\dll;'sPathCPP'\runtime;'
    1949     call EnvVar_AddFront fRM, 'help',        sPathCPP'\help;'
    1950     call EnvVar_AddFront fRM, 'nlspath',     sPathCPP'\msg\%N;'
    1951     call EnvVar_AddFront fRM, 'locpath',     sPathCPP'\locale;'sPathCPP'\runtime\locale;'
    1952     call EnvVar_AddFront fRM, 'include',     sPathCPP'\ivb;'sPathCPP'\include;'
    1953     call EnvVar_AddFront fRM, 'lib',         sPathCPP'\lib;'
    1954     call EnvVar_AddFront fRM, 'ipfc',        sPathCPP'\bin;'
    1955     call EnvVar_AddFront fRM, 'cpplpath4',   sPathCPP'\macros;'
    1956     call EnvVar_Set      fRM, 'system_ice',  sPathCPP'\etc\system.ice'
    1957     call EnvVar_Set      fRM, 'vbpath',      sPathCPP'\ivb'
    1958     call EnvVar_Set      fRM, 'vacppmain',   sPathCPP;
    1959     call EnvVar_Set      fRM, 'os2',         '1'
    1960 
    1961     /* verify */
    1962     if (fCfg > 0) then
    1963     do
    1964         if (    \FileExists(sPathCPP'\bin\iccv4.exe', 'error: verify didn''t find'),
    1965             |   \FileExists(sPathCPP'\bin\ilib.exe', 'error: verify didn''t find'),
    1966             |   \FileExists(sPathCPP'\bin\ire.exe', 'error: verify didn''t find'),
    1967             |   \FileExists(sPathCPP'\bin\vacide.exe', 'error: verify didn''t find'),
    1968             |   \FileExists(sPathCPP'\bin\cppfilt.exe', 'error: verify didn''t find'),
    1969             |   \FileExists(sPathCPP'\bin\dllrname.exe', 'error: verify didn''t find'),
    1970             |   \FileExists(sPathCPP'\bin\patrace.exe', 'error: verify didn''t find'),
    1971             |   \FileExists(sPathCPP'\lib\cpprms40.lib', 'error: verify didn''t find'),
    1972             |   \FileExists(sPathCPP'\lib\cpprmi40.lib', 'error: verify didn''t find'),
    1973             |   \FileExists(sPathCPP'\lib\cpprmo40.lib', 'error: verify didn''t find'),
    1974             |   \FileExists(sPathCPP'\lib\cpprni40.lib', 'error: verify didn''t find'),
    1975             |   \FileExists(sPathCPP'\lib\cpprds40.lib', 'error: verify didn''t find'),
    1976             |   \FileExists(sPathCPP'\include\builtin.h', 'error: verify didn''t find'),
    1977             |   \FileExists(sPathCPP'\include\conio.h', 'error: verify didn''t find'),
    1978             |   \FileExists(sPathCPP'\include\ismavl.h', 'error: verify didn''t find'),
    1979             |    FileExists(sPathCPP'\include\os2.h'),
    1980             |    FileExists(sPathCPP'\include\os2win.h'),
    1981             |    FileExists(sPathCPP'\include\pm.h'),
    1982             |   \FileExists(sPathCPP'\include\sys\utime.h', 'error: verify didn''t find'),
    1983             |   \FileExists(sPathCPP'\help\cpplbm40.msg', 'error: verify didn''t find'),
    1984             ) then
    1985             return 2;
    1986         rc = CheckCmdOutput('iccv4', 0, 'IBM VisualAge for C++ Version 4.0 C Compiler');
    1987         if (rc = 0) then
    1988             rc = CheckCmdOutput('ilib /?', 0, 'IBM Librarian for OS/2(R) Version 03.99.cc_981110'); /* is this really FP2?????? */
    1989         if (rc = 0) then
    1990             rc = CheckCmdOutput('vacbld -?', 0, 'IBM(R) VisualAge(R) C++ Professional, Version 4.0 (981117)'); /* is this really FP2?????? */
    1991         return rc;
    1992     end
    1993 return 0;
    1994 
    1995 
    1996 
    1997 
    1998 /*
    1999  * WarpIn
    2000  */
    2001 WarpIn: procedure expose aCfg. aPath. sPathFile
    2002     parse arg sEnvId,fRM,fCfg
    2003 
    2004     /*
    2005      * WarpIn main directory.
    2006      */
    2007     sPathWarpIn = PathQuery('warpin', sEnvId, fCfg);
    2008     if (sPathWarpIn = '') then
    2009         return 1;
    2010     call EnvVar_Set      fRM, 'PATH_WARPIN', sPathWarpIn;
    2011     call EnvVar_AddFront fRM, 'path',        sPathWarpIn';'
    2012     call EnvVar_AddFront fRM, 'beginlibpath',sPathWarpIn';'
    2013     call EnvVar_AddFront fRM, 'bookshelf',   sPathWarpIn';'
    2014 
    2015     /* verify */
    2016     if (fCfg > 0) then
    2017     do
    2018         if (    \FileExists(sPathWarpIn'\wic.exe', 'error: verify didn''t find'),
    2019             |   \FileExists(sPathWarpIn'\wpirtl.dll', 'error: verify didn''t find'),
    2020             |   \FileExists(sPathWarpIn'\warpin.exe', 'error: verify didn''t find'),
    2021             ) then
    2022             return 2;
    2023         rc = CheckCmdOutput('wic', 1, '2002 - WarpIn archive creation and maintenance');
    2024         return rc;
    2025     end
    2026 return 0;
    2027 
    2028 
    2029 
    2030 /*
    2031  * WatCom C/C++ v11.0
    2032  */
    2033 WatComC11: procedure expose aCfg. aPath. sPathFile
    2034     parse arg sEnvId,fRM,fCfg, iBits
    2035 
    2036     /*
    2037      * Watcom C/C++ v11.0 main directory
    2038      */
    2039     sPathWatcom = PathQuery('watcom11', sEnvId, fCfg);
    2040     if (sPathWatcom = '') then
    2041         return 1;
    2042     call EnvVar_Set      fRM, 'PATH_WATCOM', sPathWatcom
    2043     call EnvVar_Set      fRM, 'CCENV',      'WAT'
    2044     call EnvVar_Set      fRM, 'BUILD_ENV',  'WAT11'
    2045     if (iBits == 16) then
    2046         call EnvVar_Set      fRM, 'BUILD_ENV',  'WAT11-16'
    2047     call EnvVar_Set      fRM, 'BUILD_PLATFORM', 'OS2'
    2048 
    2049     call EnvVar_Set      fRM, 'watcom',      sPathWatcom
    2050     call EnvVar_AddFront fRM, 'path',        sPathWatcom'\binp;'sPathWatcom'\binw;'
    2051     call EnvVar_AddFront fRM, 'beginlibpath',sPathWatcom'\binp\dll;'
    2052     call EnvVar_AddFront fRM, 'help',        sPathWatcom'\binp\help;'
    2053     call EnvVar_AddEnd   fRM, 'bookshelf',   sPathWatcom'\binp\help;'
    2054     call EnvVar_AddFront fRM, 'include',     sPathWatcom'\h;'sPathWatcom'\h\os2;'sPathWatcom'\h\nt;'
    2055     call EnvVar_AddFront fRM, 'lib',         sPathWatcom'\lib386;'sPathWatcom'\lib386\os2;'sPathWatcom'\lib286;'sPathWatcom'\lib286\os2;'
    2056     call EnvVar_Set      fRM, 'edpath',      sPathWatcom'EDDAT;'
    2057     /*
    2058     rem detach %watcom%\BINP\BATSERV.EXE
    2059     rem detach %watcom%\BINP\NMPBIND.EXE
    2060     */
    2061 
    2062     /* verify */
    2063     if (fCfg > 0) then
    2064     do
    2065         if (    \FileExists(sPathWatcom'\binp\wpp.exe', 'error: verify didn''t find'),
    2066             |   \FileExists(sPathWatcom'\binp\wcc.exe', 'error: verify didn''t find'),
    2067             |   \FileExists(sPathWatcom'\binp\wcc386.exe', 'error: verify didn''t find'),
    2068             |   \FileExists(sPathWatcom'\binp\wpp386.exe', 'error: verify didn''t find'),
    2069             |   \FileExists(sPathWatcom'\binp\wlink.exe', 'error: verify didn''t find'),
    2070             |   \FileExists(sPathWatcom'\lib286\os2\os2.lib', 'error: verify didn''t find'),
    2071             |   \FileExists(sPathWatcom'\lib386\os2\clbrdll.lib', 'error: verify didn''t find'),
    2072             |   \FileExists(sPathWatcom'\lib386\os2\clib3r.lib', 'error: verify didn''t find'),
    2073             |   \FileExists(sPathWatcom'\lib386\nt\kernel32.lib', 'error: verify didn''t find'),
    2074             |   \FileExists(sPathWatcom'\lib386\nt\clbrdll.lib', 'error: verify didn''t find'),
    2075             |   \FileExists(sPathWatcom'\lib386\nt\clib3r.lib', 'error: verify didn''t find'),
    2076             ) then
    2077             return 2;
    2078         rc = CheckCmdOutput('wcc', 8, 'Watcom C16 Optimizing Compiler  Version 11.0 '||'0d0a'x);
    2079         if (rc = 0) then
    2080             rc = CheckCmdOutput('wpp', 8, 'Watcom C++16 Optimizing Compiler  Version 11.0 '||'0d0a'x);
    2081         if (rc = 0) then
    2082             rc = CheckCmdOutput('wcc386', 8, 'Watcom C32 Optimizing Compiler  Version 11.0 '||'0d0a'x);
    2083         if (rc = 0) then
    2084             rc = CheckCmdOutput('wpp386', 8, 'Watcom C++32 Optimizing Compiler  Version 11.0 '||'0d0a'x);
    2085         if (rc = 0) then
    2086             rc = CheckCmdOutput('wlink form ELF', 1, 'WATCOM Linker Version 11.0'||'0d0a'x);
    2087         return rc;
    2088     end
    2089 return 0;
    2090 
    2091 /*
    2092  * WatCom C/C++ v11.0c
    2093  */
    2094 WatComC11c: procedure expose aCfg. aPath. sPathFile
    2095     parse arg sEnvId,fRM,fCfg, iBits
    2096 
    2097     /*
    2098      * Watcom C/C++ v11.0c main directory
    2099      */
    2100     sPathWatcom = PathQuery('watcom11c', sEnvId, fCfg);
    2101     if (sPathWatcom = '') then
    2102         return 1;
    2103 
    2104     call EnvVar_Set      fRM, 'PATH_WATCOM', sPathWatcom
    2105     call EnvVar_Set      fRM, 'CCENV',      'WAT'
    2106     call EnvVar_Set      fRM, 'BUILD_ENV',  'WAT11C'
    2107     if (iBits = 16) then
    2108         call EnvVar_Set      fRM, 'BUILD_ENV',  'WAT11C-16'
    2109     call EnvVar_Set      fRM, 'BUILD_PLATFORM', 'OS2'
    2110 
    2111     call EnvVar_Set      fRM, 'watcom',      sPathWatcom
    2112     call EnvVar_AddFront fRM, 'path',        sPathWatcom'\binp;'sPathWatcom'\binw;'
    2113     call EnvVar_AddFront fRM, 'beginlibpath',sPathWatcom'\binp\dll;'
    2114     call EnvVar_AddFront fRM, 'help',        sPathWatcom'\binp\help;'
    2115     call EnvVar_AddEnd   fRM, 'bookshelf',   sPathWatcom'\binp\help;'
    2116     if (iBits = 16) then
    2117         call EnvVar_AddFront fRM, 'include',     sPathWatcom'\h;'sPathWatcom'\h\os21x;'
    2118     else
    2119         call EnvVar_AddFront fRM, 'include',     sPathWatcom'\h;'sPathWatcom'\h\os2;'sPathWatcom'\h\nt;'
    2120     call EnvVar_AddFront fRM, 'lib',         sPathWatcom'\lib386;'sPathWatcom'\lib386\os2;'sPathWatcom'\lib286;'sPathWatcom'\lib286\os2;'
    2121     call EnvVar_Set      fRM, 'edpath',      sPathWatcom'EDDAT;'
    2122     /*
    2123     rem detach %watcom%\BINP\BATSERV.EXE
    2124     rem detach %watcom%\BINP\NMPBIND.EXE
    2125     */
    2126 
    2127     /* verify */
    2128     if (fCfg > 0) then
    2129     do
    2130         if (    \FileExists(sPathWatcom'\binp\wpp.exe', 'error: verify didn''t find'),
    2131             |   \FileExists(sPathWatcom'\binp\wcc.exe', 'error: verify didn''t find'),
    2132             |   \FileExists(sPathWatcom'\binp\wcc386.exe', 'error: verify didn''t find'),
    2133             |   \FileExists(sPathWatcom'\binp\wpp386.exe', 'error: verify didn''t find'),
    2134             |   \FileExists(sPathWatcom'\binp\wlink.exe', 'error: verify didn''t find'),
    2135             |   \FileExists(sPathWatcom'\lib286\os2\os2.lib', 'error: verify didn''t find'),
    2136             |   \FileExists(sPathWatcom'\lib386\os2\clbrdll.lib', 'error: verify didn''t find'),
    2137             |   \FileExists(sPathWatcom'\lib386\os2\clib3r.lib', 'error: verify didn''t find'),
    2138             |   \FileExists(sPathWatcom'\lib386\nt\kernel32.lib', 'error: verify didn''t find'),
    2139             |   \FileExists(sPathWatcom'\lib386\nt\clbrdll.lib', 'error: verify didn''t find'),
    2140             |   \FileExists(sPathWatcom'\lib386\nt\clib3r.lib', 'error: verify didn''t find'),
    2141             ) then
    2142             return 2;
    2143         rc = CheckCmdOutput('wcc', 8, 'Watcom C16 Optimizing Compiler  Version 11.0c');
    2144         if (rc = 0) then
    2145             rc = CheckCmdOutput('wpp', 8, 'Watcom C++16 Optimizing Compiler  Version 11.0c');
    2146         if (rc = 0) then
    2147             rc = CheckCmdOutput('wcc386', 8, 'Watcom C32 Optimizing Compiler  Version 11.0c');
    2148         if (rc = 0) then
    2149             rc = CheckCmdOutput('wpp386', 8, 'Watcom C++32 Optimizing Compiler  Version 11.0c');
    2150         if (rc = 0) then
    2151             rc = CheckCmdOutput('wlink form ELF', 1, 'WATCOM Linker Version 11.0c');
    2152         return rc;
    2153     end
    2154 return 0;
    2155 
    2156 
    2157 
    2158 
    2159 
    2160 
    2161 
    2162 
    2163 
    2164 
    2165 
    2166 
    2167 
    2168 /**
    2169  * Helper Procedure section
    2170  **/
    2171986
    2172987
     
    2178993 *                 is at the end and don't end with a ';'.
    2179994 */
    2180 EnvVar_addFront: procedure
     995EnvAddFront: procedure
    2181996    parse arg fRM, sEnvVar, sToAdd, sSeparator
    2182997
     
    21971012    do while i > 1 & rc = 0
    21981013        j = lastpos(sSeparator, sToAdd, i-1);
    2199         rc = EnvVar_AddFront2(fRM, sEnvVar, substr(sToAdd, j+1, i - j), sSeparator);
     1014        rc = EnvAddFront2(fRM, sEnvVar, substr(sToAdd, j+1, i - j), sSeparator);
    22001015        i = j;
    22011016    end
     
    22091024 *                 is at the end and don't end with a ';'.
    22101025 */
    2211 EnvVar_AddFront2: procedure
     1026EnvAddFront2: procedure
    22121027    parse arg fRM, sEnvVar, sToAdd, sSeparator
    22131028
     
    22241039
    22251040    /* Get original variable value */
    2226     sOrgEnvVar = EnvVar_Get(sEnvVar);
     1041    sOrgEnvVar = EnvGet(sEnvVar);
    22271042
    22281043    /* Remove previously sToAdd if exists. (Changing sOrgEnvVar). */
     
    22331048    /* set environment */
    22341049    if (fRM) then
    2235         return EnvVar_Set(0, sEnvVar, sOrgEnvVar);
    2236 return EnvVar_Set(0, sEnvVar, sToAdd||sOrgEnvVar);
     1050        return EnvSet(0, sEnvVar, sOrgEnvVar);
     1051return EnvSet(0, sEnvVar, sToAdd||sOrgEnvVar);
    22371052
    22381053
     
    22441059 *                 is at the end and don't end with a ';'.
    22451060 */
    2246 EnvVar_addEnd: procedure
     1061EnvAddEnd: procedure
    22471062    parse arg fRM, sEnvVar, sToAdd, sSeparator
    22481063
     
    22631078    do while i > 1 & rc = 0
    22641079        j = lastpos(sSeparator, sToAdd, i-1);
    2265         rc = EnvVar_AddEnd2(fRM, sEnvVar, substr(sToAdd, j+1, i - j), sSeparator);
     1080        rc = EnvAddEnd2(fRM, sEnvVar, substr(sToAdd, j+1, i - j), sSeparator);
    22661081        i = j;
    22671082    end
     
    22751090 *                 is at the end and don't end with a ';'.
    22761091 */
    2277 EnvVar_AddEnd2: procedure
     1092EnvAddEnd2: procedure
    22781093    parse arg fRM, sEnvVar, sToAdd, sSeparator
    22791094
     
    22901105
    22911106    /* Get original variable value */
    2292     sOrgEnvVar = EnvVar_Get(sEnvVar);
     1107    sOrgEnvVar = EnvGet(sEnvVar);
    22931108
    22941109    /* Remove previously sToAdd if exists. (Changing sOrgEnvVar). */
     
    23021117
    23031118    /* set environment */
    2304     if (fRM) then return EnvVar_Set(0, sEnvVar, sOrgEnvVar);
    2305 return EnvVar_Set(0, sEnvVar, sOrgEnvVar||sToAdd);
     1119    if (fRM) then return EnvSet(0, sEnvVar, sOrgEnvVar);
     1120return EnvSet(0, sEnvVar, sOrgEnvVar||sToAdd);
    23061121
    23071122
     
    23091124 * Sets sEnvVar to sValue.
    23101125 */
    2311 EnvVar_Set: procedure
     1126EnvSet: procedure
    23121127    parse arg fRM, sEnvVar, sValue
    23131128
     
    23211136     *      We'll have to set internal these using both commandline 'SET'
    23221137     *      and internal VALUE in order to export it and to be able to
    2323      *      get it (with EnvVar_Get) again.
     1138     *      get it (with EnvGet) again.
    23241139     */
    23251140    if ((sEnvVar = 'BEGINLIBPATH') | (sEnvVar = 'ENDLIBPATH')) then
     
    23411156 * Gets the value of sEnvVar.
    23421157 */
    2343 EnvVar_Get: procedure
     1158EnvGet: procedure
    23441159    parse arg sEnvVar
    23451160    if ((translate(sEnvVar) = 'BEGINLIBPATH') | (translate(sEnvVar) = 'ENDLIBPATH')) then
     
    23671182return 0;
    23681183
     1184
     1185
     1186
     1187
     1188
     1189
     1190/**
     1191 * Tool procedures section
     1192 * @returns 0 on success.
     1193 *          1 if PathQuery() failed.
     1194 *          2 if some vital file/dir wasn't found in the config verify.
     1195 *          49 if verify command rc mismatched.
     1196 *          99 if verify command output mismatched.
     1197 **/
     1198
     1199
     1200/*
     1201 * Concurrent Versions System (CVS)
     1202 */
     1203CVS: procedure expose aCfg. aPath. sPathFile
     1204    parse arg sToolId,sOperation,fRM,fQuiet
     1205
     1206
     1207    /*
     1208     * The directories.
     1209     */
     1210    sPathCVS = PathQuery('cvs', sToolId, sOperation);
     1211    if (sPathCVS = '') then
     1212        return 1;
     1213    sPathHome = PathQuery('home', sToolId, sOperation);
     1214    if (sPathHome = '') then
     1215        return 1;
     1216    /* If config operation we're done now. */
     1217    if (pos('config', sOperation) > 0) then
     1218        return 0;
     1219
     1220    /*
     1221     * Installing the environment variables.
     1222     */
     1223    call EnvSet      fRM, 'PATH_CVS',    sPathCVS;
     1224    call EnvAddFront fRM, 'path',        sPathCVS'\bin;'
     1225    call EnvAddFront fRM, 'bookshelf',   sPathCVS'\book;'
     1226    call EnvAddFront fRM, 'bookshelf',   sPathCVS'\book;'
     1227    call EnvSet      fRM, 'home',        translate(sPathHome, '/','\');
     1228
     1229    /*
     1230     * Verify.
     1231     */
     1232    if (pos('verify', sOperation) <= 0) then
     1233        return 0;
     1234
     1235    if (\CfgVerifyFile(sPathCVS'\bin\cvs.exe',fQuiet)) then
     1236            return 2;
     1237    if (length(sPathHome) <= 2) then
     1238    do
     1239        if (\fQuiet) then
     1240            say 'Error: The home directory is to short!';
     1241        return 2;
     1242    end
     1243    if (\CfgVerifyDir(sPathHome, fQuiet)) then
     1244        return 2;
     1245return CheckCmdOutput('cvs --version', 0, fQuiet, 'Concurrent Versions System (CVS) 1.1');
     1246
     1247
     1248/*
     1249 * EMX
     1250 */
     1251EMX: procedure expose aCfg. aPath. sPathFile
     1252    parse arg sToolId,sOperation,fRM,fQuiet
     1253
     1254    /*
     1255     * EMX/GCC main directory.
     1256     */
     1257    sEMX = PathQuery('emx', sToolId, sOperation);
     1258    if (sEMX = '') then
     1259        return 1;
     1260    /* If config operation we're done now. */
     1261    if (pos('config', sOperation) > 0) then
     1262        return 0;
     1263
     1264    sEMXBack    = translate(sEMX, '\', '/');
     1265    sEMXForw    = translate(sEMX, '/', '\');
     1266    call EnvSet      fRM, 'PATH_EMX', sEMXBack;
     1267    call EnvSet      fRM, 'CCENV',      'EMX'
     1268    call EnvSet      fRM, 'BUILD_ENV',  'EMX'
     1269    call EnvSet      fRM, 'BUILD_PLATFORM', 'OS2'
     1270
     1271    call EnvAddFront fRM, 'BEGINLIBPATH',       sEMXBack'\dll;'
     1272    call EnvAddFront fRM, 'PATH',               sEMXBack'\bin;'
     1273    call EnvAddFront fRM, 'DPATH',              sEMXBack'\book;'
     1274    call EnvAddFront fRM, 'BOOKSHELF',          sEMXBack'\book;'
     1275    call EnvAddFront fRM, 'HELP',               sEMXBack'\help;'
     1276    call EnvAddFront fRM, 'C_INCLUDE_PATH',     sEMXForw'/include'
     1277    call EnvAddFront fRM, 'LIBRARY_PATH',       sEMXForw'/lib'
     1278    call EnvAddFront fRM, 'CPLUS_INCLUDE_PATH', sEMXForw'/include/cpp;'sEMXForw'/include'
     1279    call EnvSet      fRM, 'PROTODIR',           sEMXForw'/include/cpp/gen'
     1280    call EnvSet      fRM, 'OBJC_INCLUDE_PATH',  sEMXForw'/include'
     1281    call EnvSet      fRM, 'GCCLOAD',            '5'
     1282    call EnvSet      fRM, 'GCCOPT',             '-pipe'
     1283    call EnvAddFront fRM, 'INFOPATH',           sEMXForw'/info'
     1284    call EnvSet      fRM, 'EMXBOOK',            'emxdev.inf+emxlib.inf+emxgnu.inf+emxbsd.inf'
     1285    call EnvAddFront fRM, 'HELPNDX',            'emxbook.ndx', '+', 1
     1286    call EnvSet      fRM, 'EMXOPT',             '-c -n -h1024'
     1287    if EnvGet('TERM') = '' then do
     1288        call EnvSet  fRM, 'TERM',               'ansi'
     1289        call EnvSet  fRM, 'TERMCAP',            sEMXForw'/etc/termcap.dat'
     1290    end
     1291
     1292    /*
     1293     * Verify.
     1294     */
     1295    if (pos('verify', sOperation) <= 0) then
     1296        return 0;
     1297    if (    \CfgVerifyFile(sEmxBack'\bin\gcc.exe', fQuiet),
     1298        |   \CfgVerifyFile(sEmxBack'\bin\emxomf.exe', fQuiet),
     1299        |   \CfgVerifyFile(sEmxBack'\bin\emxrev.cmd', fQuiet),
     1300        |   \CfgVerifyFile(sEmxBack'\lib\mt\c.a', fQuiet),
     1301        |   \CfgVerifyFile(sEmxBack'\lib\mt\c.lib', fQuiet),
     1302        |   \CfgVerifyFile(sEmxBack'\lib\mt\sys.lib', fQuiet),
     1303        |   \CfgVerifyFile(sEmxBack'\lib\mt\emx.a', fQuiet),
     1304        |   \CfgVerifyFile(sEmxBack'\lib\mt\emx.lib', fQuiet),
     1305        |   \CfgVerifyFile(sEmxBack'\lib\mt\c_import.a', fQuiet),
     1306        |   \CfgVerifyFile(sEmxBack'\lib\mt\c_import.lib', fQuiet),
     1307        |   \CfgVerifyFile(sEmxBack'\lib\c_alias.a', fQuiet),
     1308        |   \CfgVerifyFile(sEmxBack'\lib\c_alias.lib', fQuiet),
     1309        |   \CfgVerifyFile(sEmxBack'\lib\emx2.a', fQuiet),
     1310        |   \CfgVerifyFile(sEmxBack'\lib\emx2.lib', fQuiet),
     1311        ) then
     1312        return 2;
     1313    rc = CheckCmdOutput('gcc --version', 0, fQuiet, '2.8.1');
     1314    if (rc = 0) then
     1315        rc = CheckCmdOutput('emxrev.cmd', 0, fQuiet,,
     1316                            'EMX : revision = 61'||'0d0a'x ||,
     1317                            'EMXIO : revision = 60'||'0d0a'x||,
     1318                            'EMXLIBC : revision = 63'||'0d0a'x||,
     1319                            'EMXLIBCM : revision = 64'||'0d0a'x||,
     1320                            'EMXLIBCS : revision = 64'||'0d0a'x||,
     1321                            'EMXWRAP : revision = 60'||'0d0a'x);
     1322    return rc;
     1323return 0;
     1324
     1325
     1326/*
     1327 * EMX PGCC - must be installed on to the ordinar EMX.
     1328 */
     1329EMXPGCC: procedure expose aCfg. aPath. sPathFile
     1330    parse arg sToolId,sOperation,fRM,fQuiet
     1331
     1332    /*
     1333     * EMX/GCC main directory.
     1334     */
     1335    sEMXPGCC    = PathQuery('emxpgcc', sToolId, sOperation);
     1336    if (sEMXPGCC = '') then
     1337        return 1;
     1338    /* If config operation we're done now. */
     1339    if (pos('config', sOperation) > 0) then
     1340        return 0;
     1341
     1342    sEMXBack    = translate(sEMXPGCC, '\', '/');
     1343    sEMXForw    = translate(sEMXPGCC, '/', '\');
     1344    call EnvSet      fRM, 'PATH_EMXPGCC',   sEMXBack;
     1345    call EnvSet      fRM, 'CCENV',          'EMX'
     1346    call EnvSet      fRM, 'BUILD_ENV',      'EMX'
     1347    call EnvSet      fRM, 'BUILD_PLATFORM', 'OS2'
     1348
     1349    call EnvAddFront fRM, 'BEGINLIBPATH',       sEMXBack'\dll;'
     1350    call EnvAddFront fRM, 'PATH',               sEMXBack'\bin;'
     1351    call EnvAddFront fRM, 'DPATH',              sEMXBack'\book;'
     1352    call EnvAddFront fRM, 'BOOKSHELF',          sEMXBack'\book;'
     1353    call EnvAddFront fRM, 'HELP',               sEMXBack'\help;'
     1354    call EnvAddFront fRM, 'C_INCLUDE_PATH',     sEMXForw'/include'
     1355    call EnvAddFront fRM, 'LIBRARY_PATH',       sEMXForw'/lib'
     1356    call EnvAddFront fRM, 'CPLUS_INCLUDE_PATH', sEMXForw'/include/cpp;'sEMXForw'/include'
     1357    call EnvSet      fRM, 'PROTODIR',           sEMXForw'/include/cpp/gen'
     1358    call EnvSet      fRM, 'OBJC_INCLUDE_PATH',  sEMXForw'/include'
     1359    call EnvAddFront fRM, 'INFOPATH',           sEMXForw'/info'
     1360    call EnvSet      fRM, 'EMXBOOK',            'emxdev.inf+emxlib.inf+emxgnu.inf+emxbsd.inf'
     1361    call EnvAddFront fRM, 'HELPNDX',            'emxbook.ndx', '+', 1
     1362
     1363    /*
     1364     * Verify.
     1365     */
     1366    if (pos('verify', sOperation) <= 0) then
     1367        return 0;
     1368    if (    \CfgVerifyFile(sEmxBack'\bin\gcc.exe', fQuiet),
     1369        |   \CfgVerifyFile(sEmxBack'\bin\g++.exe', fQuiet),
     1370        |   \CfgVerifyFile(sEmxBack'\bin\as.exe', fQuiet),
     1371        |   \CfgVerifyFile(sEmxBack'\bin\emxomf.exe', fQuiet),
     1372        |   \CfgVerifyFile(sEmxBack'\lib\gcc29160.a', fQuiet),
     1373        |   \CfgVerifyFile(sEmxBack'\lib\gcc29160.lib', fQuiet),
     1374        |   \CfgVerifyFile(sEmxBack'\lib\iberty.a', fQuiet),
     1375        |   \CfgVerifyFile(sEmxBack'\lib\iberty.lib', fQuiet),
     1376        |   \CfgVerifyFile(sEmxBack'\lib\iberty_s.a', fQuiet),
     1377        |   \CfgVerifyFile(sEmxBack'\lib\iberty_s.lib', fQuiet),
     1378        |   \CfgVerifyFile(sEmxBack'\lib\opcodes.a', fQuiet),
     1379        |   \CfgVerifyFile(sEmxBack'\lib\opcodes.lib', fQuiet),
     1380        |   \CfgVerifyFile(sEmxBack'\lib\opcodes_s.a', fQuiet),
     1381        |   \CfgVerifyFile(sEmxBack'\lib\opcodes_s.lib', fQuiet),
     1382        ) then
     1383        return 2;
     1384    rc = CheckCmdOutput('gcc --version', 0, fQuiet, 'pgcc-2.95.2');
     1385    if (rc = 0) then
     1386        rc = CheckCmdOutput('g++ --version', 0, fQuiet, 'pgcc-2.95.2');
     1387    if (rc = 0) then
     1388        rc = CheckCmdOutput('as --version', 0, fQuiet, 'GNU assembler 2.9.1');
     1389return rc;
     1390
     1391/*
     1392 * IBM DB2 v5.2
     1393 */
     1394db2v52: procedure expose aCfg. aPath. sPathFile
     1395    parse arg sToolId,sOperation,fRM,fQuiet
     1396    sPathDB2   = PathQuery('db2v52', sToolId, sOperation);
     1397    if (sPathDB2 = '') then
     1398        return 1;
     1399    /* If config operation we're done now. */
     1400    if (pos('config', sOperation) > 0) then
     1401        return 0;
     1402    call EnvSet      fRm, 'PATH_DB2',    sPathDB2;
     1403    call EnvSet      fRm, 'db2path',     sPathDB2;
     1404    call EnvAddFront fRm, 'beginlibpath',sPathDB2'\dll;'sPathDB2'\alt;'
     1405    call EnvAddFront fRm, 'path',        sPathDB2'\bin;'sPathDB2'\alt;'
     1406    call EnvAddFront fRm, 'dpath',       sPathDB2'\bin;'sPathDB2';'
     1407    call EnvAddFront fRm, 'help',        sPathDB2'\help;'
     1408    call EnvAddEnd   fRm, 'classpath',   '.;'sPathDB2'\JAVA\DB2JAVA.ZIP;'sPathDB2'\JAVA\RUNTIME.ZIP;'sPathDB2'\JAVA\SQLJ.ZIP;'
     1409    call EnvSet      fRM, 'db2instace',  'DB2'
     1410    /*call EnvSet      fRM, 'odbc_path',   'f:\odbc' -- huh? what's this? */
     1411    call EnvAddFront fRM, 'cobcpy',      sPathDB2'\include\cobol_mf'
     1412    call EnvSet      fRM, 'finclude',    sPathDB2'\include'
     1413    call EnvAddFront fRM, 'include',     sPathDB2'\include;'
     1414    call EnvAddFront fRM, 'lib',         sPathDB2'\lib;'
     1415
     1416    /*
     1417     * Verify.
     1418     */
     1419    if (pos('verify', sOperation) <= 0) then
     1420        return 0;
     1421
     1422    if (    \CfgVerifyFile(sPathDB2'\bin\db2.exe', fQuiet),
     1423        |   \CfgVerifyFile(sPathDB2'\bin\sqlbind.exe', fQuiet),
     1424        |   \CfgVerifyFile(sPathDB2'\bin\sqlprep.exe', fQuiet),
     1425        |   \CfgVerifyFile(sPathDB2'\lib\db2api.lib', fQuiet),
     1426        |   \CfgVerifyFile(sPathDB2'\lib\db2cli.lib', fQuiet),
     1427        |   \CfgVerifyFile(sPathDB2'\lib\db2gmf32.lib', fQuiet),
     1428        |   \CfgVerifyFile(sPathDB2'\include\sql.h', fQuiet),
     1429        |   \CfgVerifyFile(sPathDB2'\include\sqlcodes.h', fQuiet),
     1430        |   \CfgVerifyFile(sPathDB2'\include\sqlsystm.h', fQuiet),
     1431        |   \CfgVerifyFile(sPathDB2'\include\sqlcli.h', fQuiet),
     1432        ) then
     1433        return 2;
     1434    rc = CheckCmdOutput('echo quit | db2', 0, fQuiet, 'Command Line Processor for DB2 SDK 5.2.0');
     1435return rc;
     1436
     1437
     1438/*
     1439 *  Device Driver Kit (DDK) base.
     1440 */
     1441DDKBase: procedure expose aCfg. aPath. sPathFile
     1442    parse arg sToolId,sOperation,fRM,fQuiet
     1443
     1444    /*
     1445     * Device Driver Kit (DDK) (v4.0+) base (important not main) directory.
     1446     */
     1447    sPathDDKBase    = PathQuery('ddkbase', sToolId, sOperation);
     1448    if (sPathDDKBase = '') then
     1449        return 1;
     1450    /* If config operation we're done now. */
     1451    if (pos('config', sOperation) > 0) then
     1452        return 0;
     1453    call EnvSet      fRM, 'PATH_DDKBASE',sPathDDKBase;
     1454    call EnvAddFront fRM, 'path',        sPathDDKBase'\tools;'
     1455    call EnvAddFront fRM, 'include',     sPathDDKBase'\h;'sPathDDKBase'\inc;'sPathDDKBase'\inc32;'
     1456    call EnvAddFront fRM, 'include16',   sPathDDKBase'\h;'
     1457    call EnvAddFront fRM, 'lib',         sPathDDKBase'\lib;'
     1458    call EnvAddFront fRM, 'bookshelf',   sPathDDKBase'\..\docs;'
     1459
     1460    /*
     1461     * Verify.
     1462     */
     1463    if (pos('verify', sOperation) <= 0) then
     1464        return 0;
     1465    if (    \CfgVerifyFile(sPathDDKBase'\tools\link.exe', fQuiet),
     1466        |   \CfgVerifyFile(sPathDDKBase'\tools\link386.exe', fQuiet),
     1467        |   \CfgVerifyFile(sPathDDKBase'\tools\cl386.exe', fQuiet),
     1468        |   \CfgVerifyFile(sPathDDKBase'\tools\masm.exe', fQuiet),
     1469        |   \CfgVerifyFile(sPathDDKBase'\tools\h2inc.exe', fQuiet),
     1470        |   \CfgVerifyFile(sPathDDKBase'\tools\lib.exe', fQuiet),
     1471        |   \CfgVerifyFile(sPathDDKBase'\lib\os2286.lib', fQuiet),
     1472        |   \CfgVerifyFile(sPathDDKBase'\lib\os2286p.lib', fQuiet),
     1473        |   \CfgVerifyFile(sPathDDKBase'\lib\os2386.lib', fQuiet),
     1474        |   \CfgVerifyFile(sPathDDKBase'\lib\os2386p.lib', fQuiet),
     1475        |   \CfgVerifyFile(sPathDDKBase'\lib\doscalls.lib', fQuiet),
     1476        |   \CfgVerifyFile(sPathDDKBase'\lib\dhcalls.lib', fQuiet),
     1477        |   \CfgVerifyFile(sPathDDKBase'\lib\addcalls.lib', fQuiet),
     1478        |   \CfgVerifyFile(sPathDDKBase'\lib\rmcalls.lib', fQuiet),
     1479        |   \CfgVerifyFile(sPathDDKBase'\lib\vdh.lib', fQuiet),
     1480        |   \CfgVerifyFile(sPathDDKBase'\h\infoseg.h', fQuiet),
     1481        |   \CfgVerifyFile(sPathDDKBase'\h\include.h', fQuiet),
     1482        |   \CfgVerifyFile(sPathDDKBase'\h386\pmddi.h', fQuiet),
     1483        |   \CfgVerifyFile(sPathDDKBase'\h386\pmddim.h', fQuiet),
     1484        |   \CfgVerifyFile(sPathDDKBase'\h386\limits.h', fQuiet),
     1485        |   \CfgVerifyFile(sPathDDKBase'\h386\string.h', fQuiet),
     1486        |   \CfgVerifyFile(sPathDDKBase'\inc\v8086.inc', fQuiet),
     1487        |   \CfgVerifyFile(sPathDDKBase'\inc\sas.inc', fQuiet),
     1488        |   \CfgVerifyFile(sPathDDKBase'\inc\pmwinx.inc', fQuiet),
     1489        |   \CfgVerifyFile(sPathDDKBase'\inc\infoseg.inc', fQuiet),
     1490        |   \CfgVerifyFile(sPathDDKBase'\inc\devhlp.inc', fQuiet),
     1491        |   \CfgVerifyFile(sPathDDKBase'\inc\devhlpp.inc', fQuiet),
     1492        ) then
     1493        return 2;
     1494    rc = CheckCmdOutput('cl386', 0, fQuiet, 'Microsoft (R) Microsoft 386 C Compiler. Version 6.00.054');
     1495    if (rc = 0) then
     1496        rc = CheckCmdOutput('masm nul,nul,nul,nul;', 2, fQuiet, 'Microsoft (R) Macro Assembler Version 5.10A.15 Jul 07 15:25:03 1989');
     1497    if (rc = 0) then
     1498        rc = CheckCmdOutput('h2inc -?', 0, fQuiet, 'h2inc - .H to .INC file translator (version 13.29)');
     1499    if (rc = 0) then
     1500        rc = CheckCmdOutput('type' sPathDDKBase'\inc\devhlp.inc', 0, fQuiet, 'DevHlp_ReadFileAt');
     1501return rc;
     1502
     1503
     1504/*
     1505 * ICAT Debugger
     1506 */
     1507ICATGam: procedure expose aCfg. aPath. sPathFile
     1508    parse arg sToolId,sOperation,fRM,fQuiet
     1509    sPathICAT   = PathQuery('icatgam', sToolId, sOperation);
     1510    if (sPathICAT = '') then
     1511        return 1;
     1512    /* If config operation we're done now. */
     1513    if (pos('config', sOperation) > 0) then
     1514        return 0;
     1515
     1516    /*
     1517     * Installing the environment variables.
     1518     */
     1519    call EnvSet      fRm, 'PATH_ICATGAM', sPathICAT;
     1520    call EnvAddFront fRm, 'beginlibpath',sPathICAT'\dll;'
     1521    call EnvAddFront fRm, 'path',        sPathICAT'\bin;'
     1522    call EnvAddFront fRm, 'dpath',       sPathICAT'\help;'
     1523    call EnvAddFront fRm, 'help',        sPathICAT'\help;'
     1524
     1525    /*
     1526     * Verify.
     1527     */
     1528    if (pos('verify', sOperation) <= 0) then
     1529        return 0;
     1530    if (    \CfgVerifyFile(sPathICAT'\bin\icatgam.exe', fQuiet),
     1531        |   \CfgVerifyFile(sPathICAT'\dll\gamoou3.dll', fQuiet),
     1532        |   \CfgVerifyFile(sPathICAT'\dll\gam5lde.dll', fQuiet),
     1533        |   \CfgVerifyFile(sPathICAT'\dll\gam5cx.dll', fQuiet),
     1534        ) then
     1535        return 2;
     1536return 0;
     1537
     1538
     1539/*
     1540 * ICAT Debugger
     1541 */
     1542ICATGam406RC1: procedure expose aCfg. aPath. sPathFile
     1543    parse arg sToolId,sOperation,fRM,fQuiet
     1544    sPathICAT   = PathQuery('icatgam406rc1', sToolId, sOperation);
     1545    if (sPathICAT = '') then
     1546        return 1;
     1547    /* If config operation we're done now. */
     1548    if (pos('config', sOperation) > 0) then
     1549        return 0;
     1550
     1551    /*
     1552     * Installing the environment variables.
     1553     */
     1554    call EnvSet      fRm, 'PATH_ICATGAM', sPathICAT;
     1555    call EnvAddFront fRm, 'beginlibpath',sPathICAT'\dll;'
     1556    call EnvAddFront fRm, 'path',        sPathICAT'\bin;'
     1557    call EnvAddFront fRm, 'dpath',       sPathICAT'\help;'
     1558    call EnvAddFront fRm, 'help',        sPathICAT'\help;'
     1559
     1560    /*
     1561     * Verify.
     1562     */
     1563    if (pos('verify', sOperation) <= 0) then
     1564        return 0;
     1565    if (    \CfgVerifyFile(sPathICAT'\bin\icatgam.exe', fQuiet),
     1566        |   \CfgVerifyFile(sPathICAT'\dll\gamoou3.dll', fQuiet),
     1567        |   \CfgVerifyFile(sPathICAT'\dll\gam5lde.dll', fQuiet),
     1568        |   \CfgVerifyFile(sPathICAT'\dll\gam5cx.dll', fQuiet),
     1569        ) then
     1570        return 2;
     1571return 0;
     1572
     1573
     1574
     1575/*
     1576 * ICAT Debugger for PE images.
     1577 */
     1578ICATPe: procedure expose aCfg. aPath. sPathFile
     1579    parse arg sToolId,sOperation,fRM,fQuiet
     1580    sPathICAT   = PathQuery('icatgam', sToolId, sOperation);
     1581    if (sPathICAT = '') then
     1582        return 1;
     1583    sPathICATPe = PathQuery('icatpe', sToolId, sOperation);
     1584    if (sPathICATPe = '') then
     1585        return 1;
     1586    /* If config operation we're done now. */
     1587    if (pos('config', sOperation) > 0) then
     1588        return 0;
     1589
     1590    /*
     1591     * Installing the environment variables.
     1592     */
     1593    call EnvSet      fRm, 'PATH_ICATGAM',sPathICAT;
     1594    call EnvSet      fRm, 'PATH_ICATPE', sPathICATPe;
     1595    call EnvAddFront fRm, 'beginlibpath',sPathICATPe'\bin;'sPathICAT'\dll;'
     1596    call EnvAddFront fRm, 'path',        sPathICATPe'\bin;'sPathICAT'\bin;'
     1597    call EnvAddFront fRm, 'dpath',       sPathICATPe'\bin;'sPathICAT'\help;'
     1598    call EnvAddFront fRm, 'help',        sPathICATPe'\bin;'sPathICAT'\help;'
     1599
     1600    /*
     1601     * Verify.
     1602     */
     1603    if (pos('verify', sOperation) <= 0) then
     1604        return 0;
     1605    if (    \CfgVerifyFile(sPathICAT'\bin\icatgam.exe', fQuiet),
     1606        |   \CfgVerifyFile(sPathICAT'\dll\gamoou3.dll', fQuiet),
     1607        |   \CfgVerifyFile(sPathICAT'\dll\gam5lde.dll', fQuiet),
     1608        |   \CfgVerifyFile(sPathICAT'\dll\gam5cx.dll', fQuiet),
     1609        |   \CfgVerifyFile(sPathICATPe'\bin\icatgam.exe', fQuiet),
     1610        |   \CfgVerifyFile(sPathICATPe'\bin\gamoou3.dll', fQuiet),
     1611        |   \CfgVerifyFile(sPathICATPe'\bin\gam5lde.dll', fQuiet),
     1612        |   \CfgVerifyFile(sPathICATPe'\bin\gam5cx.dll', fQuiet),
     1613        ) then
     1614        return 2;
     1615return 0;
     1616
     1617
     1618
     1619/*
     1620 * Interactive Disassembler (IDA) v3.80a
     1621 */
     1622IDA38: procedure expose aCfg. aPath. sPathFile
     1623    parse arg sToolId,sOperation,fRM,fQuiet
     1624    /*
     1625     * IDA main directory.
     1626     */
     1627    sPathIDA = PathQuery('ida38', sToolId, sOperation);
     1628    if (sPathIDA = '') then
     1629        return 1;
     1630    /* If config operation we're done now. */
     1631    if (pos('config', sOperation) > 0) then
     1632        return 0;
     1633
     1634    /*
     1635     * Installing the environment variables.
     1636     */
     1637    call EnvSet      fRM, 'PATH_IDA',       sPathIDA
     1638    call EnvAddFront fRM, 'path',           sPathIDA
     1639    call EnvAddFront fRM, 'beginlibpath',   sPathIDA
     1640
     1641    /*
     1642     * Verify.
     1643     */
     1644    if (pos('verify', sOperation) <= 0) then
     1645        return 0;
     1646    if (    \CfgVerifyFile(sPathIDA'\ida2.exe', fQuiet),
     1647        |   \CfgVerifyFile(sPathIDA'\idaw.exe', fQuiet),
     1648        |   \CfgVerifyFile(sPathIDA'\ida.dll', fQuiet),
     1649        |   \CfgVerifyFile(sPathIDA'\pc.dll', fQuiet),
     1650        ) then
     1651        return 2;
     1652return 0;
     1653
     1654
     1655/*
     1656 * Interactive Disassembler (IDA) v4.01
     1657 */
     1658IDA40: procedure expose aCfg. aPath. sPathFile
     1659    parse arg sToolId,sOperation,fRM,fQuiet
     1660    /*
     1661     * IDA main directory.
     1662     */
     1663    sPathIDA = PathQuery('ida40', sToolId, sOperation);
     1664    if (sPathIDA = '') then
     1665        return 1;
     1666    /* If config operation we're done now. */
     1667    if (pos('config', sOperation) > 0) then
     1668        return 0;
     1669
     1670    /*
     1671     * Installing the environment variables.
     1672     */
     1673    call EnvSet      fRM, 'PATH_IDA',       sPathIDA
     1674    call EnvAddFront fRM, 'path',           sPathIDA
     1675    call EnvAddFront fRM, 'beginlibpath',   sPathIDA
     1676
     1677    /*
     1678     * Verify.
     1679     */
     1680    if (pos('verify', sOperation) <= 0) then
     1681        return 0;
     1682    if (    \CfgVerifyFile(sPathIDA'\ida2.exe', fQuiet),
     1683        |   \CfgVerifyFile(sPathIDA'\idaw.exe', fQuiet),
     1684        |   \CfgVerifyFile(sPathIDA'\ida.dll', fQuiet),
     1685        |   \CfgVerifyFile(sPathIDA'\pc.dll', fQuiet),
     1686        ) then
     1687        return 2;
     1688return 0;
     1689
     1690
     1691/*
     1692 * Interactive Disassembler (IDA) v4.14
     1693 */
     1694IDA414: procedure expose aCfg. aPath. sPathFile
     1695    parse arg sToolId,sOperation,fRM,fQuiet
     1696    /*
     1697     * IDA main directory.
     1698     */
     1699    sPathIDA = PathQuery('ida414', sToolId, sOperation);
     1700    if (sPathIDA = '') then
     1701        return 1;
     1702    /* If config operation we're done now. */
     1703    if (pos('config', sOperation) > 0) then
     1704        return 0;
     1705
     1706    /*
     1707     * Installing the environment variables.
     1708     */
     1709    call EnvSet      fRM, 'PATH_IDA',       sPathIDA
     1710    call EnvAddFront fRM, 'path',           sPathIDA
     1711    call EnvAddFront fRM, 'beginlibpath',   sPathIDA
     1712
     1713    /*
     1714     * Verify.
     1715     */
     1716    if (pos('verify', sOperation) <= 0) then
     1717        return 0;
     1718    if (    \CfgVerifyFile(sPathIDA'\ida2.exe', fQuiet),
     1719        |   \CfgVerifyFile(sPathIDA'\idaw.exe', fQuiet),
     1720        |   \CfgVerifyFile(sPathIDA'\ida.dll', fQuiet),
     1721        |   \CfgVerifyFile(sPathIDA'\pc.dll', fQuiet),
     1722        ) then
     1723        return 2;
     1724return 0;
     1725
     1726
     1727/*
     1728 * Interactive Disassembler (IDA) Plugin SDK (v5.0?)
     1729 */
     1730IDASDK: procedure expose aCfg. aPath. sPathFile
     1731    parse arg sToolId,sOperation,fRM,fQuiet
     1732    /*
     1733     * IDA main directory.
     1734     */
     1735    sPathIDASDK = PathQuery('idasdk', sToolId, sOperation);
     1736    if (sPathIDASDK = '') then
     1737        return 1;
     1738    /* If config operation we're done now. */
     1739    if (pos('config', sOperation) > 0) then
     1740        return 0;
     1741
     1742    /*
     1743     * Installing the environment variables.
     1744     */
     1745    call EnvSet      fRM, 'PATH_IDASDK',    sPathIDASDK
     1746    call EnvAddFront fRM, 'include',        sPathIDASDK'\include;'
     1747    call EnvAddFront fRM, 'lib',            sPathIDASDK'\libwat.os2;'
     1748    call EnvAddFront fRM, 'path',           sPathIDASDK'\bin\os2;'
     1749    call EnvAddFront fRM, 'beginlibpath',   sPathIDASDK'\bin\os2;'
     1750
     1751    /*
     1752     * Verify.
     1753     */
     1754    if (pos('verify', sOperation) <= 0) then
     1755        return 0;
     1756    if (    \CfgVerifyFile(sPathIDASDK'\os2wat.cfg', fQuiet),
     1757        |   \CfgVerifyFile(sPathIDASDK'\d32wat.cfg', fQuiet),
     1758        |   \CfgVerifyFile(sPathIDASDK'\include\exehdr.h', fQuiet),
     1759        |   \CfgVerifyFile(sPathIDASDK'\include\ida.hpp', fQuiet),
     1760        |   \CfgVerifyFile(sPathIDASDK'\include\vm.hpp', fQuiet),
     1761        |   \CfgVerifyFile(sPathIDASDK'\libwat.os2\ida.lib', fQuiet),
     1762        |   \CfgVerifyFile(sPathIDASDK'\libwat.d32\ida.lib', fQuiet),
     1763        |   \CfgVerifyFile(sPathIDASDK'\libwat.d32\INIRT386.OBJ', fQuiet),
     1764      /*  |   \CfgVerifyFile(sPathIDASDK'\libbor.d32\ida.lib', fQuiet)*/,
     1765        ) then
     1766        return 2;
     1767return 0;
     1768
     1769
     1770/*
     1771 * Mode commandline.
     1772 */
     1773Mode: procedure expose aCfg. aPath. sPathFile
     1774    parse arg sToolId,sOperation,fRM,fQuiet,cols,rows
     1775    if ((pos('uninstall', sOperation) > 0) | \fRM) then
     1776    do
     1777        cols = 80;
     1778        rows = 25;
     1779    end
     1780    else if (pos('install', sOperation) > 0) then
     1781        Address CMD 'mode' cols','rows
     1782return 0;
     1783
     1784
     1785/*
     1786 * Microsoft C v6.0a 16-bit
     1787 */
     1788MSCV6_16: procedure expose aCfg. aPath. sPathFile
     1789    parse arg sToolId,sOperation,fRM,fQuiet
     1790
     1791    /*
     1792     * Microsoft C v6.0a main directory.
     1793     */
     1794    sPathMSC    = PathQuery('mscv6-16', sToolId, sOperation);
     1795    if (sPathMSC = '') then
     1796        return 1;
     1797    /* If config operation we're done now. */
     1798    if (pos('config', sOperation) > 0) then
     1799        return 0;
     1800
     1801    /*
     1802     * Installing the environment variables.
     1803     */
     1804    call EnvSet      fRM, 'BUILD_ENV',  'MSCV6-16'
     1805    call EnvSet      fRM, 'BUILD_PLATFORM', 'OS2'
     1806    call EnvSet      fRM, 'PATH_MSC',   sPathMSC;
     1807    call EnvAddFront fRM, 'path',       sPathMSC'\binp;'
     1808    call EnvAddFront fRM, 'include',    sPathMSC'\include;'
     1809    call EnvAddFront fRM, 'include16',  sPathMSC'\include;'
     1810    call EnvAddFront fRM, 'lib',        sPathMSC'\lib;'
     1811
     1812    /*
     1813     * Verify.
     1814     */
     1815    if (pos('verify', sOperation) <= 0) then
     1816        return 0;
     1817    if (    \CfgVerifyFile(sPathMSC'\binp\cl.exe', fQuiet),
     1818        |   \CfgVerifyFile(sPathMSC'\lib\clibcep.lib', fQuiet),
     1819        |   \CfgVerifyFile(sPathMSC'\lib\llibcep.lib', fQuiet),
     1820        |   \CfgVerifyFile(sPathMSC'\lib\mlibcep.lib', fQuiet),
     1821        |   \CfgVerifyFile(sPathMSC'\lib\slibcep.lib', fQuiet),
     1822        |   \CfgVerifyFile(sPathMSC'\include\sysbits.h', fQuiet),
     1823        |   \CfgVerifyFile(sPathMSC'\include\dos.h', fQuiet),
     1824        |   \CfgVerifyFile(sPathMSC'\include\bios.h', fQuiet),
     1825        |   \CfgVerifyFile(sPathMSC'\include\string.h', fQuiet),
     1826        |   \CfgVerifyFile(sPathMSC'\include\stdio.h', fQuiet),
     1827        ) then
     1828        return 2;
     1829    rc = CheckCmdOutput('cl', 0, fQuiet, 'Microsoft (R) C Optimizing Compiler Version 6.00A.04');
     1830return rc;
     1831
     1832
     1833/*
     1834 * Microsoft C v6.0a 32-bit
     1835 */
     1836MSCV6_32: procedure expose aCfg. aPath. sPathFile
     1837    parse arg sToolId,sOperation,fRM,fQuiet
     1838
     1839    /*
     1840     * Microsoft C v6.0a 32-bit main directory.
     1841     */
     1842    sPathDDKBase = PathQuery('ddkbase', sToolId, sOperation);
     1843    if (sPathDDKBase = '') then
     1844        return 1;
     1845    /* If config operation we're done now. */
     1846    if (pos('config', sOperation) > 0) then
     1847        return 0;
     1848
     1849    /*
     1850     * This is where the compiler really is.
     1851     */
     1852    call DDKBase 'ddkbase',sOperation,fRM,fQuiet;
     1853
     1854    /*
     1855     * Installing the environment variables.
     1856     */
     1857    call EnvSet      fRM, 'BUILD_ENV',  'MSCV6'
     1858    call EnvSet      fRM, 'BUILD_PLATFORM', 'OS2'
     1859    call EnvSet      fRM, 'PATH_MSC',   sPathDDKBase;
     1860    call EnvAddFront fRM, 'include',    sPathDDKBase'\h386;'
     1861    call EnvAddFront fRM, 'lib',        sPathDDKBase'\lib;'
     1862
     1863    /*
     1864     * Verify.
     1865     */
     1866    if (pos('verify', sOperation) <= 0) then
     1867        return 0;
     1868    if (    \CfgVerifyFile(sPathDDKBase'\tools\cl386.exe', fQuiet),
     1869        |   \CfgVerifyFile(sPathDDKBase'\h386\limits.h', fQuiet),
     1870        |   \CfgVerifyFile(sPathDDKBase'\h386\string.h', fQuiet),
     1871        ) then
     1872        return 2;
     1873    rc = CheckCmdOutput('cl386', 0, fQuiet, 'Microsoft (R) Microsoft 386 C Compiler. Version 6.00.054');
     1874return rc;
     1875
     1876
     1877/*
     1878 * mySQL Database system
     1879 */
     1880mySQL: procedure expose aCfg. aPath. sPathFile
     1881    parse arg sToolId,sOperation,fRM,fQuiet
     1882
     1883    /*
     1884     * mySQL Database system main directory.
     1885     */
     1886    sPathMySQL    = PathQuery('mysql', sToolId, sOperation);
     1887    if (sPathMySQL = '') then
     1888        return 1;
     1889    /* If config operation we're done now. */
     1890    if (pos('config', sOperation) > 0) then
     1891        return 0;
     1892
     1893    /*
     1894     * Installing the environment variables.
     1895     */
     1896    call EnvSet      fRM, 'PATH_MYSQL',     sPathMySQL;
     1897    call EnvAddFront fRM, 'path',           sPathMySQL'\bin;'
     1898    call EnvAddFront fRM, 'beginlibpath',   sPathMySQL'\dll;'
     1899    call EnvAddFront fRM, 'include',        sPathMySQL'\include;'
     1900    call EnvAddFront fRM, 'bookshelf',      sPathMySQL'\doc;'sPathMySQL'\book';
     1901    /*call EnvAddFront fRM, 'lib',            sPathMySQL'\lib;'*/
     1902
     1903    /*
     1904     * Verify.
     1905     */
     1906    if (pos('verify', sOperation) <= 0) then
     1907        return 0;
     1908    if (    \CfgVerifyFile(sPathMySQL'\bin\mysql.exe', fQuiet),
     1909        |   \CfgVerifyFile(sPathMySQL'\bin\mysqld.exe', fQuiet),
     1910        |   \CfgVerifyFile(sPathMySQL'\bin\mysqladmin.exe', fQuiet),
     1911        |   \CfgVerifyFile(sPathMySQL'\dll\mysql.dll', fQuiet),
     1912        |   \CfgVerifyFile(sPathMySQL'\include\mysql.h', fQuiet),
     1913        |   \CfgVerifyFile(sPathMySQL'\include\mysql_com.h', fQuiet),
     1914        |   \CfgVerifyFile(sPathMySQL'\include\mysql_version.h', fQuiet),
     1915        ) then
     1916        return 2;
     1917    rc = CheckCmdOutput('mysql --version', 0, fQuiet, ', for ');
     1918return rc;
     1919
     1920
     1921
     1922/*
     1923 * NetQOS2 - help subsystem++ for VAC 3.6.5 and VAC 4.0
     1924 */
     1925NetQOS2: procedure expose aCfg. aPath. sPathFile
     1926    parse arg sToolId,sOperation,fRM,fQuiet
     1927    sPathNetQOS2 = PathQuery('netqos2', sToolId, sOperation);
     1928    if (sPathNetQOS2 = '') then
     1929        return 1;
     1930    /* If config operation we're done now. */
     1931    if (pos('config', sOperation) > 0) then
     1932        return 0;
     1933
     1934    /*
     1935     * Installing the environment variables.
     1936     */
     1937    call EnvSet      fRM, 'PATH_NETQOS2',   sPathNetQOS2
     1938    call EnvAddFront fRM, 'path',           sPathNetQOS2';'
     1939    call EnvAddFront fRM, 'dpath',          sPathNetQOS2';'
     1940    call EnvAddFront fRM, 'beginlibpath',   sPathNetQOS2';'
     1941    call EnvSet      fRM, 'imndatasrv',     sPathNetQOS2'\DATA'
     1942    call EnvSet      fRM, 'imndatacl',      sPathNetQOS2'\DATA'
     1943    call EnvSet      fRM, 'imnworksrv',     sPathNetQOS2'\WORK'
     1944    call EnvSet      fRM, 'imnworkcl',      sPathNetQOS2'\WORK'
     1945    call EnvSet      fRM, 'imnnlpssrv',     sPathNetQOS2
     1946    call EnvSet      fRM, 'imnnlpscl',      sPathNetQOS2
     1947    call EnvSet      fRM, 'imncccfgfile',   'NETQ.CFG'
     1948    call EnvSet      fRM, 'imncscfgfile',   'NETQ.CFG'
     1949    call EnvSet      fRM, 'imqconfigsrv',   sPathNetQOS2'\instance'
     1950    call EnvSet      fRM, 'imqconfigcl',    sPathNetQOS2'\instance\dbcshelp'
     1951
     1952    /*
     1953     * Verify.
     1954     */
     1955    if (pos('verify', sOperation) <= 0) then
     1956        return 0;
     1957    if (    \CfgVerifyFile(sPathNetQOS2'\netq.exe', fQuiet),
     1958        ) then
     1959        return 2;
     1960    rc = CheckCmdOutput('netq', 999, fQuiet, 'NETQ {START | STOP');
     1961return rc;
     1962
     1963
     1964/*
     1965 * Odin32 testcase setup.
     1966 */
     1967Odin32Testcase: procedure expose aCfg. aPath. sPathFile
     1968    parse arg sToolId,sOperation,fRM,fQuiet
     1969    if (  PathQuery('testcase_drive_unused', sToolId, sOperation) = '',
     1970        | PathQuery('testcase_drive_fixed', sToolId, sOperation) = '',
     1971        | PathQuery('testcase_drive_floppy', sToolId, sOperation) = '',
     1972        | PathQuery('testcase_drive_cdrom', sToolId, sOperation) = '',
     1973        ) then
     1974        return 1;
     1975    /* If config operation we're done now. */
     1976    if (pos('config', sOperation) > 0) then
     1977        return 0;
     1978
     1979    /*
     1980     * Installing the environment variables.
     1981     */
     1982    call EnvSet      fRM, 'odin32_testcase_drive_unused',       PathQuery('testcase_drive_unused', sToolId, sOperation);
     1983    call EnvSet      fRM, 'odin32_testcase_drive_fixed',        PathQuery('testcase_drive_fixed', sToolId, sOperation);
     1984    call EnvSet      fRM, 'odin32_testcase_drive_floppy',       PathQuery('testcase_drive_floppy', sToolId, sOperation);
     1985    call EnvSet      fRM, 'odin32_testcase_drive_cdrom',        PathQuery('testcase_drive_cdrom', sToolId, sOperation);
     1986    call EnvSet      fRM, 'odin32_testcase_drive_network',      PathQuery('testcase_drive_network', sToolId, sOperation, 1);
     1987    call EnvSet      fRM, 'odin32_testcase_drive_ramdisk',      PathQuery('testcase_drive_ramdisk', sToolId, sOperation, 1);
     1988
     1989    /*
     1990     * Verify.
     1991     */
     1992    if (pos('verify', sOperation) <= 0) then
     1993        return 0;
     1994return 0;
     1995
     1996/*
     1997 * PERL 5005_53
     1998 */
     1999Perl: procedure expose aCfg. aPath. sPathFile
     2000    parse arg sToolId,sOperation,fRM,fQuiet
     2001
     2002    /*
     2003     * Perl main directory.
     2004     */
     2005/* BAD
     2006    sPathPerl       = PathQuery('perl', sToolId, sOperation);
     2007    if (sPathPerl = '') then
     2008        return 1;
     2009    /* If config operation we're done now. */
     2010    if (pos('config', sOperation) > 0) then
     2011        return 0;
     2012
     2013    /*
     2014     * Installing the environment variables.
     2015     */
     2016    sPathPerlForw   = translate(sPathPerl, '/', '\');
     2017    call EnvSet      fRM, 'PATH_PERL',      sPathPerl;
     2018    call EnvAddFront fRM, 'path',           sPathPerl'\bin;'
     2019    call EnvAddFront fRM, 'beginlibpath',   sPathPerl'\dll;'
     2020    call EnvAddEnd   fRM, 'bookshelf',      sPathPerl'\book;'
     2021    call EnvSet      fRM, 'perllib_prefix', sPathPerlForw'/lib;'sPathPerl'\lib'
     2022    call EnvSet      fRM, 'perl5lib',       sPathPerlForw'/lib/site_perl/5.00553/os2;'sPathPerlForw'/lib/site_perl/5.00553'
     2023    call EnvSet      fRM, 'perl5load',      '2'
     2024    call EnvSet      fRM, 'perl_sh_dir',    sPathPerlForw'/bin_sh/sh.exe'
     2025    call EnvSet      fRM, 'manpath',        sPathPerlForw'/man'
     2026    call EnvSet      fRM, 'perl_badlang',   '0'
     2027/*    call EnvSet      fRM, 'LANG',           'en_US' /* dirty fix... */*/
     2028*/
     2029/* seems ok */
     2030    sPathPerl       = PathQuery('perl', sToolId, sOperation);
     2031    if (sPathPerl = '') then
     2032        return 1;
     2033    /* If config operation we're done now. */
     2034    if (pos('config', sOperation) > 0) then
     2035        return 0;
     2036
     2037    /*
     2038     * Installing the environment variables.
     2039     */
     2040    sPathPerlForw   = translate(sPathPerl, '/', '\');
     2041    call EnvSet      fRM, 'PATH_PERL',      sPathPerl;
     2042    call EnvAddFront fRM, 'path',           sPathPerl'\bin;'
     2043    call EnvAddFront fRM, 'beginlibpath',   sPathPerl'\dll;'
     2044    call EnvAddEnd   fRM, 'bookshelf',      sPathPerl'\book;'
     2045    call EnvSet      fRM, 'perllib_prefix', sPathPerlForw'/lib;'sPathPerlForw'/lib'
     2046    call EnvSet      fRM, 'perl_sh_dir',    sPathPerlForw'/bin_sh'
     2047    call EnvSet      fRM, 'manpath',        sPathPerlForw'/man'
     2048    call EnvSet      fRM, 'perl5lib',       sPathPerlForw'/lib'
     2049    call EnvSet      fRM, 'perl_badlang',   '0'
     2050
     2051    /*
     2052     * Verify.
     2053     */
     2054    if (pos('verify', sOperation) <= 0) then
     2055        return 0;
     2056    if (    \CfgVerifyFile(sPathPerl'\bin\perl.exe', fQuiet),
     2057        |   \CfgVerifyFile(sPathPerl'\dll\perlE0AC.dll', fQuiet),
     2058        ) then
     2059        return 2;
     2060    rc = CheckCmdOutput('perl --version', 0, fQuiet, 'This is perl, version 5.005_53 built for os2');
     2061return rc;
     2062
     2063
     2064/*
     2065 * Python/2 v1.5.2
     2066 */
     2067Python: procedure expose aCfg. aPath. sPathFile
     2068    parse arg sToolId,sOperation,fRM,fQuiet
     2069
     2070    /*
     2071     * The Python Home directory
     2072     */
     2073    sPythonHome = PathQuery('python', sToolId, sOperation);
     2074    if (sPythonHome = '') then
     2075        return 1;
     2076    /* If config operation we're done now. */
     2077    if (pos('config', sOperation) > 0) then
     2078        return 0;
     2079
     2080    /*
     2081     * Installing the environment variables.
     2082     */
     2083    call EnvSet      fRM, 'PATH_PYTHON',    sPythonHome
     2084    call EnvSet      fRM, 'pythonhome',     sPythonHome
     2085    call EnvSet      fRM, 'pythonpath',     '.;'sPythonHome'\Lib;'sPythonHome'\Lib\plat-win;'sPythonHome'\Lib\lib-tk;'sPythonHome'\Lib\lib-dynload;'sPythonHome'\Lib\site-packages;'sPythonHome'\Lib\dos-8x3'
     2086    call EnvAddFront fRM, 'beginlibpath',   sPythonHome
     2087    call EnvAddFront fRM, 'path',           sPythonHome
     2088
     2089    /*
     2090     * Verify.
     2091     */
     2092    if (pos('verify', sOperation) <= 0) then
     2093        return 0;
     2094    if (    \CfgVerifyFile(sPythonHome'\Python.exe', fQuiet),
     2095        |   \CfgVerifyFile(sPythonHome'\Python15.dll', fQuiet),
     2096        ) then
     2097        return 2;
     2098    rc = CheckCmdOutput('echo print "hello world" | python', 0, fQuiet, 'hello world');
     2099return rc;
     2100
     2101
     2102/*
     2103 * OS/2 Programmers Toolkit v4.0 (CSD1/4)
     2104 */
     2105Toolkit40: procedure expose aCfg. aPath. sPathFile
     2106    parse arg sToolId,sOperation,fRM,fQuiet
     2107
     2108    /*
     2109     * Toolkit (4.0) main directory.
     2110     */
     2111    sPathTK    = PathQuery('toolkit40', sToolId, sOperation);
     2112    if (sPathTK = '') then
     2113        return 1;
     2114    /* If config operation we're done now. */
     2115    if (pos('config', sOperation) > 0) then
     2116        return 0;
     2117
     2118    /*
     2119     * Installing the environment variables.
     2120     */
     2121    call EnvSet      fRM, 'PATH_TOOLKIT',  sPathTK;
     2122    call EnvAddFront fRM, 'beginlibpath',   sPathTK'\BETA\DLL;'sPathTK'\SAMPLES\MM\DLL;'sPathTK'\SAMPLES\OPENDOC\PARTS\DLL;'sPathTK'\SOM\COMMON\DLL;'sPathTK'\SOM\LIB;'sPathTK'\OPENDOC\BASE\DLL;'sPathTK'\OPENDOC\BASE\LOCALE\EN_US;'sPathTK'\DLL;'
     2123    call EnvAddFront fRM, 'path',           sPathTK'\BETA\BIN;'sPathTK'\SOM\COMMON;'sPathTK'\SOM\BIN;.;'sPathTK'\OPENDOC\BASE\BIN;'sPathTK'\BIN;'
     2124    call EnvAddFront fRM, 'dpath',          sPathTK'\SOM\COMMON\SYSTEM;'sPathTK'\SOM\MSG;'sPathTK'\OPENDOC\BASE\MSG;'sPathTK'\BOOK;'sPathTK'\MSG;'
     2125    call EnvAddFront fRM, 'help',           sPathTK'\BETA\HELP;'sPathTK'\OPENDOC\BASE\LOCALE\EN_US;'sPathTK'\HELP;'
     2126    call EnvAddFront fRM, 'bookshelf',      sPathTK'\BETA\BOOK;'sPathTK'\BOOK;'sPathTK'\ARCHIVED;'
     2127    call EnvAddFront fRM, 'somir',          sPathTK'\SOM\COMMON\ETC\214\SOM.IR;'sPathTK'\OPENDOC\BASE\AVLSHELL.IR;'
     2128    call EnvAddEnd   fRM, 'somir',          sPathTK'\OPENDOC\CUSTOM\OD.IR;'sPathTK'\SAMPLES\REXX\SOM\ANIMAL\ORXSMP.IR;'
     2129    call EnvAddFront fRM, 'include',        sPathTK'\SPEECH\H;'sPathTK'\BETA\H;'sPathTK'\SAMPLES\OPENDOC\PARTS\INCLUDE;'sPathTK'\SOM\INCLUDE;'sPathTK'\INC;'sPathTK'\H\GL;'sPathTK'\H;'
     2130    call EnvAddEnd   fRM, 'include',        sPathTK'\H\LIBC;.;'
     2131    call EnvAddFront fRM, 'lib',            sPathTK'\SPEECH\LIB;'sPathTK'\SAMPLES\MM\LIB;'sPathTK'\LIB;'sPathTK'\SOM\LIB;'sPathTK'\OPENDOC\BASE\LIB;'
     2132    call EnvAddFront fRM, 'nlspath',        sPathTK'\OPENDOC\BASE\LOCALE\EN_US\%N;'sPathTK'\MSG\%N;C:\MPTN\MSG\NLS\%N;C:\TCPIP\msg\ENUS850\%N;'
     2133    call EnvAddFront fRM, 'locpath',        sPathTK'\OPENDOC\BASE\LOCALE;'
     2134    call EnvAddFront fRM, 'ipfc',           sPathTK'\IPFC;'
     2135    call EnvSet      fRM, 'odbase',         sPathTK'\OPENDOC\BASE'
     2136    call EnvSet      fRM, 'odlang',         'en_US'
     2137    call EnvAddFront fRM, 'odbasepaths',    sPathTK'\OPENDOC\BASE;'
     2138    call EnvSet      fRM, 'odcfg',          sPathTK'\OPENDOC\CUSTOM'
     2139    call EnvSet      fRM, 'odtmp',          EnvGet('tmp');
     2140    call EnvSet      fRM, 'sombase',        sPathTK'\SOM'
     2141    call EnvSet      fRM, 'somruntime',     sPathTK'\SOM\COMMON'
     2142
     2143    call EnvSet      fRM, 'cpref',          'CP1.INF+CP2.INF+CP3.INF'
     2144    call EnvSet      fRM, 'gpiref',         'GPI1.INF+GPI2.INF+GPI3.INF+GPI4.INF'
     2145    call EnvSet      fRM, 'mmref',          'MMREF1.INF+MMREF2.INF+MMREF3.INF'
     2146    call EnvSet      fRM, 'pmref',          'PM1.INF+PM2.INF+PM3.INF+PM4.INF+PM5.INF'
     2147    call EnvSet      fRM, 'wpsref',         'WPS1.INF+WPS2.INF+WPS3.INF'
     2148    call EnvAddFront fRM, 'sminclude',      sPathTK'\H;'sPathTK'\IDL;'sPathTK'\SOM\INCLUDE;.;'sPathTK'\OPENDOC\BASE\INCLUDE;'sPathTK'\SAMPLES\OPENDOC\PARTS\INCLUDE;'
     2149    call EnvSet      fRM, 'smaddstar',      '1'
     2150    call EnvSet      fRM, 'smemit',         'h;ih;c'
     2151    call EnvSet      fRM, 'smtmp',          EnvGet('tmp');
     2152    call EnvSet      fRM, 'smclasses',      'WPTYPES.IDL'
     2153    call EnvSet      fRM, 'odparts',        sPathTK'\SAMPLES\OPENDOC\PARTS'
     2154    call EnvSet      fRM, 'odsrc',          sPathTK'\SAMPLES\OPENDOC\PARTS'
     2155    call EnvAddFront fRM, 'odpartspaths',   sPathTK'\SAMPLES\OPENDOC\PARTS;'
     2156    call EnvAddFront fRM, 'odsrcpaths',     sPathTK'\SAMPLES\OPENDOC\PARTS;'
     2157    /*
     2158    call EnvSet      fRM, 'CAT_MACHINE=COM1:57600'
     2159    call EnvSet      fRM, 'CAT_HOST_BIN_PATH='sPathTK'\BIN'
     2160    call EnvSet      fRM, 'CAT_COMMUNICATION_TYPE=ASYNC_SIGBRK'
     2161    call EnvAddFront fRM, 'CAT_HOST_SOURCE_PATH='sPathTK'\BIN;'
     2162    */
     2163
     2164    /*
     2165     * Verify.
     2166     */
     2167    if (pos('verify', sOperation) <= 0) then
     2168        return 0;
     2169    if (    \CfgVerifyFile(sPathTK'\bin\alp.exe', fQuiet),
     2170        |   \CfgVerifyFile(sPathTK'\bin\rc.exe', fQuiet),
     2171        |   \CfgVerifyFile(sPathTK'\bin\ipfc.exe', fQuiet),
     2172        |   \CfgVerifyFile(sPathTK'\bin\implib.exe', fQuiet),
     2173        |   \CfgVerifyFile(sPathTK'\bin\mkmsgf.exe', fQuiet),
     2174        |   \CfgVerifyFile(sPathTK'\bin\mapsym.exe', fQuiet),
     2175        |   \CfgVerifyFile(sPathTK'\lib\os2386.lib', fQuiet),
     2176        |   \CfgVerifyFile(sPathTK'\lib\pmbidi.lib', fQuiet),
     2177        |   \CfgVerifyFile(sPathTK'\lib\tcpip32.lib', fQuiet),
     2178        |   \CfgVerifyFile(sPathTK'\h\os2.h', fQuiet),
     2179        |   \CfgVerifyFile(sPathTK'\h\os2win.h', fQuiet),
     2180        |   \CfgVerifyFile(sPathTK'\h\stack16\pmwsock.h', fQuiet),
     2181        |   \CfgVerifyFile(sPathTK'\som\bin\sc.exe', fQuiet),
     2182        ) then
     2183        return 2;
     2184    rc = CheckCmdOutput('syslevel '||sPathTK||'\bin', 0, fQuiet, 'IBM Developer''s Toolkit for OS/2 Warp Version 4'||'0d0a'x||'Version 4.00.');
     2185    if (rc = 0) then
     2186        rc = CheckCmdOutput('sc -V', -1, fQuiet, '", Version: 2.54.');
     2187    if (rc = 0) then
     2188        rc = CheckCmdOutput('rc', 0, fQuiet, 'IBM RC (Resource Compiler) Version 5.00.00');
     2189    if (rc = 0) then
     2190        rc = CheckCmdOutput('ipfc', 0, fQuiet, 'Version 4.00.00');
     2191
     2192return rc;
     2193
     2194
     2195
     2196/*
     2197 * OS/2 Programmers Toolkit v4.5
     2198 */
     2199Toolkit45: procedure expose aCfg. aPath. sPathFile
     2200    parse arg sToolId,sOperation,fRM,fQuiet
     2201
     2202    /*
     2203     * Toolkit (4.5) main directory.
     2204     */
     2205     sPathTK    = PathQuery('toolkit45', sToolId, sOperation);
     2206    if (sPathTK = '') then
     2207        return 1;
     2208    /* If config operation we're done now. */
     2209    if (pos('config', sOperation) > 0) then
     2210        return 0;
     2211
     2212    /*
     2213     * Installing the environment variables.
     2214     */
     2215    call EnvSet      fRM, 'PATH_TOOLKIT',  sPathTK;
     2216    call EnvAddFront fRM, 'path',        sPathTK'\bin;'
     2217    call EnvAddFront fRM, 'dpath',       sPathTK'\book;'
     2218    call EnvAddFront fRM, 'dpath',       sPathTK'\msg;'
     2219    call EnvAddFront fRM, 'beginlibpath', sPathTK'\dll;'
     2220    call EnvAddFront fRM, 'help',        sPathTK'\help;'
     2221    call EnvAddFront fRM, 'bookshelf',   sPathTK'\archived;'
     2222    call EnvAddFront fRM, 'bookshelf',   sPathTK'\book;'
     2223    call EnvAddFront fRM, 'nlspath',     sPathTK'\msg\%N;'
     2224    call EnvAddEnd   fRM, 'ulspath',     sPathTK'\language;'
     2225    call EnvAddFront fRM, 'include',     sPathTK'\H;'
     2226    call EnvAddFront fRM, 'include',     sPathTK'\H\GL;'
     2227    call EnvAddFront fRM, 'include',     sPathTK'\SPEECH\H;'
     2228    call EnvAddFront fRM, 'include',     sPathTK'\H\RPC;'
     2229    call EnvAddFront fRM, 'include',     sPathTK'\H\NETNB;'
     2230    call EnvAddFront fRM, 'include',     sPathTK'\H\NETINET;'
     2231    call EnvAddFront fRM, 'include',     sPathTK'\H\NET;'
     2232    call EnvAddFront fRM, 'include',     sPathTK'\H\ARPA;'
     2233    call EnvAddFront fRM, 'include',     sPathTK'\INC;'
     2234    call EnvAddEnd   fRM, 'lib',         sPathTK'\SAMPLES\MM\LIB;'
     2235    call EnvAddEnd   fRM, 'lib',         sPathTK'\SPEECH\LIB;'
     2236    call EnvAddFront fRM, 'lib',         sPathTK'\lib;'
     2237    call EnvAddFront fRM, 'helpndx',     'EPMKWHLP.NDX+', '+'
     2238    call EnvAddFront fRM, 'ipfc',        sPathTK'\ipfc;'
     2239    call EnvSet      fRM, 'LANG',        'en_us'
     2240    call EnvSet      fRM, 'CPREF',       'CP1.INF+CP2.INF+CP3.INF'
     2241    call EnvSet      fRM, 'GPIREF',      'GPI1.INF+GPI2.INF+GPI3.INF+GPI4.INF'
     2242    call EnvSet      fRM, 'MMREF',       'MMREF1.INF+MMREF2.INF+MMREF3.INF'
     2243    call EnvSet      fRM, 'PMREF',       'PM1.INF+PM2.INF+PM3.INF+PM4.INF+PM5.INF'
     2244    call EnvSet      fRM, 'WPSREF',      'WPS1.INF+WPS2.INF+WPS3.INF'
     2245    /*
     2246    call EnvSet      fRM, 'CAT_MACHINE', 'COM1:57600'
     2247    call EnvSet      fRM, 'CAT_HOST_BIN_PATH', TKMAIN'\BIN'
     2248    call EnvSet      fRM, 'CAT_COMMUNICATION_TYPE', 'ASYNC_SIGBRK'
     2249    call EnvSet      fRM, 'CAT_HOST_SOURCE_PATH',TKMAIN'\BIN;'
     2250    */
     2251
     2252    /*
     2253     * Verify.
     2254     */
     2255    if (pos('verify', sOperation) <= 0) then
     2256        return 0;
     2257    if (    \CfgVerifyFile(sPathTK'\bin\alp.exe', fQuiet),
     2258        |   \CfgVerifyFile(sPathTK'\bin\rc.exe', fQuiet),
     2259        |   \CfgVerifyFile(sPathTK'\bin\ipfc.exe', fQuiet),
     2260        |   \CfgVerifyFile(sPathTK'\bin\implib.exe', fQuiet),
     2261        |   \CfgVerifyFile(sPathTK'\bin\mkmsgf.exe', fQuiet),
     2262        |   \CfgVerifyFile(sPathTK'\bin\mapsym.exe', fQuiet),
     2263        |   \CfgVerifyFile(sPathTK'\lib\os2386.lib', fQuiet),
     2264        |   \CfgVerifyFile(sPathTK'\lib\pmbidi.lib', fQuiet),
     2265        |   \CfgVerifyFile(sPathTK'\lib\tcpip32.lib', fQuiet),
     2266        |   \CfgVerifyFile(sPathTK'\h\os2.h', fQuiet),
     2267        |   \CfgVerifyFile(sPathTK'\h\os2win.h', fQuiet),
     2268        |   \CfgVerifyFile(sPathTK'\h\stack16\pmwsock.h', fQuiet),
     2269        |    FileExists(sPathTK'\som\bin\sc.exe'),
     2270        ) then
     2271        return 2;
     2272    rc = CheckCmdOutput('syslevel '||sPathTK||'\bin', 0, fQuiet, 'IBM OS/2 Developer''s Toolkit Version 4.5'||'0d0a'x||'Version 4.50     Component ID 5639F9300');
     2273    if (rc = 0) then
     2274        rc = CheckCmdOutput('rc', 0, fQuiet, 'IBM RC (Resource Compiler) Version 5.00.004');
     2275    if (rc = 0) then
     2276        rc = CheckCmdOutput('ipfc', 0, fQuiet, 'Version 4.00.006 July 21 1998');
     2277return rc;
     2278
     2279
     2280/*
     2281 * OS/2 Programmers Toolkit v4.5.1
     2282 */
     2283Toolkit451: procedure expose aCfg. aPath. sPathFile
     2284    parse arg sToolId,sOperation,fRM,fQuiet
     2285
     2286    /*
     2287     * Toolkit (4.5.1) main directory.
     2288     */
     2289     sPathTK    = PathQuery('toolkit451', sToolId, sOperation);
     2290    if (sPathTK = '') then
     2291        return 1;
     2292    /* If config operation we're done now. */
     2293    if (pos('config', sOperation) > 0) then
     2294        return 0;
     2295
     2296    /*
     2297     * Installing the environment variables.
     2298     */
     2299    call EnvSet      fRM, 'PATH_TOOLKIT',  sPathTK;
     2300    call EnvAddFront fRM, 'path',        sPathTK'\bin;'sPathTK'\som\common;'sPathTK'\som\bin'
     2301    call EnvAddFront fRM, 'dpath',       sPathTK'\msg;'sPathTK'\book;'sPathTK'\SOM\COMMON\SYSTEM;'sPathTK'\SOM\MSG;'
     2302    call EnvAddFront fRM, 'beginlibpath', sPathTK'\dll;'sPathTK'\som\common\dll;'sPathTK'\som\lib;'
     2303    call EnvAddFront fRM, 'help',        sPathTK'\help;'
     2304    call EnvAddFront fRM, 'bookshelf',   sPathTK'\book;'sPathTK'\archived;'
     2305    call EnvAddFront fRM, 'somir',       sPathTK'\SOM\COMMON\ETC\214\SOM.IR;'
     2306    call EnvAddEnd   fRM, 'somir',       sPathTK'\SAMPLES\REXX\SOM\ANIMAL\ORXSMP.IR;'
     2307    call EnvAddFront fRM, 'nlspath',     sPathTK'\msg\%N;'
     2308    call EnvAddEnd   fRM, 'ulspath',     sPathTK'\language;'
     2309    call EnvAddFront fRM, 'include',     sPathTK'\H\ARPA;'sPathTK'\H\NET;'sPathTK'\H\NETINET;'sPathTK'\H\NETNB;'sPathTK'\H\RPC;'sPathTK'\SPEECH\H;'sPathTK'\H\GL;'sPathTK'\H;'sPathTK'\SOM\INCLUDE;'sPathTK'\INC;'
     2310    call EnvAddFront fRM, 'lib',         sPathTK'\lib;'
     2311    call EnvAddEnd   fRM, 'lib',         sPathTK'\SAMPLES\MM\LIB;'sPathTK'\SPEECH\LIB;'
     2312    call EnvAddFront fRM, 'helpndx',     'EPMKWHLP.NDX+', '+'
     2313    call EnvAddFront fRM, 'ipfc',        sPathTK'\ipfc;'
     2314    call EnvSet      fRM, 'sombase',     sPathTK'\SOM'
     2315    call EnvSet      fRM, 'somruntime',  sPathTK'\SOM\COMMON'
     2316    call EnvSet      fRM, 'LANG',        'en_us'
     2317
     2318    call EnvSet      fRM, 'CPREF',       'CP1.INF+CP2.INF+CP3.INF'
     2319    call EnvSet      fRM, 'GPIREF',      'GPI1.INF+GPI2.INF+GPI3.INF+GPI4.INF'
     2320    call EnvSet      fRM, 'MMREF',       'MMREF1.INF+MMREF2.INF+MMREF3.INF'
     2321    call EnvSet      fRM, 'PMREF',       'PM1.INF+PM2.INF+PM3.INF+PM4.INF+PM5.INF'
     2322    call EnvSet      fRM, 'WPSREF',      'WPS1.INF+WPS2.INF+WPS3.INF'
     2323    call EnvAddFront fRM, 'sminclude',   sPathTK'\H;'sPathTK'\IDL;'sPathTK'\SOM\INCLUDE;.;'
     2324    call EnvSet      fRM, 'smaddstar',   '1'
     2325    call EnvSet      fRM, 'smemit',      'h;ih;c'
     2326    call EnvSet      fRM, 'smtmp',       EnvGet('tmp');
     2327    call EnvSet      fRM, 'smclasses',   'WPTYPES.IDL'
     2328    /*
     2329    call EnvSet      fRM, 'CAT_MACHINE', 'COM1:57600'
     2330    call EnvSet      fRM, 'CAT_HOST_BIN_PATH', TKMAIN'\BIN'
     2331    call EnvSet      fRM, 'CAT_COMMUNICATION_TYPE', 'ASYNC_SIGBRK'
     2332    call EnvSet      fRM, 'CAT_HOST_SOURCE_PATH',TKMAIN'\BIN;'
     2333    */
     2334
     2335    /*
     2336     * Verify.
     2337     */
     2338    if (pos('verify', sOperation) <= 0) then
     2339        return 0;
     2340    if (    \CfgVerifyFile(sPathTK'\bin\alp.exe', fQuiet),
     2341        |   \CfgVerifyFile(sPathTK'\bin\rc.exe', fQuiet),
     2342        |   \CfgVerifyFile(sPathTK'\bin\ipfc.exe', fQuiet),
     2343        |   \CfgVerifyFile(sPathTK'\bin\implib.exe', fQuiet),
     2344        |   \CfgVerifyFile(sPathTK'\bin\mkmsgf.exe', fQuiet),
     2345        |   \CfgVerifyFile(sPathTK'\bin\mapsym.exe', fQuiet),
     2346        |   \CfgVerifyFile(sPathTK'\bin\nmake.exe', fQuiet),
     2347        |   \CfgVerifyFile(sPathTK'\bin\nmake32.exe', fQuiet),
     2348        |   \CfgVerifyFile(sPathTK'\lib\os2386.lib', fQuiet),
     2349        |   \CfgVerifyFile(sPathTK'\lib\pmbidi.lib', fQuiet),
     2350        |   \CfgVerifyFile(sPathTK'\lib\tcpip32.lib', fQuiet),
     2351        |   \CfgVerifyFile(sPathTK'\h\os2.h', fQuiet),
     2352        |   \CfgVerifyFile(sPathTK'\h\os2win.h', fQuiet),
     2353        |   \CfgVerifyFile(sPathTK'\h\stack16\pmwsock.h', fQuiet),
     2354        |   \CfgVerifyFile(sPathTK'\som\bin\sc.exe', fQuiet),
     2355        ) then
     2356        return 2;
     2357    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');
     2358    if (rc = 0) then
     2359        rc = CheckCmdOutput('sc -V', -1, fQuiet, '", Version: 2.54.');
     2360    if (rc = 0) then
     2361        rc = CheckCmdOutput('rc', 0, fQuiet, 'IBM RC (Resource Compiler) Version 5.00.006 Oct 20 2000');
     2362    if (rc = 0) then
     2363        rc = CheckCmdOutput('ipfc', 0, fQuiet, 'Version 4.00.007 Oct 02 2000');
     2364    if (rc = 0) then
     2365        rc = CheckCmdOutput('nmake', 2, fQuiet, 'Version 4.00.000 Oct 20 2000');
     2366    if (rc = 0) then
     2367        rc = CheckCmdOutput('nmake32', 0, fQuiet, 'Version 5.00.003 Oct 20 2000');
     2368return rc;
     2369
     2370
     2371
     2372/**
     2373 * This will envolve into an full UNIX like environment some day perhaps...
     2374 */
     2375Unix: procedure expose aCfg. aPath. sPathFile
     2376    parse arg sToolId,sOperation,fRM,fQuiet
     2377
     2378    /*
     2379     * Unix root directory and XFree86 main directory.
     2380     */
     2381    sUnixBack = PathQuery('unixroot', sToolId, sOperation);
     2382    if (sUnixBack = '') then
     2383        return 1;
     2384    sXF86Back = PathQuery('xfree86', sToolId, sOperation);
     2385    if (sXF86Back = '') then
     2386        return 1;
     2387    /* If config operation we're done now. */
     2388    if (pos('config', sOperation) > 0) then
     2389        return 0;
     2390
     2391    /*
     2392     * Installing the environment variables.
     2393     */
     2394    sUnixForw = translate(sUnixBack, '/', '\');
     2395    call EnvSet      fRM, 'PATH_UNIX',          sUnixBack
     2396    call EnvSet      fRM, 'unixroot',           sUnixBack
     2397    call EnvAddFront fRM, 'path',               sUnixBack'\bin;'sUnixBack'\usr\local\bin;'
     2398    call EnvAddFront fRM, 'beginlibpath',       sUnixBack'\dll;'
     2399    call EnvSet      fRM, 'groff_font_path',    sUnixForw'/lib/groff/font'
     2400    call EnvSet      fRM, 'groff_tmac_path',    sUnixForw'/lib/groff/tmac'
     2401    call EnvSet      fRM, 'refer',              sUnixForw'/lib/groff/dict/papers/ind'
     2402
     2403    call EnvSet      fRM, 'editor',             'e:/verkty/boxer/b2.exe -Vr25'
     2404
     2405    sXF86Forw = translate(sXF86Back, '/', '\');
     2406    call EnvSet      fRM, 'PATH_XFREE86',       sXF86Back
     2407    call EnvAddFront fRM, 'C_INCLUDE_PATH',     sXF86Forw'/include'
     2408    call EnvAddFront fRM, 'CPLUS_INCLUDE_PATH', sXF86Forw'/include'
     2409    call EnvSet      fRM, 'OBJC_INCLUDE_PATH',  sXF86Forw'/include'
     2410    call EnvAddFront fRM, 'LIBRARY_PATH',       sXF86Forw'/lib'
     2411
     2412    /*
     2413     * Verify.
     2414     */
     2415    if (pos('verify', sOperation) <= 0) then
     2416        return 0;
     2417    if (    \CfgVerifyFile(sUnixBack'\bin\bash.exe', fQuiet),
     2418        |   \CfgVerifyFile(sUnixBack'\bin\sh.exe', fQuiet),
     2419        |   \CfgVerifyFile(sUnixBack'\bin\yes.exe', fQuiet),
     2420        |   \CfgVerifyFile(sUnixBack'\bin\rm.exe', fQuiet),
     2421        |   \CfgVerifyFile(sUnixBack'\bin\cp.exe', fQuiet),
     2422        |   \CfgVerifyFile(sUnixBack'\bin\mv.exe', fQuiet),
     2423        |   \CfgVerifyFile(sXF86Back'\bin\xf86config.exe', fQuiet),
     2424        ) then
     2425        return 2;
     2426return 0;
     2427
     2428
     2429
     2430/*
     2431 * IBM Visual Age for C++ v3.08 for OS/2
     2432 */
     2433VAC308: procedure expose aCfg. aPath. sPathFile
     2434    parse arg sToolId,sOperation,fRM,fQuiet
     2435
     2436    /*
     2437     * IBM Visual Age for C++ Version 3.08 main directory.
     2438     */
     2439    sPathCPP = PathQuery('vac308', sToolId, sOperation);
     2440    if (sPathCPP = '') then
     2441        return 1;
     2442    /* If config operation we're done now. */
     2443    if (pos('config', sOperation) > 0) then
     2444        return 0;
     2445
     2446    /*
     2447     * Installing the environment variables.
     2448     */
     2449    call EnvSet      fRM, 'PATH_VAC308',    sPathCPP
     2450    call EnvSet      fRM, 'CCENV',      'VAC3'
     2451    call EnvSet      fRM, 'BUILD_ENV',  'VAC308'
     2452    call EnvSet      fRM, 'BUILD_PLATFORM', 'OS2'
     2453
     2454    call EnvAddFront fRM, 'beginlibpath',   sPathCPP'\DLL;'sPathCPP'\SAMPLES\TOOLKIT\DLL;'
     2455    call EnvAddFront fRM, 'path',           sPathCPP'\BIN;'sPathCPP'\SMARTS\SCRIPTS;'sPathCPP'\HELP;'
     2456    call EnvAddFront fRM, 'dpath',          sPathCPP'\HELP;'sPathCPP';'sPathCPP'\LOCALE;'sPathCPP'\MACROS;'sPathCPP'\BND;'
     2457    call EnvAddFront fRM, 'help',           sPathCPP'\HELP;'sPathCPP'\SAMPLES\TOOLKIT\HELP;'
     2458    call EnvAddFront fRM, 'bookshelf',      sPathCPP'\HELP;'
     2459    call EnvAddFront fRM, 'somir',          sPathCPP'\ETC\SOM.IR;'
     2460    call EnvAddFront fRM, 'cpphelp_ini',    'C:\OS2\SYSTEM'
     2461    call EnvAddFront fRM, 'locpath',        sPathCPP'\LOCALE;%LOCPATH%;'
     2462    call EnvAddFront fRM, 'include',        sPathCPP'\INCLUDE;'sPathCPP'\INCLUDE\OS2;'sPathCPP'\INC;'sPathCPP'\INCLUDE\SOM;'
     2463    call EnvAddFront fRM, 'sminclude',      sPathCPP'\INCLUDE\OS2;'sPathCPP'\INCLUDE;'sPathCPP'\INCLUDE\SOM;'
     2464
     2465    call EnvAddFront fRM, 'vbpath',         '.;'sPathCPP'\DDE4VB;'
     2466    call EnvSet      fRM, 'tmpdir',         EnvGet('tmp')
     2467    call EnvSet      fRM, 'lxevfref',       'EVFELREF.INF+LPXCREF.INF'
     2468    call EnvSet      fRM, 'lxevfhdi',       'EVFELHDI.INF+LPEXHDI.INF'
     2469    call EnvAddFront fRM, 'lpath',          sPathCPP'\MACROS;'
     2470    call EnvAddFront fRM, 'codelpath',      sPathCPP'\CODE\MACROS;'sPathCPP'\MACROS;'
     2471    call EnvSet      fRM, 'clref',          'CPPCLRF.INF+CPPDAT.INF+CPPAPP.INF+CPPWIN.INF+CPPCTL.INF+CPPADV.INF+CPP2DG.INF+CPPDDE.INF+CPPDM.INF+CPPMM.INF+CPPCLRB.INF'
     2472    call EnvAddFront fRM, 'ipfc',           sPathCPP'\IPFC'
     2473    call EnvAddFront fRM, 'lib',            sPathCPP'\LIB;'sPathCPP'\DLL;'
     2474    call EnvSet      fRM, 'cpplocal',       sPathCPP
     2475    call EnvSet      fRM, 'cppmain',        sPathCPP
     2476    call EnvSet      fRM, 'cppwork',        sPathCPP
     2477    call EnvSet      fRM, 'iwf.default_prj','CPPDFTPRJ'
     2478
     2479    call EnvSet      fRM, 'iwf.solution_lang_support', 'CPPIBS30;ENG'
     2480    call EnvSet      fRM, 'vacpp_shared'    'FALSE'
     2481    call EnvSet      fRM, 'iwfhelp',        'IWFHDI.INF'
     2482    call EnvSet      fRM, 'iwfopt',         sPathCPP
     2483
     2484    call EnvSet      fRM, 'somruntime',     sPathCPP'\DLL'
     2485    call EnvSet      fRM, 'smaddstar',      '1'
     2486    call EnvSet      fRM, 'smemit',         'h;ih;c'
     2487    call EnvSet      fRM, 'sombase',        sPathCPP
     2488    call EnvSet      fRM, 'smtmp',          EnvGet('tmp')
     2489    call EnvSet      fRM, 'smclasses',      'WPTYPES.IDL'
     2490
     2491    call EnvAddFront fRM, 'helpndx',        'EPMKWHLP.NDX+CPP.NDX+CPPBRS.NDX', '+'
     2492    call EnvAddFront fRM, 'ipf_keys',       'SHOWNAV'
     2493
     2494    /*
     2495     * Verify.
     2496     */
     2497    if (pos('verify', sOperation) <= 0) then
     2498        return 0;
     2499    if (    \CfgVerifyFile(sPathCPP'\bin\icc.exe', fQuiet),
     2500        |   \CfgVerifyFile(sPathCPP'\bin\ilib.exe', fQuiet),
     2501        |   \CfgVerifyFile(sPathCPP'\bin\ilink.exe', fQuiet),
     2502        |   \CfgVerifyFile(sPathCPP'\bin\icsperf.exe', fQuiet),
     2503        |   \CfgVerifyFile(sPathCPP'\bin\icsdebug.exe', fQuiet),
     2504        |   \CfgVerifyFile(sPathCPP'\bin\cppfilt.exe', fQuiet),
     2505        |   \CfgVerifyFile(sPathCPP'\bin\dllrname.exe', fQuiet),
     2506        |   \CfgVerifyFile(sPathCPP'\lib\demangl.lib', fQuiet),
     2507        |   \CfgVerifyFile(sPathCPP'\lib\cppom30.lib', fQuiet),
     2508        |   \CfgVerifyFile(sPathCPP'\lib\cppom30i.lib', fQuiet),
     2509        |   \CfgVerifyFile(sPathCPP'\lib\cppom30o.lib', fQuiet),
     2510        |   \CfgVerifyFile(sPathCPP'\lib\cppon30i.lib', fQuiet),
     2511        |   \CfgVerifyFile(sPathCPP'\lib\cppon30o.lib', fQuiet),
     2512        |   \CfgVerifyFile(sPathCPP'\lib\_doscall.lib', fQuiet),
     2513        |   \CfgVerifyFile(sPathCPP'\lib\_pmwin.lib', fQuiet),
     2514        |   \CfgVerifyFile(sPathCPP'\include\builtin.h', fQuiet),
     2515        |   \CfgVerifyFile(sPathCPP'\include\conio.h', fQuiet),
     2516        |   \CfgVerifyFile(sPathCPP'\include\ismkss.h', fQuiet),
     2517        |    FileExists(sPathCPP'\include\os2.h'),
     2518        |    FileExists(sPathCPP'\include\os2win.h'),
     2519        |    FileExists(sPathCPP'\include\pm.h'),
     2520        |   \CfgVerifyFile(sPathCPP'\include\sys\utime.h', fQuiet),
     2521        |   \CfgVerifyFile(sPathCPP'\help\cpplib.inf', fQuiet),
     2522        ) then
     2523        return 2;
     2524    rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, fQuiet, 'Version 3.00     Component ID 562201703'||'0d0a'x||'Current CSD level: CTC308');
     2525    if (rc = 0) then
     2526        rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, fQuiet, 'Version 3.00     Component ID 562201704'||'0d0a'x||'Current CSD level: CTU308');
     2527    /*if (rc = 0) then
     2528        rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, fQuiet, 'Version 3.00     Component ID 562201707'||'0d0a'x||'Current CSD level: CTV308');
     2529    if (rc = 0) then
     2530        rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, fQuiet, 'Version 3.00     Component ID 562201708'||'0d0a'x||'Current CSD level: CTD308');*/
     2531    if (rc = 0) then
     2532        rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, fQuiet, 'Version 3.00     Component ID 562201605'||'0d0a'x||'Current CSD level: CTC308');
     2533    /*if (rc = 0) then
     2534        rc = CheckCmdOutput('syslevel '||sPathCPP||'\syslevel', 0, fQuiet, 'Version 3.00     Component ID 562201602'||'0d0a'x||'Current CSD level: CTO308');*/
     2535    if (rc = 0) then
     2536        rc = CheckCmdOutput('icc', 0, fQuiet, 'IBM VisualAge C++ for OS/2, Version 3');
     2537    if (rc = 0) then
     2538        rc = CheckCmdOutput('ilink', 16, fQuiet, 'IBM(R) Linker for OS/2(R), Version 01.08.r1a_CTC308c');
     2539    if (rc = 0) then
     2540        rc = CheckCmdOutput('ilib /?', 8, fQuiet, 'IBM(R) Library Manager for OS/2(R), Version 01.00.03 cc_CTC308c');
     2541return rc;
     2542
     2543
     2544
     2545/*
     2546 * Visual Age / C and C++ tools v3.6.5 for OS/2
     2547 */
     2548VAC365: procedure expose aCfg. aPath. sPathFile
     2549    parse arg sToolId,sOperation,fRM,fQuiet
     2550
     2551    /*
     2552     * IBM C/C++ Compiler and Tools Version 3.6.5 main directory.
     2553     */
     2554    sPathCxx    = PathQuery('vac365', sToolId, sOperation);
     2555    if (sPathCxx = '') then
     2556        return 1;
     2557    /* If config operation we're done now. */
     2558    if (pos('config', sOperation) > 0) then
     2559        return 0;
     2560
     2561    /*
     2562     * Installing the environment variables.
     2563     */
     2564    call EnvSet      fRM, 'PATH_VAC365', sPathCxx;
     2565    call EnvSet      fRM, 'CCENV',      'VAC36'
     2566    call EnvSet      fRM, 'BUILD_ENV',  'VAC365'
     2567    call EnvSet      fRM, 'BUILD_PLATFORM', 'OS2'
     2568
     2569    call EnvSet      fRM, 'cxxmain',     sPathCxx;
     2570    call EnvAddFront fRM, 'path',        sPathCxx'\bin;'
     2571    call EnvAddFront fRM, 'dpath',       sPathCxx'\local;'sPathCxx'\help;'
     2572    call EnvAddFront fRM, 'beginlibpath',sPathCxx'\dll;'sPathCxx'\runtime;'
     2573    call EnvAddFront fRM, 'nlspath',     sPathCxx'\msg\%N;'
     2574    call EnvAddFront fRM, 'include',     sPathCxx'\include;'
     2575    call EnvAddFront fRM, 'lib',         sPathCxx'\lib;'
     2576    call EnvAddFront fRM, 'ipfc',        sPathCxx'\ipfc;'
     2577    call EnvSet      fRM, 'LANG',        'en_us'
     2578    call EnvSet      fRM, 'CPP_DBG_LANG', 'CPP'
     2579
     2580    /*
     2581     * Verify.
     2582     */
     2583    if (pos('verify', sOperation) <= 0) then
     2584        return 0;
     2585    if (    \CfgVerifyFile(sPathCxx'\bin\icc.exe', fQuiet),
     2586        |   \CfgVerifyFile(sPathCxx'\bin\ilib.exe', fQuiet),
     2587        |   \CfgVerifyFile(sPathCxx'\bin\ilink.exe', fQuiet),
     2588        |   \CfgVerifyFile(sPathCxx'\bin\idebug.exe', fQuiet),
     2589        |   \CfgVerifyFile(sPathCxx'\bin\cppfilt.exe', fQuiet),
     2590        |   \CfgVerifyFile(sPathCxx'\bin\dllrname.exe', fQuiet),
     2591        |   \CfgVerifyFile(sPathCxx'\bin\cppcbe36.exe', fQuiet),
     2592        |   \CfgVerifyFile(sPathCxx'\lib\cpprms36.lib', fQuiet),
     2593        |   \CfgVerifyFile(sPathCxx'\lib\cpprmi36.lib', fQuiet),
     2594        |   \CfgVerifyFile(sPathCxx'\lib\cpprmo36.lib', fQuiet),
     2595        |   \CfgVerifyFile(sPathCxx'\lib\cpprni36.lib', fQuiet),
     2596        |   \CfgVerifyFile(sPathCxx'\lib\cpprds36.lib', fQuiet),
     2597        |   \CfgVerifyFile(sPathCxx'\include\builtin.h', fQuiet),
     2598        |   \CfgVerifyFile(sPathCxx'\include\conio.h', fQuiet),
     2599        |   \CfgVerifyFile(sPathCxx'\include\ismavl.h', fQuiet),
     2600        |    FileExists(sPathCxx'\include\os2.h'),
     2601        |    FileExists(sPathCxx'\include\os2win.h'),
     2602        |    FileExists(sPathCxx'\include\pm.h'),
     2603        |   \CfgVerifyFile(sPathCxx'\include\sys\utime.h', fQuiet),
     2604        |   \CfgVerifyFile(sPathCxx'\help\cpplbm36.msg', fQuiet),
     2605        ) then
     2606        return 2;
     2607    rc = CheckCmdOutput('icc', 0, fQuiet, 'IBM* C and C++ Compilers for OS/2*, AIX* and for Windows NT**, Version 3.6');
     2608    if (rc = 0) then
     2609        rc = CheckCmdOutput('ilink', 16, fQuiet, 'IBM(R) Linker for OS/2(R), Version 03.06.PPK1990125');
     2610    if (rc = 0) then
     2611        rc = CheckCmdOutput('ilib /?', 0, fQuiet, 'IBM Librarian for OS/2(R) Version 03.99.PPK1990310');
     2612    if (stream(sPathCxx'\bin\cppcbe36.exe', 'c', 'query size') <> 603122) then
     2613    do
     2614        say 'Error!!! Get latest vac365 optimizer fixes from the OS2 Mozilla project.';
     2615        say '         http://www.mozilla.org/ports/os2/setup.html';
     2616        rc = 99;
     2617    end
     2618return rc;
     2619
     2620
     2621/*
     2622 * Visual Age for C++ v4.0 for OS/2
     2623 */
     2624VAC40: procedure expose aCfg. aPath. sPathFile
     2625    parse arg sToolId,sOperation,fRM,fQuiet
     2626
     2627    /*
     2628     * IBM VisualAge for C++ v4.0 main directory.
     2629     */
     2630    sPathCPP    = PathQuery('vac40', sToolId, sOperation);
     2631    if (sPathCPP = '') then
     2632        return 1;
     2633    /* If config operation we're done now. */
     2634    if (pos('config', sOperation) > 0) then
     2635        return 0;
     2636
     2637    /*
     2638     * Installing the environment variables.
     2639     */
     2640    call EnvSet      fRM, 'PATH_VAC40',  sPathCPP;
     2641    call EnvSet      fRM, 'CCENV',      'VAC40'
     2642    call EnvSet      fRM, 'BUILD_ENV',  'VAC40'
     2643    call EnvSet      fRM, 'BUILD_PLATFORM', 'OS2'
     2644
     2645    call EnvAddFront fRM, 'path',        sPathCPP'\bin;'
     2646    call EnvAddFront fRM, 'dpath',       sPathCPP'\etc;'sPathCPP'\help;'
     2647    call EnvAddFront fRM, 'beginlibpath',sPathCPP'\dll;'sPathCPP'\runtime;'
     2648    call EnvAddFront fRM, 'help',        sPathCPP'\help;'
     2649    call EnvAddFront fRM, 'nlspath',     sPathCPP'\msg\%N;'
     2650    call EnvAddFront fRM, 'locpath',     sPathCPP'\locale;'sPathCPP'\runtime\locale;'
     2651    call EnvAddFront fRM, 'include',     sPathCPP'\ivb;'sPathCPP'\include;'
     2652    call EnvAddFront fRM, 'lib',         sPathCPP'\lib;'
     2653    call EnvAddFront fRM, 'ipfc',        sPathCPP'\bin;'
     2654    call EnvAddFront fRM, 'cpplpath4',   sPathCPP'\macros;'
     2655    call EnvSet      fRM, 'system_ice',  sPathCPP'\etc\system.ice'
     2656    call EnvSet      fRM, 'vbpath',      sPathCPP'\ivb'
     2657    call EnvSet      fRM, 'vacppmain',   sPathCPP;
     2658    call EnvSet      fRM, 'os2',         '1'
     2659
     2660    /*
     2661     * Verify.
     2662     */
     2663    if (pos('verify', sOperation) <= 0) then
     2664        return 0;
     2665    if (    \CfgVerifyFile(sPathCPP'\bin\iccv4.exe', fQuiet),
     2666        |   \CfgVerifyFile(sPathCPP'\bin\ilib.exe', fQuiet),
     2667        |   \CfgVerifyFile(sPathCPP'\bin\ire.exe', fQuiet),
     2668        |   \CfgVerifyFile(sPathCPP'\bin\vacide.exe', fQuiet),
     2669        |   \CfgVerifyFile(sPathCPP'\bin\cppfilt.exe', fQuiet),
     2670        |   \CfgVerifyFile(sPathCPP'\bin\dllrname.exe', fQuiet),
     2671        |   \CfgVerifyFile(sPathCPP'\bin\patrace.exe', fQuiet),
     2672        |   \CfgVerifyFile(sPathCPP'\lib\cpprms40.lib', fQuiet),
     2673        |   \CfgVerifyFile(sPathCPP'\lib\cpprmi40.lib', fQuiet),
     2674        |   \CfgVerifyFile(sPathCPP'\lib\cpprmo40.lib', fQuiet),
     2675        |   \CfgVerifyFile(sPathCPP'\lib\cpprni40.lib', fQuiet),
     2676        |   \CfgVerifyFile(sPathCPP'\lib\cpprds40.lib', fQuiet),
     2677        |   \CfgVerifyFile(sPathCPP'\include\builtin.h', fQuiet),
     2678        |   \CfgVerifyFile(sPathCPP'\include\conio.h', fQuiet),
     2679        |   \CfgVerifyFile(sPathCPP'\include\ismavl.h', fQuiet),
     2680        |    FileExists(sPathCPP'\include\os2.h'),
     2681        |    FileExists(sPathCPP'\include\os2win.h'),
     2682        |    FileExists(sPathCPP'\include\pm.h'),
     2683        |   \CfgVerifyFile(sPathCPP'\include\sys\utime.h', fQuiet),
     2684        |   \CfgVerifyFile(sPathCPP'\help\cpplbm40.msg', fQuiet),
     2685        ) then
     2686        return 2;
     2687    rc = CheckCmdOutput('iccv4', 0, fQuiet, 'IBM VisualAge for C++ Version 4.0 C Compiler');
     2688    if (rc = 0) then
     2689        rc = CheckCmdOutput('ilib /?', 0, fQuiet, 'IBM Librarian for OS/2(R) Version 03.99.cc_981110'); /* is this really FP2?????? */
     2690    if (rc = 0) then
     2691        rc = CheckCmdOutput('vacbld -?', 0, fQuiet, 'IBM(R) VisualAge(R) C++ Professional, Version 4.0 (981117)'); /* is this really FP2?????? */
     2692return rc;
     2693
     2694
     2695
     2696
     2697/*
     2698 * WarpIn
     2699 */
     2700WarpIn: procedure expose aCfg. aPath. sPathFile
     2701    parse arg sToolId,sOperation,fRM,fQuiet
     2702
     2703    /*
     2704     * WarpIn main directory.
     2705     */
     2706    sPathWarpIn = PathQuery('warpin', sToolId, sOperation);
     2707    if (sPathWarpIn = '') then
     2708        return 1;
     2709    /* If config operation we're done now. */
     2710    if (pos('config', sOperation) > 0) then
     2711        return 0;
     2712
     2713    /*
     2714     * Installing the environment variables.
     2715     */
     2716    call EnvSet      fRM, 'PATH_WARPIN', sPathWarpIn;
     2717    call EnvAddFront fRM, 'path',        sPathWarpIn';'
     2718    call EnvAddFront fRM, 'beginlibpath',sPathWarpIn';'
     2719    call EnvAddFront fRM, 'bookshelf',   sPathWarpIn';'
     2720
     2721    /*
     2722     * Verify.
     2723     */
     2724    if (pos('verify', sOperation) <= 0) then
     2725        return 0;
     2726    if (    \CfgVerifyFile(sPathWarpIn'\wic.exe', fQuiet),
     2727        |   \CfgVerifyFile(sPathWarpIn'\wpirtl.dll', fQuiet),
     2728        |   \CfgVerifyFile(sPathWarpIn'\warpin.exe', fQuiet),
     2729        ) then
     2730        return 2;
     2731    rc = CheckCmdOutput('wic', 1, fQuiet, '2002 - WarpIn archive creation and maintenance');
     2732return rc;
     2733
     2734
     2735
     2736/*
     2737 * WatCom C/C++ v11.0
     2738 */
     2739WatComC11: procedure expose aCfg. aPath. sPathFile
     2740    parse arg sToolId,sOperation,fRM,fQuiet, iBits
     2741
     2742    /*
     2743     * Watcom C/C++ v11.0 main directory
     2744     */
     2745    sPathWatcom = PathQuery('watcom11', sToolId, sOperation);
     2746    if (sPathWatcom = '') then
     2747        return 1;
     2748    /* If config operation we're done now. */
     2749    if (pos('config', sOperation) > 0) then
     2750        return 0;
     2751
     2752    /*
     2753     * Installing the environment variables.
     2754     */
     2755    call EnvSet      fRM, 'PATH_WATCOM', sPathWatcom
     2756    call EnvSet      fRM, 'CCENV',      'WAT'
     2757    call EnvSet      fRM, 'BUILD_ENV',  'WAT11'
     2758    if (iBits == 16) then
     2759        call EnvSet      fRM, 'BUILD_ENV',  'WAT11-16'
     2760    call EnvSet      fRM, 'BUILD_PLATFORM', 'OS2'
     2761
     2762    call EnvSet      fRM, 'watcom',      sPathWatcom
     2763    call EnvAddFront fRM, 'path',        sPathWatcom'\binp;'sPathWatcom'\binw;'
     2764    call EnvAddFront fRM, 'beginlibpath',sPathWatcom'\binp\dll;'
     2765    call EnvAddFront fRM, 'help',        sPathWatcom'\binp\help;'
     2766    call EnvAddEnd   fRM, 'bookshelf',   sPathWatcom'\binp\help;'
     2767    call EnvAddFront fRM, 'include',     sPathWatcom'\h;'sPathWatcom'\h\os2;'sPathWatcom'\h\nt;'
     2768    call EnvAddFront fRM, 'lib',         sPathWatcom'\lib386;'sPathWatcom'\lib386\os2;'sPathWatcom'\lib286;'sPathWatcom'\lib286\os2;'
     2769    call EnvSet      fRM, 'edpath',      sPathWatcom'EDDAT;'
     2770    /*
     2771    rem detach %watcom%\BINP\BATSERV.EXE
     2772    rem detach %watcom%\BINP\NMPBIND.EXE
     2773    */
     2774
     2775    /*
     2776     * Verify.
     2777     */
     2778    if (pos('verify', sOperation) <= 0) then
     2779        return 0;
     2780    if (    \CfgVerifyFile(sPathWatcom'\binp\wpp.exe', fQuiet),
     2781        |   \CfgVerifyFile(sPathWatcom'\binp\wcc.exe', fQuiet),
     2782        |   \CfgVerifyFile(sPathWatcom'\binp\wcc386.exe', fQuiet),
     2783        |   \CfgVerifyFile(sPathWatcom'\binp\wpp386.exe', fQuiet),
     2784        |   \CfgVerifyFile(sPathWatcom'\binp\wlink.exe', fQuiet),
     2785        |   \CfgVerifyFile(sPathWatcom'\lib286\os2\os2.lib', fQuiet),
     2786        |   \CfgVerifyFile(sPathWatcom'\lib386\os2\clbrdll.lib', fQuiet),
     2787        |   \CfgVerifyFile(sPathWatcom'\lib386\os2\clib3r.lib', fQuiet),
     2788        |   \CfgVerifyFile(sPathWatcom'\lib386\nt\kernel32.lib', fQuiet),
     2789        |   \CfgVerifyFile(sPathWatcom'\lib386\nt\clbrdll.lib', fQuiet),
     2790        |   \CfgVerifyFile(sPathWatcom'\lib386\nt\clib3r.lib', fQuiet),
     2791        ) then
     2792        return 2;
     2793    rc = CheckCmdOutput('wcc', 8, fQuiet, 'Watcom C16 Optimizing Compiler  Version 11.0 '||'0d0a'x);
     2794    if (rc = 0) then
     2795        rc = CheckCmdOutput('wpp', 8, fQuiet, 'Watcom C++16 Optimizing Compiler  Version 11.0 '||'0d0a'x);
     2796    if (rc = 0) then
     2797        rc = CheckCmdOutput('wcc386', 8, fQuiet, 'Watcom C32 Optimizing Compiler  Version 11.0 '||'0d0a'x);
     2798    if (rc = 0) then
     2799        rc = CheckCmdOutput('wpp386', 8, fQuiet, 'Watcom C++32 Optimizing Compiler  Version 11.0 '||'0d0a'x);
     2800    if (rc = 0) then
     2801        rc = CheckCmdOutput('wlink form ELF', 1, fQuiet, 'WATCOM Linker Version 11.0'||'0d0a'x);
     2802return rc;
     2803
     2804
     2805/*
     2806 * WatCom C/C++ v11.0c
     2807 */
     2808WatComC11c: procedure expose aCfg. aPath. sPathFile
     2809    parse arg sToolId,sOperation,fRM,fQuiet, iBits
     2810
     2811    /*
     2812     * Watcom C/C++ v11.0c main directory
     2813     */
     2814    sPathWatcom = PathQuery('watcom11c', sToolId, sOperation);
     2815    if (sPathWatcom = '') then
     2816        return 1;
     2817    /* If config operation we're done now. */
     2818    if (pos('config', sOperation) > 0) then
     2819        return 0;
     2820
     2821    /*
     2822     * Installing the environment variables.
     2823     */
     2824    call EnvSet      fRM, 'PATH_WATCOM', sPathWatcom
     2825    call EnvSet      fRM, 'CCENV',      'WAT'
     2826    call EnvSet      fRM, 'BUILD_ENV',  'WAT11C'
     2827    if (iBits = 16) then
     2828        call EnvSet      fRM, 'BUILD_ENV',  'WAT11C-16'
     2829    call EnvSet      fRM, 'BUILD_PLATFORM', 'OS2'
     2830
     2831    call EnvSet      fRM, 'watcom',      sPathWatcom
     2832    call EnvAddFront fRM, 'path',        sPathWatcom'\binp;'sPathWatcom'\binw;'
     2833    call EnvAddFront fRM, 'beginlibpath',sPathWatcom'\binp\dll;'
     2834    call EnvAddFront fRM, 'help',        sPathWatcom'\binp\help;'
     2835    call EnvAddEnd   fRM, 'bookshelf',   sPathWatcom'\binp\help;'
     2836    if (iBits = 16) then
     2837        call EnvAddFront fRM, 'include',     sPathWatcom'\h;'sPathWatcom'\h\os21x;'
     2838    else
     2839        call EnvAddFront fRM, 'include',     sPathWatcom'\h;'sPathWatcom'\h\os2;'sPathWatcom'\h\nt;'
     2840    call EnvAddFront fRM, 'lib',         sPathWatcom'\lib386;'sPathWatcom'\lib386\os2;'sPathWatcom'\lib286;'sPathWatcom'\lib286\os2;'
     2841    call EnvSet      fRM, 'edpath',      sPathWatcom'EDDAT;'
     2842    /*
     2843    rem detach %watcom%\BINP\BATSERV.EXE
     2844    rem detach %watcom%\BINP\NMPBIND.EXE
     2845    */
     2846
     2847    /*
     2848     * Verify.
     2849     */
     2850    if (pos('verify', sOperation) <= 0) then
     2851        return 0;
     2852    if (    \CfgVerifyFile(sPathWatcom'\binp\wpp.exe', fQuiet),
     2853        |   \CfgVerifyFile(sPathWatcom'\binp\wcc.exe', fQuiet),
     2854        |   \CfgVerifyFile(sPathWatcom'\binp\wcc386.exe', fQuiet),
     2855        |   \CfgVerifyFile(sPathWatcom'\binp\wpp386.exe', fQuiet),
     2856        |   \CfgVerifyFile(sPathWatcom'\binp\wlink.exe', fQuiet),
     2857        |   \CfgVerifyFile(sPathWatcom'\lib286\os2\os2.lib', fQuiet),
     2858        |   \CfgVerifyFile(sPathWatcom'\lib386\os2\clbrdll.lib', fQuiet),
     2859        |   \CfgVerifyFile(sPathWatcom'\lib386\os2\clib3r.lib', fQuiet),
     2860        |   \CfgVerifyFile(sPathWatcom'\lib386\nt\kernel32.lib', fQuiet),
     2861        |   \CfgVerifyFile(sPathWatcom'\lib386\nt\clbrdll.lib', fQuiet),
     2862        |   \CfgVerifyFile(sPathWatcom'\lib386\nt\clib3r.lib', fQuiet),
     2863        ) then
     2864        return 2;
     2865    rc = CheckCmdOutput('wcc', 8, fQuiet, 'Watcom C16 Optimizing Compiler  Version 11.0c');
     2866    if (rc = 0) then
     2867        rc = CheckCmdOutput('wpp', 8, fQuiet, 'Watcom C++16 Optimizing Compiler  Version 11.0c');
     2868    if (rc = 0) then
     2869        rc = CheckCmdOutput('wcc386', 8, fQuiet, 'Watcom C32 Optimizing Compiler  Version 11.0c');
     2870    if (rc = 0) then
     2871        rc = CheckCmdOutput('wpp386', 8, fQuiet, 'Watcom C++32 Optimizing Compiler  Version 11.0c');
     2872    if (rc = 0) then
     2873        rc = CheckCmdOutput('wlink form ELF', 1, fQuiet, 'WATCOM Linker Version 11.0c');
     2874return rc;
     2875
Note: See TracChangeset for help on using the changeset viewer.