/***************************************************************************
 *
 *                  DLabel.c v2.0 last edited 14-Apr-87
 *
 *                            by KL Colclasure
 *
 ***************************************************************************/

#include <stdio.h>
#include <functions.h>

#include <intuition/intuition.h>

/*---- Defines ------------------------------------------------------------*/

#define VOLGAD_ID      1
#define TX1GAD_ID      2
#define TX2GAD_ID      3
#define TX3GAD_ID      4
#define TX4GAD_ID      5
#define ITXGAD_ID      6
#define CLRGAD_ID      7
#define PRTGAD_ID      8

/*---- Data for label -----------------------------------------------------*/

char vlin1[] =
{
   0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,
   0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,NULL
};

char vlin2[] =
{
   0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,
   0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,0xc4,NULL
};

/*---- Library names & pointers for openLibs() ----------------------------*/

int openLibs();
void closeLibs();

char *libs[] =
{
   "intuition.library",
   "graphics.library",
   NULL
};

struct IntuitionBase *IntuitionBase = NULL;
struct GfxBase *GfxBase = NULL;
unsigned long endBases = NULL;

/*---- Gadget stuff -------------------------------------------------------*/

char volBuf[23] = "DLabel2:";          /* String buffers.                  */
char tx1Buf[26] = "Disk Label Printer";
char tx2Buf[26] = "Version 2.0";
char tx3Buf[26] = "";
char tx4Buf[26] = "by KL Colclasure";
char itxBuf[26] = "AmigaDOS    MEMOREX DS/4D";

short xyPairs4[] = {0,0,57,0,57,12,0,12,0,0};

struct Border boolBdr =
{
   -1,-1,1,0,JAM1,
   5,&xyPairs4,NULL
};

struct IntuiText prtText =
{
   1,0,JAM1,9,2,NULL,
   "Print",NULL
};

struct Gadget prtGad =
{
   NULL,240,70,56,11,
   GADGHCOMP,
   RELVERIFY,
   BOOLGADGET,
   &boolBdr,NULL,&prtText,0,
   NULL,PRTGAD_ID,NULL
};

struct IntuiText clrText =
{
   1,0,JAM1,9,2,NULL,
   "Clear",NULL
};

struct Gadget clrGad =
{
   &prtGad,240,54,56,11,
   GADGHCOMP,
   RELVERIFY,
   BOOLGADGET,
   &boolBdr,NULL,&clrText,0,
   NULL,CLRGAD_ID,NULL
};

struct StringInfo itxStrInfo =         /* Info line string gadget.         */
{
   &itxBuf,NULL,0,26,0,
   0,0,0,0,0,NULL,0,NULL
};

struct Gadget itxGad =
{
   &clrGad,20,72,208,8,
   GADGHCOMP,
   NULL,
   STRGADGET,
   NULL,NULL,NULL,0,
   &itxStrInfo,ITXGAD_ID,NULL
};

struct StringInfo tx4StrInfo =         /* Text line 4 string gadget.       */
{
   &tx4Buf,NULL,0,26,0,
   0,0,0,0,0,NULL,0,NULL
};

struct Gadget tx4Gad =
{
   &itxGad,20,56,208,8,
   GADGHCOMP,
   RELVERIFY|STRINGCENTER,
   STRGADGET,
   NULL,NULL,NULL,0,
   &tx4StrInfo,TX4GAD_ID,NULL
};

struct StringInfo tx3StrInfo =         /* Text line 3 string gadget.       */
{
   &tx3Buf,NULL,0,26,0,
   0,0,0,0,0,NULL,0,NULL
};

struct Gadget tx3Gad =
{
   &tx4Gad,20,48,208,8,
   GADGHCOMP,
   RELVERIFY|STRINGCENTER,
   STRGADGET,
   NULL,NULL,NULL,0,
   &tx3StrInfo,TX3GAD_ID,NULL
};

struct StringInfo tx2StrInfo =         /* Text line 2 string gadget.       */
{
   &tx2Buf,NULL,0,26,0,
   0,0,0,0,0,NULL,0,NULL
};

struct Gadget tx2Gad =
{
   &tx3Gad,20,40,208,8,
   GADGHCOMP,
   RELVERIFY|STRINGCENTER,
   STRGADGET,
   NULL,NULL,NULL,0,
   &tx2StrInfo,TX2GAD_ID,NULL
};

struct StringInfo tx1StrInfo =         /* Text line 1 string gadget.       */
{
   &tx1Buf,NULL,0,26,0,
   0,0,0,0,0,NULL,0,NULL
};

struct Gadget tx1Gad =
{
   &tx2Gad,20,32,208,8,
   GADGHCOMP,
   RELVERIFY|STRINGCENTER,
   STRGADGET,
   NULL,NULL,NULL,0,
   &tx1StrInfo,TX1GAD_ID,NULL
};

struct StringInfo volStrInfo =         /* Volume string gadget.            */
{
   &volBuf,NULL,0,23,0,
   0,0,0,0,0,NULL,0,NULL
};

short xyPairs1[] = {0,0,193,0,193,12,0,12,0,0};
short xyPairs2[] = {193,0,217,0,217,6,193,6,193,12,217,12,217,6};
short xyPairs3[] = {0,12,0,56,217,56,217,68,0,68,0,56,217,56,217,12};

struct Border nx2Bdr =
{
   -8,-3,1,0,JAM1,
   8,&xyPairs3,NULL
};

struct Border nx1Bdr =
{
   -8,-3,1,0,JAM1,
   7,&xyPairs2,&nx2Bdr
};

struct Border labBdr =
{
   -8,-3,1,0,JAM1,
   5,&xyPairs1,&nx1Bdr
};

struct Gadget volGad =
{
   &tx1Gad,20,16,184,8,
   GADGHCOMP,
   RELVERIFY,
   STRGADGET,
   &labBdr,NULL,NULL,0,
   &volStrInfo,VOLGAD_ID,NULL
};

/*---- Window stuff -------------------------------------------------------*/

struct NewWindow nw =
{
   165,55,308,86,2,1,
   GADGETUP|CLOSEWINDOW,
   WINDOWDRAG|WINDOWDEPTH|WINDOWCLOSE|ACTIVATE,
   &volGad,NULL,
   "DLabel v2.0",
   NULL,NULL,0,0,0,0,WBENCHSCREEN
};

struct Window *w = NULL;

/*---- Dummy startup functions --------------------------------------------*/

void _wb_parse() {}
void _cli_parse() {}

/*---- Driver -------------------------------------------------------------*/

main()
{
   int finished = 0;
   struct IntuiMessage *msg;

   if (!(openLibs(libs,&IntuitionBase))) wrapup(1);
   if (!(w = OpenWindow(&nw))) wrapup(2);
   while (!finished)
   {
       Wait(1L << w->UserPort->mp_SigBit);
       msg = GetMsg(w->UserPort);
       switch (msg->Class)
       {
       case GADGETUP:
           doGadget(msg->IAddress);
           break;
       case CLOSEWINDOW:
           finished = -1;
           break;
       default:
           finished = -1;
       }
       ReplyMsg(msg);
   }
   wrapup(0);
}

doGadget(gad)
struct Gadget *gad;
{
   switch (gad->GadgetID)
   {
   case VOLGAD_ID:
   case TX1GAD_ID:
   case TX2GAD_ID:
   case TX3GAD_ID:
   case TX4GAD_ID:
       ActivateGadget(gad->NextGadget,w,NULL);
       break;
   case CLRGAD_ID:
       *volStrInfo.Buffer = 0; volStrInfo.BufferPos = 0;
       *tx1StrInfo.Buffer = 0; tx1StrInfo.BufferPos = 0;
       *tx2StrInfo.Buffer = 0; tx2StrInfo.BufferPos = 0;
       *tx3StrInfo.Buffer = 0; tx3StrInfo.BufferPos = 0;
       *tx4StrInfo.Buffer = 0; tx4StrInfo.BufferPos = 0;
       *itxStrInfo.Buffer = 0; itxStrInfo.BufferPos = 0;
       RefreshGList(&volGad,w,NULL,6L);
       ActivateGadget(&volGad,w,NULL);
       break;
   case PRTGAD_ID:
       printLabel();
       break;
   default:
       printf("Bad gadget id!\n");
   }
}

printLabel()
{
   int i1,i2;
   FILE *fp;

   if (!(fp = fopen("par:","w")))
   {
       perror("DLabel");
   }
   else
   {
       fprintf(fp,"%cU1",0x1b);
       fprintf(fp,"%c%24s%c%c%c%c\n",0xc9,&vlin1,0xc2,0xc4,0xc4,0xb7);
       fprintf(fp,"%c %-22s %c%c%c%c\n",0xba,&volBuf,0xc7,0xc4,0xc4,0xb5);
       fprintf(fp,"%c%24s%c%c%c%c\n",0xc7,&vlin1,0xca,0xc4,0xc4,0xb5);
       fprintf(fp,"%c%28c\n",0xba,0xba);
       i2 = (27 - strlen(&tx1Buf)) / 2;
       i1 = 27 - i2;
       fprintf(fp,"%c%*s %*c\n",0xba,i1,&tx1Buf,i2,0xba);
       i2 = (27 - strlen(&tx2Buf)) / 2;
       i1 = 27 - i2;
       fprintf(fp,"%c%*s %*c\n",0xba,i1,&tx2Buf,i2,0xba);
       i2 = (27 - strlen(&tx3Buf)) / 2;
       i1 = 27 - i2;
       fprintf(fp,"%c%*s %*c\n",0xba,i1,&tx3Buf,i2,0xba);
       i2 = (27 - strlen(&tx4Buf)) / 2;
       i1 = 27 - i2;
       fprintf(fp,"%c%*s %*c\n",0xba,i1,&tx4Buf,i2,0xba);
       fprintf(fp,"%c%28c\n",0xba,0xba);
       fprintf(fp,"%c%27s%c\n",0xc7,&vlin2,0xb5);
       fprintf(fp,"%c %-25s %c\n",0xba,&itxBuf,0xba);
       fprintf(fp,"%c%27s%c\n",0xc0,&vlin2,0xbe);
       fclose(fp);
   }
}

wrapup(stat)
int stat;
{
   if (w) CloseWindow(w);
   closeLibs(&IntuitionBase);
   exit(stat);
}
