%%HP: T(3)A(D)F(.);
@ Programmbeispiel fr INFORM-Anwendung
@ =====================================
@ (C) Otto Praxl
\<< 
@ Flags sichern, auf Dezimalkomma umschalten
RCLF STD -51 SF
@ Men-Titeltext in Stack-Ebene 5
 "Einkommensteuer fr 2000/2001"
@ Felddefinitionen in Stack-Ebene 4 {{}{}{}... {}},
@  wobei die Innenklammern {"a" "b" n} 
@  den Label "a", den Hilfetext "b"
@  und den Objekt-Typ n (siehe Befehl TYPE) enthalten.
{{"Einkommen:  " "Zu versteuerndes Einkommen in DM" 0}
 {"Steuerfrei: " "Steuerfreie Zuschlge in DM" 0}
 {"Lohnsteuer: " "Bezahlte Lohnsteuer in DM" 0}
 {"Ehegatten-Splitting: " "Ja \>= 1, nein = 0" 0}}
@Anzahl der Spalten, Tabs in Stack-Ebene 3
{1 1}
@ Reset-Werte in Stack-Ebene 2,
@  wenn bei der Eingabe [NXT] und [RESET] gedrckt wurde.
{0 0 0 1}
@ Initialisierungswerte (Vorgabewerte) in Stack-Ebene 1, 
@  die zu berschreiben sind.
{30000.00 0.00 0.00 1}
INFORM
@ Hauptschleife
IF 1 == THEN OBJ\-> DROP IF 1 == THEN 50 SF ELSE 50 CF END
   'LST' STO 'ZUSL' STO 'EINK' STO
@ Ehegattensplitting Flag 50  ja=1 nein=0
   50 FS? IF 1 == THEN EINK ZUSL + 2 / 54 / IP 54 * 
       ELSE EINK ZUSL + 54 / IP 54 * 
       END
@ x ist das mit dem Steuersatz zu 
@ versteuernde Einkommen (bei Splitting die Hlfte)
   \-> x 
@ Berechnung des Steuersatzes
   \<<
   CASE 
   'x \<= 13499' THEN 0 'SATZ' STO END
   'x \>= 13500 AND x \<= 17495' THEN x 13446 - 10000 / 
        DUP 262.76 * 3 TRNC 2290 + SWAP * IP x / 6 RND
        'SATZ' STO END 
   'x \>= 17496 AND x \<= 114695' THEN x 17442 - 10000 / 
        DUP 133.74 * 3 TRNC 2500 + SWAP * 957 + IP x / 6 RND
        'SATZ' STO END
     'x \>= 114696' THEN x 0.51 * 3 TRNC 20575 - IP x / 6 RND
        'SATZ' STO END 
   END
@ zu versteuerndes Einkommen  (in Stack)
   50 FS? IF 1 == THEN EINK 2 / 54 / IP 54 * 2 * ELSE EINK 54 /
   IP 54 *  END 
@ Steuer aufgerundet ohne SolZ
   SATZ * 0 RND IP 'STEU' STO
   \>>
@Ausgabe des Ergebnisses
   CLLCD "Steuerberechnung:
Einkommen:  " EINK IP \->STR + "
Steuersatz: " + SATZ 100 * \->STR + " %
Steuer:     " + STEU  \->STR + "
Bezahlt:    " + LST \->STR + "
Differenz:  " + STEU LST - \->STR  + 
IF 'STEU - LST < 0.' EVAL THEN "
= Erstattung" ELSE "
= Nachzahlung" END + 
0 DISP 0 WAIT DROP
ELSE 
   3000 0.2 BEEP "Einkommensteuer
 Eingabe-Maske
   mit CANCL
  abgebrochen." CLLCD MSGBOX 
END
@Hauptschleife ENDE
50 CF
\<< {LOE EINK ZUSL LST SATZ STEU} PURGE \>> 'LOE' STO
STOF \>>
