isbpl/std.isbpl

288 lines
4.4 KiB
Text
Raw Normal View History

native alen
native aget
native aput
native anew
native _array
2022-02-05 21:20:51 +01:00
func __array {
"NotImplemented" "Not implemented" throw
}
native _char
native _int
native _file
native _float
native _long
native _double
2022-02-05 21:20:51 +01:00
func __char {
_char
}
func __int {
_int
}
func __file {
_file
}
native __float
2022-02-05 21:20:51 +01:00
func __long {
_long
}
native __double
2022-02-05 21:20:51 +01:00
native ischar
native isint
native isfloat
native islong
native isdouble
2022-02-05 21:20:51 +01:00
2022-02-23 17:18:26 +01:00
# "call a dynamically computed function" pop
# "Please keep in mind that this will throw a native error if" pop
# "called incorrectly - this means wrong layer parameter will" pop
# "instantly crash the program." pop
2022-02-23 17:20:09 +01:00
native _layer_call
2022-02-23 17:18:26 +01:00
func call {
0 _layer_call
}
native include
native putchar
native read
native flength
native write
native type
native mktype
native typename
native istype
native settype
2022-02-05 21:20:51 +01:00
# try and catch are keywords, not functions
native throw
2022-02-05 21:43:10 +01:00
# storelength
native stlen
2022-02-05 21:20:51 +01:00
native eq
native gt
native lt
native not
native or
native and
native +
native -
native /
native *
native **
native %
native ^
native dup
native pop
native swap
2022-02-05 22:20:21 +01:00
2022-02-05 21:20:51 +01:00
"char" mktype =TYPE_CHAR
"int" mktype =TYPE_INT
"file" mktype =TYPE_FILE
"float" mktype =TYPE_FLOAT
"long" mktype =TYPE_LONG
"double" mktype =TYPE_DOUBLE
"array" mktype =TYPE_ARRAY
"string" mktype =TYPE_STRING
func _string {
=object
object ischar if {
2022-02-05 21:43:10 +01:00
0 _char 1 anew =object
2022-02-05 21:20:51 +01:00
}
object isint if {
itos =object
}
object isfloat if {
ftoi =object
}
object islong if {
ltoi =object
}
object isdouble if {
dtoi =object
}
object
}
func __string {
_string
}
func isstring {
isarray
}
func itos {
ntos
}
func ltos {
ntos
}
func ftos {
ntos
}
func dtos {
ntos
}
2022-02-05 21:43:10 +01:00
# Number to string
2022-02-05 21:20:51 +01:00
func ntos {
"" =s
=n
2022-02-05 22:16:59 +01:00
n 0 lt dup if { n neg =n 1 =negative } =negative
2022-02-05 21:20:51 +01:00
n type =thetype
2022-02-05 22:16:59 +01:00
while n 1 lt not {
2022-02-05 21:20:51 +01:00
n (n 10 % dup =x) - =n
s (n '0' + _char) strconcat =s
}
2022-02-05 22:16:59 +01:00
1 =steps
while n 0 eq not {
n (n (1 (steps dup 10 * =steps) /) % dup =x) - =n
s (x '0' + _char) strconcat =s
}
negative if { "-" s strconcat =s }
2022-02-05 21:20:51 +01:00
s
}
2022-02-05 21:43:10 +01:00
# Copy array
2022-02-05 21:20:51 +01:00
func acopy {
# bind args
=len
=idx2
=idx1
=arr2
=arr1
2022-02-05 22:35:14 +01:00
1 neg =i
while (i 1 + =i) (i len lt) {
2022-02-05 21:20:51 +01:00
arr2 i idx2 + (arr1 i idx1 + aget) aput
}
}
func strconcat {
# bind args
_string =str2
_string =str1
0 _char str1 alen str2 alen + anew =str
2022-02-05 21:43:10 +01:00
str1 str 0 0 str1 alen acopy
str2 str 0 str1 alen str2 alen acopy
2022-02-05 21:20:51 +01:00
str
}
func strsplit {
# bind args
_string =splitter
_string =str
2022-02-05 21:20:51 +01:00
2022-02-05 22:35:14 +01:00
1 neg =i
2022-02-05 21:43:10 +01:00
"" 0 anew =sequences
2022-02-05 23:16:53 +01:00
"" =sequence
while (i 1 + =i) (i str alen lt) {
2022-02-05 21:20:51 +01:00
str i aget =chr
splitter 0 aget =spl
2022-02-05 23:16:53 +01:00
sequence chr strconcat =sequence
2022-02-05 22:35:14 +01:00
1 neg =j
while (j 1 + =j) (chr spl eq) {
2022-02-05 23:16:53 +01:00
j splitter alen eq if {
2022-02-05 21:20:51 +01:00
sequences =oldsq
2022-02-05 22:35:14 +01:00
"" (sequences alen dup =seq 1 +) anew =sequences
2022-02-05 21:20:51 +01:00
oldsq sequences 0 0 oldsq alen acopy
2022-02-05 22:35:14 +01:00
sequences seq sequence aput
2022-02-05 23:16:53 +01:00
"" =sequence
2 stop
2022-02-05 22:35:14 +01:00
}
2022-02-05 23:16:53 +01:00
str i j + aget dup =chr
splitter j aget dup =spl
2022-02-05 21:20:51 +01:00
}
}
2022-02-05 22:35:14 +01:00
sequences
2022-02-05 21:20:51 +01:00
}
func strjoin {
# bind args
_string =joiner
_array =arr
1 neg =i
"" =s
while (i 1 + =i) (i arr alen lt) {
s arr i aget joiner strconcat strconcat =s
}
s
}
func strsub {
# bind args
_int =pos2
_int =pos1
_string =string
pos2 pos1 - =length
(o _char length anew dup) string swap pos1 0 length acopy
}
2022-02-05 21:20:51 +01:00
func puts {
_string =str
2022-02-05 22:35:14 +01:00
1 neg =i
while (i 1 + =i) (i str alen lt) {
2022-02-05 21:20:51 +01:00
str i aget putchar
}
}
2022-02-23 17:18:26 +01:00
func anewput {
def size =size
def arr size anew =arr
def i 0 =i
while i size lt {
arr swap i swap aput
i 1 + =i
}
arr areverse
}
func areverse {
def arr =arr
def new arr alen anew =new
def i arr alen 1 - =i
def j 0 =j
while i 0 lt not {
new j arr i aget aput
j 1 + =j
i 1 - =i
}
new
}
func inc {
def varname =varname
( varname 1 _layer_call ) # "Get var" pop
1 + # "Increment" pop
( "=" varname strconcat 1 _layer_call ) # "Store var" pop
}
func dec {
def varname =varname
( varname 1 _layer_call ) # "Get var" pop
1 - # "Decrement" pop
( "=" varname strconcat 1 _layer_call ) # "Store var" pop
}