[remove uses of wchar routines, as they don't mix well with binary IO. add some more binary IO routines.
John Meacham <john@repetae.net>**20070608055529] hunk ./data/jhc_rts.c 35
-        fwprintf(stderr, L"\n-----------------\n");
-        fwprintf(stderr, L"Profiling: %s\n", jhc_progname);
-        fwprintf(stderr, L"Command: %s\n", jhc_command);
-        fwprintf(stderr, L"Complie: %s\n", jhc_c_compile);
-        fwprintf(stderr, L"Version: %s\n\n", jhc_version);
+        fprintf(stderr, "\n-----------------\n");
+        fprintf(stderr, "Profiling: %s\n", jhc_progname);
+        fprintf(stderr, "Command: %s\n", jhc_command);
+        fprintf(stderr, "Complie: %s\n", jhc_c_compile);
+        fprintf(stderr, "Version: %s\n\n", jhc_version);
hunk ./data/jhc_rts.c 41
-        fwprintf(stderr, L"Memory Allocated: %llu bytes\n", (unsigned long long)(jhc_mem - jhc_memstart));
+        fprintf(stderr, "Memory Allocated: %llu bytes\n", (unsigned long long)(jhc_mem - jhc_memstart));
hunk ./data/jhc_rts.c 44
-        fwprintf(stderr, L"User Time:   %.2fs\n", (float)tm.tms_utime/cpt);
-        fwprintf(stderr, L"System Time: %.2fs\n", (float)tm.tms_stime/cpt);
-        fwprintf(stderr, L"Total Time:  %.2fs\n", (float)(tm.tms_stime + tm.tms_utime)/cpt);
+        fprintf(stderr, "User Time:   %.2fs\n", (float)tm.tms_utime/cpt);
+        fprintf(stderr, "System Time: %.2fs\n", (float)tm.tms_stime/cpt);
+        fprintf(stderr, "Total Time:  %.2fs\n", (float)(tm.tms_stime + tm.tms_utime)/cpt);
hunk ./data/jhc_rts.c 49
-        fwprintf(stderr, L"\nFunction Calls:   %llu\n", (unsigned long long)jhc_prof_function_calls);
-        fwprintf(stderr, L"Case Statements:  %llu\n", (unsigned long long)jhc_prof_case_statements);
-        fwprintf(stderr, L"Updates:          %llu\n", (unsigned long long)jhc_prof_updates);
+        fprintf(stderr, "\nFunction Calls:   %llu\n", (unsigned long long)jhc_prof_function_calls);
+        fprintf(stderr, "Case Statements:  %llu\n", (unsigned long long)jhc_prof_case_statements);
+        fprintf(stderr, "Updates:          %llu\n", (unsigned long long)jhc_prof_updates);
hunk ./data/jhc_rts.c 53
-        fwprintf(stderr, L"-----------------\n");
+        fprintf(stderr, "-----------------\n");
hunk ./data/jhc_rts.c 91
+inline static int A_UNUSED
+jhc_utf8_getchar(void)
+{
+    return getchar_unlocked();
+}
+
+inline static int A_UNUSED
+jhc_utf8_getc(FILE *f)
+{
+    return getc_unlocked(f);
+}
+
+inline static int A_UNUSED
+jhc_utf8_putchar(int ch)
+{
+    return putchar_unlocked(ch);
+}
+
+inline static int A_UNUSED
+jhc_utf8_putc(int ch, FILE *f)
+{
+    return putc_unlocked(ch,f);
+}
+
+
hunk ./data/jhc_rts.c 119
+        /* A few random assertions about the architecture that the compiler
+         * assumes. should be true of any but the oddest of beasts.
+         */
+
+        assert(sizeof(HsPtr) == sizeof(HsFunPtr));
+        assert(sizeof(HsPtr) == sizeof(intptr_t));
+        assert(sizeof(HsPtr) == sizeof(uintptr_t));
+        assert(CHAR_BITS == 8);
+        assert(EOF == -1);
+
hunk ./data/jhc_rts.c 143
+
hunk ./lib/base/Jhc/Basics.hs 162
+
+unsafeChr :: Int -> Char
+unsafeChr = chr
hunk ./lib/base/Jhc/IO.hs 174
-putChar c = c_putwchar (charToCWchar c)
+putChar c = c_putwchar (charToInt c)
hunk ./lib/base/Jhc/IO.hs 176
-foreign import primitive "U2U" charToCWchar :: Char -> CWchar
-foreign import ccall "stdio.h putwchar" c_putwchar :: CWchar -> IO ()
+foreign import primitive "U2U" charToInt :: Char -> Int
+foreign import ccall "stdio.h jhc_utf8_putchar" c_putwchar :: Int -> IO ()
hunk ./lib/base/Prelude/IO.hs 52
-            return (cwintToChar ch:xs)
+            return (unsafeChr ch:xs)
hunk ./lib/base/Prelude/IO.hs 63
-                        return (cwintToChar ch:xs)
+                        return (unsafeChr ch:xs)
hunk ./lib/base/Prelude/IO.hs 69
-foreign import ccall "wchar.h getwc" c_fgetwc :: Ptr () -> IO CWint
+foreign import ccall "wchar.h jhc_utf8_getc" c_fgetwc :: Ptr () -> IO Int
hunk ./lib/base/Prelude/IO.hs 109
-putChar c = c_putwchar (charToCWchar c)
+putChar c = c_putwchar (ord c)
hunk ./lib/base/Prelude/IO.hs 119
-    if ch == -1 then fail "End of file." else return (cwintToChar ch)
+    if ch == -1 then fail "End of file." else return (unsafeChr ch)
hunk ./lib/base/Prelude/IO.hs 124
-foreign import ccall "stdio.h putwchar_unlocked" c_putwchar :: CWchar -> IO ()
-foreign import ccall "wchar.h getwchar_unlocked" c_getwchar :: IO CWint
+foreign import ccall "stdio.h jhc_utf8_putchar" c_putwchar :: Int -> IO ()
+foreign import ccall "wchar.h jhc_utf8_getchar" c_getwchar :: IO Int
hunk ./lib/base/System/IO.hs 91
-                    return (cwintToChar ch:xs)
+                    return (unsafeChr ch:xs)
hunk ./lib/base/System/IO.hs 99
-foreign import ccall "wchar.h getwc" c_fgetwc :: Ptr Handle -> IO CWint
-foreign import ccall "wchar.h putwc" c_fputwc :: CWchar -> Ptr Handle -> IO CWint
+foreign import ccall "wchar.h jhc_utf8_getc" c_fgetwc :: Ptr Handle -> IO Int
+foreign import ccall "wchar.h jhc_utf8_putc" c_fputwc :: Int -> Ptr Handle -> IO Int
hunk ./lib/base/System/IO/Binary.hs 2
-module System.IO.Binary(readBinaryFile) where
+module System.IO.Binary(readBinaryFile,putWord8,getWord8) where
hunk ./lib/base/System/IO/Binary.hs 29
-foreign import ccall "stdio.h getc" c_getc :: Ptr () -> IO CInt
+foreign import ccall "stdio.h getc_unlocked" c_getc :: Ptr () -> IO CInt
hunk ./lib/base/System/IO/Binary.hs 33
+-- Int translates to CInt in the calling conventions so this is safe.
+foreign import ccall "stdio.h putchar_unlocked" c_putchar :: Int -> IO Int
+foreign import ccall "stdio.h getchar_unlocked" c_getchar :: IO Int
+
+
+putWord8 :: Word8 -> IO ()
+putWord8 w = c_putchar (fromIntegral w) >> return ()
+
+getWord8 :: IO Word8
+getWord8 = do
+    c <- c_getchar
+    case c of
+        -1 -> fail "EOF"
+        _ -> return $ fromIntegral c
+
+