home *** CD-ROM | disk | FTP | other *** search
/ back2roots/padua / padua.7z / padua / audio / streplay33.801.lzh / Source / stlib.asm < prev   
Assembly Source File  |  1991-11-24  |  4KB  |  241 lines

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