home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
linuxmafia.com 2016
/
linuxmafia.com.tar
/
linuxmafia.com
/
pub
/
palmos
/
linkmaster-src-1.0.4.tar.gz
/
linkmaster-src-1.0.4.tar
/
linkmaster-1.0.4
/
proxy
/
al
/
proxyapp.c
< prev
next >
Wrap
C/C++ Source or Header
|
2000-09-05
|
5KB
|
238 lines
/* Main code for Proxy App Launcher */
#include <Pilot.h>
#include "callback.h"
#include "linkaware.h"
#include "proxyappRsc.h"
typedef struct {
DWord creator;
DWord app_creator;
} LaunchLinkInfoType;
typedef LaunchLinkInfoType* LaunchLinkInfoPtr;
static Handle happlist;
static SysDBListItemType* papplist;
static void AppDrawFunc(UInt index, RectanglePtr bounds, CharPtr* data)
{
SysDBListItemType* item;
CALLBACK_PROLOGUE;
item=papplist+index;
WinDrawChars(item->name, StrLen(item->name),
bounds->topLeft.x, bounds->topLeft.y);
CALLBACK_EPILOGUE;
}
static void MainFormInit()
{
FormPtr frm;
Word appcount;
ListPtr list;
frm=FrmGetActiveForm();
if (!SysCreateDataBaseList('appl', 0, &appcount, &happlist, true))
ErrDisplay("Error getting list of applications");
papplist=MemHandleLock((VoidHand)happlist);
list=FrmGetObjectPtr(frm, FrmGetObjectIndex(frm, MainList));
LstSetListChoices(list, NULL, appcount);
LstSetDrawFunction(list, AppDrawFunc);
LstSetSelection(list, 0);
}
static void CleanUp()
{
MemHandleUnlock((VoidHand)happlist);
MemHandleFree((VoidHand)happlist);
}
LaunchLinkInfoPtr LaunchLinkNew(DWord creator, CharPtr title)
{
LaunchLinkInfoPtr linkinfo;
if (title) {
/* title is truncated to 32 chars or at the first \n */
int titlelen=32;
int tmp;
tmp=StrLen(title);
if (tmp<titlelen) titlelen=tmp;
tmp=StrChr(title, '\n')-title;
if ((tmp>0)&&(tmp<titlelen)) titlelen=tmp;
linkinfo=MemPtrNew(65+titlelen);
MemSet(linkinfo, 65+titlelen, 0);
ErrFatalDisplayIf(!linkinfo, "Not enough memory");
StrNCopy(((CharPtr)linkinfo)+64, title, titlelen);
((CharPtr)linkinfo)[64+titlelen]=0;
} else {
linkinfo=MemPtrNew(64);
MemSet(linkinfo, 64, 0);
};
linkinfo->creator='LPal';
linkinfo->app_creator=creator;
return linkinfo;
}
static void Publish()
{
DWord creator;
char title[32];
Word selection;
ListPtr list;
FormPtr frm;
/* get selection */
frm=FrmGetActiveForm();
list=FrmGetObjectPtr(frm, FrmGetObjectIndex(frm, MainList));
selection=LstGetSelection(list);
if (selection==-1)
return;
/* get title */
StrCopy(title, "");
StrNCopy(title, papplist[selection].name, 31);
creator=papplist[selection].creator;
LinkPublish((LinkInfoPtr)LaunchLinkNew(creator, title));
}
static Boolean MainFormHandleEvent (EventPtr e)
{
Boolean handled = false;
FormPtr frm;
CALLBACK_PROLOGUE
switch (e->eType) {
case frmOpenEvent:
MainFormInit();
frm = FrmGetActiveForm();
FrmDrawForm(frm);
handled = true;
break;
case frmCloseEvent:
CleanUp();
break;
case menuEvent:
MenuEraseStatus(NULL);
switch(e->data.menu.itemID) {
}
handled = true;
break;
case ctlSelectEvent:
switch(e->data.ctlSelect.controlID) {
case MainPublishButton:
Publish();
handled=true;
break;
}
break;
default:
break;
}
CALLBACK_EPILOGUE
return handled;
}
static Boolean ApplicationHandleEvent(EventPtr e)
{
FormPtr frm;
Word formId;
Boolean handled = false;
if (e->eType == frmLoadEvent) {
formId = e->data.frmLoad.formID;
frm = FrmInitForm(formId);
FrmSetActiveForm(frm);
switch(formId) {
case MainForm:
FrmSetEventHandler(frm, MainFormHandleEvent);
break;
}
handled = true;
}
return handled;
}
/* Get preferences, open (or create) app database */
static Word StartApplication(void)
{
FrmGotoForm(MainForm);
return 0;
}
/* Save preferences, close forms, close app database */
static void StopApplication(void)
{
FrmSaveAllForms();
FrmCloseAllForms();
}
/* The main event loop */
static void EventLoop(void)
{
Word err;
EventType e;
do {
EvtGetEvent(&e, evtWaitForever);
if (! SysHandleEvent (&e))
if (! MenuHandleEvent (NULL, &e, &err))
if (! ApplicationHandleEvent (&e))
FrmDispatchEvent (&e);
} while (e.eType != appStopEvent);
}
/* Main entry point; it is unlikely you will need to change this except to
handle other launch command codes */
DWord PilotMain(Word cmd, Ptr cmdPBP, Word launchFlags)
{
Word err;
switch (cmd) {
case sysAppLaunchCmdNormalLaunch:
case linkAppLaunchRequestLink:
err = StartApplication();
if (err) return err;
EventLoop();
StopApplication();
break;
case linkAppLaunchFollowLinkSubCall: {
LaunchLinkInfoPtr linkinfo=(LaunchLinkInfoPtr)cmdPBP;
DmSearchStateType searchstate;
UInt cardno;
LocalID dbid;
DmGetNextDatabaseByTypeCreator(true, &searchstate,
'appl', linkinfo->app_creator,
true, &cardno, &dbid);
SysUIAppSwitch(cardno, dbid, sysAppLaunchCmdNormalLaunch, NULL);
break;
};
default:
return sysErrParamErr;
};
return 0;
}