/* * XE Bank Memory Access Test */#include "D:stdio.h"#define BUFSIZ 256extern int errno;XE_END();xebank();char buffer[BUFSIZ];char f1[6], f2[6];char asc1[20], asc2[20];char rwmesg[] =  "%u bytes %s %s (%d) %s %d\n";int retcode;transfer (name)char *name;{  FILE *file;  int i, b, xptr;  char *a;  if (name)  {    printf("\nmain2x...\n");    file = fopen(name, "r");    if (file == 0)    {      printf("file %s?\n", name);      return;    }    xptr = 0;    do    {      i=fread(buffer, 1, BUFSIZ, file);      printf("Read %u bytes", i);      main2x(buffer, 0, xptr, i);      printf(".\n");      xptr += i;    } while (i==BUFSIZ);    printf("%u bytes total\n", xptr);    fclose(file);  }  printf("\nx2main...\n");  xptr = 0;  for (;;)  {    x2main(buffer, 0, xptr, BUFSIZ);    for (i=0; i<BUFSIZ; i++)    {      fputc(buffer[i], 0);      if (!buffer[i]) return;    }    xptr += BUFSIZ;  }}char line[40], *lp;char *arg0, *arg1, *arg2, *arg3;char *getarg(){  char *ptr;  /* skip white */  while (*lp && iswhite(*lp))    ++lp;  /* return 1st non-white char */  ptr = lp;  /* skip past arg */  while (*lp && !iswhite(*lp))    ++lp;  /* cap off arg string */  *lp++ = '\0';  return ptr;}main (argc, argv)int argc;char *argv[];{  int xptr, xptr2, old, new;  int length, i, quit;  FILE *file;  if (!xebank())  {    printf("no XE memory available\n");    exit(1);  }  for (quit=0; !quit; )  {    printf("\nTEST> ");    fgets(line, 40, stdin);    lp = line;    arg0 = getarg();    arg1 = getarg();    arg2 = getarg();    arg3 = getarg();    switch (toupper(*arg0))    {    case 'Q': /* quit */      quit = 1;      break;    case 'T': /* transfer [file] */      if (*arg1 == '\0')        transfer(NULL);      else        transfer(arg1);      break;    case 'I': /* int addr [value] */      xptr = atoi(arg1);      printf("int at %u is ", xptr);      if (*arg2 == '\0')      {        old = xint(xptr, 0);        printf("%d\n", old);      }      else      {        new = atoi(arg2);        old = xint(xptr, 0, new);        printf("%d, was %d\n", new,          old);      }      break;    case 'C': /* char addr [value] */      xptr = atoi(arg1);      printf("char at %u is ", xptr);      if (*arg2 == '\0')      {        old = xchar(xptr, 0);        printf("'%c'(%d)\n", old, old);      }      else      {        new = atoi(arg2);        old = xchar(xptr, 0, new);        printf(          "'%c'(%d), was '%c'(%d)\n",          new, new, old, old);      }      break;    case 'F': /* float addr [value] */      xptr = atoi(arg1);      printf("float at %u is ", xptr);      if (*arg2 == '\0')      {        retcode = xfloat(f1, xptr, 0);        ftoa(f1, asc1);        printf("%s\n", asc1);      }      else      {        atof(f2, arg2);        retcode=xfloat(f1, xptr,0, f2);        ftoa(f1, asc1);        printf("%s, was %s\n", arg2,          asc1);      }      break;    case '2': /* 2ndfloat addr value */      xptr = atoi(arg1);      printf("float at %u is ", xptr);      atof(f2, arg2);      retcode = xfloat(0, xptr, 0, f2);      printf("now %s\n", arg2);      break;    case 'R': /* read addr len file */      xptr = atoi(arg1);      length = atoi(arg2);      file = fopen(arg3, "r");      if (file == NULL)      {        printf("%s?", arg3);        break;      }      printf(rwmesg, length, "from",        arg3, file, "to", xptr);      new=xread(xptr, 0, length, file);      printf("%u bytes read\n", new);      printf("errno = %d\n", errno);      fclose(file);      break;    case 'W': /* write addr len file */      xptr = atoi(arg1);      length = atoi(arg2);      file = fopen(arg3, "w");      if (file == NULL)      {        printf("%s?", arg3);        break;      }      printf(rwmesg, length, "to",        arg3, file, "from", xptr);      new=xwrite(xptr,0, length, file);      printf("%u bytes written\n", new);      printf("errno = %d\n", errno);      fclose(file);      break;    case 'Z': /* zero addr length */      xptr = atoi(arg1);      length = atoi(arg2);      xmemset(xptr, 0, 0, length);      break;    case 'L': /* length addr */      xptr = atoi(arg1);      length = xstrlen(xptr, 0);      printf("length XE[%d] = %d\n",        xptr, length);      break;    case 'E': /* equal addr string */      xptr = atoi(arg1);      length = xstrcmp(xptr, 0, arg2);      printf("XE[%d] - '%s' = %d\n",        xptr, arg2, length);      break;    case 'A':      printf("START: %04X\n", xebank);      printf("  END: %04X\n", XE_END);      break;    case '?':    default:      printf(        "[QTICF2RWDAZLE] arg...\n");      break;    }  }}