home *** CD-ROM | disk | FTP | other *** search
- ;*-------------------------------------------------------------------------*
- ;* *
- ;* Oberon Library Kopf 17-Sep-90 *
- ;* *
- ;* *
- ;* © 1990 by Fridtjof Siebert *
- ;* *
- ;* Diese Assemblerprogramm muß assembliert und unter dem Namen *
- ;* LibraryHead.obj in eines in der Datei OBERON:Path angegebenem *
- ;* Directory kopiert werden *
- ;* *
- ;*-------------------------------------------------------------------------*
-
- XDEF LibraryHead.SegList
- XDEF LibraryHead.LibBase
- XDEF LibraryHead.Open
- XDEF LibraryHead.Close
- XDEF LibraryHead.Expunge
- XDEF LibraryHead.Init
- XDEF LibraryHead.OpenOk
-
- XDEF LibraryHead.SetTrue; intern verwendet
-
- XREF LibraryHead.OpenAll
- XREF LibraryHead.CloseAll
- XREF LibraryHead.LibOpen
- XREF LibraryHead.LibClose
-
- ln_succ EQU 0;
- ln_pred EQU 4;
- ln_type EQU 8;
- ln_pri EQU 9;
- ln_name EQU 10;
- ln_SIZE EQU 14;
-
- lib_flags EQU 14;
- lib_pad EQU 15;
- lib_negsize EQU 16;
- lib_possize EQU 18;
- lib_version EQU 20;
- lib_revision EQU 22;
- lib_idstring EQU 24;
- lib_sum EQU 28;
- lib_opencnt EQU 32;
- lib_size EQU 34;
-
- delexp EQU 3;
-
- Remove EQU -252
- FreeMem EQU -210
-
- section "LibraryHead",code
-
- LibraryHead.Init:
- movem.l d2-d7/a2-a6,-(a7)
-
- move.l a0,LibraryHead.SegList
- move.l d0,LibraryHead.LibBase
-
- lea -4(A7),A0;
- jsr LibraryHead.OpenAll
-
- moveq #0,d0
- tst.b LibraryHead.OpenOk
- beq.s \ciao
- move.l LibraryHead.LibBase,d0
-
- \ciao: movem.l (a7)+,d2-d7/a2-a6
- rts
-
- LibraryHead.Open:
- addq.w #1,lib_opencnt(a6)
- movem.l d2-d7/a2-a6,-(sp);
- jsr LibraryHead.LibOpen
- movem.l (sp)+,d2-d7/a2-a6;
- tst.b d0;
- bne.s \ook
- subq.w #1,lib_opencnt(a6)
- bra.s ciao
- \ook: bclr #delexp,lib_flags(a6)
- move.l a6,d0
- rts;
-
- LibraryHead.Close:
- movem.l d2-d7/a2-a6,-(sp);
- jsr LibraryHead.LibClose
- movem.l (sp)+,d2-d7/a2-a6;
- subq.w #1,lib_opencnt(a6);
- bne.s ciao
- btst #delexp,lib_flags(a6);
- bne.s LibraryHead.Expunge
- ciao: moveq #0,d0;
- rts;
-
- LibraryHead.Expunge:
- movem.l d2-d7/a2-a6,-(a7)
- tst.w lib_opencnt(a6)
- beq.s \l
- bset #delexp,lib_flags(a6)
- moveq #0,d0
- bra.s \ciao
- \l: move.l a6,a5;
- move.l 4,a6;
- move.l a5,a1;
- jsr Remove(A6);
-
- move.l a5,-(a7);
- jsr LibraryHead.CloseAll
-
- move.l 4,A6
- moveq #0,d0;
- move.l (a7)+,a1;
- move.l a1,a5;
- move.w lib_negsize(A5),d0;
- sub.l d0,a1
- add.w lib_possize(a5),d0;
- jsr FreeMem(a6);
-
- move.l LibraryHead.SegList,d0
- \ciao: movem.l (a7)+,d2-d7/a2-a6
- rts
-
- section "LibData",data
-
- id: dc.b "Oberon Library",0
- even
-
- section "LibGlobals",bss
-
- LibraryHead.SegList dc.l 0;
- LibraryHead.LibBase dc.l 0;
- LibraryHead.OpenOk dc.w 0;
-
- section "LibExtra",code
-
- LibraryHead.SetTrue:
-
- st d0;
- rts;
-
- END;
-