diff -rtu mrifk.orig/Makefile mrifk/Makefile
--- mrifk.orig/Makefile 2004-01-31 18:36:30.000000000 +0300
+++ mrifk/Makefile 2016-03-21 10:55:48.195396805 +0300
@@ -4,5 +4,8 @@
all : mrifk$(EXE)
mrifk$(EXE) : Mrifk*.hs
- ghc --make -fglasgow-exts -o $@ ${HFLAGS} Mrifk.hs
+ ghc --make -XParallelListComp -o $@ ${HFLAGS} Mrifk.hs
strip $@
+
+clean :
+ -rm *.o *.hi mrifk$(EXE)
diff -rtu mrifk.orig/Mrifk_decompile.hs mrifk/Mrifk_decompile.hs
--- mrifk.orig/Mrifk_decompile.hs 2005-05-24 22:35:18.000000000 +0400
+++ mrifk/Mrifk_decompile.hs 2016-03-21 13:32:35.210335369 +0300
@@ -25,7 +25,7 @@
import Mrifk_code
import Mrifk_util
-import List (sort)
+import Data.List (sort)
updateLabels code = updateLabels' (sort (findJumps code)) code
diff -rtu mrifk.orig/Mrifk_disasm.hs mrifk/Mrifk_disasm.hs
--- mrifk.orig/Mrifk_disasm.hs 2004-01-31 18:36:30.000000000 +0300
+++ mrifk/Mrifk_disasm.hs 2016-03-21 14:06:37.206022400 +0300
@@ -190,6 +190,7 @@
(0x70,("streamchar", 1,0,0, OStreamChar)),
(0x71,("streamnum", 1,0,0, OStreamNum)),
(0x72,("streamstr", 1,0,0, OStreamStr)),
+ (0x73,("streamunichar", 1,0,0, OStreamChar)),
(0x100,("gestalt", 2,1,0, OSpecial)),
(0x101,("debugtrap", 1,0,0, OSpecial)),
(0x102,("getmemsize", 0,1,0, OSpecial)),
@@ -216,4 +217,39 @@
(0x160,("callf", 1,1,0, OCallI)),
(0x161,("callfi", 2,1,0, OCallI)),
(0x162,("callfii", 3,1,0, OCallI)),
- (0x163,("callfiii", 4,1,0, OCallI))]
+ (0x163,("callfiii", 4,1,0, OCallI)),
+ (0x170,("mzero", 2,0,0, OSpecial)),
+ (0x171,("mcopy", 3,0,0, OSpecial)),
+ (0x178,("malloc", 1,1,0, OSpecial)),
+ (0x179,("mfree", 1,0,0, OSpecial)),
+ (0x180,("accelfunc", 2,0,0, OSpecial)),
+ (0x181,("accelparam", 2,0,0, OSpecial)),
+ (0x190,("numtof", 1,1,0, OSpecial)),
+ (0x191,("ftonumz", 1,1,0, OSpecial)),
+ (0x192,("ftonumn", 1,1,0, OSpecial)),
+ (0x198,("ceil", 1,1,0, OSpecial)),
+ (0x199,("floor", 1,1,0, OSpecial)),
+ (0x1A0,("fadd", 2,1,0, OBinary (NormalOp " + " 5))),
+ (0x1A1,("fsub", 2,1,0, OBinary (NormalOp " - " 5))),
+ (0x1A2,("fmul", 2,1,0, OBinary (NormalOp " * " 6))),
+ (0x1A3,("fdiv", 2,1,0, OBinary (NormalOp " / " 6))),
+ (0x1A4,("fmod", 2,2,0, OBinary (NormalOp " % " 6))),
+ (0x1A8,("sqrt", 1,1,0, OSpecial)),
+ (0x1A9,("exp", 1,1,0, OSpecial)),
+ (0x1AA,("log", 1,1,0, OSpecial)),
+ (0x1AB,("pow", 2,1,0, OSpecial)),
+ (0x1B0,("sin", 1,1,0, OSpecial)),
+ (0x1B1,("cos", 1,1,0, OSpecial)),
+ (0x1B2,("tan", 1,1,0, OSpecial)),
+ (0x1B3,("asin", 1,1,0, OSpecial)),
+ (0x1B4,("acos", 1,1,0, OSpecial)),
+ (0x1B5,("atan", 1,1,0, OSpecial)),
+ (0x1B6,("atan2", 2,1,0, OSpecial)),
+ (0x1C0,("jfeq", 3,0,1, OSpecial)),
+ (0x1C1,("jfne", 3,0,1, OSpecial)),
+ (0x1C2,("jflt", 2,0,1, OJCond binopLT)),
+ (0x1C3,("jfle", 2,0,1, OJCond binopLE)),
+ (0x1C4,("jfgt", 2,0,1, OJCond binopGT)),
+ (0x1C5,("jfge", 2,0,1, OJCond binopGE)),
+ (0x1C8,("jisnan", 1,0,1, OSpecial)),
+ (0x1C9,("jisinf", 1,0,1, OSpecial))]
diff -rtu mrifk.orig/Mrifk_grammar.hs mrifk/Mrifk_grammar.hs
--- mrifk.orig/Mrifk_grammar.hs 2004-01-31 18:36:30.000000000 +0300
+++ mrifk/Mrifk_grammar.hs 2016-03-14 13:36:05.000000000 +0300
@@ -30,11 +30,11 @@
import Mrifk_memmap
-import Char (chr)
+import Data.Char (chr)
import Control.Monad
import Data.Array
import Data.Bits
-import Maybe (isJust)
+import Data.Maybe (isJust)
import Numeric (showHex)
diff -rtu mrifk.orig/Mrifk.hs mrifk/Mrifk.hs
--- mrifk.orig/Mrifk.hs 2005-05-24 22:36:48.000000000 +0400
+++ mrifk/Mrifk.hs 2016-03-21 12:39:24.052082317 +0300
@@ -17,7 +17,9 @@
-}
-module Main () where
+module Main (
+ main
+) where
import Mrifk_cmdline
@@ -33,12 +35,12 @@
import Control.Monad.State (evalState)
import Data.Array
import Data.Tree
-import Maybe (fromJust)
+import Data.Maybe (fromJust)
import Numeric (showHex)
-mrifkRelease = "1"
-mrifkSerial = "040131"
+mrifkRelease = "1-patched-v2"
+mrifkSerial = "160321"
main =
diff -rtu mrifk.orig/Mrifk_memmap.hs mrifk/Mrifk_memmap.hs
--- mrifk.orig/Mrifk_memmap.hs 2004-01-31 18:36:30.000000000 +0300
+++ mrifk/Mrifk_memmap.hs 2016-03-21 11:23:36.091904329 +0300
@@ -28,9 +28,9 @@
import Mrifk_storyfile
import Mrifk_strings
-import Array (Array,listArray)
+import Data.Array (Array,listArray)
import Data.Bits (shiftR)
-import Maybe (mapMaybe)
+import Data.Maybe (mapMaybe)
import Numeric (showHex)
@@ -190,7 +190,7 @@
isStringPtr p =
- p == 0 || (p >= hdrDecodingTbl && p < hdrExtStart && byteAt p `elem` [0xE0,0xE1])
+ p == 0 || (p >= hdrDecodingTbl && p < hdrExtStart && byteAt p `elem` [0xE0,0xE1,0xE2])
maybeStringAt 0 = Nothing
maybeStringAt addr = Just (evalFrom addr decodeString)
diff -rtu mrifk.orig/Mrifk_objects.hs mrifk/Mrifk_objects.hs
--- mrifk.orig/Mrifk_objects.hs 2004-01-31 18:36:30.000000000 +0300
+++ mrifk/Mrifk_objects.hs 2016-03-14 13:36:31.000000000 +0300
@@ -33,7 +33,7 @@
import Data.Array
import Data.Bits (testBit)
import Data.Tree
-import Maybe (fromJust)
+import Data.Maybe (fromJust)
-- name attrs prop# priv data
diff -rtu mrifk.orig/Mrifk_print.hs mrifk/Mrifk_print.hs
--- mrifk.orig/Mrifk_print.hs 2004-01-31 18:36:30.000000000 +0300
+++ mrifk/Mrifk_print.hs 2016-03-14 13:34:06.000000000 +0300
@@ -30,10 +30,10 @@
import Mrifk_strings
import Mrifk_util
-import Char (ord,isDigit)
+import Data.Char (ord,isDigit)
import Data.Array
-import Ix (inRange)
-import Maybe (fromMaybe)
+import Data.Ix (inRange)
+import Data.Maybe (fromMaybe)
import Numeric (showHex)
diff -rtu mrifk.orig/Mrifk_strings.hs mrifk/Mrifk_strings.hs
--- mrifk.orig/Mrifk_strings.hs 2004-01-31 18:36:30.000000000 +0300
+++ mrifk/Mrifk_strings.hs 2016-03-21 13:05:41.098560075 +0300
@@ -24,7 +24,7 @@
import Mrifk_storyfile
-import Char (chr)
+import Data.Char (chr)
import Data.Bits (testBit)
import Control.Monad.State (evalState)
@@ -99,6 +99,7 @@
case type_ of
0xE0 -> getCString
0xE1 -> huffDecode
+ 0xE2 -> getCString
getCString =
do x <- getUByte
diff -rtu mrifk.orig/Mrifk_util.hs mrifk/Mrifk_util.hs
--- mrifk.orig/Mrifk_util.hs 2004-01-31 18:36:30.000000000 +0300
+++ mrifk/Mrifk_util.hs 2016-03-14 13:34:33.000000000 +0300
@@ -24,7 +24,7 @@
) where
-import List (sortBy)
+import Data.List (sortBy)
onFst f (a,b) = (f a,b)
diff -rtu mrifk.orig/ReadBinary.hs mrifk/ReadBinary.hs
--- mrifk.orig/ReadBinary.hs 2004-01-31 18:36:30.000000000 +0300
+++ mrifk/ReadBinary.hs 2016-03-15 09:52:50.883079265 +0300
@@ -4,10 +4,11 @@
byteAt
) where
-import Foreign (unsafePerformIO,peekElemOff)
+import System.IO.Unsafe (unsafePerformIO)
+import Foreign (peekElemOff)
import Foreign.Marshal.Alloc (mallocBytes)
import Foreign.Ptr (Ptr,nullPtr)
-import Foreign.C.Types (CUChar,CInt,CLong,CSize,CFile)
+import Foreign.C.Types (CUChar,CInt(..),CLong(..),CSize(..),CFile)
import Foreign.C.String (CString,withCString)