home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / vdmutils.zip / EVENTSEM.ASM < prev    next >
Assembly Source File  |  1997-10-18  |  9KB  |  212 lines

  1. ; Subroutine to manipulate event semaphores from a VDM.
  2. ; Copyright (C) 1996, David W. Noon
  3.            .286
  4.            .287
  5. ;          OPTION   CASEMAP:ALL
  6.            ASSUME   CS:_TEXT
  7. _TEXT      SEGMENT  PARA READONLY PUBLIC USE16 'CODE'
  8. ; Create an event semaphore.
  9.            PUBLIC   DWNCREATEEVENTSEM
  10. DWNCREATEEVENTSEM PROC FAR PASCAL
  11.            PUSH     BP          ; Stack housekeeping
  12.            MOV      BP,SP       ;
  13.  
  14.            PUSH     DS          ; Save working ...
  15.            PUSH     SI          ; ... registers.
  16.            PUSH     ES          ; ...
  17.            PUSH     DI          ; ...
  18.  
  19.            MOV      AH,64H              ;  Set up the parameter list:
  20.            MOV      CX,636CH            ;     Magic number - see docs.
  21.            MOV      BX,0144H            ;     Indicator for create event sem.
  22.            LES      DI,DWORD PTR 14[BP] ;     Address of semaphore name
  23.            LDS      SI,DWORD PTR 10[BP] ;     Address of semaphore handle (HEV)
  24.            MOV      DX,WORD PTR 8[BP]   ;     Attributes (1 = DC_SEM_SHARED)
  25.            MOV      AL,BYTE PTR 6[BP]   ;     State (1 = posted)
  26.  
  27.            INT      21H         ; Issue the multiplex interrupt
  28.            JC       SHORT $+4   ; Skip clearing AX if carry
  29.            XOR      AX,AX       ; Return code zero if no error
  30.  
  31.            POP      DI          ; Restore working ...
  32.            POP      ES          ; ... registers.
  33.            POP      SI          ; ...
  34.            POP      DS          ; ...
  35.  
  36.            MOV      SP,BP       ; Restore stack
  37.            POP      BP          ;
  38.  
  39.            RETF     12          ; Clean up 12 bytes of parameter pointers
  40. DWNCREATEEVENTSEM ENDP
  41.            ALIGN    10H
  42. ; Open an event semaphore.
  43.            PUBLIC   DWNOPENEVENTSEM
  44. DWNOPENEVENTSEM PROC FAR PASCAL
  45.            PUSH     BP          ; Stack housekeeping
  46.            MOV      BP,SP       ;
  47.  
  48.            PUSH     DS          ; Save working ...
  49.            PUSH     SI          ; ... registers.
  50.            PUSH     ES          ; ...
  51.            PUSH     DI          ; ...
  52.  
  53.            MOV      AH,64H              ;  Set up the parameter list:
  54.            MOV      CX,636CH            ;     Magic number - see docs.
  55.            MOV      BX,0145H            ;     Indicator for open event sem.
  56.            LES      DI,DWORD PTR 10[BP] ;     Address of semaphore name
  57.            LDS      SI,DWORD PTR 6[BP]  ;     Address of semaphore handle (HEV)
  58.  
  59.            INT      21H         ; Issue the multiplex interrupt
  60.            JC       SHORT $+4   ; Skip clearing AX if carry
  61.            XOR      AX,AX       ; Return code zero if no error
  62.  
  63.            POP      DI          ; Restore working ...
  64.            POP      ES          ; ... registers.
  65.            POP      SI          ; ...
  66.            POP      DS          ; ...
  67.  
  68.            MOV      SP,BP       ; Restore stack
  69.            POP      BP          ;
  70.  
  71.            RETF     8           ; Clean up 8 bytes of parameter pointers
  72. DWNOPENEVENTSEM ENDP
  73.            ALIGN    10H
  74. ; Close an event semaphore.
  75.            PUBLIC   DWNCLOSEEVENTSEM
  76. DWNCLOSEEVENTSEM PROC FAR PASCAL
  77.            PUSH     BP          ; Stack housekeeping
  78.            MOV      BP,SP       ;
  79.  
  80.            PUSH     SI          ; Save working register.
  81.  
  82.            MOV      AH,64H            ;  Set up the parameter list:
  83.            MOV      CX,636CH          ;     Magic number - see docs.
  84.            MOV      BX,0146H          ;     Indicator for close event sem.
  85.            MOV      SI,WORD PTR 6[BP] ;     Semaphore handle (HEV)
  86.            MOV      DX,WORD PTR 8[BP] ;       into DX:SI
  87.  
  88.            INT      21H         ; Issue the multiplex interrupt
  89.            JC       SHORT $+4   ; Skip clearing AX if carry
  90.            XOR      AX,AX       ; Return code zero if no error
  91.  
  92.            POP      SI          ; Restore working register.
  93.  
  94.            MOV      SP,BP       ; Restore stack
  95.            POP      BP          ;
  96.  
  97.            RETF     4           ; Clean up 4 bytes of parameter
  98. DWNCLOSEEVENTSEM ENDP
  99.            ALIGN    10H
  100. ; Reset an event semaphore.
  101.            PUBLIC   DWNRESETEVENTSEM
  102. DWNRESETEVENTSEM PROC FAR PASCAL
  103.            PUSH     BP          ; Stack housekeeping
  104.            MOV      BP,SP       ;
  105.  
  106.            PUSH     SI          ; Save working register.
  107.  
  108.            MOV      AH,64H             ;  Set up the parameter list:
  109.            MOV      CX,636CH           ;     Magic number - see docs.
  110.            MOV      BX,0147H           ;     Indicator for reset event sem.
  111.            MOV      SI,WORD PTR 10[BP] ;     Semaphore handle (HEV)
  112.            MOV      DX,WORD PTR 12[BP] ;       into DX:SI
  113.            LES      DI,DWORD PTR 6[BP] ;     Address of post count
  114.  
  115.            INT      21H         ; Issue the multiplex interrupt
  116.            JC       SHORT $+4   ; Skip clearing AX if carry
  117.            XOR      AX,AX       ; Return code zero if no error
  118.  
  119.            POP      SI          ; Restore working register.
  120.  
  121.            MOV      SP,BP       ; Restore stack
  122.            POP      BP          ;
  123.  
  124.            RETF     8           ; Clean up 8 bytes of parameter
  125. DWNRESETEVENTSEM ENDP
  126.            ALIGN    10H
  127. ; Post an event semaphore.
  128.            PUBLIC   DWNPOSTEVENTSEM
  129. DWNPOSTEVENTSEM PROC FAR PASCAL
  130.            PUSH     BP          ; Stack housekeeping
  131.            MOV      BP,SP       ;
  132.  
  133.            PUSH     SI          ; Save working register.
  134.  
  135.            MOV      AH,64H            ;  Set up the parameter list:
  136.            MOV      CX,636CH          ;     Magic number - see docs.
  137.            MOV      BX,0148H          ;     Indicator for post event sem.
  138.            MOV      SI,WORD PTR 6[BP] ;     Semaphore handle (HEV)
  139.            MOV      DX,WORD PTR 8[BP] ;       into DX:SI
  140.  
  141.            INT      21H         ; Issue the multiplex interrupt
  142.            JC       SHORT $+4   ; Skip clearing AX if carry
  143.            XOR      AX,AX       ; Return code zero if no error
  144.  
  145.            POP      SI          ; Restore working register.
  146.  
  147.            MOV      SP,BP       ; Restore stack
  148.            POP      BP          ;
  149.  
  150.            RETF     4           ; Clean up 4 bytes of parameter
  151. DWNPOSTEVENTSEM ENDP
  152.            ALIGN    10H
  153. ; Wait an event semaphore.
  154.            PUBLIC   DWNWAITEVENTSEM
  155. DWNWAITEVENTSEM PROC FAR PASCAL
  156.            PUSH     BP          ; Stack housekeeping
  157.            MOV      BP,SP       ;
  158.  
  159.            PUSH     SI          ; Save working register.
  160.  
  161.            MOV      AH,64H             ;  Set up the parameter list:
  162.            MOV      CX,636CH           ;     Magic number - see docs.
  163.            MOV      BX,0149H           ;     Indicator for wait event sem.
  164.            MOV      SI,WORD PTR 10[BP] ;     Semaphore handle (HEV)
  165.            MOV      DX,WORD PTR 12[BP] ;       into DX:SI
  166.            MOV      AL,BYTE PTR 6[BP]  ;     Timeout value (was a long!)
  167.  
  168.            INT      21H         ; Issue the multiplex interrupt
  169.            JC       SHORT $+4   ; Skip clearing AX if carry
  170.            XOR      AX,AX       ; Return code zero if no error
  171.  
  172.            POP      SI          ; Restore working register.
  173.  
  174.            MOV      SP,BP       ; Restore stack
  175.            POP      BP          ;
  176.  
  177.            RETF     8           ; Clean up 8 bytes of parameters
  178. DWNWAITEVENTSEM ENDP
  179.            ALIGN    10H
  180. ; Query an event semaphore.
  181.            PUBLIC   DWNQUERYEVENTSEM
  182. DWNQUERYEVENTSEM PROC FAR PASCAL
  183.            PUSH     BP          ; Stack housekeeping
  184.            MOV      BP,SP       ;
  185.  
  186.            PUSH     ES          ; Save working ...
  187.            PUSH     DI          ; ... registers.
  188.            PUSH     SI          ;
  189.  
  190.            MOV      AH,64H             ;  Set up the parameter list:
  191.            MOV      CX,636CH           ;     Magic number - see docs.
  192.            MOV      BX,014AH           ;     Indicator for query event sem.
  193.            MOV      SI,WORD PTR 10[BP] ;     Semaphore handle (HEV)
  194.            MOV      DX,WORD PTR 12[BP] ;       into DX:SI
  195.            LES      DI,DWORD PTR 6[BP] ;     Address of post count ULONG
  196.  
  197.            INT      21H         ; Issue the multiplex interrupt
  198.            JC       SHORT $+4   ; Skip clearing AX if carry
  199.            XOR      AX,AX       ; Return code zero if no error
  200.  
  201.            POP      SI          ; Restore working ...
  202.            POP      DI          ; ... registers.
  203.            POP      ES          ;
  204.  
  205.            MOV      SP,BP       ; Restore stack
  206.            POP      BP          ;
  207.  
  208.            RETF     8           ; Clean up 8 bytes of parameters
  209. DWNQUERYEVENTSEM ENDP
  210. _TEXT      ENDS
  211.            END
  212.