[build] clean libChf build, remove win32 from it too; refactor Makefiles

This commit is contained in:
Gwenhael Le Moine 2024-09-19 15:18:53 +02:00
parent fdcac7363a
commit 65cab00068
No known key found for this signature in database
GPG key ID: FDFE3669426707A7
43 changed files with 205 additions and 1371 deletions

52
.gitignore vendored
View file

@ -1,33 +1,35 @@
libChf/mt_build/
libChf/st_build/
src/*.o
dist/pack
dist/saturn
dist/Saturn
dist/pack
dist/saturn
dist/saturn.cat
dist/stateDir.*
dist/ROMs/*rom*
manual/saturn.toc
manual/saturn.aux
manual/saturn.cp
manual/saturn.cps
manual/saturn.dvi
manual/saturn.info
manual/saturn.pdf
manual/saturn.ps
manual/saturn.log
libChf/chf.tps
libChf/chf.tp
libChf/chf.toc
libChf/chf.pdf
libChf/chf.log
libChf/chf.info
libChf/chf.fns
libChf/chf.fn
libChf/chf.cps
libChf/chf.cp
libChf/chf.aux
libChf/chf.dvi
libChf/chf.ps
docs/saturn.toc
docs/saturn.aux
docs/saturn.cp
docs/saturn.cps
docs/saturn.dvi
docs/saturn.info
docs/saturn.pdf
docs/saturn.ps
docs/saturn.log
libChf/docs/chf.tps
libChf/docs/chf.tp
libChf/docs/chf.toc
libChf/docs/chf.pdf
libChf/docs/chf.log
libChf/docs/chf.info
libChf/docs/chf.fns
libChf/docs/chf.fn
libChf/docs/chf.cps
libChf/docs/chf.cp
libChf/docs/chf.aux
libChf/docs/chf.dvi
libChf/docs/chf.ps
libChf/libChf.a
libChf/src/*.o

View file

@ -11,8 +11,8 @@ DOCDIR = $(PREFIX)/doc/saturn
OPTIM ?= 2
CFLAGS ?= -g -O$(OPTIM) -D_GNU_SOURCE=1 -I./src/ -I./libChf -L./libChf/mt_build
LIBS = -lm -lChf_r -lXm -lutil
CFLAGS ?= -O$(OPTIM) -D_GNU_SOURCE=1 -I./src/ -I./libChf/src/ -L./libChf
LIBS = -lm -lChf -lXm -lutil
X11CFLAGS = $(shell pkg-config --cflags x11 xext)
X11LIBS = $(shell pkg-config --libs x11 xext xt)
@ -49,7 +49,7 @@ MSFS = src/MSFs/cpu.msf \
src/MSFs/util.msf \
src/MSFs/x11.msf \
src/MSFs/x_func.msf \
libChf/chf.msf
libChf/src/chf.msf
MAKEFLAGS +=-j$(NUM_CORES) -l$(NUM_CORES)
@ -95,20 +95,16 @@ override CPPFLAGS := -I./src/ -D_GNU_SOURCE=1 \
.PHONY: all clean clean-all pretty-code install mrproper get-roms install
all: libChf/mt_build/libChf_r.a dist/saturn dist/saturn.cat manual
all: libChf/libChf.a dist/saturn dist/saturn.cat docs
# Building
libChf/mt_build/libChf_r.a:
make -C libChf ./mt_build/libChf_r.a CC=$(CC)
libChf/libChf.a:
make -C libChf
dist/saturn: $(DOTOS) libChf/mt_build/libChf_r.a
dist/saturn: $(DOTOS) libChf/libChf.a
$(CC) $^ -o $@ $(CFLAGS) $(LIBS) $(X11LIBS)
libChf/st_build/libChf.a:
# UNUSED
make -C libChf ./st_build/libChf.a CC=$(CC)
dist/pack: src/pack.o src/disk_io.o src/debug.o libChf/mt_build/libChf_r.a
dist/pack: src/pack.o src/disk_io.o src/debug.o libChf/libChf.a
# UNUSED
$(CC) $^ -o $@ $(CFLAGS) $(LIBS)
@ -117,19 +113,20 @@ dist/saturn.cat: $(MSFS)
do gencat $@ $$msf ; \
done
manual:
make -C manual
doc:
make -C docs
# Cleaning
clean:
rm -f src/*.o
rm -f libChf/*_build/*.o
make -C libChf clean
make -C docs clean
mrproper: clean
rm -f dist/saturn dist/saturn.cat dist/pack
make -C dist/ROMs mrproper
make -C libChf clean
make -C manual clean
make -C libChf mrproper
make -C docs mrproper
clean-all: mrproper
@ -142,7 +139,7 @@ get-roms:
make -C dist/ROMs get-roms
# Installation
install: dist/saturn dist/saturn.cat dist/Saturn.ad manual
install: dist/saturn dist/saturn.cat dist/Saturn.ad doc
install -m 755 -d -- $(DESTDIR)$(PREFIX)/bin
install -c -m 755 dist/saturn $(DESTDIR)$(PREFIX)/bin/saturn
install -c -m 755 dist/saturn48gx $(DESTDIR)$(PREFIX)/bin/saturn48gx
@ -162,7 +159,7 @@ install: dist/saturn dist/saturn.cat dist/Saturn.ad manual
install -c -m 644 dist/Saturn.ad $(DESTDIR)/etc/X11/app-defaults/Saturn
install -m 755 -d -- $(DESTDIR)$(DOCDIR)
cp -R COPYING LICENSE README* docs* manual/ $(DESTDIR)$(DOCDIR)
cp -R COPYING LICENSE README* docs* docs/ $(DESTDIR)$(DOCDIR)
install -m 755 -d -- $(DESTDIR)$(PREFIX)/share/applications
sed "s|@PREFIX@|$(PREFIX)|g" dist/saturn48gx.desktop > $(DESTDIR)$(PREFIX)/share/applications/saturn48gx.desktop

19
docs/Makefile Normal file
View file

@ -0,0 +1,19 @@
all: saturn.info saturn.dvi saturn.ps saturn.pdf
saturn.info: saturn.texi
makeinfo saturn.texi
saturn.dvi: saturn.texi
texi2dvi saturn.texi
saturn.ps: saturn.dvi
dvips -o saturn.ps saturn.dvi
saturn.pdf: saturn.dvi
dvips -o saturn.pdf saturn.dvi
clean:
rm -f saturn.aux saturn.cp saturn.cps saturn.fn saturn.fns saturn.log saturn.toc saturn.tp saturn.tps
mrproper: clean
rm -f saturn.info saturn.dvi saturn.ps saturn.pdf

View file

@ -1,209 +1,50 @@
# ICB, 2-Oct-2000
# Minor off-line changes to support stand-alone build in saturn
#
# ICB, 16-Nov-2000
# Off-line change: added default compile mode for unsupported platforms
# .+
# Source files
#
# .identifier : $Id: Makefile,v 2.1 2000/05/29 13:53:07 cibrario Rel $
# .context : CHF, Condition Handling Facility
# .title : $RCSfile: Makefile,v $, Makefile
# .kind : Makefile
# .author : Ivan Cibrario B.
# .site : CSTV-CNR
# .creation : 3-May-1996
# .keywords : *
# .description :
# Makefile for the CHF library
# .notes :
# $Log: Makefile,v $
# Revision 2.1 2000/05/29 13:53:07 cibrario
# - Deep revision to support transparent, multi-platform builds
# - Added multithreading support
# - New/revised targets: test, doc, clean
#
# Revision 1.2 1996/06/11 13:03:06 cibrario
# Added new module chf_top.c
#
# Revision 1.1 1996/05/29 09:12:10 cibrario
# Initial revision
#
#
# .-
SRC = src/chf_init.c \
src/chf_gen.c \
src/chf_sig.c \
src/chf_abrt.c \
src/chf_hdlr.c \
src/chf_msgc.c \
src/chf_st.c \
src/chf_top.c
#
# Platform-dependent definitions. Edit when required, for example to
# add a new platform.
# Target object files
#
# There is a set of definitions per platform; the prefix or the definition
# names is the value returned by a plain 'uname' on that platform.
#
# CC: cc compiler
# TS_CFLAGS: cc flags to enable multithreading
# TS_LOADLIBES: ld flags and additional libraries to enable multithreading
# F_CFLAGS: cc feature test macros
# O_CFLAGS: cc optimization control flags and other, additional flags
#
# Supported platforms:
# OSF1 Digital UNIX v4.0
# SunOS Solaris v2.6
# Linux Linux 2.1
#
# In addition, if the first build fails, a second attempt is made
# using the X_CC and X_CFLAGS fallback values.
OSF1_CC = cc
OSF1_TS_CFLAGS = -pthread
OSF1_TS_LOADLIBES = -pthread
OSF1_F_CFLAGS = "-D_POSIX_C_SOURCE=199506L -D_XOPEN_SOURCE"
OSF1_O_CFLAGS = "-O3 -std1"
SunOS_CC = gcc
SunOS_TS_CFLAGS = -D_REENTRANT
SunOS_TS_LOADLIBES = -lpthread
SunOS_F_CFLAGS = -D_POSIX_C_SOURCE=199506L
SunOS_O_CFLAGS = "-O3 -ansi -pedantic"
Linux_CC = cc
Linux_TS_CFLAGS = -D_REENTRANT
Linux_TS_LOADLIBES = -lpthread
Linux_F_CFLAGS = -D_POSIX_C_SOURCE=199506L
Linux_O_CFLAGS = "-O3 -ansi -pedantic"
OBJS = $(SRC:.c=.o)
#
# Destination paths for library objects, C headers, binaries, message catalog
# sources and X resource files. Edit as required.
# Other definitions
#
DESTLIBDIR = $(HOME)/lib
DESTHDRDIR = $(HOME)/include
DESTBINDIR = $(HOME)/bin
DESTMSFDIR = $(HOME)/msf
DESTRESDIR = $(HOME)/res
OPTIM ?= 2
#
# The default target recursively invokes make defining UNAME to the
# string returned by uname; this is used to make appropriate
# platform-dependent definitions above.
#
all:
@$(MAKE) UNAME=`uname` build || \
$(MAKE) UNAME=Unknown CC='"$(X_CC)"' O_CFLAGS='"$(X_CFLAGS)"' build
CFLAGS ?= -O$(OPTIM) -ansi -pedantic -D_POSIX_C_SOURCE=199506L -I.
ifeq ($(MT), yes)
override CFLAGS := -D_REENTRANT $(CFLAGS)
endif
#
# Vectored definitions; see above and do not edit.
#
CC = $($(UNAME)_CC)
TS_CFLAGS = $($(UNAME)_TS_CFLAGS)
TS_LOADLIBES = $($(UNAME)_TS_LOADLIBES)
F_CFLAGS = $($(UNAME)_F_CFLAGS)
O_CFLAGS = $($(UNAME)_O_CFLAGS)
#
# Include common definitions
#
include Makefile_def
#
# Build directories for single-threaded and multi-threaded lib versions
#
ST_BUILD_DIR = ./st_build
MT_BUILD_DIR = ./mt_build
LFLAGS ?= $(CFLAGS)
LDFLAGS = -L.
#
# Library names
#
ST_LIB_NAME = libChf.a
MT_LIB_NAME = libChf_r.a
TARGET = libChf.a
#
# Library paths
#
ST_LIB_PATH = $(ST_BUILD_DIR)/$(ST_LIB_NAME)
MT_LIB_PATH = $(MT_BUILD_DIR)/$(MT_LIB_NAME)
all: $(TARGET)
#
# build: Create and populate build directories; for each build directory,
# make dependencies and rebuild
#
build: $(ST_LIB_PATH) $(MT_LIB_PATH)
#
# test: Build and executes test programs
#
test:
@$(MAKE) UNAME=`uname` do_test
@echo "All tests completed successfully"
do_test: $(ST_LIB_PATH) $(MT_LIB_PATH)
@cd $(ST_BUILD_DIR) && \
$(MAKE) test CC=$(CC) LIB=$(ST_LIB_NAME) \
F_CFLAGS=$(F_CFLAGS) O_CFLAGS=$(O_CFLAGS) > test.log 2>&1
@cd $(MT_BUILD_DIR) && \
$(MAKE) test CC=$(CC) LIB=$(MT_LIB_NAME) \
F_CFLAGS=$(F_CFLAGS) O_CFLAGS=$(O_CFLAGS) \
TS_CFLAGS=$(TS_CFLAGS) TS_LOADLIBES=$(TS_LOADLIBES) >> test.log 2>&1
#
# doc: Make documentation files
#
doc:
makeinfo chf.texi
texi2dvi chf.texi; dvips -o chf.ps chf.dvi
make -C docs
#
# clean: Remove build directories
#
clean:
rm -rf $(ST_BUILD_DIR) $(MT_BUILD_DIR)
rm -f $(OBJS)
make -C docs clean
#
# install: Move all files to their directories
# ICB, 23-Oct-2000: Do nothing
#
install: $(ST_LIB_PATH) $(MT_LIB_PATH) $(HDR) $(MSF) $(RES)
mrproper: clean
rm -f $(TARGET)
make -C docs mrproper
#
# Prepare the build directories for use
#
# ICB, 16-Nov-2000
# Off-line change: Force the build to fail with exit 1 if CC is undefined
#
$(ST_BUILD_DIR) $(MT_BUILD_DIR):
@[ "$(CC)" = "" ] && \
{ echo "Warning: using X_ defaults"; exit 1; } ; \
mkdir $@ && \
cd $@ && \
ln -s ../Makefile_sub Makefile && \
for s in $(SRC) $(TSRC) $(HDR) $(MSF) $(TMSF) $(RES) ; do \
ln -s ../$$s $$s ; \
done
#
# Make the libraries; the rebuild is forced here because only the
# sub-makes have module dependencies.
#
# ICB, 16-Nov-2000
# Off-line change: Force the build to fail with exit 1 if CC is undefined
#
$(ST_LIB_PATH): $(ST_BUILD_DIR) force
@[ "$(CC)" = "" ] && \
{ echo "Warning: using X_ defaults"; exit 1; } ; \
cd $(ST_BUILD_DIR) && \
$(MAKE) depend CC=$(CC) LIB=$(ST_LIB_NAME) \
F_CFLAGS=$(F_CFLAGS) O_CFLAGS=$(O_CFLAGS) && \
$(MAKE) all CC=$(CC) LIB=$(ST_LIB_NAME) \
F_CFLAGS=$(F_CFLAGS) O_CFLAGS=$(O_CFLAGS)
$(MT_LIB_PATH): $(MT_BUILD_DIR) force
@[ "$(CC)" = "" ] && \
{ echo "Warning: using X_ defaults"; exit 1; } ; \
cd $(MT_BUILD_DIR) && \
$(MAKE) depend CC=$(CC) LIB=$(MT_LIB_NAME) \
F_CFLAGS=$(F_CFLAGS) O_CFLAGS=$(O_CFLAGS) \
TS_CFLAGS=$(TS_CFLAGS) TS_LOADLIBES=$(TS_LOADLIBES) && \
$(MAKE) all CC=$(CC) LIB=$(MT_LIB_NAME) \
F_CFLAGS=$(F_CFLAGS) O_CFLAGS=$(O_CFLAGS) \
TS_CFLAGS=$(TS_CFLAGS) TS_LOADLIBES=$(TS_LOADLIBES)
force:
$(TARGET): $(OBJS)
$(AR) $(ARFLAGS) $@ $?

View file

@ -1,68 +0,0 @@
# .+
#
# .identifier : $Id: Makefile_def,v 2.2 2001/01/25 11:59:19 cibrario Exp $
# .context : CHF, Condition Handling Facility
# .title : $RCSfile: Makefile_def,v $, Makefile
# .kind : Makefile
# .author : Ivan Cibrario B.
# .site : CSTV-CNR
# .creation : 22-May-2000
# .keywords : *
# .description :
# Makefile for CHF library common definitions; no platform dependencies here.
# .notes :
# $Log: Makefile_def,v $
# Revision 2.2 2001/01/25 11:59:19 cibrario
# Added partial Win32 support (Windows CE only).
#
# Revision 2.1 2000/05/29 13:08:39 cibrario
# *** empty log message ***
#
#
# .-
#
# Source files
#
SRC = chf_init.c chf_gen.c chf_sig.c chf_abrt.c chf_hdlr.c \
chf_msgc.c chf_st.c \
chf_top.c \
chf_win32.c
TSRC = test01.c test02.c test03.c test04.c test05.c test06.c \
test07.c
HDR = Chf.h ChfPriv.h
MSF = chf.msf
TMSF = test01.msf
RES =
#
# Target object files
#
OBJ = $(SRC:.c=.o)
#
# Target test programs
#
TBIN = $(TSRC:.c=)
#
# Other definitions
#
HPATH = -I.
LPATH = -L.
CFLAGS = $(F_CFLAGS) $(O_CFLAGS) $(TS_CFLAGS) $(U_CFLAGS) $(HPATH)
LFLAGS = $(F_CFLAGS) $(L_CFLAGS) $(TS_LFLAGS) $(U_CFLAGS) $(HPATH)
LDFLAGS = $(LPATH)
LOADLIBES = $(LIB) $(TS_LOADLIBES) $(I_LOADLIBES) $(U_LOADLIBES)
#
# Solaris spelling of LOADLIBES
#
LDLIBS = $(LOADLIBES)

View file

@ -1,40 +0,0 @@
# .+
#
# .identifier : $Id: Makefile_sub,v 2.1 2000/05/29 13:08:51 cibrario Rel $
# .context : CHF, Condition Handling Facility
# .title : $RCSfile: Makefile_sub,v $, Makefile
# .kind : Makefile
# .author : Ivan Cibrario B.
# .site : CSTV-CNR
# .creation : 22-May-2000
# .keywords : *
# .description :
# Makefile for CHF library subdirectories
# .notes :
# $Log: Makefile_sub,v $
# Revision 2.1 2000/05/29 13:08:51 cibrario
# *** empty log message ***
#
#
# .-
#
# Include common definitions
#
include ../Makefile_def
#
# Targets
#
all: $(LIB)
$(LIB): $(OBJ)
$(AR) $(ARFLAGS) $@ $?
test: $(TBIN)
@for b in $(TBIN) ; do \
./$$b ; \
done
depend: $(SRC)
@makedepend $(HPATH) $(SRC)

View file

@ -1,99 +0,0 @@
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// String Table
//
STRINGTABLE DISCARDABLE
BEGIN
1002 "Chf"
END
STRINGTABLE DISCARDABLE
BEGIN
2001 "Condition stack is full"
2002 "Handler stack is full"
2003 "Handler stack is empty"
2004 "Wrong state for requested operation"
2005 "Invalid action code from handler (code=<%d>d)"
2006 "Dynamic memory allocation failed"
2007 "Function not available"
2010 "setlocale() failed"
2011 "catopen() failed"
END
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
// Italian (Italy) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ITA)
#ifdef _WIN32
LANGUAGE LANG_ITALIAN, SUBLANG_ITALIAN
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
#endif // Italian (Italy) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED

View file

@ -1,169 +0,0 @@
/* .+
.identifier : $Id: chf_win32.c,v 2.2 2001/01/25 14:11:58 cibrario Exp $
.context : CHF, Condition Handling Facility
.title : $RCSfile: chf_win32.c,v $, Win32 initialization function
.kind : C source
.author : Ivan Cibrario B.
.site : CSTV-CNR
.creation : 19-Jan-2001
.keywords : *
.description :
This module contains the CHF initialization function ChfWin32Init()
.include : Chf.h
.notes :
$Log: chf_win32.c,v $
Revision 2.2 2001/01/25 14:11:58 cibrario
*** empty log message ***
.- */
#ifndef lint
static char rcs_id[] = "$Id: chf_win32.c,v 2.2 2001/01/25 14:11:58 cibrario Exp $";
#endif
#include <stdio.h>
#include <stdlib.h>
#ifndef _WIN32
# include <errno.h>
#endif
#include <setjmp.h>
#include <string.h>
#ifdef _WIN32
# include <windows.h>
# include <tchar.h>
#endif
#include "Chf.h"
#include "ChfPriv.h"
/* -------------------------------------------------------------------------
Global and static variables
------------------------------------------------------------------------- */
/* -------------------------------------------------------------------------
Private type definitions
------------------------------------------------------------------------- */
#ifdef _WIN32
typedef struct {
HINSTANCE instance; /* App. instance handle */
ChfChar buffer[ CHF_MAX_MESSAGE_LENGTH ]; /* Temporary buffer */
} ChfWin32Context;
#endif
/* -------------------------------------------------------------------------
Private functions
------------------------------------------------------------------------- */
#ifdef _WIN32
static const ChfChar* Win32GetMessage( void* private_context, const int module_id, const int condition_code,
const ChfChar* default_message )
{
if ( !LoadString( ( ( ChfWin32Context* )private_context )->instance, module_id * 1000 + condition_code,
( ( ChfWin32Context* )private_context )->buffer, CHF_MAX_MESSAGE_LENGTH - 1 ) )
return default_message;
return ( ( ChfWin32Context* )private_context )->buffer;
}
static void ExitMessage( void* private_context ) { free( private_context ); }
#endif
/* -------------------------------------------------------------------------
Public functions
------------------------------------------------------------------------- */
/* .+
.title : ChfWin32Init
.kind : C function
.creation : 19-Jan-2001
.description :
This function initializes CHF and returns to the caller a condition code;
that code will be either CHF_S_OK if the initialization was succesful,
or one of the other values listed below.
It's necessary to invoke succesfully either ChfWin32Init() or one of the
other CHF initialization routines before using any other CHF function.
NOTE: This function will call ChfAbort() with abort code CHF_ABORT_DUP_INIT
if CHF has already been initialized before.
WIN32:
- This function is available in Win32 only; it will return
CHF_F_NOT_AVAILABLE on Unix platforma.
- message retrieval is done through the LoadString() Win32 function.
This function does not support message sets, so the linear message id
passed to it is made by module_id*1000 + condition_code. The following
limits are in effect:
0 <= condition_code <= 999
0 <= module_id <= 64
.call :
cc = ChfWin32Init(app_name, options,
msgcat_name,
condition_stack_size, handler_stack_size,
exit_code);
.input :
const ChfChar *app_name, Application's name
const ChfOptions options, Options
HINSTANCE instance, App. instance handle
const int condition_stack_size, Size of the condition stack
const int handler_stack_size, Size of the handler stack
const int exit_code, Abnormal exit code
.output :
int cc, condition code
.status_codes :
CHF_F_MALLOC, FATAL, memory allocation failed
CHF_F_NOT_AVAILABLE, FATAL, function not available
.notes :
2.2, 19-Jan-2001, creation
.- */
int ChfWin32Init( /* Initialization within _WIN32 */
const ChfChar* app_name, /* Application's name */
const ChfOptions options, /* Options */
#ifndef _WIN32
void* instance, /* Fake arguments */
#else
HINSTANCE instance, /* App. instance handle */
#endif
const int condition_stack_size, /* Size of the condition stack */
const int handler_stack_size, /* Size of the handler stack */
const int exit_code /* Abnormal exit code */
)
{
#ifndef _WIN32
/* This function is available only in Win32 */
return CHF_F_NOT_AVAILABLE;
#else
ChfWin32Context* private_context;
int cc;
if ( ( private_context = ( ChfWin32Context* )malloc( sizeof( ChfWin32Context ) ) ) == ( ChfWin32Context* )NULL )
cc = CHF_F_MALLOC;
else if ( ( cc = ChfInit( app_name, options, ( void* )private_context, Win32GetMessage, ExitMessage, condition_stack_size,
handler_stack_size, exit_code ) ) != CHF_S_OK ) {
free( private_context );
}
else {
/* Save Win32 specific context items into private Chf context */
private_context->instance = instance;
cc = CHF_S_OK;
}
return cc;
#endif
}

19
libChf/docs/Makefile Normal file
View file

@ -0,0 +1,19 @@
all: chf.info chf.dvi chf.ps chf.pdf
chf.info: chf.texi
makeinfo chf.texi
chf.dvi: chf.texi
texi2dvi chf.texi
chf.ps: chf.dvi
dvips -o chf.ps chf.dvi
chf.pdf: chf.dvi
dvips -o chf.pdf chf.dvi
clean:
rm -f chf.aux chf.cp chf.cps chf.fn chf.fns chf.log chf.toc chf.tp chf.tps
mrproper: clean
rm -f chf.info chf.dvi chf.ps chf.pdf

View file

@ -1,485 +0,0 @@
# Microsoft eMbedded Visual Tools Project File - Name="libChf" - Package Owner=<4>
# Microsoft eMbedded Visual Tools Generated Build File, Format Version 6.02
# ** DO NOT EDIT **
# TARGTYPE "Win32 (WCE x86em) Static Library" 0x7f04
# TARGTYPE "Win32 (WCE ARM) Static Library" 0x8504
CFG=libChf - Win32 (WCE ARM) Debug
!MESSAGE This is not a valid makefile. To build this project using NMAKE,
!MESSAGE use the Export Makefile command and run
!MESSAGE
!MESSAGE NMAKE /f "libChf.vcn".
!MESSAGE
!MESSAGE You can specify a configuration when running NMAKE
!MESSAGE by defining the macro CFG on the command line. For example:
!MESSAGE
!MESSAGE NMAKE /f "libChf.vcn" CFG="libChf - Win32 (WCE ARM) Debug"
!MESSAGE
!MESSAGE Possible choices for configuration are:
!MESSAGE
!MESSAGE "libChf - Win32 (WCE ARM) Release" (based on "Win32 (WCE ARM) Static Library")
!MESSAGE "libChf - Win32 (WCE ARM) Debug" (based on "Win32 (WCE ARM) Static Library")
!MESSAGE "libChf - Win32 (WCE x86em) Release" (based on "Win32 (WCE x86em) Static Library")
!MESSAGE "libChf - Win32 (WCE x86em) Debug" (based on "Win32 (WCE x86em) Static Library")
!MESSAGE
# Begin Project
# PROP AllowPerConfigDependencies 0
# PROP Scc_ProjName ""
# PROP Scc_LocalPath ""
# PROP ATL_Project 2
!IF "$(CFG)" == "libChf - Win32 (WCE ARM) Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "ARMRel"
# PROP BASE Intermediate_Dir "ARMRel"
# PROP BASE CPU_ID "{D6518FFC-710F-11D3-99F2-00105A0DF099}"
# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "ARMRel"
# PROP Intermediate_Dir "ARMRel"
# PROP CPU_ID "{D6518FFC-710F-11D3-99F2-00105A0DF099}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
# PROP Target_Dir ""
CPP=clarm.exe
# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "NDEBUG" /D "ARM" /D "_ARM_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /Oxs /M$(CECrtMT) /c
# ADD CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "NDEBUG" /D "ARM" /D "_ARM_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /Oxs /M$(CECrtMT) /c
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE ARM) Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "ARMDbg"
# PROP BASE Intermediate_Dir "ARMDbg"
# PROP BASE CPU_ID "{D6518FFC-710F-11D3-99F2-00105A0DF099}"
# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "ARMDbg"
# PROP Intermediate_Dir "ARMDbg"
# PROP CPU_ID "{D6518FFC-710F-11D3-99F2-00105A0DF099}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
# PROP Target_Dir ""
CPP=clarm.exe
# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /M$(CECrtMTDebug) /c
# ADD CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "$(CePlatform)" /D "ARM" /D "_ARM_" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_LIB" /YX /M$(CECrtMTDebug) /c
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Release"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 0
# PROP BASE Output_Dir "X86EMRel"
# PROP BASE Intermediate_Dir "X86EMRel"
# PROP BASE CPU_ID "{D6518FF4-710F-11D3-99F2-00105A0DF099}"
# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 0
# PROP Output_Dir "X86EMRel"
# PROP Intermediate_Dir "X86EMRel"
# PROP CPU_ID "{D6518FF4-710F-11D3-99F2-00105A0DF099}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
# PROP Target_Dir ""
CPP=cl.exe
# ADD BASE CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "WIN32" /D "STRICT" /D "_WIN32_WCE_EMULATION" /D "INTERNATIONAL" /D "USA" /D "INTLMSG_CODEPAGE" /D "$(CePlatform)" /D "i486" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "NDEBUG" /D "_LIB" /YX /Oxs /Gz /c
# ADD CPP /nologo /W3 /D _WIN32_WCE=$(CEVersion) /D "WIN32" /D "STRICT" /D "_WIN32_WCE_EMULATION" /D "INTERNATIONAL" /D "USA" /D "INTLMSG_CODEPAGE" /D "$(CePlatform)" /D "i486" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "NDEBUG" /D "_LIB" /YX /Oxs /Gz /c
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Debug"
# PROP BASE Use_MFC 0
# PROP BASE Use_Debug_Libraries 1
# PROP BASE Output_Dir "X86EMDbg"
# PROP BASE Intermediate_Dir "X86EMDbg"
# PROP BASE CPU_ID "{D6518FF4-710F-11D3-99F2-00105A0DF099}"
# PROP BASE Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
# PROP BASE Target_Dir ""
# PROP Use_MFC 0
# PROP Use_Debug_Libraries 1
# PROP Output_Dir "X86EMDbg"
# PROP Intermediate_Dir "X86EMDbg"
# PROP CPU_ID "{D6518FF4-710F-11D3-99F2-00105A0DF099}"
# PROP Platform_ID "{8A9A2F80-6887-11D3-842E-005004848CBA}"
# PROP Target_Dir ""
CPP=cl.exe
# ADD BASE CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "WIN32" /D "STRICT" /D "_WIN32_WCE_EMULATION" /D "INTERNATIONAL" /D "USA" /D "INTLMSG_CODEPAGE" /D "$(CePlatform)" /D "i486" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "_LIB" /YX /Gz /c
# ADD CPP /nologo /W3 /Zi /Od /D "DEBUG" /D _WIN32_WCE=$(CEVersion) /D "WIN32" /D "STRICT" /D "_WIN32_WCE_EMULATION" /D "INTERNATIONAL" /D "USA" /D "INTLMSG_CODEPAGE" /D "$(CePlatform)" /D "i486" /D UNDER_CE=$(CEVersion) /D "UNICODE" /D "_UNICODE" /D "_X86_" /D "x86" /D "_LIB" /FR /YX /Gz /c
LIB32=link.exe -lib
# ADD BASE LIB32 /nologo
# ADD LIB32 /nologo
BSC32=bscmake.exe
# ADD BASE BSC32 /nologo
# ADD BSC32 /nologo
!ENDIF
# Begin Target
# Name "libChf - Win32 (WCE ARM) Release"
# Name "libChf - Win32 (WCE ARM) Debug"
# Name "libChf - Win32 (WCE x86em) Release"
# Name "libChf - Win32 (WCE x86em) Debug"
# Begin Group "Source Files"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\chf_abrt.c
!IF "$(CFG)" == "libChf - Win32 (WCE ARM) Release"
DEP_CPP_CHF_A=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE ARM) Debug"
DEP_CPP_CHF_A=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Release"
DEP_CPP_CHF_A=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Debug"
DEP_CPP_CHF_A=\
".\Chf.h"\
".\ChfPriv.h"\
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\chf_gen.c
!IF "$(CFG)" == "libChf - Win32 (WCE ARM) Release"
DEP_CPP_CHF_G=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE ARM) Debug"
DEP_CPP_CHF_G=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Release"
DEP_CPP_CHF_G=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Debug"
DEP_CPP_CHF_G=\
".\Chf.h"\
".\ChfPriv.h"\
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\chf_hdlr.c
!IF "$(CFG)" == "libChf - Win32 (WCE ARM) Release"
DEP_CPP_CHF_H=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE ARM) Debug"
DEP_CPP_CHF_H=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Release"
DEP_CPP_CHF_H=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Debug"
DEP_CPP_CHF_H=\
".\Chf.h"\
".\ChfPriv.h"\
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\chf_init.c
!IF "$(CFG)" == "libChf - Win32 (WCE ARM) Release"
DEP_CPP_CHF_I=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE ARM) Debug"
DEP_CPP_CHF_I=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Release"
DEP_CPP_CHF_I=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Debug"
DEP_CPP_CHF_I=\
".\Chf.h"\
".\ChfPriv.h"\
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\chf_msgc.c
!IF "$(CFG)" == "libChf - Win32 (WCE ARM) Release"
DEP_CPP_CHF_M=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE ARM) Debug"
DEP_CPP_CHF_M=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Release"
DEP_CPP_CHF_M=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Debug"
DEP_CPP_CHF_M=\
".\Chf.h"\
".\ChfPriv.h"\
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\chf_sig.c
!IF "$(CFG)" == "libChf - Win32 (WCE ARM) Release"
DEP_CPP_CHF_S=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE ARM) Debug"
DEP_CPP_CHF_S=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Release"
DEP_CPP_CHF_S=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Debug"
DEP_CPP_CHF_S=\
".\Chf.h"\
".\ChfPriv.h"\
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\chf_st.c
!IF "$(CFG)" == "libChf - Win32 (WCE ARM) Release"
DEP_CPP_CHF_ST=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE ARM) Debug"
DEP_CPP_CHF_ST=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Release"
DEP_CPP_CHF_ST=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Debug"
DEP_CPP_CHF_ST=\
".\Chf.h"\
".\ChfPriv.h"\
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\chf_top.c
!IF "$(CFG)" == "libChf - Win32 (WCE ARM) Release"
DEP_CPP_CHF_T=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE ARM) Debug"
DEP_CPP_CHF_T=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Release"
DEP_CPP_CHF_T=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Debug"
DEP_CPP_CHF_T=\
".\Chf.h"\
".\ChfPriv.h"\
!ENDIF
# End Source File
# Begin Source File
SOURCE=.\chf_win32.c
!IF "$(CFG)" == "libChf - Win32 (WCE ARM) Release"
DEP_CPP_CHF_W=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE ARM) Debug"
DEP_CPP_CHF_W=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Release"
DEP_CPP_CHF_W=\
".\Chf.h"\
".\ChfPriv.h"\
!ELSEIF "$(CFG)" == "libChf - Win32 (WCE x86em) Debug"
DEP_CPP_CHF_W=\
".\Chf.h"\
".\ChfPriv.h"\
!ENDIF
# End Source File
# End Group
# Begin Group "Header Files"
# PROP Default_Filter "h;hpp;hxx;hm;inl"
# Begin Source File
SOURCE=.\Chf.h
# End Source File
# Begin Source File
SOURCE=.\ChfPriv.h
# End Source File
# End Group
# Begin Group "Resource Files"
# PROP Default_Filter "rc"
# Begin Source File
SOURCE=.\chf.rc
# End Source File
# End Group
# End Target
# End Project

View file

@ -55,19 +55,11 @@
Win32 & UNICODE support
------------------------------------------------------------------------- */
#ifdef _WIN32
# define ChfChar TCHAR
# define ChfText( x ) _T( x )
# define ChfSigjmp_buf jmp_buf
# define ChfSigsetjmp( x, y ) setjmp( x )
# define ChfSiglongjmp( x, y ) longjmp( x, y )
#else
# define ChfChar char
# define ChfText( x ) x
# define ChfSigjmp_buf sigjmp_buf
# define ChfSigsetjmp( x, y ) sigsetjmp( x, y )
# define ChfSiglongjmp( x, y ) siglongjmp( x, y )
#endif
#define ChfChar char
#define ChfText( x ) x
#define ChfSigjmp_buf sigjmp_buf
#define ChfSigsetjmp( x, y ) sigsetjmp( x, y )
#define ChfSiglongjmp( x, y ) siglongjmp( x, y )
/* -------------------------------------------------------------------------
CHF implementation limits and other symbolic constants
@ -175,11 +167,7 @@ typedef /* Message retrieval 'exit' function */
CHF_MODULE_ID, \
ChfText(__FILE__), __LINE__,
# ifdef _WIN32
# define ChfErrnoCondition
# else
# define ChfErrnoCondition ChfGenerate( CHF_ERRNO_SET, ChfText( __FILE__ ), __LINE__, errno, CHF_ERROR )
# endif
# define ChfErrnoCondition ChfGenerate( CHF_ERRNO_SET, ChfText( __FILE__ ), __LINE__, errno, CHF_ERROR )
#else
# define ChfCondition \
@ -187,11 +175,7 @@ typedef /* Message retrieval 'exit' function */
CHF_MODULE_ID, \
CHF_UNKNOWN_FILE_NAME, CHF_UNKNOWN_LINE_NUMBER,
# ifdef _WIN32
# define ChfErrnoCondition
# else
# define ChfErrnoCondition ChfGenerate( CHF_ERRNO_SET, CHF_UNKNOWN_FILE_NAME, CHF_UNKNOWN_LINE_NUMBER, errno, CHF_ERROR )
# endif
# define ChfErrnoCondition ChfGenerate( CHF_ERRNO_SET, CHF_UNKNOWN_FILE_NAME, CHF_UNKNOWN_LINE_NUMBER, errno, CHF_ERROR )
#endif
@ -234,9 +218,8 @@ typedef /* Message retrieval 'exit' function */
/* -------------------------------------------------------------------------
Function prototypes
------------------------------------------------------------------------- */
int ChfInit( /* Generic initialization */
const ChfChar* app_name, /* Application's name */
/* Generic initialization */
int ChfInit( const ChfChar* app_name, /* Application's name */
const ChfOptions options, /* Options */
void* mrs_data, /* Message retrieval private data */
ChfMrsGet mrs_get, /* 'GetMessage' function */
@ -245,18 +228,16 @@ int ChfInit( /* Generic initialization */
const int handler_stack_size, /* Size of the handler stack */
const int exit_code /* Abnormal exit code */
);
int ChfMsgcatInit( /* Initialization with msgcat subsystem */
const ChfChar* app_name, /* Application's name */
/* Initialization with msgcat subsystem */
int ChfMsgcatInit( const ChfChar* app_name, /* Application's name */
const ChfOptions options, /* Options */
const ChfChar* msgcat_name, /* Name of the message catalog */
const int condition_stack_size, /* Size of the condition stack */
const int handler_stack_size, /* Size of the handler stack */
const int exit_code /* Abnormal exit code */
);
int ChfStaticInit( /* Initialization with static message tables */
const ChfChar* app_name, /* Application's name */
/* Initialization with static message tables */
int ChfStaticInit( const ChfChar* app_name, /* Application's name */
const ChfOptions options, /* Options */
const ChfTable* table, /* Static message table */
const size_t table_size, /* Size of the message table */
@ -264,50 +245,27 @@ int ChfStaticInit( /* Initialization with static
const int handler_stack_size, /* Size of the handler stack */
const int exit_code /* Abnormal exit code */
);
int ChfWin32Init( /* Initialization within _WIN32 */
const ChfChar* app_name, /* Application's name */
const ChfOptions options, /* Options */
#ifndef _WIN32
void* instance, /* Fake arguments */
#else
HINSTANCE instance, /* App. instance handle */
#endif
const int condition_stack_size, /* Size of the condition stack */
const int handler_stack_size, /* Size of the handler stack */
const int exit_code /* Abnormal exit code */
);
void ChfExit( /* Exit */
void );
void ChfAbort( /* Abort application */
const int abort_code );
void ChfPushHandler( /* Push a new handler into the stack */
ChfHandler new_handler, /* Handler to be added */
/* Exit */
void ChfExit( void );
/* Abort application */
void ChfAbort( const int abort_code );
/* Push a new handler into the stack */
void ChfPushHandler( ChfHandler new_handler, /* Handler to be added */
void* unwind_context, /* Unwind context */
ChfPointer handler_context /* Private handler context */
);
void ChfPopHandler( /* Pop a handler */
void );
ChfChar* ChfBuildMessage( /* Build a condition message */
const ChfDescriptor* descriptor );
void ChfSignal( /* Signal the current conditions */
void );
void ChfDiscard( /* Discard the current conditions */
void );
void ChfGenerate( /* Generate a condition into the stack */
const int module_id, const ChfChar* file_name, const int line_number, const int condition_code,
/* Pop a handler */
void ChfPopHandler( void );
/* Build a condition message */
ChfChar* ChfBuildMessage( const ChfDescriptor* descriptor );
/* Signal the current conditions */
void ChfSignal( void );
/* Discard the current conditions */
void ChfDiscard( void );
/* Generate a condition into the stack */
void ChfGenerate( const int module_id, const ChfChar* file_name, const int line_number, const int condition_code,
const ChfSeverity severity, ... );
const ChfChar* ChfGetMessage( /* Retrieve a condition message */
const int module_id, const int condition_code, const ChfChar* default_message );
const ChfDescriptor* ChfGetTopCondition( /* Retrieve top condition */
void );
/* Retrieve a condition message */
const ChfChar* ChfGetMessage( const int module_id, const int condition_code, const ChfChar* default_message );
/* Retrieve top condition */
const ChfDescriptor* ChfGetTopCondition( void );

View file

@ -126,18 +126,9 @@ ChfContext* _ChfGetContext( void );
Private redirection of stdlib functions needed by Win32
------------------------------------------------------------------------- */
#ifdef _WIN32
# define ChfStrlen _tcslen
# define ChfStrcpy _tcscpy
# define ChfStrcat _tcscat
# define ChfStrncpy _tcsncpy
# define ChfSprintf _stprintf
# define ChfVsprintf _vstprintf
#else
# define ChfStrlen strlen
# define ChfStrcpy strcpy
# define ChfStrcat strcat
# define ChfStrncpy strncpy
# define ChfSprintf sprintf
# define ChfVsprintf vsprintf
#endif
#define ChfStrlen strlen
#define ChfStrcpy strcpy
#define ChfStrcat strcat
#define ChfStrncpy strncpy
#define ChfSprintf sprintf
#define ChfVsprintf vsprintf

View file

@ -36,16 +36,9 @@ static char rcs_id[] = "$Id: chf_abrt.c,v 2.2 2001/01/25 12:08:24 cibrario Exp $
#include <stdio.h>
#include <stdlib.h>
#ifndef _WIN32
# include <errno.h>
#endif
#include <errno.h>
#include <setjmp.h>
#ifdef _WIN32
# include <windows.h>
# include <tchar.h>
#endif
#include "Chf.h"
#include "ChfPriv.h"
@ -120,49 +113,10 @@ static const ChfChar* message_table[] = { ( const ChfChar* )NULL,
void ChfAbort( /* Abort application */
const int abort_code )
{
#ifdef _WIN32
if ( abort_code != CHF_ABORT_SILENT ) {
TCHAR abort_msg[ CHF_MAX_MESSAGE_LENGTH ];
HWND active_window;
/* stderr not available;
put complaint in a message box and display it
*/
if ( abort_code < 0 || abort_code >= MESSAGE_TABLE_SIZE )
_stprintf( abort_msg, CHF_ABORT_BAD_CODE_FMT, abort_code );
else
_stprintf( abort_msg, CHF_ABORT_GOOD_CODE_FMT, message_table[ abort_code ] );
/* Return value of MessageBox() ignored, because there is only
one available choice (abort) here. Avoid using a NULL handle.
*/
if ( chf_context.state != CHF_UNKNOWN && ( active_window = GetActiveWindow() ) != ( HWND )NULL )
( void )MessageBox( active_window, abort_msg, chf_context.app_name, MB_OK | MB_ICONERROR | MB_APPLMODAL | MB_SETFOREGROUND );
}
/* Immediately exit the application with exit code EXIT_FAILURE
if CHF_ABORT option is set or if something is wrong with Chf state.
*/
if ( chf_context.state == CHF_UNKNOWN || chf_context.options & CHF_ABORT )
exit( EXIT_FAILURE );
else
/* Else, exit the application anyway, but with the exit code
registered by the application. Don't use PostQuitMessage(),
because the contract is that ChfAbort() never returns to the caller.
*/
# ifndef _REENTRANT
exit( chf_context.exit_code );
# else
# error "_REENTRANT not supported yet"
# endif
#else
if ( abort_code != CHF_ABORT_SILENT ) {
fputs( CHF_ABORT_HEADER, stderr );
if ( abort_code < 0 || abort_code >= MESSAGE_TABLE_SIZE )
if ( abort_code < 0 || abort_code >= ( int )MESSAGE_TABLE_SIZE )
fprintf( stderr, CHF_ABORT_BAD_CODE_FMT, abort_code );
else
@ -173,10 +127,9 @@ void ChfAbort( /* Abort application */
abort();
else
# ifndef _REENTRANT
#ifndef _REENTRANT
exit( chf_context.exit_code );
# else
#else
pthread_exit( ( void* )( chf_context.exit_code ) );
# endif
#endif
}

View file

@ -30,18 +30,11 @@ static char rcs_id[] = "$Id: chf_gen.c,v 2.2 2001/01/25 12:10:22 cibrario Exp $"
#include <stdio.h>
#include <stdlib.h>
#ifndef _WIN32
# include <errno.h>
#endif
#include <errno.h>
#include <setjmp.h>
#include <stdarg.h>
#include <string.h>
#ifdef _WIN32
# include <windows.h>
# include <tchar.h>
#endif
#include "Chf.h"
#include "ChfPriv.h"

View file

@ -43,16 +43,9 @@ static char rcs_id[] = "$Id: chf_hdlr.c,v 2.2 2001/01/25 12:12:46 cibrario Exp $
#include <stdio.h>
#include <stdlib.h>
#ifndef _WIN32
# include <errno.h>
#endif
#include <errno.h>
#include <setjmp.h>
#ifdef _WIN32
# include <windows.h>
# include <tchar.h>
#endif
#include "Chf.h"
#include "ChfPriv.h"

View file

@ -53,17 +53,10 @@ static char rcs_id[] = "$Id: chf_init.c,v 2.2 2001/01/25 14:05:23 cibrario Exp $
#include <stdio.h>
#include <stdlib.h>
#ifndef _WIN32
# include <errno.h>
#endif
#include <errno.h>
#include <setjmp.h>
#include <string.h>
#ifdef _WIN32
# include <windows.h>
# include <tchar.h>
#endif
#include "Chf.h"
#include "ChfPriv.h"
@ -185,10 +178,8 @@ static ChfAction DefaultHandler( const ChfDescriptor* desc, const ChfState state
if ( pthread_mutex_lock( &fputs_mutex ) )
ChfAbort( CHF_ABORT_PTHREAD );
#endif
#ifndef _WIN32
for ( d = desc; d != CHF_NULL_DESCRIPTOR; d = ChfGetNextDescriptor( d ) )
fputs( ChfBuildMessage( d ), stderr );
#endif
#ifdef _REENTRANT
if ( pthread_mutex_unlock( &fputs_mutex ) )
ChfAbort( CHF_ABORT_PTHREAD );
@ -320,11 +311,7 @@ const ChfChar* ChfGetMessage( /* Retrieve a condition message */
if ( ( message = chf_context.mrs_get( chf_context.mrs_data, module_id, condition_code, default_message ) ) == default_message &&
module_id == CHF_ERRNO_SET )
#ifdef _WIN32
message = default_message;
#else
message = strerror( condition_code );
#endif
return ( message );
}
@ -379,7 +366,6 @@ ChfChar* ChfBuildMessage( /* Build a condition message */
tmp_p = chf_context.message_buffer;
tmp_end = tmp_p + CHF_MAX_MESSAGE_LENGTH;
#ifndef _WIN32
/* The message starts with "<app_name>: " if the condition is the first of
its condition group, with "\t" if not.
*/
@ -390,7 +376,6 @@ ChfChar* ChfBuildMessage( /* Build a condition message */
else
tmp_p = scopy( tmp_p, ChfText( "\t" ), tmp_end );
#endif
/* The message continues with the module name */
ChfSprintf( def_message, CHF_DEF_MID_MSG_FMT, ChfGetModuleId( descriptor ) );
@ -408,7 +393,6 @@ ChfChar* ChfBuildMessage( /* Build a condition message */
tmp_p = scopy( tmp_p, separator, tmp_end );
#ifndef _WIN32
/* Add the severity code of the message */
tmp_p = scopy( tmp_p,
( ( severity = ChfGetSeverity( descriptor ) ) < CHF_SUCCESS || severity > CHF_FATAL ) ? CHF_UNKNOWN_SEVERITY
@ -416,7 +400,6 @@ ChfChar* ChfBuildMessage( /* Build a condition message */
tmp_end );
tmp_p = scopy( tmp_p, separator, tmp_end );
#endif
/* The message ends with the partial message from the descriptor */
tmp_p = scopy( tmp_p, ChfGetPartialMessage( descriptor ), tmp_end );

View file

@ -34,20 +34,11 @@ static char rcs_id[] = "$Id: chf_msgc.c,v 2.2 2001/01/25 14:06:47 cibrario Exp $
#include <stdio.h>
#include <stdlib.h>
#ifndef _WIN32
# include <errno.h>
#endif
#include <errno.h>
#include <setjmp.h>
#include <string.h>
#ifndef _WIN32
# include <locale.h>
# include <nl_types.h>
#endif
#ifdef _WIN32
# include <windows.h>
# include <tchar.h>
#endif
#include <locale.h>
#include <nl_types.h>
#include "Chf.h"
#include "ChfPriv.h"
@ -60,17 +51,14 @@ static char rcs_id[] = "$Id: chf_msgc.c,v 2.2 2001/01/25 14:06:47 cibrario Exp $
Private type definitions
------------------------------------------------------------------------- */
#ifndef _WIN32
typedef struct {
nl_catd catalog; /* Message catalog descriptor */
} ChfMsgcatContext;
#endif
/* -------------------------------------------------------------------------
Private functions
------------------------------------------------------------------------- */
#ifndef _WIN32
static const char* GetMessage( void* private_context, const int module_id, const int condition_code, const char* default_message )
{
return ( catgets( ( ( ChfMsgcatContext* )private_context )->catalog, module_id, condition_code, default_message ) );
@ -81,7 +69,6 @@ static void ExitMessage( void* private_context )
( void )catclose( ( ( ChfMsgcatContext* )private_context )->catalog );
free( private_context );
}
#endif
/* -------------------------------------------------------------------------
Public functions
@ -142,39 +129,23 @@ int ChfMsgcatInit( /* Initialization with msgcat
const int exit_code /* Abnormal exit code */
)
{
#ifdef _WIN32
/* This function always fails in _WIN32, because message catalogs
are not supported.
*/
return CHF_F_NOT_AVAILABLE;
#else
ChfMsgcatContext* private_context;
int cc;
if ( ( private_context = ( ChfMsgcatContext* )malloc( sizeof( ChfMsgcatContext ) ) ) == ( ChfMsgcatContext* )NULL )
cc = CHF_F_MALLOC;
else if ( setlocale( LC_ALL, "" ) == ( char* )NULL ) {
free( private_context );
cc = CHF_F_SETLOCALE;
}
else if ( ( private_context->catalog = catopen( msgcat_name, 0 ) ) == ( nl_catd )( -1 ) ) {
} else if ( ( private_context->catalog = catopen( msgcat_name, 0 ) ) == ( nl_catd )( -1 ) ) {
free( private_context );
cc = CHF_F_CATOPEN;
}
else if ( ( cc = ChfInit( app_name, options, ( void* )private_context, GetMessage, ExitMessage, condition_stack_size,
} else if ( ( cc = ChfInit( app_name, options, ( void* )private_context, GetMessage, ExitMessage, condition_stack_size,
handler_stack_size, exit_code ) ) != CHF_S_OK ) {
( void )catclose( private_context->catalog );
free( private_context );
}
else
} else
cc = CHF_S_OK;
return cc;
#endif
}

View file

@ -43,16 +43,9 @@ static char rcs_id[] = "$Id: chf_sig.c,v 2.2 2001/01/25 14:07:42 cibrario Exp $"
#include <stdio.h>
#include <stdlib.h>
#ifndef _WIN32
# include <errno.h>
#endif
#include <errno.h>
#include <setjmp.h>
#ifdef _WIN32
# include <windows.h>
# include <tchar.h>
#endif
#include "Chf.h"
#include "ChfPriv.h"

View file

@ -30,17 +30,10 @@ static char rcs_id[] = "$Id: chf_st.c,v 2.2 2001/01/25 14:08:45 cibrario Exp $";
#include <stdio.h>
#include <stdlib.h>
#ifndef _WIN32
# include <errno.h>
#endif
#include <errno.h>
#include <setjmp.h>
#include <string.h>
#ifdef _WIN32
# include <windows.h>
# include <tchar.h>
#endif
#include "Chf.h"
#include "ChfPriv.h"
@ -61,34 +54,6 @@ typedef struct {
Private functions
------------------------------------------------------------------------- */
#ifdef _WIN32
/* Win32 does not have bsearch();
provide a simple one from glibc here.
*/
static void* bsearch( const void* key, const void* base, size_t nmemb, size_t size, int ( *compar )( const void*, const void* ) )
{
size_t l, u, idx;
const void* p;
int comparison;
l = 0;
u = nmemb;
while ( l < u ) {
idx = ( l + u ) / 2;
p = ( void* )( ( ( const char* )base ) + ( idx * size ) );
comparison = ( *compar )( key, p );
if ( comparison < 0 )
u = idx;
else if ( comparison > 0 )
l = idx + 1;
else
return ( void* )p;
}
return NULL;
}
#endif
#define GT 1
#define LT -1
#define EQ 0
@ -183,11 +148,9 @@ int ChfStaticInit( /* Initialization with static
if ( ( private_context = ( ChfStaticContext* )malloc( sizeof( ChfStaticContext ) ) ) == ( ChfStaticContext* )NULL )
cc = CHF_F_MALLOC;
else if ( ( cc = ChfInit( app_name, options, ( void* )private_context, StGetMessage, ExitMessage, condition_stack_size,
handler_stack_size, exit_code ) ) != CHF_S_OK )
free( private_context );
else {
private_context->table = table;
private_context->size = table_size;

View file

@ -34,17 +34,10 @@ static char rcs_id[] = "$Id: chf_top.c,v 2.2 2001/01/25 14:09:21 cibrario Exp $"
#include <stdio.h>
#include <stdlib.h>
#ifndef _WIN32
# include <errno.h>
#endif
#include <errno.h>
#include <setjmp.h>
#include <string.h>
#ifdef _WIN32
# include <windows.h>
# include <tchar.h>
#endif
#include "Chf.h"
#include "ChfPriv.h"

40
libChf/tests/chf.msf Normal file
View file

@ -0,0 +1,40 @@
$ .+
$ .
$ .identifier : $Id: chf.msf,v 2.2 2001/01/25 12:00:19 cibrario Exp $
$ .context :
$ .title : $RCSfile: chf.msf,v $
$ .kind : Makefile
$ .author : Ivan Cibrario B.
$ .site : CSTV-CNR
$ .creation : 27-May-1996
$ .keywords : *
$ .description :
$ . Message source file for the CHF conditions
$ .notes :
$ . $Log: chf.msf,v $
$ . Revision 2.2 2001/01/25 12:00:19 cibrario
$ . Added partial Win32 support (Windows CE only).
$ .
$ . Revision 2.1 2000/05/26 14:17:21 cibrario
$ . Updated documentation block and RCS log message header to prevent
$ . gencat warnings on Linux boxes
$ .
$ . Revision 1.1 1996/05/28 12:57:06 cibrario
$ . Initial revision
$ .
$ .-
$set 1
2 Chf
3 Errno
$set 2
1 Condition stack is full
2 Handler stack is full
3 Handler stack is empty
4 Wrong Chf state for requested operation
5 Invalid action code from handler (code=<%d>d)
6 Dynamic memory allocation failed
7 Function not implemented
10 setlocale() failed
11 catopen() failed

View file

@ -1,14 +0,0 @@
#
# TexInfo Documentation
#
MAKEINFO= makeinfo
TEXI2DVI= texi2dvi
DVIPS= dvips
doc:
$(MAKEINFO) saturn.texi
$(TEXI2DVI) saturn.texi && $(DVIPS) -o saturn.ps saturn.dvi
@echo "*** Install saturn.info manually, please"
clean:
rm -f saturn.aux saturn.cp saturn.cps saturn.dvi saturn.info saturn.log saturn.ps saturn.toc