home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume13 / casette-lbl / output_ps.c < prev    next >
C/C++ Source or Header  |  1988-01-31  |  6KB  |  189 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.  */
  10. #include <stdio.h>
  11. #include "dimensions.h"
  12. #include "cassette.h"
  13.  
  14.  
  15. output_ps_artist(title, artist, position)
  16. char *title, *artist;
  17. int position;
  18. {
  19.     OUTPUT("\n%%\tArtist\n");
  20.     if (EMPTYSTRING(title)) {
  21.     OUTPUT("%%\t\tNo artist specified\n");
  22.     return;
  23.     }
  24.  
  25.     OUTPUT("/%s findfont %.3f doscalefont setfont\n", ARTISTFONT, ARTISTSIZE);
  26.     switch (position) {
  27.     case ONLY:
  28.         OUTPUT("/linestart {\n  %.3f inches\n", WIDTH / 2.0);
  29.         OUTPUT("  (%s) stringwidth pop 2 div sub\n} def\n", artist);
  30.         OUTPUT("/lineend %.3f inches %.3f sub def\n", WIDTH, HSPACE);
  31.         break;
  32.     case SIDE1:
  33.         OUTPUT("/linestart %.3f def\n", HSPACE + (BORDERWIDTH / 2));
  34.         OUTPUT("/lineend %.3f inches %.3f sub def\n", WIDTH / 2.0, HSPACE);
  35.         break;
  36.     case SIDE2:
  37.         OUTPUT("/linestart %.3f inches def\n", WIDTH / 2.0);
  38.         OUTPUT("/lineend %.3f inches %.3f sub def\n", WIDTH, HSPACE);
  39.         break;
  40.     }
  41.  
  42.     OUTPUT("linestart %.3f inches %.3f sub moveto\n",
  43.                     BODYHEIGHT + EDGEHEIGHT,
  44.                     ARTISTSIZE + VSPACE +
  45.                     BORDERWIDTH - CHARFUDGE);
  46.  
  47.     OUTPUT("(%s) shrinkshow\n", artist);
  48. }
  49.  
  50.  
  51. output_ps_title(title, artist, position)
  52. char *title, *artist;
  53. int position;
  54. {
  55.     OUTPUT("\n%%\tTitle\n");
  56.     OUTPUT("/%s findfont %.3f doscalefont setfont\n", TITLEFONT, TITLESIZE);
  57.  
  58.     if (EMPTYSTRING(title)) {
  59.     /* self-titled -- use artist for title */
  60.     title = artist;
  61.     }
  62.  
  63.     switch (position) {
  64.     case ONLY:
  65.         OUTPUT("/linestart {\n  %.3f inches\n", WIDTH / 2.0);
  66.         OUTPUT("  (%s) stringwidth pop 2 div sub\n} def\n", title);
  67.         OUTPUT("/lineend %.3f inches %.3f sub def\n", WIDTH, HSPACE);
  68.         break;
  69.     case SIDE1:
  70.         OUTPUT("/linestart %.3f def\n", HSPACE + (BORDERWIDTH / 2));
  71.         OUTPUT("/lineend %.3f inches %.3f sub def\n", WIDTH / 2.0, HSPACE);
  72.         break;
  73.     case SIDE2:
  74.         OUTPUT("/linestart %.3f inches def\n", WIDTH / 2.0);
  75.         OUTPUT("/lineend %.3f inches %.3f sub def\n", WIDTH, HSPACE);
  76.         break;
  77.     }
  78.  
  79.     OUTPUT("linestart %.3f inches %.3f add moveto\n", BODYHEIGHT,
  80.                     VSPACE + BORDERWIDTH + CHARFUDGE);
  81.  
  82.     if (title == artist) {
  83.     /* if self-titled, center title vertically */
  84.     OUTPUT("0 %.3f inches %.3f sub rmoveto\n", EDGEHEIGHT / 2.0,
  85.                     VSPACE + BORDERWIDTH + (TITLESIZE / 2.0));
  86.     }
  87.  
  88.     OUTPUT("(%s) shrinkshow\n", title);
  89.  
  90.     /* secondary title */
  91.     OUTPUT("\n%%\tSecondary Title\n");
  92.     OUTPUT("/%s findfont %.3f doscalefont setfont\n", TITLE2FONT, TITLE2SIZE);
  93.  
  94.     switch (position) {
  95.     case ONLY:
  96.     case SIDE1:
  97.         OUTPUT("/linestart %.3f def\n", HSPACE + (BORDERWIDTH / 2));
  98.         OUTPUT("/lineend %.3f inches %.3f sub def\n",
  99.                     (WIDTH / 2.0) - .33, HSPACE);
  100.         break;
  101.     case SIDE2:
  102.         OUTPUT("/linestart %.3f inches %.3f add def\n", WIDTH / 2.0,
  103.                     HSPACE + (DASHWIDTH / 2));
  104.         OUTPUT("/lineend %.3f inches %.3f sub def\n", WIDTH - .33, HSPACE);
  105.         break;
  106.     }
  107.  
  108.     OUTPUT("linestart %.3f inches %.3f sub moveto\n", BODYHEIGHT,
  109.                     TITLE2SIZE + VSPACE + BORDERWIDTH);
  110.     OUTPUT("(%s) elipsesshow\n", title);
  111. }
  112.  
  113.  
  114. output_ps_noise_reduction(noise_red, noise_type, position)
  115. char *noise_red;
  116. int noise_type, position;
  117. {
  118.     OUTPUT("\n%%\tNoise reduction symbol\n");
  119.     if (noise_type == NONE) {
  120.     OUTPUT("%%\t(None specified)\n");
  121.     return;
  122.     }
  123.  
  124.     OUTPUT("/%s findfont %.3f doscalefont setfont\n",
  125.                             NOISEFONT, NOISESIZE);
  126.     if ((position == ONLY) || (position == SIDE1)) {
  127.     OUTPUT("%.3f inches %.3f sub %.3f inches %.3f sub moveto\n",
  128.                     WIDTH / 2.0,
  129.                     HSPACE + (DASHWIDTH / 2), BODYHEIGHT,
  130.                     TITLE2SIZE + VSPACE + BORDERWIDTH);
  131.     } else /* SIDE2 */ {
  132.     OUTPUT("%.3f inches %.3f sub %.3f inches %.3f sub moveto\n",
  133.                     WIDTH,
  134.                     HSPACE + (BORDERWIDTH / 2), BODYHEIGHT,
  135.                     TITLE2SIZE + VSPACE + BORDERWIDTH);
  136.     }
  137.  
  138.     switch (noise_type) {
  139.     case DOLBY_B:
  140.         OUTPUT("dolby\n");
  141.         return;
  142.     case DOLBY_C:
  143.         OUTPUT("( C) stringwidth pop -1 mul 0 rmoveto dolby ( C) show\n");
  144.         return;
  145.     /* case DBX: */
  146.     }
  147.  
  148.     /* other type of noise reduction */
  149.     OUTPUT("(%s) stringwidth pop -1 mul 0 rmoveto\n", noise_red);
  150.     OUTPUT("(%s) show\n", noise_red);
  151. }
  152.  
  153.  
  154. output_ps_songs(songs, number_songs, position)
  155. char **songs;
  156. int number_songs, position;
  157. {
  158.     register int index;
  159.  
  160.     OUTPUT("\n%%\tSong list\n");
  161.     OUTPUT("/%s findfont %.3f doscalefont setfont\n", SONGFONT, SONGSIZE);
  162.  
  163.     if ((position == ONLY) || (position == SIDE1)) {
  164.     OUTPUT("/linestart %.3f def\n", HSPACE + (BORDERWIDTH / 2));
  165.     OUTPUT("/lineend %.3f inches %.3f sub def\n",
  166.                     WIDTH / 2.0, HSPACE + (DASHWIDTH / 2));
  167.     } else /* SIDE2 */ {
  168.     OUTPUT("/linestart %.3f inches %.3f add def\n",
  169.                     WIDTH / 2.0, HSPACE + (DASHWIDTH / 2));
  170.     OUTPUT("/lineend %.3f inches %.3f sub def\n",
  171.                     WIDTH, HSPACE + (BORDERWIDTH / 2));
  172.     }
  173.  
  174.     /* starting position */
  175.     OUTPUT("\nlinestart %.3f inches %.3f sub moveto\n", BODYHEIGHT,
  176.                     TITLE2SIZE + SONGSIZE + (VSPACE * 3)
  177.                             + BORDERWIDTH + DASHWIDTH);
  178.  
  179.     /* array of song titles */
  180.     OUTPUT("[\n");
  181.     for (index = 0; songs[index] != NULL; index++) {
  182.     if (number_songs)
  183.         OUTPUT("  (%d.   %s)\n", index + 1, songs[index]);
  184.     else
  185.         OUTPUT("  (%s)\n", songs[index]);
  186.     }
  187.     OUTPUT("] { dosong } forall\n");
  188. }
  189.