tacme.3 - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       tacme.3 (6800B)
       ---
            1 .TH ACME 3
            2 .SH NAME
            3 Event, Win,
            4 eventfmt,
            5 newwin,
            6 pipetowin,
            7 pipewinto,
            8 sysrun,
            9 winaddr,
           10 winclosefiles,
           11 winctl,
           12 windel,
           13 windeleteall,
           14 windows,
           15 wineventchan,
           16 winfd,
           17 winfree,
           18 winmread,
           19 winname,
           20 winopenfd,
           21 winprint,
           22 winread,
           23 winreadaddr,
           24 winreadevent,
           25 winseek,
           26 winwrite,
           27 winwriteevent \- acme client library
           28 .SH SYNOPSIS
           29 .ft L
           30 .nf
           31 #include <u.h>
           32 #include <libc.h>
           33 #include <thread.h>
           34 #include <9pclient.h>
           35 #include <acme.h>
           36 .fi
           37 .PP
           38 .ft L
           39 .ta +\w'\fLxxxx'u +\w'\fLxxxxx'u
           40 .nf
           41 struct Event
           42 {
           43         int        c1;
           44         int        c2;
           45         int        q0;
           46         int        q1;
           47         int        oq0;
           48         int        oq1;
           49         int        flag;
           50         int        nb;
           51         int        nr;
           52         char        text[];
           53         char        arg[];
           54         char        loc[];
           55 };
           56 .PP
           57 .ta +\w'\fLxxxxxxxxxx'u
           58 .B
           59 int        eventfmt(Fmt *fmt)
           60 .PP
           61 .B
           62 Win*        newwin(void)
           63 .PP
           64 .B
           65 Win*        openwin(int id, CFid *ctlfid)
           66 .PP
           67 .B
           68 int        pipetowin(Win *w, char *file, int fderr, char *fmt, ...)
           69 .PP
           70 .B
           71 int        pipewinto(Win *w, char *file, int fdout, char *fmt, ...)
           72 .PP
           73 .B
           74 char*        sysrun(char *fmt, ...)
           75 .PP
           76 .B
           77 int        winaddr(Win *w, char *fmt, ...)
           78 .PP
           79 .B
           80 void        winclosefiles(Win *w)
           81 .PP
           82 .B
           83 int        winctl(Win *w, char *fmt, ...)
           84 .PP
           85 .B
           86 int        windel(Win *w, int sure)
           87 .PP
           88 .B
           89 void        windeleteall(void)
           90 .PP
           91 .B
           92 Channel*        wineventchan(Win *w)
           93 .PP
           94 .B
           95 int        winfd(Win *w, char *name, int mode)
           96 .PP
           97 .B
           98 void        winfree(Win *w)
           99 .PP
          100 .B
          101 char*        winmread(Win *w, char *file)
          102 .PP
          103 .B
          104 int        winname(Win *w, char *fmt, ...)
          105 .PP
          106 .B
          107 int        winopenfd(Win *w, char *name, int mode)
          108 .PP
          109 .B
          110 int        winprint(Win *w, char *file, char *fmt, ...)
          111 .PP
          112 .B
          113 int        winread(Win *w, char *file, void *a, int n)
          114 .PP
          115 .B
          116 int        winreadaddr(Win *w, uint *q1)
          117 .PP
          118 .B
          119 int        winreadevent(Win *w, Event *e)
          120 .PP
          121 .B
          122 int        winseek(Win *w, char *file, int off, int type)
          123 .PP
          124 .B
          125 int        winwrite(Win *w, char *file, void *a, int n)
          126 .PP
          127 .B
          128 int        winwriteevent(Win *w, Event *e)
          129 .PP
          130 .B
          131 void*        emalloc(uint n)
          132 .PP
          133 .B
          134 void*        erealloc(void *v, uint n)
          135 .PP
          136 .B
          137 char*        estrdup(char *s)
          138 .PP
          139 .B
          140 char*        evsmprint(char *fmt, va_list arg)
          141 .SH DESCRIPTION
          142 .I Libacme
          143 provides a simple C interface for interacting with
          144 .MR acme (1)
          145 windows.
          146 .PP
          147 A
          148 .B Win
          149 structure represents a single window and its control files.
          150 The contents of the structure should not be accessed directly.
          151 .I Newwin
          152 creates a new window and returns a structure corresponding to that window.
          153 .I Openwin
          154 allocates a structure corresponding to the existing window with the given
          155 .IR id .
          156 If
          157 .I ctlfid
          158 is non-nil, 
          159 .I openwin
          160 assumes it is a file descriptor open for writing to the window's
          161 .B ctl
          162 file.
          163 Ownership of
          164 .I ctlfid
          165 passes to the library.
          166 .PP
          167 Most of the library routines access files in the window's
          168 .I acme
          169 directory.
          170 See
          171 .MR acme (4)
          172 for details.
          173 Many library routines take a format string
          174 .I fmt
          175 followed by a variable list of arguments.
          176 In the discussion below, the notation
          177 .I fmt\fR, \fP...
          178 denotes the result of formatting the string and arguments
          179 using
          180 .I smprint
          181 (see
          182 .MR print (3) ).
          183 .PP
          184 .I Pipetowin
          185 runs the
          186 .MR rc (1)
          187 command line
          188 .I fmt\fR, \fP...
          189 with 
          190 .B /dev/null
          191 on standard input and the window's
          192 .I file
          193 on standard output.
          194 If
          195 .I fderr
          196 is non-zero (sic), 
          197 it is used as standard error.
          198 Otherwise the command inherits the caller's standard error.
          199 .PP
          200 .I Pipewinto
          201 runs the 
          202 .MR rc (1)
          203 command line
          204 .I fmt\fR, \fP...
          205 with the window's
          206 .I file
          207 on standard input.
          208 The command runs with
          209 .I fdout 
          210 as its standard output and standard error.
          211 .PP
          212 .I Sysrun
          213 runs the
          214 .I rc
          215 command line
          216 .I fmt\fR, \fP...
          217 and returns a pointer to the first kilobyte of output, NUL-terminated.
          218 The buffer holding the output is reused on each call.
          219 .PP
          220 .I Winaddr
          221 writes
          222 .I fmt\fR, \fP...
          223 to the window's
          224 .B addr
          225 file.
          226 .PP
          227 .I Winclosefiles
          228 closes all the open file descriptors associated with the window.
          229 (These file descriptors are maintained from the library and 
          230 cached across calls to 
          231 .IR winctl ,
          232 .IR etc .)
          233 .PP
          234 .I Winctl
          235 writes
          236 .I fmt\fR, \fP...
          237 to the window's
          238 .B ctl
          239 file.
          240 .PP
          241 .I Windel
          242 deletes the window,
          243 writing
          244 .B del
          245 (or, if
          246 .I sure
          247 is set,
          248 .B delete)
          249 to the window's
          250 .B ctl
          251 file.
          252 .PP
          253 .I Winfd
          254 returns a file descriptor for the window's
          255 .I file
          256 opened for
          257 .IR mode .
          258 The caller is responsible for closing the file descriptor.
          259 .PP
          260 .I Winmread
          261 reads the contents of the window's
          262 .I file
          263 into a dynamically allocated buffer
          264 and returns it.
          265 The caller is responsible for freeing the buffer.
          266 .PP
          267 .I Winname
          268 sets the name of the window to
          269 .I fmt\fR, \fP...
          270 by writing to the
          271 .B ctl
          272 file.
          273 .PP
          274 .I Winprint
          275 prints
          276 .I fmt\fR, \fP...
          277 to the window's
          278 .IR file .
          279 .PP
          280 .I Winread
          281 reads at most 
          282 .I n
          283 bytes from the window's
          284 .IR file
          285 into the buffer pointed at by
          286 .IR a .
          287 .PP
          288 .I Winreadaddr
          289 reads the window's
          290 .B addr
          291 file, which contains two integers.
          292 It returns the first and stores the second in 
          293 .BI * q1 \fR.
          294 .PP
          295 .I Winseek
          296 seeks the file descriptor for the window's
          297 .I file
          298 to position
          299 .I off
          300 relative to
          301 .I type
          302 (see
          303 .MR seek (3) ).
          304 .PP
          305 .I Winwrite
          306 writes the
          307 .I n
          308 bytes pointed at by
          309 .I a
          310 to the window's
          311 .IR file .
          312 .PP
          313 An
          314 .B Event
          315 structure represents an event originating in a particular window.
          316 The fields correspond to the fields in
          317 .IR acme 's
          318 event messages.
          319 See 
          320 .MR acme (4)
          321 for detailed explanations.
          322 The fields are:
          323 .TP
          324 .BR c1 ", " c2
          325 The two event characters, indicating origin and type of action.
          326 .TP
          327 .BR q0 ", " q1
          328 The character addresses of the action.
          329 If the original event had an empty selection
          330 .RB ( q0 = q1 )
          331 and was accompanied by an expansion
          332 (the 2 bit is set in the flag), then 
          333 .B q0
          334 and
          335 .B q1
          336 will indicate the expansion rather than original event.
          337 .TP
          338 .BR oq0 ", " oq1
          339 The 
          340 .B q0
          341 and
          342 .B q1
          343 of the original event, even if it was expanded.
          344 If there was no expansion,
          345 .BR oq0 = q0
          346 and
          347 .BR oq1 = q1 .
          348 .TP
          349 .B flag
          350 The flag.
          351 .TP
          352 .B nr
          353 The number of characters (UTF sequences) included in the optional text.
          354 .TP
          355 .B text
          356 The optional text itself, encoded in UTF.
          357 .TP
          358 .B nb
          359 The number of bytes included in the optional text.
          360 .TP
          361 .B arg
          362 The chorded argument, if present
          363 (the 8 bit is set in the flag).
          364 .TP
          365 .B loc
          366 The chorded location, if present
          367 (the 8 bit is set in the flag).
          368 .PD
          369 .PP
          370 .I Winreadevent
          371 reads the next event (q.v.)
          372 from the window's
          373 .B event
          374 file.
          375 .PP
          376 .I Winwriteevent
          377 writes an event back to the window's 
          378 .B event
          379 file, indicating to
          380 .I acme
          381 that it should be handled internally.
          382 .PP
          383 .I Wineventchan
          384 returns a pointer to a
          385 .B Channel
          386 (see
          387 .MR thread (3) )
          388 on which event structures (not pointers) can be read.
          389 The first call to
          390 .I wineventchan
          391 allocates a channel and
          392 starts a new thread that loops calling
          393 .I winreadevent
          394 and copying the events into the channel.
          395 Subsequent calls return the same channel.
          396 Clients should not call
          397 .I winreadevent
          398 after calling
          399 .IR wineventchan .
          400 .PP
          401 .IR Emalloc ,
          402 .IR erealloc ,
          403 .IR estrdup ,
          404 and
          405 .I evsmprint
          406 are like
          407 .MR malloc (3) ,
          408 .IR realloc ,
          409 .IR strdup
          410 (see
          411 .MR strcat (3) ),
          412 and
          413 .IR vsmprint
          414 (see
          415 .MR print (3) ),
          416 but they call
          417 .MR sysfatal (3)
          418 on error rather than returning nil.
          419 .SH SOURCE
          420 .B \*9/src/libacme
          421 .SH SEE ALSO
          422 .MR acme (1) ,
          423 .MR acme (4)