home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / old / ckermit4e / ckuv7.hlp < prev    next >
Internet Message Format  |  2020-01-01  |  3KB

  1. Date:     Fri, 17 May 85 18:53:43 CDT
  2. From:     Gregg Wonderly <gregg@okstate.csnet>
  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".
  57.