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

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