Exemplo n.º 1
0
 virtual void SetUp()
 {
     V = -0.6;
     lL = Lead(1.2, 2.0, -0.4, -0.4, 300, 0, 0);
     T1 = "-0.4, 0.0; 0.0, -0.4";
     B1 = Insulator(5.4, 5.4, -0.4, -0.4, 5, 0, 0, V);
     T2 = "-0.4, 0.0; 0.0, -0.4";
     lR = Lead(1.2, 2.0, -0.4, -0.4, 300, M_PI/2, V);
     wire = Chain(lL, T1, B1, T2, lR);
 }
Exemplo n.º 2
0
/*
 * RegSub - perform substitutions after a regexp match
 */
int RegSub( regexp *prog, char *source, char *dest, linenum lineno )
{
    char        *src, *dst, c;
    int         no, len, splitit = FALSE;
    bool        upper_flag = FALSE, lower_flag = FALSE, perm_flag = FALSE;
    char        *tmp;
    char        buff[MAX_STR];
    int         i, j;
    linenum     ll;


    tmp = StaticAlloc();

    src = source;
    dst = dest;
    while( (c = *src++) != '\0' ) {
        if( c == '&' ) {
            no = 0;
        } else if( c == '\\' && '0' <= *src && *src <= '9' ) {
            no = *src++ - '0';
        } else {
            no = -1;
        }

        /*
         * do we have a normal character?
         */
        if( no < 0 ) {
            /*
             * is this an escaped character?
             */
            if( c == '\\' && EditFlags.RegSubMagic ) {
                switch( *src ) {
                case '|':
                    src++;
                    if( !isdigit( *src ) ) {
                        break;
                    }
                    i = 0;
                    while( isdigit( *src ) ) {
                        buff[i++] = *src++;
                    }
                    buff[i] = 0;
                    j = atoi( buff ) - 1;
                    *dst = 0;
                    i = VirtualLineLen( dest );
                    while( i < j ) {
                        *dst++ = ' ';
                        i++;
                    }
                    break;
                case '#':
                    src++;
                    CFindLastLine( &ll );
                    sprintf( buff, "%ld", ll );
                    i = strlen( buff );
                    sprintf( buff, "%ld", lineno );
                    Lead( '0', i, buff );
                    for( j = 0; j < i; j++ ) {
                        *dst++ = buff[j];
                    }
                    break;
                case 't':
                    src++;
                    if( EditFlags.RealTabs ) {
                        *dst++ = '\t';
                    } else {
                        *dst++ = 't';
                    }
                    break;
                case 'n':
                    src++;
                    if( EditFlags.AllowRegSubNewline ) {
                        *dst++ = SPLIT_CHAR;
                        splitit = TRUE;
                    } else {
                        *dst++ = 'n';
                    }
                    break;
                case '\\':
                case '&':
                    c = *src++;
                    *dst++ = c;
                    break;
                case 'u':
                    src++;
                    upper_flag = TRUE;
                    perm_flag = FALSE;
                    break;
                case 'l':
                    src++;
                    lower_flag = TRUE;
                    perm_flag = FALSE;
                    break;
                case 'L':
                    src++;
                    lower_flag = TRUE;
                    perm_flag = TRUE;
                    break;
                case 'U':
                    src++;
                    upper_flag = TRUE;
                    perm_flag = TRUE;
                    break;
                case 'e':
                case 'E':
                    src++;
                    upper_flag = lower_flag = perm_flag = FALSE;
                    break;
                default:
                    *dst++ = '\\';
                    break;
                }
            /*
             * not escaped, so just copy it in
             */
            } else {
                if( upper_flag ) {
                    c = toupper( c );
                    if( !perm_flag ) {
                        upper_flag = FALSE;
                    }
                } else if( lower_flag ) {
                    c = tolower( c );
                    if( !perm_flag ) {
                        lower_flag = FALSE;
                    }
                }
                *dst++ = c;
            }
        /*
         * copy in a sub expression
         */
        } else if( prog->startp[no] != NULL && prog->endp[no] != NULL ) {
            len = prog->endp[no] - prog->startp[no];
            if( upper_flag ) {
                strcpy( tmp, prog->startp[no] );
                strncpy( dst, strupr( tmp ), len );
                if( !perm_flag ) {
                    upper_flag = FALSE;
                }
            } else if( lower_flag ) {
                strcpy( tmp, prog->startp[no] );
                strncpy( dst, strlwr( tmp ), len );
                if( !perm_flag ) {
                    lower_flag = FALSE;
                }
            } else {
                strncpy( dst, prog->startp[no], len );
            }
            dst += len;
        }

    }
    *dst++ = 0;
    StaticFree( tmp );
    return( splitit );

} /* RegSub */
Exemplo n.º 3
0
static void basePrintf( const char *in, va_list al )
// With format "in" and argument list "al", use barfChar() to write an output
// Flags, minimum field width, precision, and length modifiers are unsupported.
// conversion specifiers are a superset of a subset of those printf supports.
// Unsupported specifiers are quietly ignored.
{
    char        cin;
    int         i, j;
    long        l;
    char        buff[MAX_STR], *tmp;

    cin = *in;
    while( cin != '\0' ) {
        if( cin == '%' ) {
            in++;
            switch( *in ) {
            case '%':
                barfChar( '%' );
                break;
            case 'c':
                barfChar( (char)va_arg( al, int ) );
                break;
            case 'u':
                i = va_arg( al, int );
                sprintf( buff, "%u", (unsigned)i );
                goto copyloop1;
            case 'd':
                i = va_arg( al, int );
                sprintf( buff, "%d", (unsigned)i );
                goto copyloop1;
            case 'U':
                l = va_arg( al, long );
                sprintf( buff, "%lu", (unsigned long)l );
                goto copyloop1;
            case 'l':
                l = va_arg( al, long );
                sprintf( buff, "%ld", (long)l );
                goto copyloop1;
            case 's':
                tmp = va_arg( al, char * );
                goto copyloop2;
#ifndef NDEBUG
            case 'W':
#ifdef _M_I86
                i = va_arg( al, int );
                j = va_arg( al, int );
                sprintf( buff, "%04x:%04x", j, i );
#else
                i = va_arg( al, int );
                sprintf( buff, "%08x", i );
#endif
                goto copyloop1;
#endif
            case 'Z':   /* %02x */
                i = va_arg( al, int );
                sprintf( buff, "%02x", i );
                goto copyloop1;
            case 'D':   /* %02d */
                i = va_arg( al, int );
                sprintf( buff, "%02d", i );
                goto copyloop1;
            case 'L':   /* %8ld */
                l = va_arg( al, long );
                sprintf( buff, "%8ld", l );
                j = 8;
                goto copyloop;
            case 'M':   /* %5ld */
                l = va_arg( al, long );
                sprintf( buff, "%5ld", l );
                j = 5;
                goto copyloop;
            case 'N':   /* %6ld */
                l = va_arg( al, long );
                sprintf( buff, "%6ld", l );
                j = 6;
                goto copyloop;
            case 'O':   /* %6d */
                i = va_arg( al, int );
                sprintf( buff, "%6d", i );
                j = 6;
                goto copyloop;
            case 'S':   /* %-12s */
                j = 12;
                goto copyloopa;
            case 'X':   /* %-15s */
                j = 15;
                goto copyloopa;
            case 'Y':   /* %-32s */
                j = 32;
copyloopa:
                tmp = va_arg( al, char * );
                strcpy( buff, tmp );
                {
                    int k;

                    l = strlen( buff );
                    k = j - l;
                    if( k > 0 ) {
                        tmp = &buff[l];
                        for( i = 0; i < k; i++ ) {
                            tmp[i] = ' ';
                        }
                        tmp[k] = 0;
                    }
                }
                goto copyloop1;
copyloop:
                Lead( ' ', j, buff );
copyloop1:
                tmp = buff;
copyloop2:
                while( *tmp != '\0' ) {
                    barfChar( *tmp++ );
                }
                break;
            }
        } else {