home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The World of Computer Software
/
World_Of_Computer_Software-02-385-Vol-1of3.iso
/
s
/
s48.zip
/
MAIN.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-06-17
|
3KB
|
129 lines
/*Copyright (c) 1992 by Richard Kelsey and Jonathan Rees. See file COPYING.*/
#include <stdio.h>
#include <sys/signal.h>
#include <string.h>
#if !defined DEFAULT_HEAP_SIZE
/* 1 megacell = 4 megabytes (2 meg per semispace) */
#define DEFAULT_HEAP_SIZE 1000000
#endif
/* DEFAULT_IMAGE_NAME should be defined using the -D switch to cc. */
#if !defined DEFAULT_IMAGE_NAME
#define DEFAULT_IMAGE_NAME "s48.image"
#endif
long I0()
{
long v_47X;
extern long scheme48_init();
v_47X = scheme48_init();
return(v_47X);
}
long I1(heap_size)
long heap_size;
{
extern long Sinitial_heap_sizeS;
Sinitial_heap_sizeS = heap_size;
return(54321);
}
long I2(image_name, argument)
char *image_name, *argument;
{
long v_58X;
/* long v_56X, v_58X, argx; */
extern long resume();
/* extern long SvalS;*/
/*
{ long len;
char *temp;
len = strlen(image_name);
temp = (char *)(calloc(len + 4, sizeof(char)));
*((long *)temp) = len;
strncpy(temp + 4, image_name, len);
v_56X = (4 + (long)temp);
}
{ char *temp;
len = strlen(argument);
temp = (char *)(calloc(len + 4, sizeof(char)));
strncpy(temp + 4, argument, len); */
/* Header tag is 2, string type is 9, extend tag is 3 */
/* *((long *)temp) = (len << 7) + (9 << 2) + 2;
argx = (3 + 4 + (long)temp);
}
*/
v_58X = resume((long)image_name, (long)argument);
exit(v_58X >> 2);
}
void when_interrupt(sig, code, scp)
int sig, code;
struct sigcontext *scp;
{
extern long Spending_interruptsS;
Spending_interruptsS |= 2;
signal(SIGINT, when_interrupt);
return;
}
main(argc, argv)
int argc; char **argv;
{
char *image_name = DEFAULT_IMAGE_NAME;
char *argument = "";
long heap_size = DEFAULT_HEAP_SIZE; /* in numbers of cells. */
int errors = 0;
char *me = *argv; /* Save program name. */
argv++; argc--; /* Skip program name. */
for (; argc > 0; argc--, argv++)
if (argv[0][0] == '-')
switch (argv[0][1]) {
case 'h':
argc--; argv++;
if (argc == 0) { errors++; break; }
heap_size = atoi(*argv) / sizeof(long);
if (heap_size <= 0) errors++;
break;
case 'i':
argc--; argv++;
if (argc == 0) { errors++; break; }
image_name = *argv;
break;
case 'a':
argc--; argv++;
if (argc == 0) { errors++; break; }
argument = *argv;
break;
default:
fprintf(stderr, "Invalid argument: %s\n", *argv);
errors++;
}
else
if (argv[0][0] != '\0')
{ fprintf(stderr, "Invalid argument: %s\n", *argv);
errors++; }
if (errors != 0) {
fprintf(stderr,
"Usage: %s [-h <heap size in bytes>] [-i <image file name>]\n",
me);
exit(1);
}
I0();
I1(heap_size);
signal(SIGINT, when_interrupt);
I2(image_name, argument);
}