home *** CD-ROM | disk | FTP | other *** search
/ PC-Online 1996 May / PCOnline_05_1996.bin / linux / source / a / bin / modules-.2 / modules- / modules-1.2.8 / depmod / link.h < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-31  |  2.4 KB  |  121 lines

  1. #ifndef LINK_H
  2. #define LINK_H
  3.  
  4. #define DEPMOD_RELEASE        "0.13"
  5. #define ETC_CONF_MODULES    "/etc/conf.modules"
  6. #define SHELL_WILD "\"\'\140$*?[]{}|\\"
  7.  
  8. #ifndef STDIO_H
  9.     #include <stdio.h>
  10. #endif
  11.  
  12.  
  13. class MODULE;
  14. struct SYMBOL{
  15.     SYMBOL *next;    // Liste lié pour hashing
  16.     MODULE *module;    // Module qui déclare ce symbole
  17.     char *name;
  18.     char requis;        // Requis par d'autre module
  19.     char defini;        // La définition a été vue
  20.     char vue_avant;        // Définie avant d'etre vue
  21.     char force;            // Chargement doit être forcé pour éviter
  22.                         // un link multi passe.
  23.     char is_common;        // ???
  24.     char is_dup;        // Ce symbole a déjà été chargé d'un autre module
  25. };
  26.  
  27. enum SYM_STATUS {
  28.     SYM_PASUTIL,    // Requis par un module qui n'est pas requis lui meme.
  29.     SYM_DEFINI,        // On a trouve un module qui le connait
  30.     SYM_REQUIS        // Requis par un autre module
  31. };
  32.  
  33. struct LIST_SYMBOL{
  34.     LIST_SYMBOL *next;
  35.     SYMBOL alloc[1];
  36.     // Structure alloue plus longue
  37. };
  38.  
  39. struct LIST_TEXTE {
  40.     LIST_TEXTE *next;
  41.     char alloc[1];
  42.     // Structure alloue plus longue
  43. };
  44.     
  45. class MODULES;
  46. class SYMBOLS{
  47.     SYMBOL *hash[2048];
  48.     struct {
  49.         LIST_SYMBOL *cur;
  50.         int nb;
  51.         SYMBOL *ptacc;
  52.         SYMBOL *lastacc;
  53.     } sym;
  54.     /*~PROTOBEG~ SYMBOLS */
  55. public:
  56.     SYMBOLS (void);
  57.     SYMBOL *add (const char *name,
  58.          MODULE *module,
  59.          SYM_STATUS status,
  60.          int &module_requis,
  61.          int is_common);
  62. protected:
  63.     void allocsym (void);
  64. public:
  65.     void dump (FILE *fout);
  66.     int findforce (char **tb, int maxtb);
  67.     /*~PROTOEND~ SYMBOLS */
  68. };
  69.  
  70. struct MODULE{
  71.     char *name;
  72.     struct {        // Symbole publique et externe de ce module
  73.         SYMBOL **tb;
  74.         int nb;
  75.     } pub,ext;
  76.     char is_load;    // Ce module doit être inclus dans le programme
  77.     short lib;        // Numéro de la librairie de provenance
  78. };
  79.  
  80. class MODULES{
  81.     MODULE *tbmod;
  82.     int nbmod;
  83.     char **tblibs;
  84.     int nblib;
  85.     /*~PROTOBEG~ MODULES */
  86. public:
  87.     MODULES (void);
  88.     int findundef (FILE *fout);
  89.     int loadlib (SYMBOLS&syms, const char *libname);
  90.     int loadobj (SYMBOLS&syms, const char *objname);
  91.     int multipass (void);
  92.     void prtdepend (FILE *fout,
  93.          const char *dontcare,
  94.          int verbose,
  95.          int showerror);
  96.     MODULE *setdummy (const char *name);
  97. private:
  98.     void setmod (MODULE *mod,
  99.          SYMBOL *tbpub[],
  100.          int nbpub,
  101.          SYMBOL *tbext[],
  102.          int nbext,
  103.          int module_requis);
  104. public:
  105.     void showall (FILE *fout);
  106.     int showload (FILE *fout);
  107.     void showundef (SYMBOL *undef, FILE *fout);
  108.     /*~PROTOEND~ MODULES */
  109. };
  110.  
  111. extern int debugmode;
  112. extern char *optlist[];
  113. extern char *aliaslist[];
  114. extern int aliasavail;
  115. extern char depmod_syslog;
  116.  
  117. #include "link.p"
  118.  
  119. #endif
  120.  
  121.