home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / x / volume10 / xv / part01 next >
Internet Message Format  |  1990-12-08  |  44KB

  1. Path: uunet!lll-winken!sun-barr!newstop!exodus!appserv!halibut.cis.upenn.edu
  2. From: bradley@halibut.cis.upenn.edu (John Bradley)
  3. Newsgroups: comp.sources.x
  4. Subject: v10i079: xv - display and manipulate images, Part01/10
  5. Message-ID: <csx-10i079:xv@uunet.UU.NET>
  6. Date: 27 Nov 90 20:08:06 GMT
  7. Sender: news@exodus.Eng.Sun.COM
  8. Lines: 1170
  9. Approved: argv@sun.com
  10.  
  11. Submitted-by: bradley@halibut.cis.upenn.edu (John Bradley)
  12. Posting-number: Volume 10, Issue 79
  13. Archive-name: xv/part01
  14.  
  15. Sources to XV, patchlevel 2.  Lots of bug fixes, '#ifdefs' for various 
  16. machines, and some new features.
  17.  
  18. Overview (from the man page)
  19. _____________
  20. xv is an X11 program that displays images in the GIF, PBM, PGM, PPM, 
  21. X11 bitmap, and PM formats on 1-, 4-, 6-, 8-, 24-, and 32-bit X displays.  
  22.  
  23. xv displays one image at a time in an output window.  You can arbitrarily
  24. stretch or compress the window, and the picture will be rescaled to fit.  
  25. You can rotate the picture in 90-degree steps.  You can repeatedly 'crop'
  26. a picture (define a rectangular 'region-of-interest' and 'throw away' the
  27. rest).  You can magnify any portion of the picture by 
  28. any amount, up to the maximum size of your screen.  
  29. _____________
  30.  
  31. New Features:  bi-direction rotation, 'maxpect' button (maximum size, but
  32. preserve aspect ratio), 'autocrop' button (gets rid of constant-color borders),
  33. new ability to center pictures on the root window.
  34.  
  35. This is complete posting, as A) the patches would've been nearly as large, and
  36. B) considering the problems of the previous postings...
  37.  
  38. Also, this is all available for anonymous ftp from expo.lcs.mit.edu, as
  39. contrib/xv.pl2.tar.Z.
  40.  
  41. John Bradley  -  GRASP Lab  -  University of Pennsylvania
  42.      bradley@cis.upenn.edu
  43.  
  44. ----------------------------(cut here)------------------------
  45. #!/bin/sh
  46. # to extract, remove the header and type "sh filename"
  47. if `test ! -d ./docs`
  48. then
  49.   mkdir ./docs
  50.   echo "mkdir ./docs"
  51. fi
  52. if `test ! -s ./docs/xv.blurb`
  53. then
  54. echo "writting ./docs/xv.blurb"
  55. cat > ./docs/xv.blurb << '\BARFOO\'
  56. XV is a direct successor to XGIF.  
  57.  
  58. New features include:
  59.   * more graphic formats supported (GIF, PBM/PGM/PPM, and X11 bitmap)
  60.  
  61.   * works on most X displays (1-, 4-, 6-, 8-, and 24-bit displays are
  62.     supported)
  63.  
  64.   * arbitrary scaling, cropping, rotation (in 90-degree steps)
  65.  
  66.   * can write files in all formats listed above
  67.  
  68.   * arbitrary gamma correction curve for brightness/contrast control
  69.     and interesting effects
  70.  
  71.   * cool-whizo user interface
  72.  
  73.   * better color allocation code, including the ability to install its own
  74.     colormap if necessary
  75.  
  76.   * more robust error handling
  77.  
  78.   * and more bug fixes than we'd care to discuss...
  79.  
  80.  
  81. Full Description:
  82. -----------------
  83. XV is a program that displays image files in GIF, PBM/PGM/PPM, and X11 Bitmap
  84. formats.  It is a direct sequel to XGIF, and fixes most (if not all) of the
  85. shortcomings of that program.  XV runs on nearly ALL X displays, 1-bit,
  86. 4-bit, 6-bit, 8-bit, and 24-bit, color, grayscale, and black/white.  
  87.  
  88. XV displays one image at a time in an output window.  You can arbitrarily
  89. stretch or compress the window, and the picture will be rescaled to fit.  
  90. You can rotate the picture in 90-degree steps.  You can repeatedly 'crop'
  91. a picture (define a rectangular 'region-of-interest' and 'throw away' the
  92. rest).  You can magnify any portion of the picture by any amount, up to the 
  93. maximum size of your screen.  
  94.  
  95. XV allows you click on the picture to determine pixel RGB values and x,y 
  96. coordinates.  You can perform arbitrary 'gamma correction' on the picture
  97. both in RGB space and HSV space.  You can specify the maximum number of colors
  98. that XV should use, for some interesting visual effects.  You can have
  99. the program produce a stippled version of the picture using black and white,
  100. or any other pair of colors.  
  101.  
  102. XV can write images in a variety of formats, with many of the modifications 
  103. you may have made to the picture saved as well.  You can use XV to do format 
  104. conversion.  XV will also automatically uncompress compress-ed files, as well 
  105. as read files from stdin.
  106.  
  107.  
  108. John Bradley                    University of Pennsylvania  -  GRASP Lab
  109.      bradley@cis.upenn.edu
  110.  
  111.      October 9, 1990
  112. \BARFOO\
  113. else
  114.   echo "will not over write ./docs/xv.blurb"
  115. fi
  116. if `test ! -s ./bitmaps.h`
  117. then
  118. echo "writting ./bitmaps.h"
  119. cat > ./bitmaps.h << '\BARFOO\'
  120. #define grasp_width 64
  121. #define grasp_height 64
  122. static char grasp_bits[] = {
  123.    0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff,
  124.    0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff, 0xff, 0x05, 0x00, 0x00,
  125.    0x00, 0x00, 0xfc, 0xff, 0xff, 0xbf, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xff,
  126.    0xff, 0xff, 0x01, 0x00, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0x03, 0x00,
  127.    0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0xf0, 0xff, 0xff,
  128.    0xff, 0xff, 0x0f, 0x00, 0x00, 0xfc, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00,
  129.    0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0xc0, 0xff, 0xff, 0xff,
  130.    0xff, 0xff, 0x7f, 0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00,
  131.    0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xfe, 0xff, 0xff, 0x07,
  132.    0x54, 0xff, 0xff, 0x03, 0xff, 0xff, 0xff, 0x03, 0x00, 0xc0, 0xff, 0x07,
  133.    0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0xff, 0x0f, 0xff, 0xff, 0xff, 0x00,
  134.    0x00, 0x00, 0xfe, 0x1f, 0xff, 0xff, 0x7f, 0x00, 0x00, 0x00, 0xf8, 0x3f,
  135.    0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0xff, 0xff, 0x1f, 0x00,
  136.    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00,
  137.    0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00,
  138.    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xf9, 0xf8, 0x01, 0x03, 0x8f, 0x3f,
  139.    0xff, 0xff, 0xfc, 0xf9, 0x83, 0x83, 0x9f, 0x7f, 0xff, 0x7f, 0xfe, 0xfb,
  140.    0x87, 0xc7, 0xbf, 0x7f, 0xff, 0x3f, 0x8e, 0x3b, 0xc7, 0xc7, 0xb9, 0x73,
  141.    0x00, 0x00, 0x0e, 0x38, 0xc7, 0xce, 0x83, 0x73, 0x00, 0x00, 0xee, 0xbb,
  142.    0xc7, 0x8e, 0x8f, 0x7b, 0x00, 0x00, 0xee, 0xfb, 0xe3, 0x0f, 0x9f, 0x3f,
  143.    0x00, 0x00, 0x8e, 0xfb, 0xe1, 0x1f, 0xb8, 0x1f, 0x00, 0x00, 0x9e, 0xbb,
  144.    0xe3, 0xde, 0xb9, 0x03, 0x00, 0x00, 0xfc, 0xbb, 0x73, 0xdc, 0xbf, 0x03,
  145.    0x00, 0x00, 0xfc, 0x39, 0x77, 0xb8, 0x9f, 0x03, 0x00, 0x00, 0xf0, 0x38,
  146.    0x77, 0x38, 0x8f, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  147.    0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x3f, 0x10, 0x20,
  148.    0x00, 0x40, 0x00, 0x00, 0xff, 0x7f, 0x10, 0xec, 0xee, 0xec, 0xee, 0x0a,
  149.    0xff, 0xff, 0x10, 0xaa, 0x2a, 0x4a, 0x2a, 0x0a, 0xff, 0xff, 0xf1, 0xfe,
  150.    0x2e, 0xde, 0x2e, 0x0e, 0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x08,
  151.    0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x06, 0xff, 0xff, 0x0f, 0x00,
  152.    0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00,
  153.    0xff, 0xff, 0x3f, 0x00, 0x00, 0x00, 0xe0, 0x7f, 0xff, 0xff, 0x7f, 0x00,
  154.    0x00, 0x00, 0xf8, 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0xfe, 0x1f,
  155.    0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0xff, 0x0f, 0xff, 0xff, 0xff, 0x03,
  156.    0x00, 0xc0, 0xff, 0x07, 0xfe, 0xff, 0xff, 0x07, 0x54, 0xff, 0xff, 0x03,
  157.    0xf8, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x01, 0xe0, 0xff, 0xff, 0xff,
  158.    0xff, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x00,
  159.    0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0x00, 0x00, 0xfc, 0xff, 0xff,
  160.    0xff, 0xff, 0x1f, 0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x00,
  161.    0x00, 0xe0, 0xff, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x80, 0xff, 0xff,
  162.    0xff, 0xff, 0x03, 0x00, 0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0x01, 0x00,
  163.    0x00, 0x00, 0xf8, 0xff, 0xff, 0xbf, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xff,
  164.    0xff, 0x05, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x17, 0x00, 0x00, 0x00,
  165.    0x00, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00};
  166. #define penn_width 64
  167. #define penn_height 64
  168. static char penn_bits[] = {
  169.    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  170.    0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00,
  171.    0x00, 0xf8, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x00, 0x00, 0x18, 0x00, 0x00,
  172.    0x00, 0x00, 0x18, 0x00, 0x00, 0xd8, 0xff, 0xff, 0xff, 0xff, 0x1b, 0x00,
  173.    0x00, 0xd8, 0xff, 0xff, 0xff, 0xff, 0x1b, 0x00, 0x00, 0xd8, 0xab, 0xff,
  174.    0xff, 0xd5, 0x1b, 0x00, 0x00, 0x58, 0x7d, 0xfd, 0xbf, 0xbe, 0x1a, 0x00,
  175.    0x00, 0xd8, 0x93, 0x1f, 0xf7, 0xc9, 0x1b, 0x00, 0x00, 0x58, 0x01, 0x0d,
  176.    0xb2, 0x80, 0x1a, 0x00, 0x00, 0xd8, 0x11, 0xef, 0xee, 0x88, 0x1b, 0x00,
  177.    0x00, 0x58, 0x01, 0x15, 0xad, 0x80, 0x1a, 0x00, 0x00, 0xd8, 0x11, 0x67,
  178.    0xe2, 0x88, 0x1b, 0x00, 0x00, 0x58, 0x01, 0xf5, 0xb1, 0x80, 0x1a, 0x00,
  179.    0x00, 0xd8, 0x39, 0xff, 0xff, 0x9c, 0x1b, 0x00, 0x00, 0x58, 0xff, 0xfd,
  180.    0xbf, 0xff, 0x1a, 0x00, 0x00, 0xd8, 0xaa, 0xfe, 0x7f, 0x55, 0x1b, 0x00,
  181.    0x00, 0xd8, 0xff, 0xff, 0xff, 0xff, 0x1b, 0x00, 0x00, 0xd8, 0xff, 0xff,
  182.    0xff, 0xff, 0x1b, 0x00, 0x00, 0xd8, 0xff, 0xff, 0xff, 0xff, 0x1b, 0x00,
  183.    0x00, 0x58, 0x00, 0x80, 0x01, 0x00, 0x1a, 0x00, 0x00, 0x58, 0x00, 0xc0,
  184.    0x03, 0x00, 0x1a, 0x00, 0x00, 0x58, 0x00, 0xe0, 0x07, 0x00, 0x1a, 0x00,
  185.    0x00, 0x58, 0x00, 0xf0, 0x0f, 0x00, 0x1a, 0x00, 0x00, 0x58, 0x00, 0xf8,
  186.    0x1f, 0x00, 0x1a, 0x00, 0x00, 0x58, 0x00, 0x7c, 0x3e, 0x00, 0x1a, 0x00,
  187.    0x00, 0x58, 0x00, 0x1e, 0x78, 0x00, 0x1a, 0x00, 0x00, 0x98, 0x00, 0x1f,
  188.    0xf8, 0x00, 0x19, 0x00, 0x00, 0xb8, 0x80, 0x0f, 0xf0, 0x01, 0x1d, 0x00,
  189.    0x00, 0xb0, 0xc0, 0x0f, 0xf0, 0x03, 0x0d, 0x00, 0x00, 0xb0, 0xe0, 0x1f,
  190.    0xf8, 0x07, 0x0d, 0x00, 0x00, 0xb0, 0xf0, 0x1f, 0xf8, 0x0f, 0x0d, 0x00,
  191.    0x00, 0x30, 0x79, 0x7e, 0x7e, 0x9e, 0x0c, 0x00, 0x00, 0x60, 0x1d, 0xf8,
  192.    0x1f, 0xb8, 0x06, 0x00, 0x00, 0x60, 0x1f, 0xf8, 0x1f, 0xf8, 0x06, 0x00,
  193.    0x00, 0x60, 0x0e, 0xf0, 0x0f, 0x70, 0x06, 0x00, 0x00, 0xc0, 0x0e, 0xf0,
  194.    0x0f, 0x70, 0x03, 0x00, 0x00, 0xc0, 0x1c, 0x78, 0x1e, 0x38, 0x03, 0x00,
  195.    0x00, 0x80, 0x1d, 0x38, 0x1c, 0xb8, 0x01, 0x00, 0x00, 0x80, 0x79, 0x1e,
  196.    0x78, 0x9e, 0x01, 0x00, 0x00, 0x00, 0xfb, 0x0f, 0xf0, 0xdf, 0x00, 0x00,
  197.    0x00, 0x00, 0xf3, 0x07, 0xe0, 0xcf, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x03,
  198.    0xc0, 0x67, 0x00, 0x00, 0x00, 0x00, 0xec, 0x01, 0x80, 0x37, 0x00, 0x00,
  199.    0x00, 0x00, 0xcc, 0x00, 0x00, 0x33, 0x00, 0x00, 0x3c, 0x00, 0x98, 0x00,
  200.    0x00, 0x19, 0x00, 0x3c, 0x6e, 0x78, 0x30, 0x01, 0x80, 0x0c, 0x1e, 0x76,
  201.    0xda, 0x87, 0x60, 0x06, 0x60, 0x06, 0xe1, 0x5b, 0xfa, 0x88, 0xc1, 0x08,
  202.    0x10, 0x83, 0x19, 0x5f, 0x1a, 0x46, 0x81, 0x33, 0xcc, 0x81, 0x72, 0x59,
  203.    0xda, 0x70, 0x01, 0xc7, 0xe3, 0x80, 0x0e, 0x59, 0x96, 0xbf, 0x01, 0x1c,
  204.    0x38, 0x80, 0xfd, 0x69, 0x60, 0x8a, 0x07, 0x78, 0x1e, 0xe0, 0x59, 0x06,
  205.    0xc0, 0xcb, 0x1d, 0xe0, 0x07, 0xb8, 0xd3, 0x03, 0xc0, 0x69, 0xf0, 0x80,
  206.    0x01, 0x0f, 0x96, 0x03, 0x00, 0x08, 0x09, 0x1f, 0xf8, 0x60, 0x10, 0x00,
  207.    0x00, 0x90, 0x5d, 0xe0, 0x07, 0xf6, 0x08, 0x00, 0x00, 0x60, 0x48, 0x0b,
  208.    0xd0, 0x16, 0x06, 0x00, 0x00, 0x80, 0x25, 0xe3, 0xdc, 0x87, 0x01, 0x00,
  209.    0x00, 0x00, 0x8e, 0xe4, 0x94, 0x70, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x01,
  210.    0x80, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x00,
  211.    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
  212. #define down_width 16
  213. #define down_height 16
  214. static char down_bits[] = {
  215.    0xff, 0xff, 0x01, 0x80, 0x01, 0x80, 0xf1, 0x87, 0x11, 0x84, 0x11, 0x84,
  216.    0x11, 0x84, 0x1f, 0xbc, 0x05, 0x90, 0x09, 0x88, 0x11, 0x84, 0x21, 0x82,
  217.    0x41, 0x81, 0x81, 0x80, 0x01, 0x80, 0xff, 0xff};
  218. #define down1_width 16
  219. #define down1_height 16
  220. static char down1_bits[] = {
  221.    0xff, 0xff, 0x01, 0x80, 0x01, 0x80, 0xf1, 0x87, 0xf1, 0x87, 0xf1, 0x87,
  222.    0xf1, 0x87, 0xff, 0xbf, 0xfd, 0x9f, 0xf9, 0x8f, 0xf1, 0x87, 0xe1, 0x83,
  223.    0xc1, 0x81, 0x81, 0x80, 0x01, 0x80, 0xff, 0xff};
  224. #define up_width 16
  225. #define up_height 16
  226. static char up_bits[] = {
  227.    0xff, 0xff, 0x01, 0x80, 0x81, 0x80, 0x41, 0x81, 0x21, 0x82, 0x11, 0x84,
  228.    0x09, 0x88, 0x05, 0x90, 0x1f, 0xbc, 0x11, 0x84, 0x11, 0x84, 0x11, 0x84,
  229.    0xf1, 0x87, 0x01, 0x80, 0x01, 0x80, 0xff, 0xff};
  230. #define up1_width 16
  231. #define up1_height 16
  232. static char up1_bits[] = {
  233.    0xff, 0xff, 0x01, 0x80, 0x81, 0x80, 0xc1, 0x81, 0xe1, 0x83, 0xf1, 0x87,
  234.    0xf9, 0x8f, 0xfd, 0x9f, 0xff, 0xbf, 0xf1, 0x87, 0xf1, 0x87, 0xf1, 0x87,
  235.    0xf1, 0x87, 0x01, 0x80, 0x01, 0x80, 0xff, 0xff};
  236. #define scrlgray_width 8
  237. #define scrlgray_height 8
  238. static char scrlgray_bits[] = {
  239.    0x11, 0x44, 0x11, 0x44, 0x11, 0x44, 0x11, 0x44};
  240. #define gray50_width 8
  241. #define gray50_height 8
  242. static char gray50_bits[] = {
  243.    0x33, 0xcc, 0x33, 0xcc, 0x33, 0xcc, 0x33, 0xcc};
  244. #define gray25_width 8
  245. #define gray25_height 8
  246. static char gray25_bits[] = {
  247.    0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22};
  248. #define i_fifo_width 20
  249. #define i_fifo_height 13
  250. static char i_fifo_bits[] = {
  251.    0x80, 0x0f, 0xf0, 0x80, 0x0f, 0xf0, 0xff, 0xff, 0xff, 0x80, 0x0f, 0xf0,
  252.    0xff, 0xff, 0xff, 0xf0, 0x7f, 0xf0, 0xff, 0xff, 0xff, 0xc0, 0x1f, 0xf0,
  253.    0xff, 0xff, 0xff, 0x00, 0x07, 0xf0, 0xff, 0xff, 0xff, 0x00, 0x00, 0xf0,
  254.    0xff, 0xff, 0xff};
  255. #define i_chr_width 20
  256. #define i_chr_height 13
  257. static char i_chr_bits[] = {
  258.    0xe0, 0x7f, 0x00, 0x20, 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x40, 0x00,
  259.    0x20, 0x40, 0x00, 0x20, 0x40, 0x00, 0x20, 0x40, 0x00, 0xe0, 0x7f, 0x00,
  260.    0x00, 0x09, 0x00, 0xf0, 0xff, 0x00, 0x50, 0xd5, 0x00, 0xb0, 0xaa, 0x00,
  261.    0xf0, 0xff, 0x00};
  262. #define i_dir_width 20
  263. #define i_dir_height 13
  264. static char i_dir_bits[] = {
  265.    0xf0, 0x01, 0x00, 0x08, 0x02, 0x00, 0xfe, 0xff, 0x07, 0x02, 0x00, 0x04,
  266.    0x02, 0x00, 0x04, 0x02, 0x00, 0x04, 0x02, 0x00, 0x04, 0x02, 0x00, 0x04,
  267.    0x02, 0x00, 0x04, 0x02, 0x00, 0x04, 0x02, 0x00, 0x04, 0x02, 0x00, 0x04,
  268.    0xfe, 0xff, 0x07};
  269. #define i_blk_width 20
  270. #define i_blk_height 13
  271. static char i_blk_bits[] = {
  272.    0x40, 0x00, 0x00, 0xb0, 0x01, 0x00, 0x0c, 0x02, 0x00, 0x03, 0xcc, 0x01,
  273.    0x0d, 0x3a, 0x06, 0xb1, 0x19, 0x06, 0x41, 0xe8, 0x05, 0x41, 0x88, 0x04,
  274.    0x41, 0x88, 0x04, 0x41, 0x88, 0x04, 0x43, 0x9c, 0x06, 0x4c, 0xb2, 0x01,
  275.    0xf0, 0xc1, 0x00};
  276. #define i_lnk_width 20
  277. #define i_lnk_height 13
  278. static char i_lnk_bits[] = {
  279.    0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0xc0, 0x01, 0xc0, 0xff, 0x07,
  280.    0xe0, 0xff, 0x07, 0x30, 0xc0, 0x01, 0x30, 0x40, 0x00, 0xe0, 0x0f, 0x00,
  281.    0xc0, 0x1f, 0x00, 0x00, 0x30, 0x00, 0x00, 0x30, 0x00, 0xfe, 0x1f, 0x00,
  282.    0xfe, 0x0f, 0x00};
  283. #define i_sock_width 20
  284. #define i_sock_height 13
  285. static char i_sock_bits[] = {
  286.    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x1f, 0x00, 0x84, 0xf0, 0x0f,
  287.    0x8c, 0x10, 0x00, 0x9f, 0x5a, 0x05, 0xbf, 0xb5, 0x0a, 0x9f, 0xff, 0x0f,
  288.    0x8c, 0xff, 0x0f, 0x84, 0xff, 0x0f, 0x80, 0x1f, 0x00, 0x00, 0x00, 0x00,
  289.    0x00, 0x00, 0x00};
  290. #define i_reg_width 20
  291. #define i_reg_height 13
  292. static char i_reg_bits[] = {
  293.    0xc0, 0x7f, 0x00, 0xa0, 0x40, 0x00, 0x90, 0x40, 0x00, 0xf0, 0x40, 0x00,
  294.    0x10, 0x40, 0x00, 0x10, 0x40, 0x00, 0x10, 0x40, 0x00, 0x10, 0x40, 0x00,
  295.    0x10, 0x40, 0x00, 0x10, 0x40, 0x00, 0x10, 0x40, 0x00, 0x10, 0x40, 0x00,
  296.    0xf0, 0x7f, 0x00};
  297. #define rb_off_width 15
  298. #define rb_off_height 15
  299. static char rb_off_bits[] = {
  300.    0xe0, 0x03, 0x18, 0x0c, 0x04, 0x10, 0x02, 0x20, 0x02, 0x20, 0x01, 0x40,
  301.    0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x02, 0x20, 0x02, 0x20,
  302.    0x04, 0x10, 0x18, 0x0c, 0xe0, 0x03};
  303. #define rb_on_width 15
  304. #define rb_on_height 15
  305. static char rb_on_bits[] = {
  306.    0xe0, 0x03, 0x18, 0x0c, 0x04, 0x10, 0xc2, 0x21, 0xf2, 0x27, 0xf1, 0x47,
  307.    0xf9, 0x4f, 0xf9, 0x4f, 0xf9, 0x4f, 0xf1, 0x47, 0xf2, 0x27, 0xc2, 0x21,
  308.    0x04, 0x10, 0x18, 0x0c, 0xe0, 0x03};
  309. #define rb_off1_width 15
  310. #define rb_off1_height 15
  311. static char rb_off1_bits[] = {
  312.    0xe0, 0x03, 0xf8, 0x0f, 0x1c, 0x1c, 0x06, 0x30, 0x06, 0x30, 0x03, 0x60,
  313.    0x03, 0x60, 0x03, 0x60, 0x03, 0x60, 0x03, 0x60, 0x06, 0x30, 0x06, 0x30,
  314.    0x1c, 0x1c, 0xf8, 0x0f, 0xe0, 0x03};
  315. #define rb_on1_width 15
  316. #define rb_on1_height 15
  317. static char rb_on1_bits[] = {
  318.    0xe0, 0x03, 0xf8, 0x0f, 0x1c, 0x1c, 0xc6, 0x31, 0xf6, 0x37, 0xf3, 0x67,
  319.    0xfb, 0x6f, 0xfb, 0x6f, 0xfb, 0x6f, 0xf3, 0x67, 0xf6, 0x37, 0xc6, 0x31,
  320.    0x1c, 0x1c, 0xf8, 0x0f, 0xe0, 0x03};
  321. #define fc_left_width 16
  322. #define fc_left_height 16
  323. static char fc_left_bits[] = {
  324.    0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x04, 0x70, 0x82, 0x8c, 0xe2,
  325.    0x22, 0x9c, 0x2d, 0x90, 0x2d, 0x80, 0x21, 0x90, 0x22, 0x9c, 0x1c, 0xe3,
  326.    0x70, 0x82, 0x80, 0x02, 0x00, 0x07, 0x00, 0x00};
  327. #define fc_leftm_width 16
  328. #define fc_leftm_height 16
  329. static char fc_leftm_bits[] = {
  330.    0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xc0, 0x07, 0xf0, 0x83, 0xfc, 0xe3,
  331.    0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfc, 0xe3,
  332.    0xf0, 0x83, 0x80, 0x03, 0x00, 0x07, 0x00, 0x00};
  333. #define fc_mid_width 16
  334. #define fc_mid_height 16
  335. static char fc_mid_bits[] = {
  336.    0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x80, 0x03, 0x40, 0x04, 0x20, 0x08,
  337.    0xe0, 0x0e, 0xe0, 0x0e, 0x20, 0x08, 0xa0, 0x0b, 0xe0, 0x0f, 0xa0, 0x0b,
  338.    0x40, 0x04, 0x80, 0x03, 0x80, 0x03, 0x00, 0x00};
  339. #define fc_midm_width 16
  340. #define fc_midm_height 16
  341. static char fc_midm_bits[] = {
  342.    0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x80, 0x03, 0xc0, 0x07, 0xe0, 0x0f,
  343.    0xe0, 0x0f, 0xe0, 0x0f, 0xe0, 0x0f, 0xe0, 0x0f, 0xe0, 0x0f, 0xe0, 0x0f,
  344.    0xc0, 0x07, 0x80, 0x03, 0x80, 0x03, 0x00, 0x00};
  345. #define fc_right_width 16
  346. #define fc_right_height 16
  347. static char fc_right_bits[] = {
  348.    0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x20, 0x03, 0x41, 0x0e, 0x47, 0x30,
  349.    0x39, 0x44, 0x09, 0xb4, 0x01, 0xb4, 0x09, 0x84, 0x39, 0x44, 0xc7, 0x38,
  350.    0x41, 0x0e, 0x40, 0x01, 0xe0, 0x00, 0x00, 0x00};
  351. #define fc_rightm_width 16
  352. #define fc_rightm_height 16
  353. static char fc_rightm_bits[] = {
  354.    0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0xe0, 0x03, 0xc1, 0x0f, 0xc7, 0x3f,
  355.    0xff, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xc7, 0x3f,
  356.    0xc1, 0x0f, 0xc0, 0x01, 0xe0, 0x00, 0x00, 0x00};
  357. #define fc_left1_width 16
  358. #define fc_left1_height 16
  359. static char fc_left1_bits[] = {
  360.    0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x02, 0xe0, 0x14, 0x10, 0x1f,
  361.    0xd8, 0x14, 0xd8, 0x14, 0x08, 0x10, 0x08, 0x14, 0xd0, 0x14, 0x70, 0x1e,
  362.    0x60, 0x13, 0x80, 0x01, 0x00, 0x01, 0x00, 0x00};
  363. #define fc_left1m_width 16
  364. #define fc_left1m_height 16
  365. static char fc_left1m_bits[] = {
  366.    0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xc0, 0x03, 0xe0, 0x17, 0xf0, 0x1f,
  367.    0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x1f, 0xf0, 0x1f, 0xf0, 0x1f,
  368.    0xe0, 0x13, 0x80, 0x01, 0x00, 0x01, 0x00, 0x00};
  369. #define fc_right1_width 16
  370. #define fc_right1_height 16
  371. static char fc_right1_bits[] = {
  372.    0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x40, 0x03, 0x28, 0x07, 0xf8, 0x08,
  373.    0x28, 0x1b, 0x28, 0x1b, 0x08, 0x10, 0x28, 0x10, 0x28, 0x0b, 0x38, 0x0e,
  374.    0xc8, 0x06, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00};
  375. #define fc_right1m_width 16
  376. #define fc_right1m_height 16
  377. static char fc_right1m_bits[] = {
  378.    0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x03, 0xe8, 0x07, 0xf8, 0x0f,
  379.    0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x0f, 0xf8, 0x0f,
  380.    0xc8, 0x07, 0x80, 0x01, 0x80, 0x00, 0x00, 0x00};
  381. #define icon_width 48
  382. #define icon_height 29
  383. static char icon_bits[] = {
  384.    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  385.    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  386.    0x3e, 0x00, 0x7c, 0x7c, 0x00, 0x7c, 0x5c, 0x00, 0x2e, 0x5c, 0x00, 0x5c,
  387.    0xb8, 0x00, 0x17, 0xb8, 0x00, 0x2e, 0x70, 0x81, 0x0b, 0xb8, 0x00, 0x2e,
  388.    0x70, 0x81, 0x0b, 0x70, 0x01, 0x17, 0xe0, 0xc2, 0x05, 0x70, 0x01, 0x17,
  389.    0xc0, 0xe5, 0x02, 0xe0, 0x82, 0x0b, 0x80, 0x7b, 0x01, 0xe0, 0x82, 0x0b,
  390.    0x00, 0xb7, 0x00, 0xc0, 0xc5, 0x05, 0x00, 0x56, 0x00, 0xc0, 0xc5, 0x05,
  391.    0x00, 0x2e, 0x00, 0x80, 0xeb, 0x02, 0x00, 0x56, 0x00, 0x80, 0xeb, 0x02,
  392.    0x00, 0xb7, 0x00, 0x00, 0x77, 0x01, 0x80, 0x7b, 0x01, 0x00, 0x77, 0x01,
  393.    0xc0, 0xe5, 0x02, 0x00, 0xae, 0x00, 0xe0, 0xc2, 0x05, 0x00, 0xae, 0x00,
  394.    0x70, 0x81, 0x0b, 0x00, 0x5c, 0x00, 0x70, 0x81, 0x0b, 0x00, 0x5c, 0x00,
  395.    0xb8, 0x00, 0x17, 0x00, 0x38, 0x00, 0x5c, 0x00, 0x2e, 0x00, 0x38, 0x00,
  396.    0x3e, 0x00, 0x7c, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  397.    0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  398.    0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
  399. \BARFOO\
  400. else
  401.   echo "will not over write ./bitmaps.h"
  402. fi
  403. if `test ! -s ./pm.h`
  404. then
  405. echo "writting ./pm.h"
  406. cat > ./pm.h << '\BARFOO\'
  407. /* include file defining constants/macros for PM files.  Used by xvpm.c 
  408.  */
  409.  
  410. /*
  411.  * Copyright 1989, 1990 by the University of Pennsylvania
  412.  *
  413.  * Permission to use, copy, and distribute for non-commercial purposes,
  414.  * is hereby granted without fee, providing that the above copyright
  415.  * notice appear in all copies and that both the copyright notice and this
  416.  * permission notice appear in supporting documentation.
  417.  *
  418.  * The software may be modified for your own purposes, but modified versions
  419.  * may not be distributed.
  420.  *
  421.  * This software is provided "as is" without any express or implied warranty.
  422.  */
  423.  
  424. #define    PM_MAGICNO    0x56494557        /* Hex for VIEW */
  425. #define PM_MAXNELM    1024
  426. #define PM_MAXNBAND    1024
  427. #define PM_NOSHIFT    0
  428. #define PM_SHIFT    1
  429.  
  430. #define    PM_A        0x8000
  431. #define    PM_C        0x8001
  432. #define    PM_S        0x8002
  433. #define    PM_I        0x8004
  434. #define PM_F        0xc004
  435.  
  436. #define PM_RED 0xff
  437. #define PM_GREEN 0xff00
  438. #define PM_BLUE 0xff0000
  439. #define PM_ALPHA 0xff000000
  440. #define PM_BW 0
  441.  
  442. #define    PM_CMAX        0xff
  443. #define PM_SMAX        0x7fff
  444. #define    PM_IMAX        0x7fffffff
  445. #define PM_FMAX        1.7E38
  446.  
  447. #define PM_IOHDR_SIZE    (sizeof(pmpic)-(2*sizeof(char*)))
  448.  
  449. #define    pm_max(pm)    ((pm)->pm_form == PM_C ? PM_CMAX :          \
  450.                 (pm)->pm_form == PM_S ? PM_SMAX :      \
  451.                     (pm)->pm_form == PM_I ? PM_IMAX : \
  452.                          PM_FMAX)
  453.  
  454. #define pm_index(fm)    (((fm)&0xff)-(((fm)>>14)&01))
  455. #define    pm_sel(fm,fn)    (*((fn)[pm_index(fm)]))
  456. #define pm_iindex(a,nc,cr,cc)    ((a)+((cr)*(nc))+(cc))
  457.  
  458. #define pm_nelm(p)    ((p)->pm_ncol * (p)->pm_nrow)
  459. #define pm_nbelm(p)    (pm_nelm(p) * (p)->pm_nband)
  460. #define pm_psize(p)    (pm_nbelm(p) * (((p)->pm_form)&0xff))
  461. #define pm_isize(p)    ((p)->pm_np * pm_psize(p))
  462. #define pm_npix(p)      (pm_nbelm(p) * (p)->pm_np)
  463.  
  464. #include <sys/types.h>
  465.  
  466. typedef struct {
  467.     int    pm_id;        /* Magic number for pm format files.    */
  468.     int    pm_np;        /* Number of planes. Normally 1.    */
  469.     int    pm_nrow;    /* Number of rows. 1 - MAXNELM.        */
  470.     int    pm_ncol;    /* Number of columns. 1 - MAXNELM.    */
  471.     int    pm_nband;    /* Number of bands.            */
  472.     int    pm_form;    /* Pixel format.            */
  473.     int    pm_cmtsize;    /* Number comment bytes. Includes NULL. */
  474.     char    *pm_image;    /* The image itself.            */
  475.     char    *pm_cmt;    /* Transforms performed.        */
  476. } pmpic;
  477.  
  478. typedef    struct {
  479.     int    pm_x;        /* X Position. */
  480.     int    pm_y;        /* Y Position. */
  481.     int    pm_z;        /* Z Position. */
  482.     float    pm_ux;        /* Uncertainty in x. */
  483.     float    pm_uy;        /* Uncertainty in y. */
  484.     float    pm_uz;        /* Uncertainty in z. */
  485. } pmxyz;
  486.  
  487. #define    PM_EBASE    100
  488. #define PM_EMALLOC    101
  489. #define PM_EBADPARAM    102
  490. #define PM_EBADPIC    103
  491. #define PM_EBADFORM    104
  492. #define PM_EBADMAGIC    105
  493. #define PM_ENULLPIC    106    /* picture given was NULL */
  494. #define PM_EBADPLANES   107  /* invalid # of planes chosen for format */
  495. #define PM_EBADBANDS     108 /* invalid # of bands chosen for format */
  496. #define PM_EBADSIZE     109 /* # of rows/cols and x offsets, y offsets
  497.                too big for ikonas */
  498. #define PM_EBADCOLORS     110 /* invalid number of colors chosen for format */
  499. #define PM_EBADCOLORPLANE 111 /* invalid color plane entered */
  500.  
  501.  
  502. #define PM_NERROR    12
  503. #define PM_ERROR(e)    (((e) < PM_EBASE || (e) > (PM_EBASE + PM_NERROR)) ? \
  504.                 0 : (e) - PM_EBASE)
  505. extern char    *pm_errmsg[];
  506.  
  507. pmpic    *pm_add();
  508. pmpic    *pm_addcmt();
  509. pmpic    *pm_alloc();
  510. pmpic    *pm_and();
  511. pmpic    *pm_bthresh();
  512. pmpic    *pm_cast();
  513. char    *pm_cmt();
  514. pmpic    *pm_conv();
  515. pmpic    *pm_ebadform();
  516. int    pm_getcmt();
  517. pmpic    *pm_ikrd();
  518. pmpic    *pm_ikwr();
  519. pmpic    *pm_neg();
  520. pmpic    *pm_or();
  521. pmpic    *pm_prep();
  522. pmpic    *pm_rdhdr();
  523. pmpic    *pm_read();
  524. pmpic    *pm_scale();
  525. pmpic    *pm_sub();
  526. pmpic    *pm_thresh();
  527. pmpic    *pm_write();
  528.  
  529. pmxyz    *pm_centroid();
  530.  
  531. \BARFOO\
  532. else
  533.   echo "will not over write ./pm.h"
  534. fi
  535. if `test ! -s ./xv.h`
  536. then
  537. echo "writting ./xv.h"
  538. cat > ./xv.h << '\BARFOO\'
  539. /*
  540.  *  xv.h  -  header file for xv, but you probably guessed as much
  541.  */
  542.  
  543. /*
  544.  * Copyright 1989, 1990 by the University of Pennsylvania
  545.  *
  546.  * Permission to use, copy, and distribute for non-commercial purposes,
  547.  * is hereby granted without fee, providing that the above copyright
  548.  * notice appear in all copies and that both the copyright notice and this
  549.  * permission notice appear in supporting documentation.
  550.  *
  551.  * The software may be modified for your own purposes, but modified versions
  552.  * may not be distributed.
  553.  *
  554.  * This software is provided "as is" without any express or implied warranty.
  555.  */
  556.  
  557. #define REVDATE   "Rev: 11/26/90  (Patchlevel 2)"
  558.  
  559. #ifdef SVR4             /* SysV release 4 uses dirent */
  560. #ifndef sgi             /* but Silicon Graphics doesn't */
  561. #define DIRENT
  562. #endif
  563. #endif
  564.  
  565.  
  566. /* include files */
  567. #include <stdio.h>
  568. #include <math.h>
  569. #include <ctype.h>
  570. #include <string.h>
  571. extern int   errno;             /* this SHOULD be in errno.h */
  572. extern char *sys_errlist[];     /* this SHOULD be in errno.h */
  573.  
  574. #ifndef __convexc__             /* Convex doesn't have <memory.h> */
  575. #include <memory.h>             /* for 'memset()' prototype */
  576. #endif
  577.  
  578. /* neither IBM AOS 4.3, Convex, nor BSD 4.3 on VAX have <malloc.h> */
  579. #if !defined(ibm032) && !defined(__convexc__) && \
  580.     !(defined(vax) && !defined(ultrix))
  581. #if defined(hp300) || defined(hp800)
  582. #include <sys/malloc.h>                /* it's in 'sys' on HPs*/
  583. #else
  584. #include <malloc.h>
  585. #endif
  586. #endif
  587.  
  588.  
  589. #include <X11/Xos.h>
  590. #include <X11/Xlib.h>
  591. #include <X11/Xutil.h>
  592. #include <X11/cursorfont.h>
  593. #include <X11/keysym.h>
  594.  
  595.  
  596. #if defined(NEEDSTIME) || defined(NEEDSDIR)
  597. #include <sys/types.h>    /* only include <sys/types.h> once */
  598. #endif
  599.  
  600. #ifdef NEEDSTIME
  601. #ifndef sgi              /* silicon graphics doesn't have timeb.h */
  602. #include <sys/timeb.h>
  603. #endif
  604. #include <signal.h>
  605. #if defined(sco) && !defined(NOTIMER)
  606. #include <sys/itimer.h>
  607. #endif
  608. #ifndef  sigmask
  609. #define  sigmask(m)      (1 << ((m)-1))
  610. #endif
  611. #endif
  612.  
  613. #ifdef NEEDSDIR
  614. #ifdef sco
  615. #include <sys/ndir.h>
  616. #define lstat stat
  617. #else
  618. #ifndef ATT
  619. #include <sys/dir.h>
  620. #endif  /* ATT */
  621. #endif  /* sco */
  622. #include <sys/param.h>
  623. #include <sys/stat.h>
  624. #ifdef DIRENT
  625. #include <dirent.h>
  626. #endif
  627. #endif
  628.  
  629. #ifdef NEEDSVARARGS
  630. #include <varargs.h>
  631. #endif
  632.  
  633. /* signal macros */
  634. #ifdef SVR4
  635. #define HOLD_SIG         sighold(SIGALRM)  /* block ALRM sig from occurring */
  636. #define RELEASE_SIG      sigrelse(SIGALRM) /* 
  637. #define PAUSE_SIG        sigpause(SIGALRM) /* sleep until ALRM signal */
  638. #else
  639. #define HOLD_SIG         sigblock(sigmask(SIGALRM))
  640. #define RELEASE_SIG      sigblock(0)
  641. #define PAUSE_SIG        sigpause(0)
  642. #endif
  643.  
  644.  
  645. #ifdef i386
  646. #define MAXPATHLEN    500
  647. #define UNCOMPRESS    "/usr/local/bin/uncompress"   /* uncompress program */
  648. #undef  HOLD_SIG
  649. #define HOLD_SIG      /* don't know how to handle signals  MWS 10/18/90 */
  650. #undef  RELEASE_SIG
  651. #define RELEASE_SIG   /* */
  652. #undef  PAUSE_SIG
  653. #define PAUSE_SIG     /* */
  654. #else
  655. #define UNCOMPRESS "/usr/ucb/uncompress"   /* for uncompressing .Z files */
  656. #endif
  657.  
  658. #define PROGNAME  "xv"             /* used in resource database */
  659.  
  660. #define DEFINFOGEOM "-10+10"       /* default position of info window */
  661. #define DEFDIRGEOM  "-10-10"       /* default position of directory window */
  662. #define DEFCTRLGEOM "+400+400"     /* default position of ctrl window */
  663. #define DEFGAMGEOM  "+10-10"       /* default position of gamma window */
  664.  
  665. #define INFOWIDE 500               /* (fixed) size of info window */
  666. #define INFOHIGH 250
  667.  
  668. #define CTRLWIDE 440               /* (fixed) size of control window */
  669. #define CTRLHIGH 295
  670.  
  671. #define DIRWIDE  300               /* (fixed) size of directory window */
  672. #define DIRHIGH  420
  673.  
  674. #define GAMWIDE  366               /* (fixed) size of Gamma window */
  675. #define GAMHIGH  356
  676.  
  677. #define MAXNAMES 1024   /* max # of files (more than this?  Get REAL!)
  678.  
  679. /* strings in the INFOBOX (used in SetISTR and GetISTR) */
  680. #define NISTR         9    /* number of ISTRs */
  681. #define ISTR_INFO     0
  682. #define ISTR_WARNING  1
  683. #define ISTR_FILENAME 2
  684. #define ISTR_FORMAT   3
  685. #define ISTR_RES      4
  686. #define ISTR_CROP     5
  687. #define ISTR_EXPAND   6
  688. #define ISTR_COLOR    7
  689. #define ISTR_COLOR2   8
  690.  
  691. /* potential values of 'infomode', used in info box drawing routines */
  692. #define INF_NONE 0    /* empty box */
  693. #define INF_STR  1    /* just ISTR_INFO */
  694. #define INF_PART 2    /* filename, format, size and infostr */
  695. #define INF_FULL 3    /* INF_PART + clipping, expansion, colorinfo */
  696.  
  697.  
  698. /* buttons in the ctrl window */
  699. #define NBUTTS  20
  700. #define BNEXT   0
  701. #define BPREV   1
  702. #define BCROP   2
  703. #define BUNCROP 3
  704. #define BNORM   4
  705. #define BMAX    5
  706. #define BUP2    6
  707. #define BDN2    7
  708. #define BUP10   8
  709. #define BDN10   9
  710. #define BQUIT   10
  711. #define B4BY3   11
  712. #define BSAVE   12
  713. #define BROTL   13
  714. #define BINFO   14
  715. #define BGAMMA  15
  716. #define BASPECT 16
  717. #define BROTR   17
  718. #define BMAXPECT 18
  719. #define BACROP   19
  720.  
  721. /* buttons in the 'save' window */
  722. #define S_NBUTTS 4
  723. #define S_BOPEN  0
  724. #define S_BSAVE  1
  725. #define S_BCANC  2
  726. #define S_BQUIT  3
  727.  
  728.  
  729. /* buttons in the 'gamma' window */
  730. #define G_NBUTTS  17
  731. #define G_BAPPLY  0
  732. #define G_BNOGAM  1
  733. #define G_BRESET  2
  734. #define G_BDEF    3
  735. #define G_BGTYPE  4
  736. #define G_BCLOSE  5
  737. #define G_BUP_BR  6
  738. #define G_BDN_BR  7
  739. #define G_BUP_CN  8
  740. #define G_BDN_CN  9
  741. #define G_BHSVRGB 10
  742. #define G_B1      11
  743. #define G_B2      12
  744. #define G_B3      13
  745. #define G_B4      14
  746. #define G_BSET    15
  747. #define G_BUNDO   16
  748.  
  749.  
  750. /* definitions of first char of dirnames[i] (filetype) */
  751. #define C_FIFO  'f'    /* FIFO special file */
  752. #define C_CHR   'c'    /* character special file */
  753. #define C_DIR   'd'    /* directory */
  754. #define C_BLK   'b'    /* block special file */
  755. #define C_LNK   'l'    /* symbolic link */
  756. #define C_SOCK  's'    /* socket */
  757. #define C_REG   ' '    /* regular file */
  758.  
  759.  
  760. /* random string-placing definitions */
  761. #define SPACING 3      /* vertical space between strings */
  762. #define ASCENT   (mfinfo->ascent)
  763. #define DESCENT  (mfinfo->descent)
  764. #define CHIGH    (ASCENT + DESCENT)
  765. #define LINEHIGH (CHIGH + SPACING)
  766.  
  767.  
  768. #define STDINSTR "<stdin>"
  769.  
  770.  
  771. #ifndef MAIN
  772. #define WHERE extern
  773. #else
  774. #define WHERE
  775. #endif
  776.  
  777. typedef unsigned char byte;
  778.  
  779. typedef struct { Window win;            /* window ID */
  780.          int len;               /* length of major axis */
  781.          int vert;              /* true if vertical, else horizontal */
  782.          int active;            /* true if scroll bar can do anything*/
  783.          int min,max;           /* min/max values 'pos' can take */
  784.          int val;               /* 'value' of scrollbar */
  785.          int page;              /* amt val change on pageup/pagedown */
  786.          int tpos;              /* thumb pos. (pixels from tmin) */
  787.          int tmin,tmax;         /* min/max thumb offsets (from 0,0) */
  788.          int tsize;             /* size of thumb (in pixels) */
  789.          unsigned long fg,bg;   /* colors */
  790.          void (*drawobj)();     /* redraws obj controlled by scrl*/
  791.          int uplit, dnlit;      /* true if up&down arrows are lit */
  792.            } SCRL;
  793.  
  794. typedef struct { Window win;            /* parent window */
  795.          int x,y,w,h;           /* size of button rectangle */
  796.          int lit;               /* if true, invert colors */
  797.          int active;            /* if false, stipple gray */
  798.          int toggle;            /* if true, clicking toggles state */
  799.          unsigned long fg,bg;   /* colors */
  800.          char *str;             /* string in button */
  801.            } BUTT;
  802.  
  803.  
  804. typedef struct { Window win;            /* window */
  805.          int x,y,w,h;           /* size of window */
  806.          unsigned long fg,bg;   /* colors */
  807.          char **str;            /* ptr to list of strings */
  808.          int   nstr;            /* number of strings */
  809.          int   selected;        /* number of 'selected' string */
  810.          int   nlines;          /* number of lines shown at once */
  811.          SCRL  scrl;            /* scrollbar that controls list */
  812.          int   filetypes;       /* true if filetype icons to be drawn*/
  813.          int   dirsonly;        /* if true, only dirs selectable */
  814.            } LIST;
  815.  
  816.  
  817. typedef struct rbutt { Window        win;      /* parent window */
  818.                int           x,y;      /* position in parent */
  819.                char         *str;      /* the message string */
  820.                int           selected; /* selected or not */
  821.                int           active;   /* selectable? */
  822.                struct rbutt *next;     /* pointer to next in group */
  823.                unsigned long fg,bg;    /* colors */
  824.              } RBUTT;
  825.  
  826. /* MACROS */
  827. #define CENTERX(f,x,str) ((x)-XTextWidth(f,str,strlen(str))/2)
  828. #define CENTERY(f,y) ((y)-((f->ascent+f->descent)/2)+f->ascent)
  829.  
  830. /* RANGE forces a to be in the range b..c (inclusive) */
  831. #define RANGE(a,b,c) { if (a<b) a=b;  if (a>c) a=c; }
  832.  
  833. /* PTINRECT returns '1' if x,y is in rect (inclusive) */
  834. #define PTINRECT(x,y,rx,ry,rw,rh) \
  835.            ((x)>=(rx) && (y)>=(ry) && (x)<=(rx)+(rw) && (y)<=(ry)+(rh))
  836.  
  837. /* MONO returns total intensity of r,g,b components */
  838. #define MONO(rd,gn,bl) (((rd)*11 + (gn)*16 + (bl)*5) >> 5)  /*.33R+ .5G+ .17B*/
  839.  
  840.  
  841.  
  842. /* X stuff */
  843. WHERE Display       *theDisp;
  844. WHERE int           theScreen;
  845. WHERE unsigned int  ncells, dispWIDE, dispHIGH, dispDEEP;
  846. WHERE Colormap      theCmap, LocalCmap;
  847. WHERE Window        rootW, mainW;
  848. WHERE GC            theGC;
  849. WHERE unsigned long black, white, fg, bg, infofg, infobg;
  850. WHERE Font          mfont, monofont;
  851. WHERE XFontStruct   *mfinfo, *monofinfo;
  852. WHERE Visual        *theVisual;
  853. WHERE Cursor        arrow, cross;
  854. WHERE Pixmap        iconPix;
  855.  
  856. /* global vars used by LOAD routines */
  857. WHERE byte          *pic;                   /* ptr to loaded picture */
  858. WHERE unsigned int   pWIDE,pHIGH;           /* size of 'pic' */
  859. WHERE byte           r[256],g[256],b[256];  /* colormap */
  860. WHERE char          *cmd;                   /* program name for printf's */
  861. WHERE int            DEBUG;                 /* print debugging info */
  862. WHERE int            mono;                  /* true if displaying grayscale */
  863.  
  864.  
  865. /* more global variables, used by xv and xvmisc */
  866. WHERE byte          *cpic;         /* cropped version of pic */
  867. WHERE unsigned int  cWIDE, cHIGH,  /* size of cropped region */
  868.                     cXOFF, cYOFF;  /* offset of region from 0,0 of pic */
  869.  
  870. WHERE byte          *epic;         /* expanded version of cpic */
  871.                                    /* points to pic when at 1:1 expansion */
  872.                                    /* this is converted to 'theImage' */
  873. WHERE unsigned int  eWIDE, eHIGH;  /* size of epic */
  874. WHERE unsigned int  normFact;      /* factor to shrink picture by for 'norm' */
  875.  
  876. WHERE byte           rorg[256],gorg[256],borg[256];  /* ORIGINAL colormap */
  877. WHERE byte           gamcr[256];   /* gamma correction curve */
  878. WHERE byte           fsgamcr[256]; /* gamma correction curve (for FS dither) */
  879.  
  880.  
  881. WHERE XImage        *theImage;     /* X version of epic */
  882.  
  883.  
  884. WHERE unsigned long freecols[256]; /* list of pixel values to free */
  885. WHERE int           nfcols;        /* number of colors to free */
  886. WHERE unsigned long cols[256];     /* maps pic pixel values to X pixel vals */
  887. WHERE int           fc2pcol[256];  /* maps freecols into pic pixel values */
  888. WHERE int           numcols;       /* # of desired colors in picture */
  889. WHERE int           ncols;         /* max # of (different) colors to alloc */
  890.  
  891. WHERE char          str[128];      /* dummy string used for error messages */
  892.  
  893. WHERE int           expand,        /* expansion amount */
  894.                     bwidth,        /* border width of created windows */
  895.                     noglob,        /* force to only use colors it alloced */
  896.                     revvideo,      /* reverse video */
  897.                     perfect,       /* perfect color.  install own colormap */
  898.                     fixedaspect,   /* fixed aspect ratio */
  899.                     slow24,        /* use slow 24to8 algorithm */
  900.                     ninstall,      /* true if using icccm-complaint WM
  901.                       (a WM that will does install CMaps */
  902.                     useroot,       /* true if we should draw in rootW */
  903.                     noqcheck,      /* true if we should NOT do QuickCheck */
  904.                     rwcolor,       /* true if we should use R/W color cells */
  905.                     rwthistime,    /* true if we DID use R/W color cells */
  906.                     brokeFreeCols, /* true if server has broken XFreeColors */
  907.                     fish,          /* turn on annoying fish */
  908.                     fishrunning;   /* true if fish are in operation */
  909.  
  910. WHERE float         defaspect,     /* default aspect ratio to use */
  911.                     normaspect;    /* normal aspect ratio of this picture */
  912.  
  913. WHERE int           crx1, cry1,    /* dimensions of cropping rectangle */
  914.                     crx2, cry2;
  915.  
  916.  
  917.  
  918. /* stuff used for 'info' box */
  919. WHERE Window        infoW;
  920. WHERE int           infoUp;       /* boolean:  whether infobox is visible */
  921. WHERE int           infoMode;
  922.  
  923.  
  924. /* stuff used for 'ctrl' box */
  925. WHERE Window        ctrlW;
  926. WHERE int           ctrlUp;       /* boolean:  whether ctrlbox is visible */
  927. WHERE char         *namelist[MAXNAMES];  /* list of file names from argv */
  928. WHERE char         *dispnames[MAXNAMES]; /* truncated names shown in listbox */
  929. WHERE int           numnames, curname;
  930. WHERE LIST          nList;
  931. WHERE BUTT          but[NBUTTS];         /* command buttons in ctrl window */
  932. WHERE Pixmap        grayTile, grayStip;  /* for drawing dim things */
  933.  
  934. /* stuff used for 'directory' box */
  935. WHERE Window        dirW, ddirW, dnamW;
  936. WHERE int           dirUp;       /* is dirW mapped or not */
  937. WHERE LIST          dList;       /* list of filenames in current directory */
  938. WHERE BUTT          dbut[S_NBUTTS];
  939.  
  940. /* stuff used for 'gamma' box */
  941. #define NUMHANDS 4
  942. WHERE Window        gamW,graphW;
  943. WHERE int           gamUp;       /* is gamW mapped or not */
  944. WHERE BUTT          gbut[G_NBUTTS];
  945. WHERE XPoint        ghand[NUMHANDS];
  946.  
  947. #undef WHERE
  948.  
  949.  
  950.  
  951.  
  952.  
  953. /* function declarations for externally-callable functions */
  954.  
  955. #ifdef __STDC__ 
  956. /****************************** XV.C ****************************/
  957. void DrawWindow(int, int, int, int);
  958. void WCrop(int, int);
  959. void WUnCrop(void);
  960. void WResize(int, int);
  961. void WRotate(void);
  962. void InvCropRect(void);
  963. void MakeRootPic(void);
  964.  
  965. /*************************** XVMISC.C ***************************/
  966. Window CreateWindow(char *, char *, unsigned int, unsigned int, 
  967.             unsigned long, unsigned long);
  968. void Resize(int, int);
  969. void Rotate(int);
  970. void SortColormap(void);
  971. void AllocColors(void);
  972. void AllocRWColors(void);
  973. void DoMonoAndRV(void);
  974. void DoCrop(void);
  975. void UnCrop(void);
  976. void AutoCrop(void);
  977. void FSDither(byte *, int, int, byte *);
  978. void CreateXImage(void);
  979. void CenterString(Window, char *, int, int);
  980. void ULineString(Window, char *, int, int);
  981. int  StringWidth(char *);
  982. void FakeButtonPress(BUTT *);
  983. void SetCropString(void);
  984. void Warning(void);
  985. void FatalError(char *);
  986. void LoadFishCursors(void);
  987. void SetCursors(int);
  988. void WaitCursor(void);
  989. void Quit(int);
  990. void Timer(int);
  991.  
  992. /*************************** XV24TO8.C **************************/
  993. int  Conv24to8(byte *, int, int, int);
  994. void InitFSDTables(void);
  995.  
  996. /**************************** XVCTRL.C **************************/
  997. void CreateCtrl(char *);
  998. void CtrlBox(int);
  999. void RedrawCtrl(int, int, int, int);
  1000. int  ClickCtrl(int, int);
  1001. void DrawCtrlStr(void);
  1002. void ScrollToCurrent(void);
  1003.  
  1004. void LSCreate(LIST *, Window, int, int, int, int, int, char **, int, 
  1005.           unsigned long, unsigned long, void (*)(void), int, int);
  1006. void LSRedraw(LIST *);
  1007. int  LSClick (LIST *, XButtonEvent *);
  1008. void LSNewData(LIST *, char **, int);
  1009.  
  1010.  
  1011. /*************************** XVINFO.C ***************************/
  1012. void  CreateInfo(char *);
  1013. void  InfoBox(int);
  1014. void  RedrawInfo(int, int, int, int);
  1015. void  SetInfoMode(int);
  1016. void  SetISTR(int, ...);
  1017. char *GetISTR(int);
  1018.  
  1019. /**************************** XVDIR.C ***************************/
  1020. void CreateDirW(char *);
  1021. void DirBox(int);
  1022. void RedrawDirW(int,int,int,int);
  1023. int  ClickDirW(int, int);
  1024. void LoadCurrentDirectory(void);
  1025. void RedrawDDirW(void);
  1026. void RedrawDNamW(void);
  1027. void SelectDir(int);
  1028. void DirOpenActive(void);
  1029. void TrackDDirW(int,int);
  1030. int  DirKey(int);
  1031. int  DoSave(void);
  1032. void SetDirFName(char *);
  1033.  
  1034.  
  1035. /**************************** XVGAM.C **************************/
  1036. void CreateGam(char *);
  1037. void GamBox(int);
  1038. void RedrawGam(int, int, int, int);
  1039. void RedrawGraph(int, int, int, int);
  1040. void ClickGam(int, int);
  1041. void TrackGraph(int, int);
  1042. void GenerateGamma(void);
  1043. void GenerateFSGamma(void);
  1044. void GammifyColors(void);
  1045. void SetGPreset(int, int, int, int, int, int, int);
  1046.  
  1047. /*************************** XVSCRL.C ***************************/
  1048. void SCCreate  (SCRL *, Window, int, int, int, int, int, int, int, int, 
  1049.                       unsigned long, unsigned long, void (*)(void));
  1050. void SCSetRange(SCRL *, int, int, int, int);
  1051. void SCSetVal  (SCRL *, int);
  1052. void SCRedraw  (SCRL *);
  1053. void SCTrack   (SCRL *, int, int);
  1054.  
  1055.  
  1056. /**************************** XVBUTT.C ***************************/
  1057.  
  1058. void BTCreate(BUTT *, Window, int, int, int, int, char *, 
  1059.           unsigned long, unsigned long);
  1060. void BTSetActive(BUTT *, int);
  1061. void BTRedraw(BUTT *);
  1062. int  BTTrack (BUTT *);
  1063.  
  1064.  
  1065. RBUTT *RBCreate(RBUTT *, Window, int, int, char*, 
  1066.         unsigned long, unsigned long);
  1067. void   RBRedraw(RBUTT *, int);
  1068. void   RBSelect(RBUTT *, int);
  1069. int    RBWhich(RBUTT *);
  1070. int    RBCount(RBUTT *);
  1071. void   RBSetActive(RBUTT *, int, int);
  1072. int    RBClick(RBUTT *, int, int);
  1073. void   RBTrack(RBUTT *, int);
  1074.  
  1075.  
  1076. /**************************** XVGIF.C ***************************/
  1077. int LoadGIF(char *, int);
  1078.  
  1079. /*************************** XVGIFWR.C **************************/
  1080. int WriteGIF(FILE *, byte *, int, int, byte *, byte *, byte *, int, int);
  1081.  
  1082. /**************************** XVPM.C ****************************/
  1083. int LoadPM(char *, int);
  1084. int WritePM(FILE *, byte *, int, int, byte *, byte *, byte *, int, int);
  1085.  
  1086. /**************************** XVPBM.C ***************************/
  1087. int LoadPBM(char *, int);
  1088. int WritePBM(FILE *, byte *, int, int, byte *, byte *, byte *, int, int, int);
  1089.  
  1090. /**************************** XVXBM.C ***************************/
  1091. int LoadXBM(char *, int);
  1092. int WriteXBM(FILE *, byte *, int, int, char *);
  1093.  
  1094.  
  1095.  
  1096.  
  1097.  
  1098. #else     /* using non-ANSI cc.  Function defs, but no params */
  1099.  
  1100.  
  1101.  
  1102.  
  1103. /****************************** XV.C ****************************/
  1104. void DrawWindow(), WCrop(), WUnCrop(), WResize(), WRotate(), InvCropRect();
  1105. void MakeRootPic();
  1106.  
  1107. /*************************** XVMISC.C ***************************/
  1108. Window CreateWindow();
  1109. void   Resize(), Rotate(), SortColormap(), AllocColors(), DoCrop(), UnCrop();
  1110. void   AutoCrop(), DoMonoAndRV();
  1111. void   AllocRWColors(), FSDither(), CenterString(), ULineString();
  1112. int    StringWidth();
  1113. void   FakeButtonPress(), SetCropString(), Warning(), FatalError(), Quit();
  1114. void   Timer(), CreateXImage(), LoadFishCursors(), SetCursors(), WaitCursor();
  1115.  
  1116. /*************************** XV24TO8.C **************************/
  1117. int  Conv24to8();
  1118. void InitFSDTables();
  1119.  
  1120. /**************************** XVCTRL.C **************************/
  1121. void CreateCtrl(), CtrlBox(), RedrawCtrl(), DrawCtrlStr(), ScrollToCurrent();
  1122. int  ClickCtrl();
  1123.  
  1124. void LSCreate(), LSRedraw(), LSNewData();
  1125. int  LSClick();
  1126.  
  1127. /*************************** XVINFO.C ***************************/
  1128. void  CreateInfo(), InfoBox(), RedrawInfo(), SetInfoMode(), SetISTR();
  1129. char *GetISTR();
  1130.  
  1131. /**************************** XVDIR.C ***************************/
  1132. void CreateDirW(), DirBox(), RedrawDirW(), LoadCurrentDirectory();
  1133. int  ClickDirW(), DoSave(), DirKey();
  1134. void RedrawDDirW(), RedrawDNamW(), SelectDir(), DirOpenActive(), TrackDDirW();
  1135. void SetDirFName();
  1136.  
  1137. /**************************** XVGAM.C **************************/
  1138. void CreateGam(), GamBox(), RedrawGam(), RedrawGraph(), ClickGam();
  1139. void TrackGraph(), GenerateGamma(), GenerateFSGamma(), GammifyColors();
  1140. void SetGPreset();
  1141.  
  1142. /*************************** XVSCRL.C ***************************/
  1143. void SCCreate(), SCSetRange(), SCSetVal(), SCRedraw(), SCTrack();
  1144.  
  1145. /**************************** XVBUTT.C ***************************/
  1146. void BTCreate(), BTSetActive(), BTRedraw();
  1147. int  BTTrack();
  1148.  
  1149. RBUTT *RBCreate();
  1150. void   RBRedraw(), RBSelect(), RBSetActive(), RBTrack();
  1151. int    RBWhich(), RBCount(), RBClick();
  1152.  
  1153. /**************************** XVGIF.C ***************************/
  1154. int LoadGIF();
  1155.  
  1156. /*************************** XVGIFWR.C **************************/
  1157. int WriteGIF();
  1158.  
  1159. /**************************** XVPM.C ****************************/
  1160. int LoadPM(), WritePM();
  1161.  
  1162. /**************************** XVPBM.C ***************************/
  1163. int LoadPBM(), WritePBM();
  1164.  
  1165. /**************************** XVXBM.C ***************************/
  1166. int LoadXBM(), WriteXBM();
  1167.  
  1168.  
  1169. #endif
  1170. \BARFOO\
  1171. else
  1172.   echo "will not over write ./xv.h"
  1173. fi
  1174. echo "Finished archive 1 of 10"
  1175. exit
  1176.  
  1177. dan
  1178. ----------------------------------------------------
  1179. O'Reilly && Associates   argv@sun.com / argv@ora.com
  1180. Opinions expressed reflect those of the author only.
  1181. --
  1182. dan
  1183. ----------------------------------------------------
  1184. O'Reilly && Associates   argv@sun.com / argv@ora.com
  1185. Opinions expressed reflect those of the author only.
  1186.