File: att.h

package info (click to toggle)
gcl 2.6.14-21
  • links: PTS
  • area: main
  • in suites: forky, sid
  • size: 60,864 kB
  • sloc: ansic: 177,407; lisp: 151,509; asm: 128,169; sh: 22,510; cpp: 11,923; tcl: 3,181; perl: 2,930; makefile: 2,360; sed: 334; yacc: 226; lex: 95; awk: 30; fortran: 24; csh: 23
file content (95 lines) | stat: -rwxr-xr-x 2,630 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#define ATT
#define AV
#define UNIX
#define SFASL  


#define 	MEM_SAVE_LOCALS \
  struct filehdr fileheader;\
  struct exec header;\
  struct scnhdr sectionheader;\
  int diff


#define COPY_TO_SAVE \
 do{for (;;) { \
		n = getc(original); \
		if (feof(original)) \
			break; \
		putc(n, save); \
	}}while (0)

#define READ_HEADER \
 do{	fread(&fileheader, sizeof(fileheader), 1, original); \
	fread(&header, sizeof(header), 1, original); \
	data_begin = (char *)header.data_start; \
	data_end = core_end; \
	original_data = header.a_data; \
	header.a_data = data_end - data_begin; \
	diff = header.a_data - original_data; \
	header.a_bss = sbrk(0) - core_end; \
	fileheader.f_symptr += diff; \
	fwrite(&fileheader, sizeof(fileheader), 1, save);\
	fwrite(&header, sizeof(header), 1, save); \
	fread(&sectionheader, sizeof(sectionheader), 1, original); \
	if (sectionheader.s_lnnoptr) \
		sectionheader.s_lnnoptr += diff; \
	fwrite(&sectionheader, sizeof(sectionheader), 1, save); \
	fread(&sectionheader, sizeof(sectionheader), 1, original); \
	sectionheader.s_size += diff; \
	if (sectionheader.s_lnnoptr) \
		sectionheader.s_lnnoptr += diff; \
	fwrite(&sectionheader, sizeof(sectionheader), 1, save); \
	fread(&sectionheader, sizeof(sectionheader), 1, original); \
	sectionheader.s_paddr += diff; \
	sectionheader.s_vaddr += diff; \
	sectionheader.s_size = header.a_bss; \
	if (sectionheader.s_lnnoptr) \
		sectionheader.s_lnnoptr += diff; \
	fwrite(&sectionheader, sizeof(sectionheader), 1, save); \
	for (n = 4;  n <= fileheader.f_nscns;  n++) { \
		fread(&sectionheader, sizeof(sectionheader), 1, original); \
		if (sectionheader.s_scnptr) \
			sectionheader.s_scnptr += diff; \
		if (sectionheader.s_lnnoptr) \
			sectionheader.s_lnnoptr += diff; \
		fwrite(&sectionheader, sizeof(sectionheader), 1, save); \
	}}while(0)

#define FILECPY_HEADER	filecpy(save, original, header.a_text)


#define exec		aouthdr
#define a_text		tsize
#define a_data		dsize
#define a_bss		bsize

/* Include <fcntl.h> rather than <sys/file.h> */

#define HAVE_FCNTL

#define NUMBER_OPEN_FILES _NFILE 

#define INIT_ALLOC \
     	heap_end = sbrk(0); \
	({fixnum i;if ((i = ((unsigned long)heap_end & (PAGESIZE - 1))))	\
		     sbrk(PAGESIZE - i);});			\
	heap_end = core_end = sbrk(0);

	

#define cs_check(x) 

/* need to define getwd and friends in unixfsys.c
 Basically as would need to in ATT*/

#define NEED_GETWD

  /* if there is no input there return false */
#define LISTEN_FOR_INPUT(fp) \
   if(((FILE *)fp)->_cnt <=0 && (c=0,ioctl(((FILE *)fp)->_file, FIONREAD, &c),c<=0)) \
     return 0

 /* have sys/ioctl.h */
#define HAVE_IOCTL