home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / nosac106.zip / cvswps.cmd < prev    next >
OS/2 REXX Batch file  |  2001-12-15  |  27KB  |  548 lines

  1. /*
  2.  *      CVSWPS.CMD - NOSA Client - V1.06 C.Langanke for Netlabs 1999,2001
  3.  *
  4.  *      Syntax: CVSWPS [/Reset]
  5.  *
  6.  *      /Reset - deletes old folder before rebuilding
  7.  *
  8.  *      Creates WPS folder with program objects for access
  9.  *      to the Netlabs Open Source Archive with CVS.
  10.  *
  11.  *      The created program objects require cvsenv.cmd!
  12.  */
  13. /* First comment is used as help text */
  14.  
  15.  SIGNAL ON HALT
  16.  
  17.  TitleLine = STRIP(SUBSTR(SourceLine(2), 3));
  18.  PARSE VAR TitleLine CmdName'.CMD 'Info
  19.  Title     = CmdName Info
  20.  
  21.  env          = 'OS2ENVIRONMENT';
  22.  TRUE         = (1 = 1);
  23.  FALSE        = (0 = 1);
  24.  Redirection  = '> NUL 2>&1';
  25.  '@ECHO OFF'
  26.  
  27.  /* OS/2 errorcodes */
  28.  ERROR.NO_ERROR           =  0;
  29.  ERROR.INVALID_FUNCTION   =  1;
  30.  ERROR.FILE_NOT_FOUND     =  2;
  31.  ERROR.PATH_NOT_FOUND     =  3;
  32.  ERROR.ACCESS_DENIED      =  5;
  33.  ERROR.NOT_ENOUGH_MEMORY  =  8;
  34.  ERROR.INVALID_FORMAT     = 11;
  35.  ERROR.INVALID_DATA       = 13;
  36.  ERROR.NO_MORE_FILES      = 18;
  37.  ERROR.WRITE_FAULT        = 29;
  38.  ERROR.READ_FAULT         = 30;
  39.  ERROR.GEN_FAILURE        = 31;
  40.  ERROR.INVALID_PARAMETER  = 87;
  41.  ERROR.ENVVAR_NOT_FOUND   = 203;
  42.  
  43.  GlobalVars = 'Title CmdName env TRUE FALSE Redirection ERROR.';
  44.  SAY;
  45.  
  46.  /* show help */
  47.  ARG Parm .
  48.  IF (POS('?', Parm) > 0) THEN
  49.  DO
  50.     rc = ShowHelp();
  51.     EXIT(ERROR.INVALID_PARAMETER);
  52.  END;
  53.  
  54.  /* load RexxUtil */
  55.  CALL RxFuncAdd    'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs';
  56.  CALL SysLoadFuncs;
  57.  
  58.  /* Defaults */
  59.  GlobalVars  = GlobalVars 'ErrorMsg IniAppName CallDir ArchiveFile PrivateFile Archive.',
  60.                           'IconDir BitmapDir fIsWarp4 FolderIcons HelpPage IdBase',
  61.                           'CvsExe CvsServer CvsWorkRoot CvsHome';
  62.  rc = ERROR.NO_ERROR;
  63.  
  64.  IniAppName  = 'NOSAC';
  65.  ErrorMsg    = '';
  66.  CallDir     = GetCalldir();
  67.  
  68.  Archive.    = '';
  69.  Archive.0   = 0;
  70.  
  71.  IconDir     = CallDir'\ico';
  72.  BitmapDir   = CallDir'\bmp';
  73.  fIsWarp4    = (SysOS2Ver() >= 2.40);
  74.  
  75.  IF (fIsWarp4) THEN
  76.     FolderIcons = 'ICONFILE='IconDir'\FOLDER4.ICO;ICONNFILE=1,'IconDir'\FOLDER4O.ICO'
  77.  ELSE
  78.     FolderIcons = 'ICONFILE='IconDir'\FOLDER3.ICO;ICONNFILE=1,'IconDir'\FOLDER3O.ICO'
  79.  HelpPage = 'HELPLIBRARY='CallDir'\NOSAC.HLP;HELPPANEL';
  80.  IdBase = '<NETLABS_NOSAC_#';
  81.  
  82.  ArchiveName  = '';
  83.  ArchiveDescr = '';
  84.  fReset       = FALSE;
  85.  
  86.  
  87.  DO UNTIL (TRUE)
  88.     /* read environment */
  89.     CvsExe         = ReadIniValue(, IniAppName, 'CVS_EXE');
  90.     CvsServer      = ReadIniValue(, IniAppName, 'CVS_SERVER');
  91.     CvsWorkRoot    = ReadIniValue(, IniAppName, 'CVS_WORKROOT');
  92.     CvsHome        = ReadIniValue(, IniAppName, 'CVS_HOME');
  93.     IF (CvsWorkRoot = '') THEN
  94.     DO
  95.        ErrorMsg = 'the root directory for working directories on your computer is not defined.';
  96.        rc = ERROR.ENVVAR_NOT_FOUND
  97.        LEAVE;
  98.     END;
  99.  
  100.     /* get commandline parms */
  101.      PARSE ARG Parms
  102.      DO i = 1 TO WORDS( Parms);
  103.         ThisParm = WORD( Parms, i);
  104.         CheckParm = TRANSLATE( ThisParm);
  105.  
  106.         SELECT
  107.            WHEN (POS( CheckParm, '/RESET') = 1) THEN
  108.               fReset = TRUE;
  109.     
  110.            OTHERWISE
  111.            DO
  112.               
  113.               IF (ArchiveName = '') THEN
  114.                  ArchiveName = ThisParm;
  115.               ELSE
  116.                  ArchiveDescr = ArchiveDescr ThisParm;
  117.            END;
  118.         END;
  119.      END;
  120.      IF (rc \= ERROR.NO_ERROR) THEN
  121.         LEAVE;
  122.  
  123.     /* read in public archives */
  124.     rcx = ReadArchiveList( CallDir'\archives.lst', 'PUBLIC');
  125.  
  126.     /* read in private archives - ignore error */
  127.     rcx = ReadArchiveList( CallDir'\private.lst', 'PRIVATE');
  128.  
  129.     /* select what to do */
  130.     SELECT
  131.  
  132.        WHEN (ArchiveName = '') THEN
  133.           /* create main folder, if no archive specified */
  134.           rc = CreateMainFolder( fReset);
  135.  
  136.        OTHERWISE
  137.        DO
  138.           p = WORDPOS( ArchiveName, Archive._List);
  139.           /* archive tag valid ? */
  140.           IF (p = 0) THEN
  141.           DO
  142.              ErrorMsg = 'specified archive' ArchiveName ' is invalid.';
  143.              rc = ERROR.INVALID_PARAMETER;
  144.              LEAVE;
  145.           END;
  146.  
  147.           /* create archive folder */
  148.           rc = CreateArchiveFolder( Archive.p, Archive.p.Name, fReset);
  149.        END;
  150.  
  151.     END;
  152.  
  153.  END;
  154.  
  155.  /* exit */
  156.  IF (rc \= ERROR.NO_ERROR) THEN
  157.  DO
  158.     SAY CmdName': Error:' ErrorMsg;
  159.     'PAUSE'
  160.  END;
  161.  EXIT( rc);
  162.  
  163. /* ------------------------------------------------------------------------- */
  164. HALT:
  165.  SAY 'Interrupted by user.';
  166.  EXIT(ERROR.GEN_FAILURE);
  167.  
  168. /* ------------------------------------------------------------------------- */
  169. ShowHelp: PROCEDURE EXPOSE (GlobalVars)
  170.  
  171.  SAY Title;
  172.  SAY;
  173.  
  174.  PARSE SOURCE . . ThisFile
  175.  
  176.  DO i = 1 TO 3
  177.     rc = LINEIN(ThisFile);
  178.  END;
  179.  
  180.  ThisLine = LINEIN(Thisfile);
  181.  DO WHILE (ThisLine \= ' */')
  182.     SAY SUBSTR(ThisLine, 7);
  183.     ThisLine = LINEIN(Thisfile);
  184.  END;
  185.  
  186.  rc = LINEOUT(Thisfile);
  187.  
  188.  RETURN('');
  189.  
  190. /* ------------------------------------------------------------------------- */
  191. GetCalldir: PROCEDURE
  192. PARSE SOURCE . . CallName
  193.  CallDir = FILESPEC('Drive', CallName)||FILESPEC('Path', CallName);
  194.  RETURN(LEFT(CallDir, LENGTH(CallDir) - 1));
  195.  
  196. /* ------------------------------------------------------------------------- */
  197. FileExist: PROCEDURE
  198.  PARSE ARG FileName
  199.  
  200.  RETURN(STREAM(Filename, 'C', 'QUERY EXISTS') > '');
  201.      
  202. /* ------------------------------------------------------------------------- */
  203. GetDrivePath: PROCEDURE
  204.  PARSE ARG FileName
  205.  
  206.  FullPath = FILESPEC('D', FileName)||FILESPEC('P', FileName);
  207.  IF (FullPath \= '') THEN
  208.     RETURN(LEFT(FullPath, LENGTH(FullPath) - 1));
  209.  ELSE
  210.     RETURN('');
  211.  
  212. /* ========================================================================= */
  213. ReadIniValue: PROCEDURE
  214. PARSE ARG IniFile, IniAppname, IniKeyName
  215.  
  216.  IniValue = SysIni(IniFile, IniAppname, IniKeyName);
  217.  IF (IniValue = 'ERROR:') THEN
  218.     IniValue = '';
  219.  
  220.  IF ((IniValue \= '') & (RIGHT(IniValue, 1) = "00"x)) THEN
  221.     IniValue = LEFT( IniValue, LENGTH( IniValue) - 1);
  222.  
  223.  RETURN( IniValue);
  224.  
  225. /* ------------------------------------------------------------------------- */
  226. DirExist: PROCEDURE
  227.  PARSE ARG Dirname
  228.  
  229.  IF (Dirname = '') THEN
  230.     RETURN(0);
  231.  
  232.  /* use 'QUERY EXISTS' with root directories (???) */
  233.  IF (RIGHT(DirName, 2) = ':\') THEN
  234.    RETURN(STREAM(Dirname, 'C', 'QUERY EXISTS') \= '');
  235.  
  236.  /* query other directories this way */
  237.  IF ((STREAM(Dirname, 'C', 'QUERY EXISTS') = '') &,
  238.      (STREAM(Dirname, 'C', 'QUERY DATETIME') \= '')) THEN
  239.     RETURN(1);
  240.  ELSE
  241.     RETURN(0);
  242.  
  243. /* ========================================================================= */
  244. OpenInForeground: PROCEDURE
  245.  PARSE ARG Id;
  246.  DO i = 1 TO 2
  247.     rc = SysOpenObject( Id, 'DEFAULT', 1);
  248.  END;
  249.  RETURN( rc);
  250.  
  251. /* ========================================================================= */
  252. MakePath: PROCEDURE EXPOSE (GlobalVars)
  253.  PARSE ARG PathName
  254.  
  255.  PARSE SOURCE . . CallName
  256.  FileName = SUBSTR( CallName, LASTPOS( '\', CallName) + 1);
  257.  'XCOPY' CallName PathName'\' Redirection;
  258.  rcx = SysFileDelete( PathName'\'FileName);
  259.  RETURN( rc);
  260.  
  261. /* ========================================================================= */
  262. GetInfTitle: PROCEDURE
  263.  ARG File
  264.  
  265.  Title = '';
  266.  
  267.  DO UNTIL (1)
  268.     /* Titel lesen */
  269.     Title = CHARIN( File, 108, 64);
  270.     rcx = STREAM(File, 'C', 'CLOSE');
  271.  
  272.     /* Nullbytes abschneiden */
  273.     zeroPos = POS("00"x, Title);
  274.     IF (zeroPos \= 0) THEN
  275.        Title = LEFT(Title, zeroPos - 1);
  276.  END;
  277.  
  278.  RETURN(Title);
  279.  
  280.  
  281. /* ========================================================================= */
  282. ReadArchiveList: PROCEDURE EXPOSE (GlobalVars)
  283.  PARSE ARG ListFile, ListType;
  284.  
  285.  rc          = ERROR.NO_ERROR;
  286.  
  287.  DO UNTIL (TRUE)
  288.     /* des file exist */ 
  289.     IF (\FileExist( ListFile)) THEN
  290.     DO
  291.        ErrorMsg = 'cannot find the file' ListFile; 
  292.        rc = ERROR.FILE_NOT_FOUND;
  293.        LEAVE;
  294.     END;
  295.  
  296.     /* read in all archives */
  297.     OldValue = Archive.0;
  298.     /* CALL CHAROUT, 'Reading' ListFile '...'; */
  299.     rcx = STREAM( ListFile, 'C', 'OPEN READ');
  300.     DO WHILE (LINES( ListFile))
  301.        ThisLine = STRIP( LINEIN(ListFile));
  302.        IF (ThisLine = '' ) THEN ITERATE;
  303.        IF (LEFT(ThisLine,1) = ';' ) THEN ITERATE;
  304.  
  305.        /* if description is missing, append last part of path */
  306.        IF (WORDS( ThisLine) < 2) THEN
  307.        DO
  308.           PathWords = TRANSLATE( ThisLine, ' ', '/');
  309.           ThisLine = ThisLine WORD( PathWords, WORDS( PathWords));
  310.        END;
  311.        IF (WORDS( ThisLine) < 2) THEN ITERATE;
  312.  
  313.        /* store data */
  314.        p         = Archive.0 + 1;
  315.        Archive.0 = p;
  316.        PARSE VAR ThisLine ThisRoot ThisName
  317.        ThisName = STRIP(ThisName);
  318.        PARSE VAR ThisRoot ThisServer':'ThisDirectory;
  319.        ThisTag = FILESPEC('N', ThisDirectory);
  320.        Archive.p      = STRIP( ThisTag);
  321.        Archive.p.Name = STRIP( ThisName);
  322.  
  323.        Archive._List           = Archive._List ThisTag;
  324.        Archive.ListType._List  = Archive.ListType._List ThisTag;
  325.     END;
  326.     rcx = STREAM( ListFile, 'C', 'CLOSE');
  327.  
  328.     /* SAY 'Ok.' Archive.0  - OldValue 'archives found.'; */
  329.  END;
  330.  
  331.  RETURN( rc);
  332.  
  333. /* ========================================================================= */
  334. CreateMainFolder: PROCEDURE EXPOSE (GlobalVars)
  335.  PARSE ARG fReset;
  336.  
  337.  rc          = ERROR.NO_ERROR;
  338.  fShowHelp   = FALSE;
  339.  
  340.  
  341.  DO UNTIL (TRUE)
  342.  
  343.  
  344.     /* get cvs books */
  345.     CvsBook.  = '';
  346.     CvsBook.  = 0;
  347.     IF (CvsExe \= '') THEN
  348.     DO
  349.  
  350.        Filename = GetDrivePath( CvsExe)'\..\book\*.INF';
  351.        Options  = 'OF';
  352.        rc = SysFileTree(FileName, 'File.', Options);
  353.        IF (rc \= ERROR.NO_ERROR) THEN
  354.        DO
  355.           SAY CmdName': Fehler in SysFileTree: Nicht gen■gend Hauptspeicher.';
  356.           EXIT(ERROR.NOT_ENOUGH_MEMORY);
  357.        END;
  358.  
  359.        DO i = 1 TO File.0
  360.           b = CvsBook.0 + 1;
  361.           CvsBook.0 = b;
  362.           CvsBook.b = STREAM( File.i, 'C', 'QUERY EXISTS');
  363.        END;
  364.     END;
  365.  
  366.     /* delete old folder ? */
  367.     IF (fReset) THEN
  368.     DO
  369.        rcx = SysDestroyObject( '<NETLABS_NOSAC_INFO_NET_FOLDER>');
  370.        rcx = SysDestroyObject( '<NETLABS_NOSAC_ARCHIVES_FOLDER>');
  371.        rcx = SysDestroyObject( '<NETLABS_NOSAC_FOLDER>');
  372.     END;
  373.  
  374.     IF (SysSetObjectData( '<NETLABS_NOSAC_FOLDER>', ';')) THEN
  375.     DO
  376.        CALL CHAROUT, 'Updating folder for Netlabs Open Source Archive Client ... ';
  377.        fShowHelp = FALSE;
  378.     END;
  379.     ELSE
  380.     DO
  381.        CALL CHAROUT, 'Creating folder for Netlabs Open Source Archive Client ... ';
  382.        fShowHelp = TRUE;
  383.     END;
  384.  
  385.     /* create main folder and main objects */
  386.     StaticIconSetup = 'LOCKEDINPLACE=YES;NOCOPY=YES;NOLINK=YES;NOSHADOW=YES;NOMOVE=YES;'
  387.     SELECT
  388.        WHEN (fIsWarp4) THEN
  389.        DO
  390.           TreeFolderSetup = 'DEFAULTSORT=0;DEFAULTVIEW=TREE;SHOWALLINTREEVIEW=YES;';
  391.           y1stRow   = '34';
  392.           y2ndRow   = '10';
  393.        END;
  394.        OTHERWISE
  395.        DO
  396.           TreeFolderSetup = '';
  397.        y1stRow   = '37'
  398.        y2ndRow   = '10';
  399.        END;
  400.     END;
  401.  
  402.     rcx = SysCreateObject( 'WPFolder',    'OS/2 Netlabs^Open Source Archive^Client',                 '<WP_DESKTOP>',                       HelpPage'=8;CCVIEW=NO;ICONFONT=8.Helv;ICONVIEWPOS=8 10 60 50;BACKGROUND='BitmapDir'\nllogo.bmp,N;'FolderIcons';OBJECTID=<NETLABS_NOSAC_FOLDER>;', 'U');
  403.     rcx = SysCreateObject( 'WPProgram',   'Edit^CVS configuration',                                  '<NETLABS_NOSAC_FOLDER>',             StaticIconSetup';'HelpPage'=7;ICONPOS=51,'y2ndRow';PROGTYPE=PM;MAXIMIZED=YES;EXENAME=E.EXE;PARAMETERS='CvsHome'\.cvsrc;OBJECTID=<NETLABS_NOSAC_CONFIG_CVS>;', 'U');
  404.     rcx = SysCreateObject( 'WPFolder',    'Select from available^OS/2 Netlabs^Open Source Archives', '<NETLABS_NOSAC_FOLDER>',             StaticIconSetup';'HelpPage'=6;ICONPOS=38,'y2ndRow';ICONVIEWPOS=73 25 26 50;ICONVIEW=MINI,NONFLOWED;CCVIEW=NO;MENUBAR=NO;STATUSBAR=NO;ALWAYSSORT=YES;DEFAULTSORT=0;ICONFILE='IconDir'\REBUILD.ICO;OBJECTID=<NETLABS_NOSAC_SELECT_FOLDER>;', 'U');
  405.     rcx = SysCreateObject( 'WPProgram',   'View the^OS/2 Netlabs^Open Source Archive list' ,         '<NETLABS_NOSAC_FOLDER>',             StaticIconSetup';'HelpPage'=5;ICONPOS=23,'y2ndRow';PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'CallDir'\cvsenv.cmd * $SHOWLIST;ICONFILE='IconDir'\VIEW.ICO;OBJECTID=<NETLABS_NOSAC_VIEWLIST>;', 'U');
  406.     rcx = SysCreateObject( 'WPProgram',   'Update the^Open Source Archive list^from OS/2 Netlabs',   '<NETLABS_NOSAC_FOLDER>',             StaticIconSetup';'HelpPage'=4;ICONPOS=07,'y2ndRow';PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'CallDir'\cvsenv.cmd * $GETLIST$;ICONFILE='IconDir'\UPDATE.ICO;OBJECTID=<NETLABS_NOSAC_UPDATELIST>;', 'U');
  407.     rcx = SysCreateObject( 'WPFolder',    'OS/2 Netlabs^Open Source Archive^Information',            '<NETLABS_NOSAC_FOLDER>',             StaticIconSetup';'HelpPage'=3;ICONPOS=48,'y1stRow';'TreeFolderSetup'ALWAYSSORT=YES;MENUBAR=NO;STATUSBAR=NO;ICONRESOURCE=60,PMWP;OBJECTID=<NETLABS_NOSAC_INFO_FOLDER>;', 'U');
  408.     rcx = SysCreateObject( 'WPFolder',    'OS/2 Netlabs^Open Source Archive^Connections',            '<NETLABS_NOSAC_FOLDER>',             StaticIconSetup';'HelpPage'=2;ICONPOS=27,'y1stRow';'TreeFolderSetup'ALWAYSSORT=YES;MENUBAR=NO;STATUSBAR=NO;ICONRESOURCE=87,PMWP;OBJECTID=<NETLABS_NOSAC_CONNECT_FOLDER>;', 'U');
  409.     rcx = SysCreateObject( 'WPFolder',    'Selected^OS/2 Netlabs^Open Source Archives',              '<NETLABS_NOSAC_FOLDER>',             StaticIconSetup';'HelpPage'=1;ICONPOS=07,'y1stRow';CCVIEW=NO;ALWAYSSORT=YES;DEFAULTSORT=NAME;'FolderIcons';ICONVIEWPOS=5 70 78 22;OBJECTID=<NETLABS_NOSAC_ARCHIVES_FOLDER>;', 'U');
  410.  
  411.     IF (fIsWarp4) THEN
  412.     DO
  413.        /* fill information folder with subfolders and objects, plus shadows in system information folder and subfolders */
  414.        rcx = SysCreateObject( 'WPUrlFolder', 'Development',                                          '<NETLABS_NOSAC_CONNECT_FOLDER>',     'SHOWALLINTREEVIEW=YES;OBJECTID=<NETLABS_NOSAC_CONNECT_DEV_FOLDER>;', 'U');
  415.        rcx = SysCreateObject( 'WPUrl',       'Netlabs Homepage',                                     '<NETLABS_NOSAC_CONNECT_DEV_FOLDER>', 'LOCATOR=http://www.netlabs.org;OBJECTID=<NETLABS_HOMEPAGE>;', 'U');
  416.        rcx = SysCreateObject( 'WPUrl',       'Netlabs Open Source Archive Homepage',                 '<NETLABS_NOSAC_CONNECT_DEV_FOLDER>', 'LOCATOR=http://www.netlabs.org/nosa;OBJECTID=<NETLABS_NOSA_HOMEPAGE>;', 'U');
  417.  
  418.        /* create own URL folder for development under main URL Folder */
  419.        rcx = SysCreateObject( 'WPUrlFolder', 'Development',                                           '<WP_COOLURLSFOLDER>',                'SHOWALLINTREEVIEW=YES;OBJECTID=<URLF_DEV>', 'U');
  420.        rcx = SysCreateObject( 'WPShadow',    '.',                                                     '<URLF_DEV>',                         'SHADOWID=<NETLABS_HOMEPAGE>;OBJECTID=<NETLABS_HOMEPAGE_SHADOW>;', 'U');
  421.        rcx = SysCreateObject( 'WPShadow',    '.',                                                     '<URLF_DEV>',                         'SHADOWID=<NETLABS_NOSA_HOMEPAGE>;OBJECTID=<NETLABS_NOSA_HOMEPAGE_SHADOW>;', 'U');
  422.  
  423.        rcx = SysCreateObject( 'WPFolder',    'Read Me',                                               '<NETLABS_NOSAC_INFO_FOLDER>'   ,     'SHOWALLINTREEVIEW=YES;OBJECTID=<NETLABS_NOSAC_INFO_README_FOLDER>;', 'U');
  424.        rcx = SysCreateObject( 'WPProgram',   'OS/2 Netlabs^Open Source Archive Client',               '<NETLABS_NOSAC_INFO_README_FOLDER>', 'PROGTYPE=PM;EXENAME=VIEW.EXE;PARAMETERS='CallDir'\nosac.inf "OS/2 Netlabs Open Source";ICONFILE='IconDir'\HELP.ICO;OBJECTID=<NETLABS_NOSAC_INFO_README>;', 'U');
  425.        rcx = SysCreateObject( 'WPShadow',    '.',                                                     '<WP_READMEFOLDER>',                  'SHADOWID=<NETLABS_NOSAC_INFO_README>;OBJECTID=<NETLABS_NOSAC_INFO_README_SHADOW>;', 'U');
  426.     END;
  427.     ELSE
  428.     DO
  429.        /* put URLs directly in NOSAC connection folder */
  430.        rcx = SysCreateObject( 'WPProgram',   'Netlabs Homepage',                                   '<NETLABS_NOSAC_CONNECT_FOLDER>',  'PROGTYPE=PM;EXENAME=NETSCAPE.EXE;PARAMETERS=http://www.netlabs.org;OBJECTID=<NETLABS_HOMEPAGE>;', 'U');
  431.        rcx = SysCreateObject( 'WPProgram',   'Netlabs Open Source Archive Homepage',               '<NETLABS_NOSAC_CONNECT_FOLDER>',  'PROGTYPE=PM;EXENAME=NETSCAPE.EXE;PARAMETERS=http://www.netlabs.org/nosa;OBJECTID=<NETLABS_NOSA_HOMEPAGE>;', 'U');
  432.  
  433.        /* put NOSAC INF directly in NOSAC info folder and shadow in system info folder */
  434.        rcx = SysCreateObject( 'WPProgram',   'OS/2 Netlabs^Open Source Archive Client',            '<NETLABS_NOSAC_INFO_FOLDER>',     'PROGTYPE=PM;EXENAME=VIEW.EXE;PARAMETERS='CallDir'\nosac.inf "OS/2 Netlabs Open Source";ICONFILE='IconDir'\HELP.ICO;OBJECTID=<NETLABS_NOSAC_INFO_README>;', 'U');
  435.        rcx = SysCreateObject( 'WPShadow',    '.',                                                  '<WP_INFO',                        'SHADOWID=<NETLABS_NOSAC_INFO_README>;OBJECTID=<NETLABS_NOSAC_INFO_README_SHADOW>;', 'U');
  436.     END;
  437.  
  438.     IF (CvsBook.0 > 0)  THEN
  439.     DO
  440.        rcx = SysCreateObject( 'WPFolder',    'Reference and Commands',                             '<NETLABS_NOSAC_INFO_FOLDER>'   ,     'SHOWALLINTREEVIEW=YES;OBJECTID=<NETLABS_NOSAC_INFO_CMDREF_FOLDER>;', 'U');
  441.        DO b = 1 TO CvsBook.0
  442.           BookName  = FILESPEC( 'N', CvsBook.b);
  443.           IdName    = TRANSLATE( LEFT( BookName, LENGTH( BookName) - 4));
  444.           BookTitle = GetInfTitle( CvsBook.b);
  445.           IF (BookTitle = '') THEN
  446.              BookTitle = 'CVS Client/Server Protocol';
  447.           rcx = SysCreateObject( 'WPProgram', BookTitle,                                           '<NETLABS_NOSAC_INFO_CMDREF_FOLDER>', 'PROGTYPE=PM;EXENAME=VIEW.EXE;PARAMETERS='CvsBook.b';OBJECTID=<NETLABS_NOSAC_INFO_CMDREF_'IdName'>;', 'U');
  448.           rcx = SysCreateObject( 'WPShadow',  '.',                                                 '<WP_REFCMDFOLDER>',                  'SHADOWID=<NETLABS_NOSAC_INFO_CMDREF_'IdName'>;OBJECTID=<NETLABS_NOSAC_INFO_CMDREF_'IdName'_SHADOW>;', 'U');
  449.        END;
  450.     END;
  451.  
  452.     /* create select icon per archive */
  453.     DO i = 1 TO Archive.0;
  454.        ThisProjectId = TRANSLATE( Archive.i);
  455.  
  456.        TypePrivate = 'PRIVATE';
  457.        IF (WORDPOS( Archive.i, Archive.TypePrivate._List) > 0) THEN
  458.           IconName = 'REBUILDP.ICO'
  459.        ELSE
  460.           IconName = 'REBUILD.ICO'
  461.        rcx = SysCreateObject( 'WPProgram',  'select:' Archive.i.Name , '<NETLABS_NOSAC_SELECT_FOLDER>', 'PROGTYPE=WINDOWABLEVIO;EXENAME='CallDir'\cvswps.cmd;PARAMETERS='Archive.i Archive.i.Name';ICONFILE='IconDir'\'IconName';OBJECTID=<NETLABS_NOSAC_SELECT_#'ThisProjectId';', 'R');
  462.     END;
  463.  
  464.     /* open folder to foreground */
  465.     rcx = SysOpenObject( '<NETLABS_NOSAC_FOLDER>', 'DEFAULT', 1);
  466.     rcx = SysOpenObject( '<NETLABS_NOSAC_FOLDER>', 'DEFAULT', 1);
  467.  
  468.     /* folders for selection */
  469.     IF (Archive.0 > 0) THEN
  470.     DO
  471.        rcx = OpenInForeground( '<NETLABS_NOSAC_ARCHIVES_FOLDER>');
  472.        rcx = OpenInForeground( '<NETLABS_NOSAC_SELECT_FOLDER>');
  473.  
  474.        /* resort select folder */
  475.        rcx = SysSetObjectData( '<NETLABS_NOSAC_SELECT_FOLDER>', 'ALWAYSSORT=NO;');
  476.        rcx = SysSetObjectData( '<NETLABS_NOSAC_SELECT_FOLDER>', 'ALWAYSSORT=YES;');
  477.     END;
  478.  
  479.     /* open help to foreground on install */
  480.     IF (fShowHelp) THEN
  481.     DO
  482.        rcx = OpenInForeground( '<NETLABS_NOSAC_INFO_README>');
  483.     END;
  484.  
  485.     /* done */
  486.     rc = ERROR.NO_ERROR;
  487.     SAY 'Ok.';
  488.  
  489.  END;
  490.  
  491.  RETURN( rc);
  492.  
  493. /* ========================================================================= */
  494. CreateArchiveFolder: PROCEDURE EXPOSE (GlobalVars)
  495.  PARSE ARG Archive, ArchiveName, fReset;
  496.  
  497.  rc = ERROR.NO_ERROR;
  498.  
  499.  DO UNTIL (TRUE)
  500.  
  501.     /* create folder per archive */
  502.     Archive.iBase = IdBase''TRANSLATE( Archive);
  503.     ThisFolderId    = Archive.iBase'_FOLDER>';
  504.  
  505.     IF (SysSetObjectData( ThisFolderId, ';')) THEN
  506.        CALL CHAROUT, 'Updating';
  507.     ELSE
  508.        CALL CHAROUT, 'Creating';
  509.     CALL CHAROUT, ' folder for Netlabs Open Source Archive' ArchiveName '... ';
  510.  
  511.     /* create program objects for archive */
  512.     Option = 'U';
  513.     Archive.iBase = IdBase''TRANSLATE( Archive);
  514.     rcx = SysCreateObject( 'WPFolder',  'Netlabs Archive^'ArchiveName ,       '<NETLABS_NOSAC_ARCHIVES_FOLDER>',    HelpPage'=10;DEFAULTSORT=2;ALWAYSSORT=YES;ICONVIEWPOS=13 42 78 36;'FolderIcons';OBJECTID='ThisFolderId';', 'U');
  515.     rcx = SysCreateObject( 'WPProgram', ArchiveName'^OS/2 Window',            ThisFolderId ,                        HelpPage'=23;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/K 'CallDir'\CVSENV.CMD' Archive';STARTUPDIR='CvsWorkRoot'\'Archive';OBJECTID='ArchiveBase'_WINDOW>;', Option);
  516.     rcx = SysCreateObject( 'WPProgram', ArchiveName'^Fix Snapshot',           ThisFolderId ,                        HelpPage'=25;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'CallDir'\CVSENV.CMD' Archive' $FIXSNAPSHOT & PAUSE;STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\FIXSNAP.ICO;OBJECTID='ArchiveBase'_FIXSNAPSHOT>;', Option);
  517.     rcx = SysCreateObject( 'WPProgram', ArchiveName'^Generate Change Report', ThisFolderId ,                        HelpPage'=24;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'CallDir'\CVSENV.CMD' Archive' $REPORT;STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\REPORT.ICO;OBJECTID='ArchiveBase'_REPORT>;', Option);
  518.     rcx = SysCreateObject( 'WPProgram', ArchiveName'^View modules',           ThisFolderId ,                        HelpPage'=22;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'CallDir'\CVSENV.CMD' Archive' $MODULES;STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\VIEW.ICO;OBJECTID='ArchiveBase'_MODULES>;', Option);
  519.     rcx = SysCreateObject( 'WPProgram', ArchiveName'^Remove file',            ThisFolderId ,                        HelpPage'=21;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'CallDir'\CVSENV.CMD' Archive' $REMOVE;STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\REMOVE.ICO;OBJECTID='ArchiveBase'_REMOVE>;', Option);
  520.     rcx = SysCreateObject( 'WPProgram', ArchiveName'^Tag file',               ThisFolderId ,                        HelpPage'=20;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'CallDir'\CVSENV.CMD' Archive' $TAG [Enter tag name] [Enter filename(s)/module(s)];STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\TAG.ICO;OBJECTID='ArchiveBase'_TAG>;', Option);
  521.     rcx = SysCreateObject( 'WPProgram', ArchiveName'^Commit file changes',    ThisFolderId ,                        HelpPage'=19;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'CallDir'\CVSENV.CMD' Archive' $COMMIT [Enter filename(s)/module(s)];STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\COMMIT.ICO;OBJECTID='ArchiveBase'_COMMIT>;', Option);
  522.     rcx = SysCreateObject( 'WPProgram', ArchiveName'^Merge to local files',   ThisFolderId ,                        HelpPage'=18;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'CallDir'\CVSENV.CMD' Archive' $UPDATE [Enter filename(s)/module(s)];STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\MERGE.ICO;OBJECTID='ArchiveBase'_MERGE>;', Option);
  523.     rcx = SysCreateObject( 'WPProgram', ArchiveName'^Update local files',     ThisFolderId ,                        HelpPage'=17;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'CallDir'\CVSENV.CMD' Archive' $UPDATE [Enter filename(s)/module(s)];STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\UPDATE.ICO;OBJECTID='ArchiveBase'_UPDATE>;', Option);
  524.     rcx = SysCreateObject( 'WPProgram', ArchiveName'^Add new file',           ThisFolderId ,                        HelpPage'=16;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'CallDir'\CVSENV.CMD' Archive' $ADD [Enter filename(s)/module(s)];STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\ADD.ICO;OBJECTID='ArchiveBase'_ADD>;', Option);
  525.     rcx = SysCreateObject( 'WPProgram', ArchiveName'^Query file status',      ThisFolderId ,                        HelpPage'=15;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'CallDir'\CVSENV.CMD' Archive' $STATUS [Enter filename(s)/module(s)];STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\STATUS.ICO;OBJECTID='ArchiveBase'_STATUS>;', Option);
  526.     rcx = SysCreateObject( 'WPProgram', ArchiveName'^View file log' ,         ThisFolderId ,                        HelpPage'=14;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'CallDir'\CVSENV.CMD' Archive' $LOG [Enter filename(s)/module(s)];STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\LOG.ICO;OBJECTID='ArchiveBase'_LOG>;', Option);
  527.     rcx = SysCreateObject( 'WPProgram', ArchiveName'^Checkout file' ,         ThisFolderId ,                        HelpPage'=13;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'CallDir'\CVSENV.CMD' Archive' $CHECKOUT [Enter filename(s)/module(s)];STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\CHECKOUT.ICO;OBJECTID='ArchiveBase'_CHECKOUT>;', Option);
  528.     rcx = SysCreateObject( 'WPProgram', ArchiveName'^Logout',                 ThisFolderId ,                        HelpPage'=12;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'CallDir'\CVSENV.CMD' Archive' !LOGOUT;STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\LOGOUT.ICO;OBJECTID='ArchiveBase'_LOGOUT>;', Option);
  529.     rcx = SysCreateObject( 'WPProgram', ArchiveName'^Login',                  ThisFolderId ,                        HelpPage'=11;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'CallDir'\CVSENV.CMD' Archive' !LOGIN;STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\LOGIN.ICO;OBJECTID='ArchiveBase'_LOGIN>;', Option);
  530.  
  531.     /* create working dir for archive */
  532.     IF (CvsWorkRoot \= '') THEN
  533.     DO
  534.        WorkDir = CvsWorkRoot'\'Archive;
  535.        IF (\DirExist( WorkDir)) THEN
  536.           rcx = MakePath( WorkDir);
  537.        rcx = SysCreateObject( 'WPShadow', '.',   ThisFolderId , 'SHADOWID='WorkDir';OBJECTID='Archive.iBase'_WORKDIR_SHADOW>;', 'U');
  538.     END;
  539.  
  540.     /* done */
  541.     rc = ERROR.NO_ERROR;
  542.     SAY 'Ok.';
  543.  
  544.  END;
  545.  
  546.  RETURN( rc);
  547.  
  548.