#include <stdio.h>
#include <stdlib.h>
#include <printf.h>
typedef struct
{
char *isim;
}
Kitap;
int
kitap_bas (FILE *akim,
const struct printf_info *bilgi,
const void *const *args)
{
const Kitap *k;
char *tampon;
int uzunluk;
/* Bir dizgeye çıktılanacak biçim. */
k = *((const Kitap **) (args[0]));
uzunluk = asprintf (&tampon, "<Kitap %p: %s>", k, k->isim);
if (uzunluk == -1)
return -1;
/* En küçük alan genişliğini doldurup akıma basalım. */
uzunluk = fprintf (akim, "%*s",
(info->left ? -info->width : info->width),
tampon);
/* Ortalığı temizle ve dön. */
free (tampon);
return uzunluk;
}
int
kitap_bas_argbilgi (const struct printf_info *bilgi, size_t n,
int *argturleri)
{
/* Daima tek bir argüman alıyoruz ve bu yapı için bir gösterici
oluyor.. */
if (n > 0)
argturleri[0] = PA_POINTER;
return 1;
}
int
main (void)
{
/* Basılacak Kitabı oluşturalım. */
Kitap kitabim;
kitabim.isim = "Kitabım";
/* Kitap için kotarıcı işlevi kaydedelim. */
register_printf_function ('K', kitap_bas, kitap_bas_argbilgi);
/* Şimdi kitabimi basalım. */
printf ("|%K|\n", &kitabim);
printf ("|%35K|\n", &kitabim);
printf ("|%-35K|\n", &kitabim);
return 0;
}