From f59262745e5ffaef198e6e7322af2b4eda8295ad Mon Sep 17 00:00:00 2001 From: keie Date: Tue, 12 Feb 1985 12:54:44 +0000 Subject: [PATCH] Initial revision --- mach/mantra/int/em.c | 130 +++++++++++++++++++++++++++++++++++++++++++ mach/pdp/int/em.c | 130 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 260 insertions(+) create mode 100644 mach/mantra/int/em.c create mode 100644 mach/pdp/int/em.c diff --git a/mach/mantra/int/em.c b/mach/mantra/int/em.c new file mode 100644 index 000000000..b37129774 --- /dev/null +++ b/mach/mantra/int/em.c @@ -0,0 +1,130 @@ +/* + * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. + * + * This product is part of the Amsterdam Compiler Kit. + * + * Permission to use, sell, duplicate or disclose this software must be + * obtained in writing. Requests for such permissions may be sent to + * + * Dr. Andrew S. Tanenbaum + * Wiskundig Seminarium + * Vrije Universiteit + * Postbox 7161 + * 1007 MC Amsterdam + * The Netherlands + * + */ + +#include +#include +#include + +#define MAGIC 07255 + +struct header { + short h_magic; /* Magic number */ + short h_flags; /* See below for defines */ + short h_unresolved; /* Cannot run if nonzero */ + short h_version; /* Check for VERSION */ + short h_wsize; + short h_psize; + short h_unused[2]; /* left over */ +} header; + +#define TEST 001 +#define PROFILE 002 +#define FLOW 004 +#define COUNT 010 + +char *defargv[] = { + "em", + "e.out", + 0 +}; + +char interpret[BUFSIZ]; +char flags[5]; +char tflg,fflg,cflg,pflg; + +main(argc,argv) char **argv; { + char *file; + int fildes; + + while (argc>1 && (argv[1][0]=='-' || argv[1][0]=='+')) { + switch(argv[1][1]) { + case 't': tflg=argv[1][0]; break; + case 'c': cflg=argv[1][0]; break; + case 'f': fflg=argv[1][0]; break; + case 'p': pflg=argv[1][0]; break; + default: + fprintf(stderr,"Bad flag %c\n",argv[1][1]); + exit(-1); + } + argv[1] = argv[0]; + argc--;argv++; + } + if (argc==1) + argv= defargv; + file=argv[1]; + if ((fildes=open(file,0))<0) { + perror(file); + exit(8) ; + } + header.h_magic= r2b(fildes,file) ; + header.h_flags= r2b(fildes,file) ; + header.h_unresolved= r2b(fildes,file) ; + header.h_version= r2b(fildes,file) ; + header.h_wsize= r2b(fildes,file) ; + header.h_psize= r2b(fildes,file) ; + header.h_unused[0]= r2b(fildes,file) ; + header.h_unused[1]= r2b(fildes,file) ; + if (header.h_magic != MAGIC) { + fprintf(stderr,"%s not in correct format\n",file); + exit(-1); + } + if (header.h_version != VERSION) { + fprintf(stderr,"%s obsolete, recompile\n",file); + exit(-1); + } + if (header.h_unresolved != 0) { + fprintf(stderr, + "%s has unresolved references, cannot run it\n",file); + exit(-1); + } + /* + if ( header.h_psize!=EM_PSIZE) { + fprintf(stderr, + "%s cannot be interpreted on this machine\n",file); + exit(-1); + } + */ + if (tflg) + flags[0] = tflg=='+' ? 't' : '-'; + else + flags[0]= header.h_flags&TEST ? 't' : '-'; + if (fflg) + flags[1] = fflg=='+' ? 'f' : '-'; + else + flags[1]= header.h_flags&FLOW ? 'f' : '-'; + if (cflg) + flags[2] = cflg=='+' ? 'c' : '-'; + else + flags[2]= header.h_flags&COUNT ? 'c' : '-'; + if (pflg) + flags[3] = pflg=='+' ? 'p' : '-'; + else + flags[3]= header.h_flags&PROFILE ? 'p' : '-'; + sprintf(interpret,"%s/lib/int%d%d/em_%s", + EM_DIR,header.h_wsize,header.h_psize,flags); + execv(interpret,argv); + fprintf(stderr,"Interpreter %s not available\n",interpret); +} + +r2b(fildes,file) char *file ; { + char rd2[2] ; + if ( read(fildes,rd2,sizeof rd2)!=sizeof rd2) { + fprintf(stderr,"%s too short\n",file); + exit(-1); + } + return (rd2[0]&0xFF) | ( (rd2[1]&0xFF)<<8 ) ; +} diff --git a/mach/pdp/int/em.c b/mach/pdp/int/em.c new file mode 100644 index 000000000..b37129774 --- /dev/null +++ b/mach/pdp/int/em.c @@ -0,0 +1,130 @@ +/* + * (c) copyright 1983 by the Vrije Universiteit, Amsterdam, The Netherlands. + * + * This product is part of the Amsterdam Compiler Kit. + * + * Permission to use, sell, duplicate or disclose this software must be + * obtained in writing. Requests for such permissions may be sent to + * + * Dr. Andrew S. Tanenbaum + * Wiskundig Seminarium + * Vrije Universiteit + * Postbox 7161 + * 1007 MC Amsterdam + * The Netherlands + * + */ + +#include +#include +#include + +#define MAGIC 07255 + +struct header { + short h_magic; /* Magic number */ + short h_flags; /* See below for defines */ + short h_unresolved; /* Cannot run if nonzero */ + short h_version; /* Check for VERSION */ + short h_wsize; + short h_psize; + short h_unused[2]; /* left over */ +} header; + +#define TEST 001 +#define PROFILE 002 +#define FLOW 004 +#define COUNT 010 + +char *defargv[] = { + "em", + "e.out", + 0 +}; + +char interpret[BUFSIZ]; +char flags[5]; +char tflg,fflg,cflg,pflg; + +main(argc,argv) char **argv; { + char *file; + int fildes; + + while (argc>1 && (argv[1][0]=='-' || argv[1][0]=='+')) { + switch(argv[1][1]) { + case 't': tflg=argv[1][0]; break; + case 'c': cflg=argv[1][0]; break; + case 'f': fflg=argv[1][0]; break; + case 'p': pflg=argv[1][0]; break; + default: + fprintf(stderr,"Bad flag %c\n",argv[1][1]); + exit(-1); + } + argv[1] = argv[0]; + argc--;argv++; + } + if (argc==1) + argv= defargv; + file=argv[1]; + if ((fildes=open(file,0))<0) { + perror(file); + exit(8) ; + } + header.h_magic= r2b(fildes,file) ; + header.h_flags= r2b(fildes,file) ; + header.h_unresolved= r2b(fildes,file) ; + header.h_version= r2b(fildes,file) ; + header.h_wsize= r2b(fildes,file) ; + header.h_psize= r2b(fildes,file) ; + header.h_unused[0]= r2b(fildes,file) ; + header.h_unused[1]= r2b(fildes,file) ; + if (header.h_magic != MAGIC) { + fprintf(stderr,"%s not in correct format\n",file); + exit(-1); + } + if (header.h_version != VERSION) { + fprintf(stderr,"%s obsolete, recompile\n",file); + exit(-1); + } + if (header.h_unresolved != 0) { + fprintf(stderr, + "%s has unresolved references, cannot run it\n",file); + exit(-1); + } + /* + if ( header.h_psize!=EM_PSIZE) { + fprintf(stderr, + "%s cannot be interpreted on this machine\n",file); + exit(-1); + } + */ + if (tflg) + flags[0] = tflg=='+' ? 't' : '-'; + else + flags[0]= header.h_flags&TEST ? 't' : '-'; + if (fflg) + flags[1] = fflg=='+' ? 'f' : '-'; + else + flags[1]= header.h_flags&FLOW ? 'f' : '-'; + if (cflg) + flags[2] = cflg=='+' ? 'c' : '-'; + else + flags[2]= header.h_flags&COUNT ? 'c' : '-'; + if (pflg) + flags[3] = pflg=='+' ? 'p' : '-'; + else + flags[3]= header.h_flags&PROFILE ? 'p' : '-'; + sprintf(interpret,"%s/lib/int%d%d/em_%s", + EM_DIR,header.h_wsize,header.h_psize,flags); + execv(interpret,argv); + fprintf(stderr,"Interpreter %s not available\n",interpret); +} + +r2b(fildes,file) char *file ; { + char rd2[2] ; + if ( read(fildes,rd2,sizeof rd2)!=sizeof rd2) { + fprintf(stderr,"%s too short\n",file); + exit(-1); + } + return (rd2[0]&0xFF) | ( (rd2[1]&0xFF)<<8 ) ; +} -- 2.34.1