home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD v1.2 / amidev_cd_12.iso / reference / amiga_mail_vol2 / v-39 / namemode.c < prev    next >
C/C++ Source or Header  |  1996-01-30  |  3KB  |  102 lines

  1. #include <exec/types.h>
  2. #include <graphics/displayinfo.h>
  3. #include <stdio.h>
  4. #include <string.h>
  5.  
  6. #include <clib/graphics_protos.h>
  7. #include <clib/utility_protos.h>
  8.  
  9. /*****************************************************************************/
  10.  
  11. #define MONITOR_PART(id) ((id) & MONITOR_ID_MASK)
  12.  
  13. /*****************************************************************************/
  14.  
  15. BOOL NameMode (ULONG modeID, STRPTR result)
  16. {
  17.   struct NameInfo nameInfo;
  18.   struct DisplayInfo dispInfo;
  19.   struct DimensionInfo dimInfo;
  20.   struct MonitorInfo monInfo;
  21.   char buffer[DISPLAYNAMELEN + 1];
  22.   UWORD len;
  23.   DisplayInfoHandle dh;
  24.  
  25.   result[0] = 0;
  26.  
  27.   dh = FindDisplayInfo (modeID);
  28.   if (GetDisplayInfoData (dh, (APTR) & dispInfo, sizeof (struct DisplayInfo),
  29.                           DTAG_DISP, INVALID_ID), INVALID_ID)
  30.   {
  31.     if (!dispInfo.NotAvailable)
  32.     {
  33.       if (GetDisplayInfoData (dh, (APTR) & dimInfo, sizeof (struct DimensionInfo),
  34.                               DTAG_DIMS, INVALID_ID))
  35.       {
  36.     /* Get name or make one if no name available */
  37.     if (GetDisplayInfoData (dh, (APTR) & nameInfo, sizeof (struct NameInfo),
  38.                             DTAG_NAME, INVALID_ID))
  39.     {
  40.       strcpy (result, nameInfo.Name);
  41.       return (TRUE);
  42.     }
  43.     else
  44.     {
  45.       if (GetDisplayInfoData (dh, (APTR) & monInfo, sizeof (struct MonitorInfo),
  46.                               DTAG_MNTR, INVALID_ID))
  47.       {
  48.         if ((monInfo.Mspc) && (monInfo.Mspc->ms_Node.xln_Name))
  49.         {
  50.           strcpy (buffer, monInfo.Mspc->ms_Node.xln_Name);
  51.           len = strlen (buffer);
  52.           if ((len > 8) && (Strnicmp (&buffer[len - 8], ".monitor", len - 8)
  53.                                                                          == 0))
  54.           {
  55.         buffer[len - 8] = 0;
  56.         len -= 8;
  57.           }
  58.  
  59.           while (len > 0)
  60.         buffer[--len] = ToUpper (buffer[len]);
  61.         }
  62.       }
  63.  
  64.       sprintf (result, "%s:%lu x %lu %s%s%s",
  65.            buffer,
  66.            (dimInfo.Nominal.MaxX - dimInfo.Nominal.MinX + 1),
  67.            (dimInfo.Nominal.MaxY - dimInfo.Nominal.MinY + 1),
  68.            (dispInfo.PropertyFlags & DIPF_IS_HAM) ? "HAM " :
  69.            (dispInfo.PropertyFlags & DIPF_IS_EXTRAHALFBRITE) ? "EHB " : "",
  70.            (dispInfo.PropertyFlags & DIPF_IS_PF2PRI) ? "DPF2 " :
  71.            (dispInfo.PropertyFlags & DIPF_IS_DUALPF) ? "DPF " : "",
  72.            (dispInfo.PropertyFlags & DIPF_IS_LACE) ? "Laced " : "", "");
  73.  
  74.       return (TRUE);
  75.     }
  76.       }
  77.     }
  78.   }
  79.  
  80.   return (FALSE);
  81. }
  82.  
  83. /*****************************************************************************/
  84.  
  85. void main (void)
  86. {
  87.   ULONG modeID;
  88.   char name[64];
  89.  
  90.   modeID = INVALID_ID;
  91.   while ((modeID = NextDisplayInfo (modeID)) != INVALID_ID)
  92.   {
  93.     if (MONITOR_PART (modeID))    /* ignore "default" monitor */
  94.     {
  95.       if (NameMode (modeID, name))
  96.       {
  97.     printf ("%s\n", name);
  98.       }
  99.     }
  100.   }
  101. }
  102.