|
|
/************************************************************/ /* Windows Write, Copyright 1985-1992 Microsoft Corporation */ /************************************************************/
/* DEBUG.C -- Diagnostic routines for WRITE */
#define NOCLIPBOARD
#define NOGDICAPMASKS
#define NOVIRTUALKEYCODES
#define NOWINSTYLES
#define NOSYSMETRICS
#define NOMENUS
#define NOKEYSTATE
#define NOSYSCOMMANDS
#define NOATOM
#define NODRAWTEXT
#define NOMETAFILE
#define NOOPENFILE
#define NOWH
#define NOWINOFFSETS
#define NOOPENFILE
#define NORECT
#define NOSOUND
#define NOCOMM
#include <windows.h>
#include "mw.h"
#define NOUAC
#include "cmddefs.h"
#include "wwdefs.h"
#include "filedefs.h"
#include "prmdefs.h"
#include "editdefs.h"
#include "docdefs.h"
extern struct WWD rgwwd[];
extern beep(); extern toggleProf();
#ifdef DEBUG
BOOL fDebugOut = TRUE;
fnTest() { beep(); TestFormat(); beep(); beep(); dbgWait(); /* for use by symdeb to check variables */ }
TestFormat() { //toggleProf();
}
dbgWait() { }
/* --- Integrity check for all piece tables in all docs --- */
CheckPctb() { extern int fnMac; extern int fPctbCheck; extern struct DOD (**hpdocdod) []; extern struct FCB (**hpfnfcb) []; extern int docMac; int doc; struct PCTB **hpctb; struct PCTB *ppctb; struct DOD *pdod; struct PCD *ppcd; int ipcd;
if (!fPctbCheck) return;
for ( doc = 0, pdod = &(**hpdocdod) [0] ; doc < docMac; doc++, pdod++ ) if ((hpctb = pdod->hpctb) != 0) { /* Doc entry is nonempty -- check it */ ppctb = *hpctb;
/* # pieces used does not exceed # allocated */ Assert( ppctb->ipcdMac <= ppctb->ipcdMax ); Assert( ppctb->ipcdMac >= 1 );
#ifndef OURHEAP
/* handle contains enough space for pieces */ Assert( LocalSize( (HANDLE)hpctb ) >= sizeof (struct PCTB) + (sizeof (struct PCD) * (ppctb->ipcdMax - cpcdInit))); #endif
/* Now check the contents of the pieces */
{
/* cpMin of first piece is always 0 for nonnull piece table */ Assert( ppctb->rgpcd [0].cpMin == cp0 || ppctb->rgpcd [0].fn == fnNil);
for ( ipcd = 0, ppcd = &(ppctb->rgpcd [0]); ipcd < ppctb->ipcdMac; ipcd++, ppcd++ ) { int fn = ppcd->fn; typeFC fc = ppcd->fc; unsigned sprm; struct FCB *pfcb;
if (fn == fnNil) { /* end piece */
/* first piece with fnNil is in fact the end piece */ /* Assert( ipcd == ppctb->ipcdMac - 1 ); */ /* end piece is intact */ Assert( bPRMNIL(ppcd->prm) ); break; }
if (ipcd > 0) /* Pieces are in ascending cp order */ Assert(ppcd->cpMin > (ppcd-1)->cpMin);
/* fn is valid */ Assert( (fn >= 0 && fn < fnMac) || fn == fnInsert ); pfcb = &(**hpfnfcb) [fn]; /* fn does not point to an unallocated fcb entry */ Assert( pfcb->rfn != rfnFree ); /* fc is reasonable for the fn */ Assert( fc >= 0 ); Assert( fc + (ppcd+1)->cpMin - ppcd->cpMin <= pfcb->fcMac );
/* prm is a valid value */ Assert( bPRMNIL(ppcd->prm) || (((struct PRM *) &ppcd->prm)->fComplex) || ((sprm = ((struct PRM *) &ppcd->prm)->sprm) > 0 && sprm < sprmMax) ); } }
} }
/* COMM Output routines */
#define cchSzCommMax 100
static CHAR szCRLF[] = "\r\n"; BOOL vfCommDebug = fTrue; /* True for AUX, False for LPT */
#if WINVER < 0x300
/* This method isn't quite working under Win 3.0 ..pault */ void CommSz( CHAR * ); /* Main string output, defined in doslib.asm */ #else
void CommSz( psz ) register CHAR *psz; { CHAR szT[512]; char *pszT;
if (fDebugOut) { /* The following loops essentially copies psz to szT
but with the addition that chars > 127 are changed to a representation readable on a dumb terminal, i.e. ASCII 164 shows up as '{164}' ..pault */
for (pszT = szT; ; psz++) { if (*psz < 128) *(pszT++) = *psz; else { *(pszT++) = '{'; ncvtu((int) *psz, &pszT); *(pszT++) = '}'; } if (*psz == '\0') /* finally copied null terminator */ break; }
OutputDebugString( (LPSTR) szT ); } } #endif
CommSzNum( sz, num ) CHAR *sz; int num; { CHAR szBuf[ cchSzCommMax ]; CHAR *pch = szBuf;
Assert( CchSz( sz ) <= cchSzCommMax );
pch = &szBuf[ CchCopySz( sz, szBuf ) ]; ncvtu( num, &pch );
CchCopySz( szCRLF, pch );
CommSz( szBuf ); }
/* This is extremely useful when displaying coordinates
when the values are not in contiguous locations */ CommSzNumNum( sz, num, num2 ) CHAR *sz; int num, num2; { CHAR szBuf[ cchSzCommMax ]; CHAR *pch = szBuf;
Assert( CchSz( sz ) <= cchSzCommMax );
pch = &szBuf[ CchCopySz( sz, szBuf ) ]; ncvtu( num, &pch ); *(pch++) = ' '; ncvtu( num2, &pch );
CchCopySz( szCRLF, pch );
CommSz( szBuf ); }
CommSzRgNum( sz, rgw, cw) CHAR *sz; int *rgw; int cw; { CHAR szBuf[ cchSzCommMax ]; CHAR *pch = szBuf;
Assert( CchSz( sz ) <= cchSzCommMax );
pch = &szBuf[ CchCopySz( sz, szBuf ) ]; for ( ; cw > 0; cw--) { ncvtu( *(rgw++), &pch ); *(pch++) = ' '; }
CchCopySz( szCRLF, pch );
CommSz( szBuf ); }
CommSzSz( sz1, sz2 ) CHAR *sz1, *sz2; { CHAR szBuf[ cchSzCommMax ]; int cch;
Assert( CchSz( sz1 ) + CchSz( sz2 ) - 1 <= cchSzCommMax );
cch = CchCopySz( sz1, szBuf ); cch += CchCopySz( sz2, &szBuf[ cch ] ); CchCopySz( szCRLF, &szBuf[ cch ] );
CommSz( szBuf ); }
/* ASSERT */
Do_Assert(pch, line, f) PCH pch; int line; BOOL f; { extern HWND vhWndMsgBoxParent; extern FARPROC lpDialogAlert; static CHAR szAssert[] = "Assertion failure in "; static CHAR szLine[] = " at line ";
if (f) return; else { #ifdef OURHEAP
extern int cHpFreeze; int cHpFreezeT = cHpFreeze; #endif
CHAR szAlertMsg[50]; PCH pchtmp; int cch; int idi; HWND hWndParent = (vhWndMsgBoxParent == NULL) ? wwdCurrentDoc.wwptr : vhWndMsgBoxParent;
bltbc((PCH)szAlertMsg, 0, 50); bltbyte((PCH)szAssert, (PCH)szAlertMsg, 21); pchtmp = (PCH)&szAlertMsg[21]; bltbyte((PCH)pch, pchtmp, (cch = CchSz(pch) - 1)); pchtmp += cch; bltbyte((PCH)szLine, pchtmp, 9); pchtmp += 9; ncvtu(line, (PCH)&pchtmp) - 1; #ifdef OURHEAP
cHpFreeze = 0; /* So we don't panic in MdocLoseFocus */ #endif
do { idi = MessageBox( hWndParent, (LPSTR) szAlertMsg, (LPSTR)"Assert", MB_ABORTRETRYIGNORE | MB_SYSTEMMODAL); switch (idi) { default: case IDABORT: case IDCANCEL: FatalExit( line ); break;
case IDIGNORE: #ifdef OURHEAP
cHpFreeze = cHpFreezeT; #endif
return; case IDRETRY: break; } } while (idi == IDRETRY); } /* end else */ } /* end of _Assert */
ShowDocPcd(szID, doc) CHAR *szID; int doc; { struct PCTB **hpctb; struct PCD *ppcdCur, *ppcdMac; extern struct DOD (**hpdocdod)[];
hpctb = (**hpdocdod)[doc].hpctb; ppcdCur = &(**hpctb).rgpcd[0]; ppcdMac = &(**hpctb).rgpcd[(**hpctb).ipcdMac]; for (; ppcdCur < ppcdMac; ppcdCur++) { ShowPpcd(szID, ppcdCur); } }
ShowPpcd(szID, ppcd) CHAR *szID; struct PCD *ppcd; { /* Dump a given piece descriptor on COM1: along with a
given an ID string. */ CommSz(szID); CommSz("\r\n");
CommSzNum("ppcd: ", (int) ppcd); CommSzNum("cpMin: ", (int) (ppcd->cpMin)); CommSzSz("fNoParaLast: ", (ppcd->fNoParaLast) ? "TRUE" : "FALSE"); CommSzNum("fn: ", (int) (ppcd->fn)); CommSzNum("fc: ", (int) (ppcd->fc)); CommSzNum("prm: ", (int) *((int *) &(ppcd->prm))); }
#endif /* DEBUG */
|