astsa.3 revision da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ds ;G \\*(;G\\f\\$1\\$3\\f\\$2
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.if !\\$4 .Af \\$2 \\$1 "\\$4" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ie \\$3 .ft \\$1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.nr ;G \\n(.f
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Af "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7" "\\$8" "\\$9"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ft \\n(;G \}
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.aF 5 \\n(.f "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.aF 5 1 "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.aF 1 5 "\\$1" "\\$2" "\\$3" "\\$4" "\\$5" "\\$6" "\\$7"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de EX \" start example
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ta 1i 2i 3i 4i 5i 6i
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de EE \" end example
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ta 1.0i 2.0i 3.0i 4.0i 5.0i
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinastsa \- standalone libast support
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SH SYNOPSIS
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SH DESCRIPTION
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis a standalone subset of
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR ast (3)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthat requires only
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR cdt (3)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR sfio (3).
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinif supported by the local system.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinThe macros and functions provided by
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinare described below.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinThe other headers are described in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR ccode (3),
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR error (3),
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR optget (3),
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.BR stk (3).
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.Ss "size_t elementsof(\fIx\fP)"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinEvaluates to the number of elements in the array variable
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)
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)
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\f5STR_MAXIMAL\fP:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinMaximal match.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinThe default is minimal (first) match.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin\f5STR_LEFT\fP:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinImplicit left anchor.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin\f5STR_RIGHT\fP:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinImplicit right anchor.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin\f5STR_ICASE\fP:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinIgnore case.
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)