#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;
}