home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / xbase / library / clipper / rettig / source / pokeint.asm < prev    next >
Assembly Source File  |  1990-10-21  |  3KB  |  109 lines

  1. ; POKEINT.ASM
  2. ;
  3. ; by Ralph Davis
  4. ; modified by Leonard Zerman
  5. ;
  6. ; Placed in the public domain by Tom Rettig Associates, 10/22/1990.
  7. ;
  8.  
  9.          PUBLIC   POKEINT
  10.  
  11.          INCLUDE  EXTENDA.MAC
  12.  
  13.          EXTRN    _TR_POKE_PARMS:FAR
  14.          EXTRN    __TR_HTOI:FAR
  15.  
  16. DGROUP GROUP _DATA
  17. ;*****************************************************
  18. _DATA  SEGMENT  WORD PUBLIC 'DATA'
  19.  
  20. ;
  21. ;    Saves input segment and offset
  22. ;
  23. SEG_ADDR    DW       ?
  24. OFF_ADDR    DW       ?
  25. ;
  26. _DATA  ENDS
  27. ;*****************************************************
  28.  
  29. ;*****************************************************
  30. POKEINT_TEXT SEGMENT BYTE PUBLIC 'CODE'
  31.          ASSUME   CS:POKEINT_TEXT, DS:_DATA
  32. ;-----------------------------------------------------
  33. ;
  34. ;     POKEINT(segment, offset, value)
  35. ;
  36. ;     pokes value as 2-byte integer
  37. ;
  38. ;        segment = SPACE(4)    && hexadecimal string
  39. ;        offset  = number < 65536 or hexadecimal string
  40. ;        value   = number or hexadecimal string
  41. ;
  42. ;        Returns:  .F. if less than three parameters passed
  43. ;                  .T. otherwise
  44. ;
  45. ;--------------
  46. POKEINT PROC     FAR
  47.          PUSH     BP
  48.          MOV      BP,SP
  49.          PUSH     DS
  50.          PUSH     ES
  51.          PUSH     BX
  52.          PUSH     DX
  53.          PUSH     SI
  54.          CALL     _TR_POKE_PARMS ; returns segment in DX,
  55.                                  ; offset in AX
  56.          JL       POKEINT_ERR    ; Sign flag set means less than 2 parms
  57.          PUSH     DS             ; Save caller's DS
  58.          MOV      BX,_DATA        ; Point DS to our data segment
  59.          MOV      DS,BX
  60.          MOV      SEG_ADDR,DX
  61.          MOV      OFF_ADDR,AX
  62.          POP      DS             ; Restore caller's DS
  63.          
  64.          GET_PTYPE 3             ; find out if parameter is numeric
  65.                                  ; or character
  66.  
  67.          AND      AX,CHARACTER   ; Is it a hexadecimal string?
  68.          JNZ      POKEINT_HEX
  69.          GET_INT  3              ; Get parameter as integer in AX
  70.          MOV      BX,AX          ; Save it in BX
  71.          JMP      SHORT POKE_INT_4
  72.  
  73. POKEINT_HEX:
  74.          GET_CHAR 3              ; Get parameter as pointer to
  75.                                  ; hexadecimal string
  76.          PUSH     DX             ; Call _TR_HTOI
  77.          PUSH     AX
  78.          CALL     __TR_HTOI       ; AX now contains parameter as integer
  79.          MOV      BX,AX          ; save parameter in BX
  80.          ADD      SP,4
  81.  
  82. POKE_INT_4:
  83.          MOV      AX,_DATA  ; Point to our data segment
  84.          MOV      DS,AX
  85.          MOV      AX,OFF_ADDR ; restore offset address
  86.          MOV      SI,SEG_ADDR ; restore segment
  87.          MOV      DS,SI
  88.          MOV      SI,AX          ; DS:SI now points to requested word
  89.          MOV      [SI],BX        ; poke it
  90.          MOV      AX,1           ; Return .T. for successful poke
  91.          JMP      SHORT POKEINT_EXIT   ; and we're done
  92. POKEINT_ERR:
  93.          MOV      AX,0           ; return .F. for error condition
  94.  
  95. POKEINT_EXIT:
  96.          POP      SI
  97.          POP      DX
  98.          POP      BX
  99.          POP      ES
  100.          POP      DS
  101.          POP      BP
  102.          RET_LOGICAL AX          ; return .T. or .F. to caller
  103.          RET
  104. POKEINT ENDP
  105. ;------------------------------------------------
  106. POKEINT_TEXT   ENDS
  107. ;************************************************
  108.          END
  109.