/* Test C02 define directive */

#pragma origin 1000

char d, i;
char lo, hi;
char index, name[8], data[128];
int addr;

//Define Structures
struct point {
  char x, y;
};

struct line {
  struct point bgnpnt, endpnt;
};

struct record {
  /* This is a Record */ //Extra Comment
  char name[8];         //Name
  char index;           //Index
  int addr;             //Address
  struct point pnt;     //Point
  char data[128];       //Data
};

//Declare Structure Variables
struct point pnt;
struct point bgnpnt, endpnt;
struct line lin;
struct record rec;

//Display Structure Info
printf(?pnt.x,"?pnt.x=%d\t");
printf(@pnt.x,"@pnt.x=%d\n");
printf(?pnt.y,"?pnt.y=%d\t");
printf(@pnt.y,"@pnt.y=%d\n");

printf(@rec,"@rec=%d\n");
printf(?rec.name,"?rec.name=%d\t");
printf(@rec.name,"@rec.name=%d\n");
printf(?rec.index,"?rec.index=%d\t");
printf(@rec.index,"@rec.index=%d\n");
printf(?rec.addr,"?rec.addr=%d\t");
printf(@rec.addr,"@rec.addr=%d\n");
printf(?rec.pnt,"?rec.pnt=%d\t");
printf(@rec.pnt,"@rec.pnt=%d\n");
printf(?rec.data,"?rec.data=%d\t");
printf(@rec.data,"@rec.data=%d\n");

//Get Member LSB & MSB
hi = >rec.addr; lo = <rec.addr;
hi = >&rec.data; lo = <&rec.data;

//Set Structure Members
strdst(&rec.name); strcpy(name);
rec.index = index;
rec.addr = $ABCD;
rec.pnt.x = 33;
rec.pnt.y = 44;
for (i = 0; i<=128; i++)
  rec.data[i] = d;

//Pass Entire Structure into Function
blkput(@rec, &rec);

//Print Structure Members
setdst(rec.name); putln("rec.name=\"%s\"");

//Copy Struct Member
memdst(&data); memcpy(@rec.data, &rec.data);

//Get Structure Members
index = rec.index;
addr = rec.addr;
for (i = 0; i<129; i++)
  d = rec.data[i];

//Treat Structure Like an Array
for (i = 0; i<140; i++)
  d = rec[i];
