FITNBSMMJCQIFJGUMVSZYHJM4OSBXEZO5YWYEJ4CXGMFPBSIT5WAC PXI442CY2KQHHAIJ3UNCWKTAI4IFYNGYEBRQMDR6T53YZTY2VMMQC UW27LKXM2BJ77FQLTY4WPKDSSWI2RFNFRJ7CB4U3TS7KYVIV72LQC VEMUXGMKKVS2DJSA2ICYDEWLC7SII4XEWVCSD676CHLSNQLUOZ5AC VSQGRPJ7PDH3MOC7GFVX5YONUZTLFRXU2O6CFT5MRGBGOO7PO6GAC JDZASPALXSFZOL3MXCKBPX74CUD3W743ZJ6W2422FIJ7NJOD67ZAC 5XO7IKBGCVXGVWMDJDE5MELS4FWRITKAU6NNV36NQ4TOZRR7UQ7QC A2JAXDJWT2FAKADYOY6QOQ7LQRMTTCDIOYT7STSESVHLZQEQJBMAC f=$(mktemp)lisp_eval_should_be "(progn (with-output-to \">\" \"${f}\" (print \"foo\") (print 3) (fflush)) (close \"${f}\"))" '()' 'with-output-to print close'lisp_eval_should_be "(with-input-from \"<\" \"${f}\" (print (getline)) (print (getline)))" '(""foo"" 1)("3" 1)()' 'with-input-from getline'
print _repr(x)
if(_OUTPUT_REDIR_NAME) {if(_OUTPUT_REDIR_KIND == ">") {print _repr(x) > _OUTPUT_REDIR_NAME_OUTPUT_REDIR_KIND = ">>"} else if(_OUTPUT_REDIR_KIND == ">>") {print _repr(x) >> _OUTPUT_REDIR_NAME} else if(_OUTPUT_REDIR_KIND == "|") {print _repr(x) | _OUTPUT_REDIR_NAME}} else {print _repr(x)}
else if(car == _symbol("with-input-from"))return _with_input_from(_eval3(_cadr(form), env, env, d+1),_eval3(_caddr(form), env, env, d+1),_cdddr(form), env, d+1) # to be evproggedelse if(car == _symbol("fflush"))return _fflush()else if(car == _symbol("close"))return _close(_eval3(_cadr(form), env, env, d+1))
return _nil()}}function _with_rs(new_rs, forms, env, d, old_rs, rv) {old_rs = RSif(_TYPE[new_rs] == "s") {RS = _STRING[new_rs]rv = _evprog(forms, env, env, d)RS = old_rsreturn rv} else {logg_err("_with_rs", "with-rs needs a string")return _nil()}}function _with_fs(new_fs, forms, env, d, old_fs, rv) {old_fs = FSif(_TYPE[new_fs] == "s") {FS = _STRING[new_fs]rv = _evprog(forms, env, env, d)FS = old_fsreturn rv} else {logg_err("_with_fs", "with-fs needs a string")
return _nil()}}# same as above. every function that consumes input, check these# globals. they are only set within the body of with-output-to. note:# (with-input-from "|" "echo foo" (getline)) in glotawk corresponds# with "echo foo" | getline in awk.function _with_input_from(redir_kind, name, forms, env, d, old_redir_kind, old_name, rv) {old_redir_kind = _INPUT_REDIR_KINDold_name = _INPUT_NAMEif(_TYPE[redir_kind] == "s") {if(_TYPE[name] == "s") {_INPUT_REDIR_KIND = _STRING[redir_kind]_INPUT_REDIR_NAME = _STRING[name]rv = _evprog(forms, env, env, d)_INPUT_REDIR_KIND = old_redir_kind_INPUT_REDIR_NAME = old_namereturn rv} else {logg_err("_with_input_from", "file or command should be a string")return _nil()}} else {logg_err("_with_input_from", "redir kind should be a string: \"<\" or \"|\"")