|
|
1.1 root 1: .\" Copyright (c) 1980 Regents of the University of California.
2: .\" All rights reserved. The Berkeley software License Agreement
3: .\" specifies the terms and conditions for redistribution.
4: .\"
5: .\" @(#)ch5.n 6.1 (Berkeley) 4/29/86
6: .\"
7: ." $Header: ch5.n,v 1.3 83/07/23 12:40:05 layer Exp $
8: .Lc Input/Output 5
9: .pp
10: The following functions are used to read from and write to external devices
11: (e.g. files)
12: and programs (through pipes).
13: All I/O goes through the lisp data type called the port.
14: A port may be open for either reading or writing, but usually not both
15: simultaneously (see
16: .i fileopen
17: ).
18: There are only a limited number of ports (20) and they will not be reclaimed
19: unless they are
20: .i close d.
21: All ports are reclaimed by a
22: .i resetio
23: call,
24: but this drastic step won't be necessary if the program closes
25: what it uses.
26: .pp
27: If a port argument is not supplied to a function which requires one,
28: or if a bad port argument (such as nil) is given,
29: then
30: .Fr
31: will use the default port according to this scheme:
32: If input is being done then the default port is the value
33: of the symbol
34: .b piport
35: and if output is being done then the default port is the value
36: of the symbol
37: .b poport .
38: Furthermore,
39: if the value of piport or poport is not a valid port,
40: then the standard input or standard output will be used, respectively.
41: .pp
42: The standard input and standard output are usually the keyboard and
43: terminal display unless your job is running in the background and its
44: input or output is connected to a pipe.
45: All output which goes to the standard output will also go to the
46: port
47: .b ptport
48: if it is a valid port.
49: Output destined for the standard output will not reach
50: the standard output if the symbol
51: .b ^w
52: is non nil (although it will still go to
53: .b ptport
54: if
55: .b ptport
56: is a valid port).
57: .pp
58: Some of the functions listed below reference files directly.
59: .Fr
60: has borrowed a convenient shorthand notation from
61: .i /bin/csh ,
62: concerning naming files.
63: If a file name begins with ~ (tilde),
64: and the symbol
65: .b tilde-expansion
66:
67: is bound to something other than nil,
68: then
69: .Fr
70: expands the file name.
71: It takes the string of characters between the leading tilde, and
72: the first slash as a user-name.
73: Then, that initial segment of the filename is replaced by the home
74: directory of the user. The null username is taken to be the current
75: user.
76: .pp
77: .Fr
78: keeps a cache of user home directory information, to minimize
79: searching the password file.
80: Tilde-expansion is performed in the following functions:
81: \fIcfasl, chdir, fasl, ffasl, fileopen, infile, load, outfile,
82: probef, sys:access, sys:unlink\fP.
83: .Lf cfasl "'st_file 'st_entry 'st_funcname ['st_disc ['st_library]]"
84: .Re
85: t
86: .Se
87: This is used to load in a foreign function (see \(sc8.4).
88: The object file st_file is loaded into the lisp system.
89: St_entry should be an entry point in the file just loaded.
90: The function binding of the symbol s_funcname will be set to point
91: to st_entry, so that when the lisp function s_funcname is called,
92: st_entry will be run.
93: st_disc is the discipline to be given to s_funcname.
94: st_disc defaults to "subroutine" if it is not given or if it is given as nil.
95: If st_library is non-null, then after st_file is loaded, the libraries
96: given in st_library will be searched to resolve external references.
97: The form of st_library should be something like "-lm".
98: The C library (" -lc " ) is always searched so when loading in a C
99: file you probably won't need to specify a library.
100: For Fortran files, you should specify "-lF77" and if you are doing
101: any I/O, the library entry should be "-lI77 -lF77".
102: For Pascal files "-lpc" is required.
103: .No
104: This function may be used to load the output of the assembler, C compiler,
105: Fortran compiler, and Pascal compiler but NOT the lisp compiler (use
106: .i fasl
107: for that).
108: If a file has more than one entry point, then use
109: .i getaddress
110: to locate and setup other foreign functions.
111: .br
112: It is an error to load in a file which has a global entry point of the same
113: name as a global entry point in the running lisp.
114: As soon as you load in a file with
115: .i cfasl ,
116: its global entry points become part of the
117: lisp's entry points.
118: Thus you cannot
119: .i cfasl
120: in the same file twice unless you
121: use
122: .i removeaddress
123: to change certain global entry points to local entry points.
124: .Lf close "'p_port"
125: .Re
126: t
127: .Se
128: the specified port is drained and closed, releasing the port.
129: .No
130: The standard defaults are not used in this case since you probably never
131: want to close the standard output or standard input.
132: .Lf cprintf "'st_format 'xfst_val ['p_port]"
133: .Re
134: xfst_val
135: .Se
136: The UNIX formatted output function printf is called with arguments st_format
137: and xfst_val.
138: If xfst_val is a symbol then its print name is passed to printf.
139: The format string may contain characters which are just printed literally
140: and it may contain special formatting commands preceded by a percent
141: sign.
142: The complete set of formatting characters is described in the UNIX manual.
143: Some useful ones are %d for printing a fixnum in decimal, %f or %e for printing
144: a flonum, and %s for printing a character string (or print name of a symbol).
145: .Ex
146: \fI(cprintf "Pi equals %f" 3.14159)\fP prints `Pi equals 3.14159'
147: .Lf drain "['p_port]"
148: .Re
149: nil
150: .Se
151: If this is an output port then
152: the characters in the output buffer are all sent to the device.
153: If this is an input port then all pending characters are flushed.
154: The default port for this function is the default output port.
155: .Lf ex "[s_filename]"
156: .Lx vi "[s_filename]"
157: .Lx exl "[s_filename]"
158: .Lx vil "[s_filename]"
159: .Re
160: nil
161: .Se
162: The lisp system starts up an editor on the file named as the argument.
163: It will try appending .l to the file if it can't find it.
164: The functions \fIexl\fP and \fIvil\fP will load the file after
165: you finish editing it. These functions will also remember the name
166: of the file so that on subsequent invocations, you don't need to
167: provide the argument.
168: .No
169: These functions do not evaluate their argument.
170: .Lf fasl "'st_name ['st_mapf ['g_warn]]"
171: .Wh
172: st_mapf and g_warn default to nil.
173: .Re
174: t if the function succeeded, nil otherwise.
175: .Se
176: this function is designed to load in an object file generated by
177: the lisp compiler Liszt.
178: File names for object files usually end in `.o', so
179: .i fasl
180: will append `.o' to st_name (if it is not already present).
181: If st_mapf is non nil, then it is the name of the map file to
182: create.
183: .i Fasl
184: writes in the map file the names and addresses of the functions
185: it loads and defines.
186: Normally the map file is created (i.e. truncated if it
187: exists), but if \fI(sstatus\ appendmap\ t)\fP is done then the map file
188: will be appended.
189: If g_warn is non nil and if a function is loaded from the file which
190: is already defined, then a warning message will be printed.
191: .No
192: .i fasl
193: only looks in the current directory for the file to load.
194: The function
195: .i load
196: looks through a user-supplied search path and will call
197: .i fasl
198: if it finds a file with the same root name and a `.o' extension.
199: In most cases the user
200: would be better off using the function
201: .i load
202: rather than calling
203: .i fasl
204: directly.
205: .Lf ffasl "'st_file 'st_entry 'st_funcname ['st_discipline ['st_library]]"
206: .Re
207: the binary object created.
208: .Se
209: the Fortran object file st_file is loaded into the lisp system.
210: St_entry should be an entry point in the file just loaded.
211: A binary object will be created and its entry field will be set to point
212: to st_entry.
213: The discipline field of the binary will be set to st_discipline or
214: "subroutine" by default.
215: If st_library is present and non-null, then after st_file is loaded, the libraries
216: given in st_library will be searched to resolve external references.
217: The form of st_library should be something like "-lS -ltermcap".
218: In any case, the standard Fortran libraries will be
219: searched also to resolve external references.
220: .No
221: in F77 on Unix, the entry point for the fortran function foo
222: is named `_foo_'.
223: .Lf filepos "'p_port ['x_pos]"
224: .Re
225: the current position in the file if x_pos is not
226: given or else x_pos if x_pos is given.
227: .Se
228: If x_pos is given, the next byte to be read or written to the
229: port will be at
230: position x_pos.
231: .Lf filestat 'st_filename
232: .Re
233: a vector containing various numbers which the UNIX operating
234: system assigns to files. if the file doesn't exist, an error is
235: invoked. Use \fIprobef\fP to determine if the file exists.
236: .No
237: The individual entries can be accesed by mnemonic functions
238: of the form filestat:\fIfield\fP, where field may be any of
239: atime, ctime, dev, gid, ino, mode,mtime, nlink, rdev, size,
240: type, uid. See the UNIX programmers manual for a more detailed
241: description of these quantities.
242: .Lf flatc "'g_form ['x_max]"
243: .Re
244: the number of characters required to print g_form using \fIpatom\fP.
245: If x_max is given and if \fIflatc\fP determines that it will return a value
246: greater than x_max, then it gives up and returns the current value it
247: has computed.
248: This is useful if you just want to see if an expression is larger than
249: a certain size.
250: .Lf flatsize "'g_form ['x_max]"
251: .Re
252: the number of characters required to print g_form using \fIprint\fP.
253: The meaning of x_max is the same as for flatc.
254: .No
255: Currently this just
256: .i explode 's
257: g_form and checks its length.
258: .Lf fileopen "'st_filename 'st_mode"
259: .Re
260: a port for reading or writing (depending on st_mode) the file st_name.
261: .Se
262: the given file is opened (or created if opened for writing and it
263: doesn't yet exist).
264: .No
265: this function call provides a direct
266: interface to the operating system's fopen function.
267: The mode may be more than just "r" for read, "w" for write or "a" for
268: append. The modes "r+", "w+" and "a+" permit both reading and writing
269: on a port provided that
270: .i fseek
271: is done between changes in direction.
272: See the UNIX manual description of fopen for more details.
273: This routine does not look through a search path for a given file.
274: .Lf fseek "'p_port 'x_offset 'x_flag"
275: .Re
276: the position in the file after the function is performed.
277: .Se
278: this function positions the read/write pointer before a certain byte
279: in the file.
280: If x_flag is 0 then the pointer is set to x_offset bytes from the
281: beginning of the file.
282: If x_flag is 1 then the pointer is set to x_offset bytes from the
283: current location in the file.
284: If x_flag is 2 then the pointer is set to x_offset bytes from the
285: end of the file.
286: .Lf infile "'s_filename"
287: .Re
288: a port ready to read s_filename.
289: .Se
290: this tries to open s_filename and if it cannot or if there are no
291: ports available it gives an error message.
292: .No
293: to allow your program to continue on a file-not-found error,
294: you can use something like:
295: .br
296: \fI(cond ((null (setq myport (car (errset (infile name) nil))))
297: .br
298: \ \ \ \ \ \ \ \ \ \ \ \ (patom '"couldn't open the file")))\fP
299: .br
300: which will set myport to the port to read from if the file exists
301: or will print a message if it couldn't open it and also set myport to nil.
302: To simply determine if a file exists, use
303: .i probef .
304: .Lf load "'s_filename ['st_map ['g_warn]]"
305: .Re
306: t
307: .No
308: The function of
309: .i load
310: has changed since previous releases of
311: .Fr
312: and the following description should be read carefully.
313: .Se
314: .i load
315: now serves the function of both
316: .i fasl
317: and the old
318: .i load .
319: .i Load
320: will search a user defined search path for a lisp source or object file
321: with the filename s_filename (with the extension .l or .o added as
322: appropriate).
323: The search path which
324: .i load
325: uses is the value of \fI(status\ load-search-path)\fP.
326: The default is (|.|\ /usr/lib/lisp) which means look in the current
327: directory first and then /usr/lib/lisp.
328: The file which
329: .i load
330: looks for depends on the last two characters of s_filename.
331: If s_filename ends with ".l" then
332: .i load
333: will only look for a file name
334: s_filename and will assume that this is a
335: .Fr
336: source file.
337: If s_filename ends with ".o" then
338: .i load
339: will only look for a file named s_filename and will assume that this is
340: a
341: .Fr
342: object file to be
343: .i fasl ed
344: in.
345: Otherwise,
346: .i load
347: will first look for s_filename.o, then s_filename.l and finally
348: s_filename itself.
349: If it finds s_filename.o it will assume that this is an object file,
350: otherwise it will assume that it is a source file.
351: An object file is loaded using
352: .i fasl
353: and a source file is loaded by reading and evaluating each form in the
354: file.
355: The optional arguments st_map and g_warn are passed to
356: .i fasl
357: should
358: .i fasl
359: be called.
360: .No
361: \fIload\fP requires a port to open the file s_filename.
362: It then lambda binds the symbol piport to this port and reads and
363: evaluates the forms.
364: .Lf makereadtable "['s_flag]"
365: .Wh
366: if s_flag is not present it is assumed to be nil.
367: .Re
368: a readtable equal to the original readtable if s_flag is non-null, or else
369: equal to the current readtable.
370: See chapter 7 for a description of readtables and their uses.
371: .Lf msg "[l_option ...] ['g_msg ...]"
372: .No
373: This function is intended for printing short messages.
374: Any of the arguments or options
375: presented can be used any number of times, in any
376: order. The messages themselves (g_msg) are evaluated, and then
377: they are transmitted to
378: .i patom .
379: Typically, they are strings, which evaluate to themselves.
380: The options are interpreted specially:
381: .Eb
382: \fImsg Option Summary\fP
383:
384: \fI(P\ p_portname)\fP causes subsequent output to go to the port p_portname
385: (port should be opened previously)
386:
387: \fIB\fP print a single blank.
388:
389: \fI(B\ 'n_b)\fP\ \ evaluate n_b and print that many blanks.
390:
391: \fIN\fP print a single by calling \fIterpr\fP.
392:
393: \fI(N\ 'n_n)\fP\ \ evaluate n_n and transmit
394: that many newlines to the stream.
395:
396: \fID\fP \fIdrain\fP the current port.
397: .Ee
398: .Lf nwritn "['p_port]"
399: .Re
400: the number of characters in the buffer
401: of the given port but not yet written out to the file or device.
402: The buffer is flushed
403: automatically when filled,
404: or when
405: .i terpr
406: is called.
407: .Lf outfile "'s_filename ['st_type]"
408: .Re
409: a port or nil
410: .Se
411: this opens a port to write s_filename.
412: If st_type is given and if it is a symbol or string whose name
413: begins with `a', then the file will be opened in append mode,
414: that is the current contents will not be lost and the next data
415: will be written at the end of the file.
416: Otherwise,
417: the file opened is truncated by \fIoutfile\fP if it existed beforehand.
418: If there are no free ports, outfile returns nil.
419: If one cannot write on s_filename, an error is signalled.
420: .\".pg
421: .Lf patom "'g_exp ['p_port]"
422: .Re
423: g_exp
424: .Se
425: g_exp is printed to the given port or the default port.
426: If g_exp is a symbol or string, the print name is printed without
427: any escape characters around special characters in the print name.
428: If g_exp is a list then \fIpatom\fP has the same effect as \fIprint\fP.
429: .Lf pntlen "'xfs_arg"
430: .Re
431: the number of characters needed to print xfs_arg.
432: .Lf portp "'g_arg"
433: .Re
434: t iff g_arg is a port.
435: .Lf pp "[l_option] s_name1 ..."
436: .Re
437: t
438: .Se
439: If s_name\fIi\fP has a function binding, it is pretty-printed,
440: otherwise if s_name\fIi\fP has a value then that is pretty-printed.
441: Normally the output of the pretty-printer goes to the standard
442: output port poport.
443: The options allow you to redirect it.
444: .Eb
445: \fIPP Option Summary\fP
446:
447: \fI(F\ s_filename)\fP direct future printing to s_filename
448:
449: \fI(P\ p_portname)\fP causes output to go to the port p_portname
450: (port should be opened previously)
451:
452: \fI(E\ g_expression)\fP evaluate g_expression and don't print
453: .Ee
454: .Lf princ "'g_arg ['p_port]"
455: .Eq
456: patom.
457: .Lf print "'g_arg ['p_port]"
458: .Re
459: nil
460: .Se
461: prints g_arg on the port p_port or the default port.
462: .Lf probef "'st_file"
463: .Re
464: t iff the file st_file exists.
465: .No
466: Just because it exists doesn't mean you can read it.
467: .Lf pp-form "'g_form ['p_port]"
468: .Re
469: t
470: .Se
471: g_form is pretty-printed to the port p_port (or poport if
472: p_port is not given).
473: This is the function which \fIpp\fP uses.
474: \fIpp-form\fP does not look for
475: function definitions or values of variables, it just prints out the form
476: it is given.
477: .No
478: This is useful as a top-level-printer, c.f.
479: .i top-level
480: in Chapter 6.
481: .Lf ratom "['p_port ['g_eof]]"
482: .Re
483: the next atom read from the given or default port.
484: On end of file, g_eof (default nil) is returned.
485: .Lf read "['p_port ['g_eof]]"
486: .Re
487: the next lisp expression read from the given or default port.
488: On end of file, g_eof (default nil) is returned.
489: .No
490: An error will occur if the reader is given an ill formed expression.
491: The most common error is too many right parentheses (note that this is
492: not considered an error in Maclisp).
493: .Lf readc "['p_port ['g_eof]]"
494: .Re
495: the next character read from the given or default port.
496: On end of file, g_eof (default nil) is returned.
497: .Lf readlist "'l_arg"
498: .Re
499: the lisp expression read from the list of characters in l_arg.
500: .Lf removeaddress "'s_name1 ['s_name2 ...]"
501: .Re
502: nil
503: .Se
504: the entries for the s_name\fIi\fP in the Lisp symbol table are removed.
505: This is useful if you wish to
506: .i cfasl
507: or
508: .i ffasl
509: in a file twice, since it is illegal for a symbol in the file you
510: are loading to already exist in the lisp symbol table.
511: .Lf resetio
512: .Re
513: nil
514: .Se
515: all ports except the standard input, output and error
516: are closed.
517: .Lf setsyntax "'s_symbol 's_synclass ['ls_func]"
518: .Re
519: t
520: .Se
521: this sets the code for s_symbol to sx_code in the current readtable.
522: If s_synclass is
523: .i macro
524: or
525: .i splicing
526: then ls_func is the associated function.
527: See Chapter 7 on the reader for more details.
528: .Lf sload "'s_file"
529: .Se
530: the file s_file (in the current directory) is opened for reading and
531: each form is read, printed and evaluated.
532: If the form is recognizable as a function definition, only its name
533: will be printed, otherwise the whole form is printed.
534: .No
535: This function is useful when a file refuses to load because
536: of a syntax error and you would like to narrow down
537: where the error is.
538: .Lf tab "'x_col ['p_port]"
539: .Se
540: enough spaces are printed to put the cursor on column x_col.
541: If the cursor is beyond x_col to start with, a
542: .i terpr
543: is done first.
544: .Lf terpr "['p_port]"
545: .Re
546: nil
547: .Se
548: a terminate line character sequence
549: is sent to the given port or the default port.
550: This will also drain the port.
551: .Lf terpri "['p_port]"
552: .Eq
553: terpr.
554: .Lf tilde-expand 'st_filename
555: .Re
556: a symbol whose pname is the tilde-expansion of the argument,
557: (as discussed at the beginning of this chapter).
558: If the argument does not begin with a tilde, the argument itself is
559: returned.
560: .Lf tyi "['p_port]"
561: .Re
562: the fixnum representation of the next character read.
563: On end of file, -1 is returned.
564: .Lf tyipeek "['p_port]"
565: .Re
566: the fixnum representation of the next character to be read.
567: .No
568: This does not actually read the character, it just peeks at it.
569: .Lf tyo "'x_char ['p_port]"
570: .Re
571: x_char.
572: .Se
573: the character whose fixnum representation is
574: x_code, is printed as a
575: on the given output port or the default output port.
576: .Lf untyi "'x_char ['p_port]"
577: .Se
578: x_char is put back in the input buffer so a subsequent
579: .i tyi
580: or
581: .i read
582: will read it first.
583: .No
584: a maximum of one character may be put back.
585: .Lf username-to-dir 'st_name
586: .Re
587: the home directory of the given user.
588: The result is stored, to avoid unnecessarily searching the
589: password file.
590: .Lf zapline
591: .Re
592: nil
593: .Se
594: all characters up to and including the line termination character
595: are read and discarded from the last port used
596: for input.
597: .No
598: this is used as the macro function for the semicolon character when
599: it acts as a comment character.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.