1 /*
2 * @(#)help.c 1.2 01/03/85
3 *
4 * Routines to provide help screens for the SUN Gremlin picture editor.
5 *
6 * Mark Opperman (opcode@monet.BERKELEY)
7 *
8 */
9
10 #include <suntool/tool_hs.h>
11 #include "gremlin.h"
12 #include "icondata.h"
13
14 /* imports from main.c */
15
16 extern struct pixwin *pix_pw;
17 extern struct rect pix_size;
18 extern struct pixrect *scratch_pr;
19 extern struct pixfont *text_pf;
20 extern pix_fd;
21 extern menu_fd;
22 extern text_fd;
23 extern tool_fd;
24
25 /* imports from sun.c */
26
27 extern get_any_button();
28
29 /* locals */
30
31 static help_x, help_y; /* current position on help screen */
32
33 #define help_dy (text_pf->pf_defaultsize.y)
34 #define HELP_LEFT 8
35 #define HELP_SKIP 16
36
37
38 /*
39 * Display a help screen consisting of a pixrect, a title and some text.
40 * The current picture is saved in the scratch pixrect before displaying
41 * the help screen. After the user presses a mouse button, the picture
42 * is restored and processing continues.
43 */
44 static
45 help_screen(icon_pr, title, text)
46 struct pixrect *icon_pr;
47 char *title, *text;
48 {
49 /* save current display */
50 pw_read(scratch_pr, 0, 0, pix_size.r_width, pix_size.r_height, PIX_SRC,
51 pix_pw, 0, 0);
52
53 /* clear picture subwindow before help screen display */
54 pw_writebackground(pix_pw, 0, 0, 2000, 2000, PIX_SRC);
55
56 help_x = HELP_LEFT;
57 help_y = 8;
58
59 /* display icon if not a NULL pointer */
60 if (icon_pr != NULL) {
61 pw_write(pix_pw, help_x, help_y, icon_pr->pr_size.x, icon_pr->pr_size.y,
62 PIX_SRC, icon_pr, 0, 0);
63 help_x += icon_pr->pr_size.x + HELP_SKIP;
64 help_message(title);
65 help_y += icon_pr->pr_size.y + HELP_SKIP;
66 }
67 else {
68 help_message(title);
69 help_y += help_dy + HELP_SKIP;
70 }
71
72 help_x = HELP_LEFT;
73 help_message(text);
74
75 help_y += HELP_SKIP;
76 help_x = HELP_LEFT;
77 help_message("Press a mouse button to continue.");
78
79 /* wait for mouse button in any subwindow or tool border */
80 get_any_button();
81
82 /* restore picture subwindow */
83 pw_write(pix_pw, 0, 0, pix_size.r_width, pix_size.r_height, PIX_SRC,
84 scratch_pr, 0, 0);
85 }
86
87
88 /*
89 * A simple text display tool for help messages.
90 * Text is displayed at the current help location (help_x, help_y).
91 * Newlines within the text string are handled appropriately.
92 * Maximum line length (between newlines) is 80 characters, although
93 * only about 64 can be displayed on the default Gremlin screen.
94 */
95 static
help_message(text)96 help_message(text)
97 char *text;
98 {
99 char buf[80];
100 register i;
101
102 while (*text != '\0') {
103 i = 0;
104
105 while ((*text != '\n') && (*text != '\0'))
106 buf[i++] = *text++;
107 buf[i] = '\0';
108
109 if (*text == '\n')
110 text++;
111
112 pw_text(pix_pw, help_x, help_y + TEXT_BASELINE + 2, PIX_SRC,
113 text_pf, buf);
114 help_y += help_dy;
115 }
116 }
117
118
119 static char help_HELP[] = "\
120 The three subwindows in Gremlin are used for text entry,\n\
121 menu display and command selection, and picture display.\n\
122 In addition, the normal tool manager pop-up menu is available\n\
123 from the tool borders.\n\
124 \n\
125 In the menu subwindow, the left mouse button is used to\n\
126 invoke commands after selecting the appropriate icon, the\n\
127 middle mouse button is used to effect the same command on\n\
128 only the current set (where appropriate), and the right mouse\n\
129 button provides a help screen for the icon.\n\
130 \n\
131 In the picture subwindow, the left mouse button is used to\n\
132 lay down points, the middle mouse button erases points in the\n\
133 opposite order from which they were layed down, and the right\n\
134 mouse button provides a help screen.\n\
135 \n\
136 In the text subwindow, command arguments (when required)\n\
137 are entered from the keyboard. Arguments must be entered\n\
138 before the command is selected. Simple editing commands\n\
139 (backspace, line and word delete) can be used to modify the\n\
140 argument. Again, the right mouse button provides a help\n\
141 screen display.";
142
help()143 help()
144 {
145 help_screen(&question_pr, "Help ('?')", help_HELP);
146 }
147
148
149 static char justify_HELP[] = "\
150 Select text justification by moving marker to one of nine\n\
151 positioning points within the JUSTIFY icon and pressing the\n\
152 left mouse button.\n\
153 \n\
154 Modify justification of text in the current set by moving the\n\
155 marker as above and then pressing the middle mouse button.\n\
156 \n\
157 When text is displayed in the current set, its justification\n\
158 mode is indicated by a small dot.";
159
justify_help()160 justify_help()
161 {
162 help_screen(&justify_pr, "Text Justification", justify_HELP);
163 }
164
165
166 static char size1_HELP[] = "\n\
167 Set the default font size to one with the left mouse button.\n\
168 \n\
169 Modify text in the current set to size one with the middle\n\
170 mouse button.";
171
size1_help()172 size1_help()
173 {
174 help_screen(&size1_pr, "Set Text Size One", size1_HELP);
175 }
176
177
178 static char roman_HELP[] = "\
179 Set the default font to Roman with the left mouse button.\n\
180 \n\
181 Modify text in the current set to Roman font with the middle\n\
182 mouse button.";
183
roman_help()184 roman_help()
185 {
186 help_screen(&roman_pr, "Set Roman Text Font", roman_HELP);
187 }
188
189
190 static char scale_HELP[] = "\
191 Scaling uses three points to define a transformation.\n\
192 The current set is scaled by the ratio of the distances\n\
193 between the first and second and the first and third points.";
194
scale_help()195 scale_help()
196 {
197 help_screen(&scale_pr, "Scale Current Set ('s')", scale_HELP);
198 }
199
200
201 static char move_HELP[] = "\
202 Translation uses two points to define a transformation.\n\
203 The current set is translated through the relative distance\n\
204 between the two points.";
205
move_help()206 move_help()
207 {
208 help_screen(&move_pr, "Translate Current Set ('t')", move_HELP);
209 }
210
211
212 static char hmirror_HELP[] = "\
213 Mirroring uses one point to define a transformation.\n\
214 The current set is reflected about the horizontal line\n\
215 containing the point.";
216
hmirror_help()217 hmirror_help()
218 {
219 help_screen(&hmirror_pr, "Horizontal Mirror", hmirror_HELP);
220 }
221
222
223 static char vmirror_HELP[] = "\
224 Mirroring uses one point to define a transformation.\n\
225 The current set is reflected about the vertical line\n\
226 containing the point.";
227
vmirror_help()228 vmirror_help()
229 {
230 help_screen(&vmirror_pr, "Vertical Mirror", vmirror_HELP);
231 }
232
233
234 static char include_HELP[] = "\
235 The current set is selected by points. Using the left mouse\n\
236 button, the current set will include ONLY those elements near\n\
237 the points. With the middle mouse button, those elements near\n\
238 the points will be ADDED to the current set.";
239
include_help()240 include_help()
241 {
242 help_screen(&include_pr, "Define Current Set ('d')", include_HELP);
243 }
244
245
246 static char put_HELP[] = "\
247 The current set is copied into the specified set buffer for\n\
248 possible later retrieval. An optional positioning point may\n\
249 be specified for use in positioning the set when it is later\n\
250 copied into a picture. With no positioning point specified,\n\
251 a point is selected from among the reference points of the\n\
252 current set.";
253
put1_help()254 put1_help()
255 {
256 help_screen(&put1_pr, "Save Current Set in Buffer One ('1')", put_HELP);
257 }
258
259
put2_help()260 put2_help()
261 {
262 help_screen(&put2_pr, "Save Current Set in Buffer Two ('2')", put_HELP);
263 }
264
265
put3_help()266 put3_help()
267 {
268 help_screen(&put3_pr, "Save Current Set in Buffer Three ('3')", put_HELP);
269 }
270
271
put4_help()272 put4_help()
273 {
274 help_screen(&put4_pr, "Save Current Set in Buffer Four ('4')", put_HELP);
275 }
276
277
278 static char horizontal_HELP[] = "\
279 Horizontal adjustment forces each point laid down to lie on\n\
280 a horizontal line from the previous point. The left mouse\n\
281 button toggles this drawing mode.";
282
horizontal_help()283 horizontal_help()
284 {
285 help_screen(&horizontal_pr, "Horizontal Adjustment", horizontal_HELP);
286 }
287
288
289 static char vertical_HELP[] = "\
290 Vertical adjustment forces each point laid down to lie on a\n\
291 vertical line from the previous point. The left mouse button\n\
292 toggles this drawing mode.";
293
vertical_help()294 vertical_help()
295 {
296 help_screen(&vertical_pr, "Vertical Adjustment", vertical_HELP);
297 }
298
299
300 static char stipple_HELP[] = "\
301 Select the stipple pattern used for drawing polygons with\n\
302 the left mouse button.\n\
303 \n\
304 Modify polygons in the current set to the specified stipple\n\
305 pattern with the middle mouse button.";
306
stipple1_help()307 stipple1_help()
308 {
309 help_screen(&white_pr, "Set Stipple Pattern One", stipple_HELP);
310 }
311
312
stipple2_help()313 stipple2_help()
314 {
315 help_screen(&gray_pr, "Set Stipple Pattern Two", stipple_HELP);
316 }
317
318
stipple3_help()319 stipple3_help()
320 {
321 help_screen(&_50_pr, "Set Stipple Pattern Three", stipple_HELP);
322 }
323
324
stipple4_help()325 stipple4_help()
326 {
327 help_screen(&black_pr, "Set Stipple Pattern Four", stipple_HELP);
328 }
329
330
stipple5_help()331 stipple5_help()
332 {
333 help_screen(&stipple5_pr, "Set Stipple Pattern Five", stipple_HELP);
334 }
335
336
stipple6_help()337 stipple6_help()
338 {
339 help_screen(&stipple6_pr, "Set Stipple Pattern Six", stipple_HELP);
340 }
341
342
stipple7_help()343 stipple7_help()
344 {
345 help_screen(&stipple7_pr, "Set Stipple Pattern Seven", stipple_HELP);
346 }
347
348
stipple8_help()349 stipple8_help()
350 {
351 help_screen(&stipple8_pr, "Set Stipple Pattern Eight", stipple_HELP);
352 }
353
354
355 static char size2_HELP[] = "\n\
356 Set the default font size to two with the left mouse button.\n\
357 \n\
358 Modify text in the current set to size two with the middle\n\
359 mouse button.";
360
size2_help()361 size2_help()
362 {
363 help_screen(&size2_pr, "Set Text Size Two", size2_HELP);
364 }
365
366
367 static char italics_HELP[] = "\
368 Set the default font to Italics with the left mouse button.\n\
369 \n\
370 Modify text in the current set to Italics font with the middle\n\
371 mouse button.";
372
italics_help()373 italics_help()
374 {
375 help_screen(&italics_pr, "Set Italics Text Font", italics_HELP);
376 }
377
378
379 static char copy_HELP[] = "\
380 Copying uses two or more points. A copy of the current set\n\
381 is made and translated by a relative distance between the\n\
382 first and each additional point. The last copy becomes\n\
383 the new current set.";
384
copy_help()385 copy_help()
386 {
387 help_screen(©_pr, "Copy Current Set ('c')", copy_HELP);
388 }
389
390
391 static char erase_HELP[] = "\
392 The current set is erased. See also the undo command.";
393
erase_help()394 erase_help()
395 {
396 help_screen(&erase_pr, "Erase Current Set ('e')", erase_HELP);
397 }
398
399
400 static char movepoint_HELP[] = "\
401 This command uses one or more points. The element of the\n\
402 current set which contains the point closest to the first of\n\
403 these points is redrawn with that point replaced by the\n\
404 remaining points, or deleted if there is only one point.";
405
movepoint_help()406 movepoint_help()
407 {
408 help_screen(&movepoint_pr, "Move Point", movepoint_HELP);
409 }
410
411
412 static char rotate_HELP[] = "\
413 Three points are used to define a rotation. The rotation is\n\
414 performed relative to the first point, through an angle formed\n\
415 by the lines between points one and two and points one and\n\
416 three, respectively.";
417
rotate_help()418 rotate_help()
419 {
420 help_screen(&rotate_pr, "Rotate Current Set ('r')", rotate_HELP);
421 }
422
423
424 static char filecabinet_HELP[] = "\
425 This icon produces a pop-up menu to select commands for\n\
426 manipulating files: Edit, Path, Read, Write and Save Set.\n\
427 With each command, parameters should be specified in the\n\
428 text subwindow before invocation.\n\
429 \n\
430 The Edit command causes a new file to be opened for editing.\n\
431 Picture sets saved in the buffers are preserved across edits.\n\
432 The file name will be displayed in the Gremlin tool border.\n\
433 \n\
434 The Path command is used to set the directory search path\n\
435 for the Edit and Read commands. Directory names should be\n\
436 separated by colons and may include the ~ notation. If a file\n\
437 cannot be found using any of the paths, a final check will be\n\
438 made in the Gremlin library, /usr/local/lib/gremlin.\n\
439 \n\
440 The Read command is used to add elements from the specified\n\
441 file into the current picture. The new elements become the\n\
442 current set. A point may be specified to position the file\n\
443 in the picture.\n\
444 \n\
445 The Write command saves the entire picture in a file. If no\n\
446 file name is specified in the text subwindow, the current Edit\n\
447 file name is used. An optional point may be specified to aid\n\
448 in Reading the picture later.\n\
449 \n\
450 The Save Set command is similar to the Write command with two\n\
451 exceptions: only the current set is written, and a file name\n\
452 must be specified.";
453
filecabinet_help()454 filecabinet_help()
455 {
456 help_screen(&filecabinet_pr, "File Commands", filecabinet_HELP);
457 }
458
459
460 static char boxinc_HELP[] = "\
461 Two points must be placed that define a rectangular area\n\
462 (the endpoints of the diagonal of the rectangle).\n\
463 \n\
464 With the left mouse button, all elements contained within the\n\
465 the rectangle become the current set.\n\
466 \n\
467 With the middle mouse button, those same elements are ADDED\n\
468 to the current set.";
469
boxinc_help()470 boxinc_help()
471 {
472 help_screen(&boxinc_pr, "Select Area for Current Set ('f')", boxinc_HELP);
473 }
474
475
476 static char manhattan_HELP[] = "\
477 Manhattan adjustment forces each point laid down to be either\n\
478 directly horizontal or vertical with respect to the previous\n\
479 point, whichever it is closer to. The left mouse button\n\
480 toggles this drawing mode.";
481
manhattan_help()482 manhattan_help()
483 {
484 help_screen(&horvert_pr, "Manhattan Adjustment ('z')", manhattan_HELP);
485 }
486
487
488 static char gravity_HELP[] = "\
489 This command toggles each time it is selected. When on,\n\
490 gravity forces a point to coincide with the nearest existing\n\
491 point or reference point. It will only take affect, however,\n\
492 if the point is near enough to an element to be gravitiated\n\
493 to it.";
494
gravity_help()495 gravity_help()
496 {
497 help_screen(&gravity_pr, "Set Gravity ('g')", gravity_HELP);
498 }
499
500
501 static char size3_HELP[] = "\n\
502 Set the default font size to three with the left mouse button.\n\
503 \n\
504 Modify text in the current set to size three with the middle\n\
505 mouse button.";
506
size3_help()507 size3_help()
508 {
509 help_screen(&size3_pr, "Set Text Size Three", size3_HELP);
510 }
511
512
513 static char bold_HELP[] = "\
514 Set the default font to Bold with the left mouse button.\n\
515 \n\
516 Modify text in the current set to Bold font with the middle\n\
517 mouse button.";
518
bold_help()519 bold_help()
520 {
521 help_screen(&bold_pr, "Set Bold Text Font", bold_HELP);
522 }
523
524
525 static char brush_HELP[] = "\
526 The left mouse button sets the current brush style.\n\
527 \n\
528 The middle mouse button modifies all elements in the current\n\
529 set (except text) to the selected brush style.";
530
brush1_help()531 brush1_help()
532 {
533 help_screen(&dotted_pr, "Set Dotted Line Style", brush_HELP);
534 }
535
536
brush2_help()537 brush2_help()
538 {
539 help_screen(&broken_pr, "Set Broken Line Style", brush_HELP);
540 }
541
542
brush3_help()543 brush3_help()
544 {
545 help_screen(&thick_pr, "Set Thick Line Style", brush_HELP);
546 }
547
548
brush4_help()549 brush4_help()
550 {
551 help_screen(&dashed_pr, "Set Dashed Line Style", brush_HELP);
552 }
553
554
brush5_help()555 brush5_help()
556 {
557 help_screen(&narrow_pr, "Set Narrow Line Style", brush_HELP);
558 }
559
560
brush6_help()561 brush6_help()
562 {
563 help_screen(&medium_pr, "Set Medium Line Style", brush_HELP);
564 }
565
566
567 static char arrow_HELP[] = "\
568 This command requires two points. The first point indicates\n\
569 the tip of the arrow. The second point indicates the\n\
570 direction from which the arrow points.";
571
arrow_help()572 arrow_help()
573 {
574 help_screen(&arrow_pr, "Draw Arrowhead ('w')", arrow_HELP);
575 }
576
577
578 static char text_HELP[] = "\
579 Text is positioned using one or two points. If two points\n\
580 are used, the text is positioned relative to their locus.\n\
581 The text specified in the text subwindow is displayed using\n\
582 the current font, size and justification.\n\
583 \n\
584 See the text subwindow help display for an explanation of\n\
585 quick text entry.";
586
text_help()587 text_help()
588 {
589 help_screen(&text_pr, "Display Text", text_HELP);
590 }
591
592
593 static char misc_HELP[] = "\
594 This command invokes a pop-up menu of infrequently used\n\
595 commands: Clear Points, Show Points, Gripe (rarely used)\n\
596 and Point.\n\
597 \n\
598 Clear Points will clear all positioning points and reference\n\
599 points from the display.\n\
600 \n\
601 Show Points will display the reference points of those\n\
602 elements in the current set.\n\
603 \n\
604 Gripe displays a message indicating the mail address of\n\
605 the current Gremlin maintainer.\n\
606 \n\
607 Point can be used to lay down a point at a specific location.\n\
608 The coordinates of the point must first be entered in the\n\
609 text subwindow.";
610
misc_help()611 misc_help()
612 {
613 help_screen(&misc_pr, "Miscellaneous Commands", misc_HELP);
614 }
615
616
617 static char get_HELP[] = "\
618 This command retrieves a set from the specified buffer and\n\
619 copies it into the picture. At least one point must be\n\
620 specified, indicating the position(s) in the picture where\n\
621 the set is to be copied.";
622
get1_help()623 get1_help()
624 {
625 help_screen(&get1_pr, "Add Buffer One To Picture", get_HELP);
626 }
627
628
get3_help()629 get3_help()
630 {
631 help_screen(&get3_pr, "Add Buffer Three To Picture", get_HELP);
632 }
633
634
get2_help()635 get2_help()
636 {
637 help_screen(&get2_pr, "Add Buffer Two To Picture", get_HELP);
638 }
639
640
get4_help()641 get4_help()
642 {
643 help_screen(&get4_pr, "Add Buffer Four To Picture", get_HELP);
644 }
645
646
647 static char linestyle_HELP[] = "\
648 This command toggles symbolic line display. When highlighted,\n\
649 this icon indicates that elements will be drawn using their\n\
650 true line style (or brush). When not highlighted, all\n\
651 elements are drawn using the narrow brush, decreasing display\n\
652 times.";
653
linestyle_help()654 linestyle_help()
655 {
656 help_screen(&linestyle_pr, "Toggle Line Style Mode", linestyle_HELP);
657 }
658
659
660 static char align_HELP[] = "\
661 This command forces points to be aligned on pixel boundaries\n\
662 as specified in the icon. Alignment occurs in powers of two.\n\
663 To select the next alignment value use the left mouse button,\n\
664 and to select the previous value use the middle mouse button.\n\
665 \n\
666 The precedence of point positioning modifiers is as follows:\n\
667 gravity will override alignment, and adjustment (vertical,\n\
668 horizontal or manhattan) will be applied to the point to which\n\
669 the point has been gravitated.";
670
align_help()671 align_help()
672 {
673 help_screen(&align_pr, "Set Point Alignment", align_HELP);
674 }
675
676
677 static char size4_HELP[] = "\n\
678 Set the default font size to four with the left mouse button.\n\
679 \n\
680 Modify text in the current set to size four with the middle\n\
681 mouse button.";
682
size4_help()683 size4_help()
684 {
685 help_screen(&size4_pr, "Set Text Size Four", size4_HELP);
686 }
687
688
689 static char special_HELP[] = "\
690 Set the default font to Special with the left mouse button.\n\
691 \n\
692 Modify text in the current set to Special font with the middle\n\
693 mouse button.";
694
special_help()695 special_help()
696 {
697 help_screen(&special_pr, "Set Special Text Font", special_HELP);
698 }
699
700
701 static char arc_HELP[] = "\
702 This command requires two points to draw a full circle or\n\
703 three points to draw an arc. The first point determines the\n\
704 center of a circle. The second is a point on the circle,\n\
705 thus defining the radius. An optional third point determines\n\
706 a counter-clockwise angle from the second point which is the\n\
707 extent of the arc.";
708
arc_help()709 arc_help()
710 {
711 help_screen(&arc_pr, "Draw Circle or Arc ('a')", arc_HELP);
712 }
713
714
715 static char curve_HELP[] = "\
716 A curve is determined by a number of points distributed along\n\
717 its trajectory. Two points yield a straight line. If the\n\
718 first and last points of a spline are the same, a smooth\n\
719 closed figure will be drawn. Curves are drawn with the left\n\
720 mouse button using the current brush style.\n\
721 \n\
722 With the middle mouse button, vectors and polygons in the\n\
723 current set are modified to become curves.";
724
curve_help()725 curve_help()
726 {
727 help_screen(&curve_pr, "Draw Curve ('b')", curve_HELP);
728 }
729
730
731 static char vector_HELP[] = "\
732 With the left mouse button, a line is drawn connecting each\n\
733 of the points layed down in order. The current brush (narrow,\n\
734 dotted, etc) is used.\n\
735 \n\
736 With the middle mouse button, curves and polygons in the\n\
737 current set are modified to become vectors.";
738
vector_help()739 vector_help()
740 {
741 help_screen(&vector_pr, "Draw Vector ('v')", vector_HELP);
742 }
743
744
745 static char box_HELP[] = "\
746 Two points are used to define the endpoints of the diagonal\n\
747 of a rectangle. A box is drawn in the current brush which\n\
748 forms the rectangle.";
749
box_help()750 box_help()
751 {
752 help_screen(&box_pr, "Draw Box ('x')", box_HELP);
753 }
754
755
756 static char grid_HELP[] = "\
757 This command toggles the display of a grid used to aid in\n\
758 laying down points. The grid is displayed on 32 pixel\n\
759 boundaries.";
760
grid_help()761 grid_help()
762 {
763 help_screen(&grid_pr, "Toggle Grid Display ('q')", grid_HELP);
764 }
765
766
767 static char littlepoint_HELP[] = "\
768 This command toggles the style of points displayed. When the\n\
769 icon is highlighted, points are indicated by a small circle\n\
770 and are numbered from zero. When the icon is unhighlighted,\n\
771 points are displayed as a small diamond.";
772
littlepoint_help()773 littlepoint_help()
774 {
775 help_screen(&littlepoint_pr, "Toggle Point Style", littlepoint_HELP);
776 }
777
778
779 static char undo_HELP[] = "\
780 This command undoes the last command which modified the\n\
781 picture contents.";
782
undo_help()783 undo_help()
784 {
785 help_screen(&undo_pr, "Undo Last Command", undo_HELP);
786 }
787
788
789 static char pan_HELP[] = "\
790 With the left mouse button this command requires one point.\n\
791 The entire picture and current set are translated such that\n\
792 the specified point is located at the center of the display.\n\
793 \n\
794 With the middle mouse button no point is required. The\n\
795 picture is translated such that its absolute center is\n\
796 brought to the center of the display.";
797
pan_help()798 pan_help()
799 {
800 help_screen(&pan_pr, "Panning", pan_HELP);
801 }
802
803
804 static char polygon_HELP[] = "\
805 Polygons can be drawn either bordered or unbordered. At\n\
806 least three points are required to draw a polygon. If the\n\
807 first and the last points are not the same, that line\n\
808 segment will be added automatically. With the left mouse\n\
809 button, a filled polygon will be added to the display in the\n\
810 current stipple style. If a border is to be drawn, this\n\
811 will be added in the current line style.\n\
812 \n\
813 The middle mouse button is used to modify curves, vectors and\n\
814 other polygons in the current set to be polygons of the\n\
815 selected type (bordered or unbordered).";
816
bpolygon_help()817 bpolygon_help()
818 {
819 help_screen(&bpolygon_pr, "Fill Bordered Polygon", polygon_HELP);
820 }
821
822
polygon_help()823 polygon_help()
824 {
825 help_screen(&polygon_pr, "Fill Polygon", polygon_HELP);
826 }
827
828
829 static char textsw_HELP[] = "\
830 Command arguments (when required) are entered here from the\n\
831 keyboard. Arguments must be entered before the command is\n\
832 selected. Simple editing commands (backspace, line and word\n\
833 delete) can be used to modify the argument. The middle mouse\n\
834 button is used to display the previous text string.\n\
835 \n\
836 The quick form of the TEXT command is invoked by pressing\n\
837 RETURN after entering a string to be displayed in the picture.\n\
838 The string is displayed at the LAST point layed down (using\n\
839 the current justification mode), and this point is removed\n\
840 from the display.";
841
textsw_help()842 textsw_help()
843 {
844 help_screen(NULL, "Text Subwindow Help", textsw_HELP);
845 }
846
847
848 static char pixsw_HELP[] = "\
849 The left mouse button is used to lay down points. The middle\n\
850 mouse button erases points in the opposite order from which\n\
851 they were layed down.";
852
pixsw_help()853 pixsw_help()
854 {
855 help_screen(NULL, "Picture Subwindow Help", pixsw_HELP);
856 }
857
858
menusw_help()859 menusw_help()
860 {
861 /* keeps getting invoked by mistake - not useful anyway */
862 }
863