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