
/*
 *  main.c
 */


#include "defs.h"

Prototype struct Window *win;

extern struct Library *SysBase;

struct Window *win = NULL;


/***********************  main  **********************************/
const UBYTE version[]  = VER;           /*  be nice to version questions */
const UBYTE myname[]   = "Kpri v2.0 © Koessi 91";
const UBYTE usagestr[] = "\nUSAGE:"
                         "\n       Kpri [textfile]\n";
const UBYTE os20str[]  = "RAW:19/11/300/11/ Kpri: You need OS 2.0, sorry...";

int
main(int argc, UBYTE **argv)
{
  if (SysBase->lib_Version < 36)
  {
    FH *out;
    if (out = (FH *)Open(os20str, MODE_NEWFILE))
    {
      Delay(150);
      Close(out);
    }
    return(1);
  }

  if (argc > 1)
  {
    UBYTE test = *argv[1];
    if ((argc > 2) ||
       (test < 65) || (test > 122) ||
      ((test > 90) && (test < 97)))
    {
      textreq.es_Title        = myname;
      textreq.es_TextFormat   = usagestr;
      textreq.es_GadgetFormat = resume;

      EasyRequestArgs(win, &textreq, NULL, NULL);
      return(1);
    }
  }

  struct Screen *scr;
  if (scr = (struct Screen *)LockPubScreen(NULL))   /*  get workbenchscreen */
  {
    SHORT LeftEdge = (SHORT)((scr->Width  >> 1) - WIN_WIDTH  / 2);
    SHORT TopEdge  = (SHORT)((scr->Height >> 1) - WIN_HEIGHT / 2);

    struct Gadget *glist;
    if (glist = (struct Gadget *)InitGads(scr))     /*  setup gadgetlist    */
    {
      win = (struct Window *)OpenWindowTags(
            NULL,
            WA_Flags,     WFLG_DRAGBAR  | WFLG_DEPTHGADGET  | WFLG_SMART_REFRESH |
                          WFLG_ACTIVATE | WFLG_CLOSEGADGET,

            WA_IDCMP,     IDCMP_GADGETUP| IDCMP_MOUSEBUTTONS| IDCMP_GADGETDOWN   |
                          IDCMP_CLOSEWINDOW,

            WA_Left,      LeftEdge,
            WA_Top,       TopEdge,
            WA_Width,     WIN_WIDTH,
            WA_Height,    WIN_HEIGHT,
            WA_Title,     myname,
            WA_MinWidth,  32,
            WA_MinHeight, 32,
            WA_MaxWidth,  -1,
            WA_MaxHeight, -1,
            WA_AutoAdjust, 1,
            WA_PubScreen, NULL,
            WA_PubScreenFallBack, 1,
            WA_Gadgets,   glist,
            TAG_END);

      if (win)
      {
        GT_RefreshWindow(win, NULL);
        DrawImage(win->RPort, &image0, 205, 32);  /*  logo  */

        get_date();

        if (argc == 2)
        {
          strcpy(Buf_storage_str, argv[1]);
          ask_print(Buf_storage_str);
        }

        while (!quit)
        {
          WaitPort(win->UserPort);

          struct  IntuiMessage *msg;
          while (msg = GT_GetIMsg(win->UserPort))
          {
            ULONG  idcmp_class = msg->Class;
            struct Gadget *gad = msg->IAddress;
            USHORT gad_id      = gad->GadgetID;

            GT_ReplyIMsg(msg);

            switch(idcmp_class)
            {

            case IDCMP_GADGETUP:
              switch(gad_id)
              {
              case GAD_pagesize:
                toggle(pagesize);
                continue;

              case GAD_linelength:
                if (linelength < 2)
                  ++linelength;
                else
                  linelength = 0;
                continue;

              case GAD_split:
                toggle(split);
                continue;

              case GAD_title:
                toggle(title);
                continue;

              case GAD_automatic:
                toggle(autom);
                if (autom)
                {
                  for (SHORT i = 0; i < 2; ++i)
                    do_all(i);
                }
                continue;

              case GAD_filereq:
                do_filereq();
                continue;

              case GAD_storage_list:
                do_storage_list();
                continue;

              case GAD_storage_str:
                ask_print(Buf_storage_str);
                continue;

              case GAD_print_it:
                do_print_it();
                continue;

              case GAD_forget_it:
                do_forget_it();
                continue;

              case GAD_quit:
              default:
              }                   /*  switch gad_id */

            case IDCMP_CLOSEWINDOW:
              do_quit();

            default:
              break;
            }                     /*  switch idcmp_class  */
          }                       /*  while msg     */
        }                         /*  while !quit  */
        cleanup();
        CloseWindow(win);
      }                           /*  if win */
      FreeGads();
    }                             /*  if glist */
  }                               /*  if scr  */
  return(0);
}

