/* * CVSWPS.CMD - NOSA Administrator INFO.V1.10 - cla@clanganke.de - 1999-2008 * * Syntax: CVSWPS [/REMOVE] * * /REMOVE - delete NOSAADM folder and all objects * * Creates WPS folder with program objects for access * to the CVS archives hosted with the NOSAADM package. * * 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; /* Defaults */ GlobalVars = GlobalVars ''; IniAppName = 'NOSAADM'; rc = ERROR.NO_ERROR; ErrorMsg = ''; fRemove = FALSE; CallDir = GetCalldir(); BaseDir = CallDir'\..'; IconDir = BaseDir'\ico'; BitmapDir = BaseDir'\bmp'; 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; 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 Administrator... '; 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; /* search working directories */ Filename = CvsArchiveRoot'\CVSROOT'; Options = 'ODS'; rc = SysFileTree(FileName, 'ArchiveDir.', Options); IF (rc \= ERROR.NO_ERROR) THEN DO ErrorMsg = 'Error in SysFileTree: not enough memory.'; rc = ERROR.NOT_ENOUGH_MEMORY; LEAVE; END; /* isolate archive names */ DO i = 1 TO ArchiveDir.0 PathWords = TRANSLATE( ArchiveDir.i, ' ', '\'); ArchiveDir.i = WORD( PathWords, WORDS( PathWords) - 1); END; /* create/update main folder */ HelpPage = 'HELPLIBRARY='BaseDir'\INF\NOSAADM.HLP;HELPPANEL'; rcx = SysCreateObject( 'WPFolder', 'netlabs.org^Open Source Archive^Administration', '', HelpPage'=1;'Background'ALWAYSSORT=YES;DEFAULTSORT=1;CCVIEW=NO;'FolderIcons';OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPProgram', 'Refresh this folder', '', HelpPage'=2;PROGTYPE=WINDOWABLEVIO;EXENAME='BaseDir'\install\CVSWPS.CMD;ICONFILE='IconDir'\rebuild.ico;OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPProgram', 'Create new project archive', '', HelpPage'=3;PROGTYPE=WINDOWABLEVIO;EXENAME='BaseDir'\CVSENV.CMD;PARAMETERS=[New Project:] $INIT;ICONFILE='IconDir'\ADD.ICO;OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPFolder', 'Administrator Windows', '', HelpPage'=4;'Background''AdminWinFolderSetup';CCVIEW=NO;'FolderIcons';OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPFolder', 'Archive Root Directories', '', HelpPage'=6;'Background''RootdirSetup'TREEVIEWPOS=16 69 43 26;CCVIEW=NO;'FolderIcons';OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPProgram', 'netlabs.org^Open Source Archive^Administrator Help', '', HelpPage'=7;PROGTYPE=PM;EXENAME=VIEW.EXE;PARAMETERS='BaseDir'\inf\nosaadm.inf netlabs.org;'HelpIcon';OBJECTID=;', 'U'); rcx = SysCreateObject( 'WPShadow', 'Dummy', '', HelpPage'=8;SHADOWID=;OBJECTID=;', 'U'); /* create/update directory shadow folder */ /* add shadows if objects exist */ rcx = CreateRootShadow( CvsArchiveRoot,, '',, '',, HelpPage'=6;',, RootdirSetup); rcx = CreateRootShadow( CvsWorkRoot,, '',, '',, HelpPage'=6;',, RootdirSetup); rcx = CreateRootShadow( CvsSnapshotRoot,, '',, '',, HelpPage'=6;',, RootdirSetup); rcx = CreateRootShadow( CvsBackupRoot,, '',, '',, HelpPage'=6;',, RootdirSetup); /* create window objects */ IdBase = ''; ThisTitle = ArchiveDir.i' Administrator Window'; ThisLocation = ''; ThisSetup = HelpPage'=5;'AdminWindowSetup'PROGTYPE=WINDOWABLEVIO;EXENAME=*;PARAMETERS=/K 'BaseDir'\CVSENV.CMD' ArchiveDir.i';STARTUPDIR='CvsArchiveRoot'\'ArchiveDir.i';OBJECTID='ThisObject';'; IF (SysSetObjectData( ThisObject, ThisSetup)) THEN rcx = SysMoveObject( ThisObject, ThisLocation); ELSE rcx = SysCreateObject( 'WPProgram', ThisTitle, ThisLocation, ThisSetup, 'U'); ArchiveObjects = ArchiveObjects ThisObject; END; /* delete obsolete objects */ rcx = SysIni(, 'PM_Workplace:Location', 'ALL:', 'Objects.'); IF (rc \= 'ERROR:') THEN DO i = 1 TO Objects.0 IF (LEFT( Objects.i, IdBaseLen) = IdBase) THEN IF ( WORDPOS( Objects.i, ArchiveObjects) = 0) THEN rcx = SysDestroyObject( Objects.i); END; /* bring folder to foreground */ rcx = SysOpenObject( '', 'DEFAULT', 1); rcx = SysOpenObject( '', 'DEFAULT', 1); END; /* exit */ IF (rc \= ERROR.NO_ERROR) THEN DO SAY CmdName': Error:' ErrorMsg; 'PAUSE' END; EXIT( rc); /* ------------------------------------------------------------------------- */ HALT: SAY; 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)); /* ========================================================================= */ 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); /* ========================================================================= */ CreateRootShadow: PROCEDURE PARSE ARG RootDir, ObjectId, Location, HelpSetup, RootDirSetup; SELECT /* if directory name is empty, delete object */ WHEN (RootDir = '') THEN rcx = SysDestroyObject( ObjectId); /* if object exists, apply setup and move it (for old versions !) */ WHEN (SysSetObjectData( ObjectId, RootDirSetup)) THEN rcx = SysMoveObject( ObjectId, Location); /* otherwise create object */ OTHERWISE DO Setup = HelpSetup'SHADOWID='RootDir';OBJECTID='ObjectId';'; rcx = SysCreateObject( 'WPShadow', 'Dummy', Location, Setup); END; END; RETURN('');