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 / module2.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-30  |  1.6 KB  |  66 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <assert.h>
  4. #include <string.h>
  5. #include "link.h"
  6.  
  7. static int cmp (const void *p1, const void *p2)
  8. {
  9.     MODULE *pt1 = *(MODULE**)p1;
  10.     MODULE *pt2 = *(MODULE**)p2;
  11.     return strcmp(pt1->name,pt2->name);
  12. }
  13. /*
  14.     Format the dependancy list of a module into a simple makefile
  15. */
  16. PUBLIC void MODULES::prtdepend (
  17.     FILE *fout,
  18.     const char *dontcare,    // Module we don't want to know about
  19.                             // in the dependancy lists
  20.     int verbose,        // Print all module visited
  21.     int showerror)        // Shows undefined symbol
  22. {
  23.     MODULE **tbdep = new MODULE*[nbmod];
  24.     MODULE *ptmod = tbmod;
  25.     for (int i=0; i<nbmod; i++, ptmod++){
  26.         if (strcmp(ptmod->name,dontcare)!=0){
  27.             SYMBOL **ptext = ptmod->ext.tb;
  28.             int nbext = ptmod->ext.nb;
  29.             int nbdepmod = 0;
  30.             int nberr = 0;
  31.             for (int e=0; e<nbext; e++, ptext++){
  32.                 MODULE *mod = (*ptext)->module;
  33.                 if (mod==NULL){
  34.                     if (nberr == 0){
  35.                         depmod_error ("*** Unresolved symbols in module %s"
  36.                                 ,ptmod->name);
  37.                     }
  38.                     if (showerror){
  39.                         depmod_error ("\t%s",(*ptext)->name);
  40.                     }
  41.                     nberr++;
  42.                 }else{
  43.                     if (strcmp(mod->name,dontcare)!=0){
  44.                         for (int m=0; m<nbdepmod; m++){
  45.                             if (tbdep[m] == mod) break;
  46.                         }
  47.                         if (m == nbdepmod) tbdep[nbdepmod++] = mod;
  48.                     }
  49.                 }
  50.             }
  51.             if (nberr == 0 && verbose) printf ("%s\n",ptmod->name);
  52.             // Sort so it is nicer to look at :-)
  53.             qsort(tbdep,nbdepmod,sizeof(MODULE*),cmp);
  54.             fprintf (fout,"%s:",ptmod->name);
  55.             for (int m=0; m<nbdepmod; m++){
  56.                 if (m != 0 && (m & 3) == 0) fprintf (fout,"\\\n");
  57.                 fprintf (fout,"\t%s",tbdep[m]->name);
  58.             }
  59.             fprintf (fout,"\n\n");
  60.         }
  61.     }
  62.     delete [] tbdep;
  63. }
  64.  
  65.  
  66.