home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / unix / volume17 / mgr / part34 < prev    next >
Encoding:
Internet Message Format  |  1989-01-19  |  47.9 KB

  1. Subject:  v17i035:  MGR, Bellcore window manager, Part34/61
  2. Newsgroups: comp.sources.unix
  3. Approved: rsalz@uunet.UU.NET
  4.  
  5. Submitted-by: Stephen A. Uhler <sau@bellcore.com>
  6. Posting-number: Volume 17, Issue 35
  7. Archive-name: mgr/part34
  8.  
  9.  
  10.  
  11.  
  12. #! /bin/sh
  13. # This is a shell archive.  Remove anything before this line, then unpack
  14. # it by saving it into a file and typing "sh file".  To overwrite existing
  15. # files, type "sh file -c".  You can also feed this as standard input via
  16. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  17. # will see the following message at the end:
  18. #        "End of archive 34 (of 61)."
  19. # Contents:  demo/icon/msgs_icons.h doc/usrman/doc.6 src/down_load.c
  20. #   src/win_subs.c
  21. # Wrapped by rsalz@papaya.bbn.com on Thu Nov 17 21:05:42 1988
  22. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  23. if test -f 'demo/icon/msgs_icons.h' -a "${1}" != "-c" ; then 
  24.   echo shar: Will not clobber existing file \"'demo/icon/msgs_icons.h'\"
  25. else
  26. echo shar: Extracting \"'demo/icon/msgs_icons.h'\" \(11000 characters\)
  27. sed "s/^X//" >'demo/icon/msgs_icons.h' <<'END_OF_FILE'
  28. X/*                        Copyright (c) 1987 Bellcore
  29. X *                            All Rights Reserved
  30. X *       Permission is granted to copy or use this program, EXCEPT that it
  31. X *       may not be sold for profit, the copyright notice must be reproduced
  32. X *       on copies, and credit should be given to Bellcore where it is due.
  33. X *       BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM.
  34. X */
  35. X/*    $Header: msgs_icons.h,v 4.1 88/06/21 14:00:07 bianchi Exp $
  36. X    $Source: /tmp/mgrsrc/demo/icon/RCS/msgs_icons.h,v $
  37. X*/
  38. Xstatic char    h_msgs_icons_[] = "$Source: /tmp/mgrsrc/demo/icon/RCS/msgs_icons.h,v $$Revision: 4.1 $";
  39. X
  40. X
  41. X/* icon: msg_board */
  42. X
  43. Xunsigned char msg_board_data[] = {
  44. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  45. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xf7, 0xbc, 0xe3, 0xde, 0xf0, 0x00, 
  46. X   0x00, 0x36, 0x84, 0x21, 0x14, 0x50, 0x80, 0x00, 0x00, 0x2a, 0x84, 0x21, 
  47. X   0x14, 0x10, 0x80, 0x00, 0x00, 0x22, 0xe7, 0xbd, 0xf4, 0xdc, 0xf0, 0x00, 
  48. X   0x00, 0x22, 0x80, 0x85, 0x14, 0x50, 0x10, 0x00, 0x00, 0x22, 0x80, 0x85, 
  49. X   0x14, 0x50, 0x10, 0x00, 0x00, 0x22, 0xf7, 0xbd, 0x13, 0x9e, 0xf0, 0x00, 
  50. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  51. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  52. X   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 
  53. X   0xff, 0xff, 0xff, 0xfe, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  54. X   0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 
  55. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  56. X   0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 
  57. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  58. X   0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 
  59. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  60. X   0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 
  61. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  62. X   0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 
  63. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  64. X   0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 
  65. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  66. X   0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 
  67. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  68. X   0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 
  69. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  70. X   0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 
  71. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  72. X   0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 
  73. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  74. X   0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 
  75. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  76. X   0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 
  77. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  78. X   0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 
  79. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  80. X   0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 
  81. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  82. X   0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 
  83. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  84. X   0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x7f, 0xff, 0xff, 0xff, 
  85. X   0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 
  86. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  87. X   };
  88. X
  89. Xstruct icon msg_board = {
  90. X   "msg_board",1,64,64,msg_board_data};
  91. X
  92. X
  93. X/* icon: msg_note */
  94. X
  95. Xunsigned char msg_note_data[] = {
  96. X   0x7f, 0xc0, 0x40, 0x46, 0x46, 0x40, 0x46, 0x40, 0x40, 0x40, 0x40, 0x46, 
  97. X   0x40, 0x40, 0x80, 0x80, 0xff, 0x80, 
  98. X   };
  99. X
  100. Xstruct icon msg_note = {
  101. X   "msg_note",1,10,9,msg_note_data};
  102. X
  103. X
  104. X/* icon: msg_read */
  105. X
  106. Xunsigned char msg_read_data[] = {
  107. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  108. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xf7, 0xbc, 0xe3, 0xde, 0xf0, 0x00, 
  109. X   0x00, 0x36, 0x84, 0x21, 0x14, 0x50, 0x80, 0x00, 0x00, 0x2a, 0x84, 0x21, 
  110. X   0x14, 0x10, 0x80, 0x00, 0x00, 0x22, 0xe7, 0xbd, 0xf4, 0xdc, 0xf0, 0x00, 
  111. X   0x00, 0x22, 0x80, 0x85, 0x14, 0x50, 0x10, 0x00, 0x00, 0x22, 0x80, 0x85, 
  112. X   0x14, 0x50, 0x10, 0x00, 0x00, 0x22, 0xf7, 0xbd, 0x13, 0x9e, 0xf0, 0x00, 
  113. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  114. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  115. X   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 
  116. X   0xff, 0xff, 0xff, 0xfe, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  117. X   0x60, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x06, 0x60, 0x1e, 0x70, 0x20, 
  118. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x61, 0x9c, 0x10, 0x00, 0x00, 0x00, 0x06, 
  119. X   0x60, 0x80, 0x66, 0x00, 0x00, 0x0f, 0xf8, 0x06, 0x60, 0x00, 0x11, 0x18, 
  120. X   0x00, 0x08, 0x08, 0x06, 0x60, 0x00, 0x18, 0x88, 0x00, 0x08, 0xc8, 0x06, 
  121. X   0x60, 0x00, 0x04, 0x48, 0x00, 0x08, 0xc8, 0x06, 0x60, 0x00, 0x02, 0x48, 
  122. X   0x00, 0x08, 0x08, 0x06, 0x60, 0x01, 0xff, 0x48, 0x00, 0x08, 0x08, 0x06, 
  123. X   0x60, 0x01, 0x01, 0x48, 0x00, 0x08, 0x08, 0x06, 0x60, 0x01, 0x19, 0xff, 
  124. X   0x00, 0x10, 0x10, 0x06, 0x60, 0x01, 0x1f, 0x91, 0xc0, 0x1f, 0xf0, 0x06, 
  125. X   0x60, 0x01, 0x18, 0x02, 0x60, 0x00, 0x00, 0x06, 0x60, 0x01, 0x30, 0x00, 
  126. X   0x10, 0x00, 0x00, 0x06, 0x60, 0x01, 0x40, 0x00, 0x08, 0x00, 0x00, 0x06, 
  127. X   0x60, 0x02, 0x80, 0x00, 0x04, 0x00, 0x00, 0x06, 0x61, 0xc3, 0x80, 0x00, 
  128. X   0x16, 0x00, 0x00, 0x06, 0x62, 0x21, 0x00, 0x00, 0x06, 0x1f, 0x80, 0x06, 
  129. X   0x64, 0x33, 0x00, 0x00, 0x01, 0x20, 0x40, 0x06, 0x68, 0x13, 0x80, 0x00, 
  130. X   0x01, 0x20, 0x20, 0x06, 0x68, 0x0a, 0x00, 0x00, 0x00, 0xa0, 0x30, 0x06, 
  131. X   0x68, 0x0e, 0x00, 0x00, 0x00, 0xc0, 0x10, 0x06, 0x68, 0x0e, 0x00, 0x00, 
  132. X   0x00, 0x40, 0x10, 0x06, 0x68, 0x04, 0x00, 0x00, 0x01, 0x4c, 0x10, 0x06, 
  133. X   0x68, 0xf4, 0x00, 0x00, 0x00, 0xaa, 0x10, 0x06, 0x69, 0x9c, 0x00, 0x00, 
  134. X   0x00, 0x73, 0x10, 0x06, 0x69, 0x8c, 0x00, 0x00, 0x00, 0x79, 0x10, 0x06, 
  135. X   0x68, 0x6c, 0x00, 0x00, 0x00, 0x39, 0x10, 0x06, 0x6c, 0x1e, 0x00, 0x00, 
  136. X   0x00, 0x2b, 0x10, 0x06, 0x64, 0x02, 0x00, 0x00, 0x00, 0x34, 0x10, 0x06, 
  137. X   0x64, 0x02, 0x00, 0x00, 0x00, 0x10, 0x10, 0x06, 0x64, 0x06, 0x00, 0x00, 
  138. X   0x00, 0x30, 0x30, 0x06, 0x62, 0x05, 0x00, 0x00, 0x00, 0x30, 0x20, 0x06, 
  139. X   0x62, 0x0d, 0x00, 0x00, 0x00, 0x28, 0x60, 0x06, 0x63, 0x10, 0x80, 0x00, 
  140. X   0x00, 0x27, 0xc0, 0x06, 0x61, 0xe0, 0xc0, 0x00, 0x00, 0x40, 0x00, 0x06, 
  141. X   0x60, 0x00, 0x60, 0x00, 0x00, 0xbf, 0xc0, 0x06, 0x60, 0x00, 0x30, 0x00, 
  142. X   0x01, 0x40, 0x40, 0x06, 0x60, 0x00, 0x0c, 0x00, 0x06, 0x46, 0x40, 0x06, 
  143. X   0x60, 0x00, 0x03, 0x00, 0x18, 0x46, 0x40, 0x06, 0x60, 0x00, 0x00, 0xc0, 
  144. X   0xe0, 0x40, 0x40, 0x06, 0x60, 0x00, 0x00, 0xbf, 0x60, 0x40, 0x40, 0x06, 
  145. X   0x60, 0x00, 0x00, 0x80, 0x20, 0x40, 0x40, 0x06, 0x60, 0x00, 0x00, 0x80, 
  146. X   0x20, 0x80, 0x80, 0x06, 0x60, 0x00, 0x01, 0x00, 0x10, 0xff, 0x80, 0x06, 
  147. X   0x60, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x06, 0x7f, 0xff, 0xff, 0xff, 
  148. X   0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 
  149. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  150. X   };
  151. X
  152. Xstruct icon msg_read = {
  153. X   "msg_read",1,64,64,msg_read_data};
  154. X
  155. X
  156. X/* icon: msg_none */
  157. X
  158. Xunsigned char msg_none_data[] = {
  159. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  160. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0xf7, 0xbc, 0xe3, 0xde, 0xf0, 0x00, 
  161. X   0x00, 0x36, 0x84, 0x21, 0x14, 0x50, 0x80, 0x00, 0x00, 0x2a, 0x84, 0x21, 
  162. X   0x14, 0x10, 0x80, 0x00, 0x00, 0x22, 0xe7, 0xbd, 0xf4, 0xdc, 0xf0, 0x00, 
  163. X   0x00, 0x22, 0x80, 0x85, 0x14, 0x50, 0x10, 0x00, 0x00, 0x22, 0x80, 0x85, 
  164. X   0x14, 0x50, 0x10, 0x00, 0x00, 0x22, 0xf7, 0xbd, 0x13, 0x9e, 0xf0, 0x00, 
  165. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  166. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  167. X   0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 
  168. X   0xff, 0xff, 0xff, 0xfe, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 
  169. X   0x60, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x06, 0x60, 0x1e, 0x70, 0x20, 
  170. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x61, 0x9c, 0x10, 0x00, 0x00, 0x00, 0x06, 
  171. X   0x60, 0x80, 0x66, 0x00, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x11, 0x18, 
  172. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x18, 0x88, 0x00, 0x00, 0x00, 0x06, 
  173. X   0x60, 0x00, 0x04, 0x48, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x02, 0x48, 
  174. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x03, 0x48, 0x00, 0x00, 0x00, 0x06, 
  175. X   0x60, 0x00, 0x01, 0x48, 0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x01, 0xff, 
  176. X   0x00, 0x00, 0x00, 0x06, 0x60, 0x00, 0x07, 0x81, 0xc0, 0x00, 0x00, 0x06, 
  177. X   0x60, 0x00, 0x08, 0x00, 0x60, 0x00, 0x00, 0x06, 0x60, 0x00, 0x30, 0x00, 
  178. X   0x10, 0x00, 0x00, 0x06, 0x60, 0x00, 0x40, 0x00, 0x08, 0x00, 0x00, 0x06, 
  179. X   0x60, 0x00, 0x80, 0x0f, 0x04, 0x00, 0x00, 0x06, 0x61, 0xc1, 0x8c, 0x11, 
  180. X   0x86, 0x00, 0x00, 0x06, 0x62, 0x21, 0x1e, 0x10, 0xc2, 0x1f, 0x80, 0x06, 
  181. X   0x64, 0x33, 0x13, 0x16, 0x41, 0x20, 0x40, 0x06, 0x68, 0x13, 0x21, 0x16, 
  182. X   0x41, 0x20, 0x20, 0x06, 0x68, 0x0a, 0x27, 0x08, 0x40, 0xa0, 0x30, 0x06, 
  183. X   0x68, 0x0e, 0x26, 0x88, 0x40, 0xc0, 0x10, 0x06, 0x68, 0x0e, 0x10, 0xa6, 
  184. X   0x80, 0x40, 0x10, 0x06, 0x68, 0x04, 0x19, 0xa3, 0x80, 0x4c, 0x10, 0x06, 
  185. X   0x68, 0xf4, 0x0f, 0x30, 0x00, 0x2a, 0x10, 0x06, 0x69, 0x98, 0x00, 0x10, 
  186. X   0x00, 0x13, 0x10, 0x06, 0x69, 0x8c, 0x20, 0x10, 0x00, 0x09, 0x10, 0x06, 
  187. X   0x68, 0x6c, 0x10, 0x08, 0x08, 0x19, 0x10, 0x06, 0x6c, 0x1e, 0x10, 0x0c, 
  188. X   0x18, 0x0b, 0x10, 0x06, 0x64, 0x02, 0x08, 0x04, 0x10, 0x04, 0x10, 0x06, 
  189. X   0x64, 0x02, 0x0c, 0x04, 0x10, 0x10, 0x10, 0x06, 0x64, 0x06, 0x04, 0x38, 
  190. X   0x30, 0x10, 0x30, 0x06, 0x62, 0x05, 0x06, 0x00, 0x20, 0x10, 0x20, 0x06, 
  191. X   0x62, 0x0d, 0x03, 0x00, 0x60, 0x28, 0x60, 0x06, 0x63, 0x10, 0x81, 0x80, 
  192. X   0xc0, 0x27, 0xc0, 0x06, 0x61, 0xe0, 0xc0, 0xe3, 0x80, 0x40, 0x00, 0x06, 
  193. X   0x60, 0x00, 0x60, 0x3e, 0x00, 0x80, 0x00, 0x06, 0x60, 0x00, 0x30, 0x00, 
  194. X   0x01, 0x00, 0x00, 0x06, 0x60, 0x00, 0x0c, 0x00, 0x06, 0x00, 0x00, 0x06, 
  195. X   0x60, 0x00, 0x03, 0x00, 0x18, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0xc0, 
  196. X   0xe0, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0xbf, 0x60, 0x00, 0x00, 0x06, 
  197. X   0x60, 0x00, 0x00, 0x80, 0x20, 0x00, 0x00, 0x06, 0x60, 0x00, 0x00, 0x80, 
  198. X   0x20, 0x00, 0x00, 0x06, 0x60, 0x00, 0x01, 0x00, 0x10, 0x00, 0x00, 0x06, 
  199. X   0x60, 0x00, 0x01, 0x00, 0x18, 0x00, 0x00, 0x06, 0x7f, 0xff, 0xff, 0xff, 
  200. X   0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 
  201. X   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
  202. X   };
  203. X
  204. Xstruct icon msg_none = {
  205. X   "msg_none",1,64,64,msg_none_data};
  206. X
  207. END_OF_FILE
  208. # end of 'demo/icon/msgs_icons.h'
  209. fi
  210. if test -f 'doc/usrman/doc.6' -a "${1}" != "-c" ; then 
  211.   echo shar: Will not clobber existing file \"'doc/usrman/doc.6'\"
  212. else
  213. echo shar: Extracting \"'doc/usrman/doc.6'\" \(11735 characters\)
  214. sed "s/^X//" >'doc/usrman/doc.6' <<'END_OF_FILE'
  215. X'\"                        Copyright (c) 1988 Bellcore
  216. X'\"                            All Rights Reserved
  217. X'\"       Permission is granted to copy or use this program, EXCEPT that it
  218. X'\"       may not be sold for profit, the copyright notice must be reproduced
  219. X'\"       on copies, and credit should be given to Bellcore where it is due.
  220. X'\"       BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM.
  221. X'\"
  222. X'\"    $Header: doc.6,v 4.1 88/06/29 17:05:09 bianchi Exp $
  223. X'\"    $Source: /tmp/mgrsrc/doc/usrman/RCS/doc.6,v $
  224. X.Sh page Using the Library
  225. XClients using 
  226. X.I
  227. XThe C Interface Library
  228. X.R
  229. Xshould specify:
  230. X.DS
  231. X.ft \*(Ff
  232. X#include "term.h"
  233. X.ft R
  234. X.DE
  235. Xwhich also includes 
  236. X.DS
  237. X.ft \*(Ff
  238. X<stdio.h>
  239. X.ft R
  240. X.DE
  241. Xif it has not already been included.
  242. XPrograms are compiled either with
  243. X.DS
  244. X.ft \*(Ff
  245. Xcc -o foo foo.c term.o -I$(lib)
  246. X.ft R
  247. X.DE
  248. Xwhere $(lib) is the \*M include directory
  249. Xor simply
  250. X.DS
  251. X.ft \*(Ff
  252. Xcc -o foo foo.c -lmgr
  253. X.ft R
  254. X.DE
  255. Xif the library is installed in a standard location.
  256. XThe file
  257. X.I term.o
  258. Xcontains the functions listed in the last section.
  259. XSeveral compile time options are available to the client program using
  260. Xthe library.
  261. XNormally, the library setup routine,
  262. X.Fr m_setup
  263. X attempts to open 
  264. X.I /dev/tty
  265. Xto communicate with \*M.
  266. XClient programs may define the C preprocessor symbols
  267. X.SM
  268. X.I M_DEVICEIN
  269. X.LG
  270. Xor
  271. X.SM
  272. X.I M_DEVICEOUT
  273. X.LG
  274. Xto override the selection of
  275. X.I /dev/tty
  276. Xfor input or output respectively.
  277. XAfter each macro call,
  278. Xthe flush flag
  279. X.SM
  280. X.I M_FLUSH
  281. X.LG
  282. Xis tested to see if output should be flushed to \*M.
  283. XIf the C preprocessor symbol
  284. X.SM
  285. X.I M_NOFLUSH
  286. X.LG
  287. Xis defined, before the client program includes
  288. X.I term.h ,
  289. XThe flush flag is never tested, and it becomes the responsibility of the
  290. Xclient program to insure output is flushed at the appropriate times.
  291. X.LP
  292. XSeveral external variables maintained by the library are accessible to
  293. Xclient programs.
  294. XThe
  295. X.I stdio
  296. X.SM
  297. X.I FILE
  298. X.LG
  299. Xpointers
  300. X.I m_termin
  301. Xand
  302. X.I m_termout
  303. Xare used for directing output to, and receiving input from \*M.
  304. XThese file pointers are initialized in
  305. X.Fr m_setup
  306. X\&, and may be changed by client programs after
  307. X.Fr m_setup
  308. X is called.
  309. XThe integer
  310. X.I m_flags
  311. Xcontains the current library mode settings, as returned by
  312. X.Fr m_setup
  313. X\&.
  314. XThe 
  315. X.SM
  316. X.I M_MODEOK
  317. X.LG
  318. Xand
  319. X.SM
  320. X.I M_FLUSH
  321. X.LG
  322. Xbits of 
  323. X.I m_flags
  324. Xmay also be changed at any time after 
  325. X.Fr m_setup 
  326. X is called.
  327. XThe integer
  328. X.I m_envcount
  329. Xcontains the current window context depth, and is used by
  330. X.Fr m_popall
  331. Xto pop the appropriate number of contexts.
  332. X.I M_envcount
  333. Xshould not be changed by client programs.
  334. XFinally, the character
  335. X.I m_menuchar
  336. Xdefines the menu separator character used by
  337. X.Fr menu_load
  338. X\&.
  339. XThis character, set to '\e005' by the library package,
  340. Xcan be changed to any character that will not appear as part of
  341. Xa menu item or action.
  342. X.Sh page Glossary
  343. X.IP "\fBabsolute coordinates\fP" 0.5i
  344. X.br
  345. X.I "Absolute coordinates"
  346. Xis a coordinate system used in
  347. X.I windows
  348. Xmeasured in units of pixels.
  349. X.IP "\fBactive window\fP" 0.5i
  350. X.br
  351. XThe
  352. X.I active
  353. Xwindow is the window logically in the front of the display, which is
  354. Xreceiving keyboard and mouse input.
  355. X.IP "\fBalternate window\fP" 0.5i
  356. X.br
  357. XAn
  358. X.I "alternate window"
  359. Xis an additional window created by a client program that shares the
  360. Xcommunication channel with the main window.
  361. X.IP \fBbitmap\fP 0.5i
  362. X.br
  363. XA
  364. X.I bitmap
  365. Xis a rectangular array of bits, or pixels if the bitmap is
  366. Xcurrently on the display.
  367. X.IP \fBchannel\fP 0.5i
  368. X.br
  369. XThe
  370. X.I channel
  371. Xis the bidirectional byte stream connecting \*M with
  372. Xthe client program.
  373. XThe 
  374. X.I channel
  375. Xis usually the program's standard input and output.
  376. X.IP "\fBcharacter coordinates\fP" 0.5i
  377. X.br
  378. X.I "Character coordinates"
  379. Xis the 
  380. Xcoordinate system used in windows for counting characters in
  381. X.I columns
  382. Xand
  383. X.I rows .
  384. X.IP "\fBcharacter cursor\fP" 0.5i
  385. X.br
  386. XThe
  387. X.I "character cursor"
  388. Xis the location in the window where the next character will be placed.
  389. XThe cursor location is always highlighted on the active window.
  390. X.IP "\fBchild menu\fP" 0.5i
  391. X.br
  392. XA
  393. X.I "child menu"
  394. Xis the
  395. Xmenu that will pop up when the user slides off to the right
  396. Xof a popped up 
  397. X.I "parent menu" .
  398. X.IP "\fBclient program\fP" 0.5i
  399. X.br
  400. XA
  401. X.I "client program"
  402. Xis any Unix command that is running in an \*M window.
  403. XClient programs may be existing programs, as might be found in
  404. X.I /bin
  405. Xor new applications written specifically to take advantage of the
  406. Xwindowing environment.
  407. X.IP \fBclient-host\fP 0.5i
  408. X.br
  409. XThe
  410. X.I "client-host"
  411. Xis the computer that the client program is running on.
  412. XIt is often the same as the
  413. X.I \*M-host
  414. Xmachine, but it does not need to be.
  415. X.IP "\fBdisplay coordinates\fP" 0.5i
  416. X.I "Display coordinates"
  417. Xis a coordinate system used to measure pixels on the display.
  418. XThe top left corner of the display is at (0,0), with
  419. X.I x
  420. Xincreasing to the right, and
  421. X.I y
  422. Xincreasing down.
  423. X.br
  424. X.IP \fBexposed\fP 0.5i
  425. X.br
  426. XA window is
  427. X.I exposed
  428. Xif it is entirely visible.
  429. X.IP "\fBgraphics point\fP" 0.5i
  430. X.br
  431. XThe
  432. X.I "graphics point"
  433. Xis a location on the window, measured in the prevailing window
  434. Xcoordinate system, that may serve as a reference location 
  435. Xor origin for many of the graphics operations.
  436. X.IP \fBlistener\fP 0.5i
  437. X.br
  438. XA 
  439. X.I listener
  440. Xis a window that has turned on the
  441. X.SM
  442. X.Fi ACCEPT
  443. X.LG
  444. Xevent and is willing to receive messages from other client programs.
  445. X.IP "\fBmain window\fP" 0.5i
  446. X.br
  447. XA client program's
  448. X.I "main window"
  449. Xis the window the program was started in.
  450. XThe client program may create and destroy alternate windows,
  451. Xbut not its
  452. X.I "main window" .
  453. XIf the user destroys a client program's
  454. X.I " main window" ,
  455. Xthe connection
  456. Xto \*M is severed, and the client program receives a
  457. X.I hangup
  458. Xsignal.
  459. X.IP \fB\*M-host\fP 0.5i
  460. X.br
  461. XThe
  462. X\*M-host is the computer that \*M is running on. 
  463. X.IP "\fBmouse cursor\fP" 0.5i
  464. X.br
  465. XThe
  466. X.I "mouse cursor"
  467. Xis a small bitmap or
  468. X.I icon
  469. Xthat tracks the movement of the mouse on the display.
  470. XNormally the
  471. X.I "mouse cursor"
  472. Xis a small arrow pointing north west.
  473. X.IP \fBobscured\fP 0.5i
  474. X.br
  475. XA window is
  476. X.I obscured
  477. Xwhen it is partially or totally covered by another
  478. Xwindow.
  479. X.IP "\fBparent menu\fP" 0.5i
  480. X.br
  481. XA  menu is called a
  482. X.I "parent menu"
  483. Xwhen sliding off to the right of a selected item causes
  484. Xanother menu or
  485. X.I "child menu"
  486. Xto pop up.
  487. X.IP "\fBrelative coordinates\fP" 0.5i
  488. X.br
  489. X.I "Relative coordinates"
  490. Xis a coordinate system for windows where a single unit represents one
  491. Xthousandth of the way across (or down) the window.
  492. X.IP "\fBscratchpad bitmap\fP" 0.5i
  493. X.br
  494. XA 
  495. X.I "scratchpad bitmap"
  496. Xis a chunk of memory, allocated by \*M for use by a client program,
  497. Xthat may hold a bitmap image that is not on the display.
  498. X.IP "\fBsnarf buffer\fP" 0.5i
  499. X.br
  500. XThe
  501. X.I "snarf buffer"
  502. Xis a buffer maintained by \*M of arbitrary size that is accessible by all
  503. Xclient programs.
  504. X.IP "\fBtarget window\fP" 0.5i
  505. X.br
  506. XA
  507. X.I "target window"
  508. Xis a window that is to receive a message from another window.
  509. X.IP "\fBtext region\fP" 0.5i
  510. X.br
  511. XA 
  512. X.I "text region"
  513. Xis the part of the window in which character text and the 
  514. Xfunctions that operate on characters work.
  515. XThe
  516. X.I "text region"
  517. Xmay be the entire window (the default)
  518. Xor a rectangular subregion within the window.
  519. X.IP "\fBwindow border\fP" 0.5i
  520. X.br
  521. XThe
  522. X.I "window border"
  523. Xis a thin black border around every window that separates the
  524. Xwindow from the rest of the display.
  525. X.IP "\fBwindow context\fP" 0.5i
  526. X.br
  527. XA
  528. X.I "window context"
  529. Xcontains the values for one or more aspects of the window's
  530. Xstate.
  531. X.I "Window context"
  532. Xa may be saved on a stack, and then restored at some later time.
  533. X.IP "\fBwindow id\fP" 0.5i
  534. X.br
  535. XA
  536. X.I "window id"
  537. Xis a unique number assigned to every window that may be used
  538. Xas an identifier when sending a message to the window.
  539. X.I "Window id" s
  540. Xhave two parts,
  541. Xthe first part is the process number of the client program that
  542. Xwas started when the window was created,
  543. Xthe second part is the windows
  544. X.I alternate
  545. Xwindow number, or
  546. Xzero for a main window.
  547. X.Sh page Sample Client Program
  548. X.LP
  549. XThis program, called
  550. X.I close ,
  551. Xcloses, or iconifies a window.  
  552. XIts not a terribly useful application in its own right, but it does
  553. Xexercise several of the library calls.
  554. XWhen 
  555. X.I close
  556. Xstarts up, it makes the window smaller,
  557. Xmoves it toward the top of the display,
  558. Xthen writes the word "closed" in it.
  559. XIf the window is covered by another window,
  560. Xit changes the word "closed" to "hidden", then flashes its window every
  561. X15 seconds as long as the window is covered.
  562. XIf the window is then uncovered, the word "hidden" gets changed back
  563. Xto "closed".
  564. XActivating the window causes
  565. X.I close
  566. Xto restore the window's original shape and contents, then exit.
  567. X.LP
  568. X.SS
  569. X/* iconify a MGR window */
  570. X
  571. X#include <signal.h>
  572. X#include "term.h"
  573. X
  574. X#define TIME    15                /* time interval for reminder */
  575. X#define CONTEXT P_POSITION | P_WINDOW | P_FLAGS | P_EVENT | P_CURSOR
  576. X
  577. Xstatic char line[80];             /* event input buffer */
  578. X
  579. Xmain()
  580. X    {
  581. X    int clean(), timer();         /* interrupt routines */
  582. X    int x,y;                      /* window position on display */
  583. X    char *msg = "closed";         /* closed window "icon" */
  584. X
  585. X    /* setup the window environment */
  586. X
  587. X    m_setup(M_FLUSH);             /* setup i/o, turn on flushing */
  588. X    m_push(CONTEXT);              /* save current window context */
  589. X    m_setmode(M_NOWRAP);          /* don't auto-wrap at right margin */
  590. X    m_ttyset();                   /* set up tty modes */
  591. X
  592. X    /* catch the appropriate signals */
  593. X
  594. X    signal(SIGTERM,clean);        /* in case we get terminated */
  595. X    signal(SIGALRM,timer);        /* for the reminder service */
  596. X
  597. X    /* iconify the window */
  598. X
  599. X    get_size(&x,&y,0,0);          /* fetch window coordinates */
  600. X    m_sizeall(x,10,strlen(msg),1);/* move and resize window */
  601. X    m_clear();                    /* clear the window */
  602. X    m_printstr(msg);              /* print message in the window */
  603. X
  604. X    /* catch events */
  605. X
  606. X    m_setevent(ACTIVATE, "A\er"); /* window is now the active window */
  607. X    m_setevent(COVERED,  "C\er"); /* covered by another window */
  608. X    m_setevent(UNCOVERED,"U\er"); /* completely visible */
  609. X    m_setevent(REDRAW,   "R\er"); /* redraw requested */
  610. X
  611. X    m_clearmode(M_ACTIVATE);      /* bury the window */
  612. X
  613. X    /* wait for an event */
  614. X
  615. X    while(m_gets(line) != NULL)   /* read a line from MGR */
  616. X        switch (*line) {
  617. X        case 'A':                 /* window is activated */
  618. X            clean();              /* clean up and exit */
  619. X            break;
  620. X        case 'C':                 /* window is covered */
  621. X            m_clear();
  622. X            m_printstr("hidden");
  623. X            alarm(TIME);          /* turn on reminder */
  624. X            break;
  625. X        case 'R':                 /* system 'redraw' */
  626. X        case 'U':                 /* window is uncovered */
  627. X            m_clear();
  628. X            m_printstr(msg);
  629. X            alarm(0);             /* turn off reminder */
  630. X            break;
  631. X        case 'T':                 /* send reminder */
  632. X            m_setmode(M_WOB);     /* highlight window */
  633. X            m_bell();             /* ring the bell */
  634. X            sleep(1);
  635. X            alarm(TIME);          /* reset reminder timer */
  636. X            m_clearmode(M_WOB);   /* reset window highlighting */
  637. X            break;
  638. X        }
  639. X    }
  640. X
  641. Xclean()                           /* clean up and exit */
  642. X    {
  643. X    m_ttyreset();                 /* reset tty modes */
  644. X    m_popall();                   /* restore window context */
  645. X    exit(0);
  646. X    }
  647. X
  648. Xtimer()                           /* called at reminder timeout */
  649. X    {
  650. X    m_sendme("T\er");             /* send timeout message */
  651. X    }
  652. X.SE
  653. X.Sh page Macros and Functions by Category
  654. X.LP
  655. X.FS *
  656. XThe routines marked with a dagger (\(dg) are functions,
  657. Xthe other routines are macros.  The page number on which the macro or
  658. Xfunction is defined is printed in bold face after the name.
  659. X.FE
  660. END_OF_FILE
  661. # end of 'doc/usrman/doc.6'
  662. fi
  663. if test -f 'src/down_load.c' -a "${1}" != "-c" ; then 
  664.   echo shar: Will not clobber existing file \"'src/down_load.c'\"
  665. else
  666. echo shar: Extracting \"'src/down_load.c'\" \(11133 characters\)
  667. sed "s/^X//" >'src/down_load.c' <<'END_OF_FILE'
  668. X/*                        Copyright (c) 1987 Bellcore
  669. X *                            All Rights Reserved
  670. X *       Permission is granted to copy or use this program, EXCEPT that it
  671. X *       may not be sold for profit, the copyright notice must be reproduced
  672. X *       on copies, and credit should be given to Bellcore where it is due.
  673. X *       BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM.
  674. X */
  675. X/*    $Header: down_load.c,v 4.2 88/07/25 10:35:27 sau Exp $
  676. X    $Source: /tmp/mgrsrc/src/RCS/down_load.c,v $
  677. X*/
  678. Xstatic char    RCSid_[] = "$Source: /tmp/mgrsrc/src/RCS/down_load.c,v $$Revision: 4.2 $";
  679. X
  680. X/* down load text -- called from put_window.c */
  681. X
  682. X#include <sys/file.h>
  683. X#include "bitmap.h"
  684. X#include "font.h"
  685. X#include "defs.h"
  686. X#include "menu.h"
  687. X#include "event.h"
  688. X#include <stdio.h>
  689. X#include "window.h"
  690. X
  691. Xint
  692. Xdown_load(win,window,text)
  693. Xregister WINDOW *win;
  694. XBITMAP *window, *text;
  695. X   {
  696. X   int cnt = W(esc_cnt);
  697. X   struct font *Get_font();
  698. X   struct menu_state *do_menu();
  699. X   int id;
  700. X
  701. X      switch(W(code)) {
  702. X         case T_INVALID:        /* invalid text mode */
  703. X        if( debug )
  704. X           fprintf(stderr,"mgr: invalid download code\n");
  705. X        break;
  706. X         case T_MENU:                /* down load menu */
  707. X                {
  708. X                struct font *f;
  709. X                int fn = W(esc[1]);
  710. X
  711. X                if (*W(snarf) && cnt>1 ) {
  712. X                   f=Get_font(fn);
  713. X                   }
  714. X                else
  715. X                   f = W(font);
  716. X                  
  717. X                if (*W(snarf)) {
  718. X                   W(menus)[*W(esc)] = do_menu(W(snarf),f,
  719. X                           PUTCOLOR(W(style)),PUTCOLOR(W(background)));
  720. X           if( active == win ) {
  721. X                      if (W(menu[0]) == *W(esc) && button_state==BUTTON_2)
  722. X                        go_menu(0);
  723. X                      else if (W(menu[1]) == *W(esc) && button_state==BUTTON_1)
  724. X                        go_menu(1);
  725. X              }
  726. X                   }
  727. X                else
  728. X                   W(menus)[*W(esc)] = (struct menu_state *) 0;
  729. X                free(W(snarf));
  730. X                W(snarf) = (char *) 0;
  731. X                }
  732. X                break;
  733. X         case T_EVENT:                /* down load an event */
  734. X                cnt=W(esc)[0];
  735. X                if (!CHK_EVENT(cnt)) {
  736. X                   free(W(snarf));
  737. X                   W(snarf) = (char *) 0;
  738. X                   break;
  739. X                   }
  740. X                if (W(events)[GET_EVENT(cnt)]) {
  741. X                   free (W(events)[GET_EVENT(cnt)]);
  742. X                   W(events)[GET_EVENT(cnt)] = (char *) 0;
  743. X                   }
  744. X                if (*W(snarf)) {
  745. X                   W(events)[GET_EVENT(cnt)] = W(snarf);
  746. X                   EVENT_SET_MASK(win,cnt);
  747. X#ifdef DEBUG
  748. X                   dprintf(e)(stderr,"%s: setting event %d (%d)[%s]\r\n",
  749. X                           W(tty),GET_EVENT(cnt),strlen(W(snarf)), W(snarf));
  750. X#endif
  751. X                   /* if button is down, then do the associated event */
  752. X
  753. X                   if (win == active  &&
  754. X            (cnt==EVENT_B1_DOWN && button_state == BUTTON_1 ||
  755. X                         cnt==EVENT_B2_DOWN && button_state == BUTTON_2))
  756. X              do_event(button_state,win,E_MAIN);
  757. X                   }
  758. X                else  {
  759. X                   EVENT_CLEAR_MASK(win,cnt);
  760. X#ifdef DEBUG
  761. X                   dprintf(e)(stderr,"%s: clearing event %d\r\n",
  762. X                             W(tty),GET_EVENT(cnt));
  763. X#endif
  764. X                   free(W(snarf));
  765. X                   }
  766. X                W(snarf) = (char *) 0;
  767. X                break;
  768. X         case T_STRING:                /* draw text into offscreen bitmap */
  769. X                {
  770. X                int x = cnt>1 ? Scalex(W(esc[1])) : 0;
  771. X                int y = cnt>2 ? Scaley(W(esc[2])) : 0;
  772. X
  773. X                if (y<FSIZE(high)) y=FSIZE(high);
  774. X                if (x<0) x=0;
  775. X#ifdef DEBUG
  776. X                dprintf(y)(stderr,"%s: drawing [%s] to %d\r\n",
  777. X                    W(tty),W(snarf),*W(esc));
  778. X#endif
  779. X                if (*W(esc)>0 && W(bitmaps)[*W(esc)-1] == (BITMAP *) 0) {
  780. X                   W(bitmaps)[*W(esc)-1] = bit_alloc(
  781. X                          x+strlen(W(snarf))*FSIZE(wide),
  782. X                          y, NULL_DATA,DEPTH);
  783. X#ifdef DEBUG
  784. X                dprintf(y)(stderr,"%s: STRING creating %d (%dx%d)\n",
  785. X                          W(tty),*W(esc),
  786. X                          x+strlen(W(snarf))*FSIZE(wide),y);
  787. X#endif
  788. X                   }
  789. X                if (*W(esc) > 0)
  790. X                   put_str(W(bitmaps)[*W(esc)-1],x,y,
  791. X                           W(font),W(op),W(snarf));
  792. X                else
  793. X                   put_str(window,x,y,W(font),W(op),W(snarf));
  794. X                }
  795. X                break;
  796. X         case T_YANK:                /* fill yank buffer */
  797. X                if (snarf)
  798. X                   free (snarf);
  799. X                snarf = W(snarf);
  800. X#ifdef DEBUG
  801. X                dprintf(y)(stderr,"%s: yanking [%s]\r\n",W(tty),snarf);
  802. X#endif
  803. X                id_message = W(pid);
  804. X                W(snarf) = (char *) 0;
  805. X                for(win=active;win != (WINDOW *) 0;win=W(next))
  806. X                   do_event(EVENT_SNARFED,win,E_MAIN);
  807. X                break;
  808. X
  809. X         case T_SEND:                /* send a message */
  810. X                id = *W(esc);
  811. X                if (message) {
  812. X                   free(message);
  813. X                   message = (char *) 0;
  814. X                   }
  815. X                message = W(snarf);
  816. X                id_message = W(pid);
  817. X                W(snarf) = (char *) 0;
  818. X#ifdef DEBUG
  819. X                dprintf(e)(stderr,"%s: sending [%s]\r\n",W(tty),W(snarf));
  820. X                dprintf(c)(stderr,"sending %d->%d: %s\r\n",
  821. X                   W(pid),cnt==0?0:id,message);
  822. X#endif
  823. X                for(win=active;win != (WINDOW *) 0;win=W(next))
  824. X                   if (cnt==0 || W(pid)==id) {
  825. X                      do_event(EVENT_ACCEPT,win,E_MAIN);
  826. X                      if (cnt) break;
  827. X                      }
  828. X                break;
  829. X
  830. X         case T_GMAP:                /* load a bitmap from a file */
  831. X                {
  832. X                   BITMAP *b, *bitmapread();
  833. X           FILE *fp = NULL;
  834. X                   char filename[MAX_PATH];
  835. X                   char c = *W(snarf);
  836. X
  837. X                   /* make relative to icon directory */
  838. X
  839. X                   if (c == '/' || (c == '.' && W(snarf)[1]=='/'))
  840. X                      strcpy(filename,W(snarf));
  841. X                   else
  842. X                      sprintf(filename,"%s/%s",icon_dir,W(snarf));
  843. X
  844. X                   if (*W(esc) > 0 && *W(esc) < MAXBITMAPS &&
  845. X                            read_ok(filename) &&
  846. X                (fp = fopen(filename,"r")) != NULL &&
  847. X                            (b = bitmapread(fp))) {
  848. X              if( W(bitmaps[*W(esc)-1]) )
  849. X             bit_destroy( W(bitmaps[*W(esc)-1]) );
  850. X              W(bitmaps[*W(esc)-1]) = b;
  851. X                      sprintf(filename,"%d %d\n",BIT_WIDE(b),BIT_HIGH(b));
  852. X                      write(W(to_fd),filename,strlen(filename));
  853. X                      }
  854. X                   else {
  855. X                      write(W(to_fd),"\n",1);
  856. X                      }
  857. X           if( fp != NULL )
  858. X            fclose(fp);
  859. X                   }
  860. X                break;
  861. X
  862. X         case T_SMAP:                /* save a bitmap on a file */
  863. X                {
  864. X           FILE *fp;
  865. X                   BITMAP *b;
  866. X                   int size;
  867. X                   int exists;        /* file already exists */
  868. X                   int free_b = 0;
  869. X                   int num = *W(esc);
  870. X                   BITMAP *get_map();
  871. X
  872. X                   switch(cnt) {
  873. X                      case 1:            /* off screen bitmap */
  874. X                         if (num > 0)
  875. X                            b = W(bitmaps[num-1]);
  876. X                         else
  877. X                            b = screen;
  878. X                         break;
  879. X                      case 0:            /* my window */
  880. X                         free_b++;
  881. X                         b = bit_alloc(BIT_WIDE(window),BIT_HIGH(window),
  882. X                                       NULL_DATA,DEPTH);
  883. X                         if (b)
  884. X                            bit_blit(b,0,0,BIT_WIDE(b),BIT_HIGH(b),BIT_SRC,window,0,0);
  885. X                         break;
  886. X                      case 2:            /* other guy's window */
  887. X                         free_b++;
  888. X                         b = get_map(num,W(esc[1]));
  889. X                         break;
  890. X                      }
  891. X               
  892. X#ifdef DEBUG
  893. X                   dprintf(*)(stderr,"saving...\n");
  894. X#endif
  895. X                   if (b && W(snarf) && ((exists=access(W(snarf),0)),
  896. X                            write_ok(W(snarf))) &&
  897. X                            (fp = fopen(W(snarf),"w")) != NULL) {
  898. X#ifdef DEBUG
  899. X                      dprintf(y)(stderr,"saving bitmap %d x %d on %s (%d)\n",BIT_WIDE(b),BIT_HIGH(b),W(snarf),fileno(fp));
  900. X#endif
  901. X                      if (exists<0)    /* file just created */
  902. X                         fchown(fileno(fp),getuid(),getgid());
  903. X                      bitmapwrite( fp, b, get_bm_type() );
  904. X                      fclose(fp);
  905. X#ifdef DEBUG
  906. X                      dprintf(y)(stderr,"saved %d on %s\n",size,W(snarf));
  907. X#endif
  908. X                      }
  909. X                   if (W(snarf))
  910. X                      free(W(snarf));
  911. X                   W(snarf) = (char *) 0;
  912. X
  913. X                   if (b && free_b)
  914. X                      bit_destroy(b);
  915. X                   }
  916. X                break;
  917. X
  918. X         case T_GIMME:                /* send to process */
  919. X                if (W(snarf) && *W(snarf)) 
  920. X                   Write(W(to_fd),W(snarf),strlen(W(snarf)));
  921. X#ifdef DEBUG
  922. X                dprintf(y)(stderr,"%s: sending [%s]\r\n",W(snarf));
  923. X#endif
  924. X                if (W(snarf))
  925. X                   free(W(snarf));
  926. X                W(snarf) = (char *) 0;
  927. X                break;
  928. X
  929. X         case T_GRUNCH:                /* graphics scrunch mode (experimental) */
  930. X                if (W(snarf)) 
  931. X                   grunch(win,window);
  932. X#ifdef DEBUG
  933. X                dprintf(y)(stderr,"%s: grunching [%d]\r\n",W(tty),W(esc)[cnt]);
  934. X#endif
  935. X                if (W(snarf))
  936. X                   free(W(snarf));
  937. X                W(snarf) = (char *) 0;
  938. X                break;
  939. X
  940. X         case T_FONT:                /* change a font name */
  941. X                if (W(esc)[0] <= MAXFONT && W(esc)[0] > 0) {
  942. X                   if (fontlist[W(esc[0])-1])
  943. X                      free(fontlist[W(esc[0])-1]);
  944. X                   fontlist[W(esc[0])-1] = W(snarf);
  945. X                   }
  946. X                else
  947. X                   free(W(snarf));
  948. X                W(snarf) = (char *) 0;
  949. X                break;
  950. X         case T_BITMAP:                /* down-load a bitmap */
  951. X                win_map(win,window);
  952. X                break;
  953. X         }
  954. X   }
  955. X
  956. X/* find bitmap associated with window id */
  957. X
  958. XBITMAP *
  959. Xget_map(id,sub)
  960. Xint id;                /* pid of process controlling window */
  961. Xint sub;            /* window number of this window */
  962. X   {
  963. X   register WINDOW *win;
  964. X   register BITMAP *map;
  965. X
  966. X   for(win=active;win != (WINDOW *) 0;win=W(next))
  967. X      if (W(pid)==id && W(num)==sub) {
  968. X         map = bit_alloc(BIT_WIDE(W(window)),BIT_HIGH(W(window)),
  969. X                         NULL_DATA,DEPTH);
  970. X         if (map && W(flags)&W_ACTIVE)
  971. X            bit_blit(map,0,0,BIT_WIDE(map),BIT_HIGH(map),
  972. X                     BIT_SRC,W(window),0,0);
  973. X         else if (map)
  974. X            bit_blit(map,0,0,BIT_WIDE(map),BIT_HIGH(map),
  975. X                     BIT_SRC,W(save),SUM_BDR,SUM_BDR);
  976. X         return(map);
  977. X         }
  978. X   return(BIT_NULL);
  979. X   }
  980. END_OF_FILE
  981. # end of 'src/down_load.c'
  982. fi
  983. if test -f 'src/win_subs.c' -a "${1}" != "-c" ; then 
  984.   echo shar: Will not clobber existing file \"'src/win_subs.c'\"
  985. else
  986. echo shar: Extracting \"'src/win_subs.c'\" \(11289 characters\)
  987. sed "s/^X//" >'src/win_subs.c' <<'END_OF_FILE'
  988. X/*                        Copyright (c) 1987 Bellcore
  989. X *                            All Rights Reserved
  990. X *       Permission is granted to copy or use this program, EXCEPT that it
  991. X *       may not be sold for profit, the copyright notice must be reproduced
  992. X *       on copies, and credit should be given to Bellcore where it is due.
  993. X *       BELLCORE MAKES NO WARRANTY AND ACCEPTS NO LIABILITY FOR THIS PROGRAM.
  994. X */
  995. X/*    $Header: win_subs.c,v 4.2 88/06/21 14:48:26 sau Exp $
  996. X    $Source: /tmp/mgrsrc/src/RCS/win_subs.c,v $
  997. X*/
  998. Xstatic char    RCSid_[] = "$Source: /tmp/mgrsrc/src/RCS/win_subs.c,v $$Revision: 4.2 $";
  999. X
  1000. X/* Teminal emulator functions called from put_window() */
  1001. X
  1002. X#include "bitmap.h"
  1003. X#include "font.h"
  1004. X#include "defs.h"
  1005. X#include "window.h"
  1006. X#include "clip.h"
  1007. X#include <stdio.h>
  1008. X
  1009. X#define FSIZE(c)    ((int) (W(font)->head.c))
  1010. X#define Abs(x)        ((x)>0?(x):-(x))
  1011. X
  1012. X/*****************************************************************************
  1013. X *    Do raster ops
  1014. X */
  1015. X
  1016. Xint
  1017. Xwin_rop(win,window)
  1018. Xregister WINDOW *win;
  1019. XBITMAP *window;
  1020. X    {
  1021. X    register int *p = W(esc);
  1022. X    register int op;
  1023. X
  1024. X    if (W(flags)&W_REVERSE)
  1025. X       op = ROP_INVERT(W(op));
  1026. X    else
  1027. X       op = W(op);
  1028. X
  1029. X#ifdef DEBUG
  1030. X    dprintf(B)(stderr,"%s: blit\t",W(tty));
  1031. X#endif
  1032. X    switch (W(esc_cnt)) {
  1033. X       case 0:        /* set raster op function */
  1034. X               W(op) = W(op)&~NOCOLOR | NOCOLOR&GET_OP(*p);
  1035. X               if (W(flags)&W_OVER) {
  1036. X                  W(style) = GET_OP(*p);
  1037. X                  if ((W(flags)&W_REVERSE) ^ (W(flags)&W_STANDOUT))
  1038. X                     W(style) = ROP_INVERT(*p);
  1039. X                  }
  1040. X#ifdef DEBUG
  1041. X               dprintf(B)(stderr,"setting function %d\n",p[0]);
  1042. X#endif
  1043. X               break;
  1044. X       case 1:    /* set raster op color && function */
  1045. X               W(op) = (NOCOLOR&GET_OP(p[0])) | (GETCOLOR(p[1]));
  1046. X#ifdef DEBUG
  1047. X               dprintf(B)(stderr,"setting mode %d, color %d\n",p[0],p[1]);
  1048. X#endif
  1049. X               break;
  1050. X
  1051. X       case 3:        /* ras_write */
  1052. X               bit_blit(window,Scalex(p[0]),Scaley(p[1]),
  1053. X                               Scalex(p[2]),Scaley(p[3]),
  1054. X                               op,NULL_DATA,0,0);
  1055. X               if (Do_clip())
  1056. X                  Set_clip(Scalex(p[0]),Scaley(p[1]),
  1057. X                           Scalex(p[0])+Scaley(p[2]),
  1058. X                           Scalex(p[1])+Scaley(p[3]));
  1059. X               break;
  1060. X       case 4:        /* ras_write  specify dest */
  1061. X               if (p[4]>MAXBITMAPS)
  1062. X                  break;
  1063. X               if (p[4]>0 && W(bitmaps)[p[4]-1]== (BITMAP *) 0)
  1064. X                  W(bitmaps)[p[4]-1] = bit_alloc(
  1065. X                              Scalex(p[0])+Scalex(p[2]),
  1066. X                              Scaley(p[1])+Scaley(p[3]),NULL_DATA,DEPTH);
  1067. X               bit_blit(p[4]?W(bitmaps)[p[4]-1]:window,
  1068. X                               Scalex(p[0]),Scaley(p[1]),
  1069. X                               Scalex(p[2]),Scaley(p[3]),
  1070. X                               op,0,0,0);
  1071. X               if (Do_clip() && p[4]==0)
  1072. X                  Set_clip(Scalex(p[0]),Scaley(p[1]),
  1073. X                           Scalex(p[0])+Scaley(p[2]),
  1074. X                           Scalex(p[1])+Scaley(p[3]));
  1075. X               break;
  1076. X       case 5:        /* ras_copy */
  1077. X               bit_blit(window,Scalex(p[0]),Scaley(p[1]),
  1078. X                               Scalex(p[2]),Scaley(p[3]),
  1079. X                               op,window,
  1080. X                               Scalex(p[4]),Scaley(p[5]));
  1081. X               if (Do_clip())
  1082. X                  Set_clip(Scalex(p[0]),Scaley(p[1]),
  1083. X                           Scalex(p[0])+Scaley(p[2]),
  1084. X                           Scalex(p[1])+Scaley(p[3]));
  1085. X               break;
  1086. X       case 7:        /* ras_copy specify dst,src */
  1087. X               if (p[6]>MAXBITMAPS || p[7]>MAXBITMAPS)
  1088. X                  break;
  1089. X               if (p[6]>0 && W(bitmaps)[p[6]-1]== (BITMAP *) 0) {
  1090. X                  W(bitmaps)[p[6]-1] = bit_alloc(
  1091. X                              Scalex(p[0])+Scalex(p[2]),
  1092. X                              Scaley(p[1])+Scaley(p[3]),NULL_DATA,DEPTH);
  1093. X                  }
  1094. X#ifdef DEBUG
  1095. X               dprintf(B)(stderr,"blitting %d to %d\n",p[7],p[6]);
  1096. X#endif
  1097. X               bit_blit(p[6]?W(bitmaps)[p[6]-1]:window,
  1098. X                           Scalex(p[0]),Scaley(p[1]),
  1099. X                           Scalex(p[2]),Scaley(p[3]),op,
  1100. X                           p[7]?W(bitmaps)[p[7]-1]:window,
  1101. X                           Scalex(p[4]),Scaley(p[5]));
  1102. X               if (Do_clip() && p[6]==0)
  1103. X                  Set_clip(Scalex(p[0]),Scaley(p[1]),
  1104. X                           Scalex(p[0])+Scaley(p[2]),
  1105. X                           Scalex(p[1])+Scaley(p[3]));
  1106. X       }
  1107. X   }
  1108. X
  1109. X/*****************************************************************************
  1110. X *    down load a bit map  - parse escape sequence
  1111. X */
  1112. X
  1113. Xint
  1114. Xwin_map(win,window)
  1115. Xregister WINDOW *win;
  1116. Xregister BITMAP  *window;
  1117. X   {
  1118. X   register int cnt = W(esc_cnt);
  1119. X   register int *p = W(esc);
  1120. X   register int op;
  1121. X
  1122. X   if (W(flags)&W_REVERSE)
  1123. X      op = ROP_INVERT(W(op));
  1124. X   else
  1125. X      op = W(op);
  1126. X
  1127. X   switch(cnt) {
  1128. X      case 2:        /* bitmap to graphics point */
  1129. X         bit_blit(window,Scalex(W(gx)),Scaley(W(gy)),
  1130. X                         p[0],p[1],op,W(bitmap),0,0);
  1131. X         bit_destroy(W(bitmap));
  1132. X         if (Do_clip()) {
  1133. X            Set_clip(Scalex(W(gx)),Scaley(W(gy)),
  1134. X                     Scalex(W(gx))+p[0],Scaley(W(gy))+p[1]);
  1135. X            }
  1136. X         break;
  1137. X      case 3:        /* bitmap to graphics point  specify dest*/
  1138. X         if (p[2] > MAXBITMAPS)
  1139. X            break;
  1140. X         if (p[2]>0 && W(bitmaps)[p[2]-1]== (BITMAP *) 0)
  1141. X            W(bitmaps)[p[2]-1]=W(bitmap);
  1142. X         else {
  1143. X            bit_blit(p[2]?W(bitmaps)[p[2]-1]:window,
  1144. X                         Scalex(W(gx)),Scaley(W(gy)),
  1145. X                         p[0],p[1],op,W(bitmap),0,0);
  1146. X            bit_destroy(W(bitmap));
  1147. X            }
  1148. X         break;
  1149. X      case 4:        /* bitmap to specified point */
  1150. X         bit_blit(window,p[2],p[3],p[0],p[1],op,W(bitmap),0,0);
  1151. X         bit_destroy(W(bitmap));
  1152. X         if (Do_clip()) {
  1153. X            Set_clip(p[2],p[3],p[2]+p[0],p[3]+p[1]);
  1154. X            }
  1155. X         break;
  1156. X      case 5:        /* bitmap to specified point  specify dest */
  1157. X         if (p[4] > MAXBITMAPS)
  1158. X            break;
  1159. X         if (p[4]>0 && W(bitmaps)[p[4]-1]== (BITMAP *) 0)
  1160. X            W(bitmaps)[p[4]-1]=W(bitmap);
  1161. X         else {
  1162. X            bit_blit(p[4]?W(bitmaps)[p[4]-1]:window,
  1163. X                        p[2],p[3],p[0],p[1],op,W(bitmap),0,0);
  1164. X            bit_destroy(W(bitmap));
  1165. X            }
  1166. X         break;
  1167. X      }
  1168. X   W(snarf) = (char *) 0;
  1169. X   }
  1170. X
  1171. X/*****************************************************************************
  1172. X *    plot a line 
  1173. X */
  1174. X
  1175. Xint
  1176. Xwin_plot(win,window)
  1177. Xregister WINDOW *win;
  1178. XBITMAP *window;
  1179. X    {
  1180. X    register int *p = W(esc);
  1181. X    int op;
  1182. X
  1183. X    if (W(flags)&W_REVERSE)
  1184. X       op = ROP_INVERT(W(op));
  1185. X    else
  1186. X       op = W(op);
  1187. X
  1188. X    switch (W(esc_cnt)) {
  1189. X       case 0:            /* set cursor to graphics point */
  1190. X               W(x) = Scalex(W(gx));
  1191. X               W(y) = Scaley(W(gy));
  1192. X               break;
  1193. X       case 1:            /* draw to graphics point */
  1194. X               Bit_line(win,window,Scalex(W(gx)),Scaley(W(gy)),
  1195. X                               Scalex(p[0]),Scaley(p[1]),op);
  1196. X               W(gx) = p[0];
  1197. X               W(gy) = p[1];
  1198. X               break;
  1199. X       case 3:
  1200. X               Bit_line(win,window,Scalex(p[0]),Scaley(p[1]),
  1201. X                               Scalex(p[2]),Scaley(p[3]),op);
  1202. X               break;
  1203. X       case 4:
  1204. X               if (p[4]<MAXBITMAPS && W(bitmaps)[p[4]-1])
  1205. X                  bit_line(W(bitmaps)[p[4]-1],Scalex(p[0]),Scaley(p[1]),
  1206. X                               Scalex(p[2]),Scaley(p[3]),op);
  1207. X               break;
  1208. X       }
  1209. X    }
  1210. X
  1211. XBit_line(win,dst,x1,y1,x2,y2,op)
  1212. Xregister WINDOW *win;
  1213. Xregister BITMAP *dst;
  1214. Xregister int x1,y1,x2,y2,op;
  1215. X   {
  1216. X#ifdef DEBUG
  1217. X   dprintf(l)(stderr,"%s: line [%d] %d,%d %d,%d\n",W(tty),op,x1,y1,x2,y2);
  1218. X#endif
  1219. X   bit_line(dst,x1,y1,x2,y2,op);
  1220. X   if (Do_clip()) {
  1221. X      Set_clip(x1,y1,x2+1,y2+1); 
  1222. X      Set_clip(x2,y2,x1+1,y1+1); 
  1223. X      }
  1224. X   }
  1225. X
  1226. X
  1227. X/* experimantal graphics crunch mode */
  1228. X
  1229. Xint
  1230. Xgrunch(win,dst)
  1231. XWINDOW *win;    /* window */
  1232. XBITMAP *dst;    /* destination */
  1233. X    {
  1234. X   register char *buf = W(snarf);
  1235. X   register int cnt = W(esc)[W(esc_cnt)];
  1236. X   int op;
  1237. X    int penup = 0;
  1238. X   int *p = W(esc);
  1239. X    register int x,y,x1,y1;
  1240. X
  1241. X   if (W(flags)&W_REVERSE)
  1242. X      op = ROP_INVERT(W(op));
  1243. X   else
  1244. X      op = W(op);
  1245. X
  1246. X    /* set starting point */
  1247. X
  1248. X    if (W(esc_cnt) > 1) {
  1249. X      x =  p[0];
  1250. X      y =  p[1];
  1251. X      }
  1252. X    else {
  1253. X      x = W(gx);
  1254. X      y = W(gy);
  1255. X        }
  1256. X    while (cnt-- > 0) {
  1257. X        x1 = (*buf>>4 & 0xf) - 8;
  1258. X        y1 = (*buf & 0xf) - 8;
  1259. X        if (x1==0 && y1 ==0)
  1260. X         penup = 1;
  1261. X      else if (penup == 0){
  1262. X         bit_line(dst,Scalex(x),Scaley(y),Scalex(x+x1),Scaley(y+y1),op);
  1263. X#ifdef DEBUG
  1264. X         dprintf(y)(stderr,"%s: line [%d] %d,%d + %d,%d\n",W(tty),op,x,y,x1,y1);
  1265. X#endif
  1266. X            x += x1;
  1267. X         y += y1;
  1268. X            }
  1269. X        else {
  1270. X            x += x1;
  1271. X         y += y1;
  1272. X            penup = 0;
  1273. X            }
  1274. X        buf++;
  1275. X        }
  1276. X    W(gx) = x;
  1277. X   W(gy) = y;
  1278. X    }
  1279. X
  1280. X/*****************************************************************************
  1281. X *    plot a circle 
  1282. X */
  1283. X
  1284. Xint
  1285. Xcircle_plot(win,window)
  1286. Xregister WINDOW *win;
  1287. XBITMAP *window;
  1288. X    {
  1289. X    register int *p = W(esc);
  1290. X    int op;
  1291. X
  1292. X    if (W(flags)&W_REVERSE)
  1293. X       op = ROP_INVERT(W(op));
  1294. X    else
  1295. X       op = W(op);
  1296. X
  1297. X
  1298. X    switch (W(esc_cnt)) {
  1299. X       case 0:        /* draw a 'circle'  at graphics point*/
  1300. X               circle(window,Scalex(W(gx)),Scaley(W(gy)),Scalexy(p[0]),op);
  1301. X               break;
  1302. X       case 1:        /* draw an 'ellipse' at graphics point */
  1303. X               ellipse(window, Scalex(W(gx)), Scaley(W(gy)),
  1304. X                               Scalex(p[0]), Scaley(p[1]), op);
  1305. X               break;
  1306. X       case 2:        /* draw a 'circle' */
  1307. X               circle(window,Scalex(p[0]),Scaley(p[1]),Scalexy(p[2]),op);
  1308. X               break;
  1309. X       case 3:        /* draw an 'ellipse' */
  1310. X               ellipse(window, Scalex(p[0]), Scaley(p[1]),
  1311. X                               Scalex(p[2]), Scaley(p[3]), op);
  1312. X               break;
  1313. X       case 4:        /* draw an 'ellipse' to offscreen bitmap */
  1314. X               if (p[4]<MAXBITMAPS && W(bitmaps)[p[4]-1])
  1315. X                  ellipse(W(bitmaps)[p[4]-1], Scalex(p[0]), Scaley(p[1]),
  1316. X                               Scalex(p[2]), Scaley(p[3]), op);
  1317. X               break;
  1318. X       case 5:        /* draw an arc  ccw centered at p0,p1 */
  1319. X               arc(window, Scalex(p[0]), Scaley(p[1]), Scalex(p[2]), Scaley(p[3]),
  1320. X                               Scalex(p[4]), Scaley(p[5]), op);
  1321. X               break;
  1322. X       case 6:        /* draw an arc  ccw centered at p0,p1  to offscreen bitmap */
  1323. X               if (p[6]<MAXBITMAPS && W(bitmaps)[p[6]-1])
  1324. X                  arc(W(bitmaps)[p[6]-1], Scalex(p[0]), Scaley(p[1]), Scalex(p[2]),
  1325. X                                Scaley(p[3]), Scalex(p[4]), Scaley(p[5]), op);
  1326. X               break;
  1327. X       }
  1328. X    if (Do_clip())
  1329. X       Set_all();
  1330. X    }
  1331. X
  1332. X/*****************************************************************************
  1333. X *    move the graphics pointer
  1334. X */
  1335. X
  1336. Xint
  1337. Xwin_go(win)
  1338. Xregister WINDOW *win;
  1339. X    {
  1340. X    register int *p = W(esc);
  1341. X
  1342. X    switch (W(esc_cnt)) {
  1343. X       case 0:            /* set the graphics point to cursor pos */
  1344. X               W(gx) = W(x);
  1345. X               W(gy) = W(y);
  1346. X               break;
  1347. X       case 1: case 2:        /* set the graphics point */
  1348. X               W(gx) =  p[0];
  1349. X               W(gy) =  p[1];
  1350. X               break;
  1351. X       }
  1352. X    }
  1353. END_OF_FILE
  1354. # end of 'src/win_subs.c'
  1355. fi
  1356. echo shar: End of archive 34 \(of 61\).
  1357. cp /dev/null ark34isdone
  1358. MISSING=""
  1359. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 \
  1360.     21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 \
  1361.     38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 \
  1362.     55 56 57 58 59 60 61 ; do
  1363.     if test ! -f ark${I}isdone ; then
  1364.     MISSING="${MISSING} ${I}"
  1365.     fi
  1366. done
  1367. if test "${MISSING}" = "" ; then
  1368.     echo You have unpacked all 61 archives.
  1369.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1370. else
  1371.     echo You still need to unpack the following archives:
  1372.     echo "        " ${MISSING}
  1373. fi
  1374. ##  End of shell archive.
  1375. exit 0
  1376.