setfs.c

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 535 行 · 第 1/2 页

C
535
字号
    FTSAddBoolean( dlg_dataArray[ i ].IgnoreTagCase, "ignoretagcase" );
    FTSAddBoolean( dlg_dataArray[ i ].TagPrompt, "tagprompt" );
    FTSAddBoolean( dlg_dataArray[ i ].CMode, "cmode" );
    FTSAddBoolean( dlg_dataArray[ i ].ShowMatch, "showmatch" );
    FTSAddBoolean( dlg_dataArray[ i ].PPKeywordOnly, "ppkeywordonly" );

    if( !dlg_dataArray[ i ].LanguageBool ) {
        FTSAddInt( 0, "language" );
    } else {
        FTSAddInt( dlg_dataArray[ i ].Language, "language" );
    }
    FTSAddInt( dlg_dataArray[ i ].TabAmount, "tabamount" );

    FTSAddInt( dlg_dataArray[ i ].HardTab, "hardtab" );
    FTSAddInt( dlg_dataArray[ i ].ShiftWidth, "shiftwidth" );

    FTSAddStr( dlg_dataArray[ i ].TagFileName, "tagfilename" );
    FTSAddStr( dlg_dataArray[ i ].GrepDefault, "grepdefault" );
}

void writeSettings( HWND hwndDlg )
{
    // dump our little structure back into source line for fts
    HWND    hwndCB;
    int     nTemplates, i;
    char    *template;
    int     len;

    FTSFini();
    FTSInit();

    hwndCB = GetDlgItem( hwndDlg, SETFS_FILETYPE );
    nTemplates = SendMessage( hwndCB, CB_GETCOUNT, 0, 0L );

    for( i = 0; i < nTemplates; i++ ) {
        // put back in order we got them
        len = SendMessage( hwndCB, CB_GETLBTEXTLEN, i, 0L );
        template = MemAlloc( len + 1 );
        SendMessage( hwndCB, CB_GETLBTEXT, i, (LONG)template );
        FTSStart( template );
        dumpCommands( i );
        FTSEnd();
        MemFree( template );
    }
    if( CurrentFile ) {
        FTSRunCmds( CurrentFile->name );
    }
}

long deleteSelectedFT( HWND hwndDlg )
{
    HWND    hwndCB;
    int     i, len, rc;
    char    *template;

    hwndCB = GetDlgItem( hwndDlg, SETFS_FILETYPE );
    i = SendMessage( hwndCB, CB_GETCURSEL, 0, 0L );
    if( i == CB_ERR ) {
        MessageBox( hwndDlg, "No item selected",
                     "", MB_ICONINFORMATION | MB_OK );
        return( 1L );
    }

    // get template in string form
    len = SendMessage( hwndCB, CB_GETLBTEXTLEN, i, 0L );
    template = MemAlloc( len + 1 );
    SendMessage( hwndCB, CB_GETLBTEXT, i, (LONG)template );

    // can't delete *.* entry
    rc = IDYES;
    if( !strcmp( template, "*.*" ) ) {
        MessageBox( hwndDlg, "Cannot delete catch-all item",
                     "", MB_ICONINFORMATION | MB_OK );
        rc = IDNO;
    }

    if( rc == IDYES ) {
        // remove from our internal list
        memmove( dlg_dataArray + i, dlg_dataArray + i + 1,
                 sizeof( dlg_data ) * ( MAX_FT_ENTRIES - i - 1 ) );

        // remove from Windows combo box
        SendMessage( hwndCB, CB_DELETESTRING, i, 0l );

        // reset selection
        if( i > 0 ) {
            i--;
        }
        SendMessage( hwndCB, CB_SETCURSEL, i, 0L );

        // update other dialog settings
        updateDialogSettings( GetParent( hwndCB ), TRUE );
    }
    MemFree( template );
    return( 1L );
}

long insertFT( HWND hwndDlg )
{
    HWND    hwndCB;
    char    *text;
    int     len, i;
    int     nTemplates;

    hwndCB = GetDlgItem( hwndDlg, SETFS_FILETYPE );

    // get new template
    len = GetWindowTextLength( hwndCB );
    text = MemAlloc( len + 1 );
    GetWindowText( hwndCB, text, len + 1 );
    nTemplates = SendMessage( hwndCB, CB_GETCOUNT, 0, 0L );

    // attempt to insert at current position
    i = SendMessage( hwndCB, CB_FINDSTRING, -1, (LONG)text );
    if( i != CB_ERR &&
        SendMessage( hwndCB, CB_GETLBTEXTLEN, i, 0L ) == strlen( text ) ) {
        MessageBox( hwndDlg, "Template already defined",
                     "", MB_ICONINFORMATION | MB_OK );
        return( 0L );
    }
    if( nTemplates == MAX_FT_ENTRIES ) {
        MessageBox( hwndDlg, "Cannot hold any more templates",
                     "", MB_ICONINFORMATION | MB_OK );
        return( 0L );
    }
    // for now, always insert at top of list
    i = 0;
    memmove( dlg_dataArray + i + 1, dlg_dataArray + i,
             sizeof( dlg_data ) * ( MAX_FT_ENTRIES - i - 1 ) );
    dlg_dataDefault( &dlg_dataArray[ i ] );
    SendMessage( hwndCB, CB_INSERTSTRING, i, (LONG)text );
    SendMessage( hwndCB, CB_SETCURSEL, i, 0L );
    updateDialogSettings( hwndDlg, TRUE );

    return( 1L );
}

BOOL WINEXP EnumChildProc( HWND hwndChild, DWORD lParam )
{
    char    szClass[ 5 ];
    lParam = lParam;
    GetClassName( hwndChild, szClass, 5 );
    if( !strcmp( szClass, "Edit" ) ) {
        //hwndEdit = hwndChild;
        return( FALSE );
    }
    return( TRUE );
}


static void cancelSettings( void )
{
    LangInit( cancelData.Language );
    EditFlags.PPKeywordOnly     = cancelData.PPKeywordOnly;
    EditFlags.CMode             = cancelData.CMode;
    EditFlags.ReadEntireFile    = cancelData.ReadEntireFile;
    EditFlags.ReadOnlyCheck     = cancelData.ReadOnlyCheck;
    EditFlags.IgnoreCtrlZ       = cancelData.IgnoreCtrlZ;
    EditFlags.CRLFAutoDetect    = cancelData.CRLFAutoDetect;
    EditFlags.WriteCRLF         = cancelData.WriteCRLF;
    EditFlags.EightBits         = cancelData.EightBits;
    EditFlags.RealTabs          = cancelData.RealTabs;
    EditFlags.AutoIndent        = cancelData.AutoIndent;
    EditFlags.IgnoreTagCase     = cancelData.IgnoreTagCase;
    EditFlags.TagPrompt         = cancelData.TagPrompt;
    EditFlags.ShowMatch         = cancelData.ShowMatch;
    TabAmount                   = cancelData.TabAmount;
    HardTab                     = cancelData.HardTab;
    ShiftWidth                  = cancelData.ShiftWidth;

    // strncpy( cancelData->TagFileName, TagFileName, TAGFILENAMEWIDTH - 1 );
    // GrepDefault = cancelData->GrepDefault[ GREPDEFAULTWIDTH - 1 ] = '\0';
}

/*
 * SetFSProc - processes messages for the Data Control Dialog
 */
BOOL WINEXP SetFSProc( HWND hwndDlg, unsigned msg,
                       UINT wParam, LONG lParam )
{
    dlg_data    oldData;        // junk
    int         rc;
    int         index;
    HWND        ctlhwnd;
    WORD        cmd;

    switch( msg ) {
    case WM_INITDIALOG:
        EditFlags.Quiet = TRUE;
        globalTodlg_data( &cancelData, CurrentInfo );
        CenterWindowInRoot( hwndDlg );
        fillFileType( hwndDlg );
        updateDialogSettings( hwndDlg, TRUE );
        return( TRUE );

    case WM_COMMAND:
        switch( LOWORD( wParam ) ) {
        case SETFS_FILETYPE:
            cmd = GET_WM_COMMAND_CMD( wParam, lParam );
            if( cmd == CBN_SELCHANGE ) {
                rc = ctl_dlg_done( GET_HINSTANCE( hwndDlg ),
                                   hwndDlg, &oldData, &Ctl_setfs );
                assert( rc != 0 );
                updateDialogSettings( hwndDlg, TRUE );
            } else if( cmd == CBN_SETFOCUS ) {
                // if we are getting the focus, something probably changed
                ctlhwnd = GET_WM_COMMAND_HWND( wParam, lParam );
                index = SendMessage( ctlhwnd, CB_GETCURSEL, 0, 0L );

                // this may bump focus back to a bad field
                if( ctl_dlg_done( GET_HINSTANCE( hwndDlg ),
                        hwndDlg, &( dlg_dataArray[ index ] ), &Ctl_setfs ) ) {
                    updateDialogSettings( hwndDlg, FALSE );
                }
            }
            break;
        case SETFS_DELETE:
            deleteSelectedFT( hwndDlg );
            return( TRUE );
        case SETFS_INSERT:
            insertFT( hwndDlg );
            return( TRUE );
        case IDOK:
            index = SendMessage( GetDlgItem( hwndDlg, SETFS_FILETYPE ),
                                 CB_GETCURSEL, 0, 0L );
            if( !ctl_dlg_done( GET_HINSTANCE( hwndDlg ),
                               hwndDlg, &( dlg_dataArray[ index ] ),
                               &Ctl_setfs ) ) {
                return( TRUE );
            }
            writeSettings( hwndDlg );
            EndDialog( hwndDlg, TRUE );
            EditFlags.Quiet = FALSE;
            return( TRUE );
        case IDCANCEL:
            if( CurrentInfo ) {
                cancelSettings();
            }
            EndDialog( hwndDlg, TRUE );
            EditFlags.Quiet = FALSE;
            return( TRUE );
        }

        ctl_dlg_process( &Ctl_setfs, wParam, lParam );
        dyn_tpl_process( &Dyn_setfs, hwndDlg, wParam, lParam );
    }

    return( FALSE );
}

/*
 * GetSetFSDialog - create dialog box & get result
 */
bool GetSetFSDialog( void )
{
    DLGPROC     proc;
    bool        rc;

    proc = (DLGPROC) MakeProcInstance( (FARPROC) SetFSProc, InstanceHandle );
    rc = DialogBox( InstanceHandle, "SETFS", Root, proc );
    FreeProcInstance( (FARPROC) proc );

    // redisplay all files to ensure screen completely correct
    ReDisplayBuffers( TRUE );
    return( rc );
} /* GetSetFSDialog */

⌨️ 快捷键说明

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