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); }
/* * 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 */
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 {