clset.c
来自「开放源码的编译器open watcom 1.6.0版的源代码」· C语言 代码 · 共 1,204 行 · 第 1/3 页
C
1,204 行
/****************************************************************************
*
* 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: WHEN YOU FIGURE OUT WHAT THIS FILE DOES, PLEASE
* DESCRIBE IT HERE!
*
****************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <setjmp.h>
#include "vi.h"
#include "parsecl.h"
#include "expr.h"
#include "rxsupp.h"
#include "fcbmem.h"
#include "win.h"
#include "keys.h"
#include "menu.h"
#include "source.h"
#ifdef __WIN__
#include "winvi.h"
#endif
#include "lang.h"
static bool msgFlag;
static bool needsRedisplay = FALSE;
static char msgString[ MAX_STR ];
static void setMessage( char *msg, bool redisplay )
{
strcpy( msgString, msg );
needsRedisplay = redisplay;
}
static void putMessage( void )
{
if( needsRedisplay ) {
ReDisplayScreen();
needsRedisplay = FALSE;
}
Message1( msgString );
}
/*
* getOneSetVal - get a single set value
*/
static char *getOneSetVal( int token, bool isnonbool, char *tmpstr,
bool want_boolstr )
{
char *str,*fign;
cursor_type ct;
int i,j;
tmpstr[0] = 0;
if( !isnonbool ) {
j=(int) ((bool *)&EditFlags)[token];
if( want_boolstr ) {
str = BoolStr[j];
} else {
str = tmpstr;
itoa( j, tmpstr, 10 );
}
} else switch( token ) {
case SET1_T_STATUSSECTIONS:
str = tmpstr;
*str = 0;
for( i=0;i<NumStatusSections; i++ ) {
char buff[16];
itoa( StatusSections[i], buff, 10 );
strcat( str, buff );
strcat( str, " " );
}
break;
case SET1_T_FILEENDSTRING:
str = FileEndString;
break;
case SET1_T_STATUSSTRING:
str = StatusString;
break;
case SET1_T_TILECOLOR:
str = tmpstr;
break;
case SET1_T_FIGNORE:
fign = FIgnore;
str = tmpstr;
for( j=0;j<CurrFIgnore;j++ ) {
strcat( str, fign );
fign += EXTENSION_LENGTH;
}
break;
case SET1_T_GADGETSTRING:
str = GadgetString;
break;
case SET1_T_SHELLPROMPT:
str = SpawnPrompt;
break;
case SET1_T_GREPDEFAULT:
str = GrepDefault;
break;
case SET1_T_TMPDIR:
str = TmpDir;
break;
case SET1_T_WORD:
str = WordDefn;
break;
case SET1_T_WORDALT:
str = WordAltDefn;
break;
case SET1_T_FILENAME:
if( CurrentFile == NULL ) {
str = "";
} else {
str = CurrentFile->name;
}
break;
case SET1_T_HISTORYFILE:
str = HistoryFile;
break;
case SET1_T_TAGFILENAME:
str = TagFileName;
break;
case SET1_T_MAGICSTRING:
str = Majick;
break;
case SET1_T_COMMANDCURSORTYPE:
case SET1_T_OVERSTRIKECURSORTYPE:
case SET1_T_INSERTCURSORTYPE:
if( token == SET1_T_COMMANDCURSORTYPE ) {
ct = NormalCursorType;
} else if( token == SET1_T_OVERSTRIKECURSORTYPE ) {
ct = OverstrikeCursorType;
} else {
ct = InsertCursorType;
}
str = tmpstr;
MySprintf( tmpstr, "%d %d", ct.height, ct.width );
break;
default:
switch( token ) {
case SET1_T_WRAPMARGIN:
j = WrapMargin;
break;
case SET1_T_CURSORBLINKRATE:
j = CursorBlinkRate;
break;
case SET1_T_MAXPUSH:
j = MaxPush;
break;
case SET1_T_RADIX:
j = Radix;
break;
case SET1_T_AUTOSAVEINTERVAL:
j = AutoSaveInterval;
break;
case SET1_T_LANGUAGE:
if( CurrentInfo == NULL ) {
j = LANG_NONE;
} else {
j = CurrentInfo->Language;
}
break;
case SET1_T_MOUSEDCLICKSPEED:
j = MouseDoubleClickSpeed;
break;
case SET1_T_MOUSESPEED:
j = MouseSpeed;
break;
case SET1_T_MOUSEREPEATDELAY:
j = MouseRepeatDelay;
break;
case SET1_T_CURRENTSTATUSCOLUMN:
j = CurrentStatusColumn;
break;
case SET1_T_ENDOFLINECHAR:
j = EndOfLineChar;
break;
case SET1_T_EXITATTR:
j= ExitAttr;
break;
case SET1_T_MAXSWAPK:
j=MaxSwapBlocks;
j *= (MAX_IO_BUFFER/1024);
break;
case SET1_T_MAXEMSK:
#ifndef NOEMS
j=MaxEMSBlocks;
j *= (MAX_IO_BUFFER/1024);
#else
j = 0;
#endif
break;
case SET1_T_MAXXMSK:
#ifndef NOXMS
j=MaxXMSBlocks;
j *= (MAX_IO_BUFFER/1024);
#else
j = 0;
#endif
break;
case SET1_T_RESIZECOLOR:
j=ResizeColor;
break;
case SET1_T_MOVECOLOR:
j=MoveColor;
break;
case SET1_T_INACTIVEWINDOWCOLOR:
j=InactiveWindowColor;
break;
case SET1_T_MAXTILECOLORS:
j=MaxTileColors;
break;
case SET1_T_MAXWINDOWTILEX:
j=MaxWindowTileX;
break;
case SET1_T_MAXWINDOWTILEY:
j=MaxWindowTileY;
break;
case SET1_T_HARDTAB:
j = HardTab;
break;
case SET1_T_TABAMOUNT:
j = TabAmount;
break;
case SET1_T_SHIFTWIDTH:
j=ShiftWidth;
break;
case SET1_T_STACKK:
j = StackK;
break;
case SET1_T_LINENUMWINWIDTH:
j=LineNumWinWidth;
break;
case SET1_T_CLOCKX:
j=ClockX;
break;
case SET1_T_CLOCKY:
j=ClockY;
break;
case SET1_T_SPINX:
j=SpinX;
break;
case SET1_T_SPINY:
j=SpinY;
break;
case SET1_T_MAXCLHISTORY:
j=CLHist.max;
break;
case SET1_T_MAXFILTERHISTORY:
j=FilterHist.max;
break;
case SET1_T_MAXFINDHISTORY:
j=FindHist.max;
break;
case SET1_T_MAXLINELEN:
j=MaxLine;
break;
case SET1_T_PAGELINESEXPOSED:
j=PageLinesExposed;
break;
case SET1_T_TOOLBARBUTTONHEIGHT:
j = ToolBarButtonHeight;
break;
case SET1_T_TOOLBARBUTTONWIDTH:
j = ToolBarButtonWidth;
break;
case SET1_T_TOOLBARCOLOR:
j = ToolBarColor;
break;
}
itoa( j, tmpstr, 10 );
str = tmpstr;
break;
}
if( str == NULL ) {
return( "" );
}
return( str );
} /* getOneSetVal */
/*
* GetNewValueDialog - get a new value from the user
*/
#ifndef __WIN__
int GetNewValueDialog( char *value )
{
int rc;
char st[MAX_STR];
window_id clw;
static char prompt[]="New:";
rc = NewWindow2( &clw, &setvalw_info );
if( rc ) {
return( rc );
}
WPrintfLine( clw, 1, "Old: %s", value );
rc = ReadStringInWindow( clw, 2, prompt, st, MAX_STR-1, NULL );
CloseAWindow( clw );
SetWindowCursor();
KillCursor();
if( !rc ) {
return( NO_VALUE_ENTERED );
}
if( st[0] == 0 ) {
return( NO_VALUE_ENTERED );
}
Expand( st, NULL );
strcpy( value, st );
return( ERR_NO_ERR );
} /* GetNewValueDialog */
#else
extern int GetNewValueDialog( char *);
#endif
/*
* getAColor - get an fg/bg color
*/
static int getAColor( char *name, int *cval )
{
char fn[MAX_STR];
int fg,bg;
if( NextWord1( name, fn ) <= 0 ) {
return( ERR_INVALID_SET_COMMAND );
}
fg = atoi( fn );
if( NextWord1( name, fn ) <= 0 ) {
return( ERR_INVALID_SET_COMMAND );
}
bg = atoi( fn );
(*cval) = (fg + bg*16);
return( ERR_NO_ERR );
} /* getAColor */
/*
* processSetToken - set value for set token
*/
static int processSetToken( int j, char *value, int *winflag, bool isnonbool )
{
char fn[MAX_STR],str[MAX_STR],tmp[3];
char tokstr[MAX_STR];
char save[MAX_STR];
int rc=ERR_NO_ERR;
int i,clr,cval,k;
bool newset;
bool set1,toggle,*ptr;
jmp_buf jmpaddr;
cursor_type ct;
char *name;
void *fptr;
event_bits eb;
bool redisplay = FALSE;
/*
* set up value for boolean set commands
*/
if( j < 0 ) {
j *= -1;
i = FALSE;
} else {
i = TRUE;
}
if( !(*winflag) ) {
toggle = TRUE;
set1 = isnonbool;
} else {
toggle = FALSE;
if( j >= SET1_T_ ) {
if( EditFlags.CompileScript ) {
if( !i ) {
j *= -1;
}
itoa( j, str, 10 );
StrMerge( 2, WorkLine->data, str, SingleBlank );
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?