home *** CD-ROM | disk | FTP | other *** search
/ Boot Disc 8 / boot-disc-1997-04.iso / PDA_Soft / Psion / misc / Beamvl / BTEST.C < prev    next >
C/C++ Source or Header  |  1994-08-17  |  5KB  |  217 lines

  1. /*
  2. by Jason August 1994
  3. BEAMER by Jason 1993
  4. */
  5. #include <p_std.h>
  6. #include <p_sys.h>
  7. #include <p_file.h>
  8. #include <p_keyb.h>
  9. #include <p_graf.h>
  10. #include <p_screen.h>
  11. #include <p_serial.h>
  12. #include <epoc.h>
  13.  
  14. GLREF_C VOID *DatCommandPtr;
  15.  
  16. #define Version "V1.04F (16/08/94)"
  17. #define XBLEN 0x100
  18.  
  19. typedef struct
  20.     {
  21.     E_MESSAGE m;
  22.     UBYTE code;
  23.     UBYTE filler;
  24.     } Message;
  25.  
  26. GLREF_D VOID *winHandle;
  27.  
  28. LOCAL_D P_CON_KBREC kB;
  29. LOCAL_D VOID *sch;
  30. LOCAL_D WORD tsb;
  31. LOCAL_D INT xbufl;
  32. LOCAL_D INT echo;
  33. LOCAL_D INT sWidth;
  34. LOCAL_D TEXT xbuf[XBLEN];
  35. LOCAL_D INT txbufl;
  36. LOCAL_D TEXT txbuf[XBLEN];
  37. LOCAL_D TEXT fbuf[] =
  38. "0Brick quiz whangs jumpy veldt fox. The quick brown fox jumps over the lazy dog.";
  39.  
  40.  
  41. LOCAL_C VOID DeletePDD(VOID)
  42.     {
  43.     p_devdel("TTY.BEM",E_PDD);
  44.     }
  45.  
  46. LOCAL_C VOID exit(VOID)
  47.     {
  48.     p_close(sch);
  49.     DeletePDD();
  50.     p_exit(0);
  51.     }
  52.  
  53. LOCAL_C VOID panic(
  54. /*
  55. Output error message and terminate program.
  56. */
  57.     TEXT *Mess, /* Message to be output */
  58.     INT Err) /* Plib error number */
  59.     {
  60.     TEXT buf[256];
  61.  
  62.     if (Err)
  63.         {
  64.         p_errs(&buf[0],Err);
  65.         p_printf("*** PANIC *** %s failed - %s",Mess,&buf[0]);
  66.         }
  67.     else
  68.         p_printf("*** PANIC *** %s",Mess);
  69.     p_getch();
  70.     exit();
  71.     }
  72.  
  73. LOCAL_C VOID trans(
  74. /*
  75. Send anything if there is something to be sent.
  76. */
  77.     TEXT *buf,
  78.     INT len)
  79.     {
  80.     INT res;
  81.  
  82.     if (xbufl+len>XBLEN)
  83.         p_print("\177");
  84.     else
  85.         {
  86.         p_bcpy(xbuf+xbufl,buf,len);
  87.         xbufl+=len;
  88.         }
  89.     if (!txbufl)
  90.         {
  91.         if (!len && !xbufl)
  92.             tsb=E_FILE_PENDING;
  93.         else
  94.             {
  95.             p_bcpy(&txbuf[0],&xbuf[0],txbufl=xbufl);
  96.             if ((res=p_ioa5(sch,P_FWRITE,&tsb,&txbuf[0],&txbufl))<0)
  97.                 panic("Queue transmit",res);
  98.             xbufl=0;   
  99.             }
  100.         }
  101.     }
  102.  
  103. LOCAL_C VOID LoadPDD(VOID)
  104.     {
  105.     TEXT buf[P_FNAMESIZE];
  106.     INT ret;
  107.  
  108.     p_fparse("BEAMV1.PDD",DatCommandPtr,&buf[0],NULL);
  109.     ret=p_loadpdd(&buf[0]);
  110.     if (ret && ret!=E_FILE_EXIST)
  111.         panic("Loading BEAMV1.PDD",ret);
  112.     }
  113.  
  114. GLDEF_C VOID main(VOID)
  115. /*
  116. Main test program.
  117. */
  118.     {
  119.     INT res,rqlen,lcount;
  120.     WORD msb,ssb;
  121.     TEXT buf[0x40],chr[2];
  122.     P_RECTP pR;
  123.  
  124.     DeletePDD();
  125.     p_printf("Beamer Test %s (Jason) (C) Copyright Psion PLC 1994\r\n",Version);
  126.     p_printf("Press any key to continue, or Psion-Esc to exit");
  127.     p_getch();
  128.     LoadPDD();
  129.     p_minit(2,sizeof(Message)-sizeof(E_MESSAGE));
  130.     if ((res=p_iow3(winHandle,P_FSENSE,&pR))<0)
  131.          panic("Sensing the screen",res);
  132.     sWidth=pR.r.br.x;
  133.     if ((res=p_open(&sch,"TTY.BEM:X",-1))<0)
  134.         panic("Opening BEAMER",res);
  135.     p_ioc4(winHandle,P_FREAD,&msb,&kB);
  136.     rqlen=1;
  137.     p_ioc5(sch,P_FREAD,&ssb,&chr[0],&rqlen);
  138.     lcount=0;
  139.     echo=0;
  140.     tsb=E_FILE_PENDING;
  141.     xbufl=txbufl=0;
  142.     p_printf("Setup O.K.");
  143.     FOREVER
  144.         {
  145.         p_iowait(); /* Wait for something */
  146.         if (msb!=E_FILE_PENDING) /* Was it the keyboard */
  147.             {
  148.             if (msb<0)
  149.                 panic("Reading the keyboard",msb);
  150.             if (kB.keycode==0x1b)
  151.                 exit();
  152.             else if (kB.keycode==6)
  153.                 {
  154.                 trans(&fbuf[0],p_slen(&fbuf[0]));
  155.                 fbuf[0]++;
  156.                 if (fbuf[0]>'9')
  157.                     fbuf[0]='0';
  158.                 goto requekey;
  159.                 }
  160.             trans((TEXT *)&kB.keycode,1);
  161.     requekey:
  162.             p_ioc4(winHandle,P_FREAD,&msb,&kB); /* Que a message key read */
  163.             }
  164.         else if (ssb!=E_FILE_PENDING) /* Serial read ok */
  165.             {
  166.             if (ssb==E_FILE_CANCEL)
  167.                 goto reQue;
  168.             if (ssb<0)
  169.                 {
  170.                 p_errs(&buf[0],ssb);
  171.                 p_print("\r\nSerial read failed - %s\r\n",&buf[0]);
  172.                 goto reQue;
  173.                 }
  174.             chr[1]=0;
  175.             if (chr[0]==9) /* decode tabs */
  176.                 {
  177.                 lcount+=8;
  178.                 p_print("        ");
  179.                 }
  180.             else
  181.                 p_print("%s",&chr[0]);
  182.             if (p_isprint(chr[0]))      
  183.                 lcount++;
  184.             if (chr[0]==13)
  185.                 lcount=0;
  186.             if (lcount>sWidth-1)
  187.                 {
  188. #ifdef WIDTHCONTROL
  189.                 p_print("\n\r");
  190. #endif
  191.                 lcount=0;
  192.                 }
  193.             if (echo)
  194.                 trans(&chr[0],1);
  195.         reQue:
  196.             rqlen=1;
  197.             if ((res=p_ioa5(sch,P_FREAD,&ssb,&chr[0],&rqlen))<0)
  198.                 panic("Que serial read",res);
  199.             }
  200.         else if (tsb!=E_FILE_PENDING)
  201.             {
  202.             if (tsb<0)
  203.                 {
  204.                 if (tsb!=E_FILE_CANCEL)
  205.                     {
  206.                     p_errs(&buf[0],tsb);
  207.                     p_print("\r\nSerial write failed - %s\n",&buf[0]);
  208.                     }
  209.                 }
  210.             txbufl=0;
  211.             trans(0,0);
  212.             }
  213.         else
  214.             panic("Unknown signal",0);
  215.         }
  216.     }
  217.