home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Overload
/
ShartewareOverload.cdr
/
progm
/
disam.zip
/
DISAMACC.SUB
< prev
next >
Wrap
Text File
|
1988-09-06
|
5KB
|
140 lines
;
; DISAM assembler access subroutines
; 88009 Increased DSMRC to 2 bytes long
;
;
;ENTRY SI = ADDRESS OF STRING BEING SENT TO DISAM TERMINATED W/ZERO
;EXIT SI = ADDRESS OF STRING RECEIVED FROM DISAM TERMINATED W/ZERO
;USAGE
; MOV DSMCHAN,'1' ASCII BUFFER NUMBER (DEFAULT IS 1)
; MOV SI,OFFSET STRING FILE NAME | RECORD KEY | DATA RECORD
; CALL DSM...
; ...OPN OPEN FILE
; ...CLS CLOSE FILE
; ...ADD ADD RECORD
; ...DEL DELETE RECORD
; ...GET GET A RECORD
; ...PUT REPLACE A RECORD
; ...IMM SET IMMEDIATE UPDATE MODE
; ...FRE FREE AN OPEN BUFFER
;
DSMOPN PROC NEAR ;DISAM OPEN SUBROUTINE
CALL DSMBSD
MOV DSMFUNC,'O' ;SET FUNCTION TO OPEN
JMP DSMCOM
DSMOPN ENDP
DSMCLS PROC NEAR ;DISAM CLOSE SUBROUTINE
CALL DSMBSD
MOV DSMFUNC,'C' ;SET FUNCTION TO CLOSE
JMP DSMCOM
DSMCLS ENDP
DSMADD PROC NEAR ;DISAM ADD SUBROUTINE
CALL DSMBSD
MOV DSMFUNC,'A' ;SET FUNCTION TO ADD
JMP DSMCOM
DSMADD ENDP
DSMDEL PROC NEAR ;DISAM DELETE SUBROUTINE
CALL DSMBSD
MOV DSMFUNC,'D' ;SET FUNCTION TO DELETE
JMP DSMCOM
DSMDEL ENDP
DSMGET PROC NEAR ;DISAM GET SUBROUTINE
CALL DSMBSD
MOV DSMFUNC,'G' ;SET FUNCTION TO GET
JMP DSMCOM
DSMGET ENDP
DSMPUT PROC NEAR ;DISAM PUT SUBROUTINE
CALL DSMBSD
MOV DSMFUNC,'P' ;SET FUNCTION TO PUT
JMP DSMCOM
DSMPUT ENDP
DSMIMM PROC NEAR ;DISAM SET UPDATE IMMED SUBROUTINE
CALL DSMBSD
MOV DSMFUNC,'I' ;SET FUNCTION TO IMM MODE
JMP DSMCOM
DSMIMM ENDP
DSMFRE PROC NEAR ;DISAM FREE BUFFER SUBROUTINE
CALL DSMBSD
MOV DSMFUNC,'F' ;SET FUNCTION TO FREE
JMP DSMCOM
DSMFRE ENDP
;----------------------------------------------------------------------
DSMBSD PROC NEAR ;BUILD STRING DESCRIPTOR
;ENTRY SI = ADDRESS OF STRING
;EXIT SI = ADDRESS OF STRING DESCRIPTOR
;
MOV DSMRSDA,SI ;STORE STRING ADDRESS IN STRING DESCRIP
MOV AX,0 ;FIND THE STRING LENGTH
DSMBSD1: CMP BYTE PTR [SI],0
JZ DSMBSD2
INC SI
INC AX
JMP DSMBSD1
DSMBSD2: MOV DSMRSDL,AX ;PUT STRING LENGTH IN STRING DESCRIPTOR
MOV SI,OFFSET DSMRSDL
RET
DSMBSD ENDP
;----------------------------------------------------------------------
DSMCOM PROC NEAR ;COMMON CODE USED BY ALL ROUTINES
MOV BX,OFFSET DSMFUNCL
PUSH BX ;PUSH FIRST VARIABLE ON THE STACK
PUSH SI ;PUSH SECOND VARIABLE ON THE STACK
DB 1 DUP(9AH) ;THIS IS A LONG CALL TO
DW 1 DUP(0) ;0012:000 (DFH3)
DW 1 DUP(12H)
;
; Here we are between us and the DISAM file handler
;
MOV SI,DSMRSDA ;CONVERT THE SD TO A STRING
PUSH SI ;ADDRESSED BY SI AND TERMINATED
ADD SI,DSMRSDL ;WITH A ZERO
MOV BYTE PTR [SI],0
POP SI
RET ;RETURN TO CALLING ROUTINE
DSMCOM ENDP
;----------------------------------------------------------------------
DSMCHK PROC NEAR ;SEE IF DFH3 IS LOADED
;ENTRY NONE
;EXIT 'Z' SET, OKAY
; 'Z' NOTSET, ERROR
;
MOV AX,0012H ;SET ES:=0012
MOV ES,AX
MOV AL,ES:[0] ;AL=[0012:0000]
CMP AL,0EAH ;EXPECT TO FIND A LONG CALL INSTRUCTION
RET
DSMCHK ENDP
;----------------------------------------------------------------------
;FUNCTION STRING DESCRIPTOR
DSMFUNCL DW 1 DUP(3) ;FUNCTION STRING LENGTH
DW DSMFUNC ;FUNCTION STRING ADDRESS
DSMFUNC DB 0 ;FUNCTION
DB ',' ;COMMA
DSMCHAN DB '1' ;DEFAULT CHANNEL
DB 0
;RECORD/KEY/FILE-NAME STRING DESCRIPTOR
DSMRSDL DW 0 ;RECORD/KEY/FILE-NAME LENGTH
DSMRSDA DW 0 ;RECORD/KEY/FILE-NAME ADDRESS
;RETURN-CODE STRING (FOR USER'S USE)
DSMRC DB 'O ',0 ;DISAM RETURN-CODE FIELD ;88009