home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Media Share 9
/
MEDIASHARE_09.ISO
/
comm
/
ykh121.zip
/
YKHSRC.ZIP
/
LAT.ASM
< prev
next >
Wrap
Assembly Source File
|
1992-11-04
|
4KB
|
314 lines
.286c
_TEXT segment byte public 'CODE'
_TEXT ends
DGROUP group _DATA,_BSS
assume cs:_TEXT,ds:DGROUP
_DATA segment word public 'DATA'
SCB equ $
Service DB 18 DUP(0) ; Requested service
Node DB 18 DUP(0) ; Reserved for future use
Port DB 18 DUP(0) ; Reserved for future use
Session_Stopped DD 0
Table_Overflow DD 0
Transmit_notify DD 0
Receive_notify DD 0
session_status DW 0
slot_state DW 0
local_credits DB 0
vcb_offset DW 0
vcb_segment DW 0
back_slot DW 0
forward_slot DW 0
rem_slot_id DB 0
loc_slot_id DB 0
slot_byte_count DB 0
remote_credits DB 0
tx_slot_data DB 255 DUP(0)
Num_slots DB 4
Num_occupied DB 0
Next_rx_slot DB 0
Cur_buf_slot DB 0
Rx_Slot_Pntr DW OFFSET Slot_1+4
Slot_Ptr_table LABEL WORD
DW OFFSET slot_1
DW OFFSET slot_2
DW OFFSET slot_3
DW OFFSET slot_4
slot_1 DB 259 DUP(0)
slot_2 DB 259 DUP(0)
slot_3 DB 259 DUP(0)
slot_4 DB 259 DUP(0)
SCB_LEN EQU $-SCB
LAT_HANDLE DB 0
_DATA ends
_BSS segment word public 'BSS'
_BSS ends
INT_6AH MACRO
PUSH ES
PUSH DS
INT 6AH
POP DS
POP ES
ENDM
_TEXT segment byte public 'CODE'
assume cs:_TEXT
;
; will this solve problems with PCSA 3.x and PCSA 4.0 under Windows 3.0?
;
lat_clean proc near
mov di,seg SCB
mov es,di
mov di,offset SCB
mov cx,SCB_LEN
xor ax,ax
cld
rep stosb
Mov Num_Slots,4
Mov Rx_Slot_Pntr,OFFSET Slot_1+4
Mov Slot_Ptr_table ,OFFSET slot_1
Mov Slot_Ptr_table+2,OFFSET slot_2
Mov Slot_Ptr_table+4,OFFSET slot_3
Mov Slot_Ptr_table+6,OFFSET slot_4
ret
lat_clean endp
;
; unsigned lat_presence(void);
;
_lat_presence PROC NEAR
PUSH BP
PUSH ES
MOV AX,356AH
INT 21H
MOV AX,ES
POP ES
CMP AX,0F000H
JNE LAT_PRESENT
LAT_NOT_PRESENT:
MOV AX,-1
POP BP
RET
LAT_PRESENT:
CMP AX,0000H
JE LAT_NOT_PRESENT
XOR AX,AX
POP BP
RET
_lat_presence ENDP
;
; unsigned lat_open ( unsigned char *service);
;
_lat_open PROC NEAR
PUSH BP
MOV BP,SP
PUSH ES
PUSH DI
PUSH SI
CALL lat_clean ;trash left in SCB may be causing crashes...
MOV AX,SEG SCB
MOV ES,AX
MOV DI,OFFSET SCB
MOV AX,[BP+4]
MOV SI,AX
COPYSERVICE:
LODSB
STOSB
OR AL,AL
JNZ COPYSERVICE
POP SI
POP DI
POP ES
MOV DX,0FF00H
MOV BX,OFFSET SCB
MOV AX,0D0FFH
INT_6AH
OR AH,AH
JZ LAT_GOT_HANDLE
MOV AX,-1
POP BP
RET
LAT_GOT_HANDLE:
MOV LAT_HANDLE,DL
SUB AX,AX
POP BP
RET
_lat_open ENDP
;
; void lat_close (void);
;
_lat_close PROC NEAR
PUSH BP
TEST session_status,1000b
JNZ _lat_close_3
_lat_close_1:
MOV AX,0D000H
MOV DH,0FFH
MOV DL,LAT_HANDLE
INT_6AH
CMP AX,2
JNE _lat_close_3
XOR CX,CX
_lat_close_2:
LOOP _lat_close_2
JMP _lat_close_1
_lat_close_3:
POP BP
RET
_lat_close ENDP
;
; unsigned lat_send (char c);
;
_lat_send PROC NEAR
PUSH BP
MOV BP,SP
test byte ptr session_status,18H
JNZ _lat_dont_send
MOV AL,[BP+4]
MOV CX,100
MOV AH,01H
_lat_try_sending:
MOV DH,0FFH
MOV DL,LAT_HANDLE
INT_6AH
TEST AH,80H
JZ _lat_sent_character
LOOP _lat_try_sending
_lat_dont_send:
MOV AX,0FFFFH
POP BP
RET
_lat_sent_character:
SUB AX,AX
POP BP
RET
_lat_send ENDP
;
; unsigned lat_ready(void);
;
_lat_ready PROC NEAR
PUSH BP
test byte ptr session_status,18H
JNZ _lat_not_ready
MOV AH,03H
MOV DH,0FFH
MOV DL,LAT_HANDLE
INT_6AH
TEST AH,01H
JNZ _lat_indeed_ready
_lat_not_ready:
XOR AX,AX
POP BP
RET
_lat_indeed_ready:
MOV AX,1
POP BP
RET
_lat_ready ENDP
;
; char lat_get(void);
;
_lat_get PROC NEAR
PUSH BP
MOV AH,02H
MOV DH,0FFH
MOV DL,LAT_HANDLE
INT_6AH
POP BP
RET
_lat_get ENDP
;
; char lat_status(void);
;
_lat_status PROC NEAR
MOV AX,session_status
XOR AH,AH
RET
_lat_status ENDP
_TEXT ends
_DATA segment word public 'DATA'
_DATA ends
_TEXT segment byte public 'CODE'
_TEXT ends
public _lat_presence
public _lat_open
public _lat_close
public _lat_send
public _lat_ready
public _lat_get
public _lat_status
end