/** * @brief Writes the ship statistics description. * * @param s Ship stats to use. * @param buf Buffer to write to. * @param len Space left in the buffer. * @param newline Add a newline at start. * @return Number of characters written. */ int ss_statsListDesc( const ShipStatList *ll, char *buf, int len, int newline ) { int i; const ShipStatsLookup *sl; i = 0; for ( ; ll != NULL; ll=ll->next) { sl = &ss_lookup[ ll->type ]; switch (sl->data) { case SS_DATA_TYPE_DOUBLE: i += ss_printD( &buf[i], (len-i), (newline||(i!=0)), ll->d.d, sl ); break; case SS_DATA_TYPE_DOUBLE_ABSOLUTE: i += ss_printA( &buf[i], (len-i), (newline||(i!=0)), ll->d.d, sl ); break; case SS_DATA_TYPE_INTEGER: i += ss_printI( &buf[i], (len-i), (newline||(i!=0)), ll->d.i, sl ); break; case SS_DATA_TYPE_BOOLEAN: i += ss_printB( &buf[i], (len-i), (newline||(i!=0)), ll->d.i, sl ); break; } } return i; }
/** * @brief Writes the ship statistics description. * * @param s Ship stats to use. * @param buf Buffer to write to. * @param len Space left in the buffer. * @param newline Add a newline at start. * @return Number of characters written. */ int ss_statsListDesc( const ShipStatList *ll, char *buf, int len, int newline ) { int i, left, newl; const ShipStatsLookup *sl; i = 0; newl = newline; for ( ; ll != NULL; ll=ll->next) { left = len-i; if (left < 0) break; sl = &ss_lookup[ ll->type ]; switch (sl->data) { case SS_DATA_TYPE_DOUBLE: i += ss_printD( &buf[i], left, newl, ll->d.d, sl ); break; case SS_DATA_TYPE_DOUBLE_ABSOLUTE: i += ss_printA( &buf[i], left, newl, ll->d.d, sl ); break; case SS_DATA_TYPE_INTEGER: i += ss_printI( &buf[i], left, newl, ll->d.i, sl ); break; case SS_DATA_TYPE_BOOLEAN: i += ss_printB( &buf[i], left, newl, ll->d.i, sl ); break; } newl = 1; } return i; }
/** * @brief Writes the ship statistics description. * * @param s Ship stats to use. * @param buf Buffer to write to. * @param len Space left in the buffer. * @param newline Add a newline at start. * @param pilot Stats come from a pilot. * @return Number of characters written. */ int ss_statsDesc( const ShipStats *s, char *buf, int len, int newline ) { int i, l, left; char *ptr; double *dbl; int *num; const ShipStatsLookup *sl; l = 0; ptr = (char*) s; for (i=0; i<SS_TYPE_SENTINEL; i++) { sl = &ss_lookup[ i ]; /* Only want valid names. */ if (sl->name == NULL) continue; /* Calculate offset left. */ left = len-l; if (left < 0) break; switch (sl->data) { case SS_DATA_TYPE_DOUBLE: dbl = (double*) &ptr[ sl->offset ]; l += ss_printD( &buf[l], left, (newline||(l!=0)), ((*dbl)-1.), sl ); break; case SS_DATA_TYPE_DOUBLE_ABSOLUTE: dbl = (double*) &ptr[ sl->offset ]; l += ss_printA( &buf[l], left, (newline||(l!=0)), (*dbl), sl ); break; case SS_DATA_TYPE_INTEGER: num = (int*) &ptr[ sl->offset ]; l += ss_printI( &buf[l], left, (newline||(l!=0)), (*num), sl ); break; case SS_DATA_TYPE_BOOLEAN: num = (int*) &ptr[ sl->offset ]; l += ss_printB( &buf[l], left, (newline||(l!=0)), (*num), sl ); break; } } return l; }