home *** CD-ROM | disk | FTP | other *** search
/ The Fred Fish Collection 1.5 / ffcollection-1-5-1992-11.iso / ff_disks / 200-299 / ff258.lzh / STReplay / Source / stlib.asm < prev    next >
Assembly Source File  |  1989-10-18  |  3KB  |  196 lines

  1.     include "exec/types.i"
  2.     include "exec/initializers.i"
  3.     include "libraries/dos.i"
  4.     include "exec/resident.i"
  5.     include "streplay_lib.i"
  6.  
  7. call    MACRO
  8.     xref    _LVO\1
  9.     jsr    _LVO\1(a6)
  10.     ENDM
  11.  
  12.     section "node",CODE
  13.     moveq    #20,d0
  14.     rts
  15.  
  16. ROMTag:
  17.     dc.w    RTC_MATCHWORD
  18.     dc.l    ROMTag
  19.     dc.l    EndCode
  20.     dc.b    RTF_AUTOINIT
  21.     dc.b    33
  22.     dc.b    NT_LIBRARY
  23.     dc.b    0
  24.     dc.l    libname,ids
  25.     dc.l    Init
  26. libname:    dc.b    "streplay.library",0
  27. ids:    dc.b    "STReplay.Library V33.8 Kludged 2.10.89 by Olli, dem Größten",13,10,0
  28.     even
  29. Init:    dc.l    strb_SIZEOF
  30.     dc.l    functab,datatab,.InitLib
  31. functab:
  32.     dc.l    .OpenLib,.CloseLib,.ExpungeLib,.ExtFuncLib,
  33.     dc.l    .LoadModule,.UnLoadModule,.IsModule
  34.     dc.l    .Start,.Stop,.IsPlaying
  35.     dc.l    -1
  36. datatab:
  37.     INITBYTE    LN_TYPE,NT_LIBRARY
  38.     INITLONG    LN_NAME,libname
  39.     INITBYTE    LIB_FLAGS,LIBF_SUMUSED!LIBF_CHANGED
  40.     INITWORD    LIB_VERSION,33
  41.     INITWORD    LIB_REVISION,8
  42.     INITLONG    LIB_IDSTRING,ids
  43.     dc.l    0
  44.  
  45. .InitLib:
  46.     move.l    d0,a1
  47.     move.l    a0,strb_SegList(a1)
  48.     clr.l    strb_Module(a1)
  49.     clr.w    strb_Running(a1)
  50.     rts
  51.  
  52. freemodule:
  53.     move.l    strb_Module(a6),d0
  54.     beq.s    ret
  55.     move.l    a6,-(sp)
  56.     move.l    d0,a1
  57.     move.l    strb_Len(a6),d0
  58.     move.l    4,a6
  59.     call    FreeMem
  60.     move.l    (sp)+,a6
  61.     clr.l    strb_Module(a6)
  62.     rts
  63. .OpenLib:
  64.     addq.w    #1,LIB_OPENCNT(a6)
  65.     bclr    #LIBB_DELEXP,LIB_FLAGS(a6)
  66.     move.l    a6,d0
  67. ret:    rts
  68. .CloseLib:
  69.     moveq    #0,d0
  70.     subq.w    #1,LIB_OPENCNT(a6)
  71.     bne.s    ret
  72.     btst    #LIBB_DELEXP,LIB_FLAGS(a6)
  73.     beq.s    ret
  74.  
  75. .ExpungeLib
  76.     tst.w    LIB_OPENCNT(a6)
  77.     beq.s    remit
  78.     bset    #LIBB_DELEXP,LIB_FLAGS(a6)
  79.     moveq    #0,d0
  80.     rts
  81. remit:
  82.     bsr    .Stop
  83.     bsr    freemodule
  84.     movem.l a5/d7,-(sp)
  85.     move.l    a6,a5
  86.     move.l    4,a6
  87.     move.l    a5,a1
  88.     call    Remove
  89.     move.l    strb_SegList(a5),d7
  90.     move.l    a5,a1
  91.     moveq    #0,d0
  92.     move.w    LIB_NEGSIZE(a5),d0
  93.     sub.l    d0,a1
  94.     add.w    LIB_POSSIZE(a5),d0
  95.     call    FreeMem
  96.     move.l    d7,d0
  97.     movem.l (sp)+,a5/d7
  98.     rts
  99.  
  100. .ExtFuncLib:
  101.     moveq    #0,d0
  102.     rts
  103.  
  104. ;
  105. ;
  106. ;
  107.  
  108. .IsPlaying:
  109.     move.w    strb_Running(a6),d0
  110.     ext.l    d0
  111.     rts
  112.  
  113. .IsModule
  114.     move.l    strb_Module(a6),d0
  115.     rts
  116.  
  117. .LoadModule:
  118.     movem.l d2-d5/a5-a6,-(sp)
  119.     move.l    a0,d3
  120.     bsr    .Stop
  121.     bsr    freemodule
  122.     move.l    a6,a5
  123.     move.l    4,a6
  124.     lea    dosname(pc),a1
  125.     moveq    #0,d0
  126.     call    OpenLibrary
  127.     move.l    d0,d4
  128.     move.l    d0,a6
  129.     move.l    d3,d1
  130.     move.l    #1005,d2
  131.     call    Open
  132.     move.l    d0,d5
  133.     bne.s    fileopen
  134.     moveq    #-1,d0
  135. lret:
  136.     movem.l (sp)+,d2-d5/a5-a6
  137.     rts
  138. fileopen:
  139.     move.l    d5,d1
  140.     moveq    #0,d2
  141.     move.l    #OFFSET_END,d3
  142.     call    Seek
  143.     move.l    d5,d1
  144.     moveq    #0,d2
  145.     move.l    #OFFSET_BEGINNING,d3
  146.     call    Seek
  147.     move.l    d0,strb_Len(a5)
  148.     moveq    #2,d1        ; ja,ja; manscher lehrnst nie
  149.     move.l    4,a6
  150.     call    AllocMem
  151.     move.l    d4,a6
  152.     move.l    d0,strb_Module(a5)
  153.     bne.s    allocok
  154.     move.l    d5,d1
  155.     call    Close
  156.     moveq    #-2,d0
  157.     bra.s    lret
  158. allocok:
  159.     move.l    strb_Len(a5),d3
  160.     move.l    d5,d1
  161.     move.l    d0,d2
  162.     call    Read
  163.     move.l    d5,d1
  164.     call    Close
  165.     moveq    #0,d0
  166.     bra.s    lret
  167.  
  168. .UnLoadModule:
  169.     bsr.s    .Stop
  170.     bra    freemodule
  171.  
  172. .Start
  173.     tst.l    strb_Module(a6)
  174.     beq.s    retu
  175.     tst.w    strb_Running(a6)
  176.     bne.s    retu
  177.     move.w    #'RZ',strb_Running(a6)
  178.     xref    mt_start
  179.     jmp    mt_start
  180. retu:    rts
  181.  
  182. .Stop
  183.     tst.l    strb_Module(a6)
  184.     beq.s    retu
  185.     tst.w    strb_Running(a6)
  186.     beq.s    retu
  187.     clr.w    strb_Running(a6)
  188.     jmp    mt_brems
  189.     xref    mt_brems
  190.  
  191. dosname:
  192.     dc.b    "dos.library",0
  193.     even
  194. EndCode:
  195.     END
  196.