Annotation of 43BSDTahoe/ucb/lisp/doc/ch5.n, revision 1.1

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.

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.