Improved Postscript output handling.
authorArjen Baart <arjen@andromeda.nl>
Thu, 23 Dec 2010 14:51:46 +0000 (15:51 +0100)
committerArjen Baart <arjen@andromeda.nl>
Thu, 23 Dec 2010 14:51:46 +0000 (15:51 +0100)
The AFM (Adobe Font Metrics) file for the courier font is included in the source
and will be installed in /usr/local/share/afm.
The PostScript class throws an exception when things go wrong, like nog being
able to open the output file of find a font metric. This exception is caught in
the output routines.

Courier.afm [new file with mode: 0644]
account.cpp
makefile
postscript.h

diff --git a/Courier.afm b/Courier.afm
new file mode 100644 (file)
index 0000000..be84b6b
--- /dev/null
@@ -0,0 +1,342 @@
+StartFontMetrics 4.1\r
+Comment Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.\r
+Comment Creation Date: Thu May  1 17:27:09 1997\r
+Comment UniqueID 43050\r
+Comment VMusage 39754 50779\r
+FontName Courier\r
+FullName Courier\r
+FamilyName Courier\r
+Weight Medium\r
+ItalicAngle 0\r
+IsFixedPitch true\r
+CharacterSet ExtendedRoman\r
+FontBBox -23 -250 715 805 \r
+UnderlinePosition -100\r
+UnderlineThickness 50\r
+Version 003.000\r
+Notice Copyright (c) 1989, 1990, 1991, 1992, 1993, 1997 Adobe Systems Incorporated.  All Rights Reserved.\r
+EncodingScheme AdobeStandardEncoding\r
+CapHeight 562\r
+XHeight 426\r
+Ascender 629\r
+Descender -157\r
+StdHW 51\r
+StdVW 51\r
+StartCharMetrics 315\r
+C 32 ; WX 600 ; N space ; B 0 0 0 0 ;\r
+C 33 ; WX 600 ; N exclam ; B 236 -15 364 572 ;\r
+C 34 ; WX 600 ; N quotedbl ; B 187 328 413 562 ;\r
+C 35 ; WX 600 ; N numbersign ; B 93 -32 507 639 ;\r
+C 36 ; WX 600 ; N dollar ; B 105 -126 496 662 ;\r
+C 37 ; WX 600 ; N percent ; B 81 -15 518 622 ;\r
+C 38 ; WX 600 ; N ampersand ; B 63 -15 538 543 ;\r
+C 39 ; WX 600 ; N quoteright ; B 213 328 376 562 ;\r
+C 40 ; WX 600 ; N parenleft ; B 269 -108 440 622 ;\r
+C 41 ; WX 600 ; N parenright ; B 160 -108 331 622 ;\r
+C 42 ; WX 600 ; N asterisk ; B 116 257 484 607 ;\r
+C 43 ; WX 600 ; N plus ; B 80 44 520 470 ;\r
+C 44 ; WX 600 ; N comma ; B 181 -112 344 122 ;\r
+C 45 ; WX 600 ; N hyphen ; B 103 231 497 285 ;\r
+C 46 ; WX 600 ; N period ; B 229 -15 371 109 ;\r
+C 47 ; WX 600 ; N slash ; B 125 -80 475 629 ;\r
+C 48 ; WX 600 ; N zero ; B 106 -15 494 622 ;\r
+C 49 ; WX 600 ; N one ; B 96 0 505 622 ;\r
+C 50 ; WX 600 ; N two ; B 70 0 471 622 ;\r
+C 51 ; WX 600 ; N three ; B 75 -15 466 622 ;\r
+C 52 ; WX 600 ; N four ; B 78 0 500 622 ;\r
+C 53 ; WX 600 ; N five ; B 92 -15 497 607 ;\r
+C 54 ; WX 600 ; N six ; B 111 -15 497 622 ;\r
+C 55 ; WX 600 ; N seven ; B 82 0 483 607 ;\r
+C 56 ; WX 600 ; N eight ; B 102 -15 498 622 ;\r
+C 57 ; WX 600 ; N nine ; B 96 -15 489 622 ;\r
+C 58 ; WX 600 ; N colon ; B 229 -15 371 385 ;\r
+C 59 ; WX 600 ; N semicolon ; B 181 -112 371 385 ;\r
+C 60 ; WX 600 ; N less ; B 41 42 519 472 ;\r
+C 61 ; WX 600 ; N equal ; B 80 138 520 376 ;\r
+C 62 ; WX 600 ; N greater ; B 66 42 544 472 ;\r
+C 63 ; WX 600 ; N question ; B 129 -15 492 572 ;\r
+C 64 ; WX 600 ; N at ; B 77 -15 533 622 ;\r
+C 65 ; WX 600 ; N A ; B 3 0 597 562 ;\r
+C 66 ; WX 600 ; N B ; B 43 0 559 562 ;\r
+C 67 ; WX 600 ; N C ; B 41 -18 540 580 ;\r
+C 68 ; WX 600 ; N D ; B 43 0 574 562 ;\r
+C 69 ; WX 600 ; N E ; B 53 0 550 562 ;\r
+C 70 ; WX 600 ; N F ; B 53 0 545 562 ;\r
+C 71 ; WX 600 ; N G ; B 31 -18 575 580 ;\r
+C 72 ; WX 600 ; N H ; B 32 0 568 562 ;\r
+C 73 ; WX 600 ; N I ; B 96 0 504 562 ;\r
+C 74 ; WX 600 ; N J ; B 34 -18 566 562 ;\r
+C 75 ; WX 600 ; N K ; B 38 0 582 562 ;\r
+C 76 ; WX 600 ; N L ; B 47 0 554 562 ;\r
+C 77 ; WX 600 ; N M ; B 4 0 596 562 ;\r
+C 78 ; WX 600 ; N N ; B 7 -13 593 562 ;\r
+C 79 ; WX 600 ; N O ; B 43 -18 557 580 ;\r
+C 80 ; WX 600 ; N P ; B 79 0 558 562 ;\r
+C 81 ; WX 600 ; N Q ; B 43 -138 557 580 ;\r
+C 82 ; WX 600 ; N R ; B 38 0 588 562 ;\r
+C 83 ; WX 600 ; N S ; B 72 -20 529 580 ;\r
+C 84 ; WX 600 ; N T ; B 38 0 563 562 ;\r
+C 85 ; WX 600 ; N U ; B 17 -18 583 562 ;\r
+C 86 ; WX 600 ; N V ; B -4 -13 604 562 ;\r
+C 87 ; WX 600 ; N W ; B -3 -13 603 562 ;\r
+C 88 ; WX 600 ; N X ; B 23 0 577 562 ;\r
+C 89 ; WX 600 ; N Y ; B 24 0 576 562 ;\r
+C 90 ; WX 600 ; N Z ; B 86 0 514 562 ;\r
+C 91 ; WX 600 ; N bracketleft ; B 269 -108 442 622 ;\r
+C 92 ; WX 600 ; N backslash ; B 118 -80 482 629 ;\r
+C 93 ; WX 600 ; N bracketright ; B 158 -108 331 622 ;\r
+C 94 ; WX 600 ; N asciicircum ; B 94 354 506 622 ;\r
+C 95 ; WX 600 ; N underscore ; B 0 -125 600 -75 ;\r
+C 96 ; WX 600 ; N quoteleft ; B 224 328 387 562 ;\r
+C 97 ; WX 600 ; N a ; B 53 -15 559 441 ;\r
+C 98 ; WX 600 ; N b ; B 14 -15 575 629 ;\r
+C 99 ; WX 600 ; N c ; B 66 -15 529 441 ;\r
+C 100 ; WX 600 ; N d ; B 45 -15 591 629 ;\r
+C 101 ; WX 600 ; N e ; B 66 -15 548 441 ;\r
+C 102 ; WX 600 ; N f ; B 114 0 531 629 ; L i fi ; L l fl ;\r
+C 103 ; WX 600 ; N g ; B 45 -157 566 441 ;\r
+C 104 ; WX 600 ; N h ; B 18 0 582 629 ;\r
+C 105 ; WX 600 ; N i ; B 95 0 505 657 ;\r
+C 106 ; WX 600 ; N j ; B 82 -157 410 657 ;\r
+C 107 ; WX 600 ; N k ; B 43 0 580 629 ;\r
+C 108 ; WX 600 ; N l ; B 95 0 505 629 ;\r
+C 109 ; WX 600 ; N m ; B -5 0 605 441 ;\r
+C 110 ; WX 600 ; N n ; B 26 0 575 441 ;\r
+C 111 ; WX 600 ; N o ; B 62 -15 538 441 ;\r
+C 112 ; WX 600 ; N p ; B 9 -157 555 441 ;\r
+C 113 ; WX 600 ; N q ; B 45 -157 591 441 ;\r
+C 114 ; WX 600 ; N r ; B 60 0 559 441 ;\r
+C 115 ; WX 600 ; N s ; B 80 -15 513 441 ;\r
+C 116 ; WX 600 ; N t ; B 87 -15 530 561 ;\r
+C 117 ; WX 600 ; N u ; B 21 -15 562 426 ;\r
+C 118 ; WX 600 ; N v ; B 10 -10 590 426 ;\r
+C 119 ; WX 600 ; N w ; B -4 -10 604 426 ;\r
+C 120 ; WX 600 ; N x ; B 20 0 580 426 ;\r
+C 121 ; WX 600 ; N y ; B 7 -157 592 426 ;\r
+C 122 ; WX 600 ; N z ; B 99 0 502 426 ;\r
+C 123 ; WX 600 ; N braceleft ; B 182 -108 437 622 ;\r
+C 124 ; WX 600 ; N bar ; B 275 -250 326 750 ;\r
+C 125 ; WX 600 ; N braceright ; B 163 -108 418 622 ;\r
+C 126 ; WX 600 ; N asciitilde ; B 63 197 540 320 ;\r
+C 161 ; WX 600 ; N exclamdown ; B 236 -157 364 430 ;\r
+C 162 ; WX 600 ; N cent ; B 96 -49 500 614 ;\r
+C 163 ; WX 600 ; N sterling ; B 84 -21 521 611 ;\r
+C 164 ; WX 600 ; N fraction ; B 92 -57 509 665 ;\r
+C 165 ; WX 600 ; N yen ; B 26 0 574 562 ;\r
+C 166 ; WX 600 ; N florin ; B 4 -143 539 622 ;\r
+C 167 ; WX 600 ; N section ; B 113 -78 488 580 ;\r
+C 168 ; WX 600 ; N currency ; B 73 58 527 506 ;\r
+C 169 ; WX 600 ; N quotesingle ; B 259 328 341 562 ;\r
+C 170 ; WX 600 ; N quotedblleft ; B 143 328 471 562 ;\r
+C 171 ; WX 600 ; N guillemotleft ; B 37 70 563 446 ;\r
+C 172 ; WX 600 ; N guilsinglleft ; B 149 70 451 446 ;\r
+C 173 ; WX 600 ; N guilsinglright ; B 149 70 451 446 ;\r
+C 174 ; WX 600 ; N fi ; B 3 0 597 629 ;\r
+C 175 ; WX 600 ; N fl ; B 3 0 597 629 ;\r
+C 177 ; WX 600 ; N endash ; B 75 231 525 285 ;\r
+C 178 ; WX 600 ; N dagger ; B 141 -78 459 580 ;\r
+C 179 ; WX 600 ; N daggerdbl ; B 141 -78 459 580 ;\r
+C 180 ; WX 600 ; N periodcentered ; B 222 189 378 327 ;\r
+C 182 ; WX 600 ; N paragraph ; B 50 -78 511 562 ;\r
+C 183 ; WX 600 ; N bullet ; B 172 130 428 383 ;\r
+C 184 ; WX 600 ; N quotesinglbase ; B 213 -134 376 100 ;\r
+C 185 ; WX 600 ; N quotedblbase ; B 143 -134 457 100 ;\r
+C 186 ; WX 600 ; N quotedblright ; B 143 328 457 562 ;\r
+C 187 ; WX 600 ; N guillemotright ; B 37 70 563 446 ;\r
+C 188 ; WX 600 ; N ellipsis ; B 37 -15 563 111 ;\r
+C 189 ; WX 600 ; N perthousand ; B 3 -15 600 622 ;\r
+C 191 ; WX 600 ; N questiondown ; B 108 -157 471 430 ;\r
+C 193 ; WX 600 ; N grave ; B 151 497 378 672 ;\r
+C 194 ; WX 600 ; N acute ; B 242 497 469 672 ;\r
+C 195 ; WX 600 ; N circumflex ; B 124 477 476 654 ;\r
+C 196 ; WX 600 ; N tilde ; B 105 489 503 606 ;\r
+C 197 ; WX 600 ; N macron ; B 120 525 480 565 ;\r
+C 198 ; WX 600 ; N breve ; B 153 501 447 609 ;\r
+C 199 ; WX 600 ; N dotaccent ; B 249 537 352 640 ;\r
+C 200 ; WX 600 ; N dieresis ; B 148 537 453 640 ;\r
+C 202 ; WX 600 ; N ring ; B 218 463 382 627 ;\r
+C 203 ; WX 600 ; N cedilla ; B 224 -151 362 10 ;\r
+C 205 ; WX 600 ; N hungarumlaut ; B 133 497 540 672 ;\r
+C 206 ; WX 600 ; N ogonek ; B 211 -172 407 4 ;\r
+C 207 ; WX 600 ; N caron ; B 124 492 476 669 ;\r
+C 208 ; WX 600 ; N emdash ; B 0 231 600 285 ;\r
+C 225 ; WX 600 ; N AE ; B 3 0 550 562 ;\r
+C 227 ; WX 600 ; N ordfeminine ; B 156 249 442 580 ;\r
+C 232 ; WX 600 ; N Lslash ; B 47 0 554 562 ;\r
+C 233 ; WX 600 ; N Oslash ; B 43 -80 557 629 ;\r
+C 234 ; WX 600 ; N OE ; B 7 0 567 562 ;\r
+C 235 ; WX 600 ; N ordmasculine ; B 157 249 443 580 ;\r
+C 241 ; WX 600 ; N ae ; B 19 -15 570 441 ;\r
+C 245 ; WX 600 ; N dotlessi ; B 95 0 505 426 ;\r
+C 248 ; WX 600 ; N lslash ; B 95 0 505 629 ;\r
+C 249 ; WX 600 ; N oslash ; B 62 -80 538 506 ;\r
+C 250 ; WX 600 ; N oe ; B 19 -15 559 441 ;\r
+C 251 ; WX 600 ; N germandbls ; B 48 -15 588 629 ;\r
+C -1 ; WX 600 ; N Idieresis ; B 96 0 504 753 ;\r
+C -1 ; WX 600 ; N eacute ; B 66 -15 548 672 ;\r
+C -1 ; WX 600 ; N abreve ; B 53 -15 559 609 ;\r
+C -1 ; WX 600 ; N uhungarumlaut ; B 21 -15 580 672 ;\r
+C -1 ; WX 600 ; N ecaron ; B 66 -15 548 669 ;\r
+C -1 ; WX 600 ; N Ydieresis ; B 24 0 576 753 ;\r
+C -1 ; WX 600 ; N divide ; B 87 48 513 467 ;\r
+C -1 ; WX 600 ; N Yacute ; B 24 0 576 805 ;\r
+C -1 ; WX 600 ; N Acircumflex ; B 3 0 597 787 ;\r
+C -1 ; WX 600 ; N aacute ; B 53 -15 559 672 ;\r
+C -1 ; WX 600 ; N Ucircumflex ; B 17 -18 583 787 ;\r
+C -1 ; WX 600 ; N yacute ; B 7 -157 592 672 ;\r
+C -1 ; WX 600 ; N scommaaccent ; B 80 -250 513 441 ;\r
+C -1 ; WX 600 ; N ecircumflex ; B 66 -15 548 654 ;\r
+C -1 ; WX 600 ; N Uring ; B 17 -18 583 760 ;\r
+C -1 ; WX 600 ; N Udieresis ; B 17 -18 583 753 ;\r
+C -1 ; WX 600 ; N aogonek ; B 53 -172 587 441 ;\r
+C -1 ; WX 600 ; N Uacute ; B 17 -18 583 805 ;\r
+C -1 ; WX 600 ; N uogonek ; B 21 -172 590 426 ;\r
+C -1 ; WX 600 ; N Edieresis ; B 53 0 550 753 ;\r
+C -1 ; WX 600 ; N Dcroat ; B 30 0 574 562 ;\r
+C -1 ; WX 600 ; N commaaccent ; B 198 -250 335 -58 ;\r
+C -1 ; WX 600 ; N copyright ; B 0 -18 600 580 ;\r
+C -1 ; WX 600 ; N Emacron ; B 53 0 550 698 ;\r
+C -1 ; WX 600 ; N ccaron ; B 66 -15 529 669 ;\r
+C -1 ; WX 600 ; N aring ; B 53 -15 559 627 ;\r
+C -1 ; WX 600 ; N Ncommaaccent ; B 7 -250 593 562 ;\r
+C -1 ; WX 600 ; N lacute ; B 95 0 505 805 ;\r
+C -1 ; WX 600 ; N agrave ; B 53 -15 559 672 ;\r
+C -1 ; WX 600 ; N Tcommaaccent ; B 38 -250 563 562 ;\r
+C -1 ; WX 600 ; N Cacute ; B 41 -18 540 805 ;\r
+C -1 ; WX 600 ; N atilde ; B 53 -15 559 606 ;\r
+C -1 ; WX 600 ; N Edotaccent ; B 53 0 550 753 ;\r
+C -1 ; WX 600 ; N scaron ; B 80 -15 513 669 ;\r
+C -1 ; WX 600 ; N scedilla ; B 80 -151 513 441 ;\r
+C -1 ; WX 600 ; N iacute ; B 95 0 505 672 ;\r
+C -1 ; WX 600 ; N lozenge ; B 18 0 443 706 ;\r
+C -1 ; WX 600 ; N Rcaron ; B 38 0 588 802 ;\r
+C -1 ; WX 600 ; N Gcommaaccent ; B 31 -250 575 580 ;\r
+C -1 ; WX 600 ; N ucircumflex ; B 21 -15 562 654 ;\r
+C -1 ; WX 600 ; N acircumflex ; B 53 -15 559 654 ;\r
+C -1 ; WX 600 ; N Amacron ; B 3 0 597 698 ;\r
+C -1 ; WX 600 ; N rcaron ; B 60 0 559 669 ;\r
+C -1 ; WX 600 ; N ccedilla ; B 66 -151 529 441 ;\r
+C -1 ; WX 600 ; N Zdotaccent ; B 86 0 514 753 ;\r
+C -1 ; WX 600 ; N Thorn ; B 79 0 538 562 ;\r
+C -1 ; WX 600 ; N Omacron ; B 43 -18 557 698 ;\r
+C -1 ; WX 600 ; N Racute ; B 38 0 588 805 ;\r
+C -1 ; WX 600 ; N Sacute ; B 72 -20 529 805 ;\r
+C -1 ; WX 600 ; N dcaron ; B 45 -15 715 629 ;\r
+C -1 ; WX 600 ; N Umacron ; B 17 -18 583 698 ;\r
+C -1 ; WX 600 ; N uring ; B 21 -15 562 627 ;\r
+C -1 ; WX 600 ; N threesuperior ; B 155 240 406 622 ;\r
+C -1 ; WX 600 ; N Ograve ; B 43 -18 557 805 ;\r
+C -1 ; WX 600 ; N Agrave ; B 3 0 597 805 ;\r
+C -1 ; WX 600 ; N Abreve ; B 3 0 597 732 ;\r
+C -1 ; WX 600 ; N multiply ; B 87 43 515 470 ;\r
+C -1 ; WX 600 ; N uacute ; B 21 -15 562 672 ;\r
+C -1 ; WX 600 ; N Tcaron ; B 38 0 563 802 ;\r
+C -1 ; WX 600 ; N partialdiff ; B 17 -38 459 710 ;\r
+C -1 ; WX 600 ; N ydieresis ; B 7 -157 592 620 ;\r
+C -1 ; WX 600 ; N Nacute ; B 7 -13 593 805 ;\r
+C -1 ; WX 600 ; N icircumflex ; B 94 0 505 654 ;\r
+C -1 ; WX 600 ; N Ecircumflex ; B 53 0 550 787 ;\r
+C -1 ; WX 600 ; N adieresis ; B 53 -15 559 620 ;\r
+C -1 ; WX 600 ; N edieresis ; B 66 -15 548 620 ;\r
+C -1 ; WX 600 ; N cacute ; B 66 -15 529 672 ;\r
+C -1 ; WX 600 ; N nacute ; B 26 0 575 672 ;\r
+C -1 ; WX 600 ; N umacron ; B 21 -15 562 565 ;\r
+C -1 ; WX 600 ; N Ncaron ; B 7 -13 593 802 ;\r
+C -1 ; WX 600 ; N Iacute ; B 96 0 504 805 ;\r
+C -1 ; WX 600 ; N plusminus ; B 87 44 513 558 ;\r
+C -1 ; WX 600 ; N brokenbar ; B 275 -175 326 675 ;\r
+C -1 ; WX 600 ; N registered ; B 0 -18 600 580 ;\r
+C -1 ; WX 600 ; N Gbreve ; B 31 -18 575 732 ;\r
+C -1 ; WX 600 ; N Idotaccent ; B 96 0 504 753 ;\r
+C -1 ; WX 600 ; N summation ; B 15 -10 585 706 ;\r
+C -1 ; WX 600 ; N Egrave ; B 53 0 550 805 ;\r
+C -1 ; WX 600 ; N racute ; B 60 0 559 672 ;\r
+C -1 ; WX 600 ; N omacron ; B 62 -15 538 565 ;\r
+C -1 ; WX 600 ; N Zacute ; B 86 0 514 805 ;\r
+C -1 ; WX 600 ; N Zcaron ; B 86 0 514 802 ;\r
+C -1 ; WX 600 ; N greaterequal ; B 98 0 502 710 ;\r
+C -1 ; WX 600 ; N Eth ; B 30 0 574 562 ;\r
+C -1 ; WX 600 ; N Ccedilla ; B 41 -151 540 580 ;\r
+C -1 ; WX 600 ; N lcommaaccent ; B 95 -250 505 629 ;\r
+C -1 ; WX 600 ; N tcaron ; B 87 -15 530 717 ;\r
+C -1 ; WX 600 ; N eogonek ; B 66 -172 548 441 ;\r
+C -1 ; WX 600 ; N Uogonek ; B 17 -172 583 562 ;\r
+C -1 ; WX 600 ; N Aacute ; B 3 0 597 805 ;\r
+C -1 ; WX 600 ; N Adieresis ; B 3 0 597 753 ;\r
+C -1 ; WX 600 ; N egrave ; B 66 -15 548 672 ;\r
+C -1 ; WX 600 ; N zacute ; B 99 0 502 672 ;\r
+C -1 ; WX 600 ; N iogonek ; B 95 -172 505 657 ;\r
+C -1 ; WX 600 ; N Oacute ; B 43 -18 557 805 ;\r
+C -1 ; WX 600 ; N oacute ; B 62 -15 538 672 ;\r
+C -1 ; WX 600 ; N amacron ; B 53 -15 559 565 ;\r
+C -1 ; WX 600 ; N sacute ; B 80 -15 513 672 ;\r
+C -1 ; WX 600 ; N idieresis ; B 95 0 505 620 ;\r
+C -1 ; WX 600 ; N Ocircumflex ; B 43 -18 557 787 ;\r
+C -1 ; WX 600 ; N Ugrave ; B 17 -18 583 805 ;\r
+C -1 ; WX 600 ; N Delta ; B 6 0 598 688 ;\r
+C -1 ; WX 600 ; N thorn ; B -6 -157 555 629 ;\r
+C -1 ; WX 600 ; N twosuperior ; B 177 249 424 622 ;\r
+C -1 ; WX 600 ; N Odieresis ; B 43 -18 557 753 ;\r
+C -1 ; WX 600 ; N mu ; B 21 -157 562 426 ;\r
+C -1 ; WX 600 ; N igrave ; B 95 0 505 672 ;\r
+C -1 ; WX 600 ; N ohungarumlaut ; B 62 -15 580 672 ;\r
+C -1 ; WX 600 ; N Eogonek ; B 53 -172 561 562 ;\r
+C -1 ; WX 600 ; N dcroat ; B 45 -15 591 629 ;\r
+C -1 ; WX 600 ; N threequarters ; B 8 -56 593 666 ;\r
+C -1 ; WX 600 ; N Scedilla ; B 72 -151 529 580 ;\r
+C -1 ; WX 600 ; N lcaron ; B 95 0 533 629 ;\r
+C -1 ; WX 600 ; N Kcommaaccent ; B 38 -250 582 562 ;\r
+C -1 ; WX 600 ; N Lacute ; B 47 0 554 805 ;\r
+C -1 ; WX 600 ; N trademark ; B -23 263 623 562 ;\r
+C -1 ; WX 600 ; N edotaccent ; B 66 -15 548 620 ;\r
+C -1 ; WX 600 ; N Igrave ; B 96 0 504 805 ;\r
+C -1 ; WX 600 ; N Imacron ; B 96 0 504 698 ;\r
+C -1 ; WX 600 ; N Lcaron ; B 47 0 554 562 ;\r
+C -1 ; WX 600 ; N onehalf ; B 0 -57 611 665 ;\r
+C -1 ; WX 600 ; N lessequal ; B 98 0 502 710 ;\r
+C -1 ; WX 600 ; N ocircumflex ; B 62 -15 538 654 ;\r
+C -1 ; WX 600 ; N ntilde ; B 26 0 575 606 ;\r
+C -1 ; WX 600 ; N Uhungarumlaut ; B 17 -18 590 805 ;\r
+C -1 ; WX 600 ; N Eacute ; B 53 0 550 805 ;\r
+C -1 ; WX 600 ; N emacron ; B 66 -15 548 565 ;\r
+C -1 ; WX 600 ; N gbreve ; B 45 -157 566 609 ;\r
+C -1 ; WX 600 ; N onequarter ; B 0 -57 600 665 ;\r
+C -1 ; WX 600 ; N Scaron ; B 72 -20 529 802 ;\r
+C -1 ; WX 600 ; N Scommaaccent ; B 72 -250 529 580 ;\r
+C -1 ; WX 600 ; N Ohungarumlaut ; B 43 -18 580 805 ;\r
+C -1 ; WX 600 ; N degree ; B 123 269 477 622 ;\r
+C -1 ; WX 600 ; N ograve ; B 62 -15 538 672 ;\r
+C -1 ; WX 600 ; N Ccaron ; B 41 -18 540 802 ;\r
+C -1 ; WX 600 ; N ugrave ; B 21 -15 562 672 ;\r
+C -1 ; WX 600 ; N radical ; B 3 -15 597 792 ;\r
+C -1 ; WX 600 ; N Dcaron ; B 43 0 574 802 ;\r
+C -1 ; WX 600 ; N rcommaaccent ; B 60 -250 559 441 ;\r
+C -1 ; WX 600 ; N Ntilde ; B 7 -13 593 729 ;\r
+C -1 ; WX 600 ; N otilde ; B 62 -15 538 606 ;\r
+C -1 ; WX 600 ; N Rcommaaccent ; B 38 -250 588 562 ;\r
+C -1 ; WX 600 ; N Lcommaaccent ; B 47 -250 554 562 ;\r
+C -1 ; WX 600 ; N Atilde ; B 3 0 597 729 ;\r
+C -1 ; WX 600 ; N Aogonek ; B 3 -172 608 562 ;\r
+C -1 ; WX 600 ; N Aring ; B 3 0 597 750 ;\r
+C -1 ; WX 600 ; N Otilde ; B 43 -18 557 729 ;\r
+C -1 ; WX 600 ; N zdotaccent ; B 99 0 502 620 ;\r
+C -1 ; WX 600 ; N Ecaron ; B 53 0 550 802 ;\r
+C -1 ; WX 600 ; N Iogonek ; B 96 -172 504 562 ;\r
+C -1 ; WX 600 ; N kcommaaccent ; B 43 -250 580 629 ;\r
+C -1 ; WX 600 ; N minus ; B 80 232 520 283 ;\r
+C -1 ; WX 600 ; N Icircumflex ; B 96 0 504 787 ;\r
+C -1 ; WX 600 ; N ncaron ; B 26 0 575 669 ;\r
+C -1 ; WX 600 ; N tcommaaccent ; B 87 -250 530 561 ;\r
+C -1 ; WX 600 ; N logicalnot ; B 87 108 513 369 ;\r
+C -1 ; WX 600 ; N odieresis ; B 62 -15 538 620 ;\r
+C -1 ; WX 600 ; N udieresis ; B 21 -15 562 620 ;\r
+C -1 ; WX 600 ; N notequal ; B 15 -16 540 529 ;\r
+C -1 ; WX 600 ; N gcommaaccent ; B 45 -157 566 708 ;\r
+C -1 ; WX 600 ; N eth ; B 62 -15 538 629 ;\r
+C -1 ; WX 600 ; N zcaron ; B 99 0 502 669 ;\r
+C -1 ; WX 600 ; N ncommaaccent ; B 26 -250 575 441 ;\r
+C -1 ; WX 600 ; N onesuperior ; B 172 249 428 622 ;\r
+C -1 ; WX 600 ; N imacron ; B 95 0 505 565 ;\r
+C -1 ; WX 600 ; N Euro ; B 0 0 0 0 ;\r
+EndCharMetrics\r
+EndFontMetrics\r
index ea071d6..2ed692c 100644 (file)
@@ -263,115 +263,130 @@ void PostScript_balans_layout(PostScript &ps, String header)
 
 void Ledger::accounts_report(const char * filename)
 {
-   PostScript ps(filename);
-   int        i;
+   try
+   {
+      PostScript ps(filename);
+      int        i;
 
-   for (i=0; i<nr_accs; i++)
+      for (i=0; i<nr_accs; i++)
+      {
+         accs[i].Postscript_sheet(ps);
+      }
+   }
+   catch (psexception &e)
    {
-      accs[i].Postscript_sheet(ps);
+      std::cerr << "Error creating postscript output: " << e.what() << "\n";
    }
 }
 
 void Ledger::saldi_report(const char * filename, date period_begin, date period_end)
 {
-   PostScript ps(filename);
-   balance total, saldi;
-   balance EndBalance, Result;
-   int        i;
-   float      y = 572;
-   int        row = 0;
-
-   String     header("Saldibalans");
+   try
+   {
+      PostScript ps(filename);
+      balance total, saldi;
+      balance EndBalance, Result;
+      int        i;
+      float      y = 572;
+      int        row = 0;
 
-   header += " van " + period_begin.format("%e %B %Y") + " tot " + period_end.format("%e %B %Y");
+      String     header("Saldibalans");
 
-   ps.NewPage(842, 595);
-   ps.FontSize(6);
+      header += " " + companyname;
+      header += " van " + period_begin.format("%e %B %Y") + " tot " + period_end.format("%e %B %Y");
 
+      ps.NewPage(842, 595);
+      ps.FontSize(6);
 
-   for (i=0; i<nr_accs; i++)
-   {
-      balance saldo(accs[i]);
 
-      if (saldo.debit() != 0 || saldo.credit() != 0)
+      for (i=0; i<nr_accs; i++)
       {
-         if (row == 64)
-         {
-            ps.FontSize(9);
-            PostScript_balans_layout(ps, header);
-            ps.NewPage(842, 595);
-            ps.FontSize(6);
-            y = 572;
-            row = 0;
-         }
+         balance saldo(accs[i]);
 
-         if (row % 2 == 1)
+         if (saldo.debit() != 0 || saldo.credit() != 0)
          {
-            ps.Rectangle(16, y-2, 739, 7);
-         }
+            if (row == 64)
+            {
+               ps.FontSize(9);
+               PostScript_balans_layout(ps, header);
+               ps.NewPage(842, 595);
+               ps.FontSize(6);
+               y = 572;
+               row = 0;
+            }
 
-         total += accs[i];
-         saldi += ~balance(accs[i]);
+            if (row % 2 == 1)
+            {
+               ps.Rectangle(16, y-2, 739, 7);
+            }
 
-         ps.Text(20, y, String(accs[i].Number()));
-         ps.Text(50, y, accs[i].Name());
+            total += accs[i];
+            saldi += ~balance(accs[i]);
 
-         balance saldo(accs[i]);
+            ps.Text(20, y, String(accs[i].Number()));
+            ps.Text(50, y, accs[i].Name());
 
-         ps.Text(200, y, saldo.debit().to_string());
-         ps.Text(270, y, saldo.credit().to_string());
-         saldo = ~saldo;
-         ps.Text(340, y, saldo.debit().to_string());
-         ps.Text(410, y, saldo.credit().to_string());
+            balance saldo(accs[i]);
 
-         if (accs[i].BAL())
-         {
-            EndBalance += ~balance(accs[i]);
-
-            ps.Text(620, y, saldo.debit().to_string());
-            ps.Text(690, y, saldo.credit().to_string());
-         }
-         else
-         {
-            Result += ~balance(accs[i]);
+            ps.Text(200, y, saldo.debit().to_string());
+            ps.Text(270, y, saldo.credit().to_string());
+            saldo = ~saldo;
+            ps.Text(340, y, saldo.debit().to_string());
+            ps.Text(410, y, saldo.credit().to_string());
 
-            ps.Text(480, y, saldo.debit().to_string());
-            ps.Text(550, y, saldo.credit().to_string());
-         }
+            if (accs[i].BAL())
+            {
+               EndBalance += ~balance(accs[i]);
 
-         y -= 7.0;
-         row ++;
-      }
-   }
+               ps.Text(620, y, saldo.debit().to_string());
+               ps.Text(690, y, saldo.credit().to_string());
+            }
+            else
+            {
+               Result += ~balance(accs[i]);
 
-   ps.FontSize(9);
-   PostScript_balans_layout(ps, header);
+               ps.Text(480, y, saldo.debit().to_string());
+               ps.Text(550, y, saldo.credit().to_string());
+            }
 
-   balance profit;
-   profit = ~Result;
-   Result += -profit;
-   EndBalance += profit;
+            y -= 7.0;
+            row ++;
+         }
+      }
 
-   ps.LineAttributes(0.5, 1.0, 0.0);
-   ps.Line(16, 60, 755, 60);
-   y = 52;
-   ps.Text(50, y, "Resultaat");
-   ps.Text(480, y, (-profit).debit().to_string());
-   ps.Text(550, y, (-profit).credit().to_string());
-   ps.Text(620, y, profit.debit().to_string());
-   ps.Text(690, y, profit.credit().to_string());
-
-   ps.Line(16, 50, 755, 50);
-   y = 42;
-   ps.Text(50, y, "Totaal");
-   ps.Text(200, y, total.debit().to_string());
-   ps.Text(270, y, total.credit().to_string());
-   ps.Text(340, y, saldi.debit().to_string());
-   ps.Text(410, y, saldi.credit().to_string());
-   ps.Text(480, y, Result.debit().to_string());
-   ps.Text(550, y, Result.credit().to_string());
-   ps.Text(620, y, EndBalance.debit().to_string());
-   ps.Text(690, y, EndBalance.credit().to_string());
+      ps.FontSize(9);
+      PostScript_balans_layout(ps, header);
+
+      balance profit;
+      profit = ~Result;
+      Result += -profit;
+      EndBalance += profit;
+
+      ps.LineAttributes(0.5, 1.0, 0.0);
+      ps.Line(16, 60, 755, 60);
+      y = 52;
+      ps.Text(50, y, "Resultaat");
+      ps.Text(480, y, (-profit).debit().to_string());
+      ps.Text(550, y, (-profit).credit().to_string());
+      ps.Text(620, y, profit.debit().to_string());
+      ps.Text(690, y, profit.credit().to_string());
+
+      ps.Line(16, 50, 755, 50);
+      y = 42;
+      ps.Text(50, y, "Totaal");
+      ps.Text(200, y, total.debit().to_string());
+      ps.Text(270, y, total.credit().to_string());
+      ps.Text(340, y, saldi.debit().to_string());
+      ps.Text(410, y, saldi.credit().to_string());
+      ps.Text(480, y, Result.debit().to_string());
+      ps.Text(550, y, Result.credit().to_string());
+      ps.Text(620, y, EndBalance.debit().to_string());
+      ps.Text(690, y, EndBalance.credit().to_string());
+   }
+   catch (psexception &e)
+   {
+      std::cerr << "Error creating postscript output: " << e.what() << "\n";
+   }
 }
 
 void Ledger::XML_saldi(std::ostream &s, date period_begin, date period_end)
index b2d911e..5c78f0c 100644 (file)
--- a/makefile
+++ b/makefile
@@ -16,9 +16,14 @@ account_main.o : account.h
 
 account.o : account.h postscript.h
 
+postscript.o : postscript.h
+
 install  : account bank
        cp account bank /usr/local/bin
+       mkdir -p /usr/local/xslt
        cp balans.xsl profit.xsl saldibalans.xsl /usr/local/xslt
+       mkdir -p /usr/local/share/afm
+       cp Courier.afm /usr/local/share/afm
 
 clean    :
        rm -f account core
index 10c619e..31d7967 100644 (file)
@@ -1,7 +1,20 @@
 
 #include <iostream>
+#include <exception>
 #include <libps/pslib.h>
 
+// Exception class to handle runtime errors
+
+class psexception : public std::exception
+{
+public:
+  virtual const char* what() const throw()
+  {
+    return "PostScript error";
+  }
+
+};
+
 // A Postscript document as used in pslib
 
 extern bool postscript_started;
@@ -22,11 +35,19 @@ public:
          postscript_started = true;
       }
       psdoc = PS_new();
-      PS_open_file(psdoc, filename);
+      if (PS_open_file(psdoc, filename) == -1)
+      {
+         throw psexception();
+      }
       //PS_set_info(psdoc, "BoundingBox", "0 0 842 596");
+      PS_set_parameter(psdoc, "SearchPath", "/usr/local/share/afm");
       PS_set_parameter(psdoc, "SearchPath", "/usr/lib/openoffice/basis3.1/share/psprint/fontmetric");
       PS_set_parameter(psdoc, "SearchPath", "/usr/lib/openoffice/basis3.2/share/psprint/fontmetric");
       psfont = PS_findfont(psdoc, "Courier", NULL, 0);
+      if (psfont == 0)
+      {
+         throw psexception();
+      }
       page = 0;
    }