Annotation of 43BSDReno/share/doc/ps2/09.lisp/ch6.n, revision 1.1.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: .\"    @(#)ch6.n       6.1 (Berkeley) 4/29/86
                      6: .\"
                      7: ." $Header: ch6.n,v 1.4 83/07/21 21:08:16 sklower Exp $
                      8: .Lc System\ Functions 6
                      9: .pp
                     10: This chapter describes the functions used to interact
                     11: with internal components of the Lisp system and operating system.
                     12: .Lf allocate "'s_type 'x_pages"
                     13: .Wh
                     14: s_type is one of the 
                     15: .Fr
                     16: data types described in \(sc1.3.
                     17: .Re
                     18: x_pages.
                     19: .Se
                     20: .Fr
                     21: attempts to allocate x_pages of type s_type.
                     22: If there aren't x_pages of memory left, no space will be 
                     23: allocated and an error will occur.
                     24: The storage that is allocated is not given to the caller, instead it is 
                     25: added to the free storage list of s_type.
                     26: The functions
                     27: .i segment
                     28: and 
                     29: .i small-segment 
                     30: allocate blocks  of storage and return it to the caller.
                     31: .Lf argv "'x_argnumb"
                     32: .Re
                     33: a symbol whose pname is the x_argnumb\fIth\fP argument (starting at 0)
                     34: on the command
                     35: line which invoked the current lisp.
                     36: .No
                     37: if x_argnumb is less than zero, a fixnum whose value is the number of arguments
                     38: on the command line is returned.
                     39: \fI(argv\ 0)\fP returns the name of the lisp you are running.
                     40: .Lf baktrace 
                     41: .Re
                     42: nil
                     43: .Se
                     44: the lisp runtime stack is examined and the name of (most) of the functions
                     45: currently in execution are printed, most active first.
                     46: .No
                     47: this will occasionally miss the names of compiled lisp functions due to
                     48: incomplete information on the stack.
                     49: If you are tracing compiled code, then \fIbaktrace\fP won't be able
                     50: to interpret the stack unless 
                     51: .i (sstatus\ translink\ nil)
                     52: was done.
                     53: See the function 
                     54: .i showstack 
                     55: for another way of printing the lisp runtime
                     56: stack.
                     57: This misspelling is from Maclisp.
                     58: .Lf chdir "'s_path"
                     59: .Re
                     60: t iff the system call succeeds.
                     61: .Se
                     62: the current directory set to s_path. 
                     63: Among other things, this will affect the default location
                     64: where the input/output functions look for and create files.
                     65: .No
                     66: \fIchdir\fP follows the standard UNIX conventions, if s_path does not begin
                     67: with a slash, the default path is changed to the current path with
                     68: s_path appended.
                     69: .i Chdir
                     70: employs tilde-expansion (discussed in Chapter 5).
                     71: .Lf command-line-args
                     72: .Re
                     73: a list of the arguments typed on the command line, either to the
                     74: lisp interpreter, or saved lisp dump, or application compiled
                     75: with the autorun option (liszt -r).
                     76: .Lf deref "'x_addr"
                     77: .Re
                     78: The contents of x_addr, when thought of as a longword memory
                     79: location.
                     80: .No
                     81: This may be useful in constructing arguments to C functions
                     82: out of `dangerous' areas of memory.
                     83: .Lf dumplisp "s_name"
                     84: .Re
                     85: nil
                     86: .Se
                     87: the current lisp is dumped to the named file.
                     88: When s_name is executed, you will be in a lisp in the
                     89: same state as when the dumplisp was done.
                     90: .No
                     91: dumplisp will fail if one tries to 
                     92: write over the current running file. 
                     93: UNIX does not allow you to modify the file you are running.
                     94: .Lf eval-when "l_time g_exp1 ..."
                     95: .Se
                     96: l_time may contain any combination of the symbols
                     97: .i load ,
                     98: .i eval ,
                     99: and
                    100: .i compile .
                    101: The effects of load and compile is discussed in \(sc12.3.2.1
                    102: compiler.
                    103: If eval is present however, this simply means that the expressions g_exp1
                    104: and so on are evaluated from left to right.
                    105: If eval is not present, the forms are not evaluated.
                    106: .Lf exit "['x_code]"
                    107: .Re
                    108: nothing (it never returns).
                    109: .Se
                    110: the lisp system dies with exit code x_code or 0 if x_code is not
                    111: specified.
                    112: .Lf fake "'x_addr"
                    113: .Re
                    114: the lisp object at address x_addr.
                    115: .No
                    116: This is intended to be used by people debugging the lisp system.
                    117: .Lf fork 
                    118: .Re
                    119: nil to the child process and the process number of the child to 
                    120: the parent.
                    121: .Se
                    122: A copy of the current lisp system is made in memory and both
                    123: lisp systems now begin to run.
                    124: This function can be used interactively to temporarily
                    125: save the state of Lisp (as shown below), but you must be careful that only one
                    126: of the lisp's interacts with the terminal after the fork.
                    127: The
                    128: .i wait 
                    129: function is useful for this.
                    130: .Eb
                    131: \-> \fI(setq foo 'bar)\fP              ;; set a variable
                    132: bar
                    133: \-> \fI(cond ((fork)(wait)))\fP        ;; duplicate the lisp system and
                    134: nil                            ;; make the parent wait
                    135: \-> \fIfoo\fP                          ;; check the value of the variable
                    136: bar
                    137: \-> \fI(setq foo 'baz)\fP              ;; give it a new value
                    138: baz
                    139: \-> \fIfoo\fP                          ;; make sure it worked
                    140: baz
                    141: \-> \fI(exit)\fP                       ;; exit the child
                    142: (5274 . 0)                     ;; the \fIwait\fP function returns this
                    143: \-> \fIfoo\fP                          ;; we check to make sure parent was
                    144: bar                            ;; not modified.
                    145: .Ee
                    146: .Lf gc
                    147: .Re
                    148: nil
                    149: .Se
                    150: this causes a garbage collection.
                    151: .No
                    152: The function
                    153: .i gcafter
                    154: is not called automatically after this function finishes.
                    155: Normally the user doesn't have to call
                    156: .i gc
                    157: since
                    158: garbage collection occurs automatically whenever internal free lists
                    159: are exhausted.
                    160: .Lf gcafter "s_type"
                    161: .Wh
                    162: s_type is one of the 
                    163: .Fr
                    164: data types listed in \(sc1.3.
                    165: .No
                    166: this function is called by the garbage collector
                    167: after a garbage collection which was caused by running out of 
                    168: data type s_type.
                    169: This function should determine if more space need be allocated
                    170: and if so should allocate it.
                    171: There is a default gcafter function but users who want control over
                    172: space allocation can define their own -- but note that it must be
                    173: an nlambda.
                    174: .Lf getenv "'s_name"
                    175: .Re
                    176: a symbol whose pname is the value of s_name in the current 
                    177: UNIX environment.
                    178: If s_name doesn't exist in the current environment, a symbol with a null pname
                    179: is returned.
                    180: .Lf hashtabstat
                    181: .Re
                    182: a list of fixnums representing the number of symbols in each bucket of
                    183: the oblist.
                    184: .No
                    185: the oblist is stored a hash table of buckets.
                    186: Ideally there would be the same number of symbols in each bucket.
                    187: .Lf help "[sx_arg]"
                    188: .Se
                    189: If sx_arg is a symbol then
                    190: the portion of this manual beginning with the description of sx_arg
                    191: is printed on the terminal.
                    192: If sx_arg is  a fixnum or the name of one of the appendicies, that
                    193: chapter or appendix is printed on the terminal.
                    194: If no argument is provided, 
                    195: .i help
                    196: prints the options that it recognizes.
                    197: The program `more' is used to print the manual on the terminal; it will
                    198: stop after each page and will continue after the space key is pressed.
                    199: .Lf include "s_filename"
                    200: .Re
                    201: nil
                    202: .Se
                    203: The given filename is 
                    204: .i load ed
                    205: into the lisp.
                    206: .No
                    207: this is similar to load except the argument is not evaluated.
                    208: Include means something special to the compiler.
                    209: .Lf include-if "'g_predicate s_filename"
                    210: .Re
                    211: nil
                    212: .Se
                    213: This has the same effect as include, but is only actuated
                    214: if the predicate is non-nil.
                    215: .Lf includef "'s_filename"
                    216: .Re
                    217: nil
                    218: .Se
                    219: this is the same as 
                    220: .i include
                    221: except the argument is evaluated.
                    222: .Lf includef-if "'g_predicate s_filename"
                    223: .Re
                    224: nil
                    225: .Se
                    226: This has the same effect as includef, but is only actuated
                    227: if the predicate is non-nil.
                    228: .Lf maknum "'g_arg"
                    229: .Re
                    230: the address of its argument converted into a fixnum.
                    231: .Lf monitor "['xs_maxaddr]"
                    232: .Re
                    233: t
                    234: .Se
                    235: If xs_maxaddr is t then profiling of the entire lisp system is begun.
                    236: If xs_maxaddr is a fixnum then profiling is done only up to address
                    237: xs_maxaddr.
                    238: If xs_maxaddr is not given, then profiling is stopped and the data
                    239: obtained is written to the file 'mon.out' where it can be analyzed
                    240: with the UNIX 'prof' program.
                    241: .No
                    242: this function only works if the lisp system has been compiled
                    243: in a special way, otherwise, an error is invoked.
                    244: .Lf opval "'s_arg ['g_newval]"
                    245: .Re
                    246: the value associated with s_arg before the call.
                    247: .Se
                    248: If g_newval is specified, the value associated with s_arg is changed to
                    249: g_newval.
                    250: .No
                    251: \fIopval\fP keeps track of storage allocation. If s_arg is one of the data types
                    252: then \fIopval\fP will return a list of three fixnums representing the number of
                    253: items of that type in use, the number of pages allocated and the number
                    254: of items of that type per page.  
                    255: You should never try to change the value \fIopval\fP associates
                    256: with a data type using
                    257: \fIopval\fP.
                    258: .br
                    259: If s_arg is 
                    260: .i pagelimit
                    261: then 
                    262: .i opval 
                    263: will return (and set if g_newval is given)
                    264: the maximum amount of lisp data pages
                    265: it will allocate.
                    266: This limit should remain small unless you know your program requires 
                    267: lots of space as this limit will catch programs in infinite loops which
                    268: gobble up memory.
                    269: .Lf *process "'st_command ['g_readp ['g_writep]]"
                    270: .Re
                    271: either a fixnum if one argument is given, or a list of two ports and a
                    272: fixnum if two or three arguments are given.
                    273: .No
                    274: \fI*process\fP starts another process by passing st_command to the shell
                    275: (it first tries /bin/csh, then it tries /bin/sh if /bin/csh doesn't exist).
                    276: If only one argument is given to \fI*process\fP,
                    277: \fI*process\fP waits for the new
                    278: process to die and then returns the exit code of the new process.
                    279: If more two or three arguments are given, \fI*process\fP starts the process
                    280: and then returns a list which, depending on the value of g_readp
                    281: and g_writep, may contain i/o ports for communcating with the new
                    282: process.
                    283: If g_writep is non-null, then a port will be created which the lisp program
                    284: can use to send characters to the new process.
                    285: If g_readp is non-null, then a port will be created which the lisp program
                    286: can use to read characters from the new process.
                    287: The value returned by \fI*process\fP is (readport\ writeport\ pid)
                    288: where readport and writeport are either nil or a port based on the value
                    289: of g_readp and g_writep.  Pid is the process id of the new process.
                    290: Since it is hard to remember the order of g_readp and g_writep, the
                    291: functions \fI*process-send\fP and \fI*process-receive\fP were written to
                    292: perform the common functions.
                    293: .Lf *process-receive "'st_command"
                    294: .Re
                    295: a port which can be read.
                    296: .Se
                    297: The command st_command is given to the shell and it is started running in the
                    298: background.
                    299: The output of that command is available for reading via the port returned.
                    300: The input of the command process is set to /dev/null.
                    301: .Lf *process-send "'st_command"
                    302: .Re
                    303: a port which can be written to.
                    304: .Se
                    305: The command st_command is given to the shell and it is started runing in the
                    306: background.
                    307: The lisp program can provide input for that command
                    308: by sending characters to the port returned by this function.
                    309: The output of the command process is set to /dev/null.
                    310: .Lf process "s_pgrm [s_frompipe s_topipe]"
                    311: .Re
                    312: if the optional arguments are
                    313: not present a fixnum which is the exit code when s_prgm dies.
                    314: If the optional arguments are present, it returns a fixnum which
                    315: is the process id of the child.
                    316: .No
                    317: This command is obsolete.
                    318: New programs should use one of the \fI*process\fP commands
                    319: given above.
                    320: .Se
                    321: If s_frompipe and s_topipe are given, they are bound to 
                    322: ports which are pipes which
                    323: direct characters from 
                    324: .Fr
                    325: to the new process
                    326: and to
                    327: .Fr
                    328: from the new process respectively.
                    329: .i Process
                    330: forks a process named s_prgm and waits for it to die iff there
                    331: are no pipe arguments given.
                    332: .Lf ptime 
                    333: .Re
                    334: a list of two elements.
                    335: The first is the amount of processor time used
                    336: by the lisp system so far, and the 
                    337: second is the amount of time used by the garbage collector so far.
                    338: .No
                    339: the time is measured in those units used by the
                    340: .i times (2)
                    341: system call, usually 60\fIth\fPs of a second.
                    342: The first number includes the second number.
                    343: The amount of time used by garbage collection is not recorded
                    344: until the first call to ptime.
                    345: This is done to prevent overhead when the user is not interested in
                    346: garbage collection times.
                    347: .Lf reset
                    348: .Se
                    349: the lisp runtime stack is cleared and the system restarts at the top level 
                    350: by executing a \fI(funcall\ top-level\ nil)\fP.
                    351: .Lf restorelisp "'s_name"
                    352: .Se
                    353: this reads in file s_name (which was created by 
                    354: .i savelisp )
                    355: and then does a \fI(reset)\fP.
                    356: .No
                    357: This is only used on VMS systems where 
                    358: .i dumplisp
                    359: cannot be used.
                    360: .Lf retbrk "['x_level]
                    361: .Wh
                    362: x_level is a small integer of either sign.
                    363: .Se
                    364: The default error handler keeps a notion of the current level
                    365: of the error caught.  If x_level is negative, control is thrown
                    366: to this default error handler whose level is that many less than
                    367: the present, or to \fItop-level\fP if there aren't enough.
                    368: If x_level is non-negative, control is passed to the handler at
                    369: that level.  If x_level is not present, the value -1 is taken by
                    370: default.
                    371: .Lf *rset "'g_flag"
                    372: .Re
                    373: g_flag
                    374: .Se
                    375: If g_flag is non nil then the lisp system will maintain extra information
                    376: about calls to \fIeval\fP and \fIfuncall\fP.
                    377: This record keeping slows down the evaluation but this is 
                    378: required  for the functions
                    379: \fIevalhook\fP, \fIfuncallhook\fP, and \fIevalframe\fP to work. 
                    380: To debug compiled lisp code the transfer tables should be unlinked:
                    381: \fI(sstatus\ translink\ nil)\fP
                    382: .Lf savelisp "'s_name"
                    383: .Re
                    384: t
                    385: .Se
                    386: the state of the Lisp system is saved in the file s_name.
                    387: It can be read in by 
                    388: .i restorelisp .
                    389: .No
                    390: This is only used on VMS systems where 
                    391: .i dumplisp
                    392: cannot be used.
                    393: .Lf segment "'s_type 'x_size"
                    394: .Wh
                    395: s_type is one of the data types given in \(sc1.3
                    396: .Re
                    397: a segment of contiguous lispvals of type s_type.
                    398: .No
                    399: In reality, 
                    400: .i segment 
                    401: returns a new data cell of type s_type and allocates
                    402: space for x_size \- 1 more s_type's beyond the one returned.
                    403: .i Segment 
                    404: always allocates new space and does so in 512 byte chunks.
                    405: If you ask for 2 fixnums, segment will actually allocate 128 of them
                    406: thus wasting 126 fixnums.
                    407: The function
                    408: .i small-segment
                    409: is a smarter space allocator and should be used whenever possible.
                    410: .Lf shell
                    411: .Re
                    412: the exit code of the shell when it dies.
                    413: .Se
                    414: this forks a new shell and returns when the shell dies.
                    415: .Lf showstack
                    416: .Re
                    417: nil
                    418: .Se
                    419: all forms currently in evaluation are printed, beginning with the most recent.
                    420: For compiled code the most that 
                    421: showstack will show is the function name and it may miss
                    422: some functions.
                    423: .Lf signal "'x_signum 's_name"
                    424: .Re
                    425: nil if no previous call to signal has been made, or the previously
                    426: installed s_name.
                    427: .Se
                    428: this declares that the function named s_name 
                    429: will handle the signal number x_signum.
                    430: If s_name is nil, the signal is ignored.  Presently only
                    431: four UNIX signals are caught.
                    432: They and their numbers are:
                    433: Interrupt(2), Floating exception(8), Alarm(14), and
                    434: Hang-up(1).
                    435: .Lf sizeof "'g_arg"
                    436: .Re
                    437: the number of bytes required to store one object of type g_arg, encoded
                    438: as a fixnum.
                    439: .Lf small-segment "'s_type 'x_cells"
                    440: .Wh
                    441: s_type is one of fixnum, flonum and value.
                    442: .Re
                    443: a segment of x_cells data objects of type s_type.
                    444: .Se
                    445: This may call
                    446: .i segment
                    447: to allocate new space or it may be able to fill the request on a page
                    448: already allocated.
                    449: The value returned by 
                    450: .i small-segment 
                    451: is usually stored in the data subpart
                    452: of an array object.
                    453: .Lf sstatus "g_type g_val"
                    454: .Re
                    455: g_val
                    456: .Se
                    457: If g_type is not one of the special sstatus codes described in the 
                    458: next few pages
                    459: this simply sets g_val as the value of status 
                    460: type g_type in the system status property list.
                    461: .Lf sstatus\ appendmap "g_val"
                    462: .Re
                    463: g_val
                    464: .Se
                    465: If g_val is non-null when 
                    466: .i fasl
                    467: is told to create a load map, it will append to the file name given in
                    468: the 
                    469: .i fasl
                    470: command, rather than creating a new map file.
                    471: The initial value is nil.
                    472: .Lf sstatus\ automatic-reset "g_val"
                    473: .Re
                    474: g_val
                    475: .Se
                    476: If g_val is non-null when an error occurs which no one wants to 
                    477: handle, a 
                    478: .i reset
                    479: will be done instead of entering a primitive internal break loop.
                    480: The initial value is t.
                    481: .Lf sstatus\ chainatom "g_val"
                    482: .Re
                    483: g_val
                    484: .Se
                    485: If g_val is non nil and a 
                    486: .i car
                    487: or 
                    488: .i cdr
                    489: of a symbol is done, then nil will be returned instead of an error
                    490: being signaled.
                    491: This only affects the interpreter, not the compiler.
                    492: The initial value is nil.
                    493: .Lf sstatus\ dumpcore "g_val"
                    494: .Re
                    495: g_val
                    496: .Se
                    497: If g_val is nil, 
                    498: .Fr 
                    499: tells UNIX that a segmentation violation or 
                    500: bus error should cause a core dump.
                    501: If g_val is non nil then 
                    502: .Fr
                    503: will catch those errors and print a message advising the user to reset.
                    504: .No
                    505: The initial value for this flag is nil, and only those knowledgeable of
                    506: the innards of the lisp system should ever set this flag non nil.
                    507: .Lf sstatus\ dumpmode "x_val"
                    508: .Re
                    509: x_val
                    510: .Se
                    511: All subsequent 
                    512: .i dumplisp 's
                    513: will be done in mode x_val.
                    514: x_val may be either 413 or 410 (decimal).
                    515: .No
                    516: the advantage of mode 413 is that the dumped Lisp can be demand paged in when
                    517: first started, which will make it start faster and disrupt other users less.
                    518: The initial value is 413.
                    519: .Lf sstatus\ evalhook "g_val"
                    520: .Re
                    521: g_val
                    522: .Se
                    523: When g_val is non nil, this enables the 
                    524: evalhook and funcallhook traps in the evaluator.
                    525: See \(sc14.4 for more details.
                    526: .Lf sstatus\ feature "g_val"
                    527: .Re
                    528: g_val
                    529: .Se
                    530: g_val is added to the \fI(status\ features)\fP list, 
                    531: .Lf sstatus\ gcstrings "g_val"
                    532: .Re
                    533: g_val
                    534: .Se
                    535: if g_val is non-null, and if string garbage collection was enabled when
                    536: the lisp system was compiled, string space will be garbage collected.
                    537: .No
                    538: the default value for this is nil since in most applications garbage
                    539: collecting strings is a waste of time.
                    540: .Lf sstatus\ ignoreeof "g_val"
                    541: .Re
                    542: g_val
                    543: .Se
                    544: If g_val is non-null when
                    545: an end of file (CNTL-D on UNIX) is typed to the standard top-level interpreter,
                    546: it will be ignored rather then cause the lisp system to exit.
                    547: If the the standard input is a file or pipe then this has no effect,
                    548: an EOF will always cause lisp to exit.
                    549: The initial value is nil.
                    550: .Lf sstatus\ nofeature "g_val"
                    551: .Re
                    552: g_val
                    553: .Se
                    554: g_val is removed from the status features list if it was present.
                    555: .Lf sstatus\ translink "g_val"
                    556: .Re
                    557: g_val
                    558: .Se
                    559: If g_val is nil then all transfer tables are cleared and further calls
                    560: through the transfer table will not cause the fast links to be set up.
                    561: If g_val is the symbol 
                    562: .i on
                    563: then all possible transfer table entries will be linked and the flag
                    564: will be set to cause fast links to be set up dynamically.
                    565: Otherwise all that is done is to set the flag to cause fast links
                    566: to be set up dynamically.
                    567: The initial value is nil.
                    568: .No
                    569: For a discussion of transfer tables, see \(sc12.8.
                    570: .Lf sstatus\ uctolc "g_val"
                    571: .Re
                    572: g_val
                    573: .Se
                    574: If g_val is not nil then all unescaped capital letters 
                    575: in symbols read by the reader will be converted to lower case.
                    576: .No
                    577: This allows 
                    578: .Fr
                    579: to be compatible with single case lisp
                    580: systems (e.g. Maclisp, Interlisp and UCILisp).
                    581: .Lf status "g_code"
                    582: .Re
                    583: the value associated with the status code g_code
                    584: if g_code is not one of the special cases given below
                    585: .Lf status\ ctime 
                    586: .Re
                    587: a symbol whose print name is the current time and date.
                    588: .Ex
                    589: \fI(status ctime)\fP = |Sun Jun 29 16:51:26 1980|
                    590: .No
                    591: This has been made obsolete by \fItime-string\fP, described below.
                    592: .Lf status\ feature "g_val"
                    593: .Re
                    594: t iff g_val is in the status features list.
                    595: .Lf status\ features 
                    596: .Re
                    597: the value of the features code, which is a list of features which
                    598: are present in this system.
                    599: You add to this list with \fI(sstatus\ feature\ 'g_val)\fP
                    600: and test if feature g_feat is present with \fI(status\ feature\ 'g_feat)\fP.
                    601: .Lf status\ isatty 
                    602: .Re
                    603: t iff the standard input is a terminal.
                    604: .Lf status\ localtime
                    605: .Re
                    606: a list of fixnums representing the current time.
                    607: .Ex
                    608: \fI(status localtime)\fP =  (3 51 13 31 6 81 5 211 1)
                    609: .br
                    610: means 3\fIrd\fP second, 51\fIst\fP minute, 13\fIth\fP hour (1 p.m),
                    611: 31\fIst\fP day, month 6 (0\ =\ January), year 81 (0\ =\ 1900),
                    612: day of the week 5 (0\ =\ Sunday), 211\fIth\fP day of the year
                    613: and daylight savings time is in effect.
                    614: .Lf status\ syntax "s_char"
                    615: .No
                    616: This function should not be used.
                    617: See the description of
                    618: .i getsyntax
                    619: (in Chapter 7) for a replacement.
                    620: .Lf status\ undeffunc
                    621: .Re
                    622: a list of all functions which transfer table entries point to but which
                    623: are not defined at this point.
                    624: .No
                    625: Some of the undefined functions listed could be arrays which have yet
                    626: to be created.
                    627: .Lf status\ version
                    628: .Re
                    629: a string which is the current lisp version name.
                    630: .Ex
                    631: \fI(status version)\fP = "Franz Lisp, Opus 38.61"
                    632: .Lf syscall "'x_index ['xst_arg1 ...]"
                    633: .Re
                    634: the result of issuing the UNIX system call number x_index with arguments
                    635: xst_arg\fIi\fP.
                    636: .No
                    637: The UNIX system calls are described in section 2 of the
                    638: UNIX Programmer's manual. 
                    639: If xst_arg\fIi\fP is a fixnum, then 
                    640: its value is passed as an argument, if it is a symbol then 
                    641: its pname is passed and finally if it is a string then the string itself
                    642: is passed as an argument.
                    643: Some useful syscalls are:
                    644: .br
                    645: \fI(syscall\ 20)\fP returns process id.
                    646: .br
                    647: \fI(syscall\ 13)\fP returns the number of seconds since Jan 1, 1970.
                    648: .br
                    649: \fI(syscall\ 10\ 'foo)\fP will unlink (delete) the file foo.
                    650: .Lf sys:access "'st_filename 'x_mode"
                    651: .Lx sys:chmod "'st_filename 'x_mode"
                    652: .Lx sys:gethostname
                    653: .Lx sys:getpid
                    654: .Lx sys:getpwnam 'st_username
                    655: .Lx sys:link "'st_oldfilename 'st_newfilename"
                    656: .Lx sys:time
                    657: .Lx sys:unlink 'st_filename
                    658: .No
                    659: We have been warned that the actual system call numbers may vary
                    660: among different UNIX systems.  Users concerned about portability
                    661: may wish to use this group of functions.
                    662: Another advantage is that tilde-expansion is performed on
                    663: all filename arguments.
                    664: These functions do what is described
                    665: in the system call section of your UNIX manual.
                    666: .br
                    667: .sp
                    668: .i sys:getpwnam
                    669: returns a vector of four entries from the password file, being
                    670: the user name, user id, group id, and home directory.
                    671: .Lf time-string "['x_seconds]"
                    672: .Re
                    673: an ascii string giving the time and date which was
                    674: x_seconds after UNIX's idea of creation
                    675: (Midnight, Jan 1, 1970 GMT).  If no argument is given,
                    676: time-string returns the current date.
                    677: This supplants \fI(status ctime)\fP, and may be used
                    678: to make the results of \fIfilestat\fP more intelligible.
                    679: .Lf top-level
                    680: .Re
                    681: nothing (it never returns)
                    682: .No
                    683: This function is the top-level read-eval-print loop.
                    684: It never returns any value.
                    685: Its main utility is that if you redefine it, and do a (reset) then the
                    686: redefined (top-level) is then invoked.
                    687: The default top-level for Franz, allow one to specify
                    688: his own printer or reader, by binding the symbols \fBtop-level-printer\fP
                    689: and \fBtop-level-reader\fP.
                    690: One can let the default top-level do most of the drudgery in catching
                    691: .i reset 's,
                    692: and reading in .lisprc files,
                    693: by binding the symbol \fBuser-top-level\fP, to a routine that
                    694: concerns itself only with the read-eval-print loop.
                    695: .Lf wait
                    696: .Re
                    697: a dotted pair \fI(processid . status)\fP when the
                    698: next child process dies. 

unix.superglobalmegacorp.com

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