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 + -
显示快捷键?