コード例 #1
0
ファイル: editins.c プロジェクト: Ukusbobra/open-watcom-v2
/*
 * getBracketLoc - find a matching '(' for a ')'
 */
static vi_rc getBracketLoc( i_mark *pos )
{
    vi_rc       rc;
    char        tmp[3];
    int         len;
//    linenum     lne;

    tmp[0] = '\\';
    tmp[1] = ')';
    tmp[2] = 0;
//    lne = CurrentPos.line;
    RegExpAttrSave( -1, NULL );
    rc = GetFind( tmp, pos, &len, FINDFL_BACKWARDS | FINDFL_NOERROR | FINDFL_NOCHANGE );
    RegExpAttrRestore();
    if( pos->line != CurrentPos.line ) {
        return( ERR_FIND_NOT_FOUND );
    }
    if( rc != ERR_NO_ERR ) {
        return( rc );
    }

    /*
     * find the matching '('
     */
    CurrentPos = *pos;
    CGimmeLinePtr( CurrentPos.line, &CurrentFcb, &CurrentLine );
    rc = FindMatch( pos );
    return( rc );

} /* getBracketLoc */
コード例 #2
0
/*
 * ColorFind - find string and color it
 */
vi_rc ColorFind( char *data, find_type findfl )
{
    vi_rc       rc;
    int         len;
    char        *buff;
    i_mark      pos;

    /*
     * get search string and flags
     */
    buff = StaticAlloc();
    if( (len = NextWordSlash( data, buff ) ) <= 0 ) {
        StaticFree( buff );
        return( ERR_INVALID_FIND_CMD );
    }

    /*
     * go get the match
     */
    GoToLineNoRelCurs( 1 );
    rc = GetFind( buff, &pos, &len, FINDFL_FORWARD | findfl );
    if( rc == ERR_NO_ERR ) {
        pos.column += 1;
        JumpTo( &pos );
        DCUpdate();
#ifndef __WIN__
        // Windows selects instead
        HiliteAColumnRange( pos.line, pos.column, pos.column + len - 1 );
#endif
        EditFlags.ResetDisplayLine = TRUE;
    }
    StaticFree( buff );
    return( rc );

} /* ColorFind */
コード例 #3
0
/*
 * GetFindBackwards - get backwards find position
 */
vi_rc GetFindBackwards( char *st, i_mark *pos1, int *len1 )
{
    find_type   flags;

    flags = FINDFL_BACKWARDS;
    if( EditFlags.SearchWrap )
        flags |= FINDFL_WRAP;
    if( EditFlags.NoReplaceSearchString )
        flags |= FINDFL_NOCHANGE;
    return( GetFind( st, pos1, len1, flags ) );

} /* GetFindBackwards */
コード例 #4
0
/*
 * GetFindForward - get position of forward find string
 */
static vi_rc GetFindForward( char *st, i_mark *pos1, int *len1 )
{
    find_type   flags;

    flags = FINDFL_FORWARD;
    if( EditFlags.SearchWrap )
        flags |= FINDFL_WRAP;
    if( EditFlags.NoReplaceSearchString )
        flags |= FINDFL_NOCHANGE;
    return( GetFind( st, pos1, len1, flags ) );

} /* GetFindForward */
コード例 #5
0
ファイル: parsecl.c プロジェクト: Azarien/open-watcom-v2
/*
 * GetAddress - parse to obtain line number
 */
vi_rc GetAddress( const char **buffp, linenum *num  )
{
    linenum     numstack[NUM_STACK_SIZE];
    char        currnum[NUM_STACK_SIZE];
    linenum     sum;
    int         numptr;
    int         nument, csign, numsign;
    int         i, j;
    bool        numinprog, stopnum, endparse;
    char        c;
    char        *tmp, st[2];
    int         len;
    find_type   fl;
    i_mark      pos;
    vi_rc       rc;
    const char  *buff;

    /*
     * check if we have a numeric type thingy here
     */
    buff = *buffp;
    c = *buff;
    if( !(c == '/' || c == '?' || c == '+' || c == '-' || c == '\'' ||
        c == '.' || c == '$' || (c >= '0' && c <= '9')) ) {
        return( NO_NUMBER );
    }
    if( c == '+' || c == '-' ) {
        sum = CurrentPos.line;
    } else {
        sum = 0;
    }
    numptr = nument = 0;
    csign = numsign = 1;
    numinprog = stopnum = false;

    endparse = false;
    while( !endparse ) {
        c = *buff;
        switch( c ) {
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            currnum[numptr++] = c;
            numinprog = true;
            break;
        case '/':
        case '?':
            if( numinprog ) {
                return( NO_NUMBER );
            }
            tmp = StaticAlloc();
            st[0] = c;
            st[1] = '\0';
            buff = GetNextWord( buff, tmp, st );
            if( c == '?' ) {
                fl = FINDFL_BACKWARDS | FINDFL_NEXTLINE;
            } else {
                fl = FINDFL_FORWARD | FINDFL_NEXTLINE;
            }
            rc = GetFind( tmp, &pos, &len, fl );
            numstack[nument] = pos.line;
            stopnum = true;
            StaticFree( tmp );
            if( rc != ERR_NO_ERR ) {
                return( rc );
            }
            if( *buff == '\0' )
                --buff;
            break;
        case '\'':
            if( numinprog ) {
                return( NO_NUMBER );
            }
            j = buff[1] - 'a';
            rc = VerifyMark( j + 1, true );
            if( rc != ERR_NO_ERR ) {
                return( rc );
            }
            numstack[nument] = MarkList[j].p.line;
            stopnum = true;
            ++buff;
            break;
        case '+':
            csign = 1;
            if( numinprog ) {
                stopnum = true;
            } else {
                numsign = 1;
            }
            break;
        case '-':
            if( numinprog ) {
                stopnum = true;
                csign = -1;
            } else {
                numsign = -1;
                csign = 1;
            }
            break;
        case '.':
            if( numinprog ) {
                return( NO_NUMBER );
            }
            numstack[nument] = CurrentPos.line;
            stopnum = true;
            break;
        case '$':
            if( numinprog ) {
                return( NO_NUMBER );
            }
            rc = CFindLastLine( &numstack[nument] );
            if( rc != ERR_NO_ERR ) {
                return( rc );
            }
            stopnum = true;
            break;
        default:
            --buff;
            endparse = true;
            if( numinprog ) {
                stopnum = true;
            }
            break;
        }
        ++buff;

        /*
         * check if a number was being scanned
         */
        if( stopnum && numinprog ) {
            currnum[numptr] = '\0';
            numptr = 0;
            numstack[nument] = atol( currnum );
            numinprog = false;
        }
        if( stopnum ) {
            numstack[nument] *= numsign;
            nument++;
            numsign = csign;
            csign = 1;
            stopnum = false;
        }
    }
    *buffp = buff;
    for( i = 0; i < nument; i++ ) {
        sum += numstack[i];
    }
    *num = sum;
    return( ERR_NO_ERR );

} /* GetAddress */