home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: SysTools / SysTools.zip / ktskmg2.zip / src / kObjectRecord.cpp < prev    next >
C/C++ Source or Header  |  2000-04-29  |  5KB  |  171 lines

  1. /* $Id: kObjectRecord.cpp,v 1.1 2000/04/29 19:06:35 stknut Exp $
  2.  *
  3.  * kObjectRecord - Container record.
  4.  *
  5.  * Copyright (c) 2000 knut st. osmundsen (knut.stange.osmundsen@pmsc.no)
  6.  *
  7.  */
  8.  
  9.  
  10.  
  11. /*******************************************************************************
  12. *   Defined Constants And Macros                                               *
  13. *******************************************************************************/
  14. #define INCL_DOSERRORS
  15. #define INCL_WIN
  16.  
  17. /*******************************************************************************
  18. *   Header Files                                                               *
  19. *******************************************************************************/
  20. #include <os2.h>
  21. #ifdef USE_KLIB
  22.     #include <kAssert.h>
  23.     #include <kLog.h>
  24.     #include <kHeap.h>
  25. #endif
  26. #include <stddef.h>
  27. #include <stdio.h>
  28. #include <string.h>
  29.  
  30. #include "kBase.h"
  31. #include "kError.h"
  32. #include "kContainer.h"
  33. #include "kQuerySysState.h"
  34. #include "kObjectRecord.h"
  35.  
  36.  
  37. /*******************************************************************************
  38. *   Global Variables                                                           *
  39. *******************************************************************************/
  40. const FIELDINFO kObjectRecord::aFieldInfo[] =
  41. {
  42.     {
  43.        sizeof(FIELDINFO),
  44.        CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR | CFA_RIGHT,
  45.        CFA_STRING,
  46.        (PVOID)"No.",
  47.        offsetof(kObjectRecord, pszObjNo),
  48.        NULL,
  49.        NULL,
  50.        0L
  51.     }
  52.     ,
  53.     {
  54.        sizeof(FIELDINFO),
  55.        CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR,
  56.        CFA_STRING,
  57.        (PVOID)"Base",
  58.        offsetof(kObjectRecord, pszBase),
  59.        NULL,
  60.        NULL,
  61.        0L
  62.     }
  63.     ,
  64.     {
  65.        sizeof(FIELDINFO),
  66.        CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR,
  67.        CFA_STRING,
  68.        (PVOID)"Size",
  69.        offsetof(kObjectRecord, pszSize),
  70.        NULL,
  71.        NULL,
  72.        0L
  73.     }
  74.     ,
  75.     {
  76.        sizeof(FIELDINFO),
  77.        CFA_STRING | CFA_HORZSEPARATOR | CFA_SEPARATOR,
  78.        CFA_STRING,
  79.        (PVOID)"Flags",
  80.        offsetof(kObjectRecord, pszFlags),
  81.        NULL,
  82.        NULL,
  83.        0L
  84.     }
  85.     ,
  86.     {
  87.        sizeof(FIELDINFO),
  88.        CFA_STRING | CFA_HORZSEPARATOR,
  89.        CFA_STRING,
  90.        (PVOID)"Expanded Flags",
  91.        offsetof(kObjectRecord, pszFlagsExp),
  92.        NULL,
  93.        NULL,
  94.        0L
  95.     }
  96. };
  97.  
  98. const unsigned  kObjectRecord::cFieldInfo = 5;
  99.  
  100.  
  101. /**
  102.  * Init function.
  103.  */
  104. VOID    kObjectRecord::init()
  105. {
  106.     pszObjNo = &szObjNo[0];
  107.     pszBase = &szBase[0];
  108.     pszSize = &szSize[0];
  109.     pszFlags = &szFlags[0];
  110.     pszFlagsExp = &szFlagsExp[0];
  111. }
  112.  
  113.  
  114. /**
  115.  * Set the data of the record.
  116.  * @param     pObjRec  Pointer to object record from QS.
  117.  * @param     iObjNo   Object number.
  118.  */
  119. VOID    kObjectRecord::set(qsLObjrec_t *pObjRec, int iObjNo)
  120. {
  121.     static struct _ole
  122.     {
  123.         ULONG flFlag;
  124.         PCSZ  pszDesc;
  125.     } aFlagDesc[] =
  126.     {
  127.         {0x00000001L, "OBJREAD"},       /* Readable Object */
  128.         {0x00000002L, "OBJWRITE"},      /* Writeable Object */
  129.         {0x00000004L, "OBJEXEC"},       /* Executable Object */
  130.         {0x00000008L, "OBJRSRC"},       /* Resource Object */
  131.         {0x00000010L, "OBJDISCARD"},    /* Object is Discardable */
  132.         {0x00000020L, "OBJSHARED"},     /* Object is Shared */
  133.         {0x00000040L, "OBJPRELOAD"},    /* Object has preload pages */
  134.         {0x00000080L, "OBJINVALID"},    /* Object has invalid pages */
  135.         {0x00000100L, "OBJZEROFIL"},    /* Object has zero-filled pages */
  136.         {0x00000200L, "OBJRESIDENT"},   /* Object is resident */
  137.         {0x00000300L, "OBJCONTIG"},     /* Object is resident and contiguous */
  138.         {0x00000400L, "OBJDYNAMIC"},    /* Object is permanent and long locable */
  139.         {0x00001000L, "OBJALIAS16"},    /* 16:16 alias required */
  140.         {0x00002000L, "OBJBIGDEF"},     /* Big/Default bit setting */
  141.         {0x00004000L, "OBJCONFORM"},    /* Object is conforming for code */
  142.         {0x00008000L, "OBJIOPL"},       /* Object I/O privilege level */
  143.         {0x40000000L, "OBJMADEPRIV"},   /* Object is made private for debug (now obsolete) */
  144.         {0x80000000L, "OBJALLOC"}       /* Object is allocated used by loader */
  145.     };
  146.  
  147.     int i;
  148.     ULONG flObj;
  149.     BOOL  fFirst = TRUE;
  150.  
  151.     this->iObjNo = iObjNo;
  152.     sprintf(szObjNo,    "%d", iObjNo);
  153.     sprintf(szBase,     "0x%08x", pObjRec->oaddr);
  154.     sprintf(szSize,     "0x%08x", pObjRec->osize);
  155.     sprintf(szFlags,    "0x%08x", pObjRec->oflags);
  156.  
  157.     szFlagsExp[0] = '\0';
  158.     flObj = pObjRec->oflags;
  159.     for (i = 0; i < sizeof(aFlagDesc) / sizeof(aFlagDesc[0]); i++)
  160.         if ((aFlagDesc[i].flFlag & flObj) == aFlagDesc[i].flFlag)
  161.         {
  162.             if (!fFirst)
  163.                 strcat(&szFlagsExp[0], " | ");
  164.             else
  165.                 fFirst = FALSE;
  166.             strcat(&szFlagsExp[0], aFlagDesc[i].pszDesc);
  167.         }
  168. }
  169.  
  170.  
  171.