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