home *** CD-ROM | disk | FTP | other *** search
/ cyber.net 2 / cybernet2.ISO / qtw111 / samples / mathdisp.asm < prev    next >
Assembly Source File  |  1993-03-11  |  5KB  |  137 lines

  1. ; ---------------------------------------------------------------------
  2. ;
  3. ; MathDisp.Asm - Math Components Dispatch - QuickTime for Windows
  4. ;
  5. ;                Version 1.0
  6. ;
  7. ;                (c) 1988-1993 Apple Computer, Inc. All Rights Reserved.
  8. ;
  9. ; ---------------------------------------------------------------------
  10.  
  11.  
  12.         .MODEL SMALL, C
  13.         .386
  14.  
  15.         .CODE
  16.  
  17.          ASSUME DS: DGROUP
  18.  
  19.  
  20. ;///////////////////////////////////////////////////////////////////////////
  21. ; ComponentFunc Macro
  22. ;    Define code to create a table entry for each function
  23.  
  24. ComponentFunc MACRO sel:req, name:req
  25.    EXTERN   cf&name:NEAR               ; declare the name external
  26.    DW       cf&name                    ; define the table entry
  27. ENDM
  28.  
  29.  
  30. ;///////////////////////////////////////////////////////////////////////////
  31. ; AddJumpTable
  32. ;    Create the Jump Table for all Add functions
  33.  
  34. AddJumpTable:
  35.    INCLUDE addfs.inc
  36.  
  37.  
  38. ;///////////////////////////////////////////////////////////////////////////
  39. ; AddSelectorTable
  40. ;    Create the Selector Table for all Add functions
  41.  
  42. AddSelectorTable:
  43.    EXTERN  C cfAddOpenSelect:NEAR
  44.    DW        cfAddOpenSelect
  45.    EXTERN  C cfAddCloseSelect:NEAR
  46.    DW        cfAddCloseSelect
  47.    EXTERN  C cfAddCanDoSelect:NEAR
  48.    DW        cfAddCanDoSelect
  49.    EXTERN  C cfAddVersionSelect:NEAR
  50.    DW        cfAddVersionSelect
  51.    EXTERN  C cfAddRegisterSelect:NEAR
  52.    DW        cfAddRegisterSelect
  53.    EXTERN  C cfAddTargetSelect:NEAR
  54.    DW        cfAddTargetSelect
  55.  
  56. ;///////////////////////////////////////////////////////////////////////////
  57. ; AddEntryPoint
  58. ;    Add Entry Point from Component Manager
  59.  
  60. AddEntryPoint PROC FAR
  61.    cmp   bx, 0                         ; see if selector is special negative
  62.    jl    NegativeSelector              ; yes, go deal with it
  63.    cmp   bx, kAddFunctionCount         ; ensure function selector within range
  64.    jge   BadSelector                   ; no  - error return
  65.    add   bx, bx                        ; yes - build jump table pointer
  66.    mov   ax, DGROUP                    ; set DS for this DLL
  67.    mov   ds, ax
  68.    jmp   WORD PTR cs:AddJumpTable [bx] ; jump into selected function
  69. NegativeSelector:
  70.    neg   bx                            ; make positive
  71.    dec   bx                            ; make base zero
  72.    add   bx, bx                        ; make selector table pointer
  73.    mov   ax, DGROUP                    ; set DS for this DLL
  74.    mov   ds, ax
  75.    jmp   WORD PTR cs:AddSelectorTable [bx] ; jump into selector function
  76. BadSelector:
  77.    mov   dx, 08000h                    ; load special error return
  78.    mov   ax, 08002h                    ; badComponentSelector
  79.    ret
  80. AddEntryPoint ENDP
  81.  
  82.  
  83. ;///////////////////////////////////////////////////////////////////////////
  84. ; SumJumpTable
  85. ;    Create the Jump Table for all Sum functions
  86.  
  87. SumJumpTable:
  88.    INCLUDE sumfs.inc
  89.  
  90.  
  91. ;///////////////////////////////////////////////////////////////////////////
  92. ; SumSelectorTable
  93. ;    Create the Selector Table for all Sum functions
  94.  
  95. SumSelectorTable:
  96.    EXTERN  C cfSumOpenSelect:NEAR
  97.    DW        cfSumOpenSelect
  98.    EXTERN  C cfSumCloseSelect:NEAR
  99.    DW        cfSumCloseSelect
  100.    EXTERN  C cfSumCanDoSelect:NEAR
  101.    DW        cfSumCanDoSelect
  102.    EXTERN  C cfSumVersionSelect:NEAR
  103.    DW        cfSumVersionSelect
  104.    EXTERN  C cfSumRegisterSelect:NEAR
  105.    DW        cfSumRegisterSelect
  106.    EXTERN  C cfSumTargetSelect:NEAR
  107.    DW        cfSumTargetSelect
  108.  
  109.  
  110. ;///////////////////////////////////////////////////////////////////////////
  111. ; SumEntryPoint
  112. ;  Sum Entry Point from Component Manager
  113.  
  114. SumEntryPoint PROC FAR
  115.    cmp   bx, 0                         ; see if selector is special negative
  116.    jl    NegativeSelector              ; yes, go deal with it
  117.    cmp   bx, kSumFunctionCount         ; ensure function selector within range
  118.    jge   BadSelector                   ; no  - error return
  119.    add   bx, bx                        ; yes - build jump table pointer
  120.    mov   ax, DGROUP                    ; set DS for this DLL
  121.    mov   ds, ax
  122.    jmp   WORD PTR cs:SumJumpTable [bx] ; jump into selected function
  123. NegativeSelector:
  124.    neg   bx                            ; make positive
  125.    dec   bx                            ; make base zero
  126.    add   bx, bx                        ; make selector table pointer
  127.    mov   ax, DGROUP                    ; set DS for this DLL
  128.    mov   ds, ax
  129.    jmp   WORD PTR cs:SumSelectorTable [bx] ; jump into selector function
  130. BadSelector:
  131.    mov   dx, 08000h                    ; load special error return
  132.    mov   ax, 08002h                    ; badComponentSelector
  133.    ret
  134. SumEntryPoint ENDP
  135.  
  136. END
  137.