static char * common_flags_to_string (FlagType flags, int object_type, FlagBitsType *flagbits, int n_flagbits) { int len; int i; FlagHolder fh, savef; char *buf, *bp; fh.Flags = flags; #ifndef FLAG_TEST switch (object_type) { case VIA_TYPE: CLEAR_FLAG (VIAFLAG, &fh); break; case RATLINE_TYPE: CLEAR_FLAG (RATFLAG, &fh); break; case PIN_TYPE: CLEAR_FLAG (PINFLAG, &fh); break; } #endif savef = fh; len = 3; /* for "()\0" */ for (i = 0; i < n_flagbits; i++) if ((flagbits[i].object_types & object_type) && (TEST_FLAG (flagbits[i].mask, &fh))) { len += flagbits[i].nlen + 1; CLEAR_FLAG (flagbits[i].mask, &fh); } if (TEST_ANY_THERMS (&fh)) { len += sizeof ("thermal()"); for (i = 0; i < MAX_LAYER; i++) if (TEST_THERM (i, &fh)) len += printed_int_length (i, GET_THERM (i, &fh)) + 1; } bp = buf = alloc_buf (len + 2); *bp++ = '"'; fh = savef; for (i = 0; i < n_flagbits; i++) if (flagbits[i].object_types & object_type && (TEST_FLAG (flagbits[i].mask, &fh))) { if (bp != buf + 1) *bp++ = ','; strcpy (bp, flagbits[i].name); bp += flagbits[i].nlen; CLEAR_FLAG (flagbits[i].mask, &fh); } if (TEST_ANY_THERMS (&fh)) { if (bp != buf + 1) *bp++ = ','; strcpy (bp, "thermal"); bp += strlen ("thermal"); grow_layer_list (0); for (i = 0; i < MAX_LAYER; i++) if (TEST_THERM (i, &fh)) set_layer_list (i, GET_THERM (i, &fh)); strcpy (bp, print_layer_list ()); bp += strlen (bp); } *bp++ = '"'; *bp = 0; return buf; }
static char * common_flags_to_string (FlagType flags, int object_type, FlagBitsType *flagbits, int n_flagbits) { int len; int i; FlagHolder fh, savef; char *buf, *bp; unknown_flag_t *u; fh.Flags = flags; #ifndef FLAG_TEST switch (object_type) { case VIA_TYPE: CLEAR_FLAG (VIAFLAG, &fh); break; case RATLINE_TYPE: CLEAR_FLAG (RATFLAG, &fh); break; case PIN_TYPE: CLEAR_FLAG (PINFLAG, &fh); break; } #endif savef = fh; len = 3; /* for "()\0" */ for (i = 0; i < n_flagbits; i++) if ((flagbits[i].object_types & object_type) && (TEST_FLAG (flagbits[i].mask, &fh))) { len += flagbits[i].nlen + 1; CLEAR_FLAG (flagbits[i].mask, &fh); } if (TEST_ANY_THERMS (&fh)) { len += sizeof ("thermal()"); for (i = 0; i < MAX_LAYER; i++) if (TEST_THERM (i, &fh)) len += printed_int_length (i, GET_THERM (i, &fh)) + 1; } if (flags.q > 0) { len += sizeof ("shape(.)"); if (flags.q > 9) len+=2; } if (flags.int_conn_grp > 0) { len += sizeof ("intconn(.)"); if (flags.q > 9) len++; if (flags.q > 99) len++; } for(u = flags.unknowns; u != NULL; u = u->next) len += strlen(u->str)+1; bp = buf = alloc_buf (len + 2); *bp++ = '"'; fh = savef; for (i = 0; i < n_flagbits; i++) if (flagbits[i].object_types & object_type && (TEST_FLAG (flagbits[i].mask, &fh))) { if (bp != buf + 1) *bp++ = ','; strcpy (bp, flagbits[i].name); bp += flagbits[i].nlen; CLEAR_FLAG (flagbits[i].mask, &fh); } if (TEST_ANY_THERMS (&fh)) { if (bp != buf + 1) *bp++ = ','; strcpy (bp, "thermal"); bp += strlen ("thermal"); grow_layer_list (0); for (i = 0; i < MAX_LAYER; i++) if (TEST_THERM (i, &fh)) set_layer_list (i, GET_THERM (i, &fh)); strcpy (bp, print_layer_list ()); bp += strlen (bp); } if (flags.q > 0) { if (bp != buf + 1) *bp++ = ','; bp += sprintf(bp, "shape(%d)", flags.q); } if (flags.int_conn_grp > 0) { if (bp != buf + 1) *bp++ = ','; bp += sprintf(bp, "intconn(%d)", flags.int_conn_grp); } for(u = flags.unknowns; u != NULL; u = u->next) { int len; len = strlen(u->str); if (bp != buf + 1) *bp++ = ','; memcpy(bp, u->str, len); bp += len; } *bp++ = '"'; *bp = 0; return buf; }