/* Compiler Test Program Part I */

#define TVAL	5
#define FVAL	0
union un1{
	long ul1;
	int ui1;
} uu;
struct ss {
	char m1;
	short int  m2;
	long m3;
} s1;
char *swt1();
char *swt2();
char *swt3();
char *swt4();

struct { char *ptrwd; };

struct {
	unsigned f1:1;
	unsigned f2:2;
	unsigned f3:3;
} flags;

typedef char CHAR;
typedef int  INT;

typedef struct {
	CHAR tsc;
	INT  tsi;
	CHAR *tsp;
} TYPSTR;
TYPSTR zz[3];
typedef int typeary[4];

char c;
static char str[] ="string 1";
static long l;
long l1,l2,l3;

long addlargs();
long addpargs();
long ldiv();
long ldivr;
int initi = 1;
int initk[3] = { 1, 2, 3};
int initl[3][4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 };
char *initx[] = {
	"that's all, folks...",
	0,
};
struct {
	int s_x;
	long s_l;
} inits[] = {
	0,	0L,
	1,	1L,
	2,	2L,
};
char initc[20] = "this is it";
char initd[] = "this might be it";
char inite[][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
char *initcc = {"this is also it"};
int ccinit = '\1\2';

char ac[4];
int ai[4];
int *pai[] = {&ai[1],&ai[3]};
long al[4];
typedef char *CHARP;
CHARP p0;
/* beginning new declarations as of V3.3 */
struct butblk {
		struct butblk *nextbutblk;
		int butno;
		short args;
		int actno;
		struct node *ptr;
};

struct node {
		struct node *nfptr;
		struct butblk *bptr;
		long actno;		/* non-unique structure names */
};

struct other {
	int a;
	int *b;
};
int x[5];
struct other sound[] = {
	{ 1, x+1},
};
/* end new declarations as of v3.3 */
/* begin new declarations for 3.4 */
typedef struct xxx34 STRASSIGN;

struct xxx34 {
	long l;
	char ch;
	STRASSIGN *pxxx34;
};

struct ss *f();
char largear[20000];
typedef struct atype *STRUCTYPE;

struct atype {
	char ch;
	STRUCTYPE ptr;
};
int err;
/* end new declarations for 3.4 */

main()
{

	register i;
	int j;
	register char *p;
	int ai2[2][3];
	char n;
	register unsigned u1,u2;
	unsigned int u3;
	register long lr1;
	int *pi;
	char **a;

	putstring("Beginning 68000 C Compiler Test");
	for(j=0; j<5; j++) {
		c = 'A';
		for(i=0; i<62; i++) {
			putchar(c);
			c++;
		}
		putchar('\n');
	}
	if(12345 != 12345) error(0x0);
	j = i;
	if(i != j) error(0x0a);
	if(sizeof flags != 2) error(0x0b);
	if(sizeof(TYPSTR) != 8) error(0x0c);
	if(sizeof zz[2] != sizeof(TYPSTR)) error(0x0d);
	if(sizeof(typeary[4])!=32)error(0x0e);
	if(sizeof(int[3])!=6)error(0x0f);
	if(sizeof(typeary*)!=4)error(0x10);
	i = 0; if(i) error(0x1);
	if(i!=0) error(0x2);
	if(++i != 1) error(0x3);
	i<<= 2;
	if(i != 4) error(0x4);
	i += i+2;
	if(i != 10) error(0x5);
	i *= 3*2;
	if(i != 60) error(0x6);
	i /= 3;
	if(i != 20) error(0x7);
	i = (i+12)|7;
	if(i != 39) error(0x8);
	i = i - i/2 - 2;
	if(i != 18) error(0x9);
	i = i % 6;
	if( i != 0 ) error(0x10);
	j = 0;
	if(j) error(0x11);
	if(j!=0) error(0x12);
	if(++j != 1) error(0x13);
	j<<= 2;
	if(j != 4) error(0x14);
	j += j+2;
	if(j != 10) error(0x15);
	j *= 3*2;
	if(j != 60) error(0x16);
	j /= 3;
	if(j != 20) error(0x17);
	j = (j+12)|7;
	if(j != 39) error(0x18);
	j = j - j/2 - 2;
	if(j != 18) error(0x19);
	j = 1229;
	j <<= 1;
	if(j != 2458) error(0x20f);
	l = 0;
	if(l) error(0x21);
	if(l!=0) error(0x22);
	if(++l != 1) error(0x23);
	l<<= 2;
	if(l != 4) error(0x24);
	l += l+2;
	if(l != 10) error(0x25);
	l = l*6;
	if(l != 60) error(0x26);
	l /= 3;
	if(l != 20) error(0x27);
	l = (l+12)|7;
	if(l != 39) error(0x28);
	l = l - l/2 - 2;
	if(l != 18) error(0x29);
	l = l % 6;
	if( l != 0 ) error(0x290);
	l = 12345L;
	if(l != 12345) error(0x291);
	l = 0xfffffffel;
	if(l != -2) error(0x292);
	l = 40000; if( (l/= 10) != 4000 || l != 4000 ) error(0x293);
	l = 40000; l /= 10; if( l != 4000 ) error(0x294);
	l = 40000; l /= 10L; if( l != 4000 ) error(0x295);
	l = 40000; if( (l % 400) !=  0) error(0x296);
	l = 40000; if( (l % 400L) != 0 ) error(0x297);
	targs(1,1000,-18363);
	i = addargs(2,7,65);
	if(i != 74) error(0x30);
	l1 = 10000L;
	l2 = 4273;
	lr1 = 0xabcd5678;
	if((l=addlargs(l1,l2)) != l1+l2) error(0x310);
	if( addlargs(l1+l2,l1) != addlargs(l1,l1+l2) ) error(0x311);
	p = "x.c";
	p[strlen(p)-1] = 's';
	if( eqstr(p,"x.s") == 0 ) error(0x312);
	if(lr1 != 0xabcd5678) error(0x313);
	if(eqstr("azx953#;k9","azx953#;k9") == 0) error(0x314);
	if(eqstr("try me","try m") != 0) error(0x315);
	if( strlen("x.s") == strlen("x.ss") ) error(0x316);
	if( strlen("x.s") + 1 != strlen("x.ss") ) error(0x317);
	if( j = 1, i = 0 ) error(0x318);
	if( (j=0,i=1) != 1 ) error(0x319);
	l1 = -3347;
	l2 = 7913;
	if((l=addpargs((char *)&l1,&l2)) != l1+l2) error(0x34);
	l = 60;
	if((l *= 9) != 540) error(0x36);
	c = 0377;
	if(c != 0377) error(0x36);
	i = c;
	if(i != -1) error(0x37);
	j = c;
	if(j != -1) error(0x38);
	l = c;
	if(l != -1) error(0x39);
	c = 0x1f;
	if((c&0x10) == 0) error(0x39a);
	if((c&0x40)) error(0x39b);
	ai[0] = 0;
	ai[1] = 1;
	ai[2] = 2;
	ai[3] = 3;
	if(ai[0] != 0) error(0x40);
	if(ai[1] != 1) error(0x41);
	if(ai[2] != 2) error(0x42);
	if(ai[3] != 3) error(0x43);
	for(i=0; i<=3; i++) {
		if(ai[i] != i) error(0x44);
		ac[i] = ai[i];
	}
lab45:
	for(i=0; i<4; i++) {
		if(ac[i] != i) error(0x45);
		al[i] = i*30000;
	}
	for(i=0; i<4; i++) {
		if(al[i] != i*30000) error(0x46);
		if(al[i]/30000 != i) error(0x47);
		if(al[i]/100 != i*300) error(0x48);
	}
	n = 3;
	if(str[n] != 'i') error(0x48a);
	if(ai[n] != n) error(0x48b);
	if(ac[n] != 3 || al[n] != n*30000) error(0x48c);
	i = 0;
	for(j=0; j<100; j++)
		i += 5;
	if(j != 100) error(0x49);
	if(i != 500) error(0x50);
	i = 0155555;
	i ^= i;
	if(i) error(0x51);
	s1.m1 = 64;
	s1.m2 = 1250;
	s1.m3 = 9264;
	p = &s1;
	if(s1.m1!=64 || p->m1!=64) error(0x52);
	if(s1.m2!=1250 || p->m2!=1250) error(0x53);
	if(s1.m3==9264 && p->m3==9264) ; else error(0x54);
	j = -50;
	if(j >= 0) error(0x55);
	if(j < 0) ; else error(0x56);
	l = 7777;
	if(l < 7776) error(0x57);
	if(l > 7776) ; else error(0x58);
	p = &ac[0];
	p0 = &ac[3];
	if(p >= p0) error(0x59);
	if(p <= p0) ; else error(0x60);
	if(p == 0) error(0x61);
	if(p0 != 0) ; else error(0x62);
	for(i=0; i<2; i++) {
		for(j=0; j<3; j++) {
			ai2[i][j] = (i+2)*(j+3);
		}
	}
	for(i=0; i<2; i++) {
		for(j=0; j<3; j++) {
			if(ai2[i][j] != (i+2)*(j+3)) error(0x63);
		}
	}
	if(swt1()!=1) error(0x64);
	if(swt2()) error(0x65);
	if(swt3()!= -1) error(0x65);
	if(swt4()!=4) error(0x66);

	l1 = 20000;
	l2 = 10;
	l3 = ldiv(l1,l2);
	if(l3 != 2000) error(0x201);
	if(ldivr) error(0x202);
	l2 = 9999;
	if(ldiv(l1,l2) != 2) error(0x203);
	if(ldivr != 2) error(0x204);
	l2 = -123;
	if(ldiv(l1,l2) != -162) error(0x207);
	if(ldivr != -74) error(0x208);
lab209:
	u1 = 0100000;
	u2 = 0010000;
	if(u1 < u2) error(0x209);
	uu.ui1 = 1;
	if(uu.ul1 != 0x10000) error(0x210);
#if TVAL
	i = 10;
#else
	i = 5;
#endif
	if(i != 10) error(0x211);
	i = 0;
#ifndef FVAL
	i++;
#endif
#ifdef XXYYZZ
	i++;
#endif
#if FVAL|TVAL-5
	i++;
#endif
	if(i) error(0x212);

	if(sizeof(uu) != sizeof(uu.ul1)) error(0x213);
	zz[0].tsi = 14;
	zz[1].tsc = 0177;
	zz[2].tsp = 199999;
	if(zz[0].tsi != 14) error(0x214);
	if(zz[1].tsc != 0177) error(0x215);
	if(zz[2].tsp != 199999) error(0x216);

	i = 1;
#if TVAL
	i++;
#	if FVAL
	error(0x217);
#	else
	i++;
#endif
#else
	i++;
#endif;
	if(i != 3) error(0x218);
#undef FVAL
#ifdef FVAL
	error(0x219);
#endif
#if ((TVAL*6)/3) != 3*2+8/2
	error(0x220);
#endif
	flags.f1=1;
	flags.f2=0;
	flags.f3=5;
	if(flags.f1 != 1) error(0x221);
	if(flags.f2) error(0x222);
	if(flags.f3 != 5) error(0x223);
	flags.f3 += 2;
	if(flags.f3 != 7) error(0x224);
	p = &flags;
	p->f1 = 0;
	p->f2 = 1;
	p->f3 = 3;
	if(p->f1) error(0x224a);
	if(p->f2 != 1) error(0x224b);
	if(p->f3 != 3) error(0x224c);
	p0 = &flags;
	p0->f1 = 1;
	p0->f2 = 2;
	p0->f3 = 7;
	if(p0->f1 != 1) error(0x224d);
	if(p0->f2 != 2) error(0x224e);
	if(p0->f3 != 7) error(0x224f);
	i = 13;
	checklv((long)(i+5));
	checkregs();
	chkinits();
	if((sizeof(char *)+3) != 7) error(0x225);
	j = -12;
	chklext((long)j);
	u1 = 60000;
	u2 = u1/20;
	if(u2 != 3000) error(0x226);
	l1 = 55123L;
	l1 = u1 + l1;
	if(l1 != 115123L) error(0x227);
	l1 -= u1;
	if(l1 != 55123L) error(0x228);
	al[3] = 99999L;
	u1 = 3;
	if(al[u1] != 99999L) error(0x229);
	l1 = 180000L;
	u1 = 60000;
	u2 = l1/u1;
	if(u2 != 3) error(0x230);
	u2 = 12000;
	u3 = 5;
	u1 = u2*u3;
	if(u1 != 60000) error(0x231);
	l1 = 5;
	u1 = 60000;
	l1 = u1*l1;
	if(l1 != 300000L) error(0x232);

//int<->char
	n = 100;
	i = (n<<3) + 2;
	j = (n<<4) - 2;
	if(i != 802) error(0x240);
	if(j != 1598) error(0x241);
	i = 50;
	if(n <= i) error(0x242);
	j = 100;
	if(n != j) error(0x243);
	pi = &j;
	if(*pi != n) error(0x243a);
	if(*pi != j) error(0x243b);
	l = 100;
	if(n != l) error(0x244);
	n = 255;
	if(n>l || n>=j || n>i) error(0x255);
	i = n + 500;
	if(i != 499) error(0x256);
	if((n-4) != -5) error(0x257);
	i = 1, i = 2, i = 3; if( i != 3 ) error(0x258);
	if( (i = 3, j = 2, i = 1) != 1 || i != 1 || j != 2 ) error(0x259);
	if( i++ != 1 || i-- != 2 || i != 1 ) error(0x260);
	if( (i++ + j++) != 3 || i != 2 || j != 3 )error(0x261);

	ckcast();

	if(p=5);else error(0x301);
	if(p -= 5) error(0x302);
	if(!(++p&1)) error(0x303);
	p0 = 0;
	if(p = p0) error(0x304);
	p0 = &p0;
	if(p = p0--);else error(0x305);
	p = &ai[2]->ptrwd + zz[3].tsp;	//this used to give error msg on conversion
	p = &zz[2];
	zz[2].tsi = 2;
	if(p->tsi&1) error(0x306);
	if(!p->tsi&2) error(0x307);
	p = 070;
	if(p&1) error(0x308);
	if((p&040)==0) error(0x309);
	j = 105;
	p = 105;
	if(p != j) error(0x320);
	ai[3] = 0x8765;
	j = 1;
	i = *pai[j];
	if(i != 0x8765) error(0x321);
	p = 1000;
	a = &p0;
	*a=pi=p+1;
	if(p0 != 1001) error(0x322);
	chkptrs();		//check pointer code
	tembedasg();	//complex ptr assignment
	macrotest();
	lextest();
	cmplxptrpp();

	n = 100;
	i = 1024;
	l = 31234;
	c = 'Z';
	printf("100=%d $64=%x 1024=%d 02000=%o 31234l=%ld string 1=%s Z=%c\n",
		n,n,i,i,l,str,c);
	l = 0xa9b7c3;
	i = 0xf1e4;
	printf("0xa9b7c3=%lx 0XF1E4=%x\n",l,i);
	v33();
	v34();

	if (!err)
		putstring("Far Freaking Out!!!!");
	else
		putstring("Tough Luck!!!");
}

v33()	/* new for version 3.3 */
{
	long v33l;
	struct butblk bb1;
	struct node bb2;

	bb2.bptr = &bb1;
	bb1.butno = 23;
	printf("%d = %d ",bb1.butno,bb2.bptr->butno);
	x[1] = 99;
	printf("%d = %d ",x[1],*sound[0].b);
	v33l = 0x1L + 0x10L + 0x100L + 0x1000L + 0x10000L + 0x100000L;
	printf("0x111111 = %lx\n",v33l);
}

v34()		/* new for version 3.4 */
{
	char *q;
	register struct ss *p3;
	struct ss p4, p5;
	char ar34[sizeof (long)];
	float f1, f2;
	int i;
	double d1, d2;
	STRUCTYPE sop1;
	STRASSIGN *ptr, s;

	if (q&((sizeof(struct ss))-1));

	goto a;
	error(0xe00);
a:
	if (sizeof(largear) < 0) error(0xe01);

	l = 0x0100000;
	i = 1;
	l <<= i;
	if (l != 0x0200000) error(0xe02);
	l = 0x010;
	l <<= i;
	if (l != 0x020) error(0xe03);
	l1 = 1L;
	l2 = 1L;
	i = 5;
	l1 <<= i;
	l2 = l2 << i;
	if (l1 != l2) error(0xe04);

	if ((p3 = f()) != -1) error(0xe05);

	p4.m1 = 'p';
	p3 = &p5;
	*p3 = p4;
	if (p3->m1 != p4.m1) error(0xe10);
	p4.m1 = 'E';
	p5 = p4;
	if (p5.m1 != p4.m1) error(0xe11);
	p3->m1 = '7';
	p4 = *p3;
	if (p4.m1 != p3->m1) error(0xe12);
}

struct ss *
f()
{
	return(-1);
}

chklext(al9)
long al9;
{

	if(al9 != -12L) error(0x375);
}

chkinits()
{

	static long liv1 =999999;
	static struct xx {
		char *csiv1;
		int isiv1;
		long lsiv1;
	} ss[] ={"abc",1,0x3ff41,"def",2,143L,"ghi",3};
	register int i;

	if(liv1 != 999999L) error(0xff1);
	if(ss[1].isiv1 != 2) error(0xff2);
	if(eqstr(ss[2].csiv1,"ghi")==0) error(0xff3);
	if(ss[0].lsiv1 != 0x3ff41) error(0xff4);
	if(ss[1].lsiv1 != 143L) error(0xff5);
	if(ss[2].lsiv1 != 0) error(0xff6);
	if(ss[1].lsiv1&0200) ; else error(0xff7);
	if( initi != 1 ) error(0xff8);
	for( i = 0; i < 3; i++ ) {
		if( initk[i] != i+1 ) error(0xff9);
		if( initl[i][0] != (i*4)+1 ) error(0xff10);
		if( inits[i].s_x != i ) error(0xff11);
		if( inits[i].s_l != i ) error(0xff12);
		if( inite[i][0] != (i*3)+1 ) error(0xff13);
	}
	if( eqstr(initc,"this is it") == 0 ) error(0xff14);
	if( eqstr(initd,"this might be it") == 0 ) error(0xff15);
	if( eqstr(initcc,"this is also it") == 0 ) error(0xff16);
	if( sizeof inite != 9 ) error(0xff17);
	if( sizeof initc != 20 ) error(0xff18);
	if( sizeof initd != 17 ) error(0xff19);
	if( ccinit != 258 ) error(0xff20);
}

checkregs()
{

	register rx1,rx2,rx3,rx4,rx5,rx6,rx7,rx8,rx9;

	rx1 = 1;
	rx2 = 2;
	rx5 = 5;
	rx8 = 8;
	rx9 = 9;
	if(rx1+rx2 != 3) error(0x360);
	if(rx2+rx5 != 7) error(0x361);
	if(rx9-rx5 != 4) error(0x362);
	if(rx8+rx9 != 17) error(0x363);
}

checklv(alv)
long alv;
{
	if(alv != 18L) error(0x364e);
}

error(pc)
{
	printf("error %x\n",pc);
	err++;
}

putstring(pc)
char *pc;
{
	register char *p;

	p = pc;
	while(*p)
		putchar(*p++);
	putchar('\n');
}

targs(a1,a2,a3)
char a1;
{
	if(a1!=1 || a2!=1000 || a3!= -18363) error(0xfe00);
	if(40000 != 40000L) error(0xfe01);
}

addargs(a1,a2,a3)
{

	return(a1+a2+a3);
}

eqstr(ap1,ap2)
char *ap1, *ap2;
{
	register char *p1, *p2;

	p1 = ap1;
	p2 = ap2;
	while(*p1) {
		if(*p1++ != *p2++)
			return(0);
	}
	if(*p2)
		return(0);
	return(1);
}

long addlargs(a1,a2)
long a1,a2;
{
	register i,j,k;
	register long lr2;

	i = 1000;
	lr2 = 0xbbbbbbbb;
	targs(1,i,-18363);
	if(lr2 != 0xbbbbbbbb) error(0xfe02);

	return(a1+a2);
}

long addpargs(a1,a2)
register long *a1,*a2;
{

	return(*a1+*a2);
}

// simple switch stmt test
char *swt1()
{
	register int i;

	for( i = -1; i < 10; i++ ) {
		switch(i) {
	
			error(0x140);

			case -1:
				if(i!= -1)error(0x141);
				continue;
			case 0:
				if(i!=0)error(0x142);
				continue;
			case 1:
				if(i!=1)error(0x143);
				continue;
			case 4:
				if(i!=4)error(0x144);
				continue;
			case 2:
				if(i!=2)error(0x145);
				continue;
			case 3:
				if(i!=3)error(0x146);
				continue;
			default:
				if(i!=5)error(0x147);
				continue;
	
			case 6:
				break;
		}
		break;
	}
	if(i!=6)error(0x148);
	return(1);
}

char *swt2()
{
	register int i;

	for( i = 0; i < 100; i += 10 ) {
		switch(i) {

		error(0x150);

		case 60:
			break;
		case 10:
			if(i!=10)error(0x151);
			continue;
		case 0:
			if(i)error(0x157);
			continue;
		case 20:
			if(i!=20)error(0x152);
			continue;
		case 40:
			if(i!=40)error(0x153);
			continue;
		case 50:
			if(i!=50)error(0x154);
			continue;
		default:
			if(i!=30)error(0x155);
			continue;

		}
		break;
	}
	if(i!=60)error(0x156);
	return(0);
}

char *swt3()
{
	register int i, j;

	for( i = 0; i < 10; i++ ) {
		switch(j = 1<<i) {

		error(0x160);

		case 8:
			if(j!=8)error(0x161);
			continue;
		case 32:
			break;
		case 4:
			if(j!=4)error(0x162);
			continue;
		case 2:
			if(j!=2)error(0x163);
			continue;
		case 1:
			if(j!=1)error(0x164);
			continue;
		default:
			if(j!=16)error(0x165);
			continue;

		}
		break;
	}
	if(j!=32)error(0x166);
	return(-1);
}

char *swt4()
{
	register int i, j;

	for( i = 0; i < 10; i++ ) {
		switch(j = 1<<i) {

		error(0x170);

		case 4:
			break;
		case 2:
			if(j!=2)error(0x173);
			continue;
		case 1:
			if(j!=1)error(0x174);
			continue;
		default:
			break;

		}
		break;
	}
	if(j!=4)error(0x176);
	return((long) j);
}

ckcast()
{

	struct results {
		struct results *length;
		int cutoff;
	} cst19[3], *arypt;

	arypt = cst19;
	arypt->length = 6;
	(char *)arypt += (long)arypt->length;
	if(arypt != &cst19[0]+1) error(0xfe03);
}

chkptrs()
{

	register char *pc;
	register int *pi;
	register char **pl;
	char *apc;
	int *api;
	long *apl;

	pc = &str[4];
	if(*pc++ != 'n') error(0x400);
	if(*pc-- != 'g') error(0x401);
	if(*--pc != 'i') error(0x402);
	if(*(pc+4) != '1') error(0x403);

	pc = &str[4];
	if( pc > &str[4] ) error(0x410);
	if( pc >= &str[5] ) error(0x441);
	if( pc < &str[4] ) error(0x442);
	if( pc <= &str[3] ) error(0x443);
	if( pc == &str[3] ) error(0x444);
	if( pc != &str[4] ) error(0x445);

	apc = &str[4];
	if(*apc++ != 'n') error(0x420);
	if(*apc-- != 'g') error(0x421);
	if(*--apc != 'i') error(0x422);
	if(*(apc+4) != '1') error(0x423);

	apc = &str[4];
	if( apc > &str[4] ) error(0x430);
	if( apc >= &str[5] ) error(0x431);
	if( apc < &str[4] ) error(0x432);
	if( apc <= &str[3] ) error(0x433);
	if( apc == &str[3] ) error(0x434);
	if( apc != &str[4] ) error(0x435);

	ai[0] = 14;
	ai[1] = 33;
	ai[2] = 194;
	ai[3] = 555;
	if(**pai != 33) error(0x404);
	pi = &ai[1];
	if(*++pi != 194) error(0x405);
	pi--;
	if(*pi+5 != 38) error(0x406);
	ai[0] = 0;
	if(*--pi) error(0x407);
	api = pi + 3;
	if(*api++ != 555) error(0x408);

	pl = pai;
	if(*++pl != &ai[3]) error(0x409);
	ckstrpt();
}

ckstrpt()
{

	register TYPSTR *p;
	register int nn;
	register long lll;

	zz[1].tsi = 1987;
	zz[1].tsc = 255;
	zz[2].tsc = 13;
	zz[2].tsi = -5;
	p = zz;
	if((++p)->tsi != 1987) error(0x450);
	if(p->tsc != -1) error(0x451);
	if((p+1)->tsi != -5) error(0x452);
	p++;
	if(p->tsc != 13) error(0x453);
	if(--p->tsi != -6) error(0x454);
	if((--p)->tsi != 1987) error(0x454a);
	p0 = &zz[1];
	if(*p0 != -1) error(0x455);
	if(p0->tsi != 1987) error(0x456);
	if((p0->tsi&1)==0 || (p0->tsi&2)==0) error(0x457);
	if((long)p&1) error(0x458);
	p = zz;
	nn = 2;
	p += nn;
	if(p->tsc != 13) error(0x459);
	if(nn&2) ; else error(0x460);
	nn = 0100000;
	if(nn&0x8000) ; else error(0x461);
	lll = 0x3f001;
	if(lll&0x40) error(0x462);
	if(lll&0xf00) error(0x463);
	if(lll&0x8000) ; else error(0x464);
	if(lll&0x10000) ; else error(0x465);
	if((lll&0xf0000) != 0x30000) error(0x466);
}

//embeded ptr assignment test
tembedasg()
{

	register char *p,mcc;
	register int t;
	char ctype[4];
	char c9;

	mcc = 2;
	ctype[2] = 'Z';
	p = ctype;
	t = ctype[*p++=mcc];
	if(t != 'Z') error(0xfe04);
	if(ctype[0] != 2) error(0xfe05);
	c9 = 2;
	c9 |= 1;
	if(c9 != 3) error(0xfe08);
	c9 &= 1;
	if(c9 != 1) error(0xfe09);
}

macrotest()
{
#define	x	1
#if x!=1
	error(0xfd1);
#endif
#ifndef x
	error(0xfd2);
#endif
#ifdef x
#else
	error(0xfd3);
#endif
#undef x
#ifdef x
	error(0xfd4);
#endif
#ifndef x
#else
	error(0xfd5);
#endif
#define	y(a,b,c)	c+a+b
#if y(1,2,3)!=6
	error(0xfd6);
#endif
#include "test.h"
#ifndef test2x
	error(0xfd7);
#endif
#define z(a,b,c)	\
#define	a	b+c
z(zxx,1,2)
#if zxx!=3
	error(0xfd8);
#endif
#if zxx==3
#else
	error(0xfd9);
#endif
/*
#define	zzz
*/
#ifdef zzz
	error(0xfd9);
#endif
#if ((5*6)/3) != 3*2+8/2
	error(0xfd10);
#endif
#if ((5*6)/3) == 3*2+8/2
#else
	error(0xfd11);
#endif
#define	z1(a,b)	(a+b)
#define	z2(a,b)	(a*b)
#if	z1(z2(2,3),z2(z1(1,1),3)) != 12
	error(0xfd12);
#endif
#if 1>2
	error(0xfd13);
#endif
#if 2<1
	error(0xfd14);
#endif
#if 1>=2
	error(0xfd15);
#endif
#if 2-1!=1
	error(0xfd16);
#endif
#if 1-2!= -1
	error(0xfd17);
#endif
#if -1 >= 0
	error(0xfd18);
#endif
#if 1 ? 0 : 1
	error(0xfd19);
#endif
#if 0 ? 1 : 0
	error(0xfd20);
#endif
#if (010<<1) != 020
	error(0xfd21);
#endif
#if (020>>1) != 010
	error(0xfd22);
#endif
#if (0xc^0xa) != 0x6
	error(0xfd23);
#endif
#if (0xc&0xa) != 0x8
	error(0xfd24);
#endif
#if (0xc|0xa) != 0xe
	error(0xfd25);
#endif
#if (~2) != -3
	error(0xfd26);
#endif
#if (!1) != 0
	error(0xfd26);
#endif
}

// check int extension to long
lextest()
{

	int iii;
	long lll;

	iii = -10;
	lll = iii*2;
	if(lll != -20L) error(0xfe07);
}

cmplxptrpp()
{
	int v;
	int dd[4];
	int *pd[4];
	register int i;

	for(v=0; v<4; v++) {
		pd[v] = &dd[v];
		dd[v] = v+100;
	}
	v = 1;
	i = *pd[v]++;
	if(i != 101) error(0xfe18);
	if(*pd[v] != 102) error(0xfe19);
}

strlen(p)
char *p;
{
	register int i;

	i = 0;
	while( *p++ )
		i++;
	return(i);
}
