1
0
mirror of https://github.com/Interlisp/maiko.git synced 2026-01-20 01:35:05 +00:00
Bruce Mitchener 9e9f8c4475
Remove profile.h (#272)
This no longer had anything to do with profiling and was
only doing some defines for the switch case block addresses,
which we no longer need since there's no longer optional
asm generated for them.
2021-01-23 18:39:55 +00:00

191 lines
4.9 KiB
C

/* $Id: miscn.c,v 1.3 1999/05/31 23:35:39 sybalsky Exp $ (C) Copyright Venue, All Rights Reserved */
/************************************************************************/
/* */
/* (C) Copyright 1989-95 Venue. All Rights Reserved. */
/* Manufactured in the United States of America. */
/* */
/************************************************************************/
#include "version.h"
/***********************************************************/
/*
File Name: miscn.c
Including: OP_miscn
*/
/***********************************************************/
#include "lispemul.h"
#include "address.h"
#include "adr68k.h"
#include "lsptypes.h"
#include "lispmap.h"
#include "emlglob.h"
#include "lspglob.h"
#include "arith.h"
#include "subrs.h"
#include "miscndefs.h"
#include "commondefs.h"
#include "loopsopsdefs.h"
#include "mvsdefs.h"
#include "sxhashdefs.h"
#include "usrsubrdefs.h"
/***********************************************************/
/*
Func Name : OP_miscn
Interface: Global Machine State
Returns: (must UFN)
0 = continue, C code succeeded.
1 = must UFN, C code failed.
*/
/***********************************************************/
int OP_miscn(int misc_index, int arg_count) {
register LispPTR *stk;
register int result;
static LispPTR args[255];
/* Put the Args into a Vector */
args[0] = NIL_PTR;
stk = ((LispPTR *)CurrentStackPTR) + 1;
{
register int arg_num = arg_count;
if (arg_num > 0) {
*stk++ = (LispPTR)TopOfStack;
while (arg_num > 0) args[--arg_num] = *--stk;
}
}
/* Select the Misc Number */
switch (misc_index) {
case miscn_USER_SUBR: {
register LispPTR user_subr;
N_GETNUMBER(args[0], user_subr, do_ufn);
if ((result = UserSubr(user_subr, arg_count - 1, &args[1])) < 0) goto do_ufn;
} break;
case miscn_SXHASH: result = SX_hash(args[0]); break;
case miscn_STRING_EQUAL_HASHBITS: result = STRING_EQUAL_HASHBITS(args[0]); break;
case miscn_STRINGHASHBITS: result = STRING_HASHBITS(args[0]); break;
case miscn_VALUES:
if (arg_count > 255) {
error("miscn: arg_count too big! continue punts");
goto do_ufn;
break;
}
result = values(arg_count, args);
break;
case miscn_VALUES_LIST:
/*** debugging: should be impossible, but ADB found this once -FS *****/
if (arg_count > 255) {
error("miscn: arg_count too big! continue punts");
goto do_ufn;
break;
}
result = values_list(arg_count, args);
break;
case miscn_LCFetchMethod:
result = LCFetchMethod(args[0], args[1]);
if (result < 0) goto lc_ufn;
break;
case miscn_LCFetchMethodOrHelp:
result = LCFetchMethodOrHelp(args[0], args[1]);
if (result < 0) goto lc_ufn;
break;
case miscn_LCFindVarIndex:
result = LCFindVarIndex(args[0], args[1]);
if (result < 0) goto lc_ufn;
break;
case miscn_LCGetIVValue:
result = LCGetIVValue(args[0], args[1]);
if (result < 0) goto lc_ufn;
break;
case miscn_LCPutIVValue:
result = LCPutIVValue(args[0], args[1], args[2]);
if (result < 0) goto lc_ufn;
break;
#ifdef RS232
case miscn_RAW_RS232C_OPEN:
if ((result = raw_rs232c_open(args[0])) == NIL) goto do_ufn;
break;
case miscn_RAW_RS232C_CLOSE:
if ((result = raw_rs232c_close(args[0])) == NIL) goto do_ufn;
break;
case miscn_RAW_RS232C_SETPARAM:
if ((result = raw_rs232c_setparams(args[0], args[1])) == NIL) goto do_ufn;
break;
case miscn_RAW_RS232C_GETPARAM:
/******/ break;
case miscn_RAW_RS232C_READ:
if ((result = raw_rs232c_read(args[0], args[1], args[2])) == NIL) goto do_ufn;
break;
case miscn_RAW_RS232C_WRITE:
if ((result = raw_rs232c_write(args[0], args[1], args[2])) == NIL) goto do_ufn;
break;
case miscn_RAW_RS232C_SETINT:
if ((result = raw_rs232c_setint(args[0], args[1])) == NIL) goto do_ufn;
break;
case miscn_CHATTER: result = chatter(args); break;
#endif /* RS232 */
#ifdef JLISP
case miscn_EJLISP:
#ifndef NOWNN
result = ejlisp(args);
#endif
break;
#endif /* JLISP */
#ifdef CDROM
case miscn_CDAUDIO: result = cdaudio(args); break;
case miscn_CDROM: result = cdrom(args); break;
#endif /* CDROM */
case /* miscn_CALL_C*/ 014:
/* result = call_c_fn(args); */
result = 0;
break;
default: goto do_ufn; break;
} /* switch end */
/* Setup Global Machine State for a Normal Return */
PC += 3;
CurrentStackPTR = (DLword *)(stk - 1);
TopOfStack = (LispPTR)result;
return (0);
/* A UFN request, so return 1 & don't change the Machine State */
do_ufn:
return (1);
lc_ufn:
if (result == -2) {
return (0); /* have built new stack frame */
} else {
goto do_ufn;
}
} /* OP_miscn */