packages feed

spade-0.1.0.9: src/Interpreter/Initialize.hs

module Interpreter.Initialize where

import Prelude hiding (map)

import Compiler.Lexer
import Interpreter.Common
import Interpreter.Interpreter
import Interpreter.Lib.Math
import Interpreter.Lib.Misc
import Interpreter.Lib.String
import Interpreter.Lib.Concurrency
import Interpreter.Lib.SDL
import Interpreter.Lib.Crypto
import Interpreter.Lib.FileSystem

loadBuiltIns :: InterpretM ()
loadBuiltIns = do
  insertBuiltIn (SkOperator OpStar) multiplication
  insertBuiltIn (SkOperator OpPlus) addition
  insertBuiltIn (SkOperator OpMinus) substraction
  insertBuiltIn (SkOperator OpDivide) division
  insertBuiltIn (SkOperator OpEquality) (comparison (==))
  insertBuiltIn (SkOperator OpLT) (comparison (<))
  insertBuiltIn (SkOperator OpGT) (comparison (>))
  insertBuiltIn (SkOperator OpLTE) (comparison (<=))
  insertBuiltIn (SkOperator OpGTE) (comparison (>=))
  insertBuiltIn (SkOperator OpNotEquality) (comparison (/=))
  insertBuiltIn (SkOperator OpAnd) (boolean (&&))
  insertBuiltIn (SkOperator OpOr) (boolean (||))

  -- Containers
  insertBuiltInWithDoc (SkIdentifier $ Identifier "size") (SomeBuiltin valueSize)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "contains") (SomeBuiltin contains)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "haskey") (SomeBuiltin haskey)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "getkey") (SomeBuiltin getkey)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "addkey") (SomeBuiltin addkey)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "filter") (SomeBuiltin filter_)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "drop") (SomeBuiltin builtInDrop)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "take") (SomeBuiltin builtInTake)

  -- Time
  insertBuiltInWithDoc (SkIdentifier $ Identifier "timestamp") (SomeBuiltin builtInTimestamp)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "wait") (SomeBuiltin waitMillisec)

  -- Strings
  insertBuiltInWithDoc (SkIdentifier $ Identifier "decodeutf8") (SomeBuiltin builtInDecodeUTF8Bytes)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "encodeutf8") (SomeBuiltin builtInEncodeUTF8Bytes)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "concat") (SomeBuiltin builtInConcat)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "join") (SomeBuiltin builtInJoin)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "split") (SomeBuiltin builtInSplit)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "trim") (SomeBuiltin builtInTrim)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "formatamount") (SomeBuiltin builtInAmountFormat)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "replace") (SomeBuiltin builtInReplace)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "tolower") (SomeBuiltin builtInToLower)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "toupper") (SomeBuiltin builtInToUpper)

  -- Keyboard
  insertBuiltInWithDoc (SkIdentifier $ Identifier "waitforkey") (SomeBuiltin waitForKey)

  -- Files
  insertBuiltInWithDoc (SkIdentifier $ Identifier "mkdir") (SomeBuiltin builtInReadFile)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "readfile") (SomeBuiltin builtInReadFile)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "readtextfile") (SomeBuiltin builtInReadTextFile)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "writefile") (SomeBuiltin builtInWriteFile)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "opendir") (SomeBuiltin builtInOpenDir)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "getcurrentdir") (SomeBuiltin builtInGetCurrentDir)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "takefilename") (SomeBuiltin builtInTakeFilename)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "takedirectory") (SomeBuiltin builtInTakeDirectory)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "takeextension") (SomeBuiltin builtInTakeExtension)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "dropextension") (SomeBuiltin builtInDropExtension)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "takebasename") (SomeBuiltin builtInTakeBaseName)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "joinpaths") (SomeBuiltin builtInJoinPaths)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "openfilehandle") (SomeBuiltin builtInOpenFileHandle)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "readfilehandle") (SomeBuiltin builtInReadFileHandle)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "writefilehandle") (SomeBuiltin builtInWriteFileHandle)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "gethandlesize") (SomeBuiltin builtInGetFileSize)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "isfile") (SomeBuiltin builtInIsFile)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "isdirectory") (SomeBuiltin builtInIsDir)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "renamefile") (SomeBuiltin builtInRenameFile)

  -- Math
  insertBuiltInWithDoc (SkIdentifier $ Identifier "pow") (SomeBuiltin builtInPow)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "mod") (SomeBuiltin builtInMod)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "random") (SomeBuiltin builtInRandom)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "sin") (SomeBuiltin builtInSin)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "cos") (SomeBuiltin builtInCos)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "tan") (SomeBuiltin builtInTan)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "asin") (SomeBuiltin builtInASin)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "acos") (SomeBuiltin builtInACos)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "atan") (SomeBuiltin builtInATan)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "sum") (SomeBuiltin builtInSum)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "round") (SomeBuiltin builtInRound)

  -- List/Map
  insertBuiltInWithDoc (SkIdentifier $ Identifier "insertleft") (SomeBuiltin builtInArrayInsertLeft)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "insertright") (SomeBuiltin builtInArrayInsertRight)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "head") (SomeBuiltin builtInHead)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "repeat") (SomeBuiltin builtInRepeat)

  -- Misc
  insertBuiltInWithDoc (SkIdentifier $ Identifier "mkdir") (SomeBuiltin builtinCreateDirectory)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "exec") (SomeBuiltin builtinExec)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "log") (SomeBuiltin builtinConsoleLog)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "try") (SomeBuiltin builtInTry)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "error") (SomeBuiltin builtInError)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "iserror") (SomeBuiltin builtInIsError)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "jsondecode") (SomeBuiltin builtInJSONParse)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "jsonencode") (SomeBuiltin builtInJSONSerialize)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "hexencode") (SomeBuiltin builtinEncodeBytes)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "hexdecode") (SomeBuiltin builtinDecodeBytes)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "not") (SomeBuiltin not')
  insertBuiltInWithDoc (SkIdentifier $ Identifier "debug") (SomeBuiltin builtInDebug)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "inspect") (SomeBuiltin builtInInspect)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "println") (SomeBuiltin printValLn)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "print") (SomeBuiltin printVal)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "inputline") (SomeBuiltin builtinInputLine)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "stringtonum") (SomeBuiltin numberFromString)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "tostring") (SomeBuiltin builtInToString)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "csinit") (SomeBuiltin initCharScreen)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "csgoto") (SomeBuiltin charScreenGoto)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "csget") (SomeBuiltin charScreenGet)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "csmove") (SomeBuiltin charScreenMove)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "csprint") (SomeBuiltin charScreenPrint)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "csprintln") (SomeBuiltin charScreenPrintLn)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "csinputline") (SomeBuiltin charScreenInputLine)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "csclear") (SomeBuiltin charScreenClear)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "csclearline") (SomeBuiltin charScreenClearLine)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "csdraw") (SomeBuiltin charScreenDraw)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "csscreensize") (SomeBuiltin charGetDimensions)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "import") (SomeBuiltin builtinImport)

  -- Widgets
  insertBuiltInWithDoc (SkIdentifier $ Identifier "resizinglayout") (SomeBuiltin builtInLayoutWidget)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "layout") (SomeBuiltin builtInLayoutWidgetSimple)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "borderbox") (SomeBuiltin builtInBorderBox)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "text") (SomeBuiltin builtInTextContainerWidget)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "multilineinput") (SomeBuiltin builtInInputWidget)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "input") (SomeBuiltin builtInSingleLineInputWidget)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "label") (SomeBuiltin builtInTextLabelWidget)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "selector") (SomeBuiltin builtInSelectorWidget)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "button") (SomeBuiltin builtInButtonWidget)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "setoptions") (SomeBuiltin builtInSetOptions)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "getoptions") (SomeBuiltin builtInGetOptions)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "getselection") (SomeBuiltin builtInGetSelection)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "attach") (SomeBuiltin builtInAddWidget)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "attachat") (SomeBuiltin builtInAddWidgetAt)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "handle") (SomeBuiltin builtInHandleInput)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "draw") (SomeBuiltin builtInDrawWidget)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "setsize") (SomeBuiltin builtInSetWidgetSize)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "settext") (SomeBuiltin builtInSetTextWidgetContent)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "setfocus") (SomeBuiltin builtInSetFocus)

  -- SDL Sound
  insertBuiltInWithDoc (SkIdentifier $ Identifier "maketone") (SomeBuiltin builtInMakeTone)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "makesound") (SomeBuiltin builtInMakeSoundSample)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "loadsound") (SomeBuiltin builtInMakeSoundSampleFromFile)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "playsound") (SomeBuiltin builtInPlaySoundSample)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "setvolume") (SomeBuiltin builtInSetSampleVolume)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "setvolumelr") (SomeBuiltin builtInSetSampleLRVolume)

  -- SDL Graphics
  insertBuiltInWithDoc (SkIdentifier $ Identifier "graphicswindow") (SomeBuiltin createGraphicsWindow)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "graphics") (SomeBuiltin createGraphicsFullscreen)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "point") (SomeBuiltin drawPoint)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "points") (SomeBuiltin drawPoints)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "line") (SomeBuiltin drawLine)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "lines") (SomeBuiltin drawLines)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "arc") (SomeBuiltin drawArc)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "circle") (SomeBuiltin drawCircle)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "smoothcircle") (SomeBuiltin drawSmoothCircle)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "ellipse") (SomeBuiltin drawEllipse)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "smoothellipse") (SomeBuiltin drawSmoothEllipse)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "pie") (SomeBuiltin drawPie)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "polygon") (SomeBuiltin drawPoly)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "smoothpolygon") (SomeBuiltin drawPolySmooth)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "box") (SomeBuiltin drawBox)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "render") (SomeBuiltin draw)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "setcolor") (SomeBuiltin setDrawColor)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "setbgcolor") (SomeBuiltin setBgColor)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "setcolora") (SomeBuiltin setDrawColorAlpha)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "clearscreen") (SomeBuiltin clear)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "getwindowsize") (SomeBuiltin getWindowSize)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "setlogicalsize") (SomeBuiltin setLogicalSize)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "loadtexture") (SomeBuiltin loadTexture)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "destroytexture") (SomeBuiltin destroyTexture)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "copytexture") (SomeBuiltin copyTexture)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "copytexturepart") (SomeBuiltin copyTexturePart)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "copytexturerotated") (SomeBuiltin copyTextureRotated)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "textureinfo") (SomeBuiltin textureInfo)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "texttotexture") (SomeBuiltin createTextTexture)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "drawtextat") (SomeBuiltin drawTextAt)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "drawtextrotatedat") (SomeBuiltin drawTextAtRotated)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "setfont") (SomeBuiltin setFont)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "loadfont") (SomeBuiltin loadFont)

  -- SDL Keyboard
  insertBuiltInWithDoc (SkIdentifier $ Identifier "getkeypresses") (SomeBuiltin getKeys)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "gwaitforkey") (SomeBuiltin waitForSDLKey)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "getkeystate") (SomeBuiltin getKeyboardState)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "inkeystate") (SomeBuiltin wasKeyDownIn)

  --  Concurrency
  insertBuiltInWithDoc (SkIdentifier $ Identifier "startthread") (SomeBuiltin builtInLaunchThread)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "killthread") (SomeBuiltin builtInKillThread)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "await") (SomeBuiltin builtInAwait)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "awaitresult") (SomeBuiltin builtInAwaitResult)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "newchannel") (SomeBuiltin builtInNewChannel)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "writechannel") (SomeBuiltin builtInWriteChannel)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "readchannel") (SomeBuiltin builtInReadChannel)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "newref") (SomeBuiltin builtInNewRef)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "readref") (SomeBuiltin builtInReadRef)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "writeref") (SomeBuiltin builtInWriteRef)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "modifyref") (SomeBuiltin builtInModifyRef)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "next") (SomeBuiltin builtInGeneratorNext)

  -- Crypto
  insertBuiltInWithDoc (SkIdentifier $ Identifier "hash") (SomeBuiltin builtInHash)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "hashinit") (SomeBuiltin builtInHashInit)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "hashupdate") (SomeBuiltin builtInHashUpdate)
  insertBuiltInWithDoc (SkIdentifier $ Identifier "hashfinalize") (SomeBuiltin builtInHashFinalize)

  -- Constants
  insertBuiltInVal (SkIdentifier $ Identifier "keycodes") keycodes
  insertBuiltInVal (SkIdentifier $ Identifier "scancodes") scancodes