diff --git a/stdlib/filesys.go b/stdlib/filesys.go new file mode 100644 index 0000000..67da663 --- /dev/null +++ b/stdlib/filesys.go @@ -0,0 +1,38 @@ +/* SHS: Syntactically Homogeneous Shell + * Copyright (C) 2019 Aidan Hahn + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +package stdlib + +import ( + "os" + "gitlab.com/whom/shs/ast" + "gitlab.com/whom/shs/log" +) + +func cd(in *ast.Token, vt ast.VarTable, ft ast.FuncTable) *ast.Token { + in = in.Eval(ft, vt) + if in.Tag == ast.LIST { + log.Log(log.ERR, "Couldnt change dir to a list", "cd") + return nil + } + + err := os.Chdir(in.Value()) + if err != nil { + log.Log(log.ERR, err.Error(), "cd") + } + return nil +} diff --git a/stdlib/stdlib.go b/stdlib/stdlib.go index 4e53d01..6c71e90 100644 --- a/stdlib/stdlib.go +++ b/stdlib/stdlib.go @@ -123,6 +123,12 @@ func GenFuncTable() ast.FuncTable { Args: -1, }, + "cd": &ast.Function{ + Function: cd, + Name: "changedir", + TimesCalled: 0, + Args: 1, + }, } return stdlib