home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD1.iso / GFX / viewer / SVLIBS81.LHA / superview-lib / Programmers / Example_SVObjects / SVO / SV_AsmPart.a < prev    next >
Encoding:
Text File  |  1994-08-13  |  9.7 KB  |  365 lines

  1. ; * ************************************************************************ *
  2. ; * 'SVO.svobject' V2.8                                                      *
  3. ; * ************************************************************************ *
  4. ; * (c) 1993-94 by Andreas Ralph Kleinert. All rights reserved.              *
  5. ; * This code can be used to create the 'SVO.svobject'.                      *
  6. ; * THIS IS NOT ALLOWED WITHOUT SPECIAL PERMISSION BY THE AUTHOR !!!         *
  7. ; * ************************************************************************ *
  8. ; * Address         : Andreas R. Kleinert                     *
  9. ; *               Grube Hohe Grethe 23                     *
  10. ; *               D-57074 Siegen                         *
  11. ; *               Germany                             *
  12. ; * ************************************************************************ *
  13.  
  14. ; * ************************************************************************ *
  15. ; * Module         : SV_AsmPart.a                         *
  16. ; * Version         : V2.8                             *
  17. ; * Last updated     : 1.7.1994                                                 *
  18. ; * Includes         : V40-Includes                                          *
  19. ; * Compiler         : SAS/C V6.51 (ASM)                                     *
  20. ; * Compiler-Options : (smakefile)                                           *
  21. ; * ************************************************************************ *
  22.  
  23.   INCLUDE "exec/types.i"
  24.   INCLUDE "exec/execbase.i"
  25.   INCLUDE "exec/initializers.i"
  26.   INCLUDE "exec/libraries.i"
  27.   INCLUDE "exec/resident.i"
  28.  
  29. VERSION  EQU 2
  30. REVISION EQU 8
  31.  
  32.   XREF _LinkerDB
  33.  
  34.   XREF _LVOOpenLibrary
  35.   XREF _LVOCloseLibrary
  36.   XREF _LVORemove
  37.   XREF _LVOFreeMem
  38.  
  39.   XREF _SVLI_InitSVOList          ; library-internal initialization function
  40.  
  41.   XREF _SVO_AllocHandle
  42.   XREF _SVO_FreeHandle
  43.   XREF _SVO_Show
  44.   XREF _SVO_Write
  45.   XREF _SVO_CloseDisplay
  46.   XREF _SVO_FreeResources
  47.   XREF _SVO_SetAccessMode
  48.   XREF _SVO_SetWriteSubType
  49.   XREF _SVO_SetScreenType
  50.   XREF _SVO_SetWindowFlags
  51.   XREF _SVO_SetWindowIDCMP
  52.   XREF _SVO_GetScreenAddress
  53.   XREF _SVO_GetWindowAddress
  54.   XREF _SVO_SetScreenAddress
  55.   XREF _SVO_SetWindowAddress
  56.   XREF _SVO_SetWriteName
  57.   XREF _SVO_SetReadName
  58.   XREF _SVO_FileInfoRequest
  59.   XREF _SVO_CheckFileType
  60.   XREF _SVO_ReadToGfxBuffer ; added in V2
  61.   XREF _SVO_GetGfxBuffer
  62.   XREF _SVO_SetGfxBuffer
  63.  
  64.   STRUCTURE SVObjectBase,0
  65.    STRUCT svb_LibNode,LIB_SIZE
  66.    ULONG  svb_SVObject
  67.  
  68.    ULONG  svb_Reserved,32
  69.  
  70.    ULONG  svb_SegList
  71.    ULONG  svb_SysBase
  72.    ULONG  svb_DOSBase
  73.    ULONG  svb_IntuitionBase
  74.    ULONG  svb_GfxBase
  75.    ULONG  svb_UtilityBase
  76.    ULONG  svb_XpkBase
  77.    ULONG  svb_SVSupportBase
  78.   LABEL  svb_SIZEOF
  79.  
  80.   SECTION svb_lib,CODE
  81. ;-------------- `Notausgang` ------------------------------------------------
  82. Start:    moveq #0,d0
  83.     rts
  84. ;-------------- Resident-Struktur -------------------------------------------
  85.  
  86.  
  87. ROMTag:
  88.      dc.w RTC_MATCHWORD
  89.      dc.l ROMTag         ; ptr to itself
  90.      dc.l EndResident    ; ptr to end of Resident-Structure
  91.      dc.b RTF_AUTOINIT   ; Initialisierungsart
  92.      dc.b VERSION         ; Version
  93.      dc.b NT_LIBRARY     ; Node-Typ
  94.      dc.b REVISION         ; Prioritaet
  95.      dc.l SVLibName      ; Name
  96.      dc.l SVLibID         ; LibIDString
  97.      dc.l InitTab         ; ptr to InitTab
  98.  
  99. SVLibName:    dc.b 'SVO.svobject',0
  100. SVLibID:    dc.b 'SVO 2.8 (1.7.94)',13,10,0
  101. AKCopyright:    dc.b '(c) 1993-94 by Andreas R. Kleinert',0
  102. DosName:    dc.b 'dos.library',0
  103. IntuitionName:    dc.b 'intuition.library',0
  104. GfxName:    dc.b 'graphics.library',0
  105. UtilityName:    dc.b 'utility.library',0
  106. XpkName:        dc.b 'xpkmaster.library',0
  107. SVSupportName:  dc.b 'superviewsupport.library',0
  108.         ds.w 0
  109.  
  110. EndResident:
  111.  
  112.  
  113. ;-------------- Funktionstabellen fuer InitStruct u.a. ----------------------
  114. InitTab:
  115.      dc.l svb_SIZEOF      ; LibBase-Size
  116.      dc.l FuncTab          ; Function-Table begin
  117.      dc.l DataTab          ; Data-Table begin
  118.      dc.l InitLib          ; ptr to InitLib
  119. FuncTab:
  120.      dc.l OpenLib          ; internal functions
  121.      dc.l CloseLib
  122.      dc.l ExpungeLib
  123.      dc.l ExtFuncLib
  124.  
  125.          dc.l _SVO_AllocHandle
  126.          dc.l _SVO_FreeHandle
  127.          dc.l _SVO_Show
  128.          dc.l _SVO_Write
  129.          dc.l _SVO_CloseDisplay
  130.          dc.l _SVO_FreeResources
  131.          dc.l _SVO_SetAccessMode
  132.          dc.l _SVO_SetWriteSubType
  133.          dc.l _SVO_SetScreenType
  134.          dc.l _SVO_SetWindowFlags
  135.          dc.l _SVO_SetWindowIDCMP
  136.          dc.l _SVO_GetScreenAddress
  137.          dc.l _SVO_GetWindowAddress
  138.          dc.l _SVO_SetScreenAddress
  139.          dc.l _SVO_SetWindowAddress
  140.          dc.l _SVO_SetWriteName
  141.          dc.l _SVO_SetReadName
  142.          dc.l _SVO_FileInfoRequest
  143.          dc.l _SVO_CheckFileType
  144.          dc.l _SVO_ReadToGfxBuffer ; added in V2
  145.          dc.l _SVO_GetGfxBuffer
  146.          dc.l _SVO_SetGfxBuffer
  147.  
  148.      dc.l -1
  149. DataTab:
  150.      INITBYTE LN_TYPE,NT_LIBRARY
  151.      INITLONG LN_NAME,SVLibName
  152.      INITBYTE LIB_FLAGS,LIBF_SUMUSED!LIBF_CHANGED
  153.      INITWORD LIB_VERSION,VERSION
  154.      INITWORD LIB_REVISION,REVISION
  155.      INITLONG LIB_IDSTRING,SVLibID
  156.      dc.l 0
  157.  
  158. ;-------------- InitLib (Initialisieren der Library) ---------------------------
  159. ;     A0 : &SegList
  160. ;     A6 : &SysBase
  161. ;     D0 : &SVLibrary
  162.  
  163. InitLib:
  164.       movem.l a4-a5,-(sp)       ; a4 und a5 auf Stack retten
  165.  
  166.       lea     _LinkerDB,a4        ; _LinkerDB  -> A4
  167.       move.l d0,a5            ; &SVLibrary -> A5
  168.  
  169.       move.l a6,_SysBase(a4)    ; &SysBase retten
  170.  
  171.       move.l a6,svb_SysBase(a5)  ; &SysBase   -> SVLibrary.svb_SysBase
  172.       move.l a0,svb_SegList(a5)  ; &SegList   -> SVLibrary.svb_SegList
  173.  
  174.       lea DosName,a1
  175.       move.l #37,d0
  176.       LINKLIB _LVOOpenLibrary,_SysBase
  177.       move.l d0,_DOSBase
  178.       move.l d0,svb_DOSBase(a5)        ; save it !
  179.  
  180.       lea IntuitionName,a1
  181.       move.l #37,d0
  182.       LINKLIB _LVOOpenLibrary,_SysBase
  183.       move.l d0,_IntuitionBase
  184.       move.l d0,svb_IntuitionBase(a5)  ; save it !
  185.  
  186.       lea GfxName,a1
  187.       move.l #37,d0
  188.       LINKLIB _LVOOpenLibrary,_SysBase
  189.       move.l d0,_GfxBase
  190.       move.l d0,svb_GfxBase(a5)        ; save it !
  191.  
  192.       lea UtilityName,a1
  193.       move.l #37,d0
  194.       LINKLIB _LVOOpenLibrary,_SysBase
  195.       move.l d0,_UtilityBase
  196.       move.l d0,svb_UtilityBase(a5)        ; save it !
  197.  
  198.       lea XpkName,a1
  199.       move.l #2,d0
  200.       LINKLIB _LVOOpenLibrary,_SysBase
  201.       move.l d0,_XpkBase
  202.       move.l d0,svb_XpkBase(a5)        ; save it !
  203.  
  204.       lea SVSupportName,a1
  205.       move.l #1,d0
  206.       LINKLIB _LVOOpenLibrary,_SysBase
  207.       move.l d0,_SVSupportBase
  208.       move.l d0,svb_SVSupportBase(a5)        ; save it !
  209.  
  210.           tst.l _DOSBase
  211.           beq InitLib_Fail
  212.           tst.l _IntuitionBase
  213.           beq InitLib_Fail
  214.           tst.l _GfxBase
  215.           beq InitLib_Fail
  216.           tst.l _UtilityBase
  217.           beq InitLib_Fail
  218.           tst.l _XpkBase
  219.           beq InitLib_Fail
  220.           tst.l _SVSupportBase
  221.           beq InitLib_Fail
  222.  
  223.       move.l a5,_SVObjectBase        ; save Base Address for internal use
  224.  
  225.           jsr _SVLI_InitSVOList
  226.  
  227.       move.l a5,d0                    ; return &SVObjectBase
  228.  
  229.           jmp InitLib_RTS
  230.  
  231. InitLib_Fail:
  232.  
  233.       moveq #0,d0                ; NULL !
  234.  
  235. InitLib_RTS:
  236.  
  237.       movem.l (sp)+,a4-a5
  238.       rts
  239.  
  240.  
  241. ;-------------- OpenLib (Oeffnen der Library) ----------------------------------
  242. OpenLib:
  243.         addq.w #1,LIB_OPENCNT(a6)          ; LIB_OPENCNT ++
  244.         bclr   #LIBB_DELEXP,LIB_FLAGS(a6)  ; clear LIBF_DELEXP
  245.         move.l a6,d0               ; return &SVObjectBase
  246.  
  247.         rts
  248.  
  249. ;-------------- CloseLib (Schliessen der Library) ------------------------------
  250. CloseLib:
  251.         moveq #0,d0
  252.         subq.w #1,LIB_OPENCNT(a6)          ; LIB_OPENCNT --
  253.         bne.s EndCloseLib           ; wenn nicht null, Abbruch
  254.         btst #LIBB_DELEXP,LIB_FLAGS(a6)    ; Test auf LIBF_DELEXP
  255.         beq.s EndCloseLib           ; wenn Null, Abbruch
  256.         bsr.s ExpungeLib           ; wenn gesetzt, ExpungeLib
  257. EndCloseLib:
  258.         rts
  259.  
  260. ;-------------- ExpungeLib (Entfernen der Library) ----------------------------
  261. ExpungeLib:
  262.         movem.l d2/a5/a6,-(sp)
  263.  
  264.         move.l a6,a5               ; &SVLibrary retten
  265.         move.l _SysBase,a6           ; ExecBase to A6
  266.         tst.w LIB_OPENCNT(a5)              ; test LIB_OPENCNT
  267.         beq.s NoOpenLib            ; ...
  268.         bset #LIBB_DELEXP,LIB_FLAGS(a5)    ; set LIBF_DELEXP flag
  269.         moveq #0,d0               ; Ptr auf Segmentliste
  270.         jmp   ExpungeLibEnd           ;
  271. NoOpenLib:
  272.         move.l svb_SegList(a5),d2           ; SegList retten
  273.  
  274.         move.l a5,a1               ; &SVLibrary nach A1 (Par.)
  275.         LINKLIB _LVORemove,_SysBase       ; Library-Node entfernen
  276.  
  277.         move.l _DOSBase,a1
  278.         LINKLIB _LVOCloseLibrary,_SysBase
  279.  
  280.         move.l _IntuitionBase,a1
  281.         LINKLIB _LVOCloseLibrary,_SysBase
  282.  
  283.         move.l _GfxBase,a1
  284.         LINKLIB _LVOCloseLibrary,_SysBase
  285.  
  286.         move.l _UtilityBase,a1
  287.         LINKLIB _LVOCloseLibrary,_SysBase
  288.  
  289.         move.l _XpkBase,a1
  290.         LINKLIB _LVOCloseLibrary,_SysBase
  291.  
  292.         move.l _SVSupportBase,a1
  293.         LINKLIB _LVOCloseLibrary,_SysBase
  294.  
  295.         moveq  #0,d0               ; D0 loeschen
  296.         move.l a5,a1               ; &SVLibrary nach A1 (Par.)
  297.         move.w LIB_NEGSIZE(a5),d0          ; Groesse der
  298.         sub.l d0,a1               ; Library
  299.         add.w LIB_POSSIZE(a5),d0           ; ermitteln !!!
  300.  
  301.         LINKLIB _LVOFreeMem,_SysBase       ; Speicher freigeben
  302.         move.l d2,d0               ; &SegList zurueckgeben
  303. ExpungeLibEnd:
  304.         movem.l (sp)+,d2/a5/a6
  305.         rts
  306.  
  307. ;-------------- ExtFuncLib (bis einschl. OS V2.04 unbenutzt) ---------------
  308. ExtFuncLib:
  309.  
  310.         moveq #0,d0         ; Ist nie falsch ........ - oder ?
  311.         rts
  312.  
  313. ;-------------- Eigene Funktionen ------------------------------------------
  314.  
  315.   SECTION __MERGED,BSS
  316.  
  317. _SVObjectBase:    ds.l 1
  318. _SysBase:    ds.l 1
  319. _DOSBase:    ds.l 1
  320. _IntuitionBase: ds.l 1
  321. _GfxBase:    ds.l 1
  322. _UtilityBase:    ds.l 1
  323. _XpkBase:    ds.l 1
  324. _SVSupportBase:    ds.l 1
  325.  
  326. _XCEXIT:    ds.l 1      ; dummy-values to get the compiler's libs work :
  327. __XCEXIT:    ds.l 1
  328. _ONBREAK:    ds.l 1
  329. __ONBREAK:    ds.l 1
  330. __base:     ds.l 1
  331. ___base:     ds.l 1
  332. _ProgramName:    ds.l 1
  333. __ProgramName:    ds.l 1
  334. _StackPtr:    ds.l 1
  335. __StackPtr:    ds.l 1
  336. _oserr:     ds.l 1
  337. __oserr:    ds.l 1
  338. _OSERR:     ds.l 1
  339. __OSERR:    ds.l 1
  340.  
  341.   XDEF _SVObjectBase
  342.   XDEF _SysBase
  343.   XDEF _DOSBase
  344.   XDEF _IntuitionBase
  345.   XDEF _GfxBase
  346.   XDEF _UtilityBase
  347.   XDEF _XpkBase
  348.   XDEF _SVSupportBase
  349.  
  350.   XDEF _XCEXIT
  351.   XDEF __XCEXIT
  352.   XDEF _ONBREAK
  353.   XDEF __ONBREAK
  354.   XDEF __base
  355.   XDEF ___base
  356.   XDEF _ProgramName
  357.   XDEF __ProgramName
  358.   XDEF _StackPtr
  359.   XDEF __StackPtr
  360.   XDEF _oserr
  361.   XDEF __oserr
  362.   XDEF _OSERR
  363.   XDEF __OSERR
  364.         END
  365.