home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / oberonv4.zip / install.cmd next >
OS/2 REXX Batch file  |  1996-02-25  |  11KB  |  418 lines

  1. /* OS2oberon V4.0-0.6e installation Rexx script for OS/2 2.x or 3.x */
  2. /* Copyright 1995-1996 D. Steiner */
  3.  
  4. /* functions loaded from RexxUtil */
  5. /*
  6. call RxFuncAdd 'SysFileTree', 'RexxUtil', 'SysFileTree'
  7. call RxFuncAdd 'SysDriveInfo', 'RexxUtil', 'SysDriveInfo'
  8. call RxFuncAdd 'SysMkDir', 'RexxUtil', 'SysMkDir'
  9. call RxFuncAdd 'SysDestroyObject', 'RexxUtil', 'SysDestroyObject'
  10. call RxFuncAdd 'SysGetMessage', 'RexxUtil', 'SysGetMessage'
  11. call RxFuncAdd 'SysFileSearch', 'RexxUtil', 'SysFileSearch'
  12. */
  13.  
  14. /* add all RexxUtil-Funktions */
  15. call rxfuncadd sysloadfuncs, rexxutil, sysloadfuncs
  16. call sysloadfuncs
  17.  
  18. /* enable debugging */
  19. /*trace all*/
  20.  
  21. /* display introducing message */
  22. "@echo off"
  23. say
  24. say "OS2oberon V4.0-0.6e setup for OS/2 2.x or 3.0   (c) 1995-1996 by Daniel Steiner"
  25. say "-------------------------------------------------------------------------------"
  26. say
  27.  
  28. /* get default source path, usually A:\ */
  29. parse upper source origin origin origin
  30. origin = filespec( "drive", origin ) || filespec( "path", origin )
  31. origin = delstr( origin, length( origin ) )
  32.  
  33. call CheckDrive (origin)
  34.  
  35. if (CheckDrive(origin) = 0) then do
  36.   origin = 'A:\'
  37. end
  38. else if (substr( origin, 3, 1 ) = '') then do
  39.   origin = origin || '\'
  40. end
  41. else if (substr( origin, 3, 1 ) \= '\') then do
  42.   origin = 'A:\'
  43. end
  44.  
  45.  
  46. /* let the user confirm or modify source path */
  47. do forever
  48.   default = origin
  49.   do forever
  50.     say 'Do you want to install from source "' || origin || '" ? (Y=ok N=other)'
  51.     pull answer
  52.     if answer \= "Y" then do
  53.       if answer \= "N" then do
  54.         iterate
  55.       end
  56.     end
  57.     leave
  58.   end
  59.   if answer \= 'Y' then do
  60.     do forever
  61.       origin = default
  62.       say 'Type in a complete source path "drive-letter:\path-name"'
  63.       pull drivepath
  64. /* die folgenden 2 Zeilen durch eine Funktion CheckDrive ersetzen */
  65.       if datatype( substr( drivepath,1,1 ) ) = 'CHAR' then do
  66.         if substr( drivepath, 2, 1 ) = ':' then do
  67.           if substr( drivepath, 3, 1 ) = '\' then do
  68.             if length( drivepath ) > 3 then do
  69.               if right( drivepath, 1 ) \= '\' then do
  70.                 origin = drivepath
  71.                 leave
  72.               end
  73.             end
  74.           end
  75.           if substr( drivepath, 3, 1 ) = '' then do
  76.             origin = drivepath
  77.             leave
  78.           end
  79.         end
  80.       end
  81.       say "Source drive and/or path is invalid or incomplete"
  82.     end
  83.   end
  84.   rc = SysFileTree( origin, origin_filetree, 'D' )
  85.   if rc = 0 then do
  86.     if origin_filetree.0 > 0 then do
  87.       leave
  88.     end
  89.     if substr( origin, 2, 2 ) = ':\' then do
  90.       if substr( origin, 4, 1 ) = '' then do
  91.         /* installing from a main directory */
  92.         leave
  93.        end
  94.     end
  95.   end
  96.   say 'Cannot access source "' || origin || '"'
  97. end
  98.  
  99. origindrive = substr( origin, 1, 2 )
  100. say
  101. say 'OS2oberon will be installed from "' || origin || '"'
  102. say
  103.  
  104. /* get default target path from OS/2 drive, e.g. C:\Oberon */
  105. dest = value( 'system_ini',,'os2environment' )
  106. dest = substr( dest, 1, 2 )
  107. os2drive = dest
  108. dest = os2drive || "\Oberon"
  109. default = dest
  110.  
  111.  
  112. /* let the user confirm or change the default target */
  113. querydest:
  114. do forever
  115.   dest = default
  116.   do forever
  117.     say 'Do you want to install to destination "' || dest || '" ? (Y=ok N=other)'
  118.     pull answer
  119.     if answer \= "Y" then do
  120.       if answer \= "N" then do
  121.         iterate
  122.       end
  123.     end
  124.     leave
  125.   end
  126.   if answer \= 'Y' then do
  127.     do forever
  128.       dest = default
  129.       say 'Type in a complete destination path "drive-letter:\path-name"'
  130.       pull drivepath
  131.       if drivepath = '' then do
  132.         leave
  133.       end
  134.       if datatype( substr( drivepath,1,1 ) ) = 'CHAR' then do
  135.         if substr( drivepath, 2, 1 ) = ':' then do
  136.           if substr( drivepath, 3, 1 ) = '\' then do
  137.             if length( drivepath ) > 3 then do
  138.               if right( drivepath, 1 ) \= '\' then do
  139.                 dest = drivepath
  140.                 leave
  141.               end
  142.             end
  143.           end
  144.         end
  145.       end
  146.       say "Destination drive and/or path is invalid or incomplete"
  147.     end
  148.   end
  149.   if dest = '' then do
  150.     iterate
  151.   end
  152.   overwrite = 0
  153.   rc = SysFileTree( dest, dest_filetree, 'D' )
  154.   if rc = 0 then do
  155.     if dest_filetree.0 > 0 then do
  156.  
  157. /* folgende Schleife laesst sich evt. mittels DO UNTIL einfacher programmieren */
  158.       do forever
  159.         say
  160.         say '"' || dest || '" already exists, overwrite it? (Y/N)'
  161.         pull answer
  162.         if answer \= "Y" then do
  163.           if answer \= "N" then do
  164.             iterate
  165.           end
  166.         end
  167.         leave
  168.       end
  169.       if answer = 'Y' then do
  170.         overwrite = 1
  171.         leave
  172.       end
  173.       iterate
  174.     end
  175.     leave
  176.   end
  177.   say 'Cannot access destination "' || dest || '"'
  178. end
  179.  
  180.  
  181. destdrive = substr( dest, 1, 2 )
  182. say
  183. say 'OS2oberon will be installed to "' || dest || '"'
  184. say
  185.  
  186.  
  187. /* delete old destination path if there and if not needed */
  188. if overwrite = 1 then do
  189.   if filespec( "name", dest ) \= '' then do
  190.     i = 3;
  191.     do forever
  192.       j = pos( '\', dest, i+1 )
  193.       if j == 0 then do
  194.         j = length( dest )
  195.         destpath = substr( dest, i+1, j-i )
  196.         leave
  197.       end
  198.       i = j
  199.     end
  200.     do forever
  201.       say 'Delete old "' || destpath || '" before installation? (Y/N)'
  202.       pull answer
  203.       if answer \= "Y" then do
  204.         if answer \= "N" then do
  205.           iterate
  206.         end
  207.       end
  208.       leave
  209.     end
  210.     if answer = 'Y' then do
  211.       say
  212.       say 'Deleting old "' || destpath || '"'
  213.       say
  214.  
  215.       /* remove read-only attribute */
  216.       chdir dest
  217.       "ATTRIB -R *.* /S"
  218.   
  219.       chdir filespec( "drive", dest ) || '\'
  220.       rc = SysDestroyObject( dest )
  221.       if rc \= 1 then do
  222.         say 'Old destination "' || destpath || '" cannot be deleted'
  223.         exit
  224.       end
  225.       overwrite = 0
  226.     end
  227.   end
  228. end
  229.  
  230.  
  231. /* check disk space before installation */
  232. driveinfo = SysDriveInfo( destdrive )
  233. parse upper var driveinfo    drive free total label
  234. if free < 3000000 then do
  235.   say 'Destination drive "' || destdrive || '" has not enough free space'
  236.   signal querydest
  237. end
  238.  
  239.  
  240. /* create destination directories if new */
  241. if overwrite = 0 then do
  242.   say
  243.   say 'Creating destination directory path "' || dest || '"'
  244.   say
  245.   i = 3
  246.   if right( dest, 1 ) \= '\' then do
  247.     dest = dest || '\'
  248.   end
  249.   do forever
  250.     i = pos( "\", dest, i+1 )
  251.     if (i == 0) then do
  252.       leave
  253.     end
  254.     destpath = substr( dest, 1, i-1 )
  255.     if (SysFileTree( destpath, dest_filetree, 'D' ) == 0) then do
  256.       if dest_filetree.0 > 0 then do
  257.         iterate
  258.       end
  259.     end
  260.     rc = SysMkDir( destpath )
  261.     if rc \= 0 then do
  262.       destcreated = 0
  263.       leave
  264.     end
  265.     destcreated = 1
  266.   end
  267.   if destcreated == 0 then do
  268.     say 'Destination directory "' || destpath || '" cannot be created'
  269.     say SysGetMessage( rc )
  270.     exit
  271.   end
  272.   if right( dest, 1 ) == '\' then do
  273.     if right( dest, 2 ) \= ':\' then do
  274.       dest = substr( dest, 1, length( dest )-1 )
  275.     end
  276.   end
  277. end
  278.  
  279. /* now do the installation */
  280. say
  281. say 'Extracting OS2oberon archive to "' || dest || '"'
  282. say
  283. /* das folgende Statement ist wahrscheinlich ueberfluessig */
  284. chdir origin
  285. chdir dest
  286. destdrive
  287. if overwrite = 1 then do
  288.   if right( origin, 1 ) \= '\' then do
  289.     origin || '\' || "oberonv4.exe -fo"   /* extract already existing files and overwrite without prompt */
  290.     origin || '\' || "oberonv4.exe -un"  /* update and create if necessary but do not overwrite */
  291.   end
  292.   else do
  293.     origin || "oberonv4.exe -fo"
  294.     origin || "oberonv4.exe -un"
  295.   end
  296. end
  297. else do
  298.   if right( origin, 1 ) \= '\' then do
  299.     origin || '\' || "oberonv4.exe"
  300.   end
  301.   else do
  302.     origin || "oberonv4.exe"
  303.   end
  304. end
  305.  
  306.  
  307. rc = SysFileTree( "bin\longname.exe", reg_filetree)
  308. if rc = 0 then do
  309.   if reg_filetree.0 > 0 then do
  310.     /* set .LONGNAME and .TYPE EA */
  311.     "bin\LONGNAME *"
  312.     "bin\EATYPE *.too"
  313.     "bin\EATYPE *.mod"
  314.     "bin\EATYPE *.tex"
  315.     "bin\EATYPE *.fnt"
  316.     "bin\EATYPE *.gra"
  317.     "bin\EATYPE *.kep"
  318.     "bin\EATYPE *.pro"
  319.     "bin\EATYPE *.lib"
  320.     "cd fonts"
  321.     "..\bin\LONGNAME *"
  322.     "..\bin\EATYPE *"
  323.     "cd ..\samples"
  324.     "..\bin\LONGNAME *"
  325.     "..\bin\EATYPE *"
  326.     "cd ..\obj"
  327.     "..\bin\LONGNAME *"
  328.     "..\bin\EATYPE *"
  329.     "cd ..\sym"
  330.     "..\bin\LONGNAME *"
  331.     "..\bin\EATYPE *"
  332.     "cd .."
  333.   end
  334. end
  335.  
  336. /* set read-only attribute */
  337. /*"ATTRIB +R *.* /S"*/
  338.  
  339. /* create Oberon folder */
  340. call SysCreateObject "WPFolder", "Oberon for OS/2", "<WP_DESKTOP>", ,
  341.      "OBJECTID=<OS2Oberon>", "replace"
  342.  
  343. /* create Oberon object in Oberon folder */
  344. call MakeObject dest || "\oberon.exe"
  345. call MakeObject dest || "\userguid.inf"
  346. call MakeObject dest || "\oberon2r.inf"
  347.  
  348.  
  349. /* Installation done */
  350. say
  351. say 'Installation is now completed.'
  352. say
  353. say '-------------------------------------------------------------------'
  354.  
  355. exit
  356.  
  357. /* -- MakeObject(filespec) ... create object for filespec ------------------ */
  358. MakeObject: procedure
  359. parse arg fspec
  360.  
  361. filename =filespec("Name", fspec)
  362.  
  363. if lastpos(".", filename) > 0 then
  364. /* translate in dieser Form uebersetzt den String in Grossbuchstaben */
  365.   ext=translate(substr(filename, lastpos(".", filename)+1))
  366. else
  367.   ext=""
  368.  
  369. /* if filename contains blank, put it into apostrophe */
  370. if pos(" ", fspec) > 0 then
  371.   fspecquote='"'fspec'"'
  372. else
  373.   fspecquote=fspec
  374.  
  375. select
  376.   /* create programmobject view.exe for INF-file */
  377.    when ext="INF" then
  378.       do
  379.          rawtitle=charin(fspec, 108, 48)   /* read title of INF-file */
  380.          if pos(d2c(0), rawtitle) > 1 then  /* non-empty title */
  381.            inftitle=left(rawtitle, pos(d2c(0), rawtitle)-1)
  382.          else
  383.            inftitle=fspec  /* use filename as title */
  384.  
  385.         call SysCreateObject "WPProgram", inftitle, "<OS2Oberon>", ,
  386.                      "EXENAME=VIEW.EXE;PARAMETERS="||fspecquote, "fail"
  387.         say "INF-Viewer for " fspec " created."
  388.       end
  389.  
  390.    when ext="EXE" then
  391.         do
  392.            call SysCreateObject "WPProgram", fspec, "<OS2Oberon>", ,
  393.                       "EXENAME="fspec";STARTUPDIR="filespec("Drive", fspec) || ,
  394.                       filespec("Path", fspec), "fail"
  395.             say "program object for " fspec " created."
  396.  
  397.         end
  398.  
  399. otherwise
  400.         do
  401.         end /* do */
  402. end  /* select */
  403. return
  404.  
  405. /* -- CheckDrive(filespec) ... check for drive letter ------------------ */
  406. CheckDrive: procedure
  407. parse arg fspec
  408.  
  409.  
  410. if (datatype( substr( fspec, 1, 1 ) ) \= 'CHAR') then do
  411.   return 0
  412. end
  413. else if (substr( fspec, 2, 1 ) \= ':') then do
  414.   return 0
  415. end
  416.  
  417. return 1
  418.