home *** CD-ROM | disk | FTP | other *** search
/ Chip 2002 March / Chip_2002-03_cd1.bin / sharewar / Slunec / app / ppww32.exe / setup.rex < prev    next >
OS/2 REXX Batch file  |  2001-12-08  |  13KB  |  319 lines

  1. /*---------------------------------------------------------------------------
  2. ;
  3. ;    MODULE NAME:   W32SETUP.REX
  4. ;
  5. ;        $Author:   USER "Dennis"  $
  6. ;      $Revision:   1.3  $
  7. ;          $Date:   08 Dec 2001 18:04:38  $
  8. ;       $Logfile:   C:/DBAREIS/Projects.PVCS/MultiOs/PPWIZARD/w32setup.rex.pvcs  $
  9. ;
  10. ;    DESCRIPTION:   Gets renamed to SETUP.REX and is called after unpacking
  11. ;                   of the Windows self extracting EXE to start install.
  12. ;
  13. ;                   If the zip is downloaded the user must execute this
  14. ;                   command:
  15. ;
  16. ;                          regina.exe setup.rex
  17. ;----------------------------------------------------------------------------*/
  18.  
  19. /*--- If the directory is not valid then stop -------------------------------*/
  20. trace off;
  21. if stream("SETUP.REX", 'c', 'query exists') = '' then
  22. do
  23.    say 'The current directory is "' || directory() || '" which does not';
  24.    say 'appear to be correct. You will need to change to the directory'
  25.    say 'where you installed ppwizard and type "W32SETUP"!'
  26.    say '';
  27.    address system '%COMSPEC% /K ver';
  28.    exit(255);
  29. end;
  30.  
  31. /*--- Which operating system are we on --------------------------------------*/
  32. parse value uname() with OpSys .
  33. say 'This is the "' || OpSys || '" operating system.'
  34.  
  35. /*--- Now load the setup option file ----------------------------------------*/
  36. DoSetup = 'Y';
  37. DebugSu = 'N';
  38. OptFile = 'W32SETUP.TXT'
  39. CloseRc = stream(OptFile, 'c', 'close');
  40. do while lines(OptFile) <> 0
  41.    ThisLine = strip(linein(OptFile));
  42.    if  ThisLine <> '' & left(ThisLine, 1) <> ';' then
  43.    do
  44.        say 'USEROPT(1): ' || ThisLine;
  45.        interpret ThisLine;
  46.    end;
  47. end;
  48. CloseRc = stream(OptFile, 'c', 'close');
  49. call DebugPause 'Finished loading user options from "' || OptFile || '"'
  50.  
  51. /*--- Exit if user does not wish to do any setup ----------------------------*/
  52. DoSetup = translate(DoSetup);
  53. if DoSetup = 'N' | DoSetup = 'NO' then
  54. do
  55.    /*--- User does not wish to do any setup ---------------------------------*/
  56.    say ''
  57.    say '***'
  58.    say '*** You have indicated that you do not wish setup performed!'
  59.    say '***'
  60.    say ''
  61.    address system 'pause';
  62.    exit(0);
  63. end;
  64.  
  65.  
  66. /*--- Where are we? ---------------------------------------------------------*/
  67. say 'Installing into the "' || directory() || '" directory.'
  68. say ''
  69.  
  70. /*--- Take appropriate action -----------------------------------------------*/
  71. if OpSys <> 'WIN95' & OpSys <> 'WIN98' & OpSys <> 'WINME' then
  72. do
  73.    /*--- Simply let REGIT do all the work -----------------------------------*/
  74.    say 'Processing "PPW_NT.RIT"'
  75.    address system 'regina.exe RegIt.REX PPW_NT.RIT'
  76. end;
  77. else
  78. do
  79.    /*--- We can do some work via REGIT --------------------------------------*/
  80.    say 'Processing "PPW_95.RIT"'
  81.    address system 'regina.exe RegIt.REX ppw_95.RIT' /* Win95 can't load "W32UTIL.DLL" */
  82.  
  83.    /*--- The rest involves updating autoexec.bat ----------------------------*/
  84.    call DebugPause 'Updating "AUTOEXEC.BAT" if required'
  85.    call  UpdateWin98AutoexecBat;
  86. end;
  87.  
  88. /*--- Generate the test html ------------------------------------------------*/
  89. call DebugPause 'Testing PPWIZARD by generating "TRYME.HTM"'
  90. address system 'regina.exe ppwizard.rex TRYME.IT'
  91. call DebugPause 'Displaying the generated "TRYME.HTM"'
  92. address system 'start tryme.htm'
  93. call DebugPause 'Done';
  94. exit(0);
  95.  
  96.  
  97. /*===========================================================================*/
  98. DebugPause:
  99. /*===========================================================================*/
  100.    say '@' || SIGL || ': ' || arg(1);
  101.    if  DebugSu = 'Y' then
  102.        address system 'pause';
  103.    return;
  104.  
  105.  
  106. /*===========================================================================*/
  107. UpdateWin98AutoexecBat:
  108. /*===========================================================================*/
  109.    /*
  110.    * Note Microsoft Windows 95/98 have a MAJOR bug in the command processor
  111.    * which prevents you from determining whether a command works or not!
  112.    */
  113.  
  114.    /*--- Initialization -----------------------------------------------------*/
  115.    ConfigFile = "c:\autoexec.bat";
  116.    BackupFile = "c:\autoexec.ppw";
  117.    TmpNewFile = "c:\ea_bat.new";
  118.    LogFile    = "c:\ppwizard.log";
  119.    CloseRc = stream(LogFile, 'c', 'close');
  120.    if stream(LogFile, 'c', 'query exists') <> '' then
  121.        address system 'del ' || LogFile;
  122.    call LogIt ""
  123.    call LogIt "Starting at: " || date() || ', ' || time();
  124.    call SayIt "Installing PPWIZARD onto Windows 95 or 98 machine";
  125.  
  126.    /*--- Make sure we have a backup of the original "autoexec.bat" ----------*/
  127.    if stream(ConfigFile, 'c', 'query exists') <> '' then
  128.    do
  129.        /*--- There is a config file to backup, have a backup already? -------*/
  130.        if stream(BackupFile, 'c', 'query exists') = '' then
  131.        do
  132.            /*--- No backup, so make one (at least do our best) --------------*/
  133.            call SayIt 'Creating backup of "' || ConfigFile || '" called "' || BackupFile || '"'
  134.            address system 'attrib -H -R ' || ConfigFile;
  135.            address system 'type ' || ConfigFile || ' > '  || BackupFile; /* type should always work... (Thanks again MS) */
  136.        end;
  137.    end;
  138.  
  139.    /*--- Work out where we are ----------------------------------------------*/
  140.    parse source . . SourceFileName;
  141.    SlashPos = lastpos('\', SourceFileName);
  142.    if SlashPos = 0 then
  143.        Die("Bug in regina? Could not determine current path.");
  144.    ThisDir    = translate(left(SourceFileName, SlashPos-1));
  145.    NeedInPath = '"' || ThisDir || '"';
  146.  
  147.    /*--- Simple if not config file currently exists -------------------------*/
  148.    StartReginaLine = "SET REGINA_MACROS=";
  149.    ReginaNeeds = StartReginaLine || ThisDir;
  150.    if stream(ConfigFile, 'c', 'query exists') = '' then
  151.    do
  152.        /*--- No config file exists so just create one -----------------------*/
  153.        call SayIt 'Creating a new "' || ConfigFile || '" files as none currently exists'
  154.        call lineout ConfigFile, "PATH=" || NeedInPath;
  155.        call lineout ConfigFile, ReginaNeeds;
  156.        CloseRc = stream(ConfigFile, 'c', 'close');
  157.    end;
  158.    else
  159.    do
  160.        /*--- File exists so need to update it -------------------------------*/
  161.        call SayIt 'Scanning existing "' || ConfigFile || '" file'
  162.        CloseRc = stream(TmpNewFile, 'c', 'close');
  163.        if  stream(TmpNewFile, 'c', 'query exists') <> '' then
  164.            address system 'del ' || TmpNewFile;
  165.  
  166.        /*--- Read configuration line by line --------------------------------*/
  167.        FoundReginaLine = 'N';
  168.        FoundPathLine   = 'N';
  169.        MadeChanges     = 'N';
  170.        LineNumber      = 0;
  171.        CloseRc = stream(ConfigFile, 'c', 'close');
  172.        do  while lines(ConfigFile) <> 0
  173.            /*--- Read the current line --------------------------------------*/
  174.            CurrentLine  = linein(ConfigFile);
  175.            CurrentLineU = translate(CurrentLine);
  176.            LineNumber   = LineNumber + 1;
  177.            call LogIt  '   * Line #' || LineNumber || ': ' || CurrentLine;
  178.  
  179.            /*--- Process the file -------------------------------------------*/
  180.            select
  181.                /**************************************************/
  182.                when pos(StartReginaLine, CurrentLineU) <> 0 then
  183.                /**************************************************/
  184.                do
  185.                    /*--- Found existing regina line -------------------------*/
  186.                    FoundReginaLine = 'Y';
  187.                    if  pos(ThisDir, CurrentLineU) = 0 then
  188.                    do
  189.                        /*--- Dir not yet in REGINA_MACROS -------------------*/
  190.                        do  while right(CurrentLine, 1) = ';'
  191.                            CurrentLine = left(CurrentLine, length(CurrentLine)-1);
  192.                        end;
  193.                        CurrentLine = CurrentLine || ';' || ThisDir;
  194.                        MadeChanges = 'Y';
  195.                        call LogIt  '     ===> #' || LineNumber || ': ' || CurrentLine;
  196.                    end;
  197. /*---------------------------------------------------------------------------*/
  198.                    /*--- Found existing regina line -------------------------*/
  199. /*
  200.                    FoundReginaLine = 'Y';
  201.                    if  CurrentLine <> ReginaNeeds then
  202.                    do
  203.                        CurrentLine = ReginaNeeds;
  204.                        MadeChanges = 'Y';
  205.                        call LogIt  '     ===> #' || LineNumber || ': ' || CurrentLine;
  206.                    end;
  207. */
  208. /*---------------------------------------------------------------------------*/
  209.                end;
  210.                /**************************************************/
  211.                when pos("PATH=", CurrentLineU) <> 0 | pos("PATH ", CurrentLineU) <> 0 then
  212.                /**************************************************/
  213.                do
  214.                    /*--- Lets make sure not "INCLUDE_PATH=" or similar ------*/
  215.                    PathPos = pos("PATH", CurrentLineU);
  216.                    if  PathPos = 1 then
  217.                        OK = 'Y'                /* PATH begins the line */
  218.                    else
  219.                    do
  220.                        /*--- Must be space before "PATH" --------------------*/
  221.                        if  substr(CurrentLineU, PathPos-1, 1) = ' ' then
  222.                            OK = 'Y'
  223.                        else
  224.                            OK = 'N'            /*Something else...*/
  225.                    end;
  226.  
  227.                    /*--- Valid PATH line? -----------------------------------*/
  228.                    if  OK = 'Y' then
  229.                    do
  230.                        /*--- Found one --------------------------------------*/
  231.                        FoundPathLine = 'Y';
  232.                        if  pos(NeedInPath, CurrentLineU) = 0 then
  233.                        do
  234.                            /*--- Dir not yet in path ----------------------------*/
  235.                            do  while right(CurrentLine, 1) = ';'
  236.                                CurrentLine = left(CurrentLine, length(CurrentLine)-1);
  237.                            end;
  238.                            CurrentLine = CurrentLine || ';' || NeedInPath;
  239.                            MadeChanges = 'Y';
  240.                            call LogIt  '     ===> #' || LineNumber || ': ' || CurrentLine;
  241.                        end;
  242.                    end;
  243.                end;
  244.                /**************************************************/
  245.                otherwise
  246.                /**************************************************/
  247.                do
  248.                    /*--- Ignore other lines ---------------------------------*/
  249.                end;
  250.            end;
  251.  
  252.            /*--- Line should never contain EOF char -------------------------*/
  253.            CurrentLine = translate(CurrentLine, ' ', '1A'x)
  254.  
  255.            /*--- Output to the temporary file -------------------------------*/
  256.            call lineout TmpNewFile, CurrentLine;
  257.        end;
  258.        CloseRc = stream(ConfigFile, 'c', 'close');
  259.  
  260.        /*--- Add any required lines -----------------------------------------*/
  261.        if  FoundPathLine = 'N' then
  262.            call AddNewLine "PATH=" || NeedInPath;
  263.        if  FoundReginaLine = 'N' then
  264.            call AddNewLine ReginaNeeds;
  265.        CloseRc = stream(TmpNewFile, 'c', 'close');
  266.  
  267.        /*--- If any changes were required then update autoexec.bat ----------*/
  268.        if  MadeChanges = 'N' then
  269.            call SayIt '"' || ConfigFile || '" did not need to be changed'
  270.        else
  271.        do
  272.            call SayIt '"' || ConfigFile || '" is being updated'
  273.            address system 'copy ' || TmpNewFile || ' '  || ConfigFile;
  274.  
  275.            /*--- Double Check OK --------------------------------------------*/
  276.            if  stream(ConfigFile, 'c', 'query size') <> stream(TmpNewFile, 'c', 'query size') then
  277.                Die("Did not successfully update configuration file!");
  278.        end;
  279.    end;
  280.    return(0);
  281.  
  282.  
  283. /*===========================================================================*/
  284. AddNewLine:
  285. /*===========================================================================*/
  286.    MadeChanges = 'Y';
  287.    LineNumber  = LineNumber + 1;
  288.    NewLine = "PATH=" || NeedInPath;
  289.    call LogIt  '     ===> #' || LineNumber || ': ' || arg(1);
  290.    call lineout TmpNewFile, arg(1);
  291.    return;
  292.  
  293.  
  294.  
  295. /*===========================================================================*/
  296. SayIt:
  297. /*===========================================================================*/
  298.    say        arg(1);
  299.    call LogIt arg(1);
  300.    return;
  301.  
  302.  
  303. /*===========================================================================*/
  304. LogIt:
  305. /*===========================================================================*/
  306.    call lineout LogFile, arg(1);
  307.    CloseRc = stream(LogFile, 'c', 'close');
  308.    return;
  309.  
  310. /*===========================================================================*/
  311. Die:
  312. /*===========================================================================*/
  313.    ExitRc = SIGL;
  314.    call Sayit ''
  315.    call Sayit 'ERROR'
  316.    call Sayit '~~~~~'
  317.    call Sayit arg(1);
  318.    exit(ExitRc);
  319.