home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / x / volume18 / xgrabsc-2.1 / part04 < prev    next >
Text File  |  1992-07-23  |  51KB  |  1,871 lines

  1. Path: uunet!ogicse!hp-cv!sdd.hp.com!mips!msi!dcmartin
  2. From: bruce@SLC.COM (Bruce Schuchardt)
  3. Newsgroups: comp.sources.x
  4. Subject: v18i055: xgrabsc v2.1 - grab screen dump, Part04/05
  5. Message-ID: <1992Jul23.140223.27121@msi.com>
  6. Date: 23 Jul 92 14:02:23 GMT
  7. Article-I.D.: msi.1992Jul23.140223.27121
  8. References: <csx-18i052-xgrabsc-2.1@uunet.UU.NET>
  9. Sender: dcmartin@msi.com (David C. Martin - Moderator)
  10. Organization: Molecular Simulations, Inc.
  11. Lines: 1856
  12. Approved: dcmartin@msi.com
  13. Originator: dcmartin@fascet
  14.  
  15. Submitted-by: bruce@SLC.COM (Bruce Schuchardt)
  16. Posting-number: Volume 18, Issue 55
  17. Archive-name: xgrabsc-2.1/part04
  18.  
  19. #!/bin/sh
  20. # this is part.04 (part 4 of a multipart archive)
  21. # do not concatenate these parts, unpack them in order with /bin/sh
  22. # file xgrab.c continued
  23. #
  24. if test ! -r _shar_seq_.tmp; then
  25.     echo 'Please unpack part 1 first!'
  26.     exit 1
  27. fi
  28. (read Scheck
  29.  if test "$Scheck" != 4; then
  30.     echo Please unpack part "$Scheck" next!
  31.     exit 1
  32.  else
  33.     exit 0
  34.  fi
  35. ) < _shar_seq_.tmp || exit 1
  36. if test ! -f _shar_wnt_.tmp; then
  37.     echo 'x - still skipping xgrab.c'
  38. else
  39. echo 'x - continuing file xgrab.c'
  40. sed 's/^X//' << 'SHAR_EOF' >> 'xgrab.c' &&
  41. X *
  42. X *
  43. X * Description:
  44. X *
  45. X * xgrab.c - interactive front for xgrabsc
  46. X *
  47. X *========================================================================
  48. X */
  49. #include "cpyright.h"
  50. #include "patchlevel.h"
  51. X
  52. #include <stdio.h>
  53. #include <X11/Intrinsic.h>
  54. #include <X11/StringDefs.h>
  55. #include <X11/Shell.h>
  56. #include <X11/Xaw/Form.h>
  57. #include <X11/Xaw/Label.h>
  58. #include <X11/Xaw/Command.h>
  59. #include <X11/Xaw/AsciiText.h>
  60. #include <X11/Xaw/Toggle.h>
  61. X
  62. static char *fallback_resources[] = {
  63. #include "xgrab_ad.h"
  64. X  NULL
  65. X  };
  66. X
  67. X
  68. static Display *hDisplay;
  69. X
  70. typedef enum {
  71. X  HITWIN = 1,
  72. X  STRETCH,
  73. X  KEY,
  74. X  ROOT,
  75. X
  76. X  XWD,
  77. X  PS,
  78. X  BITMAP,
  79. X  BITMAP2,
  80. X  BITMAP3,
  81. X  PUZZLE,
  82. X  SIMPLE,
  83. X
  84. X  DITHER,
  85. X  HALFTONE,
  86. X  MAPBW,
  87. X
  88. X  REVERSE,
  89. X
  90. X  TOFILE,
  91. X  TOPRN,
  92. X
  93. X  PS_NORMAL,
  94. X  PS_EPS,
  95. X  PS_EPSI,
  96. X  PS_LANDSCAPE
  97. X  
  98. X  } radioType;
  99. X
  100. X
  101. Widget selBtns, formatBtns, psColr, encBtns, psComp, sltext, psltext,
  102. X       psBin, borderBtn, horizMargin, vertMargin, pgHeight, pgWidth,
  103. X       cnvBtns, revBtn, brtext, outBtns, filenm, prncmd, dispBtn, hostnm;
  104. Widget hShell;
  105. X
  106. XXtAppContext appContext;
  107. X
  108. X
  109. static void doGrab() {
  110. X  char tmp[14];
  111. X  char cmdargs[200];
  112. X  char piper[200];
  113. X  char cmd[500];
  114. X  char *txt;
  115. X  int  sltime, psltime;
  116. X  int  bright;
  117. X  Boolean state;
  118. X
  119. X  cmdargs[0] = '\0';
  120. X  piper[0] = '\0';
  121. X
  122. X  XtVaGetValues(sltext, XtNstring, &txt, NULL);
  123. X  sltime = atoi(txt);
  124. X  if (sltime < 0) sltime = 0;
  125. X  sprintf(tmp, "-sleep %d ", sltime);
  126. X  strcat(cmdargs, tmp);
  127. X
  128. X  XtVaGetValues(psltext, XtNstring, &txt, NULL);
  129. X  psltime = atoi(txt);
  130. X  if (psltime < 0) psltime = 0;
  131. X  sprintf(tmp, "-post %d ", psltime);
  132. X  strcat(cmdargs, tmp);
  133. X
  134. X  XtVaGetValues(brtext, XtNstring, &txt, NULL);
  135. X  bright = atoi(txt);
  136. X  sprintf(tmp, "-brighten %d ", bright);
  137. X  strcat(cmdargs, tmp);
  138. X
  139. X  XtVaGetValues(borderBtn, XtNstate, &state, NULL);
  140. X  if (!state)
  141. X    strcat(cmdargs, "-");
  142. X  strcat(cmdargs, "-bdrs ");
  143. X
  144. X  XtVaGetValues(revBtn, XtNstate, &state, NULL);
  145. X  if (!state)
  146. X    strcat(cmdargs, "-");
  147. X  strcat(cmdargs, "-reverse ");
  148. X
  149. X  switch ((int)XawToggleGetCurrent(selBtns)) {
  150. X    case HITWIN:
  151. X      strcat(cmdargs, "-click ");
  152. X      break;
  153. X    case KEY:
  154. X      strcat(cmdargs, "-key ");
  155. X      break;
  156. X    case ROOT:
  157. X      strcat(cmdargs, "-root ");
  158. X      break;
  159. X    case STRETCH:
  160. X    default:
  161. X      strcat(cmdargs, "-stretch ");
  162. X      break;
  163. X  }
  164. X  switch ((int)XawToggleGetCurrent(formatBtns)) {
  165. X    case XWD:
  166. X      strcat(cmdargs, "-xwd ");
  167. X      break;
  168. X    case BITMAP:
  169. X      strcat(cmdargs, "-bm ");
  170. X      break;
  171. X    case BITMAP2:
  172. X      strcat(cmdargs, "-bm2 ");
  173. X      break;
  174. X    case BITMAP3:
  175. X      strcat(cmdargs, "-bm3 ");
  176. X      break;
  177. X    case PUZZLE:
  178. X      strcat(cmdargs, "-puzzle ");
  179. X      break;
  180. X    case SIMPLE:
  181. X      strcat(cmdargs, "-simple ");
  182. X      break;
  183. X    case PS:
  184. X    default:
  185. X      XtVaGetValues(psColr, XtNstate, &state, NULL);
  186. X      if (state)
  187. X        strcat(cmdargs, "-ps ");
  188. X      else
  189. X        strcat(cmdargs, "-cps ");
  190. X
  191. X      switch ((int)XawToggleGetCurrent(encBtns)) {
  192. X        case PS_EPS:
  193. X          strcat(cmdargs, "-eps ");
  194. X      break;
  195. X    case PS_EPSI:
  196. X      strcat(cmdargs, "-preview ");
  197. X      break;
  198. X    case PS_LANDSCAPE:
  199. X      strcat(cmdargs, "-landscape ");
  200. X      break;
  201. X    default:
  202. X      break;
  203. X      }
  204. X
  205. X      XtVaGetValues(psComp, XtNstate, &state, NULL);
  206. X      if (!state)
  207. X        strcat(cmdargs, "-");
  208. X      strcat(cmdargs, "-compress ");
  209. X      XtVaGetValues(psBin, XtNstate, &state, NULL);
  210. X      if (!state)
  211. X        strcat(cmdargs, "-");
  212. X      strcat(cmdargs, "-bin ");
  213. X
  214. X      strcat(cmdargs, "-page ");
  215. X      XtVaGetValues(pgWidth, XtNstring, &txt, NULL);
  216. X      if (strlen(txt))    strcat(cmdargs, txt);
  217. X      else                strcat(cmdargs, "8.5");
  218. X      strcat(cmdargs, "x");
  219. X      XtVaGetValues(pgHeight, XtNstring, &txt, NULL);
  220. X      if (strlen(txt))    strcat(cmdargs, txt);
  221. X      else                strcat(cmdargs, "11.0");
  222. X      strcat(cmdargs, "-");
  223. X      XtVaGetValues(horizMargin, XtNstring, &txt, NULL);
  224. X      if (strlen(txt))    strcat(cmdargs, txt);
  225. X      else                strcat(cmdargs, "0.5");
  226. X      strcat(cmdargs, "-");
  227. X      XtVaGetValues(horizMargin, XtNstring, &txt, NULL);
  228. X      if (strlen(txt))    strcat(cmdargs, txt);
  229. X      else                strcat(cmdargs, "0.5");
  230. X      strcat(cmdargs, " ");
  231. X
  232. X      break;
  233. X  }
  234. X  switch ((int)XawToggleGetCurrent(cnvBtns)) {
  235. X    case DITHER:
  236. X      strcat(cmdargs, "-dither ");
  237. X      break;
  238. X    case HALFTONE:
  239. X      strcat(cmdargs, "-halftone ");
  240. X      break;
  241. X    case MAPBW:
  242. X      strcat(cmdargs, "-bw ");
  243. X      break;
  244. X    default:
  245. X      break;
  246. X  }
  247. X  switch ((int)XawToggleGetCurrent(outBtns)) {
  248. X    case TOPRN:
  249. X      XtVaGetValues(prncmd, XtNstring, &txt, NULL);
  250. X      if (strlen(txt)) {
  251. X        strcat(piper, " | ");
  252. X        strcat(piper, txt);
  253. X      }
  254. X      break;
  255. X    case TOFILE:
  256. X    default:
  257. X      strcat(cmdargs, "-o ");
  258. X      XtVaGetValues(filenm, XtNstring, &txt, NULL);
  259. X      if (strlen(txt))
  260. X        strcat(cmdargs, txt);
  261. X      else
  262. X        strcat(cmdargs, "screen.dmp");
  263. X      strcat(cmdargs, " ");
  264. X      break;
  265. X  }
  266. X
  267. X  XtVaGetValues(dispBtn, XtNstate, &state, NULL);
  268. X  if (state) {
  269. X    XtVaGetValues(hostnm, XtNstring, &txt, NULL);
  270. X    strcat(cmdargs, "-d ");
  271. X    if (strlen(txt)) {
  272. X      strcat(cmdargs, txt);
  273. X      strcat(cmdargs, " ");
  274. X    }
  275. X    else
  276. X      strcat(cmdargs, ":0 ");
  277. X  }
  278. X
  279. X  sprintf(cmd, "xgrabsc %s%s\n", cmdargs, piper);
  280. X  /* fputs(cmd, stderr); */
  281. X  /* try to make the window iconic */
  282. X  XtUnmapWidget(hShell);
  283. X  XSync(hDisplay, False);
  284. X  system(cmd);
  285. X  XtMapWidget(hShell);
  286. }
  287. X
  288. X
  289. X
  290. X
  291. static void doDismiss() {
  292. X  if (hShell) {
  293. X    XtDestroyWidget(hShell);
  294. X    hShell = NULL;
  295. X    exit(0);
  296. X  }
  297. }
  298. X
  299. X
  300. X
  301. X
  302. static void createWindow() {
  303. X  Widget dialog, button, box1, box2, box3, box4, box5, box6;
  304. X
  305. X  dialog = XtVaCreateManagedWidget("dialog", formWidgetClass, hShell,
  306. X           NULL);
  307. X           XtVaCreateManagedWidget("title",  labelWidgetClass, dialog,
  308. X           NULL);
  309. X
  310. X
  311. X  /* selection options */
  312. X  /* input options */
  313. X  box1 = XtVaCreateManagedWidget("box1", formWidgetClass, dialog, NULL);
  314. X
  315. X           XtVaCreateManagedWidget("inputLbl", labelWidgetClass, box1,
  316. X       NULL);
  317. X
  318. X  dispBtn= XtVaCreateManagedWidget("host", toggleWidgetClass, box1,
  319. X       NULL);
  320. X
  321. X  hostnm = XtVaCreateManagedWidget("hostText", asciiTextWidgetClass, box1,
  322. X           XtNeditType, XawtextEdit, NULL);
  323. X
  324. X  if (getenv("DISPLAY"))
  325. X    XtVaSetValues(hostnm, XtNstring, getenv("DISPLAY"), NULL);
  326. X
  327. X  selBtns =
  328. X           XtVaCreateManagedWidget("click", toggleWidgetClass, box1,
  329. X           XtNradioData, HITWIN,
  330. X       NULL);
  331. X
  332. X           XtVaCreateManagedWidget("stretch", toggleWidgetClass, box1,
  333. X           XtNradioData, STRETCH,
  334. X       XtNradioGroup, selBtns,
  335. X       NULL);
  336. X
  337. X           XtVaCreateManagedWidget("key", toggleWidgetClass, box1,
  338. X           XtNradioData, KEY,
  339. X       XtNradioGroup, selBtns,
  340. X       NULL);
  341. X
  342. X           XtVaCreateManagedWidget("root", toggleWidgetClass, box1,
  343. X           XtNradioData, ROOT,
  344. X       XtNradioGroup, selBtns,
  345. X       NULL);
  346. X
  347. X           XtVaCreateManagedWidget("sleeplbl", labelWidgetClass, box1,
  348. X           NULL);
  349. X
  350. X  sltext = XtVaCreateManagedWidget("sleeptime", asciiTextWidgetClass, box1,
  351. X           XtNeditType, XawtextEdit, NULL);
  352. X
  353. X           XtVaCreateManagedWidget("psleeplbl", labelWidgetClass, box1,
  354. X           NULL);
  355. X
  356. X  psltext = XtVaCreateManagedWidget("psleeptime", asciiTextWidgetClass, box1,
  357. X           XtNeditType, XawtextEdit, NULL);
  358. X
  359. X  box2 = XtVaCreateManagedWidget("box2", formWidgetClass, dialog, NULL);
  360. X
  361. X  /* output options */
  362. X           XtVaCreateManagedWidget("outputFormat", labelWidgetClass, box2,
  363. X           NULL);
  364. X
  365. X  formatBtns =
  366. X           XtVaCreateManagedWidget("xwd", toggleWidgetClass, box2,
  367. X           XtNradioData, XWD,
  368. X       NULL);
  369. X
  370. X           XtVaCreateManagedWidget("ps", toggleWidgetClass, box2,
  371. X           XtNradioData, PS,
  372. X       XtNradioGroup, formatBtns,
  373. X       NULL);
  374. X
  375. X           XtVaCreateManagedWidget("xpm", toggleWidgetClass, box2,
  376. X           XtNradioData, BITMAP,
  377. X       XtNradioGroup, formatBtns,
  378. X       NULL);
  379. X
  380. X           XtVaCreateManagedWidget("xpm2", toggleWidgetClass, box2,
  381. X           XtNradioData, BITMAP2,
  382. X       XtNradioGroup, formatBtns,
  383. X       NULL);
  384. X
  385. X           XtVaCreateManagedWidget("xpm3", toggleWidgetClass, box2,
  386. X           XtNradioData, BITMAP3,
  387. X       XtNradioGroup, formatBtns,
  388. X       NULL);
  389. X
  390. X           XtVaCreateManagedWidget("puzzle", toggleWidgetClass, box2,
  391. X           XtNradioData, PUZZLE,
  392. X       XtNradioGroup, formatBtns,
  393. X       NULL);
  394. X
  395. X
  396. X
  397. X  /* postscript options */
  398. X  box3 = XtVaCreateManagedWidget("box3", formWidgetClass, dialog, NULL);
  399. X
  400. X           XtVaCreateManagedWidget("psOptions", labelWidgetClass, box3,
  401. X           NULL);
  402. X
  403. X  psComp = XtVaCreateManagedWidget("compress", toggleWidgetClass, box3,
  404. X       NULL);
  405. X
  406. X  psColr = XtVaCreateManagedWidget("color", toggleWidgetClass, box3,
  407. X       NULL);
  408. X
  409. X           XtVaCreateManagedWidget("pageWidth", labelWidgetClass, box3,
  410. X           NULL);
  411. X
  412. X  pgWidth = XtVaCreateManagedWidget("pageWidthText",asciiTextWidgetClass, box3,
  413. X           XtNeditType, XawtextEdit, NULL);
  414. X
  415. X           XtVaCreateManagedWidget("pageHeight", labelWidgetClass, box3,
  416. X           NULL);
  417. X
  418. X  pgHeight = XtVaCreateManagedWidget("pageHeightText",asciiTextWidgetClass, box3,
  419. X           XtNeditType, XawtextEdit, NULL);
  420. X
  421. X           XtVaCreateManagedWidget("horizMargin", labelWidgetClass, box3,
  422. X           NULL);
  423. X
  424. X  horizMargin = XtVaCreateManagedWidget("horizMarginText",asciiTextWidgetClass, box3,
  425. X           XtNeditType, XawtextEdit, NULL);
  426. X
  427. X           XtVaCreateManagedWidget("vertMargin", labelWidgetClass, box3,
  428. X           NULL);
  429. X
  430. X  vertMargin = XtVaCreateManagedWidget("vertMarginText",asciiTextWidgetClass, box3,
  431. X           XtNeditType, XawtextEdit, NULL);
  432. X
  433. X
  434. X  encBtns= XtVaCreateManagedWidget("landscape", toggleWidgetClass, box3,
  435. X           XtNradioData, PS_LANDSCAPE,
  436. X       NULL);
  437. X
  438. X           XtVaCreateManagedWidget("encap", toggleWidgetClass, box3,
  439. X           XtNradioData, PS_EPS,
  440. X       XtNradioGroup, encBtns,
  441. X       NULL);
  442. X
  443. X           XtVaCreateManagedWidget("epsi", toggleWidgetClass, box3,
  444. X           XtNradioData, PS_EPSI,
  445. X       XtNradioGroup, encBtns,
  446. X       NULL);
  447. X
  448. X  psBin = XtVaCreateManagedWidget("binary", toggleWidgetClass, box3,
  449. X       NULL);
  450. X
  451. X
  452. X  /* image processing options */
  453. X  box4 = XtVaCreateManagedWidget("box4", formWidgetClass, dialog, NULL);
  454. X
  455. X           XtVaCreateManagedWidget("prOptions", labelWidgetClass, box4,
  456. X           NULL);
  457. X  cnvBtns= XtVaCreateManagedWidget("dither", toggleWidgetClass, box4,
  458. X           XtNradioData, DITHER,
  459. X       NULL);
  460. X           XtVaCreateManagedWidget("halftone", toggleWidgetClass, box4,
  461. X           XtNradioData, HALFTONE,
  462. X       XtNradioGroup, cnvBtns,
  463. X       NULL);
  464. X           XtVaCreateManagedWidget("mapbw", toggleWidgetClass, box4,
  465. X           XtNradioData, MAPBW,
  466. X       XtNradioGroup, cnvBtns,
  467. X       NULL);
  468. X
  469. X           XtVaCreateManagedWidget("brightnessLbl", labelWidgetClass, box4,
  470. X       NULL);
  471. X  brtext = XtVaCreateManagedWidget("brightnessText", asciiTextWidgetClass, box4,
  472. X           XtNeditType, XawtextEdit, NULL);
  473. X
  474. X  revBtn = XtVaCreateManagedWidget("reverse", toggleWidgetClass, box4, NULL);
  475. X
  476. X  borderBtn = XtVaCreateManagedWidget("borders", toggleWidgetClass, box4, NULL);
  477. X
  478. X  box5 = XtVaCreateManagedWidget("box5", formWidgetClass, dialog, NULL);
  479. X
  480. X           XtVaCreateManagedWidget("outputLbl", labelWidgetClass, box5,
  481. X       NULL);
  482. X
  483. X  outBtns= XtVaCreateManagedWidget("file", toggleWidgetClass, box5,
  484. X           XtNradioData, TOFILE,
  485. X       NULL);
  486. X
  487. X  filenm = XtVaCreateManagedWidget("fileText", asciiTextWidgetClass, box5,
  488. X           XtNeditType, XawtextEdit, NULL);
  489. X
  490. X           XtVaCreateManagedWidget("printer", toggleWidgetClass, box5,
  491. X           XtNradioData, TOPRN,
  492. X       XtNradioGroup, outBtns,
  493. X       NULL);
  494. X
  495. X  prncmd = XtVaCreateManagedWidget("printerText", asciiTextWidgetClass, box5,
  496. X           XtNeditType, XawtextEdit, NULL);
  497. X
  498. X
  499. X  box6 = XtVaCreateManagedWidget("box6", formWidgetClass, dialog, NULL);
  500. X
  501. X  XtVaCreateManagedWidget("splat", labelWidgetClass, box6, NULL);
  502. X  
  503. X  button = XtVaCreateManagedWidget("OK", commandWidgetClass, box6, NULL);
  504. X  XtAddCallback(button, XtNcallback, doGrab, NULL);
  505. X
  506. X  button = XtVaCreateManagedWidget("Dismiss", commandWidgetClass, box6, NULL);
  507. X  XtAddCallback(button, XtNcallback, doDismiss, NULL);
  508. X
  509. }
  510. X
  511. X
  512. X
  513. int main(argc, argv, envp)
  514. X  int argc;
  515. X  char *argv[];
  516. X  char *envp;
  517. {
  518. X  puts("X-Windows Screen Grabber");
  519. X  puts(Copyright);
  520. X  puts("");
  521. X
  522. X
  523. X  hShell = XtAppInitialize(&appContext, "XGrab", NULL, 0, &argc, argv,
  524. X     fallback_resources, NULL, 0);
  525. X
  526. X  hDisplay = XtDisplay(hShell);
  527. X  createWindow();
  528. X
  529. X  XtRealizeWidget(hShell);
  530. X  XtAppMainLoop(appContext);
  531. }
  532. SHAR_EOF
  533. echo 'File xgrab.c is complete' &&
  534. chmod 0644 xgrab.c ||
  535. echo 'restore of xgrab.c failed'
  536. Wc_c="`wc -c < 'xgrab.c'`"
  537. test 12758 -eq "$Wc_c" ||
  538.     echo 'xgrab.c: original size 12758, current size' "$Wc_c"
  539. rm -f _shar_wnt_.tmp
  540. fi
  541. # ============= xgrabsc.c ==============
  542. if test -f 'xgrabsc.c' -a X"$1" != X"-c"; then
  543.     echo 'x - skipping xgrabsc.c (File already exists)'
  544.     rm -f _shar_wnt_.tmp
  545. else
  546. > _shar_wnt_.tmp
  547. echo 'x - extracting xgrabsc.c (Text)'
  548. sed 's/^X//' << 'SHAR_EOF' > 'xgrabsc.c' &&
  549. /*========================================================================
  550. X *
  551. X * Name - xgrabsc.c
  552. X *
  553. X * ccs version:    1.18
  554. X *
  555. X * ccsid:    @(#)xgrabsc.c    1.18 - 7/9/92 12:49:24
  556. X * from:     ccs/s.xgrabsc.c
  557. X * date:     7/9/92 13:35:30
  558. X *
  559. X * Copyright (c) 1990-92 Bruce Schuchardt.
  560. X * Read the file cpyright.h for full copyright information.
  561. X *
  562. X *
  563. X * Description:
  564. X *
  565. X * xgrabsc - grab screen images and store in files
  566. X *
  567. X *========================================================================
  568. X */
  569. X
  570. #include "cpyright.h"
  571. #include "patchlevel.h"
  572. #include "config.h"
  573. #include "ps_color.h"
  574. #include "checkvm.h"
  575. #include "cmdopts.h"
  576. X
  577. #include <stdio.h>
  578. X
  579. #include <X11/Xos.h>
  580. #include <X11/Xlib.h>
  581. #include <X11/Xutil.h>
  582. #include <X11/cursorfont.h>
  583. #include <X11/Xatom.h>
  584. X
  585. #ifdef VMS
  586. #include "XWDFile.h"
  587. #else
  588. #include <X11/XWDFile.h>
  589. #endif /* VMS */
  590. X
  591. #ifndef CARD32
  592. #include <X11/Xmd.h>
  593. #endif
  594. X
  595. #include <X11/Xmu/WinUtil.h>
  596. X
  597. #ifndef NO_VIRTUAL_WINDOW
  598. #include "virtual.h"
  599. #endif
  600. X
  601. X
  602. #define MAX_CELLS  256
  603. #define TRUE  1
  604. #define FALSE 0
  605. X
  606. X
  607. typedef enum {
  608. X  NO_DITHER=0,
  609. X  FS_DITHER,
  610. X  MATRIX_DITHER,
  611. X  MATRIX_HALFTONE,
  612. X  MAP_BW
  613. } ditherType;
  614. X
  615. X
  616. typedef unsigned char byte;
  617. typedef unsigned long dw;
  618. typedef unsigned int  word;
  619. X
  620. X
  621. X
  622. typedef struct {
  623. X  XImage *ximage;
  624. X  word numcells;
  625. X  word red[MAX_CELLS], green[MAX_CELLS], blue[MAX_CELLS];
  626. X  byte used[MAX_CELLS];
  627. } imageInfo;
  628. X
  629. X
  630. typedef enum {
  631. X  sourceRect,
  632. X  sourceRoot,
  633. X  sourceId,
  634. X  sourceWd,
  635. X  sourceKey
  636. } sourceType;
  637. X
  638. typedef enum {
  639. X  puzzleFormat,
  640. X  psFormat,
  641. X  simpleFormat,
  642. X  xwdFormat,
  643. X  pixmapFormat
  644. } formatType;
  645. X
  646. X
  647. X
  648. X
  649. #ifdef BCOPY
  650. #ifdef MEMCPY
  651. #undef MEMCPY
  652. #endif
  653. #define memcpy(x,y,c) bcopy(y,x,c)
  654. #define memset(x,c)   bzero(x,c) /* well, I only use it for zeroing out stuff */
  655. #endif
  656. X
  657. #ifdef MEMCPY
  658. char *memcpy();
  659. char *memset();
  660. #endif
  661. X
  662. X
  663. #ifdef VMS
  664. #define rindex strrchr
  665. #endif
  666. X
  667. static Display *hDisplay;
  668. static int      hScreen;
  669. static Window   hRoot, vRoot;
  670. static int      displayCells;
  671. static char    *programName;
  672. static char    *imageName;
  673. X
  674. static char    *version    = XGRABSC_VERSION;
  675. static int      patchLevel = XGRABSC_PATCHLEVEL;
  676. static int      verbose;
  677. X
  678. static word nr[MAX_CELLS], ng[MAX_CELLS], nb[MAX_CELLS];
  679. X
  680. static char   hexdigits[] = "0123456789abcdef";
  681. X
  682. static double pageWidth   = PAPER_WIDTH;
  683. static double pageHeight  = PAPER_HEIGHT;
  684. static double horizMargin = HORIZ_MARGIN;
  685. static double vertMargin  = VERT_MARGIN;
  686. static double horizInset  = PAPER_WIDTH - HORIZ_MARGIN - HORIZ_MARGIN;
  687. static double vertInset   = PAPER_HEIGHT - VERT_MARGIN - VERT_MARGIN;
  688. X
  689. static int needColorImageProc;
  690. X
  691. X
  692. /* most functions have been moved to seperate source include files */
  693. X
  694. #include "process.hc"         /* color processing     */
  695. #include "get.hc"             /* get images           */
  696. #include "mem.hc"             /* memcpy, memset       */
  697. #include "convert.hc"         /* color->bw conversion */
  698. #include "write.hc"           /* output functions     */
  699. X
  700. X
  701. X
  702. xgrabsc(argc, argv, env)
  703. X  int argc;
  704. X  char *argv[];  /* must have at least argv[0] == programName */
  705. X  char *env;
  706. {
  707. X  char        *args[100], *arg;
  708. X  extern char *optarg;
  709. X  FILE        *outfile;
  710. X  char        *outfileName;
  711. X  XRectangle  xrect;
  712. X  XWindowAttributes xwa;
  713. X  imageInfo   image;
  714. X  int         argn, argi, polarity;
  715. X  int          cmdi, cmdargi;
  716. X  int         doAnd;
  717. X  int         doOr;
  718. X  int         doReverse;
  719. X  int         depth;
  720. X  int         noBell;
  721. X  int         psColor;
  722. X  int         brighten;
  723. X  int         forceBitmap;
  724. X  int         grabServer;
  725. X  ditherType  ditherKind;
  726. X  int         halftone;
  727. X  int         compress;
  728. X  int         sleepSeconds;
  729. X  int         postSelectSleepSeconds;
  730. X  int         andBits;
  731. X  int         orBits;
  732. X  int         encapsulate;
  733. X  Window      sourceWindow, childWindow, clientWindow, wmWindow, ignored;
  734. X  char       *ptr;
  735. X  char       *display;
  736. X  int         i, x, y;
  737. X  int         brightenFactor;
  738. X  sourceType  source;
  739. X  formatType  outputFormat;
  740. X  int         xpmFormat;
  741. X  int         landscape;
  742. X  int         binary;
  743. X  int          borders;
  744. X  int          checkLimits;
  745. X  int          preview;
  746. X
  747. X
  748. X  outfile     = stdout;
  749. X  outfileName = NULL;
  750. X  display     = NULL;
  751. X  programName = argv[0];
  752. X
  753. X  noBell       = FALSE;
  754. X  brighten     = FALSE;
  755. X  compress     = TRUE;
  756. X  ditherKind   = NO_DITHER;
  757. X  doAnd        = FALSE;
  758. X  doOr         = FALSE;
  759. X  doReverse    = FALSE;
  760. X  encapsulate  = FALSE;
  761. X  forceBitmap  = FALSE;
  762. X  grabServer   = TRUE;
  763. X  halftone     = FALSE;
  764. X  landscape    = FALSE;
  765. X  binary       = FALSE;
  766. X  sleepSeconds = 0;
  767. X  postSelectSleepSeconds = 0;
  768. X  verbose      = FALSE;
  769. X  borders      = TRUE;
  770. #ifdef NO_PRINTER_MEMORY_CHECKS
  771. X  checkLimits  = FALSE;
  772. #else
  773. X  checkLimits  = TRUE;
  774. #endif
  775. X  preview      = FALSE;
  776. X  needColorImageProc = DEFAULT_NEED_COLORIMAGE_PROC;
  777. X
  778. X  source       = sourceRect;
  779. X  outputFormat = psFormat;
  780. X
  781. X
  782. X  /* merge environment options and command line options */
  783. X  args[0] = programName;
  784. X  if (env != NULL) {
  785. X    args[1] = env;
  786. X    for (argn=2; argn<100  &&
  787. X                (args[argn]=(char *)strchr(args[argn-1], ' ')) != NULL;
  788. X            argn++) {
  789. X      /* remove leading white space */
  790. X      while (*args[argn] == ' ' || *args[argn] == 9) {
  791. X        *(args[argn]) = '\0';
  792. X        args[argn]++;
  793. X      }
  794. X      if (*args[argn] == '|' || *args[argn] == '>') /* dbx leaves these in the cmd line */
  795. X        break;
  796. X    }
  797. X  }
  798. X  else
  799. X    argn = 1;
  800. X
  801. X  for (i=1; i<argc && argn<100; argn++, i++)
  802. X    args[argn] = argv[i];
  803. X
  804. X  
  805. X  for (argi=1; argi<argn; argi++) {
  806. X    arg = args[argi];
  807. X
  808. X    polarity = 1;
  809. X    if (arg[0] == '-') {
  810. X      arg++;
  811. X      if (arg[0] == '-') {
  812. X        arg++;
  813. X    polarity = 0;
  814. X      }
  815. X    }
  816. X
  817. X    for (cmdi=0; cmdi<numCmds; cmdi++) {
  818. X      if (strcmp(arg, commands[cmdi].userstr) == 0)
  819. X        break;
  820. X    }
  821. X    if (cmdi >= numCmds) {
  822. X      fprintf(stderr, "%s: unknown option '%s'\n", programName, arg);
  823. X      exit(3);
  824. X    }
  825. X
  826. X    cmdargi = argi+1;
  827. X    argi += commands[cmdi].numargs;
  828. X    if (argi >= argn) {
  829. X      fprintf(stderr, "%s: not enough arguments for '%s'\n", programName, arg);
  830. X      exit(3);
  831. X    }
  832. X
  833. X    switch (commands[cmdi].command) {
  834. X      case CMD_DISPLAY:
  835. X        display = args[cmdargi];
  836. X        break;
  837. X      case CMD_BELL:
  838. X        noBell = !polarity;
  839. X        break;
  840. X      case CMD_GRABSERVER:
  841. X        grabServer = polarity;
  842. X        break;
  843. X      case CMD_OUTPUT:
  844. X        outfileName = args[cmdargi];
  845. X        break;
  846. X      case CMD_PRESLEEP:
  847. X        sleepSeconds = atoi(args[cmdargi]);
  848. X        if (sleepSeconds < 0) sleepSeconds = 0;
  849. X        break;
  850. X      case CMD_POSTSLEEP:
  851. X        postSelectSleepSeconds = atoi(args[cmdargi]);
  852. X        if (postSelectSleepSeconds < 0) postSelectSleepSeconds = 0;
  853. X        break;
  854. X      case CMD_VERBOSE:
  855. X        verbose = polarity;
  856. X        break;
  857. X      case CMD_BORDERS:
  858. X        borders = polarity;
  859. X    break;
  860. X      case CMD_NOBORDERS:
  861. X        borders = !polarity;
  862. X    break;
  863. X
  864. X
  865. X      case CMD_SOURCE_KEY:
  866. X        source = sourceKey;
  867. X        grabServer = FALSE;
  868. X    break;
  869. X      case CMD_SOURCE_ID:
  870. X        source = sourceId;
  871. X        sourceWindow = 0;
  872. X        if (!sscanf(args[cmdargi], "%ix", &sourceWindow)) {
  873. X          fprintf(stderr, "%s: invalid window id '%s'\n", programName, args[cmdargi]);
  874. X      exit(3);
  875. X        }
  876. X        break;
  877. X      case CMD_SOURCE_RECT:
  878. X    source = sourceRect;
  879. X    break;
  880. X      case CMD_SOURCE_ROOT:
  881. X        source = sourceRoot;
  882. X        break;
  883. X      case CMD_SOURCE_WD:
  884. X        source = sourceWd;
  885. X        break;
  886. X
  887. X
  888. X
  889. X      case CMD_AND:
  890. X        doAnd = polarity;
  891. X    if (doAnd)
  892. X          andBits = atoi(args[cmdargi]);
  893. X        break;
  894. X      case CMD_OR:
  895. X        doOr = polarity;
  896. X    if (doOr)
  897. X          orBits = atoi(args[cmdargi]);
  898. X        break;
  899. X      case CMD_NOT:
  900. X        doReverse = polarity;
  901. X    break;
  902. X      case CMD_BRIGHTEN:
  903. X        brighten = polarity;
  904. X    if (brighten) {
  905. X          brightenFactor = atoi(args[cmdargi]);
  906. X          if (brightenFactor <= 0) {
  907. X            fprintf(stderr, "%s: brightening factor must be a positive number\n",
  908. X              programName);
  909. X            exit(3);
  910. X          }
  911. X      if (brightenFactor != 100)
  912. X            brighten = TRUE;
  913. X      else
  914. X        brighten = FALSE;
  915. X    }
  916. X        break;
  917. X
  918. X      case CMD_DITHER_MAP:
  919. X        forceBitmap = TRUE;
  920. X        halftone = FALSE;
  921. X        break;
  922. X      case CMD_DITHER_MATRIX:
  923. X        ditherKind = MATRIX_DITHER;
  924. X        halftone = TRUE;
  925. X        forceBitmap = FALSE;
  926. X        break;
  927. X      case CMD_DITHER_FS:
  928. X        ditherKind = FS_DITHER;
  929. X        halftone = TRUE;
  930. X        forceBitmap = FALSE;
  931. X        break;
  932. X      case CMD_DITHER_HALFTONE:
  933. X        ditherKind = MATRIX_HALFTONE;
  934. X        halftone = TRUE;
  935. X        forceBitmap = FALSE;
  936. X        break;
  937. X      case CMD_DITHER_NONE:
  938. X        ditherKind = NO_DITHER;
  939. X    halftone = forceBitmap = FALSE;
  940. X    break;
  941. X
  942. X
  943. X
  944. X      case CMD_OUTPUT_PS:
  945. X        psColor = FALSE;
  946. X        outputFormat = psFormat;
  947. X        break;
  948. X      case CMD_OUTPUT_CPS:
  949. X        psColor = polarity;
  950. X        outputFormat = psFormat;
  951. X    break;
  952. X      case CMD_OUTPUT_SIMPLE:
  953. X        outputFormat = simpleFormat;
  954. X        break;
  955. X      case CMD_OUTPUT_XWD:
  956. X        outputFormat = xwdFormat;
  957. X        break;
  958. X      case CMD_OUTPUT_PIXMAP:
  959. X        xpmFormat = 1;
  960. X        outputFormat = pixmapFormat;
  961. X        break;
  962. X      case CMD_OUTPUT_XPM2:
  963. X        if (polarity) xpmFormat = 2;
  964. X    else if (xpmFormat == 2) xpmFormat = 1;
  965. X    outputFormat = pixmapFormat;
  966. X    break;
  967. X      case CMD_OUTPUT_XPM3:
  968. X        if (polarity) xpmFormat = 3;
  969. X    else if (xpmFormat == 3) xpmFormat = 1;
  970. X    outputFormat = pixmapFormat;
  971. X    break;
  972. X
  973. X      case CMD_OUTPUT_PUZZLE:
  974. X        outputFormat = puzzleFormat;
  975. X        break;
  976. X
  977. X      case CMD_LANDSCAPE:
  978. X        landscape = polarity;
  979. X    outputFormat = psFormat;
  980. X        break;
  981. X      case CMD_BIN:
  982. X        binary = polarity;
  983. X        outputFormat = psFormat;
  984. X    break;
  985. X      case CMD_COMPRESS:
  986. X        compress = polarity;
  987. X        outputFormat = psFormat;
  988. X        break;
  989. X      case CMD_EPS:
  990. X        encapsulate = polarity;
  991. X        outputFormat = psFormat;
  992. X    break;
  993. X      case CMD_LIMIT:
  994. X        checkLimits = polarity;
  995. X        outputFormat = psFormat;
  996. X    break;
  997. X      case CMD_PREVIEW:
  998. X        preview = polarity;
  999. X        outputFormat = psFormat;
  1000. X    break;  
  1001. X      case CMD_PAGE:
  1002. X        outputFormat = psFormat;
  1003. X        sscanf(args[cmdargi], "%lfx%lf-%lf-%lf",
  1004. X      &pageWidth, &pageHeight, &horizMargin, &vertMargin);
  1005. X    horizInset = pageWidth - horizMargin - horizMargin;
  1006. X    vertInset  = pageHeight - vertMargin - vertMargin;
  1007. X        break;
  1008. X      case CMD_COLORPROC:
  1009. X        outputFormat = psFormat;
  1010. X    needColorImageProc = polarity;
  1011. X    break;
  1012. X    }
  1013. X  }
  1014. X
  1015. X
  1016. X  if (verbose) {
  1017. X    fprintf(stderr, "%s: xgrabsc version %s\n", programName, version);
  1018. X    fprintf(stderr, "%s:         patchlevel %d\n", programName, patchLevel);
  1019. X    fprintf(stderr, "%s:         %s\n\n", programName, Copyright);
  1020. X  }
  1021. X
  1022. X  if (!display) display = (char *)getenv("DISPLAY");
  1023. X  hDisplay = XOpenDisplay(display);
  1024. X  if (!hDisplay) {
  1025. X    fprintf(stderr, "%s: could not open X display\n", programName);
  1026. X    exit(3);
  1027. X  }
  1028. X  hScreen  = DefaultScreen(hDisplay);
  1029. X  hRoot    = DefaultRootWindow(hDisplay);
  1030. #ifndef NO_VIRTUAL_WINDOW
  1031. X  vRoot    = VirtualRootWindow(hDisplay, hScreen);
  1032. #else
  1033. X  vRoot    = hRoot;
  1034. #endif
  1035. X
  1036. X  depth  = DefaultDepth(hDisplay, hScreen);
  1037. X  if (DisplayCells(hDisplay, hScreen) > MAX_CELLS) {
  1038. X    fprintf(stderr, "%s: color table is too big for this program\n",
  1039. X      programName);
  1040. X    XCloseDisplay(hDisplay);
  1041. X    exit(3);
  1042. X  }
  1043. X
  1044. X  /* sleep if asked to do so */
  1045. X  if (sleepSeconds)
  1046. X    sleep(sleepSeconds);
  1047. X
  1048. X  /* grab the screen if asked to do so */
  1049. X  if (grabServer)
  1050. X    XGrabServer(hDisplay);
  1051. X
  1052. X
  1053. X
  1054. X  if (source != sourceId)
  1055. X    sourceWindow = hRoot;
  1056. X
  1057. X  switch (source) {
  1058. X    case sourceKey:
  1059. X      childWindow =
  1060. #ifdef SELECTION_MASK
  1061. X          getWindowWhenKeyIsPressed(SELECTION_MASK)
  1062. #else
  1063. X          getWindowWhenKeyIsPressed(ControlMask);
  1064. #endif
  1065. X      if (!childWindow) {
  1066. X        fprintf(stderr, "%s: unable to find source window\n", programName);
  1067. X        XCloseDisplay(hDisplay);
  1068. X        exit(3);
  1069. X      }
  1070. X      break;
  1071. X    case sourceId:
  1072. X      childWindow = sourceWindow;
  1073. X      break;
  1074. X    case sourceWd:
  1075. X      /* grab the image from the root window so menus will show up on top
  1076. X       * of the window */
  1077. X      childWindow=getWindow();
  1078. X      if (!childWindow) {
  1079. X        fprintf(stderr, "%s: unable to find source window\n", programName);
  1080. X        XCloseDisplay(hDisplay);
  1081. X        exit(3);
  1082. X      }
  1083. X      break;
  1084. X    case sourceRoot:
  1085. X      xrect.x = xrect.y = 0;
  1086. X      xrect.width  = DisplayWidth(hDisplay, hScreen);
  1087. X      xrect.height = DisplayHeight(hDisplay, hScreen);
  1088. X      break;
  1089. X    case sourceRect:
  1090. X    default:
  1091. X      if (!getRectangle(&xrect)) {
  1092. X        XCloseDisplay(hDisplay);
  1093. X        exit(3);
  1094. X      }
  1095. X      break;
  1096. X  }
  1097. X
  1098. X
  1099. X
  1100. X  clientWindow = (Window)NULL;
  1101. X  if (!borders  &&
  1102. X      (source == sourceKey || source == sourceWd)  &&
  1103. X      childWindow != hRoot) {
  1104. X    /* look for a different client window */
  1105. X    clientWindow = XmuClientWindow(hDisplay, childWindow);
  1106. X    if (clientWindow && clientWindow != childWindow) {
  1107. X      if (verbose)
  1108. X    fprintf(stderr, "%s: found subwindow 0x%x\n", programName, clientWindow);
  1109. X      wmWindow = childWindow;
  1110. X      childWindow = clientWindow;
  1111. X    }
  1112. X  }
  1113. X
  1114. X  if ((source == sourceKey && childWindow != hRoot) ||
  1115. X      source == sourceId ||
  1116. X      source == sourceWd) {
  1117. X
  1118. X    if (childWindow == hRoot) {
  1119. X      xrect.x      = 0;
  1120. X      xrect.y      = 0;
  1121. X      xrect.width  = DisplayWidth(hDisplay, hScreen);
  1122. X      xrect.height = DisplayHeight(hDisplay, hScreen);
  1123. X    }
  1124. X    else {
  1125. X
  1126. X      /* take the child window (and optional client/wm window info) and
  1127. X      * determine the portion of the root window that should be grabbed */
  1128. X
  1129. X      if (!XGetWindowAttributes(hDisplay, childWindow, &xwa)) {
  1130. X        fprintf(stderr, "%s: unable to get window coordinates\n", programName);
  1131. X        XCloseDisplay(hDisplay);
  1132. X        exit(3);
  1133. X      }
  1134. X
  1135. X      /* get the correct screen and root window for the selected window,
  1136. X        * and if it isn't the default, muck with the global state of the
  1137. X        * program a bit
  1138. X        */
  1139. X      i = XScreenNumberOfScreen(xwa.screen);
  1140. X      if (i != hScreen) {
  1141. X        hRoot   = xwa.root;
  1142. X        hScreen = i;
  1143. #ifndef NO_VIRTUAL_WINDOW
  1144. X        vRoot   = VirtualRootWindow(hDisplay, hScreen);
  1145. #else
  1146. X        vRoot   = hRoot;
  1147. #endif
  1148. X        depth   = DefaultDepth(hDisplay, hScreen);
  1149. X      }
  1150. X
  1151. X      sourceWindow = vRoot;
  1152. X      if (!borders) {
  1153. X        xrect.x      = xwa.x + xwa.border_width;
  1154. X        xrect.y      = xwa.y + xwa.border_width;
  1155. X        xrect.width  = xwa.width;
  1156. X        xrect.height = xwa.height;
  1157. X      }
  1158. X      else {
  1159. X        xrect.x      = xwa.x;
  1160. X        xrect.y      = xwa.y;
  1161. X        xrect.width  = xwa.width + (2 * xwa.border_width);
  1162. X        xrect.height = xwa.height + (2 * xwa.border_width);
  1163. X      }
  1164. X
  1165. X      /* if a subwindow of a window-manager window was found, adjust
  1166. X        * the coordinates of the rectangle to be grabbed */
  1167. X      if (clientWindow  &&  clientWindow != wmWindow) {
  1168. X        if (!XGetWindowAttributes(hDisplay, wmWindow, &xwa)) {
  1169. X          fprintf(stderr, "%s: unable to get window coordinates\n", programName);
  1170. X          XCloseDisplay(hDisplay);
  1171. X          exit(3);
  1172. X        }
  1173. X        xrect.x += xwa.x + xwa.border_width;
  1174. X        xrect.y += xwa.y + xwa.border_width;
  1175. X      }
  1176. X
  1177. X      if (hRoot == vRoot) {
  1178. X        /* do some clipping here, since it's cheap */
  1179. X        i = DisplayWidth(hDisplay, hScreen);
  1180. X        if (xrect.x + xrect.width > i) {
  1181. X          x = i - (int)(xrect.x);
  1182. X          if (x < 0) x = 0;
  1183. X          xrect.width = x;
  1184. X        }
  1185. X        i = DisplayHeight(hDisplay, hScreen);
  1186. X        if (xrect.y + xrect.height > i) {
  1187. X          x = i - (int)(xrect.y);
  1188. X          if (x < 0) x = 0;
  1189. X          xrect.height = x;
  1190. X        }
  1191. X      }
  1192. X    }
  1193. X  }
  1194. X
  1195. X
  1196. X  if (verbose)
  1197. X    fprintf(stderr, "%s: bounding box is [x=%d y=%d w=%d h=%d]\n", programName, xrect.x, xrect.y,
  1198. X                    xrect.width, xrect.height);
  1199. X
  1200. X  /* sleep if asked to do so */
  1201. X  if (postSelectSleepSeconds) {
  1202. X    if (grabServer) {
  1203. X      XUngrabServer(hDisplay);
  1204. X      XSync(hDisplay, FALSE);
  1205. X    }
  1206. X    sleep(postSelectSleepSeconds);
  1207. X    if (grabServer)
  1208. X      XGrabServer(hDisplay);
  1209. X  }
  1210. X
  1211. X
  1212. X  /* get the image bounded by the rectangle from the source window */
  1213. X  if (!noBell)
  1214. X    XBell(hDisplay, 50);
  1215. X
  1216. X  if (!getImage(&xrect, &image, sourceWindow)) {
  1217. X    XCloseDisplay(hDisplay);
  1218. X    exit(3);
  1219. X  }
  1220. X  if (grabServer)
  1221. X    XUngrabServer(hDisplay);
  1222. X
  1223. X  if (!noBell) {
  1224. X    XBell(hDisplay, 20);
  1225. X    XBell(hDisplay, 30);
  1226. X  }
  1227. X
  1228. X  XFlush(hDisplay);
  1229. X
  1230. X
  1231. X
  1232. X  /* do color image processing/conversions */
  1233. X  if (depth >= 2) {
  1234. X    if (brighten)
  1235. X      brightenColors(&image, brightenFactor);
  1236. X    if (doAnd)
  1237. X      alterPlanes(&image, TRUE, andBits);
  1238. X    if (doOr)
  1239. X      alterPlanes(&image, FALSE, orBits);
  1240. X    if (doReverse)
  1241. X      reverseColors(&image);
  1242. X
  1243. X    if (forceBitmap) {
  1244. X      pixmap2bitmap(&image);
  1245. X      depth = 1;
  1246. X    }
  1247. X    else if (halftone)
  1248. X      pixmap2halftone(&image, ditherKind);
  1249. X    else
  1250. X      compressColormap(&image);
  1251. X  }
  1252. X
  1253. X
  1254. X  /* open the output stream */
  1255. X  if (outfileName) {
  1256. X    outfile = fopen(outfileName, "w");
  1257. X    if (!outfile) {
  1258. X      fprintf(stderr, "%s: ", programName);
  1259. X      perror(outfileName);
  1260. X      exit(3);
  1261. X    }
  1262. X    /* form an image name based on the file name */
  1263. X    ptr = rindex(outfileName, '.');
  1264. X    if (ptr) *ptr = '\0';
  1265. X    imageName = rindex(outfileName, '/');
  1266. X    if (imageName) imageName++;
  1267. X    else imageName = outfileName;
  1268. X  }
  1269. X  else
  1270. X    imageName = "unnamed";
  1271. X
  1272. X
  1273. X  /* write to the output stream in the requested format */
  1274. X  switch (outputFormat) {
  1275. X    case xwdFormat:
  1276. X      writeXWD(&image, outfile);
  1277. X      break;
  1278. X    case simpleFormat:
  1279. X      writeSimple(&image, outfile);
  1280. X      break;
  1281. X    case puzzleFormat:
  1282. X      writePuzzle(&image, outfile);
  1283. X      break;
  1284. X    case pixmapFormat:
  1285. X      if (image.ximage->depth <= 1)
  1286. X        writeXYPixmap(&image, outfile);
  1287. X      else
  1288. X        writeZPixmap(xpmFormat, &image, outfile);
  1289. X      break;
  1290. X    case psFormat:
  1291. X    default:
  1292. X      if (psColor)
  1293. X        writeColorPS(&image, outfile, compress, encapsulate,
  1294. X                    preview, PREVIEW_DITHER, landscape, binary, checkLimits);
  1295. X      else
  1296. X        writePostscript(&image, outfile, compress, encapsulate,
  1297. X                    preview, PREVIEW_DITHER, landscape, binary, checkLimits);
  1298. X      break;
  1299. X  }
  1300. X
  1301. X
  1302. X  XDestroyImage(image.ximage);
  1303. X  XCloseDisplay(hDisplay);
  1304. X  if (outfileName)
  1305. X    fclose(outfile);
  1306. X
  1307. X  exit(0);
  1308. }
  1309. X
  1310. X
  1311. X
  1312. X
  1313. X
  1314. #ifndef NO_MAIN
  1315. main(argc, argv)
  1316. X  int argc;
  1317. X  char *argv[];
  1318. {
  1319. X  char *env;
  1320. X  env = (char *)getenv("XGRABSC");
  1321. X  xgrabsc(argc, argv, env);
  1322. }
  1323. #endif
  1324. SHAR_EOF
  1325. chmod 0644 xgrabsc.c ||
  1326. echo 'restore of xgrabsc.c failed'
  1327. Wc_c="`wc -c < 'xgrabsc.c'`"
  1328. test 18405 -eq "$Wc_c" ||
  1329.     echo 'xgrabsc.c: original size 18405, current size' "$Wc_c"
  1330. rm -f _shar_wnt_.tmp
  1331. fi
  1332. # ============= Makefile ==============
  1333. if test -f 'Makefile' -a X"$1" != X"-c"; then
  1334.     echo 'x - skipping Makefile (File already exists)'
  1335.     rm -f _shar_wnt_.tmp
  1336. else
  1337. > _shar_wnt_.tmp
  1338. echo 'x - extracting Makefile (Text)'
  1339. sed 's/^X//' << 'SHAR_EOF' > 'Makefile' &&
  1340. # Makefile generated by imake - do not edit!
  1341. # $XConsortium: imake.c,v 1.65 91/07/25 17:50:17 rws Exp $
  1342. #
  1343. # The cpp used on this machine replaces all newlines and multiple tabs and
  1344. # spaces in a macro expansion with a single space.  Imake tries to compensate
  1345. # for this, but is not always successful.
  1346. #
  1347. X
  1348. # -------------------------------------------------------------------------
  1349. # Makefile generated from "Imake.tmpl" and <Imakefile>
  1350. # $XConsortium: Imake.tmpl,v 1.139 91/09/16 08:52:48 rws Exp $
  1351. #
  1352. # Platform-specific parameters may be set in the appropriate <vendor>.cf
  1353. # configuration files.  Site-specific parameters should be set in the file
  1354. # site.def.  Full rebuilds are recommended if any parameters are changed.
  1355. #
  1356. # If your C preprocessor does not define any unique symbols, you will need
  1357. # to set BOOTSTRAPCFLAGS when rebuilding imake (usually when doing
  1358. # "make World" the first time).
  1359. #
  1360. X
  1361. # -------------------------------------------------------------------------
  1362. # site-specific configuration parameters that need to come before
  1363. # the platform-specific parameters - edit site.def to change
  1364. X
  1365. # site:  $XConsortium: site.def,v 1.2 91/07/30 20:26:44 rws Exp $
  1366. X
  1367. # -------------------------------------------------------------------------
  1368. # platform-specific configuration parameters - edit sun.cf to change
  1369. X
  1370. # platform:  $XConsortium: sun.cf,v 1.68 91/07/30 11:34:39 rws Exp $
  1371. X
  1372. # operating system:  SunOS 4.1.1
  1373. X
  1374. # $XConsortium: sunLib.rules,v 1.6 91/03/24 17:55:58 rws Exp $
  1375. X
  1376. # -------------------------------------------------------------------------
  1377. # site-specific configuration parameters that go after
  1378. # the platform-specific parameters - edit site.def to change
  1379. X
  1380. # site:  $XConsortium: site.def,v 1.2 91/07/30 20:26:44 rws Exp $
  1381. X
  1382. X            SHELL = /bin/sh
  1383. X
  1384. X              TOP = .
  1385. X      CURRENT_DIR = .
  1386. X
  1387. X               AR = ar clq
  1388. X  BOOTSTRAPCFLAGS =
  1389. X               CC = cc
  1390. X               AS = as
  1391. X
  1392. X         COMPRESS = compress
  1393. X              CPP = /lib/cpp $(STD_CPP_DEFINES)
  1394. X    PREPROCESSCMD = cc -E $(STD_CPP_DEFINES)
  1395. X          INSTALL = install
  1396. X               LD = ld
  1397. X             LINT = lint
  1398. X      LINTLIBFLAG = -C
  1399. X         LINTOPTS = -axz
  1400. X               LN = ln -s
  1401. X             MAKE = make
  1402. X               MV = mv
  1403. X               CP = cp
  1404. X
  1405. X           RANLIB = ranlib
  1406. X  RANLIBINSTFLAGS =
  1407. X
  1408. X               RM = rm -f
  1409. X            TROFF = psroff
  1410. X         MSMACROS = -ms
  1411. X              TBL = tbl
  1412. X              EQN = eqn
  1413. X     STD_INCLUDES =
  1414. X  STD_CPP_DEFINES =
  1415. X      STD_DEFINES =
  1416. X EXTRA_LOAD_FLAGS =
  1417. X  EXTRA_LIBRARIES =
  1418. X             TAGS = ctags
  1419. X
  1420. X    SHAREDCODEDEF = -DSHAREDCODE
  1421. X         SHLIBDEF = -DSUNSHLIB
  1422. X
  1423. X    PROTO_DEFINES =
  1424. X
  1425. X     INSTPGMFLAGS =
  1426. X
  1427. X     INSTBINFLAGS = -m 0755
  1428. X     INSTUIDFLAGS = -m 4755
  1429. X     INSTLIBFLAGS = -m 0644
  1430. X     INSTINCFLAGS = -m 0444
  1431. X     INSTMANFLAGS = -m 0444
  1432. X     INSTDATFLAGS = -m 0444
  1433. X    INSTKMEMFLAGS = -m 4755
  1434. X
  1435. X      PROJECTROOT = /usr/X11/R5
  1436. X
  1437. X     TOP_INCLUDES = -I$(INCROOT)
  1438. X
  1439. X      CDEBUGFLAGS = -O
  1440. X        CCOPTIONS = -pipe
  1441. X
  1442. X      ALLINCLUDES = $(INCLUDES) $(EXTRA_INCLUDES) $(TOP_INCLUDES) $(STD_INCLUDES)
  1443. X       ALLDEFINES = $(ALLINCLUDES) $(STD_DEFINES) $(EXTRA_DEFINES) $(PROTO_DEFINES) $(DEFINES)
  1444. X           CFLAGS = $(CDEBUGFLAGS) $(CCOPTIONS) $(ALLDEFINES)
  1445. X        LINTFLAGS = $(LINTOPTS) -DLINT $(ALLDEFINES)
  1446. X
  1447. X           LDLIBS = $(SYS_LIBRARIES) $(EXTRA_LIBRARIES)
  1448. X
  1449. X        LDOPTIONS = $(CDEBUGFLAGS) $(CCOPTIONS) $(LOCAL_LDFLAGS) -L$(USRLIBDIR)
  1450. X
  1451. X   LDCOMBINEFLAGS = -X -r
  1452. X      DEPENDFLAGS =
  1453. X
  1454. X        MACROFILE = sun.cf
  1455. X           RM_CMD = $(RM) *.CKP *.ln *.BAK *.bak *.o core errs ,* *~ *.a .emacs_* tags TAGS make.log MakeOut
  1456. X
  1457. X    IMAKE_DEFINES =
  1458. X
  1459. X         IRULESRC = $(CONFIGDIR)
  1460. X        IMAKE_CMD = $(IMAKE) -DUseInstalled -I$(IRULESRC) $(IMAKE_DEFINES)
  1461. X
  1462. X     ICONFIGFILES = $(IRULESRC)/Imake.tmpl $(IRULESRC)/Imake.rules \
  1463. X            $(IRULESRC)/Project.tmpl $(IRULESRC)/site.def \
  1464. X            $(IRULESRC)/$(MACROFILE) $(EXTRA_ICONFIGFILES)
  1465. X
  1466. # -------------------------------------------------------------------------
  1467. # X Window System Build Parameters
  1468. # $XConsortium: Project.tmpl,v 1.138 91/09/10 09:02:12 rws Exp $
  1469. X
  1470. # -------------------------------------------------------------------------
  1471. # X Window System make variables; this need to be coordinated with rules
  1472. X
  1473. X          PATHSEP = /
  1474. X        USRLIBDIR = /usr/X11/R5/lib
  1475. X           BINDIR = /usr/X11/R5/bin
  1476. X          INCROOT = /usr/X11/R5/include
  1477. X     BUILDINCROOT = $(TOP)
  1478. X      BUILDINCDIR = $(BUILDINCROOT)/X11
  1479. X      BUILDINCTOP = ..
  1480. X           INCDIR = $(INCROOT)/X11
  1481. X           ADMDIR = /usr/adm
  1482. X           LIBDIR = $(USRLIBDIR)/X11
  1483. X        CONFIGDIR = $(LIBDIR)/config
  1484. X       LINTLIBDIR = $(USRLIBDIR)/lint
  1485. X
  1486. X          FONTDIR = $(LIBDIR)/fonts
  1487. X         XINITDIR = $(LIBDIR)/xinit
  1488. X           XDMDIR = $(LIBDIR)/xdm
  1489. X           TWMDIR = $(LIBDIR)/twm
  1490. X          MANPATH = /usr/X11/R5/man
  1491. X    MANSOURCEPATH = $(MANPATH)/man
  1492. X        MANSUFFIX = n
  1493. X     LIBMANSUFFIX = 3
  1494. X           MANDIR = $(MANSOURCEPATH)$(MANSUFFIX)
  1495. X        LIBMANDIR = $(MANSOURCEPATH)$(LIBMANSUFFIX)
  1496. X           NLSDIR = $(LIBDIR)/nls
  1497. X        PEXAPIDIR = $(LIBDIR)/PEX
  1498. X      XAPPLOADDIR = $(LIBDIR)/app-defaults
  1499. X       FONTCFLAGS = -t
  1500. X
  1501. X     INSTAPPFLAGS = $(INSTDATFLAGS)
  1502. X
  1503. X            IMAKE = imake
  1504. X           DEPEND = makedepend
  1505. X              RGB = rgb
  1506. X
  1507. X            FONTC = bdftopcf
  1508. X
  1509. X        MKFONTDIR = mkfontdir
  1510. X        MKDIRHIER = /bin/sh $(BINDIR)/mkdirhier
  1511. X
  1512. X        CONFIGSRC = $(TOP)/config
  1513. X       DOCUTILSRC = $(TOP)/doc/util
  1514. X        CLIENTSRC = $(TOP)/clients
  1515. X          DEMOSRC = $(TOP)/demos
  1516. X           LIBSRC = $(TOP)/lib
  1517. X          FONTSRC = $(TOP)/fonts
  1518. X       INCLUDESRC = $(TOP)/X11
  1519. X        SERVERSRC = $(TOP)/server
  1520. X          UTILSRC = $(TOP)/util
  1521. X        SCRIPTSRC = $(UTILSRC)/scripts
  1522. X       EXAMPLESRC = $(TOP)/examples
  1523. X       CONTRIBSRC = $(TOP)/../contrib
  1524. X           DOCSRC = $(TOP)/doc
  1525. X           RGBSRC = $(TOP)/rgb
  1526. X        DEPENDSRC = $(UTILSRC)/makedepend
  1527. X         IMAKESRC = $(CONFIGSRC)
  1528. X         XAUTHSRC = $(LIBSRC)/Xau
  1529. X          XLIBSRC = $(LIBSRC)/X
  1530. X           XMUSRC = $(LIBSRC)/Xmu
  1531. X       TOOLKITSRC = $(LIBSRC)/Xt
  1532. X       AWIDGETSRC = $(LIBSRC)/Xaw
  1533. X       OLDXLIBSRC = $(LIBSRC)/oldX
  1534. X      XDMCPLIBSRC = $(LIBSRC)/Xdmcp
  1535. X      BDFTOSNFSRC = $(FONTSRC)/bdftosnf
  1536. X      BDFTOSNFSRC = $(FONTSRC)/clients/bdftosnf
  1537. X      BDFTOPCFSRC = $(FONTSRC)/clients/bdftopcf
  1538. X     MKFONTDIRSRC = $(FONTSRC)/clients/mkfontdir
  1539. X         FSLIBSRC = $(FONTSRC)/lib/fs
  1540. X    FONTSERVERSRC = $(FONTSRC)/server
  1541. X     EXTENSIONSRC = $(TOP)/extensions
  1542. X         XILIBSRC = $(EXTENSIONSRC)/lib/xinput
  1543. X      PHIGSLIBSRC = $(EXTENSIONSRC)/lib/PEX
  1544. X
  1545. # $XConsortium: sunLib.tmpl,v 1.11 91/07/31 11:32:08 rws Exp $
  1546. X
  1547. SHLIBLDFLAGS = -assert pure-text
  1548. PICFLAGS = -pic
  1549. X
  1550. X  DEPEXTENSIONLIB =
  1551. X     EXTENSIONLIB = -lXext
  1552. X
  1553. X          DEPXLIB = $(DEPEXTENSIONLIB)
  1554. X             XLIB = $(EXTENSIONLIB) -lX11
  1555. X
  1556. X        DEPXMULIB = $(USRLIBDIR)/libXmu.sa.$(SOXMUREV)
  1557. X           XMULIB = -lXmu
  1558. X
  1559. X       DEPOLDXLIB =
  1560. X          OLDXLIB = -loldX
  1561. X
  1562. X      DEPXTOOLLIB = $(USRLIBDIR)/libXt.sa.$(SOXTREV)
  1563. X         XTOOLLIB = -lXt
  1564. X
  1565. X        DEPXAWLIB = $(USRLIBDIR)/libXaw.sa.$(SOXAWREV)
  1566. X           XAWLIB = -lXaw
  1567. X
  1568. X        DEPXILIB =
  1569. X           XILIB = -lXi
  1570. X
  1571. X        SOXLIBREV = 4.10
  1572. X          SOXTREV = 4.10
  1573. X         SOXAWREV = 5.0
  1574. X        SOOLDXREV = 4.10
  1575. X         SOXMUREV = 4.10
  1576. X        SOXEXTREV = 4.10
  1577. X      SOXINPUTREV = 4.10
  1578. X
  1579. X      DEPXAUTHLIB = $(USRLIBDIR)/libXau.a
  1580. X         XAUTHLIB =  -lXau
  1581. X      DEPXDMCPLIB = $(USRLIBDIR)/libXdmcp.a
  1582. X         XDMCPLIB =  -lXdmcp
  1583. X
  1584. X        DEPPHIGSLIB = $(USRLIBDIR)/libphigs.a
  1585. X           PHIGSLIB =  -lphigs
  1586. X
  1587. X       DEPXBSDLIB = $(USRLIBDIR)/libXbsd.a
  1588. X          XBSDLIB =  -lXbsd
  1589. X
  1590. X LINTEXTENSIONLIB = $(LINTLIBDIR)/llib-lXext.ln
  1591. X         LINTXLIB = $(LINTLIBDIR)/llib-lX11.ln
  1592. X          LINTXMU = $(LINTLIBDIR)/llib-lXmu.ln
  1593. X        LINTXTOOL = $(LINTLIBDIR)/llib-lXt.ln
  1594. X          LINTXAW = $(LINTLIBDIR)/llib-lXaw.ln
  1595. X           LINTXI = $(LINTLIBDIR)/llib-lXi.ln
  1596. X        LINTPHIGS = $(LINTLIBDIR)/llib-lphigs.ln
  1597. X
  1598. X          DEPLIBS = $(DEPXAWLIB) $(DEPXMULIB) $(DEPXTOOLLIB) $(DEPXLIB)
  1599. X
  1600. X         DEPLIBS1 = $(DEPLIBS)
  1601. X         DEPLIBS2 = $(DEPLIBS)
  1602. X         DEPLIBS3 = $(DEPLIBS)
  1603. X
  1604. # -------------------------------------------------------------------------
  1605. # Imake rules for building libraries, programs, scripts, and data files
  1606. # rules:  $XConsortium: Imake.rules,v 1.123 91/09/16 20:12:16 rws Exp $
  1607. X
  1608. # -------------------------------------------------------------------------
  1609. # start of Imakefile
  1610. X
  1611. OBJS1 = xgrabsc.o
  1612. OBJS2 = xgrab.o
  1613. PROGRAMS = xgrabsc xgrab
  1614. X
  1615. all:: $(PROGRAMS)
  1616. X
  1617. xgrabsc:  $(OBJS1)
  1618. X    $(RM) $@
  1619. X    $(CC) -o $@  $(OBJS1) $(LDOPTIONS)   $(LDLIBS)  $(XMULIB) $(XLIB) $(EXTRA_LOAD_FLAGS)
  1620. X
  1621. clean::
  1622. X    $(RM) xgrabsc
  1623. X
  1624. xgrab:  $(OBJS2)
  1625. X    $(RM) $@
  1626. X    $(CC) -o $@  $(OBJS2) $(LDOPTIONS)   $(LDLIBS)  $(XAWLIB) $(XTOOLLIB) $(XMULIB) $(XLIB) $(EXTRA_LOAD_FLAGS)
  1627. X
  1628. clean::
  1629. X    $(RM) xgrab
  1630. X
  1631. xgrabsc.o:: process.hc get.hc mem.hc convert.hc write.hc checkvm.h cmdopts.h
  1632. X
  1633. xgrab.o:: xgrab_ad.h
  1634. X
  1635. xgrab_ad.h: XGrab.ad
  1636. X    rm -f xgrab_ad.h
  1637. X    sed -n '1,/! ====/p' XGrab.ad | sed -n -f ad2c.sed >xgrab_ad.h
  1638. X
  1639. install:: xgrabsc xgrab
  1640. X    @if [ -d $(DESTDIR) $(BINDIR) ]; then set +x; \
  1641. X    else (set -x; $(MKDIRHIER) $(DESTDIR) $(BINDIR)); fi
  1642. X    @case '${MFLAGS}' in *[i]*) set +e;; esac; \
  1643. X    for i in xgrabsc xgrab; do \
  1644. X    (set -x; $(INSTALL) -c $(INSTALLFLAGS) $$i $(DESTDIR) $(BINDIR)); \
  1645. X    done
  1646. X
  1647. install.man:: xgrabsc.man
  1648. X    @if [ -d $(DESTDIR) $(MANDIR) ]; then set +x; \
  1649. X    else (set -x; $(MKDIRHIER) $(DESTDIR) $(MANDIR)); fi
  1650. X    $(INSTALL) -c $(INSTMANFLAGS) xgrabsc.man $(DESTDIR) $(MANDIR)/xgrabsc.$(MANSUFFIX)
  1651. X
  1652. install.man:: xgrab.man
  1653. X    @if [ -d $(DESTDIR) $(MANDIR) ]; then set +x; \
  1654. X    else (set -x; $(MKDIRHIER) $(DESTDIR) $(MANDIR)); fi
  1655. X    $(INSTALL) -c $(INSTMANFLAGS) xgrab.man $(DESTDIR) $(MANDIR)/xgrab.$(MANSUFFIX)
  1656. X
  1657. install:: XGrab.ad
  1658. X    @if [ -d $(DESTDIR)$(XAPPLOADDIR) ]; then set +x; \
  1659. X    else (set -x; $(MKDIRHIER) $(DESTDIR)$(XAPPLOADDIR)); fi
  1660. X    $(INSTALL) -c $(INSTAPPFLAGS) XGrab.ad $(DESTDIR)$(XAPPLOADDIR)/XGrab
  1661. X
  1662. # -------------------------------------------------------------------------
  1663. # common rules for all Makefiles - do not edit
  1664. X
  1665. emptyrule::
  1666. X
  1667. clean::
  1668. X    $(RM_CMD) "#"*
  1669. X
  1670. Makefile::
  1671. X    -@if [ -f Makefile ]; then set -x; \
  1672. X    $(RM) Makefile.bak; $(MV) Makefile Makefile.bak; \
  1673. X    else exit 0; fi
  1674. X    $(IMAKE_CMD) -DTOPDIR=$(TOP) -DCURDIR=$(CURRENT_DIR)
  1675. X
  1676. tags::
  1677. X    $(TAGS) -w *.[ch]
  1678. X    $(TAGS) -xw *.[ch] > TAGS
  1679. X
  1680. saber:
  1681. X    # load $(ALLDEFINES) $(SRCS)
  1682. X
  1683. osaber:
  1684. X    # load $(ALLDEFINES) $(OBJS)
  1685. X
  1686. # -------------------------------------------------------------------------
  1687. # empty rules for directories that do not have SUBDIRS - do not edit
  1688. X
  1689. install::
  1690. X    @echo "install in $(CURRENT_DIR) done"
  1691. X
  1692. install.man::
  1693. X    @echo "install.man in $(CURRENT_DIR) done"
  1694. X
  1695. Makefiles::
  1696. X
  1697. includes::
  1698. X
  1699. # -------------------------------------------------------------------------
  1700. # dependencies generated by makedepend
  1701. X
  1702. SHAR_EOF
  1703. chmod 0644 Makefile ||
  1704. echo 'restore of Makefile failed'
  1705. Wc_c="`wc -c < 'Makefile'`"
  1706. test 10735 -eq "$Wc_c" ||
  1707.     echo 'Makefile: original size 10735, current size' "$Wc_c"
  1708. rm -f _shar_wnt_.tmp
  1709. fi
  1710. # ============= xgrab_ad.h ==============
  1711. if test -f 'xgrab_ad.h' -a X"$1" != X"-c"; then
  1712.     echo 'x - skipping xgrab_ad.h (File already exists)'
  1713.     rm -f _shar_wnt_.tmp
  1714. else
  1715. > _shar_wnt_.tmp
  1716. echo 'x - extracting xgrab_ad.h (Text)'
  1717. sed 's/^X//' << 'SHAR_EOF' > 'xgrab_ad.h' &&
  1718. "XGrab*.title.label: X-Windows Screen Grabber",
  1719. "XGrab*.title.font:   *-helvetica-medium-r-normal--24-*",
  1720. "XGrab*.title.horizDistance: 70",
  1721. "XGrab*.box1.horizDistance: 0",
  1722. "XGrab*.box1.vertDistance:  55",
  1723. "XGrab*.inputLbl.horizDistance:     5",
  1724. "XGrab*.inputLbl.vertDistance:      0",
  1725. "XGrab*.inputLbl.font: *-helvetica-medium-o-normal--14-*",
  1726. "XGrab*.inputLbl.label: Input Options---------------------------------------",
  1727. "XGrab*.click.horizDistance:   10",
  1728. "XGrab*.click.vertDistance:    30",
  1729. "XGrab*.click.label: Click on Window",
  1730. "XGrab*.stretch.horizDistance:   135",
  1731. "XGrab*.stretch.vertDistance:     30",
  1732. "XGrab*.stretch.label: Stretch Rectangle",
  1733. "XGrab*.stretch.state: 1",
  1734. "XGrab*.key.horizDistance:   265",
  1735. "XGrab*.key.vertDistance:     30",
  1736. "XGrab*.key.label: Wait for Control key",
  1737. "XGrab*.root.horizDistance: 10",
  1738. "XGrab*.root.vertDistance:  60",
  1739. "XGrab*.root.label: Grab Whole Screen",
  1740. "XGrab*.sleeplbl.horizDistance: 10",
  1741. "XGrab*.sleeplbl.vertDistance:  90",
  1742. "XGrab*.sleeplbl.label: Sleep before starting",
  1743. "XGrab*.sleeptime.horizDistance:   145",
  1744. "XGrab*.sleeptime.vertDistance:     90",
  1745. "XGrab*.sleeptime.width:            30",
  1746. "XGrab*.sleeptime*string: 3",
  1747. "XGrab*.psleeplbl.horizDistance:  185",
  1748. "XGrab*.psleeplbl.vertDistance:    90",
  1749. "XGrab*.psleeplbl.label: Sleep after selecting",
  1750. "XGrab*.psleeptime.horizDistance:   320",
  1751. "XGrab*.psleeptime.vertDistance:     90",
  1752. "XGrab*.psleeptime.width:            30",
  1753. "XGrab*.psleeptime*string: 0",
  1754. "XGrab*.host.horizDistance:   10",
  1755. "XGrab*.host.vertDistance:   120",
  1756. "XGrab*.host.label: Use Alternate Display:",
  1757. "XGrab*.host.shapeStyle: oval",
  1758. "XGrab*.host.width:        140",
  1759. "XGrab*.host.state: 0",
  1760. "XGrab*.hostText.horizDistance:   160",
  1761. "XGrab*.hostText.vertDistance:    120",
  1762. "XGrab*.box2.horizDistance:   0",
  1763. "XGrab*.box2.vertDistance:  205",
  1764. "XGrab*.outputFormat.horizDistance:   5",
  1765. "XGrab*.outputFormat.vertDistance:    0",
  1766. "XGrab*.outputFormat.font: *-helvetica-medium-o-normal--14-*",
  1767. "XGrab*.outputFormat.label: Output Format--------------------------------------",
  1768. "XGrab*.xwd.horizDistance:   10",
  1769. "XGrab*.xwd.vertDistance:    30",
  1770. "XGrab*.xwd.label: X Window Dump",
  1771. "XGrab*.ps.horizDistance:   120",
  1772. "XGrab*.ps.vertDistance:     30",
  1773. "XGrab*.ps.label: PostScript",
  1774. "XGrab*.ps.state: 1",
  1775. "XGrab*.puzzle.horizDistance:   197",
  1776. "XGrab*.puzzle.vertDistance:     30",
  1777. "XGrab*.puzzle.label: Puzzle",
  1778. "XGrab*.xpm.horizDistance:    10",
  1779. "XGrab*.xpm.vertDistance:     60",
  1780. "XGrab*.xpm.label: Bitmap/XPM",
  1781. "XGrab*.xpm2.horizDistance:   100",
  1782. "XGrab*.xpm2.vertDistance:     60",
  1783. "XGrab*.xpm2.label: Bm/XPM2",
  1784. "XGrab*.xpm3.horizDistance:   175",
  1785. "XGrab*.xpm3.vertDistance:     60",
  1786. "XGrab*.xpm3.label: Bm/XPM3",
  1787. "XGrab*.box3.horizDistance:   0",
  1788. "XGrab*.box3.vertDistance:  300",
  1789. "XGrab*.psOptions.horizDistance:   5",
  1790. "XGrab*.psOptions.vertDistance:    0",
  1791. "XGrab*.psOptions.font: *-helvetica-medium-o-normal--14-*",
  1792. "XGrab*.psOptions.label: PostScript Options-----------------------------------",
  1793. "XGrab*.compress.horizDistance:   10",
  1794. "XGrab*.compress.vertDistance:    30",
  1795. "XGrab*.compress.shapeStyle: oval",
  1796. "XGrab*.compress.label: Compress",
  1797. "XGrab*.color.horizDistance:    80",
  1798. "XGrab*.color.vertDistance:     30",
  1799. "XGrab*.color.shapeStyle: oval",
  1800. "XGrab*.color.label: Color Output",
  1801. "XGrab*.binary.horizDistance: 170",
  1802. "XGrab*.binary.vertDistance: 30",
  1803. "XGrab*.binary.shapeStyle: oval",
  1804. "XGrab*.binary.label: Binary",
  1805. "XGrab*.landscape.horizDistance: 10",
  1806. "XGrab*.landscape.vertDistance: 60",
  1807. "XGrab*.landscape.width: 80",
  1808. "XGrab*.landscape.label: Landscape",
  1809. "XGrab*.encap.horizDistance:   100",
  1810. "XGrab*.encap.vertDistance:     60",
  1811. "XGrab*.encap.width: 90",
  1812. "XGrab*.encap.label: Encapsulated",
  1813. "XGrab*.epsi.horizDistance:   200",
  1814. "XGrab*.epsi.vertDistance:     60",
  1815. "XGrab*.epsi.label: Encapsulated+Preview",
  1816. "XGrab*.pageWidth.horizDistance: 10",
  1817. "XGrab*.pageWidth.vertDistance:  90",
  1818. "XGrab*.pageWidth.label: Paper Width",
  1819. "XGrab*.pageWidthText.horizDistance: 90",
  1820. "XGrab*.pageWidthText.vertDistance:  90",
  1821. "XGrab*.pageWidthText.width: 35",
  1822. "XGrab*.pageWidthText*string: 8.5",
  1823. "XGrab*.pageHeight.horizDistance: 130",
  1824. "XGrab*.pageHeight.vertDistance:  90",
  1825. "XGrab*.pageHeight.label: Height",
  1826. "XGrab*.pageHeightText.horizDistance: 175",
  1827. "XGrab*.pageHeightText.vertDistance:  90",
  1828. "XGrab*.pageHeightText.width: 35",
  1829. "XGrab*.pageHeightText*string: 11.0",
  1830. "XGrab*.horizMargin.horizDistance: 230",
  1831. "XGrab*.horizMargin.vertDistance:  90",
  1832. "XGrab*.horizMargin.label: Margin Width",
  1833. "XGrab*.horizMarginText.horizDistance: 315",
  1834. "XGrab*.horizMarginText.vertDistance:  90",
  1835. "XGrab*.horizMarginText.width: 35",
  1836. "XGrab*.horizMarginText*string: 0.5",
  1837. "XGrab*.vertMargin.horizDistance: 355",
  1838. "XGrab*.vertMargin.vertDistance:  90",
  1839. "XGrab*.vertMargin.label:  Height",
  1840. "XGrab*.vertMarginText.horizDistance: 400",
  1841. "XGrab*.vertMarginText.vertDistance:  90",
  1842. "XGrab*.vertMarginText.width: 35",
  1843. "XGrab*.vertMarginText*string: 0.5",
  1844. "XGrab*.box4.horizDistance: 0",
  1845. "XGrab*.box4.vertDistance: 420",
  1846. "XGrab*.prOptions.horizDistance:   5",
  1847. "XGrab*.prOptions.vertDistance:    0",
  1848. "XGrab*.prOptions.font: *-helvetica-medium-o-normal--14-*",
  1849. "XGrab*.prOptions.label: Image Processing Options-----",
  1850. "XGrab*.borders.horizDistance:   10",
  1851. "XGrab*.borders.vertDistance:    30",
  1852. "XGrab*.borders.shapeStyle: oval",
  1853. "XGrab*.borders.label: Include Borders",
  1854. "XGrab*.borders.width:          105",
  1855. "XGrab*.borders.state:            1",
  1856. "XGrab*.reverse.horizDistance:   10",
  1857. "XGrab*.reverse.vertDistance:    60",
  1858. "XGrab*.reverse.shapeStyle: oval",
  1859. SHAR_EOF
  1860. true || echo 'restore of xgrab_ad.h failed'
  1861. fi
  1862. echo 'End of  part 4'
  1863. echo 'File xgrab_ad.h is continued in part 5'
  1864. echo 5 > _shar_seq_.tmp
  1865. exit 0
  1866. -- 
  1867. ---
  1868. Senior Systems Scientist        mail: dcmartin@msi.com
  1869. Molecular Simulations, Inc.        uucp: uunet!dcmartin
  1870. 796 North Pastoria Avenue        at&t: 408/522-9236
  1871.