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

  1. /*
  2.  *      INSTALL.CMD - Installation program for Reboot/2 V1.0 - C.Langanke 1999
  3.  *
  4.  *      Syntax: WPSINST [/Batch]
  5.  *
  6.  *      installs a WPS folder for instant reboot of your
  7.  *      bootable partitions.
  8.  *
  9.  *      OS/2 Bootmanager is required !
  10.  *      Only bootable partitions are processed.
  11.  *
  12.  *      /Batch  - batch install, neither folder or readme is opened.
  13.  */
  14. /* first comment is online help text */
  15.  
  16.  SIGNAL ON HALT
  17.  
  18.  TitleLine = STRIP(SUBSTR(SourceLine(2), 3));
  19.  PARSE VAR TitleLine CmdName'.CMD 'Info
  20.  Title     = CmdName Info
  21.  
  22.  env          = 'OS2ENVIRONMENT';
  23.  TRUE         = (1 = 1);
  24.  FALSE        = (0 = 1);
  25.  Redirection  = '> NUL 2>&1';
  26.  '@ECHO OFF'
  27.  
  28.  /* OS/2 errorcodes */
  29.  ERROR.NO_ERROR           =  0;
  30.  ERROR.INVALID_FUNCTION   =  1;
  31.  ERROR.FILE_NOT_FOUND     =  2;
  32.  ERROR.PATH_NOT_FOUND     =  3;
  33.  ERROR.ACCESS_DENIED      =  5;
  34.  ERROR.NOT_ENOUGH_MEMORY  =  8;
  35.  ERROR.INVALID_FORMAT     = 11;
  36.  ERROR.INVALID_DATA       = 13;
  37.  ERROR.NO_MORE_FILES      = 18;
  38.  ERROR.WRITE_FAULT        = 29;
  39.  ERROR.READ_FAULT         = 30;
  40.  ERROR.GEN_FAILURE        = 31;
  41.  ERROR.INVALID_PARAMETER  = 87;
  42.  
  43.  GlobalVars = 'Title CmdName env TRUE FALSE Redirection ERROR.';
  44.  SAY;
  45.  SAY Title;
  46.  SAY;
  47.  
  48.  /* show help */
  49.  ARG Parm .
  50.  IF (POS('?', Parm) > 0) THEN
  51.  DO
  52.     rc = ShowHelp();
  53.     EXIT(ERROR.INVALID_PARAMETER);
  54.  END;
  55.  
  56.  /* defaults */
  57.  GlobalVars = GlobalVars 'Partition.';
  58.  fOpenObjects = (POS(Parm, '/BATCH') \= 1);
  59.  
  60.  /* load rexxutils */
  61.  Call RxFuncAdd 'SysLoadFuncs','REXXUTIL','SysLoadFuncs';
  62.  Call SysLoadFuncs;
  63.  
  64.  PARSE SOURCE . . CallName
  65.  CallPath = LEFT( CallName, LASTPOS( '\', CallName) - 1);
  66.  IconPath = CallPath;
  67.  
  68.  /* query system version */
  69.  IF (SysOs2Ver() < 2.40) THEN
  70.     FolderIconBase = IconPath'\folder3';
  71.  ELSE
  72.     FolderIconBase = IconPath'\folder4';
  73.  
  74.  /* determine bartitions from fdisk */
  75.  rc = QueryPartitions();
  76.  
  77.  /* create objects */
  78.  CALL CHAROUT, 'Creating folder for reboot objects ... ';
  79.  rc = SysCreateObject( 'WPFolder', 'Reboot/2', '<WP_OS2SYS>',  'CCVIEW=NO;OBJECTID=<WP_REBOOT_FOLDER>;ICONFILE='FolderIconBase'.ICO;ICONNFILE=1,'FolderIconBase'O.ICO;', 'U');
  80.  rc = SysCreateObject( 'WPShadow', 'Reboot/2', '<WP_DESKTOP>', 'SHADOWID=<WP_REBOOT_FOLDER>;OBJECTID=<WP_REBOOT_FOLDER_SHADOW>;', 'U');
  81.  SAY 'Ok.';
  82.  
  83.  CALL CHAROUT, 'Creating program icons ... ';
  84.  rc = SysCreateObject( 'WPProgram',  'Recreate Reboot Icons ', '<WP_REBOOT_FOLDER>',  'OBJECTID=<WP_REBOOT_RECREATE>;EXENAME='CallName';PARAMETERS=/BATCH;PROGRAMTYPE=WINDOWABLEVIO;MAXIMIZED=YES;NOAUTOCLOSE=YES;', 'U');
  85.  rc = SysCreateObject( 'WPProgram',  'Reboot/2 Readme',        '<WP_REBOOT_FOLDER>',  'OBJECTID=<WP_REBOOT_VIEW_README>;CCVIEW=NO;EXENAME=E.EXE;PARAMETERS='CallPath'\Readme;PROGRAMTYPE=PM;', 'U');
  86.  SAY 'Ok.';
  87.  
  88.  /* collect ids from old reboot icons */
  89.  OldRebootIcons = '';
  90.  IdList = SysIni(, 'PM_Workplace:Location', 'ALL:', 'Id.');
  91.  DO i = 1 TO Id.0
  92.     IF (POS( '<WP_REBOOT_PART_', Id.i) = 1) THEN
  93.        OldRebootIcons = OldRebootIcons Id.i;
  94.  END;
  95.  
  96.  
  97.  /* select partition icon */
  98.  /* first check name */
  99.  /* second, check partition type */
  100.  DO i = 1 TO Partition.0
  101.     ThisPartition = TRANSLATE(Partition.i);
  102.     SELECT
  103.  
  104.        WHEN (Partition.i.type = '83') THEN
  105.           PartitionIcon = IconPath'\linux.ico';
  106.  
  107.        WHEN (POS('OS2', ThisPartition) > 0) THEN
  108.           PartitionIcon = IconPath'\os2.ico';
  109.  
  110.        WHEN (POS('WARP', ThisPartition) > 0) THEN
  111.           PartitionIcon = IconPath'\os2.ico';
  112.  
  113.        WHEN (POS('WIN', ThisPartition) > 0) THEN
  114.           PartitionIcon = IconPath'\win.ico';
  115.  
  116.        WHEN (POS('NT', ThisPartition) > 0) THEN
  117.           PartitionIcon = IconPath'\win.ico';
  118.  
  119.        /* assume type 7 is HPFS and not NTFS ;-) */
  120.        WHEN (Partition.i.type = '07') THEN
  121.           PartitionIcon = IconPath'\os2.ico';
  122.  
  123.        OTHERWISE
  124.           PartitionIcon = IconPath'\dos.ico';
  125.  
  126.     END;
  127.  
  128.     CALL CHAROUT, 'Creating reboot object for partition' Partition.i '... ';
  129.     Id = '<WP_REBOOT_PART_'TRANSLATE(TRANSLATE(Partition.i, '_', ' '))'>';
  130.     rc = SysCreateObject( 'WPProgram',  'Reboot' Partition.i, '<WP_REBOOT_FOLDER>',  'OBJECTID='Id';EXENAME=*;PARAMETERS=/C setboot /IBA:"'Partition.i'" & REM [Reboot' Partition.i '?];PROGTYPE=WINDOWABLEVIO;MINIMIZED=YES;ICONFILE='PartitionIcon';', 'U');
  131.     SAY 'Ok.';
  132.  
  133.     /* don't delete that one later */
  134.     IdPos = WORDPOS( Id, OldRebootIcons);
  135.     IF (IdPos > 0) THEN
  136.     DO
  137.        OldRebootIcons = DELWORD( OldRebootIcons, IdPos, 1);
  138.     END;
  139.  
  140.  
  141.  END;
  142.  
  143.  /* delete old reboot icons */
  144.  IF (WORDS( OldRebootIcons) > 0) THEN
  145.  DO
  146.  
  147.     CALL CHAROUT, 'Deleting obsolete program icons ... ';
  148.     DO i = 1 TO WORDS( OldRebootIcons)
  149.        rc = SysDestroyObject( WORD( OldRebootIcons, i));
  150.     END;
  151.     SAY 'Ok.';
  152.  END;
  153.  
  154.  IF (fOpenObjects) THEN
  155.  DO
  156.     rc = SysOpenObject( '<WP_REBOOT_FOLDER>', 'DEFAULT', 1);
  157.     rc = SysOpenObject( '<WP_REBOOT_FOLDER>', 'DEFAULT', 1);
  158.     rc = SysOpenObject( '<WP_REBOOT_VIEW_README>', 'DEFAULT', 1);
  159.     rc = SysOpenObject( '<WP_REBOOT_VIEW_README>', 'DEFAULT', 1);
  160.  END;
  161.  
  162.  EXIT(ERROR.NO_ERROR);
  163.  
  164. /* ------------------------------------------------------------------------- */
  165. HALT:
  166.  SAY 'Abbruch durch Benutzer.';
  167.  EXIT(ERROR.GEN_FAILURE);
  168.  
  169. /* ------------------------------------------------------------------------- */
  170. ShowHelp: PROCEDURE EXPOSE (GlobalVars)
  171.  
  172.  
  173.  PARSE SOURCE . . ThisFile
  174.  
  175.  DO i = 1 TO 3
  176.     rc = LINEIN(ThisFile);
  177.  END;
  178.  
  179.  ThisLine = LINEIN(Thisfile);
  180.  DO WHILE (ThisLine \= ' */')
  181.     SAY SUBSTR(ThisLine, 7);
  182.     ThisLine = LINEIN(Thisfile);
  183.  END;
  184.  
  185.  rc = LINEOUT(Thisfile);
  186.  
  187.  RETURN('');
  188.  
  189.  
  190. /* ========================================================================= */
  191. QueryPartitions: PROCEDURE EXPOSE (GlobalVars)
  192.  
  193.  /* initialize */
  194.  DROP(Partition.);
  195.  Partition.  = '';
  196.  Partition.0 = 0;
  197.  i = 0;
  198.  
  199.  /* create private rexx queue */
  200.  QueueName = RXQUEUE('CREATE');
  201.  rc        = RXQUEUE('SET', QueueName);
  202.  
  203.  /* read fdisk data and determine bootable partitions */
  204.  'fdisk /query | rxqueue' Queuename
  205.  DO WHILE (QUEUED() > 0)
  206.     PARSE PULL Line;
  207.     IF (DATATYPE( SUBSTR(Line, 38, 1)) = 'NUM') THEN
  208.     DO
  209.        PARSE VAR Line . +6 PartitionName +8 . . PartitionType PartitionStatus .
  210.        IF ((PartitionStatus = 1) | (PartitionStatus = 3)) THEN
  211.        DO
  212.           i                = Partition.0 + 1;
  213.           Partition.i      = STRIP(PartitionName);
  214.           Partition.i.type = PartitionType;
  215.           Partition.0      = i;
  216.        END;
  217.     END;
  218.  END;
  219.  
  220.  /* reset to default queue */
  221.  rc = RXQUEUE('DELETE', QueueName);
  222.  rc = RXQUEUE('SET', 'SESSION');
  223.  
  224.  RETURN('');
  225.  
  226.