Class Rechner

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by java.awt.Panel
              extended by java.applet.Applet
                  extended by Rechner
All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, Accessible

public class Rechner
extends Applet

Ein kleiner ganzzahliger Rechner mit Stack-Architektur.

Ein Objekt dieser Klasse stellt ein Applet dar, welches interne Logik und Anzeige eines ganzzahligen Rechners mit Stack-Architektur mit vier Stackregistern (x, y, z und t wie bei den HP-Taschenrechnern) darstellt.

Dezimale und hexadezimale Darstellung werden unterstützt.

Die (Tasten-) Eingaben für Ziffern, Enter und Operationen gehören nicht zum (Applet-) Objekt. Sie sind über öffentliche Methoden ansteuerbar. Damit ist ein beliebig gestaltetes Tastenfeld in der einbettenden HTML-Seite (als Formular-Tabelle) leicht realisierbar.

Auf einer Demo-Seite man sich dies alles anschauen. Diesem html-file (see page source) kann man auch die Anregung für eine Formularansteuerung des kleinen Rechners entnehmen. Das referenzierte .jar-File wurde generiert mit (sinngemäß) den folgenden Anweisungen:

     javac  -d build Rechner.java
     cd build
     jar cfvM rechner.jar Rechner.class
       de\a_weinert\graf\DisplayMuster.class
        de\a_weinert\graf\MatrixDisplay.class
         de\a_weinert\graf\MatrixDisplayDim.class
          de\a_weinert\graf\MatrixDisplay$Impl.class
  

Copyright 2001, 2003, 2004   Albrecht Weinert

Version:
1 (11.02.2010)
Author:
Albrecht Weinert
See Also:
de.a_weinert.graf, MatrixDisplay, DisplayPattern, Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class java.applet.Applet
Applet.AccessibleApplet
 
Nested classes/interfaces inherited from class java.awt.Panel
Panel.AccessibleAWTPanel
 
Nested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainer
 
Nested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
 
Field Summary
static int ANZ_EL
          Anzahl der 5*8 Elemente in der Anzeige.
protected  boolean autoEnter
          Zustand: nächste Zifferneingabe macht Enter.
protected  boolean enterTo0
          Zustand: nächste Zifferneingabe löscht vorher X.
protected  boolean hex
          Zustand Hex-Rechner.
protected  MatrixTextDisplay md
          Die Anzeige.
protected static byte[][] MINI_E
          Darstellungsmuster für verkleinertes (5*3) E.
protected static byte[][] MINI_H
          Darstellungsmuster für verkleinertes (5*3) H.
static String NVC
          Name, Version, Copyright.
protected  long t
          Stackregister T (Stack ist x, y, z, t)
protected  boolean thrOn
          Laufanzeige-Thread soll laufen.
protected  long x
          Hauptregister X (=Anzeige)
protected  long y
          Stackregister Y (Stack ist x, y, z, t)
protected  long z
          Stackregister Z (Stack ist x, y, z, t)
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
Rechner()
           
 
Method Summary
 void chgSign()
          Ändern des Vorzeichens von x: x = -x.
 void chgXY()
          Vertauschen von x und y.
 void clrXclrAll()
          Löschen von X oder allen Registern.
 void enter()
          Push-Operation beziehungsweise Enter.
 void init()
          Initialisierung.
 void invHex()
          Hex-Dez-Umschaltung.
 void mal()
          Multiplikation x = x * y.
 void minus()
          Subtraktion x = y - x.
 void mod()
          Modulo (ganzzahliger Rest) x = y % x.
 void paint(Graphics g)
          Malen der Anzeige.
 void plus()
          Addition x = y + x.
 void reset()
          Rücksetzen in den Einschaltzustand.
 void rollDown()
          Herunterrollen des Stack (t wird urspr.
 void showX()
          Neu Anzeigen von X .
 void teilen()
          Division (ganzzahlig) x = y / x.
 void teilen2()
          Division und Rest (ganzzahlig) x,y = (y / x), (x mod y).
 void update(Graphics g)
          Aufdaten der Anzeige.
 void yHx()
          Exponent (y hoch x) x = y ** x.
 void zif(int zif)
          Eingabe einer Ziffer (0..9; ..15).
 
Methods inherited from class java.applet.Applet
destroy, getAccessibleContext, getAppletContext, getAppletInfo, getAudioClip, getAudioClip, getCodeBase, getDocumentBase, getImage, getImage, getLocale, getParameter, getParameterInfo, isActive, newAudioClip, play, play, resize, resize, setStub, showStatus, start, stop
 
Methods inherited from class java.awt.Panel
addNotify
 
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getAlignmentX, getAlignmentY, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getInsets, getLayout, getListeners, getMaximumSize, getMinimumSize, getMousePosition, getPreferredSize, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, paramString, preferredSize, print, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, removeNotify, setComponentZOrder, setFocusCycleRoot, setFocusTraversalKeys, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setFont, setLayout, transferFocusBackward, transferFocusDownCycle, validate, validateTree
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, disable, disableEvents, dispatchEvent, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBaseline, getBaselineResizeBehavior, getBounds, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocation, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getToolkit, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, printAll, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, reshape, setBackground, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeysEnabled, setForeground, setIgnoreRepaint, setLocale, setLocation, setLocation, setMaximumSize, setMinimumSize, setName, setPreferredSize, setSize, setSize, setVisible, show, show, size, toString, transferFocus, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

NVC

public static final String NVC
Name, Version, Copyright.

See Also:
Constant Field Values

x

protected long x
Hauptregister X (=Anzeige)


y

protected long y
Stackregister Y (Stack ist x, y, z, t)


z

protected long z
Stackregister Z (Stack ist x, y, z, t)


t

protected long t
Stackregister T (Stack ist x, y, z, t)


MINI_H

protected static final byte[][] MINI_H
Darstellungsmuster für verkleinertes (5*3) H.


MINI_E

protected static final byte[][] MINI_E
Darstellungsmuster für verkleinertes (5*3) E.


ANZ_EL

public static final int ANZ_EL
Anzahl der 5*8 Elemente in der Anzeige.

Wert: 20

See Also:
Constant Field Values

md

protected MatrixTextDisplay md
Die Anzeige.

Die eigentliche Anzeige wird als ein Objekt der Klasse MatrixTextDisplay realisiert.

Es wird mit Platz für eine Zeile von 20 (ANZ_EL) 5 * 8 Anzeigeelementen mit jeweils 2 Matrixpunkten Abstand in horizontaler Richtung (also (5+2=7)*8 Matrixpunkten) erzeugt. Die Matrixpunkte selbst sind 4 * 4 Pixel groß und liegen dicht.

Die Mindestgröße des Applets ergibt damit zu sich zu etwa 596 * 60 (width * height).


hex

protected boolean hex
Zustand Hex-Rechner.


enterTo0

protected boolean enterTo0
Zustand: nächste Zifferneingabe löscht vorher X.


autoEnter

protected boolean autoEnter
Zustand: nächste Zifferneingabe macht Enter.


thrOn

protected boolean thrOn
Laufanzeige-Thread soll laufen.

Constructor Detail

Rechner

public Rechner()
Method Detail

init

public void init()
Initialisierung.

Overrides:
init in class Applet

update

public void update(Graphics g)
Aufdaten der Anzeige.

Diese Methode verzichtet auf das komplette Löschen mit Hintergrundfarbe, da paint() alle Matrixpunkte aktualisiert. Ein Matrixdisplay flackert also auch ohne Zusatzmaßnahmen nicht.

Overrides:
update in class Container

paint

public void paint(Graphics g)
Malen der Anzeige.

Entspricht update().

Overrides:
paint in class Container

zif

public void zif(int zif)
Eingabe einer Ziffer (0..9; ..15).

Diese Methode ist mit entsprechendem Parameter von den Zifferntasten 0..9,A..F aufzurufen.

Die Anzeige wird entsprechend geändert. Nach einer vorangegangenen Operation wird vorher enter() ausgeführt.


showX

public void showX()
Neu Anzeigen von X .


mal

public void mal()
Multiplikation x = x * y.

Diese Methode multipliziert die beiden unteren Stackregister und "zieht" den Stack eins runter (t wird nach z kopiert).


teilen

public void teilen()
Division (ganzzahlig) x = y / x.

Diese Methode verknüpft die beiden unteren Stackregister und "zieht" den Stack eins runter (t wird nach z kopiert).


teilen2

public void teilen2()
Division und Rest (ganzzahlig) x,y = (y / x), (x mod y).

Diese Methode berechnet den ganzzahligen Quotienten y / x und den ganzzahligen Rest y mod x (y % x in Java). der neue Inhalt von x ist der Quotient und der von y der Rest. Durch Vertauschen mit chgXY() kann man beide Ergebnisse abwechselnd in's x-Register bringen.
Die Register z und t bleiben unverändert.


mod

public void mod()
Modulo (ganzzahliger Rest) x = y % x.

Diese Methode verknüpft die beiden unteren Stackregister und "zieht" den Stack eins runter (t wird nach z kopiert).


yHx

public void yHx()
Exponent (y hoch x) x = y ** x.

Diese Methode verknüpft die beiden unteren Stackregister und "zieht" den Stack eins runter (t wird nach z kopiert).


plus

public void plus()
Addition x = y + x.

Diese Methode verknüpft die beiden unteren Stackregister und "zieht" den Stack eins runter (t wird nach z kopiert).


minus

public void minus()
Subtraktion x = y - x.

Diese Methode verknüpft die beiden unteren Stackregister und "zieht" den Stack eins runter (t wird nach z kopiert).


chgSign

public void chgSign()
Ändern des Vorzeichens von x: x = -x.

Diese Methode ändert das Vorzeichen des Inhalts des Hauptstackregisters x. Die anderen drei Stackregister. bleiben unverändert.


invHex

public void invHex()
Hex-Dez-Umschaltung.

Diese Methode ändert den Modus von Dezimal nach Hexadezimal beziehungsweise umgekehrt.


chgXY

public void chgXY()
Vertauschen von x und y.

Diese Methode vertauscht den Inhalt der beiden unteren Stackregister. t und z bleiben unverändert.


rollDown

public void rollDown()
Herunterrollen des Stack (t wird urspr. x).

Diese Methode rollt den Stack nach unten bzw. nach x, setzt aber den ursprünglichen x-Inhalt nach t.

Nach viermaliger Anwendung ist der Ausgangszustand wieder erreicht.


enter

public void enter()
Push-Operation beziehungsweise Enter.

Diese Methode schiebt den Inhalt des Stacks um eins hoch. x wird nach y kopiert; der bisherige Inhalt von t geht verloren.


reset

public void reset()
Rücksetzen in den Einschaltzustand.

Diese Methode löscht alle Stack-Register auf 0 und setzt den Modus auf Dezimal.

Außerdem wird eine Laufanzeige (nach links) der Versionsinformation gezeigt.


clrXclrAll

public void clrXclrAll()
Löschen von X oder allen Registern.

Diese Methode löscht nur das X-Register, falls dieses nicht 0 ist. Sonst werden auch alle übrigen Stack-Register auf 0 gesetzt.