Ignore:
Timestamp:
Aug 31, 1999, 7:15:53 PM (26 years ago)
Author:
sandervl
Message:

Menu resource changes

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/cvtmenu.cpp

    r581 r761  
    1 /* $Id: cvtmenu.cpp,v 1.1 1999-08-19 14:19:14 sandervl Exp $ */
     1/* $Id: cvtmenu.cpp,v 1.2 1999-08-31 17:15:29 sandervl Exp $ */
    22
    33/*
     
    2828
    2929static int  ProcessSubMenu(PopupMenuItem *popupitem, MT_OS2 *os2menu, MTI_OS2 *menuitem, int size, int cp);
     30static int  QuerySubMenuSize(PopupMenuItem *popupitem);
    3031static int  ProcessMenuItem(NormalMenuItem *popupitem, MT_OS2 *os2menu, MTI_OS2 *menuitem, int size, int cp);
     32static int  QueryMenuItemSize(NormalMenuItem *normalitem);
    3133static void menustrcpy(char *dest, char *src);
     34//******************************************************************************
     35//******************************************************************************
     36static int QueryMenuSize(MenuHeader *menu)
     37{
     38  PopupMenuItem  *popupitem = (PopupMenuItem *)((char *)menu + sizeof(MenuHeader));
     39  NormalMenuItem *normalitem = (NormalMenuItem *)((char *)menu + sizeof(MenuHeader));
     40  int size = sizeof(MenuHeader);
     41  int increment;
     42
     43  while(TRUE)
     44  {
     45        if(popupitem->fItemFlags & POPUP) {
     46                increment = QuerySubMenuSize(popupitem);
     47        }
     48        else    increment = QueryMenuItemSize(normalitem);
     49
     50        size += increment;
     51
     52        if(popupitem->fItemFlags & ENDMENU) break;
     53
     54        popupitem  = (PopupMenuItem *)((char *)popupitem + increment);
     55        normalitem = (NormalMenuItem *)((char *)normalitem + increment);
     56  }
     57  return size; 
     58}
    3259//******************************************************************************
    3360//******************************************************************************
     
    4168  ULONG   ulCpSize, ulCP;
    4269
     70  if(size == 0) {
     71        size = QueryMenuSize(menu);
     72  }
    4373  os2menu           = (MT_OS2 *)malloc(size*4); //should always be sufficient
    4474  os2menu->len      = sizeof(MT_OS2) - sizeof(MTI_OS2);
     
    182212//******************************************************************************
    183213//******************************************************************************
     214static int QuerySubMenuSize(PopupMenuItem *popupitem)
     215{
     216 NormalMenuItem *normalitem;
     217 int             len = 0, size, increment;
     218
     219  if(!(popupitem->fItemFlags & MENUBARBREAK)) {
     220        len = (UniStrlen(popupitem->szItemText)+1)*2;
     221  }
     222
     223  size = (sizeof(PopupMenuItem)-2 + len);  /*PLF Sat  97-06-21 22:17:51*/
     224
     225  normalitem = (NormalMenuItem *)((char*)popupitem + sizeof(PopupMenuItem)-2);  /*PLF Sat  97-06-21 23:54:50*/
     226  normalitem = (NormalMenuItem *)((int)normalitem + len);
     227
     228  while(TRUE) {
     229        if(normalitem->fItemFlags & POPUP) {
     230                increment = QuerySubMenuSize((PopupMenuItem *)normalitem);
     231        }
     232        else    increment = QueryMenuItemSize(normalitem);
     233
     234        size += increment;
     235
     236        if(normalitem->fItemFlags & ENDMENU) {
     237                return(size);
     238        }
     239        normalitem = (NormalMenuItem *)((char *)normalitem + increment);
     240  }
     241  return(size);
     242}
     243//******************************************************************************
     244//******************************************************************************
    184245static int ProcessMenuItem(NormalMenuItem *normalitem, MT_OS2 *os2menu, MTI_OS2 *menuitem, int size, int cp)
    185246{
     
    267328//******************************************************************************
    268329//******************************************************************************
     330static int QueryMenuItemSize(NormalMenuItem *normalitem)
     331{
     332 int    len = 0;
     333
     334  if(!(normalitem->fItemFlags & MENUBARBREAK)) {
     335        len = (UniStrlen(normalitem->szItemText)+1)*2;
     336  }
     337
     338  return(sizeof(NormalMenuItem)-2 + len);
     339}
     340//******************************************************************************
     341//******************************************************************************
    269342static void menustrcpy(char *dest, char *src)
    270343{
Note: See TracChangeset for help on using the changeset viewer.