/* InstallationSupportExtras.c */
/* Copyright (C) 1991 by Xerox Corporation.  All rights reserved. */
/* Russ Atkinson, March 20, 1991 1:12:52 am PST */

typedef unsigned word;
typedef struct {word x,y;} pair;
typedef struct {word x,y,z;} triple;
typedef word (*procDesc)();

extern void XR←ImportProc();
extern void XR←ExportProc();
extern word XR←GetTypeIndex();
extern void XR←RaiseSignal();
extern void XR←RaiseError();
extern void XR←TypeIndex();

extern void XR←ImportInterfaceX (formal, actual, type, slots)
	word formal, actual, type, slots;
	{
	/* DUMMY for now until we can use actual */
	XR←ImportInterface(formal, type, slots);
	};

extern void XR←ImportProgramX (formal, actual, type, link)
	word formal, actual, type, link;
	{
	/* DUMMY for now until we can use actual */
	XR←ImportInterface(formal, type, link);
	};
	
extern void XR←ExportInterfaceX (formal, actual, type, slots)
	word formal, actual, type, slots;
	{
	/* DUMMY for now until we can use actual */
	XR←ExportInterface(formal, type, slots);
	};

extern void XR←ImportProcS (irLocal, encoded)
	word irLocal, encoded;
	{
	word unitsOut = encoded / (256*256*256);
	word unitsIn = (encoded / (256*256)) % 256;
	word index = (encoded / (256)) % 256;
	word nargs = encoded % 256;
	XR←ImportProc(irLocal, index, unitsOut, unitsIn, nargs);
	};
	
extern void XR←ExportProcS (irLocal, expr, encoded)
	word irLocal, expr, encoded;
	{
	word unitsOut = encoded / (256*256*256);
	word unitsIn = (encoded / (256*256)) % 256;
	word index = (encoded / (256)) % 256;
	word nargs = encoded % 256;
	XR←ExportProc(irLocal, index, expr, unitsOut, unitsIn, nargs);
	};
	
extern void XR←RaiseSignal0 (sig)
	word sig;
	{
	XR←RaiseSignal(sig, 0, 0);
	};

extern void XR←RaiseSignal1 (sig, arg1)
	word sig, arg1;
	{
	word v = arg1;
	XR←RaiseSignal(sig, 0, &v);
	};

extern void XR←RaiseSignal2 (sig, arg1, arg2)
	word sig, arg1, arg2;
	{
	pair v;
	v.x = arg1;
	v.y = arg2;
	XR←RaiseSignal(sig, 0, &v);
	};

extern void XR←RaiseSignal3 (sig, arg1, arg2, arg3)
	word sig, arg1, arg2;
	{
	triple v;
	v.x = arg1;
	v.y = arg2;
	v.z = arg3;
	XR←RaiseSignal(sig, 0, &v);
	};

extern void XR←RaiseError0 (err)
	word err;
	{
	XR←RaiseError(err, 0);
	};

extern void XR←RaiseError1 (err, arg1)
	word err, arg1;
	{
	word v = arg1;
	XR←RaiseError(err, &v);
	};

extern void XR←RaiseError2 (err, arg1, arg2)
	word err, arg1, arg2;
	{
	pair v;
	v.x = arg1;
	v.y = arg2;
	XR←RaiseError(err, &v);
	};

extern void XR←RaiseError3 (err, arg1, arg2, arg3)
	word err, arg1, arg2, arg3;
	{
	triple v;
	v.x = arg1;
	v.y = arg2;
	v.z = arg3;
	XR←RaiseError(err, &v);
	};

extern word XR←CallProc0 (pd)
	procDesc pd;
	{
	return ((*pd)(pd));
	};

extern word XR←CallProc1 (arg1, pd)
	procDesc pd; word arg1;
	{
	return ((*pd)(arg1, pd));
	};

extern word XR←CallProc2 (arg1, arg2, pd)
	procDesc pd; word arg1, arg2;
	{
	return ((*pd)(arg1, arg2, pd));
	};

extern word XR←CallProc3 (arg1, arg2, arg3, pd)
	procDesc pd; word arg1, arg2, arg3;
	{
	return ((*pd)(arg1, arg2, arg3, pd));
	};

extern word XR←CallProc4 (arg1, arg2, arg3, arg4, pd)
	procDesc pd; word arg1, arg2, arg3, arg4;
	{
	return ((*pd)(arg1, arg2, arg3, arg4, pd));
	};

extern word XR←CallProc5 (arg1, arg2, arg3, arg4, arg5, pd)
	procDesc pd; word arg1, arg2, arg3, arg4, arg5;
	{
	return ((*pd)(arg1, arg2, arg3, arg4, arg5, pd));
	};

extern word XR←GetTypeIndexS (ts) word ts; {
	return (XR←GetTypeIndex(ts, 0, 0));
	};