continue (5千字)
// 卸载汉王手写系统void HW_Uninstall(void)
{
MemHandle memHandlePref, memHandle1, memHandle2;
void *procP;
HW_PREF* pPrefs;
UnloadRecognitionDB(); // 卸载汉字识别编码库
UnloadPhraseDB(); // 卸载多元词组联想库
if (!FtrGet('HW99', 10, (UInt32*)&memHandlePref)) {
pPrefs = (HW_PREF*) MemHandleLock(memHandlePref);
pPrefs->bInstallHW = false;
PrefSetAppPreferences('HW99', 6, 0, pPrefs, sizeof(HW_PREF), true);
}
FtrGet('HW99', 11, (UInt32*)&memHandle1);
FtrGet('HW99', 12, (UInt32*)&memHandle2);
MemHandleUnlock(memHandlePref);
MemHandleFree(memHandlePref);
MemHandleFree(memHandle1);
MemHandleFree(memHandle2);
FtrUnregister('HW99', 10);
FtrUnregister('HW99', 11);
FtrUnregister('HW99', 12);
if (!FtrGet('HW99', 13, (UInt32*)&procP))
SysSetTrapAddress(sysTrapSysHandleEvent, procP);
FtrUnregister('HW99', 13);
FtrUnregister('HW99', 24);
}
void GetSettings(void)
{
FormPtr frm;
MemHandle memHandlePref;
HW_PREF* pPref;
UInt16 select;
frm = FrmGetActiveForm(); // a3 = frm
if (!FtrGet('HW99', 10, (UInt32 *)&memHandlePref)) {
pPref = (HW_PREF*)MemHandleLock(memHandlePref); // a2
pPref->flags = 0;
if (FrmGetControlValue(frm, FrmGetObjectIndex(frm, 1008)))
pPref->flags |= HW_NUMERIC;
if (FrmGetControlValue(frm, FrmGetObjectIndex(frm, 1010)))
pPref->flags |= HW_ENGLISH;
if (FrmGetControlValue(frm, FrmGetObjectIndex(frm, 1012)))
pPref->flags |= HW_SYMBOL;
if (FrmGetControlValue(frm, FrmGetObjectIndex(frm, 1011)))
pPref->flags |= HW_SUBCOMMONCCHAR;
if (FrmGetControlValue(frm, FrmGetObjectIndex(frm, 1009)))
pPref->flags |= HW_COMMONCCHAR;
if (FrmGetControlValue(frm, FrmGetObjectIndex(frm, 1013)))
pPref->flags |= HW_TRA2SIMPLIFIED;
if (FrmGetControlValue(frm, FrmGetObjectIndex(frm, 1003)))
pPref->bSplitScreen = true;
else
pPref->bSplitScreen = false;
if (FrmGetControlValue(frm, FrmGetObjectIndex(frm, 1060)))
pPref->flags |= HW_HALF2FULL, pPref->bHalfToFull = true;
else
pPref->bHalfToFull = false;
if (FrmGetControlValue(frm, FrmGetObjectIndex(frm, 1061)))
pPref->flags |= HW_UPPER2LOWER, pPref->bUpperToLower = true;
else
pPref->bUpperToLower = false;
if (FrmGetControlValue(frm, FrmGetObjectIndex(frm, 1062)))
pPref->flags |= HW_LOWER2UPPER, pPref->bLowerToUpper = true;
else
pPref->bLowerToUpper = false;
select = FrmGetControlGroupSelection(frm, 3);
if (select == frmNoSelectedControl)
pPref->PenColor = 4;
else
pPref->PenColor = FrmGetObjectId(frm, select) + 7;
select = FrmGetControlGroupSelection(frm, 4);
pPref->RecogWaitTime = FrmGetObjectId(frm, select) - 19;
select = FrmGetControlGroupSelection(frm, 2);
pPref->PenThickness = FrmGetObjectId(frm, select) - 28;
MemHandleUnlock(memHandlePref);
}
}
UInt32 HWGBIMEMain(UInt16 cmd, void * UNUSED_PARAM(cmdPBP), UInt16 launchFlags)
{
UInt16 error, RegCode;
MemHandle memHandle;
HW_PREF* prefs;
UInt16 sz;
LocalID DbId;
error = RomVersionCompatible (0x3503000, launchFlags);
if (error) return (error);
switch (cmd)
{
case sysAppLaunchCmdNormalLaunch:
FrmGotoForm(HW_MainForm);
EventLoop();
GetSettings();
FrmCloseAllForms();
if (!FtrGet('HW99', 10, (UInt32 *)&memHandle)) {
prefs = (HW_PREF*)MemHandleLock(memHandle); // a3 = ptr
PrefSetAppPreferences('HW99', 6, 0, prefs, sizeof(HW_PREF), true/*in 'saved' database*/);
MemHandleUnlock(memHandle);
}
break;
case sysAppLaunchCmdSystemReset:
sz = sizeof(HW_PREF);
memHandle = MemHandleNew(sz);
prefs = (HW_PREF*)MemHandleLock(memHandle);
//////////////////////////////////////////////////////////////////////
// Preferences (including those stored in the "unsaved" database)
// survive a soft reset because they reside in the storage heap.
// Features are deleted upon a soft reset. For this reason, preferences
// are more appropriate for storing application state than feature are.
//
// The "saved" preferences database is backed up when a user performs
// the HotSync operation. The "unsaved" preferences database is not
// backed up by default. (The user can use a third-party tool to set the
// backup bit in the "unsaved" preferences database, which would cause it
// to be backed up.) Both the "saved" and the "unsaved" preferences
// reside in the storage heap and thus persist across soft resets.
// The only way that preferences are lost is if a hard reset is performed.
///////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////
// PrefGetAppPreferences() function returns the version number of the
// preference structure that it retrieved from the database.
///////////////////////////////////////////////////////////////////////
// If HW has already been run and its preferences indicates it's installed,
// then install HW system
if (PrefGetAppPreferences('HW99', 0, prefs, &sz, true) != noPreferenceFound &&
prefs->bInstallHW &&
!HW_Install() &&
(DbId = DmFindDatabase(0, "HWPenS-1")) != 0)
{
SysNotifyRegister(0, DbId, 'sync', 0, 0, 0);
}
MemHandleUnlock(memHandle);
MemHandleFree(memHandle);
break;
case sysAppLaunchCmdNotify:
if (!FtrGet('HW99', 10, (UInt32 *)&memHandle)) {
prefs = (HW_PREF*)MemHandleLock(memHandle);
RegCode = ChkReg();
if (RegCode == 99) {
prefs->bReged = 0xff; // 是注册用户
PrefSetAppPreferences('HW99', 6, 0, prefs, 32, true); // 写入"saved" preferences
}
MemHandleUnlock(memHandle);
}
break;
case HWDefinedCmd:
if (!FtrGet('HW99', 10, (UInt32 *)&memHandle)) {
prefs = (HW_PREF*)MemHandleLock(memHandle);
prefs->bHalfScrnInput = true;
_967c();
prefs->bHalfScrnInput = false;
MemHandleUnlock(memHandle);
}
break;
}
return 0;
}
UInt32 _PilotMain(UInt16 cmd, void * UNUSED_PARAM(cmdPBP), UInt16 launchFlags)
{
return HWGBIMEMain(cmd, cmdPBP, launchFlags);
}
