#include <stdio.h>
#include "pagelist.h"

main()
{
  char           buffer[64];
  PLL_LISTDATA_S data;
  char           *handle;
  char           op[2];
  char           ob[2];
  PLL_ITEM_E     object;

  handle = PLLcreate();

  while (1)
   {
     printf("K I D G L P>");
     gets(op);

     if (*op != 'L' && *op != 'K')
      {

        printf("Page Object >");
        gets(ob);

        if (*ob == 'O')
           object = PLL_OBJECT;
        else
           object = PLL_PAGE;
  
        if (*ob == 'O' && *op != 'P' && *op != 'D')
         {
           printf("oid >");
           gets(buffer);
           data.oid = atoi(buffer);
         }
        else if (*op != 'P' && *op != 'D')
         {
           printf("nid >");
           gets(buffer);
           data.nid = atoi(buffer);
           printf("pid >");
           gets(buffer);
           data.pid = atoi(buffer);
         }
      }

     switch(*op)
      {
        case 'D':
           printf("DELETE==========\n");
           error(PLLdelete(handle, object));
           printf("================\n");
           break;

        case 'G':
           printf("GOTO==========\n");
           error(PLLgoto(handle, object, &data));  
           printf("================\n");
           break;

        case 'I':
           printf("INSERT==========\n");
           printf("where >"); 
           gets(buffer);
           error(PLLinsert(handle, object, &data, (PLL_POSITION_E)atoi(buffer),
                 1));
           printf("================\n");
           break;

        case 'K':
           printf("KILL===========\n");
           error(PLLkillList(&handle));
           handle = PLLcreate();
           printf("================\n");
           break; 

        case 'L':
           printf("PRINT==========\n");
           data.nid = PLL_FIRST;
           error(PLLgoto(handle, PLL_PAGE, &data));
           do
            {
              PLLgetData(handle, PLL_PAGE, &data);
              printf("NOTEBOOK: %d  PAGE %d\n", data.nid, data.pid);

              data.oid = PLL_FIRST;
              if (!PLLgoto(handle, PLL_OBJECT, &data))
                 do
                  {
                    PLLgetData(handle, PLL_OBJECT, &data);
                    printf("       OBJECT: %d\n", data.oid);
                    data.oid = PLL_NEXT;
                  }
                 while(!PLLgoto(handle, PLL_OBJECT, &data));

              data.nid = PLL_NEXT;
            }
           while (!PLLgoto(handle, PLL_PAGE, &data)); 
           printf("================\n");
           break;

        case 'P':
           if (*ob == 'O')
            {
              if (!error(PLLgetData(handle, PLL_OBJECT, &data)))
              printf("       OBJECT: %d\n", data.oid);
            }
           else
            {
              if (!error(PLLgetData(handle, PLL_PAGE, &data)))
              printf("NOTEBOOK: %d  PAGE %d\n", data.nid, data.pid);
            }
           break;
      }
   }


}

int error(errval)

PLL_RETCODE_E errval;

{
  static char *codes[] = 
   {"Null page list",
    "Empty page list",
    "Empty object list",
    "No such item",
    "OK",
    "At beginning of object list",
    "At beginning of page list",
    "At end of object list",
    "At end of page list"
   };

   printf("   Result %s\n", codes[errval+4]);
   return(errval);
}

