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

📄 sugarmemomain.c

📁 最好用的背单词软件, palm 平台, 如果能移植到别的平台
💻 C
📖 第 1 页 / 共 2 页
字号:
    	DmCloseDatabase(db);
    	return;		
    }
    		
    StrPrintF(newName, "%s%s", "SG_", name);
    CreateWordDB(newName);
    		
    localID = DmFindDatabase(0, newName);
    newdb = DmOpenDatabase(0, localID, dmModeReadWrite);
    		
	MemSet(&defaultNewRecord, sizeof(Header) + sizeof(LTStatus) + sizeof(MemorizingStatus), 0);	
	SetBitMacro(defaultNewRecord.header.allBits, RawQueue);
	defaultNewRecord.memoStatus.eFactor = 2.5;
	defaultNewRecord.memoStatus.difficulty = 40;
	
	for (index = WordFieldQuestion; index < WordFieldsCount; index++)
		defaultNewRecord.field[index] = NULL;

	for (index = 16; index < num; index++){
				
		record = defaultNewRecord;
				
		UnpackSuperMemoRecord(db, index, &record, &recordH, cache);
				
		NewWordRecord(newdb, &record, &newIndex);

		DmSetRecordInfo (newdb, newIndex, &attr, NULL);
				
		MemHandleUnlock(recordH);
			
	}
			
	DmCloseDatabase(newdb);
	
	MainFormLoadTable();
}

	
/*	
	FormType * form;
	FieldType * field;
	Char* p;
	Char newp[50];
	Char cache[100];
	
	DmOpenRef db, newdb;
	LocalID localID;
	UInt16 num, index, newIndex;
	UInt16 attr = dmUnfiledCategory;
	
	WordRecordType record;
	MemHandle recordH;
			
	form = FrmInitForm(InputDBNameForm);
	field = FrmGetObjectPtr(form, FrmGetObjectIndex(form, InputDBNameInputField));
	FldSetMaxChars(field, DBNameMaxLen);
	
    if (FrmDoDialog(form) == InputDBNameOKButton) {
 
	   	p = FldGetTextPtr(field);

    	if (p != NULL && StrLen(p)>0) {
    		
    		localID = DmFindDatabase(0, p);
    		
    		if (localID == 0) goto end;
    			
    		db = DmOpenDatabase(0, localID, dmModeReadWrite);
    			
    		num = DmNumRecordsInCategory(db, dmAllCategories);
    			
    		if (num < 17) {
    			DmCloseDatabase(db);
    			goto end; 			
    		}
    		
    		StrPrintF(newp, "%s%s", "new_", p);
    		CreateWordDB(newp);
    		
    		localID = DmFindDatabase(0, newp);
    		newdb = DmOpenDatabase(0, localID, dmModeReadWrite);
    		
			for (index = 16; index < num; index++){
				
				record = DefaultNewWordRecord;
				
				UnpackSuperMemoRecord(db, index, &record, &recordH, cache);
				
				NewWordRecord(newdb, &record, &newIndex);

				DmSetRecordInfo (newdb, newIndex, &attr, NULL);
				
				MemHandleUnlock(recordH);
			
			}
			
			DmCloseDatabase(newdb);
    	}
    }
    		
end:FrmDeleteForm(form);
    FrmUpdateForm(MainForm, frmRedrawUpdateCode);
*/


static Boolean MainFormDoCommand(UInt16 command)
{
    Boolean handled = false;
    FormType * frmP;

    switch (command)
    {
    case MainDatabaseSugarMemo:

        // Clear the menu status from the display
        MenuEraseStatus(0);

        // Display the About Box.
        frmP = FrmInitForm (AboutForm);
        FrmDoDialog (frmP);                    
        FrmDeleteForm (frmP);

        handled = true;
        break;
        
    
    case MainDatabaseMenuItem1200:	//新建
		DoCommandNewDatabase();
		handled = true;    		//
    	break;
    	
    case MainDatabaseMenuItem1201:	//重命名
    	DoCommandRenameDatabase();
    	handled = true;
    	break;
    
    case MainDatabaseMenuItem1202:	//删除
    	DoCommandDeleteDatabase();
    	handled = true;
    	break;
    	
    case MainDatabaseMenuItem1204: 	//Pref
    	MenuEraseStatus(0);	

    	if (GetSelectedDatabase()) FrmGotoForm(PrefsForm);
    	handled = true;
    	break;

	case MainAdvancedMenuItem1000:	//clear choice buffer
		MenuEraseStatus(0);
		
		ClearChoiceBuffer();
		handled = true;
		break;

	case MainAdvancedMenuItem1001:	//sort study list
		MenuEraseStatus(0);
		
		SortStudyList();
		handled = true;
		break;    

	case MainAdvancedMenuItem1002:	//rebuild test queue
		MenuEraseStatus(0);
		
		RebuildTestQueue();
		handled = true;
		break;

    case MainAdvancedMenuItem1004:  //Reset

		DoCommandResetDatabase();
    	handled = true;
    	break;
    }
    
    return handled;
}

//MainForm Handle Event
static Boolean MainFormHandleEvent(EventType * eventP)
{
    Boolean handled = false;
    FormType * frmP = FrmGetActiveForm();
	 
    switch (eventP->eType) 
        {
        case menuEvent:
            return MainFormDoCommand(eventP->data.menu.itemID);

        case frmOpenEvent:
            MainFormInit();
            FrmDrawForm(frmP);
            MainFormLoadTable();
            InitializeAllDatabase();
            handled = true;
            break;
            				            
        case ctlSelectEvent:
    		switch (eventP->data.ctlSelect.controlID){//switch (event->data.ctlSelect.controlID)
    			case MainReviewButton:
    				
    				if (GetSelectedDatabase()){
    					HeaderRecordIndex = TestingRecordIndex;
    					FrmGotoForm(Learn2Form);
    				}
    				handled = true;
					break;
				
				case MainBrowseButton:
					if (GetSelectedDatabase()){
						HeaderRecordIndex = HeaderIndexCounts;
						FrmGotoForm(BrowseForm);
					}
					handled = true;
					break;
				
				case MainLearnButton:
					if (GetSelectedDatabase()){
						HeaderRecordIndex = LearningRecordIndex;
						FrmGotoForm(Learn2Form);
					}
					handled = true;
					break;
				
				case MainHelpButton:
					FrmHelp(MainHelpString);
					handled = true;
					break;
				
				default:
					break;
			}
			break;
			
		case keyDownEvent:
			if (eventP->data.keyDown.chr == chrSmall_I){
				PeekDBVersion();
				handled = true;
			}
			
			if (eventP->data.keyDown.chr == chrPercentSign){
				DoCommandImport();
				handled = true;
			}
			break;

        default:
            break;
        }    
    
    return handled;
}

// FUNCTION: AppHandleEvent
static Boolean AppHandleEvent(EventType * eventP)
{
    UInt16 formId;
    FormType * frmP;
    Boolean handled = false;

    if (eventP->eType == frmLoadEvent)
    {
        // Load the form resource.
        formId = eventP->data.frmLoad.formID;
        frmP = FrmInitForm(formId);
        FrmSetActiveForm(frmP);

        // Set the event handler for the form.  The handler of the 
        // currently active form is called by FrmHandleEvent each 
        // time is receives an event.
        switch (formId)
        {
        case MainForm:
            	FrmSetEventHandler(frmP, MainFormHandleEvent);
            	break;
                    
        case BrowseForm:
        		FrmSetEventHandler(frmP, BrowseFormHandleEvent);
        		break;
        	        		
        case LearnForm:
        		FrmSetEventHandler(frmP, LearnFormHandleEvent);
        		break;
                
        case EditForm:
        		FrmSetEventHandler(frmP, EditFormHandleEvent);
        		break;
        
        case DetailForm:
        		FrmSetEventHandler(frmP, DetailFormHandleEvent);
        		break;
        
        case PhoneticForm:
        		FrmSetEventHandler(frmP, PhoneticFormHandleEvent);
        		break;
        		
        case PrefsForm:
        		FrmSetEventHandler(frmP, PrefsFormHandleEvent);
        		break;
        		
        case Learn2Form:
        		FrmSetEventHandler(frmP, Learn2FormHandleEvent);
        		break;
        		
        case FontForm:
        		FrmSetEventHandler(frmP, FontFormHandleEvent);
        		break;

        default:
            break;

        }
        return true;
    }
    
    return false;
}

// FUNCTION: AppEventLoop
//
// DESCRIPTION: This routine is the event loop for the application.

static void AppEventLoop(void)
{
    UInt16 error;
    EventType event;
    Boolean handled = false;

    do {
        // change timeout if you need periodic nilEvents
        EvtGetEvent(&event, 50); //evtWaitForever);
        
        handled = false;

        if (event.eType == keyDownEvent){
        		
        	if ((HeaderRecordIndex == LearningRecordIndex) || (HeaderRecordIndex == TestingRecordIndex)){
        	
        		if (TxtCharIsHardKey(event.data.keyDown.modifiers, event.data.keyDown.chr)){
        		
					handled = Learn2FormDoHardKey(&event);
					
				}
				
			}
        
        }
       
        if (!handled)
        {
        	if (! SysHandleEvent(&event))
        	{

            	if (! MenuHandleEvent(0, &event, &error))
            	{
                	if (! AppHandleEvent(&event))
                	{
                    	FrmDispatchEvent(&event);
                	}
            	}
        	}
        }
    } while (event.eType != appStopEvent);
}

// FUNCTION: AppStart
//
// DESCRIPTION:  Get the current application's preferences.
//
// RETURNED:
//     errNone - if nothing went wrong

static Err AppStart(void)
{
    UInt16 prefsSize;

    // Read the saved preferences / saved-state information.
    prefsSize = sizeof(SugarMemoPreferenceType);
    if (PrefGetAppPreferences(
        appFileCreator, appPrefID, &g_prefs, &prefsSize, true) != 
        noPreferenceFound)
    {
        // FIXME: setup g_prefs with default values
    }
        
    phoneticSmallFontH = DmGetResource('NFNT', 12345);
    phoneticSmallFontP = (FontType*) MemHandleLock(phoneticSmallFontH);
    FntDefineFont(PhoneticSmallFont, phoneticSmallFontP);

    phoneticLargeFontH = DmGetResource('NFNT', 12346);
    phoneticLargeFontP = (FontType*) MemHandleLock(phoneticLargeFontH);
    FntDefineFont(PhoneticLargeFont, phoneticLargeFontP);

    phoneticHugeFontH = DmGetResource('NFNT', 12347);
    phoneticHugeFontP = (FontType*) MemHandleLock(phoneticHugeFontH);
    FntDefineFont(PhoneticHugeFont, phoneticHugeFontP);
    
    OS5_16_FontH = DmGetResource('NFNT', 12348);
    OS5_16_FontP = (FontType*) MemHandleLock(OS5_16_FontH);
    FntDefineFont(OS5_16_Font, OS5_16_FontP);
    	
    return errNone;
}

// FUNCTION: AppStop
static void AppStop(void)
{
	
    // Write the saved preferences / saved-state information.  This 
    // data will be saved during a HotSync backup.
    PrefSetAppPreferences(
        appFileCreator, appPrefID, appPrefVersionNum, 
        &g_prefs, sizeof(SugarMemoPreferenceType), true);
    
    MemHandleUnlock(phoneticSmallFontH);
    DmReleaseResource(phoneticSmallFontH);    

    MemHandleUnlock(phoneticLargeFontH);
    DmReleaseResource(phoneticLargeFontH);    
    
    MemHandleUnlock(phoneticHugeFontH);
    DmReleaseResource(phoneticHugeFontH);
    
    MemHandleUnlock(OS5_16_FontH);
    DmReleaseResource(OS5_16_FontH);

    // Close all the open forms.
    FrmCloseAllForms();    
}

// all code from here to end of file should use no global variables
#pragma warn_a5_access on

// FUNCTION: RomVersionCompatible
static Err RomVersionCompatible(UInt32 requiredVersion, UInt16 launchFlags)
{
    UInt32 romVersion;

    // See if we're on in minimum required version of the ROM or later.
    FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion);
    if (romVersion < requiredVersion)
    {
        if ((launchFlags & 
            (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp)) ==
            (sysAppLaunchFlagNewGlobals | sysAppLaunchFlagUIApp))
        {
            FrmAlert (RomIncompatibleAlert);

            // Palm OS 1.0 will continuously relaunch this app unless 
            // we switch to another safe one.
            if (romVersion <= kPalmOS10Version)
            {
                AppLaunchWithCommand(
                    sysFileCDefaultApp, 
                    sysAppLaunchCmdNormalLaunch, NULL);
            }
        }

        return sysErrRomIncompatible;
    }

    return errNone;
}

// FUNCTION: SugarMemoPalmMain
static UInt32 SugarMemoPalmMain(
    UInt16 cmd, 
    MemPtr /*cmdPBP*/, 
    UInt16 launchFlags)
{
    Err error;

    error = RomVersionCompatible (ourMinVersion, launchFlags);
    if (error) return (error);

    switch (cmd)
    {
    case sysAppLaunchCmdNormalLaunch:
        error = AppStart();
        if (error) 
            return error;

        // start application by opening the main form
        // and then entering the main event loop
        FrmGotoForm(MainForm);
        AppEventLoop();
        
        AppStop();
        break;

    default:
        break;
    }

    return errNone;
}

// FUNCTION: PilotMain
UInt32 PilotMain(UInt16 cmd, MemPtr cmdPBP, UInt16 launchFlags)
{
    return SugarMemoPalmMain(cmd, cmdPBP, launchFlags);
}

// turn a5 warning off to prevent it being set off by C++
// static initializer code generation
#pragma warn_a5_access reset

⌨️ 快捷键说明

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