#include <stdio.h>
#include <inttypes.h>
#include <stdbool.h>

inline size_t min(size_t a, size_t b)
{
    return a < b ? a : b;
}

void print_einzelpaket(const uint8_t* paket, size_t paket_size, size_t paket_nominal_size, bool fill_with_zeroes)
{
    printf("Einzelpaket: ");
    size_t i;
    for(i = 0; i < paket_size; ++i)
        printf("%4d", paket[i]);
    if(fill_with_zeroes)
        for( ; i < paket_nominal_size; ++i)   
            printf("   #");
    printf("\n");
}

void print_gesamtpaket(const uint8_t* paket, size_t total_size, size_t paket_nominal_size, bool fill_with_zeroes)
{
    if (paket_nominal_size == 0)
        return; // sonst endlossschleife
    size_t idx;
    for(idx = 0; idx < total_size; idx += paket_nominal_size) // an die anfaenge der einzelpakete gehen
    {
        //wie groß ist dieses einzelne paket?
        size_t bytes_to_do = total_size - idx;
        size_t this_paket_size = min(bytes_to_do, paket_nominal_size);
        print_einzelpaket(paket+idx, this_paket_size, paket_nominal_size, fill_with_zeroes);
    }
}

int main(void)
{
    uint8_t mein_paket[] = {1,2,3,4,5,6,7,8,9,0};
    size_t gesamt = sizeof(mein_paket) / sizeof(mein_paket[0]);
    size_t einzeln = 3;
    printf("paket ist %d gross, einzelpakete sind %d lang\n", gesamt, einzeln);
    print_gesamtpaket(mein_paket, gesamt, einzeln, true);
    printf("nochmal\n");
    print_gesamtpaket(mein_paket, gesamt, einzeln, false);
    return 0;
}
