Du siehst mich in meinen Grundfesten erschüttert und den Glauben an die deutsche Ingenieurskunst verlierend . Nein, das war nur als Anmerkung gedacht und nicht als Fehlermeldung.
Jetzt, wo mprg2bas funktioniert, ist es wohl egal, aber ich denke man kann den folgenden Abschnitt umschreiben:
C
- ++lineno;
- remaining = 74 - (needed - nsumlen);
- if (lineno>9) --remaining;
- if (lineno>99) --remaining;
- if (lineno>999) --remaining;
- if (lineno>9999) --remaining;
- printf("%d data%u", lineno, (unsigned)*r++);
- /* macht in dieser Situation dasselbe wie der Einzeiler */
- remaining = 79 - printf("%d data%u", ++lineno, (unsigned)*r++);
Außerdem würde ich vorschlagen, die Klappe nicht von beiden Seiten zuschlagen zu lassen ("remaining" von oben und "needed" von unten), sondern nur die tatsächliche Länge mitzuzählen (Man verliert allerdings die Chance, sowohl bei remaining als auch bei needed Fehler zu machen, die sich dann aufheben ) Das könnte dann ungefähr so aussehen (but never change a running system!):
C
- len = printf("4 sys%" PRIu16 ":data%u", startaddress, *r);
- lineno = 4;
- sum = 5;
- nsum = ((sum << 1) + !!(sum & 4096) + *r) & 8191;
- while (--nread)
- {
- ++r;
- sum = nsum;
- nsum = ((sum << 1) + !!(sum & 4096) + *r) & 8191;
- nsumlen = 4 + ((nsum + 256) > 999);
- len += 2 + (*r > 9) + (*r > 99);
- if (len + nsumlen > 79)
- {
- printf(",%u\n", sum + 256);
- len = printf("%d data%u", ++lineno, *r);
- }
- else
- {
- printf(",%u", *r);
- }
- }
- printf(",%u\n", nsum + 256);