diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2013-12-10 08:07:33 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2013-12-10 08:07:33 -0800 |
commit | b698bb706067d911c62385b477684efea6aa983a (patch) | |
tree | 09596eeefba83198a549c01d22497a07bc8d97d3 | |
parent | 434ea4f4ce65a553205f4030a6b98268ff938f0f (diff) | |
download | txr-b698bb706067d911c62385b477684efea6aa983a.tar.gz txr-b698bb706067d911c62385b477684efea6aa983a.tar.bz2 txr-b698bb706067d911c62385b477684efea6aa983a.zip |
syslog support; bitwise logior and logand functions become variadic.
* Makefile: Use -iquote to restrict our #include search paths from
being processed for #include <...>. Add syslog.o to OBJS-y if
have_syslog is y.
* configure (have_syslog): New variable, set by detecting syslog API.
* eval.c (eval_init): logand and logior registrations changed to
go to variadic versions. New syslog variables and functions registered.
* lib.c (logandv, logiorv): New functions.
* lib.h (logandv, logiorv): Declared.
* txr.c (main): Call syslog_init.
* syslog.c: New file.
* syslog.h: New file.
* txr.1: Updated.
* txr.vim: Regenerated.
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | arith.c | 13 | ||||
-rw-r--r-- | eval.c | 13 | ||||
-rw-r--r-- | lib.h | 1 | ||||
-rw-r--r-- | stream.c | 21 | ||||
-rw-r--r-- | stream.h | 21 | ||||
-rw-r--r-- | syslog.c | 120 | ||||
-rw-r--r-- | syslog.h | 5 | ||||
-rw-r--r-- | txr.1 | 144 | ||||
-rw-r--r-- | txr.vim | 168 |
10 files changed, 406 insertions, 109 deletions
@@ -2,8 +2,9 @@ syslog support; bitwise logior and logand functions become variadic. - * Makefile: Use -iquote to restrict our #include search paths from being - processed for #include <...>. Add syslog.o to OBJS-y if have_syslog is y. + * Makefile: Use -iquote to restrict our #include search paths from + being processed for #include <...>. Add syslog.o to OBJS-y if + have_syslog is y. * configure (have_syslog): New variable, set by detecting syslog API. @@ -20,6 +21,10 @@ * syslog.h: New file. + * txr.1: Updated. + + * txr.vim: Regenerated. + 2013-12-07 Kaz Kylheku <kaz@kylheku.com> Version 71 @@ -1803,6 +1803,19 @@ bad3: uw_throwf(error_s, lit("ashift: non-integral operand ~s"), a, nao); } +val maskv(val bits) +{ + val accum = zero; + + for (; bits; bits = cdr(bits)) { + val num = car(bits); + val mask = ash(one, num); + accum = logior(accum, mask); + } + + return accum; +} + void arith_init(void) { mp_init(&NUM_MAX_MP); @@ -36,6 +36,9 @@ #ifdef HAVE_UNISTD_H #include <unistd.h> #endif +#ifdef HAVE_SYSLOG +#include <syslog.h> +#endif #include "lib.h" #include "gc.h" #include "unwind.h" @@ -48,7 +51,9 @@ #include "rand.h" #include "filter.h" #include "txr.h" +#ifdef HAVE_SYSLOG #include "syslog.h" +#endif #include "eval.h" typedef val (*opfun_t)(val, val); @@ -2307,6 +2312,7 @@ void eval_init(void) reg_fun(intern(lit("lognot"), user_package), func_n2o(lognot, 1)); reg_fun(intern(lit("logtrunc"), user_package), func_n2(logtrunc)); reg_fun(intern(lit("ash"), user_package), func_n2(ash)); + reg_fun(intern(lit("mask"), user_package), func_n0v(maskv)); reg_fun(intern(lit("regex-compile"), user_package), func_n2o(regex_compile, 1)); reg_fun(intern(lit("regexp"), user_package), func_n1(regexp)); @@ -2354,6 +2360,9 @@ void eval_init(void) reg_var(intern(lit("*stdin*"), user_package), &std_input); reg_var(intern(lit("*stderr*"), user_package), &std_error); reg_var(intern(lit("*stdnull*"), user_package), &std_null); +#ifdef HAVE_SYSLOG + reg_var(intern(lit("*stdlog*"), user_package), &std_log); +#endif reg_fun(intern(lit("format"), user_package), func_n2v(formatv)); reg_fun(intern(lit("print"), user_package), func_n2o(obj_print, 1)); reg_fun(intern(lit("pprint"), user_package), func_n2o(obj_pprint, 1)); @@ -2560,15 +2569,15 @@ void eval_init(void) reg_fun(intern(lit("errno"), user_package), func_n1o(errno_wrap, 0)); reg_fun(intern(lit("daemon"), user_package), func_n2(daemon_wrap)); - reg_var(intern(lit("s-ixoth"), user_package), &s_ixoth); - #if HAVE_SYSLOG reg_var(intern(lit("log-pid"), user_package), &log_pid_v); reg_var(intern(lit("log-cons"), user_package), &log_cons_v); reg_var(intern(lit("log-ndelay"), user_package), &log_ndelay_v); reg_var(intern(lit("log-odelay"), user_package), &log_odelay_v); reg_var(intern(lit("log-nowait"), user_package), &log_nowait_v); +#ifdef LOG_PERROR reg_var(intern(lit("log-perror"), user_package), &log_perror_v); +#endif reg_var(intern(lit("log-user"), user_package), &log_user_v); reg_var(intern(lit("log-daemon"), user_package), &log_daemon_v); reg_var(intern(lit("log-auth"), user_package), &log_auth_v); @@ -490,6 +490,7 @@ val logtest(val, val); val lognot(val, val); val logtrunc(val a, val bits); val ash(val a, val bits); +val maskv(val bits); val string_own(wchar_t *str); val string(const wchar_t *str); val string_utf8(const char *str); @@ -65,27 +65,6 @@ val s_ifchr, s_ififo, s_isuid, s_isgid, s_isvtx, s_irwxu; val s_irusr, s_iwusr, s_ixusr, s_irwxg, s_irgrp, s_iwgrp; val s_ixgrp, s_irwxo, s_iroth, s_iwoth, s_ixoth; -enum strm_whence { - strm_start = SEEK_SET, - strm_cur = SEEK_CUR, - strm_end = SEEK_SET -}; - -struct strm_ops { - struct cobj_ops cobj_ops; - val (*put_string)(val, val); - val (*put_char)(val, val); - val (*put_byte)(val, int); - val (*get_line)(val); - val (*get_char)(val); - val (*get_byte)(val); - val (*close)(val, val); - val (*flush)(val); - val (*seek)(val, cnum, enum strm_whence); - val (*get_prop)(val, val ind); - val (*set_prop)(val, val ind, val); -}; - static void common_destroy(val obj) { (void) close_stream(obj, nil); @@ -24,6 +24,27 @@ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ +enum strm_whence { + strm_start = SEEK_SET, + strm_cur = SEEK_CUR, + strm_end = SEEK_SET +}; + +struct strm_ops { + struct cobj_ops cobj_ops; + val (*put_string)(val, val); + val (*put_char)(val, val); + val (*put_byte)(val, int); + val (*get_line)(val); + val (*get_char)(val); + val (*get_byte)(val); + val (*close)(val, val); + val (*flush)(val); + val (*seek)(val, cnum, enum strm_whence); + val (*get_prop)(val, val ind); + val (*set_prop)(val, val ind, val); +}; + extern val std_input, std_output, std_debug, std_error, std_null; extern val output_produced; @@ -49,15 +49,23 @@ val log_user_v, log_daemon_v, log_auth_v; val log_emerg_v, log_alert_v, log_crit_v, log_err_v; val log_warning_v, log_notice_v, log_info_v, log_debug_v; +val prio_k; + +val std_log; + void syslog_init(void) { + prot1(&std_log); + log_pid_v = num(LOG_PID); log_cons_v = num(LOG_CONS); log_ndelay_v = num(LOG_NDELAY); log_odelay_v = num(LOG_ODELAY); log_nowait_v = num(LOG_NOWAIT); +#ifdef LOG_PERROR log_perror_v = num(LOG_PERROR); +#endif log_user_v = num(LOG_USER); log_daemon_v = num(LOG_DAEMON); @@ -71,6 +79,10 @@ void syslog_init(void) log_notice_v = num(LOG_NOTICE); log_info_v = num(LOG_INFO); log_debug_v = num(LOG_DEBUG); + + prio_k = intern(lit("prio"), keyword_package); + + std_log = make_syslog_stream(log_info_v); } val openlog_wrap(val wident, val optmask, val facility) @@ -99,3 +111,111 @@ val syslog_wrap(val prio, val fmt, val args) syslog(c_num(prio), "%s", u8text); return nil; } + +static void syslog_mark(val stream) +{ + val stuff = (val) stream->co.handle; + gc_mark(stuff); +} + +static val syslog_put_string(val stream, val str) +{ + val cell = (val) stream->co.handle; + cons_bind (prio, strstream, cell); + + for (;;) { + val length = length_str(str); + val span_to_newline = compl_span_str(str, lit("\n")); + + if (zerop(length)) + break; + + put_string(sub_str(str, nil, span_to_newline), strstream); + + if (equal(span_to_newline, length)) + break; + + str = sub_str(str, plus(span_to_newline, num(1)), nil); + syslog_wrap(prio, lit("~a"), list(get_string_from_stream(strstream), nao)); + strstream = make_string_output_stream(); + } + + set(*cdr_l(cell), strstream); + return t; +} + +static val syslog_put_char(val stream, val ch) +{ + val cell = (val) stream->co.handle; + cons_bind (prio, strstream, cell); + + if (ch == chr('\n')) { + syslog_wrap(prio, lit("~a"), list(get_string_from_stream(strstream), nao)); + strstream = make_string_output_stream(); + } else { + put_char(ch, strstream); + } + + set(*cdr_l(cell), strstream); + return t; +} + +static val syslog_put_byte(val stream, int ch) +{ + val cell = (val) stream->co.handle; + cons_bind (prio, strstream, cell); + + if (ch == '\n') { + syslog_wrap(prio, lit("~a"), list(get_string_from_stream(strstream), nao)); + strstream = make_string_output_stream(); + } else { + put_byte(num(ch), strstream); + } + + set(*cdr_l(cell), strstream); + return t; +} + +static val syslog_get_prop(val stream, val ind) +{ + if (ind == real_time_k) { + val cell = (val) stream->co.handle; + return car(cell); + } + return nil; +} + +static val syslog_set_prop(val stream, val ind, val prop) +{ + if (ind == prio_k) { + val cell = (val) stream->co.handle; + set(*car_l(cell), prop); + return t; + } + return nil; +} + +static struct strm_ops syslog_strm_ops = { + { cobj_equal_op, + cobj_print_op, + cobj_destroy_stub_op, + syslog_mark, + cobj_hash_op }, + syslog_put_string, + syslog_put_char, + syslog_put_byte, + 0, /* get_line */ + 0, /* get_char */ + 0, /* get_byte */ + 0, /* close */ + 0, /* flush */ + 0, /* seek */ + syslog_get_prop, + syslog_set_prop +}; + +val make_syslog_stream(val prio) +{ + return cobj((mem_t *) cons(prio, make_string_output_stream()), + stream_s, &syslog_strm_ops.cobj_ops); +} @@ -33,7 +33,12 @@ extern val log_user_v, log_daemon_v, log_auth_v; extern val log_emerg_v, log_alert_v, log_crit_v, log_err_v; extern val log_warning_v, log_notice_v, log_info_v, log_debug_v; +extern val prio_k; + +extern val std_log; + void syslog_init(void); val openlog_wrap(val ident, val optmask, val facility); val setlogmask_wrap(val mask); val syslog_wrap(val prio, val fmt, val args); +val make_syslog_stream(val prio); @@ -9139,15 +9139,15 @@ a limit on the number of bits. .TP Syntax: - (logand <int1> <int2>) - (logior <int1> <int2>) + (logand . <integers>) + (logior . <integers>) (logxor <int1> <int2>) .TP Description: These operations perform the familiar bitwise and, inclusive or, and exclusive -or operations respectively. Positive values of <int1> and <int2> are treated as +or operations respectively. Positive values inputs are treated as pure binary numbers. Negative inputs are treated as infinite-bit two's-complement. @@ -9155,6 +9155,13 @@ For example (logand -2 7) produces 6. This is because -2 is ..111110 in infinite-bit two's-complement. Or-ing this value with 7 (111) produces 110. +The logand and logior functions are variadic, and may be called with zero, one, +two, or more input values. If logand is called with no arguments, it produces +the value -1 (all bits 1). If logior is called with no arguments it produces +zero. In the one-argument case, the functions just return their argument value. + + + .SS Functions logtest .TP @@ -9221,6 +9228,36 @@ a right shift does not exhaust the infinite sequence of 1 digits which extends to the left. Thus if -4 is shifted right it becomes -2 because the bitwise representations are ...111100 and ...11110. +.SS Function mask + +.TP +Syntax: + + (mask . <integer-values>) + +.TP +Description: + +The mask function takes zero or more integer arguments, and produces an integer +value which corresponds a bitmask made up of the bit positions specified by the +integer values. + +If mask is called with no arguments, then the return value is zero. + +If mask is called with a single argument B then the return value is the same as +that of the expression (ash 1 <value>): one shifted left by <value> bit +positions. If <value> is zero, then the result is 1; if <value> is 1, the +result is 2 and so forth. If <value> is negative, then the result is zero. + +If mask is called with two or more arguments, then the result is a bitwise of +the masks individually computed for each of the values. + +In other words, the following equivalences hold: + + (mask) == 0 + (mask a) == (ash 1 a) + (mask a b c ...) == (logior (mask a) (mask b) (mask c) ...) + .SH EXCEPTIONS .SS Functions throw, throwf and error @@ -10916,6 +10953,107 @@ This is a wrapper for the Unix function daemon of BSD origin. It returns t if successful, nil otherwise, and the errno variable is set in that case. +.SH UNIX SYSLOG + +On platforms where a Unix-like syslog API is available, TXR exports this +interface. TXR programs can configure logging via the openlog function, +control the loging mask via setlogmask and generate logs vis syslog, +or using special syslog streams. + +.SS Variables log-pid, log-cons, log-ndelay, log-odelay, log-nowait and log-perror + +These variables take on the values of the corresponding C preprocessor +constants from the <syslog.h> header: LOG_PID, LOG_CONS, etc. These +integer values represent logging options used in the option argument to the +openlog function. + +.SS Variables log-user, log-daemon and log-auth + +These variables take on the values of the corresponding C preprocessor +constants from the <syslog.h> header: LOG_USER, LOG_DAEMON, and LOG_AUTH. +These are the integer facility codes specified in the openlog function. + +.SS Variables log-emerg, log-alert, log-crit, log-err, log-warning, log-notice, log-info and log-debug + +These variables take on the values of the corresponding C preprocessor +constants from the <syslog.h> header: LOG_EMERG, LOG_ALERT, etc. +These are the integer priority codes specified in the syslog call. + +.SS The *stdlog* variable holds a special kind of stream: a syslog stream. +Each newline-terminated line of text sent to this stream becomes a log +message. The stream internally maintains a priority value that is applied +when it generates messages. By default, this value is that of log-info. +Note that messages generated via the openlog function are not newline +terminated; this is a convention of the syslog stream. The newline characters +written to the syslog stream are only used to recognize the message framing, +and are not sent to syslog. + +.SS The openlog function + +.TP +Syntax: + + (openlog <id-string> : <options> <facility>) + +.TP +Description: + +The openlog TXR Lisp function is a wrapper for the openlog C function, and the +arguments have the same semantics. It is not necessary to use openlog in order +to call the syslog function or to write data to *stdlog*. The call is necessary +in order to override the default identifying string, to set options, such +ashaving the PID (process ID) recorded in log messages, and to specify the facility. + +The <id-string> argument is manadatory. + +The <options> argument is a bitwise mask (see the logior function) of option +values such as log-pid and log-cons. If it is missing, then a value of 0 is +used, specifying the absence of any options. + +The <facility> argument is one of the values log-user, log-daemon or log-auth. +If it is missing, then log-user is assumed. + +.SS The setlogmask function + +.TP +Syntax: + + (setlogmask <bitmask-integer>) + +.TP +Description: + +The setlogmask function interfaces to the corresponding C function, and has the +same argument and return value semantics. The argument is a mask of priority +values to enable. The return value is the prior value. Note that if the +argument is zero, then the function doesn't set the mask to zero; it only +returns the current value of the mask. + +Note that the priority values like log-emerg and log-debug are integer +enumerations, not bitmasks. These values cannot be combined directly to create +a bitmask. Rather, the mask function should be used on these values. + +.TP +Example: + + ;; Enable LOG_EMERG and LOG_ALERT messages, suppressing all others + (setlogmask (mask log-emerg log-alert)) + + +.SS The syslog function + +.TP +Syntax: + + (syslog <priority> <format> . <args>) + +.TP +Description: + +This function is the interface to the syslog C function. The printf formatting +capabilities of the function are not used; it follows the conventions of the +TXR Lisp format function instead. Note in particular that %m for interpolating +the value of strerror(errno) is currenly not supported. .SH WEB PROGRAMMING SUPPORT @@ -33,93 +33,99 @@ syn keyword txr_keyword contained skip some text throw syn keyword txr_keyword contained trailer try var syn keyword txl_keyword contained * *keyword-package* *random-state* *self-path* -syn keyword txl_keyword contained *stddebug* *stderr* *stdin* *stdout* -syn keyword txl_keyword contained *system-package* *user-package* + - -syn keyword txl_keyword contained / /= < <= -syn keyword txl_keyword contained = > >= abs -syn keyword txl_keyword contained acons acons-new aconsql-new acos -syn keyword txl_keyword contained alist-nremove alist-remove all and -syn keyword txl_keyword contained andf append append* apply -syn keyword txl_keyword contained ash asin assoc assql -syn keyword txl_keyword contained atan atom bignump block -syn keyword txl_keyword contained break-str call car cat-str -syn keyword txl_keyword contained cat-vec catch cdr ceil -syn keyword txl_keyword contained chain chr-isalnum chr-isalpha chr-isascii -syn keyword txl_keyword contained chr-iscntrl chr-isdigit chr-isgraph chr-islower -syn keyword txl_keyword contained chr-isprint chr-ispunct chr-isspace chr-isupper -syn keyword txl_keyword contained chr-isxdigit chr-num chr-str chr-str-set -syn keyword txl_keyword contained chr-tolower chr-toupper chrp close-stream -syn keyword txl_keyword contained collect-each collect-each* compl-span-str cond -syn keyword txl_keyword contained cons consp copy-alist copy-cons -syn keyword txl_keyword contained copy-hash copy-list copy-str copy-vec -syn keyword txl_keyword contained cos count-if countq countql -syn keyword txl_keyword contained countqual daemon dec defun -syn keyword txl_keyword contained defvar del delete-package dohash -syn keyword txl_keyword contained downcase-str dwim each each* -syn keyword txl_keyword contained eq eql equal errno -syn keyword txl_keyword contained error eval evenp exp -syn keyword txl_keyword contained expt exptmod fifth find -syn keyword txl_keyword contained find-if find-package first fixnump -syn keyword txl_keyword contained flatten flatten* flip flo-int -syn keyword txl_keyword contained flo-str floatp floor flush-stream -syn keyword txl_keyword contained for for* force format -syn keyword txl_keyword contained fourth fun func-get-env func-get-form -syn keyword txl_keyword contained functionp gcd generate gensym -syn keyword txl_keyword contained get-byte get-char get-hash-userdata get-line -syn keyword txl_keyword contained get-list-from-stream get-string-from-stream gethash hash -syn keyword txl_keyword contained hash-alist hash-construct hash-count hash-diff -syn keyword txl_keyword contained hash-eql hash-equal hash-isec hash-keys -syn keyword txl_keyword contained hash-pairs hash-uni hash-values hashp -syn keyword txl_keyword contained identity if iff iffi -syn keyword txl_keyword contained inc int-flo int-str integerp -syn keyword txl_keyword contained intern interp-fun-p isqrt keep-if -syn keyword txl_keyword contained keep-if* keywordp lambda lazy-str -syn keyword txl_keyword contained lazy-str-force lazy-str-force-upto lazy-str-get-trailing-list lazy-stream-cons -syn keyword txl_keyword contained lazy-stringp lcons-fun ldiff length -syn keyword txl_keyword contained length-list length-str length-str-< length-str-<= -syn keyword txl_keyword contained length-str-> length-str->= length-vec let -syn keyword txl_keyword contained let* list list-str list-vector -syn keyword txl_keyword contained listp log logand logior -syn keyword txl_keyword contained lognot logtest logtrunc logxor -syn keyword txl_keyword contained make-hash make-lazy-cons make-package make-random-state -syn keyword txl_keyword contained make-similar-hash make-string-byte-input-stream make-string-input-stream make-string-output-stream -syn keyword txl_keyword contained make-strlist-output-stream make-sym make-time make-time-utc -syn keyword txl_keyword contained mapcar mapcar* maphash mappend -syn keyword txl_keyword contained mappend* match-fun match-regex match-str +syn keyword txl_keyword contained *stddebug* *stderr* *stdin* *stdlog* +syn keyword txl_keyword contained *stdnull* *stdout* *system-package* *user-package* +syn keyword txl_keyword contained + - / /= +syn keyword txl_keyword contained < <= = > +syn keyword txl_keyword contained >= abs acons acons-new +syn keyword txl_keyword contained aconsql-new acos alist-nremove alist-remove +syn keyword txl_keyword contained all and andf append +syn keyword txl_keyword contained append* apply ash asin +syn keyword txl_keyword contained assoc assql atan atom +syn keyword txl_keyword contained bignump block break-str call +syn keyword txl_keyword contained car cat-str cat-vec catch +syn keyword txl_keyword contained cdr ceil chain chr-isalnum +syn keyword txl_keyword contained chr-isalpha chr-isascii chr-iscntrl chr-isdigit +syn keyword txl_keyword contained chr-isgraph chr-islower chr-isprint chr-ispunct +syn keyword txl_keyword contained chr-isspace chr-isupper chr-isxdigit chr-num +syn keyword txl_keyword contained chr-str chr-str-set chr-tolower chr-toupper +syn keyword txl_keyword contained chrp close-stream collect-each collect-each* +syn keyword txl_keyword contained compl-span-str cond cons consp +syn keyword txl_keyword contained copy-alist copy-cons copy-hash copy-list +syn keyword txl_keyword contained copy-str copy-vec cos count-if +syn keyword txl_keyword contained countq countql countqual daemon +syn keyword txl_keyword contained dec defun defvar del +syn keyword txl_keyword contained delete-package dohash downcase-str dwim +syn keyword txl_keyword contained each each* eq eql +syn keyword txl_keyword contained equal errno error eval +syn keyword txl_keyword contained evenp exp expt exptmod +syn keyword txl_keyword contained fifth find find-if find-package +syn keyword txl_keyword contained first fixnump flatten flatten* +syn keyword txl_keyword contained flip flo-int flo-str floatp +syn keyword txl_keyword contained floor flush-stream for for* +syn keyword txl_keyword contained force format fourth fun +syn keyword txl_keyword contained func-get-env func-get-form functionp gcd +syn keyword txl_keyword contained generate gensym get-byte get-char +syn keyword txl_keyword contained get-hash-userdata get-line get-list-from-stream get-string-from-stream +syn keyword txl_keyword contained gethash hash hash-alist hash-construct +syn keyword txl_keyword contained hash-count hash-diff hash-eql hash-equal +syn keyword txl_keyword contained hash-isec hash-keys hash-pairs hash-uni +syn keyword txl_keyword contained hash-values hashp identity if +syn keyword txl_keyword contained iff iffi inc int-flo +syn keyword txl_keyword contained int-str integerp intern interp-fun-p +syn keyword txl_keyword contained isqrt keep-if keep-if* keywordp +syn keyword txl_keyword contained lambda lazy-str lazy-str-force lazy-str-force-upto +syn keyword txl_keyword contained lazy-str-get-trailing-list lazy-stream-cons lazy-stringp lcons-fun +syn keyword txl_keyword contained ldiff length length-list length-str +syn keyword txl_keyword contained length-str-< length-str-<= length-str-> length-str->= +syn keyword txl_keyword contained length-vec let let* list +syn keyword txl_keyword contained list-str list-vector listp log +syn keyword txl_keyword contained log-alert log-auth log-cons log-crit +syn keyword txl_keyword contained log-daemon log-debug log-emerg log-err +syn keyword txl_keyword contained log-info log-ndelay log-notice log-nowait +syn keyword txl_keyword contained log-odelay log-perror log-pid log-user +syn keyword txl_keyword contained log-warning logand logior lognot +syn keyword txl_keyword contained logtest logtrunc logxor make-hash +syn keyword txl_keyword contained make-lazy-cons make-package make-random-state make-similar-hash +syn keyword txl_keyword contained make-string-byte-input-stream make-string-input-stream make-string-output-stream make-strlist-output-stream +syn keyword txl_keyword contained make-sym make-time make-time-utc mapcar +syn keyword txl_keyword contained mapcar* maphash mappend mappend* +syn keyword txl_keyword contained mask match-fun match-regex match-str syn keyword txl_keyword contained match-str-tree max memq memql syn keyword txl_keyword contained memqual merge min mkstring syn keyword txl_keyword contained mod multi-sort none not syn keyword txl_keyword contained nreverse null num-chr num-str syn keyword txl_keyword contained numberp oddp open-command open-directory syn keyword txl_keyword contained open-file open-pipe open-process open-tail -syn keyword txl_keyword contained or orf packagep pop -syn keyword txl_keyword contained pprint print prog1 progn -syn keyword txl_keyword contained prop proper-listp push pushhash -syn keyword txl_keyword contained put-byte put-char put-line put-string -syn keyword txl_keyword contained qquote quasi quote rand -syn keyword txl_keyword contained random random-fixnum random-state-p range -syn keyword txl_keyword contained range* reduce-left reduce-right ref -syn keyword txl_keyword contained refset regex-compile regexp regsub -syn keyword txl_keyword contained rehome-sym remhash remove-if remove-if* -syn keyword txl_keyword contained remq remq* remql remql* -syn keyword txl_keyword contained remqual remqual* repeat replace -syn keyword txl_keyword contained replace-list replace-str replace-vec rest -syn keyword txl_keyword contained return return-from reverse rplaca -syn keyword txl_keyword contained rplacd s-ifblk s-ifchr s-ifdir -syn keyword txl_keyword contained s-ififo s-iflnk s-ifmt s-ifreg -syn keyword txl_keyword contained s-irgrp s-iroth s-irusr s-irwxg -syn keyword txl_keyword contained s-irwxo s-irwxu s-isgid s-isuid -syn keyword txl_keyword contained s-isvtx s-iwgrp s-iwoth s-iwusr -syn keyword txl_keyword contained s-ixgrp s-ixoth s-ixusr search-regex -syn keyword txl_keyword contained search-str search-str-tree second seek-stream -syn keyword txl_keyword contained set set-diff set-hash-userdata sethash -syn keyword txl_keyword contained sin sixth size-vec some -syn keyword txl_keyword contained sort source-loc source-loc-str span-str -syn keyword txl_keyword contained splice split-str split-str-set sqrt -syn keyword txl_keyword contained stat string-cmp string-extend string-lt -syn keyword txl_keyword contained stringp sub sub-list sub-str -syn keyword txl_keyword contained sub-vec symbol-function symbol-name symbol-package -syn keyword txl_keyword contained symbolp tan third throw +syn keyword txl_keyword contained openlog or orf packagep +syn keyword txl_keyword contained pop pprint print prog1 +syn keyword txl_keyword contained progn prop proper-listp push +syn keyword txl_keyword contained pushhash put-byte put-char put-line +syn keyword txl_keyword contained put-string qquote quasi quote +syn keyword txl_keyword contained rand random random-fixnum random-state-p +syn keyword txl_keyword contained range range* reduce-left reduce-right +syn keyword txl_keyword contained ref refset regex-compile regex-parse +syn keyword txl_keyword contained regexp regsub rehome-sym remhash +syn keyword txl_keyword contained remove-if remove-if* remq remq* +syn keyword txl_keyword contained remql remql* remqual remqual* +syn keyword txl_keyword contained repeat replace replace-list replace-str +syn keyword txl_keyword contained replace-vec rest return return-from +syn keyword txl_keyword contained reverse rplaca rplacd s-ifblk +syn keyword txl_keyword contained s-ifchr s-ifdir s-ififo s-iflnk +syn keyword txl_keyword contained s-ifmt s-ifreg s-irgrp s-iroth +syn keyword txl_keyword contained s-irusr s-irwxg s-irwxo s-irwxu +syn keyword txl_keyword contained s-isgid s-isuid s-isvtx s-iwgrp +syn keyword txl_keyword contained s-iwoth s-iwusr s-ixgrp s-ixoth +syn keyword txl_keyword contained s-ixusr search-regex search-str search-str-tree +syn keyword txl_keyword contained second seek-stream set set-diff +syn keyword txl_keyword contained set-hash-userdata sethash setlogmask sin +syn keyword txl_keyword contained sixth size-vec some sort +syn keyword txl_keyword contained source-loc source-loc-str span-str splice +syn keyword txl_keyword contained split-str split-str-set sqrt stat +syn keyword txl_keyword contained string-cmp string-extend string-lt stringp +syn keyword txl_keyword contained sub sub-list sub-str sub-vec +syn keyword txl_keyword contained symbol-function symbol-name symbol-package symbolp +syn keyword txl_keyword contained syslog tan third throw syn keyword txl_keyword contained throwf time time-string-local time-string-utc syn keyword txl_keyword contained time-usec tok-str tostring tostringp syn keyword txl_keyword contained tree-find trim-str trunc typeof |