|
|
/****************************** Module Header ******************************\
* Module Name: DMGHSZ.C * * This module contains functions used for HSZ control. * * Created: 8/2/88 sanfords, Microsoft * Modified: 6/5/90 Rich Gartland, Aldus (Win 3.0) * * Copyright (c) 1988, 1989 Microsoft Corporation * Copyright (c) 1990 Aldus Corporation \***************************************************************************/ #include "ddemlp.h"
ATOM FindAddHszHelper(LPSTR psz, BOOL fAdd);
/*********************** HSZ management functions *************************\
* An HSZ is an atom with a NULL tacked onto it in the HIWORD * of the HSZ. * * WINDOWS 3.0 IMPLEMENTATION NOTE: * Since under Windows there is only the local atom table or the (single) * global atom table (and we need to use the global table to work right), * we always have an atom table index of 0. When we run out of atom table * space, future hsz adds return failure. * * History: * Created 9/12/89 Sanfords \***************************************************************************/
BOOL FreeHsz(a) ATOM a; { if (!a) return(TRUE); #ifdef DEBUG
cAtoms--; #endif
MONHSZ(a, MH_INTDELETE, GetCurrentTask()); if (GlobalDeleteAtom(a)) { DEBUGBREAK(); return(FALSE); } return(TRUE); }
BOOL IncHszCount(a) ATOM a; { char aChars[255];
if (a == NULL) return(TRUE); #ifdef DEBUG
cAtoms++; #endif
MONHSZ(a, MH_INTKEEP, GetCurrentTask()); if (GlobalGetAtomName(a, (LPSTR)aChars, 255)) return(GlobalAddAtom((LPSTR)aChars)); else { AssertF(FALSE, "Cant increment atom"); return(FALSE); } }
/***************************** Private Function ****************************\
* Returns the length of the hsz given without NULL terminator. * Wild HSZs have a length of 0. * * History: * Created 9/12/89 Sanfords \***************************************************************************/ WORD QueryHszLength(hsz) HSZ hsz; { WORD cb; char aChars[255];
if (LOWORD(hsz) == 0L) return(0);
if (!(cb = GlobalGetAtomName(LOWORD(hsz), (LPSTR)aChars, 255))) { AssertF(FALSE, "Cant get atom length"); return(0); }
if (HIWORD(hsz)) cb += 7;
return(cb); }
WORD QueryHszName(hsz, psz, cchMax) HSZ hsz; LPSTR psz; WORD cchMax; { register WORD cb;
if (LOWORD(hsz) == 0) { if (cchMax) *psz = '\0'; return(0); }
cb = GlobalGetAtomName(LOWORD(hsz), psz, cchMax); if (cb && HIWORD(hsz) && (cb < cchMax - 7)) { wsprintf(&psz[cb], ":(%04x)", HIWORD(hsz)); cb += 7; } return cb; }
/***************************** Private Function ****************************\
* This finds the hsz for psz depending on fAdd. * * History: * Created 9/12/89 Sanfords \***************************************************************************/ ATOM FindAddHsz(psz, fAdd) LPSTR psz; BOOL fAdd; { if (psz == NULL || *psz == '\0') return(0L);
return(FindAddHszHelper(psz, fAdd)); }
ATOM FindAddHszHelper(psz, fAdd) LPSTR psz; BOOL fAdd; { ATOM atom;
atom = fAdd ? GlobalAddAtom(psz) : GlobalFindAtom(psz); if (fAdd) { #ifdef DEBUG
cAtoms++; #endif
MONHSZ(atom, MH_INTCREATE, GetCurrentTask()); }
return(atom); }
HSZ MakeInstAppName( ATOM a, HWND hwndFrame) { // make upper half of HSZ be HWND FRAME for now.
IncHszCount(a); return((HSZ)MAKELONG(a, hwndFrame)); }
|