home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / assemblr / library / lib4a86 / lib / queues.bib < prev    next >
Text File  |  1992-02-02  |  3KB  |  221 lines

  1. #IF !LIB4A86
  2. #ELSE
  3. #IF !INTERN_LIB4A86_S
  4. INTERN_LIB4A86_S EQU 01
  5. JMP START
  6. #ENDIF
  7. #ENDIF
  8. #IF !MAXQUEUEHANDLES
  9. MAXQUEUEHANDLES EQU 10XD
  10. #ENDIF
  11. #IF (MAXQUEUEHANDLES EQ 0) OR (MAXQUEUEHANDLES GE 255)
  12. *******
  13. ERROR: MAXQUEUEHANDLES DARF NUR IM INTERVALL VON 1 BIS 255 LIEGEN!!!
  14. *******
  15. #ENDIF
  16. QUEUEHANDLETABLE DW (MAXQUEUEHANDLES*2) DUP (0FFFFH)
  17. MQUEUEROUTINETABLE DW OFFSET INITMQUEUE
  18. DW OFFSET LOCKMQUEUE
  19. DW OFFSET UNLOCKMQUEUE
  20. DW OFFSET DELETEMQUEUE
  21. DW OFFSET WRITEMQUEUE
  22. DW OFFSET READMQUEUE
  23. DW OFFSET GETMQUEUESTATISTIK
  24. DW OFFSET LOOKMQUEUE
  25. SQUEUEROUTINETABLE DW OFFSET INITSQUEUE
  26. DW OFFSET LOCKSQUEUE
  27. DW OFFSET UNLOCKSQUEUE
  28. DW OFFSET DELETESQUEUE
  29. DW OFFSET WRITESQUEUE
  30. DW OFFSET READSQUEUE
  31. DW OFFSET GETSQUEUESTATISTIK
  32. DW OFFSET INTERN_QUEUESDUMMY
  33. UNKNOWNQSUBFUNCTION EQU 8401H
  34. INVALIDQUEUEHANDLE EQU 08402H
  35. NOMOREQUEUEHANDLES EQU 08403H
  36. GETMAXQUEUES:
  37. PUSHF
  38. PUSH DS,SI,BX
  39. CLD
  40. MOV DS,CS
  41. MOV SI,OFFSET QUEUEHANDLETABLE
  42. XOR DX,DX
  43. XOR BX,BX
  44. MOV CX,MAXQUEUEHANDLES
  45. PUSH CX
  46. L00:
  47. LODSW
  48. CMP AX,0FFFFH
  49. LODSW
  50. JE >L1
  51. INC DX
  52. CMP AX,OFFSET MQUEUEROUTINETABLE
  53. IF E INC BL
  54. CMP AX,OFFSET SQUEUEROUTINETABLE
  55. IF E INC BH
  56. L1:
  57. LOOP L00
  58. MOV AX,BX
  59. MOV CX,DX
  60. POP DX
  61. POP BX,SI,DS
  62. POPF
  63. RET
  64. B000 EQU W[BP+2]
  65. C000 EQU W[BP+4]
  66. A000 EQU W[BP-2]
  67. OPENQUEUE:
  68. PUSH DS,SI,CX,BX
  69. PUSH BP
  70. MOV BP,SP
  71. PUSH AX
  72. CLD
  73. MOV DS,CS
  74. MOV SI,OFFSET QUEUEHANDLETABLE
  75. MOV CX,MAXQUEUEHANDLES
  76. XOR BX,BX
  77. L0:
  78. LODSW
  79. CMP AX,0FFFFH
  80. JE >L1
  81. LODSW
  82. INC BX
  83. LOOP L0
  84. MOV AX,NOMOREQUEUEHANDLES
  85. JMP >L8
  86. L1:
  87. DEC SI,2
  88. MOV B000,BX
  89. MOV CX,C000
  90. MOV BX,CX
  91. TEST BX,0FH
  92. PUSHF
  93. SHR BX,1
  94. SHR BX,1
  95. SHR BX,1
  96. SHR BX,1
  97. POPF
  98. IF NZ INC BX
  99. CALL GETMEMORYBLOCK
  100. JC >L8
  101. MOV W[SI],AX
  102. MOV AX,A000
  103. AND AL,01H
  104. MOV AX,OFFSET SQUEUEROUTINETABLE
  105. IF NZ MOV AX,OFFSET MQUEUEROUTINETABLE
  106. MOV W[SI+2],AX
  107. MOV AL,0
  108. MOV BX,B000
  109. CALL INTERN_CALLQUEUEROUTINE
  110. JNC >L9
  111. PUSH AX,ES
  112. MOV ES,[SI]
  113. CALL FREEMEMORYBLOCK
  114. MOV W[SI],0FFFFH
  115. POP ES,AX
  116. L8:
  117. STC
  118. L9:
  119. MOV SP,BP
  120. POP BP
  121. POP BX,CX,SI,DS
  122. RET
  123. CLOSEQUEUE:
  124. MOV AL,1
  125. CALL INTERN_CALLQUEUEROUTINE
  126. JC RET
  127. PUSH ES,BX
  128. SHL BX,1
  129. SHL BX,1
  130. MOV AX,0FFFFH
  131. XCHG AX,CS:QUEUEHANDLETABLE[BX]
  132. MOV ES,AX
  133. CALL FREEMEMORYBLOCK
  134. POP BX,ES
  135. RET
  136. READQUEUE:
  137. MOV AL,05
  138. JMP SHORT INTERN_CALLQUEUEROUTINE
  139. WRITEQUEUE:
  140. MOV AL,04
  141. JMP SHORT INTERN_CALLQUEUEROUTINE
  142. LOCKQUEUE:
  143. MOV AL,01
  144. JMP SHORT INTERN_CALLQUEUEROUTINE
  145. UNLOCKQUEUE:
  146. MOV AL,02
  147. JMP SHORT INTERN_CALLQUEUEROUTINE
  148. DELETEQUEUE:
  149. MOV AL,03
  150. JMP SHORT INTERN_CALLQUEUEROUTINE
  151. GETQUEUEDATA:
  152. MOV AL,06
  153. PUSH BX
  154. SHL BX,1
  155. SHL BX,1
  156. MOV DI,CS:QUEUEHANDLETABLE[BX]
  157. POP BX
  158. JMP SHORT INTERN_CALLQUEUEROUTINE
  159. LOOKQUEUE:
  160. MOV AL,07
  161. JMP SHORT INTERN_CALLQUEUEROUTINE
  162. INTERN_CALLQUEUEROUTINE:
  163. PUSH ES,BX
  164. CMP BX,MAXQUEUEHANDLES
  165. JBE >L1
  166. L2:
  167. MOV AX,INVALIDQUEUEHANDLE
  168. STC
  169. JMP >L9
  170. L1:
  171. SHL BX,1
  172. SHL BX,1
  173. PUSH AX
  174. MOV AX,CS:QUEUEHANDLETABLE[BX]
  175. CMP AX,0FFFFH
  176. MOV ES,AX
  177. POP AX
  178. JE L2
  179. MOV BX,CS:QUEUEHANDLETABLE[BX+2]
  180. XOR AH,AH
  181. SHL AX,1
  182. ADD BX,AX
  183. CALL W CS:[BX]
  184. L9:
  185. POP BX,ES
  186. RET
  187. INTERN_QUEUESDUMMY:
  188. MOV AX,UNKNOWNQSUBFUNCTION
  189. STC
  190. RET
  191. #IF !INTERN_CMARK0
  192. INTERN_CMARK0 EQU 01H
  193. INTERN_CMARK1:
  194. PUSH BP
  195. MOV BP,SP
  196. MOV BX,06H
  197. SUB CH,[BP+SI]
  198. SUB AH,[BX+SI]
  199. DEC SP
  200. DEC CX
  201. INC DX
  202. XOR AL,041H
  203. CMP B[02820H],DH
  204. INC BX
  205. SUB W[BX+SI],SP
  206. INC DX
  207. CS AND B[BP+DI+043H],DL
  208. DEC AX
  209. INC BP
  210. DEC BP
  211. DEC BP
  212. INC BP
  213. PUSH DX
  214. AND B[BP+SI],CH
  215. SUB CH,[BP+SI]
  216. POP DX
  217. MOV SP,BP
  218. POP BP
  219. RET
  220. #ENDIF
  221.