PrintfScanf.st
author Claus Gittinger <cg@exept.de>
Tue, 25 Jun 2019 14:28:51 +0200
changeset 5050 44fa8672d102
parent 4996 a77894b60558
child 5158 a711395e3175
permissions -rw-r--r--
#DOCUMENTATION by cg class: SharedQueue comment/format in: #next #nextWithTimeout:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
4588
8219c3569807 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4472
diff changeset
     1
"{ Encoding: utf8 }"
8219c3569807 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4472
diff changeset
     2
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
"{ Package: 'stx:libbasic2' }"
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
3539
c9d007677ac3 class: PrintfScanf
Stefan Vogel <sv@exept.de>
parents: 3115
diff changeset
     5
"{ NameSpace: Smalltalk }"
c9d007677ac3 class: PrintfScanf
Stefan Vogel <sv@exept.de>
parents: 3115
diff changeset
     6
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
Object subclass:#PrintfScanf
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
	instanceVariableNames:''
4084
14a4edd54856 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 3719
diff changeset
     9
	classVariableNames:'Singleton'
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
	poolDictionaries:''
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
	category:'System-Support'
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
!
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
!PrintfScanf class methodsFor:'documentation'!
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
1465
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    16
documentation
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    17
"   
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    18
    Contributed by Jan Steinman donated to the community in 1989.
1465
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    19
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    20
    Provided AS-IS - no warranty, use at your own risk.
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    21
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    22
    Original comment:
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    23
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    24
        NAME            printf-scanf
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    25
        AUTHOR          Jan Steinman <jans@tekgvs.labs.tek.com>
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    26
        FUNCTION        printf and scanf for Smalltalk
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    27
        ST-VERSIONS     Tek 2.2.2a 4.0
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    28
        PREREQUISITES   CharacterComparing
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    29
        CONFLICTS       
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    30
        DISTRIBUTION    world
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    31
        VERSION         1.1
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    32
        DATE            Apr 1989?
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    33
        SUMMARY 
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    34
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    35
    The following methods implement printf and scanf functionality.  They
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    36
    are intended to be used to ease porting between Smalltalk and C, and
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    37
    for facilitating machine-machine communication.  They are not at all
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    38
    intended as replacements for Smalltalk's printOn: functionality.
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    39
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    40
    Jan Steinman - N7JDB
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    41
    Tektronix Electronic Systems Laboratory
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    42
    Box 500, MS 50-370, Beaverton, OR 97077
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    43
    (w)503/627-5881 (h)503/657-7703
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    44
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    45
    changes:
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    46
        slight changes to make it work with higher precision real numbers
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    47
        (i.e. asking for the precision instead of hard-coding it)
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
    48
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
    49
        no need for the singleton - classes are already singletons ready to use exactly for that.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
    50
        (no need to use C++/Java patterns here in Smalltalk)
4452
9b6b7249be74 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4441
diff changeset
    51
9b6b7249be74 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4441
diff changeset
    52
    Caveat:
9b6b7249be74 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4441
diff changeset
    53
        the behavior when the format-width is less than the preferred default precision is suboptimal;
9b6b7249be74 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4441
diff changeset
    54
        it leads to problems when trying to format tables into columns...
9b6b7249be74 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4441
diff changeset
    55
        For now: always use with width.precision formats to enforce the width.
9b6b7249be74 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4441
diff changeset
    56
        The current behavior (generating longer strings like printf does) may change in the future.
1465
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    57
"
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    58
!
987dc3b0411f *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1464
diff changeset
    59
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
examples
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
"
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    62
    self printf:'%#x %#X %03o%*.*s' arguments: #(16rABCD 16rEF 5 9 5 'ghijklmn')
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    63
            -> '0xabcd 0xEF 005    ghijk'
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    65
    self printf:'%- 10.4s%.2e' arguments: { 'abcdefghijkl' . Float pi }  
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    66
            -> ' abcd      3.14e0'
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    67
            
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    68
    self printf:'%8.3f' arguments: { 200 sqrt negated }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    69
            -> ' -14.142'
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
4394
c63e80fb5b12 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
    71
    self printf:'%8.3f' on:Transcript arguments: { 200 sqrt negated }
c63e80fb5b12 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
    72
    self printf:'%10.4f' on:Transcript arguments: { 200 sqrt negated }
c63e80fb5b12 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
    73
    self printf:'%20.10f' on:Transcript arguments: { 200 sqrt negated }
c63e80fb5b12 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
    74
c63e80fb5b12 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
    75
    self printf:'%20.10f' on:Transcript arguments: { 1.234567890123456789f  }
c63e80fb5b12 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
    76
    self printf:'%20.10f' on:Transcript arguments: { 1.234567890123456789q  }
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    78
    self printf:'%x' arguments: #(16r41)        -> '41' 
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    79
    self printf:'%#x' arguments: #(16r41)       -> '0x41'
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    80
    self printf:'%d' arguments: #(16r41)        -> '65'
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    81
    self printf:'%b' arguments: #(16r41)        -> '1000001'
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    82
    self printf:'%c' arguments: #(16r41)        -> 'A'
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    83
    self printf:'%c' arguments: #( $A )         -> 'A'
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    84
    self printf:'%s' arguments: #( $A )         -> 'A'
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    85
    self printf:'%s' arguments: #( 'hello' )    -> 'hello'
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    86
    self printf:'%4s' arguments: #( 'hello' )   -> 'hello'
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    87
    self printf:'%7s' arguments: #( 'hello' )   -> '  hello'
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    89
    self sscanf:'%f%2s%s%s%s' fromString: '237.0 this is a test' 
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    90
            -> OrderedCollection(237.0 'th' 'is' 'is' 'a')
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    92
    self sscanf:'%d%f%s' fromString: '25 54.32e-01 monday'
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    93
            -> OrderedCollection(25 5.432 'monday')
1464
10af50b07968 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1463
diff changeset
    94
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    95
    self sscanf:'%f%*f %8[A-F0-9]%c%d 0x%x%f' fromString: '12.45 1048.73 AE40Z527 0x75BCD15 34' 
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    96
            -> OrderedCollection(12.45 'AE40' 'Z' 527 123456789 34.0)
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    98
    '%#x %#X %03o%*.*s' printf: #(16rABCD 16rEF 5 9 5 'ghijklmn') 
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
    99
            -> '0xabcd 0xEF 005    ghijk'
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
3115
b1217780fad3 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 3004
diff changeset
   101
    '%- 10.4s%.2e' printf: { 'abcdefghijkl' . Float pi }  
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   102
            -> ' abcd      3.14e0'
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
3115
b1217780fad3 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 3004
diff changeset
   104
    '%8.3f' printf: { 200 sqrt negated }
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   105
            -> ' -14.142'
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
    '%c' printf: #(16r41)
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   108
            -> 'A'
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
    '%f%2s%s%s%s' sscanf: '237.0 this is a test' 
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   111
            -> OrderedCollection(237.0 'th' 'is' 'is' 'a')
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    '%d%f%s' sscanf: '25 54.32e-01 monday'
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   114
            -> OrderedCollection(25 5.432 'monday')
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
    '%f%*f %8[A-F0-9]%c%d 0x%x%f' sscanf: '12.45 1048.73 AE40Z527 0x75BCD15 34'
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   117
            -> OrderedCollection(12.45 'AE40' 'Z' 527 123456789 34.0)
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   118
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   119
    '%d\n' printf:{ 1234 } on:Transcript    
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   120
    
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   121
    '%f\n' printf:{ 1234.0 } on:Transcript        
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   122
    '%f\n' printf:{ 1234.0 asShortFloat } on:Transcript        
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   123
    '%f\n' printf:{ 1234.0 asLongFloat } on:Transcript        
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   124
    '%f\n' printf:{ 1234.0 asQDouble } on:Transcript        
4622
9f3869b87a95 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4588
diff changeset
   125
9f3869b87a95 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4588
diff changeset
   126
    '%p\n' printf:{ 10@20 } on:Transcript        
9f3869b87a95 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4588
diff changeset
   127
    '%P\n' printf:{ 10@20 } on:Transcript        
9f3869b87a95 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4588
diff changeset
   128
    '%S\n' printf:{ 10@20 } on:Transcript        
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
"
4434
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   130
!
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   131
4471
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   132
format_printf
4434
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   133
"
4471
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   134
    Printf Format specifier:
4434
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   135
    
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   136
        required: leading '%'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   137
        optional: '-' (POSIX refers to this as the <<flags>>)
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   138
        optional: positive number or '*' (POSIX <<width>>)
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   139
        optional: period followed by positive number or * (POSIX <<precision>>)
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   140
        optional: an h or l to indicate size of data (POSIX <<length>>)
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   141
        required: character describing output behavior (POSIX <<conversion specifier>>)
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   142
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   143
    Various implementations of printf have added different functionality.
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   144
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   145
    ANSI standards up through C99:
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   146
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   147
        more flags '+' ' ' '0' '#'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   148
        more lengths 'L' 'hh' 'll' 'j' 'z' 't'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   149
        more conversions 'F' 'a' 'A' 'n'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   150
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   151
    The POSIX specification of printf added:
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   152
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   153
        positional parameters to identify argument indices
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   154
        more flags ''' (single quote)
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   155
        more conversions 'C' 'S'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   156
        clarifications regarding corner cases and 'undefined behavior'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   157
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   158
    BSD implementations added:
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   159
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   160
        more lengths 'q'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   161
        more conversions 'D' 'U' 'O'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   162
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   163
    glibc (GNU) added:
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   164
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   165
        more lengths 'Z'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   166
        more conversions 'm'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   167
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   168
    Windows C Runtime (CRT) added:
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   169
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   170
        more lengths 'I' 'I32' 'I64' 'w'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   171
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   172
    glibc and CRT both added 'Z'. 
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   173
    glibc uses 'Z' for the length size_t. 
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   174
    CRT uses Z as a conversion for length-prefixed strings. 
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   175
    This implementation takes the former approach, handling 'Z' in the same way as 'z'.
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   176
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   177
    BSD and IBM C library both added 'D'. 
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   178
    BSD uses D as a conversion, namely as an alias of 'ld'. 
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   179
    IBM uses 'D' for the length for _Decimal64, a decimal floating point type, in accordance with ISO/IEC TR 24732. 
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   180
    This implementation takes the former approach.
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   181
4471
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   182
    ================================================================
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   183
    
4434
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   184
    This implementation also adds new conversions:
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   185
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   186
        'b' and 'B' for binary (base-2) integer renderings
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   187
        'y' and 'Y' for true/false and yes/no Boolean conversions
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   188
        'J' for JSON
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   189
        'T' and 'V' for JS typeof and valueOf inspection
4622
9f3869b87a95 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4588
diff changeset
   190
        'S' for store-string
9f3869b87a95 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4588
diff changeset
   191
        'P' for print-string
4434
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   192
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   193
    Conversions (upper case same as lower case):
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   194
        'a'     (not implemented) base-2 floating point exp form
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   195
        'b'     binary (base 2)
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   196
        'c'     character or (first char of string)
4471
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   197
        'd'     integer
4434
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   198
        'e'     base-10 floating point exp form (scientific)
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   199
        'f'     base-10 floating point decimal form (non-scientific)
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   200
        'g'     'e' or 'f', whichever looks more appropriate (based on value)
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   201
        'i'     integer (alias for 'd')
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   202
        'j'     (not implemented) JSON format
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   203
        'n'     (not implemented) stores number of characters written into arg 
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   204
        'o'     base-8 octal
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   205
        'p'     (not implemented) pointer 
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   206
        's'     string
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   207
        't'     type (i.e. class name)
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   208
        'u'     (not implemented) unsigned (negative values are converted)
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   209
        'v'     (not implemented) store string
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   210
        'x'     base-16 hex
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   211
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   212
    Parameter selection (not implemented):
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   213
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   214
        <n>$    take n'th parameter
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   215
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   216
    Dynamic width/precision (consumed in order as presented):
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   217
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   218
        *       take width/parameter from next argument
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   219
4471
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   220
        PrintfScanf printf:'|%d|'  arguments:{ 123 }         -> '|123|'
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   221
        PrintfScanf printf:'|%5d|' arguments:{ 123 }         -> '|  123|'
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   222
        PrintfScanf printf:'|%-5d|' arguments:{ 123 }        -> '|123  |'
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   223
4434
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   224
        PrintfScanf printf:'|%s|'  arguments:{ 'abc' }        -> '|abc|'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   225
        PrintfScanf printf:'|%5s|'  arguments:{ 'abc' }       -> '|  abc|'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   226
        PrintfScanf printf:'|%*s|'  arguments:{ 5 . 'abc' }   -> '|  abc|'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   227
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   228
        PrintfScanf printf:'|%8f|'  arguments:{ 1.234 }       -> '|   1.234|'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   229
        PrintfScanf printf:'|%*f|'  arguments:{ 8 . 1.234 }   -> '|   1.234|'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   230
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   231
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   232
    Negative width will fill at the right:
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   233
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   234
        PrintfScanf printf:'|%5s|'  arguments:{ 'abc' }      -> '|  abc|'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   235
        PrintfScanf printf:'|%-5s|' arguments:{ 'abc' }      -> '|abc  |'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   236
        PrintfScanf printf:'|%-*s|' arguments:{ 5 . 'abc' }  -> '|abc  |'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   237
        PrintfScanf printf:'|%*s|'  arguments:{ -5 . 'abc' } -> '|abc  |'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   238
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   239
        PrintfScanf printf:'|%*f|'  arguments:{ -8 . 1.234 }  -> '|1.234   |'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   240
        PrintfScanf printf:'|%-8f|'  arguments:{ 1.234 }      -> '|1.234   |'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   241
        PrintfScanf printf:'|%-*f|'  arguments:{ 8 . 1.234 }  -> '|1.234   |'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   242
        PrintfScanf printf:'|%-*f|'  arguments:{ -8 . 1.234 } -> '|1.234   |'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   243
4435
96ba42c85b3e #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4434
diff changeset
   244
    A Zero as fill character:
96ba42c85b3e #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4434
diff changeset
   245
96ba42c85b3e #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4434
diff changeset
   246
        PrintfScanf printf:'|%05s|'  arguments:{ 'abc' }     -> '|00abc|'
96ba42c85b3e #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4434
diff changeset
   247
        PrintfScanf printf:'|%-05s|' arguments:{ 'abc' }     -> '|abc00|'
96ba42c85b3e #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4434
diff changeset
   248
96ba42c85b3e #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4434
diff changeset
   249
        PrintfScanf printf:'|%0*f|'  arguments:{ -8 . 1.234 }  -> '|1.234   |'
96ba42c85b3e #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4434
diff changeset
   250
        PrintfScanf printf:'|%-8f|'  arguments:{ 1.234 }      -> '|1.234   |'
96ba42c85b3e #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4434
diff changeset
   251
        PrintfScanf printf:'|%-*f|'  arguments:{ 8 . 1.234 }  -> '|1.234   |'
96ba42c85b3e #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4434
diff changeset
   252
        PrintfScanf printf:'|%-*f|'  arguments:{ -8 . 1.234 } -> '|1.234   |'
4472
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   253
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   254
    Case of float-format character only affects printing of Nan and infinity:
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   255
    
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   256
        PrintfScanf printf:'%f' argument:1.234    
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   257
        PrintfScanf printf:'%F' argument:1.234    
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   258
        PrintfScanf printf:'%f' argument:(Float NaN)    
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   259
        PrintfScanf printf:'%F' argument:(Float NaN)    
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   260
        PrintfScanf printf:'%f' argument:(Float infinity)    
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   261
        PrintfScanf printf:'%F' argument:(Float infinity)    
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   262
        PrintfScanf printf:'%f' argument:(Float negativeInfinity)    
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   263
        PrintfScanf printf:'%F' argument:(Float negativeInfinity)    
4434
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   264
"
4471
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   265
!
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   266
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   267
format_scanf
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   268
"
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   269
    Scanf format specifier:
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   270
    
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   271
        required: leading '%'
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   272
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   273
    ================================================================
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   274
    
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   275
    This implementation also adds new conversions:
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   276
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   277
    Conversions (upper case same as lower case):
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   278
        'b'     binary (base 2)
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   279
        'c'     character or (first char of string)
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   280
        'd'     decimal
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   281
        'e'     float
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   282
        'f'     float
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   283
        'g'     float
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   284
        'i'     integer (alias for 'd')
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   285
        'o'     base-8 octal
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   286
        's'     string
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   287
        'u'     integer
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   288
        'x'     base-16 hex
4945
f98cb762d159 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4622
diff changeset
   289
        'n'     any number
4471
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   290
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   291
    Length prefix:
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   292
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   293
        'h'     with float formats: reads as ShortFloat
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   294
        'L'     with float formats: reads as LongFloat
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   295
        'LL'    with float formats: reads as QDouble
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   296
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   297
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   298
     '%d %x' sscanf:'1234 ff00'         -> OrderedCollection(1234 65280)
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   299
     '%d %s' sscanf:'1234 ff00'         -> OrderedCollection(1234 'ff00')
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   300
     '%d %x %b' sscanf:'1234 ff00 1001' -> OrderedCollection(1234 65280 9)
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   301
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   302
     ('%f' sscanf:'1234') first         -> 1234.0 (Float i.e. an IEEE double)
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   303
     ('%lf' sscanf:'1234') first        -> 1234.0 (Float i.e. an IEEE double)
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   304
     ('%llf' sscanf:'1234') first       -> 1234.0 (Float i.e. an IEEE double)
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   305
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   306
     ('%hf' sscanf:'1234') first        -> 1234.0 (ShortFloat i.e. an IEEE double)
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   307
     ('%Lf' sscanf:'1234') first        -> 1234.0 (LongFloat i.e. an IEEE quad)
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   308
     ('%LLf' sscanf:'1234') first       -> 1234.0 (QDouble)
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   309
"
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
! !
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
4084
14a4edd54856 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 3719
diff changeset
   312
!PrintfScanf class methodsFor:'instance creation'!
14a4edd54856 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 3719
diff changeset
   313
14a4edd54856 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 3719
diff changeset
   314
new
14a4edd54856 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 3719
diff changeset
   315
    Singleton isNil ifTrue:[
14a4edd54856 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 3719
diff changeset
   316
        Singleton := self basicNew
14a4edd54856 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 3719
diff changeset
   317
    ].    
14a4edd54856 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 3719
diff changeset
   318
    ^ Singleton
14a4edd54856 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 3719
diff changeset
   319
! !
14a4edd54856 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 3719
diff changeset
   320
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   321
!PrintfScanf class methodsFor:'printing'!
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   322
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   323
printArgFrom:formatStream to:outStream arguments:argStream
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   324
    "Interpret the required number of arguments from <argStream>
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   325
     according to the formatting information in <formatStream>.  
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   326
     Place the interpretation on <outStream>.  
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   327
     The interpretation is C printf(3) style, as described in the UTek manual page for printf(3).  
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   328
     <formatStream> is assumed to be positioned just past
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   329
     $%, and a complete control string is assumed available.     
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   330
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   331
     Return when the conversion control string is consumed.  
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   332
     Leave <formatStream> pointing past the last character in the conversion control string.
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   333
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   334
     This code assumes that <formatStream> is formatted according to
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   335
     specification, and error checking is minimal.  Unexpected
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   336
     results will be obtained by illegal control strings, or when
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   337
     argument types do not match conversion codes, but it probably
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   338
     won't dump core, like C does in such cases!!!!"    
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   339
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   340
    |nextArg ljust plus pound width precision pad char arg argString |
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   341
4996
a77894b60558 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4979
diff changeset
   342
    nextArg := 
a77894b60558 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4979
diff changeset
   343
        [
a77894b60558 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4979
diff changeset
   344
            argStream atEnd ifTrue:[
a77894b60558 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4979
diff changeset
   345
                ArgumentError raiseErrorString:'not enough arguments for format string'
a77894b60558 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4979
diff changeset
   346
            ].
a77894b60558 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4979
diff changeset
   347
            argStream next
a77894b60558 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4979
diff changeset
   348
        ].
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   349
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   350
    ljust := plus := pound := false.
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   351
    width := 0.
4401
a29669a0e2a1 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4394
diff changeset
   352
    "/ precision := SmallInteger maxVal.
a29669a0e2a1 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4394
diff changeset
   353
    precision := nil.
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   354
    pad := $ .
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   355
    char := formatStream peek.
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   356
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   357
    char == $% ifTrue:[ 
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   358
        ^ outStream nextPut: formatStream next
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   359
    ].
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   360
4434
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   361
    "/ flags:
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   362
    
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   363
    char == $- ifTrue:[
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   364
        ljust := true.  
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   365
        formatStream next.  
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   366
        char := formatStream peek
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   367
    ].
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   368
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   369
    char == $  ifTrue:[
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   370
        outStream space.  
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   371
        formatStream next.  
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   372
        char := formatStream peek
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   373
    ].
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   374
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   375
    char == $+ ifTrue:[
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   376
        plus := true.  
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   377
        formatStream next. 
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   378
        char := formatStream peek
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   379
    ].
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   380
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   381
    char == $# ifTrue:[
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   382
        pound := true.  
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   383
        formatStream next.  
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   384
        char := formatStream peek
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   385
    ].
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   386
4434
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   387
    "/ possibly a width
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   388
    char == $* ifTrue:[
4434
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   389
        width := nextArg value. 
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   390
        width isInteger ifFalse:[
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   391
            self error:'non integer width argument in printf'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   392
        ].
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   393
        width < 0 ifTrue:[
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   394
            ljust := true.
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   395
            width := width negated
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   396
        ].    
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   397
        formatStream next.  
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   398
        char := formatStream peek
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   399
    ].
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   400
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   401
    char isDigit ifTrue:[
2889
7491ae1f59ac class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2875
diff changeset
   402
        char == $0 ifTrue: [pad := $0].
4434
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   403
        width := Integer readFrom: formatStream onError:0.  
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   404
        char := formatStream peek
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   405
    ].
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   406
4434
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   407
    "/ precision separator
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   408
    
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   409
    char == $. ifTrue:[
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   410
        formatStream next.  char := formatStream peek.
4434
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   411
        char == $* ifTrue: [
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   412
            precision := nextArg value.  
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   413
            precision isInteger ifFalse:[
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   414
                self error:'non integer precision argument in printf'
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   415
            ].    
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   416
            formatStream next.
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   417
        ] ifFalse: [
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   418
            precision := Integer readFrom: formatStream.
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   419
        ].
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   420
        char := formatStream peek
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   421
    ].
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   422
4452
9b6b7249be74 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4441
diff changeset
   423
    ((char == $l) or:[char == $L]) ifTrue:[
9b6b7249be74 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4441
diff changeset
   424
        "Ignore long specifier (l, L and ll)."
4441
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   425
        formatStream next.  
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   426
        char := formatStream peek.
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   427
        char == $l ifTrue:[
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   428
            "Ignore long long specifier."
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   429
            formatStream next.  
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   430
            char := formatStream peek
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   431
        ].
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   432
    ].
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   433
    char == $h ifTrue:[
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   434
        "Ignore half-length (short) specifier."
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   435
        formatStream next.  
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   436
        char := formatStream peek.
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   437
    ].
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   438
4472
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   439
    ('fegFEG' includes: char) ifTrue:[
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   440
        arg := nextArg value.
4394
c63e80fb5b12 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
   441
        arg isLimitedPrecisionReal ifTrue:[
4401
a29669a0e2a1 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4394
diff changeset
   442
            precision := precision ? (arg class defaultPrintPrecision).
a29669a0e2a1 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4394
diff changeset
   443
        ] ifFalse:[ 
a29669a0e2a1 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4394
diff changeset
   444
            arg := arg asFloat.
a29669a0e2a1 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4394
diff changeset
   445
            precision := precision ? (Float defaultPrintPrecision).
4394
c63e80fb5b12 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
   446
        ].    
4472
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   447
        (arg isNaN or:[arg isFinite not]) ifTrue:[
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   448
            argString := arg printString.
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   449
            (char isUppercase) 
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   450
                ifTrue:[ argString := argString asUppercase ] 
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   451
                ifFalse:[ argString := argString asLowercase ].
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   452
        ] ifFalse:[
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   453
            argString := WriteStream on:''.
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   454
            char asLowercase == $g ifTrue: [ 
4588
8219c3569807 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4472
diff changeset
   455
                self absPrintFloat:arg on:argString digits:(precision + 1) ].
8219c3569807 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4472
diff changeset
   456
            char asLowercase == $f ifTrue: [
8219c3569807 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4472
diff changeset
   457
                |absArg nDigits|
8219c3569807 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4472
diff changeset
   458
                absArg := arg asFloat abs.
8219c3569807 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4472
diff changeset
   459
                nDigits := absArg = 0 ifTrue:[1] ifFalse:[absArg log10 ceiling asInteger].
8219c3569807 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4472
diff changeset
   460
                self absDecimalPrintFloat:arg on:argString digits:(precision + nDigits "+ 1")].
4472
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   461
            char asLowercase == $e ifTrue: [
4588
8219c3569807 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4472
diff changeset
   462
                self absScientificPrintFloat:arg on:argString digits:(precision + 1)].
4472
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   463
            argString := argString contents.
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   464
            arg < 0
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   465
                ifTrue: [argString := '-', argString]
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   466
                ifFalse: [plus ifTrue: [argString := '+', argString]].
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   467
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   468
            (precision = 0 and: [pound not]) ifTrue:[
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   469
                (argString includes: $e)
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   470
                    ifTrue: ["self halt"]
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   471
                    ifFalse: [ argString := arg truncated printString]
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   472
            ].
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   473
            pound ifTrue:[
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   474
                (argString includes: $e)
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   475
                    ifTrue: ["self halt"]
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   476
                    ifFalse:[
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   477
                        precision - (argString size - (argString indexOf: $.)) 
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   478
                            timesRepeat:[ argString := argString, '0']
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   479
                    ]
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   480
            ].
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   481
        ].
4394
c63e80fb5b12 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
   482
        ljust ifTrue: [outStream nextPutAll: argString].
c63e80fb5b12 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
   483
        width - argString size timesRepeat: [outStream nextPut: pad].
c63e80fb5b12 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
   484
        ljust ifFalse: [outStream nextPutAll: argString].
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   485
        ^ formatStream next
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   486
    ].
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   487
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   488
    char == $c ifTrue:[
4441
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   489
        arg := nextArg value.
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   490
        arg isString ifTrue:[
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   491
            arg := arg first
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   492
        ] ifFalse:[    
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   493
            arg := arg asCharacter asString
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   494
        ].
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   495
    ].
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   496
        
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   497
    char == $s ifTrue:[
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   498
        "Assume the arg is a String or Symbol."
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   499
        arg := nextArg value asString
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   500
    ].
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   501
4441
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   502
    ((char == $d) or:[char == $i]) ifTrue:[
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   503
        arg := nextArg value asInteger printString.
2889
7491ae1f59ac class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2875
diff changeset
   504
        plus ifTrue: [arg := '+', arg]
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   505
    ].
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   506
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   507
    char == $u ifTrue:[
4441
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   508
        "/ should we convert unsigned numbers here???
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   509
        "/ (negatives: maybe to the next power-of-2)
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   510
        arg := nextArg value asInteger abs printString
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   511
    ].
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   512
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   513
    char == $o ifTrue:[
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   514
        arg := nextArg value asInteger abs printStringRadix: 8.
4394
c63e80fb5b12 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
   515
        pound ifTrue: [arg := '0', arg]
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   516
    ].
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   517
4441
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   518
    ((char == $x) or:[char == $X]) ifTrue:[
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   519
        arg := nextArg value asInteger abs printStringRadix: 16.
4441
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   520
        pound ifTrue: [arg := '0x', arg].
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   521
        
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   522
        char == $x ifTrue:[
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   523
            "/ make it lowercase
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   524
            1 to: arg size do: [:i |
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   525
                ('ABCDEF' includes: (arg at: i)) ifTrue:[
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   526
                    arg at: i put: (arg at: i) asLowercase
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   527
                ]
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   528
            ]
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   529
        ].
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   530
2889
7491ae1f59ac class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2875
diff changeset
   531
    ].
4441
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   532
    ((char == $b) or:[char == $B]) ifTrue:[
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   533
        arg := nextArg value asInteger abs printStringRadix: 2.
2889
7491ae1f59ac class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2875
diff changeset
   534
        pound ifTrue: [arg := '0b', arg]
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   535
    ].
4622
9f3869b87a95 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4588
diff changeset
   536
    (char == $p) ifTrue:[
9f3869b87a95 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4588
diff changeset
   537
        arg := nextArg value identityHash printString.
9f3869b87a95 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4588
diff changeset
   538
    ].
9f3869b87a95 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4588
diff changeset
   539
    (char == $P) ifTrue:[
9f3869b87a95 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4588
diff changeset
   540
        arg := nextArg value printString.
9f3869b87a95 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4588
diff changeset
   541
    ].
9f3869b87a95 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4588
diff changeset
   542
    (char == $S) ifTrue:[
9f3869b87a95 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4588
diff changeset
   543
        arg := nextArg value storeString.
9f3869b87a95 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4588
diff changeset
   544
    ].
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   545
4452
9b6b7249be74 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4441
diff changeset
   546
    precision := (precision ? arg size) min: arg size.
9b6b7249be74 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4441
diff changeset
   547
    ljust ifTrue: [precision > 0 ifTrue:[ outStream nextPutAll: (arg copyFrom: 1 to: precision)]].
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   548
    width - precision timesRepeat: [outStream nextPut: pad].
4452
9b6b7249be74 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4441
diff changeset
   549
    ljust ifFalse: [precision > 0 ifTrue:[ outStream nextPutAll: (arg copyFrom: 1 to: precision)]].
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   550
    ^ formatStream next
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   551
4472
cd76ffe41e4c #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4471
diff changeset
   552
    "Modified: / 14-07-2017 / 11:42:01 / cg"
4996
a77894b60558 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4979
diff changeset
   553
    "Modified: / 06-06-2019 / 23:23:01 / Claus Gittinger"
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   554
!
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   555
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   556
printf:formatString argument:arg 
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   557
    "Format and print the receiver with <arg> formatted in C style, 
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   558
     as described in the UTek manual page for printf(3)."
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   559
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   560
    ^ self printf:formatString arguments:{ arg }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   561
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   562
    "
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   563
     self printf:'%e' on:Transcript argument:(1.234 asShortFloat)
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   564
     self printf:'%e' on:Transcript argument:(1.234 asFloat)     
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   565
     self printf:'%e' on:Transcript argument:(1.234 asLongFloat) 
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   566
     self printf:'%e' on:Transcript argument:(1.234 asQDouble)   
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   567
     self printf:'%e' on:Transcript argument:(1.234 asInteger)   
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   568
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   569
     self printf:'%10e' on:Transcript argument:(1.234 asShortFloat)
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   570
     self printf:'%10e' on:Transcript argument:(1.234 asFloat)     
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   571
     self printf:'%10e' on:Transcript argument:(1.234 asLongFloat) 
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   572
     self printf:'%10e' on:Transcript argument:(1.234 asQDouble)   
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   573
     self printf:'%10e' on:Transcript argument:(1.234 asInteger)   
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   574
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   575
     self printf:'%010e' on:Transcript argument:(1.234 asInteger)   
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   576
     self printf:'%-10e' on:Transcript argument:(1.234 asInteger)   
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   577
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   578
     self printf:'%10.9f' on:Transcript argument:(1.2345 asShortFloat)
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   579
     self printf:'%10.9f' on:Transcript argument:(1.2345 asFloat)     
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   580
     self printf:'%10.9f' on:Transcript argument:(1.2345 asLongFloat) 
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   581
     self printf:'%10.9f' on:Transcript argument:(1.2345 asQDouble)   
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   582
     self printf:'%10.9f' on:Transcript argument:(1.2345 asInteger)   
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   583
    "
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   584
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   585
    "Created: / 16-06-2017 / 14:50:08 / cg"
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   586
!
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   587
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   588
printf:formatString arguments:args 
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   589
    "Format and print the receiver with <args> formatted in C style, 
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   590
     as described in the UTek manual page for printf(3)."
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   591
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   592
    |aStream|
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   593
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   594
    aStream := WriteStream on:(formatString species new:100).
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   595
    self printf:formatString on:aStream arguments:args.
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   596
    ^ aStream contents
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   597
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   598
    "
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   599
     self printf:'%e' on:Transcript arguments:{ (1.234 asShortFloat) }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   600
     self printf:'%e' on:Transcript arguments:{ (1.234 asFloat)      }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   601
     self printf:'%e' on:Transcript arguments:{ (1.234 asLongFloat)  }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   602
     self printf:'%e' on:Transcript arguments:{ (1.234 asQDouble)    }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   603
     self printf:'%e' on:Transcript arguments:{ (1.234 asInteger)    }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   604
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   605
     self printf:'%10e' on:Transcript arguments:{ (1.234 asShortFloat) }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   606
     self printf:'%10e' on:Transcript arguments:{ (1.234 asFloat)      }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   607
     self printf:'%10e' on:Transcript arguments:{ (1.234 asLongFloat)  }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   608
     self printf:'%10e' on:Transcript arguments:{ (1.234 asQDouble)    }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   609
     self printf:'%10e' on:Transcript arguments:{ (1.234 asInteger)    }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   610
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   611
     self printf:'%010e' on:Transcript arguments:{ (1.234 asInteger)    }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   612
     self printf:'%-10e' on:Transcript arguments:{ (1.234 asInteger)    }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   613
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   614
     self printf:'%10.9f' on:Transcript arguments:{ (1.2345 asShortFloat) }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   615
     self printf:'%10.9f' on:Transcript arguments:{ (1.2345 asFloat)      }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   616
     self printf:'%10.9f' on:Transcript arguments:{ (1.2345 asLongFloat)  }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   617
     self printf:'%10.9f' on:Transcript arguments:{ (1.2345 asQDouble)    }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   618
     self printf:'%10.9f' on:Transcript arguments:{ (1.2345 asInteger)    }
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   619
    "
4394
c63e80fb5b12 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
   620
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   621
    "Modified: / 19-06-2017 / 15:21:34 / cg"
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   622
!
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   623
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   624
printf:formatString on:outStream argument: arg
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   625
    "Format and print formatString on <outStream> with <arg>
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   626
     formatted in C style, as described in the UTek manual page for
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   627
     printf(3)."     
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   628
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   629
    ^ self printf:formatString on:outStream arguments:{ arg }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   630
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   631
    "
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   632
     self printf:'%e' on:Transcript argument:(1.234 asShortFloat). Transcript cr.
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   633
     self printf:'%e' on:Transcript argument:(1.234 asFloat)     . Transcript cr.
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   634
     self printf:'%e' on:Transcript argument:(1.234 asLongFloat) . Transcript cr.
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   635
     self printf:'%e' on:Transcript argument:(1.234 asQDouble)   . Transcript cr.
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   636
     self printf:'%e' on:Transcript argument:(1.234 asInteger)   . Transcript cr.
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   637
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   638
     self printf:'%10e' on:Transcript argument:(1.234 asShortFloat). Transcript cr.
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   639
     self printf:'%10e' on:Transcript argument:(1.234 asFloat)     . Transcript cr.
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   640
     self printf:'%10e' on:Transcript argument:(1.234 asLongFloat) . Transcript cr.
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   641
     self printf:'%10e' on:Transcript argument:(1.234 asQDouble)   . Transcript cr.
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   642
     self printf:'%10e' on:Transcript argument:(1.234 asInteger)   . Transcript cr.
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   643
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   644
     self printf:'%010e' on:Transcript argument:(1.234 asInteger)  . Transcript cr.
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   645
     self printf:'%-10e' on:Transcript argument:(1.234 asInteger)  . Transcript cr.
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   646
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   647
     self printf:'%10.9f' on:Transcript argument:(1.2345 asShortFloat). Transcript cr.
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   648
     self printf:'%10.9f' on:Transcript argument:(1.2345 asFloat)     . Transcript cr.
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   649
     self printf:'%10.9f' on:Transcript argument:(1.2345 asLongFloat) . Transcript cr.
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   650
     self printf:'%10.9f' on:Transcript argument:(1.2345 asQDouble)   . Transcript cr.
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   651
     self printf:'%10.9f' on:Transcript argument:(1.2345 asInteger)   . Transcript cr.
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   652
    "
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   653
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   654
    "Created: / 16-06-2017 / 14:50:40 / cg"
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   655
    "Modified (comment): / 19-06-2017 / 15:07:22 / cg"
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   656
!
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   657
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   658
printf:aFormatString on:outStream arguments: args
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   659
    "Format and print aFormatString on <outStream> with <args>
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   660
     formatted in C style, as described in the UTek manual page for
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   661
     printf(3)."     
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   662
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   663
    | argStream formatStream char escChar |
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   664
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   665
    argStream := ReadStream on: args.
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   666
    formatStream := ReadStream on: aFormatString.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   667
    [formatStream atEnd] whileFalse:[
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   668
        (char := formatStream next) == $% ifFalse: [
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   669
            char == $\ ifTrue:[
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   670
                escChar := formatStream next.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   671
                escChar == $n ifTrue:[ char := Character nl ]
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   672
                ifFalse:[ escChar == $t ifTrue:[ char := Character tab ]
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   673
                ifFalse:[ escChar == $r ifTrue:[ char := Character return ]
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   674
                ifFalse:[ char := escChar ]]]
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   675
            ].        
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   676
            outStream nextPut:char
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   677
        ] ifTrue: [
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   678
            self printArgFrom:formatStream to:outStream arguments:argStream
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   679
        ]
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
   680
    ]
4394
c63e80fb5b12 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 4094
diff changeset
   681
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   682
    "
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   683
     self printf:'%e\n' on:Transcript arguments:{ (1.234 asShortFloat) }
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   684
     self printf:'%f\n' on:Transcript arguments:{ (1.234 asShortFloat) }
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   685
     self printf:'%g\n' on:Transcript arguments:{ (1.234 asShortFloat) }
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   686
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   687
     self printf:'%e\n' on:Transcript arguments:{ (1.234 asFloat)      }
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   688
     self printf:'%f\n' on:Transcript arguments:{ (1.234 asFloat)      }
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   689
     self printf:'%g\n' on:Transcript arguments:{ (1.234 asFloat)      }
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   690
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   691
     self printf:'%e\n' on:Transcript arguments:{ (1.234 asLongFloat)  }
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   692
     self printf:'%e\n' on:Transcript arguments:{ (1.234 asQDouble)    }
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   693
     self printf:'%e\n' on:Transcript arguments:{ (1.234 asInteger)    }
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   694
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   695
     self printf:'%10e' on:Transcript arguments:{ (1.234 asShortFloat) }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   696
     self printf:'%10e' on:Transcript arguments:{ (1.234 asFloat)      }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   697
     self printf:'%10e' on:Transcript arguments:{ (1.234 asLongFloat)  }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   698
     self printf:'%10e' on:Transcript arguments:{ (1.234 asQDouble)    }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   699
     self printf:'%10e' on:Transcript arguments:{ (1.234 asInteger)    }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   700
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   701
     self printf:'%010e' on:Transcript arguments:{ (1.234 asInteger)    }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   702
     self printf:'%-10e' on:Transcript arguments:{ (1.234 asInteger)    }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   703
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   704
     self printf:'%10.9f' on:Transcript arguments:{ (1.2345 asShortFloat) }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   705
     self printf:'%10.9f' on:Transcript arguments:{ (1.2345 asFloat)      }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   706
     self printf:'%10.9f' on:Transcript arguments:{ (1.2345 asLongFloat)  }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   707
     self printf:'%10.9f' on:Transcript arguments:{ (1.2345 asQDouble)    }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   708
     self printf:'%10.9f' on:Transcript arguments:{ (1.2345 asInteger)    }
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   709
    "
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   710
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   711
    "Modified (comment): / 19-06-2017 / 15:49:10 / cg"
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   712
! !
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   713
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   714
!PrintfScanf class methodsFor:'private helpers'!
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   715
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   716
absDecimalPrintFloat:aFloat on:aStream digits:digits 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   717
    "Place a string representation of the receiver on <aStream>,
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   718
     using <digits> significant digits, using decimal notation."
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   719
    
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   720
    "
4428
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   721
     self printf:'%20.10f\n' on:Transcript arguments: { 1.234567890123456789f  }
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   722
     self printf:'%20.10f\n' on:Transcript arguments: { 1.234567890123456789q  }
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   723
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   724
     self printf:'%20.10f\n' on:Transcript arguments: { 1e1000  }
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   725
     self printf:'%20.10f\n' on:Transcript arguments: { 1e1000 asShortFloat }
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   726
     self printf:'%20.10f\n' on:Transcript arguments: { 1e1000 asLongFloat }
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   727
     self printf:'%20.10f\n' on:Transcript arguments: { 1e1000 asQDouble }
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   728
4432
d4b8ac7168a6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4428
diff changeset
   729
     self printf:'%20.10f\n' on:Transcript arguments: { 0.0 log10  }
d4b8ac7168a6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4428
diff changeset
   730
     self printf:'%20.10f\n' on:Transcript arguments: { 0.0 asShortFloat log10  }
d4b8ac7168a6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4428
diff changeset
   731
     self printf:'%20.10f\n' on:Transcript arguments: { 0.0 asLongFloat log10  }
d4b8ac7168a6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4428
diff changeset
   732
     self printf:'%20.10f\n' on:Transcript arguments: { 0.0 asQDouble log10  }
d4b8ac7168a6 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4428
diff changeset
   733
4452
9b6b7249be74 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4441
diff changeset
   734
     self printf:'%20.10f\n' on:Transcript arguments: { Float NaN   }
4434
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   735
     self printf:'%20.10f\n' on:Transcript arguments: { DomainError ignoreIn:[ -1.0 log10 ]   }
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   736
     self printf:'%20.10f\n' on:Transcript arguments: { DomainError ignoreIn:[ -1.0 asShortFloat log10 ]  }
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   737
     self printf:'%20.10f\n' on:Transcript arguments: { DomainError ignoreIn:[ -1.0 asLongFloat log10]   }
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   738
     self printf:'%20.10f\n' on:Transcript arguments: { DomainError ignoreIn:[ -1.0 asQDouble log10]   }
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   739
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   740
     self printf:'%10s\n' on:Transcript arguments:{ 'hello' }
92084009a524 #QUALITY by cg
Claus Gittinger <cg@exept.de>
parents: 4432
diff changeset
   741
     self printf:'%*s\n' on:Transcript arguments:{ 10 . 'hello' }
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   742
    "
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   743
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   744
    |absVal exp x fuzz i|
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   745
4428
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   746
    aFloat isNaN ifTrue:[
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   747
        aStream nextPutAll:'NAN'.
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   748
        ^ self.
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   749
    ].
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   750
    aFloat isInfinite ifTrue:[
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   751
        aStream nextPutAll:'INF'.
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   752
        ^ self.
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   753
    ].
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   754
    aFloat = 0.0 ifTrue:[
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   755
        aStream nextPutAll:'0'.
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   756
        ^ self.
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   757
    ].
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   758
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   759
    absVal := aFloat abs.
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   760
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   761
    "x is myself normalized to (1.0, 10.0), exp is my exponent"
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   762
    exp := absVal < 1.0 
4452
9b6b7249be74 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4441
diff changeset
   763
            ifTrue:[ (10.0 / absVal asFloat) log10 floor negated ] 
9b6b7249be74 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4441
diff changeset
   764
            ifFalse:[ absVal asFloat log10 floor].
4428
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   765
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   766
    exp := exp asInteger.
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   767
    x := absVal / (10.0 raisedTo:exp).
4428
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   768
    fuzz := 10.0 raisedTo:(1 - digits).
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   769
    "round the last digit to be printed"
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   770
    x := 0.5 * fuzz + x.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   771
    x >= 10.0 ifTrue:[ 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   772
        "check if rounding has unnormalized x" 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   773
        x := x / 10.0.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   774
        exp := exp + 1
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   775
    ].
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   776
    
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   777
    exp < 0 ifTrue:[
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   778
        1 to:(1 - exp) do:[:j | 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   779
            "/ cg: huh - what sort of code is that????
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   780
            "/ aStream nextPut:('0.000000000000' at:j)
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   781
            aStream nextPut:(j == 2 ifTrue:[$.] ifFalse:[$0])
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   782
        ].
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   783
        
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   784
    ].
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   785
    [ x >= fuzz ] whileTrue:[ 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   786
        "use fuzz to track significance" 
4422
92f08dfe59af #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4417
diff changeset
   787
        i := x truncated.
92f08dfe59af #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4417
diff changeset
   788
        i := i asInteger.
4441
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   789
        aStream nextPut:($0 + i).
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   790
        x := (x - i) * 10.0.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   791
        fuzz := fuzz * 10.0.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   792
        exp := exp - 1.
4428
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   793
        exp == -1 ifTrue:[
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   794
            aStream nextPut:$.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   795
        ]
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   796
    ].
4428
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   797
    
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   798
    [ exp >= -1 ] whileTrue:[
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   799
        aStream nextPut:$0.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   800
        exp := exp - 1.
4428
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   801
        exp == -1 ifTrue:[
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   802
            aStream nextPut:$.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   803
        ]
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   804
    ]
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   805
4452
9b6b7249be74 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4441
diff changeset
   806
    "Modified: / 03-07-2017 / 14:13:31 / cg"
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   807
!
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   808
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   809
absPrintFloat:aFloat on:aStream digits:digits 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   810
    "Place a string representation of the receiver on <aStream>,
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   811
     using <digits> significant digits."
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   812
    
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   813
    (aFloat < 1.0e6 and:[ aFloat > 1.0e-4 ]) ifTrue:[
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   814
        self absDecimalPrintFloat:aFloat on:aStream digits:digits
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   815
    ] ifFalse:[
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   816
        self absScientificPrintFloat:aFloat on:aStream digits:digits
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   817
    ]
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   818
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   819
    "Modified: / 19-06-2017 / 15:03:40 / cg"
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   820
!
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   821
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   822
absScientificPrintFloat:aFloat on:aStream digits:digits 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   823
    "Place a string representation of the receiver on <aStream>,
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   824
     using <digits> significant digits, using scientific notation."
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   825
    
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   826
    |absVal exp fuzz x q i|
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   827
4428
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   828
    aFloat isNaN ifTrue:[
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   829
        aStream nextPutAll:'NAN'.
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   830
        ^ self.
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   831
    ].
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   832
    aFloat isInfinite ifTrue:[
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   833
        aStream nextPutAll:'INF'.
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   834
        ^ self.
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   835
    ].
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   836
    aFloat = 0.0 ifTrue:[
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   837
        aStream nextPutAll:'0'.
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   838
        ^ self.
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   839
    ].
f44ab76503a6 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4422
diff changeset
   840
    
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   841
    absVal := aFloat abs.
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   842
    
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   843
    "x is myself normalized to [1.0, 10.0), exp is my exponent"
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   844
    exp := absVal < 1.0 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   845
                ifTrue:[
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   846
                    (10.0 / absVal) log10 floor asInteger negated]
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   847
                ifFalse:[
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   848
                    absVal log10 floor asInteger].
4979
ba279ee92a60 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 4966
diff changeset
   849
                    
ba279ee92a60 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 4966
diff changeset
   850
    x := exp == 0 ifTrue:[absVal] ifFalse:[absVal / (10.0 raisedTo:exp)].
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   851
    "round the last digit to be printed"
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   852
    fuzz := 10.0 raisedTo:1 - digits.
4966
cc232f4d7d73 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4946
diff changeset
   853
    fuzz = 0 ifTrue:[
cc232f4d7d73 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4946
diff changeset
   854
        fuzz := 10.0 asLongFloat raisedTo:1 - digits. 
cc232f4d7d73 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4946
diff changeset
   855
        fuzz = 0 ifTrue:[
cc232f4d7d73 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4946
diff changeset
   856
            "/ self error:'too many digits'.
cc232f4d7d73 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4946
diff changeset
   857
            "/ fuzz := (10.0 asLargeFloatPrecision:((10 raisedTo:digits) integerLog2)) raisedTo:(1 - digits). 
cc232f4d7d73 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4946
diff changeset
   858
        ].    
cc232f4d7d73 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4946
diff changeset
   859
    ].    
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   860
    x := 0.5 * fuzz + x.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   861
    x >= 10.0 ifTrue:[ "check if rounding has unnormalized x" 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   862
        x := x / 10.0.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   863
        exp := exp + 1
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   864
    ].
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   865
    q := exp.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   866
    exp := 0.
4966
cc232f4d7d73 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 4946
diff changeset
   867
    [ (x >= fuzz) and:[x ~= 0] ] whileTrue:[
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   868
        "use fuzz to track significance" 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   869
        i := x truncated.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   870
        i := i asInteger.
4441
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   871
        aStream nextPut:($0 + i).
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   872
        x := (x - i) * 10.0.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   873
        fuzz := fuzz * 10.0.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   874
        exp := exp - 1.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   875
        exp = -1 ifTrue:[
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   876
            aStream nextPut:$.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   877
        ]
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   878
    ].
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   879
    [ exp >= -1 ] whileTrue:[
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   880
        aStream nextPut:$0.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   881
        exp := exp - 1.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   882
        exp = -1 ifTrue:[
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   883
            aStream nextPut:$.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   884
        ]
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   885
    ].
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   886
    aStream nextPut:$e.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   887
    q printOn:aStream
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   888
4441
592237602835 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4435
diff changeset
   889
    "Modified: / 21-06-2017 / 13:29:37 / cg"
4979
ba279ee92a60 #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 4966
diff changeset
   890
    "Modified: / 05-06-2019 / 21:42:17 / Claus Gittinger"
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   891
!
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   892
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   893
formatArgCountFor:aFormatString
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   894
    "Return the number of arguments required/produced,
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   895
     if the argument is interpreted as a printf/scanf format control string."
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   896
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   897
    |nonConsecutive count|
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
   898
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   899
    nonConsecutive := true.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   900
    count := 0.
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   901
    aFormatString do:[:c |
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   902
        c == $% ifTrue:[
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   903
            nonConsecutive ifTrue:[
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   904
                count := count + 1. 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   905
                nonConsecutive := false
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   906
            ] ifFalse:[
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   907
                count := count - 1. 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   908
                nonConsecutive := true
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   909
            ]
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   910
        ] ifFalse:[
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   911
            nonConsecutive := true
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   912
        ]
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   913
    ].
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   914
    ^ count
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   915
!
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   916
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   917
scanArgFrom:dataStream to:collection format:format 
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   918
    "Add to <collection> an object who's representation is found
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   919
     in <dataStream> interpreted according to the conversion
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   920
     control string in the Stream <format>.  <format> is assumed to
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   921
     be positioned just past a $%, and a complete control string is
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   922
     assumed available.    
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   923
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   924
     Return when the conversion control string is consumed.  Leave
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   925
     <format> pointing past the last character in the conversion
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   926
     control string, leave <dataStream> pointing past any width
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   927
     specified in <format>, or at the first character that doesn't
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   928
     make sense for the <format>."
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
   929
4471
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   930
    |final width char pos data scanset exclusive return last 
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   931
     isShort isLong isLongLong isLongDouble isLongLongDouble|
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   932
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   933
    final := [:retval | 
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   934
            collection add:retval.
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   935
            data == dataStream ifFalse:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   936
                dataStream position:dataStream position + data position
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   937
            ].
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   938
            ^ self
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   939
        ].
1464
10af50b07968 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1463
diff changeset
   940
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   941
    char := format peek.
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   942
    char == $% ifTrue:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   943
        ^ dataStream peekFor:char
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   944
    ].
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   945
    char == $* ifTrue:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   946
        format next.
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   947
        char := format peek.
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   948
        final := [:retval | 
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   949
                data == dataStream ifFalse:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   950
                    dataStream position:dataStream position + data position
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   951
                ].
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   952
                ^ self
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   953
            ]
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   954
    ].
4471
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   955
    
1464
10af50b07968 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1463
diff changeset
   956
    width := 0.
4471
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   957
    isShort := isLong := isLongLong := false.
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   958
    isLongDouble := isLongLongDouble := false.
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
   959
    
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   960
    char isDigit ifTrue:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   961
        width := Integer readFrom:format.
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   962
        char := format peek
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   963
    ].
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   964
    ('slhduoxfeg' includes:char) ifTrue:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   965
        dataStream skipSeparators
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   966
    ].
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   967
    width = 0 ifTrue:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   968
        data := dataStream
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   969
    ] ifFalse:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   970
        pos := dataStream position.
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   971
        data := ReadStream on:(dataStream next:width).
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   972
        dataStream position:pos
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   973
    ].
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   974
    char == $s ifTrue:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   975
        final value:(data upToSeparator)
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   976
    ].
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   977
    char == $c ifTrue:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   978
        width = 0 ifTrue:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   979
            final value:(String with:data next)
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   980
        ] ifFalse:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   981
            final value:data contents
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   982
        ]
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   983
    ].
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   984
    char == $[ ifTrue:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   985
        "What a mess!!!!" 
3539
c9d007677ac3 class: PrintfScanf
Stefan Vogel <sv@exept.de>
parents: 3115
diff changeset
   986
        return := CharacterWriteStream on:(String new:8).
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   987
        scanset := IdentitySet new.
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   988
        format next.
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   989
        width = 0 ifTrue:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   990
            width := SmallInteger maxVal
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   991
        ].
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   992
        exclusive := format peekFor:$^.
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   993
        [
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   994
            last := char.
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   995
            char := format next.
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   996
            char == $]
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   997
        ] whileFalse:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   998
            char == $- ifFalse:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   999
                scanset add:char
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1000
            ] ifTrue:[
2678
a2f6f1e865e6 changed: #scanArgFrom:to:format:
Claus Gittinger <cg@exept.de>
parents: 2581
diff changeset
  1001
                last to:format next do:[:c | 
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1002
                    scanset add:c
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1003
                ]
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1004
            ]
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1005
        ].
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1006
        [
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1007
            data atEnd not and:[ (scanset includes:data peek) xor:exclusive ]
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1008
        ] whileTrue:[ return nextPut:data next ].
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1009
        final value:return contents
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1010
    ].
4471
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1011
    (char == $l) ifTrue:[
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1012
        isLong := true.
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1013
        format next.
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1014
        char := format peek.
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1015
        
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1016
        (char == $l) ifTrue:[
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1017
            isLongLong := true.
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1018
            format next.
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1019
            char := format peek.
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1020
        ].    
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1021
    ].    
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1022
    (char == $h) ifTrue:[
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1023
        isShort := true.
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1024
        format next.
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1025
        char := format peek
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1026
    ].
4471
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1027
    (char == $L) ifTrue:[
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1028
        isLongDouble := true.
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1029
        format next.
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1030
        char := format peek.
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1031
        
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1032
        (char == $L) ifTrue:[
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1033
            isLongLongDouble := true.
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1034
            format next.
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1035
            char := format peek
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1036
        ].
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1037
    ].
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1038
    ('DUdu' includes:char) ifTrue:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1039
        final value:(Integer readFrom:data)
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1040
    ].
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1041
    ('FEGfeg' includes:char) ifTrue:[
4471
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1042
        (isLongLongDouble) ifTrue:[
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1043
            final value:(QDouble readFrom:data)
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1044
        ] ifFalse:[    
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1045
            (isLongDouble) ifTrue:[
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1046
                final value:(LongFloat readFrom:data)
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1047
            ] ifFalse:[
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1048
                isShort ifTrue:[
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1049
                    final value:(ShortFloat readFrom:data)
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1050
                ] ifFalse:[    
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1051
                    final value:(Float readFrom:data)
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1052
                ].
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1053
            ].
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1054
        ].
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1055
    ].
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1056
    ('Oo' includes:char) ifTrue:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1057
        final value:(Integer readFrom:data radix:8)
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1058
    ].
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1059
    ('Xx' includes:char) ifTrue:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1060
        final value:(Integer readFrom:data radix:16)
2889
7491ae1f59ac class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2875
diff changeset
  1061
    ].
7491ae1f59ac class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2875
diff changeset
  1062
    ('Bb' includes:char) ifTrue:[
7491ae1f59ac class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2875
diff changeset
  1063
        final value:(Integer readFrom:data radix:2)
7491ae1f59ac class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2875
diff changeset
  1064
    ].
4945
f98cb762d159 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4622
diff changeset
  1065
    ('Nn' includes:char) ifTrue:[
f98cb762d159 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4622
diff changeset
  1066
        final value:(Number readFrom:data)
f98cb762d159 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4622
diff changeset
  1067
    ].
2678
a2f6f1e865e6 changed: #scanArgFrom:to:format:
Claus Gittinger <cg@exept.de>
parents: 2581
diff changeset
  1068
4471
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1069
    "
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1070
     '%d %x' sscanf:'1234 ff00'
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1071
     '%d %x %b' sscanf:'1234 ff00 1001'
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1072
     
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1073
     ('%f' sscanf:'1234') first
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1074
     ('%lf' sscanf:'1234') first
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1075
     ('%llf' sscanf:'1234') first
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1076
     ('%hf' sscanf:'1234') first
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1077
     ('%Lf' sscanf:'1234') first
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1078
     ('%LLf' sscanf:'1234') first
4945
f98cb762d159 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4622
diff changeset
  1079
     ('%n' sscanf:'1234') first
f98cb762d159 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4622
diff changeset
  1080
     ('%n' sscanf:'1234.456') first
f98cb762d159 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4622
diff changeset
  1081
     ('%n %n' sscanf:'1234.456 123') 
4471
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1082
    "
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1083
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1084
    "Created: / 19-06-2017 / 15:53:28 / cg"
4471
54c49f28673c #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4452
diff changeset
  1085
    "Modified (comment): / 14-07-2017 / 11:31:01 / cg"
4945
f98cb762d159 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4622
diff changeset
  1086
    "Modified (comment): / 18-05-2019 / 13:08:30 / Claus Gittinger"
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1087
! !
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1088
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1089
!PrintfScanf class methodsFor:'scanning'!
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1090
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1091
scanf:formatString fromStream:dataStream 
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1092
    "Return a Collection of objects found in the Character Stream
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1093
     <dataStream> as interpreted according to the receiver.  The
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1094
     receiver is assumed to be a conversion control string as
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1095
     specified in the UTek manual page for scanf(3)."
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1096
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1097
    |results format char|
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1098
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1099
    results := OrderedCollection new.
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1100
    format := ReadStream on:formatString.
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1101
    [ format atEnd ] whileFalse:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1102
        char := format next.
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1103
        (char == Character space or:[ char == Character tab ]) ifTrue:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1104
            dataStream skipSeparators.
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1105
            format skipSeparators
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1106
        ].
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1107
        char == $% ifTrue:[
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
  1108
            self scanArgFrom:dataStream to:results format:format
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1109
        ] ifFalse:[
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1110
            dataStream peekFor:char
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1111
        ]
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1112
    ].
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1113
    ^ results
4416
40f676e88785 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4401
diff changeset
  1114
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1115
    "Modified: / 19-06-2017 / 15:53:04 / cg"
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1116
!
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1117
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1118
sscanf:formatString fromString:aString 
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1119
    "Return a Collection of objects found in <string> as
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1120
     interpreted according to the receiver.  The receiver is
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1121
     assumed to be a conversion control string as specified in the
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1122
     UTek manual page for scanf(3)."
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1123
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1124
    ^ self scanf:formatString fromStream:(ReadStream on:aString)
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1125
4945
f98cb762d159 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4622
diff changeset
  1126
    "
f98cb762d159 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4622
diff changeset
  1127
     self sscanf:'%d %d %d' fromString:'123 45 999'
4946
ccd655ac6fc1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4945
diff changeset
  1128
     '%d %d %d' scanf:'123 45 999'
4945
f98cb762d159 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4622
diff changeset
  1129
    "
f98cb762d159 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 4622
diff changeset
  1130
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1131
    "Modified: / 19-06-2017 / 15:53:59 / cg"
4946
ccd655ac6fc1 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 4945
diff changeset
  1132
    "Modified (comment): / 18-05-2019 / 13:09:48 / Claus Gittinger"
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1133
! !
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1134
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1135
!PrintfScanf methodsFor:'helpers'!
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1136
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1137
absDecimalPrintFloat:arg1 on:arg2 digits:arg3
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1138
    <resource: #obsolete>
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1139
    ^ self class absDecimalPrintFloat:arg1 on:arg2 digits:arg3
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1140
!
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1141
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1142
absPrintFloat:arg1 on:arg2 digits:arg3
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1143
    <resource: #obsolete>
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1144
    ^ self class absPrintFloat:arg1 on:arg2 digits:arg3
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1145
!
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1146
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1147
absScientificPrintFloat:arg1 on:arg2 digits:arg3
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1148
    <resource: #obsolete>
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1149
    ^ self class absScientificPrintFloat:arg1 on:arg2 digits:arg3
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1150
!
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1151
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1152
formatArgCountFor:arg
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1153
    <resource: #obsolete>
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1154
    ^ self class formatArgCountFor:arg
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1155
! !
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1156
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1157
!PrintfScanf methodsFor:'printing'!
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1158
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1159
printArgFrom:arg1 to:arg2 arguments:arg3
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1160
    <resource: #obsolete>
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1161
    ^ self class printArgFrom:arg1 to:arg2 arguments:arg3
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1162
!
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1163
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1164
printf:aString arguments:args
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1165
    <resource: #obsolete>
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1166
 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1167
    "Format and print the receiver with <args> formatted in C style, 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1168
     as described in the UTek manual page for printf(3).
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1169
     Returns the formatted printString."
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1170
    
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1171
    ^ self class printf:aString arguments:args
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1172
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1173
    "
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1174
     self new printf:'%d %x' arguments:#(1234 45054) 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1175
    "
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1176
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1177
    "Modified: / 19-06-2017 / 15:21:56 / cg"
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1178
!
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1179
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1180
printf:aFormatString on:outStream arguments: args
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1181
    <resource: #obsolete>
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1182
    "Format and print aFormatString on <outStream> with <args>
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1183
     formatted in C style, as described in the UTek manual page for
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1184
     printf(3)."     
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1185
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1186
    self class printf:aFormatString on:outStream arguments: args
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1187
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1188
    "Modified (comment): / 19-06-2017 / 15:22:15 / cg"
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1189
! !
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1190
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1191
!PrintfScanf methodsFor:'scanning'!
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1192
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1193
scanArgFrom:dataStream to:collection format:format
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1194
    <resource: #obsolete>
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1195
 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1196
    "Add to <collection> an object who's representation is found
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1197
     in <dataStream> interpreted according to the conversion
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1198
     control string in the Stream <format>.  <format> is assumed to
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1199
     be positioned just past a $%, and a complete control string is
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1200
     assumed available.    
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1201
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1202
     Return when the conversion control string is consumed.  Leave
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1203
     <format> pointing past the last character in the conversion
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1204
     control string, leave <dataStream> pointing past any width
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1205
     specified in <format>, or at the first character that doesn't
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1206
     make sense for the <format>."
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1207
    
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1208
    ^ self class scanArgFrom:dataStream to:collection format:format
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1209
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1210
    "Modified: / 19-06-2017 / 15:54:43 / cg"
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1211
!
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1212
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1213
scanf:formatString fromStream:dataStream
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1214
    <resource: #obsolete>
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1215
 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1216
    "Return a Collection of objects found in the Character Stream
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1217
     <dataStream> as interpreted according to the receiver.  The
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1218
     receiver is assumed to be a conversion control string as
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1219
     specified in the UTek manual page for scanf(3)."
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1220
    
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1221
    ^ self class scanf:formatString fromStream:dataStream
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1222
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1223
    "Modified: / 19-06-2017 / 15:54:27 / cg"
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1224
!
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1225
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1226
sscanf:formatString fromString:aString
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1227
    <resource: #obsolete>
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1228
 
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1229
    "Return a Collection of objects found in <string> as
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1230
     interpreted according to the receiver.  The receiver is
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1231
     assumed to be a conversion control string as specified in the
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1232
     UTek manual page for scanf(3)."
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1233
    
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1234
    ^ self class sscanf:formatString fromString:aString
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1235
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1236
    "
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1237
     self new sscanf:'%d %x' fromString:'1234 affe'
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1238
    "
4417
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1239
01b4de1f0b01 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 4416
diff changeset
  1240
    "Modified: / 19-06-2017 / 15:54:14 / cg"
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1241
! !
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1242
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1243
!PrintfScanf class methodsFor:'documentation'!
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1244
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1245
version
3719
3750518f5ada #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 3539
diff changeset
  1246
    ^ '$Header$'
3115
b1217780fad3 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 3004
diff changeset
  1247
!
b1217780fad3 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 3004
diff changeset
  1248
b1217780fad3 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 3004
diff changeset
  1249
version_CVS
3719
3750518f5ada #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 3539
diff changeset
  1250
    ^ '$Header$'
1463
abe8e819ea92 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
  1251
! !
2875
17ad0f5c8f53 class: PrintfScanf
Claus Gittinger <cg@exept.de>
parents: 2678
diff changeset
  1252