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/cml/src/IO/text-io-fn.sml
ViewVC logotype

Diff of /sml/trunk/src/cml/src/IO/text-io-fn.sml

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

revision 3, Sat Oct 4 23:33:46 1997 UTC revision 8, Sun Jan 18 01:01:29 1998 UTC
# Line 331  Line 331 
331                          else (SV.mPut(more, next); false)                          else (SV.mPut(more, next); false)
332                      end                      end
333                (* end case *))                (* end case *))
334          fun mkInstream (reader, optData) = let          fun mkInstream' (reader, optData) = let
335                val PIO.RD{readVec, readVecEvt, getPos, setPos, ...} = reader                val PIO.RD{readVec, readVecEvt, getPos, setPos, ...} = reader
336                val getPos = (case (getPos, setPos)                val getPos = (case (getPos, setPos)
337                       of (SOME f, SOME _) => (fn () => SOME(f()))                       of (SOME f, SOME _) => (fn () => SOME(f()))
# Line 361  Line 361 
361                      (* end case *))                      (* end case *))
362                val strm =  ISTRM(buf, 0)                val strm =  ISTRM(buf, 0)
363                in                in
364                    (tag, strm)
365                  end
366            fun mkInstream arg = let
367                  val (tag, strm) = mkInstream' arg
368                  in
369                  CleanIO.rebindCleaner (tag, fn () => closeIn strm);                  CleanIO.rebindCleaner (tag, fn () => closeIn strm);
370                  strm                  strm
371                end                end
# Line 612  Line 617 
617                  SV.mPut (strmMV, strm)                  SV.mPut (strmMV, strm)
618                end                end
619    
620          fun mkOutstream (wr as PIO.WR{chunkSize, writeArr, writeVec, ...}, mode) =          fun mkOutstream' (wr as PIO.WR{chunkSize, writeArr, writeVec, ...}, mode) =
621                let                let
622                fun iterate f (buf, i, sz) = let                fun iterate f (buf, i, sz) = let
623                      fun lp (_, 0) = ()                      fun lp (_, 0) = ()
# Line 650  Line 655 
655                        cleanTag = tag                        cleanTag = tag
656                      })                      })
657                in                in
658                    (tag, strm)
659                  end
660            fun mkOutstream arg = let
661                  val (tag, strm) = mkOutstream' arg
662                  in
663                  CleanIO.rebindCleaner (tag, fn () => closeOut strm);                  CleanIO.rebindCleaner (tag, fn () => closeOut strm);
664                  strm                  strm
665                end                end
# Line 886  Line 896 
896      local      local
897        structure SIO = StreamIO        structure SIO = StreamIO
898        fun mkStdIn rebind = let        fun mkStdIn rebind = let
899              val strm = SIO.mkInstream(OSPrimIO.stdIn(), NONE)              val (tag, strm) = SIO.mkInstream'(OSPrimIO.stdIn(), NONE)
             val SIO.ISTRM(SIO.IBUF{info=SIO.INFO{cleanTag, ...}, ...}, _) = strm  
900              in              in
901                if rebind                if rebind
902                  then CleanIO.rebindCleaner (cleanTag, dummyCleaner)                  then CleanIO.rebindCleaner (tag, dummyCleaner)
903                  else ();                  else ();
904                strm                strm
905              end              end
906        fun mkStdOut rebind = let        fun mkStdOut rebind = let
907              val wr = OSPrimIO.stdOut()              val wr = OSPrimIO.stdOut()
908              val strm = SIO.mkOutstream(wr, bufferMode wr)              val (tag, strm) = SIO.mkOutstream'(wr, bufferMode wr)
             val SIO.OSTRM{cleanTag, ...} = SV.mGet strm  
909              in              in
910                if rebind                if rebind
911                  then CleanIO.rebindCleaner (cleanTag, fn () => SIO.flushOut strm)                  then CleanIO.rebindCleaner (tag, fn () => SIO.flushOut strm)
912                  else ();                  else ();
913                strm                strm
914              end              end
915        fun mkStdErr rebind = let        fun mkStdErr rebind = let
916              val strm = SIO.mkOutstream(OSPrimIO.stdErr(), IO.NO_BUF)              val (tag, strm) = SIO.mkOutstream'(OSPrimIO.stdErr(), IO.NO_BUF)
             val SIO.OSTRM{cleanTag, ...} = SV.mGet strm  
917              in              in
918                if rebind                if rebind
919                  then CleanIO.rebindCleaner (cleanTag, fn () => SIO.flushOut strm)                  then CleanIO.rebindCleaner (tag, fn () => SIO.flushOut strm)
920                  else ();                  else ();
921                strm                strm
922              end              end
# Line 928  Line 935 
935              SV.mPut(stdOut, strm')              SV.mPut(stdOut, strm')
936            end            end
937    
938        fun scanStream scanFn = let
939              val scan = scanFn StreamIO.input1
940              fun doit strm = let
941                    val instrm = getInstream strm
942                    in
943                      case scan instrm
944                       of NONE => NONE
945                        | SOME(item, instrm') => (
946                            setInstream(strm, instrm');
947                            SOME item)
948                      (* end case *)
949                    end
950              in
951                doit
952              end
953    
954    (* Establish a hook function to rebuild the I/O stack *)    (* Establish a hook function to rebuild the I/O stack *)
955      val _ = CleanIO.stdStrmHook := (fn () => (      val _ = CleanIO.stdStrmHook := (fn () => (
956            setInstream (stdIn, mkStdIn true);            setInstream (stdIn, mkStdIn true);

Legend:
Removed from v.3  
changed lines
  Added in v.8

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