mirror of
https://github.com/open-simh/simtools.git
synced 2026-01-18 17:08:20 +00:00
Too much to list all, but includes (in no particular order): - Cleanup for 64-bit builds, MSVC warnings. - Structured help - Help file compiler. - Supports volsets, writes/create work. - Support for I18n in messages, help. - Makefiles. - Initialize volume/volset - Command line editing/history Builds and works on Linux and Windows (VS). Not recently built or tested on other platforms, but not intentinonally broken.
157 lines
4.4 KiB
C
157 lines
4.4 KiB
C
/* Timothe Litt March 2016
|
|
* Copyright (C) 2016 Timothe litt
|
|
* litt at acm dot org
|
|
*
|
|
* Free for use with the ODS2 package. All other rights reserved.
|
|
*/
|
|
|
|
/*
|
|
* This is distributed as part of ODS2, originally written by
|
|
* Paul Nankervis, email address: Paulnank@au1.ibm.com
|
|
*
|
|
* ODS2 is distributed freely for all members of the
|
|
* VMS community to use. However all derived works
|
|
* must maintain comments in their source to acknowledge
|
|
* the contributions of the original author and
|
|
* subsequent contributors. This is free software; no
|
|
* warranty is offered, and while we believe it to be useful,
|
|
* you use it at your own risk.
|
|
*/
|
|
|
|
#ifndef SYSMSG_H
|
|
#define SYSMSG_H
|
|
|
|
#include <stdarg.h>
|
|
#include <stdint.h>
|
|
#include <inttypes.h>
|
|
#include "ods2.h"
|
|
|
|
#ifdef SYSMSG_INTERNAL
|
|
/* Shared between sysmsg & genmsg, which produces loadable message files */
|
|
|
|
#define MDF_VERSION "003"
|
|
|
|
#define MSG_HEADER_REC "MSGV"MDF_VERSION"%08"PRIx32"%08"PRIx32
|
|
#define MSG_HEADER_DEC "MSGV"MDF_VERSION"%8"SCNx32"%8"SCNx32"%n"
|
|
#define MSG_HEADER_DECN (4+3+8+8)
|
|
|
|
#define MSG_FAC_REC "%08"PRIx32
|
|
#define MSG_FAC_DEC "%8"SCNx32"%n"
|
|
#define MSG_FAC_DECN (8)
|
|
|
|
#define MSG_MSG_REC "%08"PRIx32"%08"PRIx32
|
|
#define MSG_MSG_DEC "%8"SCNx32"%8"SCNx32"%n"
|
|
#define MSG_MSG_DECN (8+8)
|
|
|
|
#define MSG_EOF_REC "VGSM"MDF_VERSION
|
|
#define MSG_EOF_DEC "VGSM"MDF_VERSION"%n"
|
|
#define MSG_EOF_DECN (4+3)
|
|
|
|
struct VMSFAC {
|
|
char *text;
|
|
vmscond_t code;
|
|
};
|
|
|
|
#define FAC(code, text) { #text, (code) },
|
|
|
|
struct VMSMSG {
|
|
char *ident;
|
|
char *text;
|
|
vmscond_t code;
|
|
uint32_t nargs;
|
|
};
|
|
#define MSG(code, ident, text, nargs) { #ident, text, (code), nargs },
|
|
|
|
/* Magic codes for formats */
|
|
static const char *const pristr[] = {
|
|
PRIo8, PRIo16, PRIo32, PRIo64, /* A - D */
|
|
PRIu8, PRIu16, PRIu32, PRIu64, /* E - H */
|
|
PRIX8, PRIX16, PRIX32, PRIX64, /* I - L */
|
|
PRId8, PRId16, PRId32, PRId64, /* M - P */
|
|
};
|
|
static const char *const prisym[] = {
|
|
"PRIo8", "PRIo16", "PRIo32", "PRIo64", /* A - D */
|
|
"PRIu8", "PRIu16", "PRIu32", "PRIu64", /* E - H */
|
|
"PRIX8", "PRIX16", "PRIX32", "PRIX64", /* I - L */
|
|
"PRId8", "PRId16", "PRId32", "PRId64", /* M - P */
|
|
};
|
|
#define PRI_CODEBASE 'A'
|
|
#define PRI_CODEEND 'p'
|
|
|
|
/* How data is sorted (by genmsg, for sysmsg) */
|
|
|
|
#include "stsdef.h"
|
|
|
|
/******************************************************************* faccmp() */
|
|
static int faccmp( const void *p1, const void *p2 ) {
|
|
uint32_t c1, c2;
|
|
|
|
c1 = ((struct VMSFAC *)p1)->code;
|
|
c2 = ((struct VMSFAC *)p2)->code;
|
|
|
|
if( c1 < c2 )
|
|
return -1;
|
|
if( c1 == c2 )
|
|
return 0;
|
|
return 1;
|
|
}
|
|
|
|
/******************************************************************* msgcmp() */
|
|
static int msgcmp( const void *p1, const void *p2 ) {
|
|
uint32_t c1, c2;
|
|
|
|
c1 = ((struct VMSMSG *)p1)->code & STS$M_COND_ID;
|
|
c2 = ((struct VMSMSG *)p2)->code & STS$M_COND_ID;
|
|
|
|
if( !(c1 & STS$M_FAC_SP) )
|
|
c1 &= STS$M_CUST_DEF | ~STS$M_FAC_NO;
|
|
if( !(c2 & STS$M_FAC_SP) )
|
|
c2 &= STS$M_CUST_DEF | ~STS$M_FAC_NO;
|
|
|
|
if( c1 < c2 )
|
|
return -1;
|
|
if( c1 == c2 )
|
|
return 0;
|
|
return 1;
|
|
}
|
|
|
|
#endif /* SYSMSG_INTERNAL */
|
|
|
|
/* Flags for controlling formatting of messages for display */
|
|
|
|
#define MSG_FACILITY (1 << 0)
|
|
#define MSG_SEVERITY (1 << 1)
|
|
#define MSG_NAME (1 << 2)
|
|
#define MSG_TEXT (1 << 3)
|
|
#define MSG_WITHARGS (1 << 4)
|
|
#define MSG_ALWAYS (1 << 5)
|
|
#define MSG_CONTINUE (1 << 6)
|
|
#define MSG_NOCRLF (1 << 7)
|
|
#define MSG_NOARGS (1 << 8)
|
|
#define MSG_NOUC (1 << 9)
|
|
#define MSG_TOFILE (1 << 10)
|
|
#define MSG_ALWAYS_CONT (MSG_ALWAYS|MSG_CONTNUE)
|
|
/* Must not exceed OPT_V_GENERIC -1 in ods2.h (currently 19).
|
|
* see setcmd.c.
|
|
*/
|
|
|
|
#define MSG_FULL (MSG_FACILITY|MSG_SEVERITY|MSG_NAME|MSG_TEXT)
|
|
|
|
/* Public API */
|
|
|
|
vmscond_t printmsg( vmscond_t vmscond, unsigned int flags, ... );
|
|
vmscond_t vprintmsg( vmscond_t vmscond, unsigned int flags, va_list ap );
|
|
|
|
const char *getmsg( vmscond_t vmscond, unsigned int flags, ... );
|
|
|
|
const char *getmsg_string( vmscond_t vmscond, unsigned int flags );
|
|
|
|
vmscond_t set_message_file( const char *filename );
|
|
vmscond_t show_message( int argc, char **argv );
|
|
vmscond_t set_message_format( options_t new );
|
|
options_t get_message_format( void );
|
|
|
|
void sysmsg_rundown( void );
|
|
|
|
#endif
|