/****************************
 * Test C02 Function Calls  *
 * Test file for Compiler   *
 ****************************/

/* Variables */
char b , 
     i , j;  
char c,d,f;  
char r[15];  
char z[15];
const char t = {1, 2, 3, 4, 5};  
const char s = "This is a string.";
char aa,xx,yy ; //Function parameter variables
char aaa,xxx,yyy ; //Function return variables
char STROBE;     //Strobe Register

/* Function Declarations */
char myfunc();
  return b-c-d;
  return;

char func1(aa) {
  return aa;
}

char func2(aa, yy) {
  return aa + yy;
}

char func3(aa, yy, xx) {
  return aa + yy - xx;
}

main:

funcx:
f = testfn(b);           //Simple Variable
f = testfn(r[i]);        //Array Element
f = testfn(r[i],b);      //Two Parameters
f = testfn(r[1],r[2]);   //Two Array Elements
f = testfn(r[1],r[2],b); //Three Parameters
f = testfn(&s);          //Pointer
f = testfn(b,&s);        //Byte and Pointer
f = testfn(r[i],&s);     //Array Element and Pointer
f = testfn(r[1],&s);     //Array Element and Pointer
f = testfn(b+c+d,&s);    //Expression in Function Call 
f = testfn(getkey(b)+c); //Nested Function Call 

funcs:
prchr(b+c+d);
testfn(prchr(b));
testfn(b,c,d);
testfn(b+c+d,r[i],f);
testfn(&s); //Print a String
dofn(?,yy);
dofn(?,yy,xx);
dofn(aa,?,xx);
dofn(?,?,XX);


funcyx:
aaa = testfn();           //Return 1 Value 
aaa, yyy = testfn();      //Return 2 Values
aaa, yyy, xxx = testfn(); //Return 3 Values 
r[i], d = testfn();       //Return 2 Values with Array
c, z[i] = testfn();       //Return 2 Values with Array
r[i], d, f = testfn();    //Return 3 Values with Array
c, z[i], f = testfn();    //Return 3 Values with Array
r[i], z[j] = testfn();    //Return 2 Values with Arrays
r[i], z[j], f = testfn(); //Return 2 Values with Arrays
r[i], z[j], f[b] = testfn(); //Error - Array Element not Allowed with STX assignment


//void fnoutr() {char fninnr() {} } 
//A, Y = testfn(); //Error - Registers not Allowed when returning multiple values 
