 ! Copyright (C) 2010 Erik Charlebois.
 ! See http://factorcode.org/license.txt for BSD license.
-USING: accessors alien.c-types arrays ascii bit-arrays byte-arrays
-combinators continuations grouping images images.loader io
-io.encodings.ascii io.encodings.string kernel locals make math
-math.functions math.parser sequences specialized-arrays ;
-SPECIALIZED-ARRAY: ushort
+USING: accessors arrays ascii bit-arrays byte-arrays combinators
+continuations grouping images images.loader io io.encodings.ascii
+io.encodings.string kernel locals make math math.functions math.parser
+sequences ;
 IN: images.pbm
 
 SINGLETON: pbm-image


<PRIVATE
: read-token ( -- token )
    [ read1 dup blank?
      [ t ]
      [ dup CHAR: # =
        [ "\n" read-until 2drop t ]
        [ f ] if
      ] if
    ] [ drop ] while
    " \n\r\t" read-until drop swap
    prefix ascii decode ;

    read-number    :> height
    width height * :> npixels
    width 8 mod    :> leftover

    type {
        { "P1" [ [ [ read-ascii-bits ] ignore-errors ] B{ } make ] }
        { "P4" [ [ width height read-binary-bits ] B{ } make ] }
    } case :> data

    image new
    L                >>component-order
    { width height } >>dim
