home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 074.lha / Exec / ListLibs.c < prev    next >
C/C++ Source or Header  |  1986-11-20  |  3KB  |  140 lines

  1. /*
  2.  *    ListLibs.c
  3.  *
  4.  *    This program produces a list of libraries on it's standard.
  5.  *    output.
  6.  *
  7.  *    Program        Date        Action
  8.  *    D. Thomas    24 April 1987    v1.0 Initial Coding.
  9.  *
  10.  */
  11.  
  12. #include "exec/execbase.h"
  13. #include "exec/memory.h"
  14. #include "functions.h"
  15.  
  16. extern struct ExecBase *SysBase;    /* Exec's base ptr */
  17.  
  18. main ()
  19.  
  20. {
  21.  
  22.   register struct Library *t;       /* ptr to lib list */
  23.   register struct List     head;    /* for my copy of the lib list */
  24.   char                    *flag;
  25.  
  26.   NewList (&head);
  27.  
  28.   Disable ();
  29.  
  30.   if (getlist (&SysBase->LibList, &head))
  31.     cleanup (&head);
  32.  
  33.   Enable ();
  34.  
  35.   puts ("Flags   NegS PosS Version Revision OpenCnt Name");
  36.  
  37.   while (t = (struct Library *) RemHead (&head)) {
  38.  
  39.     if (t->lib_Flags & LIBF_SUMMING)
  40.       flag = "Summing";
  41.     else if (t->lib_Flags & LIBF_CHANGED)
  42.       flag = "Changed";
  43.     else if (t->lib_Flags & LIBF_SUMUSED)
  44.       flag = "Sumused";
  45.     else if (t->lib_Flags & LIBF_DELEXP)
  46.       flag = "Expunge";
  47.     else
  48.       flag = "";
  49.  
  50.     printf ("%-7.7s ", flag);
  51.     printf ("%4x %4x %7u %8u %7u %s\n",
  52.       t->lib_NegSize, t->lib_PosSize, t->lib_Version, t->lib_Revision,
  53.       t->lib_OpenCnt, 
  54.       (t->lib_Node.ln_Name ? t->lib_Node.ln_Name : "<unset>"));
  55.     
  56.     if (t->lib_Node.ln_Name)
  57.       FreeMem (t->lib_Node.ln_Name, (long) strlen (t->lib_Node.ln_Name) + 1);
  58.     FreeMem (t, (long) sizeof *t);
  59.  
  60.   }
  61.  
  62.   exit (0);
  63.  
  64. }
  65.  
  66. freelist (l)
  67.  
  68. struct List *l;
  69.  
  70. {
  71.  
  72.   struct Library *t;
  73.  
  74.   while (t = (struct Library *) RemHead (l)) {
  75.     if (t->lib_Node.ln_Name)
  76.       FreeMem (t->lib_Node.ln_Name, (long) strlen (t->lib_Node.ln_Name) + 1);
  77.     FreeMem (t, (long) sizeof *t);
  78.   }
  79.  
  80. }
  81.  
  82. cleanup (l)
  83.  
  84. struct List *l;
  85.  
  86. {
  87.  
  88.   Enable ();
  89.   freelist (l);
  90.   puts ("Out of Memory!");
  91.   exit (0);
  92.  
  93. }
  94.  
  95. getlist (tl, l)
  96.  
  97. struct List *tl;
  98. struct List *l;
  99.  
  100. {
  101.  
  102.   register struct Library *t;
  103.  
  104.   for (t = (struct Library *) tl->lh_Head;
  105.        t->lib_Node.ln_Succ;
  106.        t = (struct Library *) t->lib_Node.ln_Succ)
  107.     if (onenode (t, l))
  108.       return TRUE;
  109.  
  110.   return FALSE;
  111.  
  112. }
  113.  
  114. onenode (t, l)
  115.  
  116. struct Library *t;
  117. struct List    *l;
  118.  
  119. {
  120.  
  121.   register struct Library *tc;
  122.  
  123.   if (!(tc = (struct Library *) AllocMem ((long) sizeof *t, MEMF_CLEAR)))
  124.       return TRUE;
  125.   *tc = *t;
  126.  
  127.   if (t->lib_Node.ln_Name) {
  128.     if (!(tc->lib_Node.ln_Name = (char *) AllocMem ((long) strlen (t->lib_Node.ln_Name) + 1, 0L))) {
  129.       FreeMem (tc, (long) sizeof *tc);
  130.       return TRUE;
  131.     }
  132.     strcpy (tc->lib_Node.ln_Name, t->lib_Node.ln_Name);
  133.   }
  134.  
  135.   AddTail (l, tc);
  136.  
  137.   return FALSE;
  138.  
  139. }
  140.