home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / comm / ykh121.zip / YKHSRC.ZIP / LAT.ASM < prev    next >
Assembly Source File  |  1992-11-04  |  4KB  |  314 lines

  1. .286c
  2.  
  3. _TEXT    segment byte public 'CODE'
  4. _TEXT    ends
  5.  
  6. DGROUP  group   _DATA,_BSS
  7.     assume    cs:_TEXT,ds:DGROUP
  8.  
  9. _DATA   segment word public 'DATA'
  10.  
  11. SCB equ $
  12. Service DB 18 DUP(0) ; Requested service
  13. Node    DB 18 DUP(0) ; Reserved for future use
  14. Port    DB 18 DUP(0) ; Reserved for future use
  15.  
  16. Session_Stopped  DD 0
  17. Table_Overflow   DD 0
  18. Transmit_notify  DD 0
  19. Receive_notify   DD 0
  20.  
  21. session_status   DW 0
  22. slot_state       DW 0
  23. local_credits    DB 0
  24.  
  25. vcb_offset       DW 0
  26. vcb_segment      DW 0
  27.  
  28. back_slot        DW 0
  29. forward_slot     DW 0
  30.  
  31. rem_slot_id      DB 0
  32. loc_slot_id      DB 0
  33. slot_byte_count  DB 0
  34. remote_credits   DB 0
  35.  
  36. tx_slot_data     DB 255 DUP(0)
  37.  
  38. Num_slots        DB 4
  39.  
  40. Num_occupied     DB 0
  41. Next_rx_slot     DB 0
  42. Cur_buf_slot     DB 0
  43.  
  44. Rx_Slot_Pntr     DW OFFSET Slot_1+4
  45.  
  46. Slot_Ptr_table LABEL WORD
  47. DW OFFSET slot_1
  48. DW OFFSET slot_2
  49. DW OFFSET slot_3
  50. DW OFFSET slot_4
  51.  
  52. slot_1 DB 259 DUP(0)
  53. slot_2 DB 259 DUP(0)
  54. slot_3 DB 259 DUP(0)
  55. slot_4 DB 259 DUP(0)
  56.  
  57. SCB_LEN EQU $-SCB
  58.  
  59. LAT_HANDLE DB 0
  60. _DATA   ends
  61.  
  62. _BSS    segment word public 'BSS'
  63. _BSS    ends
  64.  
  65. INT_6AH MACRO
  66.   PUSH ES
  67.   PUSH DS
  68.   INT 6AH
  69.   POP DS
  70.   POP ES
  71. ENDM
  72.  
  73. _TEXT   segment byte public 'CODE'
  74.     assume    cs:_TEXT
  75.  
  76. ;
  77. ; will this solve problems with PCSA 3.x and PCSA 4.0 under Windows 3.0?
  78. ;
  79. lat_clean proc near
  80.     mov di,seg SCB
  81.     mov es,di
  82.     mov di,offset SCB
  83.     mov cx,SCB_LEN
  84.     xor ax,ax
  85.     cld
  86.     rep stosb
  87.  
  88.     Mov Num_Slots,4
  89.     Mov Rx_Slot_Pntr,OFFSET Slot_1+4
  90.  
  91.     Mov Slot_Ptr_table  ,OFFSET slot_1
  92.     Mov Slot_Ptr_table+2,OFFSET slot_2
  93.     Mov Slot_Ptr_table+4,OFFSET slot_3
  94.     Mov Slot_Ptr_table+6,OFFSET slot_4
  95.     ret
  96. lat_clean endp
  97.  
  98. ;
  99. ; unsigned lat_presence(void);
  100. ;
  101. _lat_presence PROC NEAR
  102.      PUSH BP
  103.      PUSH ES
  104.  
  105.      MOV AX,356AH
  106.      INT 21H
  107.  
  108.      MOV AX,ES
  109.      POP ES
  110.  
  111.      CMP AX,0F000H
  112.      JNE LAT_PRESENT
  113.  
  114. LAT_NOT_PRESENT:
  115.      MOV AX,-1
  116.      POP BP
  117.      RET
  118.  
  119. LAT_PRESENT:
  120.      CMP AX,0000H
  121.      JE LAT_NOT_PRESENT
  122.      XOR AX,AX
  123.      POP BP
  124.      RET
  125. _lat_presence ENDP
  126.  
  127.  
  128. ;
  129. ; unsigned lat_open ( unsigned char *service);
  130. ;
  131. _lat_open PROC NEAR
  132.      PUSH BP
  133.      MOV BP,SP
  134.  
  135.      PUSH ES
  136.      PUSH DI
  137.      PUSH SI
  138.  
  139.      CALL lat_clean       ;trash left in SCB may be causing crashes...
  140.  
  141.      MOV AX,SEG SCB
  142.      MOV ES,AX
  143.      MOV DI,OFFSET SCB
  144.  
  145.      MOV AX,[BP+4]
  146.      MOV SI,AX
  147.  
  148. COPYSERVICE:
  149.  
  150.      LODSB
  151.      STOSB
  152.      OR AL,AL
  153.      JNZ COPYSERVICE
  154.  
  155.      POP SI
  156.      POP DI
  157.      POP ES
  158.  
  159.      MOV DX,0FF00H
  160.      MOV BX,OFFSET SCB
  161.      MOV AX,0D0FFH
  162.  
  163.      INT_6AH
  164.  
  165.      OR AH,AH
  166.      JZ LAT_GOT_HANDLE
  167.      MOV AX,-1
  168.      POP BP
  169.      RET
  170. LAT_GOT_HANDLE:
  171.  
  172.      MOV LAT_HANDLE,DL
  173.      SUB AX,AX
  174.      POP BP
  175.      RET
  176. _lat_open ENDP
  177.  
  178. ;
  179. ; void lat_close (void);
  180. ;
  181. _lat_close PROC NEAR
  182.      PUSH BP
  183.  
  184.      TEST session_status,1000b
  185.      JNZ _lat_close_3
  186.  
  187. _lat_close_1:
  188.      MOV AX,0D000H
  189.  
  190.      MOV DH,0FFH
  191.      MOV DL,LAT_HANDLE
  192.  
  193.      INT_6AH
  194.  
  195.      CMP AX,2
  196.      JNE _lat_close_3
  197.  
  198.      XOR CX,CX
  199. _lat_close_2:
  200.      LOOP _lat_close_2
  201.      JMP _lat_close_1
  202.  
  203. _lat_close_3:
  204.      POP BP
  205.      RET
  206. _lat_close ENDP
  207.  
  208.  
  209. ;
  210. ; unsigned lat_send (char c);
  211. ;
  212. _lat_send PROC NEAR
  213.      PUSH BP
  214.      MOV BP,SP
  215.  
  216.      test byte ptr session_status,18H
  217.      JNZ _lat_dont_send
  218.  
  219.      MOV AL,[BP+4]
  220.  
  221.      MOV CX,100
  222.      MOV AH,01H
  223.  
  224. _lat_try_sending:
  225.  
  226.      MOV DH,0FFH
  227.      MOV DL,LAT_HANDLE
  228.  
  229.      INT_6AH
  230.  
  231.      TEST AH,80H
  232.      JZ _lat_sent_character
  233.      LOOP _lat_try_sending
  234.  
  235. _lat_dont_send:
  236.      MOV AX,0FFFFH
  237.      POP BP
  238.      RET
  239. _lat_sent_character:
  240.      SUB AX,AX
  241.      POP BP
  242.      RET
  243. _lat_send ENDP
  244.  
  245.  
  246. ;
  247. ; unsigned lat_ready(void);
  248. ;
  249. _lat_ready PROC NEAR
  250.      PUSH BP
  251.  
  252.      test byte ptr session_status,18H
  253.      JNZ _lat_not_ready
  254.  
  255.      MOV AH,03H
  256.  
  257.      MOV DH,0FFH
  258.      MOV DL,LAT_HANDLE
  259.  
  260.      INT_6AH
  261.  
  262.      TEST AH,01H
  263.      JNZ _lat_indeed_ready
  264.  
  265. _lat_not_ready:
  266.      XOR AX,AX
  267.      POP BP
  268.      RET
  269.  
  270. _lat_indeed_ready:
  271.      MOV AX,1
  272.      POP BP
  273.      RET
  274. _lat_ready ENDP
  275.  
  276. ;
  277. ; char lat_get(void);
  278. ;
  279. _lat_get PROC NEAR
  280.      PUSH BP
  281.      MOV AH,02H
  282.  
  283.      MOV DH,0FFH
  284.      MOV DL,LAT_HANDLE
  285.  
  286.      INT_6AH
  287.      POP BP
  288.      RET
  289. _lat_get ENDP
  290.  
  291. ;
  292. ; char lat_status(void);
  293. ;
  294. _lat_status PROC NEAR
  295.      MOV AX,session_status
  296.      XOR AH,AH
  297.      RET
  298. _lat_status ENDP
  299.  
  300.  
  301. _TEXT   ends
  302. _DATA    segment word public 'DATA'
  303. _DATA    ends
  304. _TEXT    segment byte public 'CODE'
  305. _TEXT    ends
  306.         public  _lat_presence
  307.         public  _lat_open
  308.         public  _lat_close
  309.         public  _lat_send
  310.         public  _lat_ready
  311.         public  _lat_get
  312.         public  _lat_status
  313.     end
  314.