1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-01-26 20:02:37 +00:00

Remove support for the Sun386i. (#329)

This was a machine running SunOS 4, which we no longer support.

It had an odd display controller and a compiler with issues that
required workarounds. Those compiler issues aren't an issue in
today's world, so we don't need to keep the workarounds present
for reference.

It had a bit of inline assembly, but that is still present in
other files for other platforms.
This commit is contained in:
Bruce Mitchener
2021-01-31 11:02:40 +07:00
committed by GitHub
parent 1f17665741
commit 70db63449c
12 changed files with 3 additions and 371 deletions

View File

@@ -302,7 +302,6 @@ SET(MAIKO_HDRS
inc/initkbddefs.h inc/initkbddefs.h
inc/initsoutdefs.h inc/initsoutdefs.h
inc/inlineC.h inc/inlineC.h
inc/inln386i.h
inc/inln68k.h inc/inln68k.h
inc/inlndos.h inc/inlndos.h
inc/inlnPS2.h inc/inlnPS2.h

View File

@@ -11,8 +11,6 @@ Flag Name Meaning/Usage
_________ ________________________________________________________ _________ ________________________________________________________
BYTESWAP Used when compiling for a hardware architecture that has BYTESWAP Used when compiling for a hardware architecture that has
byte-swapped words and word-swapped 32-bit cells, e.g. 80386. byte-swapped words and word-swapped 32-bit cells, e.g. 80386.
I386 True if compiling for the Sun386i (not just any 80386);
used because the 386i's display controller is odd.
OS4 True if compiling for SunOS 4.x OS4 True if compiling for SunOS 4.x
NOPIXRECT Used to suppress pixrect/pixwin options when they're not NOPIXRECT Used to suppress pixrect/pixwin options when they're not

View File

@@ -44,11 +44,7 @@
/* Translate Lisp_address to 68K address */ /* Translate Lisp_address to 68K address */
/* Lisp_addr: word offset */ /* Lisp_addr: word offset */
#ifndef I386
#define Addr68k_from_LADDR(Lisp_addr) (Lisp_world + (Lisp_addr)) #define Addr68k_from_LADDR(Lisp_addr) (Lisp_world + (Lisp_addr))
#else
#define Addr68k_from_LADDR(Lisp_addr) ((Lisp_addr) + Lisp_world)
#endif
/* translate LispPage to 68k address */ /* translate LispPage to 68k address */
@@ -62,11 +58,6 @@
#define StkOffset_from_68K(ptr68k)\ #define StkOffset_from_68K(ptr68k)\
((LispPTR)(((UNSIGNED)(ptr68k) - (UNSIGNED)Stackspace) >>1)) ((LispPTR)(((UNSIGNED)(ptr68k) - (UNSIGNED)Stackspace) >>1))
#ifndef I386
#define Addr68k_from_StkOffset(stkoffset)\ #define Addr68k_from_StkOffset(stkoffset)\
(Stackspace + (stkoffset)) (Stackspace + (stkoffset))
#else
#define Addr68k_from_StkOffset(stkoffset)\
( (stkoffset) + Stackspace)
#endif
#endif /* ADR68K_H */ #endif /* ADR68K_H */

View File

@@ -14,8 +14,7 @@
/********************************************************/ /********************************************************/
#if defined(SUNDISPLAY) && \ #if defined(SUNDISPLAY) && \
!defined(NOPIXRECT) && \ !defined(NOPIXRECT) && \
!defined(NEWBITBLT) && \ !defined(NEWBITBLT)
!defined(I386)
#define prropstyle 1 #define prropstyle 1
#endif #endif

View File

@@ -1,221 +0,0 @@
/* $Id: inln386i.h,v 1.2 1999/01/03 02:06:02 sybalsky Exp $ (C) Copyright Venue, All Rights Reserved */
/************************************************************************/
/* */
/* inlinedefs386i.c */
/* */
/* Dispatch-loop macro definitions specific to the Sun386i */
/* */
/************************************************************************/
/************************************************************************/
/* */
/* Copyright 1989, 1990 Venue, Fuji Xerox Co., Ltd, Xerox Corp. */
/* */
/* This file is work-product resulting from the Xerox/Venue */
/* Agreement dated 18-August-1989 for support of Medley. */
/* */
/************************************************************************/
/* undefine these macros so we use the 386i inline code */
#undef Get_BYTE_PCMAC0
#undef Get_BYTE_PCMAC1
#undef Get_BYTE_PCMAC2
#undef Get_BYTE_PCMAC3
#undef Get_DLword_PCMAC0
#undef Get_DLword_PCMAC1
#undef Get_DLword_PCMAC2
#undef Get_DLword_PCMAC3
#define Get_BYTE_PCMAC0 Get_BYTE_PCMAC0fn()
#define Get_BYTE_PCMAC1 Get_BYTE_PCMAC1fn()
#define Get_BYTE_PCMAC2 Get_BYTE_PCMAC2fn()
#define Get_BYTE_PCMAC3 Get_BYTE_PCMAC3fn()
#define Get_DLword_PCMAC0 Get_DLword_PCMAC0fn()
#define Get_DLword_PCMAC1 Get_DLword_PCMAC1fn()
#define Get_DLword_PCMAC2 Get_DLword_PCMAC2fn()
#define Get_DLword_PCMAC3 Get_DLword_PCMAC3fn()
#undef DIFFERENCE
#undef PLUS2
#undef IDIFFERENCE
#undef IPLUS2
#define DIFFERENCE { \
fast_op_difference(POP_TOS_1); \
nextop1; \
diff_err: \
asm("diff_err:"); \
asm("addw $7,%bx"); \
asm("rorl $15,%ebx"); \
asm("popl %ecx"); \
N_OP_POPPED_CALL_2(N_OP_difference, GET_POPPED); \
}
#define IDIFFERENCE { \
fast_op_idifference(POP_TOS_1); \
nextop1; \
idiff_err: \
asm("idiff_err:"); \
asm("addw $7,%bx"); \
asm("rorl $15,%ebx"); \
asm("popl %ecx"); \
N_OP_POPPED_CALL_2(N_OP_idifference, GET_POPPED); \
}
#define IDIFFERENCE_N(n) { \
fast_op_idifferencen(n); \
nextop2; \
idiffn_err: \
asm("idiffn_err:"); \
asm("addw $7,%bx"); \
asm("rorl $15,%ebx"); \
asm("popl %ecx"); \
N_OP_CALL_1d(N_OP_idifferencen, n); \
}
#define PLUS2 { \
fast_op_plus(POP_TOS_1); \
nextop1; \
plus_err: \
asm("plus_err:"); \
asm("addw $7,%bx"); \
asm("rorl $15,%ebx"); \
asm("popl %ecx"); \
N_OP_POPPED_CALL_2(N_OP_plus2, GET_POPPED); \
}
#define IPLUS2 { \
fast_op_iplus(POP_TOS_1); \
nextop1; \
iplus_err: \
asm("iplus_err:"); \
asm("addw $7,%bx"); \
asm("rorl $15,%ebx"); \
asm("popl %ecx"); \
N_OP_POPPED_CALL_2(N_OP_iplus2, GET_POPPED); \
}
#define IPLUS_N(n) { \
fast_op_iplusn(n); \
nextop2; \
iplusn_err: \
asm("iplusn_err:"); \
asm("addw $7,%bx"); \
asm("rorl $15,%ebx"); \
asm("popl %ecx"); \
N_OP_CALL_1d(N_OP_iplusn, n); \
}
#undef GREATERP
#define GREATERP { \
fast_op_greaterp(POP_TOS_1); \
nextop1; \
greaterp_err: \
asm("greaterp_err: popl %ecx"); \
N_OP_POPPED_CALL_2(N_OP_greaterp, GET_POPPED); \
}
#undef IGREATERP
#define IGREATERP { \
fast_op_igreaterp(POP_TOS_1); \
nextop1; \
igreaterp_err: \
asm("igreaterp_err: popl %ecx"); \
N_OP_POPPED_CALL_2(N_OP_igreaterp, GET_POPPED); \
}
#undef LRSH8
#define LRSH8 { \
fast_op_lrsh8(); \
nextop1; \
lrsh8_err: \
asm("lrsh8_err: "); \
N_OP_CALL_1(N_OP_lrsh8); \
}
#undef LRSH1
#define LRSH1 { \
fast_op_lrsh1(); \
nextop1; \
lrsh1_err: \
asm("lrsh1_err: "); \
N_OP_CALL_1(N_OP_lrsh1); \
}
#undef LLSH8
#define LLSH8 { \
fast_op_llsh8(); \
nextop1; \
llsh8_err: \
asm("llsh8_err: "); \
N_OP_CALL_1(N_OP_llsh8); \
}
#undef LLSH1
#define LLSH1 { \
fast_op_llsh1(); \
nextop1; \
llsh1_err: \
asm("llsh1_err: "); \
N_OP_CALL_1(N_OP_llsh1); \
}
#undef LOGOR
#define LOGOR { \
fast_op_logor(POP_TOS_1); \
nextop1; \
logor_err: \
asm("logor_err: popl %ecx"); \
asm("rorl $15,%ebx"); \
N_OP_POPPED_CALL_2(N_OP_logor, GET_POPPED); \
}
#undef LOGAND
#define LOGAND { \
fast_op_logand(POP_TOS_1); \
nextop1; \
logand_err: \
asm("logand_err: popl %ecx"); \
asm("rorl $15,%ebx"); \
N_OP_POPPED_CALL_2(N_OP_logand, GET_POPPED); \
}
#undef LOGXOR
#define LOGXOR { \
fast_op_logxor(POP_TOS_1); \
nextop1; \
logxor_err: \
asm("logxor_err: popl %ecx"); \
asm("rorl $15,%ebx"); \
N_OP_POPPED_CALL_2(N_OP_logxor, GET_POPPED); \
}
#undef N_OP_ADDBASE
#define N_OP_ADDBASE { \
fast_op_addbase(POP_TOS_1); \
nextop1; \
addbase_err: \
asm("addbase_err: popl %ecx"); \
asm("addw $7,%bx"); \
asm("rorl $15,%ebx"); \
N_OP_POPPED_CALL_2(N_OP_addbase, GET_POPPED); \
}
#undef N_OP_LOLOC
#define N_OP_LOLOC { fast_op_loloc(); nextop1; }
#undef N_OP_HILOC
#define N_OP_HILOC { fast_op_hiloc(); nextop1; }
#undef N_OP_VAG2
#define N_OP_VAG2 \
{ \
asm(" subl $4,%esi"); \
asm(" movl (%esi),%eax"); \
asm(" roll $16,%ebx"); \
asm(" movw %ax,%bx"); \
asm(" rorl $16,%ebx"); \
nextop1; }

View File

@@ -614,8 +614,6 @@ typedef struct
/* */ /* */
/************************************************************************/ /************************************************************************/
#ifndef I386
/* Get DTD pointer(68k) from typenum */ /* Get DTD pointer(68k) from typenum */
#ifdef BIGVM #ifdef BIGVM
#define GetDTD(typnum) (DTDspace + ((typnum)<<4)+((typnum)<<1)) #define GetDTD(typnum) (DTDspace + ((typnum)<<4)+((typnum)<<1))
@@ -626,20 +624,6 @@ typedef struct
/* Get all type entry */ /* Get all type entry */
#define GetTypeEntry(address) ( GETWORD(MDStypetbl+((address)>>9)) ) #define GetTypeEntry(address) ( GETWORD(MDStypetbl+((address)>>9)) )
#else
/* Because the 386i's code generator does better with them */
/* in this order (does an add, rather than mov-add) */
/* JDS 22-mar-90 */
/* Get DTD pointer(68k) from typenum */
#define GetDTD(typnum) (((typnum)<<4) + DTDspace)
/* Get all type entry */
#define GetTypeEntry(address) ( GETWORD(((address)>>9) + MDStypetbl) )
#endif /* I386 */
/* the type number is in the low 11 bits */ /* the type number is in the low 11 bits */
#define GetTypeNumber(address) (GetTypeEntry(address) & 0x7ff) #define GetTypeNumber(address) (GetTypeEntry(address) & 0x7ff)

View File

@@ -1268,19 +1268,6 @@ LispPTR bltchar(LispPTR *args)
DestPixRect->pr_width = destbpl = abs(pbt->pbtdestbpl); DestPixRect->pr_width = destbpl = abs(pbt->pbtdestbpl);
SrcePixRect->pr_height = DestPixRect->pr_height = pbt->pbtheight; SrcePixRect->pr_height = DestPixRect->pr_height = pbt->pbtheight;
#ifdef I386
/* Need to take care of byte order, because display bank */
/* on the 386 is NOT bit reversed.... */
if (IN_DISPLAY_BANK(pbt->pbtsourcehi))
mpr_d(SrcePixRect)->md_flags |= MP_I386;
else
mpr_d(SrcePixRect)->md_flags &= (~MP_I386);
if (IN_DISPLAY_BANK(pbt->pbtdesthi))
mpr_d(DestPixRect)->md_flags |= MP_I386;
else
mpr_d(DestPixRect)->md_flags &= (~MP_I386);
#endif /* I386 */
mpr_mdlinebytes(DestPixRect) = (destbpl + 7) >> 3; mpr_mdlinebytes(DestPixRect) = (destbpl + 7) >> 3;
mpr_mdlinebytes(SrcePixRect) = (srcebpl + 7) >> 3; mpr_mdlinebytes(SrcePixRect) = (srcebpl + 7) >> 3;
@@ -2096,19 +2083,6 @@ void tedit_bltchar(LispPTR *args)
DestPixRect->pr_width = destbpl = abs(pbt->pbtdestbpl); DestPixRect->pr_width = destbpl = abs(pbt->pbtdestbpl);
SrcePixRect->pr_height = DestPixRect->pr_height = pbt->pbtheight; SrcePixRect->pr_height = DestPixRect->pr_height = pbt->pbtheight;
#ifdef I386
/* Need to take care of byte order, because display bank */
/* on the 386 is NOT bit reversed.... */
if (IN_DISPLAY_BANK(pbt->pbtsourcehi))
mpr_d(SrcePixRect)->md_flags |= MP_I386;
else
mpr_d(SrcePixRect)->md_flags &= (~MP_I386);
if (IN_DISPLAY_BANK(pbt->pbtdesthi))
mpr_d(DestPixRect)->md_flags |= MP_I386;
else
mpr_d(DestPixRect)->md_flags &= (~MP_I386);
#endif /* I386 */
mpr_mdlinebytes(DestPixRect) = (destbpl + 7) >> 3; mpr_mdlinebytes(DestPixRect) = (destbpl + 7) >> 3;
mpr_mdlinebytes(SrcePixRect) = (srcebpl + 7) >> 3; mpr_mdlinebytes(SrcePixRect) = (srcebpl + 7) >> 3;
} }

View File

@@ -334,18 +334,10 @@ N_OP_stkscan
******************************************************************************/ ******************************************************************************/
LispPTR N_OP_stkscan(LispPTR tos) { LispPTR N_OP_stkscan(LispPTR tos) {
#ifdef I386
int scratchx[3];
int *scratch = (int *)(0xFFFFFFFC & (3 + (UNSIGNED)scratchx));
*scratch = tos;
nnewframe(CURRENTFX, (DLword *)scratch, POINTERMASK & *scratch);
return (swapx(*scratch));
#else
int scratch; int scratch;
scratch = tos; scratch = tos;
nnewframe(CURRENTFX, (DLword *)&scratch, POINTERMASK & scratch); nnewframe(CURRENTFX, (DLword *)&scratch, POINTERMASK & scratch);
return (swapx(scratch)); return (swapx(scratch));
#endif /* I386 */
} }
/************************************************** /**************************************************

View File

@@ -479,10 +479,6 @@ void init_display2(DLword *display_addr, int display_max)
else else
ColorDisplayPixrect = pr_open("/dev/fb"); ColorDisplayPixrect = pr_open("/dev/fb");
DisplayRegionPixrect = mem_point(displaywidth, displayheight, 1, display_addr); DisplayRegionPixrect = mem_point(displaywidth, displayheight, 1, display_addr);
#ifdef I386
((struct mpr_data *)DisplayRegionPixrect->pr_data)->md_flags |= MP_I386;
((struct mpr_data *)ColorDisplayPixrect->pr_data)->md_flags |= MP_I386;
#endif
#ifdef DEBUG #ifdef DEBUG
pr_getcolormap(ColorDisplayPixrect, 0, 2, oldred, oldgreen, oldblue); pr_getcolormap(ColorDisplayPixrect, 0, 2, oldred, oldgreen, oldblue);
@@ -604,16 +600,6 @@ void display_before_exit() {
#endif /* DOS */ #endif /* DOS */
} }
#ifdef DISPLAYBUFFER
#ifdef I386
#define EVENADDR(ptr) (0xFFFFFFFE & (int)ptr)
#else
#define EVENADDR(ptr) (ptr)
#endif
#endif /* DISPLAYBUFFER */
#if defined(DISPLAYBUFFER) || defined(DOS) #if defined(DISPLAYBUFFER) || defined(DOS)
/************************************************************************/ /************************************************************************/
/* */ /* */
@@ -647,16 +633,8 @@ in_display_segment(baseaddr)
void flush_display_buffer() { void flush_display_buffer() {
#ifdef SUNDISPLAY #ifdef SUNDISPLAY
#ifdef DISPLAYBUFFER #ifdef DISPLAYBUFFER
#ifdef I386
bit_reverse_region(DisplayRegion68k, displaywidth, displayheight, DLWORD_PERLINE);
#endif
pr_rop(ColorDisplayPixrect, 0, 0, displaywidth, displayheight, COPY_PIXRECT_TO_COLOR, pr_rop(ColorDisplayPixrect, 0, 0, displaywidth, displayheight, COPY_PIXRECT_TO_COLOR,
DisplayRegionPixrect, 0, 0); DisplayRegionPixrect, 0, 0);
#ifdef I386
bit_reverse_region(DisplayRegion68k, displaywidth, displayheight, DLWORD_PERLINE);
#endif
#endif /* DISPLAYBUFFER */ #endif /* DISPLAYBUFFER */
#endif /* SUNDISPLAY */ #endif /* SUNDISPLAY */
@@ -737,18 +715,6 @@ void byte_swapped_displayregion(int x, int y, int w, int h)
/************************************************************************/ /************************************************************************/
void flush_display_lineregion(UNSIGNED x, DLword *ybase, UNSIGNED w, UNSIGNED h) void flush_display_lineregion(UNSIGNED x, DLword *ybase, UNSIGNED w, UNSIGNED h)
#ifdef I386
{ /*flush_display_buffer(); */
int y;
y = ((DLword *)ybase - DisplayRegion68k) / DLWORD_PERLINE;
bit_reverse_region(ybase, displaywidth, h, DLWORD_PERLINE);
pr_rop(ColorDisplayPixrect, x, y, displaywidth, h, COPY_PIXRECT_TO_COLOR, DisplayRegionPixrect, x,
y);
bit_reverse_region(ybase, displaywidth, h, DLWORD_PERLINE);
}
#else
{ {
int y; int y;
y = ((DLword *)ybase - DisplayRegion68k) / DLWORD_PERLINE; y = ((DLword *)ybase - DisplayRegion68k) / DLWORD_PERLINE;
@@ -766,7 +732,6 @@ void flush_display_lineregion(UNSIGNED x, DLword *ybase, UNSIGNED w, UNSIGNED h)
TPRINT(("Exit flush_display_lineregion\n")); TPRINT(("Exit flush_display_lineregion\n"));
#endif /* DOS */ #endif /* DOS */
} }
#endif /* I386 */
/************************************************************************/ /************************************************************************/
/* */ /* */
@@ -786,18 +751,14 @@ void flush_display_lineregion(UNSIGNED x, DLword *ybase, UNSIGNED w, UNSIGNED h)
#define BITSPERWORD 16 #define BITSPERWORD 16
void flush_display_ptrregion(DLword *ybase, UNSIGNED bitoffset, UNSIGNED w, UNSIGNED h) void flush_display_ptrregion(DLword *ybase, UNSIGNED bitoffset, UNSIGNED w, UNSIGNED h)
#ifdef I386
{ flush_display_buffer(); }
#else
{ {
int y, x, baseoffset; int y, x, baseoffset;
baseoffset = (((DLword *)ybase) - DisplayRegion68k); baseoffset = (((DLword *)ybase) - DisplayRegion68k);
y = baseoffset / DLWORD_PERLINE; y = baseoffset / DLWORD_PERLINE;
x = bitoffset + (BITSPERWORD * (baseoffset - (DLWORD_PERLINE * y))); x = bitoffset + (BITSPERWORD * (baseoffset - (DLWORD_PERLINE * y)));
#endif /* I386 */
#if (defined(SUNDISPLAY) && defined(DISPLAYBUFFER)) #if (defined(SUNDISPLAY) && defined(DISPLAYBUFFER))
pr_rop(ColorDisplayPixrect, x, y, w, h, COPY_PIXRECT_TO_COLOR, DisplayRegionPixrect, x, y); pr_rop(ColorDisplayPixrect, x, y, w, h, COPY_PIXRECT_TO_COLOR, DisplayRegionPixrect, x, y);
#elif (defined(XWINDOW) || defined(DOS)) #elif (defined(XWINDOW) || defined(DOS))
TPRINT(("Enter flush_display_ptrregion\n x=%d, y=%d, w=%d, h=%d\n", x, y, w, h)); TPRINT(("Enter flush_display_ptrregion\n x=%d, y=%d, w=%d, h=%d\n", x, y, w, h));
(currentdsp->bitblt_to_screen)(currentdsp, DisplayRegion68k, x, y, w, h); (currentdsp->bitblt_to_screen)(currentdsp, DisplayRegion68k, x, y, w, h);

View File

@@ -530,26 +530,10 @@ int main(int argc, char *argv[])
JDS -- 1/18/90 also BITBLTSUB does it now. */ JDS -- 1/18/90 also BITBLTSUB does it now. */
} }
#ifdef I386 #ifdef DOS
/* 80387 initialization */
asm(".data");
asm(".align 4");
asm("__FP_trunc:");
asm(" .globl __FP_trunc");
asm(".byte 0x3f");
asm(".byte 0x0c");
asm("__FP_round:");
asm(" .globl __FP_round");
asm(".byte 0x3f");
asm(".byte 0x00");
asm(".text");
asm("fldcw __FP_round");
#elif DOS
_setrealmode(0x3f); /* Don't interrupt on FP overflows */ _setrealmode(0x3f); /* Don't interrupt on FP overflows */
_getrealerror(); _getrealerror();
#endif /* I386 */
#ifdef DOS
tzset(); tzset();
#endif #endif

View File

@@ -202,8 +202,6 @@ LispPTR unix_getparm(LispPTR *args) {
if (strcmp(envname, "MACH") == 0) { if (strcmp(envname, "MACH") == 0) {
#if defined(sparc) #if defined(sparc)
envvalue = "sparc"; envvalue = "sparc";
#elif defined(I386)
envvalue = "i386";
#elif defined(DOS) #elif defined(DOS)
envvalue = "386"; envvalue = "386";
#elif defined(MAIKO_OS_MACOS) #elif defined(MAIKO_OS_MACOS)
@@ -215,8 +213,6 @@ LispPTR unix_getparm(LispPTR *args) {
} else if (strcmp(envname, "ARCH") == 0) { } else if (strcmp(envname, "ARCH") == 0) {
#if defined(sparc) #if defined(sparc)
envvalue = "sun4"; envvalue = "sun4";
#elif defined(I386)
envvalue = "sun386";
#elif defined(DOS) #elif defined(DOS)
envvalue = "dos"; envvalue = "dos";
#elif defined(MAIKO_OS_MACOS) #elif defined(MAIKO_OS_MACOS)

View File

@@ -131,10 +131,6 @@ register LispPTR tscache asm("bx");
#include "inlnSPARC.h" #include "inlnSPARC.h"
#endif /* SPARCDISP */ #endif /* SPARCDISP */
#ifdef I386
#include "inln386i.h"
#endif
#include "fast_dsp.h" #include "fast_dsp.h"
/* trick now is that pccache points one ahead... */ /* trick now is that pccache points one ahead... */
@@ -1059,27 +1055,6 @@ nextopcode:
case377: case377:
CLARITHEQUAL; CLARITHEQUAL;
#ifdef I386
/* to defeat the damn optimizer, make it look like */
/* we might branch to the error labels. */
case 0400: goto plus_err;
case 0401: goto iplus_err;
case 0402: goto iplusn_err;
case 0403: goto idiff_err;
case 0404: goto diff_err;
case 0405: goto idiffn_err;
case 0406: goto greaterp_err;
case 0411: goto igreaterp_err;
case 0407: goto llsh8_err;
case 0410: goto lrsh1_err;
case 0414: goto lrsh8_err;
case 0417: goto llsh1_err;
case 0413: goto logor_err;
case 0412: goto logand_err;
case 0416: goto logxor_err;
case 0415: goto addbase_err;
#endif
default: error("should not default"); default: error("should not default");
} /* switch */ } /* switch */