home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / runcm140.zip / install.cmd < prev    next >
OS/2 REXX Batch file  |  1999-01-01  |  10KB  |  298 lines

  1. /*
  2.  *      INSTALL.CMD - RUNCMD V1.40 - C.Langanke 1999
  3.  *
  4.  *      installs a WPS folder for RUNCMD
  5.  *
  6.  *      Specify Parameter /B for batch processing. This will
  7.  *      prevent INSTALL.CMD from opening the folder and the readme.
  8.  */
  9. /* The first comment is used as online help text */
  10.  
  11.  SIGNAL ON HALT NAME HALT
  12.  
  13.  TitleLine = STRIP(SUBSTR(SourceLine(2), 3));
  14.  PARSE VAR TitleLine CmdName'.CMD 'Info
  15.  env       = 'OS2ENVIRONMENT';
  16.  TRUE      = (1 = 1);
  17.  FALSE     = (0 = 1);
  18.  CrLf      = '0d0a'x;
  19.  Redirection = '1>NUL 2>&1';
  20.  '@ECHO OFF'
  21.  Title = CmdName Info;
  22.  
  23.  /* some OS/2 Error codes */
  24.  ERROR.NO_ERROR           =  0;
  25.  ERROR.INVALID_FUNCTION   =  1;
  26.  ERROR.FILE_NOT_FOUND     =  2;
  27.  ERROR.PATH_NOT_FOUND     =  3;
  28.  ERROR.ACCESS_DENIED      =  5;
  29.  ERROR.NOT_ENOUGH_MEMORY  =  8;
  30.  ERROR.INVALID_FORMAT     = 11;
  31.  ERROR.INVALID_DATA       = 13;
  32.  ERROR.NO_MORE_FILES      = 18;
  33.  ERROR.WRITE_FAULT        = 29;
  34.  ERROR.READ_FAULT         = 30;
  35.  ERROR.SHARING_VIOLATION  = 32;
  36.  ERROR.GEN_FAILURE        = 31;
  37.  ERROR.INVALID_PARAMETER  = 87;
  38.  
  39.  GlobalVars = 'Title CmdName env TRUE FALSE CrLf Redirection ERROR.';
  40.  
  41.  /* load RexxUtil */
  42.  CALL RxFuncAdd    'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs';
  43.  CALL SysLoadFuncs;
  44.  
  45.  /* defaults */
  46.  GlobalVars = GlobalVars 'BootDrive MessageFile MessageFileVersion'
  47.  Flag.Batch         = FALSE;
  48.  CallDir            = GetCallDir();
  49.  BootDrive          = GetInstDrive();
  50.  ConfigFile         = BootDrive'\CONFIG.SYS';
  51.  ExecFile           = BootDrive'\_RUNCMD.CMD';
  52.  
  53.  /* determine message file */
  54.  LanguageTag        = GetLanguageTag();
  55.  MessageFileVersion = '1.40';
  56.  MessageFile        = CallDir'\run'LanguageTag'.msg';
  57.  
  58.  IF (\FileExist(MessageFile)) THEN
  59.     MessageFile = CallDir'\runeng.msg';
  60.  IF (\FileExist(MessageFile)) THEN
  61.  DO
  62.     SAY  'Cannot find message file.';
  63.     EXIT(ERROR.FILE_NOT_FOUND);
  64.  END;
  65.  
  66.  
  67.  SIGNAL ON HALT NAME HALT_NLS
  68.  
  69.  DO UNTIL (TRUE)
  70.     /* get parms */
  71.     ARG Parms
  72.     IF (POS('/B', Parms) > 0) THEN
  73.        Flag.Batch = TRUE;
  74.  
  75.     /* show Title */
  76.     SAY;
  77.     SAY GetNlsString('Title');
  78.     SAY;
  79.  
  80.     /* is RUNCMD already added to config.sys ? */
  81.     rc = SysFileSearch( 'RUNCMD.EXE', ConfigFile, 'Line.');
  82.     IF (rc \= ERROR.NO_ERROR) THEN
  83.     DO
  84.        SAY  GetNlsString('ErrorSysFileSearch', rc);
  85.        LEAVE;
  86.     END;
  87.     IF (Line.0 > 0) THEN
  88.        SAY  CmdName':' GetNlsString('ErrorAlreadyIncluded', ConfigFile);
  89.     ELSE
  90.     DO
  91.        rc = LINEOUT(ConfigFile, '');
  92.        IF (rc \= ERROR.NO_ERROR) THEN
  93.        DO
  94.           SAY  CmdName':' GetNlsString('ErrorCannotAdd', ConfigFile);
  95.           SAY  '    CALL='CallDir'\RUNCMD.EXE';
  96.        END;
  97.        ELSE
  98.        DO
  99.           rc = LINEOUT(ConfigFile, 'REM ****** RUNCMD ****');
  100.           rc = LINEOUT(ConfigFile, '    CALL='CallDir'\RUNCMD.EXE');
  101.           rc = LINEOUT(ConfigFile, '');
  102.           rc = LINEOUT(ConfigFile);
  103.           SAY  CmdName':' GetNlsString('InfoAdded', ConfigFile);
  104.        END;
  105.     END;
  106.  
  107.     /* create object */
  108.     SAY;
  109.     CALL CHAROUT, GetNlsString('InfoCreateObjects') '... ';
  110.     rc = SysCreateObject( 'WPFolder',  GetNlsString('IconFolder'),   '<WP_DESKTOP>',      'CCVIEW=NO;OBJECTID=<RUNCMD_FOLDER>;', 'U');
  111.     rc = SysCreateObject( 'WPProgram', GetNlsString('IconProgram'),  '<RUNCMD_FOLDER>',   'CCVIEW=NO;PROGTYPE=WINDOWABLEVIO;EXENAME='CallDir'\RUNCMD.EXE;OBJECTID=<RUNCMD_PROGRAM>;', 'U');
  112.     rc = SysCreateObject( 'WPProgram', GetNlsString('IconHelp'),     '<RUNCMD_FOLDER>',   'CCVIEW=NO;PROGTYPE=WINDOWABLEVIO;EXENAME=*;STARTUPDIR='CallDir';PARAMETERS=/C RUNCMD /H & PAUSE;OBJECTID=<RUNCMD_HELP>;', 'U');
  113.     rc = SysCreateObject( 'WPProgram', GetNlsString('IconReadme'),   '<RUNCMD_FOLDER>',   'CCVIEW=NO;PROGTYPE=PM;EXENAME=E.EXE;PARAMETERS='CallDir'\Readme;OBJECTID=<RUNCMD_README>;', 'U');
  114.     rc = SysCreateObject( 'WPProgram', GetNlsString('IconSetBreak'), '<RUNCMD_FOLDER>',   'CCVIEW=NO;PROGTYPE=WINDOWABLEVIO;MINIMIZED=YES;EXENAME=*;PARAMETERS=/C TYPE NUL>RUNCMD || ECHO ;OBJECTID=<RUNCMD_SETBREAK>;', 'U');
  115.     rc = SysCreateObject( 'WPProgram', GetNlsString('IconDelBreak'), '<RUNCMD_FOLDER>',   'CCVIEW=NO;PROGTYPE=WINDOWABLEVIO;MINIMIZED=YES;EXENAME=*;PARAMETERS=/C DEL RUNCMD || ECHO ;OBJECTID=<RUNCMD_DELBREAK>;', 'U');
  116.     rc = SysCreateObject( 'WPProgram', GetNlsString('IconEditExec'), '<RUNCMD_FOLDER>',   'CCVIEW=NO;PROGTYPE=PM;EXENAME=E.EXE;PARAMETERS='ExecFile';OBJECTID=<RUNCMD_EDITEXEC>;', 'U');
  117.     SAY 'Ok.';
  118.  
  119.     IF (\Flag.Batch) THEN
  120.     DO
  121.        rc = SysOpenObject('<RUNCMD_FOLDER>', 'DEFAULT', 1);
  122.        rc = SysOpenObject('<RUNCMD_FOLDER>', 'DEFAULT', 1);
  123.        rc = SysOpenObject('<RUNCMD_README>', 'DEFAULT', 1);
  124.        rc = SysOpenObject('<RUNCMD_README>', 'DEFAULT', 1);
  125.     END;
  126.  
  127.     /* create template for RUNCMD.CMD */
  128.     IF (\FileExist(ExecFile)) THEN
  129.     DO
  130.        rc = LINEOUT( ExecFile, '@ECHO OFF');
  131.        rc = LINEOUT( ExecFile, ' SETLOCAL');
  132.        rc = LINEOUT( ExecFile, '');
  133.        rc = LINEOUT( ExecFile, ': - 'GetNlsString('ExecFileComment'));
  134.        rc = LINEOUT( ExecFile);
  135.     END;
  136.  END;
  137.  
  138.  EXIT(rc);
  139.  
  140. /* ------------------------------------------------------------------------- */
  141.  
  142. HALT_NLS:
  143.  SAY;
  144.  SAY GetNlsString('Halt');
  145.  EXIT(ERROR.GEN_FAILURE);
  146.  
  147. HALT:
  148.  SAY;
  149.  SAY 'Interrupted by user.';
  150.  EXIT(ERROR.GEN_FAILURE);
  151.  
  152. /* ------------------------------------------------------------------------- */
  153. ShowHelp: PROCEDURE EXPOSE (GlobalVars)
  154.  
  155.  SAY;
  156.  SAY Title
  157.  SAY;
  158.  
  159.  PARSE SOURCE . . ThisFile
  160.  
  161.  /* skip header */
  162.  DO i = 1 TO 3
  163.     rc = LINEIN(ThisFile);
  164.  END;
  165.  
  166.  /* show help */
  167.  DO WHILE (ThisLine \= ' */')
  168.     ThisLine = LINEIN(Thisfile);
  169.     SAY SUBSTR(ThisLine, 7);
  170.  END;
  171.  
  172.  /* close file */
  173.  rc = LINEOUT(Thisfile);
  174.  
  175.  RETURN('');
  176.  
  177. /* ========================================================================= */
  178. PullVariable: PROCEDURE EXPOSE (GlobalVars)
  179.  PARSE ARG Default, Message
  180.  
  181.  SAY;
  182.  CALL CHAROUT, Message '['Default'] : ';
  183.  PARSE PULL PullVar;
  184.  IF (LENGTH(PullVar) > 0) THEN
  185.     RETURN(PullVar);
  186.  ELSE
  187.     RETURN(Default);
  188.  
  189. /* ------------------------------------------------------------------------- */
  190. GetCalldir: PROCEDURE  EXPOSE (GlobalVars)
  191. PARSE SOURCE . . CallName
  192.  CallDir = FILESPEC('Drive', CallName)||FILESPEC('Path', CallName);
  193.  RETURN(LEFT(CallDir, LENGTH(CallDir) - 1));
  194.  
  195. /* ------------------------------------------------------------------------- */
  196. FileExist: PROCEDURE
  197.  PARSE ARG FileName
  198.  
  199.  RETURN(STREAM(Filename, 'C', 'QUERY EXISTS') > '');
  200.  
  201. /* ------------------------------------------------------------------------- */
  202. GetInstDrive: PROCEDURE EXPOSE env
  203.  ARG DirName, EnvVarName
  204.  
  205.  /* Default: OS2 directory */
  206.  IF (DirName = '') THEN DirName = '\OS2';
  207.  
  208.  /* Default: PATH  */
  209.  IF (EnvVarName = '') THEN EnvVarName = 'PATH';
  210.  
  211.  PathValue = VALUE(EnvVarName,,env);
  212.  
  213.  DirName = ':'DirName';';
  214.  EntryPos = POS(DirName, PathValue) - 1;
  215.  IF (EntryPos = -1) THEN
  216.     RETURN('');
  217.  InstDrive = SUBSTR(PathValue, EntryPos, 2);
  218.  RETURN(InstDrive);
  219.  
  220. /* ------------------------------------------------------------------------- */
  221. LoadMsgString: PROCEDURE  EXPOSE (GlobalVars)
  222.  PARSE ARG MsgId, MessageFile, Parm1, Parm2, Parm3, Parm4, Parm5, Parm6, Parm7, Parm8, Parm9;
  223.  
  224.  Message = SysGetMessage(MsgId, MessageFile, Parm1, Parm2, Parm3, Parm4, Parm5, Parm6, Parm7, Parm8, Parm9);
  225.  RETURN(LEFT(Message, LENGTH(Message) - 2));
  226.  
  227. /* ========================================================================= */
  228. GetNlsString: PROCEDURE EXPOSE (GlobalVars)
  229.  PARSE ARG MessageId, Parm1, Parm2, Parm3, Parm4, Parm5, Parm6, Parm7, Parm8, Parm9;
  230.  
  231.  /* default values */
  232.  Message     = '*** Message' Id 'not found. ***';
  233.  
  234.  /* default values */
  235.  MessageFileIdText = 'RUNCMD_MESSAGEFILE';
  236.  IF (MessageFileVersion \= '') THEN
  237.     MessageFileIdText = MessageFileIdText'_'MessageFileVersion;
  238.  
  239.  /* load MessageIds and YesNo Keys*/
  240.  MessageFileInfo        = LoadMsgString(0, MessageFile)
  241.  PARSE VAR MessageFileInfo MessageFileId MessageLanguage MessageFileKeys MessageListcount
  242.  IF ((MessageFileIdText \= MessageFileId) | (LENGTH(MessageFileKeys) \= 2))THEN
  243.  DO
  244.     SAY 'Invalid message file' MessageFile;
  245.     EXIT(ERROR.INVALID_DATA);
  246.  END;
  247.  
  248.  /* load Messagelist*/
  249.  MessageList = '';
  250.  DO i = 1 TO MessageListcount
  251.     MessageList = MessageList LoadMsgString(i, MessageFile)
  252.  END;
  253.  
  254.  /* handle special id YesNoKeys */
  255.  IF (MessageId = 'YESNOKEYS') THEN
  256.     RETURN(MessageFileKeys);
  257.  
  258.  /* read message ids */
  259.  MessagePos   = WORDPOS(TRANSLATE(MessageId), TRANSLATE(MessageList));
  260.  IF (MessagePos > 0) THEN
  261.  DO
  262.     ThisMessage = LoadMsgString(MessagePos + MessageListcount, MessageFile, Parm1, Parm2, Parm3, Parm4, Parm5, Parm6, Parm7, Parm8, Parm9);
  263.     IF (ThisMessage \= '') THEN
  264.        Message = ThisMessage;
  265.  END;
  266.  
  267.  RETURN(Message);
  268.  
  269. /* ========================================================================= */
  270. GetLanguageTag: PROCEDURE EXPOSE (GlobalVars)
  271.  
  272.  LanguageTag = 'eng';
  273.  SyslevelFile = BootDrive'\OS2\INSTALL\SYSLEVEL.OS2';
  274.  
  275.  ValidIds     = '0EG';
  276.  LanguageTags = 'eng eng deu';
  277.  
  278.  DO UNTIL (TRUE)
  279.     CurrCsd = CHARIN(SyslevelFile, 45, 8);
  280.     IF (CurrCsd = '') THEN
  281.     DO
  282.        SAY 'Cannot determine language of OS/2 version.';
  283.        EXIT(ERROR.INVALID_DATA);
  284.     END;
  285.     LanguageId = SUBSTR( CurrCsd, 3, 1);
  286.     LanguageIndex = POS( LanguageId, ValidIds);
  287.     IF (LanguageIndex = 0) THEN
  288.        LEAVE;
  289.  
  290.     LanguageTag = WORD( LanguageTags, LanguageIndex);
  291.  
  292.  END;
  293.  
  294.  /* cleanup */
  295.  rc =  STREAM(SyslevelFile, 'C', 'CLOSE');
  296.  RETURN(LanguageTag);
  297.  
  298.