src/main.c

Wed, 05 Aug 2009 17:32:05 +0100

author
Philip Pemberton <philpem@philpem.me.uk>
date
Wed, 05 Aug 2009 17:32:05 +0100
changeset 18
fd1c6f6066da
parent 16
57eff547e4f1
child 19
b7fe751ea60d
permissions
-rw-r--r--

updated README

philpem@3 1 /**************************
philpem@3 2 * P-Touch PT-2450DX printer driver
philpem@3 3 *
philpem@3 4 * P. Pemberton, 2009
philpem@3 5 *
philpem@3 6 * Specs:
philpem@3 7 * Printer head is 128 dots, 180dpi, for a total print area of ~18mm vertical
philpem@3 8 * by however long your TZ label tape is.
philpem@3 9 * Printhead size is (128/180)=0.711[.] inches, or 18.0622[.] mm
philpem@3 10 * Each dot is (18.062/128) = 0.1411[.] mm
philpem@3 11 * Printable area is (numdots * 0.1411) mm
philpem@3 12 *
philpem@3 13 * Tape width Margins Printable area
philpem@3 14 * mm dots mm dots mm dots
philpem@3 15 * 6mm 42 1.0mm 7 4mm 28
philpem@3 16 * 9mm 63 1.0mm 7 7mm 49
philpem@3 17 * 12mm 85 2.0mm 14 8mm 57
philpem@3 18 * 18mm 127 3.0mm 21 12mm 85
philpem@3 19 * 24mm 170 3.0mm 128 18mm 128 ***
philpem@3 20 *
philpem@3 21 * 24mm is slightly odd. Because the printhead is only 128 dots (18mm), the
philpem@3 22 * margins are enforced by this, and not the driver software. It is impossible
philpem@3 23 * to print right to the edge of a 24mm label in a PT-2450DX.
philpem@3 24 *
philpem@3 25 **************************/
philpem@3 26
philpem@0 27 #include <stdio.h>
philpem@0 28 #include <stdlib.h>
philpem@10 29 #include <gd.h>
philpem@10 30 #include <gdfonts.h>
philpem@10 31 #include <gdfontl.h>
philpem@3 32 #include "ptouch.h"
philpem@0 33
philpem@3 34 /****************************************************************************/
philpem@0 35
philpem@0 36 int main(int argc, char **argv)
philpem@0 37 {
philpem@3 38 pt_Device *dev;
philpem@3 39
philpem@0 40 // check command line args
philpem@0 41 if (argc < 2) {
philpem@0 42 printf("ERROR: must specify device name\n");
philpem@0 43 return -1;
philpem@0 44 }
philpem@0 45
philpem@3 46 // Open and initialise the printer
philpem@3 47 dev = pt_Initialise(argv[1]);
philpem@3 48
philpem@3 49 if (dev == NULL) {
philpem@3 50 printf("Error opening printer device.\n");
philpem@0 51 return -1;
philpem@0 52 }
philpem@0 53
philpem@10 54 // Get printer status
philpem@10 55 int err;
philpem@10 56 if ((err = pt_GetStatus(dev)) != PT_ERR_SUCCESS) {
philpem@10 57 printf("getstatus error %d\n", err);
philpem@10 58 return -1;
philpem@10 59 }
philpem@10 60
philpem@10 61 // Create a label
philpem@10 62 gdImagePtr im;
philpem@10 63 int white, black;
philpem@10 64 im = gdImageCreate(256, dev->pixelWidth);
philpem@10 65 white = gdImageColorAllocate(im, 255, 255, 255);
philpem@10 66 black = gdImageColorAllocate(im, 0, 0, 0);
philpem@10 67 gdImageString(im, gdFontGetLarge(), 0, 0, "!!123!! Test label !!ABC!!", black);
philpem@10 68 gdImageString(im, gdFontGetLarge(), 10, 10, "!!123!! Test label !!ABC!!", black);
philpem@10 69 gdImageString(im, gdFontGetLarge(), 20, 20, "!!123!! Test label !!ABC!!", black);
philpem@10 70 gdImageString(im, gdFontGetLarge(), 30, 30, "!!123!! Test label !!ABC!!", black);
philpem@10 71 gdImageString(im, gdFontGetLarge(), 40, 40, "!!123!! Test label !!ABC!!", black);
philpem@10 72
philpem@10 73 // dump the image (for testing purposes)
philpem@10 74 FILE *fp = fopen("labeldump.png", "wb");
philpem@10 75 gdImagePng(im, fp);
philpem@10 76 fclose(fp);
philpem@10 77
philpem@16 78 // Set job options
philpem@16 79 pt_SetOption(dev, PT_OPTION_AUTOCUT, 1);
philpem@16 80 pt_SetOption(dev, PT_OPTION_MIRROR, 1);
philpem@16 81
philpem@10 82 // Print the label
philpem@10 83 printf("Print state code: %d\n", pt_Print(dev, &im, 1));
philpem@10 84
philpem@10 85 gdImageDestroy(im);
philpem@10 86
philpem@3 87 // Close the printer device
philpem@3 88 pt_Close(dev);
philpem@0 89
philpem@0 90 return 0;
philpem@0 91 }