71 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| static char rcsid[] = "$Header$";
 | |
| /*
 | |
|  * (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 <stdio.h>
 | |
| #include <a.out.h>
 | |
| 
 | |
| /*
 | |
|  * NOTE: Beware that the a.out.h file included here should be the a.out.h
 | |
|  *       file of the TARGET machine, not of the SOURCE machine.
 | |
|  */
 | |
| 
 | |
| struct bhdr s_exec;
 | |
| 
 | |
| main(argc,argv) char **argv; {
 | |
| 	unsigned short losh,hish;
 | |
| 	long addr,maxaddr;
 | |
| 	short count;
 | |
| 	
 | |
| 	maxaddr=0;
 | |
| 	if (argc != 3) {
 | |
| 		fprintf(stderr,"Usage: %s VU-a.out Bleasdale-a.out\n",argv[0]);
 | |
| 		exit(-1);
 | |
| 	}
 | |
| 	if (freopen(argv[1],"r",stdin)==NULL) {
 | |
| 		perror(argv[1]);
 | |
| 		exit(-1);
 | |
| 	}
 | |
| 	if (freopen(argv[2],"w",stdout)==NULL) {
 | |
| 		perror(argv[2]);
 | |
| 		exit(-1);
 | |
| 	}
 | |
| 	while (fread(&hish,sizeof(short),1,stdin)==1) {
 | |
| 		if (fread(&losh,sizeof(short),1,stdin)!=1)
 | |
| 			exit(fprintf(stderr,"foo\n"));
 | |
| 		addr=losh+(((long)hish)*65536L);
 | |
| 		addr -= 0x20000;  /* entry point is 0x20000 on Bleasdale */
 | |
| 		if (fread(&count,sizeof(short),1,stdin)!=1)
 | |
| 			exit(fprintf(stderr,"bar\n"));
 | |
| 		fseek(stdout,addr+sizeof(s_exec),0);
 | |
| 		while (count--) {
 | |
| 			putchar(getchar());
 | |
| 			addr++;
 | |
| 		}
 | |
| 		if (addr>maxaddr)
 | |
| 			maxaddr = addr;
 | |
| 	}
 | |
| 	s_exec.fmagic = FMAGIC;
 | |
| 	s_exec.dsize = maxaddr;
 | |
| 	s_exec.entry = 0x20000;
 | |
| 	fseek(stdout,0L,0);
 | |
| 	fwrite(&s_exec,sizeof(s_exec),1,stdout);
 | |
| 	chmod(argv[2],0755);
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| 		
 |