aboutsummaryrefslogtreecommitdiff
path: root/plotlib/sym
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2009-05-11 00:27:49 +0000
committerDimitri Sokolyuk <demon@dim13.org>2009-05-11 00:27:49 +0000
commit0d4f43d355de79178b1142e9735902cf641670b6 (patch)
tree2ced2323f6351db2a51090b3fd13eb11f69ff53f /plotlib/sym
Xfoil 6.97
Diffstat (limited to 'plotlib/sym')
-rw-r--r--plotlib/sym/Makefile65
-rw-r--r--plotlib/sym/Readme67
-rw-r--r--plotlib/sym/char.fnt93
-rw-r--r--plotlib/sym/math.fnt93
-rw-r--r--plotlib/sym/slan.fnt93
-rw-r--r--plotlib/sym/symb.fnt15
-rw-r--r--plotlib/sym/symgen.f1179
-rw-r--r--plotlib/sym/test.f159
8 files changed, 1764 insertions, 0 deletions
diff --git a/plotlib/sym/Makefile b/plotlib/sym/Makefile
new file mode 100644
index 0000000..c5e1407
--- /dev/null
+++ b/plotlib/sym/Makefile
@@ -0,0 +1,65 @@
+#***********************************************************************
+# Module: Makefile (Xplot/sym directory)
+#
+# Copyright (C) 1996 Harold Youngren, Mark Drela
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Library General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this library; if not, write to the Free
+# Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+#
+# Report problems to: guppy@maine.com
+# or drela@mit.edu
+#***********************************************************************
+
+#Makefile for stroke font creation and editing programs
+
+FC = f77
+#FC = g77
+FFLAGS = -O1
+LIBS = ../libPlt.a -lX11
+
+PROGS = symgen test
+
+all: $(PROGS)
+
+clean:
+ -/bin/rm *.o
+ -/bin/rm *.a
+ -/bin/rm $(PROGS)
+
+
+symgen: symgen.o
+ $(FC) -o symgen symgen.o $(LIBS)
+
+symgen.o: symgen.f
+ $(FC) -c $(FFLAGS) symgen.f
+
+../plt_font.o: ../plt_font.f ../CHAR.INC ../SLAN.INC ../MATH.INC ../SYMB.INC
+ $(FC) -c $(FFLAGS) ../plt_font.f
+ mv ./plt_font.o ../
+
+
+
+test: test.o ../plt_font.o
+ $(FC) -o test test.o ../plt_font.o $(LIBS)
+
+test.o: test.f
+ $(FC) -c $(FFLAGS) test.f
+
+
+
+
+
+
+
+
diff --git a/plotlib/sym/Readme b/plotlib/sym/Readme
new file mode 100644
index 0000000..8a9409a
--- /dev/null
+++ b/plotlib/sym/Readme
@@ -0,0 +1,67 @@
+/***********************************************************************
+ Module: Readme
+
+ Copyright (C) 1996 Harold Youngren, Mark Drela
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; if not, write to the Free
+ Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+ Report problems to: guppy@maine.com
+ or drela@mit.edu
+***********************************************************************/
+
+
+This directory contains programs and routines for creating,
+modifying, and using vector fonts.
+
+
+PROGRAM SYMGEN is an interactive program for creating or modifying
+font description files XXXX.FNT, and is invoked with
+
+ % make symgen (requires ../libPlt.a)
+ % symgen XXXX
+
+The header of symgen.f has a description of the format of
+a XXXX.FNT file, although this is of no concern to the user.
+SYMGEN can create an include file XXXX.INC which has the
+font encoding placed into Fortran DATA statements. XXXX.INC
+is then compiled with a Versaplot SYMBOL-type routine which
+is used in applications.
+
+Four sample databases, include files, and application routines
+already exist. The application routines are in ../plt_font.f:
+
+ CHAR.FNT CHAR.INC SUBR. PLCHAR (Upper,lower case letters, WYSIWYG)
+ SLAN.FNT SLAN.INC SUBR. PLSLAN (Upper,lower case slanted letters)
+ MATH.FNT MATH.INC SUBR. PLMATH (Latex-like Greek symbols, exponents)
+ SYMB.FNT SYMB.INC SUBR. PLSYMB (Versaplot plotting symbols)
+
+ also available: SUBR. PLNUMB (Whole floating-point numbers)
+
+One can generate analogous files and plot routines for any
+custom font, e.g.
+
+ USER.FNT USER.INC SUBR. PLUSER
+
+
+PROGRAM TEST plots the complete CHAR, SLAN, MATH, and SYMB fonts,
+and also plots sample character strings for examination.
+
+ % make test
+ % test
+
+Mark Drela
+10 March 96
+
+
diff --git a/plotlib/sym/char.fnt b/plotlib/sym/char.fnt
new file mode 100644
index 0000000..bbebaa2
--- /dev/null
+++ b/plotlib/sym/char.fnt
@@ -0,0 +1,93 @@
+ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,.;:`"!?@#$%&|()[]{}<>_+-*=/^~
+ 21616 11672 12183 12888 14488 15183 15672 15616 21650 15650 0 0 0 0 0 0 0 0 0 0
+ 21616 11688 14288 15284 15676 15668 15260 14256 15252 15644 15628 15220 14216 11616 21656 14256 0 0 0 0
+ 25674 15183 14488 12888 12183 11672 11632 12121 12816 14416 15121 15629 0 0 0 0 0 0 0 0
+ 21416 14416 15121 15632 15672 15183 14488 11488 21816 11888 0 0 0 0 0 0 0 0 0 0
+ 25616 11616 11688 15688 21656 14756 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21616 11688 15688 21656 14656 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 25674 15183 14488 12888 12183 11672 11632 12121 12816 14416 15121 15632 15650 14050 0 0 0 0 0 0
+ 21616 11688 25616 15688 21656 15656 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 23888 13816 22616 15016 22688 15088 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21430 11921 12616 13916 14621 15132 15188 25788 13688 0 0 0 0 0 0 0 0 0 0 0
+ 21688 11616 25688 11645 22858 15616 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22088 12016 16016 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21416 11488 13648 15888 15816 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21616 11688 15616 15688 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21632 11672 12183 12888 14488 15183 15672 15632 15121 14416 12816 12121 11632 0 0 0 0 0 0 0
+ 21616 11688 14288 15283 15676 15662 15255 14250 11650 0 0 0 0 0 0 0 0 0 0 0
+ 21632 11672 12183 12888 14488 15183 15672 15632 15121 14416 12816 12121 11632 24131 15616 0 0 0 0 0
+ 21616 11688 14288 15283 15676 15662 15255 14250 11650 24250 15816 0 0 0 0 0 0 0 0 0
+ 25676 15183 14288 13088 12183 11674 11670 12161 13056 14256 15151 15642 15630 15121 14216 13016 12121 11630 0 0
+ 23688 13616 21488 15888 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21688 11632 12121 12816 14416 15121 15632 15688 0 0 0 0 0 0 0 0 0 0 0 0
+ 21688 11682 13616 15682 15688 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21488 11452 11639 12516 13437 13646 13837 14716 15639 15852 15888 23646 13654 0 0 0 0 0 0 0
+ 21688 11682 15622 15616 25688 15682 11622 11616 0 0 0 0 0 0 0 0 0 0 0 0
+ 21688 11682 13656 15682 15688 23656 13616 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21688 15688 11616 15616 22756 14556 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22064 14264 15159 15650 15616 25642 12842 12038 11630 11628 12020 12816 14416 15220 15628 0 0 0 0 0
+ 21888 11816 21852 12260 13064 14664 15460 15852 15828 15420 14616 13016 12220 11828 0 0 0 0 0 0
+ 25652 15260 14464 12864 12060 11652 11628 12020 12816 14416 15220 15628 0 0 0 0 0 0 0 0
+ 25488 15416 25452 15060 14264 12664 11860 11452 11428 11820 12616 14216 15020 15428 0 0 0 0 0 0
+ 25626 15220 14416 12816 12020 11628 11652 12060 12864 14464 15260 15652 15641 11641 0 0 0 0 0 0
+ 26072 15680 14884 13684 12880 12472 12416 21656 14256 0 0 0 0 0 0 0 0 0 0 0
+ 21616 12008 12804 14404 15208 15616 15664 25652 15260 14464 12864 12060 11652 11637 12029 12825 14425 15229 15637 0
+ 21688 11616 21652 12060 12864 14464 15260 15652 15616 0 0 0 0 0 0 0 0 0 0 0
+ 22416 15216 24016 14062 12962 23377 13380 13582 13882 14080 14077 13875 13575 13377 0 0 0 0 0 0
+ 21416 11808 12604 13804 14608 15016 15062 13862 24375 14177 14180 14382 14682 14880 14877 14675 14375 0 0 0
+ 21888 11816 21844 15268 22750 15816 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22316 14916 23616 13688 12788 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21464 11416 21453 11760 12364 12764 13360 13653 13960 14564 14964 15560 15853 15816 23653 13624 0 0 0 0
+ 21664 11616 21652 12060 12864 14464 15260 15652 15616 0 0 0 0 0 0 0 0 0 0 0
+ 21628 11652 12060 12864 14464 15260 15652 15628 15220 14416 12816 12020 11628 0 0 0 0 0 0 0
+ 21864 11800 21852 12260 13064 14664 15460 15852 15836 15428 14624 13024 12228 11836 0 0 0 0 0 0
+ 25464 15400 25452 15060 14264 12664 11860 11452 11436 11828 12624 14224 15028 15436 0 0 0 0 0 0
+ 22064 12016 22052 12460 13264 14664 15460 15852 0 0 0 0 0 0 0 0 0 0 0 0
+ 25656 15361 14664 12664 11961 11654 11651 11945 12641 14641 15337 15631 15626 15319 14616 12616 11919 11624 0 0
+ 22484 12428 12820 13616 14816 15620 16028 21666 14266 0 0 0 0 0 0 0 0 0 0 0
+ 21664 11628 12020 12816 14416 15220 15628 25664 15616 0 0 0 0 0 0 0 0 0 0 0
+ 21664 11657 11849 13616 15449 15657 15664 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21464 11440 11630 12516 13429 13636 13829 14716 15630 15840 15864 23636 13642 0 0 0 0 0 0 0
+ 21864 15616 25464 11616 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21664 11637 12029 12825 14425 15229 15637 25664 15616 15208 14404 12804 12008 11616 0 0 0 0 0 0
+ 21864 15464 11616 15616 22742 14442 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21628 11676 12084 12888 14488 15284 15676 15628 15220 14416 12816 12020 11628 0 0 0 0 0 0 0
+ 22678 13688 13616 22616 14616 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21676 12084 12888 14488 15284 15676 15666 15258 12036 11628 11616 15616 0 0 0 0 0 0 0 0
+ 21878 12284 13088 14488 15284 15676 15669 15261 14457 15253 15644 15628 15220 14416 12816 12020 11626 24457 12857 0
+ 25088 15016 24016 16016 26040 11640 11688 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 25488 11688 11657 14457 15253 15645 15628 15220 14416 12816 12020 11628 0 0 0 0 0 0 0 0
+ 25678 15284 14488 12888 12084 11676 11628 12020 12816 14416 15220 15628 15645 15253 14457 12857 12053 11645 0 0
+ 21688 15688 15679 13228 13216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 24757 12557 11667 11676 12084 12888 14488 15284 15676 15667 14757 15647 15628 15220 14416 12816 12020 11628 11647 12557
+ 21626 12020 12816 14416 15220 15628 15676 15284 14488 12888 12084 11676 11659 12051 12847 14447 15251 15659 0 0
+ 22604 13416 13424 12624 12616 13215 12604 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22624 13424 13416 12616 12624 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22604 13215 12616 12624 13424 13416 12604 22656 12648 13448 13456 12656 0 0 0 0 0 0 0 0
+ 22624 12616 13416 13424 12624 22656 12648 13448 13456 12656 0 0 0 0 0 0 0 0 0 0
+ 25284 16268 15884 15284 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22184 12666 12784 12184 23784 14266 14384 13784 0 0 0 0 0 0 0 0 0 0 0 0
+ 23524 13316 13916 13724 13524 23639 14088 13288 13639 23685 13646 0 0 0 0 0 0 0 0 0
+ 22074 12283 13088 14288 15083 15274 14866 14160 13754 13647 13639 23524 13316 13916 13724 13524 0 0 0 0
+ 24543 13738 12843 12854 13761 14758 14543 14939 15439 15949 15865 15075 13877 12674 11863 11647 11931 13222 14422 15627
+ 23278 12622 24778 14122 21959 15759 21640 15440 0 0 0 0 0 0 0 0 0 0 0 0
+ 25176 12976 12273 11967 11959 12254 12852 14452 15050 15445 15437 15031 14328 12128 23616 13688 0 0 0 0
+ 21616 15688 22488 12084 12079 12475 12975 13379 13384 12988 12488 25116 15520 15525 15129 14629 14225 14220 14616 15116
+ 25636 15023 14418 13716 12816 12021 11629 11637 12246 13956 14564 14572 14377 13880 13280 12677 12469 12758 15616 0
+ 23696 13608 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 25092 14382 13965 13850 13935 14318 15008 24417 14230 14150 14270 14483 0 0 0 0 0 0 0 0
+ 22292 12982 13365 13450 13335 12918 12208 22883 13070 13150 13030 12817 0 0 0 0 0 0 0 0
+ 25294 13894 13806 15206 24094 14006 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22094 13494 13406 12006 23294 13206 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 24896 13890 13853 12850 13846 13810 14804 24009 14045 13846 24091 14054 13853 0 0 0 0 0 0 0
+ 22496 13490 13453 14450 13446 13410 12304 23209 13245 13446 23291 13254 13453 0 0 0 0 0 0 0
+ 25666 11648 15630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21666 15648 11630 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 20800 17200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21648 15648 23668 13628 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21648 15648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22765 14531 22731 14565 21748 15548 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21656 15656 21640 15640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21208 16096 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21854 13868 15854 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21546 11951 12754 13452 14344 14942 15745 16150 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/plotlib/sym/math.fnt b/plotlib/sym/math.fnt
new file mode 100644
index 0000000..8e551c0
--- /dev/null
+++ b/plotlib/sym/math.fnt
@@ -0,0 +1,93 @@
+ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,.;:`"!?@#$%&|()[]{}<>_+-*=/^~
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21688 12488 25288 16088 21616 12416 25216 16016 22016 15688 21988 15516 22188 15716 0 0 0 0 0 0
+ 21216 13988 16416 11216 21318 16118 13884 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22816 14816 22888 14888 23788 13716 23988 13916 22575 11461 11443 12529 15129 16243 16261 15175 12575 0 0 0
+ 25888 16180 16188 11688 22288 12216 22488 12416 21616 13016 0 0 0 0 0 0 0 0 0 0
+ 20490 11096 11064 21964 13196 23890 14396 15296 15691 15684 13871 13864 15664 0 0 0 0 0 0 0
+ 26694 16696 16396 16191 15982 15346 15014 14805 14600 14300 14302 25014 15754 15982 0 0 0 0 0 0
+ 26396 16196 15891 15573 14923 14605 14300 14100 24956 14552 14544 14940 15540 15944 15952 15556 14956 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21516 12616 24916 16116 21816 13888 15816 25616 13784 0 0 0 0 0 0 0 0 0 0 0
+ 22890 13396 13362 22962 13762 20479 12079 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 24416 16769 12169 14416 26565 12565 14518 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21616 14067 16416 11616 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22416 13216 24416 15216 22716 12788 22916 12988 24716 14788 24916 14988 21888 11683 11688 16088 16083 15888 0 0
+ 22716 14816 15933 15971 14888 12888 11771 11733 12716 23052 14652 23056 13048 24656 14648 21973 11931 25773 15731 0
+ 23058 13658 14507 16196 17296 23658 13858 14613 0 0 0 0 0 0 0 0 0 0 0 0
+ 25616 16125 16016 11616 14654 12088 21688 15988 16179 21688 14452 0 0 0 0 0 0 0 0 0
+ 21347 11755 12255 12451 12235 12422 12916 13816 14522 15134 15552 15670 15582 14888 13988 13484 13277 13468 14362 16153
+ 23016 14616 21674 11984 12588 13184 13766 13716 26074 15784 15188 14584 13966 13916 23184 13966 24584 13766 0 0
+ 22124 13642 14456 14870 14983 14888 14688 14486 14080 13670 13253 12935 12924 13118 13516 14216 15019 15926 0 0
+ 21522 11716 13016 11548 11567 12283 13188 14588 15483 16167 16148 14616 15916 16122 21976 11758 11940 25776 15958 15740
+ 21626 11716 15916 16026 21678 11788 15988 16078 22660 12644 25060 15044 22654 15054 22650 15050 21720 15920 21784 15984
+ 23088 14688 23016 14616 23788 13716 23988 13916 21474 11769 11842 13029 14629 15842 15969 16274 21769 12040 25969 15640
+ 22088 11680 11688 16088 11816 16016 16025 15616 21816 11616 15888 0 0 0 0 0 0 0 0 0
+ 26064 15554 14937 14323 13617 12916 12217 11722 11534 11746 12256 12962 13564 14064 14460 14750 14737 14919 15416 16120
+ 21508 12655 13276 13986 14688 15287 15682 15671 15161 14256 12757 24256 15449 15837 15626 14918 13816 13016 11820 0
+ 21504 15866 25504 15104 14709 14317 13349 12662 12266 11866 0 0 0 0 0 0 0 0 0 0
+ 25184 14987 14588 13888 13485 13177 13267 13861 14857 15345 15233 14722 13716 12816 11922 11734 12150 12857 13861 0
+ 25559 14664 13764 12760 12052 11739 11729 12220 13116 14116 15220 21842 14142 0 0 0 0 0 0 0
+ 21645 12057 12863 13864 14962 15556 15744 15332 14427 13326 12427 11733 11645 23004 14388 0 0 0 0 0
+ 21557 12164 12867 13662 14246 14325 14113 13804 13500 13305 13416 13932 14950 16063 0 0 0 0 0 0
+ 21759 11962 12264 12563 12661 12755 11916 22755 13360 14164 14864 15361 15556 15546 14804 0 0 0 0 0
+ 23164 12424 12618 13016 14116 15018 15724 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22666 12060 11751 11740 12232 13329 14329 15333 15841 16049 15958 15662 15064 14564 14160 13747 13004 0 0 0
+ 22464 11616 25764 15264 14862 13448 12037 22843 13924 14218 14616 15116 0 0 0 0 0 0 0 0
+ 22788 13288 13685 14074 14627 15018 15316 15716 21316 14256 0 0 0 0 0 0 0 0 0 0
+ 22764 11600 22130 12122 12517 12916 13716 14418 14922 15664 24922 15017 15316 15616 0 0 0 0 0 0
+ 22064 12364 12562 12645 12631 12416 13825 15037 15753 15759 15662 15564 15264 0 0 0 0 0 0 0
+ 21641 12052 12962 13964 15062 15651 15641 15428 14418 13316 12119 11628 11641 0 0 0 0 0 0 0
+ 21559 11963 12566 15966 23266 12216 24766 14444 14430 14716 0 0 0 0 0 0 0 0 0 0
+ 25554 12154 12469 12779 13285 13988 14788 15285 15579 15669 15554 15236 14824 14319 13816 13016 12519 12224 12036 12154
+ 21500 12244 12655 13161 13864 14764 15460 15752 15640 15330 14223 13022 11923 0 0 0 0 0 0 0
+ 26264 13964 12962 12052 11641 11628 12119 13316 14418 15428 15641 15551 14961 13763 0 0 0 0 0 0
+ 21655 12061 12764 15964 23864 13016 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21958 12162 12464 12663 12658 12239 12224 12716 13716 14521 15333 15645 15657 15463 15164 0 0 0 0 0
+ 25660 14964 14264 13464 12761 12254 12147 12542 11936 11728 12020 12816 13816 14618 15321 22542 14042 0 0 0
+ 22764 12056 11645 11432 11621 12116 12716 13320 13816 14416 15120 15731 15942 15953 15564 23320 13740 0 0 0
+ 25386 14086 12977 12765 13357 14457 23357 12044 11733 12023 13317 15016 15213 14810 24086 13392 0 0 0 0
+ 21865 12163 12357 11947 11736 12025 12822 14222 15228 15938 16051 15865 23004 14388 0 0 0 0 0 0
+ 25482 14482 13473 12560 11942 11931 12422 13617 15016 15314 14809 23990 14482 0 0 0 0 0 0 0
+ 21272 11864 13064 13672 13688 13096 11896 11288 11272 0 0 0 0 0 0 0 0 0 0 0
+ 21687 12496 12460 21660 13260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21290 11896 13196 13690 13683 11268 11260 13660 0 0 0 0 0 0 0 0 0 0 0 0
+ 21391 11896 13196 13691 13684 13179 12079 23179 13674 13666 13060 11860 11266 0 0 0 0 0 0 0
+ 21296 11271 13771 23296 13260 22860 13560 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 23696 11296 11280 13180 13675 13666 13060 11860 11266 0 0 0 0 0 0 0 0 0 0 0
+ 23691 13196 11896 11290 11266 11860 13060 13666 13675 13279 11679 11275 0 0 0 0 0 0 0 0
+ 21296 13696 13692 12268 12260 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21779 11284 11291 11796 13196 13691 13684 13179 13675 13665 13060 11860 11265 11275 11779 13179 0 0 0 0
+ 23682 13177 11777 11282 11290 11896 13096 13690 13666 13060 11860 11266 0 0 0 0 0 0 0 0
+ 22604 13215 12616 12624 13424 13416 12604 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22624 12616 13416 13424 12624 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21620 11616 12016 12020 11620 23820 13816 14216 14220 13820 26020 16016 16416 16420 16020 0 0 0 0 0
+ 21466 11890 12590 11466 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22696 13496 14092 14486 14478 14072 13468 12668 12072 11678 11686 12092 12696 0 0 0 0 0 0 0
+ 23130 12822 13622 13530 13130 23441 13588 14488 13441 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22064 15232 22032 15264 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 23775 14380 15480 16075 16365 16242 15826 15016 13716 13021 12834 13245 14153 15053 16249 0 0 0 0 0
+ 21648 15648 23464 13460 13860 13864 13464 23436 13432 13832 13836 13436 0 0 0 0 0 0 0 0
+ 22001 11201 10708 10716 11223 12023 13601 14401 14908 14916 14423 13623 12001 0 0 0 0 0 0 0
+ 23696 13608 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 24872 14159 13941 14121 14808 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22472 13159 13340 13121 12408 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 24266 11648 14230 26066 13448 16030 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21666 14248 11630 23466 16048 13430 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 27280 14016 17216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22282 15482 24882 14786 15882 14578 14882 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 20896 17296 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 23668 13628 21648 15648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21648 15648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 23146 13150 13453 13853 14150 14146 13843 13443 13146 23450 13846 23850 13446 0 0 0 0 0 0 0
+ 21656 15656 21640 15640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21208 16096 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22480 14088 15680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22480 12985 13685 14479 15179 15684 0 0 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/plotlib/sym/slan.fnt b/plotlib/sym/slan.fnt
new file mode 100644
index 0000000..2248f0d
--- /dev/null
+++ b/plotlib/sym/slan.fnt
@@ -0,0 +1,93 @@
+ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,.;:`"!?@#$%&|()[]{}<>_+-*=/^~
+ 21616 12472 13183 13888 15488 16183 16472 15616 22150 16150 0 0 0 0 0 0 0 0 0 0
+ 21616 12688 15188 16184 16476 16368 15860 14856 15752 16044 15728 15220 14216 11616 22256 14856 0 0 0 0
+ 26474 16183 15488 13888 13183 12472 11832 12121 12816 14416 15121 15729 0 0 0 0 0 0 0 0
+ 21416 14416 15121 15832 16472 16183 15488 12488 21816 12888 0 0 0 0 0 0 0 0 0 0
+ 25616 11616 12688 16688 22256 15356 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21616 12688 16688 22256 15256 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 26474 16183 15488 13888 13183 12472 11832 12121 12816 14416 15121 15832 16150 14550 0 0 0 0 0 0
+ 21616 12688 25616 16688 22256 16256 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 24888 13816 22616 15016 23688 16088 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21630 11921 12616 13916 14621 15332 16188 26788 14688 0 0 0 0 0 0 0 0 0 0 0
+ 22688 11616 26688 12045 23458 15616 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 23088 12016 16016 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21416 12488 14048 16888 15816 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21616 12688 15616 16688 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21832 12472 13183 13888 15488 16183 16472 15832 15121 14416 12816 12121 11832 0 0 0 0 0 0 0
+ 21616 12688 15188 16183 16476 16262 15755 14750 12150 0 0 0 0 0 0 0 0 0 0 0
+ 21832 12472 13183 13888 15488 16183 16472 15832 15121 14416 12816 12121 11832 24331 15616 0 0 0 0 0
+ 21616 12688 15188 16183 16476 16262 15755 14750 12150 24750 15816 0 0 0 0 0 0 0 0 0
+ 26576 16183 15288 14088 13183 12474 12470 12761 13656 14856 15651 15942 15830 15121 14216 13016 12121 11830 0 0
+ 24688 13616 22488 16888 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22688 11832 12121 12816 14416 15121 15832 16688 0 0 0 0 0 0 0 0 0 0 0 0
+ 22688 12582 13616 16582 16688 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22488 11952 11939 12516 13737 14046 14137 14716 15939 16352 16888 24046 14154 0 0 0 0 0 0 0
+ 22688 12582 15622 15616 26688 16582 11622 11616 0 0 0 0 0 0 0 0 0 0 0 0
+ 22688 12582 14256 16582 16688 24256 13616 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22688 16688 11616 15616 23356 15156 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22764 14964 15759 16150 15616 25942 13142 12338 11730 11728 12020 12816 14416 15220 15728 0 0 0 0 0
+ 22888 11816 22352 12860 13764 15364 16060 16252 15928 15420 14616 13016 12220 12028 0 0 0 0 0 0
+ 26152 15860 15164 13564 12660 12152 11728 12020 12816 14416 15220 15728 0 0 0 0 0 0 0 0
+ 26488 15416 25952 15660 14964 13364 12460 11952 11528 11820 12616 14216 15020 15528 0 0 0 0 0 0
+ 25726 15220 14416 12816 12020 11728 12152 12660 13564 15164 15860 16152 15941 11941 0 0 0 0 0 0
+ 26872 16680 15884 14684 13880 13272 12416 22256 14856 0 0 0 0 0 0 0 0 0 0 0
+ 21616 11908 12704 14304 15108 15616 16364 26152 15860 15164 13564 12660 12152 11937 12129 12925 14525 15329 15937 0
+ 22688 11616 22152 12660 13564 15164 15860 16152 15616 0 0 0 0 0 0 0 0 0 0 0
+ 22416 15216 24016 14662 13562 24277 14280 14482 14782 14980 14977 14675 14375 14277 0 0 0 0 0 0
+ 21416 11708 12504 13704 14508 15016 15662 14462 25175 15077 15080 15282 15582 15780 15777 15475 15175 0 0 0
+ 22888 11816 22244 15968 23250 15816 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22316 14916 23616 14688 13788 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22164 11416 22053 12360 13064 13464 13960 14153 14560 15264 15664 16160 16353 15816 24153 13724 0 0 0 0
+ 22364 11616 22152 12660 13564 15164 15860 16152 15616 0 0 0 0 0 0 0 0 0 0 0
+ 21728 12152 12660 13564 15164 15860 16152 15728 15220 14416 12816 12020 11728 0 0 0 0 0 0 0
+ 22564 11600 22352 12860 13764 15364 16060 16352 16136 15528 14724 13124 12328 12136 0 0 0 0 0 0
+ 26164 15200 25952 15660 14964 13364 12460 11952 11736 11928 12724 14324 15128 15736 0 0 0 0 0 0
+ 22764 12016 22552 13060 13964 15364 16060 16352 0 0 0 0 0 0 0 0 0 0 0 0
+ 26256 15961 15364 13364 12661 12255 12151 12345 12941 14941 15637 15831 15726 15319 14616 12616 11919 11724 0 0
+ 23484 12528 12820 13616 14816 15620 16128 22366 14966 0 0 0 0 0 0 0 0 0 0 0
+ 22364 11728 12020 12816 14416 15220 15728 26364 15616 0 0 0 0 0 0 0 0 0 0 0
+ 22364 12154 13616 16154 16364 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22164 11840 11830 12516 13529 13936 14029 14716 15830 16140 16564 23936 14042 0 0 0 0 0 0 0
+ 22564 15616 26164 11616 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22364 11937 12129 12925 14525 15329 15937 26364 15616 15108 14304 12704 11908 11616 0 0 0 0 0 0
+ 22564 16164 11616 15616 23042 14742 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21728 12576 13084 13888 15488 16284 16576 15728 15220 14416 12816 12020 11728 0 0 0 0 0 0 0
+ 23578 14688 13616 22616 14616 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22576 13084 13888 15488 16284 16576 16466 15858 12336 11728 11616 15616 0 0 0 0 0 0 0 0
+ 22778 13284 14088 15488 16284 16576 16469 15861 15057 15753 16044 15728 15220 14416 12816 12020 11726 25057 13457 0
+ 26088 15016 24016 16016 26340 11940 12688 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 26488 12688 12257 15057 15753 16045 15728 15220 14416 12816 12020 11728 0 0 0 0 0 0 0 0
+ 26578 16284 15488 13888 13084 12576 11728 12020 12816 14416 15220 15728 16045 15753 15057 13457 12553 12045 0 0
+ 22688 16688 16579 13328 13216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 25357 13157 12467 12576 13084 13888 15488 16284 16576 16367 15357 16047 15728 15220 14416 12816 12020 11728 12047 13157
+ 21726 12020 12816 14416 15220 15728 16576 16284 15488 13888 13084 12576 12259 12551 13247 14847 15751 16259 0 0
+ 22002 12916 13024 12224 12116 12515 12002 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22224 13024 12916 12116 12224 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22002 12515 12116 12224 13024 12916 12002 22656 12548 13348 13456 12656 0 0 0 0 0 0 0 0
+ 22224 12116 12916 13024 12224 22656 12548 13348 13456 12656 0 0 0 0 0 0 0 0 0 0
+ 25784 16468 16384 15784 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22684 12866 13284 12684 24284 14466 14884 14284 0 0 0 0 0 0 0 0 0 0 0 0
+ 23124 12816 13416 13324 13124 23439 14588 13788 13439 24185 13546 0 0 0 0 0 0 0 0 0
+ 22374 12783 13588 14788 15583 15574 15066 14260 13754 13547 13439 23124 12816 13416 13324 13124 0 0 0 0
+ 24443 13538 12743 12854 13861 14858 14443 14739 15239 15849 16065 15375 14277 12974 12063 11547 11631 12722 13922 15227
+ 23678 12223 25178 13723 21859 15859 21440 15340 0 0 0 0 0 0 0 0 0 0 0 0
+ 25576 13376 12573 12167 12059 12254 12852 14452 15050 15345 15237 14731 13928 11728 23116 14188 0 0 0 0
+ 21116 16188 22888 12484 12479 12875 13375 13779 13784 13388 12888 24616 15020 15025 14629 14129 13725 13720 14116 14616
+ 25436 14623 13918 13216 12316 11521 11229 11437 12146 14056 14764 14872 14777 14280 13680 13077 12669 12858 15116 0
+ 23696 13608 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 26092 15282 14665 14350 14235 14418 14808 24515 14430 14650 15072 15485 0 0 0 0 0 0 0 0
+ 23492 13882 14065 13950 13635 13018 12208 23784 13870 13650 13229 12816 0 0 0 0 0 0 0 0
+ 25794 14494 13306 14606 24694 13506 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22794 14094 12906 11606 23894 12706 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 25696 14490 13853 12750 13746 13310 14304 23509 13945 13746 24691 14054 13853 0 0 0 0 0 0 0
+ 23096 14090 13453 14450 13346 12910 11804 22709 13145 13346 23890 13254 13453 0 0 0 0 0 0 0
+ 25866 11548 15330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21866 15548 11330 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 20600 17000 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21648 15648 23668 13628 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21648 15648 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22265 14031 22231 14065 21248 15048 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21656 15656 21640 15640 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 20608 16696 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21634 15634 21648 15648 21662 15662 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21636 15636 21653 12059 12862 13459 13854 14452 15255 15661 0 0 0 0 0 0 0 0 0 0
diff --git a/plotlib/sym/symb.fnt b/plotlib/sym/symb.fnt
new file mode 100644
index 0000000..cfd8ec3
--- /dev/null
+++ b/plotlib/sym/symb.fnt
@@ -0,0 +1,15 @@
+0123456789ABCD
+ 24848 14880 18080 18016 11616 11680 14880 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 24848 14880 16480 18064 18032 16416 13216 11632 11664 13280 14880 0 0 0 0 0 0 0 0 0
+ 24848 14886 18128 11528 14886 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 24885 14811 21148 18548 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 22175 17521 22121 17575 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 24848 14882 18248 14814 11448 14882 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 24848 14868 18168 14810 11568 14868 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21669 14848 14810 24848 18069 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 24886 14848 11627 24848 18027 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 23078 16618 23018 16678 21448 18248 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21866 17830 21830 17866 24882 14814 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21680 18016 11616 18080 11680 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 21616 18080 18016 11680 11616 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+ 24848 14859 11559 16917 14884 12717 18159 14859 0 0 0 0 0 0 0 0 0 0 0 0
diff --git a/plotlib/sym/symgen.f b/plotlib/sym/symgen.f
new file mode 100644
index 0000000..4b8f054
--- /dev/null
+++ b/plotlib/sym/symgen.f
@@ -0,0 +1,1179 @@
+C***********************************************************************
+C Module: symgen.f (part of font generation tools in Xplot/sym)
+C
+C Copyright (C) 1996 Harold Youngren, Mark Drela
+C
+C This program is free software; you can redistribute it and/or modify
+C it under the terms of the GNU General Public License as published by
+C the Free Software Foundation; either version 2 of the License, or
+C (at your option) any later version.
+C
+C This program is distributed in the hope that it will be useful,
+C but WITHOUT ANY WARRANTY; without even the implied warranty of
+C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+C GNU General Public License for more details.
+C
+C You should have received a copy of the GNU General Public License
+C along with this program; if not, write to the Free Software
+C Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+C
+C Report problems to: guppy@maine.com
+C or drela@mit.edu
+C***********************************************************************
+
+
+ PROGRAM SYMGEN
+C------------------------------------------------------------------------
+C
+C Interactive program for creating and modifying vector fonts.
+C
+C
+C A font set is kept stored in a database file XXXX.FNT, which
+C is read in when the program is invoked with
+C
+C % symgen XXXX
+C
+C The first line of XXXX.FNT is a list of the defined characters.
+C Each subsequent line then defines one character in the list:
+C
+C ABCD...
+C 21616 12168 13280 ... <- definition for "A"
+C 21616 12280 14880 ... <- definition for "B"
+C .
+C .
+C
+C Each 5-digit number defines a vector node x,y location on a 96x96
+C grid, with 16,16 being the lower-left "origin" of the character.
+C See SUBR. SYMPLT header below for the encoding format.
+C If the numbers are zero or missing, then the font character
+C is not plotted (blank).
+C
+C Once the database has been edited, command "W" will generate
+C a Fortran INCLUDE file XXXX.INC, with the vector font information
+C placed in DATA statements. This is for use in a SYMBOL-type
+C routine to allow plotting of the font. Four sample databases,
+C include files, and routines already exist:
+C
+C CHAR.FNT CHAR.INC SUBR. PLCHAR (Upper,lower case letters)
+C SLAN.FNT SLAN.INC SUBR. PLSLAN (Slanted version of CHAR )
+C MATH.FNT MATH.INC SUBR. PLMATH (Latex-like Greek symbols)
+C SYMB.FNT SYMB.INC SUBR. PLSYMB (Versatec plotting symbols)
+C
+C also available: SUBR. PLNUMB (Whole floating-point numbers)
+C
+C SUBR. PLCHAR, PLSLAN, and PLMATH (in ../plt_font.f) are identical
+C except for their INCLUDE statements. One can generate analogous
+C files and plot routines for any custom font, e.g.
+C
+C USER.FNT USER.INC SUBR. PLUSER
+C
+C
+C SUBR. PLSYMB is nearly the same, except that it takes an integer
+C argument ISYM = 0,1... to select the symbol defined on line ISYM+1:
+C
+C ABCD...
+C 21616 12168 13280 ... <- definition for ISYM = 0
+C 21616 12280 14880 ... <- definition for ISYM = 1
+C .
+C .
+C The ASCII characters on the first line are ignored in PLSYMB.
+C
+C PLSYMB also shifts the symbol down and left by 1/2 the symbol
+C size, so the symbol is centered on 0,0. This duplicates the
+C Versatec SYMBOL routine. Note that PLSYMB can only plot one
+C symbol at a time.
+C
+C
+C WARNING: The CHAR font implemented in PLCHAR is assumed to be
+C a "WYSIWIG" font, in which each font character closely
+C represents its ASCII index character. It is used by
+C other libPlt routines (and also this program!), and
+C hence should not be significantly modified.
+C
+C
+C------------------------------------------------------------------------
+C
+ COMMON /PLTC/ IDEV, IPSLU, SIZE, CH
+C
+ CHARACTER*100 CHARS
+ COMMON /CDATA/ CHARS
+ COMMON /NDATA/ NCHAR, NODE(20,100)
+ INTEGER NODET(20)
+C
+ LOGICAL SAVED
+C
+ CHARACTER*80 ARGP1, STRING, RANGE
+C
+ CHARACTER*1 COPT, ANS, ALPH, ALPHO, ALPHT, KCHAR
+ LOGICAL LABORT, LDONE
+C
+ SIZE = 6.0
+ IDEV = 1
+ IPSLU = 0
+C
+ CH = 0.7
+ X0 = 0.0
+ Y0 = 0.0
+C
+ NCHARS = 0
+C
+C---- get the XXXX working set name
+ CALL GETARG(1,ARGP1)
+ CALL LOAD(ARGP1)
+C
+C---- initial overlay character, plot-test string
+ ALPHO = ' '
+ STRING = ' '
+C
+C---- initial target character is first one in database
+ ALPH = CHARS(1:1)
+ SAVED = .TRUE.
+C
+ CALL PLINITIALIZE
+ CALL PLTALL(X0,Y0,ALPH,ALPHO,STRING)
+ CALL PLFLUSH
+ CALL PLEND
+C
+ CALL GETCOLOR(ICOL0)
+C
+ 1000 FORMAT(A)
+C
+ 900 CONTINUE
+ WRITE(*,1005)
+ 1005 FORMAT(/' C hange target character'
+ & /' I nput target character vectors'
+ & /' M odify target character vectors'
+ & /' T ranslate target character'
+ & /' O verlay other character'
+ & /' L ean character(s)'
+ & /' P lot specified character string'
+ & /' A dd a new character to database'
+ & /' D elete a character from database'
+ & /' S ave database'
+ & /' W rite include file from current database'
+ & /' Z oom'
+ & /' U nzoom'
+ & /' Q uit')
+C
+ 910 WRITE(*,1015) ALPH
+ 1015 FORMAT(/' Select option ( target character = ',A1,' ): ', $)
+ READ(*,1000) COPT
+C
+ IF(INDEX('Qq',COPT).NE.0) THEN
+ IF(.NOT.SAVED) THEN
+ WRITE(*,*)
+ WRITE(*,*) 'Database not saved. Really quit ? N'
+ READ(*,1000) ANS
+ IF(INDEX('Yy',ANS) .EQ. 0) GO TO 900
+ ENDIF
+ CALL PLCLOSE
+ STOP
+ ENDIF
+C
+ NOPT = INDEX('CIMTOLPADSWZU',COPT) + INDEX('cimtolpadswzu',COPT)
+C
+ GOTO (10,20,30,40,50,60,70,80,90,100,110,120,130) NOPT
+ GOTO 900
+C
+C===========================================
+C---- select character
+ 10 CONTINUE
+ WRITE(*,1010) CHARS(1:NCHAR)
+ 1010 FORMAT(/1X,A,
+ & //1X,'Select new target character: ',$)
+ READ(*,1000) ALPH
+C
+ CALL PLTALL(X0,Y0,ALPH,ALPHO,STRING)
+ CALL PLFLUSH
+ CALL PLEND
+ GO TO 900
+C
+C===========================================
+C---- input character
+ 20 CONTINUE
+C
+ KC = INDEX(CHARS,ALPH)
+ IF(KC.EQ.0) THEN
+ WRITE(*,*) 'Character is not in database.'
+ GO TO 900
+ ENDIF
+C
+C---- clear node-input buffer array
+ DO 201 K=1, 20
+ NODET(K) = 0
+ 201 CONTINUE
+C
+C
+C---- small node-select symbol size
+ CHS = 0.010*CH
+C
+ CALL PLTALL(X0,Y0,ALPH,ALPHO,STRING)
+ CALL PABORT
+ CALL PDONE
+C
+ccc CALL PLCHAR(X0,Y0,CH,ALPH,0.0,1)
+C
+ CALL PLFLUSH
+C
+ WRITE(*,*)
+ WRITE(*,*) 'Input stroke points (double-click to end a stroke)...'
+C
+ ILAST = -999
+ JLAST = -999
+ ISTAT = 2
+C
+ DO 205 K=1, 20
+ 204 CALL GETCURSORXY(XC,YC,KCHAR)
+C
+C------ exit if clicked inside "ABORT" box
+ IF(LABORT(XC,YC)) THEN
+ WRITE(*,*) 'Database unchanged.'
+ GO TO 209
+ ENDIF
+C
+C------ finish up if clicked inside "DONE" box
+ IF(LDONE(XC,YC)) GO TO 206
+C
+C------ set integer coordinates and clip to within field
+ I = INT(64.0*(XC-X0)/CH + 16.5)
+ J = INT(64.0*(YC-Y0)/CH + 16.5)
+ I = MAX( 0 , MIN(I,96) )
+ J = MAX( 0 , MIN(J,96) )
+C
+ IF(ILAST.EQ.I .AND. JLAST.EQ.J) THEN
+ ISTAT = 2
+ ILAST = -999
+ JLAST = -999
+ WRITE(*,*) 'Will start new stroke...'
+ GO TO 204
+ ENDIF
+C
+ WRITE(*,1026) K, I, J
+ 1026 FORMAT(1X,' node',I3,': ', 2I5)
+C
+C------ set new node location in buffer array
+ NODET(K) = 10000*ISTAT + 100*I + J
+C
+C------ put small symbol over actual node location
+ XNODE = CH*FLOAT(I-16)/64.0
+ YNODE = CH*FLOAT(J-16)/64.0
+ IF(ILAST.EQ.-999 .OR. JLAST.EQ.-999) THEN
+ CALL PLOT(XNODE,YNODE,3)
+ ELSE
+ CALL PLOT(XNODE,YNODE,2)
+ ENDIF
+ CALL NEWCOLORNAME('orange')
+ CALL PLSYMB(XNODE,YNODE,CHS,1,0.0,0)
+ CALL NEWCOLOR(ICOL0)
+ CALL PLFLUSH
+C
+C------ set up for next input point
+ ILAST = I
+ JLAST = J
+ ISTAT = 1
+C
+ 205 CONTINUE
+ WRITE(*,*) '20-node array limit reached'
+ 206 CONTINUE
+C
+C---- put buffer array into database
+ KC = INDEX(CHARS,ALPH)
+ DO 207 K=1, 20
+ NODE(K,KC) = NODET(K)
+ 207 CONTINUE
+ WRITE(*,*)
+ WRITE(*,*) 'Database updated.'
+ SAVED = .FALSE.
+C
+C---- replot whole character
+ 209 CALL PLEND
+ CALL PLTALL(X0,Y0,ALPH,ALPHO,STRING)
+ CALL PLFLUSH
+C
+ CALL PLEND
+ GO TO 900
+C
+C===========================================
+C---- modify character
+ 30 CONTINUE
+ WRITE(*,1030) ALPH
+ 1030 FORMAT(/1X, 'Modifying character: ', A)
+C
+ KC = INDEX(CHARS,ALPH)
+ IF(KC.EQ.0) THEN
+ WRITE(*,*) 'Character is not in database.'
+ GO TO 900
+ ENDIF
+C
+C---- save database node array for restoration after abort
+ DO 301 K=1, 20
+ NODET(K) = NODE(K,KC)
+ 301 CONTINUE
+C
+ CALL PLTINI
+ CALL PLTALL(X0,Y0,ALPH,ALPHO,STRING)
+C
+ccc CALL PLSYMB(X0,Y0,CH,ALPH,0.0,1)
+c
+C
+C---- small node-select symbol size
+ CHS = 0.010*CH
+C
+ CALL PABORT
+ CALL PDONE
+ CALL PLFLUSH
+C
+ WRITE(*,*)
+ WRITE(*,*) 'Click on old/new point pairs...'
+ DO 305 IPASS=1, 12345
+C
+ CALL GETCURSORXY(XC,YC,KCHAR)
+C
+C------ restore and exit if clicked inside "ABORT" box
+ IF(LABORT(XC,YC)) THEN
+ DO 3052 K=1, 20
+ NODE(K,KC) = NODET(K)
+ 3052 CONTINUE
+ WRITE(*,*) 'Database unchanged.'
+ GO TO 309
+ ENDIF
+C
+C------ finish up if clicked inside "DONE" box
+ IF(LDONE(XC,YC)) GO TO 306
+C
+C------ set integer coordinates and clip to within field
+ I = INT(64.0*(XC-X0)/CH + 16.5)
+ J = INT(64.0*(YC-Y0)/CH + 16.5)
+ I = MAX( 0 , MIN(I,96) )
+ J = MAX( 0 , MIN(J,96) )
+C
+C------ find nearest vector node
+ IDMIN = 1000000
+ KMIN = 0
+ DO 3054 K=1, 20
+ ISTAT = NODE(K,KC) / 10000
+ IF(ISTAT.EQ.0) GO TO 3055
+C
+ NODEB = NODE(K,KC) - ISTAT*10000
+ IT = NODEB / 100
+ JT = NODEB - 100*IT
+C
+ IDIST = (I - IT)**2 + (J - JT)**2
+ IF(IDIST.LT.IDMIN) THEN
+ IDMIN = IDIST
+ KMIN = K
+ ENDIF
+ 3054 CONTINUE
+ 3055 CONTINUE
+C
+ KT = KMIN
+ IF(KT.EQ.0) THEN
+ WRITE(*,*) 'Nearest point not found.'
+ GO TO 900
+ ENDIF
+C
+C------ plot small symbol on nearest vector node to identify it
+ ISTAT = NODE(KT,KC) / 10000
+ NODEB = NODE(KT,KC) - ISTAT*10000
+ IT = NODEB / 100
+ JT = NODEB - 100*IT
+C
+ CALL NEWCOLORNAME('red')
+ XNODE = CH*FLOAT(IT-16)/64.0
+ YNODE = CH*FLOAT(JT-16)/64.0
+ CALL PLSYMB(XNODE,YNODE,CHS,1,0.0,0)
+ FK = FLOAT(KT)
+ CALL PLNUMB(XNODE+1.5*CHS,YNODE+1.5*CHS,3.0*CHS,FK,0.0,-1)
+ CALL NEWCOLOR(ICOL0)
+C
+C------ now get new location for vector node KT
+ CALL GETCURSORXY(XC,YC,KCHAR)
+C
+ IF(LABORT(XC,YC)) THEN
+ DO 3056 K=1, 20
+ NODE(K,KC) = NODET(K)
+ 3056 CONTINUE
+ WRITE(*,*) 'No changes made.'
+ GO TO 309
+ ENDIF
+C
+ IF(LDONE(XC,YC)) GO TO 306
+C
+C------ integer coordinates for new location
+ I = INT(64.0*(XC-X0)/CH + 16.5)
+ J = INT(64.0*(YC-Y0)/CH + 16.5)
+ I = MAX( 0 , MIN(I,96) )
+ J = MAX( 0 , MIN(J,96) )
+C
+C------ encode coordinates into database
+ NODE(KT,KC) = 10000*ISTAT + 100*I + J
+C
+C------ replot everything
+ CALL PLEND
+ CALL PLTALL(X0,Y0,ALPH,ALPHO,STRING)
+ CALL PABORT
+ CALL PDONE
+ CALL PLFLUSH
+C
+ 305 CONTINUE
+ 306 CONTINUE
+C
+ WRITE(*,*)
+ WRITE(*,*) 'Database updated.'
+ SAVED = .FALSE.
+C
+C---- replot final state
+ 309 CALL PLEND
+ CALL PLTALL(X0,Y0,ALPH,ALPHO,STRING)
+ CALL PLFLUSH
+C
+ CALL PLEND
+ GO TO 900
+C
+C===========================================
+C---- translate current character
+ 40 CONTINUE
+C
+ DO K=1, 20
+ NODET(K) = 0
+ ENDDO
+C
+ 41 WRITE(*,1040)
+ 1040 FORMAT(/' Enter dX, dY (in points): ', $)
+ READ(*,*,ERR=41) ID, JD
+C
+ IC = INDEX(CHARS,ALPH)
+ DO 42 K=1, 20
+C
+C------ unpack node coordinates from database
+ ISTAT = NODE(K,IC) / 10000
+ IF(ISTAT.EQ.0) GO TO 43
+C
+ NODEB = NODE(K,IC) - ISTAT*10000
+ I = NODEB / 100
+ J = NODEB - 100*I
+C
+C------ shift coordinates
+ I = I + ID
+ J = J + JD
+C
+ IF(I.LT.0 .OR. I.GT.96) THEN
+ WRITE(*,*) 'X movement puts character outside field 0..96'
+ GO TO 40
+ ENDIF
+C
+ IF(J.LT.0 .OR. J.GT.96) THEN
+ WRITE(*,*) 'Y movement puts character outside field 0..96'
+ GO TO 40
+ ENDIF
+C
+C------ encode new coordinates in buffer array
+ NODET(K) = 10000*ISTAT + 100*I + J
+C
+ 42 CONTINUE
+ 43 CONTINUE
+C
+C---- store shifted nodes in database from buffer array
+ DO 46 K=1, 20
+ NODE(K,IC) = NODET(K)
+ 46 CONTINUE
+C
+ CALL PLTALL(X0,Y0,ALPH,ALPHO,STRING)
+ CALL PLFLUSH
+ CALL PLEND
+ GO TO 900
+C
+C===========================================
+C---- select overlay character
+ 50 CONTINUE
+ ALPHO = ' '
+ WRITE(*,1050) CHARS(1:NCHAR)
+ 1050 FORMAT(/1X,A,
+ & //1X,'Select character to overlay (<return> if none: ',$)
+ READ(*,1000) ALPHO
+C
+ CALL PLTALL(X0,Y0,ALPH,ALPHO,STRING)
+ CALL PLFLUSH
+ CALL PLEND
+ GO TO 900
+C
+C===========================================
+C---- lean character(s)
+ 60 CONTINUE
+ WRITE(*,1060)
+ 1060 FORMAT(/' Enter character range to lean (e.g. AZ): ',$)
+ READ(*,1000) RANGE
+ IF(INDEX(RANGE,' ').EQ.1) GO TO 900
+C
+ 62 WRITE(*,1062)
+ 1062 FORMAT(/1X,'Enter tan(lean_angle), + to right: ',$)
+ READ (*,*,ERR=62) TANA
+C
+ CALL LEAN(RANGE,TANA)
+C
+ CALL PLTALL(X0,Y0,ALPH,ALPHO,STRING)
+ CALL PLFLUSH
+ CALL PLEND
+ GO TO 900
+C
+C===========================================
+C---- enter plot test string
+ 70 CONTINUE
+ WRITE(*,1070)
+ 1070 FORMAT(/' Enter string: ',$)
+ READ(*,1000) STRING
+C
+ CALL PLTALL(X0,Y0,ALPH,ALPHO,STRING)
+ CALL PLFLUSH
+ CALL PLEND
+ GO TO 900
+C
+C===========================================
+C---- add character to database
+ 80 CONTINUE
+ IF(NCHAR+1.GE.100) THEN
+ WRITE(*,*)
+ WRITE(*,*) 'Array limit reached. Cannot add character.'
+ GO TO 900
+ ENDIF
+C
+ WRITE(*,1080)
+ 1080 FORMAT(/1X,'Enter character to be added: ',$)
+ READ(*,1000) ALPH
+ IC = INDEX(CHARS,ALPH)
+ IF(IC.NE.0) THEN
+ WRITE(*,*) 'That is already in database.'
+ GO TO 900
+ ENDIF
+C
+ 81 WRITE(*,1081) CHARS(1:NCHAR), ALPH
+ 1081 FORMAT(/1X,A,
+ & //1X,' ... insert ',A1,
+ & ' before which character ? (<return> to append) : ',$)
+ READ(*,1000) ALPHT
+ IC = INDEX(CHARS,ALPHT)
+ IF(IC.EQ.0) IC = NCHAR+1
+C
+C---- move up all characters above IC to make room for new character
+ IF(IC.LE.NCHAR) THEN
+ CHARS(IC+1:NCHAR+1) = CHARS(IC:NCHAR)
+ DO 802 KC=NCHAR, IC, -1
+ DO 8024 K=1, 20
+ NODE(K,KC+1) = NODE(K,KC)
+ 8024 CONTINUE
+ 802 CONTINUE
+ ENDIF
+C
+ NCHAR = NCHAR+1
+C
+C---- set new character and clear its vectors
+ CHARS(IC:IC) = ALPH
+ DO 804 K=1, 20
+ NODE(K,IC) = 0
+ 804 CONTINUE
+C
+ CALL PLTALL(X0,Y0,ALPH,ALPHO,STRING)
+ CALL PLFLUSH
+ CALL PLEND
+ GO TO 900
+C
+C===========================================
+C---- delete character from database
+ 90 CONTINUE
+C
+ WRITE(*,1090)
+ 1090 FORMAT(/1X,'Select character to be deleted: ',$)
+ READ(*,1000) ALPH
+C
+ IF(INDEX(' ',ALPH).EQ.1) THEN
+ WRITE(*,*) 'No action taken'
+ GO TO 900
+ ENDIF
+C
+ IC = INDEX(CHARS,ALPH)
+C
+ IF(IC.EQ.0) THEN
+ WRITE(*,*) 'Character not in database.'
+ GO TO 900
+ ENDIF
+C
+C---- pull down all characters above the one to be deleted
+ CHARS(IC:NCHAR) = CHARS(IC+1:NCHAR+1)
+ DO 902 KC=IC, NCHAR-1
+ DO 9024 K=1, 20
+ NODE(K,KC) = NODE(K,KC+1)
+ 9024 CONTINUE
+ 902 CONTINUE
+ NCHAR = NCHAR-1
+ IC = MIN(IC,NCHAR)
+C
+C---- set new current character
+ ALPH = CHARS(IC:IC)
+C
+ CALL PLTALL(X0,Y0,ALPH,ALPHO,STRING)
+ CALL PLFLUSH
+ CALL PLEND
+ GO TO 900
+C
+C===========================================
+C---- write out database
+ 100 CONTINUE
+ CALL SAVE(ARGP1,SAVED)
+ GO TO 900
+C
+C===========================================
+C---- write out include file
+ 110 CONTINUE
+ CALL WRIT(ARGP1)
+ GO TO 910
+C
+C===========================================
+C---- set zoom
+ 120 CONTINUE
+ CALL USETZOOM(.FALSE.,.TRUE.)
+ CALL REPLOT(1)
+ GO TO 910
+C
+C===========================================
+C---- clear zoom
+ 130 CONTINUE
+ CALL CLRZOOM
+ CALL REPLOT(1)
+ GO TO 910
+C
+ END
+
+
+
+ SUBROUTINE LOAD(ARGP1)
+ CHARACTER*80 ARGP1,FNAME
+C
+ CHARACTER*100 CHARS
+ COMMON /CDATA/ CHARS
+ COMMON /NDATA/ NCHAR, NODE(20,100)
+C
+ 1000 FORMAT(A)
+C
+ K = INDEX(ARGP1,' ') - 1
+ IF(K.LT.1) THEN
+ WRITE(*,*) 'SYMGEN argument error: ', ARGP1
+ STOP
+ ENDIF
+C
+ FNAME = ARGP1(1:K) // '.FNT'
+C
+ OPEN(3,FILE=FNAME,STATUS='OLD',ERR=90)
+ READ(3,1000) CHARS
+ NCHAR = INDEX(CHARS,' ') - 1
+C
+ DO IC=1, NCHAR
+ DO K=1, 20
+ NODE(K,IC) = 0
+ ENDDO
+ ENDDO
+C
+ DO IC=1, NCHAR
+ READ(3,*,END=80) (NODE(K,IC),K=1,20)
+C
+C------ clear any invalid points (should be zero anyway)
+ DO K=1, 20
+ ISTAT = NODE(K,IC) / 10000
+ IF(ISTAT.EQ.0) NODE(K,IC) = 0
+ ENDDO
+ ENDDO
+C
+ 80 CONTINUE
+ CLOSE(3)
+C
+ WRITE(*,1200) CHARS(1:NCHAR)
+ 1200 FORMAT(/1X,'Database read for the following character set...'
+ & //1X, A)
+C
+ RETURN
+C
+ 90 CONTINUE
+ WRITE(*,*) 'Database file not found: ',FNAME(1:60)
+ RETURN
+C
+ END
+
+
+
+ SUBROUTINE SAVE(ARGP1,SAVED)
+ CHARACTER*80 ARGP1,FNAME
+ CHARACTER*1 ANS
+ CHARACTER*4 CNUM
+ LOGICAL SAVED
+C
+ CHARACTER*100 CHARS
+ COMMON /CDATA/ CHARS
+ COMMON /NDATA/ NCHAR, NODE(20,100)
+C
+C
+ 1000 FORMAT(A)
+ 1500 FORMAT(1X,20I6)
+ 2100 FORMAT(/' File ',A,' exits. Overwrite ? Y')
+C
+C
+ KARG = INDEX(ARGP1,' ') - 1
+C
+C---- write new database file for next SYMGEN call
+ FNAME = ARGP1(1:KARG) // '.FNT'
+ OPEN(3,FILE=FNAME,STATUS='OLD',ERR=10)
+C
+ WRITE(*,2100) FNAME(1:KARG+4)
+ READ(*,1000) ANS
+ IF(INDEX('Nn',ANS) .NE. 0) THEN
+ CLOSE(3)
+ RETURN
+ ENDIF
+C
+ 10 OPEN(3,FILE=FNAME,STATUS='UNKNOWN')
+C
+ WRITE(3,1000) CHARS(1:NCHAR)
+ DO IC=1, NCHAR
+ WRITE(3,1500) (NODE(K,IC),K=1,20)
+ ENDDO
+ CLOSE(3)
+ WRITE(*,*)
+ WRITE(*,*) 'New database file written: ', FNAME(1:KARG+4)
+ SAVED = .TRUE.
+C
+ RETURN
+ END
+
+
+
+ SUBROUTINE WRIT(ARGP1)
+ CHARACTER*80 ARGP1,FNAME,LINE
+ CHARACTER*1 ANS
+ CHARACTER*4 CNUM
+C
+ CHARACTER*100 CHARS
+ COMMON /CDATA/ CHARS
+ COMMON /NDATA/ NCHAR, NODE(20,100)
+C
+C---- write new include file for SYMBOL-type routine
+C
+ 1000 FORMAT(A)
+ 1500 FORMAT(1X,20I6)
+ 2100 FORMAT(/' File ',A,' exits. Overwrite ? Y')
+C
+ KARG = INDEX(ARGP1,' ') - 1
+C
+ FNAME = ARGP1(1:KARG) // '.INC'
+ OPEN(4,FILE=FNAME,STATUS='OLD',ERR=20)
+C
+ WRITE(*,2100) FNAME(1:KARG+4)
+ READ(*,1000) ANS
+ IF(INDEX('Nn',ANS) .NE. 0) THEN
+ CLOSE(4)
+ GO TO 28
+ ENDIF
+C
+ 20 OPEN(4,FILE=FNAME,STATUS='UNKNOWN')
+ WRITE(4,*) ' '
+ WRITE(4,3010) NCHAR, NCHAR
+C
+ WRITE(4,*) ' '
+ NARR = (NCHAR-1)/10
+ DO N=0, NARR
+ NDIM = MIN( 10 , NCHAR-N*10)
+ WRITE(4,3201) N, NDIM
+ ENDDO
+ DO N=0, NARR
+ WRITE(4,3202) 10*N+1, N
+ ENDDO
+C
+C---Write character translation data statements
+ WRITE(4,3020) NCHAR
+ DO L=1, 8
+ K1 = 26*L - 25
+ K2 = 26*L
+ IF(K1 .GT. NCHAR) GO TO 21
+ K2 = MIN(K2,NCHAR)
+ WRITE(4,3021) K1,K2, CHARS(K1:K2)
+ ENDDO
+ 21 CONTINUE
+C
+C---Write out character node data
+ DO N=0, NARR
+ IC1 = 10*N + 1
+ IC2 = 10*N + 10
+ IC2 = MIN(IC2,NCHAR)
+C
+ IC = IC1
+ WRITE(4,3210) N
+ DO IC=IC1, IC2-1
+ WRITE(4,3220) (NODE(K,IC),K= 1,10)
+ WRITE(4,3220) (NODE(K,IC),K=11,20)
+ ENDDO
+ IC = IC2
+ WRITE(4,3220) (NODE(K,IC),K= 1,10)
+ WRITE(4,3230) (NODE(K,IC),K=11,20)
+ ENDDO
+C
+ CLOSE(4)
+C
+ 3010 FORMAT(' CHARACTER*',I3,' CHARS'
+ & /' INTEGER NODE(20,',I3,')')
+C
+ 3201 FORMAT(' DIMENSION NODE',I1,'(20,',I2,')')
+ 3202 FORMAT(' EQUIVALENCE ( NODE(1,',I3,') , NODE',I1,'(1,1) )')
+C
+ 3020 FORMAT(' DATA NCHARS / ',I3,' /')
+ 3021 FORMAT(' DATA CHARS(',I3,':',I3,') / ''',A,''' /')
+C
+ 3210 FORMAT( ' DATA NODE',I1,' /')
+ 3220 FORMAT( ' & ',10(I5,',') )
+ 3230 FORMAT( ' & ', 9(I5,','),I5,' /' )
+C
+ CLOSE(4)
+ WRITE(*,*)
+ WRITE(*,*) 'New include file written: ', FNAME(1:KARG+4)
+ WRITE(*,*) 'Put include file in Xplot directory,',
+ & ' make libPlt.a to implement new font.'
+C
+ 28 CONTINUE
+ RETURN
+C
+ END
+
+
+ SUBROUTINE LEAN(RANGE,TANA)
+ CHARACTER*(*) RANGE
+C
+ CHARACTER*1 ALPH
+C
+ CHARACTER*100 CHARS
+ COMMON /CDATA/ CHARS
+ COMMON /NDATA/ NCHAR, NODE(20,100)
+C
+ KC1 = INDEX(CHARS,RANGE(1:1))
+ KC2 = INDEX(CHARS,RANGE(2:2))
+C
+ IF(KC1.EQ.0 .OR. KC2.EQ.0) THEN
+ WRITE(*,*) 'Specified range not in current character set.'
+ WRITE(*,*) 'No action taken.'
+ RETURN
+ ENDIF
+C
+C---- go over each character...
+ DO 12 KC=KC1, KC2
+C
+C------ go over each node
+ DO K=1, 20
+C
+C-------- strip off leading point-status digit
+ ISTAT = NODE(K,KC) / 10000
+ NODEB = NODE(K,KC) - ISTAT*10000
+C
+ IF(ISTAT.GT.0) THEN
+C
+C---------- decode x and y location coordinates
+ I = NODEB / 100
+ J = NODEB - 100*I
+C
+C---------- perform tilt
+ I = I + INT( FLOAT(J-16)*TANA )
+C
+C---------- encode coordinates back into database
+ NODE(K,KC) = 10000*ISTAT + 100*I + J
+C
+ ENDIF
+C
+ ENDDO
+C
+ 12 CONTINUE
+C
+ RETURN
+ END
+
+
+
+ SUBROUTINE PLTINI
+ COMMON /PLTC/ IDEV, IPSLU, SIZE, CH
+C
+ RELWSIZ = 0.8
+ CALL PLOPEN(RELWSIZ,IPSLU,IDEV)
+ CALL PLOTABS(0.125,0.125,-3)
+ CALL NEWFACTOR(SIZE)
+ CALL PLOT(0.25*CH,0.25*CH,-3)
+C
+ RETURN
+ END ! PLTINI
+
+
+
+ SUBROUTINE PLTALL(X0,Y0,ALPH,ALPHO,STRING)
+ COMMON /PLTC/ IDEV, IPSLU, SIZE, CH
+ CHARACTER*1 ALPH, ALPHO
+ CHARACTER*80 STRING
+C
+ CHSEQ = 0.10*CH
+ CHSTR = 0.05*CH
+C
+ XSEQ = CH + CH/4.0 + 0.03*CH
+ YSEQ = CH + CH/4.0 - 1.10*CHSEQ
+C
+ XCHR = CH + CH/4.0 + 0.03*CH
+ YCHR = CH - 0.07*CH
+C
+ XSTR = XCHR
+ YSTR = YCHR - 0.65*CH
+C
+ CALL PLTINI
+ CALL PLTGRD(X0,Y0,CH)
+ CALL SYMPLT(X0,Y0,CH,ALPH,0.0,-1)
+ CALL SYMPLT(X0,Y0,CH,ALPHO,0.0,1)
+ CALL SYMPLT(XSTR,YSTR,CHSTR,STRING,0.0,80)
+ CALL PLTCHR(XCHR,YCHR)
+C
+ XQ = XSEQ
+ CHQ = CHSEQ
+c CALL PLOT(XQ,YSEQ,3)
+ DO ISCAL=0, 10
+ CALL SYMPLT(XQ,YSEQ,CHQ,ALPH,0.0,1)
+c CALL PLCHAR(999.,999.,CHQ,ALPH,0.0,1)
+ XQ = XQ + CHQ
+ CHQ = CHQ * 0.75
+ ENDDO
+C
+ RETURN
+ END
+
+
+
+ SUBROUTINE PLTCHR(XCHR,YCHR)
+ COMMON /PLTC/ IDEV, IPSLU, SIZE, CH
+C
+ CHARACTER*1 ALPH
+C
+ CHARACTER*100 CHARS
+ COMMON /CDATA/ CHARS
+ COMMON /NDATA/ NCHAR, NODE(20,100)
+C
+ CHP = 0.040*CH
+C
+ DO 10 ILIN=1, 5
+ YPLT = YCHR - CHP - 2.5*CHP*(ILIN-1)
+ DO 102 KC=1, 26
+ XPLT = XCHR + 0.5*CHP + 1.0*CHP*(KC-1)
+ XPLT = XCHR + 1.0*CHP*(KC-1)
+C
+ IC = KC + 26*(ILIN-1)
+ IF(IC.GT.NCHAR) GO TO 15
+C
+ ALPH = CHARS(IC:IC)
+ CALL SYMPLT(XPLT,YPLT,CHP,ALPH,0.0,1)
+ 102 CONTINUE
+ 10 CONTINUE
+C
+ 15 CONTINUE
+ RETURN
+ END
+
+
+
+ SUBROUTINE SYMPLT(XC,YC,CH,STRING,ANGLE,NC1)
+C----------------------------------------------------------------
+C Plots character string using vector font database NODE(..)
+C
+C Each NODE(..) value has the form sxxyy
+C
+C xx = location of polyline point 0 ... 96
+C yy
+C s = 2 if point is the start of a new polyline stroke
+C = 1 if point is inside or at the end of stroke
+C = 0 if point is not valid
+C----------------------------------------------------------------
+ CHARACTER*(*) STRING
+C
+ CHARACTER*1 ALPH
+C
+ CHARACTER*100 CHARS
+ COMMON /CDATA/ CHARS
+ COMMON /NDATA/ NCHAR, NODE(20,100)
+C
+ NC = ABS(NC1)
+ CHS = 0.010*CH
+C
+ CALL GETCOLOR(ICOL0)
+C
+C---- go over each character...
+ DO 12 IC=1, NC
+C
+C------ set plot location
+ X0 = XC + CH*FLOAT(IC-1)
+ Y0 = YC
+C
+ ALPH = STRING(IC:IC)
+ KC = INDEX(CHARS,ALPH)
+C
+ IF(KC.NE.0) THEN
+C
+C-------- decode and plot each node
+ DO K=1, 20
+C
+C---------- strip off leading point-status digit
+ ISTAT = NODE(K,KC) / 10000
+ NODEB = NODE(K,KC) - ISTAT*10000
+C
+C---------- decode x and y location coordinates
+ I = NODEB / 100
+ J = NODEB - 100*I
+C
+ X = X0 + CH*FLOAT(I-16)/64.0
+ Y = Y0 + CH*FLOAT(J-16)/64.0
+C
+ IF (ISTAT.EQ.0) THEN
+ GOTO 12
+ ELSEIF (ISTAT.EQ.1) THEN
+ CALL PLOT(X,Y,2)
+ ELSE
+ CALL PLOT(X,Y,3)
+ ENDIF
+C
+C---------- plot symbol at vector nodes
+ IF(NC1.LT.0) THEN
+ CALL NEWCOLORNAME('blue')
+ CALL PLSYMB(X,Y,CHS,1,0.0,0)
+ FK = FLOAT(K)
+ CALL PLNUMB(X+1.5*CHS,Y+1.5*CHS,3.0*CHS,FK,0.0,-1)
+ CALL NEWCOLOR(ICOL0)
+ CALL PLOT(X,Y,3)
+ ENDIF
+C
+ ENDDO
+ ENDIF
+C
+ 12 CONTINUE
+C
+ RETURN
+ END
+
+
+
+ SUBROUTINE PLTGRD(X0,Y0,CH)
+ DATA LMASK1, LMASK2, LMASK3 / -32640, -30584, -21846 /
+C
+ CALL NEWPEN(1)
+C
+ NX = 24
+ NY = 24
+ DX = CH/16.0
+ DY = CH/16.0
+ CALL PLGRID(X0-0.25*CH,Y0-0.25*CH, NX,DX, NY,DY, LMASK2 )
+C
+ NX = 2
+ NY = 2
+ DX = CH/2.0
+ DY = CH/2.0
+ CALL PLGRID(X0,Y0, NX,DX, NY,DY, LMASK3 )
+C
+ DO I=0,2
+ DO J=0,2
+ XPLT = X0 + DX*FLOAT(I)
+ YPLT = Y0 + DY*FLOAT(J)
+ CALL PLSYMB(XPLT,YPLT,CH/96.0,5,0.0,0)
+ ENDDO
+ ENDDO
+C
+ CALL PLFLUSH
+C
+ RETURN
+ END
+
+
+
+
+ SUBROUTINE PDONE
+ COMMON /PLTC/ IDEV, IPSLU, SIZE, CH
+ COMMON /DONE/ XDONE(2), YDONE(2)
+C
+C---- set DONE window
+ XDONE(1) = CH + CH/4.0 + 0.125/SIZE
+ XDONE(2) = CH + CH/4.0 + 1.025/SIZE
+ YDONE(1) = - CH/4.0 + 0.525/SIZE
+ YDONE(2) = - CH/4.0 + 1.425/SIZE
+C
+C---- plot DONE window
+ CALL GETCOLOR(ICOL0)
+ CALL NEWCOLORNAME('green')
+ CALL PLOT(XDONE(1),YDONE(1),3)
+ CALL PLOT(XDONE(2),YDONE(1),2)
+ CALL PLOT(XDONE(2),YDONE(2),2)
+ CALL PLOT(XDONE(1),YDONE(2),2)
+ CALL PLOT(XDONE(1),YDONE(1),2)
+C
+ CHA = MIN( (XDONE(2)-XDONE(1))/8.0 , (YDONE(2)-YDONE(1))/1.5 )
+ XCA = 0.5*(XDONE(2)+XDONE(1)) - 2.0*CHA
+ YCA = 0.5*(YDONE(2)+YDONE(1)) - 0.5*CHA
+ CALL PLCHAR(XCA,YCA,CHA,'DONE',0.0,4)
+ CALL NEWCOLOR(ICOL0)
+C
+ RETURN
+ END
+
+
+ FUNCTION LDONE(XC,YC)
+ COMMON /DONE/ XDONE(2), YDONE(2)
+ LOGICAL LDONE
+C
+C---- return T if location XC,YC falls within DONE window
+C
+ LDONE = XC .GE. XDONE(1) .AND.
+ & XC .LE. XDONE(2) .AND.
+ & YC .GE. YDONE(1) .AND.
+ & YC .LE. YDONE(2)
+C
+ RETURN
+ END
+
+
+
+
+ SUBROUTINE PABORT
+ COMMON /PLTC/ IDEV, IPSLU, SIZE, CH
+ COMMON /ABRT/ XABORT(2), YABORT(2)
+C
+C---- set abort window
+ XABORT(1) = CH + CH/4.0 + 0.125/SIZE
+ XABORT(2) = CH + CH/4.0 + 1.025/SIZE
+ YABORT(1) = - CH/4.0
+ YABORT(2) = - CH/4.0 + 0.400/SIZE
+C
+C---- plot abort window
+ CALL GETCOLOR(ICOL0)
+ CALL NEWCOLORNAME('red')
+ CALL PLOT(XABORT(1),YABORT(1),3)
+ CALL PLOT(XABORT(2),YABORT(1),2)
+ CALL PLOT(XABORT(2),YABORT(2),2)
+ CALL PLOT(XABORT(1),YABORT(2),2)
+ CALL PLOT(XABORT(1),YABORT(1),2)
+C
+ CHA = MIN( (XABORT(2)-XABORT(1))/8.0 , (YABORT(2)-YABORT(1))/1.5 )
+ XCA = 0.5*(XABORT(2)+XABORT(1)) - 2.5*CHA
+ YCA = 0.5*(YABORT(2)+YABORT(1)) - 0.5*CHA
+ CALL PLCHAR(XCA,YCA,CHA,'ABORT',0.0,5)
+ CALL NEWCOLOR(ICOL0)
+C
+ RETURN
+ END
+
+
+ FUNCTION LABORT(XC,YC)
+ COMMON /ABRT/ XABORT(2), YABORT(2)
+ LOGICAL LABORT
+C
+C---- return T if location XC,YC falls within abort window
+C
+ LABORT = XC .GE. XABORT(1) .AND.
+ & XC .LE. XABORT(2) .AND.
+ & YC .GE. YABORT(1) .AND.
+ & YC .LE. YABORT(2)
+C
+ RETURN
+ END
+
+
diff --git a/plotlib/sym/test.f b/plotlib/sym/test.f
new file mode 100644
index 0000000..2dd5b7d
--- /dev/null
+++ b/plotlib/sym/test.f
@@ -0,0 +1,159 @@
+C***********************************************************************
+C Module: test.f (test routine for fonts in Xplot/sym)
+C
+C Copyright (C) 1996 Harold Youngren, Mark Drela
+C
+C This program is free software; you can redistribute it and/or modify
+C it under the terms of the GNU General Public License as published by
+C the Free Software Foundation; either version 2 of the License, or
+C (at your option) any later version.
+C
+C This program is distributed in the hope that it will be useful,
+C but WITHOUT ANY WARRANTY; without even the implied warranty of
+C MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+C GNU General Public License for more details.
+C
+C You should have received a copy of the GNU General Public License
+C along with this program; if not, write to the Free Software
+C Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+C
+C Report problems to: guppy@maine.com
+C or drela@mit.edu
+C***********************************************************************
+
+
+ PROGRAM TEST
+C
+ IDEV = 3
+ IPSLU = 0
+ SIZE = 7.0
+ IPEN = 3
+ CH = 0.020
+C
+cc size = 5.0
+cc ipen = 2
+C
+ CALL PLINITIALIZE
+ CALL PLOPEN(-0.95,IPSLU,IDEV)
+ CALL NEWFACTOR(SIZE)
+ CALL NEWPEN(IPEN)
+C
+ CALL PLOTABS(0.60,1.20,-3)
+C
+ WRITE(*,*) 'Plotting PLCHAR set...'
+ CALL PLCHAR(0.0,1.25,CH,
+ & 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',0.0,52)
+ CALL PLCHAR(0.0,1.20,CH,
+ & '0123456789,.;:`"!?@#$%&|()[]{}<>_+-*=/^~ ',0.0,52)
+C
+ WRITE(*,*) 'Plotting PLSLAN set...'
+ CALL PLSLAN(0.0,1.10,CH,
+ & 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',0.0,52)
+ CALL PLSLAN(0.0,1.05,CH,
+ & '0123456789,.;:`"!?@#$%&|()[]{}<>_+-*=/^~ ',0.0,52)
+C
+ WRITE(*,*) 'Plotting PLMATH set...'
+ CALL PLMATH(0.0,0.95,CH,
+ & 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',0.0,52)
+ CALL PLMATH(0.0,0.90,CH,
+ & '0123456789,.;:`"!?@#$%&|()[]{}<>_+-*=/^~ ',0.0,52)
+C
+ WRITE(*,*) 'Plotting PLSYMB set...'
+ DO IS=0, 13
+ XX = 0.05*FLOAT(IS)
+ CALL PLSYMB(XX,0.80,CH,IS,0.0,0)
+ ENDDO
+C
+ WRITE(*,*) 'Plotting sample character strings...'
+C
+ CALL PLMATH(0.0 ,0.55,CH,' a2+b2=g2',0.0,9)
+C
+ CALL PLMATH(0.0 ,0.45,CH,' 2 2 2',0.0,9)
+ CALL PLCHAR(0.0 ,0.45,CH,' a +b =c ',0.0,9)
+C
+ CALL PLMATH(0.0 ,0.35+0.15*CH,
+ & CH,'R_____ ',0.0,9)
+ CALL PLMATH(0.0 ,0.35,CH,' 2 2 ',0.0,9)
+ CALL PLSLAN(0.0 ,0.35,CH,' a +b =c ',0.0,9)
+C
+ CALL PLMATH(0.30,0.55,CH,' 2',30.0,5)
+ CALL PLCHAR(0.30,0.55,CH,'E=mc ',30.0,5)
+C
+C
+ CALL PLMATH(0.30,0.45,CH,'F&= & & & ',-30.0,14)
+ CALL PLCHAR(0.30,0.45,CH,' u x+v y+w z',-30.0,14)
+C
+ CALL PLMATH(0.50,0.55,CH,'l- ',0.0,7)
+ CALL PLCHAR(0.50,0.55,CH,' shock',0.0,7)
+C
+ CALL PLMATH(0.50,0.45,CH,'>=Nf',0.0,4)
+ CALL PLCHAR(0.50,0.45,CH,'u ',0.0,4)
+C
+ CALL PLMATH(0.75,0.55,CH,'V= n H',0.0,7)
+ CALL PLCHAR(0.75,0.55,CH,' ( ) ',0.0,7)
+ CALL PLSLAN(0.75,0.55,CH,' t ',0.0,7)
+C
+ CALL PLMATH(0.75,0.45,CH,' __',0.0,5)
+ CALL PLMATH(0.75,0.45,CH,'V=Rn',0.0,4)
+ CALL PLSLAN(999.0,999.0,CH,'t',0.0,1)
+C
+ CALL PLMATH(0.75,0.35,CH,' = M ',0.0,7)
+ CALL PLCHAR(0.75,0.35,CH,'x [A] b',0.0,7)
+C
+ CALL PLMATH(0.0-CH,0.25-0.4*CH,2.0*CH,'I',0.0,1)
+ CALL PLMATH(0.0,0.25,CH,' ( ) ',0.0,7)
+ CALL PLCHAR(0.0,0.25,CH,' F x dx',0.0,7)
+C
+ CALL PLMATH(0.0,0.15,CH,'e{ ',0.0,3)
+ CALL PLCHAR(0.0,0.15,CH,' 1',0.0,3)
+C
+ CALL PLCHAR(0.25,0.25,CH,'273 K',0.0,5)
+ CALL PLMATH(0.25,0.25,CH,' " ',0.0,5)
+C
+ CALL PLSLAN(0.50,0.25,CH,' y',0.0,8)
+ CALL PLMATH(0.50,0.25,CH,'g=-$G/$ ',0.0,8)
+C
+ CALL PLCHAR(0.75,0.25,CH,' tan ',0.0,9)
+ CALL PLSLAN(0.75,0.25,CH,' y/x',0.0,9)
+ CALL PLMATH(0.75,0.25,CH,'q= M ',0.0,9)
+C
+ CALL PLCHAR(0.25,0.15,CH,'Underline',0.0,9)
+ CALL PLCHAR(0.25,0.15,CH,'_________',0.0,9)
+C
+ CALL PLSLAN(0.50,0.15,CH,'Overline',0.0,8)
+ CALL PLMATH(0.50,0.15,CH,'________',0.0,8)
+C
+ CALL PLSLAN(0.75,0.15,CH,' r=0',0.0,5)
+ CALL PLMATH(0.75,0.15,CH,'q# ',0.0,5)
+ CALL PLMATH(0.75,0.15,CH,' ^ ',0.0,5)
+ CALL PLMATH(0.75,0.15+0.4*CH,
+ & CH,'^ ',0.0,5)
+C
+ CALL PLMATH(0.00,0.05+1.2*CH,
+ & CH,' * ',0.0,10)
+ CALL PLMATH(0.00,0.05+0.4*CH,
+ & CH,' > > ',0.0,10)
+ CALL PLMATH(0.00,0.05,CH,'> > >',0.0,10)
+ CALL PLCHAR(0.00,0.05,CH,'a= r+2 v',0.0,10)
+ CALL PLMATH(0.00,0.05,CH,' W# W# ',0.0,10)
+C
+ CALL PLSLAN(0.30,0.05,CH,' ~ ',0.0,9)
+ CALL PLCHAR(0.30,0.05,CH,'ln(1+ ) ',0.0,9)
+ CALL PLMATH(0.30,0.05,CH,' v v',0.0,9)
+C
+ CALL PLSLAN(0.55,0.05,CH,' ~ ',0.0,14)
+ CALL PLCHAR(0.55,0.05,CH,' {g x } g x',0.0,14)
+ CALL PLMATH(0.55,0.05,CH,'O ( ) `O ',0.0,14)
+C
+ CALL PLFLUSH
+C
+ccc call usetzoom(.true.,.true.)
+ccc call replot(1)
+C
+ READ(*,1) DUMMY
+ 1 FORMAT(A)
+C
+ CALL PLOT(0.0,0.0,+999)
+C
+ END
+