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

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