NAME¶
xabacus - Abacus X widget
SYNOPSIS¶
/usr/games/xabacus [-geometry
[{width}][x{height}][{+-}{xoff}[{+-}{yoff}]]] [-display [{host}]:[{vs}]]
[-[no]mono] [-[no]{reverse|rv}] [-{foreground|fg} {color}] [-{background|bg}
{color}] [-{border|bd} {color}] [-frame {color}] [-primaryBeadColor {color}]
[-leftAuxBeadColor {color}] [-rightAuxBeadColor {color}] [-secondaryBeadColor
{color}] [-highlightBeadColor {color}] [-primaryRailColor {color}]
[-secondaryRailColor {color}] [-highlightRailColor {color}] [-bumpSound
{filename}] [-moveSound {filename}] [-dripSound {filename}] [-[no]sound]
[-delay msecs] [-[no]script] [-[no]demo] [-demopath {path}]
[-{demofont|demofn} {fontname}] [-{demoforeground|demofg} {color}]
[-[no]teach] [-[no]rightToLeftAdd] [-[no]rightToLeftMult] [-[no]lee] [-rails
{int}] [-leftAuxRails {int}] [-rightAuxRails {int}] [-[no]vertical]
[-colorScheme {int}] [-[no]slot] [-[no]diamond] [-railIndex {int}]
[-[no]topOrient] [-[no]bottomOrient] [-topNumber {int}] [-bottomNumber {int}]
[-topFactor {int}] [-bottomFactor {int}] [-topSpaces {int}] [-bottomSpaces
{int}] [-topPiece {int}] [-bottomPiece {int}] [-topPiecePercent {int}]
[-bottomPiecePercent {int}] [-shiftPercent {int}] [-subdeck {int}] [-subbead
{int}] [-[no]sign] [-decimalPosition {int}] [-[no]group] [-groupSize {int}]
[-[no]decimalComma] [-base {int}] [-[no]eighth] [-anomaly {int}]
[-shiftAnomaly {int}] [-anomalySq {int}] [-shiftAnomalySq {int}] [-displayBase
{int}] [-[no]pressOffset] [-[no]romanNumerals] [-[no]latin]
[-[no]ancientRoman] [-[no]modernRoman]
[-{chinese|japanese|korean|roman|russian|danish|generic}] [-{it|uk|fr}]
[-version]
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, normally 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. Multiplication
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 beads 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 historically 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" settings.
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,
topNumber 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 negatives.
"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.
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 abacus.
Press "
O" or "
o" keys to toggle the demo
mode.
Press "
$" key to toggle the teach mode.
In teach mode, "
+" key toggles starting side to sum, "
"*" key toggles for starting side for multiplicand.
Press "
~" or "
`" keys to complement the beads
on the rails.
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, Russian, and Danish formats. There is an
extra "Generic" format, this allows one to break some rules binding
the other formats (for example, if one wanted more beads on top deck than on
bottom deck you would use this, in addition to resource option changes).
Press "
V" or "
v" keys to toggle Roman
Nvmerals. (Pardon typo/humor, but ran out of letters).
Press "
S" or "
s" keys to toggle the sign
bead.
Press "
U" or "
u" keys to toggle the
availability of quarter beads. (Mutually exclusive to twelfth beads). Intended
for the 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 "
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 "
B" or "
b" keys to toggle the
availability of subdecks. (Dependent on twelfth beads (or quarter beads) and
Roman format). Intended for the Roman Abacus, where the lowest value of two at
bottom of the rightmost column of beads are a twelfth of the column second
from right.
Press "
E" or "
e" keys to toggle the
availability of subdecks. (Dependent on twelfth beads (or quarter beads) and
Roman format). Intended for the Roman Abacus, where the lowest value of three
at bottom of the rightmost column of beads are an eighth of the column second
from right.
Press "
M" or "
m" keys to switch between it,
uk, and fr museum formats.
Press "
L" or "
l" keys to toggle the
availability of anomaly bars. Intended to be used with Japanese Abacus and
base 20 for the Mesoamerican 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 presented that should be
placed directly below the abacus-window. Descriptive 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 lesson).
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").
- -{border|bd} color
- This option specifies the foreground of the bead border (resource name
" borderColor").
- -frame color
- This option specifies the foreground of the frame (resource name "
frameColor").
- -primaryBeadColor color
- This option specifies the foreground of the beads (resource name "
primaryBeadColor").
- -leftAuxBeadColor color
- This option specifies the foreground of the beads for the left auxiliary
abacus in Lee's Abacus (resource name "
leftAuxBeadColor").
- -rightAuxBeadColor color
- This option specifies the foreground of the beads for the right auxiliary
abacus in Lee's Abacus (resource name "
rightBeadColor").
- -secondaryBeadColor color
- This option specifies the secondary color of the beads (resource name
" secondaryBeadColor").
- -highlightBeadColor color
- This option specifies the highlight color of the beads (resource name
" highlightBeadColor").
- -primaryRailColor color
- This option specifies the foreground of the rails (resource name "
primaryRailColor").
- -secondaryRailColor color
- This option specifies the secondary color of the rails (resource name
" secondaryRailColor").
- -highlightRailColor color
- This option specifies the highlight color of the rails (resource name
" highlightRailColor").
- -bumpSound filename
- This option specifies the file for the bump sound for the movement of the
beads (resource name " bumpSound").
- -moveSound filename
- This option specifies the file for the move sound for the sliding of the
decimal point marker (resource name " moveSound").
- -dripSound filename
- This option specifies the file for the drip sound for changing the format
(resource name " dripSound").
- -[no]sound
- This option specifies if a sliding bead should make a sound or not
(resource name " sound").
- -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]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 auxiliary, 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 numbers and the number
of lines constant. (Windows version writes to Abacus.les.)
- -[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 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 lesson). The demo uses
Abacus1.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.
- -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]teach
- This option specifies to run in teach mode. In this mode, the abacus is
controlled by 2 numbers separated by an operator: "+" for
addition, "-" for subtraction, "*" for multiplication,
and "/" for division. The square root operation is represented
by the number to be operated on followed by the character "v"
(this leaves you with an answer from which you must divide by 2).
Similarly, the cube root operation is represented by the number to be
operated on followed by the character "u" (this leaves you with
an answer from which you must divide by 3). Press return key to progress
through the steps (resource name " teach").
- -[no]rightToLeftAdd
- This option specifies the order for teach starting side for addition and
subtraction. The default is the traditional left to right. Right to left
seems easier though (resource name "
rightToLeftAdd").
- -[no]rightToLeftMult
- This option specifies the order for teach starting side for
multiplication. The default is the traditional left to right. Right to
left seems more straight forward (resource name "
rightToLeftMult").
- -[no]lee
- This option allows you to turn on and off the two extra auxiliary abaci
(resource name " lee").
- -rails int
- This option specifies the number of rails (resource name
"rails").
- -leftAuxRails int
- This option allows you to set the number of the rails for the left
auxiliary abacus in Lee's Abacus (resource name "
leftAuxRails").
- -rightAuxRails int
- This option allows you to set the number of the rails for the right
auxiliary abacus in Lee's Abacus (resource name "
rightAuxRails").
- -[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]topOrient
- This option specifies the orientation of the beads on top (resource name
" topOrient").
- -[no]bottomOrient
- This option specifies the orientation of the beads on bottom (resource
name " bottomOrient").
- -topNumber int
- This option specifies the number of beads on top (resource name "
topNumber").
- -bottomNumber int
- This option specifies the number of beads on bottom (resource name "
bottomNumber").
- -topFactor int
- This option specifies the multiply factor for the beads on top (resource
name " topFactor").
- -bottomFactor int
- This option specifies the multiply factor for the beads on bottom
(resource name " bottomFactor").
- -topSpaces int
- This option specifies the number of spaces on top (resource name "
topSpaces").
- -bottomSpaces int
- This option specifies the number of spaces on bottom (resource name "
bottomSpaces").
- -topPiece int
- This option specifies the number of pieces on top (resource name "
topPiece").
- -bottomPiece int
- This option specifies the number of pieces on bottom (resource name "
bottomPiece").
- -topPiecePercent int
- This option specifies the number of piece percents on top (resource name
" topPiecePercent").
- -bottomPiecePercent 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 "
subbead").
- -[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").
- -[no]group
- This option allows you to group the displayed digits for readability
(resource name " group").
- -groupSize int
- This option specifies the group size to the left of the decimal point
(normally 3) (resource name " groupSize").
- -[no]decimalComma
- This option allows you to swap "." for "," to allow
for different display format (resource name "
decimalComma").
- -base int
- This option specifies the base used on abacus (default is base 10)
(resource name " base").
- -[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 multiplicative 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 "
anomalySq").
- -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 calculation 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]pressOffset
- This option allows you to put a pixel space between all the beads so there
is room for the bead to move when pressed (resource name "
pressOffset").
- -[no]romanNumerals
- This option allows you to set the abacus to allow Roman Numerals (resource
name " romanNumerals"). Roman Numerals above 3999 are
normally represented with bars on top, due to ASCII constraints this is
represented instead in lower case (historically case was ignored). Roman
Numerals above 3,999,999 were not represented historically. Roman numerals
change with displayBase in an "experimental" way. When used with
twelfths and subdecks, named fraction symbols are used. Due to ASCII
constraints the sigma is represented as E, the backwards C is represented
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]latin
- This option allows you to set the abacus to allow latin fractions instead
of symbolic in the Roman numeral output (resource name "
latin").
- -[no]ancientRoman
- This option allows you to set the abacus to allow ancient Roman numerals
instead of the modern in the Roman numeral output (resource name "
ancientRoman").
- -[no]modernRoman
- This option allows you to set the abacus to allow modern Roman numerals
instead of the ancient on the Roman Hand abacus (resource name "
modernRoman").
- -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.
- -generic
- This option specifies the format on the abacus (resource name "
format") to "Generic". 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.
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 Publications, Inc
1958, pp 156-195.
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)
COPYRIGHTS¶
® Copyright 1994-2014, David A. Bagley
Luis Fernandes, <
elf@ee.ryerson.ca> wrote an independent program
(xabacus 1.00) with a demo mode and postscript file. I tried, with his
permission, 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, <
saratcmahadevan@yahoo.com> and some of these ideas were ported back
into this X version.
BUG REPORTS AND PROGRAM UPDATES¶
Send bugs (or their reports, or fixes) to the author:
David A. Bagley, <bagleyd@tux.org>
The latest version is currently at: