NT4/private/windows/spooler/qproc/qpmsg.c
2020-09-30 17:12:29 +02:00

140 lines
4.0 KiB
C

/*****************************************************************/
/** Microsoft LAN Manager **/
/** Copyright(c) Microsoft Corp., 1985-1990 **/
/*****************************************************************/
/****************************** Module Header ******************************\
Module Name: QPMSG.C
This module displays message box for errors detected by the default PM
Queue Processor.
History:
07-Sep-88 [stevewo] Created.
14-Feb-90 [thomaspa] DBCS fixes.
WARNING: This module placed in a code segment other than the default
segment. All function calls from this module to others in
the default segment must be far calls. For this reason,
do not use the standard str*f() functions directly. Instead
use the wrapper functions as found in strwrap.c.
\***************************************************************************/
#define INCL_WINDIALOGS
#include "pmprint.h"
#include <netlib.h>
#include <string.h>
/* See ..\spooler\prterrl.c */
/* SplQpMessage -- displays and logs error
*
* in: pszPort - -> port error occured on
* uErrId - resource id of error text
* uErrCode - see PMERR_ (might be NULL, then no error is logged)
* out: ACT_QUERY: value returned by SplMessageBox
* ACT_ABORT: MBID_CANCEL
* ACT_CONTINUE: MBID_ENTER
*/
USHORT far SplQpMessage(PSZ pszPort, USHORT uErrId, USHORT uErrCode)
{
USHORT uSeverity;
USHORT fErrInfo;
USHORT fErrData;
USHORT fStyle;
PSZ pszMsgText;
PSZ pszFmtStr;
PSZ ptmp;
NPSZ pMsg;
USHORT cb;
USHORT rc;
USHORT cIStrings = 0;
SplOutSem();
fErrInfo = SPLINFO_QPERROR;
if(uErrId == SPL_ID_QP_INVALID_PARAMETER ||
uErrId == SPL_ID_QP_MEM_ERROR) {
fErrInfo |= SPLINFO_WARNING;
fErrData = SPLDATA_OTHER;
fStyle = MB_OK;
uSeverity = SEVERITY_WARNING;
} else {
fErrData = SPLDATA_UNEXPECTERROR;
fStyle = MB_CANCEL;
uSeverity = SEVERITY_ERROR;
}
if (uErrCode)
WinSetErrorInfo(MAKEERRORID(uSeverity, uErrCode ), SEI_NOPROMPT);
pszMsgText = pszSplStrings[ uErrId ];
pMsg = NULL;
if (uErrId == SPL_ID_QP_INTERNAL_ERROR ) {
/*
* Calculate the number of insert strings.
*/
ptmp = pszMsgText;
while( ptmp = MAKENEAR(_fstrstr(ptmp, "%0")) )
cIStrings++;
/*
* the insert strings are the ascii string from a USHORT, and
* so are a max of 5 characters long.
*/
cb = SafeStrlen( pszMsgText )+(5*cIStrings) + 1;
pszFmtStr = pszMsgText;
pMsg = AllocSplMem( cb );
pszMsgText = (PSZ)pMsg;
/*
* The following far to near conversions are ok because the
* pointer returned points into the dest string which is
* near.
*/
/*
* Replace all occurrences of "%0" in pszFmtStr with the ascii
* string value of uErrCode and place the result in pMsg.
* pszMsgText points to the beginning of the buffer and pMsg
* will be incremented. pMsg will then be restored to point
* to the beginning of the buffer after the copy is complete.
*/
while (ptmp = MAKENEAR(_fstrstr(pszFmtStr, "%0")) )
{
*ptmp++ = '\0';
pMsg = MAKENEAR(EndStrcpy( pMsg, pszFmtStr));
pszFmtStr = ++ptmp;
pMsg = (NPSZ)MAKENEAR(MyItoa(uErrCode, (PSZ)pMsg));
}
EndStrcpy(pMsg, pszFmtStr);
pMsg = MAKENEAR(pszMsgText);
/* OLD CODE: The following was replaced with the above lines because
* It is NOT DBCS compatible.
* while (c = *pszFmtStr++)
* if (c == '%' && *pszFmtStr == '0') {
* pszFmtStr++;
* pMsg = (NPSZ)MyItoa(uErrCode, (PSZ)pMsg);
* }
* else
* *pMsg++ = c;
* *pMsg = 0;
* pMsg = (NPSZ)pszMsgText;
*/
}
rc = SplMessageBox( pszPort,
fErrInfo,
fErrData,
pszMsgText,
QPROC_CAPTION,
0,
fStyle
);
if (pMsg) {
FreeSplMem( pMsg, cb );
}
return( rc );
}