home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / wunderki.zip / CF48.ASM < prev    next >
Assembly Source File  |  1993-08-16  |  2KB  |  130 lines

  1.  
  2. ; *******************************************************
  3. ; *                            *
  4. ; *     Turbo Pascal Run-time Library                   *
  5. ; *    Real Str/Val Routines (PChar)            *
  6. ; *                            *
  7. ; *     Copyright (c) 1988,92 Borland International     *
  8. ; *                            *
  9. ; *******************************************************
  10.  
  11.     TITLE    CF48
  12.  
  13.     INCLUDE    SE.ASM
  14.  
  15. CODE    SEGMENT    BYTE PUBLIC
  16.  
  17.     ASSUME    CS:CODE
  18.  
  19. ; Externals
  20.  
  21.     EXTRN    Real2Str:NEAR,Str2Real:NEAR
  22.  
  23. ; Publics
  24.  
  25.     PUBLIC    StrRealC,ValRealC
  26.  
  27. ; Convert real to zero-terminated string
  28. ; In    [SP+10] = Real value
  29. ;    [SP+8]  = Field width
  30. ;    [SP+6]  = Decimal count
  31. ;    [SP+2]  = String pointer
  32. ;    [SP]    = Maximum length
  33. ; Out    SP      = SP+16
  34.  
  35. StrRealC:
  36.  
  37.     ARG    Value,BYTE,6
  38.     ARG    Width,WORD,1
  39.     ARG    Decimals,WORD,1
  40.     ARG    StrP,DWORD,1
  41.     ARG    StrLen,WORD,1
  42.     LOC    NumStr,BYTE,64
  43.  
  44.     ENTRY    FAR
  45.     MOV    AX,Value.w0
  46.     MOV    BX,Value.w2
  47.     MOV    DX,Value.w4
  48.     MOV    CX,Decimals
  49.     OR    CX,CX
  50.     JNS    @@0
  51.     MOV    CX,6
  52.     SUB    CX,Width
  53.     CMP    CX,-2
  54.     JLE    @@0
  55.     MOV    CX,-2
  56. @@0:    LEA    DI,NumStr
  57.     PUSH    SS
  58.     POP    ES
  59.     CALL    Real2Str
  60.     PUSH    DS
  61.     MOV    SI,DI
  62.     PUSH    SS
  63.     POP    DS
  64.     LES    DI,StrP
  65.     MOV    DX,StrLen
  66.     MOV    AX,Width
  67.     CMP    AX,DX
  68.     JLE    @@1
  69.     MOV    AX,DX
  70. @@1:    CMP    CX,DX
  71.     JLE    @@2
  72.     MOV    CX,DX
  73. @@2:    CMP    AX,CX
  74.     JGE    @@3
  75.     MOV    AX,CX
  76. @@3:    CLD
  77.     SUB    AX,CX
  78.     JE    @@4
  79.     PUSH    CX
  80.     MOV    CX,AX
  81.     MOV    AL,' '
  82.     REP    STOSB
  83.     POP    CX
  84. @@4:    REP    MOVSB
  85.     XOR    AL,AL
  86.     STOSB
  87.     POP    DS
  88.     EXIT
  89.  
  90. ; Convert zero-terminated string to real
  91. ; In    [SP+4] = String pointer
  92. ;    [SP]   = Error variable pointer
  93. ; Out    R1     = Value
  94. ;    SP     = SP+8
  95.  
  96. ValRealC:
  97.  
  98.     ARG    StrP,DWORD,1
  99.     ARG    ErrPosP,DWORD,1
  100.  
  101.     ENTRY    FAR
  102.     LES    DI,StrP
  103.     MOV    CX,0FFFFH
  104.     MOV    AL,' '
  105.     CLD
  106.     REPE    SCASB
  107.     DEC    DI
  108.     MOV    CX,0FFFFH
  109.     XOR    AL,AL
  110.     REPNE    SCASB
  111.     NOT    CX
  112.     SUB    DI,CX
  113.     DEC    CX
  114.     CALL    Str2Real
  115.     JC    @@1
  116.     JCXZ    @@2
  117. @@1:    MOV    CX,DI
  118.     SUB    CX,StrP.ofs
  119.     INC    CX
  120.     XOR    AX,AX
  121.     MOV    BX,AX
  122.     MOV    DX,AX
  123. @@2:    LES    DI,ErrPosP
  124.     MOV    ES:[DI],CX
  125.     EXIT
  126.  
  127. CODE    ENDS
  128.  
  129.     END
  130.