home *** CD-ROM | disk | FTP | other *** search
/ Dream 57 / Amiga_Dream_57.iso / Amiga / Programmation / Assembleur / ESA.lha / ESA / examples / sss / split.ei < prev    next >
Text File  |  1998-10-30  |  2KB  |  74 lines

  1. *******************************************************************************
  2. * Split v1.0.0
  3. *******************************************************************************
  4. * INFO    program core
  5. * SYNOPSIS    Split[]
  6. * MODIFIES    d0    0=OK, else E_xxxxxx (see defs.i)
  7. * REQUIRES    _DOSBase    dos.library ptr
  8. *******************************************************************************
  9.  
  10.     procedure Split[],d1-d7/a0-a2/a6
  11.     movea.l    _DOSBase,a6
  12.     moveq.l    #0,d7    ;chunk counter
  13.     moveq.l    #0,d5    ;no error
  14.     move.l    InFileSze,d4    ;source file size
  15.  
  16.     repeat
  17.  
  18.      Stru[d7,ExtnAdr,DgtNmb]    ;build extension
  19.      Print[#txt_writing]    ;a0 already saved
  20.      Print[#OutBase]    ;show current chunk name
  21.  
  22.       move.l    #OutBase,d1    ;open new dest file
  23.      move.l    #MODE_NEWFILE,d2
  24.      jsr    (_LVOOpen,a6)
  25.      movea.l    d0,a2    ;store filehandle
  26.  
  27.      when d0.l        ;if file opened successfully
  28.  
  29.       move.l    ChnkSize,d6    ;bytes to read
  30.       when.s d4½d6    ;if not enough bytes left
  31.        move.l    d4,d6    ;read all remaining ones
  32.       ewhen
  33.       sub.l    d6,d4    ;bytes left
  34.  
  35.       repeat
  36.  
  37.        move.l    InFileHnd,d1    ;source filehandle
  38.        move.l    WrkBufAdr,d2    ;dest buf
  39.        when.s d6╗=WrkBufLen
  40.         move.l    WrkBufLen,d3    ;fill the work buf
  41.        othw
  42.         move.l    d6,d3    ;read only necessary data
  43.        ewhen
  44.        jsr    (_LVORead,a6)
  45.        sub.l    d0,d6    ;update bytes to write
  46.  
  47.        move.l    a2,d1    ;dest filehandle
  48.        move.l    WrkBufAdr,d2    ;buf
  49.        move.l    d0,d3    ;write bytes read to dest
  50.        jsr    (_LVOWrite,a6)
  51.  
  52.        when.s d0<d3    ;if not all bytes written
  53.         moveq.l    #E_DSTFLE,d5    ;give error
  54.        ewhen        ;('<' cos d0 could be -1)
  55.  
  56.       until ~d6.l | d5    ;exit if buf completely written
  57.             ;or error on writing
  58.  
  59.      othw
  60.       moveq.l    #E_DSTFLE,d5    ;error opening dest!
  61.       exit        ;exit repeat...until
  62.      ewhen
  63.  
  64.      move.l    a2,d1    ;close dest file
  65.      jsr    (_LVOClose,a6)
  66.  
  67.      addq.l    #1,d7    ;next chunk
  68.     until {d7.l╗MaxChnk} | d5    ;exit if chunks over
  69.             ;or error on writing
  70.  
  71.     Print[#txt_ENTER]
  72.     move.l    d5,d0    ;ErrCode
  73.     eproc
  74.