argv@island.uu.net (Dan Heller) (07/22/89)
Submitted-by: Mark Moraes <moraes@ai.toronto.edu> Posting-number: Volume 4, Issue 78 Archive-name: xpic/part13 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 13 (of 15)." # Contents: xpic/test/van.ps xpic/windows.c # Wrapped by moraes@neat.ai on Thu Jul 13 22:36:12 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'xpic/test/van.ps' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'xpic/test/van.ps'\" else echo shar: Extracting \"'xpic/test/van.ps'\" \(18365 characters\) sed "s/^X//" >'xpic/test/van.ps' <<'END_OF_FILE' X%! X%%Creator: root@bay.csri (Operator) X%%Title: van.xpic (xpic) X%%CreationDate: Wed May 4 23:53:47 1988 X%%Pages: 1 X%%DocumentFonts: (atend) X%%BoundingBox: 96.3 43.2 612 830.7 X% (in inches) at 1.3375 0.6, width 7.1625, height 10.9375 X%%EndComments X% Prolog for xpic to PostScript converter X% Author: Mark Moraes X% $Header: x2ps.pro,v 1.2 88/03/19 16:50:09 moraes Exp X% %d D - change style SOLID, DOTTED, SHORT-DASH, LONG-DASH, DOT-DASH X% %d F - change font ROMAN, BOLD, ITALIC, SPECIAL X% %d S - change size (font size in points) X% (%s) rj %d t - text right just. (%d is TOPLINE, MIDLINE, BOTLINE) X% (%s) lj %d t - text left just. (%d is TOPLINE, MIDLINE, BOTLINE) X% (%s) ce %d t - text centered (%d is TOPLINE, MIDLINE, BOTLINE) X% %d %d l - lineto X% %d %d m - moveto X% %d %d s - spline segment X% x - flush line, spline X% <wid> <ht> <x> <y> b - box X% <wid> <ht> <x> <y> e - ellipse X% %d ss - setscale X% %d W - change linewidth Xsave 50 dict begin /xpic exch def X/StartXpic {newpath 0 0 moveto [] 0 setdash 0 setgray 1 setlinecap} def X% Set defaults X/fontname /Times-Roman def X/ptsize 12 def X% xpic has 4 fonts R, B, I, S X/nfonts 4 def X/fonts /Times-Roman /Times-Bold /Times-Italic /Symbol nfonts array astore def X% halign has the values for MIDLINE, TOPLINE, BOTLINE X/halign 3 array def X/s {rcurveto} def X/x {stroke} def X/l {lineto} def X/m {moveto} def X/b { X /ury exch def /urx exch def /lly exch def /llx exch def X llx lly moveto urx lly lineto urx ury lineto X llx ury lineto llx lly lineto stroke X} def X/mtrx matrix def X/e { X /yc exch def /xc exch def /yrad exch def /xrad exch def X xc xrad add yc moveto X /savematrix mtrx currentmatrix def X xc yc translate X xrad yrad scale X 0 0 1 0 360 arc X savematrix setmatrix stroke X} def X% The next three take the text string, and moveto the right horiz. position X% leaving the string on the stack. X/lj {} def X/rj {dup stringwidth pop neg 0 rmoveto} def X/ce {dup stringwidth pop 2 div neg 0 rmoveto} def X% And this is invoked after one of the three above, and X% computes the vert. pos, and then displays the string. X/t {halign exch get 0 exch rmoveto show newpath} def X% Store an array of patterns in /styles - a pattern is an array consisting X% of an array and an offset. Corresp to xpic patterns X% solid, dotted, short-dashed, long-dashed, dot-dashed X/styles [ [] 0 ] [ [1 3] 0 ] [ [4 4] 0 ] [ [8 4] 0 ] [ [1 4 4 4] 0 ] X 5 array astore def X% change style to arg. X/D {stroke styles exch get aload pop setdash newpath} def X/W {stroke setlinewidth newpath} def X% fontbox takes a fontname of the stack, and returns an array X% containing the values of the bottom line of the bounding box, the X% mid line of the bounding box, and the top line of the bounding box X% of that font, taken from the baseline, scaled to a font of size 1 X/fontbox { X findfont dup /FontMatrix get /fm exch def /FontBBox get aload pop X /ytop exch def pop /ybot exch def pop X /ymid ytop ybot sub 2 div def X 0 ybot fm dtransform exch pop % botline X dup neg exch % midline - this works better than (ytop-ybot)/2! X 0 ytop fm dtransform exch pop exch %topline X % now in the order midline, topline, botline. X 3 array astore X} def X% fontboxes stores the fontbox of each of the fontnames in the 'fonts' X% array X/fontboxes nfonts array def X0 1 nfonts 1 sub { X fontboxes exch dup fonts exch get fontbox put X} for X% select font X/F { X dup fonts exch get /fontname exch def fontboxes exch get X /thisfontbox exch def SF X} def X% set point size X/S {/ptsize exch def SF} def X% actually set font X/SF { X fontname findfont ptsize curscale div scalefont setfont X thisfontbox aload pop X 1 1 3 { X pop ptsize mul curscale div neg 3 1 roll X } for X halign astore pop X} def X% sets the scale to 72 / n, where n is on the stack, and stores the value X% in curscale for font scaling X/curscale 1 def X/ss {/curscale exch 72 exch div dup dup scale def} def X/land {8.5 72 mul curscale div 0 translate 90 rotate} def XStartXpic X%%EndProlog Xland X1 1 scale X80 ss X0 F X14 S X495 77 m X(ODU - Operand Decode Unit) ce 1 t X10 S X163 85 m X(ind2) ce 1 t X331 89 m X(ind1) ce 1 t X79 125 m X(ind2.set) ce 1 t X0 D X163 177 m X163 161 l Xx X155 161 m X171 161 l Xx X331 177 m X331 161 l X323 161 l X339 161 l Xx X323 161 m X331 145 l X339 161 l Xx X155 161 m X163 145 l X171 161 l Xx X3 3 162 141 e X3 3 331 145 e X331 141 m X331 129 l X0 D X335 138 m X331 129 l X328 138 l X0 D X331 129 m Xx X163 137 m X163 125 l X0 D X167 134 m X163 125 l X160 134 l X0 D X163 125 m Xx X311 129 m X355 129 l X347 113 l X315 113 l X307 129 l Xx X143 121 m X187 121 l X179 105 l X151 105 l X155 105 l X147 105 l X139 121 l Xx X331 113 m X331 93 l X0 D X335 102 m X331 93 l X328 102 l X0 D X331 93 m Xx X163 105 m X163 85 l X0 D X167 94 m X163 85 l X160 94 l X0 D X163 85 m Xx X111 137 m X151 137 l X151 121 l X0 D X155 130 m X151 121 l X148 130 l X0 D X151 121 m Xx X291 145 m X315 145 l X315 129 l X0 D X319 138 m X315 129 l X312 138 l X0 D X315 129 m Xx X291 121 m X311 121 l X0 D X303 125 m X311 121 l X303 118 l X0 D X311 121 m Xx X107 113 m X143 113 l X0 D X135 117 m X143 113 l X135 110 l X0 D X143 113 m Xx X75 145 m X(ind2.val) ce 1 t X267 129 m X(ind1.set) ce 1 t X263 153 m X(ind1.val) ce 1 t X355 185 m X(QA\(7\)) ce 1 t X139 185 m X(QA\(6\)) ce 1 t X319 261 m X0 0 0 1 0 4 s X0 2 1 5 4 8 s X2 2 5 2 8 0 s X2 -2 4 -6 4 -12 s Xx X319 261 m X0 0 5 0 16 0 s Xx X2 2 299 346 e X287 381 m X291 381 l X0 D X283 385 m X291 381 l X283 378 l X0 D X291 381 m Xx X283 337 m X291 337 l X0 D X283 341 m X291 337 l X283 334 l X0 D X291 337 m Xx X315 401 m X339 401 l Xx X419 445 m X315 445 l X315 377 l X335 377 l Xx X283 381 m X303 381 l X303 393 l X335 393 l Xx X287 381 m X287 345 l X299 345 l Xx X287 337 m X303 337 l Xx X319 341 m X327 341 l X327 369 l X335 369 l Xx X351 373 m X375 373 l X375 349 l X415 349 l X0 D X407 353 m X415 349 l X407 346 l X0 D X415 349 m Xx X351 397 m X383 397 l X383 365 l X415 365 l X0 D X407 369 m X415 365 l X407 362 l X0 D X415 365 m Xx X415 429 m X391 429 l X391 381 l X415 381 l X0 D X407 385 m X415 381 l X407 378 l X0 D X415 381 m Xx X415 413 m X399 413 l X399 333 l X415 333 l X0 D X407 337 m X415 333 l X407 330 l X0 D X415 333 m Xx X415 389 495 325 b X12 S X447 341 m X(IBASE) ce 1 t X471 357 m X(ROM) ce 0 t X471 373 m X(4X5bit) ce 0 t X431 349 m X(SP) ce 0 t X431 365 m X(FP) ce 0 t X431 381 m X(PC) ce 0 t X127 389 m X0 0 0 1 0 4 s X0 2 1 5 4 8 s X2 2 5 2 8 0 s X2 -2 4 -6 4 -12 s Xx X127 389 m X0 0 5 0 16 0 s Xx X335 405 m X0 0 1 0 4 0 s X2 0 5 -1 8 -4 s X2 -2 2 -5 0 -8 s X-2 -2 -6 -4 -12 -4 s Xx X423 413 m X415 413 l X0 D X424 410 m X415 413 l X424 417 l X0 D X415 413 m Xx X423 429 m X415 429 l X0 D X424 426 m X415 429 l X424 433 l X0 D X415 429 m Xx X423 445 m X415 445 l X0 D X424 442 m X415 445 l X424 449 l X0 D X415 445 m Xx X803 405 m X795 401 l Xx X643 497 m X639 489 l Xx X643 345 m X635 337 l Xx X643 433 m X635 425 l Xx X787 457 m X799 465 l Xx X791 461 m X795 461 l Xx X803 453 m X811 461 l Xx X10 S X747 521 m X(\(FP/SP\)) ce 1 t X12 S X451 437 m X(PC.ena) ce 1 t X455 453 m X(op2.ena) ce 1 t X691 333 m X695 333 l X0 D X687 337 m X695 333 l X687 330 l X0 D X695 333 m Xx X10 S X683 345 m X(bcc) ce 1 t X815 453 m X(5) ce 1 t X783 453 m X(5) ce 1 t X687 465 m X695 465 l Xx X679 517 m X679 509 l X0 D X683 518 m X679 509 l X676 518 l X0 D X679 509 m Xx X707 421 m X707 453 l X707 453 l Xx X855 365 m X847 365 l X0 D X856 362 m X847 365 l X856 369 l X0 D X847 365 m Xx X607 525 m X631 525 l Xx X607 525 m X0 0 0 -1 0 -4 s X0 -2 1 -5 4 -8 s X2 -2 5 -4 8 -4 s X2 0 5 1 8 4 s X2 2 4 6 4 12 s Xx X615 533 m X615 525 l X0 D X619 534 m X615 525 l X612 534 l X0 D X615 525 m Xx X851 525 m X843 525 l X0 D X852 522 m X843 525 l X852 529 l X0 D X843 525 m Xx X831 333 m X823 317 l Xx X807 477 m X807 429 l X0 D X811 438 m X807 429 l X804 438 l X0 D X807 429 m Xx X12 S X807 493 m X(ROM) ce 1 t X735 365 m X743 365 l X0 D X735 369 m X743 365 l X735 362 l X0 D X743 365 m Xx X755 365 m X743 365 l Xx X10 S X719 365 m X(\(Bf1\)) ce 1 t X871 381 m X(Bf1.ena) ce 1 t X719 381 m X(QA\(7\)) ce 1 t X755 381 m X755 365 l Xx X763 365 m X763 381 l Xx X847 365 m X763 365 l Xx X751 381 m X0 0 0 1 0 4 s X0 2 1 6 4 10 s X2 4 5 4 8 0 s X2 -4 4 -8 4 -14 s Xx X751 381 m X767 381 l Xx X759 421 m X759 397 l X759 397 l Xx X771 420 m X782 421 l Xx X711 557 m X711 461 l X727 461 l X727 405 l X695 405 l X695 349 l X671 349 l X671 333 l X695 333 l Xx X747 437 m X(B1.sel) ce 1 t X687 469 m X687 453 l Xx X775 421 m X775 421 l Xx X12 S X775 509 m X(FP) ce 1 t X759 501 m X751 501 l X727 501 l X727 565 l Xx X615 541 m X615 525 l Xx X10 S X583 557 m X(Call.ena) ce 1 t X615 541 m X591 541 l Xx X619 493 m X623 493 l Xx X619 509 m X619 493 l Xx X0 0 707 421 e X0 0 708 421 e X0 0 708 422 e X0 0 708 422 e X3 3 688 456 e X839 541 m X623 541 l Xx X12 S X807 509 m X(2X5bit) ce 1 t X10 S X727 485 m X(5) ce 1 t X707 457 m X691 457 l Xx X707 457 m X707 453 l X707 453 l Xx X775 421 m X687 421 l X687 397 l X655 397 l X655 405 l Xx X847 541 m X839 541 l X0 D X848 538 m X839 541 l X848 545 l X0 D X839 541 m Xx X847 525 m X695 525 l X695 461 l Xx X711 565 m X711 557 l X0 D X715 566 m X711 557 l X708 566 l X0 D X711 557 m Xx X671 461 m X655 461 l X655 469 l X0 D X652 461 m X655 469 l X659 461 l X0 D X655 469 m Xx X687 469 m X0 0 -1 0 -4 0 s X-2 0 -5 -1 -8 -4 s X-2 -2 -2 -5 0 -8 s X2 -2 6 -4 12 -4 s Xx X751 485 m X747 485 l Xx X2 2 744 484 e X735 477 m X743 485 l Xx X735 489 m X743 485 l Xx X735 489 m X735 477 l Xx X12 S X596 157 m X(rti.ena) ce 1 t X195 589 m X203 593 l Xx X315 589 m X323 597 l Xx X655 397 m X655 405 l X0 D X652 397 m X655 405 l X659 397 l X0 D X655 405 m Xx X783 413 m X775 429 l Xx X623 541 m X623 525 l Xx X871 533 m X(opl.ena) ce 1 t X871 549 m X(CC.ena) ce 1 t X10 S X783 61 m X(SEB=SignExtender+Bufferr output) ce 1 t X12 S X599 181 m X(sop.ena) ce 1 t X863 157 m X(pull.ena) ce 1 t X695 133 m X647 181 l Xx X775 133 m X823 181 l Xx X695 133 m X775 133 l Xx X791 197 m X791 181 l X0 D X795 190 m X791 181 l X788 190 l X0 D X791 181 m Xx X759 197 m X759 181 l X0 D X763 190 m X759 181 l X756 190 l X0 D X759 181 m Xx X727 197 m X727 181 l X0 D X731 190 m X727 181 l X724 190 l X0 D X727 181 m Xx X679 197 m X679 181 l X0 D X683 190 m X679 181 l X676 190 l X0 D X679 181 m Xx X647 181 m X823 181 l Xx X679 181 m X(sop) ce 1 t X727 181 m X(rti) ce 1 t X759 181 m X(pull) ce 1 t X791 181 m X(push) ce 1 t X679 213 m X(QA\(7:6\)) ce 1 t X727 213 m X('+1') ce 1 t X759 213 m X('0') ce 1 t X791 213 m X('-2') ce 1 t X623 173 m X655 173 l X0 D X647 177 m X655 173 l X647 170 l X0 D X655 173 m Xx X623 149 m X679 149 l X0 D X671 153 m X679 149 l X671 146 l X0 D X679 149 m Xx X839 173 m X815 173 l X0 D X824 170 m X815 173 l X824 177 l X0 D X815 173 m Xx X839 149 m X791 149 l X0 D X800 146 m X791 149 l X800 153 l X0 D X791 149 m Xx X719 581 m X719 573 l X0 D X723 582 m X719 573 l X716 582 l X0 D X719 573 m Xx X719 581 m X719 565 l Xx X719 573 m X719 469 l X791 469 l X791 429 l X0 D X795 438 m X791 429 l X788 438 l X0 D X791 429 m Xx X727 573 m X727 565 l X0 D X731 574 m X727 565 l X724 574 l X0 D X727 565 m Xx X735 485 m X727 485 l X727 501 l Xx X10 S X671 517 m X(4) ce 1 t X663 533 m X(QA\(11:8\)) ce 1 t X759 485 m X751 485 l Xx X751 581 m X(QA\(12\)) ce 1 t X12 S X775 493 m X(SP) ce 1 t X759 509 831 477 b X815 333 m X(F) ce 1 t X791 317 m X823 317 l Xx X839 541 m X839 325 l X831 325 l X0 D X840 322 m X831 325 l X840 329 l X0 D X831 325 m Xx X10 S X679 445 m X('0') ce 1 t X679 429 m X663 429 l X0 D X672 426 m X663 429 l X672 433 l X0 D X663 429 m Xx X663 501 m X679 501 l X679 517 l Xx X639 285 m X(0ffset1\(5\)) ce 1 t X631 373 m X(5) ce 1 t X639 357 m X(5) ce 1 t X639 445 m X(5) ce 1 t X639 509 m X(4) ce 1 t X655 381 m X655 365 l X0 D X659 374 m X655 365 l X652 374 l X0 D X655 365 m Xx X623 493 m X623 293 l X0 D X627 302 m X623 293 l X620 302 l X0 D X623 293 m Xx X647 341 m X623 341 l X0 D X632 338 m X623 341 l X632 345 l X0 D X623 341 m Xx X647 429 m X623 429 l X0 D X632 426 m X623 429 l X632 433 l X0 D X623 429 m Xx X647 493 m X623 493 l X0 D X632 490 m X623 493 l X632 497 l X0 D X623 493 m Xx X743 133 m X(2) ce 1 t X191 621 m X(QA <17:0>) ce 1 t X295 621 m X(QB <17:0>) ce 1 t X12 S X463 421 m X(JBASE.ena) ce 1 t X263 229 m X(\(Bf2\)) ce 1 t X263 253 m X(QA\(6\)) ce 1 t X271 285 m X(B2.sel) ce 1 t X263 357 m X(QA\(4\)) ce 1 t X263 373 m X(\(FP\)) ce 1 t X263 389 m X(QA\(5\)) ce 1 t X39 381 m X(QA\(3\)) ce 1 t X39 365 m X(QA\(4\)) ce 1 t X39 349 m X(QA\(5\)) ce 1 t X175 573 m X(10) ce 1 t X199 605 m X199 573 l Xx X231 573 m X(13) ce 1 t X279 573 m X(7) ce 1 t X327 573 m X55 573 l X55 437 l Xx X167 549 m X(SEB) ce 0 t X151 557 183 541 b X175 533 m X(30) ce 1 t X167 541 m X167 509 l X0 D X171 518 m X167 509 l X164 518 l X0 D X167 509 m Xx X151 429 m X(30) ce 1 t X143 437 m X167 437 l X0 D X159 441 m X167 437 l X159 434 l X0 D X167 437 m Xx X135 549 m X151 549 l X0 D X143 553 m X151 549 l X143 546 l X0 D X151 549 m Xx X135 421 m X(B) ce 0 t X135 437 m X(E) ce 0 t X127 461 143 413 b X135 453 m X(S) ce 0 t X47 333 m X(\(FP\)) ce 1 t X319 573 m X319 557 l X0 D X323 566 m X319 557 l X316 566 l X0 D X319 557 m Xx X327 573 m X(12) ce 1 t X415 517 m X(offset<17:0>) ce 1 t X335 597 m X(18) ce 1 t X319 605 m X319 581 l X367 581 l X367 557 l Xx X359 573 m X(18) ce 1 t X215 597 m X(18) ce 1 t X151 325 m X(30) ce 1 t X183 285 m X(offset2\(30\)) ce 1 t X183 301 m X(30) ce 1 t X295 549 m X303 549 l X0 D X295 553 m X303 549 l X295 546 l X0 D X303 549 m Xx X247 549 m X255 549 l X0 D X247 553 m X255 549 l X247 546 l X0 D X255 549 m Xx X191 549 m X199 549 l X0 D X191 553 m X199 549 l X191 546 l X0 D X199 549 m Xx X375 533 m X(18) ce 1 t X327 533 m X(12) ce 1 t X223 533 m X(30) ce 1 t X279 533 m X(12) ce 1 t X423 557 m X(36bit.ena) ce 1 t X399 549 m X383 549 l X0 D X392 546 m X383 549 l X392 553 l X0 D X383 549 m Xx X143 333 m X167 333 l X0 D X159 337 m X167 333 l X159 330 l X0 D X167 333 m Xx X367 509 m X167 509 l X167 285 l X0 D X171 294 m X167 285 l X164 294 l X0 D X167 285 m Xx X367 541 m X367 509 l X0 D X371 518 m X367 509 l X364 518 l X0 D X367 509 m Xx X319 541 m X319 509 l X0 D X323 518 m X319 509 l X316 518 l X0 D X319 509 m Xx X271 541 m X271 509 l X0 D X275 518 m X271 509 l X268 518 l X0 D X271 509 m Xx X215 541 m X215 509 l X0 D X219 518 m X215 509 l X212 518 l X0 D X215 509 m Xx X271 573 m X271 557 l X0 D X275 566 m X271 557 l X268 566 l X0 D X271 557 m Xx X215 573 m X215 557 l X0 D X219 566 m X215 557 l X212 566 l X0 D X215 557 m Xx X167 573 m X167 557 l X0 D X171 566 m X167 557 l X164 566 l X0 D X167 557 m Xx X247 621 m X247 605 l Xx X663 389 m X(CC.ena) ce 1 t X647 453 663 405 b X647 517 663 469 b X823 293 m X(Breq1\(5\)) ce 1 t X655 349 m X(U) ce 1 t X655 365 m X(B) ce 1 t X655 421 m X(F) ce 1 t X655 437 m X(U) ce 1 t X655 453 m X(B) ce 1 t X655 485 m X(B) ce 1 t X655 501 m X(E) ce 1 t X655 517 m X(S) ce 1 t X127 357 143 309 b X135 317 m X(F) ce 0 t X135 333 m X(U) ce 0 t X135 349 m X(B) ce 0 t X295 517 m X(off.30) ce 0 t X247 517 m X(off.25) ce 0 t X191 517 m X(off.13) ce 0 t X303 549 m X295 549 l X295 525 l Xx X255 549 m X247 549 l X247 525 l Xx X199 549 m X191 549 l X191 549 l X191 525 l Xx X351 557 383 541 b X303 557 335 541 b X255 557 287 541 b X199 557 231 541 b X199 557 199 549 b X143 621 343 605 b X319 549 m X(SEB) ce 0 t X367 549 m X(BUF) ce 0 t X271 549 m X(SEB) ce 0 t X215 549 m X(SEB) ce 0 t X823 93 m X(before SP is updated\12) ce 1 t X823 109 m X(+1 will be added\12) ce 1 t X743 109 m X(sop\(2\)) ce 1 t X647 365 663 317 b X695 341 767 309 b X727 325 m X(8X8bits) ce 1 t X727 341 m X(BCC ROM) ce 1 t X95 453 m X(QA<3:0>) ce 1 t X863 197 m X(push.ena) ce 1 t X823 429 m X815 413 l Xx X815 413 m X783 413 l Xx X775 429 m X823 429 l Xx X791 429 m X(1) ce 1 t X807 429 m X(0) ce 1 t X799 413 m X799 389 l X815 389 l X815 333 l X0 D X819 342 m X815 333 l X812 342 l X0 D X815 333 m Xx X783 333 m X831 333 l Xx X799 333 m X(T) ce 1 t X783 333 m X791 317 l Xx X751 309 m X751 293 l X775 293 l X775 349 l X799 349 l X791 349 l X799 349 l X799 333 l X0 D X803 342 m X799 333 l X796 342 l X0 D X799 333 m Xx X807 317 m X807 293 l X0 D X811 302 m X807 293 l X804 302 l X0 D X807 293 m Xx X10 S X767 309 m X(4) ce 1 t X807 405 m X(5) ce 1 t X12 S X655 333 m X(F) ce 1 t X10 S X703 309 m X(4) ce 1 t X711 309 m X711 293 l X679 293 l X679 325 l X663 325 l X0 D X672 322 m X663 325 l X672 329 l X0 D X663 325 m Xx X687 581 m X(QA\(12:10\)) ce 1 t X735 597 m X(QA\(12:8\)) ce 1 t X735 133 m X735 109 l X0 D X739 118 m X735 109 l X732 118 l X0 D X735 109 m Xx X303 349 m X303 333 l Xx X303 349 m X0 0 1 0 4 0 s X2 0 5 -1 8 -4 s X2 -2 2 -5 0 -8 s X-2 -2 -6 -4 -12 -4 s Xx X335 381 m X0 0 1 0 4 0 s X2 0 5 -1 8 -4 s X2 -2 2 -5 0 -8 s X-2 -2 -6 -4 -12 -4 s Xx X75 273 m X0 0 0 -1 0 -4 s X0 -2 1 -5 4 -8 s X2 -2 5 -4 8 -4 s X2 0 5 1 8 4 s X2 2 4 6 4 12 s Xx X75 273 m X99 273 l Xx X335 381 m X335 365 l Xx X335 405 m X335 389 l Xx X495 293 m X487 269 l Xx X415 293 m X423 269 l Xx X423 269 m X487 269 l Xx X415 293 m X495 293 l Xx X303 309 m X439 309 l X439 293 l X0 D X443 302 m X439 293 l X436 302 l X0 D X439 293 m Xx X463 325 m X463 293 l X0 D X467 302 m X463 293 l X460 302 l X0 D X463 293 m Xx X303 285 m X415 285 l X0 D X407 289 m X415 285 l X407 282 l X0 D X415 285 m Xx X455 269 m X455 237 l X0 D X459 246 m X455 237 l X452 246 l X0 D X455 237 m Xx X327 277 m X327 285 l Xx X287 245 m X323 245 l X323 261 l Xx X331 261 m X331 245 l X351 245 l Xx X135 405 m X135 413 l Xx X131 365 m X163 365 l Xx X139 389 m X139 377 l X163 377 l Xx X131 357 m X131 381 l Xx X55 437 m X127 437 l Xx X3 3 132 385 e X3 3 80 277 e X3 3 96 276 e X359 245 m X351 245 l X0 D X360 242 m X351 245 l X360 249 l X0 D X351 245 m Xx X287 245 m X295 245 l X0 D X287 249 m X295 245 l X287 242 l X0 D X295 245 m Xx X303 285 m X311 285 l X0 D X303 289 m X311 285 l X303 282 l X0 D X311 285 m Xx X303 309 m X311 309 l X0 D X303 313 m X311 309 l X303 306 l X0 D X311 309 m Xx X87 253 m X87 237 l X0 D X91 246 m X87 237 l X84 246 l X0 D X87 237 m Xx X63 373 m X71 373 l X0 D X63 377 m X71 373 l X63 370 l X0 D X71 373 m Xx X63 357 m X71 357 l X0 D X63 361 m X71 357 l X63 354 l X0 D X71 357 m Xx X55 437 m X55 389 l X71 389 l X71 317 l X95 317 l X95 349 l X0 D X92 341 m X95 349 l X99 341 l X0 D X95 349 m Xx X12 S X119 349 m X('0') ce 1 t X95 397 m X95 349 l Xx X111 357 m X111 389 l Xx X95 397 m X111 389 l Xx X71 373 m X95 373 l X0 D X87 377 m X95 373 l X87 370 l X0 D X95 373 m Xx X95 349 m X111 357 l Xx X59 341 m X71 341 l X0 D X63 345 m X71 341 l X63 338 l X0 D X71 341 m Xx X119 333 m X127 333 l X0 D X119 337 m X127 333 l X119 330 l X0 D X127 333 m Xx X79 429 m X(4) ce 1 t X71 357 m X95 357 l X0 D X87 361 m X95 357 l X87 354 l X0 D X95 357 m Xx X79 357 m X79 277 l Xx X87 317 m X87 285 l X95 285 l X95 277 l Xx X10 S X103 389 m X(0) ce 1 t X103 365 m X(1) ce 1 t X87 237 m X(immediate\(1\)) ce 1 t X12 S X207 389 m X(op2.ena) ce 1 t X199 365 m X(B2.sel) ce 1 t X183 377 m X175 377 l X0 D X184 374 m X175 377 l X184 381 l X0 D X175 377 m Xx X183 365 m X171 365 l X0 D X180 362 m X171 365 l X180 369 l X0 D X171 365 m Xx X455 233 m X(Breq2\(5\)) ce 1 t X111 557 m X(off.10) ce 1 t X10 S X435 285 m X(1) ce 1 t X467 285 m X(0) ce 1 t X463 261 m X(5) ce 1 t X471 313 m X(5) ce 1 t X12 S X263 341 m X(\(SP/i\)) ce 1 t X10 S X423 305 m X(5) ce 1 t X111 373 m X119 373 l X119 437 l Xx X12 S X271 313 m X(QA\(4:0\)) ce 1 t X10 S X115 421 m X(5) ce 1 t X107 321 m X(FP) ce 1 t X31 221 m X39 213 l X263 213 l X263 205 l X271 213 l X519 213 l X527 221 l Xx X575 277 m X583 269 l X727 269 l X735 261 l X743 269 l X887 269 l X895 277 l Xx X735 261 m X(FIELD1) ce 1 t X263 205 m X(FIELD 2) ce 1 t X591 317 m X591 285 l X0 D X595 294 m X591 285 l X588 294 l X0 D X591 285 m Xx X511 253 m X511 229 l X0 D X515 238 m X511 229 l X508 238 l X0 D X511 229 m Xx X591 333 m X(ind1) ce 1 t X511 269 m X(ind2) ce 1 t X%%Trailer Xshowpage X% Trailer for xpic to PostScript converter X% $Header: x2ps.tra,v 1.1 87/11/21 20:33:03 moraes Exp $ Xxpic end restore X%%DocumentFonts: Times-Roman Times-Italic Times-Bold Special END_OF_FILE if test 18365 -ne `wc -c <'xpic/test/van.ps'`; then echo shar: \"'xpic/test/van.ps'\" unpacked with wrong size! fi # end of 'xpic/test/van.ps' fi if test -f 'xpic/windows.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'xpic/windows.c'\" else echo shar: Extracting \"'xpic/windows.c'\" \(20058 characters\) sed "s/^X//" >'xpic/windows.c' <<'END_OF_FILE' X/* X * CreateWindows() sets up all the windows in a widget hierarchy that X * consists of a form enclosing the picture window (Chris Peterson's X * Window widget), my Minibuf widget under it, and a column of Labels X * (StaticText) and ButtonBoxes (RCmanagers) to the right of it. If you X * want to try and figure out what this is, you had better have the Xt X * Intrinsics manual, and HP widgets handy. And plenty of aspirin... X */ X/* Mark Moraes, CSRI, University of Toronto, July 26, 1988 */ X#include <X11/StringDefs.h> X#include <X11/Intrinsic.h> X#include <Xw/Xw.h> X#include <Xw/PButton.h> X#include <Xw/RCManager.h> X#include <Xw/Form.h> X#include <Xw/SText.h> X#include "Window.h" X#include "Minibuf.h" X X#include "xpic.h" X#include "windows.h" X#include "input.h" X#include "newfonts.h" X#include "draw.h" X X#define MAXARGS 32 X/* X * Arbitrary choice of width based on trial and error - if someone X * finds a better way, let me know. This is the width of the 'menu' of X * buttons along the right X */ X#define BUTTON_AREA_WIDTH 270 X X#define MAXWIDGETS 256 X X#define FORM_NAME "form" X#define PIC_NAME "picture" X#define MINIBUF_NAME "minibuf" X#define DUMMYBUF_NAME "dummybuf" X#define BUTTON_CURSOR "top_left_arrow" X#define PIC_CURSOR "tcross" X#define TEXT_CURSOR "xterm" X#define WAIT_CURSOR "watch" X XArg args[MAXARGS]; Xstatic Cardinal argcount; X#define setarg(name, value) (XtSetArg(args[argcount], name, value), argcount++) X X/* X * In order to be efficient we should manage the whole hierarchy in X * one go, the docs would have us believe. So we XtCreate() all X * widgets, and store them in this array, using the addthingy() macro, X * and before we realize the toplevel, we XtManage the whole X * shebang. X */ XWidget *thingies; Xstatic Cardinal num_kids = 0; XWidget LastParent; X X#define addthingy(w, parent) \ X{\ Xif (LastParent == parent) \ X thingies[num_kids++] = w;\ Xelse \ X{\ X XtManageChildren(thingies, num_kids);\ X num_kids = 0;\ X thingies[num_kids++] = w;\ X}\ XLastParent = parent; } X X/* X * Selecting a button releases the button that is presently selected in X * a radio button box. So we don't want a release action X */ Xstatic String booleanButtonTransTbl = X "<Btn1Down>: select()\n\ X <EnterWindow>: enter()\n\ X <LeaveWindow>: leave()\n\ X <FocusIn>: focusIn() \n\ X <FocusOut>: focusOut() \n\ X <KeyDown>s: select() \n\ X <KeyDown>0xFF60: select() \n\ X <KeyUp>0xFF60: unselect() \n\ X <Key>0xFF52: traverseUp() \n\ X <Key>0xFF54: traverseDown() \n\ X <Key>0xFF51: traverseLeft() \n\ X <Key>0xFF53: traverseRight() \n\ X <Key>0xFF56: traverseNext() \n\ X <Key>0xFF55: traversePrev() \n\ X <Key>0xFF50: traverseHome()"; X Xstatic String defaultButtonTransTbl = X "<Btn1Down>: select() unselect()\n\ X <EnterWindow>: enter()\n\ X <LeaveWindow>: leave()\n\ X <FocusIn>: focusIn() \n\ X <FocusOut>: focusOut() \n\ X <KeyDown>s: select() \n\ X <KeyDown>0xFF60: select() \n\ X <KeyUp>0xFF60: unselect() \n\ X <Key>0xFF52: traverseUp() \n\ X <Key>0xFF54: traverseDown() \n\ X <Key>0xFF51: traverseLeft() \n\ X <Key>0xFF53: traverseRight() \n\ X <Key>0xFF56: traverseNext() \n\ X <Key>0xFF55: traversePrev() \n\ X <Key>0xFF50: traverseHome()"; X Xstatic String updownTransTbl = X "<Btn1Down>: increment() select() \n\ X <Btn3Down>: decrement() select() \n\ X <Btn1Up>: unselect() \n\ X <Btn3Up>: unselect() \n\ X <EnterWindow>: enter() \n\ X <LeaveWindow>: leave() \n\ X <FocusIn>: focusIn() \n\ X <FocusOut>: focusOut() \n\ X <KeyDown>s: select() \n\ X <KeyDown>0xFF60: select() \n\ X <KeyUp>0xFF60: unselect() \n\ X <Key>0xFF52: traverseUp() \n\ X <Key>0xFF54: traverseDown() \n\ X <Key>0xFF51: traverseLeft() \n\ X <Key>0xFF53: traverseRight() \n\ X <Key>0xFF56: traverseNext() \n\ X <Key>0xFF55: traversePrev() \n\ X <Key>0xFF50: traverseHome()"; X Xextern void Increment(), Decrement(); XXtActionsRec actionTable[] = { X {"increment", Increment}, X {"decrement", Decrement}, X}; X Xstatic XtTranslations booleanButtonTranslations; Xstatic XtTranslations defaultButtonTranslations; Xstatic XtTranslations updownTranslations; X X/* X * This array contains the names of the various menu items, and is X * structured in the form BoxTitle, BoxItemList, BoxTitle, BoxItemList, X * ......, 0 where each BoxItemList consists of BoxItemName, X * BoxItemName, ...., 0. The & indicates Command buttons and the + X * indicates the default value, which only makes sense for boolean X * buttons. The "*" is a special button - instead of making the X * procedure with it a handler, that procedure is called immediately, X * with the label as an argument - the procedure in question returns a X * ButtonInfo struct, and also initializes it's data appropriately. X * Typically, (well, always) I use this for an "up-down" button - this X * is a Command button where pressing the right key decrements, and the X * left key increments, and allows you to cycle through a list of X * choices. The initializing routine is meant to set this list of X * things to cycle through up - this can be read from a file. X */ X X/* X * The method of initializing defaults is not too elegant, because the + X * merely means that the button should be highlit - it does not set the X * appropriate variables, which are initialized somewhere at the end of X * CreateWindows, and should be changed if the defaults are changed. X * Now if this was in a proper object oriented language...... X */ Xextern void picEventHandle(); X Xextern void copy(), cut(), move(), adjust(), X rotate(), scale(), paste(), X change(), editattrib(), element(), X linepattern(), linearrow(), linethickness(), X textfont(), textsize(), X readcell(), savecell(), getcell(), putcell(), X lprintcell(), X redisplay(), quit(), change_buffer(), X kill_buffer(), textvalign(), texthalign(), X setgrid(), setsnap(), undo(), status(); X#ifdef DEBUG Xextern void printcell(); X#endif X Xstatic ButtonInfo buttonnames[] = { X "Elements", NULL, X "Box", element, "+Line", element, "Spline", element, X "Circle", element, "Ellipse", element, "Text", element, X "Copy", copy, "Move", move, "Delete", cut, "Paste", paste, X "Adjust", adjust, "ChangeAttribute", change, X#if 0 X /* !! One day... */ X "Scale", scale, "Rotate", rotate, X#endif X "Get", getcell, "Put", putcell, X "Edit Attributes", NULL, X "Block", editattrib, "+Element", editattrib, X "Line Patterns", NULL, X "+Solid", linepattern, "Dotted", linepattern, X "Short-Dashed", linepattern, "Long-Dashed", linepattern, X "Dot-Dashed", linepattern, X "Line Thickness", NULL, X "+0", linethickness, X "1", linethickness, "2", linethickness, "3", linethickness, X "4", linethickness, "5", linethickness, "6", linethickness, X "7", linethickness, "8", linethickness, "9", linethickness, X "10", linethickness, X "Line Arrows", NULL, X "+None", linearrow, "Start", linearrow, X "End", linearrow, "Both", linearrow, X "Text Font", NULL, X "*", textfont, X "Text Point Size", NULL, X "*", textsize, X "Text Vertical", NULL, X "Top", textvalign, "+Middle", textvalign, "Bottom", textvalign, X "Text Horizontal", NULL, X "+Centred", texthalign, "Left Just.", texthalign, X "Right Just.", texthalign, X "Snap", NULL, X "1", setsnap, "2", setsnap, X "4", setsnap, "+8", setsnap, "16", setsnap , "24", setsnap, X "32", setsnap, "40", setsnap, X "&Files", NULL, X "Read", readcell, "Save", savecell, "Save As", savecell, X "Print", lprintcell, X "&Miscellaneous", NULL, X "Undo", undo, "Redisplay", redisplay, X "Grid", setgrid, "Status", status, "Exit", quit, X#ifdef DEBUG X "PrintCell", printcell, X#endif X#if 0 X "&Buffers", NULL, X "Change Buffer", change_buffer, X "Kill Buffer", kill_buffer, X#endif X NULL, NULL X}; X Xstatic Cursor framecursor, piccursor, waitcursor, textcursor; X X Xvoid CreateWindows(toplevel) XWidget toplevel; X{ X Widget buttonbox, button; X int i; X Dimension height, border; X int isCommand; X char *label; X int maxMenuWidth = BUTTON_AREA_WIDTH; X char boxname[64]; X XrmValue fromVal, toVal; X static XtCallbackRec callbacks[] = { X {finished_input, NULL}, X {NULL, NULL}, X }; X XGCValues gcv; X Pixel foreground, background; X XColor foreback[2]; X char *grid_data; X char *makegrid(); X int grid_width, grid_height, grid_size; X /* X * The grids are stored as bitmaps - that's much faster than drawing X * them point by point The grids are generated by the procedures X * makegrid and invertgrid in grid.c from the value of the grid X * point spacing. X */ X Pixmap gray_tile; X void (*prehandler)(); X ButtonInfo posthandler; X ButtonInfo updowninfo; X XtTranslations translations; X Widget typeout; X extern Widget CreateTypeout(); X extern Pixmap XwCreateTile(); X X thingies = (Widget *) XtCalloc(MAXWIDGETS, sizeof(Widget)); X X XtAddActions(actionTable, XtNumber(actionTable)); X updownTranslations = XtParseTranslationTable(updownTransTbl); X booleanButtonTranslations = XtParseTranslationTable(booleanButtonTransTbl); X defaultButtonTranslations = XtParseTranslationTable(defaultButtonTransTbl); X X outerFrame = XtCreateWidget(FORM_NAME, XwformWidgetClass, X toplevel, (ArgList) NULL, (Cardinal) 0); X addthingy(outerFrame, toplevel); X SetFocusRoot(outerFrame); X fromVal.addr = BUTTON_CURSOR; X fromVal.size = sizeof(BUTTON_CURSOR); X XtConvert(outerFrame, XtRString, &fromVal, X XtRCursor, (XrmValuePtr) &toVal); X framecursor = *(Cursor *) toVal.addr; X X picWinHeight = pageHeight * gridSpacing; X picWinWidth = pageWidth * gridSpacing; X minPicHeight = MINPAGEHEIGHT * gridSpacing; X minPicWidth = MINPAGEWIDTH * gridSpacing; X X /* X * First create the picwin - the XtNyAttachOffset is a lie; we'll X * deal with it later when we get the correct height from the X * minibuf widget. One day, I'll understand how to do this right X */ X argcount = 0; X setarg(XtNwidth, (Dimension) picWinWidth); X setarg(XtNheight, (Dimension) picWinHeight); X setarg(XtNxRefName, FORM_NAME); X setarg(XtNyRefName, FORM_NAME); X setarg(XtNxResizable, True); X setarg(XtNyResizable, True); X setarg(XtNyAttachBottom, True); X setarg(XtNyAttachOffset, 0); X picWidget = XtCreateWidget(PIC_NAME, windowWidgetClass, X outerFrame, args, argcount); X addthingy(picWidget, outerFrame); X fromVal.addr = PIC_CURSOR; X fromVal.size = sizeof(PIC_CURSOR); X XtConvert(outerFrame, XtRString, &fromVal, X XtRCursor, (XrmValuePtr) &toVal); X piccursor = *(Cursor *) toVal.addr; X fromVal.addr = WAIT_CURSOR; X fromVal.size = sizeof(WAIT_CURSOR); X XtConvert(outerFrame, XtRString, &fromVal, X XtRCursor, (XrmValuePtr) &toVal); X waitcursor = *(Cursor *) toVal.addr; X fromVal.addr = TEXT_CURSOR; X fromVal.size = sizeof(TEXT_CURSOR); X XtConvert(outerFrame, XtRString, &fromVal, X XtRCursor, (XrmValuePtr) &toVal); X textcursor = *(Cursor *) toVal.addr; X X#ifdef TYPEOUT X typeout = CreateTypeout(picWidget, 80, 40, 0, 0, (char *) NULL); X#endif X X /* Set event handler for picwin */ X /* One day, we'll use the translation manager here */ X XtAddEventHandler(picWidget, X (EventMask) ExposureMask | ButtonPressMask | PointerMotionMask | X StructureNotifyMask, NULL, picEventHandle, (caddr_t) NULL); X /* create the minibuf */ X argcount = 0; X setarg(XtNwidth, (Dimension) picWinWidth); X setarg(XtNxRefName, FORM_NAME); X setarg(XtNyRefName, PIC_NAME); X setarg(XtNyAddHeight, True); X setarg(XtNxResizable, True); X setarg(XtNyAttachBottom, True); X setarg(XtNyAttachOffset, 0); X setarg(XtNfinishedCallback, callbacks); X#ifdef TYPEOUT X setarg(XtNtypeout, typeout); X setarg(XtNtypeoutColumns, 80); X#endif X inputWidget = XtCreateWidget(MINIBUF_NAME, minibufWidgetClass, X outerFrame, args, argcount); X addthingy(inputWidget, outerFrame); X X /* get the height and border width of the minibuf */ X argcount = 0; X setarg(XtNheight, &height); X setarg(XtNborderWidth, &border); X XtGetValues(inputWidget, args, argcount); X X /* Shorten the picWidget to let the two coexist happily. */ X argcount = 0; X setarg(XtNyAttachOffset, height + 2 * border); X XtSetValues(picWidget, args, argcount); X X /* X * Wanted to use RefWidget, but that causes Xt to dump core in a X * strcpy deep in an XtCreate - so we use Refname which works well, X * but is (I suspect) more time-consuming. Oh well - who cares... X */ X buttonbox = outerFrame; X (void) strcpy(boxname, FORM_NAME); X for (i = 0; buttonnames[i].name != NULL; i++) { X if (buttonnames[i].handler == NULL) { X /* If it starts with &, make it a command box */ X if (*buttonnames[i].name == '&') { X label = &buttonnames[i].name[1]; X isCommand = TRUE; X } else { X label = buttonnames[i].name; X isCommand = FALSE; X } X X /* make label and attach to form */ X argcount = 0; X setarg(XtNwidth, (Dimension) maxMenuWidth); X setarg(XtNstring, label); X setarg(XtNxRefName, PIC_NAME); X setarg(XtNyRefName, boxname); X setarg(XtNxAddWidth, True); X setarg(XtNyAddHeight, True); X setarg(XtNxAttachRight, True); X setarg(XtNalignment, XwALIGN_CENTER); X button = XtCreateWidget(label, X XwstatictextWidgetClass, outerFrame, args, argcount); X addthingy(button, outerFrame); X X /* X * make button box (RCmanager to HP Widgets) and attach to X * label X */ X argcount = 0; X /* X * If it is a command button box, then buttons go up and X * down normally. If radio button, then we only allow one X * button to be down. Fortunately, the RCManager does this X * for us - we just set up the translations for the button X * so that Btn1Up is NOT 'release' - that's done by the X * RCManager X */ X if (!isCommand) X setarg(XtNmode, XwONE_OF_MANY); X setarg(XtNwidth, (Dimension) maxMenuWidth); X /* As many buttons in a row as possible */ X setarg(XtNlayoutType, XwMAXIMUM_UNALIGNED); X setarg(XtNxRefName, PIC_NAME); X setarg(XtNyRefName, label); X setarg(XtNxAddWidth, True); X setarg(XtNyAddHeight, True); X /* X * This maintains the box width, and since height is X * unspecified, computes the minimum height. For X * efficiency, it then gets left alone (we hope) X */ X setarg(XtNlayout, XwMAXIMIZE); X setarg(XtNxResizable, False); X (void) sprintf(boxname, "%s.box", label); X buttonbox = XtCreateWidget(boxname, X XwrowColWidgetClass, outerFrame, args, argcount); X addthingy(buttonbox, outerFrame); X } else { X /* make button a child of the current RCManager */ X argcount = 0; X#if 0 X setarg(XtNhighlightStyle, XwPATTERN_BORDER); X setarg(XtNhighlightTile, XwFOREGROUND); X setarg(XtNhighlightThickness, 0); X#endif X prehandler = buttonnames[i].handler; X posthandler.name = NULL; X label = buttonnames[i].name; X if (isCommand) X translations = defaultButtonTranslations; X else X translations = booleanButtonTranslations; X /* If the button name starts with a '+', it is ON by default */ X if (buttonnames[i].name[0] == '+') { X label++; X setarg(XtNset, True); X } else if (buttonnames[i].name[0] == '*') { X (* prehandler)(label, &updowninfo, &posthandler); X label = updowninfo.name; X prehandler = updowninfo.handler; X translations = updownTranslations; X isCommand = TRUE; /* Just making sure! */ X } X setarg(XtNlabel, label); X setarg(XtNtranslations, translations); X button = XtCreateWidget(label, X XwpushButtonWidgetClass, buttonbox, args, argcount); X addthingy(button, buttonbox); X XtAddCallback(button, XtNselect, prehandler, label); X if (posthandler.name) X (* posthandler.handler)(button); X } X } X X /* This had better be fast */ X if (num_kids) X XtManageChildren(thingies, num_kids); X XtRealizeWidget(toplevel); X XtFree((char *) thingies); X X picWin = XtWindow(picWidget); X inputWin = XtWindow(inputWidget); X X argcount = 0; X setarg(XtNforeground, &foreground); X setarg(XtNbackground, &background); X XtGetValues(picWidget, args, argcount); X X foreback[0].pixel = cursorColor; X foreback[1].pixel = background; X XQueryColors (picDpy, DefaultColormapOfScreen(XtScreen(outerFrame)), X foreback, 2); X XRecolorCursor (picDpy, framecursor, foreback, foreback+1); X XRecolorCursor (picDpy, piccursor, foreback, foreback+1); X XDefineCursor(picDpy, XtWindow(outerFrame), framecursor); X XDefineCursor(picDpy, picWin, piccursor); X X /* X * make the GC stuff here - one for copy, one for invert. Remember X * to change the both appropriately X */ X gcv.foreground = foreground; X gcv.background = background; X gcv.function = GXcopy; X gcv.line_width = 0; X gcv.line_style = LineSolid; X gcNormal = XCreateGC(picDpy, picWin, GCForeground | GCBackground X | GCLineWidth | GCLineStyle | GCFunction, &gcv); X tmpGcNormal = XCreateGC(picDpy, picWin, GCForeground | GCBackground X | GCLineWidth | GCLineStyle | GCFunction, &gcv); X gcv.foreground = background; X gcErase = XCreateGC(picDpy, picWin, GCForeground | GCBackground X | GCLineWidth | GCLineStyle | GCFunction, &gcv); X tmpGcErase = XCreateGC(picDpy, picWin, GCForeground | GCBackground X | GCLineWidth | GCLineStyle | GCFunction, &gcv); X gcv.foreground = foreground ^ background; X gcv.function = GXxor; X gcInvert = XCreateGC(picDpy, picWin, GCForeground | GCBackground X | GCLineWidth | GCLineStyle | GCFunction, &gcv); X tmpGcInvert = XCreateGC(picDpy, picWin, GCForeground | GCBackground X | GCLineWidth | GCLineStyle | GCFunction, &gcv); X X /* This one's for drag boxes and outlines, bounding boxes, etc. */ X gcv.foreground = foreground ^ background; X gcv.background = background; X gcv.function = GXxor; X gcBlock = XCreateGC(picDpy, picWin, GCForeground | GCBackground X | GCFunction, &gcv); X X /* Now create the tile for tiling the pic win */ X if ((grid_data = makegrid(gridSpacing, &grid_size, &grid_width, X &grid_height)) == NULL) { X error("CreateWindows: Can't make grid"); X /*NOTREACHED*/ X } X X if ((gridTile = XCreatePixmapFromBitmapData(XtDisplay(outerFrame), X RootWindowOfScreen(XtScreen(outerFrame)), grid_data, X (unsigned) grid_width, (unsigned) grid_height, gridColor, background, X (unsigned) DefaultDepthOfScreen(XtScreen(outerFrame)))) == NULL) { X error("CreateWindows: Can't make grid tile"); X /*NOTREACHED*/ X } X X blankTile = XwCreateTile(XtScreen(toplevel), foreground, background, X XwBACKGROUND); X X if(gridOn) { X argcount = 0; X setarg(XtNbackgroundPixmap, gridTile); X XtSetValues(picWidget, args, argcount); X } X X gray_tile = XwCreateTile(XtScreen(toplevel), foreground, background, X Xw25_FOREGROUND); X gcv.foreground = foreground ^ background; X gcv.background = background; X gcv.function = GXxor; X gcv.fill_style = FillTiled; X gcv.tile = gray_tile; X X gcGray = XCreateGC(picDpy, picWin, GCForeground | GCBackground X | GCFunction | GCFillStyle | GCTile, &gcv); X X picBox.ll.x = 0; X picBox.ll.y = 0; X picBox.ur.x = picWinWidth; X picBox.ur.y = picWinHeight; X X mouseResolution = gridSpacing; X X if ((verts = (XPoint *) calloc((unsigned) INC_VERTS, sizeof(XPoint))) X == NULL) { X error("CreateWindows: Can't allocate vertex buffer"); X /*NOTREACHED*/ X } X nVerts = 0; X maxVerts = INC_VERTS; X X /* Initialize the line styles - patterns from gnuplot */ X X MAKEPATTERN(LineTypes[SOLID], ""); /* Solid */ X MAKEPATTERN(LineTypes[DOTTED], "\002\003"); /* Dotted */ X MAKEPATTERN(LineTypes[SDASH], "\005\003"); /* Short dashed */ X MAKEPATTERN(LineTypes[LDASH], "\010\004"); /* Long Dashed */ X MAKEPATTERN(LineTypes[DDASH], "\005\003\002\003"); /* Dot dashed */ X X /* X * If these are changed, remember to change the leading + on the X * menu item names in the buttonnnames struct. Not too nice to X * hardwire these like this, but the handlers rely on these being X * set up correctly. X */ X lineThickness = 0; X drawingMode = START_MODE; X editMode = ELEMENT; X objectType = LINE; X line_type = SOLID; X line_arrow = NO_ARROW; X textVertAlign = MIDLINE; X textHorizAlign = CENTRE; X} X X X/* X * Generates a dummy ExposeWindow event X */ Xvoid RedrawPicWin() X{ X XEvent ev; X X XClearWindow(picDpy, picWin); X /* generate a dummy event to redraw the window */ X ev.type = Expose; X ev.xexpose.window = picWin; X ev.xexpose.width = picWinWidth; X ev.xexpose.height = picWinHeight; X picEventHandle(picWidget, (caddr_t) NULL, &ev); X} X Xvoid XSetWaitCursor() X{ X XDefineCursor(picDpy, picWin, waitcursor); X XFlush(picDpy); X} X Xvoid XSetTextCursor() X{ X XDefineCursor(picDpy, picWin, textcursor); X XFlush(picDpy); X} X Xvoid XSetWorkingCursor() X{ X XDefineCursor(picDpy, picWin, piccursor); X XFlush(picDpy); X} END_OF_FILE if test 20058 -ne `wc -c <'xpic/windows.c'`; then echo shar: \"'xpic/windows.c'\" unpacked with wrong size! fi # end of 'xpic/windows.c' fi echo shar: End of archive 13 \(of 15\). cp /dev/null ark13isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 15 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0