Allgemeine Syntaxbeschreibung der Konfigurationsdateien und der Zeichenkettendatei   [3/3]
18xx/PC V2.22g - Dirk Clemens - 2004-05-07

  Seite 1    Seite 2    Seite 3 


page up top page
previous page top
previous page bottom
down bottom
 Homepage 
 Start 
 Neuigkeiten 
 Download 
 Hauptseiten 
 Überblick 
 18xx Spiele 
 kleine 1x8 
 18xx/PC 
 Geschichte 
 Links 
 Index 
 Programme 
 Überblick 
 18xx.exe 
 18config.exe 
 18export.exe 
 18string.exe 
 18check.exe 
 18list.exe 
 Varianten 
 18xx 
 1825 
 1826 
 1828 
 1829 
 1830 
 1835 
 1837 
 1839 
 1841 
 1842 
 1844 
 1847 
 1849 
 1851 
 1853 
 1856 
 1862 
 1869 
 1870 
 1895 
 1898 
 2038 

Inhaltsverzeichnis


page up top page
up top
previous page top
previous page bottom
down bottom

7.   Speicherverwaltung

7.1   Platzbedarf der Variablen

  --- ??? ---  


page up top page
up top
previous page top
previous page bottom
down bottom

7.2   Auswertung und Berechnung der Formeln

Bei der Auswertung jeder Formel wird diese Compiliert und ein P-Code Programm mit den folgenden Eigenschaften erstellt:



page up top page
up top
previous page top
previous page bottom
down bottom

8.   Referenz

8.1   Zusammenfassung der Preprozessor Befehle

  0    0   A   B   C   D   E   F   G   H   I   J   K   L   M 
 N   O   P   Q   R   S   T   U   V   W   X   Y   Z 

#> <Text.Ausdruck>
#IFNOT <logischer.Ausdruck>
#IFNDEF <Variablen.Ausdruck>
#DEF ( Text_Ausduck ) [ = <Ausdruck> ]  [; ...]
#UNDEFINE Variablenname "Zeichenchenkette" (Ausdruck) ...
#GDEF "Zeichenkette" [ = <Ausdruck> ]  [; ...]
#GUNDEFINE Variablenname "Zeichenchenkette" (Ausdruck) ...
#PUNDEF Variablenname "Zeichenchenkette" (Ausdruck) ...
#PUNDEFINE Variablenname "Zeichenchenkette" (Ausdruck) ...
#ERROR <Text.Ausdruck>
#CHAIN (Dateiname)
#CHAIN [Dateiname]
#CHAIN <Dateiname>
#LABEL Namen...
#GOTO Label
#GOTO Label #IF* ...
#GOSUB Label
#LOOP
#ENDLOOP
#ENDL
#ENDREPEAT
#ENDR
#ENDWHILE
#ENDW
#ENDFOR
#ENDF
#BREAK
#CONTINUE
#CALL name ( parameter, ... )
#CALL ? ...
#: name
#: name ( parameter, ... )
#: name ( parameter, ... ) [N]
#: ? ...
#END
#END <Ausdruck>
#EXIT
#EXIT <Ausdruck>
#PARAMS [index] variable1,variable2,...
#PARAMS variable1,variable2,...
#PARAMETERS [index] variable1,variable2,...
#PARAMETERS variable1,variable2,...
#CALL name ( parameter, ... ) [N]
#CALL name

  P    0   A   B   C   D   E   F   G   H   I   J   K   L   M 
 N   O   P   Q   R   S   T   U   V   W   X   Y   Z 

#ENDM
#ENDMACRO
#MACRO name
#CONTINUE #IF* ...
#BREAK #IF* ...
#FOR Variable [:][=] VON ; BIS [ ; SCHRITTWEITE ]
#GOSUB Label #IF* ...
#WHILE <logischer.Ausdruck>
#REPEAT <Ganzzahl.Ausdruck, 32 Bit>
#INCLUDE <Dateiname>
#INCLUDE [Dateiname]
#INCLUDE (Dateiname)
#MESSAGE <Text.Ausdruck>
#ECHO <Text.Ausdruck>
#PDEFINE [ [n] ] Variable [ = <Ausdruck> ]  [; ...]
#PDEF [ [n] ] ( Text_Ausduck ) [ = <Ausdruck> ]  [; ...]
#PDEF [ [n] ] 'Zeichenkette' [ = <Ausdruck> ]  [; ...]
#PDEF [ [n] ] "Zeichenkette" [ = <Ausdruck> ]  [; ...]
#PDEF [ [n] ] Variable [ = <Ausdruck> ]   [; ...]
#GUNDEF Variablenname "Zeichenchenkette" (Ausdruck) ...
#GDEFINE Variable [ = <Ausdruck> ]  [; ...]
#GDEF ( Text_Ausduck ) [ = <Ausdruck> ]  [; ...]
#GDEF 'Zeichenkette' [ = <Ausdruck> ]  [; ...]
#GDEF Variable [ = <Ausdruck> ]   [; ...]
#XDEF "Zeichenkette" [ = <Ausdruck> ]  [; ...]
#WARNING <Text.Ausdruck>
#XUNDEFINE Variablenname "Zeichenchenkette" (Ausdruck) ...
#XUNDEF Variablenname "Zeichenchenkette" (Ausdruck) ...
#XDEFINE Variable [ = <Ausdruck> ]  [; ...]
#XDEF ( Text_Ausduck ) [ = <Ausdruck> ]  [; ...]
#XDEF 'Zeichenkette' [ = <Ausdruck> ]  [; ...]
#XDEF Variable [ = <Ausdruck> ]   [; ...]
#UNDEF Variablenname "Zeichenchenkette" (Ausdruck) ...
#DEFINE Variable [ = <Ausdruck> ]  [; ...]
#DEF 'Zeichenkette' [ = <Ausdruck> ]  [; ...]
#DEF "Zeichenkette" [ = <Ausdruck> ]  [; ...]
#DEF Variable [ = <Ausdruck> ]   [; ...]
#DOIF ( <logischer.Ausdruck> ) Kommando_oder_Textzeile
#FI
#ENDIF
#ELSE
#ELIF* ...
#ELSE IF* ...
#IFUNDEF <Variablen.Ausdruck>
#IFDEF <Variablen.Ausdruck>
#IF <logischer.Ausdruck>
## Kommentar
#! Kommentar
#

 0   A   B   C   D   E   F   G   H   I   J   K   L   M 
 N   O   P   Q   R   S   T   U   V   W   X   Y   Z 


page up top page
up top
previous page top
previous page bottom
down bottom

8.2   Zusammenfassung der Funktionen

  0    0   A   B   C   D   E   F   G   H   I   J   K   L   M 
 N   O   P   Q   R   S   T   U   V   W   X   Y   Z 

def ( V1, V2, ..., Vn )
symbol ( name, default, min )
sym ( ... )
var ( P1, P2, ..., PN )
type ( x )
clear ( x )
isempty ( varname )
isnum ( varname )
isint ( varname )
isint32 ( varname )
isint64 ( varname )
isfloat ( varname )
isstring ( varname )
islist ( varname )
ismap ( varname )
parm ( index )
last ( x1, x2, ..., xn )
int32 ( x )
trunc32 ( x )
trunc32 ( x, base )
int64 ( x )
int64 ( x, base )
map ( ????? )
cos ( x )
abs ( num )
exp ( x )
pow ( x, y )
log10 ( x )
mean ( x1, x2, ..., xn )
gmean ( x1, x2, ..., xn )
hmean ( x1, x2, ..., xn )
min ( x1, x2, ..., xn )
max ( x1, x2, ..., xn )
clearbit ( number, bitnum )
clearbit ( string, bitnum )
invertbit ( number, bitnum )
lowest0bit ( number )
lowest0bit ( string )
lowest1bit ( number )
lowest1bit ( string )
highest0bit ( number )
highest0bit ( string )
highest1bit ( number )
highest1bit ( string )
count0bits ( number )
count0bits ( string )
count1bits ( number )
count1bits ( string )
date ( time )
date ( time, base )
dayname ( index )
monthname ( index )
length ( x )
len ( x )
mid ( string, pos )
item ( string, index )
itemRE ( string, index, reg_expr )
itemRE ( string, index, reg_expr, ignore_case )
countRE ( string, ref_expr )
countRE ( string, ref_expr, ignore_case )
expand ( string, newlen, expstr, mode )
breakintolines ( xsize )
breakintolines ( ysize )
char ( num, n )
find ( string, substring, pos )
find ( string, substring, pos, skip_count )
findrevers ( string, substring )
findrevers ( string, substring, pos )
findRE ( string, reg_expr, pos, ignore_case )
match ( string, pattern )
encode64 ( string, max_line_len )
l$replace ( list_var, index, x )
l$length ( list_var )
l$sort ( list_var )
l$pack ( list_var, ????? )
l$setlength ( list_var, ????? )
list2 ( ????? )
catlist ( ????? )
m$cat ( ????? )
m$exist ( ????? )
m$insertmap ( ????? )
m$keys ( ????? )
m$keys ( ????? )
m$map ( ????? )
m$remove ( ????? )
m$removemap ( ????? )
m$replace ( ????? )
m$replacemap ( ????? )
m$size ( ????? )
m$storemap ( ????? )
color ( color )
color ( scheme, index )
blue ( color )
mixcolor ( color1, color2, weight_1000 )
filename ( flags, F1, F2, ..., FN )
printfilename ( filename, format )
fileattrib ( filename )
filetime ( filename )
findFiles ( options_and_pattern )
findFiles ( options_and_pattern, filename_base )
moveFile ( ????? )
linkFile ( ????? )
deleteFile ( ????? )
deleteFiles ( ????? )
fileAccessMode ( ????? )
move ( ????? )
key ( wait, default )
check ( ... )
extern ( ... )
exist ( ... )
info ( ... )
calc ( ... )
key ( wait )
key ( )
index ( index, max )
cmplex ( x1, x2 )
cmp ( x1, x2 )
pi ( )
e ( )
none ( )
inclAccessMode ( ????? )
linkFiles ( ????? )
moveFiles ( ????? )
copyFiles ( ????? )
copyFile ( ????? )
findFile ( pattern, search_list, filetype )
filesize ( filename )
filetype ( filename )

  P    0   A   B   C   D   E   F   G   H   I   J   K   L   M 
 N   O   P   Q   R   S   T   U   V   W   X   Y   Z 

fileinfo ( ????? )
printfilename ( filename, format, system, i_num, j_num, escape_char )
printfilename ( filename, format, system, i_num, j_num )
printfilename ( filename, format, system, i_num )
printfilename ( filename, format, system )
minimize ( filename, base )
filename ( F1, F2, ..., FN )
mixcolor ( color1, color2 )
green ( color )
colorscheme ( scheme )
catmap ( ????? )
m$store ( ????? )
m$purge ( ????? )
m$pack ( ????? )
m$oncemap ( ????? )
test ( num, bool )
uniqueid ()
testdef ( num, bool )
m$maskmap ( ????? )
m$length ( ????? )
m$keys ( ????? )
m$keys ( ????? )
m$keys ( ????? )
m$insert ( ????? )
m$clear ( ????? )
flatlistnum ( ????? )
flatlist ( ????? )
l$setsize ( list_var, ????? )
l$purge ( list_var, ????? )
l$list ( list_var, ????? )
l$cat ( list_var, ????? )
l$sortlex ( list_var )
l$size ( list_var )
l$remove ( list_var, index )
l$insert ( list_var, index, x )
l$append ( list_var, x )
l$clear ( list_var )
decode64 ( string, bool:ignore_blanks )
encode64 ( string )
decode64 ( string, bool:ignore_blanks )
checkkeyword ( keyword, table, abrev_allowed )
findRE ( string, reg_expr, pos, ignore_case, skip_count )
findRE ( string, reg_expr, pos )
findRE ( string, reg_expr )
findrevers ( string, substring, pos, skip_count )
find ( string, substring )
print ( format, ... )
capitals ( string )
lower ( string )
chgcase ( string )
ord ( string, n )
ord ( string )
char ( num )
breakintolines ( ignore_char )
breakintolines ( bool:leave_spaces )
breakintolines ( bool:small )
expand ( string, newlen, expstr )
count ( string, search )
item ( string, index, seperator )
append ( string, text )
insert ( string, pos, text )
left ( string, n )
mid ( string, pos, n )
extract ( string, von, bis )
message ( msg_index )
language ()
date ( )
invertbit ( string, bitnum )
countval ( ????? )
countnum ( ????? )
maxlength ( ????? )
over ( n, k )
floor ( x )
ceil ( x )
polynom ( X, An, ..., A2, A1, A0 )
printtime ( time, Format, escape_char )
printtime ( time, Format )
prod ( num, ... )
log2 ( x )
log ( x, basis )
log ( x )
cosh ( x )
atan ( x )
acos ( x )
asin ( x )
bitmap ( x )
list ( P0, ..., PN )
bool ( x )
num ( x, base )
num ( x )
float ( x )
int ( x, base )
int ( x )
string ( x, format )
string ( x, int_format, float_format )
roman ( num )
scanroman ( text )
scanroman ( text, bool_mega_point )
tan ( x )
sinh ( x )
tanh ( x )
sign ( num )
sign ( num, epsilon )
sqrt ( x )
rnd ( von )
round ( x )
sum ( num, ... )
testbit ( number, bitnum )
testbit ( string, bitnum )
setbit ( number, bitnum )
setbit ( string, bitnum )
time ( )
scantime ( text, base )
sec(), msec(), usec(), nsec() ()
size ( ????? )
remove ( string, von, bis )
right ( string, n )
replace ( string, pos, text )
subst ( string, search, replace )
substRE ( string, reg_expr, replace )
substRE ( string, reg_expr, replace, count )
substRE ( string, reg_expr, replace, count, ignore_case )
substchar ( string, search, [replacements...] )
translate ( string, search, replace )
seperator ( string, index )
sort ( string )
sort ( string, seperator )
sortlex ( ????? )
trim ( string )
trim ( string, mode )
upper ( string )
scan ( text )
split ( ????? )
splitRE ( ????? )
red ( color )
rgb ( red, green, blue )
relative ( filename, base )
vector ( ????? )
scansize ( text, intbase )
scansize ( text )
scan ( text, intbase )
sortstring ( string )
word ( string, index )
subst ( string, search, replace, count )
scantime ( text, base, varname )
scantime ( text )
selecttime ( time, index )
splittime ( time, mode )
splittime ( time )
time ( time, base )
time ( time )
rnd ( von, bis )
rnd ( )
range ( num, min, max )
sin ( x )
roman ( num, flags )
string ( x )
int64hl ( high32, low32 )
int32 ( x, base )
select ( INDEX, x0, x1, ..., xn )
first ( x1, x2, ..., xn )
varname ( P1, P2, ..., PN )
lastdef ( V1, V2, ..., Vn )
firstdef ( V1, V2, ..., Vn )
symbol ( name, default, min, max )
symbol ( name, default )
symbol ( name )
defined ( V1, V2, ..., Vn )
setError ( error_mask )
getError ()

 0   A   B   C   D   E   F   G   H   I   J   K   L   M 
 N   O   P   Q   R   S   T   U   V   W   X   Y   Z 




page up top page
up top
previous page top
previous page bottom
down bottom

8.3   Reguläre Ausdrücke

Reguläre Ausdrücke werden zum Suchen in Texten verwendet. Die Funktionen 'countRE()', 'itemRE()', 'findRE()' und 'substRE()' verwenden reguläre Ausdrücke.

Reguläre Ausdrücke sind Zeichenketten, bei denen einige Zeichen als Steuerzeichen interpretiert werden. Dabei werden Übereinstimmungen mit dem zu durchsuchenden Text gesucht. Die folgenden Steuerzeichen werden erkannt:




page up top page
up top
previous page top
previous page bottom
down bottom

8.4   Datums- und Zeitangaben

Das Einlesen einer Zeitangabe werden solange die Zeichenkette ausgewertet, bis das dann aktuelle ein Zeichen nicht mehr interpretierbar ist.

Zuerst wird untersucht, ob die Zeitangabe (das erste nicht Leerzeichen oder TAB) mit einem Vorzeichen ('+' oder '-') beginnt. Ist dieses der Fall, dann handelt es sich um eine relative Zeitangabe. Die relative Zeitangabe wird relativ zur angegeben Basis oder ersatzweise zur aktuellen Zeit addiert um eine absolute Zeit zu erhalten.

Andernfalls handelt es sich eine absolute Zeitangabe. Diese absoluten Zeitangabe kann auch noch eine relative Zeitangabe folgen, die dann zur absoluten Zeit addiert wird.

Syntaxbeschreibung:

 
ZEIT:= ABSOULT | RELATIV | ABSOLUT RELATIV
ABSOLUT:= FAKTOR | DATUM | ZEIT | DATUM ZEIT | DATUM ZEIT JAHR
FAKTOR:= [blanks] { s | S | m | M | h | H } ziffern
DATUM:= [blanks] wochentag | [blanks] [wochentag] [blanks] DATUM1
DATUM1:= reltag | NUMMER | ZIFFERN6 | ZIFFERN8 | DATUM2
DATUM2:= MT | MTJ | TM | TMJ | JMT
 
MT:= monat | monat TAG31 ['.']
MTJ:= monat TAG31 ['.'] JAHR
TM:= TAG1 '.' MONAT1 ['.'] | TAG31 ['-'] [MONAT1] ['-']
TMJ:= TAG1 '.' MONAT1 ['.'] JAHR | TAG31 ['-'] [MONAT1] ['-'] JAHR
JMT:= JAHR ['-'] MONAT1 ['-'] TAG2
 
NUMMER:= JAHR4 MONAT2 TAG2 ZEIT (Format: 'yyyymmddHHMMSS)'
ZIFFERN6:= TAG31 MONAT2 JAHR2 | JAHR1 MONAT2 TAG2 ([d]dmmyy|[y]ymmdd)
ZIFFERN8:= TAG31 MONAT2 JAHR4 | JAHR3 MONAT2 TAG2 ([d]dmmyyyy|[y]yyymmdd)
 
TAG1:= digit [digit]
TAG2:= digit digit
TAG31:= digit [digit] (Zahl aus dem Bereich 1..31)
MONAT1:= monat | ziffer [ziffer]
MONAT2:= ziffer ziffer
JAHR:= digits [ 'BC' | 'AD' ]
JAHR1:= ziffer [ziffer]
JAHR2:= ziffer ziffer
JAHR3:= ziffer ziffer ziffer [ziffer]
JAHR4:= ziffer ziffer ziffer ziffer
 
ZEIT:= { HMS1 | HMS2 | SEKUNDEN | ZEIT6 | ZEIT4 } [ 'AM' | 'PM' ]
HMS1:= ziffern [ ':' ziffern [ ':' SEKUNDEN ]] (hh:mm:ss.s)
HMS2:= ziffern [ '-' ziffern [ '-' SEKUNDEN ]] (hh-mm-ss.s)
ZEIT6:= ziffern (5 oder 6 Ziffern, Format '[h]hmmss')
ZEIT4:= ziffern (3 oder 4 Ziffern, Format '[h]hmm')
SEKUNDEN:= ziffern '.' HINTERKOMMA
HINTERKOMMA:= ziffern (1 bis 9 Ziffern)
 
RELATIV:= INTERVALL | ZEIT | TAGE
TAGE:= ziffern [ blank ZEIT ]
 
INTERVALL:= [I_WOCHE] [I_TAG] [I_STUNDE] [I_MIN] [I_SEK] [I_MSEK] [I_USEK] [I_NSEK]
I_WOCHE:= ziffern { 'w' | 'W' } (Anzahl Wochen)
I_TAG:= ziffern { 'd' | 'D' } (Anzahl Tage)
I_STUNDE:= ziffern { 'h' | 'H' } (Anzahl Stunden)
I_MIN:= ziffern { 'm' | 'M' } (Anzahl Minuten)
I_SEK:= ziffern { 's' | 'S' } (Anzahl Sekunden)
I_MSEK:= ziffern { 'i' | 'I' } (Anzahl Millisekunden)
I_USEK:= ziffern { 'u' | 'U' } (Anzahl Microsekunden)
I_NSEK:= ziffern { 'n' | 'N' } (Anzahl Nanosekunden)
 
reltag:= 'gestern' | 'heute' | 'morgen' | 'yesterday' | 'today' | 'tomorrow'
wochentag:= 'montag' | ... | 'sonntag' | 'monday' | ... | 'sunday'
monat:= 'januar' | ... | 'dezember' | 'january' | ... | 'december'
ziffern:= ziffer [ziffern]
ziffer:= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
blanks:= blank [blanks]
blank:= leerzeichen | tabulator

Anmerkungen:

Beispiele:
Basiszeit: '2009-08-07 06:05:04.321' (Freitag)
 Zeitangabe   Ergebnis   Kommentar 
    2009-08-07 06:05:04.321   Ohne Text ergibt sich die Basiszeit 
 1   2009-08-01 00:00:00.000   Der 1. des Monats 
 24   2009-08-24 00:00:00.000   Der 24. des Monats 
 42   0042-01-01 00:00:00.000   Den 42. des Monats gibt es nicht, daher das Jahr 42 
 1998   1998-01-01 00:00:00.000   Das Jahr 1998, und zwar der 1. Januar 
 10203   2003-02-01 00:00:00.000   Datum im Format dmmyy 
 010203   2003-02-01 00:00:00.000   Datum im Format ddmmyy 
 800102   2080-01-02 00:00:00.000   Den 80. des Monats gibt es nicht, daher Datum im Format yymmdd 
 04032000   2000-03-04 00:00:00.000   Datum im Format ddmmyyyy 
 20130304   2013-03-04 00:00:00.000   Da '20.13.0304' keine Sinn gibt: Datum im Format yyyymmdd 
 201303040506   2013-03-04 05:06:00.000   Datum+Zeit im Format yyyymmddHHMM 
 20130304050607.89   2013-03-04 14:03:27.890   Datum+Zeit im Format yyyymmddHHMMSS.ss 
 2013-03-04 05:06:07.89   2013-03-04 05:06:07.890   Datum+Zeit im ISO-Format, unverwechselbar 
 2001-03-32   2001-04-01 00:00:00.000   32. März wird als 1. April interpretiert. 
 2001-02-30   2001-03-02 00:00:00.000   30. Februar wird als 2. März interpretiert ... 
 2000-02-30   2000-03-01 00:00:00.000   ... oder in Schaltjahren als 1. März. 
 
 13 Sep 12:30 1999   1999-09-13 12:30:00.000   Englische Zeitangaben werden auch erkannt. 
 Sep 13 12:30 1999   1999-09-13 12:30:00.000   Insbesondere hilft die Angabe der Monatsnamen. 
 Sep 2001   2001-09-01 00:00:00.000   Auch solche Eingaben werden erkannt. 
 
 heute   2009-08-07 00:00:00.000   Die Angabe erfolgt relativ zur Basiszeit 
 heute 12:34   2009-08-07 12:34:00.000   Tagesangabe mit absoluter Zeitangabe ... 
 heute+12:34   2009-08-07 12:34:00.000   ... ist das gleiche wie Tagesangabe mit relativer Zeitangabe 
 morgen-1d   2009-08-07 00:00:00.000   Das gleiche wie heute 
 donnerstag   2009-08-13 00:00:00.000   der nächste Donnerstag 0 Uhr, der nicht in der Vrgangenheit liegt. 
 freitag   2009-08-14 00:00:00.000   Basiszeit ist ein Freitag, also nächsten Freitag 
 samstag   2009-08-08 00:00:00.000   Da Freitag ist: das gleiche wie morgen 
 samstag 2009-08-07   2009-08-07 00:00:00.000   Bei Angabe eines Datums wird der Wochentag ignoriert. 
 
 morgen   2009-08-08 00:00:00.000   Morgen 0 Uhr (relativ zur Basiszeit) 
 +1d   2009-08-08 06:05:04.321   Morgen mit jetziger Uhrzeit 
 +1w1d   2009-08-15 06:05:04.321   1 Woche und 1 Tag weiter (8 Tage weiter) 
 -90m   2009-08-07 04:35:04.321   Vor 90 Minuten (relativ zur Basiszeit) 
 -1h30m   2009-08-07 04:35:04.321   Vor 1 Stunde und 30 Minuten ( == vor 90 Minuten ) 
 2001+200d   2001-07-20 00:00:00.000   Der 200-ste Tag nach dem 1.1.2001; also der 201.ste Tag des Jahres 2001 
 +36h   2009-08-08 18:05:04.321   36 Stunden weiter 
 heute+7201s   2009-08-07 02:00:01.000   Wann waren heute 7201 Sekunden vergangen ? 



page up top page
up top
previous page top
previous page bottom

  Seite 1    Seite 2    Seite 3 

Diese Seite wurde mit MakeDoc V3.22a erzeugt.

18xx/PC V2.22g - © Dirk Clemens - 2004-05-07
dc@18xx.de