1da2e3ebdSchinref	-D_def_map_ast=1
2da2e3ebdSchinhdr	float,floatingpoint,math,values
3da2e3ebdSchinsys	filio,ioctl
4da2e3ebdSchinlib	qfrexp,qldexp
5da2e3ebdSchinkey	signed
6da2e3ebdSchin
7*b30d1939SAndy Fiddamantst	- note{ number of bits in pointer }end output{
8*b30d1939SAndy Fiddaman	#include <stdio.h>
9*b30d1939SAndy Fiddaman	int
10*b30d1939SAndy Fiddaman	main()
11*b30d1939SAndy Fiddaman	{
12*b30d1939SAndy Fiddaman		printf("#define _ptr_bits	%d\n", sizeof(char*) * 8);
13*b30d1939SAndy Fiddaman		return 0;
14*b30d1939SAndy Fiddaman	}
15*b30d1939SAndy Fiddaman}end
16*b30d1939SAndy Fiddaman
17da2e3ebdSchintst	tmp_rmfail note{ open files cannot be removed }end execute{
18da2e3ebdSchin	#include <string.h>
19da2e3ebdSchin	#include <time.h>
20da2e3ebdSchin	int
21da2e3ebdSchin	main()
22da2e3ebdSchin	{
23da2e3ebdSchin	#if !_UWIN
24da2e3ebdSchin		int		n;
25da2e3ebdSchin		char*		s;
26da2e3ebdSchin		FILE*		fr;
27da2e3ebdSchin		FILE*		fw;
28da2e3ebdSchin		char		file[16];
29da2e3ebdSchin		static char	data[] = "0123456789";
30da2e3ebdSchin		s = file;
31da2e3ebdSchin		*s++ = '1';
32da2e3ebdSchin		*s++ = 'F';
33da2e3ebdSchin		*s++ = 'F';
34da2e3ebdSchin		*s++ = '3';
35da2e3ebdSchin		n = (int)time(0);
36da2e3ebdSchin		*s++ = (n & 0xF) + 'A';
37da2e3ebdSchin		*s++ = ((n >> 4) & 0xF) + 'A';
38da2e3ebdSchin		*s++ = ((n >> 8) & 0xF) + 'A';
39da2e3ebdSchin		*s++ = ((n >> 12) & 0xF) + 'A';
40da2e3ebdSchin		*s++ = '.';
41da2e3ebdSchin		*s++ = 'T';
42da2e3ebdSchin		*s++ = 'M';
43da2e3ebdSchin		*s++ = 'P';
44da2e3ebdSchin		*s = 0;
45da2e3ebdSchin		remove(file);
46da2e3ebdSchin		if (!(fw = fopen(file, "w")))
47da2e3ebdSchin			return 0;
48da2e3ebdSchin		if (!(fr = fopen(file, "r")))
49da2e3ebdSchin		{
50da2e3ebdSchin			fclose(fw);
51da2e3ebdSchin			remove(file);
52da2e3ebdSchin			return 0;
53da2e3ebdSchin		}
54da2e3ebdSchin		if (remove(file) < 0)
55da2e3ebdSchin		{
56da2e3ebdSchin			fclose(fr);
57da2e3ebdSchin			fclose(fw);
58da2e3ebdSchin			remove(file);
59da2e3ebdSchin			return 0;
60da2e3ebdSchin		}
61da2e3ebdSchin		if (fwrite(data, sizeof(data), 1, fw) != 1)
62da2e3ebdSchin			return 0;
63da2e3ebdSchin		fclose(fw);
64da2e3ebdSchin		if (fread(file, sizeof(data), 1, fr) != 1)
65da2e3ebdSchin			return 0;
66da2e3ebdSchin		fclose(fr);
67da2e3ebdSchin		if (strcmp(file, data) != 0)
68da2e3ebdSchin			return 0;
69da2e3ebdSchin	#endif
70da2e3ebdSchin		return 1;
71da2e3ebdSchin	}
72da2e3ebdSchin}end
73da2e3ebdSchin
74da2e3ebdSchinmore void_int note{ voidptr is larger than int }end execute{
75da2e3ebdSchin	int
76da2e3ebdSchin	main()
77da2e3ebdSchin	{
78da2e3ebdSchin		return sizeof(char*) > sizeof(int) ? 0 : 1;
79da2e3ebdSchin	}
80da2e3ebdSchin}end
81da2e3ebdSchin
82da2e3ebdSchinmore long_int note{ long is larger than int }end execute{
83da2e3ebdSchin	int
84da2e3ebdSchin	main()
85da2e3ebdSchin	{
86da2e3ebdSchin		return sizeof(long) > sizeof(int) ? 0 : 1;
87da2e3ebdSchin	}
88da2e3ebdSchin}end
89da2e3ebdSchin
90da2e3ebdSchintst	vax_asm note{ register layout ok for vax string operations }end execute{
91da2e3ebdSchin	int
92da2e3ebdSchin	main()
93da2e3ebdSchin	{
94da2e3ebdSchin	#ifndef vax
95da2e3ebdSchin		return absurd = -1;
96da2e3ebdSchin	#else
97da2e3ebdSchin		register int	r11, r10, r9, r8, r7, r6;
98da2e3ebdSchin		r11 = r10 = r9 = r8 = r7 = r6 = -1;
99da2e3ebdSchin		asm("clrw	r11");
100da2e3ebdSchin		asm("clrw	r10");
101da2e3ebdSchin		asm("clrw	r9");
102da2e3ebdSchin		asm("clrw	r8");
103da2e3ebdSchin		asm("clrw	r7");
104da2e3ebdSchin		asm("clrw	r6");
105da2e3ebdSchin		if(sizeof(int) != sizeof(char*) || r11 || r10 || r9 || r8 || r7 || r6 )
106da2e3ebdSchin			return -1;
107da2e3ebdSchin		return 0;
108da2e3ebdSchin	#endif
109da2e3ebdSchin	}
110da2e3ebdSchin}end
111da2e3ebdSchin
112da2e3ebdSchintst	lib_cvt note{ native floating point conversions ok }end link{
113da2e3ebdSchin	_BEGIN_EXTERNS_
114da2e3ebdSchin	extern char* ecvt _ARG_((double, int, int*, int*));
115da2e3ebdSchin	extern char* fcvt _ARG_((double, int, int*, int*));
116da2e3ebdSchin	extern double strtod _ARG_((const char*, char**));
117da2e3ebdSchin	_END_EXTERNS_
118da2e3ebdSchin	int
119da2e3ebdSchin	main()
120da2e3ebdSchin	{
121da2e3ebdSchin		ecvt(0.0, 0, 0, 0);
122da2e3ebdSchin		fcvt(0.0, 0, 0, 0);
123da2e3ebdSchin		strtod(0, 0);
124da2e3ebdSchin		return 0;
125da2e3ebdSchin	}
126da2e3ebdSchin}end
127da2e3ebdSchin
128da2e3ebdSchintst	xopen_stdio note{ Stdio fseek/fflush are X/Open-compliant }end execute{
129da2e3ebdSchin	#define Failed(file)	(unlink(file),1)
130da2e3ebdSchin	int
131da2e3ebdSchin	main(argc, argv)
132da2e3ebdSchin	int	argc;
133da2e3ebdSchin	char**	argv;
134da2e3ebdSchin	{	FILE	*f1, *f2;
135da2e3ebdSchin		char	file[1024], buf[1024], *f, *t;
136da2e3ebdSchin		int	i, fd;
137da2e3ebdSchin
138da2e3ebdSchin		/* create file */
139da2e3ebdSchin		for(f = argv[0], t = file; (*t = *f++) != 0; )
140da2e3ebdSchin			t++;
141da2e3ebdSchin		*t++ = '.'; *t++ = 'D'; *t++ = 0;
142da2e3ebdSchin		if((fd = creat(file,0666)) < 0)
143da2e3ebdSchin			return 1;
144da2e3ebdSchin
145da2e3ebdSchin		for (i = 0; i < sizeof(buf); ++i)
146da2e3ebdSchin			buf[i] = '0' + (i%10);
147da2e3ebdSchin		for (i = 0; i < 16; ++i)
148da2e3ebdSchin			if (write(fd,buf,sizeof(buf)) != sizeof(buf))
149da2e3ebdSchin				return Failed(file);
150da2e3ebdSchin		close(fd);
151da2e3ebdSchin
152da2e3ebdSchin		if(!(f1 = fopen(file,"r+")) ||
153da2e3ebdSchin		   (fd = dup(fileno(f1))) < 0 ||
154da2e3ebdSchin		   !(f2 = fdopen(fd,"r+")) )
155da2e3ebdSchin			return Failed(file);
156da2e3ebdSchin
157da2e3ebdSchin		if(fread(buf, 1, 7, f2) != 7 || ftell(f2) != 7)
158da2e3ebdSchin			return Failed(file);
159da2e3ebdSchin
160da2e3ebdSchin		if(fseek(f1, 1010, 0) < 0 || ftell(f1) != 1010)
161da2e3ebdSchin			return Failed(file);
162da2e3ebdSchin
163da2e3ebdSchin		fflush(f2); /* this should set the seek location to 1010 */
164da2e3ebdSchin		if(ftell(f2) != 1010)
165da2e3ebdSchin			return Failed(file);
166da2e3ebdSchin
167da2e3ebdSchin		unlink(file);
168da2e3ebdSchin		return 0;
169da2e3ebdSchin	}
170da2e3ebdSchin}end
171