37 lines
1.0 KiB
Nim
37 lines
1.0 KiB
Nim
import ../types/value
|
|
import ../types/native
|
|
import ../types/ndstring
|
|
import bitops
|
|
|
|
proc natChar(args: seq[NdValue], retval: var NdValue): NatReturn =
|
|
if args.len() != 1:
|
|
return natError("Char expects 1 argument.")
|
|
let arg = args[0]
|
|
if not arg.isFloat():
|
|
return natError("Char expects a number.")
|
|
let floatval = arg.asFloat()
|
|
if floatval > 255f or floatval < 0f:
|
|
return natError("Char got a number out of range.")
|
|
let chr = floatval.char()
|
|
retval = (chr).newString().fromNdString()
|
|
return natOk
|
|
|
|
proc natByte(args: seq[NdValue], retval: var NdValue): NatReturn =
|
|
if args.len() != 1:
|
|
return natError("Byte expects 1 argument.")
|
|
let arg = args[0]
|
|
if not arg.isString():
|
|
return natError("Byte expects a string.")
|
|
if arg.asString().getLength() != 1:
|
|
return natError("Byte expects a single character string.")
|
|
|
|
let byt = arg.asString().getIndexAsChar(0).float()
|
|
retval = byt.fromFloat()
|
|
return natOk
|
|
|
|
|
|
proc constructTypeutils* =
|
|
defNative("char", natChar)
|
|
defNative("byte", natByte)
|
|
|