home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Misc / OB3.2D2.DMS / in.adf / LibLink / LibraryHead.asm < prev    next >
Encoding:
Assembly Source File  |  1992-11-02  |  3.7 KB  |  142 lines

  1. ;*-------------------------------------------------------------------------*
  2. ;*                                                                         *
  3. ;*  Oberon Library Kopf                                    17-Sep-90       *
  4. ;*                                                                         *
  5. ;*                                                                         *
  6. ;*  © 1990 by Fridtjof Siebert                                             *
  7. ;*                                                                         *
  8. ;* Diese Assemblerprogramm muß assembliert und unter dem Namen             *
  9. ;* LibraryHead.obj in eines in der Datei OBERON:Path angegebenem           *
  10. ;* Directory kopiert werden                                                *
  11. ;*                                                                         *
  12. ;*-------------------------------------------------------------------------*
  13.  
  14.         XDEF    LibraryHead.SegList
  15.         XDEF    LibraryHead.LibBase
  16.         XDEF    LibraryHead.Open
  17.         XDEF    LibraryHead.Close
  18.         XDEF    LibraryHead.Expunge
  19.         XDEF    LibraryHead.Init
  20.         XDEF    LibraryHead.OpenOk
  21.  
  22.         XDEF    LibraryHead.SetTrue;      intern verwendet
  23.  
  24.         XREF    LibraryHead.OpenAll
  25.         XREF    LibraryHead.CloseAll
  26.         XREF    LibraryHead.LibOpen
  27.         XREF    LibraryHead.LibClose
  28.  
  29. ln_succ  EQU 0;
  30. ln_pred  EQU 4;
  31. ln_type  EQU 8;
  32. ln_pri   EQU 9;
  33. ln_name  EQU 10;
  34. ln_SIZE  EQU 14;
  35.  
  36. lib_flags    EQU 14;
  37. lib_pad      EQU 15;
  38. lib_negsize  EQU 16;
  39. lib_possize  EQU 18;
  40. lib_version  EQU 20;
  41. lib_revision EQU 22;
  42. lib_idstring EQU 24;
  43. lib_sum      EQU 28;
  44. lib_opencnt  EQU 32;
  45. lib_size     EQU 34;
  46.  
  47. delexp       EQU 3;
  48.  
  49. Remove       EQU -252
  50. FreeMem      EQU -210
  51.  
  52.         section "LibraryHead",code
  53.  
  54. LibraryHead.Init:
  55.         movem.l d2-d7/a2-a6,-(a7)
  56.  
  57.         move.l  a0,LibraryHead.SegList
  58.         move.l  d0,LibraryHead.LibBase
  59.  
  60.         lea     -4(A7),A0;
  61.         jsr     LibraryHead.OpenAll
  62.  
  63.         moveq   #0,d0
  64.         tst.b   LibraryHead.OpenOk
  65.         beq.s   \ciao
  66.         move.l  LibraryHead.LibBase,d0
  67.  
  68. \ciao:  movem.l (a7)+,d2-d7/a2-a6
  69.         rts
  70.  
  71. LibraryHead.Open:
  72.         addq.w  #1,lib_opencnt(a6)
  73.         movem.l d2-d7/a2-a6,-(sp);
  74.         jsr     LibraryHead.LibOpen
  75.         movem.l (sp)+,d2-d7/a2-a6;
  76.         tst.b   d0;
  77.         bne.s   \ook
  78.         subq.w  #1,lib_opencnt(a6)
  79.         bra.s   ciao
  80. \ook:   bclr    #delexp,lib_flags(a6)
  81.         move.l  a6,d0
  82.         rts;
  83.  
  84. LibraryHead.Close:
  85.         movem.l d2-d7/a2-a6,-(sp);
  86.         jsr     LibraryHead.LibClose
  87.         movem.l (sp)+,d2-d7/a2-a6;
  88.         subq.w  #1,lib_opencnt(a6);
  89.         bne.s   ciao
  90.         btst    #delexp,lib_flags(a6);
  91.         bne.s   LibraryHead.Expunge
  92. ciao:   moveq   #0,d0;
  93.         rts;
  94.  
  95. LibraryHead.Expunge:
  96.         movem.l d2-d7/a2-a6,-(a7)
  97.         tst.w   lib_opencnt(a6)
  98.         beq.s   \l
  99.         bset    #delexp,lib_flags(a6)
  100.         moveq   #0,d0
  101.         bra.s   \ciao
  102. \l:     move.l  a6,a5;
  103.         move.l  4,a6;
  104.         move.l  a5,a1;
  105.         jsr     Remove(A6);
  106.  
  107.         move.l  a5,-(a7);
  108.         jsr     LibraryHead.CloseAll
  109.  
  110.         move.l  4,A6
  111.         moveq   #0,d0;
  112.         move.l  (a7)+,a1;
  113.         move.l  a1,a5;
  114.         move.w  lib_negsize(A5),d0;
  115.         sub.l   d0,a1
  116.         add.w   lib_possize(a5),d0;
  117.         jsr     FreeMem(a6);
  118.  
  119.         move.l  LibraryHead.SegList,d0
  120. \ciao:  movem.l (a7)+,d2-d7/a2-a6
  121.         rts
  122.  
  123.         section "LibData",data
  124.  
  125. id:     dc.b    "Oberon Library",0
  126.         even
  127.  
  128.         section "LibGlobals",bss
  129.  
  130. LibraryHead.SegList dc.l    0;
  131. LibraryHead.LibBase dc.l    0;
  132. LibraryHead.OpenOk  dc.w    0;
  133.  
  134.         section "LibExtra",code
  135.  
  136. LibraryHead.SetTrue:
  137.  
  138.         st      d0;
  139.         rts;
  140.  
  141.         END;
  142.