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)