Annotation of researchv10dc/lbin/kermit/ckuv7.hlp, revision 1.1.1.1

1.1       root        1: Date:     Fri, 17 May 85 18:53:43 CDT
                      2: From:     Gregg Wonderly <[email protected]>
                      3: Subject:  Additional C-Kermit Implementation Notes for Version 7 UNIX
                      4: 
                      5:      The Version 7 implementation takes advantage of some information present
                      6: in the UNIX kernal to obtain the count of characters available for input from
                      7: a particular file descriptor.  The function initrawq() is used to obtain the
                      8: kernal address of this value.  It is a structure value that is associated with
                      9: the clist for the file descriptor passed.  The struture member is the "rawq"
                     10: count of characters available.  The include file <sys/clist.h> on our system
                     11: shows this value as the first "int" in the structure.  The operations in
                     12: initrawq() cause the child process to "block", trying to read from the "tty"
                     13: file descriptor.  Then, by looking through the "proc" structures, we find the
                     14: proper process, and get its "wchan" pointer.  This is a pointer to the clist
                     15: in question, in the kernal memory.
                     16: 
                     17:      The "wchan" address can then be used as an offset by lseek to select the
                     18: proper address in the kernal (/dev/kmem) to read from.  By reading the first
                     19: "int" at this address, we obtain a count of the characters available on the
                     20: raw input queue.
                     21: 
                     22:      The MAKE variables PROC, NPROCNAME, BOOTNAME, are necessary to get around
                     23: different naming conventions across systems.  The variable PROC is the name
                     24: given to the process structure array on your system.  The include file <sys/
                     25: proc.h> (or some facsimile) should contain a declaration of the form:
                     26: 
                     27:      extern struct proc *proc;
                     28: or
                     29:      extern struct proc proc[];
                     30: 
                     31: The name of the pointer/array, is what you are concerned with.  It may be
                     32: something like "_proc", "proc", or some deriviation.  You should define
                     33: the MAKE variable PROC to this string, whatever it may be.  On our system,
                     34: I use "PROC=proc".  If your definition is for an array, then you should define
                     35: the MAKE variable DIRECT to be "-DDIRECT", as it is in the MAKEFILE.  If your
                     36: definition is for a pointer to the array, then you should remove the definition
                     37: of DIRECT, so the the line reads "DIRECT=" (no value here).  This is necessary
                     38: for the routine to properly locate the "proc" array.  If you have an array
                     39: declaration, then the call to nlist() will return the address of the array.
                     40: However, if you have a pointer, then nlist() returns the address of the
                     41: pointer.  This requires one extra level of dereference to obtain the address of
                     42: the array.
                     43: 
                     44:      The same thing applies to the variable NPROCNAME.  On our system, this is
                     45: defined as "NPROCNAME=nproc".  This should also be declared in <sys/proc.h>
                     46: something like:
                     47: 
                     48:      extern int nproc;
                     49: 
                     50: This value is the number (Maximum that is) of process entries in the "proc"
                     51: array.
                     52: 
                     53:      BOOTNAME is the name of the kernal image on your system.  On our system,
                     54: it is "/edition7".  On others, it is probably "/unix", or something close.
                     55: The nlist() function uses this file to look for the addresses of the kernal
                     56: variables "proc", and "nproc".

unix.superglobalmegacorp.com

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