home *** CD-ROM | disk | FTP | other *** search
/ Source Code 1994 March / Source_Code_CD-ROM_Walnut_Creek_March_1994.iso / compsrcs / x / volume17 / xtexcad1 / part06 < prev    next >
Encoding:
Text File  |  1992-04-20  |  50.2 KB  |  2,011 lines

  1. Newsgroups: comp.sources.x
  2. Path: uunet!zaphod.mps.ohio-state.edu!mips!msi!dcmartin
  3. From: Fritz Haubensak <hsk@informatik.uni-wuerzburg.de>
  4. Subject: v17i070: TeXcad (X) version 1.2, Part06/10
  5. Message-ID: <1992Apr21.131327.2416@msi.com>
  6. Originator: dcmartin@fascet
  7. Sender: dcmartin@msi.com (David C. Martin - Moderator)
  8. Nntp-Posting-Host: fascet
  9. Organization: Molecular Simulations, Inc.
  10. References: <csx-17i065-xtexcad-1.2@uunet.UU.NET>
  11. Date: Tue, 21 Apr 1992 13:13:27 GMT
  12. Approved: dcmartin@msi.com
  13. Lines: 1996
  14.  
  15. Submitted-by: Fritz Haubensak <hsk@informatik.uni-wuerzburg.de>
  16. Posting-number: Volume 17, Issue 70
  17. Archive-name: xtexcad-1.2/part06
  18.  
  19. # this is part.06 (part 6 of a multipart archive)
  20. # do not concatenate these parts, unpack them in order with /bin/sh
  21. # file io_trans.c continued
  22. #
  23. if test ! -r _shar_seq_.tmp; then
  24.     echo 'Please unpack part 1 first!'
  25.     exit 1
  26. fi
  27. (read Scheck
  28.  if test "$Scheck" != 6; then
  29.     echo Please unpack part "$Scheck" next!
  30.     exit 1
  31.  else
  32.     exit 0
  33.  fi
  34. ) < _shar_seq_.tmp || exit 1
  35. if test ! -f _shar_wnt_.tmp; then
  36.     echo 'x - still skipping io_trans.c'
  37. else
  38. echo 'x - continuing file io_trans.c'
  39. sed 's/^X//' << 'SHAR_EOF' >> 'io_trans.c' &&
  40. X            (*y_slp) = 0;
  41. X            (*len) = (x < h) ? (h - x) : (x - h);
  42. X        } else if (abs((int) (h - x)) == 0)
  43. X        {    /* vertical */
  44. X            (*y_slp) = (y < v) ? 1 : -1;
  45. X            (*x_slp) = 0;
  46. X            (*len) = (y < v) ? (v - y) : (y - v);
  47. X        } else
  48. X        {    /* normal line */
  49. X            (*x_slp) = (x < h) ? a_slope[i][1] : -a_slope[i][1];
  50. X            (*y_slp) = (y < v) ? a_slope[i][2] : -a_slope[i][2];
  51. X            (*len) = (x < h) ? (h - x) : (x - h);
  52. X        }
  53. X    }    /* else */
  54. X
  55. X    /* (*len)+=1.0; */
  56. X
  57. }
  58. X
  59. X
  60. void
  61. manage_bezier(int what, FILE * fd)
  62. {/* medium must be open */
  63. X
  64. X  int pts;
  65. X
  66. X
  67. X    bezier_marker = bezier_start;
  68. X
  69. X    if (bezier_start == NULL)
  70. X        return;
  71. X
  72. X    while (True)
  73. X    {
  74. X
  75. X        if (what == 0)
  76. X        {
  77. X            dimension_update(bezier_marker->ax, bezier_marker->ay);
  78. X            dimension_update(bezier_marker->ex, bezier_marker->ey);
  79. X            dimension_update(bezier_marker->sx, bezier_marker->sy);  
  80. X        } else if (what == 1)
  81. X        {
  82. X            pts=calc_distance((int)bezier_marker->ax, (int)bezier_marker->ay,
  83. X                       (int)bezier_marker->sx, (int)bezier_marker->sy)
  84. X                 +
  85. X                 calc_distance((int)bezier_marker->sx, (int)bezier_marker->sy,
  86. X                       (int)bezier_marker->ex, (int)bezier_marker->ey);
  87. X
  88. X            fprintf(fd,"\\bezier%i(%03.2f,%03.2f)(%03.2f,%03.2f)(%03.2f,%03.2f)\n",pts,
  89. X                    bezier_marker->ax, newy(bezier_marker->ay),
  90. X                    bezier_marker->sx, newy(bezier_marker->sy),
  91. X                    bezier_marker->ex, newy(bezier_marker->ey));
  92. X        } else
  93. X        {
  94. X            bezier_marker->ax+=xmotion;
  95. X            bezier_marker->ay+=ymotion;
  96. X            bezier_marker->ex+=xmotion;
  97. X            bezier_marker->ey+=ymotion;
  98. X            bezier_marker->sx+=xmotion;
  99. X            bezier_marker->sy+=ymotion;
  100. X        }
  101. X
  102. X        if (bezier_marker == bezier_curr)
  103. X            return;
  104. X
  105. X        bezier_marker = bezier_marker->next;
  106. X
  107. X    }
  108. }
  109. X
  110. X
  111. X
  112. void
  113. manage_line(int what, FILE * fd)
  114. {/* medium must be open */
  115. X    int             x_slp, y_slp;
  116. X    float           len;
  117. X    strich_marker = strich_start;
  118. X
  119. X    if (strich_start == NULL)
  120. X        return;
  121. X
  122. X    while (True)
  123. X    {
  124. X
  125. X        if (what == 0)
  126. X        {
  127. X            dimension_update(strich_marker->x, strich_marker->y);
  128. X            dimension_update(strich_marker->h, strich_marker->v);
  129. X        } else if (what==1)
  130. X        {
  131. X            get_line_info(strich_marker->x, strich_marker->y,
  132. X                      strich_marker->h, strich_marker->v,
  133. X                      &x_slp, &y_slp, &len);
  134. X            if ((line_length!=0) && (len<10.0)) len=10.0;
  135. X            fprintf(fd, "\\put(%03.2f,%03.2f){\\line(%i,%i){%03.2f}}\n",
  136. X                strich_marker->x, newy(strich_marker->y), x_slp, y_slp, len);
  137. X        } else
  138. X        {
  139. X            strich_marker->x+=xmotion;
  140. X            strich_marker->h+=xmotion;
  141. X            strich_marker->y+=ymotion;
  142. X            strich_marker->v+=ymotion;
  143. X            /* all moved now */
  144. X        }
  145. X            
  146. X
  147. X        if (strich_marker == strich_curr)
  148. X            return;
  149. X
  150. X        strich_marker = strich_marker->next;
  151. X
  152. X    }
  153. }
  154. X
  155. X
  156. X
  157. void
  158. manage_vector(int what, FILE * fd)
  159. {/* medium must be open */
  160. X    int             x_slp, y_slp;
  161. X    float           len;
  162. X    pfeil_marker = pfeil_start;
  163. X
  164. X    if (pfeil_start == NULL)
  165. X        return;
  166. X
  167. X    while (True)
  168. X    {
  169. X
  170. X        if (what == 0)
  171. X        {
  172. X            dimension_update(pfeil_marker->x, pfeil_marker->y);
  173. X            dimension_update(pfeil_marker->h, pfeil_marker->v);
  174. X        } else if (what == 1)
  175. X        {
  176. X            get_vector_info(pfeil_marker->x, pfeil_marker->y,
  177. X                    pfeil_marker->h, pfeil_marker->v,
  178. X                    &x_slp, &y_slp, &len);
  179. X            if ((line_length!=0) && (len<10.0)) len=10.0;
  180. X            fprintf(fd, "\\put(%03.2f,%03.2f){\\vector(%i,%i){%03.2f}}\n",
  181. X                pfeil_marker->x, newy(pfeil_marker->y), x_slp, y_slp, len);
  182. X        } else
  183. X        {
  184. X            pfeil_marker->x+=xmotion;
  185. X            pfeil_marker->h+=xmotion;
  186. X            pfeil_marker->y+=ymotion;
  187. X            pfeil_marker->v+=ymotion;
  188. X            /* all moved now */
  189. X        }
  190. X
  191. X        if (pfeil_marker == pfeil_curr)
  192. X            return;
  193. X
  194. X        pfeil_marker = pfeil_marker->next;
  195. X
  196. X    }
  197. }
  198. X
  199. X
  200. X
  201. void
  202. manage_filled(int what, FILE * fd)
  203. {/* medium must be open */
  204. X
  205. X
  206. X    filledBox_marker = filledBox_start;
  207. X
  208. X    if (filledBox_start == NULL)
  209. X        return;
  210. X
  211. X    while (True)
  212. X    {
  213. X
  214. X        /* normate rectangle */
  215. X        norm_rectangle(&filledBox_marker->x, &filledBox_marker->y,
  216. X                   &filledBox_marker->h, &filledBox_marker->v);
  217. X
  218. X        if (what == 0)
  219. X        {
  220. X            dimension_update(filledBox_marker->x, filledBox_marker->y);
  221. X            dimension_update(filledBox_marker->h, filledBox_marker->v);
  222. X        } else if (what == 1)
  223. X        {
  224. X            fprintf(fd, "\\put(%03.2f,%03.2f){\\rule{%03.2f\\unitlength}{%03.2f\\unitlength}}\n",
  225. X                 filledBox_marker->x, newy(filledBox_marker->v),
  226. X                (filledBox_marker->h - filledBox_marker->x),
  227. X                (filledBox_marker->v - filledBox_marker->y));
  228. X        } else
  229. X        {
  230. X            filledBox_marker->x+=xmotion;
  231. X            filledBox_marker->h+=xmotion;
  232. X            filledBox_marker->y+=ymotion;
  233. X            filledBox_marker->v+=ymotion;
  234. X            /* all moved now */
  235. X        }
  236. X
  237. X        if (filledBox_marker == filledBox_curr)
  238. X            return;
  239. X
  240. X        filledBox_marker = filledBox_marker->next;
  241. X
  242. X    }
  243. }
  244. X
  245. void
  246. manage_framed(int what, FILE * fd)
  247. {/* medium must be open */
  248. X
  249. X
  250. X    framedBox_marker = framedBox_start;
  251. X
  252. X    if (framedBox_start == NULL)
  253. X        return;
  254. X
  255. X    while (True)
  256. X    {
  257. X
  258. X        /* normate rectangle */
  259. X        norm_rectangle(&framedBox_marker->x, &framedBox_marker->y,
  260. X                   &framedBox_marker->h, &framedBox_marker->v);
  261. X
  262. X        if (what == 0)
  263. X        {
  264. X            dimension_update(framedBox_marker->x, framedBox_marker->y);
  265. X            dimension_update(framedBox_marker->h, framedBox_marker->v);
  266. X        } else if (what == 1)
  267. X        {
  268. X            fprintf(fd, "\\put(%03.2f,%03.2f){\\framebox(%03.2f,%03.2f)",
  269. X                 framedBox_marker->x, newy(framedBox_marker->v),
  270. X                (framedBox_marker->h - framedBox_marker->x),
  271. X                (framedBox_marker->v - framedBox_marker->y));
  272. X
  273. X            fprintf(fd, "[");
  274. X
  275. X            switch (framedBox_marker->textpos[0])
  276. X            {
  277. X            case 'b':
  278. X                fprintf(fd, "b");
  279. X                break;
  280. X            case 't':
  281. X                fprintf(fd, "t");
  282. X                break;
  283. X            case 'l':
  284. X                fprintf(fd, "l");
  285. X                break;
  286. X            case 'r':
  287. X                fprintf(fd, "r");
  288. X                break;
  289. X            default:
  290. X                fprintf(fd, "c");
  291. X                break;
  292. X            }
  293. X
  294. X            switch (framedBox_marker->textpos[1])
  295. X            {
  296. X            case 'b':
  297. X                fprintf(fd, "b");
  298. X                break;
  299. X            case 't':
  300. X                fprintf(fd, "t");
  301. X                break;
  302. X            case 'l':
  303. X                fprintf(fd, "l");
  304. X                break;
  305. X            case 'r':
  306. X                fprintf(fd, "r");
  307. X                break;
  308. X            default:
  309. X                fprintf(fd, "c");
  310. X                break;
  311. X            }
  312. X
  313. X            framedBox_marker->text[strlen(framedBox_marker->text)] = '\0';
  314. X
  315. X            fprintf(fd, "]{%s}}\n", framedBox_marker->text);
  316. X
  317. X        } else
  318. X        {
  319. X            framedBox_marker->x+=xmotion;
  320. X            framedBox_marker->h+=xmotion;
  321. X            framedBox_marker->y+=ymotion;
  322. X            framedBox_marker->v+=ymotion;
  323. X            /* all moved now */
  324. X        }
  325. X
  326. X        if (framedBox_marker == framedBox_curr)
  327. X            return;
  328. X
  329. X        framedBox_marker = framedBox_marker->next;
  330. X
  331. X    }
  332. }
  333. X
  334. X
  335. void
  336. manage_dashed(int what, FILE * fd)
  337. {/* medium must be open */
  338. X
  339. X
  340. X    dashedBox_marker = dashedBox_start;
  341. X
  342. X    if (dashedBox_start == NULL)
  343. X        return;
  344. X
  345. X    while (True)
  346. X    {
  347. X
  348. X        /* normate rectangle */
  349. X        norm_rectangle(&dashedBox_marker->x, &dashedBox_marker->y,
  350. X                   &dashedBox_marker->h, &dashedBox_marker->v);
  351. X
  352. X        if (what == 0)
  353. X        {
  354. X            dimension_update(dashedBox_marker->x, dashedBox_marker->y);
  355. X            dimension_update(dashedBox_marker->h, dashedBox_marker->v);
  356. X        } else if (what == 1)
  357. X        {
  358. X            fprintf(fd, "\\put(%03.2f,%03.2f){\\dashbox{0.5}(%03.2f,%03.2f)",
  359. X                 dashedBox_marker->x, newy(dashedBox_marker->v),
  360. X                (dashedBox_marker->h - dashedBox_marker->x),
  361. X                (dashedBox_marker->v - dashedBox_marker->y));
  362. X
  363. X            fprintf(fd, "[");
  364. X
  365. X            switch (dashedBox_marker->textpos[0])
  366. X            {
  367. X            case 'b':
  368. X                fprintf(fd, "b");
  369. X                break;
  370. X            case 't':
  371. X                fprintf(fd, "t");
  372. X                break;
  373. X            case 'l':
  374. X                fprintf(fd, "l");
  375. X                break;
  376. X            case 'r':
  377. X                fprintf(fd, "r");
  378. X                break;
  379. X            default:
  380. X                fprintf(fd, "c");
  381. X                break;
  382. X            }
  383. X
  384. X            switch (dashedBox_marker->textpos[1])
  385. X            {
  386. X            case 'b':
  387. X                fprintf(fd, "b");
  388. X                break;
  389. X            case 't':
  390. X                fprintf(fd, "t");
  391. X                break;
  392. X            case 'l':
  393. X                fprintf(fd, "l");
  394. X                break;
  395. X            case 'r':
  396. X                fprintf(fd, "r");
  397. X                break;
  398. X            default:
  399. X                fprintf(fd, "c");
  400. X                break;
  401. X            }
  402. X
  403. X            dashedBox_marker->text[strlen(dashedBox_marker->text)] = '\0';
  404. X
  405. X            fprintf(fd, "]{%s}}\n", dashedBox_marker->text);
  406. X
  407. X        } else
  408. X        {
  409. X            dashedBox_marker->x+=xmotion;
  410. X            dashedBox_marker->h+=xmotion;
  411. X            dashedBox_marker->y+=ymotion;
  412. X            dashedBox_marker->v+=ymotion;
  413. X            /* all moved now */
  414. X        }
  415. X
  416. X        if (dashedBox_marker == dashedBox_curr)
  417. X            return;
  418. X
  419. X        dashedBox_marker = dashedBox_marker->next;
  420. X
  421. X    }
  422. }
  423. X
  424. X
  425. X
  426. void
  427. manage_kreis(int what, FILE * fd)
  428. {/* medium must be open */
  429. X
  430. X
  431. X    kreis_marker = kreis_start;
  432. X
  433. X    if (kreis_start == NULL)
  434. X        return;
  435. X
  436. X    while (True)
  437. X    {
  438. X
  439. X        if (what == 0)
  440. X        {
  441. X            dimension_update(kreis_marker->x - (float) kreis_marker->radius,
  442. X                kreis_marker->y - (float) kreis_marker->radius);
  443. X            dimension_update(kreis_marker->x + (float) kreis_marker->radius,
  444. X                kreis_marker->y + (float) kreis_marker->radius);
  445. X        } else if (what == 1)
  446. X        {
  447. X            fprintf(fd, "\\put(%03.2f,%03.2f){\\circle{%i}}\n",
  448. X                kreis_marker->x, newy(kreis_marker->y),
  449. X                kreis_marker->radius + kreis_marker->radius);
  450. X        } else
  451. X        {
  452. X            kreis_marker->x+=xmotion;
  453. X            kreis_marker->y+=ymotion;
  454. X        }
  455. X
  456. X        if (kreis_marker == kreis_curr)
  457. X            return;
  458. X
  459. X        kreis_marker = kreis_marker->next;
  460. X
  461. X    }
  462. }
  463. X
  464. X
  465. void
  466. manage_disc(int what, FILE * fd)
  467. {/* medium must be open */
  468. X
  469. X
  470. X    disc_marker = disc_start;
  471. X
  472. X    if (disc_start == NULL)
  473. X        return;
  474. X
  475. X    while (True)
  476. X    {
  477. X
  478. X        if (what == 0)
  479. X        {
  480. X            dimension_update(disc_marker->x - (float) disc_marker->radius,
  481. X                  disc_marker->y - (float) disc_marker->radius);
  482. X            dimension_update(disc_marker->x + (float) disc_marker->radius,
  483. X                  disc_marker->y + (float) disc_marker->radius);
  484. X        } else if (what == 1)
  485. X        {
  486. X            fprintf(fd, "\\put(%03.2f,%03.2f){\\circle*{%i}}\n",
  487. X                disc_marker->x, newy(disc_marker->y),
  488. X                disc_marker->radius + disc_marker->radius);
  489. X        } else
  490. X        {
  491. X            disc_marker->x+=xmotion;
  492. X            disc_marker->y+=ymotion;
  493. X        }
  494. X
  495. X        if (disc_marker == disc_curr)
  496. X            return;
  497. X
  498. X        disc_marker = disc_marker->next;
  499. X
  500. X    }
  501. }
  502. X
  503. X
  504. void
  505. manage_text(int what, FILE * fd)
  506. {/* medium must be open */
  507. X
  508. X
  509. X    message_marker = message_start;
  510. X
  511. X    if (message_start == NULL)
  512. X        return;
  513. X
  514. X    while (True)
  515. X    {
  516. X
  517. X        if (what == 0)
  518. X            dimension_update(message_marker->x, message_marker->y);
  519. X
  520. X        else if (what == 1)
  521. X        {
  522. X            fprintf(fd, "\\put(%03.2f,%03.2f){\\makebox(0,0)[",
  523. X                message_marker->x, newy(message_marker->y));
  524. X
  525. X            switch (message_marker->textpos[0])
  526. X            {
  527. X            case 'b':    break;
  528. X            case 't':    break;
  529. X            case 'l':    break;
  530. X            case 'r':    break;
  531. X            default:    message_marker->textpos[0]='c';
  532. X                    break;
  533. X            }
  534. X
  535. X            switch (message_marker->textpos[1])
  536. X            {
  537. X            case 'b':    break;
  538. X            case 't':    break;
  539. X            case 'l':    break;
  540. X            case 'r':    break;
  541. X            default:    message_marker->textpos[1]='c';
  542. X                    break;
  543. X            }
  544. X
  545. X            fprintf(fd, "%c%c]{%s}}\n",
  546. X                message_marker->textpos[0], message_marker->textpos[1],
  547. X                message_marker->text);
  548. X        } else
  549. X        {
  550. X            message_marker->x+=xmotion;
  551. X            message_marker->y+=ymotion;
  552. X        }
  553. X
  554. X            
  555. X
  556. X        if (message_marker == message_curr)
  557. X            return;
  558. X
  559. X        message_marker = message_marker->next;
  560. X
  561. X    }
  562. }
  563. X
  564. X
  565. X
  566. X
  567. void
  568. manage_oval(int what, FILE * fd)
  569. {/* medium must be open */
  570. X
  571. X
  572. X    oval_marker = oval_start;
  573. X
  574. X    if (oval_start == NULL)
  575. X        return;
  576. X
  577. X    while (True)
  578. X    {
  579. X
  580. X        /* normate rectangle */
  581. X        norm_rectangle(&oval_marker->x, &oval_marker->y,
  582. X                   &oval_marker->h, &oval_marker->v);
  583. X
  584. X        if (what == 0)
  585. X        {
  586. X            dimension_update(oval_marker->x, oval_marker->y);
  587. X            dimension_update(oval_marker->h, oval_marker->v);
  588. X        } else if (what == 1)
  589. X        {
  590. X            fprintf(fd, "\\put(%03.2f,%03.2f){\\oval(%03.2f,%03.2f)}\n",
  591. X                oval_marker->x + ((oval_marker->h - oval_marker->x) / 2),
  592. X                newy(oval_marker->y + (oval_marker->v - oval_marker->y) / 2),
  593. X                (oval_marker->h - oval_marker->x),
  594. X                (oval_marker->v - oval_marker->y));
  595. X        } else
  596. X        {
  597. X            oval_marker->x+=xmotion;
  598. X            oval_marker->h+=xmotion;
  599. X            oval_marker->y+=ymotion;
  600. X            oval_marker->v+=ymotion;
  601. X        }
  602. X
  603. X        if (oval_marker == oval_curr)
  604. X            return;
  605. X
  606. X        oval_marker = oval_marker->next;
  607. X
  608. X    }
  609. }
  610. SHAR_EOF
  611. echo 'File io_trans.c is complete' &&
  612. chmod 0644 io_trans.c ||
  613. echo 'restore of io_trans.c failed'
  614. Wc_c="`wc -c < 'io_trans.c'`"
  615. test 36048 -eq "$Wc_c" ||
  616.     echo 'io_trans.c: original size 36048, current size' "$Wc_c"
  617. rm -f _shar_wnt_.tmp
  618. fi
  619. # ============= io_trans.h ==============
  620. if test -f 'io_trans.h' -a X"$1" != X"-c"; then
  621.     echo 'x - skipping io_trans.h (File already exists)'
  622.     rm -f _shar_wnt_.tmp
  623. else
  624. > _shar_wnt_.tmp
  625. echo 'x - extracting io_trans.h (Text)'
  626. sed 's/^X//' << 'SHAR_EOF' > 'io_trans.h' &&
  627. /* xtexcad  V1.2 - graphic editor for LaTeX */
  628. /* 1991 by K.Zitzmann */
  629. /* header-file io_trans.h */
  630. X
  631. #ifndef IO_TRANSH
  632. #define IO_TRANSH
  633. X
  634. X
  635. X
  636. X
  637. X
  638. /* prototypes */
  639. X
  640. Boolean file_exists(char *fn);
  641. void load_it(char *fn);
  642. void get_line_info(float x, float y, float h, float v, int *x_slp, int *y_slp, float *len);
  643. void get_vector_info(float x, float y, float h, float v, int *x_slp, int *y_slp, float *len);
  644. float newy(float y);
  645. float oldy(float y);
  646. void dimension_update(float x, float y);
  647. void trans_it(char *fn);
  648. void manage_line(int what, FILE *fd);
  649. void manage_vector(int what, FILE *fd);
  650. void manage_filled(int what, FILE *fd);
  651. void manage_framed(int what, FILE *fd);
  652. void manage_dashed(int what, FILE *fd);
  653. void manage_kreis(int what, FILE *fd);
  654. void manage_disc(int what, FILE *fd);
  655. void manage_oval(int what, FILE *fd);
  656. void manage_text(int what, FILE *fd);
  657. void manage_bezier(int what, FILE *fd);
  658. void read_message(void);
  659. void read_framebox(void);
  660. void read_dashbox(void);
  661. void read_filledbox(void);
  662. void read_line(void);
  663. void read_vector(void);
  664. void read_circle(void);
  665. void read_disc(void);                    
  666. void read_oval(void);
  667. void read_bezier(void);
  668. void compute_end_coords(float x, float y, float *h, float *v,float len);
  669. float compute_length(float inp);
  670. void error(char *name);
  671. X
  672. X
  673. extern float l_slope[30][3];
  674. extern float a_slope[20][3];
  675. extern int line_slope;
  676. extern int arrow_slope;
  677. extern struct object_buffer buffer;
  678. X    
  679. extern int unit;
  680. extern float ulen;
  681. extern float dim_x_max,dim_x_min,dim_y_max,dim_y_min;
  682. X
  683. X
  684. #endif
  685. X
  686. X
  687. X
  688. X
  689. X
  690. SHAR_EOF
  691. chmod 0644 io_trans.h ||
  692. echo 'restore of io_trans.h failed'
  693. Wc_c="`wc -c < 'io_trans.h'`"
  694. test 1526 -eq "$Wc_c" ||
  695.     echo 'io_trans.h: original size 1526, current size' "$Wc_c"
  696. rm -f _shar_wnt_.tmp
  697. fi
  698. # ============= oberfl.c ==============
  699. if test -f 'oberfl.c' -a X"$1" != X"-c"; then
  700.     echo 'x - skipping oberfl.c (File already exists)'
  701.     rm -f _shar_wnt_.tmp
  702. else
  703. > _shar_wnt_.tmp
  704. echo 'x - extracting oberfl.c (Text)'
  705. sed 's/^X//' << 'SHAR_EOF' > 'oberfl.c' &&
  706. /* xtexcad  V1.2 - graphic editor for LaTeX */
  707. /* 1991 by K.Zitzmann */
  708. /* oberfl.c */
  709. X
  710. X
  711. #include <stdio.h>
  712. #include <math.h>
  713. #include "extdef.h"
  714. #include "x_stuff.h"
  715. #include "oberfl.h"
  716. #include "ereignis.h"
  717. #include "file_sel.h"
  718. #include "graphics.h"
  719. #include "pics.h"
  720. X
  721. X
  722. X
  723. X
  724. X
  725. /* constant */
  726. X
  727. const Dimension cmd_btn_width = 60;
  728. const Dimension cmd_btn_height = 60;
  729. X
  730. const           new_section = 22;
  731. X
  732. const           vertical_distance = 3;
  733. /* workspace placement with xorigin and yorigin */
  734. X
  735. const           yorigin = 3;
  736. #define xorigin (cmd_btn_width+2*new_section)
  737. X
  738. /* DIN A4 Page (in points) */
  739. const           y_A4_max = 840;
  740. const           y_A4_min = 0;
  741. const           x_A4_max = 600;
  742. const           x_A4_min = 0;
  743. /* zoom-window is x div 10 and y div 10 */
  744. X
  745. /* global variables */
  746. X
  747. Widget          top, top2, toplevel, canvas, pboard, textup, wtext, input_up, box_me_up;
  748. Widget          line_cmd, box_cmd, circle_cmd, text_cmd, file_cmd;
  749. Widget          vector_cmd, zoom_cmd, refresh_cmd, copy_cmd, erase_cmd, edit_cmd,
  750. X                options_cmd;
  751. Widget          snap1, raster1, radio_up, slp, dias;
  752. Widget          txt2, txt3, raster_up, ask_up, sign_up, sign_msg;
  753. Widget          coordinates, about, pop_adjust_up, adj_txt2,fileselector,bezier_cmd;
  754. Widget        lft,rgt,up,dwn,zentr;
  755. X
  756. Arg             args[10];
  757. int             n, m;
  758. char            filename[100] = "";
  759. char            chain[100] = "";
  760. char            boxinput[256] = "";
  761. char            textinput[256] = "";
  762. char            titlename[200] = "";
  763. char            txtpos[3] = "";
  764. float           xur = 0.0, yur = 0.0;
  765. X
  766. Boolean         snap, raster, steigung, durchmesser, refr_auto, dina4;    /* radio-button-options */
  767. Boolean         zoomed, ruler, cross;
  768. char            graph_action, shadow = '-';    /* current action is stored
  769. X                         * here */
  770. X
  771. GC              gc, copy_gc;    /* Graphics Context Identifier */
  772. X
  773. X
  774. X
  775. /* user data */
  776. char    aa='A';
  777. char    bb='B';
  778. char    cc='C';
  779. char    dd='D';
  780. char    ee='E';
  781. char    ff='F';
  782. char    gg='G';
  783. char    hh='H';
  784. char    ii='I';
  785. char    jj='J';
  786. char    kk='K';
  787. char    ll='L';
  788. char    mm='M';
  789. char    nn='N';
  790. char    oo='O';
  791. char    pp='P';
  792. char    qq='Q';
  793. char    rr='R';
  794. char    ss='S';
  795. char    tt='T';
  796. char    uu='U';
  797. char    vv='V';
  798. char    ww='W';
  799. char    xx='X';
  800. char    yy='Y';
  801. char    zz='Z';
  802. char point='.';
  803. char DUMMY='|';
  804. char minus='-';
  805. char    ka='a';
  806. char    kb='b';
  807. char    kc='c';
  808. char    kd='d';
  809. char    ke='e';
  810. char    kf='f';
  811. char    kg='g';
  812. char    kh='h';
  813. char    ki='i';
  814. char    kj='j';
  815. char    klein_k='k';
  816. char    kl='l';
  817. char    km='m';
  818. char    kn='n';
  819. char    ko='o';
  820. char    kp='p';
  821. char    kq='q';
  822. char    kr='r';
  823. char    ks='s';
  824. char    kt='t';
  825. char    ku='u';
  826. char    kv='v';
  827. char    kw='w';
  828. char    kx='x';
  829. char    ky='y';
  830. char    kz='z';
  831. X
  832. /* Figure Data Base */
  833. struct fig1     oval;
  834. struct fig2     filledBox, strich, pfeil, disc, kreis;
  835. struct fig3     framedBox;
  836. struct fig4     dashedBox;
  837. struct fig5     message;
  838. struct fig6    bezier;
  839. X
  840. struct fig2    *disc_start = NULL, *disc_curr = NULL, *disc_marker = NULL;
  841. struct fig2    *kreis_start = NULL, *kreis_curr = NULL, *kreis_marker = NULL;
  842. struct fig2    *filledBox_start = NULL, *filledBox_curr = NULL, *filledBox_marker = NULL;
  843. struct fig1    *oval_start = NULL, *oval_curr = NULL, *oval_marker = NULL;
  844. struct fig2    *strich_start = NULL, *strich_curr = NULL, *strich_marker = NULL;
  845. struct fig2    *pfeil_start = NULL, *pfeil_curr = NULL, *pfeil_marker = NULL;
  846. struct fig3    *framedBox_start = NULL, *framedBox_curr = NULL, *framedBox_marker = NULL;
  847. struct fig4    *dashedBox_start = NULL, *dashedBox_curr = NULL, *dashedBox_marker = NULL;
  848. struct fig5    *message_start = NULL, *message_curr = NULL, *message_marker = NULL;
  849. struct fig6    *bezier_start = NULL, *bezier_curr = NULL, *bezier_marker = NULL;         
  850. X
  851. X
  852. X
  853. X
  854. int             x_zoom_max;
  855. int             x_zoom_min;
  856. int             y_zoom_max;
  857. int             y_zoom_min;
  858. Pixmap          about_map;
  859. int        xmotion,ymotion;
  860. X
  861. X
  862. X
  863. X
  864. X
  865. /*-----------------------------------------------------------*/
  866. /*-----------------------------------------------------------*/
  867. /*-----------------------------------------------------------*/
  868. X
  869. /* the beginning of a wonderful disaster... */
  870. X
  871. /*-----------------------------------------------------------*/
  872. /*-----------------------------------------------------------*/
  873. /*-----------------------------------------------------------*/
  874. X
  875. X
  876. X
  877. X
  878. X
  879. X
  880. void
  881. main(int argc, char *argv[])
  882. {
  883. X        Display        *disp;
  884. X    Window          win;
  885. X    
  886. X    if (argc > 1)
  887. X        if (*argv[1] == '-')  
  888. X        if (*++argv[1] == 'h')
  889. X        {
  890. X            printf("\n");
  891. X            printf("This is TeXcad,  SHAREWARE-Version 1.2  ( X-Windows )\n");
  892. X            printf("====================================================\n\n");
  893. X            printf("If you like TeXcad and think it's convenient to use,\n");
  894. X            printf("then please send an appreciation of US $20 to:\n\n");
  895. X            printf("    Klaus Zitzmann\n");
  896. X            printf("    Langenaustr. 20\n");
  897. X            printf("    D-5400 Koblenz, Germany\n");
  898. X            printf("    Bank Code: 37050299 (BLZ)\n");
  899. X            printf("    Kreissparkasse Koeln / Germany\n");
  900. X            printf("    Account No. 1359024299\n\n\n");
  901. X            printf("''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''\n");
  902. X            printf("'  Klaus Zitzmann                                     zitzmann@infko.uucp  '\n");
  903. X            printf(",  Langenaustr.20                    ...!uunet!mcsun!unido!infko!zitzmann  ,\n");
  904. X            printf(",  5400 Koblenz                        zitzmann@infko.uni-koblenz.de  ,\n");
  905. X            printf(",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\n");
  906. X            printf("\n\n!!!! The author makes no guarantees with this program and\n");
  907. X            printf("!!!! is not responsible for any damage caused by it !\n");
  908. X            printf("!!!! (See documentation)\n");
  909. X            exit(0);
  910. X        } else argv[1]--;
  911. X        
  912. X    strcpy(titlename, "TeXcad 1.2");
  913. X
  914. X    snap = False;
  915. X    raster = False;
  916. X    steigung = False;
  917. X    durchmesser = False;
  918. X    zoomed = False;
  919. X    dina4 = False;
  920. X    refr_auto = True;
  921. X    ruler = True;
  922. X    cross = False;
  923. X
  924. X    x_zoom_min = -999;
  925. X
  926. X    
  927. X    toplevel = XtInitialize("xtexcad", "Xtexcad", NULL,0, &argc, argv);
  928. X
  929. X    /* connect the TeXcad - icon  to the toplevel-shell */
  930. X    n = 0;
  931. X    XtSetArg(args[n], XtNiconPixmap,
  932. X         XCreateBitmapFromData(XtDisplay(toplevel),
  933. X                       XtScreen(toplevel)->root,
  934. X                       icon_bits, icon_width,
  935. X                       icon_height));
  936. X    
  937. X    n++;
  938. X    XtSetValues(toplevel, args, n);
  939. X
  940. X
  941. X    /* build the desktop */
  942. X
  943. X    command_init();
  944. X
  945. X    paintboard();
  946. X
  947. X    XtRealizeWidget(toplevel);    /* realize all */
  948. X
  949. X    
  950. X
  951. X    headline(toplevel, titlename);    /* status line */
  952. X
  953. X    /* additional settings */
  954. X    popup_init();    /* initialize all command-popups */
  955. X    textup_init();    /* initialize text - popup */
  956. X    radio_init();    /* initialize radio-button-popup */
  957. X    fileselector = init_file_select(canvas); /* connect file selector box */
  958. X    init_prompt_text();    /* initialize simple text pop-up */
  959. X    init_ask_erase();    /* initialize security-queries */
  960. X    graphics_init();    /* some initializations */
  961. X
  962. X
  963. X    /* startup-message */
  964. X    XtPopupSpringLoaded(textup);
  965. X    headline(textup, "Welcome");
  966. X
  967. X    init_text_and_position();    /* box queries */
  968. X    init_text_adjustment();    /* text queries */
  969. X    init_no_objects_sign();
  970. X    ruler_on();
  971. X
  972. X    /* was there a filename, specified at the command line ? */
  973. X    /* or maybe a ? */
  974. X    if ( (argc > 1) && (*argv[1]!='-') && (*argv[1]!='+'))
  975. X        load_it(argv[1]);
  976. X
  977. X
  978. X
  979. X    XtMainLoop();    /* wait for events; this is the standard event loop */
  980. }
  981. X
  982. X
  983. X
  984. void
  985. headline(Widget w, char *txt)
  986. {
  987. X    /* print status-string at the top of the toplevel-shell */
  988. X    Window          win;
  989. X    Display        *disp;
  990. X    if (!XtIsRealized(w))
  991. X        return;
  992. X    disp = XtDisplay(w);
  993. X    win = XtWindow(w);
  994. X    XStoreName(disp, win, txt);
  995. }
  996. X
  997. X
  998. X
  999. X
  1000. X
  1001. X
  1002. X
  1003. void
  1004. command_init()
  1005. {
  1006. X    /* initializes the command-buttons and connects the bitmaps */
  1007. X    Pixmap          icon;
  1008. X    Display        *disp;
  1009. X    Window          win;
  1010. X    int             hor = 3, vert = 3, vtab;
  1011. X    XtTranslations  trans_table1,trans_table2,trans_table3;
  1012. X    char        cmd_str1[50]="<EnterWindow> : set() \n";
  1013. X    char        cmd_str2[100]="<KeyPress>Return   : notify() unset()\n";
  1014. X      char        cmd_str3[50]="<ButtonRelease> : notify() unset()\n";
  1015. X    
  1016. X  
  1017. X      trans_table1 = XtParseTranslationTable(cmd_str1);
  1018. X    trans_table2 = XtParseTranslationTable(cmd_str2);
  1019. X    trans_table3 = XtParseTranslationTable(cmd_str3);
  1020. X
  1021. X
  1022. X    vtab = cmd_btn_height + 3 * vertical_distance - 2;
  1023. X
  1024. X
  1025. X    /* --- canvas database, additional settings --- */
  1026. X    n = 0;
  1027. X    XtSetArg(args[n], XtNwidth, (XtArgVal) x_A4_max + 220);
  1028. X    n++;
  1029. X    XtSetArg(args[n], XtNheight, (XtArgVal) y_A4_max + 20);
  1030. X    n++;
  1031. X    canvas = XtCreateManagedWidget("workspace", compositeWidgetClass, toplevel, args, n);
  1032. X
  1033. X
  1034. X
  1035. X    /* --- line command button db, additional settings --- */
  1036. X    n = 0;
  1037. X    /*
  1038. X     * XtSetArg(args[n],XtNwidth,(XtArgVal)cmd_btn_width);n++;
  1039. X     * XtSetArg(args[n],XtNheight,(XtArgVal)cmd_btn_height);n++;
  1040. X     */
  1041. X    XtSetArg(args[n], XtNlabel, (XtArgVal) "Line");
  1042. X    n++;
  1043. X    XtSetArg(args[n], XtNx, (XtArgVal) hor);
  1044. X    n++;
  1045. X    XtSetArg(args[n], XtNy, (XtArgVal) vert);
  1046. X    n++;
  1047. X
  1048. X    /* connect bitmap */
  1049. X    disp = XtDisplay(toplevel);
  1050. X    win = RootWindow(disp, DefaultScreen(disp));
  1051. X    icon = XCreateBitmapFromData(disp, win, line_bits, 60, 60);
  1052. X    XtSetArg(args[n], XtNbitmap, icon);
  1053. X    n++;
  1054. X
  1055. X    line_cmd = XtCreateManagedWidget("line", commandWidgetClass, canvas, args, n);
  1056. X    XtAddCallback(line_cmd, XtNcallback, general_purpose_handler, ll);
  1057. X    XtOverrideTranslations(line_cmd, trans_table1);
  1058. X    XtOverrideTranslations(line_cmd, trans_table2);
  1059. X    XtOverrideTranslations(line_cmd, trans_table3);
  1060. X    
  1061. X
  1062. X
  1063. X    vert += vtab;
  1064. X
  1065. X    /* --- vector command button db, additional settings --- */
  1066. X    n = 0;
  1067. X    /*
  1068. X     * XtSetArg(args[n],XtNwidth,(XtArgVal)cmd_btn_width);n++;
  1069. X     * XtSetArg(args[n],XtNheight,(XtArgVal)cmd_btn_height);n++;
  1070. X     */
  1071. X    XtSetArg(args[n], XtNlabel, (XtArgVal) "Vector");
  1072. X    n++;
  1073. X    XtSetArg(args[n], XtNx, (XtArgVal) hor);
  1074. X    n++;
  1075. X    XtSetArg(args[n], XtNy, (XtArgVal) vert);
  1076. X    n++;
  1077. X
  1078. X    /* connect bitmap */
  1079. X    disp = XtDisplay(toplevel);
  1080. X    win = RootWindow(disp, DefaultScreen(disp));
  1081. X    icon = XCreateBitmapFromData(disp, win, vector_bits, 60, 60);
  1082. X    XtSetArg(args[n], XtNbitmap, icon);
  1083. X    n++;
  1084. X
  1085. X    vector_cmd = XtCreateManagedWidget("vector", commandWidgetClass, canvas, args, n);
  1086. X    XtAddCallback(vector_cmd, XtNcallback, general_purpose_handler, vv);
  1087. X    XtOverrideTranslations(vector_cmd, trans_table1);
  1088. X    XtOverrideTranslations(vector_cmd, trans_table2);
  1089. X    XtOverrideTranslations(vector_cmd, trans_table3);
  1090. X    
  1091. X
  1092. X    vert += vtab;
  1093. X
  1094. X
  1095. X    /* --- box command button db, additional settings --- */
  1096. X    n = 0;
  1097. X    /*
  1098. X     * XtSetArg(args[n],XtNwidth,(XtArgVal)cmd_btn_width);n++;
  1099. X     * XtSetArg(args[n],XtNheight,(XtArgVal)cmd_btn_height);n++;
  1100. X     */
  1101. X    XtSetArg(args[n], XtNlabel, (XtArgVal) "Box");
  1102. X    n++;
  1103. X    XtSetArg(args[n], XtNx, (XtArgVal) hor);
  1104. X    n++;
  1105. X    XtSetArg(args[n], XtNy, (XtArgVal) vert);
  1106. X    n++;
  1107. X    XtSetArg(args[n], XtNmenuName, (XtArgVal) "BOXMENU");
  1108. X    n++;
  1109. X
  1110. X    /* connect bitmap */
  1111. X    disp = XtDisplay(toplevel);
  1112. X    win = RootWindow(disp, DefaultScreen(disp));
  1113. X    icon = XCreateBitmapFromData(disp, win, box_bits, 60, 60);
  1114. X    XtSetArg(args[n], XtNbitmap, icon);
  1115. X    n++;
  1116. X
  1117. X    box_cmd = XtCreateManagedWidget("box", menuButtonWidgetClass, canvas, args, n);
  1118. X    XtOverrideTranslations(box_cmd, trans_table1);
  1119. X    XtOverrideTranslations(box_cmd, trans_table2);
  1120. X    XtOverrideTranslations(box_cmd, trans_table3);
  1121. X    /* ------ box_cmd: widget is a popup -------- */
  1122. X
  1123. X
  1124. X    vert += vtab;
  1125. X
  1126. X
  1127. X    /* --- circle command button db, additional settings --- */
  1128. X    n = 0;
  1129. X    /*
  1130. X     * XtSetArg(args[n],XtNwidth,(XtArgVal)cmd_btn_width);n++;
  1131. X     * XtSetArg(args[n],XtNheight,(XtArgVal)cmd_btn_height);n++;
  1132. X     */
  1133. X    XtSetArg(args[n], XtNlabel, (XtArgVal) "Circle");
  1134. X    n++;
  1135. X    XtSetArg(args[n], XtNx, (XtArgVal) hor);
  1136. X    n++;
  1137. X    XtSetArg(args[n], XtNy, (XtArgVal) vert);
  1138. X    n++;
  1139. X    XtSetArg(args[n], XtNmenuName, (XtArgVal) "CIRCLEMENU");
  1140. X    n++;
  1141. X
  1142. X    /* connect bitmap */
  1143. X    disp = XtDisplay(toplevel);
  1144. X    win = RootWindow(disp, DefaultScreen(disp));
  1145. X    icon = XCreateBitmapFromData(disp, win, circle_bits, 60, 60);
  1146. X    XtSetArg(args[n], XtNbitmap, icon);
  1147. X    n++;
  1148. X    
  1149. X    
  1150. X    circle_cmd = XtCreateManagedWidget("circle", menuButtonWidgetClass, canvas, args, n);
  1151. X    XtOverrideTranslations(circle_cmd, trans_table1);
  1152. X    XtOverrideTranslations(circle_cmd, trans_table2);
  1153. X    XtOverrideTranslations(circle_cmd, trans_table3);
  1154. X    /* ------ circle_cmd: widget is a popup -------*/
  1155. X
  1156. X    vert += vtab;
  1157. X
  1158. X    /* --- bezier command button db, additional settings --- */
  1159. X    n = 0;
  1160. X    /*
  1161. X     * XtSetArg(args[n],XtNwidth,(XtArgVal)cmd_btn_width);n++;
  1162. X     * XtSetArg(args[n],XtNheight,(XtArgVal)cmd_btn_height);n++;
  1163. X     */
  1164. X    XtSetArg(args[n], XtNlabel, (XtArgVal) "Bezier");
  1165. X    n++;
  1166. X    XtSetArg(args[n], XtNx, (XtArgVal) hor);
  1167. X    n++;
  1168. X    XtSetArg(args[n], XtNy, (XtArgVal) vert);
  1169. X    n++;
  1170. X
  1171. X    /* connect bitmap */
  1172. X    disp = XtDisplay(toplevel);
  1173. X    win = RootWindow(disp, DefaultScreen(disp));
  1174. X    icon = XCreateBitmapFromData(disp, win, bezier_bits, 60, 60);
  1175. X    XtSetArg(args[n], XtNbitmap, icon);
  1176. X    n++;
  1177. X
  1178. X    bezier_cmd = XtCreateManagedWidget("bezier", commandWidgetClass, canvas, args, n);
  1179. X    XtAddCallback(bezier_cmd, XtNcallback, general_purpose_handler, ii);
  1180. X    XtOverrideTranslations(bezier_cmd, trans_table1);
  1181. X    XtOverrideTranslations(bezier_cmd, trans_table2);
  1182. X    XtOverrideTranslations(bezier_cmd, trans_table3);
  1183. X    
  1184. X    
  1185. X    vert += vtab;
  1186. X
  1187. X    /* --- text command button db, additional settings --- */
  1188. X    n = 0;
  1189. X    /*
  1190. X     * XtSetArg(args[n],XtNwidth,(XtArgVal)cmd_btn_width);n++;
  1191. X     * XtSetArg(args[n],XtNheight,(XtArgVal)cmd_btn_height);n++;
  1192. X     */
  1193. X    XtSetArg(args[n], XtNlabel, (XtArgVal) "Text");
  1194. X    n++;
  1195. X    XtSetArg(args[n], XtNx, (XtArgVal) hor);
  1196. X    n++;
  1197. X    XtSetArg(args[n], XtNy, (XtArgVal) vert);
  1198. X    n++;
  1199. X
  1200. X    /* connect bitmap */
  1201. X    disp = XtDisplay(toplevel);
  1202. X    win = RootWindow(disp, DefaultScreen(disp));
  1203. X    icon = XCreateBitmapFromData(disp, win, text_bits, 60, 60);
  1204. X    XtSetArg(args[n], XtNbitmap, icon);
  1205. X    n++;
  1206. X
  1207. X    text_cmd = XtCreateManagedWidget("text", commandWidgetClass, canvas, args, n);
  1208. X    XtAddCallback(text_cmd, XtNcallback, general_purpose_handler, tt);
  1209. X    XtOverrideTranslations(text_cmd, trans_table1);
  1210. X    XtOverrideTranslations(text_cmd, trans_table2);
  1211. X    XtOverrideTranslations(text_cmd, trans_table3);
  1212. X    
  1213. X
  1214. X    vert += vtab;
  1215. X
  1216. X
  1217. X    /* --- zoom command button db, additional settings --- */
  1218. X    n = 0;
  1219. X    /*
  1220. X     * XtSetArg(args[n],XtNwidth,(XtArgVal)cmd_btn_width);n++;
  1221. X     * XtSetArg(args[n],XtNheight,(XtArgVal)cmd_btn_height);n++;
  1222. X     */
  1223. X    XtSetArg(args[n], XtNlabel, (XtArgVal) "Area\nZoom");
  1224. X    n++;
  1225. X    XtSetArg(args[n], XtNx, (XtArgVal) hor);
  1226. X    n++;
  1227. X    XtSetArg(args[n], XtNy, (XtArgVal) vert);
  1228. X    n++;
  1229. X
  1230. X    /* connect bitmap */
  1231. X    disp = XtDisplay(toplevel);
  1232. X    win = RootWindow(disp, DefaultScreen(disp));
  1233. X    icon = XCreateBitmapFromData(disp, win, zoom_bits, 60, 60);
  1234. X    XtSetArg(args[n], XtNbitmap, icon);
  1235. X    n++;
  1236. X
  1237. X    zoom_cmd = XtCreateManagedWidget("zoom", commandWidgetClass, canvas, args, n);
  1238. X    XtAddCallback(zoom_cmd, XtNcallback, general_purpose_handler, zz);
  1239. X    XtOverrideTranslations(zoom_cmd, trans_table1);
  1240. X    XtOverrideTranslations(zoom_cmd, trans_table2);
  1241. X    XtOverrideTranslations(zoom_cmd, trans_table3);
  1242. X    
  1243. X
  1244. X    vert += vtab;
  1245. X
  1246. X
  1247. X    /* --- refresh command button db, additional settings --- */
  1248. X    n = 0;
  1249. X    /*
  1250. X     * XtSetArg(args[n],XtNwidth,(XtArgVal)cmd_btn_width);n++;
  1251. X     * XtSetArg(args[n],XtNheight,(XtArgVal)cmd_btn_height);n++;
  1252. X     */
  1253. X    XtSetArg(args[n], XtNlabel, (XtArgVal) "Refresh\nDisplay");
  1254. X    n++;
  1255. X    XtSetArg(args[n], XtNx, (XtArgVal) hor);
  1256. X    n++;
  1257. X    XtSetArg(args[n], XtNy, (XtArgVal) vert);
  1258. X    n++;
  1259. X
  1260. X    /* connect bitmap */
  1261. X    disp = XtDisplay(toplevel);
  1262. X    win = RootWindow(disp, DefaultScreen(disp));
  1263. X    icon = XCreateBitmapFromData(disp, win, refresh_bits, 60, 60);
  1264. X    XtSetArg(args[n], XtNbitmap, icon);
  1265. X    n++;
  1266. X
  1267. X    refresh_cmd = XtCreateManagedWidget("refresh", commandWidgetClass, canvas, args, n);
  1268. X    XtAddCallback(refresh_cmd, XtNcallback, refresh, point);
  1269. X    XtOverrideTranslations(refresh_cmd, trans_table1);
  1270. X    XtOverrideTranslations(refresh_cmd, trans_table2);
  1271. X    XtOverrideTranslations(refresh_cmd, trans_table3);
  1272. X    
  1273. X
  1274. X    vert += vtab;
  1275. X
  1276. X    /* --- copy command button db, additional settings --- */
  1277. X    n = 0;
  1278. X    /*
  1279. X     * XtSetArg(args[n],XtNwidth,(XtArgVal)cmd_btn_width);n++;
  1280. X     * XtSetArg(args[n],XtNheight,(XtArgVal)cmd_btn_height);n++;
  1281. X     */
  1282. X    XtSetArg(args[n], XtNlabel, (XtArgVal) "Copy");
  1283. X    n++;
  1284. X    XtSetArg(args[n], XtNx, (XtArgVal) hor);
  1285. X    n++;
  1286. X    XtSetArg(args[n], XtNy, (XtArgVal) vert);
  1287. X    n++;
  1288. X
  1289. X    /* connect bitmap */
  1290. X
  1291. X
  1292. X    disp = XtDisplay(toplevel);
  1293. X    win = RootWindow(disp, DefaultScreen(disp));
  1294. X    icon = XCreateBitmapFromData(disp, win, copy_bits, 60, 60);
  1295. X    XtSetArg(args[n], XtNbitmap, icon);
  1296. X    n++;
  1297. X
  1298. X
  1299. X    copy_cmd = XtCreateManagedWidget("copy", commandWidgetClass, canvas, args, n);
  1300. X    XtAddCallback(copy_cmd, XtNcallback, general_purpose_handler, yy);
  1301. X    XtOverrideTranslations(copy_cmd, trans_table1);
  1302. X    XtOverrideTranslations(copy_cmd, trans_table2);
  1303. X    XtOverrideTranslations(copy_cmd, trans_table3);
  1304. X    
  1305. X
  1306. X    vert += vtab;
  1307. X
  1308. X    /* --- erase command button db, additional settings --- */
  1309. X    n = 0;
  1310. X    /*
  1311. X     * XtSetArg(args[n],XtNwidth,(XtArgVal)cmd_btn_width);n++;
  1312. X     * XtSetArg(args[n],XtNheight,(XtArgVal)cmd_btn_height);n++;
  1313. X     */
  1314. X    XtSetArg(args[n], XtNlabel, (XtArgVal) "Erase");
  1315. X    n++;
  1316. X    XtSetArg(args[n], XtNx, (XtArgVal) hor);
  1317. X    n++;
  1318. X    XtSetArg(args[n], XtNy, (XtArgVal) vert);
  1319. X    n++;
  1320. X    XtSetArg(args[n], XtNmenuName, (XtArgVal) "ERASEMENU");
  1321. X    n++;
  1322. X
  1323. X    /* connect bitmap */
  1324. X    disp = XtDisplay(toplevel);
  1325. X    win = RootWindow(disp, DefaultScreen(disp));
  1326. X    icon = XCreateBitmapFromData(disp, win, erase_bits, 60, 60);
  1327. X    XtSetArg(args[n], XtNbitmap, icon);
  1328. X    n++;
  1329. X    
  1330. X    erase_cmd = XtCreateManagedWidget("erase", menuButtonWidgetClass, canvas, args, n);
  1331. X    XtOverrideTranslations(erase_cmd, trans_table1);
  1332. X    XtOverrideTranslations(erase_cmd, trans_table2);
  1333. X    XtOverrideTranslations(erase_cmd, trans_table3);
  1334. X    /*------- erase_cmd: widget is a popup ---------*/
  1335. X
  1336. X
  1337. X    vert += vtab;
  1338. X
  1339. X
  1340. X    /* --- edit command button db, additional settings --- */
  1341. X    n = 0;
  1342. X    /*
  1343. X     * XtSetArg(args[n],XtNwidth,(XtArgVal)cmd_btn_width);n++;
  1344. X     * XtSetArg(args[n],XtNheight,(XtArgVal)cmd_btn_height);n++;
  1345. X     */
  1346. X    XtSetArg(args[n], XtNlabel, (XtArgVal) "PickEdit");
  1347. X    n++;
  1348. X    XtSetArg(args[n], XtNx, (XtArgVal) hor);
  1349. X    n++;
  1350. X    XtSetArg(args[n], XtNy, (XtArgVal) vert);
  1351. X    n++;
  1352. X    XtSetArg(args[n], XtNmenuName, (XtArgVal) "EDITMENU");
  1353. X    n++;
  1354. X
  1355. X    /* connect bitmap */
  1356. X    disp = XtDisplay(toplevel);
  1357. X    win = RootWindow(disp, DefaultScreen(disp));
  1358. X    icon = XCreateBitmapFromData(disp, win, edit_bits, 60, 60);
  1359. X    XtSetArg(args[n], XtNbitmap, icon);
  1360. X    n++;
  1361. X    
  1362. X    edit_cmd = XtCreateManagedWidget("edit", menuButtonWidgetClass, canvas, args, n);
  1363. X    XtOverrideTranslations(edit_cmd, trans_table1);
  1364. X    XtOverrideTranslations(edit_cmd, trans_table2);
  1365. X    XtOverrideTranslations(edit_cmd, trans_table3);
  1366. X    
  1367. X    
  1368. X    vert += vtab;
  1369. X
  1370. X
  1371. X    /* --- options command button db, additional settings --- */
  1372. X    n = 0;
  1373. X    /*
  1374. X     * XtSetArg(args[n],XtNwidth,(XtArgVal)cmd_btn_width);n++;
  1375. X     * XtSetArg(args[n],XtNheight,(XtArgVal)cmd_btn_height);n++;
  1376. X     */
  1377. X    XtSetArg(args[n], XtNlabel, (XtArgVal) "Options");
  1378. X    n++;
  1379. X    XtSetArg(args[n], XtNx, (XtArgVal) hor);
  1380. X    n++;
  1381. X    XtSetArg(args[n], XtNy, (XtArgVal) vert);
  1382. X    n++;
  1383. X    XtSetArg(args[n], XtNmenuName, (XtArgVal) "OPTIONSMENU");
  1384. X    n++;
  1385. X
  1386. X    /* connect bitmap */
  1387. X    disp = XtDisplay(toplevel);
  1388. X    win = RootWindow(disp, DefaultScreen(disp));
  1389. X    icon = XCreateBitmapFromData(disp, win, setting_bits, 60, 60);
  1390. X    XtSetArg(args[n], XtNbitmap, icon);
  1391. X    n++;
  1392. X
  1393. X    options_cmd = XtCreateManagedWidget("options", commandWidgetClass, canvas, args, n);
  1394. X    XtOverrideTranslations(options_cmd, trans_table1);
  1395. X    XtOverrideTranslations(options_cmd, trans_table2);
  1396. X    XtOverrideTranslations(options_cmd, trans_table3);
  1397. X    XtAddCallback(options_cmd, XtNcallback, options, NULL);
  1398. X
  1399. X
  1400. X    /* buttons top right placement */
  1401. X
  1402. X    vert = 3;
  1403. X    hor = 600+xorigin+new_section;
  1404. X
  1405. X
  1406. X    /* --- file command button db, additional settings --- */
  1407. X    n = 0;
  1408. X    /*
  1409. X     * XtSetArg(args[n],XtNwidth,(XtArgVal)cmd_btn_width);n++;
  1410. X     * XtSetArg(args[n],XtNheight,(XtArgVal)cmd_btn_height);n++;
  1411. X     */
  1412. X    XtSetArg(args[n], XtNlabel, (XtArgVal) "File\nService");
  1413. X    n++;
  1414. X    XtSetArg(args[n], XtNx, (XtArgVal) hor);
  1415. X    n++;
  1416. X    XtSetArg(args[n], XtNy, (XtArgVal) vert);
  1417. X    n++;
  1418. X    XtSetArg(args[n], XtNmenuName, (XtArgVal) "FILEMENU");
  1419. X    n++;
  1420. X
  1421. X    /* connect bitmap */
  1422. X    disp = XtDisplay(toplevel);
  1423. X    win = RootWindow(disp, DefaultScreen(disp));
  1424. X    icon = XCreateBitmapFromData(disp, win, file_bits, 60, 60);
  1425. X    XtSetArg(args[n], XtNbitmap, icon);
  1426. X    n++;
  1427. X    
  1428. X    file_cmd = XtCreateManagedWidget("file", menuButtonWidgetClass, canvas, args, n);
  1429. X    XtOverrideTranslations(file_cmd, trans_table1);
  1430. X    XtOverrideTranslations(file_cmd, trans_table2);
  1431. X    XtOverrideTranslations(file_cmd, trans_table3);
  1432. X    /*------- file_cmd:  widget is a popup -----------*/
  1433. X
  1434. X
  1435. X    
  1436. X    vert+=vtab;
  1437. X
  1438. X    /* --- coordinate display area--- */
  1439. X    n = 0;
  1440. X    XtSetArg(args[n], XtNwidth, 90);
  1441. X    n++;
  1442. X    XtSetArg(args[n], XtNheight, (XtArgVal) 40);
  1443. X    n++;
  1444. X    XtSetArg(args[n], XtNlabel, " ");
  1445. X    n++;
  1446. X    XtSetArg(args[n], XtNx, (XtArgVal) hor);
  1447. X    n++;
  1448. X    XtSetArg(args[n], XtNy, (XtArgVal) vert);
  1449. X    n++;
  1450. X
  1451. X    coordinates = XtCreateManagedWidget("coord", labelWidgetClass, canvas, args, n);
  1452. X
  1453. X
  1454. X    vert+=vtab-new_section;
  1455. X
  1456. X    /* up */
  1457. X
  1458. X    n = 0;
  1459. X    XtSetArg(args[n], XtNborderWidth, 0);
  1460. X    n++;
  1461. X    XtSetArg(args[n], XtNx, (XtArgVal) hor);
  1462. X    n++;
  1463. X    XtSetArg(args[n], XtNy, (XtArgVal) vert);
  1464. X    n++;
  1465. X    /* connect bitmap */
  1466. X    disp = XtDisplay(toplevel);
  1467. X    win = RootWindow(disp, DefaultScreen(disp));
  1468. X    icon = XCreateBitmapFromData(disp, win, up_bits, 35,20);
  1469. X    XtSetArg(args[n], XtNbitmap, icon);
  1470. X    n++;
  1471. X    up=XtCreateManagedWidget("up", commandWidgetClass, canvas, args, n);
  1472. X    XtAddEventHandler(up, ButtonPress,False, move_base, uu);
  1473. X
  1474. X
  1475. X    /* right */
  1476. X
  1477. X    n = 0;
  1478. X    XtSetArg(args[n], XtNborderWidth, 0);
  1479. X    n++;
  1480. X    XtSetArg(args[n], XtNx, (XtArgVal) hor+46);
  1481. X    n++;
  1482. X    XtSetArg(args[n], XtNy, (XtArgVal) vert);
  1483. X    n++;
  1484. X    /* connect bitmap */
  1485. X    disp = XtDisplay(toplevel);
  1486. X    win = RootWindow(disp, DefaultScreen(disp));
  1487. X    icon = XCreateBitmapFromData(disp, win, right_bits, 20,35);
  1488. X    XtSetArg(args[n], XtNbitmap, icon);
  1489. X    n++;
  1490. X    rgt=XtCreateManagedWidget("right", commandWidgetClass, canvas, args, n);
  1491. X    XtAddEventHandler(rgt, ButtonPress,False, move_base, rr);
  1492. X
  1493. X
  1494. X    /* left */
  1495. X
  1496. X    n = 0;
  1497. X    XtSetArg(args[n], XtNborderWidth, 0);
  1498. X    n++;
  1499. X    XtSetArg(args[n], XtNx, (XtArgVal) hor);
  1500. X    n++;
  1501. X    XtSetArg(args[n], XtNy, (XtArgVal) vert+27);
  1502. X    n++;
  1503. X    /* connect bitmap */
  1504. X    disp = XtDisplay(toplevel);
  1505. X    win = RootWindow(disp, DefaultScreen(disp));
  1506. X    icon = XCreateBitmapFromData(disp, win, left_bits, 20,35);
  1507. X    XtSetArg(args[n], XtNbitmap, icon);
  1508. X    n++;
  1509. X    lft=XtCreateManagedWidget("left", commandWidgetClass, canvas, args, n);
  1510. X    XtAddEventHandler(lft, ButtonPress,False, move_base, ll);
  1511. X
  1512. X
  1513. X    /* down */
  1514. X
  1515. X    n = 0;
  1516. X    XtSetArg(args[n], XtNborderWidth, 0);
  1517. X    n++;
  1518. X    XtSetArg(args[n], XtNx, (XtArgVal) hor+31);
  1519. X    n++;
  1520. X    XtSetArg(args[n], XtNy, (XtArgVal) vert+42);
  1521. X    n++;
  1522. X    /* connect bitmap */
  1523. X    disp = XtDisplay(toplevel);
  1524. X    win = RootWindow(disp, DefaultScreen(disp));
  1525. X    icon = XCreateBitmapFromData(disp, win, down_bits, 35,20);
  1526. X    XtSetArg(args[n], XtNbitmap, icon);
  1527. X    n++;
  1528. X    dwn=XtCreateManagedWidget("down", commandWidgetClass, canvas, args, n);
  1529. X    XtAddEventHandler(dwn, ButtonPress,False, move_base, dd);
  1530. X
  1531. X
  1532. X    /* center */
  1533. X
  1534. X    n = 0;
  1535. X    XtSetArg(args[n], XtNborderWidth, 1);
  1536. X    n++;
  1537. X    XtSetArg(args[n], XtNinternalWidth, 2);
  1538. X    n++;
  1539. X    XtSetArg(args[n], XtNx, (XtArgVal) hor+31);
  1540. X    n++;
  1541. X    XtSetArg(args[n], XtNy, (XtArgVal) vert+27);
  1542. X    n++;
  1543. X    /* connect bitmap */
  1544. X    disp = XtDisplay(toplevel);
  1545. X    win = RootWindow(disp, DefaultScreen(disp));
  1546. X    icon = XCreateBitmapFromData(disp, win, zen_bits,8,8);
  1547. X    XtSetArg(args[n], XtNbitmap, icon);
  1548. X    n++;
  1549. X    zentr=XtCreateManagedWidget("center", commandWidgetClass, canvas, args, n);
  1550. X    XtAddEventHandler(zentr, ButtonPress,False, move_base, zz);
  1551. X
  1552. }
  1553. X
  1554. X
  1555. /*-----------------------------------------------------------*/
  1556. X
  1557. X
  1558. void
  1559. popup_init()
  1560. {/* Creating the menu's (popup) for file,box,circle and erase */
  1561. X
  1562. X    Widget          filemenu, load, save, quit, pdir, left;    /* popup-widgets for
  1563. X                                 * 'file service' */
  1564. X    Widget          boxmenu, framed, dashed, filled;    /* popup-widgets for
  1565. X                                 * 'box' */
  1566. X    Widget          circlemenu, ring, oval, ball;    /* popup-widgets for
  1567. X                             * 'circle' */
  1568. X    Widget          erasemenu, all_erase, obj_erase;    /* popup-widgets for
  1569. X                                 * 'erase' */
  1570. X                                 
  1571. X    Widget        editmenu,other;
  1572. X    
  1573. X    Widget         et1,et2,et3;
  1574. X    
  1575. X    Arg             arg[10];
  1576. X    int             n;
  1577. X
  1578. X
  1579. X
  1580. X
  1581. X    /* --- popup for button: file-service --- */
  1582. X
  1583. X    
  1584. X    filemenu = XtCreatePopupShell("FILEMENU", simpleMenuWidgetClass, canvas, NULL,0);
  1585. X
  1586. X    n = 0;
  1587. X
  1588. X    XtSetArg(arg[n], XtNlabel, (XtArgVal) "Load Object");
  1589. X    n++;
  1590. X    
  1591. X    load = XtCreateManagedWidget("load", smeBSBObjectClass, filemenu, arg, n);
  1592. X    XtAddCallback(load, XtNcallback, load_handler, NULL);
  1593. X
  1594. X    n = 0;
  1595. X
  1596. X    XtSetArg(arg[n], XtNlabel, (XtArgVal) "Store Object");
  1597. X    n++;
  1598. X    
  1599. X    save = XtCreateManagedWidget("save", smeBSBObjectClass, filemenu, arg, n);
  1600. X    XtAddCallback(save, XtNcallback, trans_handler, NULL);
  1601. X
  1602. X
  1603. X    XtCreateManagedWidget("line", smeLineObjectClass, filemenu, NULL,0);
  1604. X
  1605. X
  1606. X    n = 0;
  1607. X
  1608. X    XtSetArg(arg[n], XtNlabel, (XtArgVal) "About...");
  1609. X    n++;
  1610. X    
  1611. X    left = XtCreateManagedWidget("about", smeBSBObjectClass, filemenu, arg, n);
  1612. X    XtAddCallback(left, XtNcallback, about_handler, NULL);
  1613. X
  1614. X
  1615. X    n = 0;
  1616. X
  1617. X    XtSetArg(arg[n], XtNlabel, (XtArgVal) "Terminate");
  1618. X    n++;
  1619. X    
  1620. X    quit = XtCreateManagedWidget("quit", smeBSBObjectClass, filemenu, arg, n);
  1621. X    XtAddCallback(quit, XtNcallback, quit_handler, NULL);
  1622. X
  1623. X
  1624. X
  1625. X
  1626. X
  1627. X    /*---popup for button: box---*/
  1628. X
  1629. X    
  1630. X    
  1631. X    boxmenu = XtCreatePopupShell("BOXMENU", simpleMenuWidgetClass, canvas, NULL,0);
  1632. X
  1633. X    n = 0;
  1634. X
  1635. X    XtSetArg(arg[n], XtNlabel, (XtArgVal) "Framed");
  1636. X    n++;
  1637. X    
  1638. X    framed = XtCreateManagedWidget("fbox", smeBSBObjectClass, boxmenu, arg, n);
  1639. X    XtAddCallback(framed, XtNcallback, general_purpose_handler, nn);
  1640. X
  1641. X    n = 0;
  1642. X
  1643. X    XtSetArg(arg[n], XtNlabel, (XtArgVal) "Dashed");
  1644. X    n++;
  1645. X    
  1646. X    dashed = XtCreateManagedWidget("dashed", smeBSBObjectClass, boxmenu, arg, n);
  1647. X    XtAddCallback(dashed, XtNcallback, general_purpose_handler, dd);
  1648. X
  1649. X    n = 0;
  1650. X
  1651. X    XtSetArg(arg[n], XtNlabel, (XtArgVal) "Filled");
  1652. X    n++;
  1653. X    
  1654. X    filled = XtCreateManagedWidget("filled", smeBSBObjectClass, boxmenu, arg, n);
  1655. X    XtAddCallback(filled, XtNcallback, general_purpose_handler, ff);
  1656. X
  1657. X
  1658. X
  1659. X    /*---popup for button: circle---*/
  1660. X
  1661. X
  1662. X    circlemenu = XtCreatePopupShell("CIRCLEMENU", simpleMenuWidgetClass, canvas, NULL,0);
  1663. X
  1664. X    n = 0;
  1665. X
  1666. X    XtSetArg(arg[n], XtNlabel, (XtArgVal) "Normal");
  1667. X    n++;
  1668. X    
  1669. X    ring = XtCreateManagedWidget("rcircle", smeBSBObjectClass, circlemenu, arg, n);
  1670. X    XtAddCallback(ring, XtNcallback, general_purpose_handler, cc);
  1671. X
  1672. X    n = 0;
  1673. X
  1674. X    XtSetArg(arg[n], XtNlabel, (XtArgVal) "Oval");
  1675. X    n++;
  1676. X    
  1677. X    oval = XtCreateManagedWidget("oval", smeBSBObjectClass, circlemenu, arg, n);
  1678. X    XtAddCallback(oval, XtNcallback, general_purpose_handler, oo);
  1679. X
  1680. X    n = 0;
  1681. X
  1682. X    XtSetArg(arg[n], XtNlabel, (XtArgVal) "Filled");
  1683. X    n++;
  1684. X    
  1685. X    ball = XtCreateManagedWidget("ball", smeBSBObjectClass, circlemenu, arg, n);
  1686. X    XtAddCallback(ball, XtNcallback, general_purpose_handler, bb);
  1687. X
  1688. X
  1689. X    /*---popup for button: erase---*/
  1690. X
  1691. X    
  1692. X    erasemenu = XtCreatePopupShell("ERASEMENU", simpleMenuWidgetClass, canvas, NULL,0);
  1693. X
  1694. X    n = 0;
  1695. X
  1696. X    XtSetArg(arg[n], XtNlabel, (XtArgVal) "Pick Object");
  1697. X    n++;
  1698. X    
  1699. X    obj_erase = XtCreateManagedWidget("oerase", smeBSBObjectClass, erasemenu, arg, n);
  1700. X    XtAddCallback(obj_erase, XtNcallback, general_purpose_handler, gg);
  1701. X
  1702. X    n = 0;
  1703. X
  1704. X    XtSetArg(arg[n], XtNlabel, (XtArgVal) "Clear Entire Database");
  1705. X    n++;
  1706. X    
  1707. X    all_erase = XtCreateManagedWidget("aerase", smeBSBObjectClass, erasemenu, arg, n);
  1708. X    XtAddCallback(all_erase, XtNcallback, general_purpose_handler, aa);
  1709. X
  1710. X    n = 0;
  1711. X    
  1712. X    
  1713. X    /* --- popup for button: edit --- */
  1714. X    editmenu = XtCreatePopupShell("EDITMENU", simpleMenuWidgetClass, canvas, NULL,0);
  1715. X
  1716. X    n = 0;
  1717. X
  1718. X    XtSetArg(arg[n], XtNlabel, (XtArgVal) "Pick Object");
  1719. X    n++;
  1720. X    
  1721. X    other = XtCreateManagedWidget("other_objects", smeBSBObjectClass, editmenu, arg, n);
  1722. X    XtAddCallback(other, XtNcallback, general_purpose_handler, pp);
  1723. X
  1724. X    n = 0;
  1725. X
  1726. X    XtSetArg(arg[n], XtNlabel, (XtArgVal) "TEXT");
  1727. X    n++;
  1728. X    
  1729. X    et1 = XtCreateManagedWidget("tedit", smeBSBObjectClass, editmenu, arg, n);
  1730. X    XtAddCallback(et1, XtNcallback, textedit, NULL);
  1731. X            
  1732. X    n=0;
  1733. X    XtSetArg(arg[n], XtNlabel, (XtArgVal) "FRAMED-Box Text");
  1734. X    n++;
  1735. X    
  1736. X    et2=XtCreateManagedWidget("ftext", smeBSBObjectClass, editmenu, arg, n);
  1737. X    XtAddCallback(et2, XtNcallback, fb_textedit, NULL);
  1738. X    
  1739. X    n=0;
  1740. X    XtSetArg(arg[n], XtNlabel, (XtArgVal) "DASHED-Box Text");
  1741. X    n++;
  1742. X    
  1743. X    et3=XtCreateManagedWidget("dtext", smeBSBObjectClass, editmenu, arg, n);
  1744. X    XtAddCallback(et3, XtNcallback, db_textedit, NULL);
  1745. X    
  1746. X    
  1747. X
  1748. X
  1749. }
  1750. X
  1751. X
  1752. /*-----------------------------------------------------------*/
  1753. X
  1754. X
  1755. void
  1756. paintboard()
  1757. {/* create the drawing area */
  1758. X    n = 0;
  1759. X    XtSetArg(args[n], XtNx, (XtArgVal) xorigin);
  1760. X    n++;
  1761. X    XtSetArg(args[n], XtNy, (XtArgVal) yorigin);
  1762. X    n++;
  1763. X    XtSetArg(args[n], XtNwidth, (XtArgVal) x_A4_max);
  1764. X    n++;
  1765. X    XtSetArg(args[n], XtNheight, (XtArgVal) y_A4_max);
  1766. X    n++;
  1767. X
  1768. X    pboard = XtCreateManagedWidget("", labelWidgetClass, canvas, args, n);
  1769. X
  1770. X    XtAddEventHandler(pboard, ExposureMask, False, refresh, NULL);
  1771. X    XtAddEventHandler(pboard, PointerMotionMask, True, draw_coords, NULL);
  1772. X
  1773. X    /* widget 'pboard' is one of the global widgets */
  1774. X    /* pboard contains all the graphics */
  1775. X
  1776. }
  1777. X
  1778. X
  1779. /*-----------------------------------------------------------*/
  1780. X
  1781. X
  1782. void
  1783. textup_init()
  1784. {/* create a text window */
  1785. X    /* used as 'welcome'-widget and report-container (watch!) */
  1786. X    XtTranslations  trans_table;
  1787. X    trans_table = XtParseTranslationTable("<LeaveNotify>: XtMenuPopdown()");
  1788. X    /* when the pointer is moved outside of the window, it's popped down */
  1789. X
  1790. X    textup = XtCreatePopupShell("txt", shellWidgetClass, canvas, NULL,0);
  1791. X
  1792. X    n = 0;
  1793. X    XtSetArg(args[n], XtNwidth, (XtArgVal) 500);
  1794. X    n++;
  1795. X    XtSetArg(args[n], XtNheight, (XtArgVal) 200);
  1796. X    n++;
  1797. X    XtSetArg(args[n], XtNborderWidth, (XtArgVal) 30);
  1798. X    n++;
  1799. X    XtSetArg(args[n], XtNeditType, (XtArgVal) XawtextAppend);
  1800. X    n++;
  1801. X    XtSetArg(args[n], XtNscrollHorizontal, (XtArgVal) XawtextScrollAlways);
  1802. X    n++;
  1803. X    XtSetArg(args[n], XtNscrollVertical, (XtArgVal) XawtextScrollAlways);
  1804. X    n++;
  1805. X
  1806. X    
  1807. X
  1808. X
  1809. X    wtext = XtCreateManagedWidget("dialog", asciiTextWidgetClass, textup, args, n);
  1810. X
  1811. X    XtAugmentTranslations(textup, trans_table);    /* add action to
  1812. X                             * translation manager */
  1813. X
  1814. X    print_msg(wtext, "\n");
  1815. X    print_msg(wtext, "This is ");
  1816. X    print_msg(wtext, titlename);
  1817. X    print_msg(wtext, " / \n");
  1818. X    print_msg(wtext, "(c)1991 K. Zitzmann,\nUniversity of Koblenz, Germany\nlast change: 1/92\n\n\n");
  1819. X    print_msg(wtext, "Please don't use the NeWS-Server in combination with\n");
  1820. X    print_msg(wtext, "the twm-Window Manager !!!\n");
  1821. X    print_msg(wtext, "Better use the MIT-Server.\n");
  1822. X    
  1823. }
  1824. /*-----------------------------------------------------------*/
  1825. X
  1826. X
  1827. void
  1828. radio_init()
  1829. {
  1830. X    /* creates the 'settings'-menu */
  1831. X
  1832. X    Widget          dummy1;
  1833. X    Widget          contents, lbl, read_number, manu, din, rul, cross_curs, length_line;
  1834. X    XtTranslations  trans_table, trans_table1, trans_table2;
  1835. X    Position        x_rel, y_rel, x, y;
  1836. X    char            temp_str[200] = "<KeyPress>Return: get_number()\n Ctrl<Key>J      : dummy() \n\
  1837. X            Ctrl<Key>O      : dummy() \n Ctrl<Key>M      : dummy() \n";
  1838. X
  1839. X    static XtActionsRec actions[150] = {{"dummy", dummy},
  1840. X    {"get_number", get_number}};
  1841. X    trans_table = XtParseTranslationTable(temp_str);
  1842. X    /* when the pointer is moved outside of the window, it's popped down */
  1843. X    trans_table1 = XtParseTranslationTable("<LeaveWindow>: XtMenuPopdown() \n");
  1844. X
  1845. X    trans_table2 = XtParseTranslationTable("<Btn1Down>,<Btn1Up>: toggle() notify()");
  1846. X
  1847. X    n = 0;
  1848. X    XtSetArg(args[n], XtNheight, 230);
  1849. X    n++;
  1850. X    XtSetArg(args[n], XtNwidth, 330);
  1851. X    n++;
  1852. X    
  1853. X    radio_up = XtCreatePopupShell("options", transientShellWidgetClass, canvas, args, n);
  1854. X
  1855. X    n = 0;
  1856. X    XtSetArg(args[n], XtNvSpace, 10);
  1857. X    n++;
  1858. X    XtSetArg(args[n], XtNhSpace, 15);
  1859. X    n++;
  1860. X    dummy1 = XtCreateManagedWidget("dumm1", boxWidgetClass, radio_up, args, n);
  1861. X
  1862. X
  1863. X
  1864. X    n = 0;
  1865. X
  1866. X    XtSetArg(args[n], XtNlabel, "enable raster");
  1867. X    n++;
  1868. X    XtSetArg(args[n], XtNheight, 30);
  1869. X    n++;
  1870. X    XtSetArg(args[n], XtNwidth, 140);
  1871. X    n++;
  1872. X    XtSetArg(args[n], XtNjustify, XtJustifyCenter);
  1873. X    n++;
  1874. X    XtSetArg(args[n], XtNshapeStyle, XmuShapeOval);
  1875. X    n++;
  1876. X    XtSetArg(args[n], XtNstate, False);
  1877. X    n++;
  1878. X    
  1879. X    raster1 = XtCreateManagedWidget("rasteron", toggleWidgetClass, dummy1, args, n);
  1880. X    XtAddCallback(raster1, XtNcallback, aus_raster, NULL);
  1881. X
  1882. X
  1883. X    raster_up = XtCreatePopupShell("Raster Definition", transientShellWidgetClass, canvas, NULL, 0);
  1884. X    contents = XtCreateManagedWidget("hi", boxWidgetClass, raster_up, NULL, 0);
  1885. X
  1886. X    n = 0;
  1887. X    XtSetArg(args[n], XtNheight, (XtArgVal) 70);
  1888. X    n++;
  1889. X    XtSetArg(args[n], XtNwidth, (XtArgVal) 250);
  1890. X    n++;
  1891. X    XtSetArg(args[n], XtNjustify, XtJustifyCenter);
  1892. X    n++;
  1893. X    XtSetArg(args[n], XtNlabel, "Please enter the width\nof the raster !\n(Default = 40pts)");
  1894. X    n++;
  1895. X    
  1896. X    lbl = XtCreateManagedWidget("jj", labelWidgetClass, contents, args, n);
  1897. X
  1898. X    n = 0;
  1899. X    XtSetArg(args[n], XtNheight, (XtArgVal) 20);
  1900. X    n++;
  1901. X    XtSetArg(args[n], XtNwidth, (XtArgVal) 250);
  1902. X    n++;
  1903. X    XtSetArg(args[n], XtNautoFill, False);
  1904. X    n++;
  1905. X    XtSetArg(args[n], XtNuseStringInPlace, True);
  1906. X    n++;
  1907. X    XtSetArg(args[n], XtNstring, chain);
  1908. X    n++;
  1909. X    XtSetArg(args[n], XtNlength, XtNumber(chain));
  1910. X    n++;
  1911. X    XtSetArg(args[n], XtNeditType, XawtextEdit);
  1912. X    n++;
  1913. X    XtSetArg(args[n], XtNresize, XawtextResizeWidth);
  1914. X    n++;
  1915. X    XtSetArg(args[n], XtNwrap, XawtextWrapWord);
  1916. X    n++;
  1917. X    
  1918. X    read_number = XtCreateManagedWidget("j", asciiTextWidgetClass, contents, args, n);
  1919. X
  1920. X
  1921. X    n = 0;
  1922. X
  1923. X    XtSetArg(args[n], XtNlabel, "snap pointer");
  1924. X    n++;
  1925. X    XtSetArg(args[n], XtNheight, 30);
  1926. X    n++;
  1927. X    XtSetArg(args[n], XtNwidth, 140);
  1928. X    n++;
  1929. X    XtSetArg(args[n], XtNjustify, XtJustifyCenter);
  1930. X    n++;
  1931. X    XtSetArg(args[n], XtNshapeStyle, XmuShapeOval);
  1932. X    n++;
  1933. X    XtSetArg(args[n], XtNstate, False);
  1934. X    n++;
  1935. X    
  1936. X    snap1 = XtCreateManagedWidget("snapon", toggleWidgetClass, dummy1, args, n);
  1937. X    XtAddCallback(snap1, XtNcallback, snap_on, NULL);
  1938. X
  1939. X    n = 0;
  1940. X
  1941. X    XtSetArg(args[n], XtNlabel, "unlimited slopes");
  1942. X    n++;
  1943. X    XtSetArg(args[n], XtNheight, 30);
  1944. X    n++;
  1945. X    XtSetArg(args[n], XtNwidth, 140);
  1946. X    n++;
  1947. X    XtSetArg(args[n], XtNjustify, XtJustifyCenter);
  1948. X    n++;
  1949. X    XtSetArg(args[n], XtNshapeStyle, XmuShapeOval);
  1950. X    n++;
  1951. X    XtSetArg(args[n], XtNstate, False);
  1952. X    n++;
  1953. X    
  1954. X    slp = XtCreateManagedWidget("slope", toggleWidgetClass, dummy1, args, n);
  1955. X    XtAddCallback(slp, XtNcallback, slopes, NULL);
  1956. X
  1957. X    n = 0;
  1958. X
  1959. X    XtSetArg(args[n], XtNlabel, "unlimited diameters");
  1960. X    n++;
  1961. X    XtSetArg(args[n], XtNheight, 30);
  1962. X    n++;
  1963. X    XtSetArg(args[n], XtNwidth, 140);
  1964. X    n++;
  1965. X    XtSetArg(args[n], XtNjustify, XtJustifyCenter);
  1966. X    n++;
  1967. X    XtSetArg(args[n], XtNshapeStyle, XmuShapeOval);
  1968. X    n++;
  1969. X    XtSetArg(args[n], XtNstate, False);
  1970. X    n++;
  1971. X    
  1972. X    dias = XtCreateManagedWidget("diameters", toggleWidgetClass, dummy1, args, n);
  1973. X    XtAddCallback(dias, XtNcallback, diams, NULL);
  1974. X
  1975. X    n = 0;
  1976. X
  1977. X    XtSetArg(args[n], XtNlabel, "auto refresh");
  1978. X    n++;
  1979. X    XtSetArg(args[n], XtNheight, 30);
  1980. X    n++;
  1981. X    XtSetArg(args[n], XtNwidth, 140);
  1982. X    n++;
  1983. X    XtSetArg(args[n], XtNjustify, XtJustifyCenter);
  1984. X    n++;
  1985. X    XtSetArg(args[n], XtNshapeStyle, XmuShapeOval);
  1986. X    n++;
  1987. X    XtSetArg(args[n], XtNstate, True);
  1988. X    n++;
  1989. X    
  1990. X    manu = XtCreateManagedWidget("auto_refresh", toggleWidgetClass, dummy1, args, n);
  1991. X    XtAddCallback(manu, XtNcallback, automatic_refresh, NULL);
  1992. X
  1993. X    n = 0;
  1994. X
  1995. X    XtSetArg(args[n], XtNlabel, "center DIN A4");
  1996. X    n++;
  1997. X    XtSetArg(args[n], XtNheight, 30);
  1998. X    n++;
  1999. SHAR_EOF
  2000. true || echo 'restore of oberfl.c failed'
  2001. fi
  2002. echo 'End of  part 6'
  2003. echo 'File oberfl.c is continued in part 7'
  2004. echo 7 > _shar_seq_.tmp
  2005. exit 0
  2006. -- 
  2007. --
  2008. Molecular Simulations, Inc.            mail: dcmartin@msi.com
  2009. 796 N. Pastoria Avenue                uucp: uunet!dcmartin
  2010. Sunnyvale, California 94086            at&t: 408/522-9236
  2011.