        CSECT       text

        XREF        _cOpenWindow
        XREF        _cCloseWindow
        XREF        _cAddGadget
        XREF        _cAddGList
        XREF        _ZoomHandler

        XREF        _OldOpenWindow
        XREF        _OldCloseWindow
        XREF        _OldAddGadget
        XREF        _OldAddGList

        XDEF        _aOpenWindow
        XDEF        _aCloseWindow
        XDEF        _aAddGadget
        XDEF        _aAddGList
        XDEF        _aOldAddGadget
        XDEF        _aOldAddGList

        XDEF        _ZoomHandlerStub
        
_ZoomHandlerStub:
        MOVEM.L A0/A1,-(SP)                ; push the parameters on the stack
        JSR     _ZoomHandler               ; call the Input Handler routine
        ADDQ.L  #8,SP                      ; pop the parameters off the stack
        RTS
        
_aOpenWindow:
        MOVE.L      _OldOpenWindow,A1      ; move old address to A1
        JSR         (A1)                   ; JSR to old OpenWindow routine
        MOVEM.L     D0-D7/A0-A6,-(SP)      ; save registers on stack
        MOVE.L      D0,-(SP)               ; push Window pointer
        JSR         _cOpenWindow           ; call our C OpenWindow
        ADDQ.L      #4,SP                  ; pop the pointer
        MOVEM.L     (SP)+,D0-D7/A0-A6      ; restore registers
        RTS

_aCloseWindow:
        MOVEM.L     D2-D7/A0-A6,-(SP)      ; save registers on stack
        MOVE.L      A0,-(SP)               ; push pointer to Window
        JSR         _cCloseWindow          ; call our C CloseWindow
        ADDQ.L      #4,SP                  ; pop the Window pointer
        MOVEM.L     (SP)+,D2-D7/A0-A6      ; restore registers
        MOVE.L      _OldCloseWindow,A1     ; move old address to A1
        JSR         (A1)                   ; JSR to old CloseWindow routine
        RTS

_aAddGadget:
        MOVEM.L     D2-D7/A0-A6,-(SP)      ; save registers on stack
        MOVE.L      D0,-(SP)               ; push Position
        MOVE.L      A1,-(SP)               ; push Gadget Pointer
        MOVE.L      A0,-(SP)               ; push AddPtr Pointer
        JSR         _cAddGadget            ; call our C AddGadget
        ADD.L       #12,SP                 ; pop values
        MOVEM.L     (SP)+,D2-D7/A0-A6      ; restore registers
        RTS

_aOldAddGadget
        MOVE.L      4(SP),A0               ; move AddPtr to register
        MOVE.L      8(SP),A1               ; move Gadget Pointer to register
        MOVE.L      12(SP),D0              ; move Position to register
        MOVE.L      _OldAddGadget,A2       ; move old address to A2
        JMP         (A2)                   ; JMP to old AddGadget routine

_aAddGList:
        MOVEM.L     D2-D7/A0-A6,-(SP)      ; save registers on stack
        MOVE.L      A2,-(SP)               ; push Requester Pointer
        MOVE.L      D1,-(SP)               ; push NumGad
        MOVE.L      D0,-(SP)               ; push Position
        MOVE.L      A1,-(SP)               ; push Gadget Pointer
        MOVE.L      A0,-(SP)               ; push AddPtr Pointer
        JSR         _cAddGList             ; call our C AddGList
        ADD.L       #20,SP                 ; pop values
        MOVEM.L     (SP)+,D2-D7/A0-A6      ; restore registers
        RTS

_aOldAddGList
        MOVE.L      4(SP),A0               ; move AddPtr to register
        MOVE.L      8(SP),A1               ; move Gadget Pointer to register
        MOVE.L      12(SP),D0              ; move Position to register
        MOVE.L      16(SP),D1              ; move NumGad
        MOVE.L      20(SP),A2              ; move Requester Pointer to register
        MOVE.L      _OldAddGList,A3        ; move old address to A3
        JMP         (A3)                   ; JMP to old AddGList routine

        END
