extern void abort (void); typedef signed short int16_t; typedef unsigned short uint16_t; int16_t logadd (int16_t *a, int16_t *b); void ba_compute_psd (int16_t start); int16_t masktab[6] = { 1, 2, 3, 4, 5}; int16_t psd[6] = { 50, 40, 30, 20, 10}; int16_t bndpsd[6] = { 1, 2, 3, 4, 5}; void ba_compute_psd (int16_t start) { int i,j,k; int16_t lastbin = 4; j = start; k = masktab[start]; bndpsd[k] = psd[j]; j++; for (i = j; i < lastbin; i++) { bndpsd[k] = logadd(&bndpsd[k], &psd[j]); j++; } } int16_t logadd (int16_t *a, int16_t *b) { return *a + *b; } int main (void) { int i; ba_compute_psd (0); if (bndpsd[1] != 140) abort (); return 0; }