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

  1.  
  2. ; *******************************************************
  3. ; *                            *
  4. ; *     Turbo Pascal Run-time Library                   *
  5. ; *    8087 Str/Val Routines                *
  6. ; *                            *
  7. ; *     Copyright (c) 1988,92 Borland International     *
  8. ; *                            *
  9. ; *******************************************************
  10.  
  11.     TITLE    SF87
  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    StrFloat,ValFloat
  26.  
  27. ; Convert float to 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. StrFloat:
  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.     STOSB
  75.     SUB    AX,CX
  76.     JE    @@4
  77.     PUSH    CX
  78.     MOV    CX,AX
  79.     MOV    AL,' '
  80.     REP    STOSB
  81.     POP    CX
  82. @@4:    REP    MOVSB
  83.     POP    DS
  84.     EXIT
  85.  
  86. ; Convert string to float
  87. ; In    [SP+4] = String pointer
  88. ;    [SP]   = Error variable pointer
  89. ; Out    ST(0)  = Value
  90. ;    SP     = SP+8
  91.  
  92. ValFloat:
  93.  
  94.     ARG    StrP,DWORD,1
  95.     ARG    ErrPosP,DWORD,1
  96.  
  97.     ENTRY    FAR
  98.     LES    DI,StrP
  99.     MOV    CL,ES:[DI]
  100.     XOR    CH,CH
  101.     INC    DI
  102.     JCXZ    @@2
  103. @@1:    CMP    BYTE PTR ES:[DI],' '
  104.     JNE    @@2
  105.     INC    DI
  106.     LOOP    @@1
  107. @@2:    CALL    Str2Float
  108.     JC    @@3
  109.     JCXZ    @@4
  110. @@3:    MOV    CX,DI
  111.     SUB    CX,StrP.ofs
  112.     FSTP    ST(0)
  113.     FLDZ
  114.     FWAIT
  115. @@4:    LES    DI,ErrPosP
  116.     MOV    ES:[DI],CX
  117.     EXIT
  118.  
  119. CODE    ENDS
  120.  
  121.     END
  122.