home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 13 / AACD13.ISO / AACD / System / EASys / EASys!_update_481_to_482 / c / Extract-User-Startup.rexx < prev    next >
OS/2 REXX Batch file  |  1999-10-12  |  5KB  |  204 lines

  1. /*
  2.  ModAS © TNE) Sep.1998
  3.  
  4.  Extracting Application Config from s:user-startup automatically
  5.  to SYS:StartSys/c_Prepare/<AppName>
  6.  
  7.  <AppName> is automatically determined according to the entries'
  8.  ;BEGIN ... Statement.
  9.  
  10.  Notification for invoking this script when user-startup
  11.  is being write-accessed is realized by usage of
  12.  EASys!_bin:MultiNotify
  13. */
  14.  
  15. PARSE ARG msg_flag
  16.  
  17. IF EXISTS('ENV:Flags/DO_ModAS_Extract') THEN EXIT 0
  18.  
  19. ADDRESS COMMAND
  20. 'setenv Flags/DO_ModAS_Extract 1'
  21. 'Install_C:CLIexchange MultiNotify DISABLE'
  22. 'wait 1'
  23.  
  24. CALL Init
  25. StartupDir='SYS:StartSys/c_Prepare/'
  26. Startup='s:user-startup'
  27. StartupTmp='T:New_UserStartup'
  28. unassigned_script=StartupDir'1_User-Specific_parts'
  29. unassigned_tmp='T:UnassignedTMP'
  30.  
  31. CALL BackupFile(startup)
  32.  
  33. header.1=';Backwards-compatibility-Script S:user-startup'
  34. header.2=';    * New Standard complies to ModAS'
  35. header.3=';    * All Entries are automatically checked out'
  36. header.4=';      to SYS:StartSys/c_Profile/<AppName>'
  37. header.5=';      by EASys!_bin:MultiNotify'
  38.  
  39. IF Open(fStartupTmp,StartupTmp,'W') THEN
  40. DO
  41.   DO i=1 TO 5
  42.     r=WriteLn(fStartupTmp,header.i)
  43.   END
  44.   r=Close(fStartupTmp)
  45. END
  46.  
  47. IF Open(fStartup,Startup,'R') THEN startupOpen=1
  48. IF Open(fUnassignedTMP,unassigned_tmp,'W') THEN Unassigned_tmp_Open=1
  49.  
  50. origLine=ReadLn(fStartup)
  51.  
  52. DO i=1 TO 5
  53.   IF (header.i=origLine) THEN
  54.   DO
  55.     origLine=ReadLn(fStartup)
  56.     IF EOF(fStartup) THEN CALL ExitMe
  57.   END
  58.   ELSE LEAVE i
  59. END
  60.  
  61. DO FOREVER
  62.   App=' '
  63.   drop i
  64.   drop j
  65.   drop Line
  66.   i=0
  67.   j=0
  68.  
  69.   IF (LEFT(UPPER(origLine),6)=';BEGIN' | LEFT(UPPER(origLine),7)='; BEGIN' | LEFT(UPPER(origLine),8)=';  BEGIN' ) THEN
  70.   DO
  71.     i=i+1
  72.     IF LEFT(UPPER(origLine),6)=';BEGIN' THEN
  73.     DO
  74.       App=Word(origLine,2)
  75.       Comment=RIGHT(origLine,LENGTH(origLine)-6)
  76.     END
  77.  
  78.     IF (LEFT(UPPER(origLine),7)='; BEGIN' | LEFT(UPPER(origLine),8)=';  BEGIN')  THEN
  79.     DO
  80.       App=Word(origLine,3)
  81.       Comment=RIGHT(origLine,LENGTH(origLine)-7)
  82.     END
  83.  
  84.     App=STRIP(App,'B','"')
  85.     IF ~(RIGHT(msg_flag,6)='NOECHO') THEN Line.i=CreateStartupMessage(Comment)
  86.  
  87.     DO FOREVER
  88.       r=ReadLn(fStartup)
  89.       IF EOF(fStartup) | (POS(UPPER(App),UPPER(r))>0 & (LEFT(UPPER(r),4)=';END' | LEFT(UPPER(r),5)='; END' | LEFT(UPPER(r),6)=';  END')) THEN LEAVE
  90.       i=i+1
  91.       Line.i=r
  92.     END
  93.  
  94.     IF EOF(fStartup) THEN LEAVE
  95.  
  96.     DevicePos=POS(':',App)
  97.     SlashPos=POS('/',App)
  98.     DollPos=POS('$',App)
  99.     len=Length(App)
  100.     IF (DevicePos>0) THEN App=LEFT(App,DevicePos-1)
  101.     IF (SlashPos>0) THEN App=LEFT(App,SlashPos-1)
  102.     IF (DollPos>0) THEN App=LEFT(App,DollPos-1)
  103.  
  104.     IF (App='') | (App=' ') | (App='   ') THEN
  105.     DO
  106.      u=0
  107.      DO FOREVER
  108.       u=u+1
  109.       App='Unknown_'u
  110.       IF ~EXISTS(App) THEN LEAVE
  111.      END
  112.     END
  113.  
  114.     AppScript=StartupDir''App
  115.     IF Open(fPrepare,AppScript, 'W') THEN
  116.     DO
  117.       IF ~(RIGHT(msg_flag,6)='NOECHO') THEN
  118.       DO
  119.        e=WriteLn(fPrepare,'failat 30')
  120.        e=WriteLn(fPrepare,'stack 8192')
  121.       END
  122.  
  123.       DO j=1 to i
  124.           IF ~(Line.j='LINE.'j) THEN e=WriteLn(fPrepare,Line.j)
  125.       END
  126.       e=Close(fPrepare)
  127.     END
  128.   END
  129.   ELSE
  130.   DO
  131.     unassigned=1
  132.     IF ~EXISTS(unassigned_script) & ~(unassigned_exists=1) THEN
  133.     DO
  134.       unassigned_exists=1
  135.       IF ~(RIGHT(msg_flag,6)='NOECHO') THEN
  136.       DO
  137.         StartupMsg=CreateStartupMessage(' User specific parts')
  138.         r=WriteLn(fUnassignedTMP,'failat 21'CR''StartupMsg''CR CR''origLine)
  139.       END
  140.     END
  141.     ELSE
  142.       r=WriteLn(fUnassignedTMP,origLine)
  143.   END
  144.  
  145.   origLine=ReadLn(fStartup)
  146.   IF EOF(fStartup) THEN LEAVE
  147. END
  148.  
  149. /* -------------------------- */
  150. ExitMe:
  151.  
  152. IF (StartupOpen=1) THEN e=Close(fStartup)
  153. IF (Unassigned_tmp_Open=1) THEN e=Close(fUnassignedTmp)
  154.  
  155. IF (unassigned=1) THEN
  156. DO
  157.  ADDRESS COMMAND
  158.  'type >>'unassigned_script' 'unassigned_tmp
  159.  'delete 'unassigned_tmp' FORCE QUIET'
  160. END
  161.  
  162. ADDRESS COMMAND
  163. 'copy "'StartupTmp'" "'Startup'" CLONE QUIET'
  164. 'delete "'StartupTmp'" "'unassigned_tmp'" ENV:Flags/DO_ModAS_Extract FORCE QUIET'
  165.  
  166. EXIT 0
  167.  
  168. /* -------------------------- */
  169. CreateStartupMessage:
  170. PARSE ARG Comments
  171.  
  172. StartMsg='IF ${Flags/StartVerbose} EQ 1'CR' echo " Preparing..'Comments'"'CR'EndIf'
  173. RETURN StartMsg
  174.  
  175. /* -------------------------- */
  176. BackupFile:
  177. PARSE ARG bakFile
  178.  
  179. n=4
  180. DO i=1 to n
  181.  IF EXISTS(bakFile'.'n) THEN
  182.  DO
  183.    ADDRESS COMMAND 'copy "'bakFile'" "'bakFile'.'n'" CLONE QUIET'
  184.    LEAVE
  185.  END
  186.  
  187.  IF ~EXISTS(bakFile'.'i) THEN ADDRESS COMMAND 'copy "'bakFile'" "'bakFile'.'i'" CLONE QUIET'
  188. END
  189. RETURN
  190.  
  191. /*--------------------------------------------*/
  192. Init:
  193.  
  194. AppName = "© TNE) ModAS User-Startup-Extractor"
  195.  
  196. CR = '0a'x
  197.  
  198. IF ~show('L','rexxreqtools.library') THEN Result=ADDLIB('rexxreqtools.library',0,-30,0)
  199. IF ~show('L','rexxsupport.library') THEN Result=ADDLIB('rexxsupport.library',0,-30,0)
  200.  
  201. ProcessNumber=PRAGMA('ID')
  202.  
  203. RETURN
  204.