This example shows two versions of an API that prints out messages. The second version uses __parmdwords to determine whether the call was intended for the original or the updated version.
#include <stdlib.h> #include <stdio.h>
int _System ErrorHandler(int MessgageNum,int Severity); /* Extended version of API */
/* Old version API prototype -- int ErrorHandler(int MessageNum); */
#define MESSAGE1 1 #define MESSAGE2 2 #define INFORMATIONAL 3 #define WARNING 2 #define ERROR 1 #define FATAL 0
int _System ErrorHandler(int MessageNum,int Severity)
{
int rc = 0;
switch ((int)__parmdwords()) {
case 2 : /* Extended version with Severity parameter */
switch (Severity) {
case FATAL :
printf("Fatal Error:");
break;
case ERROR :
printf("Error:");
break;
case WARNING :
printf("Warning:");
break;
case INFORMATIONAL :
printf("Informational:");
break;
default :
rc = EXIT_FAILURE;
printf("Bad Severity Number");
}
/* intentional fall through */
case 1 : /* Old version of API without Severity parameter */
switch (MessageNum) {
case MESSAGE1 :
printf("Some immensely profound message\n");
break;
case MESSAGE2 :
printf("Some other immensely profound message\n");
break;
default :
printf
("Very trivial message, why not try MESSAGE1 or MESSAGE2?\n");
rc = EXIT_FAILURE;
}
}
return rc;
}
int main(void)
{
return ErrorHandler(MESSAGE1, FATAL);
/*****************************************************************************
The output should be:
Fatal Error: Some immensely profound message *****************************************************************************/ }