home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format 50 / af050sub.adf / LHD / LHD.rexx < prev    next >
OS/2 REXX Batch file  |  1993-06-17  |  6KB  |  123 lines

  1. /*
  2.  
  3.                         $VER: LHD 1.03 (03-MAR-93)
  4.  
  5.                            © 1993 Robert Hofmann
  6.  
  7.                            2:2400/24@fidonet.org
  8.                           39:171/100@amiganet.ftn
  9.  
  10. */
  11.  
  12.  
  13.  
  14. LHA     = 'c:lha'                          /* path & name of LHA       */
  15.  La_Opt = '-I -2 -x -r -Y -e -Qh32 -b64 a' /* LHA-options for arcing   */
  16.  Lx_Opt = '-I -M -Qd -a -b64 e'            /* LHA-options for unarcing */
  17.  
  18. FloppyLike = 'RAD: RD0: RD1: RD2: RD3: RD4: RD5:'
  19.  
  20. Assign  = 'c:assign'           /* path & name of ASSIGN -command */
  21. Format  = 'Sys:system/format'  /* path & name of FORMAT -command */
  22.  F_Opt  = 'Quick Noicons FFS'  /* format-options                 */
  23. Info    = 'c:info'             /* path & name of INFO   -command */
  24. Install = 'c:install'          /* path & name of INSTALL-command */
  25. Relabel = 'c:relabel'          /* path & name of RELABEL-command */
  26.  
  27. TmpDir  = 'T:'                 /* temporary directory            */
  28.  
  29.  
  30.  
  31. parse arg mode in out DiskName .; mode = upper(mode); DiskName = strip(strip(DiskName),'b','"')
  32. if out = '' then out = 'DF0:'
  33.  
  34. call Init; call Header; if mode = '?' then call Usage
  35.  
  36. if ~show(l, "rexxsupport.library") then; if ~addlib("rexxsupport.library", 0, -30, 0) then do
  37.  say LF" *** Break: Couldn't access rexxsupport.library!"LF; exit; end
  38.  
  39. if right(TmpDir,1) ~= ':' & right(TmpDir,1) ~= '/' then TmpDir = TmpDir'/'
  40. call delete(TmpFile); call delete(NTP)
  41.  
  42. address command; select
  43.  
  44.  when mode = 'READ' then do; if ~exists(in) then do; say LF' *** Break: No valide device or path' upper('"'in'"')LF; exit; end
  45.   if DiskName = '' then do; info '>'TmpFile in; call open(tmp, TmpFile, 'R')
  46.    do until eof(tmp); line = readln(tmp); parse var line left . . . . . . right
  47.     if find(upper(line), 'UNREADABLE') ~= 0 then do; say LF'*** Break: Not a dos-disk in unit' upper(in)LF LF; exit; end
  48.     left = strip(left); right = strip(right)
  49.     if upper(left) = upper(in) then do; DiskName = right
  50.      if upper(word(DiskName,1)) = 'ONLY' then DiskName = subword(DiskName,2)
  51.      leave; end; end; call close(tmp)
  52.    if DiskName = '' then do; temp = translate(translate(out,' ',':'),' ','/'); temp = word(temp, words(temp))
  53.     parse var temp DiskName '.' .; say LF' *** Info: Can not find DiskName.'LF
  54.     options prompt '  Shall I use' upper('"'DiskName'"')' (Y/N)? '; pull ask; say
  55.     if ask ~= 'Y' & ask ~= '' then do; options prompt '  Enter name to be used: '; parse pull DiskName; say
  56.      if DiskName = '' then exit; end; end; end
  57.   if ~open(tmp, NTP, 'W') then do; say LF' *** Break: Can not open TempFile' upper(NTP)LF; exit; end
  58.   call writeln(tmp, DiskName); call close(tmp)
  59.   if index(out,'.') = 0 then out = out'.LHD'
  60.   if exists(out) then do; say ' 'upper(out) 'already exists.'LF
  61.    options prompt '  Shall I overwrite it (Y/N)? '; pull ask; say
  62.    if ask = 'Y' then call delete(out); else exit; end
  63.   say ' Archiving datas from' upper('"'in'"') 'to' upper('"'out'"')'...'LF
  64.   if right(in,1) ~= ':' & right(in,1) ~= '/' then in = in'/'; if exists('c:filenote') then 'c:filenote >nil:' NTP '"'LHD'"'
  65.   lha '>nil:' La_Opt out NTP; lha La_Opt out in con; length = word(statef(out),2)
  66.   say ' New archive successfully created. Length:' length 'Bytes.'LF LF LF' All done!'LF LF
  67.   end
  68.  
  69.  when mode = 'WRITE' then do; if index(in,'.') = 0 then in = in'.LHD'
  70.   if right(out,1) ~= ':' & right(out,1) ~= '/' then out = out'/'
  71.   if word(statef(in),2) ~> 0 then do; say ' *** Break: Can not open input-file' upper(in)LF; exit; end
  72.   if DiskName = '' then do; lha '>nil: -I e' in NT TmpDir
  73.    if ~open(tmp, NTP, 'R') | word(statef(NTP),2) = 0 then do; temp = translate(translate(in,' ',':'),' ','/'); temp = word(temp, words(temp))
  74.     parse var Temp DiskName '.' .; say ' *** Info: No diskname found in "'upper(in)'" !!!'LF'           => Using archivename: "'upper(DiskName)'".'LF; end
  75.    else do; DiskName = readln(tmp); call close(tmp); end; end
  76.   if upper(left(out,2)) = 'DF' | find(upper(FloppyLike), upper(out)) ~= 0 then
  77.    if format = '' then do; relabel out '"'DiskName'"'; install out; end
  78.    else do; format con 'drive' out 'name' '"'DiskName'"' F_Opt; install out; end
  79.   else do; if ~exists(out) then do; say ' "'upper(out)'" does not exist!'; options prompt '  Shall I create it (Y/N)? '
  80.     pull ask; say; if ask = 'Y' | ask = '' then call makedir(left(out, length(out)-1)); else exit; end
  81.    assign '"'DiskName':"' out; say ' Assigned' upper('"'DiskName':"') 'to' upper('"'out'"')LF; end
  82.   say ' Extracting datas from' upper('"'in'"') 'to' upper('"'out'"')'...'LF
  83.   LHA Lx_Opt in '~('NT')' out con; say LF' All done!'LF LF
  84.   end
  85.  
  86.  when mode = 'TEST' then do; if index(in,'.') = 0 then in = in'.LHD'; lha 't' in '~('NT')'; end
  87.  
  88.  when mode = 'VIEW' then do; if index(in,'.') = 0 then in = in'.LHD'; lha 'v' in '~('NT')'; end
  89.  
  90.  otherwise do; say ' *** Break: Unknown mode' mode'!!!'LF LF; call Usage; end
  91.  
  92. end
  93.  
  94. call delete(TmpFile); call delete(NTP)
  95.  
  96. exit
  97.  
  98.  
  99. Header:
  100.  
  101.  say LF LF LHD LF '~~~~~~~~~'LF
  102.  return
  103.  
  104.  
  105. Init:
  106.  
  107.  interpret 'LHD = "'reverse("7627F6E24756E6F6469666044323F203034323A32302E6E616D666F6840247275626F6250233939313029A02C23303E21367024484C4")'"x'
  108.  Con     = '<>Con:20/20/620/100/'left(translate(LHD,'_',' '),32)
  109.  LF      = 'a'x
  110.  NT      = 'DISKNAME.TXT'
  111.  NTP     = TmpDir || NT
  112.  TmpFile = TmpDir'DiskLHA.tmp'
  113.  return
  114.  
  115.  
  116. Usage:
  117.  
  118.  say ' RX LHD READ  <DFx:|{inpath}> <{outfile}[.LHD]> [DiskName]'LF
  119.  say '        WRITE <{infile}[.LHD]> <DFx:|{outpath}> [DiskName]'LF
  120.  say '        TEST  <{file}[.LHD]>'LF
  121.  say '        VIEW  <{file}[.LHD]>'LF LF; exit
  122.  
  123.