Notes for game players (Jeff Owens 9-2-2019)
--------------------------------------------

pinochle game can be installed and run in three ways.
1. If on a 64-bit linux system. Install the .deb file
   using dpkg or on most systems simply click on it
   from a file browser.  A entry should now be placed
   on system menu.  If not, run it from terminal, or
   execute from /usr/local/bin
2. On a 64-bit linux system, find the file "pino" and
   execte it. Do not include the quotes.
3. The python file pino.py can be executed by python3
   if the tkinter library is installed.  Switch to the
   directory with pino.py and directory /image and
   type ./pino.py

Rules for pinochle vary a little, but most rules found
with google will work.  To select a card, just click on
it.  To deselect, just click again.

Notes for developers
--------------------

File descriptions:
  pygame_pino.py - first attempt to write a pinochle game, abandoned
  pino.py - current pinochle source, uses python & tkinter library
  run - shell script to run pino.py and put debug info in "out"
  /image - directory with graphics for cards, plus deck
  /pino_dist - distribution files for pyinstaller and debian
  /pino_dist/mak - runs pyinstaller to create a single executable
                   (debug print statements should be stripped from
                    source file pino.py before running mak)
  /pino_dist/make_deb/mak - creates a debian install package.
                    (should update version information before)

Design info:
  Warning - Global data and a form of GOTO was used to build program.
            This is considered bad programming practice by many, but
            have been doing it for 50 years with great success (grin).
  One simple concept is necessary to understand the program.  It is
            controlled by a data table called ctrl_table.
            A very small loop at end of program, executes each
            line of the control_table.
            One line in the table defines a program state with the
            following information:
            1. program state to display in center of window
            2. flag telling if a wait for event is needed
            3. initial function to execute
            4. 4 functions to execute if buttons pressed
            5. text to go on 4 buttons
            6. final function to execute at end

  A mouse driver runs along side the table processing and is used to select
  cards for play.
  
  It is possible to execute any line in table by changing a pointer the
  control loop uses.  This creates a GOTO statement. Normally, the final
  function in each line decides where to go next. Usually, this is next
  entry in table.

  Tried to use OOP design, but did not like the result. Instead this is
  old style proceedural programming.

  Use of the control table eliminates several indentation levels in code
  and creates some interesting programming.  If you avoid changing the
  pointer to control loop, the program will keep executing the same
  entry in table.  This create a loop.  Several other loops are created
  by setting the control pointer to previous table entries. 
