99 lines
2.2 KiB
C
99 lines
2.2 KiB
C
|
/************************************************************************/
|
||
|
/* */
|
||
|
/* RCPP - Resource Compiler Pre-Processor for NT system */
|
||
|
/* */
|
||
|
/* GETMSG.C - Replaces NMSGHDR.ASM and MSGS.ASM */
|
||
|
/* */
|
||
|
/* 28-Nov-90 w-BrianM Created to remove need for MKMSG.EXE */
|
||
|
/* */
|
||
|
/************************************************************************/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include <stdlib.h>
|
||
|
#include <stdarg.h>
|
||
|
#include <string.h>
|
||
|
#include "rcpptype.h"
|
||
|
#include "rcppdecl.h"
|
||
|
#include "getmsg.h"
|
||
|
|
||
|
/************************************************************************/
|
||
|
/* GET_MSG - Given a message number, get the correct format string */
|
||
|
/************************************************************************/
|
||
|
char * GET_MSG (int msgnumber)
|
||
|
{
|
||
|
int imsg = 0;
|
||
|
int inum;
|
||
|
|
||
|
while ((inum = MSG_TABLE[imsg].usmsgnum) != LASTMSG) {
|
||
|
if (inum == msgnumber) {
|
||
|
return (MSG_TABLE[imsg].pmsg);
|
||
|
}
|
||
|
imsg ++;
|
||
|
}
|
||
|
return ("");
|
||
|
}
|
||
|
|
||
|
|
||
|
/************************************************************************/
|
||
|
/* SET_MSG - Given a format string, format it and store it in first parm*/
|
||
|
/************************************************************************/
|
||
|
void __cdecl SET_MSG (char *exp, char *fmt, ...)
|
||
|
{
|
||
|
va_list arg;
|
||
|
char * arg_pchar;
|
||
|
int arg_int;
|
||
|
long arg_long;
|
||
|
char arg_char;
|
||
|
|
||
|
int base;
|
||
|
int longflag;
|
||
|
|
||
|
va_start (arg, fmt);
|
||
|
while (*fmt) {
|
||
|
if (*fmt == '%') {
|
||
|
longflag = FALSE;
|
||
|
top:
|
||
|
switch (*(fmt+1)) {
|
||
|
case 'l' :
|
||
|
longflag = TRUE;
|
||
|
fmt++;
|
||
|
goto top;
|
||
|
case 'F' :
|
||
|
fmt++;
|
||
|
goto top;
|
||
|
case 's' :
|
||
|
arg_pchar = va_arg(arg, char *);
|
||
|
strcpy(exp, arg_pchar);
|
||
|
exp += strlen(arg_pchar);
|
||
|
fmt += 2;
|
||
|
break;
|
||
|
case 'd' :
|
||
|
case 'x' :
|
||
|
base = *(fmt+1) == 'd' ? 10 : 16;
|
||
|
if (longflag) {
|
||
|
arg_long = va_arg (arg, long);
|
||
|
exp += zltoa(arg_long, exp, base);
|
||
|
}
|
||
|
else {
|
||
|
arg_int = va_arg (arg, int);
|
||
|
exp += zltoa((long)arg_int, exp, base);
|
||
|
}
|
||
|
fmt += 2;
|
||
|
break;
|
||
|
case 'c' :
|
||
|
arg_char = va_arg (arg, char);
|
||
|
*exp++ = arg_char;
|
||
|
fmt += 2;
|
||
|
break;
|
||
|
default :
|
||
|
*exp++ = *fmt++;
|
||
|
}
|
||
|
}
|
||
|
else {
|
||
|
*exp++ = *fmt++;
|
||
|
}
|
||
|
}
|
||
|
*exp = 0;
|
||
|
va_end (arg);
|
||
|
}
|