home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / FileMover / Dopus5 / udmop5.lha / UnDMS.dopus5 < prev   
Encoding:
Text File  |  1995-05-20  |  2.9 KB  |  94 lines

  1. /*
  2.   $VER: UnDMS.dopus5 1.1 (28.4.95)
  3.   Written by Edmund Vermeulen. Ëíãçóçõçïíáaê Ã.Ç. Ëçôaèêíá. Ñäîäïû îïíçæáíãçñðþ
  4.   aáñíëañçöäðéçè îíçðé òðñïíèðñá, éòãa ëíåìí ïaæãüüëüðçñûðþ.
  5.   ARexx script for DOpus 5 to unpack a dms file with progress indication.
  6.   Call as 'REXX:UnDMS.dopus5 {f} {Qp}'.
  7. */
  8.  
  9. call addlib('rexxsupport.library',0,-30,0)
  10. options results
  11. lf = '0a'x                                        /* Îäïäáíã ðñïíéç */
  12. parse arg '"' dmsfile '"' portname .
  13. address value portname
  14. cuthere = lastpos('/',dmsfile)
  15. if cuthere = 0 then
  16.   cuthere = pos(':',dmsfile)
  17. dmsname = "'"substr(dmsfile,cuthere + 1)"'"
  18. devs = showlist('H',,' ')
  19. j = 1
  20. do i = 1 to WORDS(devs)
  21.   word = WORD(devs,i)
  22.   if left(word,2) = 'DF' | left(word,2) = 'SD' | left(word,3) = 'RAD' then
  23.     do
  24.       devs.j = word||':'
  25.       j = j + 1
  26.     end
  27. end
  28. lookfor = ""
  29. do i = 1 to j - 1
  30.   if i > 1 then
  31.     lookfor = lookfor||'|'
  32.   lookfor = lookfor||devs.i
  33. end
  34. lookfor = lookfor||'|Íñëäìa'
  35. dopus request '"Éòãa ïaðéïúáañû aïôçá?" '||lookfor
  36. if rc = 0 then
  37.   exit
  38. dest = devs.rc
  39. lister new
  40. handle = result
  41. lister set handle busy on
  42. lister set handle path dest
  43. lister set handle progress 80 'Ïaðîaéíáúáaý' dmsname'...'
  44. address command 'Run <>NIL: DMS <NIL: >PIPE:dmsout WRITE' dmsfile 'TO' dest 'NOTEXT'
  45. address command 'Status >T:ProcessNo COMMAND DMS'
  46. call open('temp','T:ProcessNo','r')
  47. process = readln('temp')
  48. close('temp')
  49. address command 'Delete >NIL: T:ProcessNo QUIET'
  50. nomessage = 1
  51. errorreport = ''
  52. buffer = ''
  53. call Open('dmsout','PIPE:dmsout','r')                  /* Áúôíã DMS çãäñ öäïäæ PIPE:     */
  54. do until eof('dmsout')
  55.   buffer = buffer||readch('dmsout',25)                 /* Öçñaäë îíïõçþëç îí 25 ðçëáíêíá */
  56.   here = verify(buffer,'0a0d'x,'m')                    /* Ìíáaþ ðñïíéa?                  */
  57.   if here > 0 then
  58.     do
  59.       line = left(buffer,here - 1)                     /* Íãìa õäêaþ ðñïíéa              */
  60.       if nomessage & left(line,7) = 'No Disk' then
  61.         do
  62.           lister set handle progress name 'Áðñaáûñä ãçðé á' dest
  63.           nomessage=0
  64.         end
  65.       parse var line ' ' line
  66.       buffer = substr(buffer,here+1)
  67.       if pos('ERROR',upper(line))>0 then
  68.         do
  69.           errorreport = errorreport||lf||line
  70.           say '07'x
  71.         end
  72.       if pos('unPacking',line) > 0 then
  73.         do
  74.           track = right(line,2)
  75.           lister set handle progress count track + 1
  76.           lister set handle progress name 'Track' track
  77.           lister query handle abort
  78.           if result then
  79.             do
  80.               address command 'Break' process 'C'
  81.               lister set handle busy off
  82.               lister set handle title 'Ïaðîaéíáéa íðñaìíáêäìa...'
  83.               exit
  84.             end
  85.         end
  86.     end
  87. end
  88. call close('dmsout')
  89. if errorreport ~== '' then
  90.   dopus request '"Íøçàéa'||lf||errorreport'" OK'
  91. lister set handle busy off
  92. lister read handle dest force
  93. call remlib('rexxsupport.library')
  94.