home *** CD-ROM | disk | FTP | other *** search
- ; 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
-