Fungi 1.0.1 → 1.0.2
raw patch · 7 files changed
+133/−60 lines, 7 files
Files
- Fingerprint.hs +4/−1
- Fingerprint/HRTI.hs +64/−0
- Fungi.cabal +44/−43
- Ip.hs +6/−0
- Main.hs +1/−0
- Text/Help/Fungi.hs +13/−15
- Version.hs +1/−1
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"