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

  1. ; POKELONG.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   POKELONG
  10.  
  11.          INCLUDE  EXTENDA.MAC
  12.  
  13.          EXTRN    _TR_POKE_PARMS:FAR
  14.          EXTRN    __TR_HTOL: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. POKELONG_TEXT SEGMENT BYTE PUBLIC 'CODE'
  31.          ASSUME   CS:POKELONG_TEXT, DS:_DATA
  32. ;-----------------------------------------------------
  33. ;
  34. ;     POKELONG(segment, offset, value)
  35. ;
  36. ;     pokes value as 4-byte long 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. POKELONG PROC     FAR
  47.          PUSH     BP
  48.          MOV      BP,SP
  49.          PUSH     DS
  50.          PUSH     ES
  51.          PUSH     BX
  52.          PUSH     CX
  53.          PUSH     DX
  54.          PUSH     SI
  55.          CALL     _TR_POKE_PARMS ; Returns segment in DX,
  56.                                  ;   offset in AX
  57.          JL       POKELONG_ERR   ; Sign flag set means less than 2 parms
  58.          PUSH     DS             ; Save caller's DS
  59.          MOV      BX,_DATA        ; Point DS to our data segment
  60.          MOV      DS,BX      
  61.          MOV      SEG_ADDR,DX
  62.          MOV      OFF_ADDR,AX
  63.          POP      DS             ; Restore caller's DS
  64.          GET_PTYPE 3             ; Find out if parameter is numeric
  65.                                  ;   or character
  66.          AND      AX,CHARACTER   ; Is it a hexadecimal string?
  67.          JNZ      POKELONG_HEX   ; yes
  68.          GET_LONG 3              ; No, get parm as long int
  69.          JMP      SHORT POKE_LONG_4
  70.  
  71. POKELONG_HEX:
  72.          GET_CHAR 3              ; get parm as char *
  73.          PUSH     DX             ; Call _TR_HTOL
  74.          PUSH     AX
  75.          CALL     __TR_HTOL       ; AX:BX now contains parameter as long int
  76.          ADD      SP,4
  77. POKE_LONG_4:
  78.          MOV      DX,BX          ; save parameter in CX:DX
  79.          MOV      CX,AX
  80.          MOV      AX,_DATA        ; Point to our data segment
  81.          MOV      DS,AX
  82.          MOV      AX,OFF_ADDR    ; restore offset address
  83.          MOV      SI,SEG_ADDR    ; restore segment
  84.          MOV      DS,SI
  85.          MOV      SI,AX          ; DS:SI now points to requested dword
  86.          MOV      [SI],DX        ; poke low byte
  87.          MOV      [SI+2],CX      ; poke high byte
  88.          MOV      AX,1           ; Return .T. for successful poke
  89.          JMP      SHORT POKELONG_EXIT   ; and we're done
  90. POKELONG_ERR:
  91.          MOV      AX,0           ; return .F. for error condition
  92.  
  93. POKELONG_EXIT:
  94.          POP      SI
  95.          POP      DX   
  96.          POP      CX
  97.          POP      BX
  98.          POP      ES
  99.          POP      DS
  100.          POP      BP
  101.          RET_LOGICAL AX          ; Return .T. or .F. to caller
  102.          RET
  103. POKELONG ENDP
  104. ;------------------------------------------------
  105. POKELONG_TEXT    ENDS
  106. ;************************************************
  107.          END
  108.  
  109.