all repos — min @ 638cb7ac58499c87dcd1a0d232e68bb831f90a48

A small but practical concatenative programming language.

lib/min_sys.nim

 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
import tables, os, osproc, strutils
import 
  ../core/types,
  ../core/parser, 
  ../core/interpreter, 
  ../core/utils

  # OS
  

proc sys_module*(i: In)=
  i.define("sys")
  
    .symbol("pwd") do (i: In):
      i.push newVal(getCurrentDir())
    
    .symbol("cd") do (i: In):
      var f: MinValue
      i.reqString f
      f.strVal.setCurrentDir
    
    .symbol("ls") do (i: In):
      var a: MinValue
      i.reqString a
      var list = newSeq[MinValue](0)
      for i in walkDir(a.strVal):
        list.add newVal(i.path)
      i.push list.newVal
    
    .symbol("ls-r") do (i: In):
      var a: MinValue
      i.reqString a
      var list = newSeq[MinValue](0)
      for i in walkDirRec(a.strVal):
        list.add newVal(i)
      i.push list.newVal
  
    .symbol("system") do (i: In):
      var a: MinValue
      i.reqString a
      i.push execShellCmd(a.strVal).newVal
    
    .symbol("run") do (i: In):
      var a: MinValue
      i.reqString a
      let words = a.strVal.split(" ")
      let cmd = words[0]
      var args = newSeq[string](0)
      if words.len > 1:
        args = words[1..words.len-1]
      i.push execProcess(cmd, args, nil, {poUsePath}).newVal
    
    .symbol("getenv") do (i: In):
      var a: MinValue
      i.reqString a
      i.push a.strVal.getEnv.newVal
    
    .symbol("putenv") do (i: In):
      var key, value: MinValue
      i.reqTwoStrings key, value
      key.strVal.putEnv value.strVal
    
    .symbol("os") do (i: In):
      i.push hostOS.newVal
    
    .symbol("cpu") do (i: In):
      i.push hostCPU.newVal
    
    .symbol("file?") do (i: In):
      var f: MinValue
      i.reqString f
      i.push f.strVal.fileExists.newVal
    
    .symbol("dir?") do (i: In):
      var f: MinValue
      i.reqString f
      i.push f.strVal.dirExists.newVal
    
    .symbol("rm") do (i: In):
      var f: MinValue
      i.reqString f
      f.strVal.removeFile
    
    .symbol("cp") do (i: In):
      var a, b: MinValue
      i.reqTwoStrings a, b
      copyFile b.strVal, a.strVal
    
    .symbol("mv") do (i: In):
      var a, b: MinValue
      i.reqTwoStrings a, b
      moveFile b.strVal, a.strVal
    
    .symbol("rmdir") do (i: In):
      var f: MinValue
      i.reqString f
      f.strVal.removeDir
    
    .symbol("mkdir") do (i: In):
      var f: MinValue
      i.reqString f
      f.strVal.createDir
  
     .symbol("sleep") do (i: In):
       var ms: MinValue
       i.reqInt ms
       sleep ms.intVal.int
  
    .finalize()