packages feed

Fungi 1.0.1 → 1.0.2

raw patch · 7 files changed

+133/−60 lines, 7 files

Files

Fingerprint.hs view
@@ -1,5 +1,6 @@ module Fingerprint (-    fingerprints+    Fingerprints+  , fingerprints   ) where  import Data.Char (ord)@@ -14,6 +15,7 @@ import qualified Fingerprint.BOOL as BOOL import qualified Fingerprint.CPLI as CPLI import qualified Fingerprint.FIXP as FIXP+import qualified Fingerprint.HRTI as HRTI import qualified Fingerprint.MODE as MODE import qualified Fingerprint.MODU as MODU import qualified Fingerprint.NULL as NULL@@ -40,6 +42,7 @@   , (BOOL.name, BOOL.semantics)   , (CPLI.name, CPLI.semantics)   , (FIXP.name, FIXP.semantics)+  , (HRTI.name, HRTI.semantics)   , (MODE.name, MODE.semantics)   , (MODU.name, MODU.semantics)   , (NULL.name, NULL.semantics)
+ Fingerprint/HRTI.hs view
@@ -0,0 +1,64 @@+module Fingerprint.HRTI (+    name+  , semantics+  ) where++import Control.Monad.State.Strict++import System.Time++import Env+import Instruction+import Ip++-----------------------------------------------------------++name :: String+name = "HRTI"++semantics :: (I i) => [(Char, Instruction i ())]+semantics = [+    ('G', gInstr)+  , ('M', mInstr)+  , ('T', tInstr)+  , ('E', eInstr)+  , ('S', sInstr)+  ]++ten6 :: Integer+ten6 = 10 ^ (6 :: Integer)++diffMicro :: (I i) => ClockTime -> ClockTime -> i+diffMicro x = fromInteger . (`div` ten6) . tdPicosec . diffClockTimes x++gInstr :: (I i) => Instruction i ()+gInstr = do+  t <- liftIO $ do+    _ <- getClockTime+    x <- getClockTime+    y <- getClockTime+    return $ diffMicro y x+  pushInstr t++mInstr :: (I i) => Instruction i ()+mInstr = do+  t <- liftIO getClockTime+  modify $ withIp $ \ip -> ip { hrtiMark = Just t }++tInstr :: (I i) => Instruction i ()+tInstr = do+  ip <- gets currentIp+  case hrtiMark ip of+    Nothing -> reverseInstr+    Just t -> do+      t' <- liftIO getClockTime+      pushInstr $ diffMicro t' t++eInstr :: (I i) => Instruction i ()+eInstr = modify $ withIp $ \ip -> ip { hrtiMark = Nothing }++sInstr :: (I i) => Instruction i ()+sInstr = do+  pico <- liftIO $ liftM ctPicosec $ getClockTime >>= toCalendarTime+  pushInstr $ fromInteger $ pico `div` ten6+
Fungi.cabal view
@@ -7,7 +7,7 @@ -- The package version. See the Haskell package versioning policy -- (http://www.haskell.org/haskellwiki/Package_versioning_policy) for -- standards guiding when and how versions should be incremented.-Version:             	1.0.1+Version:             	1.0.2  -- A short (one-line) description of the package. Synopsis:            	An interpreter for Funge-98 programming languages, including Befunge.@@ -60,48 +60,49 @@    -- Modules not exported by this package. Other-modules:-	  Data.ByteSize-	, Data.Deque-	, Data.History-	, Data.I-	, Data.IntegralLike-	, Data.Labeled-	, Data.LogicalBits-	, Data.MaybeBounded-	, Data.Stack-	, Data.Vector-	, Debug.Debug-	, Debug.Debugger-	, Env-	, Fingerprint-	, Fingerprint.BASE-	, Fingerprint.BOOL-	, Fingerprint.CPLI-	, Fingerprint.FIXP-	, Fingerprint.MODE-	, Fingerprint.MODU-	, Fingerprint.NULL-	, Fingerprint.ORTH-	, Fingerprint.REFC-	, Fingerprint.ROMA-	, Fungi-	, Instruction-	, Interpreter-	, Ip-	, Math-	, Mode-	, ProcessArgs-	, Random-	, Semantics-	, Space.Cell-	, Space.Space-	, System.IO.Buffering-	, Text.Help.Debug-	, Text.Help.Fungi-	, Text.PrettyShow-	, Text.PrintOption-	, UnknownInstruction-	, Version+	Data.ByteSize+	Data.Deque+	Data.History+	Data.I+	Data.IntegralLike+	Data.Labeled+	Data.LogicalBits+	Data.MaybeBounded+	Data.Stack+	Data.Vector+	Debug.Debug+	Debug.Debugger+	Env+	Fingerprint+	Fingerprint.BASE+	Fingerprint.BOOL+	Fingerprint.CPLI+	Fingerprint.FIXP+	Fingerprint.HRTI+	Fingerprint.MODE+	Fingerprint.MODU+	Fingerprint.NULL+	Fingerprint.ORTH+	Fingerprint.REFC+	Fingerprint.ROMA+	Fungi+	Instruction+	Interpreter+	Ip+	Math+	Mode+	ProcessArgs+	Random+	Semantics+	Space.Cell+	Space.Space+	System.IO.Buffering+	Text.Help.Debug+	Text.Help.Fungi+	Text.PrettyShow+	Text.PrintOption+	UnknownInstruction+	Version    -- Extra tools (e.g. alex, hsc2hs, ...) needed to build the source. -- Build-tools:         
Ip.hs view
@@ -9,7 +9,9 @@   , isAlive   , getStorageOffset   , getSemantics+  , hrtiMark +   , testMode   , addMode   , removeMode@@ -34,6 +36,8 @@ import Data.Stack import Data.Vector +import System.Time (ClockTime)+ import Text.PrettyShow  import Mode@@ -52,6 +56,7 @@   , getStorageOffset :: !(Vector i)   , getSemantics :: Semantics env i   , modes :: Set Mode+  , hrtiMark :: Maybe ClockTime   }  instance (PrettyShow i) => PrettyShow (Ip env i) where@@ -78,6 +83,7 @@   , getStorageOffset = takeV dim 0   , getSemantics = mkSemantics baseSemantics   , modes = Set.empty+  , hrtiMark = Nothing   }  testMode :: Mode -> Ip env i -> Bool
Main.hs view
@@ -1,4 +1,5 @@ module Main (+    main   )   where 
Text/Help/Fungi.hs view
@@ -3,9 +3,10 @@   ) where  import Data.ByteSize (byteSize)-import Data.Char (toLower)+import Data.Char (chr, toLower) import Data.Int import Data.List (sort, intercalate, nub)+import qualified Data.Map as Map import Data.Maybe (fromMaybe)  import System.Environment (getProgName)@@ -13,6 +14,8 @@  import Text.PrintOption +import Fingerprint+ -----------------------------------------------------------  p :: Char -> String -> String -> IO ()@@ -31,19 +34,14 @@   , byteSize (0 :: Int64)   ] -fingerprints :: String-fingerprints = intercalate ", " $ sort [-    "BASE"-  , "BOOL"-  , "CPLI"-  , "FIXP"-  , "MODE"-  , "MODU"-  , "NULL"-  , "ORTH"-  , "REFC"-  , "ROMA"-  ]+fingers :: String+fingers = intercalate ", " $ sort $ map (reverse . decode) $ Map.keys (fingerprints :: Fingerprints Integer)+  where+    decode x = if x == 0+      then ""+      else chr (fromInteger m) : decode d+      where+        (d, m) = x `divMod` 256  line :: IO () line = putStrLn $ replicate 80 '-'@@ -85,6 +83,6 @@     , "\nDefault is reverse."     ]   line-  p ' ' "FINGERPRINTS--" fingerprints+  p ' ' "FINGERPRINTS--" fingers   line 
Version.hs view
@@ -9,5 +9,5 @@ handprint = 378447798  version :: String-version = "1.0.1"+version = "1.0.2"