#include <stdio.h>
#include <stdlib.h>
#include <src/csb.h>

int main (void)
{
   csb_buf *ps1 = NULL, *ps2 = NULL;
   char bangbuf[2];

   ps1 = csb_new();
   if (ps1 == NULL) return 1;

   printf ("ps1 created:\t\t\t'%s', length %lu, memory size %lu\n", csb_cstring(ps1), (unsigned long)csb_length(ps1), (unsigned long)csb_memorysize(ps1));
   ps2 = csb_new_withstring ("HelloWorld!");
   if (ps2 == NULL) {
      csb_destroy(ps1);
      return 1;
   }

   printf ("ps2 created from buffer:\t'%s', (%lu, %lu)\n", csb_cstring(ps2), (unsigned long)csb_length(ps2), (unsigned long)csb_memorysize(ps2));
   (void)csb_putc (ps1, 'h');    printf ("csb_putc(ps1,'h'):\t\t'%s', (%lu, %lu)\n", csb_cstring(ps1), (unsigned long)csb_length(ps1), (unsigned long)csb_memorysize(ps1));
   (void)csb_puts (ps1, "ellO");    printf ("csb_puts(ps1,\"ellO\"):\t\t'%s', (%lu, %lu)\n", csb_cstring(ps1), (unsigned long)csb_length(ps1), (unsigned long)csb_memorysize(ps1));
   csb_rewind (ps1);
   (void)csb_putc (ps1, 'H');
   printf ("csb_rewind()\n");
   printf ("csb_putc(ps1,'H'):\t\t'%s', (%lu, %lu)\n", csb_cstring(ps1), (unsigned long)csb_length(ps1), (unsigned long)csb_memorysize(ps1));
   (void)csb_seek (ps1, 4);
   printf ("csb_seek(ps1,4):\t\t'%c'\n", csb_getc (ps1));
   (void)csb_ungetc (ps1, 'o');
   printf ("csb_ungetc(ps1,'o'):\t\t'%c'\n", csb_getc (ps1));
   printf ("csb_tellpos(ps1):\t\t%lu\n", (unsigned long)csb_tellpos(ps1));
   csb_strcat (ps1, "World");
   printf ("csb_strcat(ps1,\"World\"):\t'%s', (%lu, %lu)\n", csb_cstring(ps1), (unsigned long)csb_length(ps1), (unsigned long)csb_memorysize(ps1));
   csb_prealloc (ps1, 12);
   printf ("csb_prealloc(ps1,12):\t\t'%s', (%lu, %lu)\n", csb_cstring(ps1), (unsigned long)csb_length(ps1), (unsigned long)csb_memorysize(ps1));
   csb_seek (ps1, 10);
   if (csb_tellpos (ps1) != 10) {
    printf ("Error: seek to position 10 failed (pos = %lu)\n", (unsigned long)csb_tellpos(ps1));
    csb_destroy(ps1);
    csb_destroy(ps2);
    return (1);
   }
   printf ("csb_seek(ps1,10):\t\t%sEOF\n", (csb_getc (ps1) == EOF ? "" : "not "));
   csb_seek (ps1, 10);
   csb_write (ps1, "!", 2);
   printf ("csb_write(ps1,\"!\", 2):\t\t'%s', (%lu, %lu)\n", csb_cstring(ps1), (unsigned long)csb_length(ps1), (unsigned long)csb_memorysize(ps1));
   csb_seek (ps1, 10);
   if (csb_tellpos (ps1) != 10) {
    printf ("Error: seek to position 10 failed (pos = %lu)\n", (unsigned long)csb_tellpos(ps1));
    csb_destroy(ps1);
    csb_destroy(ps2);
    return (1);
   }
   printf ("csb_seek(ps1,10):\t\t'%c'\n", csb_getc (ps1));
   csb_seek (ps1, 10);
   (void)csb_read (ps1, bangbuf, 2);
   printf ("csb_read(ps1,bangbuf, 2):\t'%s'\n", bangbuf);
   csb_rewind (ps1);
   csb_printf (ps1, "%s == %s, %lu, %lu", csb_cstring(ps2), csb_cstring(ps2), (unsigned long)csb_length(ps1), (unsigned long)csb_memorysize(ps1));
   printf ("csb_printf:\t\t\t'%s', (%lu, %lu)\n", csb_cstring(ps1), (unsigned long)csb_length(ps1), (unsigned long)csb_memorysize(ps1));

   csb_destroy (ps2);
   csb_destroy (ps1);
   return (0);
} 


syntax highlighted by Code2HTML, v. 0.9.1