home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 6 File / 06-File.zip / os2cp210.zip / OS2COPY.CMD < prev    next >
OS/2 REXX Batch file  |  1994-05-22  |  18KB  |  485 lines

  1. /*
  2. ┌───────────────────────────────────────────────────────────────────────┐
  3. │ OS2Copy.CMD v.2.1.02 GA part 1 of 2.                                  │
  4. │                                                                       │
  5. │ REXX script to copy OS/2 2.1 GA HPFS or FAT BootManager system,       │
  6. │ from one drive letter to another  eg. from D: to E:,                  │
  7. │ from FAT to FAT, HPFS to HPFS.                                        │
  8. │                                                                       │
  9. │ Documentation is found in the file OS2COPY.DOC                        │
  10. │                                                                       │
  11. │ Copyright (C): John Ståhle                                            │
  12. │                289A Buddinge Hovedgade                                │
  13. │                DK-2880 Bagsværd                                       │
  14. │                Denmark, Europe                                        │
  15. │                Phone +45 44 98 66 18                                  │
  16. │                                                                       │
  17. │                Internet:            john.staahle@dkb.dk               │
  18. │                RIME and ILINK OS/2: John Staahle                      │
  19. │                                                                       │
  20. │ Disclaimer, warning and what not:                                     │
  21. │ !! NO responsibility or any other obligation you can ever think of    │
  22. │    is assumed, honored or anything else.                              │
  23. └───────────────────────────────────────────────────────────────────────┘ 
  24. */
  25. Call RxFuncAdd SysLoadFuncs, RexxUtil, SysLoadFuncs
  26. CALL SysLoadFuncs
  27.  
  28. PARSE UPPER Arg all_args
  29.  
  30. HPFSSys='HPFS' 
  31. FATSys='FAT'
  32.  
  33. '@ECHO OFF'
  34. 'Set PROMPT=$E[1;33m$P$G'
  35. CALL SysCls
  36. CALL Startmeddelelse
  37. CALL FindFiler
  38. CALL GetYesNo
  39. CALL SysCls
  40.  
  41. CALL HentParametre
  42. CALL SysCls
  43. IF (FromDrive == ToDrive) THEN DO
  44.    SAY 'FromDrive ('FromDrive') is the same as ToDrive ('ToDrive') NO GO!'
  45.    'PAUSE'
  46.    CALL SysCls
  47.    CALL HentParametre
  48.    IF (FromDrive == ToDrive) THEN EXIT
  49.    CALL SysCls
  50. END
  51.  
  52. CALL Kopimeddelelse
  53. IF (OK \= YesLetter) THEN DO
  54.    SAY
  55.    EXIT
  56. END
  57. CALL SysCls
  58.  
  59. /* Here goes */
  60.  
  61. CALL CheckInitFiles
  62. CALL EditInitList
  63. CALL CreateStartupFile
  64. CALL FdiskMsg
  65.  
  66. 'FDISK'
  67.  
  68. CALL KaldOS2Copy2
  69.  
  70. EXIT
  71.  
  72. /*───────────────────────────────────────────────────────────────────────*/
  73.  
  74. Startmeddelelse:
  75.  SAY '┌────────────────────────────────────────────────────────────────────────┐'
  76.  SAY '│ OS2Copy.1 v.2.1 GA, no. 1 of 2, Copyright John Ståhle(C)               │'
  77.  SAY '│                                                                        │'
  78.  SAY '│ !!! No other process may be active while this job is running !!!       │'
  79.  SAY '│                                                                        │'
  80.  SAY '│          This program will copy the ENTIRE OS/2 partition              │'
  81.  SAY '│          to another partition (drive-letter or drive)                  │'
  82.  SAY '│                                                                        │'
  83.  SAY '│ You may get messages telling that OS2.INI, OS2SYS.INI and SWAPPER.DAT  │'
  84.  SAY '│ can NOT be copied (this is during the XCOPY part).                     │'
  85.  SAY "│ Don't worry these files will be copied and edited later in the process.│"
  86.  SAY '├────────────────────────────────────────────────────────────────────────┤'
  87.  SAY '│             Press Control C  to STOP  - or                             │'
  88.  SAY '└────────────────────────────────────────────────────────────────────────┘'
  89.  SAY 
  90.  'PAUSE'
  91. RETURN
  92.  
  93. /*.......................................................................*/
  94.  
  95. FindFiler:
  96.    
  97.    CopyFil = 'OS2COPY2.CMD'
  98.    Os2Copy2Fil = SysSearchPath('PATH',CopyFil)
  99.    IF (Os2Copy2Fil == '') then DO
  100.       NoFileName = CopyFil
  101.       CALL FileNotThere
  102.       CALL GoodBye
  103.    END
  104.  
  105.    CInitExe = 'InitEdit.EXE'
  106.    InitEditExe = SysSearchPath('PATH',CInitExe)
  107.    IF (InitEditExe == '') then DO
  108.       NoFileName = CInitExe
  109.       CALL FileNotThere
  110.       CALL GoodBye
  111.    END
  112.  
  113.    YNFile = 'YesNo.LNG'
  114.    YesNoFile = SysSearchPath('PATH',YNFile)
  115.    IF (YesNoFile == '') then DO
  116.       NoFileName = YNFile
  117.       CALL FileNotThere
  118.       CALL GoodBye
  119.    END
  120.    
  121.    IF ((FromFilSys == FATSys) & (ToFilSys == HPFSSys)) THEN DO
  122.       BootStrap = 'OS2BOOT.'SubStr(HPFSSys,1,3)
  123.       CopyBootStrap = SysSearchPath('PATH',BootStrap)
  124.       IF (CopyBootStrap == '') then DO
  125.          NoFileName = YesNoFil
  126.          CALL FileNotThere
  127.          CALL GoodBye
  128.          EXIT
  129.       END
  130.    END
  131.    
  132.    cInitEditSTD = 'InitEdit.STD'
  133.    cInitSTD     = SysSearchPath('PATH',cInitEditSTD)
  134.    IF (cInitSTD == '') then DO
  135.       NoFileName = cInitEditSTD
  136.       CALL FileNotThere
  137.       CALL GoodBye
  138.    END
  139.    
  140.    InitEditList = 'InitEdit.LST'
  141.    cInitList    = SysSearchPath('PATH',InitEditList)
  142.    IF (cInitList \= '') then DO
  143.       'DEL 'cInitList' >NUL'
  144.    END
  145.    cInitList = SubStr(cInitSTD,1,LastPos('.',cInitSTD))||'LST'
  146.    
  147.    FraDrev   = SUBSTR(DIRECTORY(),1,2)
  148.  
  149.    InitFil = LineIn(cInitSTD,1,1)
  150.    DO WHILE InitFil  \=  '>INIT_FILES'
  151.       InitFil = LineIn(cInitSTD)
  152.    END
  153.    InitFil = LineIn(cInitSTD)
  154.    DO WHILE ((InitFil \= '>BIN_FILES') & (LEFT(InitFil,1) == '\'))
  155.       IndIni    = Substr(InitFil,2,LENGTH(InitFil)-1)
  156.       CInitTest = SysSearchPath('PATH',IndIni)
  157.       IF (CInitTest == '') then DO
  158.          NoFileName = IndIni
  159.          CALL FileNotFound
  160.       END
  161.       InitFil = LineIn(cInitSTD)
  162.    END
  163. RETURN
  164.  
  165. /*.......................................................................*/
  166.  
  167. FileNotThere:
  168.    SAY '┌───────────────────────────────────────────────────────────────────┐'
  169.    SAY '│' NoFileName' was >> NOT <<  found in your path'
  170.    SAY '│' NoFileName' is crucial for the success of this procedure'
  171.    SAY '│ !!! Path to 'NoFileName' must be included in your Config.Sys   !!!'
  172.    SAY '│ !!! Path to 'NoFileName' must be included in your Autoexec.Bat !!!'
  173.    SAY '└───────────────────────────────────────────────────────────────────┘'
  174. RETURN
  175.  
  176. /*.......................................................................*/
  177.  
  178. FileNotFound:
  179.    SAY '┌─────────────────────────────────────────────────────────────────┐'
  180.    SAY '│ 'NoFileName' was >> NOT <<  found in your path'
  181.    SAY '│                                                                 │'
  182.    SAY '│ Place this (and the other files listed in 'cInitSTD')    │'
  183.    SAY '│ in your PATH - or make sure these files are not needed          │'
  184.    SAY '│ for your setup, in which case you must remove them from         │'
  185.    SAY '│ 'cInitSTD' (a file like PMDIARY.INI may not be in use)   │'
  186.    SAY '│                                                                 │'
  187.    SAY '│ You can start another thread and make the changes now.          │'
  188.    SAY '└─────────────────────────────────────────────────────────────────┘'
  189.    'PAUSE'
  190. RETURN
  191.  
  192. /*.......................................................................*/
  193.  
  194. GetYesNo:
  195.    YesNo = ' '
  196.    DO WHILE (SubStr(YesNo,2,1) \= '/')
  197.       YesNo = LineIn(YesNoFile)
  198.    END
  199.    YesLetter = SubStr(YesNo,1,1)
  200.    NoLetter  = SubStr(YesNo,3,1)
  201.    IF (YesLetter == ' ') THEN YesLetter = 'Y'
  202.    IF (NoLetter  == ' ') THEN NoLetter  = 'N'
  203.    iClose=LineOut(YesNoFile)
  204. RETURN
  205. /*.......................................................................*/
  206.  
  207. HentParametre:
  208.    
  209. ArgNo = 1
  210. IF (word(all_args,ArgNo) == '') THEN DO
  211.   SAY 'OS2Copy <FromDrive>[:]  [<ToDrive>[:]]  [<To file system>]'
  212.   SAY
  213.   SAY ' <FromDrive>:        Partition with OS/2 installed.'
  214.   SAY 
  215.   SAY ' <ToDrive>:          Partition OS/2 is to be copied to,'
  216.   SAY '                     OPTIONAL in script 1.'
  217.   SAY
  218.   SAY ' <To file system>    file system to be installed on <ToDrive>:'
  219.   SAY '                     OPTIONAL in script 1.'
  220.   SAY 
  221. END
  222.  
  223. CALL HentFraParametre
  224. CALL HentTilParametre
  225.  
  226. RETURN
  227.  
  228. /*.......................................................................*/
  229.  
  230. HentFraParametre:
  231.    k=SysCurPos()
  232.    FromDrive=word(all_args,ArgNo)
  233.    DO WHILE (FromDrive == '')
  234.       CALL SysCurPos word(k,1), 0
  235.       SAY 'Partition to copy OS/2 system FROM (X:) ?'
  236.       CALL SysCurPos word(k,1), 48
  237.       PULL FromDrive
  238.    END
  239.    IF (SUBSTR(FromDrive,2,1)<>':') THEN FromDrive = FromDrive':'
  240.  
  241.    'FDISK /Query |'RxQueue
  242.    DO WHILE (QUEUED() > 0)
  243.       PARSE PULL cFilSysInfo
  244.       IF (SubStr(cFilSysInfo,19,2) == FromDrive) THEN DO
  245.          IF (SubStr(cFilSysInfo,30,2) == '07') THEN FromFilSys = HPFSSys
  246.          IF (SubStr(cFilSysInfo,30,2) == '06') THEN FromFilSys = FATSys
  247.       END
  248.    END
  249. RETURN
  250.  
  251. /*.......................................................................*/
  252. HentTilParametre:
  253.    ArgNo   = ArgNo + 1
  254.    ToDrive = word(all_args,ArgNo)
  255.    k       = SysCurPos()
  256.    IF (ToDrive == '') THEN DO
  257.       CALL SysCurPos word(k,1), 0
  258.       SAY 'Partition to copy your OS/2 system TO (X:) ?'
  259.       SAY '(OPTIONAL in this script).'
  260.       CALL SysCurPos word(k,1), 48
  261.       PULL ToDrive 
  262.    END
  263.  
  264.    IF (ToDrive\='') THEN DO
  265.       IF (SUBSTR(ToDrive,2,1) \= ':') THEN DO
  266.          ToDrive = ToDrive':'
  267.       END
  268.       ArgNo = ArgNo + 1
  269.       ToFilSys=word(all_args,ArgNo)
  270.       IF (ToFilSys == '') THEN IF (FromFilSys == FATSys) THEN DO
  271.          SAY 
  272.          k = SysCurPos()
  273.          SAY 'File system for new OS/2 system (HPFS/FAT) ?'
  274.          SAY '(OPTIONAL - read OS2Copy.DOC; default is 'FromFilSys').'
  275.          CALL SysCurPos word(k,1), 48
  276.          PULL ToFilSys
  277.       END
  278.  
  279.       IF (ToFilSys\='') THEN DO
  280.          IF (substr(ToFilSys,1,1) == substr(FATSys,1,1))  THEN ToFilSys = FATSys
  281.          IF (substr(ToFilSys,1,1) == substr(HPFSSys,1,1)) THEN ToFilSys = HPFSSys
  282.  
  283.          IF ((FromFilSys == HPFSSys) & (ToFilSys == FATSys)) THEN DO
  284.             SAY 'Mission impossible: You cannot copy a HPFS system to a FAT system'
  285.             ToFilSys = ''
  286.             EXIT
  287.          END
  288.          IF ((FromFilSys == FATSys) & (ToFilSys == HPFSSys)) THEN DO
  289.             SAY '┌──────────────────────────────────────────────────────────────────┐'
  290.             SAY '│ Copying a 'FATSys' to a 'HPFSSys'                                          │'
  291.             SAY '│ is not an ideal copy, since several subdirectories               │'
  292.             SAY '│ and files have different name under 'FATSys' and 'HPFSSys'                 │'
  293.             SAY '│ The result will become a 'FATSys' OS/2 on a 'HPFSSys' formatted partition. │'
  294.             SAY '└──────────────────────────────────────────────────────────────────┘'
  295.          END
  296.       END
  297.       IF ((ToFilSys\='') & (FromFilSys\=ToFilSys)) THEN DO
  298.          SAY '┌──────────────────────────────────────────────────────────────────┐'
  299.          k = SysCurPos()
  300.          CALL SysCurPos word(k,1), 0
  301.          SAY '│ Is the system you copy TO to become a FAT or HPFS system (F/H)   │'
  302.          SAY '└──────────────────────────────────────────────────────────────────┘'
  303.          ToFilSys = ''
  304.          DO WHILE ((ToFilSys\=HPFSSys) & (ToFilSys\=FATSys))
  305.             CALL SysCurPos word(k,1), 65
  306.             CDum  = SysGetKey()
  307.             PARSE UPPER VAR CDum ToFilSys
  308.             IF (substr(ToFilSys,1,1) == substr(FATSys,1,1))  THEN ToFilSys = FATSys
  309.             IF (substr(ToFilSys,1,1) == substr(HPFSSys,1,1)) THEN ToFilSys = HPFSSys
  310.          END
  311.       END
  312.    END
  313.  
  314.    IF (substr(ToFilSys,1,1) == substr(FATSys,1,1))  THEN ToFilSys = FATSys
  315.    IF (substr(ToFilSys,1,1) == substr(HPFSSys,1,1)) THEN ToFilSys = HPFSSys
  316.    
  317.    CALL SysCurPos word(k,1), 0
  318.    SAY 'Partition to copy OS/2 system   TO = 'ToDrive
  319.    
  320.    IF (ToDrive  ==  '') THEN ToDrive  = ' '
  321.    IF (ToFilSys ==  '') THEN ToFilSys = ' '
  322.  
  323. RETURN
  324.  
  325. /*.......................................................................*/
  326.  
  327. Kopimeddelelse:
  328.    SAY '┌──────────────────────────────────────────────────────────────┐'
  329.    SAY '│ Copy the ENTIRE OS/2 partition FROM  'FromDrive'                      │'
  330.    SAY '└──────────────────────────────────────────────────────────────┘'
  331.    IF (ToDrive\='') THEN DO
  332.       SAY '┌──────────────────────────────────────────────────────────────┐'
  333.       SAY '│ Copy the ENTIRE OS/2 partition   TO  'ToDrive'                      │'
  334.       SAY '└──────────────────────────────────────────────────────────────┘'
  335.    END
  336.    IF ((FromFilSys == FATSys) & (ToFilSys == HPFSSys)) THEN DO
  337.       SAY '┌──────────────────────────────────────────────────────────────┐'
  338.       SAY '│ 'FromFilSys'  ----->  'ToFilSys'                                            │'
  339.       SAY '└──────────────────────────────────────────────────────────────┘'
  340.    END
  341.    k=SysCurPos()
  342.    DO WHILE ((OK<>YesLetter) & (OK<>NoLetter))
  343.       CALL SysCurPos word(k,1),0
  344.       SAY '┌──────────────────────────────────────────────────────────────┐'
  345.       SAY '│ Are you sure ('YesNo') ?                                         │'
  346.       SAY '└──────────────────────────────────────────────────────────────┘'
  347.       CALL SysCurPos word(k,1)+1,24
  348.       JaNej = SysGetKey()
  349.       PARSE UPPER VAR JaNej OK
  350.    END
  351. RETURN
  352.  
  353. /*.......................................................................*/
  354. /* If OS2.INI and OS2SYS.INI cannot be found on the FromDrive, we are lost! */
  355.  
  356. CheckInitFiles:
  357.    FromInis = FromDrive'\*.INI'
  358.    rc = SysFileTree(FromInis,'InitFiles.','FSO')
  359.    IF ((rc \= 0) | (InitFiles.0 < 2)) THEN DO
  360.       CALL NoInitFilesHere
  361.       EXIT
  362.    END
  363. RETURN
  364.    
  365. /*.......................................................................*/
  366. EditInitList:
  367.    cIndRec = LineIn(cInitSTD,1,1)
  368.    rc = LineOut(cInitList, cIndRec,1)
  369.    cIndRec = LineIn(cInitSTD)
  370.    DO WHILE (cIndRec \= '>BIN_FILES')
  371.       rc = LineOut(cInitList, cIndRec)
  372.       cIndRec = LineIn(cInitSTD)
  373.    END
  374.    rc = LineOut(cInitList, cIndRec)
  375.    cIndRec = LineIn(cInitSTD)
  376.    DO WHILE (LEFT(cIndRec,1) == '\')
  377.       rc = LineOut(cInitList, cIndRec)
  378.       cIndRec = LineIn(cInitSTD)
  379.    END
  380.    
  381.    i = 1
  382.    DO WHILE (i <= InitFiles.0)
  383.       IF ((FileSpec('NAME',InitFiles.i) \= 'OS2.INI') & (FileSpec('NAME',InitFiles.i) \= 'OS2SYS.INI')) THEN DO
  384.          StartPos = Pos('\',InitFiles.i)
  385.          SlutPos  = LENGTH(InitFiles.i)-StartPos+1
  386.          rc = LineOut(cInitList,SubStr(InitFiles.i,StartPos,SlutPos))
  387.       END
  388.       i = i + 1
  389.    END
  390.    
  391.    rc = LineOut(cInitList, cIndRec)
  392.    cIndRec = LineIn(cInitSTD)
  393.    DO WHILE (cIndRec \= '>>>THE_END')
  394.       cIndRec = LineIn(cInitSTD)
  395.       rc = LineOut(cInitList, cIndRec)
  396.    END
  397.    rc = LineOut(cInitList)
  398.    
  399.    cInitEditLis2 = SubStr(cInitList,1,LastPos('.',cInitList))'LS2'
  400.    'COPY 'cInitList' 'cInitEditLis2
  401.    cInitLis2    = SysSearchPath('PATH',cInitEditList2)
  402. RETURN
  403.  
  404. /*.......................................................................*/
  405. NoInitFilesHere:
  406.    SAY 'Mission impossible: Filesearch for 'FromInis' failed.'
  407.    SAY 'Good-bye, cruel world'
  408.    CALL CleanUp
  409. RETURN
  410.  
  411. /*.......................................................................*/
  412. CreateStartupFile:
  413.  
  414.    SAY '┌────────────────────────────────────────────────────────────┐'
  415.    SAY '│ An error message (SYS0002/SYS1083) or two like:            │'
  416.    SAY '│ SYSxxxx: The system cannot find the file specified.        │'
  417.    SAY '│                 >>> is  OK <<<                             │'
  418.    SAY '└────────────────────────────────────────────────────────────┘'
  419.  
  420.    FromDrive
  421.  
  422.    'DEL 'FromDrive'StartUp.@#@'
  423.    cStartFile=FromDrive'\Startup.Cmd'
  424.    rc = SysFileTree(cStartFile,'cStartUp.','FO')
  425.    IF ((rc \= 0) | (cStartUp.0 == 0)) THEN DO
  426.       CALL LineOut cStartFile,'Good morning, Madam or Sir.',1
  427.       iClose=LineOut(cStartFile)
  428.    END
  429.    'REN 'cStartFile' StartUp.@#@'
  430.    
  431.    CALL LineOut cStartFile,'@Echo OFF',1
  432.    IF (Todrive\=' ') THEN DO
  433.       CALL LineOut cStartFile,'OS2Copy2 'FromDrive' 'Todrive' 'ToFilSys
  434.    END
  435.    ELSE DO
  436.       CALL LineOut cStartFile, 'OS2Copy2 'FromDrive
  437.    END
  438.    CALL LineOut cStartFile,'EXIT'
  439.    iClose=LineOut(cStartFile)
  440.    DROP cStartFile
  441. RETURN
  442.  
  443. /*.......................................................................*/
  444. KaldOS2Copy2:
  445.    IF (Todrive\=' ') THEN DO
  446.       CALL OS2Copy2' 'FromDrive' 'Todrive' 'ToFilSys
  447.    END
  448.    ELSE DO
  449.       CALL OS2Copy2' 'FromDrive
  450.    END
  451. RETURN
  452.  
  453. /*.......................................................................*/
  454.  
  455. FdiskMsg:
  456.    SAY
  457.    SAY '┌────────────────────────────────────────────────────────────┐'
  458.    SAY '│ An error message like:                                     │'
  459.    SAY '│ SYSxxxx: The specified disk or diskette cannot be accessed │'
  460.    SAY '│                 >>> is  OK <<<                             │'
  461.    SAY '└────────────────────────────────────────────────────────────┘'
  462.    SAY '┌────────────────────────────────────────────────────────────┐'
  463.    SAY '│ Now starting FDISK                                         │'
  464.    SAY '│ IF you are copying TO disk 1 of another computer then      │'
  465.    SAY '│    Remember to create 'ToDrive' as a PRIMARY partition            │'
  466.    SAY '│ ELSE if you are copying from one partition to another      │'
  467.    SAY '│    Remember to create 'ToDrive' as a LOGICAL partition            │'
  468.    SAY '│                                                            │'
  469.    SAY '│ Insert the partition you created in BootManager            │'
  470.    SAY '├────────────────────────────────────────────────────────────┤'
  471.    SAY '│             Press Control C  to STOP  - or                 │'
  472.    SAY '└────────────────────────────────────────────────────────────┘'
  473.    SAY
  474.    'Pause'
  475. RETURN
  476.  
  477. /*.......................................................................*/
  478. GoodBye:
  479.    SAY 'Mission impossible. Good-bye, cruel world'
  480.    CALL CleanUp
  481.    EXIT
  482. RETURN
  483.  
  484. /*───────────────────────────────────────────────────────────────────────*/
  485.