Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Diff of /sml/trunk/src/smlnj-lib/Util/scan.sml
ViewVC logotype

Diff of /sml/trunk/src/smlnj-lib/Util/scan.sml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1332, Sun May 18 03:21:16 2003 UTC revision 1333, Thu May 22 17:12:13 2003 UTC
# Line 119  Line 119 
119                  in                  in
120                    scan (scanSet strm, rf, items)                    scan (scanSet strm, rf, items)
121                  end                  end
122              | scan (strm, Field(flags, wid, ty)::rf, items) = (let              | scan (strm, Field(flags, wid, ty)::rf, items) = let
123                  val strm = skipWS strm                  val strm = skipWS strm
124                    fun next (con, SOME(x, strm')) = scan (strm', rf, con(x)::items)
125                      | next _ = NONE
126                  fun getInt fmt = if (#large flags)                  fun getInt fmt = if (#large flags)
127                        then let                        then next(LINT, LargeInt.scan fmt getc strm)
128                          val SOME(n, strm) = LargeInt.scan fmt getc strm                        else next(INT, Int.scan fmt getc strm)
129                          in                          in
130                            (LINT n, strm)                    case ty
                         end  
                       else let  
                         val SOME(n, strm) = Int.scan fmt getc strm  
                         in  
                           (INT n, strm)  
                         end  
                 val (item, strm) = (case ty  
131                         of OctalField => getInt SC.OCT                         of OctalField => getInt SC.OCT
132                          | IntField => getInt SC.DEC                          | IntField => getInt SC.DEC
133                          | HexField => getInt SC.HEX                          | HexField => getInt SC.HEX
134                          | CapHexField => getInt SC.HEX                          | CapHexField => getInt SC.HEX
135                          | CharField => let val SOME(c, strm) = getc strm                      | CharField => next(CHR, getc strm)
136                              in                      | BoolField => next(BOOL, Bool.scan getc strm)
                               (CHR c, strm)  
                             end  
                         | BoolField => let  
                             val SOME(b, strm) = Bool.scan getc strm  
                             in  
                               (BOOL b, strm)  
                             end  
137                          | StrField => let                          | StrField => let
138                              val notSpace = not o Char.isSpace                              val notSpace = not o Char.isSpace
139                              val pred = (case wid                              val pred = (case wid
# Line 160  Line 148 
148                                    (* end case *))                                    (* end case *))
149                              val (s, strm) = SC.splitl pred getc strm                              val (s, strm) = SC.splitl pred getc strm
150                              in                              in
151                                (STR s, strm)                            scan (strm, rf, STR s :: items)
                             end  
                         | (RealField _) => let  
                               val SOME(r, strm) = LargeReal.scan getc strm  
                             in  
                               (REAL r, strm)  
152                              end                              end
153                        (* end case *))                      | (RealField _) => next(REAL, LargeReal.scan getc strm)
154                  in                    (* end case *)
                   scan (strm, rf, item::items)  
155                  end                  end
                   handle Overflow => raise Overflow  
                        | _ => NONE)  
156            in            in
157              scan(strm, fmts, [])              scan(strm, fmts, [])
158            end (* scanf *)            end (* scanf *)

Legend:
Removed from v.1332  
changed lines
  Added in v.1333

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0