home *** CD-ROM | disk | FTP | other *** search
/ Amiga Elysian Archive / AmigaElysianArchive.iso / prog / source / dcassem.lha / No.5 < prev    next >
Text File  |  1988-05-14  |  3KB  |  71 lines

  1.         XREF    _LVOOpenLibrary,_LVOCloseLibrary
  2.  
  3. ;==============================================================================
  4. ; Success = OpenLibs( libtable )
  5. ;   d0             a0
  6. ;
  7. ; Opens all libraries referenced in the library table.  Table format is:-
  8. ;
  9. ;    version,name,offset        (all are signed words)
  10. ;
  11. ; Version is the version number required for this library.
  12. ; Name is the offset from libtable to the required library name.
  13. ; Offset is the offset (from global pointer a5) of where to store lib ptr.
  14. ; List is terminated by a version number of -1
  15. ;==============================================================================
  16. OpenLibs    movem.l    a2-a3/a6,-(sp)
  17.         movea.l    SysLib(a5),a6        using exec library
  18.         movea.l    a0,a2            save working libtable ptr
  19.         movea.l    a0,a3            a3 used to calculate name addr
  20.  
  21. 10$        moveq.l    #0,d0            get the version
  22.         move.w    (a2)+,d0
  23.         bmi.s    LibsOpened        return TRUE
  24.         move.w    (a2)+,d1        get offset to name
  25.         lea.l    0(a3,d1.w),a1        addr of name in a1
  26.         jsr    _LVOOpenLibrary(a6)    open the lib
  27.         move.w    (a2)+,d1        offset to store at
  28.         move.l    d0,0(a5,d1.w)        save in global table
  29.         bne.s    10$            OK, go for the next
  30. LibsOpened    movem.l    (sp)+,a2-a3/a6        could return 0 if failed above
  31.         rts        
  32.  
  33. ;==============================================================================
  34. ; CloseLibs( libtable )
  35. ;        a0
  36. ;
  37. ; Closes all libraries opened by OpenLibs() providing the pointer to that
  38. ; library (as stored in global table) is non zero, (the open succeeded).
  39. ;==============================================================================
  40. CloseLibs    movem.l    a2/a6,-(sp)
  41.         movea.l    SysLib(a5),a6        using exec library
  42.         movea.l    a0,a2            save libtable pointer
  43.  
  44. 10$        tst.w    (a2)+            end of list ?
  45.         bmi.s    LibsClosed        yes, quit now
  46.         move.l    (a2)+,d0        offset to lower word
  47.         move.l    0(a5,d0.w),d0        get lib pointer
  48.         beq.s    LibsClosed        that's it, this one failed
  49.         movea.l    d0,a1
  50.         jsr    _LVOCloseLibrary(a6)    close this library
  51.         bra.s    10$            and go for the next
  52. LibsClosed    movem.l    (sp)+,a2/a6
  53.         rts
  54.  
  55. ;==============================================================================
  56. ; An example list of libraries that would be sent to the OpenLibraries routine.
  57. ; IntLib, GfxLib and DosLib would all be members defined in the global struct.
  58. ;==============================================================================
  59. Libraries    DC.W    33,IntName-Libraries,IntLib
  60.         DC.W    33,GfxName-Libraries,GfxLib
  61.         DC.W    33,DosName-Libraries,DosLib
  62.         DC.W    -1
  63. IntName        DC.B    'intuition.library',0
  64.         CNOP    0,2
  65. GfxName        DC.B    'graphics.library',0
  66.         CNOP    0,2
  67. DosName        DC.B    'dos.library',0
  68.         CNOP    0,2
  69.  
  70.         END
  71.