home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / nosac106.zip / install.cmd < prev    next >
OS/2 REXX Batch file  |  2000-12-23  |  14KB  |  460 lines

  1. /*
  2.  *      INSTALL.CMD - NOSA Client - V1.06 C.Langanke 1999,2001
  3.  *
  4.  *     Syntax: install [/Reset]
  5.  *
  6.  *       /Reset - resets all values to default
  7.  *
  8.  */
  9. /* First comment is used as help text */
  10.  
  11.  SIGNAL ON HALT
  12.  
  13.  TitleLine = STRIP(SUBSTR(SourceLine(2), 3));
  14.  PARSE VAR TitleLine CmdName'.CMD 'Info
  15.  Title     = CmdName Info
  16.  
  17.  env          = 'OS2ENVIRONMENT';
  18.  TRUE         = (1 = 1);
  19.  FALSE        = (0 = 1);
  20.  Redirection  = '> NUL 2>&1';
  21.  CrLf         = "0d0a"x;
  22.  '@ECHO OFF'
  23.  
  24.  /* OS/2 errorcodes */
  25.  ERROR.NO_ERROR           =  0;
  26.  ERROR.INVALID_FUNCTION   =  1;
  27.  ERROR.FILE_NOT_FOUND     =  2;
  28.  ERROR.PATH_NOT_FOUND     =  3;
  29.  ERROR.ACCESS_DENIED      =  5;
  30.  ERROR.NOT_ENOUGH_MEMORY  =  8;
  31.  ERROR.INVALID_FORMAT     = 11;
  32.  ERROR.INVALID_DATA       = 13;
  33.  ERROR.NO_MORE_FILES      = 18;
  34.  ERROR.WRITE_FAULT        = 29;
  35.  ERROR.READ_FAULT         = 30;
  36.  ERROR.GEN_FAILURE        = 31;
  37.  ERROR.INVALID_PARAMETER  = 87;
  38.  
  39.  GlobalVars = 'Title CmdName env TRUE FALSE Redirection ERROR. CrLf';
  40.  /* show help */
  41.  ARG Parm .
  42.  IF (POS('?', Parm) > 0) THEN
  43.  DO
  44.     rc = ShowHelp();
  45.     EXIT(ERROR.INVALID_PARAMETER);
  46.  END;
  47.  
  48.  /* load RexxUtil */
  49.  CALL RxFuncAdd    'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs';
  50.  CALL SysLoadFuncs;
  51.  
  52.  /* Defaults */
  53.  GlobalVars          = GlobalVars '';
  54.  IniAppName          = 'NOSAC';
  55.  rc                  = ERROR.NO_ERROR;
  56.  
  57.  BootDrive           = GetInstDrive();
  58.  CallDir             = GetCallDir();
  59.  
  60.  CvsZip              = 'CVS???.ZIP';
  61.  CvsNewlyInstalled   = FALSE;
  62.  
  63.  PromptServer        = 'Netlabs Open Source Archive Server' CRLF;
  64.  PromptArchiveRoot   = 'root directory of the Netlabs Open Source Archive'CRLF;
  65.  PromptWorkRoot      = 'root directory for working directories on your computer'CRLF;
  66.  PromptInitCommand   = 'Init Command for project windows (optional)'CRLF;
  67.  PromptUser          = 'CVS User Id (specify guest for readonly access)'CRLF;
  68.  PromptHome          = 'CVS home directory'CRLF;
  69.  PromptPager         = 'pager executable'CRLF;
  70.  
  71.  DO UNTIL (TRUE)
  72.  
  73.     /* reset to default ? */
  74.     ARG Option .
  75.     IF (POS( Option, '/RESET') = 1) THEN
  76.     DO
  77.        'CLS'
  78.        SAY;
  79.        SAY Title
  80.        SAY;
  81.        SAY;
  82.        SAY 'Restored to default values !';
  83.        SAY;
  84.        rcx = SysIni(, IniAppName, 'DELETE:');
  85.        'PAUSE';
  86.     END;
  87.  
  88.     /* get init vars */
  89.     CvsExe         = ReadIniValue(, IniAppName, 'CVS_EXE');
  90.     CvsServer      = ReadIniValue(, IniAppName, 'CVS_SERVER', 'www.netlabs.org');
  91.     CvsBinRoot     = ReadIniValue(, IniAppName, 'CVS_BINROOT');
  92.     CvsWorkRoot    = ReadIniValue(, IniAppName, 'CVS_WORKROOT');
  93.     CvsInitCommand = ReadIniValue(, IniAppName, 'CVS_INITCOMMAND');
  94.     CvsUser        = ReadIniValue(, IniAppName, 'CVS_USER', VALUE('USER',,env));
  95.     CvsHome        = ReadIniValue(, IniAppName, 'CVS_HOME', VALUE('HOME',,env));
  96.     CvsPager       = ReadIniValue(, IniAppName, 'CVS_PAGER', 'more');
  97.     fCvsInPath = (SysSearchPath('PATH', 'CVS.EXE') \= '');
  98.  
  99.     /* install CVS ? */
  100.     IF ((\fCvsInPath) & (CvsExe = '')) THEN
  101.     DO
  102.        'CLS'
  103.        SAY;
  104.        SAY Title
  105.        SAY;
  106.        SAY 'CVS could not be found in your executable PATH.';
  107.        SAY;
  108.        SAY '- If it is not already installed on your system, you can install it now.';
  109.        SAY '- If it is installed, but the cvs\bin directory is not included in your PATH,'
  110.        SAY '  you can instead specify the location, where you installed it.';
  111.  
  112.  
  113.        /* search cvs???.zip */
  114.        Options  = 'OF';
  115.        rc = SysFileTree( CvsZip, 'File.', Options);
  116.        IF (rc \= ERROR.NO_ERROR) THEN
  117.        DO
  118.           SAY CmdName': error in SysFileTree: not enough memory.';
  119.           rc = ERROR.NOT_ENOUGH_MEMORY;
  120.           LEAVE;
  121.        END;
  122.  
  123.        IF (ProceedWith('Do you want to install CVS now')) THEN
  124.        DO
  125.           /* search unzip.exe */
  126.           IF (SysSearchPath('PATH', 'UNZIP.EXE') = '') THEN
  127.           DO
  128.              SAY;
  129.              SAY CmdName': error : CVS could not be unpacked, because unzip.exe is missing.';
  130.              rc = ERROR.FILE_NOT_FOUND;
  131.              LEAVE;
  132.           END;
  133.  
  134.           /* how many packages available */
  135.           IF (File.0 = 0) THEN
  136.           DO
  137.              SAY 'Please provide the current CVS???.ZIP in' CallDir 'or install';
  138.              SAY 'CVS manually. In the latter case it is not mandantory to add the'
  139.              SAY 'cvs\bin directory to your PATH, as this is not required by the'
  140.              SAY 'Netlabs Open Source Archive Client.';
  141.              rc = ERROR.FILE_NOT_FOUND;
  142.              LEAVE;
  143.           END;
  144.  
  145.           IF (File.0 = 1) THEN
  146.              CvsZip = File.1;
  147.           ELSE
  148.           DO
  149.              DO WHILE (TRUE)
  150.                 SAY;
  151.                 SAY 'Multiple CVS package zip files have been found.';
  152.                 DO i = 1 TO File.0
  153.                    SAY RIGHT( i, 3) '-' File.i;
  154.                 END;
  155.                 Choice = PullVariable( '1', 'Please select one to install');
  156.                 SAY;
  157.  
  158.                 /* check selection */
  159.                 IF (DATATYPE( Choice) \= 'NUM') THEN
  160.                    SAY 'error: selection not numeric.';
  161.  
  162.                 Choice = Choice + 0; /* string to number */
  163.                 IF ((Choice < 1) | (Choice > File.0)) THEN
  164.                    SAY 'error: invalid selection.';
  165.                 ELSE
  166.                 DO
  167.                    CvsZip = File.Choice;
  168.                    LEAVE;
  169.                 END;
  170.  
  171.  
  172.                 SAY 'Please try again.';
  173.                 'PAUSE';
  174.              END;
  175.           END;
  176.  
  177.           /* ask for directory */
  178.           DO WHILE (TRUE)
  179.              CvsBinRoot  = STRIP(PullVariable( BootDrive'\cvs', 'Where should CVS be installed'));
  180.              IF (ProceedWith('Is this correct')) THEN
  181.                 LEAVE;
  182.           END;
  183.  
  184.           /* install cvs */
  185.           'call unzip -o' CvsZip '-d' CvsBinRoot;
  186.  
  187.           CvsInstalled = FileExist( CvsBinRoot'\BIN\CVS.EXE');
  188.  
  189.           IF ((rc = ERROR.NO_ERROR) & (CvsInstalled)) THEN
  190.           DO
  191.              CvsNewlyInstalled = TRUE;
  192.              SAY;
  193.              SAY 'CVS has been installed successfully.';
  194.              SAY 'NOTE:';
  195.              SAY ' The cvs\bin directory has not been added to your PATH, as this is';
  196.              SAY ' not neccessary for the Netlabs Open Source Archive Client.';
  197.              SAY;
  198.              'PAUSE';
  199.           END;
  200.           ELSE
  201.           DO
  202.              SAY;
  203.              SAY CmdName': error: CVS was not properly installed.'
  204.              SAY 'Please try again. Install aborted.';
  205.              LEAVE;
  206.           END;
  207.        END;
  208.     END;
  209.  
  210.     /* set some defaults */
  211.     IF (CvsWorkRoot = '') THEN CvsWorkRoot = 'c:\work';
  212.     IF (Cvshome     = '') THEN CvsHome     = 'c:\home';
  213.  
  214.     DO WHILE (TRUE)
  215.        'CLS';
  216.        SAY;
  217.        SAY Title
  218.        SAY;
  219.        SAY 'Please enter/modify the following values:';
  220.        SAY '- press Enter if the default value in brackets applies';
  221.        SAY '- press Ctrl-Break and Enter to abort';
  222.        CvsServer      = STRIP(PullVariable( CvsServer,      PromptServer));
  223.        CvsServer      = SPACE( CvsServer, 0);
  224.  
  225.        CvsWorkRoot    = STRIP(PullVariable( CvsWorkRoot,    PromptWorkRoot));
  226.        rcx            = CreateCvsDir( CvsWorkRoot);
  227.        CvsHome        = STRIP(PullVariable( CvsHome,        PromptHome));
  228.        rcx            = CreateCvsDir( CvsHome);
  229.  
  230.        IF (\FileExist( CvsHome)) THEN
  231.           'COPY' CallDir'\samples\.cvsrc' CvsHome'\' Redirection;
  232.  
  233.        CvsInitCommand = STRIP(PullVariable( CvsInitCommand, PromptInitCommand));
  234.        CvsUser        = STRIP(PullVariable( CvsUser,        PromptUser));
  235.        CvsPager       = STRIP(PullVariable( CvsPager,       PromptPager));
  236.  
  237.        IF (\CvsNewlyInstalled) THEN
  238.        DO
  239.           /* check for CVS.EXE */
  240.           CvsExe = SysSearchPath('PATH', 'CVS.EXE');
  241.           fCvsInPath = (CvsExe \= '');
  242.           IF (\fCvsInPath) THEN
  243.           DO
  244.              CvsBinRoot  = STRIP(PullVariable( CvsBinRoot, 'Directory of CVS installation'CRLF));
  245.              CvsExe      = CvsBinRoot'\bin\cvs.exe';
  246.           END;
  247.        END;
  248.  
  249.        IF (ProceedWith('Are these values correct')) THEN
  250.        DO
  251.  
  252.           MissingVar = '';
  253.           SELECT
  254.              WHEN (CvsServer = '')      THEN MissingVar = PromptServer;
  255.              WHEN (CvsWorkRoot = '')    THEN MissingVar = PromptWorkRoot;
  256.              WHEN (CvsUser = '')        THEN MissingVar = PromptUser
  257.              WHEN (CvsHome = '')        THEN MissingVar = PromptHome;
  258.              OTHERWISE NOP;
  259.           END;
  260.  
  261.           IF (MissingVar \= '') THEN
  262.           DO
  263.              SAY CmdName': Error: The value for the';
  264.              SAY ' "'MissingVar'"';
  265.              SAY 'may not be empty.';
  266.              'PAUSE'
  267.              ITERATE;
  268.           END;
  269.  
  270.           /* check Cvs bin */
  271.           IF (\fCvsInPath) THEN
  272.              IF (\FileExist( CvsBinRoot'\BIN\CVS.EXE')) THEN
  273.              DO
  274.                 SAY CmdName': Error: CVS.EXE not found in' CvsBinRoot'\bin';
  275.                 'PAUSE'
  276.                 ITERATE;
  277.              END;
  278.  
  279.           /* all values ok */
  280.           LEAVE;
  281.        END;
  282.     END;
  283.  
  284.     /* write new values */
  285.     rcx = SysIni(, IniAppName,   'CVS_SERVER',      CvsServer);
  286.     rcx = SysIni(, IniAppName,   'CVS_WORKROOT',    CvsWorkRoot);
  287.     rcx = SysIni(, IniAppName,   'CVS_INITCOMMAND', CvsInitCommand);
  288.     rcx = SysIni(, IniAppName,   'CVS_USER',        CvsUser);
  289.     rcx = SysIni(, IniAppName,   'CVS_HOME',        CvsHome);
  290.     IF (STRIP(CvsPager) = '') THEN
  291.        CvsPager = 'more';
  292.     rcx = SysIni(, IniAppName,   'CVS_PAGER',       CvsPager);
  293.     IF (\fCvsInPath) THEN
  294.        rcx = SysIni(, IniAppName, 'CVS_BINROOT',     CvsBinRoot);
  295.     rcx = SysIni(, IniAppName, 'CVS_EXE',           CvsExe);
  296.  
  297.     /* install folder now ? */
  298.     IF (\SysSetObjectData( '<NETLABS_NOSAC_FOLDER>', ';')) THEN
  299.        'CALL' CallDir'\cvswps';
  300.  
  301.  END;
  302.  
  303.  EXIT( rc);
  304.  
  305. /* ------------------------------------------------------------------------- */
  306. HALT:
  307.  SAY;
  308.  SAY 'Interrupted by user.';
  309.  EXIT(ERROR.GEN_FAILURE);
  310.  
  311. /* ------------------------------------------------------------------------- */
  312. ShowHelp: PROCEDURE EXPOSE (GlobalVars)
  313.  
  314.  SAY;
  315.  SAY Title;
  316.  SAY;
  317.  
  318.  PARSE SOURCE . . ThisFile
  319.  
  320.  DO i = 1 TO 3
  321.     rc = LINEIN(ThisFile);
  322.  END;
  323.  
  324.  ThisLine = LINEIN(Thisfile);
  325.  DO WHILE (ThisLine \= ' */')
  326.     SAY SUBSTR(ThisLine, 7);
  327.     ThisLine = LINEIN(Thisfile);
  328.  END;
  329.  
  330.  rc = LINEOUT(Thisfile);
  331.  
  332.  RETURN('');
  333.  
  334. /* ------------------------------------------------------------------------- */
  335. FileExist: PROCEDURE
  336.  PARSE ARG FileName
  337.  
  338.  RETURN(STREAM(Filename, 'C', 'QUERY EXISTS') > '');
  339.  
  340. /* ========================================================================= */
  341. ReadIniValue: PROCEDURE
  342. PARSE ARG IniFile, IniAppname, IniKeyName, Default
  343.  
  344.  IniValue = SysIni(IniFile, IniAppname, IniKeyName);
  345.  IF (IniValue = 'ERROR:') THEN
  346.     IniValue = '';
  347.  
  348.  IF ((IniValue \= '') & (RIGHT(IniValue, 1) = "00"x)) THEN
  349.     IniValue = LEFT( IniValue, LENGTH( IniValue) - 1);
  350.  
  351.  IF (IniValue = '') THEN
  352.     IniValue = Default;
  353.  
  354.  RETURN( IniValue);
  355.  
  356. /* ------------------------------------------------------------------------- */
  357. PullVariable: PROCEDURE
  358.  PARSE ARG Default, Message
  359.  
  360.  SAY;
  361.  CALL CHAROUT, Message '['Default'] : ';
  362.  PARSE PULL PullVar;
  363.  IF (LENGTH(PullVar) > 0) THEN
  364.     RETURN(PullVar);
  365.  ELSE
  366.     RETURN(Default);
  367.  
  368. /* ------------------------------------------------------------------------- */
  369. ProceedWith: PROCEDURE
  370.  PARSE ARG Prompt
  371.  
  372.  ResponseKeys  = 'Y N A R I'; /* SysGetMessage(0); */
  373.  Yes           = WORD(ResponseKeys, 1);
  374.  No            = WORD(ResponseKeys, 2);
  375.  ch            = ' ';
  376.  ValidResponse = Yes||No;
  377.  
  378.  SAY;
  379.  CALL CHAROUT ,Prompt '('Yes'/'No') '
  380.  DO WHILE (POS(ch, ValidResponse) = 0)
  381.     ch = SysGetKey('NOECHO');
  382.     ch = TRANSLATE(ch);
  383.     IF (POS(ch, ValidResponse) = 0) THEN BEEP(800, 200);
  384.  END;
  385.  SAY;
  386.  SAY;
  387.  RETURN(ch = Yes);
  388.  
  389. /* ------------------------------------------------------------------------- */
  390. GetInstDrive: PROCEDURE EXPOSE env
  391.  ARG DirName, EnvVarName
  392.  
  393.  /* Default: OS2-Verzeichnis -> ermittelt BootDrive */
  394.  IF (DirName = '') THEN DirName = '\OS2';
  395.  
  396.  /* Default: PATH  */
  397.  IF (EnvVarName = '') THEN EnvVarName = 'PATH';
  398.  
  399.  /* Wert holen */
  400.  PathValue = VALUE(EnvVarName,,env);
  401.  
  402.  /* Eintrag suchen und Laufwerk zurückgeben */
  403.  DirName = ':'DirName';';
  404.  EntryPos = POS(DirName, PathValue) - 1;
  405.  IF (EntryPos = -1) THEN
  406.     RETURN('');
  407.  InstDrive = SUBSTR(PathValue, EntryPos, 2);
  408.  RETURN(InstDrive);
  409.  
  410. /* ------------------------------------------------------------------------- */
  411. DirExist: PROCEDURE
  412.  PARSE ARG Dirname
  413.  
  414.  IF (Dirname = '') THEN
  415.     RETURN(0);
  416.  
  417.  /* use 'QUERY EXISTS' with root directories (???) */
  418.  IF (RIGHT(DirName, 2) = ':\') THEN
  419.    RETURN(STREAM(Dirname, 'C', 'QUERY EXISTS') \= '');
  420.  
  421.  /* query other directories this way */
  422.  IF ((STREAM(Dirname, 'C', 'QUERY EXISTS') = '') &,
  423.      (STREAM(Dirname, 'C', 'QUERY DATETIME') \= '')) THEN
  424.     RETURN(1);
  425.  ELSE
  426.     RETURN(0);
  427.  
  428. /* ------------------------------------------------------------------------- */
  429. GetCalldir: PROCEDURE
  430. PARSE SOURCE . . CallName
  431.  CallDir = FILESPEC('Drive', CallName)||FILESPEC('Path', CallName);
  432.  RETURN(LEFT(CallDir, LENGTH(CallDir) - 1));
  433.  
  434. /* ========================================================================= */
  435. MakePath: PROCEDURE EXPOSE (GlobalVars)
  436.  PARSE ARG PathName
  437.  
  438.  PARSE SOURCE . . CallName
  439.  FileName = SUBSTR( CallName, LASTPOS( '\', CallName) + 1);
  440.  'XCOPY' CallName PathName'\' Redirection;
  441.  rcx = SysFileDelete( PathName'\'FileName);
  442.  RETURN( rc);
  443.  
  444. /* ========================================================================= */
  445. CreateCvsDir: PROCEDURE EXPOSE (GlobalVars)
  446.  PARSE ARG Dirname;
  447.  
  448.  Dirname =STRIP( Dirname);
  449.  IF (Dirname = '') THEN
  450.     RETURN('');
  451.  
  452.  IF (\DirExist( DirName)) THEN
  453.  DO
  454.     IF (ProceedWith( 'The directory' Dirname' does not yes exist.'CrLf'Should it be created now')) THEN
  455.        rcx = MakePath( DirName);
  456.  END;
  457.  
  458.  RETURN(DirName);
  459.  
  460.