home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / software / varie / xfd / developer / sources / asm / xfdexehead.a < prev    next >
Encoding:
Text File  |  2000-01-22  |  4.1 KB  |  202 lines

  1. * Objectheader
  2. *
  3. *    Name:        xfdExeHead.a
  4. *    Author:        SDI
  5. *    Version:    $VER: xfdExeHead.a 1.5 (24.11.1999) by SDI
  6. *    Distribution:    PD
  7. *    Description:    XFD external test header (program startup code)
  8. *    Compileropts:    -
  9. *    Linkeropts:    -
  10. *
  11. * 1.0   03.02.98 : first version
  12. * 1.1   04.02.98 : fixed a lot bugs
  13. * 1.2   09.08.98 : one little bug-fix
  14. * 1.3   09.12.98 : added ExecBase passing
  15. * 1.4   08.01.99 : added type output
  16. * 1.4   23.02.99 : added V39 autoallocation feature
  17. * 1.5   24.11.99 : added lvo lines
  18.  
  19.         INCLUDE    "libraries/xfdmaster.i"
  20.         INCLUDE    "exec/memory.i"
  21.         INCLUDE    "dos/dos.i"
  22.  
  23.         INCLUDE    "lvo/exec_lvo.i"
  24.         INCLUDE "lvo/dos_lvo.i"
  25.  
  26.         MOVEA.L    A0,A5
  27.         MOVE.L    D0,D7            * store them
  28.  
  29.         * get dos library opened
  30.         MOVEQ    #33,D0
  31.         MOVEA.L    4.W,A6
  32.         LEA.L    DosName(PC),A1
  33.         JSR    _LVOOpenLibrary(A6)
  34.         TST.L    D0
  35.         BEQ.W    .NoDos
  36.         MOVEA.L    D0,A4            * A4 is DosBase
  37.  
  38.         * open source file
  39.         MOVEA.L    A4,A6
  40.         CLR.B    -1(A5,D7)        * clear return
  41.         MOVE.L    A5,D1
  42.         MOVE.L    #MODE_OLDFILE,D2
  43.         JSR    _LVOOpen(A6)
  44.         MOVE.L    D0,D6            * D6 is InFH
  45.         BEQ.W    .NoFH
  46.         MOVE.B    #'D',-1(A5,D7)        * create save name
  47.         CLR.B    (A5,D7)
  48.  
  49.         * seek to end and back to start --> get file size
  50.         MOVE.L    D6,D1
  51.         MOVEQ    #0,D2
  52.         MOVEQ    #OFFSET_END,D3
  53.         JSR    _LVOSeek(A6)
  54.         MOVE.L    D6,D1
  55.         MOVEQ    #0,D2
  56.         MOVEQ    #OFFSET_BEGINNING,D3
  57.         JSR    _LVOSeek(A6)
  58.         MOVEA.L    A6,A4
  59.         MOVE.L    D0,SourceSize
  60.  
  61.         * allocate memory
  62.         MOVEA.L    4.W,A6
  63.         MOVEQ.L    #MEMF_ANY,D1
  64.         JSR    _LVOAllocMem(A6)
  65.         MOVEA.L    A4,A6
  66.         MOVE.L    D0,SourceBuf
  67.         BEQ.W    .NoSourceBuf
  68.  
  69.         * read in buffer
  70.         MOVE.L    D6,D1
  71.         MOVE.L    D0,D2
  72.         MOVE.L    SourceSize(PC),D3
  73.         JSR    _LVORead(A6)
  74.         CMP.L    #-1,D0
  75.         BEQ.W    .noread
  76.  
  77.         * call recog functions
  78.         LEA.L    ForeMan(PC),A2
  79.         MOVEA.L    xfdf_FirstSlave(A2),A2
  80. .recogloop    MOVE.L    A2,D0                * for test purpose
  81.         BEQ.W    .notfound
  82.         MOVE.L    SourceSize(PC),D0
  83.         MOVEA.L    SourceBuf(PC),A0
  84.         LEA    xfdrr(PC),A1
  85.         MOVEA.L    xfds_RecogBuffer(A2),A3
  86.         JSR    (A3)
  87.         TST.L    D0
  88.         BNE.B    .found
  89.         MOVEA.L    xfds_Next(A2),A2
  90.         BRA.B    .recogloop
  91. .found        * call decrunch function
  92.         LEA    FormatStr(PC),A0
  93.         MOVE.L    A0,D1
  94.         LEA    xfds_PackerName(A2),A0
  95.         MOVE.L    A0,D2
  96.         JSR    _LVOVPrintf(A6)
  97.  
  98.         MOVE.W    xfds_PackerFlags(A2),D0
  99.         AND.W    #XFDPFF_USERTARGET,D0
  100.         BEQ.B    .CallDecr
  101.  
  102.         MOVEQ    #-1,D0                * no allocation possible
  103.         CMP.L    MinTargetLen(PC),D0
  104.         BEQ.B    .CallDecr
  105.  
  106.         MOVE.L    MinTargetLen(PC),D0
  107.         CLR.L    D1
  108.         MOVE.L    4.W,A6
  109.         JSR    _LVOAllocMem(A6)
  110.         MOVE.L    D0,UserBuf
  111.         BEQ.W    .notfound
  112.         MOVE.L    D0,TarBuf
  113.  
  114.         MOVE.W    #XFDFF_USERTARGET|XFDFF_MASTERALLOC,Flags
  115.         MOVE.L    MinTargetLen(PC),UserBufLen
  116.         MOVE.L    MinTargetLen(PC),TarLen
  117.         MOVE.L    FinalTargetLen(PC),TarSaveLen
  118.  
  119. .CallDecr    LEA    xfdbi(PC),A0
  120.         MOVEA.L    xfds_DecrunchBuffer(A2),A3
  121.         MOVE.L    4.W,-(A7)
  122.         LEA    -$3A(A7),A6        * create ExeBase ptr
  123.  
  124.         NOP
  125.         NOP    * for easier detection of jumpin in Debugger
  126.         NOP
  127.         NOP
  128.  
  129.         JSR    (A3)
  130.         MOVE.L    (A7)+,A6        * correct stack
  131.         TST.L    D0
  132.         BEQ.B    .notfound
  133.         MOVE.W    #XFDERR_OK,Error
  134.  
  135.         * open destination file
  136.         MOVEA.L    A4,A6
  137.         MOVE.L    A5,D1
  138.         MOVE.L    #MODE_NEWFILE,D2
  139.         JSR    _LVOOpen(A6)
  140.         MOVE.L    D0,D5            * D5 is OutFH
  141.         BEQ.B    .NoOutFH
  142.  
  143.         * write destination
  144.         MOVE.L    D5,D1
  145.         MOVE.L    TarBuf(PC),D2
  146.         MOVE.L    TarSaveLen(PC),D3
  147.         JSR    _LVOWrite(A6)
  148.  
  149.         * close destination
  150.         MOVE.L    D5,D1
  151.         JSR    _LVOClose(A6)
  152. .NoOutFH    MOVEA.L    4.W,A6            * free decrunch buffer
  153.         MOVE.L    TarLen(PC),D0
  154.         MOVEA.L    TarBuf(PC),A1
  155.         JSR    _LVOFreeMem(A6)
  156.         CLR.W    Flags
  157. .notfound    TST.W    Flags            * free own buffer when error
  158.         BEQ.B    .noread            * occured
  159.         MOVE.L    UserBufLen(PC),D0
  160.         MOVEA.L    UserBuf(PC),A1
  161.         JSR    _LVOFreeMem(A6)
  162. .noread        MOVEA.L    4.W,A6            * free source buffer
  163.         MOVEA.L    SourceBuf(PC),A1
  164.         MOVE.L    SourceSize(PC),D0
  165.         JSR    _LVOFreeMem(A6)
  166. .NoSourceBuf    MOVEA.L    A4,A6            * close input fh
  167.         MOVEA.L    D6,D1
  168.         JSR    _LVOClose(A6)
  169. .NoFH        MOVEA.L    A4,A1            * close dos
  170.         MOVEA.L    4.W,A6
  171.         JSR    _LVOCloseLibrary(A6)
  172. .NoDos        MOVE.W    Error(PC),D0
  173.         RTS
  174.  
  175. xfdbi
  176. SourceBuf    DC.L    0
  177. SourceSize    DC.L    0
  178.         DC.L    0
  179.         DC.L    0
  180.         DC.W    XFDPFF_RELOC
  181. Error        DC.W    XFDERR_OK
  182. TarBuf        DC.L    0
  183.         DC.L    MEMF_ANY
  184. TarLen        DC.L    0
  185. TarSaveLen    DC.L    0
  186.         DC.L    0,0,0
  187. Flags        DC.W    0
  188.         DC.W    0
  189.         DC.L    0,0
  190. UserBuf        DC.L    0
  191. UserBufLen    DC.L    0
  192.         DC.L    0    * MinSourceLen
  193.  
  194. xfdrr
  195. MinTargetLen    DC.L    0
  196. FinalTargetLen    DC.L    0
  197.         DC.L    0
  198. DosName     DC.B    "dos.library",0
  199. FormatStr    DC.B    'Cruncher-Name: %s\n',0
  200.         EVEN
  201.  
  202.