/* * CVSWPS.CMD - NOSA Client V1.10 - cla@clanganke.de - 1999-2008 * * Syntax: CVSWPS [/REMOVE] * * /REMOVE - delete NOSAC folder and all objects * * Creates WPS folder with program objects for access * to the netlabs.org Open Source Archive with CVS. * * The created program objects require cvsenv.cmd! */ /* First comment is used as help text */ /* CHECKVER */ /* ***** BEGIN LICENSE BLOCK ***** * Version: CDDL 1.0 * * The contents of this file are subject to the COMMON DEVELOPMENT AND * DISTRIBUTION LICENSE (CDDL) Version 1.0 (the "License"); you may not use * this file except in compliance with the License. You may obtain a copy of * the License at http://www.sun.com/cddl/ * * Software distributed under the License is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License * for the specific language governing rights and limitations under the * License. * * The Original Code is * "netlabs.org Open Source Archive Administrator/Client" * * The Original Distribution Package is named * "netlabs.org Open Source Archive Administrator/Client" * and maintained and distributed by the Initial Developer * and/or netlabs.org only. * * In addition to the CDDL the following applies: * If you modify the Original Code, you may distribute it only * as a part of a distribution package where * - the name of the package, created directories or * OS2.INI entries do not contain any of the terms * - "netlabs.org Open Source Archive" * - "NOSA" * - "NOSAC" * - "NOSAADM" * - neither netlabs.org nor the Initial Developer is stated as * the vendor or originator of the resulting Distribution Package, * which contains the Modified Code. * * The Initial Developer of the Original Code is * netlabs.org: Christian Langanke . * Portions created by the Initial Developer are Copyright (C) 1999-2008 * the Initial Developer. All Rights Reserved. * * Contributor(s): * * ***** END LICENSE BLOCK ***** */ SIGNAL ON HALT TitleLine = STRIP(SUBSTR(SourceLine(2), 3)); PARSE VAR TitleLine CmdName'.CMD 'Info Title = CmdName Info env = 'OS2ENVIRONMENT'; TRUE = (1 = 1); FALSE = (0 = 1); Redirection = '> NUL 2>&1'; '@ECHO OFF' /* OS/2 errorcodes */ ERROR.NO_ERROR = 0; ERROR.INVALID_FUNCTION = 1; ERROR.FILE_NOT_FOUND = 2; ERROR.PATH_NOT_FOUND = 3; ERROR.ACCESS_DENIED = 5; ERROR.NOT_ENOUGH_MEMORY = 8; ERROR.INVALID_FORMAT = 11; ERROR.INVALID_DATA = 13; ERROR.NO_MORE_FILES = 18; ERROR.WRITE_FAULT = 29; ERROR.READ_FAULT = 30; ERROR.GEN_FAILURE = 31; ERROR.INVALID_PARAMETER = 87; ERROR.ENVVAR_NOT_FOUND = 203; GlobalVars = 'Title CmdName env TRUE FALSE Redirection ERROR.'; SAY; /* show help */ ARG Parm . IF (POS('?', Parm) > 0) THEN DO rc = ShowHelp(); EXIT(ERROR.INVALID_PARAMETER); END; /* load RexxUtil */ CALL RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'; CALL SysLoadFuncs; /* Defaults */ GlobalVars = GlobalVars 'ErrorMsg IniAppName CallDir BaseDir ArchiveFile PrivateFile Archive.', 'IconDir BitmapDir FolderBackground fIsWarp4 fIseCS FolderIcons HelpIcon HelpPage IdBase. ', 'CvsExe CvsServer CvsWorkRoot CvsHome'; rc = ERROR.NO_ERROR; IniAppName = 'NOSAC'; ErrorMsg = ''; Archive. = ''; Archive.0 = 0; CallDir = GetCalldir(); BaseDir = CallDir'\..'; IconDir = BaseDir'\ico'; BitmapDir = BaseDir'\bmp'; FolderBackground = 'BACKGROUND='STREAM( BitmapDir'\nltiled.bmp', 'C', 'QUERY EXISTS')',T;'; fIsWarp4 = (SysOS2Ver() >= 2.40); fIseCS = (VALUE( 'OS',,env) = 'ecs'); SELECT WHEN (fIseCS) THEN DO FolderIconStem = 'foldere'; HelpIconStem = 'helpe'; END; WHEN (fIsWarp4) THEN DO FolderIconStem = 'folder4'; HelpIconStem = 'help'; END; OTHERWISE DO FolderIconStem = 'folder3'; HelpIconStem = 'help'; END; END; FolderIcons = 'ICONFILE='IconDir'\'FolderIconStem'.ico;ICONNFILE=1,'IconDir'\'FolderIconStem'o.ico' HelpIcon = 'ICONFILE='IconDir'\'HelpIconStem'.ico'; HelpPage = 'HELPLIBRARY='BaseDir'\INF\NOSAC.HLP;HELPPANEL'; IdBase._Folder = ''; IF (SysSetObjectData( FolderId, ';')) THEN DO rcx = SysIni(, 'PM_Workplace:Location', 'ALL:', 'Objects.'); IF (rc \= 'ERROR:') THEN DO CALL CHAROUT, ' Removing folder for netlabs.org Open Source Archive Client... '; DO i = Objects.0 TO 1 BY -1 PARSE VAR Objects.i WITH (IdBase._Folder)ThisIdPart'>'; IF (ThisIdPart \= '') THEN rcx = SysDestroyObject( Objects.i); END; SAY 'Ok.'; END; END; LEAVE; END; /* read in public archives */ rcx = ReadArchiveList( BaseDir'\archives.lst', 'PUBLIC'); /* read in private archives - ignore error */ rcx = ReadArchiveList( BaseDir'\private.lst', 'PRIVATE'); /* select what to do */ SELECT WHEN (ArchiveName = '') THEN /* create main folder, if no archive specified */ rc = CreateMainFolder(); OTHERWISE DO p = WORDPOS( ArchiveName, Archive._List); /* archive tag valid ? */ IF (p = 0) THEN DO ErrorMsg = 'specified archive' ArchiveName ' is invalid.'; rc = ERROR.INVALID_PARAMETER; LEAVE; END; /* create archive folder */ rc = CreateArchiveFolder( Archive.p, Archive.p.Name); END; END; END; /* exit */ IF (rc \= ERROR.NO_ERROR) THEN DO SAY CmdName': Error:' ErrorMsg; 'PAUSE' END; EXIT( rc); /* ------------------------------------------------------------------------- */ HALT: SAY 'Interrupted by user.'; EXIT(ERROR.GEN_FAILURE); /* ------------------------------------------------------------------------- */ ShowHelp: PROCEDURE EXPOSE (GlobalVars) SAY Title; SAY; PARSE SOURCE . . ThisFile DO i = 1 TO 3 rc = LINEIN(ThisFile); END; ThisLine = LINEIN(Thisfile); DO WHILE (ThisLine \= ' */') SAY SUBSTR(ThisLine, 7); ThisLine = LINEIN(Thisfile); END; rc = LINEOUT(Thisfile); RETURN(''); /* ------------------------------------------------------------------------- */ GetCalldir: PROCEDURE PARSE SOURCE . . CallName CallDir = FILESPEC('Drive', CallName)||FILESPEC('Path', CallName); RETURN(LEFT(CallDir, LENGTH(CallDir) - 1)); /* ------------------------------------------------------------------------- */ FileExist: PROCEDURE PARSE ARG FileName RETURN(STREAM(Filename, 'C', 'QUERY EXISTS') > ''); /* ------------------------------------------------------------------------- */ GetDrivePath: PROCEDURE PARSE ARG FileName FullPath = FILESPEC('D', FileName)||FILESPEC('P', FileName); IF (FullPath \= '') THEN RETURN(LEFT(FullPath, LENGTH(FullPath) - 1)); ELSE RETURN(''); /* ========================================================================= */ ReadIniValue: PROCEDURE PARSE ARG IniFile, IniAppname, IniKeyName IniValue = SysIni(IniFile, IniAppname, IniKeyName); IF (IniValue = 'ERROR:') THEN IniValue = ''; IF ((IniValue \= '') & (RIGHT(IniValue, 1) = "00"x)) THEN IniValue = LEFT( IniValue, LENGTH( IniValue) - 1); RETURN( IniValue); /* ------------------------------------------------------------------------- */ DirExist: PROCEDURE PARSE ARG Dirname IF (Dirname = '') THEN RETURN(0); /* use 'QUERY EXISTS' with root directories (???) */ IF (RIGHT(DirName, 2) = ':\') THEN RETURN(STREAM(Dirname, 'C', 'QUERY EXISTS') \= ''); /* query other directories this way */ IF ((STREAM(Dirname, 'C', 'QUERY EXISTS') = '') &, (STREAM(Dirname, 'C', 'QUERY DATETIME') \= '')) THEN RETURN(1); ELSE RETURN(0); /* ========================================================================= */ OpenInForeground: PROCEDURE PARSE ARG Id; DO i = 1 TO 2 rc = SysOpenObject( Id, 'DEFAULT', 1); END; RETURN( rc); /* ========================================================================= */ MakePath: PROCEDURE EXPOSE (GlobalVars) PARSE ARG PathName PARSE SOURCE . . CallName FileName = SUBSTR( CallName, LASTPOS( '\', CallName) + 1); 'XCOPY' CallName PathName'\' Redirection; rcx = SysFileDelete( PathName'\'FileName); RETURN( rc); /* ========================================================================= */ GetInfTitle: PROCEDURE ARG File Title = ''; DO UNTIL (1) /* Titel lesen */ Title = CHARIN( File, 108, 64); rcx = STREAM(File, 'C', 'CLOSE'); /* Nullbytes abschneiden */ zeroPos = POS("00"x, Title); IF (zeroPos \= 0) THEN Title = LEFT(Title, zeroPos - 1); END; RETURN(Title); /* ========================================================================= */ ReadArchiveList: PROCEDURE EXPOSE (GlobalVars) PARSE ARG ListFile, ListType; rc = ERROR.NO_ERROR; DO UNTIL (TRUE) /* des file exist */ IF (\FileExist( ListFile)) THEN DO ErrorMsg = 'cannot find the file' ListFile; rc = ERROR.FILE_NOT_FOUND; LEAVE; END; /* read in all archives */ OldValue = Archive.0; /* CALL CHAROUT, 'Reading' ListFile '...'; */ rcx = STREAM( ListFile, 'C', 'OPEN READ'); DO WHILE (LINES( ListFile)) ThisLine = STRIP( LINEIN(ListFile)); IF (ThisLine = '' ) THEN ITERATE; IF (LEFT(ThisLine,1) = ';' ) THEN ITERATE; /* if description is missing, append last part of path */ IF (WORDS( ThisLine) < 2) THEN DO PathWords = TRANSLATE( ThisLine, ' ', '/'); ThisLine = ThisLine WORD( PathWords, WORDS( PathWords)); END; IF (WORDS( ThisLine) < 2) THEN ITERATE; /* store data */ p = Archive.0 + 1; Archive.0 = p; PARSE VAR ThisLine ThisRoot ThisName ThisName = STRIP(ThisName); PARSE VAR ThisRoot ThisServer':'ThisDirectory; ThisTag = FILESPEC('N', ThisDirectory); Archive.p = STRIP( ThisTag); Archive.p.Name = STRIP( ThisName); Archive._List = Archive._List ThisTag; Archive.ListType._List = Archive.ListType._List ThisTag; END; rcx = STREAM( ListFile, 'C', 'CLOSE'); /* SAY 'Ok.' Archive.0 - OldValue 'archives found.'; */ END; RETURN( rc); /* ========================================================================= */ CreateMainFolder: PROCEDURE EXPOSE (GlobalVars) rc = ERROR.NO_ERROR; fShowHelp = FALSE; DO UNTIL (TRUE) /* get cvs books */ CvsBook. = ''; CvsBook. = 0; IF (CvsExe \= '') THEN DO /* assume all books in inf subdir one level up */ Filename = CvsExe'\..\..\*.INF'; Options = 'OFS'; rc = SysFileTree(FileName, 'File.', Options); IF (rc \= ERROR.NO_ERROR) THEN DO SAY CmdName': Fehler in SysFileTree: Nicht genþgend Hauptspeicher.'; EXIT( ERROR.NOT_ENOUGH_MEMORY); END; DO i = 1 TO File.0 /* is it a CVS book ? */ ThisFile = STREAM( File.i, 'C', 'QUERY EXISTS') ThisFilename = TRANSLATE( FILESPEC( 'N', ThisFile)); IF (POS( 'CVS', ThisFilename) = 0) THEN ITERATE; b = CvsBook.0 + 1; CvsBook.0 = b; CvsBook.b = ThisFile; END; END; IF (SysSetObjectData( '', ';')) THEN DO CALL CHAROUT, 'Updating folder for netlabs.org Open Source Archive Client ... '; fShowHelp = FALSE; END; ELSE DO CALL CHAROUT, 'Creating folder for netlabs.org Open Source Archive Client ... '; fShowHelp = TRUE; END; /* create main folder and main objects */ StaticIconSetup = 'NOCOPY=YES;NOLINK=YES;NOSHADOW=YES;NOMOVE=YES;' SELECT WHEN (fIsWarp4) THEN DO TreeFolderSetup = 'DEFAULTSORT=0;DEFAULTVIEW=TREE;SHOWALLINTREEVIEW=YES;'; y1stRow = '34'; y2ndRow = '10'; END; OTHERWISE DO TreeFolderSetup = ''; y1stRow = '37' y2ndRow = '10'; END; END; rcx = SysCreateObject( 'WPFolder', 'netlabs.org^Open Source Archive^Client', '', FolderBackground''HelpPage'=8;CCVIEW=NO;ICONFONT=8.Helv;ICONVIEWPOS=8 10 60 50;'FolderIcons';OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPProgram', 'Edit^CVS configuration', '', StaticIconSetup';'HelpPage'=7;ICONPOS=51,'y2ndRow';PROGTYPE=PM;MAXIMIZED=YES;EXENAME=E.EXE;PARAMETERS='CvsHome'\.cvsrc;OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPFolder', 'Select from available^netlabs.org^Open Source Archives', '', StaticIconSetup';'HelpPage'=6;ICONPOS=38,'y2ndRow';'FolderBackground'ICONVIEWPOS=73 25 26 50;ICONVIEW=MINI,NONFLOWED;CCVIEW=NO;MENUBAR=NO;STATUSBAR=NO;ALWAYSSORT=YES;DEFAULTSORT=0;ICONFILE='IconDir'\REBUILD.ICO;OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPProgram', 'View the^netlabs.org^Open Source Archive list' , '', StaticIconSetup';'HelpPage'=5;ICONPOS=23,'y2ndRow';PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'BaseDir'\cvsenv.cmd * $SHOWLIST;ICONFILE='IconDir'\VIEW.ICO;OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPProgram', 'Update the^Open Source Archive list^from netlabs.org', '', StaticIconSetup';'HelpPage'=4;ICONPOS=07,'y2ndRow';PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'BaseDir'\cvsenv.cmd * $GETLIST$;ICONFILE='IconDir'\UPDATE.ICO;OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPFolder', 'netlabs.org^Open Source Archive^Information', '', StaticIconSetup';'HelpPage'=3;ICONPOS=48,'y1stRow';'FolderBackground''TreeFolderSetup'ALWAYSSORT=YES;MENUBAR=NO;STATUSBAR=NO;ICONRESOURCE=60,PMWP;OBJECTID=;', 'U'); IF (fIseCS) THEN DO OwnLinkfolderId = ''; rcx = SysCreateObject( 'WPFolder', 'netlabs.org^Open Source Archive^Websites', '', StaticIconSetup';'HelpPage'=2;ICONPOS=27,'y1stRow';'FolderBackground''TreeFolderSetup'ALWAYSSORT=YES;MENUBAR=NO;STATUSBAR=NO;ICONRESOURCE=119,ECSWP;OBJECTID='OwnLinkfolderId';', 'U'); END ELSE DO OwnLinkfolderId = ''; rcx = SysCreateObject( 'WPFolder', 'netlabs.org^Open Source Archive^Connections', '', StaticIconSetup';'HelpPage'=2;ICONPOS=27,'y1stRow';'FolderBackground''TreeFolderSetup'ALWAYSSORT=YES;MENUBAR=NO;STATUSBAR=NO;ICONRESOURCE=87,PMWP;OBJECTID='OwnLinkfolderId';', 'U'); END rcx = SysCreateObject( 'WPFolder', 'Selected^netlabs.org^Open Source Archives', '', StaticIconSetup';'HelpPage'=1;ICONPOS=07,'y1stRow';'FolderBackground'CCVIEW=NO;ALWAYSSORT=YES;DEFAULTSORT=NAME;'FolderIcons';ICONVIEWPOS=5 70 78 22;OBJECTID=;', 'U'); IF (fIsWarp4) THEN DO /* fill information folder with subfolders and objects, plus shadows in system information folder and subfolders */ rcx = SysCreateObject( 'WPUrlFolder', 'Development', OwnLinkfolderId, FolderBackground'SHOWALLINTREEVIEW=YES;OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPUrl', 'netlabs.org Homepage', '', 'LOCATOR=http://www.netlabs.org;OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPUrl', 'netlabs.org Open Source Archive Homepage', '', 'LOCATOR=http://www.netlabs.org/nosa;OBJECTID=;', 'U'); /* create own URL folder for development under main URL Folder */ IF (fIseCS) THEN MainURLFolderId = ''; ELSE MainURLFolderId = ''; rcx = SysCreateObject( 'WPUrlFolder', 'Development', MainURLFolderId, FolderBackground'SHOWALLINTREEVIEW=YES;OBJECTID=', 'U'); rcx = SysCreateObject( 'WPShadow', '.', '', 'SHADOWID=;OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPShadow', '.', '', 'SHADOWID=;OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPFolder', 'Read Me', '' , FolderBackground'SHOWALLINTREEVIEW=YES;OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPProgram', 'netlabs.org^Open Source Archive Client', '', 'PROGTYPE=PM;EXENAME=VIEW.EXE;PARAMETERS='BaseDir'\inf\nosac.inf netlabs.org Open Source;'HelpIcon';OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPShadow', '.', '', 'SHADOWID=;OBJECTID=;', 'U'); END; ELSE DO /* put URLs directly in NOSAC connection folder */ rcx = SysCreateObject( 'WPProgram', 'netlabs.org Homepage', OwnLinkfolderId, 'PROGTYPE=PM;EXENAME=NETSCAPE.EXE;PARAMETERS=http://www.netlabs.org;OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPProgram', 'netlabs.org Open Source Archive Homepage', OwnLinkfolderId, 'PROGTYPE=PM;EXENAME=NETSCAPE.EXE;PARAMETERS=http://www.netlabs.org/nosa;OBJECTID=;', 'U'); /* put NOSAC INF directly in NOSAC info folder and shadow in system info folder */ rcx = SysCreateObject( 'WPProgram', 'netlabs.org^Open Source Archive Client', '', 'PROGTYPE=PM;EXENAME=VIEW.EXE;PARAMETERS='BaseDir'\nosac.inf "netlabs.org Open Source";ICONFILE='IconDir'\HELP.ICO;OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPShadow', '.', ';OBJECTID=;', 'U'); END; IF (CvsBook.0 > 0) THEN DO rcx = SysCreateObject( 'WPFolder', 'Reference and Commands', '' , FolderBackground'SHOWALLINTREEVIEW=YES;OBJECTID=;', 'U'); DO b = 1 TO CvsBook.0 BookName = FILESPEC( 'N', CvsBook.b); IdName = TRANSLATE( LEFT( BookName, LENGTH( BookName) - 4)); BookTitle = GetInfTitle( CvsBook.b); IF (BookTitle = '') THEN BookTitle = 'CVS Client/Server Protocol'; rcx = SysCreateObject( 'WPProgram', BookTitle, '', 'PROGTYPE=PM;EXENAME=VIEW.EXE;PARAMETERS='CvsBook.b';OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPShadow', '.', '', 'SHADOWID=;OBJECTID=;', 'U'); END; END; /* create select icon per archive */ DO i = 1 TO Archive.0; ThisProjectId = TRANSLATE( Archive.i); TypePrivate = 'PRIVATE'; IF (WORDPOS( Archive.i, Archive.TypePrivate._List) > 0) THEN IconName = 'REBUILDP.ICO' ELSE IconName = 'REBUILD.ICO' rcx = SysCreateObject( 'WPProgram', 'select:' Archive.i.Name , '', 'PROGTYPE=WINDOWABLEVIO;EXENAME='BaseDir'\install\cvswps.cmd;PARAMETERS='Archive.i Archive.i.Name';ICONFILE='IconDir'\'IconName';OBJECTID='IdBase._Select'#'ThisProjectId'>;', 'R'); END; /* open folder to foreground */ rcx = SysOpenObject( '', 'DEFAULT', 1); rcx = SysOpenObject( '', 'DEFAULT', 1); /* folders for selection */ IF (Archive.0 > 0) THEN DO rcx = OpenInForeground( ''); rcx = OpenInForeground( ''); /* resort select folder */ rcx = SysSetObjectData( '', 'ALWAYSSORT=NO;'); rcx = SysSetObjectData( '', 'ALWAYSSORT=YES;'); END; /* open help to foreground on install */ IF (fShowHelp) THEN DO rcx = OpenInForeground( ''); END; /* done */ rc = ERROR.NO_ERROR; SAY 'Ok.'; END; RETURN( rc); /* ========================================================================= */ CreateArchiveFolder: PROCEDURE EXPOSE (GlobalVars) PARSE ARG Archive, ArchiveName; rc = ERROR.NO_ERROR; DO UNTIL (TRUE) /* create folder per archive */ ArchiveIdBase = IdBase._Folder'#'TRANSLATE( Archive); ThisFolderId = ArchiveIdBase'_FOLDER>'; IF (SysSetObjectData( ThisFolderId, ';')) THEN CALL CHAROUT, 'Updating'; ELSE CALL CHAROUT, 'Creating'; CALL CHAROUT, ' folder for netlabs.org Open Source Archive' ArchiveName '... '; /* create program objects for archive */ Option = 'U'; ArchiveIdBase = IdBase''TRANSLATE( Archive); rcx = SysCreateObject( 'WPFolder', 'netlabs.org Archive^'ArchiveName , '', HelpPage'=10;'FolderBackground'DEFAULTSORT=2;ALWAYSSORT=YES;ICONVIEWPOS=13 42 78 36;'FolderIcons';OBJECTID='ThisFolderId';', 'U'); rcx = SysCreateObject( 'WPProgram', ArchiveName'^Window', ThisFolderId , HelpPage'=23;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/K 'BaseDir'\CVSENV.CMD' Archive';STARTUPDIR='CvsWorkRoot'\'Archive';OBJECTID='ArchiveBase'_WINDOW>;', Option); rcx = SysCreateObject( 'WPProgram', ArchiveName'^Fix Snapshot', ThisFolderId , HelpPage'=25;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'BaseDir'\CVSENV.CMD' Archive' $FIXSNAPSHOT & PAUSE;STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\FIXSNAP.ICO;OBJECTID='ArchiveBase'_FIXSNAPSHOT>;', Option); rcx = SysCreateObject( 'WPProgram', ArchiveName'^View modules', ThisFolderId , HelpPage'=22;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'BaseDir'\CVSENV.CMD' Archive' $MODULES;STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\VIEW.ICO;OBJECTID='ArchiveBase'_MODULES>;', Option); rcx = SysCreateObject( 'WPProgram', ArchiveName'^Remove file', ThisFolderId , HelpPage'=21;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'BaseDir'\CVSENV.CMD' Archive' $REMOVE;STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\REMOVE.ICO;OBJECTID='ArchiveBase'_REMOVE>;', Option); rcx = SysCreateObject( 'WPProgram', ArchiveName'^Tag file', ThisFolderId , HelpPage'=20;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'BaseDir'\CVSENV.CMD' Archive' $TAG [Enter tag name] [Enter filename(s)/module(s)];STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\TAG.ICO;OBJECTID='ArchiveBase'_TAG>;', Option); rcx = SysCreateObject( 'WPProgram', ArchiveName'^Commit file changes', ThisFolderId , HelpPage'=19;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'BaseDir'\CVSENV.CMD' Archive' $COMMIT [Enter filename(s)/module(s)];STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\COMMIT.ICO;OBJECTID='ArchiveBase'_COMMIT>;', Option); rcx = SysCreateObject( 'WPProgram', ArchiveName'^Merge to local files', ThisFolderId , HelpPage'=18;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'BaseDir'\CVSENV.CMD' Archive' $UPDATE [Enter filename(s)/module(s)];STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\MERGE.ICO;OBJECTID='ArchiveBase'_MERGE>;', Option); rcx = SysCreateObject( 'WPProgram', ArchiveName'^Update local files', ThisFolderId , HelpPage'=17;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'BaseDir'\CVSENV.CMD' Archive' $UPDATE [Enter filename(s)/module(s)];STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\UPDATE.ICO;OBJECTID='ArchiveBase'_UPDATE>;', Option); rcx = SysCreateObject( 'WPProgram', ArchiveName'^Add new file', ThisFolderId , HelpPage'=16;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'BaseDir'\CVSENV.CMD' Archive' $ADD [Enter filename(s)/module(s)];STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\ADD.ICO;OBJECTID='ArchiveBase'_ADD>;', Option); rcx = SysCreateObject( 'WPProgram', ArchiveName'^Query file status', ThisFolderId , HelpPage'=15;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'BaseDir'\CVSENV.CMD' Archive' $STATUS [Enter filename(s)/module(s)];STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\STATUS.ICO;OBJECTID='ArchiveBase'_STATUS>;', Option); rcx = SysCreateObject( 'WPProgram', ArchiveName'^View file log' , ThisFolderId , HelpPage'=14;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'BaseDir'\CVSENV.CMD' Archive' $LOG [Enter filename(s)/module(s)];STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\LOG.ICO;OBJECTID='ArchiveBase'_LOG>;', Option); rcx = SysCreateObject( 'WPProgram', ArchiveName'^Checkout file' , ThisFolderId , HelpPage'=13;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'BaseDir'\CVSENV.CMD' Archive' $CHECKOUT [Enter filename(s)/module(s)];STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\CHECKOUT.ICO;OBJECTID='ArchiveBase'_CHECKOUT>;', Option); rcx = SysCreateObject( 'WPProgram', ArchiveName'^Logout', ThisFolderId , HelpPage'=12;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'BaseDir'\CVSENV.CMD' Archive' !LOGOUT;STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\LOGOUT.ICO;OBJECTID='ArchiveBase'_LOGOUT>;', Option); rcx = SysCreateObject( 'WPProgram', ArchiveName'^Login', ThisFolderId , HelpPage'=11;PROGTYPE=WINDOWABLEVIO;MAXIMIZED=YES;EXENAME=cmd.exe;PARAMETERS=/C 'BaseDir'\CVSENV.CMD' Archive' !LOGIN;STARTUPDIR='CvsWorkRoot'\'Archive';ICONFILE='IconDir'\LOGIN.ICO;OBJECTID='ArchiveBase'_LOGIN>;', Option); /* create working dir for archive */ IF (CvsWorkRoot \= '') THEN DO WorkDir = CvsWorkRoot'\'Archive; IF (\DirExist( WorkDir)) THEN rcx = MakePath( WorkDir); rcx = SysCreateObject( 'WPShadow', '.', ThisFolderId , 'SHADOWID='WorkDir';OBJECTID='ArchiveIdBase'_WORKDIR_SHADOW>;', 'U'); END; /* done */ rc = ERROR.NO_ERROR; SAY 'Ok.'; END; RETURN( rc);