home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1996 February / PCWK0296.iso / sharewar / os2 / narzedzi / fm2 / install.cmd < prev    next >
OS/2 REXX Batch file  |  1995-10-08  |  51KB  |  1,247 lines

  1. /*
  2.  * FM/2 2.x installation program copyright (c) 1994/95 by M. Kimes
  3.  *
  4.  * This program creates a folder to hold program objects,
  5.  * then creates program objects for each executable.  It only needs to be
  6.  * run once (unless you move the FM/2 directory -- see say notes at end).
  7.  * It also calls MIGINI.CMD if it finds an old FM2.INI file to migrate
  8.  * some information to the new version's FM3.INI file.  Run this program
  9.  * in the FM/2 directory (where you unpacked the archive).
  10.  *
  11.  * For unattended installation, remove the lines marked with "NOTE:" below.
  12.  */
  13.  
  14. /* see if we might be in the right directory... */
  15.  
  16. '@Echo off'
  17. 'cls'
  18.  
  19. say'     ┌───────────────────────────────────────────────────────────────────┐'
  20. say'     │                  FM/2 2.x Installation Program                    │'
  21. say'     │             FM/2 is copyright (c) 1993-95 by M. Kimes             │'
  22. say'     │                       All rights reserved                         │'
  23. say'     ├───────────────────────────────────────────────────────────────────┤'
  24. say'     ├───────────────────────────────────────────────────────────────────┤'
  25. say'     │                Have you read the READ.ME file yet?                │'
  26. say'     │        By running this program, you agree to the license          │'
  27. say'     │                     as specified in that file,                    │'
  28. say'     │      and it tells you how to install, so you should read it.      │'
  29. say'     │                             Please?                               │'
  30. say'     └───────────────────────────────────────────────────────────────────┘'
  31.  
  32. /*
  33.  * allow user to eliminate associations from being placed on AV/2.
  34.  * seemed to upset some fellow on CIS (I guess he doesn't know about
  35.  * Settings notebooks on WPS objects).
  36.  */
  37. assocfilter = ';ASSOCFILTER=*.ZIP,*.ARC,*.LZH,*.ARJ,*.ZOO,*.MO0,READ.ME,README,README.1ST,README.OS2,REGISTER.TXT'
  38. existed = ''
  39. parse upper arg dummy
  40. if dummy = 'NOASSOC' then assocfilter = ''
  41.  
  42. rc = stream('fm3.exe','c','query exists')
  43. if rc = '' then
  44. do
  45.   say 'Sorry, FM3.EXE not found.  Must not be right directory.  Terminating.'
  46.   exit
  47. end
  48.  
  49. /* tell user what we're doing, give him a chance to hit CTRL-C */
  50.  
  51. say ''
  52. say 'This program creates objects for FM/2 and does some drudgework for you.'
  53. say ''
  54.  
  55. /* load rexx utility functions */
  56.  
  57. call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  58. call SysLoadFuncs
  59.  
  60. /* NOTE:  remove following 6 lines for unattended use... */
  61. call charout ,'  Press [Enter] to continue...'
  62. dummy = ''
  63. do until dummy = '0d'x
  64.   dummy = SysGetKey('NOECHO')
  65. end
  66. call charout ,'0d1b'x'[K'
  67.  
  68. /* save current directory */
  69.  
  70. curdir = directory()
  71.  
  72. /* say it, then do it */
  73.  
  74. say "Creating File Manager/2 folder and objects..."
  75.  
  76. /* first, create FM/2 folder */
  77.  
  78. rc = stream('fm2fldr.ico','c','query exists')
  79. title = "File Manager/2"
  80. classname = 'WPFolder'
  81. location = '<WP_DESKTOP>'
  82. setup = 'OBJECTID=<FM3_Folder>;OPEN=DEFAULT'
  83. if rc \= '' then setup = setup';ICONFILE='rc
  84. result = SysCreateObject(classname,title,location,setup,f)
  85.  
  86. /* NOTE:  remove following 18 lines for unattended use... */
  87. if result = 0 then
  88. do
  89.   assocfilter = ''
  90.   existed = 'TRUE'
  91.   say ''
  92.   say 'The File Manager/2 folder already exists.'
  93.   call charout ,"Should I update the objects (it's painless)? (Y/N) "
  94.   dummy = ''
  95.   do forever
  96.     dummy = SysGetKey('NOECHO')
  97.     parse upper var dummy dummy
  98.     if dummy = '1b'x then dummy = 'N'
  99.     if dummy = '0d'x then dummy = 'Y'
  100.     if dummy = 'N' then leave
  101.     if dummy = 'Y' then leave
  102.   end
  103.   call charout ,dummy
  104.   say ''
  105.   if dummy = 'N' then exit
  106. end
  107.  
  108. /* now, create program objects in FM/2 folder */
  109.  
  110. rc = stream('fm3.exe','c','query exists')
  111. if rc \= '' then
  112. do
  113.   title = "FM/2"
  114.   classname = 'WPProgram'
  115.   location = '<FM3_Folder>'
  116.   setup = 'OBJECTID=<FM/2>;EXENAME='rc';STARTUPDIR='curdir
  117.   if existed = '' then setup = setup';PARAMETERS=%*'
  118.   call SysCreateObject classname,title,location,setup,u
  119. end
  120.  
  121. rc = stream('av2.exe','c','query exists')
  122. if rc \= '' then
  123. do
  124.   title = "Archive Viewer/2"
  125.   classname = 'WPProgram'
  126.   location = '<FM3_Folder>'
  127.   setup = 'EXENAME='rc';STARTUPDIR='curdir''assocfilter
  128.   if existed = '' then setup = setup';PARAMETERS=%*'
  129.   call SysCreateObject classname,title,location,setup,u
  130. end
  131.  
  132. rc = stream('doicon.exe','c','query exists')
  133. if rc \= '' then
  134. do
  135.   title = "SysIcon"
  136.   classname = 'WPProgram'
  137.   location = '<FM3_Folder>'
  138.   setup = 'EXENAME='rc';STARTUPDIR='curdir
  139.   if existed = '' then setup = setup';PARAMETERS=%*'
  140.   call SysCreateObject classname,title,location,setup,u
  141. end
  142.  
  143. rc = stream('eas.exe','c','query exists')
  144. if rc \= '' then
  145. do
  146.   title = "EA Viewer"
  147.   classname = 'WPProgram'
  148.   location = '<FM3_Folder>'
  149.   setup = 'EXENAME='rc';STARTUPDIR='curdir
  150.   if existed = '' then setup = setup';PARAMETERS=%*'
  151.   call SysCreateObject classname,title,location,setup,u
  152. end
  153.  
  154. rc = stream('ini.exe','c','query exists')
  155. if rc \= '' then
  156. do
  157.   if assocfilter \= '' then assocfilter = ';ASSOCFILTER=*.INI'
  158.   title = "INI Viewer"
  159.   classname = 'WPProgram'
  160.   location = '<FM3_Folder>'
  161.   setup = 'EXENAME='rc';STARTUPDIR='curdir''assocfilter
  162.   if existed = '' then setup = setup';PARAMETERS=%*'
  163.   call SysCreateObject classname,title,location,setup,u
  164. end
  165.  
  166. rc = stream('viewinfs.exe','c','query exists')
  167. if rc \= '' then
  168. do
  169.   title = "Bookshelf Viewer"
  170.   classname = 'WPProgram'
  171.   location = '<FM3_Folder>'
  172.   setup = 'EXENAME='rc';STARTUPDIR='curdir
  173.   call SysCreateObject classname,title,location,setup,u
  174.   title = "Helpfile Viewer"
  175.   classname = 'WPProgram'
  176.   location = '<FM3_Folder>'
  177.   setup = 'EXENAME='rc';PARAMETERS=DUMMY;STARTUPDIR='curdir
  178.   call SysCreateObject classname,title,location,setup,u
  179. end
  180.  
  181. rc = stream('killproc.exe','c','query exists')
  182. if rc \= '' then
  183. do
  184.   title = "Process Killer"
  185.   classname = 'WPProgram'
  186.   location = '<FM3_Folder>'
  187.   setup = 'OBJECTID=<FM/2_KILLPROC>;EXENAME='rc';PARAMETERS=%;STARTUPDIR='curdir
  188.   call SysCreateObject classname,title,location,setup,u
  189. end
  190.  
  191. rc = stream('undel.exe','c','query exists')
  192. if rc \= '' then
  193. do
  194.   title = "Undeleter"
  195.   classname = 'WPProgram'
  196.   location = '<FM3_Folder>'
  197.   setup = 'OBJECTID=<FM/2_UNDEL>;EXENAME='rc';STARTUPDIR='curdir
  198.   if existed = '' then setup = setup';PARAMETERS=%*'
  199.   call SysCreateObject classname,title,location,setup,u
  200. end
  201.  
  202. rc = stream('vtree.exe','c','query exists')
  203. if rc \= '' then
  204. do
  205.   title = "Visual Tree"
  206.   classname = 'WPProgram'
  207.   location = '<FM3_Folder>'
  208.   setup = 'OBJECTID=<FM/2_VTREE>;EXENAME='rc';STARTUPDIR='curdir
  209.   call SysCreateObject classname,title,location,setup,u
  210. end
  211.  
  212. rc = stream('vdir.exe','c','query exists')
  213. if rc \= '' then
  214. do
  215.   title = "Visual Directory"
  216.   classname = 'WPProgram'
  217.   location = '<FM3_Folder>'
  218.   setup = 'OBJECTID=<FM/2_VDIR>;EXENAME='rc';STARTUPDIR='curdir
  219.   if existed = '' then setup = setup';PARAMETERS=%*'
  220.   call SysCreateObject classname,title,location,setup,u
  221. end
  222.  
  223. rc = stream('vcollect.exe','c','query exists')
  224. if rc \= '' then
  225. do
  226.   title = "Collector"
  227.   classname = 'WPProgram'
  228.   location = '<FM3_Folder>'
  229.   setup = 'OBJECTID=<FM/2_VCOLLECT>;EXENAME='rc';STARTUPDIR='curdir
  230.   call SysCreateObject classname,title,location,setup,u
  231.   title = "Seek and scan"
  232.   classname = 'WPProgram'
  233.   location = '<FM3_Folder>'
  234.   setup = 'OBJECTID=<FM/2_VSEEK>;EXENAME='rc';PARAMETERS=**;STARTUPDIR='curdir
  235.   call SysCreateObject classname,title,location,setup,u
  236. end
  237.  
  238. rc = stream('global.exe','c','query exists')
  239. if rc \= '' then
  240. do
  241.   title = "Global File Viewer"
  242.   classname = 'WPProgram'
  243.   location = '<FM3_Folder>'
  244.   setup = 'OBJECTID=<FM/2_SEEALL>;EXENAME='rc';STARTUPDIR='curdir
  245.   call SysCreateObject classname,title,location,setup,u
  246. end
  247.  
  248. rc = stream('databar.exe','c','query exists')
  249. if rc \= '' then
  250. do
  251.   title = "Databar"
  252.   classname = 'WPProgram'
  253.   location = '<FM3_Folder>'
  254.   setup = 'OBJECTID=<FM/2_DATABAR>;EXENAME='rc';STARTUPDIR='curdir
  255.   call SysCreateObject classname,title,location,setup,u
  256. end
  257.  
  258. rc = stream('sysinfo.exe','c','query exists')
  259. if rc \= '' then
  260. do
  261.   title = "SysInfo"
  262.   classname = 'WPProgram'
  263.   location = '<FM3_Folder>'
  264.   setup = 'OBJECTID=<FM/2_SYSINFO>;EXENAME='rc';STARTUPDIR='curdir
  265.   call SysCreateObject classname,title,location,setup,u
  266. end
  267.  
  268. rc = stream('READ.ME','c','query exists')
  269. if rc \= '' then
  270. do
  271.   title = "Read.Me"
  272.   classname = 'WPShadow'
  273.   location = '<FM3_Folder>'
  274.   setup = 'SHADOWID='rc
  275.   call SysCreateObject classname,title,location,setup,u
  276. end
  277.  
  278. rc = stream('HISTORY.TXT','c','query exists')
  279. if rc \= '' then
  280. do
  281.   title = "History.Txt"
  282.   classname = 'WPShadow'
  283.   location = '<FM3_Folder>'
  284.   setup = 'SHADOWID='rc
  285.   call SysCreateObject classname,title,location,setup,u
  286. end
  287.  
  288. rc = stream('REGISTER.TXT','c','query exists')
  289. if rc \= '' then
  290. do
  291.   title = "Register.Txt"
  292.   classname = 'WPShadow'
  293.   location = '<FM3_Folder>'
  294.   setup = 'SHADOWID='rc
  295.   call SysCreateObject classname,title,location,setup,u
  296. end
  297.  
  298. rc = stream('ASSOCIAT.TXT','c','query exists')
  299. if rc \= '' then
  300. do
  301.   title = "Associat.Txt"
  302.   classname = 'WPShadow'
  303.   location = '<FM3_Folder>'
  304.   setup = 'SHADOWID='rc
  305.   call SysCreateObject classname,title,location,setup,u
  306. end
  307.  
  308. rc = stream('FM3.HLP','c','query exists')
  309. if rc \= '' then
  310. do
  311.   if assocfilter \= '' then assocfilter=';ASSOCFILTER=*.HLP'
  312.   rc = stream('SEEHELP.EXE','c','query exists')
  313.   if rc \= '' then
  314.   do
  315.     title = "FM/2 Online Help"
  316.     classname = 'WPProgram'
  317.     location = '<FM3_Folder>'
  318.     setup = 'EXENAME='rc';STARTUPDIR='curdir';PARAMETERS= %* 'curdir'\FM3.HLP'
  319.     call SysCreateObject classname,title,location,setup,u
  320.   end
  321. end
  322.  
  323. rc = stream('UTILS\FATOPT.EXE','c','query exists')
  324. if rc \= '' then
  325. do
  326.   title = "FAT Optimizer"
  327.   classname = 'WPProgram'
  328.   location = '<FM3_Folder>'
  329.   setup = 'EXENAME='rc';STARTUPDIR='curdir'\UTILS;PARAMETERS=[Drive letter] [-Options]'
  330.   call SysCreateObject classname,title,location,setup,u
  331. end
  332.  
  333. rc = stream('UTILS\HPFSOPT.EXE','c','query exists')
  334. if rc \= '' then
  335. do
  336.   title = "HPFS Optimizer"
  337.   classname = 'WPProgram'
  338.   location = '<FM3_Folder>'
  339.   setup = 'EXENAME='rc';STARTUPDIR='curdir'\UTILS;PARAMETERS=[Drive:\Path] [-Options]'
  340.   call SysCreateObject classname,title,location,setup,u
  341. end
  342.  
  343. rc = stream('UTILS\MAKEOBJ.CMD','c','query exists')
  344. if rc \= '' then
  345. do
  346.   title = "Make Object"
  347.   classname = 'WPProgram'
  348.   location = '<FM3_Folder>'
  349.   setup = 'EXENAME='rc';STARTUPDIR='curdir'\UTILS;PARAMETERS=%*'
  350.   call SysCreateObject classname,title,location,setup,u
  351. end
  352.  
  353. /* create sample customizations for the user so they don't start 'blank' */
  354.  
  355. rc = stream('FM3MENU.DAT','c','query exists')
  356. if rc = '' then
  357. do
  358.   rc = stream('FM2MENU.TMP','c','query exists')
  359.   if rc \= '' then
  360.   do
  361.     say 'Creating a sample FM3MENU.DAT file for you.'
  362.     'REN FM3MENU.TMP FM3MENU.DAT 1>NUL 2>NUL'
  363.   end
  364. end
  365. 'DEL FM3MENU.TMP 1>NUL 2>NUL'
  366. rc = stream('ASSOC.DAT','c','query exists')
  367. if rc = '' then
  368. do
  369.   rc = stream('ASSOC.TMP','c','query exists')
  370.   if rc \= '' then
  371.   do
  372.     say 'Creating a sample ASSOC.DAT file for you.'
  373.     'REN ASSOC.TMP ASSOC.DAT 1>NUL 2>NUL'
  374.   end
  375. end
  376. 'DEL ASSOC.TMP 1>NUL 2>NUL'
  377. rc = stream('COMMANDS.DAT','c','query exists')
  378. if rc = '' then
  379. do
  380.   rc = stream('COMMANDS.TMP','c','query exists')
  381.   if rc \= '' then
  382.   do
  383.     say 'Creating a sample COMMANDS.DAT file for you.'
  384.     'REN COMMANDS.TMP COMMANDS.DAT 1>NUL 2>NUL'
  385.   end
  386. end
  387. 'DEL COMMANDS.TMP 1>NUL 2>NUL'
  388. rc = stream('FILTERS.DAT','c','query exists')
  389. if rc = '' then
  390. do
  391.   rc = stream('FILTERS.TMP','c','query exists')
  392.   if rc \= '' then
  393.   do
  394.     say 'Creating a sample FILTERS.DAT file for you.'
  395.     'REN FILTERS.TMP FILTERS.DAT 1>NUL 2>NUL'
  396.   end
  397. end
  398. 'DEL FILTERS.TMP 1>NUL 2>NUL'
  399. rc = stream('FM3TOOLS.DAT','c','query exists')
  400. if rc = '' then
  401. do
  402.   rc = stream('FM3TOOLS.TMP','c','query exists')
  403.   if rc \= '' then
  404.   do
  405.     say 'Creating a sample FM3TOOLS.DAT file for you.'
  406.     'REN FM3TOOLS.TMP FM3TOOLS.DAT 1>NUL 2>NUL'
  407.   end
  408. end
  409. 'DEL FM3TOOLS.TMP 1>NUL 2>NUL'
  410. rc = stream('QUICKTLS.DAT','c','query exists')
  411. if rc = '' then
  412. do
  413.   rc = stream('QUICKTLS.TMP','c','query exists')
  414.   if rc \= '' then
  415.   do
  416.     rc = stream('CMDS.TMP','c','query exists')
  417.     if rc \= '' then
  418.     do
  419.       rc = stream('UTILS.TMP','c','query exists')
  420.       if rc \= '' then
  421.       do
  422.         rc = stream('SORT.TMP','c','query exists')
  423.         if rc \= '' then
  424.         do
  425.           rc = stream('SELECT.TMP','c','query exists')
  426.           if rc \= '' then
  427.           do
  428.             say 'Creating a sample QUICKTLS.DAT file and toolboxes for you.'
  429.             'REN QUICKTLS.TMP QUICKTLS.DAT 1>NUL 2>NUL'
  430.             'REN CMDS.TMP CMDS.TLS 1>NUL 2>NUL'
  431.             'REN UTILS.TMP UTILS.TLS 1>NUL 2>NUL'
  432.             'REN SORT.TMP SORT.TLS 1>NUL 2>NUL'
  433.             'REN SELECT.TMP SELECT.TLS 1>NUL 2>NUL'
  434.           end
  435.           'DEL SELECT.TMP 1>NUL 2>NUL'
  436.         end
  437.        'DEL SORT.TMP 1>NUL 2>NUL'
  438.       end
  439.       'DEL UTILS.TMP 1>NUL 2>NUL'
  440.     end
  441.     'DEL CMDS.TMP 1>NUL 2>NUL'
  442.   end
  443. end
  444. 'DEL QUICKTLS.TMP 1>NUL 2>NUL'
  445.  
  446. /*
  447.  * create command files that the user can execute from anywhere (we'll
  448.  * ask the user to put this utils directory on the PATH) and that other
  449.  * programs can execute to use FM/2 as "their" file manager.
  450.  */
  451.  
  452. 'del SETENV.CMD 1>NUL 2>NUL'
  453. dummy = stream('SETENV.CMD','C','open')
  454. if dummy = 'READY:' then
  455. do
  456.   call lineout 'SETENV.CMD','@ECHO OFF'
  457.   call lineout 'SETENV.CMD','REM'
  458.   call lineout 'SETENV.CMD','REM If you prefer, you can call this .CMD file'
  459.   call lineout 'SETENV.CMD','REM instead of altering the PATH= statement in'
  460.   call lineout 'SETENV.CMD','REM CONFIG.SYS to gain access to the FM/2'
  461.   call lineout 'SETENV.CMD','REM command line utilities.'
  462.   call lineout 'SETENV.CMD','REM'
  463.   call lineout 'SETENV.CMD','IF "%FM2ENVSET%" == "" GOTO INSTALL'
  464.   call lineout 'SETENV.CMD','GOTO SKIP'
  465.   call lineout 'SETENV.CMD',':INSTALL'
  466.   call lineout 'SETENV.CMD','SET FM2ENVSET=YES'
  467.   call lineout 'SETENV.CMD','SET PATH=%PATH%;'curdir'\utils;'
  468.   call lineout 'SETENV.CMD','ECHO Path set for FM/2 and utilities.'
  469.   call lineout 'SETENV.CMD','GOTO END'
  470.   call lineout 'SETENV.CMD',':SKIP'
  471.   call lineout 'SETENV.CMD','ECHO Paths already set for FM/2 and utilities.'
  472.   call lineout 'SETENV.CMD',':END'
  473.   call stream 'SETENV.CMD','C','close'
  474. end
  475.  
  476. /*
  477.  * place an object for SETENV.CMD in folder so user doesn't have to diddle
  478.  * their PATH statement if they don't want to for command line work.
  479.  */
  480.  
  481.  
  482. rc = stream('SETENV.CMD','c','query exists')
  483. if rc \= '' then
  484. do
  485.   title = "Utility command line"
  486.   classname = 'WPProgram'
  487.   location = '<FM3_Folder>'
  488.   setup = 'EXENAME=*;PARAMETERS=/K 'rc';STARTUPDIR=C:\'
  489.   call SysCreateObject classname,title,location,setup,u
  490. end
  491.  
  492. call SysMkDir curdir'\UTILS'
  493. dummy = directory(curdir'\UTILS')
  494. if dummy = curdir'\UTILS' then
  495. do
  496.   'set PATH=%PATH%;'curdir'\utils'
  497.   'move ..\example.cmd 1>NUL 2>NUL'
  498.   'del FM2.CMD 1>NUL 2>NUL'
  499.   dummy = stream('FM2.CMD','C','open')
  500.   if dummy = 'READY:' then
  501.   do
  502.     say 'Creating an FM2.CMD file.'
  503.     call lineout 'FM2.CMD', "/* FM/2 command file.  Locate in a directory"
  504.     call lineout 'FM2.CMD', " * on your PATH. */"
  505.     call lineout 'FM2.CMD', "'@echo off'"
  506.       call lineout 'FM2.CMD', "arg arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9"
  507.       call lineout 'FM2.CMD', "if arg1 \= '' then "
  508.       call lineout 'FM2.CMD', "do"
  509.       call lineout 'FM2.CMD', "  if left(arg1,1,1) \= '/' then"
  510.       call lineout 'FM2.CMD', "  do"
  511.       call lineout 'FM2.CMD', "    arg1 = stream(arg1,'c','query exists')"
  512.       call lineout 'FM2.CMD', "  end"
  513.       call lineout 'FM2.CMD', "end"
  514.       call lineout 'FM2.CMD', "else arg1 = directory()"
  515.       call lineout 'FM2.CMD', "if arg2 \= '' then "
  516.       call lineout 'FM2.CMD', "do"
  517.       call lineout 'FM2.CMD', "  if left(arg2,1,1) \= '/' then"
  518.       call lineout 'FM2.CMD', "  do"
  519.       call lineout 'FM2.CMD', "    arg2 = stream(arg2,'c','query exists')"
  520.       call lineout 'FM2.CMD', "  end"
  521.       call lineout 'FM2.CMD', "end"
  522.       call lineout 'FM2.CMD', "if arg3 \= '' then "
  523.       call lineout 'FM2.CMD', "do"
  524.       call lineout 'FM2.CMD', "  if left(arg3,1,1) \= '/' then"
  525.       call lineout 'FM2.CMD', "  do"
  526.       call lineout 'FM2.CMD', "    arg3 = stream(arg3,'c','query exists')"
  527.       call lineout 'FM2.CMD', "  end"
  528.       call lineout 'FM2.CMD', "end"
  529.       call lineout 'FM2.CMD', "if arg4 \= '' then "
  530.       call lineout 'FM2.CMD', "do"
  531.       call lineout 'FM2.CMD', "  if left(arg4,1,1) \= '/' then"
  532.       call lineout 'FM2.CMD', "  do"
  533.       call lineout 'FM2.CMD', "    arg4 = stream(arg4,'c','query exists')"
  534.       call lineout 'FM2.CMD', "  end"
  535.       call lineout 'FM2.CMD', "end"
  536.       call lineout 'FM2.CMD', "if arg5 \= '' then "
  537.       call lineout 'FM2.CMD', "do"
  538.       call lineout 'FM2.CMD', "  if left(arg5,1,1) \= '/' then"
  539.       call lineout 'FM2.CMD', "  do"
  540.       call lineout 'FM2.CMD', "    arg5 = stream(arg5,'c','query exists')"
  541.       call lineout 'FM2.CMD', "  end"
  542.       call lineout 'FM2.CMD', "end"
  543.       call lineout 'FM2.CMD', "if arg6 \= '' then "
  544.       call lineout 'FM2.CMD', "do"
  545.       call lineout 'FM2.CMD', "  if left(arg6,1,1) \= '/' then"
  546.       call lineout 'FM2.CMD', "  do"
  547.       call lineout 'FM2.CMD', "    arg6 = stream(arg6,'c','query exists')"
  548.       call lineout 'FM2.CMD', "  end"
  549.       call lineout 'FM2.CMD', "end"
  550.       call lineout 'FM2.CMD', "if arg7 \= '' then "
  551.       call lineout 'FM2.CMD', "do"
  552.       call lineout 'FM2.CMD', "  if left(arg7,1,1) \= '/' then"
  553.       call lineout 'FM2.CMD', "  do"
  554.       call lineout 'FM2.CMD', "    arg7 = stream(arg7,'c','query exists')"
  555.       call lineout 'FM2.CMD', "  end"
  556.       call lineout 'FM2.CMD', "end"
  557.       call lineout 'FM2.CMD', "if arg8 \= '' then "
  558.       call lineout 'FM2.CMD', "do"
  559.       call lineout 'FM2.CMD', "  if left(arg8,1,1) \= '/' then"
  560.       call lineout 'FM2.CMD', "  do"
  561.       call lineout 'FM2.CMD', "    arg8 = stream(arg8,'c','query exists')"
  562.       call lineout 'FM2.CMD', "  end"
  563.       call lineout 'FM2.CMD', "end"
  564.       call lineout 'FM2.CMD', "if arg9 \= '' then "
  565.       call lineout 'FM2.CMD', "do"
  566.       call lineout 'FM2.CMD', "  if left(arg9,1,1) \= '/' then"
  567.       call lineout 'FM2.CMD', "  do"
  568.       call lineout 'FM2.CMD', "    arg9 = stream(arg9,'c','query exists')"
  569.       call lineout 'FM2.CMD', "  end"
  570.       call lineout 'FM2.CMD', "end"
  571.     call lineout 'FM2.CMD', "n = setlocal()"
  572.     call lineout 'FM2.CMD', "n = directory('"curdir"')"
  573.     call lineout 'FM2.CMD', "'start fm3.exe 'arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9"
  574.     call lineout 'FM2.CMD', "n = endlocal()"
  575.     call stream 'FM2.CMD','C','close'
  576.     'del AV2.CMD 1>NUL 2>NUL'
  577.     dummy = stream('AV2.CMD','C','open')
  578.     if dummy = 'READY:' then
  579.     do
  580.       say 'Creating an AV2.CMD file.'
  581.       call lineout 'AV2.CMD', "/* AV/2 command file.  Locate in a directory"
  582.       call lineout 'AV2.CMD', " * on your PATH. */"
  583.       call lineout 'AV2.CMD', "'@echo off'"
  584.       call lineout 'AV2.CMD', "arg arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9"
  585.       call lineout 'AV2.CMD', "if arg1 \= '' then "
  586.       call lineout 'AV2.CMD', "do"
  587.       call lineout 'AV2.CMD', "  if left(arg1,1,1) \= '/' then"
  588.       call lineout 'AV2.CMD', "  do"
  589.       call lineout 'AV2.CMD', "    arg1 = stream(arg1,'c','query exists')"
  590.       call lineout 'AV2.CMD', "  end"
  591.       call lineout 'AV2.CMD', "end"
  592.       call lineout 'AV2.CMD', "else arg1 = directory()"
  593.       call lineout 'AV2.CMD', "if arg2 \= '' then "
  594.       call lineout 'AV2.CMD', "do"
  595.       call lineout 'AV2.CMD', "  if left(arg2,1,1) \= '/' then"
  596.       call lineout 'AV2.CMD', "  do"
  597.       call lineout 'AV2.CMD', "    arg2 = stream(arg2,'c','query exists')"
  598.       call lineout 'AV2.CMD', "  end"
  599.       call lineout 'AV2.CMD', "end"
  600.       call lineout 'AV2.CMD', "if arg3 \= '' then "
  601.       call lineout 'AV2.CMD', "do"
  602.       call lineout 'AV2.CMD', "  if left(arg3,1,1) \= '/' then"
  603.       call lineout 'AV2.CMD', "  do"
  604.       call lineout 'AV2.CMD', "    arg3 = stream(arg3,'c','query exists')"
  605.       call lineout 'AV2.CMD', "  end"
  606.       call lineout 'AV2.CMD', "end"
  607.       call lineout 'AV2.CMD', "if arg4 \= '' then "
  608.       call lineout 'AV2.CMD', "do"
  609.       call lineout 'AV2.CMD', "  if left(arg4,1,1) \= '/' then"
  610.       call lineout 'AV2.CMD', "  do"
  611.       call lineout 'AV2.CMD', "    arg4 = stream(arg4,'c','query exists')"
  612.       call lineout 'AV2.CMD', "  end"
  613.       call lineout 'AV2.CMD', "end"
  614.       call lineout 'AV2.CMD', "if arg5 \= '' then "
  615.       call lineout 'AV2.CMD', "do"
  616.       call lineout 'AV2.CMD', "  if left(arg5,1,1) \= '/' then"
  617.       call lineout 'AV2.CMD', "  do"
  618.       call lineout 'AV2.CMD', "    arg5 = stream(arg5,'c','query exists')"
  619.       call lineout 'AV2.CMD', "  end"
  620.       call lineout 'AV2.CMD', "end"
  621.       call lineout 'AV2.CMD', "if arg6 \= '' then "
  622.       call lineout 'AV2.CMD', "do"
  623.       call lineout 'AV2.CMD', "  if left(arg6,1,1) \= '/' then"
  624.       call lineout 'AV2.CMD', "  do"
  625.       call lineout 'AV2.CMD', "    arg6 = stream(arg6,'c','query exists')"
  626.       call lineout 'AV2.CMD', "  end"
  627.       call lineout 'AV2.CMD', "end"
  628.       call lineout 'AV2.CMD', "if arg7 \= '' then "
  629.       call lineout 'AV2.CMD', "do"
  630.       call lineout 'AV2.CMD', "  if left(arg7,1,1) \= '/' then"
  631.       call lineout 'AV2.CMD', "  do"
  632.       call lineout 'AV2.CMD', "    arg7 = stream(arg7,'c','query exists')"
  633.       call lineout 'AV2.CMD', "  end"
  634.       call lineout 'AV2.CMD', "end"
  635.       call lineout 'AV2.CMD', "if arg8 \= '' then "
  636.       call lineout 'AV2.CMD', "do"
  637.       call lineout 'AV2.CMD', "  if left(arg8,1,1) \= '/' then"
  638.       call lineout 'AV2.CMD', "  do"
  639.       call lineout 'AV2.CMD', "    arg8 = stream(arg8,'c','query exists')"
  640.       call lineout 'AV2.CMD', "  end"
  641.       call lineout 'AV2.CMD', "end"
  642.       call lineout 'AV2.CMD', "if arg9 \= '' then "
  643.       call lineout 'AV2.CMD', "do"
  644.       call lineout 'AV2.CMD', "  if left(arg9,1,1) \= '/' then"
  645.       call lineout 'AV2.CMD', "  do"
  646.       call lineout 'AV2.CMD', "    arg9 = stream(arg9,'c','query exists')"
  647.       call lineout 'AV2.CMD', "  end"
  648.       call lineout 'AV2.CMD', "end"
  649.       call lineout 'AV2.CMD', "n = setlocal()"
  650.       call lineout 'AV2.CMD', "n = directory('"curdir"')"
  651.       call lineout 'AV2.CMD', "'start av2.exe 'arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9"
  652.       call lineout 'AV2.CMD', "n = endlocal()"
  653.       call stream 'AV2.CMD','C','close'
  654.     end
  655.     else say "Couldn't create AV2.CMD file."
  656.     'del VDIR.CMD 1>NUL 2>NUL'
  657.     dummy = stream('VDIR.CMD','C','open')
  658.     if dummy = 'READY:' then
  659.     do
  660.       say 'Creating a VDIR.CMD file.'
  661.       call lineout 'VDIR.CMD', "/* VDIR (FM/2) command file.  Locate in a directory"
  662.       call lineout 'VDIR.CMD', " * on your PATH. */"
  663.       call lineout 'VDIR.CMD', "'@echo off'"
  664.       call lineout 'VDIR.CMD', "arg arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9"
  665.       call lineout 'VDIR.CMD', "if arg1 \= '' then "
  666.       call lineout 'VDIR.CMD', "do"
  667.       call lineout 'VDIR.CMD', "  if left(arg1,1,1) \= '/' then"
  668.       call lineout 'VDIR.CMD', "  do"
  669.       call lineout 'VDIR.CMD', "    arg1 = stream(arg1,'c','query exists')"
  670.       call lineout 'VDIR.CMD', "  end"
  671.       call lineout 'VDIR.CMD', "end"
  672.       call lineout 'VDIR.CMD', "else arg1 = directory()"
  673.       call lineout 'VDIR.CMD', "if arg2 \= '' then "
  674.       call lineout 'VDIR.CMD', "do"
  675.       call lineout 'VDIR.CMD', "  if left(arg2,1,1) \= '/' then"
  676.       call lineout 'VDIR.CMD', "  do"
  677.       call lineout 'VDIR.CMD', "    arg2 = stream(arg2,'c','query exists')"
  678.       call lineout 'VDIR.CMD', "  end"
  679.       call lineout 'VDIR.CMD', "end"
  680.       call lineout 'VDIR.CMD', "if arg3 \= '' then "
  681.       call lineout 'VDIR.CMD', "do"
  682.       call lineout 'VDIR.CMD', "  if left(arg3,1,1) \= '/' then"
  683.       call lineout 'VDIR.CMD', "  do"
  684.       call lineout 'VDIR.CMD', "    arg3 = stream(arg3,'c','query exists')"
  685.       call lineout 'VDIR.CMD', "  end"
  686.       call lineout 'VDIR.CMD', "end"
  687.       call lineout 'VDIR.CMD', "if arg4 \= '' then "
  688.       call lineout 'VDIR.CMD', "do"
  689.       call lineout 'VDIR.CMD', "  if left(arg4,1,1) \= '/' then"
  690.       call lineout 'VDIR.CMD', "  do"
  691.       call lineout 'VDIR.CMD', "    arg4 = stream(arg4,'c','query exists')"
  692.       call lineout 'VDIR.CMD', "  end"
  693.       call lineout 'VDIR.CMD', "end"
  694.       call lineout 'VDIR.CMD', "if arg5 \= '' then "
  695.       call lineout 'VDIR.CMD', "do"
  696.       call lineout 'VDIR.CMD', "  if left(arg5,1,1) \= '/' then"
  697.       call lineout 'VDIR.CMD', "  do"
  698.       call lineout 'VDIR.CMD', "    arg5 = stream(arg5,'c','query exists')"
  699.       call lineout 'VDIR.CMD', "  end"
  700.       call lineout 'VDIR.CMD', "end"
  701.       call lineout 'VDIR.CMD', "if arg6 \= '' then "
  702.       call lineout 'VDIR.CMD', "do"
  703.       call lineout 'VDIR.CMD', "  if left(arg6,1,1) \= '/' then"
  704.       call lineout 'VDIR.CMD', "  do"
  705.       call lineout 'VDIR.CMD', "    arg6 = stream(arg6,'c','query exists')"
  706.       call lineout 'VDIR.CMD', "  end"
  707.       call lineout 'VDIR.CMD', "end"
  708.       call lineout 'VDIR.CMD', "if arg7 \= '' then "
  709.       call lineout 'VDIR.CMD', "do"
  710.       call lineout 'VDIR.CMD', "  if left(arg7,1,1) \= '/' then"
  711.       call lineout 'VDIR.CMD', "  do"
  712.       call lineout 'VDIR.CMD', "    arg7 = stream(arg7,'c','query exists')"
  713.       call lineout 'VDIR.CMD', "  end"
  714.       call lineout 'VDIR.CMD', "end"
  715.       call lineout 'VDIR.CMD', "if arg8 \= '' then "
  716.       call lineout 'VDIR.CMD', "do"
  717.       call lineout 'VDIR.CMD', "  if left(arg8,1,1) \= '/' then"
  718.       call lineout 'VDIR.CMD', "  do"
  719.       call lineout 'VDIR.CMD', "    arg8 = stream(arg8,'c','query exists')"
  720.       call lineout 'VDIR.CMD', "  end"
  721.       call lineout 'VDIR.CMD', "end"
  722.       call lineout 'VDIR.CMD', "if arg9 \= '' then "
  723.       call lineout 'VDIR.CMD', "do"
  724.       call lineout 'VDIR.CMD', "  if left(arg9,1,1) \= '/' then"
  725.       call lineout 'VDIR.CMD', "  do"
  726.       call lineout 'VDIR.CMD', "    arg9 = stream(arg9,'c','query exists')"
  727.       call lineout 'VDIR.CMD', "  end"
  728.       call lineout 'VDIR.CMD', "end"
  729.       call lineout 'VDIR.CMD', "n = setlocal()"
  730.       call lineout 'VDIR.CMD', "n = directory('"curdir"')"
  731.       call lineout 'VDIR.CMD', "'start vdir.exe 'arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9"
  732.       call lineout 'VDIR.CMD', "n = endlocal()"
  733.       call stream 'VDIR.CMD','C','close'
  734.     end
  735.     else say "Couldn't create VDIR.CMD file."
  736.     'del VTREE.CMD 1>NUL 2>NUL'
  737.     dummy = stream('VTREE.CMD','C','open')
  738.     if dummy = 'READY:' then
  739.     do
  740.       say 'Creating a VTREE.CMD file.'
  741.       call lineout 'VTREE.CMD', "/* VTREE (FM/2) command file.  Locate in a directory"
  742.       call lineout 'VTREE.CMD', " * on your PATH. */"
  743.       call lineout 'VTREE.CMD', "'@echo off'"
  744.       call lineout 'VTREE.CMD', "arg arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9"
  745.       call lineout 'VTREE.CMD', "if arg1 \= '' then "
  746.       call lineout 'VTREE.CMD', "do"
  747.       call lineout 'VTREE.CMD', "  if left(arg1,1,1) \= '/' then"
  748.       call lineout 'VTREE.CMD', "  do"
  749.       call lineout 'VTREE.CMD', "    arg1 = stream(arg1,'c','query exists')"
  750.       call lineout 'VTREE.CMD', "  end"
  751.       call lineout 'VTREE.CMD', "end"
  752.       call lineout 'VTREE.CMD', "if arg2 \= '' then "
  753.       call lineout 'VTREE.CMD', "do"
  754.       call lineout 'VTREE.CMD', "  if left(arg2,1,1) \= '/' then"
  755.       call lineout 'VTREE.CMD', "  do"
  756.       call lineout 'VTREE.CMD', "    arg2 = stream(arg2,'c','query exists')"
  757.       call lineout 'VTREE.CMD', "  end"
  758.       call lineout 'VTREE.CMD', "end"
  759.       call lineout 'VTREE.CMD', "if arg3 \= '' then "
  760.       call lineout 'VTREE.CMD', "do"
  761.       call lineout 'VTREE.CMD', "  if left(arg3,1,1) \= '/' then"
  762.       call lineout 'VTREE.CMD', "  do"
  763.       call lineout 'VTREE.CMD', "    arg3 = stream(arg3,'c','query exists')"
  764.       call lineout 'VTREE.CMD', "  end"
  765.       call lineout 'VTREE.CMD', "end"
  766.       call lineout 'VTREE.CMD', "if arg4 \= '' then "
  767.       call lineout 'VTREE.CMD', "do"
  768.       call lineout 'VTREE.CMD', "  if left(arg4,1,1) \= '/' then"
  769.       call lineout 'VTREE.CMD', "  do"
  770.       call lineout 'VTREE.CMD', "    arg4 = stream(arg4,'c','query exists')"
  771.       call lineout 'VTREE.CMD', "  end"
  772.       call lineout 'VTREE.CMD', "end"
  773.       call lineout 'VTREE.CMD', "if arg5 \= '' then "
  774.       call lineout 'VTREE.CMD', "do"
  775.       call lineout 'VTREE.CMD', "  if left(arg5,1,1) \= '/' then"
  776.       call lineout 'VTREE.CMD', "  do"
  777.       call lineout 'VTREE.CMD', "    arg5 = stream(arg5,'c','query exists')"
  778.       call lineout 'VTREE.CMD', "  end"
  779.       call lineout 'VTREE.CMD', "end"
  780.       call lineout 'VTREE.CMD', "if arg6 \= '' then "
  781.       call lineout 'VTREE.CMD', "do"
  782.       call lineout 'VTREE.CMD', "  if left(arg6,1,1) \= '/' then"
  783.       call lineout 'VTREE.CMD', "  do"
  784.       call lineout 'VTREE.CMD', "    arg6 = stream(arg6,'c','query exists')"
  785.       call lineout 'VTREE.CMD', "  end"
  786.       call lineout 'VTREE.CMD', "end"
  787.       call lineout 'VTREE.CMD', "if arg7 \= '' then "
  788.       call lineout 'VTREE.CMD', "do"
  789.       call lineout 'VTREE.CMD', "  if left(arg7,1,1) \= '/' then"
  790.       call lineout 'VTREE.CMD', "  do"
  791.       call lineout 'VTREE.CMD', "    arg7 = stream(arg7,'c','query exists')"
  792.       call lineout 'VTREE.CMD', "  end"
  793.       call lineout 'VTREE.CMD', "end"
  794.       call lineout 'VTREE.CMD', "if arg8 \= '' then "
  795.       call lineout 'VTREE.CMD', "do"
  796.       call lineout 'VTREE.CMD', "  if left(arg8,1,1) \= '/' then"
  797.       call lineout 'VTREE.CMD', "  do"
  798.       call lineout 'VTREE.CMD', "    arg8 = stream(arg8,'c','query exists')"
  799.       call lineout 'VTREE.CMD', "  end"
  800.       call lineout 'VTREE.CMD', "end"
  801.       call lineout 'VTREE.CMD', "if arg9 \= '' then "
  802.       call lineout 'VTREE.CMD', "do"
  803.       call lineout 'VTREE.CMD', "  if left(arg9,1,1) \= '/' then"
  804.       call lineout 'VTREE.CMD', "  do"
  805.       call lineout 'VTREE.CMD', "    arg9 = stream(arg9,'c','query exists')"
  806.       call lineout 'VTREE.CMD', "  end"
  807.       call lineout 'VTREE.CMD', "end"
  808.       call lineout 'VTREE.CMD', "n = setlocal()"
  809.       call lineout 'VTREE.CMD', "n = directory('"curdir"')"
  810.       call lineout 'VTREE.CMD', "'start vtree.exe 'arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9"
  811.       call lineout 'VTREE.CMD', "n = endlocal()"
  812.       call stream 'VTREE.CMD','C','close'
  813.     end
  814.     else say "Couldn't create VTREE.CMD file."
  815.     'del VCOLLECT.CMD 1>NUL 2>NUL'
  816.     dummy = stream('VCOLLECT.CMD','C','open')
  817.     if dummy = 'READY:' then
  818.     do
  819.       say 'Creating a VCOLLECT.CMD file.'
  820.       call lineout 'VCOLLECT.CMD', "/* VCOLLECT (FM/2) command file.  Locate in a directory"
  821.       call lineout 'VCOLLECT.CMD', " * on your PATH. */"
  822.       call lineout 'VCOLLECT.CMD', "'@echo off'"
  823.       call lineout 'VCOLLECT.CMD', "arg arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9"
  824.       call lineout 'VCOLLECT.CMD', "if arg1 \= '' then "
  825.       call lineout 'VCOLLECT.CMD', "do"
  826.       call lineout 'VCOLLECT.CMD', "  if left(arg1,1,1) \= '/' then"
  827.       call lineout 'VCOLLECT.CMD', "  do"
  828.       call lineout 'VCOLLECT.CMD', "    arg1 = stream(arg1,'c','query exists')"
  829.       call lineout 'VCOLLECT.CMD', "  end"
  830.       call lineout 'VCOLLECT.CMD', "end"
  831.       call lineout 'VCOLLECT.CMD', "if arg2 \= '' then "
  832.       call lineout 'VCOLLECT.CMD', "do"
  833.       call lineout 'VCOLLECT.CMD', "  if left(arg2,1,1) \= '/' then"
  834.       call lineout 'VCOLLECT.CMD', "  do"
  835.       call lineout 'VCOLLECT.CMD', "    arg2 = stream(arg2,'c','query exists')"
  836.       call lineout 'VCOLLECT.CMD', "  end"
  837.       call lineout 'VCOLLECT.CMD', "end"
  838.       call lineout 'VCOLLECT.CMD', "if arg3 \= '' then "
  839.       call lineout 'VCOLLECT.CMD', "do"
  840.       call lineout 'VCOLLECT.CMD', "  if left(arg3,1,1) \= '/' then"
  841.       call lineout 'VCOLLECT.CMD', "  do"
  842.       call lineout 'VCOLLECT.CMD', "    arg3 = stream(arg3,'c','query exists')"
  843.       call lineout 'VCOLLECT.CMD', "  end"
  844.       call lineout 'VCOLLECT.CMD', "end"
  845.       call lineout 'VCOLLECT.CMD', "if arg4 \= '' then "
  846.       call lineout 'VCOLLECT.CMD', "do"
  847.       call lineout 'VCOLLECT.CMD', "  if left(arg4,1,1) \= '/' then"
  848.       call lineout 'VCOLLECT.CMD', "  do"
  849.       call lineout 'VCOLLECT.CMD', "    arg4 = stream(arg4,'c','query exists')"
  850.       call lineout 'VCOLLECT.CMD', "  end"
  851.       call lineout 'VCOLLECT.CMD', "end"
  852.       call lineout 'VCOLLECT.CMD', "if arg5 \= '' then "
  853.       call lineout 'VCOLLECT.CMD', "do"
  854.       call lineout 'VCOLLECT.CMD', "  if left(arg5,1,1) \= '/' then"
  855.       call lineout 'VCOLLECT.CMD', "  do"
  856.       call lineout 'VCOLLECT.CMD', "    arg5 = stream(arg5,'c','query exists')"
  857.       call lineout 'VCOLLECT.CMD', "  end"
  858.       call lineout 'VCOLLECT.CMD', "end"
  859.       call lineout 'VCOLLECT.CMD', "if arg6 \= '' then "
  860.       call lineout 'VCOLLECT.CMD', "do"
  861.       call lineout 'VCOLLECT.CMD', "  if left(arg6,1,1) \= '/' then"
  862.       call lineout 'VCOLLECT.CMD', "  do"
  863.       call lineout 'VCOLLECT.CMD', "    arg6 = stream(arg6,'c','query exists')"
  864.       call lineout 'VCOLLECT.CMD', "  end"
  865.       call lineout 'VCOLLECT.CMD', "end"
  866.       call lineout 'VCOLLECT.CMD', "if arg7 \= '' then "
  867.       call lineout 'VCOLLECT.CMD', "do"
  868.       call lineout 'VCOLLECT.CMD', "  if left(arg7,1,1) \= '/' then"
  869.       call lineout 'VCOLLECT.CMD', "  do"
  870.       call lineout 'VCOLLECT.CMD', "    arg7 = stream(arg7,'c','query exists')"
  871.       call lineout 'VCOLLECT.CMD', "  end"
  872.       call lineout 'VCOLLECT.CMD', "end"
  873.       call lineout 'VCOLLECT.CMD', "if arg8 \= '' then "
  874.       call lineout 'VCOLLECT.CMD', "do"
  875.       call lineout 'VCOLLECT.CMD', "  if left(arg8,1,1) \= '/' then"
  876.       call lineout 'VCOLLECT.CMD', "  do"
  877.       call lineout 'VCOLLECT.CMD', "    arg8 = stream(arg8,'c','query exists')"
  878.       call lineout 'VCOLLECT.CMD', "  end"
  879.       call lineout 'VCOLLECT.CMD', "end"
  880.       call lineout 'VCOLLECT.CMD', "if arg9 \= '' then "
  881.       call lineout 'VCOLLECT.CMD', "do"
  882.       call lineout 'VCOLLECT.CMD', "  if left(arg9,1,1) \= '/' then"
  883.       call lineout 'VCOLLECT.CMD', "  do"
  884.       call lineout 'VCOLLECT.CMD', "    arg9 = stream(arg9,'c','query exists')"
  885.       call lineout 'VCOLLECT.CMD', "  end"
  886.       call lineout 'VCOLLECT.CMD', "end"
  887.       call lineout 'VCOLLECT.CMD', "n = setlocal()"
  888.       call lineout 'VCOLLECT.CMD', "n = directory('"curdir"')"
  889.       call lineout 'VCOLLECT.CMD', "'start vcollect.exe 'arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9"
  890.       call lineout 'VCOLLECT.CMD', "n = endlocal()"
  891.       call stream 'VCOLLECT.CMD','C','close'
  892.     end
  893.     else say "Couldn't create VCOLLECT.CMD file."
  894.     'del INI.CMD 1>NUL 2>NUL'
  895.     dummy = stream('INI.CMD','C','open')
  896.     if dummy = 'READY:' then
  897.     do
  898.       say 'Creating an INI.CMD file.'
  899.       call lineout 'INI.CMD', "/* INI (FM/2) command file.  Locate in a directory"
  900.       call lineout 'INI.CMD', " * on your PATH. */"
  901.       call lineout 'INI.CMD', "'@echo off'"
  902.       call lineout 'INI.CMD', "arg arg1"
  903.       call lineout 'INI.CMD', "if arg1 \= '' then arg1 = stream(arg1,'c','query exists')"
  904.       call lineout 'INI.CMD', "n = setlocal()"
  905.       call lineout 'INI.CMD', "n = directory('"curdir"')"
  906.       call lineout 'INI.CMD', "'start INI.exe 'arg1"
  907.       call lineout 'INI.CMD', "n = endlocal()"
  908.       call stream 'INI.CMD','C','close'
  909.     end
  910.     else say "Couldn't create INI.CMD file."
  911.     'del EAS.CMD 1>NUL 2>NUL'
  912.     dummy = stream('EAS.CMD','C','open')
  913.     if dummy = 'READY:' then
  914.     do
  915.       say 'Creating an EAS.CMD file.'
  916.       call lineout 'EAS.CMD', "/* EAS (FM/2) command file.  Locate in a directory"
  917.       call lineout 'EAS.CMD', " * on your PATH. */"
  918.       call lineout 'EAS.CMD', "'@echo off'"
  919.       call lineout 'EAS.CMD', "arg arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9"
  920.       call lineout 'EAS.CMD', "if arg1 \= '' then "
  921.       call lineout 'EAS.CMD', "do"
  922.       call lineout 'EAS.CMD', "  if left(arg1,1,1) \= '/' then"
  923.       call lineout 'EAS.CMD', "  do"
  924.       call lineout 'EAS.CMD', "    arg1 = stream(arg1,'c','query exists')"
  925.       call lineout 'EAS.CMD', "  end"
  926.       call lineout 'EAS.CMD', "end"
  927.       call lineout 'EAS.CMD', "else arg1 = directory()"
  928.       call lineout 'EAS.CMD', "if arg2 \= '' then "
  929.       call lineout 'EAS.CMD', "do"
  930.       call lineout 'EAS.CMD', "  if left(arg2,1,1) \= '/' then"
  931.       call lineout 'EAS.CMD', "  do"
  932.       call lineout 'EAS.CMD', "    arg2 = stream(arg2,'c','query exists')"
  933.       call lineout 'EAS.CMD', "  end"
  934.       call lineout 'EAS.CMD', "end"
  935.       call lineout 'EAS.CMD', "if arg3 \= '' then "
  936.       call lineout 'EAS.CMD', "do"
  937.       call lineout 'EAS.CMD', "  if left(arg3,1,1) \= '/' then"
  938.       call lineout 'EAS.CMD', "  do"
  939.       call lineout 'EAS.CMD', "    arg3 = stream(arg3,'c','query exists')"
  940.       call lineout 'EAS.CMD', "  end"
  941.       call lineout 'EAS.CMD', "end"
  942.       call lineout 'EAS.CMD', "if arg4 \= '' then "
  943.       call lineout 'EAS.CMD', "do"
  944.       call lineout 'EAS.CMD', "  if left(arg4,1,1) \= '/' then"
  945.       call lineout 'EAS.CMD', "  do"
  946.       call lineout 'EAS.CMD', "    arg4 = stream(arg4,'c','query exists')"
  947.       call lineout 'EAS.CMD', "  end"
  948.       call lineout 'EAS.CMD', "end"
  949.       call lineout 'EAS.CMD', "if arg5 \= '' then "
  950.       call lineout 'EAS.CMD', "do"
  951.       call lineout 'EAS.CMD', "  if left(arg5,1,1) \= '/' then"
  952.       call lineout 'EAS.CMD', "  do"
  953.       call lineout 'EAS.CMD', "    arg5 = stream(arg5,'c','query exists')"
  954.       call lineout 'EAS.CMD', "  end"
  955.       call lineout 'EAS.CMD', "end"
  956.       call lineout 'EAS.CMD', "if arg6 \= '' then "
  957.       call lineout 'EAS.CMD', "do"
  958.       call lineout 'EAS.CMD', "  if left(arg6,1,1) \= '/' then"
  959.       call lineout 'EAS.CMD', "  do"
  960.       call lineout 'EAS.CMD', "    arg6 = stream(arg6,'c','query exists')"
  961.       call lineout 'EAS.CMD', "  end"
  962.       call lineout 'EAS.CMD', "end"
  963.       call lineout 'EAS.CMD', "if arg7 \= '' then "
  964.       call lineout 'EAS.CMD', "do"
  965.       call lineout 'EAS.CMD', "  if left(arg7,1,1) \= '/' then"
  966.       call lineout 'EAS.CMD', "  do"
  967.       call lineout 'EAS.CMD', "    arg7 = stream(arg7,'c','query exists')"
  968.       call lineout 'EAS.CMD', "  end"
  969.       call lineout 'EAS.CMD', "end"
  970.       call lineout 'EAS.CMD', "if arg8 \= '' then "
  971.       call lineout 'EAS.CMD', "do"
  972.       call lineout 'EAS.CMD', "  if left(arg8,1,1) \= '/' then"
  973.       call lineout 'EAS.CMD', "  do"
  974.       call lineout 'EAS.CMD', "    arg8 = stream(arg8,'c','query exists')"
  975.       call lineout 'EAS.CMD', "  end"
  976.       call lineout 'EAS.CMD', "end"
  977.       call lineout 'EAS.CMD', "if arg9 \= '' then "
  978.       call lineout 'EAS.CMD', "do"
  979.       call lineout 'EAS.CMD', "  if left(arg9,1,1) \= '/' then"
  980.       call lineout 'EAS.CMD', "  do"
  981.       call lineout 'EAS.CMD', "    arg9 = stream(arg9,'c','query exists')"
  982.       call lineout 'EAS.CMD', "  end"
  983.       call lineout 'EAS.CMD', "end"
  984.       call lineout 'EAS.CMD', "n = setlocal()"
  985.       call lineout 'EAS.CMD', "n = directory('"curdir"')"
  986.       call lineout 'EAS.CMD', "'start eas.exe 'arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9"
  987.       call lineout 'EAS.CMD', "n = endlocal()"
  988.       call stream 'EAS.CMD','C','close'
  989.     end
  990.     else say "Couldn't create EAS.CMD file."
  991.     'del UNDEL.CMD 1>NUL 2>NUL'
  992.     dummy = stream('UNDEL.CMD','C','open')
  993.     if dummy = 'READY:' then
  994.     do
  995.       say 'Creating an UNDEL.CMD file.'
  996.       call lineout 'UNDEL.CMD', "/* UNDEL (FM/2) command file.  Locate in a directory"
  997.       call lineout 'UNDEL.CMD', " * on your PATH. */"
  998.       call lineout 'UNDEL.CMD', "'@echo off'"
  999.       call lineout 'UNDEL.CMD', "n = setlocal()"
  1000.       call lineout 'UNDEL.CMD', "n = directory('"curdir"')"
  1001.       call lineout 'UNDEL.CMD', "'start undel.exe %1'"
  1002.       call lineout 'UNDEL.CMD', "n = endlocal()"
  1003.       call stream 'UNDEL.CMD','C','close'
  1004.     end
  1005.     else say "Couldn't create UNDEL.CMD file."
  1006.     'del KILLPROC.CMD 1>NUL 2>NUL'
  1007.     dummy = stream('KILLPROC.CMD','C','open')
  1008.     if dummy = 'READY:' then
  1009.     do
  1010.       say 'Creating a KILLPROC.CMD file.'
  1011.       call lineout 'KILLPROC.CMD', "/* KILLPROC (FM/2) command file.  Locate in a directory"
  1012.       call lineout 'KILLPROC.CMD', " * on your PATH. */"
  1013.       call lineout 'KILLPROC.CMD', "'@echo off'"
  1014.       call lineout 'KILLPROC.CMD', "n = setlocal()"
  1015.       call lineout 'KILLPROC.CMD', "n = directory('"curdir"')"
  1016.       call lineout 'KILLPROC.CMD', "'start killproc.exe'"
  1017.       call lineout 'KILLPROC.CMD', "n = endlocal()"
  1018.       call stream 'KILLPROC.CMD','C','close'
  1019.     end
  1020.     else say "Couldn't create KILLPROC.CMD file."
  1021.     'del VIEWINFS.CMD 1>NUL 2>NUL'
  1022.     dummy = stream('VIEWINFS.CMD','C','open')
  1023.     if dummy = 'READY:' then
  1024.     do
  1025.       say 'Creating a VIEWINFS.CMD file.'
  1026.       call lineout 'VIEWINFS.CMD', "/* VIEWINFS (FM/2) command file.  Locate in a directory"
  1027.       call lineout 'VIEWINFS.CMD', " * on your PATH. */"
  1028.       call lineout 'VIEWINFS.CMD', "'@echo off'"
  1029.       call lineout 'VIEWINFS.CMD', "n = setlocal()"
  1030.       call lineout 'VIEWINFS.CMD', "n = directory('"curdir"')"
  1031.       call lineout 'VIEWINFS.CMD', "'start viewinfs.exe'"
  1032.       call lineout 'VIEWINFS.CMD', "n = endlocal()"
  1033.       call stream 'VIEWINFS.CMD','C','close'
  1034.     end
  1035.     else say "Couldn't create VIEWINFS.CMD file."
  1036.     'del VIEWHELP.CMD 1>NUL 2>NUL'
  1037.     dummy = stream('VIEWHELP.CMD','C','open')
  1038.     if dummy = 'READY:' then
  1039.     do
  1040.       say 'Creating a VIEWHELP.CMD file.'
  1041.       call lineout 'VIEWHELP.CMD', "/* VIEWHELP (FM/2) command file.  Locate in a directory"
  1042.       call lineout 'VIEWHELP.CMD', " * on your PATH. */"
  1043.       call lineout 'VIEWHELP.CMD', "'@echo off'"
  1044.       call lineout 'VIEWHELP.CMD', "n = setlocal()"
  1045.       call lineout 'VIEWHELP.CMD', "n = directory('"curdir"')"
  1046.       call lineout 'VIEWHELP.CMD', "'start viewinfs.exe DUMMY'"
  1047.       call lineout 'VIEWHELP.CMD', "n = endlocal()"
  1048.       call stream 'VIEWHELP.CMD','C','close'
  1049.     end
  1050.     else say "Couldn't create VIEWHELP.CMD file."
  1051.     'del GLOBAL.CMD 1>NUL 2>NUL'
  1052.     dummy = stream('GLOBAL.CMD','C','open')
  1053.     if dummy = 'READY:' then
  1054.     do
  1055.       say 'Creating a GLOBAL.CMD file.'
  1056.       call lineout 'GLOBAL.CMD', "/* GLOBAL (FM/2) command file.  Locate in a directory"
  1057.       call lineout 'GLOBAL.CMD', " * on your PATH. */"
  1058.       call lineout 'GLOBAL.CMD', "'@echo off'"
  1059.       call lineout 'GLOBAL.CMD', "arg arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9"
  1060.       call lineout 'GLOBAL.CMD', "if arg1 \= '' then "
  1061.       call lineout 'GLOBAL.CMD', "do"
  1062.       call lineout 'GLOBAL.CMD', "  if left(arg1,1,1) \= '/' then"
  1063.       call lineout 'GLOBAL.CMD', "  do"
  1064.       call lineout 'GLOBAL.CMD', "    arg1 = stream(arg1,'c','query exists')"
  1065.       call lineout 'GLOBAL.CMD', "  end"
  1066.       call lineout 'GLOBAL.CMD', "end"
  1067.       call lineout 'GLOBAL.CMD', "else arg1 = directory()"
  1068.       call lineout 'GLOBAL.CMD', "if arg2 \= '' then "
  1069.       call lineout 'GLOBAL.CMD', "do"
  1070.       call lineout 'GLOBAL.CMD', "  if left(arg2,1,1) \= '/' then"
  1071.       call lineout 'GLOBAL.CMD', "  do"
  1072.       call lineout 'GLOBAL.CMD', "    arg2 = stream(arg2,'c','query exists')"
  1073.       call lineout 'GLOBAL.CMD', "  end"
  1074.       call lineout 'GLOBAL.CMD', "end"
  1075.       call lineout 'GLOBAL.CMD', "if arg3 \= '' then "
  1076.       call lineout 'GLOBAL.CMD', "do"
  1077.       call lineout 'GLOBAL.CMD', "  if left(arg3,1,1) \= '/' then"
  1078.       call lineout 'GLOBAL.CMD', "  do"
  1079.       call lineout 'GLOBAL.CMD', "    arg3 = stream(arg3,'c','query exists')"
  1080.       call lineout 'GLOBAL.CMD', "  end"
  1081.       call lineout 'GLOBAL.CMD', "end"
  1082.       call lineout 'GLOBAL.CMD', "if arg4 \= '' then "
  1083.       call lineout 'GLOBAL.CMD', "do"
  1084.       call lineout 'GLOBAL.CMD', "  if left(arg4,1,1) \= '/' then"
  1085.       call lineout 'GLOBAL.CMD', "  do"
  1086.       call lineout 'GLOBAL.CMD', "    arg4 = stream(arg4,'c','query exists')"
  1087.       call lineout 'GLOBAL.CMD', "  end"
  1088.       call lineout 'GLOBAL.CMD', "end"
  1089.       call lineout 'GLOBAL.CMD', "if arg5 \= '' then "
  1090.       call lineout 'GLOBAL.CMD', "do"
  1091.       call lineout 'GLOBAL.CMD', "  if left(arg5,1,1) \= '/' then"
  1092.       call lineout 'GLOBAL.CMD', "  do"
  1093.       call lineout 'GLOBAL.CMD', "    arg5 = stream(arg5,'c','query exists')"
  1094.       call lineout 'GLOBAL.CMD', "  end"
  1095.       call lineout 'GLOBAL.CMD', "end"
  1096.       call lineout 'GLOBAL.CMD', "if arg6 \= '' then "
  1097.       call lineout 'GLOBAL.CMD', "do"
  1098.       call lineout 'GLOBAL.CMD', "  if left(arg6,1,1) \= '/' then"
  1099.       call lineout 'GLOBAL.CMD', "  do"
  1100.       call lineout 'GLOBAL.CMD', "    arg6 = stream(arg6,'c','query exists')"
  1101.       call lineout 'GLOBAL.CMD', "  end"
  1102.       call lineout 'GLOBAL.CMD', "end"
  1103.       call lineout 'GLOBAL.CMD', "if arg7 \= '' then "
  1104.       call lineout 'GLOBAL.CMD', "do"
  1105.       call lineout 'GLOBAL.CMD', "  if left(arg7,1,1) \= '/' then"
  1106.       call lineout 'GLOBAL.CMD', "  do"
  1107.       call lineout 'GLOBAL.CMD', "    arg7 = stream(arg7,'c','query exists')"
  1108.       call lineout 'GLOBAL.CMD', "  end"
  1109.       call lineout 'GLOBAL.CMD', "end"
  1110.       call lineout 'GLOBAL.CMD', "if arg8 \= '' then "
  1111.       call lineout 'GLOBAL.CMD', "do"
  1112.       call lineout 'GLOBAL.CMD', "  if left(arg8,1,1) \= '/' then"
  1113.       call lineout 'GLOBAL.CMD', "  do"
  1114.       call lineout 'GLOBAL.CMD', "    arg8 = stream(arg8,'c','query exists')"
  1115.       call lineout 'GLOBAL.CMD', "  end"
  1116.       call lineout 'GLOBAL.CMD', "end"
  1117.       call lineout 'GLOBAL.CMD', "if arg9 \= '' then "
  1118.       call lineout 'GLOBAL.CMD', "do"
  1119.       call lineout 'GLOBAL.CMD', "  if left(arg9,1,1) \= '/' then"
  1120.       call lineout 'GLOBAL.CMD', "  do"
  1121.       call lineout 'GLOBAL.CMD', "    arg9 = stream(arg9,'c','query exists')"
  1122.       call lineout 'GLOBAL.CMD', "  end"
  1123.       call lineout 'GLOBAL.CMD', "end"
  1124.       call lineout 'GLOBAL.CMD', "n = setlocal()"
  1125.       call lineout 'GLOBAL.CMD', "n = directory('"curdir"')"
  1126.       call lineout 'GLOBAL.CMD', "'start global.exe' arg1 arg2 arg3 arg4 arg5 arg6 arg7 arg8 arg9"
  1127.       call lineout 'GLOBAL.CMD', "n = endlocal()"
  1128.       call stream 'GLOBAL.CMD','C','close'
  1129.     end
  1130.     else say "Couldn't create GLOBAL.CMD file."
  1131.     say ""
  1132.     parse upper var curdir curdir
  1133.     say "Please add the directory"
  1134.     say "  "curdir"\UTILS"
  1135.     say "to your PATH in CONFIG.SYS."
  1136.     say "┌──────────────────────────────────────────────────────────────────┐"
  1137.     say "│Remember, you'll need to reboot before such a change takes effect.│"
  1138.     say "│FM/2 will run fine from its WPS objects without this change; the  │"
  1139.     say "│proposed change allows it to be run from any command line, and for│"
  1140.     say "│other programs that might want to use FM/2 as its file manager to │"
  1141.     say "│find and run it easily.                                           │"
  1142.     say "└──────────────────────────────────────────────────────────────────┘"
  1143.     say "While you're in there, check your LIBPATH statement for a '.\' entry..."
  1144.     if existed \= "TRUE" then
  1145.     do
  1146.       say ""
  1147.       /* remove next 6 lines for unattended use */
  1148.       call charout ,'  Press [Enter] for more...'
  1149.       dummy = ''
  1150.       do until dummy = '0d'x
  1151.         dummy = SysGetKey('NOECHO')
  1152.       end
  1153.       call charout ,'0d1b'x'[K'
  1154.       rc = stream('fatopt.exe','c','query exists')
  1155.       say   "┌────────────────────────────────────────────────────────────────┐"
  1156.       if rc = '' then
  1157.       do
  1158.         say "│I suggest that you place the utilities from the FM/2 Utilities  │"
  1159.         say "│archive in this directory, also, in which case you should       │"
  1160.         say "│_definitely_ make the change to PATH so that FM/2 can find them.│"
  1161.       end
  1162.       say   "│You may want to tweak the command lines in the .CMD files I just│"
  1163.       say   "│built and/or those in the WPS objects in the FM/2 folder for    │"
  1164.       say   "│desired specific behaviors.  The READ.ME file will tell you how.│"
  1165.       say   "└────────────────────────────────────────────────────────────────┘"
  1166.     end
  1167.     if existed = 'TRUE' then
  1168.     do
  1169.       say ''
  1170.       say "If you have previously altered your CONFIG.SYS's PATH statement"
  1171.       say 'as instructed above, please ignore this rambling.'
  1172.     end
  1173.     say ""
  1174.     /* remove next 6 lines for unattended use */
  1175.     call charout ,'  Press [Enter] to continue...'
  1176.     dummy = ''
  1177.     do until dummy = '0d'x
  1178.       dummy = SysGetKey('NOECHO')
  1179.     end
  1180.     call charout ,'0d1b'x'[K'
  1181.   end
  1182.   else say "Couldn't create FM2.CMD file.  Panic."
  1183.   dummy = directory(curdir)
  1184. end
  1185. else say "Couldn't switch to "curdir"\utils"
  1186.  
  1187. /* Migrate old settings from FM2.INI if it exists and an FM3.INI doesn't */
  1188.  
  1189. rc = stream('fm3.ini','c','query exists')
  1190. if rc \= '' then
  1191.   say 'An FM3.INI exists -- not attempting to migrate 1.x information.'
  1192. else
  1193. do
  1194.   /* if we can find FM2.INI, run MIGINI.CMD */
  1195.   fm2ini = value('fm2ini',,'OS2ENVIRONMENT')
  1196.   if fm2ini \= '' then fm2ini = stream(fm2ini,'c','query exists')
  1197.   if fm2ini = '' then
  1198.   do
  1199.     fm2ini = value('fm2ini',,'OS2ENVIRONMENT')
  1200.     if fm2ini \= '' then
  1201.     do
  1202.       fm2ini = insert('\FM2.INI',fm2ini,length(fm2ini))
  1203.       fm2ini = stream(fm2ini,'c','query exists')
  1204.     end
  1205.   end
  1206.   fm2ini = SysSearchPath('PATH', 'FM2.INI')
  1207.   if fm2ini = '' then fm2ini = SysSearchPath('DPATH', 'FM2.INI')
  1208.   if fm2ini = '' then fm2ini = SysSearchPath('XPATH', 'FM2.INI')
  1209.   if fm2ini \= '' then
  1210.   do
  1211.     'call migini.cmd dummy'
  1212.     say ''
  1213.     say '  (You can remove the old FM/2 1.x files when installation completes.)'
  1214.     call SysSleep 2
  1215.     say ''
  1216.   end
  1217. end
  1218.  
  1219. /* type the install.dat file to show any critical info/notices */
  1220.  
  1221. /* NOTE:  remove following 8 lines for unattended use... */
  1222. rc = stream('install.dat','c','query exists')
  1223. if rc \= '' then
  1224. do
  1225.   'type install.dat'
  1226.   'DEL INSTALL.DAT 1>NUL 2>NUL'
  1227.   /* remove next 6 lines for unattended use */
  1228.   call charout ,'  Press [Enter] to continue...'
  1229.   dummy = ''
  1230.   do until dummy = '0d'x
  1231.     dummy = SysGetKey('NOECHO')
  1232.   end
  1233.   call charout ,'0d1b'x'[K'
  1234. end
  1235.  
  1236. /* Final words */
  1237.  
  1238. say '┌──────────────────────────────────────────────────────────────────────────┐'
  1239. say '│To move FM/2 to another directory, move the files, delete the FM/2 folder,│'
  1240. say '│then rerun INSTALL.  There is no need to "uninstall" to move FM/2.        │'
  1241. say '│                                                                          │'
  1242. say '│To remove FM/2 completely, run UNINSTAL and follow its directions.        │'
  1243. say '└──────────────────────────────────────────────────────────────────────────┘'
  1244. say "I'm done now."
  1245. say ''
  1246.  
  1247.