.key COMMAND/A,DEVICE/A,TO/K,FILE,MODE/K,DISKBUF/K,PACKEFF/K,START/K,END/K,VERIFY/S,NOEJECT/S,VERBOSE/S,QUIET/S
.bra {
.ket }

; $VER zFX 1.0 (20.4.1998)
; xFX and GZip interface
;
; © 1998, Alessandro Pedretti
;
;
; Options:
; ~~~~~~~~
; COMMAND   = COPY, READ, WRITE, CHECK, INFO
; DEVICE    = Device name (AmigaDOS or DEVICE.device:UNIT)
; TO        = Destination device for copy
; FILE      = Input/output file for READ/WRITE commands
; MODE      = Device mode (Std, SCSI, IEC)
; PACKEFF   = GZip packing efficiency (1...9)
; DISKBUF   = Disk buffer path for COPY
; START     = Start cylinder (default 0)
; END       = End cylinder (default last)
; VERIFY    = Verifies cylinders during write operations
; NOEJECT   = Inhibits auto disk eject
; VERBOSE   = Explains all operations
; QUIET     = Suppresses all messages


; PIPE: is mounted ?

Assign PIPE: DEVICES EXISTS >NIL:
If WARN
  Mount PIPE: >NIL:
  If WARN
    Echo "Can't mount PIPE:"
    Quit 20
  EndIf
EndIf

; GZip is installed ?

Which GZip >NIL:
If WARN
  Echo "GZip not found" 
  Quit 20
EndIf

; Options:

Set Err ""
Set OPT ""
Set PackErr "Illegal efficiency"

If {COMMAND} EQ "READ"
  If {PACKEFF}
    If {PACKEFF} NOT GT 0 VAL
      Set Err $PackErr
    Else
      If {PACKEFF} GT 9 VAL
        Set Err $PackErr 
      EndIf
    EndIf
  EndIf
EndIf

If "$Err" EQ ""
  If {MODE}
    Set OPT "MODE {MODE}"
  EndIf

  If {START}
    Set OPT "$OPT START {START}"
  EndIf

  If {END}
    Set OPT "$OPT END {END}"
  EndIf

  If {DISKBUF}
    Set OPT "$OPT DISKBUF {DISKBUF}"
  EndIf

; Action:

  If {COMMAND} EQ "READ"
    Run >NIL: GZip -cf{PACKEFF} <PIPE:xFX_Data.xfx/10240/1 >"{FILE}"
    FailAt 21
    xFX READ {DEVICE} PIPE:xFX_Data.xfx $OPT {NOEJECT} {VERBOSE} {QUIET}

; xFX fails ?

    If FAIL
      Break `Status COMMAND GZip`
      Delete "{FILE}" >NIL:
    Else

; Waiting GZip:

      Lab Loop
      Status COMMAND GZip >NIL:
      If NOT WARN
        Wait 1
        Skip Loop BACK
      EndIf

      Echo "Packed size: " NOLINE
      List "{FILE}" LFORMAT "%l bytes"
    EndIf

  Else

    If {COMMAND} EQ "WRITE"
      If NOT EXISTS {FILE}
        Echo "File not found"
      Else
        Run >NIL: GZip -cdf {FILE} >PIPE:xFX_Data.xfx/10240/1
        FailAt 21
        xFX WRITE {DEVICE} PIPE:xFX_Data.xfx FORCEWRT $OPT {VERIFY} {NOEJECT} {VERBOSE} {QUIET}

; xFX fails ?

        If FAIL
          Break `Status COMMAND GZip`
          Type PIPE:xFX_Data.xfx TO NIL:
        EndIf
      EndIf
    Else
      If {COMMAND} EQ "COPY"
        If {TO}
          xFX COPY {DEVICE} TO {TO} $OPT {NOEJECT} {VERBOSE} {QUIET}
        Else
          xFX COPY {DEVICE} $OPT {NOEJECT} {VERBOSE} {QUIET}
        EndIf
      Else
        xFX {COMMAND} {DEVICE} $OPT {NOEJECT} {VERBOSE} {QUIET}
      EndIf
    EndIf
  EndIf
Else
  Echo "ERROR: $Err"
EndIf  

UnSet Err
UnSet OPT
UnSet PackErr
