home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 8 Other / 08-Other.zip / nosaa107.zip / install.cmd < prev    next >
OS/2 REXX Batch file  |  1999-11-11  |  11KB  |  312 lines

  1. /*
  2.  *      INSTALL.CMD - V1.07 - NOSA Administrator - C.Langanke@TeamOS2.DE - 1999
  3.  *
  4.  *     Syntax: install
  5.  */
  6. /* First comment is used as help text */
  7.  
  8.  SIGNAL ON HALT
  9.  
  10.  TitleLine = STRIP(SUBSTR(SourceLine(2), 3));
  11.  PARSE VAR TitleLine CmdName'.CMD 'Info
  12.  Title     = CmdName Info
  13.  
  14.  env          = 'OS2ENVIRONMENT';
  15.  TRUE         = (1 = 1);
  16.  FALSE        = (0 = 1);
  17.  CrLf         = "0d0a"x;
  18.  Redirection  = '> NUL 2>&1';
  19.  '@ECHO OFF'
  20.  
  21.  /* OS/2 errorcodes */
  22.  ERROR.NO_ERROR           =  0;
  23.  ERROR.INVALID_FUNCTION   =  1;
  24.  ERROR.FILE_NOT_FOUND     =  2;
  25.  ERROR.PATH_NOT_FOUND     =  3;
  26.  ERROR.ACCESS_DENIED      =  5;
  27.  ERROR.NOT_ENOUGH_MEMORY  =  8;
  28.  ERROR.INVALID_FORMAT     = 11;
  29.  ERROR.INVALID_DATA       = 13;
  30.  ERROR.NO_MORE_FILES      = 18;
  31.  ERROR.WRITE_FAULT        = 29;
  32.  ERROR.READ_FAULT         = 30;
  33.  ERROR.GEN_FAILURE        = 31;
  34.  ERROR.INVALID_PARAMETER  = 87;
  35.  
  36.  GlobalVars = 'Title CmdName env TRUE FALSE Redirection ERROR.';
  37.  SAY;
  38.  
  39.  /* show help */
  40.  ARG Parm .
  41.  IF (POS('?', Parm) > 0) THEN
  42.  DO
  43.     rc = ShowHelp();
  44.     EXIT(ERROR.INVALID_PARAMETER);
  45.  END;
  46.  
  47.  /* load RexxUtil */
  48.  CALL RxFuncAdd    'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs';
  49.  CALL SysLoadFuncs;
  50.  
  51.  /* Defaults */
  52.  GlobalVars          = GlobalVars '';
  53.  IniAppName          = 'NOSAADM';
  54.  IniAppName_Comments = 'NOSAADM_COMMENTS';
  55.  rc = ERROR.NO_ERROR;
  56.  ErrMsg = '';
  57.  
  58.  PromptHostname      = 'hostname for the Netlabs Open Source Archive server'CRLF;
  59.  PromptArchiveRoot   = 'root directory of the Netlabs Open Source Archive'CRLF;
  60.  PromptWorkRoot      = 'root directory for working directories on your computer'CRLF;
  61.  PromptSnapshotRoot  = 'root directory for snapshot zipfiles on your computer'CRLF;
  62.  PromptBackupRoot    = 'root directory for backup zipfiles on your computer'CRLF;
  63.  PromptInitCommand   = 'Init Command for project windows (optional)'CRLF;
  64.  PromptUser          = 'CVS Administrator User Id'CRLF;
  65.  PromptHome          = 'CVS home directory'CRLF;
  66.  
  67.  DO UNTIL (TRUE)
  68.  
  69.     /* read variables */
  70.     CvsHostname      = ReadIniValue(, IniAppName, 'CVS_HOSTNAME');
  71.     CvsExe           = ReadIniValue(, IniAppName, 'CVS_EXE');
  72.     CvsBinRoot       = ReadIniValue(, IniAppName, 'CVS_BINROOT');
  73.     CvsArchiveRoot   = ReadIniValue(, IniAppName, 'CVS_ARCHIVEROOT',  'c:\netlabs.cvs');
  74.     CvsWorkRoot      = ReadIniValue(, IniAppName, 'CVS_WORKROOT',     'c:\netlabs.src');
  75.     CvsSnapshotRoot  = ReadIniValue(, IniAppName, 'CVS_SNAPSHOTROOT', 'c:\netlabs.snap');
  76.     CvsBackupRoot    = ReadIniValue(, IniAppName, 'CVS_BACKUPROOT',   'c:\netlabs.bak');
  77.     CvsInitCommand   = ReadIniValue(, IniAppName, 'CVS_INITCOMMAND');
  78.     CvsUser          = ReadIniValue(, IniAppName, 'CVS_USER', VALUE('USER',,env));
  79.     CvsHome          = ReadIniValue(, IniAppName, 'CVS_HOME', VALUE('HOME',,env));
  80.     fCvsInPath       = (SysSearchPath('PATH', 'CVS.EXE') \= '');
  81.  
  82.     /* set some defaults */
  83.     IF (Cvshome     = '') THEN CvsHome     = 'c:\home';
  84.  
  85.     DO WHILE (TRUE)
  86.        'CLS';
  87.        SAY;
  88.        SAY Title
  89.        SAY;
  90.        SAY 'Please enter/modify the following values:';
  91.        SAY '- press Enter if the default value in brackets applies';
  92.        SAY '- press Ctrl-Break and Enter to abort';
  93.  
  94.        CvsHostname     = STRIP(PullVariable( CvsHostname,     PromptHostname));
  95.        CvsArchiveRoot  = STRIP(PullVariable( CvsArchiveRoot,  PromptArchiveRoot));
  96.        CvsWorkRoot     = STRIP(PullVariable( CvsWorkRoot,     PromptWorkRoot));
  97.        CvsSnapshotRoot = STRIP(PullVariable( CvsSnapshotRoot, PromptSnapshotRoot));
  98.        CvsBackupRoot   = STRIP(PullVariable( CvsBackupRoot,   PromptBackupRoot));
  99.        CvsHome         = STRIP(PullVariable( CvsHome,         PromptHome));
  100.        CvsInitCommand  = STRIP(PullVariable( CvsInitCommand,  PromptInitCommand));
  101.        CvsUser         = STRIP(PullVariable( CvsUser,         PromptUser));
  102.  
  103.        /* check cvs */
  104.        IF (\fCvsInPath) THEN
  105.        DO
  106.           CvsBinRoot  = STRIP(PullVariable( CvsBinRoot,      'Directory of CVS installation'CRLF));
  107.           CvsExe      = CvsBinRoot'\bin\cvs.exe';
  108.        END;
  109.        ELSE
  110.        DO
  111.           IF (CvsExe = '') THEN
  112.              CvsExe = SysSearchPath('PATH', 'CVS.EXE');
  113.        END;
  114.  
  115.        IF (TRUE) THEN /* ProceedWith('Are these values correct')) THEN */
  116.        DO
  117.           MissingVar = '';
  118.           SELECT
  119.              WHEN (CvsHostname = '')      THEN MissingVar = PromptHostname;
  120.              WHEN (CvsArchiveRoot = '')   THEN MissingVar = PromptArchiveRoot;
  121.              WHEN (CvsWorkRoot = '')      THEN MissingVar = PromptWorkRoot;
  122.              WHEN (CvsSnapshotRoot = '')  THEN MissingVar = PromptSnapshotRoot;
  123.              WHEN (CvsBackupRoot = '')    THEN MissingVar = PromptBackupRoot;
  124.              WHEN (CvsUser = '')          THEN MissingVar = PromptUser
  125.              WHEN (CvsHome = '')          THEN MissingVar = PromptHome;
  126.              OTHERWISE NOP;
  127.           END;
  128.  
  129.           IF (MissingVar \= '') THEN
  130.           DO
  131.              SAY CmdName': Error: The value for the';
  132.              SAY ' "'MissingVar'"';
  133.              SAY 'may not be empty.';
  134.              'PAUSE'
  135.              ITERATE;
  136.           END;
  137.  
  138.           /* check Cvs bin */
  139.           IF (\fCvsInPath) THEN
  140.              IF (\FileExist( CvsBinRoot'\BIN\CVS.EXE')) THEN
  141.              DO
  142.                 SAY CmdName': Error: CVS.EXE not found in' CvsBinRoot'\bin';
  143.                 'PAUSE'
  144.                 ITERATE;
  145.              END;
  146.  
  147.           /* all values ok */
  148.           LEAVE;
  149.        END;
  150.  
  151.     END;
  152.  
  153.     /* write new values */
  154.     IF (\fCvsInPath) THEN
  155.        rcx = SysIni(, IniAppName, 'CVS_BINROOT', CvsBinRoot);
  156.  
  157.     rcx = SysIni(, IniAppName, 'CVS_HOSTNAME',     CvsHostname);
  158.     rcx = SysIni(, IniAppName, 'CVS_EXE',          CvsExe);
  159.     rcx = SysIni(, IniAppName, 'CVS_ARCHIVEROOT',  CvsArchiveRoot);
  160.     rcx = SysIni(, IniAppName, 'CVS_WORKROOT',     CvsWorkRoot);
  161.     rcx = SysIni(, IniAppName, 'CVS_SNAPSHOTROOT', CvsSnapshotRoot);
  162.     rcx = SysIni(, IniAppName, 'CVS_BACKUPROOT',   CvsBackupRoot);
  163.     rcx = SysIni(, IniAppName, 'CVS_INITCOMMAND',  CvsInitCommand);
  164.     rcx = SysIni(, IniAppName, 'CVS_USER',         CvsUser);
  165.     rcx = SysIni(, IniAppName, 'CVS_HOME',         CvsHome);
  166.  
  167.     /* create directories */
  168.     rcx = MakeCvsPath( CvsArchiveRoot);
  169.     rcx = MakeCvsPath( CvsSnapshotRoot);
  170.     rcx = MakeCvsPath( CvsBackupRoot);
  171.     rcx = MakeCvsPath( CvsWorkRoot);
  172.     rcx = MakeCvsPath( CvsHome);
  173.  
  174.     /* set comment chars for source files */
  175.     /* extensions must be written in lower case here !!! */
  176.     SAY;
  177.     CALL CHAROUT, 'Schreibe Dateitypenliste ... ';
  178.     rcx = SysIni(, IniAppName_Comments, '.asm', ';');
  179.     rcx = SysIni(, IniAppName_Comments, '.c',   '/*'"00"x'*/');
  180.     rcx = SysIni(, IniAppName_Comments, '.cc',  '//');
  181.     rcx = SysIni(, IniAppName_Comments, '.cmd', ':');     /* REXX scripts are handled in cvsenv.cmd */
  182.     rcx = SysIni(, IniAppName_Comments, '.cpp', '/*'"00"x'*/');
  183.     rcx = SysIni(, IniAppName_Comments, '.dlg', '/*'"00"x'*/');
  184.     rcx = SysIni(, IniAppName_Comments, '.h',   '/*'"00"x'*/');
  185.     rcx = SysIni(, IniAppName_Comments, '.hh',  '/*'"00"x'*/');
  186.     rcx = SysIni(, IniAppName_Comments, '.hpp', '/*'"00"x'*/');
  187.     rcx = SysIni(, IniAppName_Comments, '.inc', ';');
  188.     rcx = SysIni(, IniAppName_Comments, '.mak', '#');     /* "makefile" is handled in cvsenv.cmd */
  189.     rcx = SysIni(, IniAppName_Comments, '.rc',  '/*'"00"x'*/');
  190.     rcx = SysIni(, IniAppName_Comments, '.rc',  '/*'"00"x'*/');
  191.     rcx = SysIni(, IniAppName_Comments, '.txt', ';');
  192.     SAY 'Ok.';
  193.  
  194.  END;
  195.  
  196.  EXIT( rc);
  197.  
  198. /* ------------------------------------------------------------------------- */
  199. HALT:
  200.  SAY;
  201.  SAY 'Interrupted by user.';
  202.  EXIT(ERROR.GEN_FAILURE);
  203.  
  204. /* ------------------------------------------------------------------------- */
  205. ShowHelp: PROCEDURE EXPOSE (GlobalVars)
  206.  
  207.  SAY Title;
  208.  SAY;
  209.  
  210.  PARSE SOURCE . . ThisFile
  211.  
  212.  DO i = 1 TO 3
  213.     rc = LINEIN(ThisFile);
  214.  END;
  215.  
  216.  ThisLine = LINEIN(Thisfile);
  217.  DO WHILE (ThisLine \= ' */')
  218.     SAY SUBSTR(ThisLine, 7);
  219.     ThisLine = LINEIN(Thisfile);
  220.  END;
  221.  
  222.  rc = LINEOUT(Thisfile);
  223.  
  224.  RETURN('');
  225.  
  226. /* ------------------------------------------------------------------------- */
  227. FileExist: PROCEDURE
  228.  PARSE ARG FileName
  229.  
  230.  RETURN(STREAM(Filename, 'C', 'QUERY EXISTS') > '');
  231.  
  232. /* ========================================================================= */
  233. ReadIniValue: PROCEDURE
  234. PARSE ARG IniFile, IniAppname, IniKeyName, Default
  235.  
  236.  IniValue = SysIni(IniFile, IniAppname, IniKeyName);
  237.  IF (IniValue = 'ERROR:') THEN
  238.     IniValue = '';
  239.  
  240.  IF ((IniValue \= '') & (RIGHT(IniValue, 1) = "00"x)) THEN
  241.     IniValue = LEFT( IniValue, LENGTH( IniValue) - 1);
  242.  
  243.  IF (IniValue = '') THEN
  244.     IniValue = Default;
  245.  
  246.  RETURN( IniValue);
  247.  
  248. /* ------------------------------------------------------------------------- */
  249. PullVariable: PROCEDURE
  250.  PARSE ARG Default, Message
  251.  
  252.  SAY;
  253.  CALL CHAROUT, Message '['Default'] : ';
  254.  PARSE PULL PullVar;
  255.  IF (LENGTH(PullVar) > 0) THEN
  256.     RETURN(PullVar);
  257.  ELSE
  258.     RETURN(Default);
  259.  
  260. /* ------------------------------------------------------------------------- */
  261. ProceedWith: PROCEDURE
  262.  PARSE ARG Prompt
  263.  
  264.  ResponseKeys  = 'Y N A R I'; /* SysGetMessage(0); */
  265.  Yes           = WORD(ResponseKeys, 1);
  266.  No            = WORD(ResponseKeys, 2);
  267.  ch            = ' ';
  268.  ValidResponse = Yes||No;
  269.  
  270.  SAY;
  271.  CALL CHAROUT ,Prompt '('Yes'/'No') '
  272.  DO WHILE (POS(ch, ValidResponse) = 0)
  273.     ch = SysGetKey('NOECHO');
  274.     ch = TRANSLATE(ch);
  275.     IF (POS(ch, ValidResponse) = 0) THEN BEEP(800, 200);
  276.  END;
  277.  SAY;
  278.  SAY;
  279.  RETURN(ch = Yes);
  280.  
  281. /* ------------------------------------------------------------------------- */
  282. DirExist: PROCEDURE
  283.  PARSE ARG Dirname
  284.  
  285.  IF (Dirname = '') THEN
  286.     RETURN(0);
  287.  
  288.  /* use 'QUERY EXISTS' with root directories (???) */
  289.  IF (RIGHT(DirName, 2) = ':\') THEN
  290.    RETURN(STREAM(Dirname, 'C', 'QUERY EXISTS') \= '');
  291.  
  292.  /* query other directories this way */
  293.  IF ((STREAM(Dirname, 'C', 'QUERY EXISTS') = '') &,
  294.      (STREAM(Dirname, 'C', 'QUERY DATETIME') \= '')) THEN
  295.     RETURN(1);
  296.  ELSE
  297.     RETURN(0);
  298.  
  299. /* ========================================================================= */
  300. MakeCvsPath: PROCEDURE EXPOSE (GlobalVars)
  301.  PARSE ARG PathName
  302.  
  303.  IF (DirExist( CvsArchiveRoot)) THEN
  304.     RETURN(ERROR.NO_ERROR);
  305.  
  306.  PARSE SOURCE . . CallName
  307.  FileName = SUBSTR( CallName, LASTPOS( '\', CallName) + 1);
  308.  'XCOPY' CallName PathName'\' Redirection;
  309.  rcx = SysFileDelete( PathName'\'FileName);
  310.  RETURN( rc);
  311.  
  312.