summaryrefslogtreecommitdiff
path: root/language/gurmukhi/singh
diff options
context:
space:
mode:
Diffstat (limited to 'language/gurmukhi/singh')
-rw-r--r--language/gurmukhi/singh/Readme106
-rw-r--r--language/gurmukhi/singh/bani.gm41
-rw-r--r--language/gurmukhi/singh/copying249
-rw-r--r--language/gurmukhi/singh/defs.mf99
-rw-r--r--language/gurmukhi/singh/eg.gm35
-rw-r--r--language/gurmukhi/singh/env25
-rw-r--r--language/gurmukhi/singh/gmchars.mf1004
-rw-r--r--language/gurmukhi/singh/gmmacs.tex107
-rw-r--r--language/gurmukhi/singh/grmk10.mf24
-rw-r--r--language/gurmukhi/singh/grmk10.tfmbin0 -> 776 bytes
-rw-r--r--language/gurmukhi/singh/grmk12.mf24
-rw-r--r--language/gurmukhi/singh/grmk12.tfmbin0 -> 772 bytes
-rw-r--r--language/gurmukhi/singh/grmk8.mf24
-rw-r--r--language/gurmukhi/singh/grmk8.tfmbin0 -> 776 bytes
-rw-r--r--language/gurmukhi/singh/grmk9.mf24
-rw-r--r--language/gurmukhi/singh/grmk9.tfmbin0 -> 776 bytes
-rw-r--r--language/gurmukhi/singh/gurmukhi.c948
-rw-r--r--language/gurmukhi/singh/install.dos106
-rw-r--r--language/gurmukhi/singh/install.ux68
-rw-r--r--language/gurmukhi/singh/known.prob9
-rw-r--r--language/gurmukhi/singh/manual.gm329
-rw-r--r--language/gurmukhi/singh/manual.ps887
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
new file mode 100644
index 0000000000..04cf731b43
--- /dev/null
+++ b/language/gurmukhi/singh/grmk10.tfm
Binary files differ
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
new file mode 100644
index 0000000000..e98cb15ee6
--- /dev/null
+++ b/language/gurmukhi/singh/grmk12.tfm
Binary files differ
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
new file mode 100644
index 0000000000..c3a5a96644
--- /dev/null
+++ b/language/gurmukhi/singh/grmk8.tfm
Binary files differ
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
new file mode 100644
index 0000000000..881c1d2764
--- /dev/null
+++ b/language/gurmukhi/singh/grmk9.tfm
Binary files differ
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