コード例 #1
0
ファイル: draw.c プロジェクト: docwhat/cwimp
void DrawKeepBit(Byte die)
{

    if (stor.cube[die].keep && stor.cube[die].value != 0) {
        SetFieldTextFromStr(fieldKeepBit[die],
                            CheckSymbol);
    } else {
        SetFieldTextFromStr(fieldKeepBit[die],
                            BlankSymbol);
    }
}
コード例 #2
0
ファイル: draw.c プロジェクト: docwhat/cwimp
void DrawKeepBit(Int die)
{
  
  if ( stor.YMNWTBYM ||
       (stor.cube[die].keep && stor.cube[die].value > 0) ){
	SetFieldTextFromStr(fieldKeepBit[die],
						CheckSymbol);
  } else {
	SetFieldTextFromStr(fieldKeepBit[die],
						BlankSymbol);
  }
}
コード例 #3
0
ファイル: draw.c プロジェクト: docwhat/cwimp
Int DialogChooseTwo( CharPtr fText, CharPtr bOne, CharPtr bTwo ) {
    FormPtr prevForm, frm;
    Word hitButton;

    // Save previous form
    prevForm = FrmGetActiveForm();
    // Init new form
    frm = FrmInitForm( frmChooseTwo );

    // Set it
    FrmSetActiveForm(frm);
    FrmDrawForm(frm);

    // Fill it...
    CtlSetLabel( GetObjectPtr(btnChooseTwo1), bOne );
    CtlSetLabel( GetObjectPtr(btnChooseTwo2), bTwo );
    SetFieldTextFromStr( fldChooseTwo, fText );

    // Set the handler
    // FrmSetEventHandler(frm, DialogNewGameHandleEvent);

    hitButton = FrmDoDialog(frm);

    // Delete the form, we're not using it
    FrmDeleteForm(frm);

    // Restore previous form.
    if (prevForm) {
        FrmSetActiveForm(prevForm);
    }

    if( hitButton == btnChooseTwo1 ) return 1;
    if( hitButton == btnChooseTwo2 ) return 2;
    return ( -1 );
}
コード例 #4
0
ファイル: draw.c プロジェクト: docwhat/cwimp
void DrawState()
{
    Short x;
    Char msg[MaxName+4];

    DrawCurrScore();

    // Fill the fields
    x = 0;
    if ( stor.currplayer > -1 ) {
        // If there is a game on, fill in the names and scores
        for ( ; x < stor.numplayers ; x++ ) {
            StrPrintF( msg, "%d. %s", x+1, stor.player[x].name, NULL );
            SetFieldTextFromStr( fieldNamePlayer[x], msg );
            DrawPlayerScore( x );
        }
    }
    // Clears the rest if the fields
    for ( ; x < MaxPlayers ; x++ ) {
        ClearFieldText( fieldNamePlayer[x] );
        ClearFieldText( fieldScorePlayer[x] );
        ClearFieldText( fieldMarkPlayer[x] );
    }

    for ( x = 0 ; x < NumCubes ; x++ ) {
        DrawCube(x);
        DrawKeepBit(x);
    }

    DrawStayButton();
    DrawRollButton();
    DrawStatus();
    DrawTopStatusButton();
}
コード例 #5
0
ファイル: draw.c プロジェクト: docwhat/cwimp
void ClearKeepBits(void)
{
  Byte x;
  for( x = 0; x < NumCubes ; x++ ) {
    SetFieldTextFromStr( fieldKeepBit[x],
                         BlankSymbol);
  }
}
コード例 #6
0
ファイル: dialog.c プロジェクト: docwhat/cwimp
static void NewGameSetPlayerName( UInt16 field, Int16 player)
{
    if( tmppref[player].type == PlayerNone )
    {
        ClearFieldText( field );
        return;
    }

    if( tmppref[player].type == PlayerHuman )
    {
        SetFieldTextFromStr( field, tmppref[player].hname );
        return;
    }

    SetFieldTextFromStr( field, tmppref[player].aname );
    return;
}
コード例 #7
0
ファイル: draw.c プロジェクト: docwhat/cwimp
void DrawCurrScore()
{
  Char msg[6];

  if ( stor.flash && stor.scorethisroll == 0 ) {
	StrCopy( msg, NotApplicableString );
  } else {
	StrIToA( msg, stor.scorethisroll );
  }
  SetFieldTextFromStr(scoreRoll,  msg);

  StrIToA( msg, stor.scorethisturn );
  SetFieldTextFromStr(scoreTurn,  msg);

  StrIToA( msg, stor.currscore );
  SetFieldTextFromStr(scoreTot,  msg);

}
コード例 #8
0
ファイル: draw.c プロジェクト: docwhat/cwimp
void DrawPlayerScore(Short player) {
  Char msg[MaxName];

  StrIToA( msg, stor.player[player].score );
  SetFieldTextFromStr( fieldScorePlayer[player], msg );

  if ( stor.player[player].lost ) {
    CrossPlayer(player);
    return;
  }

  if ( player == stor.currplayer ) {
    InvertPlayer(player);
    return;
  }

  if ( player == stor.leader ) {
    SetFieldTextFromStr( fieldMarkPlayer[player], LeadSymbol );
    return;
  }

  ClearFieldText( fieldMarkPlayer[player] );
}
コード例 #9
0
ファイル: dialog.c プロジェクト: docwhat/cwimp
DieType DialogChooseThree( Char* fText, DieType c1, DieType c2, DieType c3 )
{

    FormPtr prevForm, frm;
    UInt16 hitButton;

    if( IsAI( GetCurrPlayer() ) ) {
        return AIChooseThree( c1, c2, c3 );
    }

    // Save previous form
    prevForm = FrmGetActiveForm();
    // Init new form
    frm = FrmInitForm( frmChooseThree );

    // Set it
    FrmSetActiveForm(frm);
    FrmDrawForm(frm);

    // Fill it...
    CtlSetLabel( GetObjectPtr(btnChooseThree1), val2name[c1] );
    CtlSetLabel( GetObjectPtr(btnChooseThree2), val2name[c2] );
    CtlSetLabel( GetObjectPtr(btnChooseThree3), val2name[c3] );
    SetFieldTextFromStr( fldChooseThree, fText );

    // Set the handler
    // FrmSetEventHandler(frm, DialogNewGameHandleEvent);

    hitButton = FrmDoDialog(frm);

    // Delete the form, we're not using it
    FrmDeleteForm(frm);

    // Restore previous form.
    if (prevForm) {
        FrmSetActiveForm(prevForm);
    }

    if( hitButton == btnChooseThree1 ) return c1;
    if( hitButton == btnChooseThree2 ) return c2;
    if( hitButton == btnChooseThree3 ) return c3;
    return c1;
}
コード例 #10
0
ファイル: editor_form.c プロジェクト: asashnov/palmano
static void
FormOpen (void)
{
  FormGadgetType *notelistGadget
    = GetObjectFromActiveForm (ID_EditorNoteListGadget);

  FormGadgetType *midekeysGadget
    = GetObjectFromActiveForm (ID_EditorMidiKeysGadget);

  notelist_init(&notelist, notelistGadget);
  midikeys_init(&midikeys, midekeysGadget);

  SetFieldTextFromStr (ID_EditorNameField, &EditorMidi.name[0]);

  if (EditorMidi.dbID != 0)
   LoadSMF(EditorMidi, &notelist);
  
  SeekScrollBar(SCL_BEGIN);

  FormUpdate();
}
コード例 #11
0
ファイル: draw.c プロジェクト: docwhat/cwimp
Boolean DialogGetNames() {
    FormPtr prevForm, frm;
    Word hitButton;
    Boolean retVal = false;
    CharPtr text;
    Int i;
    FieldPtr fp;
    VoidPtr vPtr;
    Word oIdx;

    // Save previous form
    prevForm = FrmGetActiveForm();
    // Init new form
    frm = FrmInitForm( frmGetNames);

    // Set it
    FrmSetActiveForm(frm);

    // Set Controls
    for( i = stor.tmpplayers ; i<MaxPlayers ; i++ ) {
        fp = GetObjectPtr( fieldGetNamesPlayer[i] );
        FldSetUsable ( fp, false );
        FldEraseField( fp );
        ShowControl( fieldGetNamesLabel[i], 0 );
    }

    FrmDrawForm(frm);

    for( i=0; i < stor.tmpplayers ; i++ ) {
        SetFieldTextFromStr( fieldGetNamesPlayer[i], stor.player[i].name );
    }
    FrmSetFocus( frm, FrmGetObjectIndex(frm, fieldGetNamesPlayer[0]) );


    // Set the handler
    // FrmSetEventHandler(frm, DialogNewGameHandleEvent);

    hitButton = FrmDoDialog(frm);

    // Get Controls
    if ( hitButton == btn_OK_frmGetNames ) {

        for( i=0 ; i<stor.tmpplayers ; i++ ) {
            oIdx = FrmGetObjectIndex( frm, fieldGetNamesPlayer[i]);
            vPtr = FrmGetObjectPtr( frm, oIdx );
            text = FldGetTextPtr( vPtr );
            StrCopy( stor.player[i].name, text );

        }

        retVal = true;
    }


    // Delete the form, we're not using it
    FrmDeleteForm(frm);

    // Restore previous form.
    if (prevForm) {
        FrmSetActiveForm(prevForm);
    }

    return retVal;
}
コード例 #12
0
ファイル: draw.c プロジェクト: docwhat/cwimp
void DialogOK ( Word frmname, Short p1, Short p2 ) {
    FormPtr prevForm, frm;
    Word hitButton;
    Char msg[(MaxName * 2) + 128];
    Word fieldname = 0;

    switch ( frmname ) {
    case frmNextPlayer:
        fieldname = fldNextPlayer;
        if( (stor.numplayers + stor.numcomputers) > 1 ) {
            StrPrintF( msg, NextPlayerString,
                       stor.player[p1].name,
                       stor.player[p2].name,
                       NULL);
        } else {
            StrPrintF( msg, "%s", NextSoloPlayerString, NULL );
        }
        break;

    case frmSuspend:
        if( (stor.numplayers + stor.numcomputers) == 1 ) {
            return;
        }
        fieldname = fldSuspend;
        StrPrintF( msg, SuspendString,
                   stor.player[p1].name,
                   stor.player[p2].name,
                   NULL);
        break;


    case frmLost:
        fieldname = fldLost;
        StrPrintF( msg, LostString, stor.player[p1].name, NULL );
        break;

    case frmLeader:
        fieldname = fldLeader;
        StrPrintF( msg, LeaderString, stor.player[p1].name, NULL );
        break;

    case frmWinner:
        fieldname = fldWinner;
        StrPrintF( msg, WinnerString, stor.player[p1].name, NULL );
        break;

    case frmNobodyWon:
        fieldname = fldNobodyWon;
        StrPrintF( msg, NobodyWonString, NULL );
        break;

    case frmBump:
        fieldname = fldBump;
        StrPrintF( msg, BumpString,
                   stor.player[p2].name,
                   stor.player[p1].name,
                   stor.player[p2].score,
                   stor.player[p1].score,
                   NULL );
        break;

    case frmSampler:
        fieldname = fldSampler;
        StrPrintF( msg, SamplerString, stor.player[p1].name, NULL );
        break;


    case frmTrainWreck:
        fieldname = fldTrainWreck;
        StrPrintF( msg, TrainWreckString,
                   stor.player[p1].name,
                   stor.player[p1].TWcount,
                   stor.nTrainWrecks,
                   NULL );
        break;

    default:
        ErrDisplay( "DialogOK: fall through: Programmer sucks." );
        return;
    }

    // Save previous form
    prevForm = FrmGetActiveForm();
    // Init new form
    frm = FrmInitForm( frmname );

    // Set it
    FrmSetActiveForm(frm);
    FrmDrawForm(frm);


    // Fill it...
    ErrFatalDisplayIf( fieldname == 0,
                       "DialogOK: ZeroField: Programmer sucks." );
    SetFieldTextFromStr( fieldname, msg );

    // Set the handler
    // FrmSetEventHandler(frm, DialogNewGameHandleEvent);

    hitButton = FrmDoDialog(frm);

    // Delete the form, we're not using it
    FrmDeleteForm(frm);

    // Restore previous form.
    if (prevForm) {
        FrmSetActiveForm(prevForm);
    }

    // We don't care about which button, there is only one.
}
コード例 #13
0
ファイル: draw.c プロジェクト: docwhat/cwimp
void DialogVarients() {
    FormPtr prevForm, frm;
    Word hitButton;
    Word fldIndex;
    Char tmpString[3];
    CharPtr text;

    // Save previous form
    prevForm = FrmGetActiveForm();
    // Init new form
    frm = FrmInitForm( frmVariants );

    // Set it
    FrmSetActiveForm(frm);
    FrmDrawForm(frm);

    // Set Controls
    CtlSetValue( GetObjectPtr(check_Bump     ), stor.flags & flag_Bump      );
    CtlSetValue( GetObjectPtr(check_Eclipse  ), stor.flags & flag_Eclipse   );
    CtlSetValue( GetObjectPtr(check_Sampler  ), stor.flags & flag_Sampler   );
    CtlSetValue( GetObjectPtr(check_nTW      ), stor.flags & flag_nTW       );
    CtlSetValue( GetObjectPtr(check_FullHouse), stor.flags & flag_FullHouse );
    CtlSetValue( GetObjectPtr(check_Suspend  ), stor.flags & flag_Suspend   );

    // Fill in WinScore with previous value.
    StrIToA( tmpString, stor.nTrainWrecks );
    SetFieldTextFromStr( fldnTrainWrecks, tmpString );

    StrIToA( tmpString, stor.nSuspend );
    SetFieldTextFromStr( fldnSuspend, tmpString );

    // Set the focus to this field so the user can just start typing.
    fldIndex =  FrmGetObjectIndex(frm, fldnTrainWrecks);
    FrmSetFocus( frm, fldIndex );

    // Set the handler
    FrmSetEventHandler(frm, DialogVariantsHandleEvent);

    hitButton = FrmDoDialog(frm);

    // Get Controls
    text = FldGetTextPtr( FrmGetObjectPtr( frm, fldIndex ) );
    if( text != NULL ) {
        stor.nTrainWrecks = StrAToI( text );
    } else {
        stor.nTrainWrecks = 3;
    }

    fldIndex =  FrmGetObjectIndex(frm, fldnSuspend);
    text = FldGetTextPtr( FrmGetObjectPtr( frm, fldIndex ) );
    if( text != NULL ) {
        stor.nSuspend = StrAToI( text );
    } else {
        stor.nSuspend = 10;
    }

    // Delete the form, we're not using it
    FrmDeleteForm(frm);

    // Restore previous form.
    if (prevForm) {
        FrmSetActiveForm(prevForm);
    }

}
コード例 #14
0
ファイル: s2lconvert.c プロジェクト: jmjeong/happydays.palm
Boolean Ln2SlFormHandleEvent(EventPtr e)
{
    Boolean handled = false;
    DateType dt = {0, 0};
    FormPtr frm = FrmGetFormPtr(Ln2SlForm);

    switch (e->eType) {
    case frmOpenEvent:
        if(gbVgaExists)
       		VgaFormModify(frm, vgaFormModify160To240);

        DateSecondsToDate(TimGetSeconds(), &dt);
        DateToAsciiLong(dt.month, dt.day, dt.year + 1904,
					gPrefdfmts, gAppErrStr);
        SetFieldTextFromStr(Ln2SlFormInput, gAppErrStr);

        FrmDrawForm(frm);
        handled = true;
        break;

    case ctlSelectEvent:
        switch(e->data.ctlSelect.controlID) {
        case Ln2SlFormOk:
            FrmReturnToForm(0);

            handled = true;
            break;

        case Ln2SlFormConvert:
        {
            HappyDaysFlag dummy;
            Int16 year, month, day;
            Char* input;
            int ret;
            
            input = FldGetTextPtr(GetObjectPointer(frm, Ln2SlFormInput));

            if ((ret = AnalysisHappyDays(input, &dummy,
                                         &year, &month, &day))) {
                int syear, smonth, sday;
                int leapyes
                    = CtlGetValue(GetObjectPointer(frm, Ln2SlFormInputLeap));

                ret = lunarL2S(lunarRefNum, year, month, day, leapyes, &syear, &smonth, &sday);
                if (ret == errNone) {
                    Char temp[15];
                    SysCopyStringResource(temp, DayOfWeek(smonth, sday, syear) + SunString);

                    DateToAsciiLong(smonth, sday, syear, gPrefdfmts, gAppErrStr);
                    StrNCat(gAppErrStr, " [", AppErrStrLen);
                    StrNCat(gAppErrStr, temp, AppErrStrLen);
                    StrNCat(gAppErrStr, "]", AppErrStrLen);

                    FldDrawField(SetFieldTextFromStr(Ln2SlFormResult, gAppErrStr));
                }
                else DisplayInvalidDateErrorString(Ln2SlFormResult);
            }
            else {
                DisplayInvalidDateErrorString(Ln2SlFormResult);
            }
            
            handled = true;
            break;
        }
        
        default:
            break;
                
        }
        break;

    case menuEvent:
        handled = TextMenuHandleEvent(e->data.menu.itemID, Ln2SlFormInput);
        break;

    default:
        break;
    }

    return handled;
}
コード例 #15
0
ファイル: dialog.c プロジェクト: docwhat/cwimp
static Boolean DialogNewGameHandleEvent (EventPtr e)
{
    Boolean handled = false;
    Char tmpString[5];
    FormPtr frm;
    UInt8 p;

    switch (e->eType) {
    case frmOpenEvent:
        frm = FrmGetActiveForm();
        FrmDrawForm(frm);
        handled = true;
        break;

    case penUpEvent:
        if( e->screenX > NewGameUser &&
                e->screenX < (NewGameUser + NewGameUserSize) &&
                e->screenY > NewGameTop &&
                e->screenY < (NewGameTop + 12 * MaxPlayers) )
        {
            p = (UInt8) ( ( e->screenY - NewGameTop ) / 12 );
            NewGameToggleType( p );
            if( tmppref[p].type != PlayerNone )
            {
                SetFocus( fldNGname0 + p );
            }
            handled = true;
        }
        break;

    case ctlSelectEvent:
        switch(e->data.ctlSelect.controlID)
        {

        case btn_Variants_frmNewGame:
            DialogVariants();
            handled = true;
            break;

        case btn_OK_frmNewGame:
            handled = !NewGamePlayerCount();
            break;

        case btn_Default_frmNewGame:
            StrIToA( tmpString, DEFAULT_WINSCORE );
            SetFieldTextFromStr( fld_winscore, tmpString );

            StrIToA( tmpString, DEFAULT_OPENINGROLL );
            SetFieldTextFromStr( fld_openingroll, tmpString );
            handled = true;
            break;
        }
        break;

    default:
        break;
    }


    return handled;
}
コード例 #16
0
ファイル: dialog.c プロジェクト: docwhat/cwimp
void DialogNewGame() {
    FormPtr prevForm, frm;
    UInt16 hitButton;
    Char tmpString[5];
    Char *text;
    UInt16 x;
    UInt16 num;

    // Save previous form
    prevForm = FrmGetActiveForm();
    FrmSetFocus( prevForm, noFocus );

    // Init new form
    frm = FrmInitForm( frmNewGame );

    // Set it
    FrmSetActiveForm(frm);
    FrmDrawForm(frm);

    for( x = 0; x < MaxPlayers; x++ )
    {
        tmppref[x].type = GetPlayerType( x );
        StrCopy( tmppref[x].hname, pref.player[x].hname );
        StrCopy( tmppref[x].aname, pref.player[x].aname );

        DrawUserType( x, tmppref[x].type );

        NewGameSetPlayerName( fldNGname0+x, x );
    }

    // Fill in WinScore with previous value.
    if ( pref.winscore > 9999 ) { // Sanity check...
        pref.winscore = DEFAULT_WINSCORE;
    }
    StrIToA( tmpString, pref.winscore );
    SetFieldTextFromStr( fld_winscore, tmpString );

    // Fill in Opening Roll with previous value.
    if ( pref.openingroll > pref.winscore || pref.openingroll <= 0 ) {
        // Sanity check...
        pref.openingroll = DEFAULT_OPENINGROLL;
    }
    StrIToA( tmpString, pref.openingroll );
    SetFieldTextFromStr( fld_openingroll, tmpString );

    SetFocus( fld_openingroll );

    // Set the handler
    FrmSetEventHandler(frm, DialogNewGameHandleEvent);

    hitButton = FrmDoDialog(frm);

    FrmSetFocus( frm, noFocus );

    if ( hitButton == btn_OK_frmNewGame ) {

        /* Get the score needed to win */
        pref.winscore = DEFAULT_WINSCORE;
        text = FldGetTextPtr( GetObjectPtr( fld_winscore ) );
        if ( text != NULL ) {
            num = StrAToI( text );
            if( num <= 9999 && num >= 50 ) {
                pref.winscore = num;
            }
        }

        /* Get the score needed to open game */
        pref.openingroll = DEFAULT_OPENINGROLL;
        text = FldGetTextPtr( GetObjectPtr( fld_openingroll ) );
        if ( text != NULL ) {
            num = StrAToI( text );
            if( num <= pref.winscore && num >= 0 ) {
                pref.openingroll = num;
            }
        }


        pref.totalplayers = 0;
        for( x = 0; x < MaxPlayers; x++ )
        {
            pref.player[x].type = tmppref[x].type;

            NewGameGetPlayerName( fldNGname0 + x, x );

            StrCopy( pref.player[x].hname,
                     tmppref[x].hname );
            StrCopy( pref.player[x].aname,
                     tmppref[x].aname );

            if( tmppref[x].type != PlayerNone )
            {
                pref.totalplayers++;
            }

        }

        if( pref.totalplayers > 0 )
        {
            NewGame();
        }
    }

    // Delete the form, we're not using it
    FrmDeleteForm(frm);

    // Restore previous form.
    if (prevForm) {
        FrmSetActiveForm(prevForm);
    }

    DrawState();
}
コード例 #17
0
ファイル: draw.c プロジェクト: docwhat/cwimp
void DialogNewGame() {
    FormPtr prevForm, frm;
    Word hitButton;
    Char tmpString[5];
    CharPtr text;
    Word  fldIndex;
    Int x;

    // Save previous form
    prevForm = FrmGetActiveForm();
    // Init new form
    frm = FrmInitForm( frmNewGame );

    // Set it
    FrmSetActiveForm(frm);
    FrmDrawForm(frm);

    // Set Controls
    // cbtnVal & pbtnVal
    stor.tmpplayers = stor.numplayers;
    stor.tmpcomputers = stor.numcomputers;
    if ( stor.numplayers > 0 ) {
        x = stor.numplayers;
    } else {
        x = 1;
    }
    CtlSetValue( GetObjectPtr( pbtnVal[x - 1] ), true );

    if ( stor.numcomputers > 0 ) {
        x = stor.numcomputers;
    } else {
        x = 0;
    }
    CtlSetValue( GetObjectPtr( cbtnVal[x] ), true );

    // Fill in WinScore with previous value.
    if ( stor.winscore > 9999 ) { // Sanity check...
        stor.winscore = 300;
    }
    StrIToA( tmpString, stor.winscore );
    SetFieldTextFromStr( fld_winscore, tmpString );
    // Set the focus to this field so the user can just start typing.
    fldIndex =  FrmGetObjectIndex(frm, fld_winscore);
    FrmSetFocus( frm, fldIndex );

    // Set the handler
    FrmSetEventHandler(frm, DialogNewGameHandleEvent);

    hitButton = FrmDoDialog(frm);

    if ( hitButton == btn_OK_frmNewGame ) {
        text = FldGetTextPtr( FrmGetObjectPtr (frm, fldIndex) );
        if ( text != NULL ) {
            stor.winscore = StrAToI( text );
        } else {
            stor.winscore = 300;
        }

        stor.numplayers = stor.tmpplayers;
        stor.numcomputers = stor.tmpcomputers;
    }

    // Delete the form, we're not using it
    FrmDeleteForm(frm);

    // Restore previous form.
    if (prevForm) {
        FrmSetActiveForm(prevForm);
    }


    if ( hitButton == btn_OK_frmNewGame ) {
        NewGame();
    }


    DrawState();
}
コード例 #18
0
ファイル: s2lconvert.c プロジェクト: jmjeong/happydays.palm
Boolean Sl2LnFormHandleEvent(EventPtr e)
{
    Boolean handled = false;
    DateType dt = {0, 0};
    FormPtr frm = FrmGetFormPtr(Sl2LnForm);

    switch (e->eType) {
    case frmOpenEvent:
        if(gbVgaExists)
       		VgaFormModify(frm, vgaFormModify160To240);

        DateSecondsToDate(TimGetSeconds(), &dt);

        DateToAsciiLong(dt.month, dt.day, dt.year + 1904,
                        gPrefdfmts, gAppErrStr);

        SetFieldTextFromStr(Sl2LnFormInput, gAppErrStr);

        FrmDrawForm(frm);
        handled = true;
        break;

    case ctlSelectEvent:
        switch(e->data.ctlSelect.controlID) {
        case Sl2LnFormConvert:
        {
            HappyDaysFlag dummy;
            Int16 year, month, day;
            int lyear, lmonth, lday;
            Char* input;
            int ret = false;

            input = FldGetTextPtr(GetObjectPointer(frm, Sl2LnFormInput));
            if ((ret = AnalysisHappyDays(input, &dummy,
                                         &year, &month, &day))) {
                int leapyes = 0;

                ret = lunarS2L(lunarRefNum, year, month, day, &lyear, &lmonth, &lday, &leapyes);
                if (ret == errNone) {
                    if (leapyes) {
                        StrCopy(gAppErrStr, "#)");
                    }
                    else {
                        StrCopy(gAppErrStr, "-)");
                    }
                    DateToAsciiLong(lmonth, lday, lyear, gPrefdfmts, &gAppErrStr[2]);
                          
                    FldDrawField(SetFieldTextFromStr(Sl2LnFormResult,
                                                     gAppErrStr));
                }
                else DisplayInvalidDateErrorString(Sl2LnFormResult);

            }
            else DisplayInvalidDateErrorString(Sl2LnFormResult);

            handled = true;
            break;
        }

        case Sl2LnFormOk:
            FrmReturnToForm(0);

            handled = true;
            break;
            
        default:
            break;
                
        }
        break;

    case menuEvent:
        handled = TextMenuHandleEvent(e->data.menu.itemID, Sl2LnFormInput);
        break;

    default:
        break;
    }

    return handled;
}