gf_calc.exe -- Version 1.5
for Windows 95 and NT

WARRANTY:
   Use of this program is at your own risk.  You agree by using this program
   to hold harmless the program's author against damages arising out of the
   use of this program, even if the author was notified in advance that such
   damages might occur.

   This program is Freeware.  You may freely distribute this program as long
   as no money is charged for it, and all the files, in their original form,
   are distributed.

FILES:
   This ZIP archive should contain the following files:
      gf_calc.exe            -- 545,280 bytes  19 March 1999  
      readme.txt (this file) --   7,085 bytes  19 March 1997

INSTALLATION:
   Unzip all the files to a directory.  To execute the program, run 
   gf_calc.exe.  Shortcuts and Start Menu items are left up to the user.

WHAT IT IS:
   gf_calc is a calculator operating within Galois Fields.  With it, you
   can do basic arithmetic as well as polynomial arithmetic.

HOW TO USE:
   To choose a Galois Field, either select a Primitive Polynomial from the
   Primitive Polynomial drop down list, or type in your own primitive
   polynomial.

   Note that the polynomial entered must conform to some strict
   formatting: There must be a space between values and operators (ie.
   + signs).  There must not be a space between variables and exponent
   placeholder and exponents (ie. no spaces between any of the characters
   in "x^4").  The variable must be a lowercase 'x'.

   Once the primitive polynomial is entered, click on the Generate Galois
   Field button.  The new Galois Field size will be displayed next to the
   Generate Galois Field button.  Note: If a illegal primitive polynomial
   is entered, Bad Things may happen.

   gf_calc will function as an RPN calculator (ala HP -- the default) or an
   Infix notation calculator (ala TI -- the alternative).  Values can be
   entered in one of three bases -- binary, decimal, or hexadecimal, and
   two representations -- values, or powers of alpha.  Output can be
   displayed in any base and representation independent of the input.

   Note: binary values are displayed and entered least significant bit to
   most significant bit.  This corresponds to the display of polynomials
   in this program -- smallest power to largest power.

SOME OF THE BUTTONS:
   Addition (+ button) - works on elements and polynomials.  Pretty self
      explanatory.
   Multiplication (* button) - works on elements and polynomials.  Pretty
      self explanatory.
   Division (/ button) - works on elements and polynomials.  Returns the
      quotient only.
   Modulo (% button) - works on elements and polynomials, but is pretty
      useless with elements as it will always be zero.  Returns the remainder
      of the division.
   Evaluation (@ button) - works only with a polynomial followed by an
      element.  Evaluates the polynomial at the element (ie. f(m) = n)
   Space (Space button) - separates elements in a polynomial.  Polynomials
      are entered smallest power to largest power.  So the polynomial
      1 + (a^2)x + (a^3)x^2 is entered "1 2 3" (assuming power representation
      and decimal base on input).  Polynomials in the output window look like
      vectors, with the leftmost value being the smallest power.  The above
      polynomial would appear as "1 + (a^2)x + (a^3)x^2" in the output window
   Backspace (<< button) - deletes the last character from the input box.
   Z (Zero button) - Since there is no way to represent the value 0 as a
      power of alpha, this button takes its place.  It outputs a 'z' to let
      you know.  So the polynomial 1 + 0x + x^2 is entered "0 z 0" (assuming
      power representation on input).
   Recall (RCL button) - Recalls what was stored in memory.
   Store (STO button) - Stores the top item on the stack in a memory location.

MENUS:
   Most are self explanatory.  The "Save As..." option will save the output
   window to a text file.

BACKGROUND:
   One day, I got tired of squinting at tables of Galois Fields in Lin and
   Costello when doing Galois Field math, so I decided to write this program.
   I liked the results so much, I thought other people might like it as well.

REFERENCES:
   "Error Correction Coding: Fundamentals and Applications"
   by Shu Lin and Daniel J. Costello Jr.
   Prentice Hall, 1983
   ISBN 0-13-283796-X

   But then, if you know what this calculator is for, you probably already
   have this book.

VERSION HISTORY:
   The latest version can always be found on my Web Page:
   http://www.netcom.com/~aelin

   Version 1.6 -- 19 March 1999
      I accidentally set up version 1.5 to use DLL's and run time libraries
      making the calculator nonfunctional on machines without Borland C++
      Builder installed.  That is what a Marine I once knew would call a
      "brain fart".  It has been alleviated.

   Version 1.5 -- 18 March 1999
      A display bug that caused polynomials with coefficients greater than or
      equal to a^100 to be displayed incorrectly was fixed.  Debug info was
      also stripped from the program making it much smaller.

   Version 1.4 -- 14 October 1997
      An error with entering values was corrected.  Previously, if you entered
      the largest value of a Galois Field as a value, it would be displayed
      (and thought of) as a zero.  eg. in GF(16), entering the value 15 (dec)
      would give you a zero in the output display.  Note, that if you enter
      powers, you can enter the largest value (in GF(16), a^12 = 15, so
      entering a 12 in power input mode gave you the correct value).

   Version 1.3 -- 11 October 1997
      Oops.  Forgot to change binary representation on inputs in the last
      version.  This is fixed here.

   Version 1.2 -- 10 October 1997
      I changed the way polynomials look in the output window.  Originally,
      they were vectors of values: [1 2 4 0 3].  Now they look like actual
      polynomials: 1 + (a^1)x + (a^2)x^2 + (a^4)x^4 (assuming GF(16)).

      I also changed the way binary values are represented.  Instead of most
      significant bit to least significant bit, binary numbers now flipped and
      displayed least significant bit to most significant bit.  Why?  To match
      polynomial output which is smallest power to largest power.  This is also
      how it's done in Lin and Costello, and I was getting tired of confusing
      myself.

      The above two changes made the "Output Representation" selector moot, so
      I got rid of it.  Watch out for function key reassignments!
 
   Version 1.0 -- 5 September 1997
      Original release.

This program is freeware.  Send me some e-mail if you like it, find a bug,
or want to suggest a feature.  If I update this program, I'll let you know!

Thanks go to Arnon Friedmann (the above mentioned beta tester) for all his
valuable input.

Andrew E. Lin
aelin@ix.netcom.com
www.netcom.com/~aelin
