da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.fp 5 CW
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de Af
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ds ;G \\*(;G\\f\\$1\\$3\\f\\$2
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.if !\\$4 .Af \\$2 \\$1 "\\$4" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de aF
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ie \\$3 .ft \\$1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.el \{\
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ds ;G \&
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.nr ;G \\n(.f
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Af "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin\\*(;G
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ft \\n(;G \}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de L
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.aF 5 \\n(.f "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de LR
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.aF 5 1 "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de RL
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.aF 1 5 "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de EX \" start example
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ta 1i 2i 3i 4i 5i 6i
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PD 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ft 5
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.nf
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de EE \" end example
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ft
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PD
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de Tp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.fl
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ne 3
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.TP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de Ss
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.fl
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ne 3
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SS "\\$1"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ta 1.0i 2.0i 3.0i 4.0i 5.0i
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner.TH ASTSA 3
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SH NAME
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinastsa \- standalone libast support
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SH SYNOPSIS
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.EX
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <ast.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <ccode.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <error.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <option.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#include <stk.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.EE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SH DESCRIPTION
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.B astsa
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis a standalone subset of
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR ast (3)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthat requires only
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR cdt (3)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinand
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR sfio (3).
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.B <ast.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinincludes
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR <ast_common.h> ,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.B <stdarg.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinor
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR <varargs.h> ,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR <sfio.h> ,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR <limits.h> ,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinand
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.B <limits.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinand
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.B <unistd.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif supported by the local system.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinThe macros and functions provided by
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.B <ast.h>
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinare described below.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinThe other headers are described in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR ccode (3),
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR error (3),
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR optget (3),
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinand
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR stk (3).
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SH MACROS
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Ss "size_t elementsof(\fIx\fP)"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinEvaluates to the number of elements in the array variable
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR x .
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Ss "\fItype\fP* newof(void* old, \fItype\fP, size_t \fIelements\fP, size_t \fIextra\fP)"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinEquivalent to (\fItype\fP*)realloc((char*)\fIold\fP,sizeof(\fItype\fP)*\fIelements\fP+\fIextra\fP)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif \fIold\fP!=0 and
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin(\fItype\fP*)calloc(1,sizeof(\fItype\fP)*\fIelements\fP+\fIextra\fP)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinotherwise.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Ss "\fItype\fP* oldof(void* old, \fItype\fP, size_t \fIelements\fP, size_t \fIextra\fP)"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinEquivalent to (\fItype\fP*)realloc((char*)\fIold\fP,sizeof(\fItype\fP)*\fIelements\fP+\fIextra\fP)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif \fIold\fP!=0 and
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin(\fItype\fP*)malloc(1,sizeof(\fItype\fP)*\fIelements\fP+\fIextra\fP)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinotherwise.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Ss "size_t roundof(\fIx\fP,\fIy\fP)"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinEvaluates to \fIx\fP rounded up to the next power of 2 boundary \fIy\fP.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Ss "int ssizeof(\fIx\fP)"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinEquivalent to (int)sizeof(\fIx\fP).
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Ss "int streq(\fIa\fP,\fIb\fP)"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinEquivalent to (*(\fIa\fP)==*(\fIb\fP)&&strcmp(\fIa\fP,\fIb\fP)==0).
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Ss "int strneq(\fIa\fP,\fIb\fP,\fIn\fP)"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinEquivalent to (*(\fIa\fP)==*(\fIb\fP)&&strncmp(\fIa\fP,\fIb\fP,\fIn\fP)==0).
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SH FUNCTIONS
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Ss "void astwinsize(int \fIfd\fP, int* \fIplines\fP, int* \fIpcolumns\fP)"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinIf \fIplines\fP!=0 then *\fIplines\fP is set to the number of lines on the
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintty device corresponding to \fIfd\fP.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinIf \fIpcolumns\fP!=0 then *\fIpcolumns\fP is set to the number of columns
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinon the tty device corresponding to \fIfd\fP.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinThe default if \fIfd\fP is not a terminal device, or if \fIfd\fP queries fail,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis 24 lines and 80 columns.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Ss "char* fmterror(int \fIerrno\fP)"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinReturns the error message text corresponding to the
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR errno (3)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin\fIerrno\fP.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Ss "char* strerror(int \fIerrno\fP)"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinEquivalent to fmterror(\fIerrno\fP).
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Ss "int strgrpmatch(const char* \fIstring\fP, const char* \fIpattern\fP, int* \fIsub\fP, int \fInsub\fP, int \fIflags\fP)"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinMatches the null terminated \fIstring\fP against the null terminated
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR ksh (1)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinaugmented \fIpattern\fP.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinIf \fIsub\fP!=0 then \fIsub\fP[2*\fIi\fP] is set to the start offset and \fIsub\fP[2*\fIi\fP+1] is set
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinto the end offset of the \fIi\fP-th parenthesized subexpression.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin\fInsub\fP is 1/2 the number of elements in \fIsub\fP.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin\fIflags\fP controls the matching:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Tp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin\f5STR_MAXIMAL\fP:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinMaximal match.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinThe default is minimal (first) match.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Tp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin\f5STR_LEFT\fP:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinImplicit left anchor.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Tp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin\f5STR_RIGHT\fP:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinImplicit right anchor.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Tp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin\f5STR_ICASE\fP:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinIgnore case.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Tp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin\f5STR_GROUP\fP:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin(|&) inside [@|*|+{n,m}](...) only.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Ss "int strmatch(const char* \fIstring\fP, const char* \fIpattern\fP, int* \fIsub\fP, int \fInsub\fP, int \fIflags\fP)"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinEquivalent to strgrpmatch(\fIstring\fP,\fIpattern\fP,0,0,STR_MAXIMAL|STR_LEFT|STR_RIGHT).
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SH "SEE ALSO"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR ast (3),
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR ccode (3),
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR cdt (3),
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR error (3),
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR malloc (3),
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR option (3),
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR sfio (3),
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR stk (3)