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

  1. /*
  2.  *      CVSWPS.CMD - V1.07 - NOSA Administrator - C.Langanke@TeamOS2.DE - 1999
  3.  *
  4.  *      Syntax: CVSWPS
  5.  *
  6.  *      Creates WPS folder with program objects for access
  7.  *      to the Netlabs Open Source Archive with CVS.
  8.  *
  9.  *      The created program objects require cvsenv.cmd.
  10.  */
  11. /* First comment is used as help text */
  12.  
  13.  SIGNAL ON HALT
  14.  
  15.  TitleLine = STRIP(SUBSTR(SourceLine(2), 3));
  16.  PARSE VAR TitleLine CmdName'.CMD 'Info
  17.  Title     = CmdName Info
  18.  
  19.  env          = 'OS2ENVIRONMENT';
  20.  TRUE         = (1 = 1);
  21.  FALSE        = (0 = 1);
  22.  Redirection  = '> NUL 2>&1';
  23.  '@ECHO OFF'
  24.  
  25.  /* OS/2 errorcodes */
  26.  ERROR.NO_ERROR           =  0;
  27.  ERROR.INVALID_FUNCTION   =  1;
  28.  ERROR.FILE_NOT_FOUND     =  2;
  29.  ERROR.PATH_NOT_FOUND     =  3;
  30.  ERROR.ACCESS_DENIED      =  5;
  31.  ERROR.NOT_ENOUGH_MEMORY  =  8;
  32.  ERROR.INVALID_FORMAT     = 11;
  33.  ERROR.INVALID_DATA       = 13;
  34.  ERROR.NO_MORE_FILES      = 18;
  35.  ERROR.WRITE_FAULT        = 29;
  36.  ERROR.READ_FAULT         = 30;
  37.  ERROR.GEN_FAILURE        = 31;
  38.  ERROR.INVALID_PARAMETER  = 87;
  39.  ERROR.ENVVAR_NOT_FOUND   = 203;
  40.  
  41.  GlobalVars = 'Title CmdName env TRUE FALSE Redirection ERROR.';
  42.  SAY;
  43.  
  44.  /* show help */
  45.  ARG Parm .
  46.  IF (POS('?', Parm) > 0) THEN
  47.  DO
  48.     rc = ShowHelp();
  49.     EXIT(ERROR.INVALID_PARAMETER);
  50.  END;
  51.  
  52.  /* Defaults */
  53.  GlobalVars = GlobalVars '';
  54.  IniAppName = 'NOSAADM';
  55.  rc = ERROR.NO_ERROR;
  56.  ErrorMsg   = '';
  57.  CallDir    = GetCalldir();
  58.  IconDir    = CallDir'\ico';
  59.  fIsWarp4    = (SysOS2Ver() >= 2.40);
  60.  IF (fIsWarp4) THEN
  61.     FolderIcons = 'ICONFILE='IconDir'\FOLDER4.ICO;ICONNFILE=1,'IconDir'\FOLDER4O.ICO'
  62.  ELSE
  63.     FolderIcons = 'ICONFILE='IconDir'\FOLDER3.ICO;ICONNFILE=1,'IconDir'\FOLDER3O.ICO'
  64.  
  65.  
  66.  DO UNTIL (TRUE)
  67.  
  68.     /* read enviroment */
  69.     CvsArchiveRoot     = ReadIniValue(, IniAppName, 'CVS_ARCHIVEROOT');
  70.     CvsWorkRoot        = ReadIniValue(, IniAppName, 'CVS_WORKROOT');
  71.     CvsSnapshotRoot    = ReadIniValue(, IniAppName, 'CVS_SNAPSHOTROOT');
  72.     CvsBackupRoot      = ReadIniValue(, IniAppName, 'CVS_BACKUPROOT');
  73.     IF (CvsArchiveRoot = '') THEN
  74.     DO
  75.        ErrorMsg = 'Error: the root directory of the Netlabs Open Source Archive is not specified';
  76.        rc = ERROR.ENVVAR_NOT_FOUND
  77.        LEAVE;
  78.     END;
  79.  
  80.     /* search working directories */
  81.     Filename = CvsArchiveRoot'\CVSROOT';
  82.     Options  = 'ODS';
  83.     rc = SysFileTree(FileName, 'ArchiveDir.', Options);
  84.     IF (rc \= ERROR.NO_ERROR) THEN
  85.     DO
  86.        ErrorMsg = 'Error in SysFileTree: not enough memory.';
  87.        rc = ERROR.NOT_ENOUGH_MEMORY;
  88.        LEAVE;
  89.     END;
  90.  
  91.     /* isolate archvie names */
  92.     DO i = 1 TO ArchiveDir.0
  93.        PathWords = TRANSLATE( ArchiveDir.i, ' ', '\');
  94.        ArchiveDir.i = WORD( PathWords, WORDS( PathWords) - 1);
  95.     END;
  96.  
  97.     /* create/update folder */
  98.     HelpPage = 'HELPLIBRARY='CallDir'\NOSAADM.HLP;HELPPANEL';
  99.     rcx = SysCreateObject( 'WPFolder',  'OS/2 Netlabs^Open Source Archive^Administration',  '<WP_DESKTOP>',             HelpPage'=3;ALWAYSSORT=YES;DEFAULTSORT=1;CCVIEW=NO;'FolderIcons';OBJECTID=<NETLABS_NOSAADM_FOLDER>;', 'U');
  100.     rcx = SysCreateObject( 'WPProgram', 'Create new project archive',                       '<NETLABS_NOSAADM_FOLDER>', HelpPage'=2;PROGTYPE=WINDOWABLEVIO;EXENAME='CallDir'\CVSENV.CMD;PARAMETERS=[Neues Projekt:] $INIT;ICONFILE='IconDir'\ADD.ICO;OBJECTID=<NETLABS_NOSAADM_NEWPROJECT>;', 'U');
  101.     rcx = SysCreateObject( 'WPProgram', 'Refresh this folder',                              '<NETLABS_NOSAADM_FOLDER>', HelpPage'=1;PROGTYPE=WINDOWABLEVIO;EXENAME='CallDir'\CVSWPS.CMD;ICONFILE='IconDir'\rebuild.ico;OBJECTID=<NETLABS_NOSAADM_REFRESH>;', 'U');
  102.     rcx = SysCreateObject( 'WPShadow',  'Dummy',                                            '<NETLABS_NOSAADM_FOLDER>', 'SHADOWID=<CVS_FOLDER>;OBJECTID=<CVS_FOLDER_SHADOW>;', 'U');
  103.     rcx = SysCreateObject( 'WPShadow',  'Dummy',                                            '<NETLABS_NOSAADM_FOLDER>', 'SHADOWID='CvsArchiveRoot';OBJECTID=<NETLABS_NOSAADM_ARCHIVEROOT_SHADOW>;', 'U');
  104.  
  105.     IF (CvsWorkRoot \= '') THEN
  106.        rcx = SysCreateObject( 'WPShadow',  'Dummy',                                         '<NETLABS_NOSAADM_FOLDER>', 'SHADOWID='CvsWorkRoot';OBJECTID=<NETLABS_NOSAADM_WORKROOT_SHADOW>;', 'U');
  107.     ELSE
  108.        rcx = SysDestroyObject( '<NETLABS_NOSAADM_WORKROOT_SHADOW>;');
  109.  
  110.     IF (CvsSnapshotRoot \= '') THEN
  111.        rcx = SysCreateObject( 'WPShadow',  'Dummy',                                         '<NETLABS_NOSAADM_FOLDER>', 'SHADOWID='CvsSnapshotRoot';OBJECTID=<NETLABS_NOSAADM_SNAPSHOTROOT_SHADOW>;', 'U');
  112.     ELSE
  113.        rcx = SysDestroyObject( '<NETLABS_NOSAADM_SNAPSHOTROOT_SHADOW>;');
  114.  
  115.     IF (CvsBackupRoot \= '') THEN
  116.        rcx = SysCreateObject( 'WPShadow',  'Dummy',                                         '<NETLABS_NOSAADM_FOLDER>', 'SHADOWID='CvsBackupRoot';OBJECTID=<NETLABS_NOSAADM_BACKUPROOT_SHADOW>;', 'U');
  117.     ELSE
  118.        rcx = SysDestroyObject( '<NETLABS_NOSAADM_BACKUPROOT_SHADOW>;');
  119.  
  120.     /* create window objects */
  121.     IdBase = '<NETLABS_NOSAADM_#';
  122.     IdBaseLen = LENGTH(IdBase);
  123.     ArchiveObjects = '';
  124.     DO i = 1 TO ArchiveDir.0
  125.        ThisObject = IdBase''TRANSLATE(ArchiveDir.i)'>';
  126.        rcx = SysCreateObject( 'WPProgram', ArchiveDir.i'^Administrator^OS/2 Window' , '<NETLABS_NOSAADM_FOLDER>', HelpPage'=4;PROGTYPE=WINDOWABLEVIO;EXENAME=*;PARAMETERS=/K 'CallDir'\CVSENV.CMD' ArchiveDir.i';STARTUPDIR='CvsArchiveRoot'\'ArchiveDir.i';OBJECTID='ThisObject';', 'U');
  127.        ArchiveObjects = ArchiveObjects ThisObject;
  128.     END;
  129.  
  130.     /* delete obsolete objects */
  131.     rcx  = SysIni(, 'PM_Workplace:Location', 'ALL:', 'Objects.');
  132.     IF (rc \= 'ERROR:') THEN
  133.     DO i = 1 TO Objects.0
  134.        IF (LEFT( Objects.i, IdBaseLen) = IdBase) THEN
  135.           IF ( WORDPOS( Objects.i, ArchiveObjects) = 0) THEN
  136.              rcx = SysDestroyObject( Objects.i);
  137.     END;
  138.  
  139.     /* bring folder to foreground */
  140.     rcx = SysOpenObject( '<NETLABS_NOSAADM_FOLDER>', 'DEFAULT', 1);
  141.     rcx = SysOpenObject( '<NETLABS_NOSAADM_FOLDER>', 'DEFAULT', 1);
  142.  
  143.  END;
  144.  
  145.  /* exit */
  146.  IF (rc \= ERROR.NO_ERROR) THEN
  147.  DO
  148.     SAY CmdName': Error:' ErrorMsg;
  149.     'PAUSE'
  150.  END;
  151.  EXIT( rc);
  152.  
  153. /* ------------------------------------------------------------------------- */
  154. HALT:
  155.  SAY;
  156.  SAY 'Interrupted by user.';
  157.  EXIT(ERROR.GEN_FAILURE);
  158.  
  159. /* ------------------------------------------------------------------------- */
  160. ShowHelp: PROCEDURE EXPOSE (GlobalVars)
  161.  
  162.  SAY Title;
  163.  SAY;
  164.  
  165.  PARSE SOURCE . . ThisFile
  166.  
  167.  DO i = 1 TO 3
  168.     rc = LINEIN(ThisFile);
  169.  END;
  170.  
  171.  ThisLine = LINEIN(Thisfile);
  172.  DO WHILE (ThisLine \= ' */')
  173.     SAY SUBSTR(ThisLine, 7);
  174.     ThisLine = LINEIN(Thisfile);
  175.  END;
  176.  
  177.  rc = LINEOUT(Thisfile);
  178.  
  179.  RETURN('');
  180.  
  181.  
  182. /* ------------------------------------------------------------------------- */
  183. GetCalldir: PROCEDURE
  184. PARSE SOURCE . . CallName
  185.  CallDir = FILESPEC('Drive', CallName)||FILESPEC('Path', CallName);
  186.  RETURN(LEFT(CallDir, LENGTH(CallDir) - 1));
  187.  
  188. /* ========================================================================= */
  189. ReadIniValue: PROCEDURE
  190. PARSE ARG IniFile, IniAppname, IniKeyName
  191.  
  192.  IniValue = SysIni(IniFile, IniAppname, IniKeyName);
  193.  IF (IniValue = 'ERROR:') THEN
  194.     IniValue = '';
  195.  
  196.  IF ((IniValue \= '') & (RIGHT(IniValue, 1) = "00"x)) THEN
  197.     IniValue = LEFT( IniValue, LENGTH( IniValue) - 1);
  198.  
  199.  RETURN( IniValue);
  200.  
  201.