home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
xbase
/
library
/
clipper
/
rettig
/
source
/
pokedbl.asm
< prev
next >
Wrap
Assembly Source File
|
1990-10-21
|
4KB
|
114 lines
; POKEDBL.ASM
;
; by Ralph Davis
; modified by Leonard Zerman
;
; Placed in the public domain by Tom Rettig Associates, 10/22/1990.
;
PUBLIC POKEDBL
INCLUDE EXTENDA.MAC
EXTRN _TR_POKE_PARMS:FAR
EXTRN __TR_HTOD:FAR
DGROUP GROUP _DATA
;*****************************************************
_DATA SEGMENT WORD PUBLIC 'DATA'
;
; Saves input segment and offset
;
SEG_ADDR DW ?
OFF_ADDR DW ?
;
_DATA ENDS
;*****************************************************
;*****************************************************
POKEDBL_TEXT SEGMENT BYTE PUBLIC 'CODE'
ASSUME CS:POKEDBL_TEXT,DS:_DATA
;-----------------------------------------------------
;
; POKEDBL(segment, offset, value)
;
;
; pokes value as 8-byte floating point value
;
; segment = SPACE(4) && hexadecimal string
; offset = number < 65536 or hexadecimal string
; value = number or hexadecimal string
;
; Returns: .F. if less than three parameters passed
; .T. otherwise
;
;--------------
POKEDBL PROC FAR
PUSH BP
MOV BP,SP
PUSH DS
PUSH ES
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
CALL _TR_POKE_PARMS ; returns segment in DX,
; offset in AX
JL POKEDBL_ERR ; Sign flag set means less than 2 parms
PUSH DS ; Save caller's DS
MOV BX,_DATA ; Point DS to our data segment
MOV DS,BX
MOV SEG_ADDR,DX
MOV OFF_ADDR,AX
POP DS ; Restore caller's DS
GET_PTYPE 3 ; find out if parameter is numeric
; or character
AND AX,CHARACTER ; Is it a hexadecimal string?
JNZ POKEDBL_HEX ; yes
JMP SHORT POKE_DBL_4 ; no
POKEDBL_HEX:
GET_CHAR 3 ; Get parameter as char *
PUSH DX ; Call _TR_HTOD
PUSH AX
CALL __TR_HTOD ; AX:BX:CX:DX now contains
; parameter as long int
ADD SP,4 ; Discard parameters PUSHed onto stack
JMP SHORT POKE_DBL_5
POKE_DBL_4:
GET_DBL 3 ; Get parameter as double precision number
; in AX:BX:CX:DX
POKE_DBL_5:
MOV SI,_DATA
MOV DS,SI
MOV SI,SEG_ADDR ; restore address saved by _TR_POKE_PARMS
MOV DI,OFF_ADDR
MOV DS,SI ; restore segment
MOV [DI],DX ; poke low byte
MOV [DI+2],CX ; poke next byte
MOV [DI+4],BX ; poke next byte
MOV [DI+6],AX ; poke high byte
MOV AX,1 ; Return .T. for successful completion
JMP SHORT POKEDBL_EXIT ; and we're done
POKEDBL_ERR:
MOV AX,0 ; return .F. for error condition
POKEDBL_EXIT:
POP DI
POP SI
POP DX
POP CX
POP BX
POP ES
POP DS
POP BP
RET_LOGICAL AX ; return .T. or .F. to caller
RET
POKEDBL ENDP
;------------------------------------------------
POKEDBL_TEXT ENDS
;************************************************
END