home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 11 Util / 11-Util.zip / sndys200.zip / install / remove.cmd < prev    next >
OS/2 REXX Batch file  |  1996-03-01  |  8KB  |  283 lines

  1. /*
  2.  *      REMOVE.CMD SendYes! V2.0 - C.Langanke 1996 - Deinstallation
  3.  *
  4.  *      Syntax: REMOVE.CMD [/?]
  5.  *
  6.  *      Removes all WPS objects which where installed
  7.  *      through INSTALL.CMD of the SendYes! package.
  8.  *
  9.  *      /?  -  display this help text
  10.  */
  11. /* The first comment is used as online help text */
  12.  
  13.  SIGNAL ON HALT
  14.  
  15.  TitleLine = STRIP(SUBSTR(SourceLine(2), 3));
  16.  PARSE VAR TitleLine CmdName'.CMD 'Info
  17.  Title     = CmdName Info
  18.  NewLine   = D2C(13)||D2C(10);
  19.  TRUE      = (1 = 1);
  20.  FALSE     = (0 = 1);
  21.   
  22.  /* some OS/2 Error codes */
  23.  ERROR.NO_ERROR          =  0;
  24.  ERROR.ACCESS_DENIED     =  5;
  25.  ERROR.NOT_ENOUGH_MEMORY =  8;
  26.  ERROR.INVALID_DATA      = 13;
  27.  ERROR.NO_MORE_FILES     = 18;
  28.  ERROR.GEN_FAILURE       = 31;
  29.  ERROR.INVALID_PARAMETER = 87;
  30.  
  31.  /* determine directories */
  32.  InstallDir  = GetCallDir();
  33.  LastSlash   = LASTPOS( '\', InstallDir);
  34.  ProgDir     = LEFT(InstallDir, LastSlash - 1);
  35.  
  36.  /* NLS file name definitions */
  37.  NLSFileBaseName  = 'SNDYS';
  38.  
  39.  /* default values */
  40.  NlsMsg.HaltMsg      = 'Interrupted by user.';
  41.  NlsMsg.AbortProgram = 'Program aborted.';
  42.  NlsMsg.Error        =  'error';
  43.  
  44.  Default.LanguageAbrv = 'ENG';
  45.  
  46.  /* INI file definitions */
  47.  Ini.FileName         = ProgDir'\SENDYES.INI';
  48.  Ini.AppName          = "SendYes!";
  49.  Ini.KeyName_Language = "Language";
  50.  
  51. /*
  52.  *      load RexxUtil
  53.  */
  54.  
  55.  CALL RxFuncAdd    'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs';
  56.  CALL SysLoadFuncs;
  57.   
  58.  SAY;
  59.  SAY Title
  60.  SAY;
  61.  
  62. /*
  63.  *      show help
  64.  */
  65.  
  66.  ARG Parms
  67.  IF (POS('?', Parms) > 0) THEN
  68.  DO
  69.     rc = ShowHelp();
  70.     EXIT(ERROR.NO_ERROR)
  71.  END;
  72.  
  73.  /* use language specified in INI file if not specified within parameters */ 
  74.  Selected.Language = SysIni( Ini.Filename, Ini.AppName, Ini.KeyName_Language);
  75.  IF (Selected.Language \= 'ERROR:') THEN
  76.     Selected.Language = LEFT(Selected.Language, 3);
  77.  ELSE
  78.     Selected.Language = Default.LanguageAbrv;
  79.  
  80.  /* select NLS settings */
  81.  MessageFile           = InstallDir'\'NLSFileBaseName''Selected.Language'.MSG';
  82.  
  83.  /* load messages and object strings */
  84.  rc = LoadMessageFile(MessageFile, FALSE);
  85.  IF (rc \= ERROR.NO_ERROR) THEN
  86.  DO
  87.     SAY CmdName':' NlsMsg.Error': The install message file was not found.'; 
  88.     SAY NlsMsg.AbortProgram;
  89.     EXIT(ERROR.ACCESS_DENIED);
  90.  END;
  91.  ExitKey = RIGHT(NlsMsg.Keys, 1);
  92.  
  93. /*
  94.  *      check, if folder object is installed
  95.  */
  96.  
  97.  /* get details about foldder */
  98.  /* parse object details */
  99.  PARSE VAR Objects.1,
  100.         '"'ObjectClass'"',
  101.         '"'ObjectLocation'"',
  102.         '"'ObjectId'"',
  103.         '"'ObjectTitle'"',
  104.         '"'ObjectOption'"',
  105.         '"'ObjectExeName'"',
  106.         '"'ObjectParameters'"',
  107.         '"'ObjectSetup'"'
  108.  
  109.  /* test, if installed */
  110.  rc = SysSetObjectData(ObjectId, '');
  111.  IF (rc = 0) THEN
  112.  DO
  113.     SAY NlsMsg.NotInstalled;
  114.     SAY NlsMsg.AbortProgram;
  115.     EXIT(ERROR.ACCESS_DENIED);
  116.  END;
  117.  
  118. /*
  119.  *      ask to deinstall
  120.  */
  121.  
  122.  SAY;
  123.  IF (\ProceedWith(NlsMsg.Deinstall)) THEN
  124.     SIGNAL HALT;
  125.  
  126. /*
  127.  *      Now delete all objects
  128.  */
  129.  
  130.  DO i = Objects.0 TO 1 BY -1
  131.     /* parse object details */
  132.     PARSE VAR Objects.i,
  133.            '"'ObjectClass'"',
  134.            '"'ObjectLocation'"',
  135.            '"'ObjectId'"',
  136.            '"'ObjectTitle'"',
  137.            '"'ObjectOption'"',
  138.            '"'ObjectExeName'"',
  139.            '"'ObjectParameters'"',
  140.            '"'ObjectSetup'"'
  141.  
  142.     /* destroy object */
  143.     rc = DestroyObject(ObjectId, ObjectTitle);
  144.  END;
  145.  
  146.  /* success message */
  147.  SAY;
  148.  SAY NlsMsg.DeinstallEnded;
  149.  
  150.  EXIT(ERROR.NO_ERROR);
  151.  
  152. /* ------------------------------------------------------------------------- */
  153.  
  154. HALT:
  155.   SAY NlsMsg.HaltMsg;
  156.   EXIT(ERROR.GEN_FAILURE);
  157.  
  158. /* ------------------------------------------------------------------------- */
  159. ShowHelp: PROCEDURE EXPOSE ExitMessage
  160.  
  161.  PARSE SOURCE . . ThisFile
  162.  
  163.  /* skip header */
  164.  DO i = 1 TO 3
  165.     rc = LINEIN(ThisFile);
  166.  END;
  167.  
  168.  /* show help */
  169.  DO WHILE (ThisLine \= ' */')
  170.     ThisLine = LINEIN(Thisfile);
  171.     SAY SUBSTR(ThisLine, 7);
  172.  END;
  173.  
  174.  /* close file */
  175.  rc = LINEOUT(Thisfile);
  176.  
  177.  RETURN('');
  178.  
  179. /* ------------------------------------------------------------------------- */
  180. DestroyObject: PROCEDURE EXPOSE NlsMsg. ExitMessage
  181.  PARSE ARG ObjectId, ObjectTitle
  182.  
  183.  CALL CHAROUT, LEFT(ObjectTitle, 50) NlsMsg.Delete '... ';
  184.  
  185.  rc = SysDestroyObject(ObjectId);
  186.  
  187.  IF (rc) THEN
  188.     SAY NlsMsg.Ok
  189.  ELSE
  190.     SAY NlsMsg.Error '!'
  191.  
  192.  RETURN(rc);
  193.    
  194. /* ------------------------------------------------------------------------- */
  195. LoadMsgString: PROCEDURE EXPOSE ExitMessage
  196.  ARG MsgId, MessageFile
  197.  
  198.  Message = SysGetMessage(MsgId, MessageFile);
  199.  RETURN(LEFT(Message, LENGTH(Message) - 2));
  200.  
  201. /* ------------------------------------------------------------------------- */
  202. GetCalldir: PROCEDURE EXPOSE ExitMessage 
  203. PARSE SOURCE . . CallName
  204.  CallDir = FILESPEC('Drive', CallName)||FILESPEC('Path', CallName);
  205.  RETURN(LEFT(CallDir, LENGTH(CallDir) - 1));
  206.  
  207. /* ------------------------------------------------------------------------- */
  208. ProceedWith: PROCEDURE EXPOSE NlsMsg. ExitMessage 
  209.  PARSE ARG Prompt
  210.  
  211.  ch            = ' ';
  212.  ValidResponse = LEFT(NlsMsg.Keys, 2);
  213.  YesKey        = LEFT(ValidResponse, 1);
  214.  NoKey         = RIGHT(ValidResponse, 1);
  215.  
  216.  SAY;
  217.  CALL CHAROUT ,Prompt '('YesKey'/'NoKey') '
  218.  DO WHILE (POS(ch, ValidResponse) = 0)
  219.     PULL ch
  220.     ch = TRANSLATE(ch);
  221.     IF (POS(ch, ValidResponse) = 0) THEN BEEP(800, 200);
  222.  END;
  223.  SAY;
  224.  SAY;
  225.  RETURN(ch = YesKey);
  226.  
  227. /* ========================================================================= */
  228. LoadMessageFile: PROCEDURE EXPOSE ERROR. NlsMsg. Objects. ExitMessage,
  229.                                   InstLanguage InstLanguageAbrv 
  230.  
  231.  ARG MessageFile, ReadInfoOnly
  232.  
  233.  /* default values */
  234.  MessageFileIdText = 'SENDYES_MESSAGEFILE';
  235.  DROP(Objects.);
  236.  Objects.  = '';
  237.  Objects.0 = 0;
  238.  
  239.  /* load MessageIds and YesNo Keys*/
  240.  MessageFileInfo        = LoadMsgString(0, MessageFile)
  241.  PARSE VAR MessageFileInfo MessageFileId InstMsgStart InstObjectsStart InstObjectsEnd NlsMsg.Keys InstLanguage InstLanguageAbrv
  242.  IF (MessageFileIdText \= MessageFileId) THEN
  243.     RETURN(ERROR.INVALID_DATA);
  244.  
  245.  IF (\ReadInfoOnly) THEN
  246.  DO
  247.     /* load message strings */
  248.     NlsMsg.AbortProgram     = LoadMsgString(InstMsgStart +  0, MessageFile);
  249.     NlsMsg.AlreadyActive    = LoadMsgString(InstMsgStart +  1, MessageFile);
  250.     NlsMsg.HaltMsg          = LoadMsgString(InstMsgStart +  2, MessageFile);
  251.     NlsMsg.Readme           = LoadMsgString(InstMsgStart +  3, MessageFile);
  252.     NlsMsg.Install          = LoadMsgString(InstMsgStart +  4, MessageFile);
  253.     NlsMsg.NLSSelect        = LoadMsgString(InstMsgStart +  5, MessageFile);
  254.     NlsMsg.Exit             = LoadMsgString(InstMsgStart +  6, MessageFile);
  255.     NlsMsg.Ok               = LoadMsgString(InstMsgStart +  7, MessageFile);
  256.     NlsMsg.Error            = LoadMsgString(InstMsgStart +  8, MessageFile);
  257.     NlsMsg.InstallPrompt    = LoadMsgString(InstMsgStart +  9, MessageFile)
  258.     NlsMsg.TargetDirInstall = LoadMsgString(InstMsgStart + 10, MessageFile);
  259.     NlsMsg.TargetDirExists  = LoadMsgString(InstMsgStart + 11, MessageFile);
  260.     NlsMsg.InvalidParm      = LoadMsgString(InstMsgStart + 12, MessageFile);
  261.     NlsMsg.NotExist         = LoadMsgString(InstMsgStart + 13, MessageFile);
  262.     NlsMsg.XcopyFailed      = LoadMsgString(InstMsgStart + 14, MessageFile);
  263.     NlsMsg.DeactivatePrompt = LoadMsgString(InstMsgStart + 15, MessageFile); /**/
  264.     NlsMsg.Deactivated      = LoadMsgString(InstMsgStart + 16, MessageFile); /**/
  265.     NlsMsg.Create           = LoadMsgString(InstMsgStart + 17, MessageFile);
  266.     NlsMsg.Delete           = LoadMsgString(InstMsgStart + 18, MessageFile);
  267.     NlsMsg.Deinstall        = LoadMsgString(InstMsgStart + 19, MessageFile);
  268.     NlsMsg.NotInstalled     = LoadMsgString(InstMsgStart + 20, MessageFile);
  269.     NlsMsg.InstallEnded     = LoadMsgString(InstMsgStart + 21, MessageFile);
  270.     NlsMsg.DeInstallEnded   = LoadMsgString(InstMsgStart + 22, MessageFile);
  271.    
  272.     /* load object strings */
  273.     DO i = InstObjectsStart TO InstObjectsEnd
  274.        n         = Objects.0 + 1;
  275.        Objects.n = LoadMsgString(i, MessageFile);
  276.        Objects.0 = n;
  277.     END;
  278.  
  279.  END; /* IF (\ReadInfoOnly) */
  280.  
  281.  RETURN(ERROR.NO_ERROR);
  282.  
  283.