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.RS
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PD 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ft 5
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.nf
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.de EE \" end example
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.fi
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.ft
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PD
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.RE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin..
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.TH TOK 3
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SH NAME
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintok \- space separated token stream routines
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SH SYNOPSIS
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L "#include <ast.h>"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.sp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L "void* tokopen(char* string)"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L "char* tokread(void* tok)"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L "void tokclose(void* tok)"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.sp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L "int tokscan(char* string, char** next, const char* format, ...);"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.sp
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L "Sfio_t* tokline(const char* input, int flags, int* line);"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SH DESCRIPTION
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L tokopen
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinreturns a pointer to a space separated token stream on the 0 terminated
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstring
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LR string .
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L tokread
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinreturns a pointer to the next
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinspace separated token in the token stream
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L tok
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinas returned by
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LR tokopen .
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin0 is returned when no tokens remain.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L tokread
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chintemporarily modifies
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L string
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinby inserting 0's to terminate each token.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L tokclose
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincloses the token stream and restores
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L string
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinto its original state.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L tokscan
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinscans the string
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L string
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfor tokens specified in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LR format .
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinIt is a more forgiving
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR sscanf (3).
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinIf
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L "next != 0"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen it will point to the next unread character in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L string
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinon return.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinThe number of scanned tokens is returned.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L \-1
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis returned if
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L string
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinwas not empty and
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L format
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinfailed to match and tokens.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I space
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L format
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinmatches 0 or more
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I space
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinor
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I tab
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincharacters.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I newline
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinin format eats the remainder of the current line in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LR string .
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin"...", '...' and \e\fIcharacter\fP quotes are interpreted.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinA quoted
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I carriage-return
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis converted to
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR newline .
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I newline
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L string
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis equivalent to end of string except when quoted.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I \enewline
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis a line splice.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L %
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinin
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L format
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinprefixes format conversion characters; each conversion character
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincorresponds to a
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L tokscan
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinargument following the
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L format
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinargument.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinThe format conversions are:
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.TP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L %c
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinA single
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.LR char .
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.TP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L "%hd %d %ld"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[short, int, long] base 10 integer.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.TP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L "%hn %n %ln"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[short, int, long] C-style base integer.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.TP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L "%ho %o %lo"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[short, int, long] base 8 integer.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.TP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L %s
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinString.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.TP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L "%hu %u %lu"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[short, int, long] C-style base unsigned integer.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.TP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L %v
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinThe next two arguments are a pointer to a
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L char**
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinargument vector and the maximum number of elements in the vector.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.TP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L "%hx %x %lx"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin[short, int, long] base 16 integer.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L %s
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinand
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L %v
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chindata may also be counted length strings of the form
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin\f5(\fIcount\fP:\fIdata\fP)\fR
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinwhere
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I count
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis the number of characters in
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I data
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinand the terminating
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L )
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinmay also be a
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR tab ,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinor the data may be
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L (null)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinwhich represents the
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L NULL
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstring.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.PP
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L tokline
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinreturns an
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR sfio (3)
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstream to a file or string that splices
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I \enewline
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chininto single lines,
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinallows "..." and '...' to quotes to span
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I newlines
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin(done by translating quoted
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I newline
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinto
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR carriage-return ;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L tokscan
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinabove converts quoted
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I carriage-return
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinback to
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.IR newline ),
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinand deletes
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I "# ... newline"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chincomments.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinThis is done by pushing an
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.I sfio
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chindiscipline onto a string or file stream.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinSeeks are disabled on the resulting stream.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinIf
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L "flags == SF_READ"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L input
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis a file name;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinIf
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L "flags == SF_STRING"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L input
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis a 0 terminated string;
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinotherwise
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L input
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinis an open
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L Sfio_t*
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinstream.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinIf
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.L "line != 0"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinthen it points to a line count that is initialized to 0
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinand is incremented for each input line.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin.SH "SEE ALSO"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chinsfio(3)