/* REXX *************************************************************** * Eingabe Funktion * EURO ATS 100 DEM 100 ATS (über Euro) in DEM umrechnen * EURO 100 ATS 100 Euro in ATS umrechnen * EURO 100 100 Euro in alle Euro-Währungen umrechnen * EURO ATS 100 100 ATS in alle Euro-Währungen umrechnen * EURO 1 Euro in alle Euro-Währungen umrechnen * EURO ATS Name der Währung, Untereinheit und Land herzeigen *********************************************************************** * Änderungen: * 16.05.2001 Walter Pachl pachl@chello.at Lösungsvorschlag **********************************************************************/ Signal On Halt Signal On Novalue Signal On Syntax Numeric Digits 16 Parse Upper Arg a b c . Call init Select When a='?' Then /* Hilfe gewünscht */ Call help /* Ausgabe der Hilfe */ When a='' Then Do /* kein Argument */ einwhg='EUR'; betrag=1; auswhg='' /* alle Gegenwerte zu 1.00 EUR*/ End When a<>'' & datatype(a)='NUM' Then Do /* Betrag an erster Stelle */ einwhg='EUR'; betrag=a; auswhg=b /* Annahme: Euro */ End Otherwise Do /* Zwei oder drei Argumente */ einwhg=a; betrag=b; auswhg=c End End If kurs.einwhg=0 Then Call err 'Eingabewährung ('einwhg') ungültig. Gültig sind:' wlist If betrag='' Then Do Say space(einwhg name.einwhg '/' teil.einwhg '('land.einwhg')') Exit End If auswhg<>'' &, kurs.auswhg=0 Then Call err 'Ausgabewährung ('auswhg') ungültig. Gültig sind:' wlist If betrag<>'' &, datatype(betrag)<>'NUM' Then Call err 'Betrag ('betrag') nucht numerisch.' zbetrag=betrag/kurs.einwhg /* Einbetrag in Euro */ If auswhg<>'' Then Do xx=format(zbetrag*kurs.auswhg,15,dec.auswhg) Say betrag einwhg '=' format(zbetrag,12,6) 'EUR =', format(zbetrag*kurs.auswhg,15,dec.auswhg) auswhg End Else Do Do While wlist<>'' Parse Var wlist whg wlist If whg<>einwhg Then Do If dec.whg=0 Then bla=' ' Else bla='' xx=format(zbetrag*kurs.whg,15,dec.whg) Say betrag einwhg '=' format(zbetrag,12,6) 'EUR =', format(zbetrag*kurs.whg,15,dec.whg)||bla whg End End End Exit init: /********************************************************************** * Währungseigenschaften initialisieren und Währungsliste erstellen **********************************************************************/ wlist='' /* Währungsliste zunächst leer*/ kurs.=0 /* und keinerlei Kurse */ Call setkurs 'ATS',13.7603 ,'Österr. Schilling ','Groschen ',2, 'Österreich' Call setkurs 'BEF',40.3399 ,'Belgischer Franc ','Centimes ',0, 'Belgien' Call setkurs 'DEM',1.95583 ,'Deutsche Mark ','Pfennig ',2, 'Deutschland' Call setkurs 'ESP',166.386 ,'Peseta ',' ',2, 'Spanien' Call setkurs 'EUR',1 ,'MUM-Länder ','Cents ',2, 'Europa' Call setkurs 'FIM',5.94573 ,'Finnmark ','Penniä ',2, 'Finnland' Call setkurs 'FRF',6.55957 ,'Französischer Franc ','Centimes ',2, 'Frankreich' Call setkurs 'GRD',340.750 ,'Griechische Drachme ','Lepta ',0, 'Griechenland' Call setkurs 'IEP',0.787564,'Irisches Pfund ','Pence ',2, 'Irland' Call setkurs 'ITL',1936.27 ,'Italienische Lira ','Centesimi',0, 'Italien' Call setkurs 'LUF',40.3399 ,'Luxemburg.Franc ','Centimes ',0, 'Luxemburg' Call setkurs 'NLG',2.20371 ,'Holländischer Gulden','Cents ',2, 'Niederlande' Call setkurs 'PTE',200.482 ,'Escudo ','Centavos ',0, 'Portugal' wlist=wordsort(strip(wlist)) /* Währungsliste sortieren */ Return setkurs: /********************************************************************** * Attribute der Währung setzen; * kurs.whg Wert eines Euro in der jetzigen Währung * name.whg Name der Währung * teil.whg Unterteilung * dec.whg Anzahl der Dezimalen * land.whg Land in dem die Währung verwendet wird * Zusätzlich Aufbau der Liste der MUM-Währungen (wlist) **********************************************************************/ Parse Arg whg,kurs.whg,name.whg,teil.whg,dec.whg,land.whg wlist=wlist whg Return err: /********************************************************************** * Ausgabe einer Fehlermeldung und Programmende **********************************************************************/ Parse Arg msg Do Until msg='' Parse Var msg m '.' msg Say strip(m) End Exit wordsort: Procedure /********************************************************************** * Die übergebene Wortliste wird aufsteigend sortiert zurückgegeben **********************************************************************/ Parse Arg wl /* Wortliste als Argument */ wa.='' /* Array der Wörter */ wa.0=0 /* Anzahl der Wörter */ Do While wl<>'' /* so lange noch etwas da ist */ Parse Var wl w wl /* nächstes Wort nehmen */ Do i=1 To wa.0 /* ein größeres in wa.i suchen*/ If wa.i>w Then Leave /* gefunden */ End If i<=wa.0 Then Do /* wenn eines gefunden wurde */ Do j=wa.0 To i By -1 /* größere hinaufschieben */ ii=j+1 /* Zielindex */ wa.ii=wa.j /* hier wird geschoben */ End End wa.i=w /* in den freigewordenen Platz*/ wa.0=wa.0+1 /* Anzahl erhöhen */ End swl='' /* sortierte Wortliste */ Do i=1 To wa.0 /* aus allen Wörtern */ swl=swl wa.i /* zusammensetzen */ End Return strip(swl) /* und zurückgeben */ help: /********************************************************************** * Hilfsinformation ausgeben **********************************************************************/ Do i=2 By 1 If pos('***',sourceline(i))>0 Then Leave Say strip(sourceline(i)) End Say 'MUM-Währungen: (eigenlich Minderdenominationen des Euro)' Do ii=1 By 1 While wlist<>'' Parse Var wlist w wlist Say ' 'right(ii,2)'. 'w' 'left(name.w,20) '/' left(teil.w,11), land.w End Exit /********************************************************************** * Fehlerbehandlung (unerwartete Programmfehler) **********************************************************************/ Novalue: Say 'Novalue raised in line' sigl Say sourceline(sigl) Say 'Variable' condition('D') Signal lookaround Syntax: Say 'Syntax raised in line' sigl Say sourceline(sigl) Say 'rc='rc '('errortext(rc)')' halt: lookaround: Say 'You can look around now.' Trace ?R Nop Exit 12