⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hello.c

📁 PALM程序设计入门
💻 C
字号:
#include <Pilot.h>
#include <SerialMgr.h>
#include <SysEvtMgr.h>
#include "hello.h"


UInt gSerialRefNum;
char gSerialBuffer[900];  // should be more than enough for one second
                          // of data -- 10 lines @ 80 chars per line

static Boolean HelloFormEventHandler(EventPtr event)
{
	Boolean handled = false;

  
	switch (event->eType)
   {
		case frmOpenEvent:

			FrmDrawForm(FrmGetActiveForm());
         handled = true;
			break;

      case ctlSelectEvent:
         if (event->data.ctlSelect.controlID==cmdButton1)
         {
            char *temp="abc";
            Err err;

            SerSend(gSerialRefNum, temp, sizeof(temp), &err);
         }
         handled = true;
			break;
                 
      case nilEvent:

         // we loop until an event occurs, or until
         // we update the display
         do
         {
            ULong numBytesPending;

            char  theData[165];  // two lines; 80 chars with <CR><LF>
                                 // + one for null byte
            Err err;

            err = SerReceiveWait(gSerialRefNum, sizeof(theData)-1, 2);
            if (err == serErrLineErr)
            {
               SerReceiveFlush(gSerialRefNum, 1);  // will clear the error
               continue;          // go back and try reading again
            }
            if (err !=serErrTimeOut)
            {
               ErrFatalDisplayIf (err != 0, "SerReceiveWait");
            }

            err = SerReceiveCheck(gSerialRefNum, &numBytesPending);
            if (err == serErrLineErr)
            {
               SerReceiveFlush (gSerialRefNum, 1);  // will clear the error
               continue;      // go back and try reading again
            }
            ErrFatalDisplayIf (err != 0, "SerReceiveCheckFail");

 
            if (numBytesPending > 0)
            {
               ULong numBytes;
         

               // read however many bytes are waiting
               numBytes = SerReceive(gSerialRefNum, theData, numBytesPending, 0, 
                                       &err);
               if (err == serErrLineErr)
               {
                  SerReceiveFlush (gSerialRefNum, 1);  // will clear the error
                  continue;    // go back and try reading again
               }
               theData[numBytes] = '\0';  // null-terminate theData

               {
                    FormPtr frm = FrmGetActiveForm();  

                    FrmHideObject(frm,FrmGetObjectIndex(frm,cmdLabel));
                    FrmCopyLabel(frm, cmdLabel, " ");
                    FrmShowObject(frm,FrmGetObjectIndex(frm,cmdLabel));

                    FrmCopyLabel(frm, cmdLabel, theData); 
               }

              
            } 

         }
         while (!EvtSysEventAvail(false));
         handled=true;
         break;

	}

	return (handled);
}

static Boolean ApplicationHandleEvent(EventPtr event)
{
	FormPtr form;
	Word    formID;
	Boolean handled = false;

	if (event->eType == frmLoadEvent) {
		formID = event->data.frmLoad.formID;
		form   = FrmInitForm(formID);

		FrmSetActiveForm(form);

		switch (formID)  {
			case formID_hello:
            FrmSetEventHandler(form, HelloFormEventHandler);
				break;
		}

		handled = true;
	}

	return (handled);
}


// UInt gSerialRefNum;
// char gSerialBuffer[900];  // should be more than enough for one second
                          // of data -- 10 lines @ 80 chars per line

static Boolean StartApplication()
{
   Err err;

   err = SysLibFind ("Serial Library", &gSerialRefNum);
   ErrNonFatalDisplayIf(err !=0, "Can't find serial library");

   err = SerOpen(gSerialRefNum, 0, 9600);
   if (err != 0)
   {
      if (err == serErrAlreadyOpen)
      {
         FrmAlert(SerialInUseAlert);
         SerClose(gSerialRefNum);
      }
      else
      {
        FrmAlert(CantopenserialAlert);
      }

      FrmGotoForm(formID_hello);
      return false;
   }
   
   err = SerSetReceiveBuffer(gSerialRefNum, gSerialBuffer, 
                              sizeof(gSerialBuffer));
   FrmAlert(SerialOK);
   FrmGotoForm(formID_hello);
   return true;


}




static void EventLoop(void)
{
	short			err;
	int			formID;
	FormPtr		form;
	EventType		event;

	do {
		EvtGetEvent(&event, 1);

		if (SysHandleEvent(&event)) continue;

		if (MenuHandleEvent(NULL, &event, &err))	continue;

		if (ApplicationHandleEvent(&event)) continue;

		FrmDispatchEvent(&event);

	} while (event.eType != appStopEvent);
}

static void StopApplication(void)
{ 
   // restore the default buffer before closing the serial port
   SerSetReceiveBuffer(gSerialRefNum, NULL, 0);
   SerClose(gSerialRefNum);
	FrmCloseAllForms();
}

DWord PilotMain (Word cmd, Ptr cmdPBP, Word launchFlags)
{
	if (cmd ==  sysAppLaunchCmdNormalLaunch) {
		StartApplication();
		EventLoop();
		StopApplication();
	}

	return (0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -