home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Netzwerk / NETMU17.LHA / include / libhdr.i < prev   
Encoding:
Text File  |  1994-09-30  |  3.3 KB  |  289 lines

  1. **
  2. **    $VER: libhdr.i 2.0 (30.09.94)
  3. **
  4. **    library header include file
  5. **
  6. **    © Copyright 1994 by Norbert Püschel
  7. **    All Rights Reserved
  8. **
  9. **    Include & assemble with asm -iINCLUDE:
  10. **
  11.  
  12.     IFND    LIBHDR_I
  13. LIBHDR_I    SET    1
  14.  
  15. * includes
  16.  
  17.     IFND EXEC_TYPES_I
  18.     INCLUDE 'exec/types.i'
  19.     ENDC
  20.     IFND EXEC_LIBRARIES_I
  21.     INCLUDE 'exec/libraries.i'
  22.     ENDC
  23.     IFND EXEC_RESIDENT_I
  24.     INCLUDE 'exec/resident.i'
  25.     ENDC
  26.     IFND EXEC_INITIALIZERS_I
  27.     INCLUDE    'exec/initializers.i'
  28.     ENDC
  29.  
  30. * CALLSYS macro
  31.  
  32. CALL    MACRO
  33.     jsr    _LVO\1(A6)
  34.     ENDM
  35.  
  36. CALLSYS    MACRO
  37.     move.l    A6,-(SP)
  38.     move.l    _SysBase,A6
  39.     CALL    \1
  40.     move.l    (SP)+,A6
  41.     ENDM
  42.  
  43. * _LVOs
  44.  
  45. _LVORemove          EQU    -252
  46. _LVOFreeMem         EQU    -210
  47.  
  48. * library code & romtag
  49.  
  50.     SECTION    TEXT,CODE
  51.  
  52. StartCode:
  53.     moveq    #-1,D0
  54.     rts
  55.  
  56. RomTag:
  57.     dc.w    RTC_MATCHWORD
  58.     dc.l    RomTag
  59.     dc.l    EndCode
  60.     dc.b    RTF_AUTOINIT
  61.     dc.b    VER
  62.     dc.b    NT_LIBRARY
  63.     dc.b    PRI
  64.     dc.l    _LibName
  65.     dc.l    _LibID
  66.     dc.l    InitTab
  67.  
  68.     IFND    BASE_SIZE
  69. BASE_SIZE    EQU    LIB_SIZE
  70.     ENDC
  71.  
  72. InitTab:
  73.     dc.l    BASE_SIZE
  74.     dc.l    _FuncTable
  75.     dc.l    _DataTable
  76.     dc.l    _aLibInit
  77.  
  78. _DataTable:
  79.     INITBYTE    LN_TYPE,NT_LIBRARY
  80.     INITBYTE    LN_PRI,PRI
  81.     INITLONG    LN_NAME,_LibName
  82.     INITBYTE    LIB_FLAGS,LIBF_SUMUSED!LIBF_CHANGED
  83.     INITWORD    LIB_VERSION,VER
  84.     INITWORD    LIB_REVISION,REV
  85.     INITLONG    LIB_IDSTRING,_LibID
  86.     dc.l        0
  87.  
  88.     IFD    INIT
  89.     XREF    _LibInit
  90.     ENDC
  91.  
  92. _aLibInit:
  93.     move.l    A0,_SegList
  94.     move.l    A6,_SysBase
  95.     move.l    D0,_LibBase    ; set global variables
  96.  
  97.     IFD    INIT
  98.     jsr    _LibInit
  99.     tst.l    D0
  100.     beq.s    1$
  101.     move.l    _LibBase,D0
  102.     bra.s    $2
  103.  
  104. 1$:    move.l    _LibBase,A6
  105.     move.l    A6,A1
  106.     move.w    LIB_NEGSIZE(A6),D0    ; D0 is 0 before !
  107.     sub.l    D0,A1
  108.     add.w    LIB_POSSIZE(A6),D0
  109.     CALLSYS    FreeMem
  110.  
  111.     moveq.l    #0,D0
  112. 2$:
  113.     ENDC
  114.  
  115.     rts
  116.  
  117.     IFD    OPEN
  118.     XREF    _LibOpen
  119.     ENDC
  120.  
  121. _aLibOpen:
  122.     IFND    OPEN
  123.     move.l    A6,D0
  124.     ENDC
  125.  
  126.     IFD    OPEN
  127.     jsr    _LibOpen
  128.     tst.l    D0
  129.     beq.s    1$
  130.     move.l    A6,D0
  131.     ENDC
  132.  
  133.     addq.w    #1,LIB_OPENCNT(A6)
  134.     bclr    #LIBB_DELEXP,LIB_FLAGS(A6)
  135. 1$:    rts
  136.  
  137.     IFD    CLOSE
  138.     XREF    _LibClose
  139.     ENDC
  140.  
  141. _aLibClose:
  142.     IFND    CLOSE
  143.     moveq.l    #0,D0
  144.     ENDC
  145.  
  146.     subq.w    #1,LIB_OPENCNT(A6)
  147.  
  148.     IFD    CLOSE
  149.     move.l    A6,D0
  150.     jsr    _LibClose
  151.     tst.l    D0
  152.     bne.s    1$
  153.     addq.w    #1,LIB_OPENCNT(A6)
  154.     bra.s    2$
  155. 1$:    moveq.l    #0,D0
  156.     tst.w    LIB_OPENCNT(A6)
  157.     ENDC
  158.  
  159.     bne.s    2$
  160.     btst    #LIBB_DELEXP,LIB_FLAGS(A6)
  161.     beq.s    2$
  162.     bsr    _aLibExpunge
  163.  
  164. 2$:    rts
  165.  
  166.      IFD    EXPUNGE
  167.     XREF    _LibExpunge
  168.     ENDC
  169.  
  170. _aLibExpunge:
  171.     tst.w    LIB_OPENCNT(A6)
  172.     beq.s    1$
  173.  
  174.     bset    #LIBB_DELEXP,LIB_FLAGS(A6)
  175.     moveq.l    #0,D0
  176.     bra.s    3$
  177.  
  178. 1$:
  179.     IFD    EXPUNGE
  180.     move.l    A6,D0
  181.     jsr    _LibExpunge
  182.     tst.l    D0
  183.     bne.s    2$
  184.     bset    #LIBB_DELEXP,LIB_FLAGS(A6)
  185.     bra.s    3$
  186. 2$:
  187.     ENDC
  188.  
  189.     move.l    A6,A1
  190.     CALLSYS    Remove
  191.  
  192.     moveq.l    #0,D0
  193.     move.l    A6,A1
  194.     move.w    LIB_NEGSIZE(A6),D0
  195.     sub.l    D0,A1
  196.     add.w    LIB_POSSIZE(A6),D0
  197.     CALLSYS    FreeMem
  198.  
  199.     move.l    _SegList,D0
  200.  
  201. 3$:    rts
  202.  
  203. _aLibExtFunc:
  204.     moveq.l    #0,D0
  205.     rts
  206.  
  207.     IFD    REXX
  208.  
  209.     XREF    _LIBRexxQuery
  210.  
  211. _aLibRexxQuery:
  212.     link    A5,#-4
  213.     lea    -4(A5),A1
  214.     jsr    _LIBRexxQuery
  215.     move.l    -4(A5),A0
  216.     unlk    A5
  217.     rts
  218.  
  219.     ENDC    
  220.  
  221. EndCode:
  222.  
  223.     SECTION    __MERGED,DATA
  224.  
  225. * LIBRARY macro for generating the function table
  226.  
  227. LIBRARY    MACRO
  228.  
  229.     IFLT    \2
  230. VER    EQU    VERSION
  231. REV    EQU    REVISION
  232.     ELSE
  233. VER    EQU    \2
  234. REV    EQU    \3
  235.     ENDC
  236.  
  237. PRI    EQU    \4
  238.  
  239.     XDEF    _\5
  240.     XDEF    _SysBase
  241.  
  242. _\5:
  243. _LibBase:
  244.     dc.l    0
  245. _SysBase:
  246.     dc.l    0
  247. _SegList:
  248.     dc.l    0
  249.     dc.b    '$VER: '
  250. _LibID:
  251.     IFLT    \2
  252.     VERS
  253.     ELSE
  254.     dc.b    \1,' \2.\3'
  255.     ENDC
  256.     dc.b    ' ('
  257.     IFC    \6,'-'
  258.     DATE
  259.     ELSE
  260.     dc.b    \6
  261.     ENDC
  262.     dc.b    ')',13,10,0
  263. _LibName:
  264.     dc.b    \1,0
  265.     dc.w    0
  266.  
  267. _FuncTable:
  268.     dc.l    _aLibOpen
  269.     dc.l    _aLibClose
  270.     dc.l    _aLibExpunge
  271.     dc.l    _aLibExtFunc
  272.  
  273.     IFD    REXX
  274.     dc.l    _aLibRexxQuery
  275.     ENDC
  276.  
  277.     ENDM
  278.  
  279. FUNCDEF    MACRO
  280.     XREF    _LIB\1
  281.     dc.l    _LIB\1
  282.     ENDM
  283.  
  284. ENDLIB    MACRO
  285.     dc.l    -1
  286.     ENDM
  287.  
  288.     ENDC    ; LIBHDR_I
  289.