setfs.c
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 535 行 · 第 1/2 页
C
535 行
/****************************************************************************
*
* Open Watcom Project
*
* Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
*
* ========================================================================
*
* This file contains Original Code and/or Modifications of Original
* Code as defined in and that are subject to the Sybase Open Watcom
* Public License version 1.0 (the 'License'). You may not use this file
* except in compliance with the License. BY USING THIS FILE YOU AGREE TO
* ALL TERMS AND CONDITIONS OF THE LICENSE. A copy of the License is
* provided with the Original Code and Modifications, and is also
* available at www.sybase.com/developer/opensource.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND SYBASE AND ALL CONTRIBUTORS HEREBY DISCLAIM
* ALL SUCH WARRANTIES, INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR
* NON-INFRINGEMENT. Please see the License for the specific language
* governing rights and limitations under the License.
*
* ========================================================================
*
* Description: File specific settings dialog.
*
****************************************************************************/
#include <string.h>
#include "winvi.h"
#include "source.h"
#include "setfs.h"
#include "stddef.h"
#include "ctltype.h"
#include "dyntpl.h"
#include "fts.h"
#include "lang.h"
#define TAGFILENAMEWIDTH 129
#define GREPDEFAULTWIDTH 20
#define FT_TITLE "File Specific Options ("
#define MAX_FT_ENTRIES 20 // limit of setfs.c, not of fts.c
typedef struct {
BOOL LanguageBool;
int Language;
BOOL PPKeywordOnly;
BOOL CMode;
BOOL ReadEntireFile;
BOOL ReadOnlyCheck;
BOOL IgnoreCtrlZ;
BOOL CRLFAutoDetect;
BOOL WriteCRLF;
BOOL EightBits;
int TabAmount;
BOOL RealTabs;
int HardTab;
BOOL AutoIndent;
int ShiftWidth;
char TagFileName[ TAGFILENAMEWIDTH ];
BOOL IgnoreTagCase;
BOOL TagPrompt;
char GrepDefault[ GREPDEFAULTWIDTH ];
BOOL ShowMatch;
} dlg_data;
static dlg_data dlg_dataArray[ MAX_FT_ENTRIES ];
static dlg_data cancelData;
static dyn_dim_type dynGetLanguage( HWND hwndDlg, BOOL initial )
{
initial = initial;
if( IsDlgButtonChecked( hwndDlg, SETFS_LANGUAGE ) ) {
return( DYN_VISIBLE );
}
return( DYN_DIM );
}
static BOOL dynIsLanguage( UINT wParam, LONG lParam, HWND hwndDlg )
{
WORD id;
WORD cmd;
hwndDlg = hwndDlg;
lParam = lParam;
id = LOWORD( wParam );
cmd = GET_WM_COMMAND_CMD( wParam, lParam );
if( id == SETFS_LANGUAGE && cmd == BN_CLICKED ) {
return( TRUE );
}
return( FALSE );
}
static dyn_dim_type dynGetLanguageButton( HWND hwndDlg, BOOL initial )
{
initial = initial;
if( IsDlgButtonChecked( hwndDlg, SETFS_LANGUAGE ) &&
( IsDlgButtonChecked( hwndDlg, SETFS_LANGUAGEC ) ||
IsDlgButtonChecked( hwndDlg, SETFS_LANGUAGECPP ) ) ) {
return( DYN_VISIBLE );
}
return( DYN_DIM );
}
static BOOL dynIsLanguageButton( UINT wParam, LONG lParam, HWND hwndDlg )
{
WORD id;
WORD cmd;
hwndDlg = hwndDlg;
lParam = lParam;
id = LOWORD( wParam );
cmd = GET_WM_COMMAND_CMD( wParam, lParam );
if( ( id == SETFS_LANGUAGE ||
( id >= SETFS_LANGUAGEC && id <= SETFS_LANGUAGEFORTRAN ) ) &&
cmd == BN_CLICKED ) {
return( TRUE );
}
return( FALSE );
}
#include "setfs.dh"
#include "setfs.ch"
static void globalTodlg_data( dlg_data *data, info *envInfo )
{
if( envInfo ) {
data->Language = envInfo->Language;
data->LanguageBool = ( envInfo->Language > 0 ) ? TRUE : FALSE;
data->PPKeywordOnly = EditFlags.PPKeywordOnly;
data->CMode = EditFlags.CMode;
data->ReadEntireFile = EditFlags.ReadEntireFile;
data->ReadOnlyCheck = EditFlags.ReadOnlyCheck;
data->IgnoreCtrlZ = EditFlags.IgnoreCtrlZ;
data->CRLFAutoDetect = EditFlags.CRLFAutoDetect;
data->WriteCRLF = EditFlags.WriteCRLF;
data->EightBits = EditFlags.EightBits;
data->TabAmount = TabAmount;
data->RealTabs = EditFlags.RealTabs;
data->HardTab = HardTab;
data->AutoIndent = EditFlags.AutoIndent;
data->ShiftWidth = ShiftWidth;
strncpy( data->TagFileName, TagFileName, TAGFILENAMEWIDTH - 1 );
data->TagFileName[ TAGFILENAMEWIDTH - 1 ] = '\0';
data->IgnoreTagCase = EditFlags.IgnoreTagCase;
data->TagPrompt = EditFlags.TagPrompt;
strncpy( data->GrepDefault, GrepDefault, GREPDEFAULTWIDTH - 1 );
data->GrepDefault[ GREPDEFAULTWIDTH - 1 ] = '\0';
data->ShowMatch = EditFlags.ShowMatch;
}
}
static void dlg_dataDefault( dlg_data *data )
{
data->Language = 1;
data->LanguageBool = FALSE;
data->PPKeywordOnly = FALSE;
data->CMode = FALSE;
data->ReadEntireFile = FALSE;
data->ReadOnlyCheck = TRUE;
data->IgnoreCtrlZ = TRUE;
data->CRLFAutoDetect = TRUE;
data->WriteCRLF = TRUE;
data->EightBits = TRUE;
data->TabAmount = 8;
data->RealTabs = FALSE;
data->HardTab = 8;
data->AutoIndent = FALSE;
data->ShiftWidth = 4;
data->TagFileName[ 0 ] = '\0';
data->IgnoreTagCase = TRUE;
data->TagPrompt = TRUE;
data->GrepDefault[ 0 ] = '\0';
data->ShowMatch = FALSE;
}
static void filldlg_dataArray( int index, char *match, info *useInfo )
{
// run ftype commands (the wildcard should match itself ok!)
FTSRunCmds( match );
// copy environment
globalTodlg_data( &( dlg_dataArray[ index ] ), useInfo );
}
void fillFileType( HWND hwndDlg )
{
HWND hwndCB;
ft_src *fts;
template_ll *template, *template1;
char str[ _MAX_PATH ];
int strLen;
int index;
info envInfo, *oldCurrentInfo;
oldCurrentInfo = CurrentInfo;
if( CurrentInfo == NULL ) {
memset( &envInfo, 0, sizeof( envInfo ) );
CurrentInfo = &envInfo;
}
hwndCB = GetDlgItem( hwndDlg, SETFS_FILETYPE );
fts = FTSGetFirst();
index = 0;
while( fts ) {
template1 = template = FTSGetFirstTemplate( fts );
str[ 0 ] = '\0';
strLen = 0;
while( template ) {
strLen += strlen( template->data ) + 2;
if( strLen > sizeof( str ) ) break;
strcat( str, " " );
strcat( str, template->data );
template = FTSGetNextTemplate( template );
}
filldlg_dataArray( index, template1->data, CurrentInfo );
SendMessage( hwndCB, CB_INSERTSTRING, index, (LPARAM)( str + 1 ) );
index++;
fts = FTSGetNext( fts );
}
SendMessage( hwndCB, CB_SETCURSEL, 0, 0L );
CurrentInfo = oldCurrentInfo;
}
void updateDialogSettings( HWND hwndDlg, BOOL title )
{
HWND hwndCB;
int index;
char *template;
int totallen;
hwndCB = GetDlgItem( hwndDlg, SETFS_FILETYPE );
index = SendMessage( hwndCB, CB_GETCURSEL, 0, 0L );
if( title ) {
totallen = SendMessage( hwndCB, CB_GETLBTEXTLEN, index, 0L );
totallen += sizeof( FT_TITLE ) + 1;
template = MemAlloc( totallen );
strcpy( template, FT_TITLE );
SendMessage( hwndCB, CB_GETLBTEXT, index,
(LONG)( template + sizeof( FT_TITLE ) - 1 ) );
template[ totallen - 2 ] = ')';
template[ totallen - 1 ] = '\0';
SetWindowText( hwndDlg, template );
MemFree( template );
}
ctl_dlg_init( GET_HINSTANCE( hwndDlg ), hwndDlg,
&( dlg_dataArray[ index ] ), &Ctl_setfs );
dyn_tpl_init( &Dyn_setfs, hwndDlg );
}
void dumpCommands( int i )
{
FTSAddBoolean( dlg_dataArray[ i ].ReadEntireFile, "readentirefile" );
FTSAddBoolean( dlg_dataArray[ i ].ReadOnlyCheck, "readonlycheck" );
FTSAddBoolean( dlg_dataArray[ i ].IgnoreCtrlZ, "ignorectrlz" );
FTSAddBoolean( dlg_dataArray[ i ].CRLFAutoDetect, "crlfautodetect" );
FTSAddBoolean( dlg_dataArray[ i ].WriteCRLF, "writecrlf" );
FTSAddBoolean( dlg_dataArray[ i ].EightBits, "eightbits" );
FTSAddBoolean( dlg_dataArray[ i ].RealTabs, "realtabs" );
FTSAddBoolean( dlg_dataArray[ i ].AutoIndent, "autoindent" );
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?