File: stdio.sml

package info (click to toggle)
smlsharp 4.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 123,732 kB
  • sloc: ansic: 16,725; sh: 4,347; makefile: 2,191; java: 742; haskell: 493; ruby: 305; cpp: 284; pascal: 256; ml: 255; lisp: 141; asm: 97; sql: 74
file content (23 lines) | stat: -rw-r--r-- 612 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
val fopen = _import "fopen" : (string, string) -> unit ptr
val fread = _import "fread" : (char array, word64, word64, unit ptr) -> word64
val fclose = _import "fclose" : unit ptr -> int
type instream = unit ptr * CharArray.array

fun openIn filename =
    let
      val fp = fopen (filename, "rb")
      val buf = CharArray.array (4096, #"\000")
    in
      (fp, buf)
    end

fun input (fp, buf) =
    let
      val n = fread (buf, 0w1, 0w4096, fp)
      val s = CharArraySlice.slice (buf, 0, SOME (Word64.toIntX n))
    in
      CharArraySlice.vector s
    end

fun closeIn (fp, buf) =
    ignore (fclose fp)