diff options
Diffstat (limited to 'language/gurmukhi/singh')
22 files changed, 4109 insertions, 0 deletions
diff --git a/language/gurmukhi/singh/Readme b/language/gurmukhi/singh/Readme new file mode 100644 index 0000000000..4909831cff --- /dev/null +++ b/language/gurmukhi/singh/Readme @@ -0,0 +1,106 @@ + Gurmukhi for TeX + User Manual + + Version 1.0 + October 1995 + + Amarjit Singh + +________________________________________________________________________ + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +________________________________________________________________________ + +The purpose of the "Gurmukhi for TeX" software package is to convert the +characters in a document from English Alphabet to Gurmukhi utilizing the +TeX and Metafont software packages. Gurmukhi is a script for the Punjabi +language mostly used in North India. + +TeX is a typesetting system is a trademark of the American Mathematical +Society, used widely on Unix systems, and occassionally on other +operating environments. Metafont, a trademark of Addison Wesley +Publishing Company, is a font generation tool used by TeX. Both TeX and +Metafont are free software packages which can be downloaded from a TeX +archive sites. A working knowledge of TeX will greatly help in using +this package. + +This software package is greatly inspired by "Devanagari for TeX" which +is written by Frans J. Velthuis. I would like to thank him for giving +me permission to change his software package to support Gurmukhi. + + +This package consists of following file: + + gurmukhi.c C-source code of preprocessor + gmmacs.tex macro file for TeX + defs.mf, gmchars.mf, grmk8.mf, grmk9.mf, grmk10.mf + METAFONT-Source code of Gurmukhi characters. + grmk8.tfm, grmk9.tfm, grmk10.tfm + TFM Font format of Gurmukhi characters. + readme This file, describing this package. + install.ux File with some help on installation in Unix env. + install.dos Some help to install this package on DOS. + manual.gm and manual.ps + Manual on how to create documents using this package + bani.gm and eg.gm + Example files with Gurmukhi characters and other + information. + known.prob Known issues, and your help will be appreciated. + +All these files are put together in a tar file such that at the time of +extraction all file go into same directory. For every specific operating +environment, these files may need to move to different directories, and +that information is provided in install.* file for that environment. + +Details of each file included in this package: + +o gurmukhi.c, is the c-source file for preprocessor and you would need to + create an executable file by compiling this with a c compiler. I + believe, compilation should be fairly easy on any environment as the + source code has no system dependency. + + The purpose of this preprocessor is to convert text in a .gm file to a + .tex file in a format understanable by TeX. + +o gmmacs.tex, contains macros for TeX, and should be included in your + text file. This file has macros for fonts, for spacing and for other + macros which are generated by the Gurmukhi preprocessor. + +o *.mf, are the METAFONT source files for Gurmukhi fonts in various + point sizes. These files will be used to produce Gurmukhi fonts in + different formats. + +o *.tfm are the font files in TFM format. A TFM file can be generated + from a MF file using METAFONT. Usually, TeX internally calls METAFONT + to create required files. + +o manual.* contain the information on preparing an input text file (.gm) + and use of this package in detail. A postscript version of this manual + is also included, which can be directly sent to a postscript printer. + It may be useful, to get information on the package, while writing an + input text file. + +o *.gm, are some file to serve as examples. These can be used to + understand the features of a Gurmukhi text, and can also be used + as input text to see if the installation is complete. + + +If you have comments or suggestion, feel free to send them to me at +the following address: + +E-mail: asingh@evolving.com + +Current Postal Mail: 8405 E. Hampden Ave #11N Denver CO 80231 USA +Permanent Postal Address : A-3 ManSarover Garden, New Delhi 110015 India diff --git a/language/gurmukhi/singh/bani.gm b/language/gurmukhi/singh/bani.gm new file mode 100644 index 0000000000..df1575cbdd --- /dev/null +++ b/language/gurmukhi/singh/bani.gm @@ -0,0 +1,41 @@ +@punjabi +@obeylines +%________________________________________________________________________ +% +% This program is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation; either version 1, or (at your option) +% any later version. +% +% This program 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 General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program; if not, write to the Free Software +% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%________________________________________________________________________ +\input gmmacs +\gmnum + +\centerline{\gm 1.o satiguru prasAdi} +\centerline{\gm sUhI mahalA 5 } +{\gm + +jis ke sir Upari tuuN suaamii, so dukhu kaisaa paavai || +boli n jaanai maaiiaa madi maataa, mara.naa ciiti n aavai ||1|| +mere raamaraaii, tuuN sNtaa kaa sNt tere|| +tere sevak kau bhau kichu naahii, jamu nahii aavai nere ||1|| rahaau || +jo terai rNgi raate suaamii, tin kaa janam mara.n dukhu naasaa || +terii bakhas n me.tai koI, satigur kaa dilaasaa ||2|| +naamu dhiaaiini, sukh phala paaiini, aa.th pahar aaraadhahi|| +terii sara.ni tere bharavaasai, pNc dush.t lai saadhahi ||3|| +giaanu dhiaanu kichu karamu n jaa.naa, saar n jaa.naa terii|| +sabh te va.daa satiguru naanak, jini kala raakhii merii ||4||10||57|| + +} + +\bye + + diff --git a/language/gurmukhi/singh/copying b/language/gurmukhi/singh/copying new file mode 100644 index 0000000000..9a17037581 --- /dev/null +++ b/language/gurmukhi/singh/copying @@ -0,0 +1,249 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 19yy <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! diff --git a/language/gurmukhi/singh/defs.mf b/language/gurmukhi/singh/defs.mf new file mode 100644 index 0000000000..54225e30db --- /dev/null +++ b/language/gurmukhi/singh/defs.mf @@ -0,0 +1,99 @@ +% DEFS.MF +% Header file with Metafont-parameters for the Devanagari fonts +% +% Copyright (C) 1991 University of Groningen, The Netherlands +% +% Author: Frans J. Velthuis +% Internet: velthuis@rc.rug.nl +% Bitnet: velthuis@hgrrug5 +% +% This program is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation; either version 1, or (at your option) +% any later version. +% +% This program 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 General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program; if not, write to the Free Software +% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +% + penwd# :=thick# * cosd(rot-90); + usthick# := thick#; + mb# := .2ht#; + define_pixels(penwd,usthick,mb); + define_blacker_pixels(thin,thick,subthick); + thin := max(thin,1); subthick := max(subthick,1); + smoothing := 0; + pickup pencircle xscaled thick yscaled thin rotated rot; + scpenwd := pen_rt - pen_lft; + frame_pen := savepen; + pickup pencircle xscaled subthick yscaled thin rotated rot; + sub_pen := savepen; + picture v[]; + numeric vbar[]; + extra_endchar := extra_endchar & "chardp := chardp + mb#;" ; + + def tframe = + pickup frame_pen; + z1=(w-brm-.7rm,h); z2=(w,h); + x3=good.x w-brm; y3=h; z4=(x3,0); + draw z1--z2; + draw z3--z4; + enddef; + + def aframe = + pickup frame_pen; + z1=(w-rm-brm,h); z2=(w,h); + x3=good.x w-brm; y3=h; z4=(x3,0); + draw z1--z2; + draw z3--z4; + enddef; + + def endsav = + vbar[charcode]=x3; + cullit; + v[charcode]=currentpicture; + endchar; + enddef; + + def cutoff(expr t) = + x23 = vbar[t]; + fill (-penwd,-d-mb-penwd)--(x23-.6scpenwd,-d-mb-penwd)--(x23-.6scpenwd, + h+penwd)--(-penwd,h+penwd)--cycle withweight 2; + cull currentpicture keeping(2,2); + addto currentpicture also v[t]; + cull currentpicture keeping (2,2); + w := floor(x23-.6scpenwd); + enddef; + + def addpic(expr t) = + addto currentpicture also v[t]; + enddef; + + def frame = + pickup frame_pen; + z1 = (0,ht); z2 = (w,ht); + x3 = good.x w-brm; y3 = ht; z4 = (x3,0); + draw z1--z2; draw z3--z4; + enddef; + + def sqdot(expr p)= + x25:=floor(xpart p)+.5; + y25:=floor(ypart p)+.5; + dwd:=ceiling(thick); + if not odd dwd: dwd:= dwd+1; fi + fill unitsquare shifted -(.5,.5) rotated 45 scaled (.5sqrt2 * dwd) + shifted z25; + enddef; + + def low_n(expr nw,nh)= + y38 := good.y nh; x38 := x3; + y39 := y38 - .6penwd; x39 := nw; + filldraw fullcircle scaled 1.2penwd shifted(x39,y39); + z40 = (x39,y38); + draw z38--z40; + enddef; diff --git a/language/gurmukhi/singh/eg.gm b/language/gurmukhi/singh/eg.gm new file mode 100644 index 0000000000..d1bb2339c0 --- /dev/null +++ b/language/gurmukhi/singh/eg.gm @@ -0,0 +1,35 @@ +@punjabi +%________________________________________________________________________ +% +% This program is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation; either version 1, or (at your option) +% any later version. +% +% This program 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 General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program; if not, write to the Free Software +% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%________________________________________________________________________ +\input gmmacs +\hsize=6in + + +{\gm {\gmsmall iih pNktI `smAl' a~akharAM vi~ac li~akhI gaI hai ! }} + +{\gm {\gmnine iih pNktI `nAiin' a~akharAM vi~ac li~akhI gaI hai ! }} + +{\gm {\gmnormal iih pNktI `nArmal' a~akharAM vi~ac li~akhI gaI hai ! }} + +{\gm {\gmbig iih pNktI `big' a~akharAM vi~ac li~akhI gaI hai ! }} + +{\gm {\gmlarge iih pNktI `lArj' a~akharAM vi~ac li~akhI gaI hai ! }} + +{\gm {\gmhuge iih pNktI `hyUj' a~akharAM vi~ac li~akhI gaI hai ! }} + + +\bye diff --git a/language/gurmukhi/singh/env b/language/gurmukhi/singh/env new file mode 100644 index 0000000000..d7927f05c6 --- /dev/null +++ b/language/gurmukhi/singh/env @@ -0,0 +1,25 @@ +#________________________________________________________________________ +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 1, or (at your option) +# any later version. +# +# This program 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 General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#________________________________________________________________________ + +# environment variables for TeX and LaTeX + +set texbase = /home/abc/gurmukhi/lib/tex +setenv TEXINPUTS .:$texbase/macros: +setenv TEXFONTS :$texbase/tfm +setenv TEXPKS :$texbase/pk +setenv MFINPUTS :$texbase/mf +unset texbase diff --git a/language/gurmukhi/singh/gmchars.mf b/language/gurmukhi/singh/gmchars.mf new file mode 100644 index 0000000000..e336c9e452 --- /dev/null +++ b/language/gurmukhi/singh/gmchars.mf @@ -0,0 +1,1004 @@ +% GMCHARS.MF +% Metafont source file of the Gurmukhi font +% +% Author: Amarjit Singh +% E-mail: asingh@evolving.com +% +% This program is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation; either version 1, or (at your option) +% any later version. +% +% This program 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 General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program; if not, write to the Free Software +% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +% +%________________________________________________________________________ +beginchar(0,0,ht#,0); "sub-u"; +% 0x0 + pickup frame_pen; + x1=-1/2uwidth; y1=mb-(penwd+1/4uwidth); + z2=(1/4uwidth, y1); + draw z1{down}..tension4.0..z2; +endchar; +beginchar(1,0,ht#,0); "sub-U"; +% 0x1 + pickup frame_pen; + x1=-1/2uwidth; y1=mb-(penwd+1/4uwidth); + z2=(1/4uwidth, y1); + x3=x1; y3=mb-(penwd+3/5uwidth); + z4=(x2, y3); + draw z1{down}..tension4.0..z2; + draw z3{down}..tension4.0..z4; +endsav; +beginchar(3,.9twd#+brm#,1.5ht#,0); "sup-e"; +% 0x3 + pickup frame_pen; + z1=(w-brm,ht+1.5penwd); + z2=(0,1.5ht); + draw z1{curl.5}..{left}z2; +endchar; +beginchar(11,1.1twd#+brm#,ht#,0); ".g"; +% 0xb + italcorr brm#; path p; + z11=(.6(w-brm),.5penwd); + sqdot(z11); + frame; z5=(.25(w-brm),h); + z6=(x5,.3h); + z7=2/3[z5,z6]; + z8=z7 shifted (.1(w-brm),0); + z9= (1/2penwd,y6+.08h); + p = z5..z8{down}..z6{left}..z9{up}; + z10 = point 2.4 of p; + draw p..z10; +endchar; +beginchar(12,1.1twd#+brm#,ht#,0); ".kh"; +% 0xc + italcorr brm#; + tframe; path p; + z5=(1/2penwd,.55h); + z6=(x3,.55h); + z7=(0,h); + draw z5{dir-70}..tension.95..z6; + p = z5{right}..tension.95..z7; + draw p; + z12=(.65(w-brm),0); + sqdot(z12); + z8 = point .22 of p; + x9 = x3; y9 = y8; + pickup sub_pen; + draw z8--z9; +endchar; +beginchar(20,twd#,ht#,0); "period"; +% 0x14 + z1=(1/2w,1/2penwd); + sqdot(z1); +endchar; +beginchar(26,1.15twd#+rm#,ht#,0); "'n"; +% 0x1a + italcorr rm#+.5twd#; + pickup frame_pen; + z1=(0,h); z2=(w,h); + draw z1--z2; + lm := w-rm; + x3=good.x .25lm; y3=h; + z4=(x3,.68h); + z5=(lm,.47h); + z6=(.3lm,.1h); + z7=(3/2penwd,.23h); + draw z3--z4{right}..tension.9..{down}z5..tension.9..{left}z6..z7; + z8=(.6lm,-1/7h); + draw z7{right}..tension.8..z8; +endchar; +beginchar(27,1.07twd#+rm#,ht#,0); "front-o"; +% 0x1b + pickup frame_pen; + z1=(0,h); z2=(w,h); + lm:=w-rm; + z3=(.84lm,h); z4=(.4lm,.55h); + z5=(.64lm,y4); + z6=(x5,1/2penwd); + z7=(1/2penwd,h); + draw z1--z2; + draw z4--z5{right}..tension1.1..z3; + draw z5..z6{left}..{curl.4}z7; + + x8=.42lm+1/4penwd; y8=1.5h; + x9=lm; y9 = 1.6h; + draw z7{up}..z8..z9; + +% z8=(0,1.1h); +% z9=(w-.5rm+.6twd,1.8h); +% draw z7..z8..z9; +% +% curl over small e matra +% frame +% z5=(x3,1.35ht); +% z6=(w-.5rm+.6twd,1.35ht); +% x7=.3[x5,x6]; y7=1.5ht; +% draw z3--z5{up}..z7{right}..{curl0}z6; + +% very intersting curve +% x8 = good.x w-brm; y8 = 1.35h; +% z9=(w-.5rm+.6twd,2.35h); +% x10=0; y10=1.5h; +% z11=(0,h); +% draw z11..z10{left}..z9; + +% perfect curve but too big +% z8=(0,1.5h); +% z9=(w-.5rm+.6twd,2.35h); +% draw z7..z8..tension.95..z9; +endchar; + +beginchar(" ",0,1.5ht#,0); "candrabindu"; +% 0x20 + lm := .7twd; + z1=(.55lm,1.48ht); + sqdot(z1); + pickup sub_pen; + z5=(lm,1.5ht); + z6=(.66lm,1.25ht); + z7=(0,1.5ht); + draw z5..tension1.1..z6{left}..z7; +endchar; +beginchar(38,0,ht#,0); "/v"; +% 0x26 + path p; + pickup sub_pen; + z1 = (2/14uwidth,mb-penwd); + z2 = (-9/28uwidth,mb-(penwd+.18uwidth)); + z3 = (9/28uwidth,mb-(penwd+.36uwidth)); + p = z1{left}..tension1.2..z2{down}..tension1.1..{curl.2}z3; + draw p; + z4 = point 1.5 of p; + z5 = (-8/28uwidth,mb-(penwd+.57uwidth)); + z6 = (3/7uwidth,mb-(penwd+.68uwidth)); + draw z4..tension1.1..z5{down}..tension1.2..{curl.3}z6; +endchar; +beginchar("'",1.1twd#+rm#,ht#,0); "f"; +% 0x27 + italcorr rm#+.3twd#; + path p; + pickup frame_pen; + z1=(0,h); z2=(w,h); + draw z1--z2; + x3=good.x .85(w-rm); y3=h; + z4=(x3,.72h); + z5=(1/2penwd,.47h); + z6=(.7(w-rm),1/2penwd); + z7=(w-rm,.23h); + draw z3--z4; + p=z4{left}..tension.9..{down}z5..tension.9..{right}z6..{up}z7; + draw p..z6; + z12=(1/2penwd,0); + sqdot(z12); +endchar; +beginchar(")",1.1twd#+brm#,ht#,0); "z"; +% 0x29 + italcorr brm#; + frame; + x5=.25w; y5=.1h; + x6=x5; y6=good.y .65h; + x7=x3; y7=y6-penwd; + z8=(x6-penwd,y6-penwd); + draw z7--z8{up}..z6--z5; + z11=(.6(w-brm),.5penwd); + sqdot(z11); +endchar; +beginchar(",",0,ht#,0); "visarga"; +% 0x2c + z1=(0,1.45h); + sqdot(z1); +endchar; +beginchar(".",twd#,ht#,0); "|"; +% 0x2e + pickup frame_pen; + x1=good.x w; y1=0; z2=(x1,h); draw z1--z2; +endchar; +beginchar("0",.5ht#+rm#,ht#,0); "0"; +% 0x30 + pickup frame_pen; z1 =(1/4h+1/2penwd,1/2h); + draw fullcircle scaled 1/2h shifted z1; +endchar; +beginchar("1",5/8twd#+rm#,ht#,0); "1"; +% 0x31 + pickup frame_pen; path p; + z1=(3/2penwd,.33h); + z2=(w-rm,0); + z3=(x2-.75penwd,-.07h); + z4=(w-rm,.75h); + z5=(.6(w-rm),h); + z6=(3/2penwd,.8h); + draw z1--z2; + draw z2--z3; + p=z1{curl0}..tension1.2..z4{up}..z5{left}; + z7=point .8 of p; + draw p..z6{down}..tension1.1..z7; +endchar; +beginchar("2",twd#+rm#,ht#,0); "2"; +% 0x32 + pickup frame_pen; + z1=(1/2penwd,.9h); + z2=(w-rm,.7h); + z3=(.25(w-rm),.35h); + z4=(x3,.45h); + z5=(w-rm,0); + draw z1{curl0}..tension1.1..z2{down}..z3{left}..z4..tension2..{curl0}z5; +endchar; +beginchar("3",.85twd#+rm#,ht#,0); "3"; +% 0x33 + pickup frame_pen; + z1=(1/2penwd,.95h); + z2=(.95(w-rm),.82h); + z3=(.65(w-rm),.65h); + z4=(.2(w-rm),.65h); + z5=(w-rm,.4h); + z6=(.3(w-rm),.2h); + z7=(x6,.3h); + z8=(w-rm,0); + draw z1{right}..tension1.1..z2{down}..{left}z3..tension1.2..{curl0}z4; + draw z3..z5{down}..z6{left}..z7..tension2..{curl0}z8; +endchar; +beginchar("4",4/3twd#+rm#,ht#,0); "4"; +% 0x34 + pickup frame_pen; + z1=(1/2penwd,h); + z2=(w-rm,h); + z3=(1/2(w-rm),.2h); + z4=(1/2(w-rm),.64h); + draw z1..z4..tension.9..z3{left}..tension.9..z4..z2; +endchar; +beginchar("5",1.1twd#+rm#,ht#,0); "5"; +% 0x35 + italcorr brm#; + pickup frame_pen; + z3=(.8(w-rm),h); z4=(x3,0); + draw z3--z4; + z5=(1/2penwd,.55h); + z6=(x3,.55h); + z7=(.3x3,h); + draw z5{dir-70}..tension.95..z6; + draw z5{right}..tension.95..z7; +endchar; +beginchar("6",.85twd#+rm#,ht#,0); "6"; +% 0x36 + pickup frame_pen; + lm:=w-.5rm; + z1=(.85lm,1/2penwd); + z2=(1/2penwd,.22h); + z3=(.35lm,.4h); + z4=(.8lm,.4h); + z5=(1/2penwd,.65h); + z6=(.7lm,.85h); + z7=(x6,.75h); + z8=(x6,1.2h); + draw z1{left}..tension1.1..z2{up}..{right}z3..tension1.2..{curl0}z4; + draw z3..z5{up}..z6{right}..z7{left}..{right}z8; +endchar; +beginchar("7",twd#+rm#,ht#,0); "7"; +% 0x37 + pickup frame_pen; + lm:=w-rm; + z1 = (.5lm,.8h); + z2 = (lm,.8h); + z3 = (1/2penwd, penwd); + draw z1{up}...{down}z2{down}..z3; +endchar; +beginchar("8",1.15twd#+rm#,ht#,0); "8"; +% 0x38 + italcorr rm#+.5twd#; + pickup frame_pen; path p; + lm := w-rm; + z4=(.9lm,.66h); + z7=(.25w, .6h); + x5=x7-3/4penwd; y5 = y4; + x6=x7; y6=y4+3/4penwd; + z8=(lm,.1h); + draw z4--z5{up}..z6--z7; + draw z7{down}..tension.95..z8; +endchar; +beginchar("9",1.15twd#+rm#,ht#,0); "9"; +% 0x39 + italcorr rm#+.5twd#; + pickup frame_pen; path p; + lm := w-rm; + z1=(.8lm,.7h); + z2=(.8lm,h); + draw z1{left}..{right}z2; + z4=(.9lm,.66h); + z7=(.25w, .6h); + x5=x7-3/4penwd; y5 = y4; + x6=x7; y6=y4+3/4penwd; + z8=(lm,.1h); + draw z4--z5{up}..z6--z7; + draw z7{down}..tension.95..z8; +endchar; +beginchar(":",1.07twd#+rm#,ht#,0); "OM"; +% 0x3a + pickup frame_pen; + lm:=w-rm; + z1=(0,h); z2=(lm,h); + z3=(.84lm,h); z4=(.4lm,.55h); + z5=(.64lm,y4); + z6=(x5,1/2penwd); + z7=(1/2penwd,h); + draw z1--z2; + draw z4--z5{right}..tension1.1..z3; + draw z5..z6{left}..{curl.4}z7; + + x8=.52lm+1/4penwd; y8=1.26h; + draw z7{up}..z8; + z9=(w,1.5h); + draw z8{up}..z9; +endchar; +beginchar(";",1.2twd#,ht#,0); "||"; +% 0x3b + pickup frame_pen; + x1=good.x w-2.5penwd; y1=0; + z2=(x1,h); + x3=good.x w; y3=0; + z4=(x3,h); + draw z1--z2; draw z3--z4; +endchar; +beginchar("A",2rm#,ht#,0); "A"; +% 0x41 + pickup frame_pen; + z1=(0,h); z2=(w,h); + x3=good.x w-brm; y3=h; z4=(x3,.4h); + draw z1--z2; draw z3--z4; +endchar; +beginchar("B",1.07twd#+rm#,ht#,0); "B"; +% 0x42 + pickup frame_pen; + z1=(0,h); z2=(w,h); + lm:=w-rm; + z3=(.84lm,h); + z4=(rm,.4h); + z5=(rm,.7h); + z6=(.84lm,.35h); + z7=(1/2penwd,.2h); + draw z1--z2; + draw z3{down}..tension1.3..{left}z4{left}..z5; + draw z5{right}..z6{down}..tension1.5..{up}z7; +endchar; +beginchar("C",1.25twd#+rm#+penwd#,ht#,-.1ht#); "C"; +% 0x43 + italcorr rm#+.5twd#; + pickup frame_pen; + z1=(0,h); z2=(w,h); + x3=good.x w-rm-penwd; y3=h; + z4=(x3,.74h); z5=(.2twd+1/2penwd,.6h); + z6=(x3+1/2penwd,.37h); +% z7=(1/2(.25twd+x3),1/7h); + z7=(1/2(.25twd+x3),1/2penwd); + z8=(.15w,.45h); + draw z1--z2; draw z3--z4; + draw z4{left}..z5{down}..z6{down}..z7{left}..z8{right}..tension.95..z7; +endsav; +beginchar("D",1.1twd#+brm#,ht#,0); "dh"; +% 0x44 + italcorr brm#; + frame; + z5=(1/2penwd,.55h); + z6=(x3,.55h); + z7=(.3x3,h); + draw z5{dir-70}..tension.95..z6; + draw z5{right}..tension.95..z7; +endchar; +beginchar("E",1.6rm#,1.5ht#,0); "i"; +% 0x45 + pickup frame_pen; + z1 = (0,ht); z2 = (w,ht); + x3 = good.x w-rm; y3 = ht; z4 = (x3,0); + draw z1--z2; draw z3--z4; + z5=(x3,1.35ht); + z6=(w-.5rm+.6twd,1.35ht); + x7=.3[x5,x6]; y7=1.5ht; + draw z3--z5{up}..z7{right}..{curl0}z6; +endchar; +beginchar("F",2rm#,1.5ht#,0); "I"; +% 0x46 + frame; z5=(-1.5rm-penwd,1.25ht); + z6=(1/2x5,1.5ht); + draw z3{curl0}..{left}z6...z5; +endchar; +beginchar("G",1.45twd#+brm#,ht#,0); "gh"; +% 0x47 + italcorr brm#; + tframe; path p; + z5=(1/2penwd,.55h); + z7=(0,h); + draw z5{right}..tension.95..z7; + x6 = .6[x5,x3]; y6=.25h; + draw z5{dir-70}..tension.95..z6; + x8 = x6; y8=.75h; + draw z6--z8; + z9=(x3-1/2penwd, .35h); + draw z6{dir-40}..tension.95..z9; +endchar; +beginchar("H",0,ht#,.25ht#); "/h"; +% 0x48 + pickup sub_pen; + z1=(.1twd,mb-1/2penwd); + z2=(.1twd,mb-.54h); + z3=(-.35twd,mb-.35h); + draw z1--z2; + draw z2{left}..z3; +endchar; +beginchar("J",1.15twd#+rm#,ht#,0); "J"; +% 0x4a + italcorr rm#+.5twd#; + pickup frame_pen; + z1=(0,h); z2=(w,h); + draw z1--z2; + lm := w-rm; + z11 = (lm, h); z12 = (.1lm, .65h); + draw z11{down}..tension1.5..z12; + x3=good.x .45lm; y3=h; + z4=(x3,.68h); + z5=(lm,.47h); + z6=(.3lm,.1h); + z7=(penwd,.23h); + draw z3{left}..z4{right}..tension.9..{down}z5..tension.9..{left}z6..z7; + z8=(.5lm,-1/7h); + draw z7{right}..tension.8..z8; +endchar; +beginchar("K",1.1twd#+brm#,ht#,0); "kh"; +% 0x4b + italcorr brm#; + tframe; path p; + z5=(1/2penwd,.55h); + z6=(x3,.55h); + z7=(0,h); + draw z5{dir-70}..tension.95..z6; + p = z5{right}..tension.95..z7; + draw p; + z8 = point .22 of p; + x9 = x3; y9 = y8; + pickup sub_pen; + draw z8--z9; +endchar; +beginchar("O",0,1ht#,0); "O"; +% 0x4f + pickup frame_pen; + path p; + z1=(-1.1twd,1.5h); + z3=(x1+.9twd-.1brm,h+penwd); + x2 = .4 [x1,x3]; y2 = 1.3h; + p = z1{down}..z2..{down}z3; + draw p; + z4=point .95 of p; + z5=(x4, h); + draw z4--z5; +endchar; +beginchar("P",1.1twd#+rm#,ht#,0); "ph"; +% 0x50 + italcorr rm#+.3twd#; + path p; + pickup frame_pen; + z1=(0,h); z2=(w,h); + draw z1--z2; + x3=good.x .85(w-rm); y3=h; + z4=(x3,.72h); + z5=(1/2penwd,.47h); + z6=(.7(w-rm),1/2penwd); + z7=(w-rm,.23h); + draw z3--z4; + p=z4{left}..tension.9..{down}z5..tension.9..{right}z6..{up}z7; + draw p..z6; +endchar; +beginchar("R",1.15twd#+rm#,ht#,.4ht#); "gn"; +% 0x52 + italcorr rm#+.5twd#; path p; + pickup frame_pen; + z1=(0,h); z2=(w,h); + draw z1--z2; + lm := w-rm; + x3 = good.x .7lm; y3=h; + z4 = (x3,.72h); + z6 = (.55lm,.4h); + z7 = (.8lm,.45h); + draw z3--z4; + vardef dwn(expr y) = xpart direction 1 of (z4{curl0}..tension1.1.. + (1/2penwd,y)..z6{right}..{curl0}z7) < 0 enddef; + z55 = (1/2penwd,solve dwn(y4,y6)); + z8 = (x7, y6); + p = z4{curl0}..tension1.1..z55..z6{right}..{curl0}z7; + draw p; + z9 = p intersectionpoint ((.25lm,.65h)--(.25lm,0)); + z10 = (x7,penwd); + draw z9{down}..tension.95..z10; + z56 = point .2 of p; + draw p; +% pickup penrazor scaled subthick; + draw (1/2penwd,h)--(x56,y56-1/2penwd); +endchar; +beginchar("T",1.1twd#+brm#,ht#,0); "th"; +% 0x54 + italcorr brm#; + frame; path p; + z5=(1/2penwd,.55h); + z6=(x3,.55h); + z7=(0,h); + draw z5{dir-70}..tension.95..z6; + p = z5{right}..tension.95..z7; + draw p; + z8 = point .22 of p; + x9 = x3; y9 = y8; + pickup sub_pen; + draw z8--z9; +endchar; +beginchar("V",1.15twd#+rm#,ht#,0); ".t"; +% 0x56 + italcorr rm#+.5twd#; + pickup frame_pen; + z1=(0,h); z2=(w,h); + draw z1--z2; + lm := w-rm; + x3=good.x .7lm; y3=h; + z4=(x3,.66h); + z6=(.55lm,.1h); + z7=(lm,.2h); + draw z3--z4; + vardef dwn(expr y) = xpart direction 1 of (z4{curl0}..(1/2penwd,y) + ..z6{right}..{curl0}z7) < 0 enddef; + z55=(1/2penwd,solve dwn(y4,y6)); + draw z4{curl0}..z55..z6{right}..{curl0}z7; +endchar; +beginchar("W",1.15twd#+rm#,ht#,0); ".th"; +% 0x57 + italcorr rm#+.5twd#; + pickup frame_pen; + z1=(0,h); z2=(w,h); + draw z1--z2; + lm:= w-rm; + x3=good.x .75lm; y3=h; + z4=(x3,.66h); + z6=(.55lm,.1h); + z7=(lm,y5); + z8=(x4+penwd,y4-penwd); + draw z3--z4; + vardef dwn(expr y) = xpart direction 1 of (z4{curl0}..(1/2penwd,y) + ..{right}z6) < 0 enddef; + z5 = (1/2penwd,solve dwn(y4,y6)); + draw z4{curl0}..z5..z6{right}..z7{up}..{curl0}z8; +endchar; +beginchar("X",1.07twd#+rm#,ht#,0); ".d"; +% 0x58 + pickup frame_pen; path p; + z1=(0,h); z2=(w,h); + lm:=w-rm; + z3=(.84lm,h); + z4=(.3lm,.65h); + z5=(.64lm,y4); + z6=(.84lm,.2h); + z7=(.24lm,1/2penwd); + draw z1--z2; + draw z4--z5{right}..tension1.1..z3; + p = z5..tension1.1..z6{down}..tension1.8..z7; + z8=(x7,.32h); + z9=point .97 of p; + draw p{left}..z8{right}..z9; +endchar; +beginchar("Y",1.15twd#+rm#,ht#,0); ".dh"; +% 0x59 + italcorr rm#+.5twd#; + pickup frame_pen; path p; + z1=(0,h); z2=(w,h); + draw z1--z2; + lm := w-rm; + x3=good.x .9lm; y3=h; + z4=(x3,.66h); + z7=(.25w, .6h); + x5=x7-3/4penwd; y5 = y4; + x6=x7; y6=y4+3/4penwd; + z8=(.8lm,1/2penwd); + z9=(lm,.23h); + draw z3--z4; + draw z4--z5{up}..z6--z7; + p = z7{down}..tension.9..{right}z8..{up}z9; + draw p..z8; +endchar; +beginchar("Z",1.15twd#+rm#,ht#,.4ht#); ".n"; +% 0x5a + italcorr rm#+.5twd#; path p; + pickup frame_pen; + z1=(0,h); z2=(w,h); + draw z1--z2; + lm := w-rm; + x3 = good.x .7lm; y3=h; + z4 = (.3lm, h); z5 = (lm, .7h); + p = z4{down}..tension2.5..z5; + draw p; + z8 = p intersectionpoint ((x3,h)--(x3,.5h)); + hdif := y3-y8; + z9 = (x8,.72h-hdif); + z11 = (.55lm,.3h-hdif); + z12 = (lm,.4h-hdif); + vardef dwn(expr y) = xpart direction 1 of (z9{curl0}..tension1.1.. + (1/2penwd,y)..z11{right}..{curl0}z12) < 0 enddef; + z55 = (1/2penwd,solve dwn(y9,y11)); + draw z8--z9; + draw z9{curl0}..tension1.1..z55..z11{right}..{curl0}z12; +endchar; +beginchar("\",0,ht#,0); "anusvara"; +% 0x5c + pickup frame_pen; + z1=(0,1.25h); + draw (reverse halfcircle rotated 0 scaled 2usthick shifted z1); +endchar; +beginchar("^",0,ht#,.25ht#); "virama"; +% 0x5e + pickup frame_pen; + z1=(1.35rm,mb-.5h); + z2=(0,mb-.3h); + draw z1..{left}z2; +endchar; +beginchar("_",0,1.5ht#,0); "adhak"; +% 0x5f + pickup sub_pen; + lm := .7twd; + z5=(lm,1.5ht); + z6=(.66lm,1.25ht); + z7=(0,1.5ht); + draw z5..tension1.1..z6{left}..z7; +endchar; +beginchar("a",1.45twd#+brm#,ht#,0); "front-a"; +% 0x61 + italcorr brm#; + path p; path q; + tframe; + pickup frame_pen; + z5=(1/2penwd,h); + z6=(.2w,.3h); + z7=2/3[z5,z6]; + z8=z7 shifted (.08w,0); + z9= (.1w,y6+.1h); + p = z5..z8{down}..z6{left}..z9{up}; + offs=.2w+.1w; + z15=(offs+1/2penwd,.8h); + z16=(offs+.1w,.1h); + z17=2/3[z15,z16]; + z18=z7 shifted (offs+.08w,0); + z19= (offs+.1w,y16+.1h); + q = z15..z18{down}..z16{left}..z19{up}; + z21=(x3,.9h); + draw p..z15..q..z21; +endchar; +beginchar("b",1.1twd#+brm#,ht#,0); "b"; +% 0x62 + italcorr brm#; + frame; + path p; + z5=(x3,.5h); + z6=(.65x3,.65h); + z10=(.18x3,.5h); + p=z5{curl0}..z10{up}...{right}z6; + draw p; + z7= point 1.7 of p; + z8=(.26x3,h); + vardef yup(expr y)= xpart direction 1 of (z7{curl0}..(1/2penwd,y)..{right}z +8) < 0 + enddef; + z9=(1/2penwd,solve yup(y7,y8)); + draw z7{curl0}..z9..{right}z8; +endchar; +beginchar("c",1.15twd#+rm#,ht#,0); "c"; +% 0x63 + italcorr rm#+.5twd#; + pickup frame_pen; path p; + z1=(0,h); z2=(w,h); + draw z1--z2; + lm := w-rm; + x3=good.x .9lm; y3=h; + z4=(x3,.66h); + z7=(.25w, .6h); + x5=x7-3/4penwd; y5 = y4; + x6=x7; y6=y4+3/4penwd; + z8=(.8lm,1/2penwd); + draw z3--z4; + draw z4--z5{up}..z6--z7; + p = z7{down}..tension.9..{right}z8; + draw p{dir-20}..tension5.5..z4; +endchar; +beginchar("d",1.15twd#+rm#,ht#,0); "d"; +% 0x64 + italcorr rm#+.5twd#; + pickup frame_pen; path p; + z1=(0,h); z2=(w,h); + draw z1--z2; + lm := w-rm; + x3=good.x .9lm; y3=h; + z4=(x3,.66h); + z7=(.25w, .6h); + x5=x7-3/4penwd; y5 = y4; + x6=x7; y6=y4+3/4penwd; + z8=(lm,.1h); + draw z3--z4; + draw z4--z5{up}..z6--z7; + draw z7{down}..tension.95..z8; +endchar; +beginchar("f",1.1twd#+brm#,ht#,0); "sh"; +% 0x66 + italcorr brm#; + frame; x5=good.x 3/2penwd; y5=h; + z6=(x5,y7-penwd); + y7=good.y .35h+penwd; x7=x3; + z8=(x6-1/2penwd,y6+1/2penwd); + draw z5--z6; + draw (reverse halfcircle rotated rot scaled usthick shifted z8)--z7; + z11=(.6(w-brm),.5penwd); + sqdot(z11); +endchar; +beginchar("g",1.1twd#+brm#,ht#,0); "g"; +% 0x67 + italcorr brm#; path p; + frame; z5=(.25(w-brm),h); + z6=(x5,.3h); + z7=2/3[z5,z6]; + z8=z7 shifted (.1(w-brm),0); + z9= (1/2penwd,y6+.08h); + p = z5..z8{down}..z6{left}..z9{up}; + z10 = point 2.4 of p; + draw p..z10; +endchar; +beginchar("h",1.1twd#+.5rm#,ht#,0); "h"; +% 0x68 + pickup frame_pen; + z1 = (0,h); z2 = (w,h); + z5=(.55w,h); + z6=(x5,.2h); + z7= (.1w,.45h); + draw z1--z2; + draw z5--z6{down}..tension1.5..z7; +endchar; +beginchar("i",1.15twd#+rm#,ht#,0); "front-i"; +% 0x69 + italcorr rm#+.5twd#; + pickup frame_pen; path p; + z1=(0,h); z2=(w,h); + draw z1--z2; + lm := w-rm; + x3=good.x .7lm; y3=h; + z4=(x3,.66h); + z6=(.55lm,.1h); + z7=(lm,.2h); + draw z3--z4; + vardef dwn(expr y) = xpart direction 1 of (z4{curl0}..(1/2penwd,y) + ..z6{right}..{curl0}z7) < 0 enddef; + z55=(1/2penwd,solve dwn(y4,y6)); + p = z4{curl0}..z55..z6{right}..{curl0}z7; + z56 = point .2 of p; + draw p; + pickup penrazor scaled subthick; + draw (1/2penwd,h)--(x56,y56-1/2penwd); +endchar; +beginchar("j",1.1twd#+brm#,ht#,0); "j"; +% 0x6a + italcorr brm#; + frame; + x5=.25w; y5=.1h; + x6=x5; y6=good.y .65h; + x7=x3; y7=y6-penwd; + z8=(x6-penwd,y6-penwd); + draw z7--z8{up}..z6--z5; +endchar; +beginchar("k",.8twd#+1.5rm#,ht#,0); "k"; +% 0x6b + italcorr 1.5rm#; + path p; + z1=(0,h); z2=(w,h); + pickup frame_pen; + draw z1--z2; + z3=(w-rm,h); + z4=(rm,.35h); + z5=(rm,.65h); + z6=(w-rm,0); + draw z3{curl0}..tension1.1..{left}z4{left}..z5; + pickup penrazor scaled subthick; + draw z5--z6; +endsav; +beginchar("l",1.25twd#+rm#,ht#,0); "l"; +% 0x6c + path p; path q; + lm := (w-rm); + z3=(.5lm, .5h); + pickup penrazor scaled subthick; + p = (.2lm,h)--z3; + q = (.8lm,h)--z3; + draw p; draw q; + pickup frame_pen; + z1=(0,h); z2=(w,h); + draw z1--z2; + z6 = point .7 of p; + z7 = point .7 of q; + z4 = (.15lm, 1/2penwd); + z5 = (.85lm, 1/2penwd); + draw z6{left}..z4; + draw z7{right}..z5; +endchar; +beginchar("m",1.1twd#+brm#,ht#,0); "m"; +% 0x6d + italcorr brm#; + tframe; + z5=(0,h); + z6=(3/2penwd+.1twd,.76h); + z7=(3/2penwd+.1twd,.34h); + z8=(x3,y7+penwd); + z9=(x7-1/2penwd,y7+1/2penwd); + draw z5{right}..tension.95..z6---z7; + draw (reverse halfcircle rotated rot scaled usthick shifted z9)--z8; +endchar; +beginchar("n",1.25twd#+rm#,ht#,0); "n"; +% 0x6e + path p; path q; + lm := (w-rm); + pickup frame_pen; + z1=(0,h); z2=(w,h); + draw z1--z2; + z3=(.5lm, h); + z4 = (.15lm, 1/2penwd); + z5 = (.85lm, 1/2penwd); + z6=(.5lm, .7h); + draw z4{up}..z6..{down}z5{left}; + draw z4{right}; + draw z3--z6; +endchar; +beginchar("o",0,1ht#,0); "o"; +% 0x6f + pickup frame_pen; + z1=(-1.1twd,1.5h); + z3=(x1+.9twd-.1brm,h+penwd); + x2 = .4 [x1,x3]; y2 = 1.3h; + draw z1{down}..z2..{down}z3; +endchar; +beginchar("p",1.1twd#+brm#,ht#,0); "p"; +% 0x70 + italcorr brm#; + tframe; + z5=(1/2penwd,.55h); + z6=(x3,.55h); + z7=(.3x3,h); + draw z5{dir-70}..tension.95..z6; + draw z5{right}..tension.95..z7; +endchar; +beginchar("r",1.1twd#+.5rm#,ht#,0); "r"; +% 0x72 + pickup frame_pen; + z1 = (0,h); z2 = (w,h); + z5=(.55w,h); + z6=(x5,.2h); + z7= (.15w,.45h); + z8= (x5,y7); + draw z1--z2; + draw z5--z6{down}..tension1.5..z7{dir10}..tension1.5..z8; +endchar; +beginchar("s",1.1twd#+brm#,ht#,0); "s"; +% 0x73 + italcorr brm#; + frame; x5=good.x 3/2penwd; y5=h; + z6=(x5,y7-penwd); + y7=good.y .35h+penwd; x7=x3; + z8=(x6-1/2penwd,y6+1/2penwd); + draw z5--z6; + draw (reverse halfcircle rotated rot scaled usthick shifted z8)--z7; +endchar; +beginchar("t",1.07twd#+rm#,ht#,0); "t"; +% 0x74 + pickup frame_pen; + z1=(0,h); z2=(w,h); + lm:=w-rm; + z3=(.84lm,h); z4=(.4lm,.55h); + z5=(.64lm,y4); + z6=(x5,1/2penwd); + z7=(1/2penwd,.2h); + draw z1--z2; + draw z4--z5{right}..tension1.1..z3; + draw z5..z6{left}..{curl.4}z7; +endchar; +beginchar("u",1.07twd#+rm#,ht#,0); "front-u"; +% 0x75 + pickup frame_pen; + z1=(0,h); z2=(w,h); + lm:=w-rm; + z3=(.84lm,h); z4=(.4lm,.55h); + z5=(.64lm,y4); + z6=(x5,1/2penwd); + z7=(1/2penwd,h); + x8=.42lm+1/4penwd; y8=1.5h; + draw z1--z2; + draw z4--z5{right}..tension1.1..z3; + draw z5..z6{left}..{curl.4}z7; + draw z7{up}..z8..z3; +endchar; +beginchar("v",1.15twd#+rm#,ht#,.4ht#); "v"; +% 0x76 + italcorr rm#+.5twd#; path p; + pickup frame_pen; + z1=(0,h); z2=(w,h); + draw z1--z2; + lm := w-rm; + x3 = good.x .7lm; y3=h; + z4 = (x3,.72h); + z6 = (.55lm,.4h); + z7 = (.8lm,.45h); + draw z3--z4; + vardef dwn(expr y) = xpart direction 1 of (z4{curl0}..tension1.1.. + (1/2penwd,y)..z6{right}..{curl0}z7) < 0 enddef; + z55 = (1/2penwd,solve dwn(y4,y6)); + z8 = (x7, y6); + p = z4{curl0}..tension1.1..z55..z6{right}..{curl0}z7; + draw p; + z9 = p intersectionpoint ((.25lm,.65h)--(.25lm,0)); + z10 = (x7,penwd); + draw z9{down}..tension.95..z10; +endchar; +beginchar("w",1.07twd#+rm#,ht#,0); "R"; +% 0x77 + pickup frame_pen; path p; + z1=(0,h); z2=(w,h); + lm:=w-rm; + z3=(.84lm,h); + z4=(.3lm,.65h); + z5=(.64lm,y4); + draw z1--z2; + draw z4--z5{right}..tension1.1..z3; + z6=(lm,.47h); + z7=(.3lm,.1h); + z8=(penwd,.23h); + z9=(.5lm,-1/7h); + p = z5..{down}z6..tension.9..{left}z7..z8; + draw p; + draw z8{right}..tension.8..z9; +% z10=point .97 of p; + z10=(.7lm,.1h); + z11=(.84lm,y9); + draw z10..z11; +endchar; +beginchar("y",1.45twd#+brm#,ht#,0); "y"; +% 0x79 + italcorr brm#; + frame; path p; + z5=(1/2penwd,.55h); + z7=(0,h); + draw z5{right}..tension.95..z7; + x6 = .6[x5,x3]; y6=.25h; + p = z5{dir-70}..tension.95..z6; + x8 = x6; y8=.6h; + x9 = x3; y9 = y8; + draw p--(x6,y8) ; + draw z8--z9; +endchar; +beginchar("{",.9twd#+brm#,1.5ht#,0); "sup-ai"; +% 0x7b + pickup frame_pen; + z1=(w-brm,ht+1.5penwd); + z2=(0,1.35ht); + z3=(penwd,1.55ht); + draw z1{curl.5}..{left}z2; + draw z1{curl.5}..{left}z3; +endchar; +beginchar("}",0,ht#,0); "r-stroke"; +% 0x7d + pickup sub_pen; + z1= (0,mb-(penwd+3/8uwidth)); + lft z2= (-1/2uwidth,mb-(penwd+1/8uwidth)); + z3= (0,mb-penwd); + z4= (1/2uwidth,mb-(penwd+1/2uwidth)); + draw z1..tension1.2..z2..z3..{curl0}z4; +endsav; +beginchar(127,.5ht#+2rm#,ht#,0); "abbrev"; +% 0x7f + pickup sub_pen; + z1=(1/2w,.8h-1/2penwd); + draw fullcircle scaled .4h shifted z1; +endchar; +ligtable "." : "." =: ";"; +end. + diff --git a/language/gurmukhi/singh/gmmacs.tex b/language/gurmukhi/singh/gmmacs.tex new file mode 100644 index 0000000000..64594408c2 --- /dev/null +++ b/language/gurmukhi/singh/gmmacs.tex @@ -0,0 +1,107 @@ +% DNMACS.TEX +% TeX macros for the use of Devanagari fonts +% +% Copyright (C) 1991 University of Groningen, The Netherlands +% +% Author: Frans J. Velthuis +% Internet: velthuis@rc.rug.nl +% Bitnet: velthuis@hgrrug5 +% +% This program is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation; either version 1, or (at your option) +% any later version. +% +% This program 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 General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program; if not, write to the Free Software +% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +% +\font\smallgm=grmk8 +\font\ninegm=grmk9 +\font\grmk=grmk10 +\font\halfgm=grmk10 scaled\magstephalf +\font\biggm=grmk10 scaled\magstep1 +\font\largegm=grmk10 scaled\magstep2 +\font\hugegm=grmk10 scaled\magstep3 +\hyphenchar\smallgm=-1 +\hyphenchar\ninegm=-1 +\hyphenchar\grmk=-1 +\hyphenchar\halfgm=-1 +\hyphenchar\biggm=-1 +\hyphenchar\largegm=-1 +\hyphenchar\hugegm=-1 +\font\smallcr=cmr8 +\font\ninecr=cmr9 +\font\halfcr=cmr10 scaled\magstephalf +\font\bigcr=cmr10 scaled\magstep1 +\font\largecr=cmr10 scaled\magstep2 +\font\hugecr=cmr10 scaled\magstep3 +\let\rsize=\rm +\newcount\chnum +\newdimen\itdim +\newdimen\gmblskip +\newif\ifgmmode +\chnum=0 +\loop\catcode\chnum=11 +\ifnum\chnum<12\advance\chnum by1 +\repeat +\chnum=14 +\loop\catcode\chnum=11 +\ifnum\chnum<31\advance\chnum by1 +\repeat +\catcode127=11 +\def\subscr#1{\/\itdim=\lastkern +\unkern\kern-\itdim \lower\dp0 \hbox to\itdim{#1\hfil}} +\def\gmsmall{\let\pgm=\smallgm\let\rsize=\smallcr% +\gmblskip=12pt\ifgmmode\gm\fi} +\def\gmnine{\let\pgm=\ninegm\let\rsize=\ninecr% +\gmblskip=13pt\ifgmmode\gm\fi} +\def\gmnormal{\let\pgm=\grmk\let\rsize=\rm% +\gmblskip=15pt\ifgmmode\gm\fi} +\def\gmhalf{\let\pgm=\halfgm\let\rsize=\halfcr% +\gmblskip=16pt\ifgmmode\gm\fi} +\def\gmbig{\let\pgm=\biggm\let\rsize=\bigcr% +\gmblskip=18pt\ifgmmode\gm\fi} +\def\gmlarge{\let\pgm=\largegm\let\rsize=\largecr% +\gmblskip=22pt\ifgmmode\gm\fi} +\def\gmhuge{\let\pgm=\hugegm\let\rsize=\hugecr% +\gmblskip=26pt\ifgmmode\gm\fi} +\def\gm{\gmmodetrue\pgm\baselineskip=\gmblskip +\tolerance=10000 +\pretolerance=10000} +\def\0{\llap{\char13}} +\def\1{\llap{\char32}} +\def\2{\llap{\char92}} +\def\3#1w{{\char"#1}} +\def\4{\llap{\char123}} +\def\5{\llap{\char125}} +\def\6#1{\setbox0=\hbox{#1}#1\subscr{\char126}} +\def\7#1{\setbox0=\hbox{#1}#1\subscr{\char0}} +\def\8#1{\setbox0=\hbox{#1}#1\subscr{\char1}} +\def\9#1{\setbox0=\hbox{#1}#1\subscr{\char2}} +\def\qa#1#2{\setbox0=\hbox{#1}#1\subscr{\char253\kern1.5ex\lower1.25ex +\hbox{\char#2}\kern-1.5ex}} +\def\qb#1{\setbox0=\hbox{#1}#1\subscr{\char253}} +\def\qq#1{\setbox0=\hbox{#1}#1\subscr{\char94}} +\def\qx#1{\setbox0=\hbox{#1}#1\subscr{\char14}} +\def\qy#1{\setbox0=\hbox{#1}#1\subscr{\char31}} +\def\qz#1{\setbox0=\hbox{#1}#1\subscr{\char124}} +\def\qva{\kern0.5ex\2\kern-0.5ex} +\def\qvb{\kern1ex\0\kern-1ex} +\def\qvc{\kern1ex\rdt\kern-1ex} +\def\?{\llap{\char3}} +\def\<{\llap{\char4}} +\def\rs{\rsize\thinspace} +\let\re=\thinspace +\def\rdt{\llap{\char19}} +\def\gmnum{\let\nstyle=d} +\def\cmnum{\let\nstyle=r} +\cmnum +\def\rn#1{\if\nstyle r{\rsize #1}\else#1\fi} +\let\pgm=\grmk +\gmblskip=15pt diff --git a/language/gurmukhi/singh/grmk10.mf b/language/gurmukhi/singh/grmk10.mf new file mode 100644 index 0000000000..7e9333d54e --- /dev/null +++ b/language/gurmukhi/singh/grmk10.mf @@ -0,0 +1,24 @@ +mode_setup; + ht# := 2mm#; rm# := 0.6mm#; brm# := 0.9mm#; twd# := 1.4mm#; + uwidth# := twd#; + define_pixels(rm,twd,uwidth,brm); + define_whole_pixels(ht); + rot = 135; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% the following parameters determine the line-thicknes. +% the line-thicknes varies between thin# and thick#, depending on the +% angle between the pen and the direction of writing. +% for strokes in subscripts it varies between subthick# and thin#. + thick# := 1.1pt#; thin# := 0.2pt#; + subthick# := .8pt#; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + font_size 10pt#; + font_quad 1.5twd#+rm#; + font_x_height .7rm#; + font_normal_space:=1.2twd#; + font_normal_stretch:=.6twd#; + font_normal_shrink:=.4twd#; + font_identifier:="GRMK10"; +\input defs +\input gmchars + diff --git a/language/gurmukhi/singh/grmk10.tfm b/language/gurmukhi/singh/grmk10.tfm Binary files differnew file mode 100644 index 0000000000..04cf731b43 --- /dev/null +++ b/language/gurmukhi/singh/grmk10.tfm diff --git a/language/gurmukhi/singh/grmk12.mf b/language/gurmukhi/singh/grmk12.mf new file mode 100644 index 0000000000..1cd914cf88 --- /dev/null +++ b/language/gurmukhi/singh/grmk12.mf @@ -0,0 +1,24 @@ +mode_setup; + ht# := 2.4mm#; rm# := 0.72mm#; brm# := 1.08mm#; twd# := 1.75mm#; + uwidth# := twd#; + define_pixels(rm,twd,uwidth,brm); + define_whole_pixels(ht); + rot = 135; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% the following parameters determine the line-thicknes. +% the line-thicknes varies between thin# and thick#, depending on the +% angle between the pen and the direction of writing. +% for strokes in subscripts it varies between subthick# and thin#. + thick# := 1.3pt#; thin# := 0.2pt#; + subthick# := .9pt#; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + font_size 12pt#; + font_quad 1.5twd#+rm#; + font_x_height .7rm#; + font_normal_space:=1.2twd#; + font_normal_stretch:=.6twd#; + font_normal_shrink:=.4twd#; + font_identifier:="GRMK12"; +\input defs +\input gmchars + diff --git a/language/gurmukhi/singh/grmk12.tfm b/language/gurmukhi/singh/grmk12.tfm Binary files differnew file mode 100644 index 0000000000..e98cb15ee6 --- /dev/null +++ b/language/gurmukhi/singh/grmk12.tfm diff --git a/language/gurmukhi/singh/grmk8.mf b/language/gurmukhi/singh/grmk8.mf new file mode 100644 index 0000000000..41700af785 --- /dev/null +++ b/language/gurmukhi/singh/grmk8.mf @@ -0,0 +1,24 @@ +mode_setup; + ht# := 1.6mm#; rm# := 0.48mm#; brm# := 0.72mm#; twd# := 1.12mm#; + uwidth# := twd#; + define_pixels(rm,twd,uwidth,brm); + define_whole_pixels(ht); + rot = 135; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% the following parameters determine the line-thicknes. +% the line-thicknes varies between thin# and thick#, depending on the +% angle between the pen and the direction of writing. +% for strokes in subscripts it varies between subthick# and thin#. + thick# := .85pt#; thin# := 0.2pt#; + subthick# := .7pt#; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + font_size 8pt#; + font_quad 1.5twd#+rm#; + font_x_height .7rm#; + font_normal_space:=1.2twd#; + font_normal_stretch:=.6twd#; + font_normal_shrink:=.4twd#; + font_identifier:="GRMK8"; +\input defs +\input gmchars + diff --git a/language/gurmukhi/singh/grmk8.tfm b/language/gurmukhi/singh/grmk8.tfm Binary files differnew file mode 100644 index 0000000000..c3a5a96644 --- /dev/null +++ b/language/gurmukhi/singh/grmk8.tfm diff --git a/language/gurmukhi/singh/grmk9.mf b/language/gurmukhi/singh/grmk9.mf new file mode 100644 index 0000000000..c0202691aa --- /dev/null +++ b/language/gurmukhi/singh/grmk9.mf @@ -0,0 +1,24 @@ +mode_setup; + ht# := 1.8mm#; rm# := 0.54mm#; brm# := 0.81mm#; twd# := 1.26mm#; + uwidth# := twd#; + define_pixels(rm,twd,uwidth,brm); + define_whole_pixels(ht); + rot = 135; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% the following parameters determine the line-thicknes. +% the line-thicknes varies between thin# and thick#, depending on the +% angle between the pen and the direction of writing. +% for strokes in subscripts it varies between subthick# and thin#. + thick# := 1pt#; thin# := 0.2pt#; + subthick# := .7pt#; +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + font_size 9pt#; + font_quad 1.5twd#+rm#; + font_x_height .7rm#; + font_normal_space:=1.2twd#; + font_normal_stretch:=.6twd#; + font_normal_shrink:=.4twd#; + font_identifier:="GRMK9"; +\input defs +\input gmchars + diff --git a/language/gurmukhi/singh/grmk9.tfm b/language/gurmukhi/singh/grmk9.tfm Binary files differnew file mode 100644 index 0000000000..881c1d2764 --- /dev/null +++ b/language/gurmukhi/singh/grmk9.tfm diff --git a/language/gurmukhi/singh/gurmukhi.c b/language/gurmukhi/singh/gurmukhi.c new file mode 100644 index 0000000000..1d0319d605 --- /dev/null +++ b/language/gurmukhi/singh/gurmukhi.c @@ -0,0 +1,948 @@ +/* gurmukhi.c + Preprocessor for TeX for text containing Gurmukhi characters. + + Author: Amarjit Singh + E-mail: asingh@evolving.com + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 1, or (at your option) + any later version. + + This program 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 General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include <stdio.h> +#include <ctype.h> +#define TRUE 1 +#define FALSE 0 +#define ILL_CHAR 29 +#define DUMMY 30 +#define END_OF_FILE 30 +#define END_OF_LINE 31 +#define N_NOLIGS 40 +/* ch_typ values */ +#define ILLEGAL 0 +#define CMR 1 +#define CONTROL 2 +#define GM 3 +#define NUMERAL 4 +/* ch_subtyp values */ +#define LO_VOWEL 0 +#define HI_VOWEL 1 +#define CONSONANT 2 +#define SPECIAL 3 + +#define LBRACE 273 +#define RBRACE 264 +#define RE 263 +#define RN 265 +#define RS 256 + +#define INBUF_LEN 133 + +/* GLOBAL VARIABLES */ +FILE *f_in,*f_out,*fopen(); + +short buf_length; +short syll[30]; /* offset of syll is in chr_ptr or cons_ptr */ +short cons_ptr, chr_ptr; +short cons_code; + +char *strchr(); +char wrong[10]; +char *p_in,*p_out,*s_ptr,*o_ptr; +char infil[80], outfil[80]; +char inbuf[INBUF_LEN], outbuf[133]; +char word[500]; + +unsigned char gm_mode, dollar_mode, cmr_mode; +unsigned char d_found, no_gm, buf_ptr, wait_syl, lin_obey; +unsigned char error, cons_seen, vow_seen; + +struct char_def { + short ch_typ, ch_subtyp, ch_code, ch_subcode; +}; + +struct char_def table[127] = { + {ILLEGAL,SPECIAL,0,0}, /* 1 not used */ + {GM,CONSONANT,'\126',1}, /* 2 .t */ + {GM,CONSONANT,'\130',2}, /* 3 .d */ + {GM,SPECIAL,'\72',0}, /* 4 .o */ + {GM,CONSONANT,'\132',3}, /* 5 .n */ + {GM,CONSONANT,'\13',4}, /* 6 .g */ + {GM,SPECIAL,'\24',0}, /* 7 .. */ + {GM,CONSONANT,'\14',5}, /* 8 .K */ + {GM,CONSONANT,'\127',6}, /* 9 .T */ + {GM,CONSONANT,'\131',7}, /* 10 .D */ + {GM,SPECIAL,'\54',0}, /* 11 .m */ + {ILLEGAL,SPECIAL,0,0}, /* 12 not used */ + {ILLEGAL,SPECIAL,0,0}, /* 13 not used */ + {ILLEGAL,SPECIAL,0,0}, /* 14 not used */ + {ILLEGAL,SPECIAL,0,0}, /* 15 not used */ + {ILLEGAL,SPECIAL,0,0}, /* 16 not used */ + {ILLEGAL,SPECIAL,0,0}, /* 17 not used */ + {GM,CONSONANT,'\122',8}, /* 18 "n */ + {GM,CONSONANT,'\146',9}, /* 19 "s */ + {ILLEGAL,SPECIAL,0,0}, /* 20 not used */ + {GM,CONSONANT,'\32', 10}, /* 21 ~n */ + {GM,SPECIAL,'\137',0}, /* 22 ~a */ + {ILLEGAL,SPECIAL,0,0}, /* 23 not used */ + {ILLEGAL,SPECIAL,0,0}, /* 24 not used */ + {GM,HI_VOWEL,275,'\106'}, /* 25 ii */ + {GM,LO_VOWEL,274,1}, /* 26 uu */ + {GM,HI_VOWEL,260,'\117'}, /* 27 oo */ + {ILLEGAL,SPECIAL,0,0}, /* 28 not used */ + {ILLEGAL,SPECIAL,0,0}, /* 29 not used */ + {CONTROL,SPECIAL,0,0}, /* 30 DUMMY */ + {CONTROL,SPECIAL,0,0}, /* 31 END_OF_LINE */ + {CONTROL,SPECIAL,0,0}, /* 32 space */ + {CMR,SPECIAL,0,0}, /* ! */ + {ILLEGAL,SPECIAL,0,0}, /* " */ + {ILLEGAL,SPECIAL,0,0}, /* # */ + {ILLEGAL,SPECIAL,0,0}, /* $ */ + {ILLEGAL,SPECIAL,0,0}, /* % */ + {ILLEGAL,SPECIAL,0,0}, /* & */ + {CMR,SPECIAL,0,0}, /* ' to - */ + {CMR,SPECIAL,0,0}, /* ' to - */ + {CMR,SPECIAL,0,0}, /* ' to - */ + {CMR,SPECIAL,0,0}, /* ' to - */ + {CMR,SPECIAL,0,0}, /* ' to - */ + {CMR,SPECIAL,0,0}, /* ' to - */ + {CMR,SPECIAL,0,0}, /* ' to - */ + {ILLEGAL,SPECIAL,0,0}, /* . */ + {GM,SPECIAL,'\40',0}, /* / */ + {NUMERAL,SPECIAL,0,0}, /* 0 to 9 */ + {NUMERAL,SPECIAL,0,0}, /* 0 to 9 */ + {NUMERAL,SPECIAL,0,0}, /* 0 to 9 */ + {NUMERAL,SPECIAL,0,0}, /* 0 to 9 */ + {NUMERAL,SPECIAL,0,0}, /* 0 to 9 */ + {NUMERAL,SPECIAL,0,0}, /* 0 to 9 */ + {NUMERAL,SPECIAL,0,0}, /* 0 to 9 */ + {NUMERAL,SPECIAL,0,0}, /* 0 to 9 */ + {NUMERAL,SPECIAL,0,0}, /* 0 to 9 */ + {NUMERAL,SPECIAL,0,0}, /* 0 to 9 */ + {CMR,SPECIAL,0,0}, /* : and ; */ + {CMR,SPECIAL,0,0}, /* : and ; */ + {ILLEGAL,SPECIAL,0,0}, /* < */ + {CMR,SPECIAL,0,0}, /* = */ + {ILLEGAL,SPECIAL,0,0}, /* > */ + {CMR,SPECIAL,0,0}, /* ? */ + {GM,SPECIAL,'\177',0}, /* @ */ + {GM,HI_VOWEL,258,'\101'}, /* A */ + {GM,CONSONANT,'\102',11}, /* B */ + {GM,CONSONANT,'\103',12}, /* C */ + {GM,CONSONANT,'\104',13}, /* D */ + {GM,HI_VOWEL,259,'\173'}, /* E */ + {ILLEGAL,SPECIAL,0,0}, /* F */ + {GM,CONSONANT,'\107',14}, /* G */ + {GM,SPECIAL,'\54',0}, /* H */ + {GM,HI_VOWEL,267,'\106'}, /* I */ + {GM,CONSONANT,'\112',15}, /* J */ + {GM,CONSONANT,'\113',16}, /* K */ + {ILLEGAL,SPECIAL,0,0}, /* L not used */ + {GM,SPECIAL,'\54',0}, /* M */ + {GM,SPECIAL,'\134',0}, /* N */ + {GM,HI_VOWEL,261,'\117'}, /* O */ + {GM,CONSONANT,'\120',17}, /* P */ + {ILLEGAL,SPECIAL,0,0}, /* Q */ + {GM,CONSONANT,'\167',18}, /* R */ + {GM,CONSONANT,'\146',9}, /* S */ + {GM,CONSONANT,'\124',19}, /* T */ + {GM,LO_VOWEL,276,1}, /* U */ + {ILLEGAL,SPECIAL,0,0}, /* V to Z */ + {ILLEGAL,SPECIAL,0,0}, /* V to Z */ + {ILLEGAL,SPECIAL,0,0}, /* V to Z */ + {ILLEGAL,SPECIAL,0,0}, /* V to Z */ + {ILLEGAL,SPECIAL,0,0}, /* V to Z */ + {CMR,SPECIAL,0,0}, /* [ */ + {CONTROL,SPECIAL,0,0}, /* \ */ + {CMR,SPECIAL,0,0}, /* ] */ + {ILLEGAL,SPECIAL,0,0}, /* ^ */ + {ILLEGAL,SPECIAL,0,0}, /* _ */ + {CMR,SPECIAL,0,0}, /* ` */ + {GM,HI_VOWEL,'\141',257}, /* a */ + {GM,CONSONANT,'\142',20}, /* b */ + {GM,CONSONANT,'\143',21}, /* c */ + {GM,CONSONANT,'\144',22}, /* d */ + {GM,HI_VOWEL,262,3}, /* e */ + {GM,CONSONANT,'\47',23}, /* f */ + {GM,CONSONANT,'\147',24}, /* g */ + {GM,CONSONANT,'\150',25}, /* h */ + {GM,HI_VOWEL,'\151','\105'}, /* i */ + {GM,CONSONANT,'\152',26}, /* j */ + {GM,CONSONANT,'\153',27}, /* k */ + {GM,CONSONANT,'\154',28}, /* l */ + {GM,CONSONANT,'\155',29}, /* m */ + {GM,CONSONANT,'\156',30}, /* n */ + {GM,HI_VOWEL,'\33','\157'}, /* o */ + {GM,CONSONANT,'\160',31}, /* p */ + {ILLEGAL,SPECIAL,0,0}, /* not used */ + {GM,CONSONANT,'\162',32}, /* r */ + {GM,CONSONANT,'\163',33}, /* s */ + {GM,CONSONANT,'\164',34}, /* t */ + {GM,LO_VOWEL,'\165',0}, /* u */ + {GM,CONSONANT,'\166',35}, /* v */ + {ILLEGAL,SPECIAL,0,0}, /* not used */ + {ILLEGAL,SPECIAL,0,0}, /* not used */ + {GM,CONSONANT,'\171',36}, /* y */ + {GM,CONSONANT,'\51',37}, /* z */ + {CONTROL,SPECIAL,0,0}, /* left brace */ + {GM,SPECIAL,'\56',0}, /* | */ + {CONTROL,SPECIAL,0,0}, /* right brace */ + {ILLEGAL,SPECIAL,0,0}, /* ~ */ + {ILLEGAL,SPECIAL,0,0} /* del */ +}; + +char chset1[12]= {'k','t','d','o','n','g','.','K','T','D','m',' '};/* . */ +char chset4[10]= {'k','g','c','j','t','d','p','b','s',' '}; /* h */ +char chset3[3] = {'n','s',' '}; /* " */ +char chset6[3] = {'n','a',' '}; /* ~ */ +char chset2[3] = {'a','i',' '}; /* a */ +char chset5[2] = {'A','E'}; /* result of aa and ai */ + +char out_string[277][7] = { + "\\7{","\\8{","\\9{","\\?","\\<","^^E","^^F", + "^^G","^^H","^^I","^^J","^^K","^^L","\\0", + "\\qx{","^^O","^^P","^^Q","^^R", + "^^S","^^T","^^U","^^V","^^W","^^X", + "^^Y","^^Z","^^[","^^\\","^^]", + "^^^","\\qy{","\\1","!","\"","\\#","\\$", + "\\%","\\&","\'","(",")","*","+",",","-",".","/","0","1","2", + "3","4","5","6","7","8","9",":",";","<","=",">","?","@", + "A","B","C","D","E","F","G","H","I","J","K","L","M","N", + "O","P","Q","R","S","T","U","V","W","X","Y","Z","[","\\2", + "]","\\qq{","\\35Fw","`","a","b","c","d","e","f","g","h","i","j", + "k","l","m","n","o","p","q","r","s","t","u","v","w","x", + "y","z","\\4","\\qz{","\\5","\\6{","^^?", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","","","","", + "","","{\\rs ","","aA","a\\4", + "ao","aO","a\\?","\\re}","}","\\rn{", + "{\\rdt}","iF","{\\qva}","{\\qvb}","{\\qvc}", + "\\qa{","\\qb{","{", "\\7{u}","Ei", "\\8{u}" +}; + +/* strstr : to make it portable */ +char *st_find(s,q) +char *s, *q; +{ + short i,j,k,l; + j = strlen(s); + k = strlen(q); + for (i=0; i <= j-k; i++) { + if (s[i]==q[0]) { + for (l = 1; (s[i + l] == q[l]) && (q[l] != '\0'); l++) ; + if (q[l] == '\0') return(&s[i]); + } + } + return(NULL); +} + +/* strchr : to make it portable */ +char *ch_find(s,q) +char *s; +char q; +{ + short i,j; + j = strlen(s); + for (i=0; i < j; i++) + if (s[i]==q) return(&s[i]); + return(NULL); +} + +err_ill(str) +char *str; +{ + printf("Error: illegal character(s): %s\n",str); + puts(inbuf); + getchar(); + error = TRUE; +} + +/* Find {\gm in inbuf, copy everything till {\gm to outbuf */ +/* and modify rest of it back to inbuf */ +/* RETURN : TRUE if inbuf is valid */ +/* FALSE otherwise */ +/* other ouputs : no_gm */ +/* d_found */ +char find_gm() +{ + char *d_ptr; + char *gm_ptr; + char *svbuf; + char again; + + d_found = FALSE; + svbuf = inbuf; + do { + again = FALSE; + gm_ptr = st_find(svbuf,"{\\gm"); + if (gm_ptr != NULL) { + again = isalpha(gm_ptr[4]); + svbuf = gm_ptr + 4; + } + } while(again); + + if (dollar_mode) { + d_ptr = ch_find(inbuf,'$'); + if ((d_ptr != NULL) && ((gm_ptr == NULL) || (d_ptr < gm_ptr))) { + d_found = TRUE; + gm_ptr = d_ptr; + } + } + + if (gm_ptr == NULL) + return(FALSE); + strncat(outbuf,inbuf,gm_ptr-inbuf); + no_gm = FALSE; + if (!d_found) { + if (gm_ptr[4] == '#') { + no_gm = TRUE; + gm_ptr += 1; + } else { + strcat(outbuf,"{\\gm"); + } + gm_ptr += 4; + } else { + switch(dollar_mode) { + case 1: strcat(outbuf,"{\\gm "); + break; + case 2: strcat(outbuf,"\\pgm "); + case 3: no_gm = TRUE; + } + gm_ptr += 1; + } + strcpy(inbuf,gm_ptr); + return(TRUE); +} + +/* Returns one char from "inbuf" at "buf_ptr" */ +/* if inbuf is at END_OF_LINE then refills it from "f_in" */ +/* other inputs : p_in */ +/* other outputs: p_in, buf_length */ +char inp_ch() +{ + char ch, ch_out; + ch = inbuf[buf_ptr++]; + if (ch == '\n') { + if (p_in == 0) + ch_out = END_OF_FILE; + else { + p_in = fgets(inbuf,INBUF_LEN,f_in); + buf_ptr = 0; + buf_length = strlen(inbuf); + ch_out = END_OF_LINE; + } + } else { + if (ch < 32) + ch_out = ILL_CHAR; + else + ch_out = ch; + } + return(ch_out); +} + +put_macro(macro) +short macro; +{ + char tmp[5]; + int l, i; + if (syll[chr_ptr-1] == '\175') { + syll[chr_ptr+1] = '\175'; + syll[chr_ptr] = RBRACE; + syll[chr_ptr-1] = syll[chr_ptr-2]; + syll[chr_ptr-2] = macro; + chr_ptr += 2; + } else if (syll[chr_ptr-1]==RBRACE) { + syll[chr_ptr-3] = 271; + syll[chr_ptr] = LBRACE; + sprintf(tmp,"%d",macro); + l = strlen(tmp); + chr_ptr += 1; + for (i = 0; i < l; i++) + syll[chr_ptr+i] = tmp[i]; + chr_ptr += l; + syll[chr_ptr] = RBRACE; + chr_ptr += 1; + } else { + syll[chr_ptr] = syll[chr_ptr-1]; + syll[chr_ptr-1] = macro; + syll[chr_ptr+1] = RBRACE; + chr_ptr = chr_ptr +2; + } +} + +/* find out string corresponding to chars in syll */ +/* and then move to word. */ +/* Reset related flags */ +put_syll() +{ + short i; + for (i = 0; i <= (chr_ptr-1); i++) + strcat(word,&out_string[syll[i]][0]); + chr_ptr = 0; + cons_seen =FALSE; + vow_seen =FALSE; + wait_syl = FALSE; +} + +/* puts out string for one code ( or char ) in word */ +put_sym(code) +short code; +{ + strcat(word,&out_string[code][0]); +} + +/* move word to outbuf */ +/* if not lin_obey then + put outnuf in f_out + keep moving word to outbuf to f_out till + len of word is bigger than 80 + At end of this routine outbuf may have a valid string +*/ +put_word() +{ + short lw,lb; + lw = strlen(word); + lb = strlen(outbuf); + if (((lb + lw) > 80) && !lin_obey) + { + if (lb > 1) + { + if (outbuf[lb-1] != ' ') + strcat(outbuf,"%\n"); + else + outbuf[lb-1] = '\n'; + fputs(outbuf,f_out); + } + while (lw > 80) + { + strncpy(outbuf,word,79); + outbuf[79] = '\0'; + strcat(outbuf,"%\n"); + fputs(outbuf,f_out); + strcpy(word,&word[79]); + lw = strlen(word); + } + strcpy(outbuf,word); + } + else + strcat(outbuf,word); + strcpy(word,""); +} + +/* copies c to word and */ +/* if c is space then outputs a word */ +sendchar(c) +char c; +{ + char cstr[2]; + cstr[0] = c; + cstr[1] = '\0'; + strcat(word,cstr); + if (isspace(c)) + put_word(); +} + +put_ch(code) +short code; +{ + struct char_def *c_ptr; + short i; + + c_ptr = &table[code-1]; + switch(c_ptr->ch_typ) { + case GM: + if (cmr_mode) { + cmr_mode = FALSE; + put_sym(RE); + } + switch(c_ptr->ch_subtyp) { + case HI_VOWEL: + if (wait_syl) + put_syll(); + if (cons_seen) { + if (code == 'i') { + for (i = chr_ptr; i>= (cons_ptr+1); i--) + syll[i] = syll[i-1]; + syll[cons_ptr] = c_ptr->ch_subcode; + } else { + syll[chr_ptr] = c_ptr->ch_subcode; + if ((code != 'A') && (code != 'a')) + vow_seen = TRUE; + } + } else + syll[chr_ptr] = c_ptr->ch_code; + chr_ptr = chr_ptr + 1; + wait_syl = TRUE; + cons_seen = FALSE; + break; + case LO_VOWEL: + if (wait_syl) + put_syll(); + if (cons_seen) + { + put_macro(c_ptr->ch_subcode); + chr_ptr = chr_ptr - 1; + } + else + syll[chr_ptr] = c_ptr->ch_code; + chr_ptr = chr_ptr + 1; + wait_syl = TRUE; + cons_seen = FALSE; + break; + case CONSONANT: + if (wait_syl) + put_syll(); + if (!cons_seen) { + cons_seen = TRUE; + cons_ptr = chr_ptr; + cons_code = c_ptr->ch_subcode; + syll[chr_ptr] = c_ptr->ch_code; + chr_ptr += 1; + } else { + if (code == 'r') { + syll[chr_ptr] = '\175'; + chr_ptr = chr_ptr + 1; + cons_code = 0; + } else if (code == 'h') { + syll[chr_ptr] = '\110'; + chr_ptr = chr_ptr + 1; + cons_code = 0; + } else if (code == 'v') { + syll[chr_ptr] = '\46'; + chr_ptr = chr_ptr + 1; + cons_code = 0; + } else { + cons_code = c_ptr->ch_subcode; + syll[chr_ptr] = c_ptr->ch_code; + chr_ptr += 1; + } + } + break; + + case SPECIAL: + put_syll(); + put_sym(c_ptr->ch_code); + } + break; + + case ILLEGAL: + wrong[0] = code; wrong[1] = '\0'; + err_ill(wrong); + break; + + case CONTROL: + if (cmr_mode) { + cmr_mode = FALSE; + put_sym(RE); + } else { + put_syll(); + } + if (code == END_OF_LINE) { + put_word(); + strcat(outbuf,"\n"); + fputs(outbuf,f_out); + strcpy(outbuf,""); + if (!lin_obey) + fputs("\n",f_out); + } else if (code != DUMMY) + sendchar(code); + break; + + case CMR: + if (cmr_mode) + sendchar(code); + else { + cmr_mode = TRUE; + put_syll(); + put_sym(RS); + sendchar(code); + } + break; + + case NUMERAL: + sendchar(code); + break; + } /* end of switch on ch_typ */ +} + +/* This routine resolves the combination of charaters */ +/* used to symbolize font characters */ +/* i.e. it cooks set of input chars to one offset in "table" */ +gmproc(symbol) +char symbol; +{ + unsigned char saved,gmready; + short brace_lev; + char savchr; + short i; + + brace_lev = 1; + saved = FALSE; + gmready = FALSE; + do { + switch(symbol) { + case '.': + savchr = inp_ch(); + i = 0; + do { + i++; + } while ((i != 12) && (chset1[i-1] != savchr)); + if (i == 12) { + wrong[0] = '.'; + wrong[1] = savchr; + wrong[2] = '\0'; + err_ill(wrong); + } else if (i < 4) { + savchr = inp_ch(); + if (savchr == 'h') + i = i+7; + else { + saved = TRUE; + if (i == 1) + err_ill(".k"); + } + } + if (!error) { + if (i == 11) + put_ch('M'); + else + put_ch(i); + } + break; + case 'i': + savchr = inp_ch(); + if (savchr == 'i') + put_ch(25); + else { + put_ch(symbol); + saved = TRUE; + } + break; + case 'u': + savchr = inp_ch(); + if (savchr == 'u') + put_ch(26); + else { + put_ch(symbol); + saved = TRUE; + } + break; + case 'o': + savchr = inp_ch(); + if (savchr == 'o') + put_ch(27); + else { + put_ch(symbol); + saved = TRUE; + } + break; + case 'a': + savchr = inp_ch(); + i = 0; + do { + i++; + } while ((i != 3) && (chset2[i-1] != savchr)); + if (i == 3) + { + put_ch(symbol); + saved = TRUE; + } else + put_ch(chset5[i-1]); + break; + + case '\"': + savchr = inp_ch(); + i = 0; + do { + i++; + } while ((i != 3) && (chset3[i-1] != savchr)); + if (i == 3) { + wrong[0] = '~'; + wrong[1] = savchr; + wrong[2] = '\0'; + err_ill(wrong); + } else + put_ch(i+17); + break; + + case '~': + savchr = inp_ch(); + i = 0; + do { + i++; + } while ((i != 3) && (chset6[i-1] != savchr)); + if (i == 3) { + wrong[0] = '~'; + wrong[1] = savchr; + wrong[2] = '\0'; + err_ill(wrong); + } else + put_ch(i+20); + break; + + case END_OF_LINE: + if (lin_obey) { + put_ch(END_OF_LINE); + put_ch(END_OF_LINE); + } else { + do { + savchr = inp_ch(); + } while (savchr == ' '); + if (savchr == END_OF_LINE) + put_ch(END_OF_LINE); + else { + put_ch(' '); + saved = TRUE; + } + } + break; + + case '$': + if (!dollar_mode) + put_ch(symbol); + else { + if (no_gm) + put_ch(DUMMY); + else + put_ch('}'); + gmready= TRUE; + put_word(); + strcpy(inbuf,&inbuf[buf_ptr]); + } + break; + + case '}': + brace_lev = brace_lev-1; + if ((brace_lev == 0) && !d_found) { + if (no_gm) + put_ch(DUMMY); + else + put_ch(symbol); + gmready= TRUE; + put_word(); + strcpy(inbuf,&inbuf[buf_ptr]); + } else + put_ch(symbol); + break; + + case '{': + put_ch(symbol); + brace_lev = brace_lev+1; + break; + + case '%': do + symbol = inp_ch(); + while(symbol != END_OF_LINE); + break; + + case '\\': + put_ch(symbol); + symbol = inp_ch(); + if (symbol == END_OF_LINE) { + put_word(); + strcat(outbuf,"\n"); + fputs(outbuf,f_out); + strcpy(outbuf,""); + } else { + if (!isalnum(symbol)) + sendchar(symbol); + else { + do { + sendchar(symbol); + symbol = inp_ch(); + } while (isalnum(symbol)); + savchr = symbol; + saved = TRUE; + } + } + break; + + case ILL_CHAR: err_ill('\0'); + break; + + case END_OF_FILE: + puts("error: missing }"); + error = TRUE; + break; + + default: + i = 0; + do { + i++; + } while ((i != 10) && (chset4[i-1] != symbol)); + if (i == 10) + put_ch(symbol); + else { + savchr = inp_ch(); + if (savchr == 'h') { + put_ch(symbol-32); + } else { + put_ch(symbol); + saved = TRUE; + } + } + break; + } /* end of switch */ + if (saved) { + symbol = savchr; + saved = FALSE; + } else if ((!error) && (!gmready)) { + symbol = inp_ch(); + } + } while (!error && !gmready); +} + +main(argc,argv) +int argc; +char *argv[]; +{ + unsigned char gm_yes; + /* get file specifications */ + + if (argc == 3) { + strcpy(infil,argv[1]); + strcpy(outfil,argv[2]); + } else if (argc == 2) { + strcpy(infil,argv[1]); + strcpy(outfil,""); + } else { + do { + printf("input file: "); + gets(infil); + } while (strlen(infil) == 0); + printf("output file: "); + gets(outfil); + } + s_ptr = strchr(infil,'.'); + if (strlen(outfil) == 0) { + strcpy(outfil,infil); + o_ptr = strchr(outfil,'.'); + if (o_ptr != 0) + *o_ptr = '\0'; + } + if (s_ptr == 0) + strcat(infil,".gm"); + o_ptr = strchr(outfil,'.'); + if (o_ptr == 0) + strcat(outfil,".tex"); + + /* open files */ + + if ((f_in = fopen(infil,"r")) == NULL) { + printf("cannot open file %s\n",infil); + exit(1); + } + if ((f_out = fopen(outfil,"w")) == NULL) { + printf("cannot open file %s\n",infil); + exit(1); + } + + /* initialization */ + + error = FALSE; + cons_seen = FALSE; + vow_seen = FALSE; + wait_syl = FALSE; + + cmr_mode = FALSE; + gm_mode = TRUE; + lin_obey = FALSE; + dollar_mode = 0; + + chr_ptr = 0; + strcpy(word,""); + strcpy(outbuf,""); + + /* read preprocessor commands */ + + while (TRUE) { + strcpy(inbuf,""); + p_in = fgets(inbuf,INBUF_LEN,f_in); + if (inbuf[0] != '@') + break; + while (TRUE) { + if (st_find(inbuf,"dollars") == &inbuf[1]) { + dollar_mode = 1; + break; + } + if (st_find(inbuf,"punjabi") == &inbuf[1]) { + /* reserved for hindi & pujabi merger */ + break; + } + if (st_find(inbuf,"obeylines") == &inbuf[1]) { + lin_obey = TRUE; + break; + } + if (st_find(inbuf,"dolmode1") == &inbuf[1]) { + dollar_mode = 1; + break; + } + if (st_find(inbuf,"dolmode2") == &inbuf[1]) { + dollar_mode = 2; + break; + } + if (st_find(inbuf,"dolmode3") == &inbuf[1]) { + dollar_mode = 3; + break; + } + printf("Error: illegal preprocessor command\n"); + puts(inbuf); + getchar(); + break; + } + } + + /* main loop */ + + do { + if (!find_gm()) + fputs(inbuf,f_out); + else { + do { + buf_length = strlen(inbuf); + buf_ptr = 0; + gmproc(inp_ch()); + if (!error) + gm_yes = find_gm(); + if (!gm_yes) { + strcat(outbuf,inbuf); + fputs(outbuf,f_out); + } + } while (gm_yes && !error); + } + strcpy(inbuf,""); + p_in = fgets(inbuf,INBUF_LEN,f_in); + strcpy(outbuf,""); + } while ((p_in != NULL) && !error); + fclose(f_in); + fclose(f_out); +} diff --git a/language/gurmukhi/singh/install.dos b/language/gurmukhi/singh/install.dos new file mode 100644 index 0000000000..2ac424b986 --- /dev/null +++ b/language/gurmukhi/singh/install.dos @@ -0,0 +1,106 @@ +The purpose of this file is to help in installation of "Gurmukhi for TeX" +software package on DOS. In addition to this file Readme and manual.gm, +are also provided which provide information about how and why to use this +package. + +Lets assume that you have installed TeX and TeX can call METAFONT for +font creation. I do not have TeX, METAFONT, and C-compiler on my machine +in DOS environment, so was not able to install or test this software. +Please let me know if you are successfully able to setup this package. + +Following help is extracted from "Devanagari for TeX" readme file, and +and is modified a little for "Gurmukhi for Tex" in hope that this will +be helpful in installation. + +In order to install the software you have to put the files in the right +directories and rename them (if necessary). + +* GMMACS.TEX, BANI.GM, EG.GM, MANUAL.GM must be in the directory + where TeX expects it's input. This is something like C:\TEX\INPUTS on + MS-DOS systems. + +* Compile GURMUKHI.C file to create an executable of preprocessor, with + a name may be GURMUKHI.EXE. Move it in a directory specified in the + PATH environment-variable. Preferably it should be put in the directory + where other executable files are kept, often called BIN. + +* If you do have a 300dpi black-writing laser-printer then you can use + the included PK and TFM files. The TFM-files have to be put in the + directory where TeX keeps its TFM-files, mostly called C:\TEX\FONTS + or something like that. The organization of the fontfiles (PK-files) + varies from installation to installation. Sometimes all the fontfiles + are put together in one large directory and the different magnifications + of a font are distinguished by their filename extension, as is the case + with the fonts in this package. + + Instead of in a directory the font files are sometimes put in a library. + This is the way it is done in emTeX. And sometimes there are different + directories for each magnification. These directories have 'names' like + 300, 329 etc. The fontfiles within these directories have no extensions + or just the extension 'PK'. + + According to which fontfile-organization is used on your system, you + have to copy and rename the fontfiles in the PK300 directory in this + package. + +* If your printer is not a 300dpi black-writing laser-printer, or if you + want to change the appearance of the font or of some characters in it + then you have to run METAFONT and use the .MF files as input. There + are METAFONT source files for 3 different sizes: 8,9 and 10 point: + GRMK8.MF, GRMK9.MF and GRMK10.MF. + All of these three source-files make use of DEFS.MF and GMCHARS.MF. + + The following is taken from: FAQ about TeX + + METAFONT allows you to create your own fonts. METAFONT, unlike TeX, + requires some customization. Each output device for which you will be + generating fonts needs a mode associated with it. Modes are defined + using the mode_def convention described on page 94 of _The METAFONTbook_. + The person who installed METAFONT on your system should know which + modes are defined. + + The usual way to create a font with plain METAFONT is to start + it with the line + \mode=<mode name>; mag=<magnification>; input <font file name> + in response to the * prompt or on the METAFONT command line. If + <mode name> is unknown or omitted, then the mode defaults to proof + mode. If this has happened METAFONT will produce an output file + called <font file name>.2602gf. The <magnification> is a floating + point number or magstep (magsteps are defined in _The METAFONTbook_ + and _The TeXbook_). If mag=<magnification> is omitted, then the + default is 1. For example, to generate dvng10 at 12pt for an epson + printer you would type + mf \mode=epson; mag=1.2; input dvng10 + + If you need a special mode that isn't defined for your METAFONT, + you can put its commands in a file (e.g., ln03.mf) and invoke + it on the fly with the \smode command. For example, to create + dvng10.300gf for an LN03 printer, using the file + % This is ln03.mf as of 2/27/90 + % mode_def courtesy of John Sauter + proofing:=0; + fontmaking:=1; + tracingtitles:=0; + pixels_per_inch:=300; + blacker:=0.65; + fillin:=-0.1; + o_correction:=.5; + (note the absence of the mode_def and enddef commands), we would type + mf \smode="ln03"; input dvng10 + +* After this setup you are ready to use this package. You can use + example file bani.gm and eg.gm to see if everything is alright. A + typical set of commands can be given as follows. This information + is in greater detail in manual.ps + + gurmukhi bani + tex bani + + You can send dvi file generated here to your printer. + +------------------------------------------------------------------------ +Amarjit Singh +E-mail Address: asingh@evovling.com +Postal Address: 8405 E. Hampden Ave #11N Denver CO 80231 USA (Current) + A-3 Mansarover Garden, New Delhi 110015 India(Permanent) +------------------------------------------------------------------------ diff --git a/language/gurmukhi/singh/install.ux b/language/gurmukhi/singh/install.ux new file mode 100644 index 0000000000..05811547a6 --- /dev/null +++ b/language/gurmukhi/singh/install.ux @@ -0,0 +1,68 @@ +The purpose of this file is to help in installation of "Gurmukhi for TeX" +software package on a Unix. In addition to this file Readme and manual.gm, +are also provided which provide information about how and why to use this +package + +Lets assume that you have installed TeX and TeX can call METAFONT for +font creation. I have Tex Version 3.1415N (C version 6.1), and METAFONT +Version 2.71 (C version 6.1). I got all these tools with Linux version +1.2.1. + +Lets also assume that you are installing this software under a directory +"/usr/abc/gurmukhi". Under this directory make top-level TeX directory +lib/tex. In this top-level TeX directory /usr/abc/gurmukhi/lib/tex, make +sub-directories "macros", "mf", "pk", and "tfm", and move all *.mf files +in mf directory, *.tfm files in tfm directory, *.pk files in pk directory, +and gmmacs.tex file in macros directory. + +Compile the preprocessor, gurmukhi.c and put the executable somewhere on +your path. With following command, you will get preprocessor with name +"gurmukhi", +cc -o gurmukhi gurmukhi.c + +To set the environment variables in a c-shell environment, you can create +a file with following information and "source" it every time you want to +use this package. + +set texbase = /usr/abc/gurmukhi/lib/tex +setenv TEXINPUTS .:$texbase/macros: +setenv TEXFONTS :$texbase/tfm +setenv TEXPKS :$texbase/pk +setenv MFINPUTS :$texbase/mf +unset texbase + +Note that leading and trailing colon tells TeX to append the system path +at that point. If you have an older version of TeX (before version 3), +you may need to explicitly specify them in the environment variables. If +you use xtex, you will need to explicitly list your system directories in +the TEXFONTS variable, since it doesn't understand the leading/trailing +colon convention. + + +After this setup you are ready to use this package. You can use example +file bani.gm and eg.gm to see if everything is alright. A typical set of +commands can be given as follows. This information is in greater detail +in manual.ps + +gurmukhi bani +tex bani +dvips bani.dvi + +You can view the generated files using any one of following + +xdvi bani +gs bani +ghostview bani + +and can send .ps file generated by dvips to your laser printer. + +There are programs equivalent to dvips for some non-laser printers +and are available at tex-archive sites. + + +------------------------------------------------------------------------ +Amarjit Singh +E-mail Address: asingh@evovling.com +Postal Address: 8405 E. Hampden Ave #11N Denver CO 80231 USA (Current) + A-3 Mansarover Garden, New Delhi 110015 India(Permanent) +------------------------------------------------------------------------ diff --git a/language/gurmukhi/singh/known.prob b/language/gurmukhi/singh/known.prob new file mode 100644 index 0000000000..8aa7b616fa --- /dev/null +++ b/language/gurmukhi/singh/known.prob @@ -0,0 +1,9 @@ +These are known issues and I am working on them. Any help or +suggestion on these, will be more than welcome. Thanks for +your patience. + +1. Matra of u and U does not fit properly will some charaters. + +2. Somehow, first digit after {\gm is not printed, even though + it appears in 'intermediate' .tex file. Let me know if you + don't see this problem on your system. diff --git a/language/gurmukhi/singh/manual.gm b/language/gurmukhi/singh/manual.gm new file mode 100644 index 0000000000..ebbee2a41a --- /dev/null +++ b/language/gurmukhi/singh/manual.gm @@ -0,0 +1,329 @@ +@punjabi +%________________________________________________________________________ +% +% This program is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation; either version 1, or (at your option) +% any later version. +% +% This program 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 General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program; if not, write to the Free Software +% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +%________________________________________________________________________ +\input gmmacs +\nopagenumbers +\hsize=6in + +\font\title=cmr9 scaled\magstep5 +\relax +\font\subtitle=cmr9 scaled\magstep2 +\relax +\font\pal=cmr9 + +\bigskip\vbox{ + + + + + + +}\bigbreak +\centerline{{\title Gurmukhi for \TeX}\footnote*{\TeX\ is a trademark of the +American Mathematical Society}} +\smallskip +\centerline{\title User Manual} +\smallskip +\centerline{\subtitle Version 1.0} +\centerline{\subtitle October 1995} +\bigskip +\bigskip +\centerline{\title Amarjit Singh} +\bigskip +\eject +{\subtitle Introduction} +\bigskip + +The purpose of the ``Gurmukhi for \TeX'' software package is to convert the +characters in a document from English Alphabet to Gurmukhi +(script for the Punjabi language), utilizing the \TeX [1][2] and +METAFONT\footnote*{METAFONT is a trademark of Adddison Wesley Publishing Company}[3] +software packages. \TeX\ is a typesetting system developed by the American +Mathematical Society, used widely on Unix systems, and occassionally on +other operating environments. METAFONT is a font generation tool supported +by \TeX . Both \TeX\ and METAFONT are free software packages which can be +downloaded from \TeX\ archive sites[4]. A working knowledge of \TeX\ will +greatly help in using the 'Gurmukhi for \TeX ' package. + +This document provides information for preparing input text files and use of +the 'Gurmukhi for \TeX ' software. This is the first version of the software +and it may undergo changes in the near future, so keep an eye out for +enhanced future releases. + +\bigskip +{\subtitle Acknowledgement} +\bigskip +The Gurmukhi package was inspired by the Devanagari script generation +package ``Devanagari for \TeX \footnote\dag{``Devanagari for \TeX '' is a copyright +of Frans J. Vethuis}'' which is developed by Frans J. Velthuis +and has been brought to you with his permission to support Gurmukhi script. +I would also like to thank my mother for repeatedly prompting me to write +a letter to her in Gurmukhi. Last, but not least, I would like to thank +everyone who might use this software package. + +\bigskip +If you have comments or suggestion, feel free to send them to me at +the following address: +\smallskip +\leftline{ E-mail: asingh@evolving.com } + +\leftline{ Postal Mail: Amarjit Singh } +\leftline{ 8405 E. Hampden Ave \#11N Denver CO 80231 USA } +\leftline{ A-3 Mansarover Garden, New Delhi 110015 India } +\bigskip +\bigskip +{\subtitle Preparing a Document for Trans-literation } +\bigskip + +A document is initially created using regular ASCII text. The text is +then converted into Gurmukhi using simple transliteration rules, and +most of \TeX\ features from the initial document are passed to an +`intermediate' \TeX\ file. The generated output can be sent to a printer or +to the screen + +This section describes what ASCII characters can be used to produce +Gurmukhi characters, and the delimiters which are required to put +together these characters to pass to \TeX . Some control commands are +presented which you might use to modify the behaviour of this +tool to transform ASCII input text into Gurmukhi text. There is a macro +file for \TeX\ which should be included in your text file. +\bigskip +{\bf Characters} + +Table 1 presents the ASCII to Gurmukhi character set translation. + +To maintain the simplicity of transliteration, more than one +character may be used, for example; 'kh' would be used to produce +the Gurmukhi character {\gm kh}. Depending upon the context of +a vowel, between the word or beginning of a word, a sign +(like '{\gm \char69}') or a character (like '{\gm i}') will appear. +An exception to this rule will be two vowels appearing together. +There is a very limited number of half-characters in Gurmukhi and +they are for h, v and r. + +There are more than one ASCII character sets which can be used in +input text, for representation of some Gurmukhi characters, like +'kh' and 'K' can be used for '{\gm K}' and it +is totally your choice to use any of them. + +In Gurmukhi text mode digits will appear as : + +{\gm 0 0 1 2 3 4 5 6 7 8 9 } +\bigskip +\eject +\centerline{\bf Table 1: ASCII Character sets for Gurmukhi characters} +\smallskip +\settabs 8 \columns +\+u&{\gm u}&k&{\gm k}&t&{\gm t}&sh, S or "s&{\gm "s}\cr +\+uu&{\gm uu} or {\gm \char1}&kh or K&{\gm K}&th or T&{\gm T}&.kh or .K&{\gm .K}\cr +\+U&{\gm U} or {\gm \char1}&g&{\gm g}&d&{\gm d}&.g&{\gm .g}\cr +\+a&{\gm a} or&gh or G&{\gm G}&dh or D&{\gm D}&z&{\gm z}\cr +\+aa or A&{\gm A} or {\gm \char65}&"n&{\gm "n}&n&{\gm n}&f&{\gm f}\cr +\+i&{\gm i} or {\gm \char69}&c&{\gm c}&p&{\gm p}&N&{\gm N .ti~apI}\cr +\+ii&{\gm ii} or {\gm \char70}&ch or C&{\gm C}&ph or P&{\gm P}&.m or M&{\gm M biNdI}\cr +\+I&{\gm I} or {\gm \char70}&j&{\gm j}&b&{\gm b}&/&{\gm / caNdrabiNdU}\cr +\+e&{\gm e} or {\gm \char3}&jh or J&{\gm J}&bh or B&{\gm B}&\~\relax a&{\gm ~a aD~ak}\cr +\+ai or E&{\gm E} or {\gm \char123}&\~\relax n&{\gm ~n}&m&{\gm m}&@&{\gm @ (tOR)}\cr +\+o&{\gm o} or {\gm \char111}&.t&{\gm .t}&y&{\gm y}& {\tt |} &{\gm | (.dN.dA)}\cr +\+oo&{\gm oo} or {\gm \char79}&.th or .T&{\gm .T}&r&{\gm r}& {\tt ||}&{\gm ||}\cr +\+O&{\gm O} or {\gm \char79}&.d&{\gm .d}&l&{\gm l}&.o&{\gm .o}\cr +\+s&{\gm s} &.dh or .D&{\gm .D}&v&{\gm v}\cr +\+h&{\gm h} &.n&{\gm .n}&R&{\gm R}\cr + +\bigskip +{\bf Delimiters} + +All text appearing after \% up to the end of the line, will be +considered comments and will not generate any output. + +All the text between '$\{ \backslash gm$' and '$\}$' will be converted to +Gurmukhi according to the character set shown in Table 1. + +All the text between \$ signs will be converted to Gurmukhi when the @dollars +preprocessor command is given. + +The following characters are allowed but do not change representation inside +Gurmukhi delimiters: + + ! ` ' ( ) * - : ; = ? , [ ] + + +The following characters are not allowed inside Gurmukhi delimiters: + + {\tt <} {\tt >} F L Q V W X Y Z \^ \_ q w x + +Obviously, characters outside Gurmukhi delimiters will not be changed to +Gurmukhi and will be printed in English Alphabet or will follow the +rules which you specify. + +To change the pointsize of characters within '$\{ \backslash gm$' and '$\}$' +the following delimiters can be used, in incremental sizes, : +\smallskip + +\bigskip +\settabs 2 \columns +\+ $\backslash gmsmall$ & 8 point font \cr + +\+ $\backslash gmnine$ & 9 point font \cr + +\+ $\backslash gmnormal$ & 10 point font \cr + +\+ $\backslash gmbig$ & 10 point font, magnified at 1 step \cr + +\+ $\backslash gmlarge$ & 10 point font, magnified at 2 steps \cr + +\+ $\backslash gmhuge$ & 10 point font, magnified at 3 steps \cr + +\bigskip +{\bf Examples} + +Different character sets, following above mentioned rules, within Gurmukhi +delimilters can produce desired output, like $\{ \backslash gm$ paNjaab$\}$ +and $\{ \backslash gm$ pNjAb$\}$ will print {\gm pNjAb}. + +Sometimes, you may have to type an extra `a' to complete a syllable, even +though it may not appear in the Gurmukhi representation of that word. + +There are additional gm files other than the source of this document, which +can be referred to for examples. +\bigskip +{\bf Control commands} + +At the start of input text, the following preprocessor commands +can be used, to control the functionality of the preprocessor: + +@obeylines + To follow the line breaks which you type. + +@dollars + To activate \$ as a special symbol such that text delimited by \$ + is converted to Gurmukhi. + +@punjabi + Does not do anything right now, but may be used when the tool + supports other languages. + +After the above preprocessor commands, insert the following command +to include a macro file. This ia a very important step because +without the macro file, \TeX\ will not recognize the translated +text generated by the preprocessor. + +\input gmmacs + +\bigskip +{\subtitle Transforming a Document} +\bigskip + +The ``Gurmukhi for \TeX'' package consists of a preprocessor, font files +and a macro file. See the file ``readme'' and ``install.unix'' for +installation steps. Installation should be fairly easy, as there is +no system dependent code. Wherever you can find \TeX\ and metafont, +you can very possibly install and use this package. +\bigskip +{\bf The Preprocessor} + +The job of the preprocessor is to find the correct representation of a +character according to its context. When a vowel appears in a word, +a syllable completes, and context changes to what it was at the +beginning of a new word. It also finds possible half representation of +characters. Output of this preprocessor is a \TeX\ document. +\bigskip +{\bf Example session of commands} + +Lets assume that during installation you have prepared the preprocessor +with name "gurmukhi" and have set paths in your environment to locate font and +macro files. Lets also assume that you have an input file with the name "text.gm". + +You would start the preprocessor on the file 'text.gm' as follows: +\bigskip +\settabs 2 \columns +\+ gurmukhi text & (to get a \TeX\ file)\cr +\bigskip + +The \TeX\ file produced here, text.tex, can be used as any other input +file for \TeX . After this a typical sequence of commands may be +\bigskip +\settabs 2 \columns +\+ tex text & (to get dvi file) \cr +\smallskip +\+ xdvi text & (to view dvi file) \cr +\bigskip + + +Another sequence after this may be +\bigskip +\settabs 2 \columns +\+ dvips text & ( to get postscript file text.ps from text.dvi ) \cr +\smallskip +\+ gs text.ps & ( to view postscript file ) \cr +\smallskip +\+ ghostview text.ps & ( another way to view postscript file ) \cr +\bigskip + + +Now it is time to send the postscript file to a postscript printer, and +a command command for this may be: + + lp text.ps + + +\bigskip +{\subtitle Devanagari} +\bigskip + +This section is presented for those who have used the Devanagari package +or would also like to use the Devanagari package. There are not many +differences between the two. In Devanagari, you create a text file +in the same manner as with Gurmukhi, but you have slightly different +character sets for representation and you will use a similar sequence of +commands. + +The differences in character sets in Gurmukhi and Devanagari are as +follows: + +In Gurmukhi, S and sh can also be used in addition to "s to produce {\gm S} +and N is used in Gurmukhi to print {\gm N (.ti~apI)}, ii produces {\gm ii} + and not {\gm I}, \~\relax a produces {\gm ~a}. + +The Devanagari software package allows many character sets such as .s, +.h, H, q which are not valid in Gurmukhi. + +\bigskip +{\subtitle What may be next:} +\bigskip + +Support for LaTeX + +Porting to different systems and platforms + +Combination of Devanagari and Gurmukhi. + +\bigskip +{\subtitle Biblography} +\bigskip +[1] Norman Walsh {\it Making \TeX Work} O'Reilly \& Associates, Inc. July 1994. + +[2] Donald E. Knuth {\it The \TeX book} Addison Wesley Publishing Co. Sep 1993 + +[3] Donald E. Knuth {it The METAFONT Book} Addison Wesley, + +[4] FTP Site for \TeX\ and related softwares, including METAFONT, and Devanagri + +\indent { \indent{ftp.shsu.edu/tex-archive}} + +[5] Frans J. Velthuis {\it Devanagari for \TeX} Version 1.2 + +\bye diff --git a/language/gurmukhi/singh/manual.ps b/language/gurmukhi/singh/manual.ps new file mode 100644 index 0000000000..c42d06d55a --- /dev/null +++ b/language/gurmukhi/singh/manual.ps @@ -0,0 +1,887 @@ +%!PS-Adobe-2.0 +%%Creator: dvipsk 5.58a Copyright 1986, 1994 Radical Eye Software +%%Title: manual.dvi +%%Pages: 5 +%%PageOrder: Ascend +%%BoundingBox: 0 0 596 842 +%%DocumentPaperSizes: a4 +%%EndComments +%DVIPSCommandLine: dvips manual +%DVIPSParameters: dpi=300, compressed, comments removed +%DVIPSSource: TeX output 1995.10.22:1605 +%%BeginProcSet: texc.pro +/TeXDict 250 dict def TeXDict begin /N{def}def /B{bind def}N /S{exch}N +/X{S N}B /TR{translate}N /isls false N /vsize 11 72 mul N /hsize 8.5 72 +mul N /landplus90{false}def /@rigin{isls{[0 landplus90{1 -1}{-1 1} +ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale +isls{landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div +hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul +TR[matrix currentmatrix{dup dup round sub abs 0.00001 lt{round}if} +forall round exch round exch]setmatrix}N /@landscape{/isls true N}B +/@manualfeed{statusdict /manualfeed true put}B /@copies{/#copies X}B +/FMat[1 0 0 -1 0 0]N /FBB[0 0 0 0]N /nn 0 N /IE 0 N /ctr 0 N /df-tail{ +/nn 8 dict N nn begin /FontType 3 N /FontMatrix fntrx N /FontBBox FBB N +string /base X array /BitMaps X /BuildChar{CharBuilder}N /Encoding IE N +end dup{/foo setfont}2 array copy cvx N load 0 nn put /ctr 0 N[}B /df{ +/sf 1 N /fntrx FMat N df-tail}B /dfs{div /sf X /fntrx[sf 0 0 sf neg 0 0] +N df-tail}B /E{pop nn dup definefont setfont}B /ch-width{ch-data dup +length 5 sub get}B /ch-height{ch-data dup length 4 sub get}B /ch-xoff{ +128 ch-data dup length 3 sub get sub}B /ch-yoff{ch-data dup length 2 sub +get 127 sub}B /ch-dx{ch-data dup length 1 sub get}B /ch-image{ch-data +dup type /stringtype ne{ctr get /ctr ctr 1 add N}if}B /id 0 N /rw 0 N +/rc 0 N /gp 0 N /cp 0 N /G 0 N /sf 0 N /CharBuilder{save 3 1 roll S dup +/base get 2 index get S /BitMaps get S get /ch-data X pop /ctr 0 N ch-dx +0 ch-xoff ch-yoff ch-height sub ch-xoff ch-width add ch-yoff +setcachedevice ch-width ch-height true[1 0 0 -1 -.1 ch-xoff sub ch-yoff +.1 sub]/id ch-image N /rw ch-width 7 add 8 idiv string N /rc 0 N /gp 0 N +/cp 0 N{rc 0 ne{rc 1 sub /rc X rw}{G}ifelse}imagemask restore}B /G{{id +gp get /gp gp 1 add N dup 18 mod S 18 idiv pl S get exec}loop}B /adv{cp +add /cp X}B /chg{rw cp id gp 4 index getinterval putinterval dup gp add +/gp X adv}B /nd{/cp 0 N rw exit}B /lsh{rw cp 2 copy get dup 0 eq{pop 1}{ +dup 255 eq{pop 254}{dup dup add 255 and S 1 and or}ifelse}ifelse put 1 +adv}B /rsh{rw cp 2 copy get dup 0 eq{pop 128}{dup 255 eq{pop 127}{dup 2 +idiv S 128 and or}ifelse}ifelse put 1 adv}B /clr{rw cp 2 index string +putinterval adv}B /set{rw cp fillstr 0 4 index getinterval putinterval +adv}B /fillstr 18 string 0 1 17{2 copy 255 put pop}for N /pl[{adv 1 chg} +{adv 1 chg nd}{1 add chg}{1 add chg nd}{adv lsh}{adv lsh nd}{adv rsh}{ +adv rsh nd}{1 add adv}{/rc X nd}{1 add set}{1 add clr}{adv 2 chg}{adv 2 +chg nd}{pop nd}]dup{bind pop}forall N /D{/cc X dup type /stringtype ne{] +}if nn /base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{dup dup +length 1 sub dup 2 index S get sf div put}if put /ctr ctr 1 add N}B /I{ +cc 1 add D}B /bop{userdict /bop-hook known{bop-hook}if /SI save N @rigin +0 0 moveto /V matrix currentmatrix dup 1 get dup mul exch 0 get dup mul +add .99 lt{/QV}{/RV}ifelse load def pop pop}N /eop{SI restore userdict +/eop-hook known{eop-hook}if showpage}N /@start{userdict /start-hook +known{start-hook}if pop /VResolution X /Resolution X 1000 div /DVImag X +/IE 256 array N 0 1 255{IE S 1 string dup 0 3 index put cvn put}for +65781.76 div /vsize X 65781.76 div /hsize X}N /p{show}N /RMat[1 0 0 -1 0 +0]N /BDot 260 string N /rulex 0 N /ruley 0 N /v{/ruley X /rulex X V}B /V +{}B /RV statusdict begin /product where{pop product dup length 7 ge{0 7 +getinterval dup(Display)eq exch 0 4 getinterval(NeXT)eq or}{pop false} +ifelse}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale rulex ruley false +RMat{BDot}imagemask grestore}}{{gsave TR -.1 .1 TR rulex ruley scale 1 1 +false RMat{BDot}imagemask grestore}}ifelse B /QV{gsave newpath transform +round exch round exch itransform moveto rulex 0 rlineto 0 ruley neg +rlineto rulex neg 0 rlineto fill grestore}B /a{moveto}B /delta 0 N /tail +{dup /delta X 0 rmoveto}B /M{S p delta add tail}B /b{S p tail}B /c{-4 M} +B /d{-3 M}B /e{-2 M}B /f{-1 M}B /g{0 M}B /h{1 M}B /i{2 M}B /j{3 M}B /k{ +4 M}B /w{0 rmoveto}B /l{p -4 w}B /m{p -3 w}B /n{p -2 w}B /o{p -1 w}B /q{ +p 1 w}B /r{p 2 w}B /s{p 3 w}B /t{p 4 w}B /x{0 S rmoveto}B /y{3 2 roll p +a}B /bos{/SS save N}B /eos{SS restore}B end +%%EndProcSet +TeXDict begin 39158280 55380996 1000 300 300 (manual.dvi) +@start /Fa 18 119 df<48B5FC39003C03C090383800E0A21570A24913781538A21578 +5BA4484813F0A315E03803800115C0140315803907000700140E5C5C000E13E0B512801D +1C7E9B1F>68 D<48B512F038003C00013813301520A35BA214081500495AA21430EBFFF0 +3801C020A439038040801400A2EC0100EA07005C14021406000E133CB512FC1C1C7E9B1C +>I<D801FEEB01FED8003E14E0012EEB03C01505A21509014EEB0B801513152313470187 +EB4700A21587EC0107D80107130E14021404A20002495AEB0388149014A000045C14C0A2 +000C1380001CEB007839FF8307FF271C7E9B25>77 D<001FB512C0381C070138300E0000 +201480126012405B1280A2000014005BA45BA45BA4485AA41203EA7FFE1A1C799B1E>84 +D<3AFF83FF07F03A3C007001C00038158002F01300A290380170025D13025D13045D1308 +5D131001305B1320D81C405BA2D98071C7FCA2381D0072A2001E1374A2001C1338A20018 +133014201210241D779B29>87 D<3901FF81FE39003E0078011C136015C0011E13809038 +0E0100EB0F026D5A5C1490EB03A014E06D5AA28013021304497EEB10701320EB603813C0 +EB803C3801001C12020006131E121EB4EB7FC01F1C7E9B1F>I<EA01E3EA0717EA0C0F12 +18EA380E12301270A2EAE01CA41339A3EA6079EA319AEA1E0C10127C9115>97 +D<123F1207A2120EA45AA4EA39E0EA3A18EA3C0C12381270130EA3EAE01CA31318133813 +301360EA60C0EA3180EA1E000F1D7C9C13>I<13F8EA0704120CEA1802EA38041230EA70 +08EA7FF0EAE000A5EA60041308EA30101360EA0F800F127C9113>101 +D<EB03C0EB0670130CEB1C601400A25BA53803FF8038007000A55BA5485AA5485AA390C7 +FCA25A12C612E65A12781425819C0D>I<EB78C0EA01C5EA03031206000E1380120C121C +A238380700A4130EA3EA181EEA0C7CEA079CEA001CA25BA2EAC030EAE070EAC1C0007FC7 +FC121A7E9113>I<EA0FC01201A2485AA448C7FCA4EA0E3E13C3380F0380120E121E121C +A338380700A3130E00701340A2131C1480EAE00C38600700121D7E9C15>I<EA01801203 +EA0100C7FCA7121C12261247A2128EA2120E5AA35AA21271A31272A2123C091C7C9B0D> +I<EA0FC01201A2485AA448C7FCA4380E07801308EB11C01321381C4180EB8000001DC7FC +121EEA3FC0EA38E01370A2EA7071A31372EAE032EA601C121D7E9C13>107 +D<EA383EEA4CC3384D0380124E129E129C121CA238380700A3130E00701340A2131C1480 +EAE00C3860070012127C9117>110 D<13F8EA030CEA0E06487E1218123000701380A238 +E00700A3130EA25BEA60185BEA30E0EA0F8011127C9115>I<EA1C3CEA2642EA4687EA47 +07EA8E061300120EA25AA45AA45A123010127C9112>114 D<EA1C06EA2E0EEA4E06A2EA +8E02A2121CA2EA3804A313081230A21310EA3820EA1840EA0F800F127C9113>118 +D E /Fb 13 118 df<EA01E3EA0717EA0C0F1218EA380E12301270A2485AA4EB3880A3EA +607838319900EA1E0E11127E9116>97 D<123F1207A2120EA45AA4EA39E0EA3A30EA3C18 +12381270131CA3EAE038A313301370136013C01261EA2300121E0E1D7E9C12>I<EA01F0 +EA0708120CEA1804EA38081230EA7030EA7FC0EAE000A51304EA60081310EA3060EA0F80 +0E127E9113>101 D<EB38C013C5EA0183EA0303000713801206120EA2381C0700A4130E +A3EA0C1EEA047CEA039CEA001CA25B1260EAF0301370EAE0C0007FC7FC121A809114> +103 D<EA0FC01201A2485AA448C7FCA4EA0E3E13C3380F0380120E121E121CA338380700 +A3130E00701320A2131C144038E00C8038600700131D7E9C18>I<EA01C01203A2EA0180 +C7FCA6121C12271247A21287A2120EA25AA35A1380A21270EA71001232121C0A1C7E9B0E +>I<EA1F801203A2EA0700A4120EA45AA45AA45AA412E2A312E412641238091D7F9C0C> +108 D<39381F81F0394E20C618394640E81CEB80F0EA8F00008E13E0120EA2391C01C038 +A315703938038071A215E115E23970070064D83003133820127E9124>I<EA3C1F384E61 +80384681C0EA4701128F128E120EA2381C0380A3EB070000381310A2130E142038700640 +3830038014127E9119>I<13F8EA030CEA0E06487E1218123000701380A238E00700A313 +0EA25BEA60185BEA30E0EA0F8011127E9114>I<EA3C3CEA4E42EA4687EA470FEA8E1E13 +0CEA0E00A25AA45AA45A123010127E9113>114 D<EA01F0EA060CEA0C04130EEA180CEA +1C00121FEA0FE013F0EA03F8EA0038EA201CEA701812F01310EA8030EA6060EA1F800F12 +7E9113>I<001C13C0EA27011247A238870380A2120EA2381C0700A438180E20A3EA1C1E +380C26403807C38013127E9118>117 D E /Fc 3 125 df<EB01801307131FEB3E0013F8 +485AEA07C0485A003EC7FC12FC12F012FC123EEA0F806C7EEA01F06C7E133EEB1F801307 +130111157E9616>60 D<12C012F012FC123EEA0F806C7EEA01F06C7E133EEB1F80130713 +1FEB3E0013F8485AEA07C0485A003EC7FC12FC12F012C011157E9616>62 +D<12E0B3AE0320779C16>124 D E /Fd 69 128 df<EA8004EA401EEA3FFF7EEA0FFC10 +058A7E00>0 D<EA8004EA401EEA3FFF7EEA0FFCC7FCEA800CEA7FFEEA3FFFEA1FFE100A +8A7E00>I<12F0127E6C7EEA03E0EA0070131813047F7FEB00801440120B81A51A>3 +D<B612FC6C14FE7E3906003800A212077EA31380A41273127B127F1277123F121FEA0F00 +C7FCA21308131C133EEB1C18EB08081F1B81991D>11 D<39F807FFFC6C6C13FEEA7E0139 +010038001380A213C0A212031207381FFFF8127F383F0038003C13781210001813F8EA08 +01EA0607EA03FF7E38007F381300A21308131CEB3E18EB1C080108C7FC1F1C81991D>I< +B612E06C14F07E000EC8FCA5EA0FFE6C6C7E6C7FC7126080A21438A21478A214F8380F01 +F013C7EBFFE06C5B6C90C7FCEA01F8EA001CA4130C13041C1F81991A>26 +D<EB07E0EB3FF0EBFFF84890C7FCEA03F8EA07E0485A5B48C8FC121EA25AA3007FB512E0 +6C14F05A397800200014305A143814785A14F8495A13FF6D5A38603FC0EB0060807E1438 +12100018137812086C13F8380383F0EA01FF6C5BEB1F801C2882A719>I<5AEA8388EAC7 +CCEA438CEA610CEA201CEA183CEA0FF8EA03F00E0981A500>32 D<B612C06C14E07E3900 +01C000A4EA03FF121F5AD87F80C7FC007CC8FC12781270130F497E38303FC0EB7E60EA10 +7C38187870EA0870380430F0EA03B3EA21FF00705B38F81F800070C8FC12201B1C819919 +>39 D<B612FC6C14FE7EC7EA3800A61207EA0F8013C0EBFFF87E7E3801C038A713C8EA00 +DC137EEB1C18EB08081F1B81991D>41 D<1220127012F812701220050582A400>44 +D<128012C012E0B3A512601220031B709911>46 D<120FEA3FC0EA7FE0EA7E30EAF808EA +F00CA2EAE00EEA601EA2EA203EEA18FC120FEA07F8EA01E00F0F809313>48 +D<12E012F012F812E412E6A21267A21227121F120F121F121E123E123C127C12F8127812 +70122012101218120812041206120E121F120F1206081D7D9911>I<EA3FC0EAFFF86C7E +EA380EEA00011480A214C01303A21307EB0F80EA383F383FFF006C5AEA0FF8EA07C0EA00 +207F7F7F7F7FEB008014401219809718>I<EAFFC0EA7FF0EA3FF8EA000C130E131E133E +EA3FFE13FCEA1FF8EA0008130CA2130EA2EA381EEA3E3EEA3FFEEA1FFCEA0FF8EA07E0EA +00101308130413020F19809715>I<6C13080040131C6C133E6C137E381801FC380C03F8 +380607F038030FC03800BF80EB7F0013FEEA01F8A2EA03EC13C413C613861387EA018F13 +9F6CB4FC137E133C171780991D>I<1304EA1806EA0C0712061203A21387A21207120F12 +3FEAFF07EA7E0F1278EA201FEA187FEA0FFF7EEA01F7EA0007A613031301101B809919> +I<13F0EA03F8120713E013801300A27EEA07F0EA3FF8EA7FFCEAFF7EEAF81EEAF0005A12 +60A212207EEA3FF8EA7FFCEAFFFEEAF8005A5AA21260EA3FFCEA1FFEEA07FF101E809D15 +>I<137C13FE487EEBF18013E13800C1C013411301A21303A3EB0780130FA2EB1F00133E +137E485AEA07F8B45AEA7FC06CC7FC1217809818>I<126012F07EEAFFFC6C7E123F0038 +C7FCA21218A21208120C12047E6C7EEA00E0137E131FEB078011137D931A>I<137013F8 +12015B5B5B126012F0EAF870EAFFFC6C7E123F0038C7FCA21218A21208120C12047E6C7E +EA00E0137E131FEB078011197D991A>I<14FE903803FF804913C090380FE060EC801049 +C7FC131EA2EA03FC120F121F1380003EC8FC123C387FFFE06C7F487F3878002014305A14 +3814785A14F8495A13FF6D5A38603FC0EB0060807E143812100018137812086C13F83803 +83F0EA01FF6C5BEB1F801C2882A719>I<EA8080EAC0C0EAE0E0B3A5EA6060EA20200B1B +759914>I<EAFFFEEA7FFF7EEA1C00AD120C1204101281990E>65 +D<B612C06C14E07E390001C000A21303A3380FC780EA1FF713FFD81E0FC7FCEA1C1FEA0C +3F5B3807FD80EA03F93801F1C0EA00011303EA4007EA600F38307F80D81FFFC7FC6C5AEA +03F01B1A819919>I<B7FC6C15807EC70007C7FCA3EA03FE48B5FC5AEB807F90C9FC120E +380601F8EB1FFC381FFFFE4813C3EBFC03D83C307F38180807130C0008130F26060E1FC7 +FC38038EFF6CB45A6C6C5AEB1FE0211A81991F>I<B612FC6C14FE7E39010038001380A2 +13C01203A21207EA1F80127FEA3F00003C13781210001813F8EA0801EA0607EA03FF7E38 +007F381300A4141814081F1B81991D>I<EA03E0EA07F8EA0FFEEB8780EB01C0380E0060 +14101400A5EAFFF06C7E123F000EC7FCB3A412061202142781A50B>I<EA0FC0EA3FF048 +7EEAFE0CEAF802487E00E07F130000607FC7FC1460A2903803FFF86D13FC7FEC7000B3A4 +143014101E278FA50E>I<00F890381FFFF06C6D13F8007E7F0001903800E0007FA213C1 +1480000313C01207121FEA7F81EA3F01123C12101218000813C1000413C3EA03813801FF +C76C13FF131FEB001F1400A215601520251B819923>I<B612E06C14F07E390F807800EB +00F8380E01F0EA0603EB0FE06CB45A00215B003F7F381FFC603807E030C7FC1438A21478 +A214F8381E01F0EA1F87EBFFE06C5B6C90C7FCEA03F8EA0038A21378A2133813101C1F81 +991A>74 D<39F807FFFC6C6C13FEEA7E0139010038001380A213C0A212031207381FFFF8 +127F383F0038003C13781210001813F8EA0801EA0607EA03FF7E38007F381300A4141814 +081F1B81991D>I<7E7E1260A27E121FEA0FF86C7E133E1303EB0180130014007E7E110F +94A500>79 D<B612C06C14E07E390001C000A4EA03FF121F5AD87F80C7FC007CC8FC1278 +1270130F497E38303FC0EB7E60EA107C38187870EA0870380430F0EA03B3EA01FF6C5BEB +1F801B1A819919>I<B612E06C14F07ED80807C7FC120412021201EA0FFF123F5AEA7E10 +0078C8FC1270A2EA3807381FFF806C7F91C7FC0006C8FCA21202EA01826CB4FC6D7E131F +1C1981991A>82 D<B612FC15FE7E39010038001380A213C0A212031207381FFFF8127F38 +3F0038003C13781210001813F8EA0801EA0607EA03FF7E38007F381300A4141814081F1B +81991D>84 D<B612E06C14F07ED80007C7FCA648B4FC120F5AEA3FC0007EC8FC127C1278 +1270A21230A2001013F0380E07F8EA07FF6C13E0C66CC7FC1C1981991A>86 +D<B612E06C14F07E3900038000A6EA01FF120F5A383FC040387E0020007C133012780070 +1338A20030137814F8EA1001380E07F06CB45A6C5BC66CC7FC1C1981991A>I<B612C06C +14E07EC7EAC000A2497EA21303495AEA07FF6C5B6C90C7FCEA000613021303A26D7EEA3F +81EA7FF9EBFFC0EA781FEA30031307EA183F380FFF806C90C7FCEA01F81B1B819919>I< +B612E06C14F07EC7EA7000A31206120F1380EBFFF07E7E0180C7FCA2EB8780EB8FC03801 +9FE0143013BE3800FC38A2EB7878EB38F8131F6D5AEB03E01C1A81991A>I<B612E06C14 +F07E0001C8FCEA00C013601338130EEB07F080147891C7FCA2133FEA07FF121FEA3FF848 +C8FC127C127812301460381C03F0380FFFF86C5BC613801C1A81991A>I<123E127FEAFF +80EAF840EAF060EA6020EA20100C0786A300>92 D<EA8008EAC00C12401260EA201CEA18 +3CEA0FF8EA03F00E0881A400>95 D<6C90383FFFE000406D13F06C7F6C903803C0006C13 +0F3804F81F3807FE3FEBFF7F380FE1FD381F80F9EB81F1383F83E1003D13F113C3EA39C7 +A21219000F13711207000313F1EA000FA214E11307EB03C190C7FC1540241B809923>97 +D<B612FC6C14FEA2397C00380012781230A21210120EEA07F8EA0FFCEA1FFE1380381E00 +78000C13F81303EA060FEA03FF6C13B838007E381300A5141814081F1B81991D>I<B612 +E06C14F07EC7EA7000A31206120F1380EBFFF07E7EEB8038A400011378A33800C070A2EB +40F01330131F6D5A13031C1A81991A>I<B612E06C14F07EC7EA7000A31206120F1380EB +FFF07E7E0180C7FCA21201A212007F13407F1318130EEB07E0EB01F0EB00781C1981991A +>I<B612FC6C14FE7E390E003800AAB512F8A338EE0038127E123E121EC7FCA21308131C +133EEB1C18EB08081F1B81991D>102 D<B612FC6C14FE7E3906003800A212077EA31380 +A41273127B127F1277123F121FEA0F00C7FCA5141814081F1B81991D>I<007FB5FC6C14 +807ED80007C7FCAB127012F812FC12F012E01260A21220EA180FEA0E1F6CB4FCEA01FEEA +007C191B829916>I<B612E06C14F0A2D83C07C7FC121C120E1207EA038713C76CB4FC12 +0F5AEA3FC0007EC8FC127C12781270A21230A2001013F0380E07F8EA07FF6C13E0C66CC7 +FC1C1981991A>I<B612FC6C14FE7EC7EA3800A61207EA0F8013C0EBFFF87E7E3801C038 +A812001340EB001814081F1B81991D>I<B612806C14C07EC7EAE000A31301A3380F03C0 +EA1FC313C7381EE780EA1CFFD80C7FC7FCA2EA07FE6C5A6C7EEA000E7F8013036D7E8013 +001A1A819918>I<B612F86C14FC7E390F01E00000075B138300035B13C7000190C7FCEA +07EE381FEF8048B47E387F7C60387C381038F80018487FA25A140EA20060131EA2002013 +3E6C133C7EC712181E1A81991C>I<39E007FFFCD8780313FE6C7E39060038007EA21380 +A7383FFFF8A3383B8038121F120F1207C7FCA5141814081F1B81991D>I<B612F86C14FC +7ED80038C7FCA5EA01F8487E487E13C1380F8180EB00C0A2120E001E1360A3001C1370A5 +000C1330000413101E1A81991C>I<7E7E1260A27E121FEA0FF8EA03FCEA003E1303EB01 +801300110C94A500>I<39080FFFF86C6C13FCEA060339020070001203A213801207A212 +0FEA3F00B4FC127E007813F01220EA3001EA1003EA0C0FEA07FF7E3800FE701300A41430 +14101E1B80991D>I<007FB5FC6C14807ED80007C7FCAAEA03E7EA7FFFB5FC1387EAF007 +12E01260A2122012106C5AEA061F6CB4FC6C5AEA007C191C829916>114 +D<B612FC6C14FE7E390E003800AAB512F8A338EE0038127E123E121EC7FCA5141814081F +1B81991D>I<B612C06C14E07EC7EA40001460A2147014F0A21301495AEA01FF6C5B6D5A +EB00C01460A21470A214F01220EA3801381F07E0EA07FF00015BD8003FC7FC1B1A819919 +>I<13F8EA03FE487E380FE180EB80C0381F0060121EA2481370A3003813F0007FB512E0 +6C14F05A397800200014305A143814785A14F8495A13FF6D5A38603FC0EB0060807E1438 +12100018137812086C13F8380383F0EA01FF6C5BEB1F801C2682A519>I<B612E06C14F0 +7ED80007C7FCA4EA0FFF123F5A007EC8FC12781270A2EA3807381FFF806C7F91C7FC0006 +C8FCA21202EA01826CB4FC6D7E131F1C1981991A>I<B612C06C14E07EC7EAC000A2497E +A21303495AEA07FF6C5B6C7FC71260A21470A214F0A21301381C03E0EA1F0FEBFFC06C5B +6C48C7FCEA03F6EA00721373A2EB718013300110C7FC1B1F819919>I<B712F016F87E00 +01C7EAE0007FA27FA212031207381FC1FFEA7F81EA3F01003C13C01210121812081204EA +0381EA01FF7E131F90C7FCA315601520251B819923>121 D<121E6C7EEA07E0EA007013 +18EAF804EA7FC2EA3FFBEA01FF38000F801301EB0040120C81A61A>123 +D<127EB4FCEAE0C0EAC0601310EA4008EA3004EA1F02EA0781380001801300110B888200 +>125 D<123FEA7F80EAF040EAE020EAC030A3EA4070EA20F0EA1FE0EA0FC00C0B79961A> +127 D E /Fe 30 121 df<1360EA01E0120F12FF12F31203B3A2387FFF80A2111B7D9A18 +>49 D<127812FCA412781200A6127812FCA4127806127D910D>58 +D<EB0380A2497EA3497EA2497E131BEB3BF81331A2EB60FCA2EBE0FEEBC07EA248487E90 +B5FC481480EB001F4814C00006130FA248EB07E0A239FF803FFEA21F1C7E9B24>65 +D<90381FE0209038FFF8E03803F80F3807C003380F800148C7FC123E1560127E127C00FC +1400A8007C1460127E123E15C07E390F8001803907C003003803F80E3800FFFCEB1FE01B +1C7D9B22>67 D<B512F814FF390FC01FC0EC07E0EC01F015F8140015FC157CA2157EA815 +7CA315F8A2EC01F0EC07E0EC1FC0B6120014F81F1C7E9B25>I<B6FCA2380FC01F140780 +1580A214C1A39038C1C00013C313FFA213C313C113C01560A2EC00E015C0A21401A21403 +EC0F80B6FCA21B1C7E9B1F>I<90380FF00890387FFE383901FC07F83807E001390F8000 +7848C7FC481438123E007E1418127C00FC1400A6EC7FFFA2007CEB01F8127E123E123F7E +EA0F80EA07E03801FC0739007FFE7890380FF818201C7D9B26>71 +D<EAFFFCA2EA0FC0B3A6EAFFFCA20E1C7E9B12>73 D<B512F814FE390FC03F80140FEC07 +C015E0A515C0A2EC0F80EC3F00EBFFFC01C0C7FCABEAFFFCA21B1C7E9B21>80 +D<3807F820381FFEE0EA3C07EA7801EA700012F01460A26C130012FEEAFFE0EA7FFE6C7E +1480000F13C06C13E0EA007FEB03F01301130012C0A214E07E38F001C0EAFC0338EFFF00 +EA83FC141C7D9B1B>83 D<007FB512E0A238781F81007013800060146000E0147000C014 +30A400001400B03807FFFEA21C1C7E9B21>I<EA0FF8EA1C1E383E0F80130714C0121C12 +00137FEA07E7EA1F07123C127C12F8A3EA780B383E13F8EA0FE115127F9117>97 +D<B4FCA2121FA9EB3F80EBE1E0EB8070EB0078143CA2143EA6143CA21478EB8070381EC1 +E0381C3F00171D7F9C1B>I<EA03FCEA0E0EEA1C1F123C1278130E00F8C7FCA61278EB01 +80123C381C0300EA0E0EEA03F811127E9115>I<EB0FF0A21301A9EA01F9EA0F07EA1C03 +EA3C011278A212F8A61278A2123CEA1C03380F0FFEEA03F9171D7E9C1B>I<EA03FCEA0F +07381C0380383C01C0127814E012F8A2B5FC00F8C7FCA3127814607E6C13C0380F038038 +01FC0013127F9116>I<137F3801E3803803C7C0EA0787120FEB8380EB8000A5EAFFF8A2 +EA0F80AEEA7FF0A2121D809C0F>I<B4FCA2121FA9EB0FC0EB31E0EB40F0EB80F8A21300 +AB38FFE7FFA2181D7F9C1B>104 D<121E123FA4121EC7FCA6127FA2121FAEEAFFC0A20A +1E7F9D0E>I<B4FCA2121FA9EB03FCA2EB01C0EB0300130E5B5B137813FC13BE131F7F14 +80EB07C0EB03E0130138FFE7FEA2171D7F9C19>107 D<B4FCA2121FB3A7EAFFE0A20B1D +7F9C0E>I<39FF0FC07E903831E18F3A1F40F20780D980FC13C0A2EB00F8AB3AFFE7FF3F +F8A225127F9128>I<38FF0FC0EB31E0381F40F0EB80F8A21300AB38FFE7FFA218127F91 +1B>I<EA01FC380F0780381C01C0003C13E0387800F0A200F813F8A6007813F0A2383C01 +E0381E03C0380F07803801FC0015127F9118>I<38FF3F80EBE1E0381F80F0EB0078147C +143C143EA6143C147C1478EB80F0EBC1E0EB3F0090C7FCA6EAFFE0A2171A7F911B>I<EA +FE3E1347381E8F80A3381F070090C7FCAAEAFFE0A211127F9114>114 +D<EA1FD8EA3078EA601812E0A2EAF000EAFF80EA7FE013F0EA1FF8EA07FCEA007CEAC01C +A212E01318EAF830EACFC00E127E9113>I<1203A45AA25AA2EA3FFC12FFEA1F00A9130C +A4EA0F08EA0798EA03F00E1A7F9913>I<38FF07F8A2EA1F00AC1301120F380786FFEA01 +F818127F911B>I<38FFC7FCA2381F81C0380F83803807C700EA03EEEA01FC5B1200137C +13FEEA01DF38039F80EA070F380607C0380C03E038FF07FCA216127F9119>120 +D E /Ff 4 122 df<133C13E0EA01C013801203AD13005A121C12F0121C12077E1380AD +120113C0EA00E0133C0E297D9E15>102 D<12F0121C12077E1380AD120113C0EA00E013 +3C13E0EA01C013801203AD13005A121C12F00E297D9E15>I<12C0A21260A37EA37EA37E +A37EA27EA3EA0180A3EA00C0A31360A21330A31318A3130CA31306A31303130110297E9E +15>110 D<12021207A61202A3EA7270EAFFF8EA7270EA0200A21207B11202A60D267E9C +12>121 D E /Fg 39 122 df<EAFFF8A30D037F8C12>45 D<127812FCA4127806067C85 +0F>I<13FE38038380380701C0380E00E0481370003C1378A2003813380078133CA300F8 +133EAF0078133CA3007C137C003C1378A2001C13706C13E0380701C0380383803800FE00 +17257EA31C>48 D<136013E0120312FF12FD1201B3AA487EB512C0A212247BA31C>I<00 +101320381E01C0381FFF8014005BEA13F80010C7FCA713FCEA1307381C0380381801C000 +1013E01200EB00F0A214F8A3127012F8A314F01280EA400114E0382003C038300780381C +0F00EA07FEEA03F015257DA31C>53 D<13FE3803FF80380783C0380E00E04813F0003C13 +70481378A200F8133CA4143EA41278147E7E121C14BE380E013EEA03823800FC3C1300A2 +147C1478A2001C1370003E13F014E0383C01C038180380381C0F00EA0FFEEA03F017257E +A31C>57 D<127812FCA412781200AB127812FCA4127806177C960F>I<1460A314F0A249 +7EA3EB02FC147CA2497EA3497EA201187FEB100FA201207F1407A2496C7EA2EB7FFF90B5 +7EEB800100018090C7FCA2000280157CA248801206001F147F3AFFC003FFF0A224267EA5 +29>65 D<B6FC15C03907C003F0EC00F8157C81151E151FA5151E153E5D5DEC03E090B512 +809038C003E0EC00F8153C153E81811680A6ED1F00A2153E5D4A5AB612E0158021257EA4 +27>I<B512FEECFFC03907C003F0EC00F8153C8181ED0780A2ED03C0A216E01501A216F0 +A916E0A2150316C0A215071680ED0F00151E5D5DEC03F0B612C092C7FC24257EA42A>68 +D<EAFFFEA2EA07C0B3AFEAFFFEA20F257EA414>73 D<EB03FC90381E078090387801E090 +38E0007048487F48487F48C77E48140F001EEC0780A248EC03C0A2007C15E000781401A2 +00F815F0A9007815E0007C1403A2003C15C0003E1407A2001E15806CEC0F006C6C131EA2 +6C6C5BC66C137090387801E090381E0780D903FCC7FC24277DA52B>79 +D<B512FCECFF803907C007E0EC01F0EC00F8157C153C153EA6153C157815F8EC01F0EC07 +C090B5120001C0C7FCB0EAFFFEA21F257DA426>I<007FB612C0A2397801F00300601400 +A20040154000C01560A200801520A400001500B3A4497E48B512F0A223257EA428>84 +D<D8FFFCEB0FFCA2D80FE0EB03E06C48EB01807F00031500A26C6C1302A27F00005CA201 +7C5BA36D5BA2013F13306D1320A26D6C5AA214C001075BA2D903E1C7FCA214F1EB01F2A2 +EB00FCA31478A31430A226267FA429>86 D<3CFFFC07FFE01FFCA23C0FC0007E0003E000 +07023EEB00C01880A26C6C013FEB0100A36C6C90384F8002A36C6C903887C004A3903A7C +0103E008A3903A3E0201F010A36D486C6C5AA3D90F88EB7C40A3D907D8EB7E8002D0133E +A2D903F0013FC7FC4A7FA20101141E4A130EA20100140C4A130436267FA439>I<EA07F8 +EA1C0F383E0380801301001C7F1200A3133FEA03F1EA0F81EA1E01123C127C00F81480A3 +1303A2387C05F1393E08FF003807F03C19177E961C>97 D<120FB4FCA2121F7EAAEB0FC0 +EB3070EB4038EB801EEB000E140FEC0780A215C0A71580140F1500140E6D5A380E403838 +0C20F038081F801A257EA41F>I<EBFF80380380E0380701F0121E121C383C00E0007C13 +00127812F8A71278127C003C1310121C001E132000071340380381803800FE0014177E96 +19>I<143CEB03FCA2EB007C143CAA137EEA03C1380700BC000E137C48133C123C127C12 +7812F8A71278A27E121C001E137C000713BE3903833FC0EA00FC1A257EA41F>I<13FF38 +0383C0380700E0000E1370481378003C133848133CA212F8B512FC00F8C7FCA51278127C +003C1304121C6C13086C13103803C0E038007F0016177F9619>I<131FEB70C03801E1E0 +13C31203380781C0EB8000A8EAFFFEA2EA0780B3EA7FFCA2132580A411>I<141E3801F8 +6338070E87EA1E07381C0380003C13C0007C13E0A5003C13C0001C1380EA1E0738170E00 +EA11F80030C7FCA41238381FFF806C13F014F83838007C48131C0060130E12E0A3007013 +1CA2001C1370380F01E03801FF0018237E971C>I<120FB4FCA2121F7EAAEB0FC0EB1070 +EB2078EB4038EB803CA21300AF39FFF1FFC0A21A257EA41F>I<120E121F5AA27E120EC7 +FCA8120FB4FCA2121F7EB1EAFFE0A20B257FA40F>I<120FB4FCA2121F7EAAECFF80A2EC +7C00143014405C0103C7FC1304130C131E133E13DFEB0F806D7E1303806D7E130080147C +147E39FFF1FFC0A21A257FA41D>107 D<120FB4FCA2121F7EB3ADEAFFF0A20C257FA40F> +I<3A0F07E00FC03AFF187830F09039203C40783A1F401C80383A0F801F003CA2EB001EAF +3BFFF1FFE3FFC0A22A177E962F>I<380F0FC038FF1070EB2078381F4038380F803CA213 +00AF39FFF1FFC0A21A177E961F>I<13FE38038380380E00E0001E13F0481378A248133C +A200F8133EA70078133CA26C1378A26C13F0380F01E0380383803800FE0017177E961C> +I<380F0FC038FF3070EB4038380F801E1300801580140715C0A7EC0F80A21500141EEB80 +1CEB4038EB20F0EB1F8090C8FCA8EAFFF0A21A217E961F>I<380F0F8038FF31C0EB23E0 +EA1F43EA0F83EB81C0EB800090C7FCAEEAFFF8A213177F9616>114 +D<EA07F1EA180BEA3007487EEAE001A300F8C7FC127F13F0EA3FFCEA0FFEEA03FFEA001F +38800780A2EAC003A300E01300EAF006EACC0CEA83F011177E9616>I<7FA41201A31203 +1207120F48B4FCB5FCEA0780AB1480A61203EBC100EA01E2EA007C11217FA016>I<000F +133C38FF03FCA2381F007C6C133CAE147C7E14BE3903C33FC0EA00FC1A177E961F>I<39 +FFE03FC0A2390F800E00EB000C38078008A2EBC01800031310A26C6C5AA26C6C5AA2EBF8 +C0EB7880A2013DC7FCA27FA3130CA21A177F961D>I<3AFFE3FF07F8A23A1F007801E06C +9038380080143CD80780EB0100145C145E3903C0DE02148E9038E08F063901E107041584 +D800F11388EBF20315C8017E13D0EB7C0115F090383800E0A201185B0110134025177F96 +28>I<39FFE0FFC0A2390F803C00000713303803C0206D5A00015BD800F1C7FC137B133E +133C7F131FEB3780EB67C01343EB81E048C67E487F00061378001F137C39FF80FFC0A21A +177F961D>I<39FFE03FC0A2390F800E00EB000C38078008A2EBC01800031310A26C6C5A +A26C6C5AA2EBF8C0EB7880A2013DC7FCA27FA3130CA21308A25BA212F85B1360EAB840EA +6180001EC8FC1A217F961D>I E /Fh 88 127 df<EB7E1F3901C1B180390303E3C00007 +13C3000EEBC180903801C000A6B512FC380E01C0B0387F87FC1A1D809C18>11 +D<137E3801C180EA0301380703C0120EEB018090C7FCA5B512C0EA0E01B0387F87F8151D +809C17>I<126012F0A71260AD1200A5126012F0A21260041E7C9D0C>33 +D<EA6060EAF0F0EAF8F8EA6868EA0808A3EA1010A2EA2020EA4040EA80800D0C7F9C15> +I<9038030180A39038060300A5EB0C06A4495A007FB512F8B612FC3900301800A4495AA4 +B612FC6C14F83900C0600048485AA438030180A4D80603C7FCA31E257E9C23>I<1380A2 +EA07E0EA1898EA3084EA6082EA4081EAC087138FA21386EAE0801270127EEA3FC0EA1FF0 +EA0FF8EA03FCEA00BE138E13871260EAF083A212E0EA808212401384EA2088EA1890EA07 +E0EA0080A210217E9E15>I<000F14C0EA188039306003803970380700386027FB38E010 +065CA25CA25C5CEA602000705B38304180EA1881390F0303C03900060620EC0C1090380C +1C08EB1818EC380413301360A213C0A2EA01803903001808141C0006EB0C1048EB062000 +04EB03C01E217E9E23>I<13E0EA0310EA0608A2120EA45BA25B6C5AEC3FE09038800F80 +EC06000003130412073809C00800115BEA30E03820F020EA607038E03840EB3C80131C90 +380F00207F0070EB8040383009C0391830E180390FC03F001B1F7E9D20>I<126012F012 +F812681208A31210A2122012401280050C7C9C0C>I<1380EA0100120212065AA25AA25A +A35AA412E0AC1260A47EA37EA27EA27E12027EEA0080092A7C9E10>I<7E12407E12307E +A27EA27EA37EA41380AC1300A41206A35AA25AA25A12205A5A092A7E9E10>I<1203A4EA +C30CEAE31CEA7338EA1FE0EA0780A2EA1FE0EA7338EAE31CEAC30CEA0300A40E127D9E15 +>I<1306ADB612E0A2D80006C7FCAD1B1C7E9720>I<126012F0A212701210A41220A21240 +1280040C7C830C>I<EAFFE0A20B0280890E>I<126012F0A2126004047C830C>I<130113 +031306A3130CA31318A31330A31360A213C0A3EA0180A3EA0300A31206A25AA35AA35AA3 +5AA35AA210297E9E15>I<EA03C0EA0C30EA1818EA300CA2EA700EEA6006A2EAE007ADEA +6006A2EA700EEA300CA2EA1818EA0C30EA07E0101D7E9B15>I<5A1207123F12C71207B3 +A5EAFFF80D1C7C9B15>I<EA07C0EA1830EA201CEA400C130EEAF00F12F81307A21270EA +000F130EA2131CA213381370136013C0EA0180EA0300EA0601120C1218EA1002EA3FFE12 +7F12FF101C7E9B15>I<EA07E0EA1830EA201CA2EA781E130E131E1238EA001CA2131813 +301360EA07C0EA0030131CA2130E130FA2127012F8A3EAF00EEA401C1220EA1830EA07C0 +101D7E9B15>I<130CA2131C133CA2135C13DC139CEA011C120312021204120C12081210 +12301220124012C0B512C038001C00A73801FFC0121C7F9B15>I<EA300CEA3FF813F013 +C0EA2000A6EA23E0EA2C30EA3018131CEA200E1200130FA3126012F0A3EA800EEA401E13 +1CEA2038EA1870EA07C0101D7E9B15>I<EA03E0EA0C30EA1008EA200C13061260A21270 +A2EA7C0CEA3E18EA3FB0EA1FE0EA07F013F8EA18FCEA307EEA601E130FEAC0071303A4EA +60021304EA300CEA1C10EA07E0101D7E9B15>56 D<EA03C0EA0C30EA1818EA300C1270EA +600EEAE006A21307A51260EA700F1230EA1817EA0C27EA07C7EA0006A2130EEA300C1278 +13181270EA2030EA10C0EA0F80101D7E9B15>I<126012F0A212601200AA126012F0A212 +6004127C910C>I<126012F0A212601200AA126012F0A212701210A41220A21240128004 +1A7C910C>I<007FB512C0B612E0C9FCA8B612E06C14C01B0C7E8F20>61 +D<EA0FE0EA3038EA401CEAE00E12F0A3EA000C131C1330136013C0138012011300A6C7FC +A51203EA0780A2EA03000F1D7E9C14>63 D<EB3F80EBC0603803001800041304487F487F +39201F0080EB70803940E04040EBC0381241D8818013201283A51281EA41C000401440EB +E078392070988090381F0F006CC8FC7E7E0003EB01E03900C01F8090383FF0001B1D7E9C +20>I<1306A3130FA3EB1780A2EB37C01323A2EB43E01341A2EB80F0A338010078A2EBFF +F83802003CA3487FA2000C131F80001E5BB4EBFFF01C1D7F9C1F>I<B512C0380F007880 +80140E140FA4140E141E5C14F8EBFFF0EB003C8080801580A5EC0F00A2141E1478B512E0 +191C7F9B1D>I<90381F8080EBE0613801801938070007000E13035A14015A00781300A2 +127000F01400A8007014801278A212386CEB0100A26C13026C5B380180083800E030EB1F +C0191E7E9C1E>I<B512C0380F00F0143C140E80A2EC038015C01401A215E0A815C0A214 +03158014071500140E5C1470B512C01B1C7E9B20>I<B512FC380F003C140C1404A21406 +1402A213011400A35B13FF13037FA3140113001402A31406A2140C143CB512FC181C7E9B +1C>I<B512F8380F007814181408A2140C1404A213011400A35B13FF13037FA490C7FCA8 +EAFFF8161C7E9B1B>I<90381F8080EBE0613801801938070007000E13035A14015A0078 +1300A2127000F01400A6ECFFF0EC0F80007013071278A212387EA27E6C130B3801801138 +00E06090381F80001C1E7E9C21>I<39FFF0FFF0390F000F00AC90B5FCEB000FAD39FFF0 +FFF01C1C7F9B1F>I<EAFFF0EA0F00B3A8EAFFF00C1C7F9B0F>I<3807FF8038007C00133C +B3127012F8A21338EA7078EA4070EA30E0EA0F80111D7F9B15>I<39FFF01FE0390F0007 +80EC060014045C5C5C5C5C49C7FC13021306130FEB17801327EB43C0EB81E013016D7E14 +78A280143E141E80158015C039FFF03FF01C1C7F9B20>I<EAFFF8EA0F8090C7FCB01408 +A31418A2141014301470EB01F0B5FC151C7E9B1A>I<B46CEBFF80000FECF800A2390BC0 +0178A33809E002A23808F004A3EB7808A3EB3C10A3EB1E20A3EB0F40A2EB0780A3EB0300 +121C3AFF8307FF80211C7E9B26>I<B4EB1FF0390F8003809038C00100120BEA09E0EA08 +F0A21378133C133E131E130F14811307EB03C1EB01E114F113001479147D143D141FA280 +8080121CB46C7E1C1C7F9B1F>I<EB3F80EBE0E03803803848487E000E7F487F003C1480 +00381303007814C0A20070130100F014E0A8007014C000781303A200381480003C130700 +1C14006C130E6C5B6C6C5A3800E0E0EB3F801B1E7E9C20>I<B51280380F00E01478143C +141C141EA5141C143C147814E0EBFF8090C7FCACEAFFF0171C7E9B1C>I<EB3F80EBE0E0 +3803803848487E000E7F487F003C148000381303007814C0A20070130100F014E0A80070 +14C000781303A200381480383C0E07D81C111300380E208E0007135C3803A0783900F0E0 +20133FEB0060EC3060EC38E0EC3FC0A2EC1F80EC0F001B257E9C20>I<B5FC380F01E0EB +007880141C141EA4141C143C5CEB01E001FFC7FCEB01E0EB0070147880A61510A2141CA2 +39FFF00E20C7EA03C01C1D7E9B1F>I<3807E080EA1C19EA30051303EA600112E01300A3 +6C13007E127CEA7FC0EA3FF8EA1FFEEA07FFC61380130FEB07C0130313011280A300C013 +80A238E00300EAD002EACC0CEA83F8121E7E9C17>I<007FB512C038700F010060130000 +401440A200C014201280A300001400B1497E3803FFFC1B1C7F9B1E>I<39FFF01FF0390F +000380EC0100B3A26C1302138000035BEA01C03800E018EB7060EB0F801C1D7F9B1F>I< +39FFE00FF0391F0003C0EC01806C1400A238078002A213C000035BA2EBE00C00011308A2 +6C6C5AA213F8EB7820A26D5AA36D5AA2131F6DC7FCA21306A31C1D7F9B1F>I<3AFFE1FF +C0FF3A1F003E003C001E013C13186C6D1310A32607801F1320A33A03C0278040A33A01E0 +43C080A33A00F081E100A39038F900F3017913F2A2017E137E013E137CA2013C133C011C +1338A20118131801081310281D7F9B2B>I<39FFF07FC0390FC01E003807800CEBC00800 +035B6C6C5A13F000005BEB7880137C013DC7FC133E7F7F80A2EB13C0EB23E01321EB40F0 +497E14783801007C00027F141E0006131F001F148039FF807FF01C1C7F9B1F>I<39FFF0 +03FC390F8001E00007EB00C06D13800003EB01006D5A000113026C6C5A13F8EB7808EB7C +18EB3C10EB3E20131F6D5A14C06D5AABEB7FF81E1C809B1F>I<387FFFF0EA7C01007013 +E0386003C0A238400780130F1400131E12005B137C13785BA2485A1203EBC010EA0780A2 +EA0F00481330001E13205A14604813E0EAF803B5FC141C7E9B19>I<12FEA212C0B3B312 +FEA207297C9E0C>I<EA0808EA1010EA2020EA4040A2EA8080A3EAB0B0EAF8F8EA7878EA +30300D0C7A9C15>I<12FEA21206B3B312FEA20729809E0C>I<120C12121221EA4080EA80 +400A057B9B15>I<1208121012201240A21280A312B012F812781230050C7D9C0C>96 +D<EA1FC0EA3070EA78387F12301200A2EA01FCEA0F1C12381270126000E01340A3EA603C +38304E80381F870012127E9115>I<12FC121CAA137CEA1D87381E0180381C00C014E014 +601470A6146014E014C0381E018038190700EA10FC141D7F9C17>I<EA03F8EA0C0CEA18 +1E1230EA700CEA600012E0A61260EA70021230EA1804EA0C18EA03E00F127F9112>I<EB +1F801303AAEA03F3EA0E0BEA1807EA30031270126012E0A6126012701230EA1807EA0E1B +3803E3F0141D7F9C17>I<EA07E0EA0C30EA1818EA300CEA700EEA600612E0EAFFFEEAE0 +00A41260EA70021230EA1804EA0C18EA03E00F127F9112>I<13F8EA018CEA071E1206EA +0E0C1300A6EAFFE0EA0E00B0EA7FE00F1D809C0D>I<EB03803807C4C0EA1C7838383880 +38301800EA701CA4EA3018EA38386C5AEA27C00020C7FCA21230EA3FF86CB4FC1480EA20 +03386001C0EAC000A33860018038300300EA1C0EEA07F8121C7F9215>I<12FC121CAA13 +7C1387EA1D03001E1380121CAD38FF9FF0141D7F9C17>I<1218123CA21218C7FCA712FC +121CB0EAFF80091D7F9C0C>I<13C0EA01E0A2EA00C01300A7EA07E01200B3A21260EAF0 +C012F1EA6180EA3E000B25839C0D>I<12FC121CAAEB0FE0EB0780EB06005B13105B5B13 +E0121DEA1E70EA1C781338133C131C7F130F148038FF9FE0131D7F9C16>I<12FC121CB3 +A9EAFF80091D7F9C0C>I<39FC7E07E0391C838838391D019018001EEBE01C001C13C0AD +3AFF8FF8FF8021127F9124>I<EAFC7CEA1C87EA1D03001E1380121CAD38FF9FF014127F +9117>I<EA03F0EA0E1CEA1806487E00701380EA600100E013C0A600601380EA70030030 +1300EA1806EA0E1CEA03F012127F9115>I<EAFC7CEA1D87381E0180001C13C0EB00E0A2 +1470A614E0A2EB01C0001E1380381D0700EA1CFC90C7FCA7B47E141A7F9117>I<3803E0 +80EA0E19EA1805EA3807EA7003A212E0A61270A2EA38071218EA0E1BEA03E3EA0003A7EB +1FF0141A7F9116>I<EAFCE0EA1D38EA1E78A2EA1C301300ACEAFFC00D127F9110>I<EA1F +90EA2070EA4030EAC010A212E0EAF800EA7F80EA3FE0EA0FF0EA00F8EA8038131812C0A2 +EAE010EAD060EA8FC00D127F9110>I<1204A4120CA2121C123CEAFFE0EA1C00A91310A5 +120CEA0E20EA03C00C1A7F9910>I<38FC1F80EA1C03AD1307120CEA0E1B3803E3F01412 +7F9117>I<38FF07E0383C0380381C0100A2EA0E02A2EA0F06EA0704A2EA0388A213C8EA +01D0A2EA00E0A3134013127F9116>I<39FF3FC7E0393C0703C0001CEB01801500130B00 +0E1382A21311000713C4A213203803A0E8A2EBC06800011370A2EB8030000013201B127F +911E>I<38FF0FE0381E0700EA1C06EA0E046C5AEA039013B0EA01E012007F12011338EA +021C1204EA0C0E487E003C138038FE1FF014127F9116>I<38FF07E0383C0380381C0100 +A2EA0E02A2EA0F06EA0704A2EA0388A213C8EA01D0A2EA00E0A31340A25BA212F000F1C7 +FC12F312661238131A7F9116>I<EA7FFCEA70381260EA407013F013E0EA41C012031380 +EA0700EA0F04120E121CEA3C0CEA380812701338EAFFF80E127F9112>I<EA1C04EA3F08 +EA43F0EA80E00E047D9B15>126 D E /Fi 24 118 df<ED01C04B7EA34B7EA34B7EA24B +7EA34B7E1539A2ED79FF1570A24B6C7EA34A486C7EA2020380ED801FA2020780ED000FA2 +4A80020E1307A24A6D7EA34A6D7EA202788002707FA202F0814A147F91B7FC4982A202C0 +C7123F49486E7EA349C86C7EA24982010E1507A2011E82011C1503A2496F7EA2137801FC +6F7E486C5D260FFF80020713C0B500F091B61280A341427DC148>65 +D<B912F0A3000101C0C7FC6C6C48EC0FF8170717011700A218781838183CA2181CA5041C +7FA395C7FCA3163CA2167C16FC150391B5FCA3EC80031500167C163CA2161CA3F00380A3 +93C7EA0700A560180EA2181EA2183EA26018FC17011703170F48486C14FFB95AA339407C +BF41>69 D<DB1FFC14C04AB5EA8001020714E0913A1FF803F803913A7F80003C07D901FE +C7120FD903F8EC078FD90FF0EC01DFD91FC0EC00FF4948157F49C9FC01FE163F0001171F +5B4848160F1207491607120F48481603A3485A1801127FA34993C8FC12FFAC007F0303B6 +12807FA293C7EBE000003F715A183F6C7EA36C7E12077F12036C7E7F1200137F6D7ED91F +E0157F6D6C15FFD903FCEC01EF6D6CEC03C79026007FC0EB0F87DA1FFCEBFF030207B5EA +FC010201ECE0009126001FFEC9FC41427BC04B>71 D<B500C0933807FFFEA300016D4C13 +00D8007F18FCD977F0161DA3D973F81639A2D971FC1671A3D970FE16E1A2027FED01C1A3 +6E6CEC0381A26E6CEC0701A36E6C140EA26E6C141CA36E6C1438A26E6C1470A36E6C14E0 +A2037FEB01C0A392393F800380A292391FC00700A392380FE00EA26F6C5AA36F6C5AA26F +6C5AA36F6C5AA2EE7FC0A213F8705A487E260FFF806DC7EA07FFB500F80303B512FEA216 +0E4F407CBF58>77 D<D903FE130690391FFFE00E017F13F89039FE01FC1E3A03F0003E3E +D807C0130F4848EB03FE90C71201481400003E157EA248153EA2161E12FCA3160E7EA27E +6C92C7FC7F7FEA3FF013FC381FFFC06C13FC6CEBFFC06C14F86C14FF6C816D14E0011F80 +010180D9001F7F14019138001FFEED07FF15016F1380167F163F17C0161F126000E0150F +A56C1680A36CED1F007E163E7E6C5D01C05CD8F9E0495AD8F8FC495A3AF07FC01FC0D8E0 +1FB55A010349C7FC39C0003FF02A427BC035>83 D<003FB912F0A3903BF0003FF0003F01 +806D48130748C7ED03F8007E1701007C170000781878A300701838A548181CA5C81600B3 +B34B7E4B7E0103B7FCA33E3F7DBE45>I<B600C090383FFFFEA3000101E0C7000313E026 +007F809138007F00183EA2181CB3B3A4013F5EA280131F606D7E6013076D6C4A5A6E4A5A +01014BC7FCD900FE140E023F143CDA1FC013F891390FF807F00203B512C0020091C8FCED +0FF83F417CBF48>I<003FB500E090387FFFFEA3C66C48C7000F13C0D91FF8DA07FCC7FC +010F6F5A18E06D6C5D6D7E4D5A6D6C92C8FC6D6D5B171E6E6C5B6E6C133817786E6C5B6E +6C5B16016E6C485ADA03FE5B16076E6C48C9FC6E138EED7FDE16FC6F5A6F5AA26F7E6F7E +A282825D031E7F92381C7FC0153C4B6C7E4B6C7E15E002016D7E4A486C7E4B6C7E14074A +486C7E020E6D7F141E4A6E7E02386E7E14784A6E7E49486E7E5C01036F7E49486E7EA201 +0F6F7E013F6F7F496C4A7F2607FFF002077FB500FC023FEBFFE0A343407EBF48>88 +D<EB1FF890B5FC3903F00FC039078003E0390E0001F0391F8000F86D7F486C137E157FA2 +6F7E6C5A6C5A0002C7FCC8FCA4EC7FFF0107B5FC90383FE03FEBFF00EA01FCEA07F0485A +485A485A90C7FC5AEE81C012FEA3157FA3007F14DFEC019F3B3F80038FC3803A1FC0070F +E73B07F01C07FF003A01FFF803FE3A003FE000F82A2B7CA930>97 +D<49B4FC010F13C090381F03F090387C00F849133C4848133E48487F0007EC0F80484814 +C0121F491307003F15E0A2127F90C713F01503A25AA290B6FCA290C9FCA57EA36C7EA216 +706C7E000F15E0A26C6CEB01C06C7E0001EC0380D800FCEB0700013E131E90381F80F890 +3807FFF001001380242B7DA92B>101 D<EC1FC0ECFFF0903803F03C903807C07E90380F +80FE90381F01FF133F137EA29038FE00FE49137C000114101500AEB6FCA3D801FCC7FCB3 +AF48B4FCB512FEA320427DC11D>I<D903FC133F903A1FFF81FFC0903A3E07C7C7E09039 +F801FE073901F000FC0003ED03C0484890387E018093C7FC48487FA2001F81A7000F92C7 +FCA26C6C137EA26C6C5B00015C6D485A39033E07C06DB45A260703FCC8FC0006CAFCA212 +0E120FA36C7E13E090B512F06C14FF6C15C06C15F06D800003B67E3A07C0000FFE48C8FC +001E153F4881007C168048150FA6007CED1F00003C151E6C5D6C5DD807C0495AD803F0EB +07E0D800FEEB3F8090261FFFFCC7FC010113C02B3D7DA830>I<EA01FC12FFA312071203 +1201B215FF020713E091380F03F891383800FC4A137E14C0D9FD80137F8201FFC71380A2 +5BA25BB3A7486CEC7FC0B5D8F81FB5FCA330417DC035>I<EA01E0487E487E487EA46C5A +6C5A6C5AC8FCACEA01FC12FFA3120712031201B3AD487EB512F0A3143F7DBE1A>I<143C +147E14FF491380A46D1300147E143C91C7FCACEC3F80EB3FFFA31300147F143FB3B3A612 +3E127FD8FF8013005C147EA2495A007E5B383C01F0381F03E0380FFF80D801FEC7FC1952 +85BE1D>I<EA01FC12FFA3120712031201B392383FFFE0A392381FFE00ED0FF816E01680 +93C7FC151E153815F04A5A4A5A4A5A4AC8FC5C4A7EECFFC013FD9038FFCFE0EC87F0EC03 +F813FC496C7E6E7EA2157F6F7E6F7EA26F7E6F7EA26F7E8282486CECFF80B5D8F01F13F8 +A32D417EC032>I<EA01FC12FFA3120712031201B3B3B3487EB512F8A315417DC01A>I<27 +03F801FFEC7FC000FF01079039C001FFF0913B1E03F00780FC913B3801F80E007E000790 +276000FC187F0003495C2601F9806D4880047E141F01FBC7D87FC08001FE5DA34992C7FC +B3A7486C4A6C497EB5D8F83FD9FE0FB51280A349297CA850>I<D803F813FF00FF010713 +E091380F03F891383800FC000749137E000313C02601F980137F8201FBC71380A213FEA2 +5BB3A7486CEC7FC0B5D8F81FB5FCA330297DA835>I<ECFF80010713F090381F80FC9038 +7E003F01F8EB0F8048486D7E48486D7E00078148486D7EA248486D7EA2003F8190C8127E +48157FA3481680AA6C1600A26D5C003F5DA2001F5D6D1301000F5D6C6C495A00035D6C6C +495A6C6C495A017E013FC7FC90381F80FC903807FFF001001380292B7DA930>I<3901F8 +03F000FFEB0FF8EC3C3CEC707E0007EBC0FF12033801F980EBFB00157E151801FE1300A4 +5BB3A548B4FCB512FEA320297EA825>114 D<90383FF0183901FFFC383907E01F78390F +0003F8001E1301481300481478A300F81438A37E7E6C1400EA7FE013FF6C13F06C13FE6C +EBFF806C14C0000114E06C6C13F0010313F89038001FFC14030060130100E0EB00FE157E +7E153EA37E153C7E15787E6C14F039F38001E039F1F00F8039E07FFF0038C00FF81F2B7D +A926>I<131CA6133CA4137CA213FCA2120112031207001FB512E0B6FCA2D801FCC7FCB3 +A21538AA000014707F137E6D13E06D13C090380FC380903807FF00EB00FE1D3A7EB825> +I<D801FCEC3F8000FFEC1FFFA3000714000003157F0001153FB3A6167FA316FF1200ED01 +BF017E15C0013E9038033FE06D010E13FF90380FC03C903803FFF09026007FC01380302A +7DA835>I E end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 300dpi +TeXDict begin +%%PaperSize: a4 +%%BeginPaperSize: a4 +a4 +%%EndPaperSize + +%%EndSetup +%%Page: 1 1 +1 0 bop 500 519 a Fi(Gurm)l(ukhi)33 b(for)f(T)1155 539 +y(E)1208 519 y(X)p Fh(*)632 710 y Fi(Us)r(er)g(Man)l(ual)766 +862 y Fg(V)-5 b(ers)q(ion)18 b(1.0)739 912 y(Oct)o(ob)q(er)e(1995)604 +1799 y Fi(Am)n(arjit)32 b(Sin)o(gh)p 0 2624 600 2 v 42 +2670 a Fh(*)20 b(T)106 2679 y(E)129 2670 y(X)14 b(i)q(s)f(a)h(trad)o +(em)o(ar)o(k)g(of)f(t)n(h)o(e)i(Am)o(er)q(ican)d(Ma)o(t)n(h)o(em)o(a)o +(t)o(ical)g(So)q(ciet)o(y)p eop +%%Page: 2 2 +2 1 bop 83 42 a Fg(In)n(tro)r(d)n(u)n(ct)n(ion)83 135 +y Fh(Th)o(e)13 b(purp)q(os)q(e)h(of)e(t)n(h)o(e)i(\\Gurm)n(ukhi)d(for)h +(T)739 144 y(E)762 135 y(X")h(soft)o(w)o(are)g(pac)o(kage)f(i)q(s)g(t)o +(o)h(con)o(v)o(ert)h(t)n(h)o(e)g(c)o(h)o(aract)o(ers)g(in)e(a)h(do)q +(c-)0 185 y(u)o(m)o(en)o(t)f(f)q(rom)f(En)o(gli)q(sh)h(Alph)o(a)o(b)q +(et)h(t)o(o)g(Gurm)n(ukhi)e(\(scr)q(ipt)i(for)g(t)n(h)o(e)h(Pu)o(nja)o +(bi)e(lan)o(guage\),)g(u)o(t)o(ilizin)o(g)g(t)n(h)o(e)i(T)1658 +194 y(E)1681 185 y(X[1][2])0 235 y(an)o(d)i(MET)m(AF)o(ONT*[3])f(soft)o +(w)o(are)i(pac)o(kage)q(s.)26 b(T)793 243 y(E)816 235 +y(X)16 b(i)q(s)g(a)g(t)o(yp)q(e)q(s)q(et)n(t)o(in)o(g)i(syst)o(em)e(d)o +(ev)o(elo)o(p)q(e)q(d)h(b)o(y)f(t)n(h)o(e)h(Am)o(er)q(ican)0 +284 y(Ma)o(t)n(h)o(em)o(a)o(t)o(ical)c(So)q(ciet)o(y)m(,)j(us)q(e)q(d)g +(wid)o(ely)g(on)f(Unix)g(syst)o(ems,)h(an)o(d)f(o)q(ccass)q(ion)o(ally) +g(on)h(ot)n(h)o(er)g(o)o(p)q(era)o(t)o(in)o(g)f(en)o(viron-)0 +334 y(m)o(en)o(t)o(s.)22 b(MET)m(AF)o(ONT)16 b(i)q(s)e(a)h(fon)o(t)g +(gen)o(era)o(t)o(ion)g(t)o(o)q(ol)g(sup)o(p)q(ort)o(e)q(d)h(b)o(y)f(T) +1128 343 y(E)1152 334 y(X.)g(Bot)n(h)g(T)1335 343 y(E)1359 +334 y(X)g(an)o(d)g(MET)m(AF)o(ONT)h(are)0 384 y(f)q(ree)d(soft)o(w)o +(are)g(pac)o(kage)q(s)g(whic)o(h)f(can)h(b)q(e)f(do)o(wnload)o(e)q(d)h +(f)q(rom)d(T)1007 393 y(E)1031 384 y(X)i(arc)o(hiv)o(e)h(s)q(it)o(e)q +(s[4].)k(A)12 b(w)o(or)o(kin)o(g)h(kno)o(wle)q(dge)g(of)0 +434 y(T)23 443 y(E)46 434 y(X)h(will)f(grea)o(t)n(ly)h(h)o(elp)g(in)f +(us)q(in)o(g)h(t)n(h)o(e)g('Gurm)n(ukhi)e(for)i(T)918 +443 y(E)941 434 y(X')f(pac)o(kage.)83 484 y(Thi)q(s)g(do)q(cu)o(m)o(en) +o(t)f(pro)o(vid)o(e)q(s)i(inform)o(a)o(t)o(ion)c(for)i(prepar)q(in)o(g) +i(inpu)o(t)f(t)o(ext)g(\014le)q(s)h(an)o(d)f(us)q(e)g(of)g(t)n(h)o(e)g +('Gurm)n(ukhi)e(for)0 533 y(T)23 542 y(E)46 533 y(X')g(soft)o(w)o(are.) +17 b(Thi)q(s)11 b(i)q(s)g(t)n(h)o(e)h(\014rst)g(v)o(ers)q(ion)g(of)e(t) +n(h)o(e)j(soft)o(w)o(are)e(an)o(d)g(it)g(m)o(ay)f(u)o(n)o(d)o(ergo)i(c) +o(h)o(an)o(ge)q(s)g(in)f(t)n(h)o(e)h(n)o(ear)h(fu)o(t)o(ure,)0 +583 y(so)h(k)o(eep)h(an)e(ey)o(e)i(ou)o(t)f(for)f(enh)o(ance)q(d)j(fu)o +(t)o(ure)e(releas)q(e)q(s.)83 677 y Fg(Ac)n(kno)n(wle)r(dgem)n(en)n(t) +83 770 y Fh(Th)o(e)g(Gurm)n(ukhi)e(pac)o(kage)i(w)o(as)g(inspire)q(d)g +(b)o(y)g(t)n(h)o(e)g(Dev)n(an)o(agar)q(i)e(scr)q(ipt)i(gen)o(era)o(t)o +(ion)g(pac)o(kage)g(\\Dev)n(an)o(agar)q(i)0 820 y(for)f(T)86 +829 y(E)109 820 y(X)p Ff(y)q Fh(")g(whic)o(h)g(i)q(s)g(d)o(ev)o(elo)o +(p)q(e)q(d)g(b)o(y)g(F)m(rans)h(J.)f(V)m(el)o(t)n(h)n(ui)q(s)h(an)o(d)f +(h)o(as)g(b)q(een)h(brough)o(t)f(t)o(o)h(y)o(ou)f(wit)n(h)g(hi)q(s)g(p) +q(ermi)q(ss)q(ion)0 870 y(t)o(o)i(sup)o(p)q(ort)g(Gurm)n(ukhi)e(scr)q +(ipt.)21 b(I)14 b(w)o(ould)g(also)g(lik)o(e)g(t)o(o)h(t)n(h)o(ank)f(m)o +(y)f(mot)n(h)o(er)h(for)h(rep)q(ea)o(t)o(e)q(dly)g(prompt)o(in)o(g)e(m) +o(e)h(t)o(o)0 919 y(wr)q(it)o(e)e(a)h(let)n(t)o(er)h(t)o(o)f(h)o(er)g +(in)g(Gurm)n(ukhi.)j(Last,)c(bu)o(t)i(not)e(least,)h(I)g(w)o(ould)f +(lik)o(e)g(t)o(o)h(t)n(h)o(ank)g(ev)o(ery)o(on)o(e)g(wh)o(o)g(migh)o(t) +d(us)q(e)0 969 y(t)n(hi)q(s)k(soft)o(w)o(are)g(pac)o(kage.)83 +1063 y(If)g(y)o(ou)f(h)o(a)o(v)o(e)g(comm)o(en)o(t)o(s)g(or)h(sugge)q +(st)o(ion,)f(feel)h(f)q(ree)h(t)o(o)f(s)q(en)o(d)g(t)n(h)o(em)g(t)o(o)g +(m)o(e)e(a)o(t)i(t)n(h)o(e)h(follo)o(win)o(g)c(addre)q(ss:)14 +1123 y(E-m)o(ail:)k(as)q(in)o(gh@ev)o(olvin)o(g.com)14 +1173 y(P)o(ost)o(al)f(Mail:)j(Am)o(arjit)12 b(Sin)o(gh)14 +1223 y(8405)h(E.)g(Hamp)q(d)o(en)h(Av)o(e)g(#11N)f(Den)o(v)o(er)i(CO)f +(80231)e(USA)14 1273 y(A-3)h(Mansaro)o(v)o(er)i(Gard)o(en,)f(New)g +(Delhi)f(110015)f(In)o(dia)83 1410 y Fg(Prepar)q(in)o(g)k(a)i(Do)r(cu)o +(m)n(en)n(t)e(for)i(T)-5 b(rans-lit)n(era)o(t)n(ion)83 +1503 y Fh(A)20 b(do)q(cu)o(m)o(en)o(t)g(i)q(s)g(init)o(ially)e(crea)o +(t)o(e)q(d)k(us)q(in)o(g)e(regular)g(ASCI)q(I)g(t)o(ext.)38 +b(Th)o(e)20 b(t)o(ext)h(i)q(s)f(t)n(h)o(en)h(con)o(v)o(ert)o(e)q(d)g +(in)o(t)o(o)0 1553 y(Gurm)n(ukhi)10 b(us)q(in)o(g)i(s)q(imple)e +(translit)o(era)o(t)o(ion)h(rule)q(s,)i(an)o(d)f(most)f(of)h(T)1056 +1562 y(E)1079 1553 y(X)g(fea)o(t)o(ure)q(s)i(f)q(rom)c(t)n(h)o(e)j +(init)o(ial)d(do)q(cu)o(m)o(en)o(t)i(are)0 1603 y(pass)q(e)q(d)j(t)o(o) +f(an)f(`in)o(t)o(erm)o(e)q(dia)o(t)o(e')f(T)525 1612 +y(E)548 1603 y(X)i(\014le.)k(Th)o(e)c(gen)o(era)o(t)o(e)q(d)h(ou)o(t)o +(pu)o(t)f(can)g(b)q(e)g(s)q(en)o(t)g(t)o(o)g(a)f(pr)q(in)o(t)o(er)h(or) +g(t)o(o)g(t)n(h)o(e)g(screen)83 1652 y(Thi)q(s)k(s)q(ect)o(ion)g(d)o(e) +q(scr)q(ib)q(e)q(s)i(wh)o(a)o(t)e(ASCI)q(I)h(c)o(h)o(aract)o(ers)h(can) +e(b)q(e)g(us)q(e)q(d)i(t)o(o)e(pro)q(d)o(u)o(ce)h(Gurm)n(ukhi)e(c)o(h)o +(aract)o(ers,)0 1702 y(an)o(d)c(t)n(h)o(e)h(d)o(elimit)o(ers)f(whic)o +(h)g(are)h(require)q(d)h(t)o(o)f(pu)o(t)g(t)o(oget)n(h)o(er)h(t)n(h)o +(e)q(s)q(e)g(c)o(h)o(aract)o(ers)g(t)o(o)f(pass)h(t)o(o)e(T)1486 +1711 y(E)1509 1702 y(X.)h(Som)o(e)e(con)o(trol)0 1752 +y(comm)o(an)o(ds)k(are)i(pre)q(s)q(en)o(t)o(e)q(d)j(whic)o(h)c(y)o(ou)h +(migh)o(t)e(us)q(e)j(t)o(o)g(mo)q(dify)d(t)n(h)o(e)j(b)q(e)o(h)o(a)o +(viour)e(of)h(t)n(hi)q(s)g(t)o(o)q(ol)g(t)o(o)g(transform)0 +1802 y(ASCI)q(I)f(inpu)o(t)f(t)o(ext)h(in)o(t)o(o)e(Gurm)n(ukhi)g(t)o +(ext.)26 b(Th)o(ere)17 b(i)q(s)f(a)g(m)o(acro)f(\014le)h(for)g(T)1214 +1811 y(E)1237 1802 y(X)g(whic)o(h)g(sh)o(ould)g(b)q(e)h(includ)o(e)q(d) +f(in)0 1852 y(y)o(our)e(t)o(ext)g(\014le.)83 1945 y Fe(Ch)o(aract)o +(ers)83 1995 y Fh(T)m(a)o(ble)f(1)g(pre)q(s)q(en)o(t)o(s)j(t)n(h)o(e)f +(ASCI)q(I)f(t)o(o)g(Gurm)n(ukhi)e(c)o(h)o(aract)o(er)j(s)q(et)g +(transla)o(t)o(ion.)83 2045 y(T)m(o)c(m)o(ain)o(t)o(ain)d(t)n(h)o(e)13 +b(s)q(impli)o(cit)o(y)c(of)i(translit)o(era)o(t)o(ion,)g(more)f(t)n(h)o +(an)i(on)o(e)f(c)o(h)o(aract)o(er)i(m)o(ay)d(b)q(e)i(us)q(e)q(d,)g(for) +f(example;)0 2095 y('kh')j(w)o(ould)g(b)q(e)i(us)q(e)q(d)g(t)o(o)f(pro) +q(d)o(u)o(ce)h(t)n(h)o(e)g(Gurm)n(ukhi)d(c)o(h)o(aract)o(er)k +Fd(K)p Fh(.)d(Dep)q(en)o(din)o(g)h(up)q(on)h(t)n(h)o(e)f(con)o(t)o(ext) +h(of)e(a)h(v)o(o)o(w)o(el,)0 2144 y(b)q(et)o(w)o(een)h(t)n(h)o(e)h(w)o +(ord)e(or)g(b)q(eginnin)o(g)g(of)g(a)g(w)o(ord,)h(a)f(s)q(ign)g(\(lik)o +(e)g(')p Fd(E)p Fh('\))g(or)g(a)g(c)o(h)o(aract)o(er)i(\(lik)o(e)e(')p +Fd(i)p Fh('\))g(will)f(ap)o(p)q(ear.)23 b(An)0 2194 y(except)o(ion)c(t) +o(o)g(t)n(hi)q(s)f(rule)h(will)e(b)q(e)h(t)o(w)o(o)g(v)o(o)o(w)o(els)g +(ap)o(p)q(ear)q(in)o(g)g(t)o(oget)n(h)o(er.)34 b(Th)o(ere)19 +b(i)q(s)f(a)g(v)o(ery)h(limit)o(e)q(d)d(n)n(u)o(m)n(b)q(er)j(of)0 +2244 y(h)o(alf-c)o(h)o(aract)o(ers)14 b(in)g(Gurm)n(ukhi)e(an)o(d)h(t)n +(h)o(ey)i(are)f(for)g(h,)f(v)h(an)o(d)g(r.)83 2294 y(Th)o(ere)e(are)e +(more)g(t)n(h)o(an)g(on)o(e)g(ASCI)q(I)h(c)o(h)o(aract)o(er)h(s)q(et)o +(s)f(whic)o(h)f(can)h(b)q(e)f(us)q(e)q(d)i(in)d(inpu)o(t)i(t)o(ext,)g +(for)f(repre)q(s)q(en)o(t)o(a)o(t)o(ion)0 2344 y(of)15 +b(som)o(e)g(Gurm)n(ukhi)e(c)o(h)o(aract)o(ers,)18 b(lik)o(e)c('kh')h +(an)o(d)g('K')g(can)h(b)q(e)f(us)q(e)q(d)i(for)e(')p +Fd(K)p Fh(')f(an)o(d)i(it)f(i)q(s)g(t)o(ot)o(ally)f(y)o(our)i(c)o(h)o +(oice)g(t)o(o)0 2393 y(us)q(e)f(an)o(y)e(of)g(t)n(h)o(em.)83 +2443 y(In)h(Gurm)n(ukhi)e(t)o(ext)i(mo)q(d)o(e)f(digit)o(s)h(will)f(ap) +o(p)q(ear)h(as)g(:)83 2493 y Fd(0)20 b(1)g(2)f(3)h(4)g(5)h(6)f(7)f(8)h +(9)p 0 2574 600 2 v 42 2620 a Fh(*)g(MET)m(AF)o(ONT)14 +b(i)q(s)f(a)h(trad)o(em)o(ar)o(k)g(of)f(Adddi)q(son)h(W)m(e)q(sley)g +(Pu)n(bli)q(shin)o(g)e(Compan)o(y)44 2670 y Ff(y)21 b +Fh(\\Dev)n(an)o(agar)q(i)12 b(for)h(T)407 2679 y(E)431 +2670 y(X")g(i)q(s)h(a)f(co)o(p)o(yr)q(igh)o(t)g(of)h(F)m(rans)f(J.)h(V) +m(et)n(h)n(ui)q(s)p eop +%%Page: 3 3 +3 2 bop 317 42 a Fe(T)l(a)o(b)o(le)15 b(1:)21 b(ASCI)q(I)c(Ch)o(aract)o +(er)e(s)q(et)o(s)g(for)g(Gurm)n(ukhi)e(c)o(h)o(aract)o(ers)0 +104 y Fh(u)202 b Fd(u)e Fh(k)j Fd(k)e Fh(t)209 b Fd(t)200 +b Fh(sh,)14 b(S)g(or)g("s)35 b Fd(f)0 154 y Fh(uu)179 +b Fd(u)250 159 y(\000)264 154 y Fh(or)13 b Fd(\001)136 +b Fh(kh)14 b(or)g(K)83 b Fd(K)196 b Fh(t)n(h)14 b(or)g(T)93 +b Fd(T)196 b Fh(.kh)13 b(or)h(.K)60 b Fd(\014)0 204 y +Fh(U)194 b Fd(u)250 209 y(\001)264 204 y Fh(or)13 b Fd(\001)136 +b Fh(g)204 b Fd(g)196 b Fh(d)202 b Fd(d)d Fh(.g)192 b +Fd(\013)0 254 y Fh(a)204 b Fd(a)13 b Fh(or)140 b(gh)14 +b(or)g(G)83 b Fd(G)190 b Fh(dh)14 b(or)g(D)82 b Fd(D)196 +b Fh(z)207 b Fd(\))0 303 y Fh(aa)13 b(or)h(A)88 b Fd(aA)14 +b Fh(or)f Fd(A)98 b Fh("n)181 b Fd(R)199 b Fh(n)j Fd(n)197 +b Fh(f)212 b Fd(')0 353 y Fh(i)h Fd(i)14 b Fh(or)g Fd(E)123 +b Fh(c)207 b Fd(c)199 b Fh(p)j Fd(p)196 b Fh(N)e Fd(\\)20 +b(EV_pF)0 403 y Fh(ii)201 b Fd(Ei)14 b Fh(or)g Fd(F)109 +b Fh(c)o(h)14 b(or)g(C)90 b Fd(C)194 b Fh(ph)14 b(or)g(P)86 +b Fd(P)200 b Fh(.m)12 b(or)i(M)76 b Fd(,)20 b(Eb\\dF)0 +453 y Fh(I)210 b Fd(iF)14 b Fh(or)g Fd(F)106 b Fh(j)212 +b Fd(j)196 b Fh(b)202 b Fd(b)196 b Fh(/)204 b Fd( )20 +b(c\\d}Eb\\d)1698 458 y(\001)0 503 y Fh(e)207 b Fd(a)-26 +b(\003)13 b Fh(or)h Fd(\003)100 b Fh(jh)14 b(or)f(J)104 +b Fd(J)199 b Fh(bh)14 b(or)g(B)85 b Fd(B)200 b Fh(~a)183 +b Fd(_)20 b(aD_k)0 552 y Fh(ai)13 b(or)h(E)100 b Fd(a)-26 +b({)13 b Fh(or)h Fd({)100 b Fh(~n)181 b Fd(\032)199 b +Fh(m)189 b Fd(m)196 b Fh(@)d Fd(\177)27 b Fh(\()7 b Fd(tOw)f +Fh(\))0 602 y(o)204 b Fd(\033)14 b Fh(or)f Fd(o)136 b +Fh(.t)197 b Fd(V)i Fh(y)k Fd(y)190 b Fc(|)203 b Fd(.)26 +b Fh(\()7 b Fd(X\\XA)g Fh(\))0 652 y(o)q(o)182 b Fd(ao)13 +b Fh(or)h Fd(O)126 b Fh(.t)n(h)14 b(or)g(.T)69 b Fd(W)199 +b Fh(r)209 b Fd(r)203 b Fc(||)181 b Fd(;)0 702 y Fh(O)193 +b Fd(aO)13 b Fh(or)h Fd(O)126 b Fh(.d)190 b Fd(X)200 +b Fh(l)213 b Fd(l)197 b Fh(.o)192 b Fd(:)0 752 y Fh(s)209 +b Fd(s)196 b Fh(.dh)13 b(or)h(.D)59 b Fd(Y)199 b Fh(v)k +Fd(v)0 802 y Fh(h)f Fd(h)h Fh(.n)190 b Fd(Z)199 b Fh(R)194 +b Fd(w)83 903 y Fe(Delimit)n(ers)83 953 y Fh(All)14 b(t)o(ext)h(ap)o(p) +q(ear)q(in)o(g)f(aft)o(er)h(\045)g(up)g(t)o(o)g(t)n(h)o(e)g(en)o(d)g +(of)f(t)n(h)o(e)i(lin)o(e,)e(will)f(b)q(e)i(cons)q(id)o(ere)q(d)h(comm) +o(en)o(t)o(s)d(an)o(d)i(will)e(not)0 1003 y(gen)o(era)o(t)o(e)i(an)o(y) +e(ou)o(t)o(pu)o(t.)83 1053 y(All)h(t)n(h)o(e)i(t)o(ext)g(b)q(et)o(w)o +(een)g(')p Ff(fn)p Fb(g)q(m)p Fh(')f(an)o(d)g(')p Ff(g)p +Fh(')f(will)g(b)q(e)h(con)o(v)o(ert)o(e)q(d)h(t)o(o)g(Gurm)n(ukhi)d +(accordin)o(g)j(t)o(o)g(t)n(h)o(e)g(c)o(h)o(aract)o(er)0 +1103 y(s)q(et)f(sh)o(o)o(wn)f(in)f(T)m(a)o(ble)g(1.)83 +1153 y(All)k(t)n(h)o(e)i(t)o(ext)f(b)q(et)o(w)o(een)h($)f(s)q(igns)g +(will)e(b)q(e)i(con)o(v)o(ert)o(e)q(d)i(t)o(o)e(Gurm)n(ukhi)e(wh)o(en)j +(t)n(h)o(e)g(@dollars)e(prepro)q(ce)q(ssor)0 1203 y(comm)o(an)o(d)11 +b(i)q(s)i(giv)o(en.)83 1253 y(Th)o(e)i(follo)o(win)o(g)c(c)o(h)o(aract) +o(ers)16 b(are)f(allo)o(w)o(e)q(d)e(bu)o(t)i(do)f(not)g(c)o(h)o(an)o +(ge)h(repre)q(s)q(en)o(t)o(a)o(t)o(ion)g(ins)q(id)o(e)f(Gurm)n(ukhi)f +(d)o(elim-)0 1303 y(it)o(ers:)83 1353 y(!)18 b(`)13 b(')h(\()g(\))g(*)f +(-)h(:)k(;)13 b(=)h(?)k(,)c([)f(])h(+)83 1403 y(Th)o(e)g(follo)o(win)o +(g)d(c)o(h)o(aract)o(ers)16 b(are)e(not)g(allo)o(w)o(e)q(d)f(ins)q(id)o +(e)h(Gurm)n(ukhi)e(d)o(elimit)o(ers:)83 1454 y Fc(<)i(>)f +Fh(F)h(L)g(Q)g(V)g(W)g(X)g(Y)g(Z)g(^)p 535 1454 13 2 +v 28 w(q)g(w)g(x)83 1504 y(Ob)o(viously)m(,)h(c)o(h)o(aract)o(ers)j(ou) +o(t)o(s)q(id)o(e)f(Gurm)n(ukhi)e(d)o(elimit)o(ers)g(will)g(not)h(b)q(e) +g(c)o(h)o(an)o(ge)q(d)h(t)o(o)f(Gurm)n(ukhi)f(an)o(d)g(will)0 +1554 y(b)q(e)f(pr)q(in)o(t)o(e)q(d)g(in)f(En)o(gli)q(sh)h(Alph)o(a)o(b) +q(et)f(or)h(will)e(follo)o(w)g(t)n(h)o(e)i(rule)q(s)h(whic)o(h)e(y)o +(ou)h(sp)q(ecify)m(.)83 1604 y(T)m(o)e(c)o(h)o(an)o(ge)g(t)n(h)o(e)h(p) +q(oin)o(t)o(s)q(ize)g(of)e(c)o(h)o(aract)o(ers)j(wit)n(hin)e(')p +Ff(fn)p Fb(g)q(m)p Fh(')g(an)o(d)g(')p Ff(g)p Fh(')f(t)n(h)o(e)i(follo) +o(win)o(g)c(d)o(elimit)o(ers)j(can)g(b)q(e)h(us)q(e)q(d,)0 +1654 y(in)g(increm)o(en)o(t)o(al)g(s)q(ize)q(s,)h(:)0 +1768 y Ff(n)p Fb(g)q(msmal)q(l)720 b Fh(8)14 b(p)q(oin)o(t)f(fon)o(t)0 +1817 y Ff(n)p Fb(g)q(mnine)739 b Fh(9)14 b(p)q(oin)o(t)f(fon)o(t)0 +1867 y Ff(n)p Fb(g)q(mnor)q(mal)687 b Fh(10)13 b(p)q(oin)o(t)h(fon)o(t) +0 1917 y Ff(n)p Fb(g)q(mbig)770 b Fh(10)13 b(p)q(oin)o(t)h(fon)o(t,)e +(m)o(agni\014e)q(d)h(a)o(t)g(1)h(st)o(ep)0 1967 y Ff(n)p +Fb(g)q(ml)q(ar)q(g)q(e)727 b Fh(10)13 b(p)q(oin)o(t)h(fon)o(t,)e(m)o +(agni\014e)q(d)h(a)o(t)g(2)h(st)o(eps)0 2017 y Ff(n)p +Fb(g)q(mhug)q(e)734 b Fh(10)13 b(p)q(oin)o(t)h(fon)o(t,)e(m)o +(agni\014e)q(d)h(a)o(t)g(3)h(st)o(eps)83 2118 y Fe(Examp)o(le)q(s)83 +2168 y Fh(Di\013eren)o(t)g(c)o(h)o(aract)o(er)g(s)q(et)o(s,)h(follo)o +(win)o(g)c(a)o(b)q(o)o(v)o(e)h(m)o(en)o(t)o(ion)o(e)q(d)g(rule)q(s,)i +(wit)n(hin)f(Gurm)n(ukhi)e(d)o(elimil)o(t)o(ers)i(can)g(pro-)0 +2218 y(d)o(u)o(ce)i(d)o(e)q(s)q(ire)q(d)g(ou)o(t)o(pu)o(t,)f(lik)o(e)f +Ff(fn)p Fb(g)q(m)i Fh(paNjaa)o(b)p Ff(g)d Fh(an)o(d)i +Ff(fn)p Fb(g)q(m)g Fh(pNjA)n(b)p Ff(g)f Fh(will)g(pr)q(in)o(t)g +Fd(p\\jAb)p Fh(.)83 2268 y(Som)o(et)o(im)o(e)q(s,)g(y)o(ou)i(m)o(ay)f +(h)o(a)o(v)o(e)h(t)o(o)h(t)o(yp)q(e)g(an)f(extra)h(`a')f(t)o(o)g +(complet)o(e)g(a)g(sylla)o(ble,)f(ev)o(en)i(t)n(h)o(ough)g(it)f(m)o(ay) +f(not)0 2318 y(ap)o(p)q(ear)g(in)f(t)n(h)o(e)i(Gurm)n(ukhi)d(repre)q(s) +q(en)o(t)o(a)o(t)o(ion)j(of)e(t)n(h)o(a)o(t)h(w)o(ord.)83 +2368 y(Th)o(ere)i(are)f(addit)o(ion)o(al)e(gm)g(\014le)q(s)j(ot)n(h)o +(er)f(t)n(h)o(an)g(t)n(h)o(e)h(source)g(of)e(t)n(hi)q(s)h(do)q(cu)o(m)o +(en)o(t,)f(whic)o(h)h(can)g(b)q(e)g(referre)q(d)i(t)o(o)0 +2418 y(for)d(example)q(s.)83 2520 y Fe(Con)o(tro)o(l)g(comm)o(an)o(ds) +83 2570 y Fh(A)o(t)k(t)n(h)o(e)h(st)o(art)f(of)g(inpu)o(t)g(t)o(ext,)h +(t)n(h)o(e)g(follo)o(win)o(g)c(prepro)q(ce)q(ss)q(or)20 +b(comm)o(an)o(ds)c(can)i(b)q(e)g(us)q(e)q(d,)i(t)o(o)e(con)o(trol)f(t)n +(h)o(e)0 2620 y(fu)o(nct)o(ion)o(alit)o(y)c(of)g(t)n(h)o(e)h(prepro)q +(ce)q(ss)q(or:)83 2670 y(@ob)q(eylin)o(e)q(s)g(T)m(o)f(follo)o(w)e(t)n +(h)o(e)k(lin)o(e)e(breaks)i(whic)o(h)f(y)o(ou)f(t)o(yp)q(e.)p +eop +%%Page: 4 4 +4 3 bop 83 42 a Fh(@dollars)9 b(T)m(o)g(act)o(iv)n(a)o(t)o(e)g($)g(as)h +(a)f(sp)q(ecial)h(sym)n(b)q(ol)d(su)o(c)o(h)j(t)n(h)o(a)o(t)g(t)o(ext)g +(d)o(elimit)o(e)q(d)e(b)o(y)i($)f(i)q(s)g(con)o(v)o(ert)o(e)q(d)i(t)o +(o)f(Gurm)n(ukhi.)83 91 y(@pu)o(nja)o(bi)20 b(Do)q(e)q(s)g(not)g(do)f +(an)o(yt)n(hin)o(g)h(r)q(igh)o(t)g(no)o(w,)g(bu)o(t)h(m)o(ay)d(b)q(e)i +(us)q(e)q(d)h(wh)o(en)f(t)n(h)o(e)h(t)o(o)q(ol)e(sup)o(p)q(ort)o(s)j +(ot)n(h)o(er)0 141 y(lan)o(guage)q(s.)83 191 y(Aft)o(er)15 +b(t)n(h)o(e)g(a)o(b)q(o)o(v)o(e)f(prepro)q(ce)q(ssor)k(comm)o(an)o(ds,) +11 b(ins)q(ert)k(t)n(h)o(e)g(follo)o(win)o(g)d(comm)o(an)o(d)g(t)o(o)i +(includ)o(e)h(a)f(m)o(acro)f(\014le.)0 241 y(Thi)q(s)h(ia)f(a)h(v)o +(ery)g(imp)q(ort)o(an)o(t)e(st)o(ep)j(b)q(eca)n(us)q(e)h(wit)n(h)o(ou)o +(t)e(t)n(h)o(e)h(m)o(acro)e(\014le,)h(T)1149 250 y(E)1172 +241 y(X)g(will)f(not)h(recognize)h(t)n(h)o(e)g(transla)o(t)o(e)q(d)0 +291 y(t)o(ext)f(gen)o(era)o(t)o(e)q(d)h(b)o(y)f(t)n(h)o(e)h(prepro)q +(ce)q(ssor.)83 390 y Fg(T)-5 b(ransformin)o(g)16 b(a)i(Do)r(cu)o(m)n +(en)n(t)83 490 y Fh(Th)o(e)13 b(\\Gurm)n(ukhi)d(for)i(T)468 +499 y(E)491 490 y(X")g(pac)o(kage)g(cons)q(i)q(st)o(s)h(of)e(a)h +(prepro)q(ce)q(ssor)q(,)j(fon)o(t)c(\014le)q(s)i(an)o(d)f(a)g(m)o(acro) +f(\014le.)17 b(See)c(t)n(h)o(e)0 540 y(\014le)i(\\readm)o(e")f(an)o(d)h +(\\inst)o(all.u)o(nix")e(for)i(inst)o(alla)o(t)o(ion)e(st)o(eps.)23 +b(Inst)o(alla)o(t)o(ion)13 b(sh)o(ould)i(b)q(e)g(f)q(airly)e(easy)m(,)j +(as)f(t)n(h)o(ere)i(i)q(s)0 590 y(no)d(syst)o(em)f(d)o(ep)q(en)o(d)o +(en)o(t)j(co)q(d)o(e.)j(Wh)o(erev)o(er)d(y)o(ou)e(can)g(\014n)o(d)g(T) +951 599 y(E)974 590 y(X)g(an)o(d)g(m)o(et)o(afon)o(t,)d(y)o(ou)j(can)g +(v)o(ery)g(p)q(oss)q(ibly)g(inst)o(all)0 639 y(an)o(d)g(us)q(e)g(t)n +(hi)q(s)g(pac)o(kage.)83 739 y Fe(Th)o(e)h(Prepro)q(ce)q(s)q(sor)83 +789 y Fh(Th)o(e)g(job)f(of)g(t)n(h)o(e)i(prepro)q(ce)q(ssor)i(i)q(s)c +(t)o(o)h(\014n)o(d)f(t)n(h)o(e)i(correct)g(repre)q(s)q(en)o(t)o(a)o(t)o +(ion)g(of)e(a)g(c)o(h)o(aract)o(er)i(accordin)o(g)f(t)o(o)g(it)o(s)0 +839 y(con)o(t)o(ext.)j(Wh)o(en)c(a)g(v)o(o)o(w)o(el)e(ap)o(p)q(ears)j +(in)e(a)h(w)o(ord,)f(a)g(sylla)o(ble)f(complet)o(e)q(s,)h(an)o(d)g(con) +o(t)o(ext)h(c)o(h)o(an)o(ge)q(s)h(t)o(o)f(wh)o(a)o(t)g(it)f(w)o(as)0 +889 y(a)o(t)i(t)n(h)o(e)i(b)q(eginnin)o(g)e(of)g(a)g(n)o(ew)h(w)o(ord.) +23 b(It)16 b(also)f(\014n)o(ds)h(p)q(oss)q(ible)g(h)o(alf)e(repre)q(s)q +(en)o(t)o(a)o(t)o(ion)j(of)e(c)o(h)o(aract)o(ers.)25 +b(Ou)o(t)o(pu)o(t)18 b(of)0 938 y(t)n(hi)q(s)c(prepro)q(ce)q(ssor)j(i)q +(s)c(a)h(T)421 947 y(E)444 938 y(X)g(do)q(cu)o(m)o(en)o(t.)83 +1038 y Fe(Examp)o(le)i(s)q(e)q(s)q(s)q(ion)d(of)i(comm)o(an)o(ds)83 +1088 y Fh(Let)o(s)f(assu)o(m)o(e)e(t)n(h)o(a)o(t)h(d)o(ur)q(in)o(g)f +(inst)o(alla)o(t)o(ion)e(y)o(ou)i(h)o(a)o(v)o(e)g(prepare)q(d)i(t)n(h)o +(e)f(prepro)q(ce)q(ssor)j(wit)n(h)c(n)o(am)o(e)f("gurm)n(ukhi")0 +1138 y(an)o(d)16 b(h)o(a)o(v)o(e)g(s)q(et)h(pa)o(t)n(hs)g(in)e(y)o(our) +h(en)o(vironm)o(en)o(t)f(t)o(o)i(lo)q(ca)o(t)o(e)f(fon)o(t)g(an)o(d)g +(m)o(acro)f(\014le)q(s.)25 b(Let)o(s)18 b(also)e(assu)o(m)o(e)g(t)n(h)o +(a)o(t)g(y)o(ou)0 1188 y(h)o(a)o(v)o(e)e(an)f(inpu)o(t)h(\014le)g(wit)n +(h)g(t)n(h)o(e)h(n)o(am)o(e)d("t)o(ext.gm".)83 1237 y(Y)m(ou)h(w)o +(ould)g(st)o(art)i(t)n(h)o(e)g(prepro)q(ce)q(ssor)i(on)c(t)n(h)o(e)i +(\014le)f('t)o(ext.gm')d(as)j(follo)o(ws:)0 1337 y(gurm)n(ukhi)e(t)o +(ext)643 b(\(t)o(o)14 b(get)g(a)g(T)1093 1346 y(E)1116 +1337 y(X)g(\014le\))83 1437 y(Th)o(e)h(T)191 1446 y(E)214 +1437 y(X)g(\014le)g(pro)q(d)o(u)o(ce)q(d)h(h)o(ere,)f(t)o(ext.t)o(ex,)g +(can)g(b)q(e)g(us)q(e)q(d)g(as)g(an)o(y)f(ot)n(h)o(er)i(inpu)o(t)f +(\014le)f(for)h(T)1510 1446 y(E)1533 1437 y(X.)f(Aft)o(er)i(t)n(hi)q(s) +e(a)0 1487 y(t)o(ypical)f(s)q(equence)j(of)d(comm)o(an)o(ds)e(m)o(ay)h +(b)q(e)0 1586 y(t)o(ex)i(t)o(ext)760 b(\(t)o(o)14 b(get)g(dvi)g +(\014le\))0 1648 y(xdvi)f(t)o(ext)737 b(\(t)o(o)14 b(view)g(dvi)f +(\014le\))83 1748 y(Anot)n(h)o(er)i(s)q(equence)h(aft)o(er)e(t)n(hi)q +(s)g(m)o(ay)e(b)q(e)0 1848 y(dvips)i(t)o(ext)719 b(\()14 +b(t)o(o)g(get)g(p)q(ost)o(scr)q(ipt)i(\014le)e(t)o(ext.ps)h(f)q(rom)c +(t)o(ext.dvi)j(\))0 1910 y(gs)g(t)o(ext.ps)727 b(\()14 +b(t)o(o)g(view)g(p)q(ost)o(scr)q(ipt)i(\014le)d(\))0 +1972 y(gh)o(ostview)h(t)o(ext.ps)586 b(\()14 b(anot)n(h)o(er)h(w)o(ay)e +(t)o(o)h(view)g(p)q(ost)o(scr)q(ipt)i(\014le)d(\))83 +2072 y(No)o(w)h(it)g(i)q(s)g(t)o(im)o(e)e(t)o(o)j(s)q(en)o(d)g(t)n(h)o +(e)g(p)q(ost)o(scr)q(ipt)h(\014le)f(t)o(o)f(a)g(p)q(ost)o(scr)q(ipt)i +(pr)q(in)o(t)o(er,)e(an)o(d)g(a)g(comm)o(an)o(d)e(comm)o(an)o(d)f(for)0 +2122 y(t)n(hi)q(s)j(m)o(ay)e(b)q(e:)83 2172 y(lp)h(t)o(ext.ps)83 +2271 y Fg(Dev)m(an)o(agar)q(i)83 2371 y Fh(Thi)q(s)g(s)q(ect)o(ion)h(i) +q(s)f(pre)q(s)q(en)o(t)o(e)q(d)i(for)f(t)n(h)o(os)q(e)g(wh)o(o)g(h)o(a) +o(v)o(e)f(us)q(e)q(d)h(t)n(h)o(e)h(Dev)n(an)o(agar)q(i)c(pac)o(kage)j +(or)f(w)o(ould)g(also)g(lik)o(e)g(t)o(o)0 2421 y(us)q(e)j(t)n(h)o(e)g +(Dev)n(an)o(agar)q(i)d(pac)o(kage.)22 b(Th)o(ere)16 b(are)g(not)f(m)o +(an)o(y)e(di\013erence)q(s)18 b(b)q(et)o(w)o(een)e(t)n(h)o(e)g(t)o(w)o +(o.)21 b(In)15 b(Dev)n(an)o(agar)q(i,)e(y)o(ou)0 2471 +y(crea)o(t)o(e)h(a)d(t)o(ext)i(\014le)f(in)f(t)n(h)o(e)i(sam)o(e)e(m)o +(ann)o(er)g(as)h(wit)n(h)g(Gurm)n(ukhi,)e(bu)o(t)j(y)o(ou)f(h)o(a)o(v)o +(e)f(sligh)o(t)n(ly)g(di\013eren)o(t)i(c)o(h)o(aract)o(er)g(s)q(et)o(s) +0 2521 y(for)h(repre)q(s)q(en)o(t)o(a)o(t)o(ion)g(an)o(d)g(y)o(ou)f +(will)g(us)q(e)h(a)g(s)q(imilar)d(s)q(equence)16 b(of)d(comm)o(an)o +(ds.)83 2570 y(Th)o(e)h(di\013erence)q(s)j(in)c(c)o(h)o(aract)o(er)i(s) +q(et)o(s)h(in)d(Gurm)n(ukhi)f(an)o(d)i(Dev)n(an)o(agar)q(i)e(are)i(as)g +(follo)o(ws:)83 2620 y(In)20 b(Gurm)n(ukhi,)e(S)i(an)o(d)f(sh)h(can)g +(also)f(b)q(e)g(us)q(e)q(d)i(in)e(addit)o(ion)f(t)o(o)i("s)g(t)o(o)f +(pro)q(d)o(u)o(ce)i Fd(f)e Fh(an)o(d)g(N)h(i)q(s)f(us)q(e)q(d)h(in)0 +2670 y(Gurm)n(ukhi)12 b(t)o(o)i(pr)q(in)o(t)g Fd(\\)26 +b Fh(\()7 b Fd(EV_pF)h Fh(\))f(,)13 b(ii)g(pro)q(d)o(u)o(ce)q(s)i +Fd(Ei)g Fh(an)o(d)e(not)h Fd(iF)p Fh(,)g(~a)f(pro)q(d)o(u)o(ce)q(s)i +Fd(_)p Fh(.)p eop +%%Page: 5 5 +5 4 bop 83 42 a Fh(Th)o(e)14 b(Dev)n(an)o(agar)q(i)f(soft)o(w)o(are)h +(pac)o(kage)g(allo)o(ws)e(m)o(an)o(y)h(c)o(h)o(aract)o(er)i(s)q(et)o(s) +h(su)o(c)o(h)e(as)g(.s,)g(.h,)f(H,)h(q)g(whic)o(h)g(are)g(not)0 +91 y(v)n(alid)e(in)i(Gurm)n(ukhi.)83 191 y Fg(Wh)n(a)o(t)j(m)o(ay)g(b)q +(e)h(n)n(ext:)83 291 y Fh(Sup)o(p)q(ort)c(for)g(LaT)m(eX)83 +340 y(P)o(ort)o(in)o(g)g(t)o(o)g(di\013eren)o(t)h(syst)o(ems)f(an)o(d)f +(pla)o(tforms)83 390 y(Com)n(bin)o(a)o(t)o(ion)e(of)i(Dev)n(an)o(agar)q +(i)f(an)o(d)i(Gurm)n(ukhi.)83 490 y Fg(Bib)o(lograph)n(y)83 +589 y Fh([1])f(Norm)o(an)f(W)m(alsh)h Fa(Making)i(T)595 +598 y(E)618 589 y(XWork)f Fh(O'Re)q(illy)e(&)i(Asso)q(cia)o(t)o(e)q(s,) +i(Inc.)i(July)c(1994.)83 639 y([2])f(Don)o(ald)f(E.)i(Kn)n(u)o(t)n(h)h +Fa(The)g(T)573 648 y(E)596 639 y(Xb)n(o)n(ok)f Fh(Addi)q(son)f(W)m(e)q +(sley)h(Pu)n(bli)q(shin)o(g)f(Co.)18 b(Sep)c(1993)83 +689 y([3])f(Don)o(ald)f(E.)i(Kn)n(u)o(t)n(h)h(it)f(Th)o(e)g(MET)m(AF)o +(ONT)g(Bo)q(ok)g(Addi)q(son)f(W)m(e)q(sley)m(,)83 739 +y([4])g(FTP)h(Sit)o(e)g(for)f(T)408 748 y(E)431 739 y(X)h(an)o(d)g +(rela)o(t)o(e)q(d)g(soft)o(w)o(are)q(s,)g(includin)o(g)g(MET)m(AF)o +(ONT,)f(an)o(d)h(Dev)n(an)o(agr)q(i)83 789 y(ft)o(p.shsu.e)q(d)o(u/t)o +(ex-arc)o(hiv)o(e)83 839 y([5])f(F)m(rans)h(J.)f(V)m(el)o(t)n(h)n(ui)q +(s)i Fa(Devanagari)g(for)g(T)770 847 y(E)792 839 y(X)f +Fh(V)m(ers)q(ion)f(1.2)p eop +%%Trailer +end +userdict /end-hook known{end-hook}if +%%EOF |