1 XABACUS
2 Name
       xabacus - Abacus X widget

2 Synopsis
       /usr/games/xabacus                                   [-geometry
       [{width}][x{height}][{+-}{xoff}[{+-}{yoff}]]]                 [-display
       [{host}]:[{vs}]]   [-[no]mono]   [-[no]{reverse|rv}]  [-{foreground|fg}
       {color}] [-{background|bg} {color}] [-bead  {color}]  [-frame  {color}]
       [-rail  {color}]  [-{border|bd}  {color}]  [-delay  msecs] [-[no]sound]
       [-bumpSound    {filename}]    [-moveSound    {filename}]    [-[no]demo]
       [-[no]script]   [-demopath   {path}]   [-{demofont|demofn}  {fontname}]
       [-{demoforeground|demofg} {color}]  [-[no]lee]  [-[no]vertical]  [-col-
       orScheme   {int}]   [-[no]slot]   [-[no]diamond]   [-railIndex   {int}]
       [-[no]torient] [-[no]borient] [-tnumber {int}] [-bnumber {int}] [-tfac-
       tor  {int}] [-bfactor {int}] [-tspaces {int}] [-bspaces {int}] [-tpiece
       {int}] [-bpiece {int}] [-tpiecePercent  {int}]  [-bpiecePercent  {int}]
       [-shiftPercent  {int}]  [-subdeck  {int}]  [-subbead {int}] [-[no]sign]
       [-decimalPosition  {int}]  [-groupSize  {int}]  [-rails  {int}]  [-base
       {int}]  [-[no]eighth]  [-anomaly {int}] [-[no]shiftAnomaly] [-anomalySq
       {int}] [-[no]shiftAnomalySq {int}] [-displayBase {int}]  [-[no]romanNu-
       merals]    [-[no]group]   [-{chinese|japanese|korean|roman|russian|dan-
       ish|other}] [-{it|uk|fr}] [-version]

2 Description
       This is an implementation of  the  classic  Chinese  abacus  (Saun-pan)
       which has its origins in the 12th century.

       The  device  has  two decks.  Each deck, separated by a partition, nor-
       mally has 13 rails on which are mounted beads.  Each rail  on  the  top
       deck  contains 1 or 2 beads, and each rod on the bottom deck contains 4
       or 5 beads.  Each bead on the upper deck has a  value  of  five,  while
       each  bead  on  the  lower deck has value of one.  Beads are considered
       counted, when moved towards the partition separating the decks, i.e. to
       add a value of one, a bead in the bottom deck is moved up, and to add a
       value of 5, a bead in the top deck is moved down.

       The basic operations of the abacus are addition and subtraction.   Mul-
       tiplication  can  be done by mentally multiplying the digits and adding
       up the intermediate results on the abacus.  Division would  be  similar
       where  the  intermediate  results are subtracted.  There are techniques
       like using your thumb and forefinger which does not  apply  with  mouse
       entry.   Also  with  multiplication,  one can carry out calculations on
       different parts of the abacus for scratch work, here it is nice to have
       a long abacus.

       The  pre-WWII Japanese abacus (Soroban) (or Korean Supan) is similar to
       the Chinese abacus but has only one bead per rail on the top deck.  The
       later  Japanese  abacus was further simplified to have only 4 beads per
       rail on the bottom deck.

       The Roman hand-abacus predates the Chinese abacus and is  very  similar
       to  the later Japanese abacus, but seems to have fallen out of use with
       the Fall of the Roman Empire (at least 3 are in existence).  The  Roman
       abaci  are  brass plates where the beads move in slots.  In addition to
       the normal 7 columns of beads, they generally have 2 special columns on
       the  right  side.   In  two  examples: the first special column was for
       12ths (12 uncia (ounces) = 1 as), and had one extra bead in the  bottom
       deck.   Also the last column was a combination of halves, quarters, and
       twelfths of an ounce and had no slot in the top deck and 4 beads at the
       bottom  (beads did not have to come to the top to be counted but at one
       of 3 marked points where the top bead was for halves, the next bead for
       quarters,  and  the last two beads for twelfths).  In another surviving
       example: the 2 special columns were switched and the combination column
       was  broken  into  3  separate  slots.   If available, decimal input is
       ignored.

       The Russian abacus was invented in the 17th century, here the beads are
       moved  from right to left.  It has colored beads in the middle for ease
       of use.  Quarters represent 1/4 Rubles and are  only  present  histori-
       cally  on the Russian abacus (Schoty).  Some of the older Schoty have a
       extra place for the 1/4 Kopek (quarter percent)  as  well  as  the  1/4
       Ruble (quarter).

       The  Danish  abacus  was  used  in the early 20th century in elementary
       schools as a teaching aid.

       The Mesoamerican Nepohualtzintzin is a Japanese abacus  base  20.   The
       Mesoamericans  had  base 20 with the exception of the 3rd decimal place
       where instead of 20*20=400 the third place marked 360 and the 4th place
       was  20*360,  etc..   They  independently  created their own zero (only
       Babylon (base 60) and India (base 10) have done this) but  the  anomaly
       took away its true power.

       An  easy  way of figuring out time in seconds given hours, minutes, and
       seconds, can be done on the abacus with special  anomaly  "watch"  set-
       tings.

       The  Chinese  Solid-and-Broken-Bar System is a base 12 numbering system
       and not really an abacus.  When the abacus is setup in this way  though
       (topFactor  3,  bottomNumber 2, base 12, displayBase 12), it is easy to
       relate the two.

       The signed bead is an invention of the author, and is  not  present  on
       any historical abacus (to his knowledge) and is used to represent nega-
       tives.  "New & Improved" abacus models have two auxiliary decks stacked
       above  the principal deck that enable multiplication, division, square-
       root, and cube-root computations to be performed  with  equal  ease  as
       addition and subtraction.

2 Features
       Click  "mouse-left"  button on a bead you want to move.  The beads will
       shift themselves to vacate the area of the column that was clicked.

       Click "mouse-right" button, or press "C" or "c" keys, to clear the aba-
       cus.

       Press "O" or "o" keys to toggle the demo mode.

       Press "I" or "i" keys to increment the number of rails.

       Press "D" or "d" keys to decrement the number of rails.

       Press  "F"  or  "f"  keys  to switch between Chinese, Japanese, Korean,
       Roman, and Russian formats.

       Press "E" or "e" keys to switch between it, uk, and fr museum  formats.

       Press "M" or "m" keys to toggle Roman Numerals.

       Press "S" or "s" keys to toggle the availability of a sign bead.

       Press  "U"  or  "u"  keys  to toggle the availability of quarter beads.
       (Mutually exclusive to twelfth beads).  Intended for the  Russian  Aba-
       cus.

       Press  "P"  or  "p"  keys to toggle the availability of quarter percent
       beads.  (Dependent on quarter beads (or twelfth beads).   Intended  for
       the older Russian Abacus.

       Press  "T"  or  "t"  keys  to toggle the availability of twelfth beads.
       (Mutually exclusive to quarter beads).  Intended for the Roman  Abacus.

       Press  "B" or "b" keys to toggle the availability of subdecks.  (Depen-
       dent on twelfth beads (or quarter beads) and Roman  format).   Intended
       for  the  Roman  Abacus,  the lowest value of the rightmost beads are a
       tweltfh of the next column.

       Press "H" or "h" keys to toggle the availability of subdecks.   (Depen-
       dent  on  twelfth beads (or quarter beads) and Roman format).  Intended
       for the Roman Abacus, the lowest value of  the rightmost  beads are  an
       eighth of the next column.

       Press  "L"  or  "l"  keys  to  toggle the availability of anomaly bars.
       Intended to be used with Japanese Abacus and base 20 for the Mesoameri-
       can Abacus.  (Mutually exclusive to watch bars).

       Press  "W"  or  "w"  keys  to  toggle  the  availability of watch bars.
       Intended to represent seconds where  hours  and  minutes  can  be  set.
       (Mutually exclusive to anomaly bars).

       Press ">" or "." keys to speed up the movement of beads.

       Press "<" or "," keys to slow down the movement of beads.

       Press "@" key to toggle the sound.

       Press "Esc" key to hide program.

       Press "Q", "q", or "CTRL-C" keys to kill program.

       The  abacus  may  be resized.  Beads will reshape depending on the room
       they have.  Demo Mode: In this mode, the abacus is  controlled  by  the
       program.   When  started  with the demo option, a second window is pre-
       sented that should be placed directly below the abacus-window. Descrip-
       tive text, and user prompts are displayed in this window.  Pressing `q'
       during the demo will quit it.  Clicking the left mouse-button with  the
       pointer  in the window will restart the demo (beginning of current les-
       son).

2 Options
       -geometry {+|-}X{+|-}Y
               This option sets the initial  position  of  the  abacus  window
               (resource name "geometry").

       -display host:dpy
               This option specifies the X server to contact.

       -[no]mono
               This  option allows you to display the abacus window on a color
               screen as if it were monochrome (resource name "mono").

       -[no]{reverse|rv}
               This option allows you to see  the  abacus  window  in  reverse
               video (resource name "reverseVideo").

       -{foreground|fg} color
               This  option  specifies  the  foreground  of  the abacus window
               (resource name "foreground").

       -{background|bg} color
               This option specifies  the  background  of  the  abacus  window
               (resource name "background").

       -frame color
               This  option  specifies  the  foreground of the frame (resource
               name "frameColor").

       -rail color
               This option specifies the foreground  of  the  rails  (resource
               name "railColor").

       -bead color
               This  option  specifies  the  foreground of the beads (resource
               name "beadColor").

       -{border|bd} color
               This  option  specifies  the  foreground  of  the  bead  border
               (resource name "borderColor").

       -delay msecs
               This  option  specifies  the number of milliseconds it takes to
               move a bead or a  group  of  beads  one  space  (resource  name
               "delay").

       -[no]sound
               This  option specifies if a sliding bead should make a sound or
               not (resource name "sound").

       -bumpSound filename
               This option specifies the file for  the  bump  sound  (resource
               name "bumpSound").

       -moveSound filename
               This  option  specifies  the  file for the move sound (resource
               name "moveSound").

       -[no]demo
               This option specifies to run in demo mode.  In this  mode,  the
               abacus  is  controlled  by  the  current  lesson (resource name
               "demo").  When started with the demo option, a window  contains
               descriptive  text,  and user prompts are displayed in this win-
               dow.  Pressing `q' during the demo will quit it.  Clicking  the
               left  mouse-button  with the pointer in the window will restart
               the demo (beginning of current lesson).   The  demo  uses  Aba-
               cus1.les for the first Chinese Abacus lesson, Abacusjp1.les for
               the first Japanese (and Roman) Abacus lesson, Abacusko1.les for
               the Korean Abacus, and Abacusru1.les for the Russian Abacus.

       -[no]script
               This  option specifies to log application to stdout, every time
               the user clicks to move the beads (resource name "script"). The
               output  is  a set of deck, rail, beads added or subtracted, and
               the number of text lines (4).  This can be edited to  add  text
               to the lesson and used as a new demo keeping the generated num-
               bers and the number of lines constant.  It writes to Abacus.les
               by default.

       -demopath path
               This option specifies the path for the demo, possibly something
               like /usr/local/share/games/xabacus (resource name "demoPath").
               It initially looks for Abacus1_1.les, for first chapter, lesson
               1.  If it finds that, it will  later  look  for  Abacus1_2.les,
               etc.

       -demofont fontstring
               This  option  specifies  the font for the explanatory text that
               appears in the secondary window, during the demo.  The  default
               font  is  18  point Times-Roman (-*-times-*-r-*-*-*-180-*). The
               alternate font is 8x13.

       -demofg color
               This option specifies the foreground of the abacus demo  window
               (resource name "demoForeground").

       -demobg color
               This  option specifies the background of the abacus demo window
               (resource name "demoBackground").

       -[no]lee
               This option allows you to turn on and off the two extra  auxil-
               iary abaci (resource name "lee").

       -[no]vertical
               This  option  allows  you  to set the abacus to allow a Russian
               orientation (resource name "vertical").

       -colorScheme int
               This option specifies the color scheme for the abacus (resource
               name  "colorScheme")  where 0-> none, 1-> color middle (2 beads
               beads but if odd color 1 bead), 2-> color first of  group,  3->
               both  1  and  2,  4-> color first half (but if odd color middle
               bead).

       -[no]slot
               This option allows you to have either slots or rails  (resource
               name "slot").

       -[no]diamond
               This  option  allows  you to have either diamond or round beads
               (resource name "diamond").

       -railIndex int
               This option specifies the index of color for the rails  of  the
               abacus (resource name "railIndex") where a value is 0 or 1.

       -[no]torient
               This  option  specifies  the  orientation  of  the beads on top
               (resource name "topOrient").

       -[no]borient
               This option specifies the orientation of the  beads  on  bottom
               (resource name "bottomOrient").

       -tnumber int
               This option specifies the number of beads on top (resource name
               "topNumber").

       -bnumber int
               This option specifies the number of beads on  bottom  (resource
               name "bottomNumber").

       -tfactor int
               This  option specifies the multiply factor for the beads on top
               (resource name "topFactor").

       -bfactor int
               This option specifies the multiply factor for the beads on bot-
               tom (resource name "bottomFactor").

       -tspaces int
               This  option  specifies  the  number of spaces on top (resource
               name "topSpaces").

       -bspaces int
               This option specifies the number of spaces on bottom  (resource
               name "bottomSpaces").

       -tpiece int
               This  option  specifies  the  number of pieces on top (resource
               name "topPiece").

       -bpiece int
               This option specifies the number of pieces on bottom  (resource
               name "bottomPiece").

       -tpiecePercent int
               This  option  specifies  the  number  of  piece percents on top
               (resource name "topPiecePercent").

       -bpiecePercent int
               This option specifies the number of piece  percents  on  bottom
               (resource name "bottomPiecePercent").

       -shiftPercent int
               This option specifies the shift of rails for piece percents and
               also may influence the precision of the  calculation  (resource
               name "shiftPercent").

       -subdeck int
               This  option  specifies  the  special subdecks column (resource
               name "subdeck").

       -subbead int
               This option specifies the special subbeads (resource name "sub-
               bead").

       -[no]sign
               This  option  allows  you  to set the abacus to allow negatives
               (resource name "sign").

       -decimalPosition int
               This option specifies the number of rails to the right  of  the
               decimal point (normally 2) (resource name "decimalPosition").

       -groupSize int
               This option specifies the group size to the left of the decimal
               point (normally 3) (resource name "groupSize").

       -rails int
               This option  specifies  the  number  of  rails  (resource  name
               "rails").

       -base int
               This  option specifies the base used on abacus (default is base
               10) (resource name "base").  By default, one  has  to  set  the
               format  mode  to not be Other for this to work (unless you know
               what you are doing).

       -[no]eighth
               This option specifies the base for the Roman subdeck, (if  set,
               the  resource is set to 8, else it is set to 12) (resource name
               "subbase").

       -anomaly int
               This option specifies the offset from the  base  for  a  multi-
               plicative factor of the rail with the anomaly (if none, this is
               set to 0) (resource name "anomaly").

       -shiftAnomaly int
               This option specifies the offset from  decimal  point  for  the
               anomaly (usually 2) (resource name "shiftAnomaly").

       -anomalySq int
               This  option  specifies  the  offset  from  base for the second
               anomaly (if none, this is set  to  0)  (resource  name  "anoma-
               lySq").

       -shiftAnomalySq int
               This  option  specifies  the  offset  in  rails  from the first
               anomaly (usually 2) (resource name "shiftAnomalySq").   doing).

       -displayBase int
               This  option  specifies the base displayed (default is base 10)
               (resource name  "displayBase").   If  this  is  different  then
               "base"  then it is implemented using "long long" and the calcu-
               lation is limited by its bounds.  Also the fractional part does
               not  scale  with  the  "displayBase" so if the "displayBase" is
               greater than the "base" it  looses  some  precision.   Also  no
               rounding is done.

       -[no]romanNumerals
               This  option allows you to set the abacus to allow Roman Numer-
               als (resource name "romanNumerals").  Roman Numerals above 3999
               are  normally  represented  with bars on top, due to ASCII con-
               straints this is represented instead in  lower  case  (histori-
               cally  case  was ignored).  Roman Numerals above 3,999,999 were
               not represented historically.  Roman numerals change with  dis-
               playBase in an "experimental" way.  When used with twelfths and
               subdecks, named fraction symbols are used.  Due to  ASCII  con-
               straints the sigma is represented as E, the backwards C is rep-
               resented as a Q, the mu as a u, and the Z with a - through  the
               center as a z.  If available, decimal input is ignored.

       -[no]group
               This  option allows you to group the displayed digits for read-
               ability (resource name "group").

       -chinese
               This option specifies the format on the abacus  (resource  name
               "format") to "Chinese" for the Chinese Saun-pan.

       -japanese
               This  option  specifies the format on the abacus (resource name
               "format") to "Japanese" for  the  Japanese  post-WWII  Soroban.
               This is also similar to the Roman Hand Abacus.

       -korean This  option  specifies the format on the abacus (resource name
               "format") to "Korean" for the Korean Supan or Japanese pre-WWII
               Soroban.

       -roman  This  option  specifies the format on the abacus (resource name
               "format") to "Roman" for the Roman Hand Abacus, note beads move
               in slots.  To complete, specify romanNumerals".

       -russian
               This  option  specifies the format on the abacus (resource name
               "format") to "Russian" for the Russian  Schoty.   To  complete,
               specify  piece"  to  be  4,  for  the older Schoty also specify
               piecePercent" to be 4.

       -danish This option specifies the format of the abacus  (resource  name
               "format")  to  "Danish" for the Danish Elementary School Abacus
               teaching aid.

       -other  This option specifies the format on the abacus  (resource  name
               "format")  to  "Other".  This option specifies a format that is
               more configurable by using resources, since there are few rules
               to govern its behavior.

       -it     This  option specifies the subformat of the abacus in Museum of
               the Thermae, Rome.

       -uk     This option specifies the subformat of the  abacus  in  British
               Museum in London.

       -fr     This option specifies the subformat of the abacus in Cabinet de
               medailles, Bibliotheque nationale, Paris.

       -version
               This option tells you what version of xabacus you have.

2 References
       Luis Fernandes  http://www.ee.ryerson.ca/~elf/abacus/

       Lee Kai-chen, How to Learn Lee's Abacus, 1958, 58 pages.

       Abacus Guide Book, 57 pages.

       Georges Ifrah, The Universal History of Numbers, Wiley Press  2000,  pp
       209-211, 288-294.

       Review of the above: http://www.ams.org/notices/200201/rev-dauben.pdf

       David  Eugene  Smith,  History of Mathematics Volume II, Dover Publica-
       tions, Inc 1958, pp 156-195.0

2 See Also
       X(1), xcubes(6), xtriangles(6),  xhexagons(6),  xmlink(6),  xbarrel(6),
       xpanex(6),  xmball(6),  xpyraminx(6),  xoct(6),  xrubik(6),  xskewb(6),
       xdino(6)

2 Copyrights
       (R) Copyright 1994-2007, David Albert Bagley

       Luis Fernandes, <elf@ee.ryerson.ca> wrote an independent program (xaba-
       cus 1.00) with a demo mode and postscript file.  I tried, with his per-
       mission, to take the best features of both into one program.   Also,  I
       had help with some of the abacus in the Java version by Sarat Chandran,
       <aratcmahadevan@yahoo.com> and some of these  ideas  were  ported  back
       into this X version.

2 Bug Reports and Program Updates
       Send bugs (or their reports, or fixes) to the author:
              David Albert Bagley, <bagleyd@tux.org>

       The latest version is currently at:
              http://www.tux.org/~bagleyd/abacus.html
              ftp://ibiblio.org/pub/Linux/apps/math
