home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume13 / casette-lbl / overhead_ps.c < prev    next >
C/C++ Source or Header  |  1988-01-31  |  7KB  |  178 lines

  1. /*
  2.  * Copyright (C) 1987, Thomas H. Smith -- San Francisco, California
  3.  *   Program 'Cassette':
  4.  *    Permission is granted to any individual or institution
  5.  *    to use, copy, modify, or redistribute this software so long as it
  6.  *    is not sold for profit and provided this copyright notice is retained.
  7.  *
  8.  *   PostScript is a registered trademark of Adobe Systems, Inc.
  9.  *   The name 'Dolby' and the Dolby symbol are trademarks
  10.  *    of Dolby Industries, Inc.
  11.  */
  12. #include <stdio.h>
  13. #include "dimensions.h"
  14. #include "cassette.h"
  15.  
  16.  
  17. output_ps_globals()
  18. {
  19.     /* global definitions */
  20.     OUTPUT("%%\tglobals\n");
  21.     OUTPUT("/inches { 72 mul } def\n");
  22.     OUTPUT("/currentx { currentpoint pop } def\n");
  23.     OUTPUT("/currenty { currentpoint exch pop } def\n");
  24.     OUTPUT("/lowerdone { false } def\n");
  25.     OUTPUT("/doscalefont {\n  dup dup /maxfontsize exch def\n");
  26.     OUTPUT("  /fontsize exch def scalefont\n} def\n");
  27.     OUTPUT("/adjustfont {\n  dup /fontsize exch fontsize mul def\n");
  28.     OUTPUT("  scalefont\n} def\n");
  29.     OUTPUT("/interline { fontsize 1.33 mul } def\n");
  30.     OUTPUT("/creturn { linestart currenty interline sub moveto } def\n");
  31.  
  32.     OUTPUT("/overflowsline {");
  33.     OUTPUT("  stringwidth pop currentx add lineend ge } def\n");
  34.     OUTPUT("/indent { %.3f inches 0 rmoveto } def\n", CONTINUEDIST);
  35.     OUTPUT("/breakline {\n  {\n    ( ) search exch\n");
  36.     OUTPUT("    dup overflowsline {\n      creturn pageoverflow indent\n");
  37.     OUTPUT("    } if show\n    {\t%% test of search\n      show\n");
  38.     OUTPUT("    } { exit } ifelse\n  } loop\n} def\n");
  39.  
  40.     OUTPUT("/shrinkshow {\n  {\n    dup overflowsline {\n");
  41.     OUTPUT("      currentfont .9 adjustfont setfont\n");
  42.     OUTPUT("      fontsize maxfontsize 2 div 1 add le {\n");
  43.     OUTPUT("        /oldindent /indent load def /indent { } def\n");
  44.     OUTPUT("        0 fontsize rmoveto breakline\n");
  45.     OUTPUT("        /indent /oldindent load def\n");
  46.     OUTPUT("        exit\n      } if\n");
  47.     OUTPUT("    } {\n      linestart currenty moveto\n");
  48.     OUTPUT("      show exit\n    } ifelse\n  } loop\n} def\n");
  49.  
  50.     OUTPUT("/elipsesshow {\n  dup overflowsline {\n");
  51.     OUTPUT("    {\n      ( ) search exch dup overflowsline {\n");
  52.     OUTPUT("        (...) show pop { pop } if pop exit\n");
  53.     OUTPUT("      } {\n        show\n      } ifelse\n");
  54.     OUTPUT("      {\t%%test of search\n        show\n");
  55.     OUTPUT("      } { exit } ifelse\n    } loop\n");
  56.     OUTPUT("  } { show } ifelse\n} def\n");
  57.  
  58.     OUTPUT("/pageoverflow {\n  currenty %.3f le lowerdone not and {\n",
  59.                             VSPACE + BORDERWIDTH);
  60.     OUTPUT("    dolowerblock linestart -%.3f moveto\n  } if\n} def\n",
  61.                         SONGSIZE + VSPACE + BORDERWIDTH);
  62.  
  63.     OUTPUT("/dosong {\n  pageoverflow\n");
  64.     OUTPUT("  dup overflowsline {\n    breakline\n");
  65.     OUTPUT("  } {\n    show\n  } ifelse\n  creturn\n");
  66.     OUTPUT("} def\n");
  67.  
  68.     /* extra lower outline if necessary */
  69.     OUTPUT("%%\textra lower block outline\n");
  70.     OUTPUT("/dolowerblock {\n");
  71.     OUTPUT("  gsave newpath [] 0 setdash 0 0 moveto\n");
  72.     OUTPUT("  0 -%.3f inches lineto\n", BODYHEIGHT);
  73.     OUTPUT("  %.3f inches -%.3f inches lineto\n", WIDTH, BODYHEIGHT);
  74.     OUTPUT("  %.3f inches 0 lineto\n", WIDTH);
  75.  
  76.     OUTPUT("  %.3f setlinewidth stroke\n", BORDERWIDTH);
  77.     OUTPUT("  0 0 moveto %.3f inches 0 lineto\n", WIDTH);
  78.     OUTPUT("  %.3f setlinewidth stroke\n", (BORDERWIDTH * 2));
  79.  
  80.     OUTPUT("  %.3f inches -%.3f inches %.3f add moveto\n", WIDTH / 2.0,
  81.                         BODYHEIGHT, VSPACE + BORDERWIDTH);
  82.     OUTPUT("  %.3f inches -%.3f lineto\n", WIDTH / 2.0,
  83.                         VSPACE + (BORDERWIDTH / 2));
  84.     OUTPUT("  [.3 1] 0 setdash %.3f setlinewidth stroke\n", DASHWIDTH);
  85.     OUTPUT("  /lowerdone { true } def\n");
  86.     OUTPUT("  grestore\n} def\n");
  87.  
  88.     output_ps_dolby();
  89. }
  90.  
  91.  
  92. output_ps_outline()
  93. {
  94.     OUTPUT("\n%%\toutline of label\n");
  95.  
  96.     /* body of label */
  97.     OUTPUT("newpath\n");
  98.     OUTPUT("0 0 moveto\n");
  99.     OUTPUT("0 %.3f inches lineto\n", BODYHEIGHT + EDGEHEIGHT);
  100.     OUTPUT("%.3f inches %.3f inches lineto\n",
  101.                     WIDTH, BODYHEIGHT + EDGEHEIGHT);
  102.     OUTPUT("%.3f inches 0 lineto\n", WIDTH);
  103.     OUTPUT("closepath %.3f setlinewidth stroke\n", BORDERWIDTH);
  104.  
  105.     /* edge of label */
  106.     OUTPUT("newpath\n");
  107.     OUTPUT("0 %.3f inches moveto\n", BODYHEIGHT);
  108.     OUTPUT("%.3f inches %.3f inches lineto\n", WIDTH, BODYHEIGHT);
  109.     OUTPUT("0 %.3f inches moveto\n", BODYHEIGHT + EDGEHEIGHT);
  110.     OUTPUT("%.3f inches %.3f inches lineto\n",
  111.                     WIDTH, BODYHEIGHT + EDGEHEIGHT);
  112.     OUTPUT("%.3f setlinewidth stroke\n", BORDERWIDTH * 2);
  113.  
  114.     /* overhang of label */
  115.     OUTPUT("newpath\n");
  116.     OUTPUT("0 %.3f inches moveto\n", BODYHEIGHT + EDGEHEIGHT);
  117.     OUTPUT("0 %.3f inches rlineto %.3f inches 0 rlineto\n", TABSHORTHEIGHT,
  118.         ((WIDTH - TABWIDTH) / 2.0) - TABDELTA);
  119.     OUTPUT("%.3f inches %.3f inches rlineto\n", TABDELTA, TABDELTA);
  120.     OUTPUT("%.3f inches 0 rlineto\n", TABWIDTH);
  121.     OUTPUT("%.3f inches -%.3f inches rlineto\n", TABDELTA, TABDELTA);
  122.     OUTPUT("%.3f inches %.3f inches lineto\n",
  123.                 WIDTH, BODYHEIGHT + EDGEHEIGHT + TABSHORTHEIGHT);
  124.     OUTPUT("0 -%.3f inches rlineto\n", TABSHORTHEIGHT);
  125.     OUTPUT("%.3f setlinewidth stroke\n", BORDERWIDTH);
  126.  
  127.     /* dashed interior lines */
  128.     OUTPUT("\n%%\tdashed interior lines\n");
  129.  
  130.     OUTPUT("newpath\n");
  131.     OUTPUT("0 %.3f inches %.3f sub moveto\n", BODYHEIGHT,
  132.                     TITLE2SIZE + (VSPACE * 2) + BORDERWIDTH);
  133.     OUTPUT("%.3f inches %.3f inches %.3f sub lineto\n", WIDTH, BODYHEIGHT,
  134.                     TITLE2SIZE + (VSPACE * 2) + BORDERWIDTH);
  135.  
  136.     OUTPUT("%.3f inches %.3f inches %.3f sub moveto\n", WIDTH / 2.0,
  137.                         BODYHEIGHT, VSPACE + BORDERWIDTH);
  138.     OUTPUT("%.3f inches %.3f lineto\n", WIDTH / 2.0,
  139.                         VSPACE + (BORDERWIDTH / 2));
  140.  
  141.     OUTPUT("[.3 1] 0 setdash %.3f setlinewidth stroke\n", DASHWIDTH);
  142. }
  143.  
  144.  
  145. output_ps_trailer()
  146. {
  147.     OUTPUT("showpage\n");
  148. }
  149.  
  150.  
  151. static
  152. output_ps_dolby()
  153. {
  154.     OUTPUT("%%\t\tDolby trademark symbol\n");
  155.     OUTPUT("%%\t\t\tThe name Dolby and this symbol\n");
  156.     OUTPUT("%%\t\t\tare trademarks of Dolby Industries, Inc.\n");
  157.     OUTPUT("/dolby {\n");
  158.     OUTPUT("  gsave -%.3f 0 rmoveto currentpoint newpath\n", DOLBY_WIDTH);
  159.     OUTPUT("  %.3f add %.3f -90 90 arc\n", DOLBY_RADIUS, DOLBY_RADIUS);
  160.     OUTPUT("  currentx %.3f add currenty %.3f sub %.3f 90 -90 arc\n",
  161.                     DOLBY_WIDTH, DOLBY_RADIUS, DOLBY_RADIUS);
  162.     OUTPUT("  -%.3f 0 rmoveto\n", DOLBY_WIDTH);
  163.     OUTPUT("  0 setgray currentpoint fill moveto\n");
  164.  
  165.     /* line around it */
  166.     OUTPUT("  0 %.3f rlineto %.3f 0 rlineto\n",
  167.                         DOLBY_HEIGHT, DOLBY_WIDTH);
  168.     OUTPUT("  0 -%.3f rlineto -%.3f 0 rlineto\n",
  169.                         DOLBY_HEIGHT, DOLBY_WIDTH);
  170.     OUTPUT("  [] 0 setdash 0 setlinewidth currentpoint stroke moveto\n");
  171.  
  172.     /* line through center */
  173.     OUTPUT("  %.3f 0 rmoveto 0 %.3f rlineto\n",
  174.                     DOLBY_WIDTH / 2.0, DOLBY_HEIGHT);
  175.     OUTPUT("  1 setgray stroke\n");
  176.     OUTPUT("  grestore\n} def\n");
  177. }
  178.