OS2.org Site Index - Feedback - Impressum
Sprachauswahl / Choose your Language News Software Hardware Projekte Forum Tipps Links Verschiedenes
Editorial Diskussion HelpDesk Umfrage
[Forum]
in nach (Erweiterte Suche)
[Forum]
( Archiv ) ( Neues Thema )

( Zeige die Threadübersicht ) ( Zur Startübersicht )
14.07.2000
REXX: Wie ObjectID von bestehendem Dateiordner ermitteln? (von: Thomas Kämmerer, 16:01:07) ^
Ich möchte in einem REXX-Skript ein Referenzobject von einem bestehenden Unterverzeichnis erstellen. Beim Aufruf von SysCreateObject brauche ich bei den Optionen die ObjectID des Verzeichnisses; doch woher nehmen? Oder bin ich auf dem völlig falschen Weg?!
[ Leser: 48 ]

Re: REXX: Wie ObjectID von bestehendem Dateiordner ermitteln? (von: Thomas Nolte, 19:04:30)
Lt. OS/2 REXX Referenzhandbuch kann entweder die Objekt-ID oder der Systempfad angegeben werden.

Re: REXX: Wie ObjectID von bestehendem Dateiordner ermitteln? (von: Andreas Schnellbacher, 20:54:13)
Moin Thomas,

Du brauchst fuer SysCreateObject (oder einfacher mit: SysSetObjectData) nicht unbedingt die ObjectID. Du kannst auch den vollst. Pfadnamen angeben. Die ObjectID ist nur fuer abstrakte Objekte (z.B. Programmobjekte), nicht aber Dateiobjekte erforderlich.

Ich empfehle Dir die hervorragende REXX-Dokumentation bzw. -Ergaenzung zu den Ori-Warp4-REXX- und OS/2-Inf-Dateien:
REXX Tips & Tricks 3.0 (Gibt's bestimmt auf Hobbes oder Leo als rxtt30.zip).

Zusaetzlich brauchst Du zum Abfragen der aktuellen Objekteinstellungen wptools.dll
aus WPTools 3.2 (wptool32.zip) von Henk Kelder.

Die Objekteinstellungen (auch die ObjectID) zeigt auch XWorkplace an. Fuer Programmobjekte kannst Du ObjectIDs bequem mit DragText 3.3 aendern.

Hier als Beispiel ein REXX-Script von mir, mit dem man Objekteinstellungen zum spaeteren Zuruecksetzen in eine .cmd-Datei sichern kann (geht auch fuer die Klickstartleiste, sehr zu empfehlen vor Neuinstallation):

--- Alle ~ durch Space ersetzen ---

/*~Abfragen~von~Objekt-Einstellungen
~~~Parameter~=~Vollständiger~Pfadname~oder
~~~~~~~~~~~~~~~"<OBJECTID>"~oder~^<OBJECTID^>~oder
~~~~~~~~~~~~~~~#OBJECTHANDLE~~(hex)

~~Für~SysCreateObject~darf~title~nicht~gleich~""~sein!!!

~~Abfrage~ob~class~=~SmartCenter~oder~WPLaunchPad~erweitern:
~~In~ini~"user"~unter~Appl~"PM_Workplace:ReplaceList"~suchen~ob~beide~classes
~~Keyw~=~"SmartCenter"~oder~"WPLaunchPad"~ersetzt~worden~sind.

~~To~do:
~~Falls~Ordner~nicht~vorhanden:
~~Pfadname~eingeben~können.

*/

/*'@mode~co80,40'
*/

CALL~RxFuncAdd~'SysLoadFuncs',~'RexxUtil',~'SysLoadFuncs'
CALL~SysLoadFuncs

CALL~RxFuncAdd~'WPToolsLoadFuncs',~'WPTOOLS',~'WPToolsLoadFuncs'
CALL~WPToolsLoadFuncs

/*~Konfiguration~*/
Show~~~~~~~~~~~~~=~1~~~~~~~~~~/*~0|1~*/
Pause~~~~~~~~~~~~=~0~~~~~~~~~~/*~0|1~*/
WriteCmdFile~~~~~=~'ASK'~~~~~~~~~~/*~0|1|'ASK'~*/
CmdFileOverwrite~=~1~~~~~~/*~0|1|'ASK'~*/
CmdFileDir~=~''

NORMALCOLOR~=~'1b'x~||~'[0m'
COLOR1~~~~~~=~'1b'x~||~'[1;32;40m'
COLOR2~~~~~~=~'1b'x~||~'[1;36;40m'
COLOR3~~~~~~=~'1b'x~||~'[1;31;47m'
COLOR4~~~~~~=~'1b'x~||~'[30;47m'
COLOR5~~~~~~=~'1b'x~||~'[1;33;44m'

say
/*
parse~arg~args
args~=~strip(args)
if~left(~args,~1~)~=~'"'~then
~~do
~~~~parse~var~args~'"'~arg1~'"'~rest
~~~~arg1~=~strip(arg1)
~~end~/*~do~*/
else
~~do
~~~~parse~var~args~arg1~rest
~~~~arg1~=~strip(arg1)
~~~~arg1~=~strip(~arg1,~,~'"'~)
~~end~/*~do~*/
*/
parse~arg~arg1
arg1~=~strip(arg1)
arg1~=~strip(~arg1,~,~'"'~)
if~arg1~=~''~then
~~do
~~~~say~'Objekt~eingeben~(Dateiname~oder~<OBJECT_ID>~oder~#HANDLE_IN_HEX):'
~~~~parse~pull~arg1
~~~~arg1~=~strip(arg1)
~~~~arg1~=~strip(~arg1,~,~'"'~)
~~end~/*~do~*/

if~left(~arg1,~1)~<>~'#'~&~left(~arg1,~1~)~<>~'<'~then
~~do
~~~~call~SysFileTree~arg1,~'Obj',~'DO'
~~~~if~Obj.0~>~0~then
~~~~~~Object~=~Obj.1
~~~~else
~~~~~~do
~~~~~~~~lp~=~lastpos(~'',~arg1~)
~~~~~~~~ParentDir~=~substr(~arg1,~1,~max(~0,~lp~-~1~)~)
~~~~~~~~call~SysFileTree~ParentDir'*',~'SearchObj',~'O'
~~~~~~~~do~s~=~1~to~SearchObj.0
~~~~~~~~~~/*say~s'~~'SearchObj.s*/
~~~~~~~~~~/*cSearchObj~=~translate(~SearchObj.s,~'',~'^'~)*/
~~~~~~~~~~cSearchObj~=~replace_str(~SearchObj.s,~'',~'^'~)
~~~~~~~~~~/*say~'~~~'cSearchDir*/
~~~~~~~~~~if~translate(cSearchObj)~=~translate(arg1)~then
~~~~~~~~~~~~do
~~~~~~~~~~~~~~Object~=~SearchObj.s
~~~~~~~~~~~~~~leave
~~~~~~~~~~~~end~/*~do~*/
~~~~~~~~end~/*~do~s~*/
~~~~~~end~/*~do~*/
~~~~/*say~'Object~=~'Object;'@pause'*/
~~~~arg1~=~Object
~~end~/*~do~*/


rc~=~WPToolsQueryObject(~arg1,~"Class",~"Title",~"Setup",~"Location")

if~rc~=~0~then
~~do
~~~~say~'Für~das~Objekt~'arg1
~~~~say~'sind~keine~Object~Settings~definiert.'
~~~~return
~~end~/*~do~*/

/*~WriteCmdFile~*/
if~symbol('WriteCmdFile')~<>~'VAR'~|~WriteCmdFile~=~''~then
~~WriteCmdFile~=~value(~'WRITECMDFILE',~,~'os2environment'~)
if~WriteCmdFile~=~''~then
~~WriteCmdFile~=~'ASK'~~~~/*~0|1|'ASK'~*/

/*~CmdFileDir~*/
if~symbol('CmdFileDir')~<>~'VAR'~|~CmdFileDir~=~''~then
~~CmdFileDir~=~directory(arg1)
if~CmdFileDir~=~''~then
~~CmdFileDir~=~value(~'CMDFILEDIR',~,~'os2environment'~)
if~CmdFileDir~=~''~then
~~CmdFileDir~=~directory(~strip(~arg1,~'t',~''~)'..'~)
if~CmdFileDir~=~''~then
~~CmdFileDir~=~directory()

/*~CmdFileOverwrite~*/
if~symbol('CmdFileOverwrite')~<>~'VAR'~|~CmdFileOverwrite~=~''~then
~~CmdFileOverwrite~=~value(~'CMDFILEOVERWRITE',~,~'os2environment'~)
if~CmdFileOverwrite~=~''~then
~~CmdFileOverwrite~=~'ASK'~~~~/*~0|1|'ASK'~*/

if~Show~=~1~then
~~do

~~~~say~'C~L~A~S~S'
~~~~say~Class
~~~~say~'T~I~T~L~E'
~~~~say~color5||Title||normalcolor
~~~~say~'L~O~C~A~T~I~O~N'
~~~~say~Location
~~~~say~'S~E~T~U~P'
~~~~say~setup

~~~~if~Pause~=~1~then
~~~~~~do
~~~~~~~~say
~~~~~~~~'@pause'
~~~~~~end~/*~do~*/

~~end~/*~do~*/

if~Title~=~''~then
Title~=~filespec(~'NAME',~arg1~)
ConvTitle~=~Title
ConvTitle~=~translate(~ConvTitle,~'_',~'.'~)
ConvTitle~=~translate(~ConvTitle,~'_',~'~'~)
ConvTitle~=~translate(~ConvTitle,~'!',~':'~)
ConvTitle~=~translate(~ConvTitle,~'!',~'/'~)
ConvTitle~=~translate(~ConvTitle,~'!',~'0a'x~)
ConvTitle~=~translate(~ConvTitle,~'!',~'0d'x~)
ConvTitle~=~translate(~ConvTitle,~'!',~'<'~)
ConvTitle~=~translate(~ConvTitle,~'!',~'>'~)

CmdFile~=~strip(~CmdFileDir,~'t',~''~)'set_'ConvTitle'.cmd'

say

select
~~when~WriteCmdFile~=~0~then
~~~~return
~~when~WriteCmdFile~=~1~then
~~~~do
~~~~~~say~'Name~für~CMD-Datei~zum~Setzen~der~Einstellungen:'
~~~~~~say~'~~~~~set_'ConvTitle'.cmd'
~~~~~~say~'~~~~~im~Verzeichnis~'CmdFileDir
~~~~end~/*~do~*/
otherwise
~~do
~~~~say~'Name~für~CMD-Datei~zum~Setzen~der~Einstellungen~angeben~oder:'
~~~~say~'~~~~~X+Return~->~keine~CMD-Datei~erzeugen'
~~~~say~'~~~~~Return~~~->~Name~=~set_'ConvTitle'.cmd'
~~~~say~'~~~~~~~~~~~~~~~~~im~Verzeichnis~'CmdFileDir
~~~~parse~pull~answer
~~~~answer~=~strip(answer)
~~~~select
~~~~~~when~translate(answer)~=~'X'~then
~~~~~~~~return
~~~~~~when~answer~=~''~then
~~~~~~~~nop
~~~~otherwise
~~~~~~CmdFile~=~answer
~~~~end~~/*~select~*/
~~end~/*~do~*/
end~/*~select~*/

do~forever
~~if~stream(~CmdFile,~'C',~'QUERY~EXISTS'~)~<>~''~then
~~~~exist~=~1
~~else
~~~~exist~=~0
~~if~exist~=~1~then
~~~~do
~~~~~~select
~~~~~~~~when~CmdFileOverwrite~=~0~then
~~~~~~~~~~return
~~~~~~~~when~CmdFileOverwrite~=~1~then
~~~~~~~~~~leave
~~~~~~otherwise
~~~~~~~~say~cmdfile'~existiert~bereits!'
~~~~~~~~say~'Anderen~Namen~angeben~oder:'
~~~~~~~~say~'~~~~~X+Return~->~keine~CMD-Datei~erzeugen'
~~~~~~~~say~'~~~~~Return~~~->~Überschreiben'
~~~~~~~~parse~pull~answer
~~~~~~~~answer~=~strip(answer)
~~~~~~~~select
~~~~~~~~~~when~translate(answer)~=~'X'~then
~~~~~~~~~~~~return
~~~~~~~~~~when~answer~=~''~then
~~~~~~~~~~~~leave
~~~~~~~~otherwise
~~~~~~~~~~CmdFile~=~answer
~~~~~~~~end~~/*~select~*/
~~~~~~end~~/*~select~*/
~~~~end~/*~do~*/
~~else
~~~~leave
end~/*~do~forever~*/

if~exist~=~1~then
~~call~SysFileDelete~CmdFile

call~lineout~cmdfile,~'/*~Einstellungen~setzen~für~'arg1'~*/'
call~lineout~cmdfile,~''
call~lineout~cmdfile,~''
call~lineout~cmdfile,~'CALL~RxFuncAdd~"SysLoadFuncs",~"RexxUtil",~"SysLoadFuncs"'
call~lineout~cmdfile,~'CALL~SysLoadFuncs'
call~lineout~cmdfile,~''
call~lineout~cmdfile,~'say'
call~lineout~cmdfile,~'say~"Einstellungen~setzen~für~'Class'~»'Title'«"'
call~lineout~cmdfile,~''
call~lineout~cmdfile,~'class~~~~=~"'Class'"'
call~lineout~cmdfile,~''
Title2~=~Title
if~Title2~=~""~then
~~Title2~=~filespec('name',~arg1)
call~lineout~cmdfile,~'title~~~~=~"'Title2'"'
call~lineout~cmdfile,~''
call~lineout~cmdfile,~'location~=~"'Location'"'
call~lineout~cmdfile,~'do~forever'
call~lineout~cmdfile,~'~~say~"***~In~welchem~Ordner~soll~das~Objekt~erstellt~werden?"'
call~lineout~cmdfile,~'~~say~"~~~~(Return~=~"location",~X~=~Abbruch)"'
call~lineout~cmdfile,~'~~parse~pull~newloc'
call~lineout~cmdfile,~'~~newloc~=~strip(newloc)'
call~lineout~cmdfile,~'~~if~translate(newloc)~=~"X"~then'
call~lineout~cmdfile,~'~~~~return'
call~lineout~cmdfile,~'~~if~newloc~<>~""~then'
call~lineout~cmdfile,~'~~~~location~=~newloc'
call~lineout~cmdfile,~'~~if~ExistObj(~location~)~=~1~then'
call~lineout~cmdfile,~'~~~~leave'
call~lineout~cmdfile,~'~~else'
call~lineout~cmdfile,~'~~~~do'
call~lineout~cmdfile,~'~~~~~~say~"~~~~Der~Ordner~"location"~existiert~nicht!"'
/*
call~lineout~cmdfile,~'~~~~~~say~"~~~~Soll~er~erstellt~werden?~(j/n)"'
call~lineout~cmdfile,~'~~~~~~parse~pull~answer'
*/
call~lineout~cmdfile,~'~~~~end~/*~do~*/'
call~lineout~cmdfile,~'end~/*~do~forever~*/'
call~lineout~cmdfile,~''

s~=~0
smax~=~0
Rest~=~Setup
do~forever
~~sp1~=~pos(~'DRAWEROBJECTS=',~Rest~~)
~~if~sp1~=~0~then
~~~~leave
~~sp2~=~pos(~';',~Rest,~sp1~+~1~)
~~len~=~sp2~-~sp1~+~1
~~s~=~s~+~1
~~smax~=~s
~~Setup.s~=~substr(~Rest,~sp1,~len~)
~~Rest~=~delstr(~Rest,~sp1,~len~)
end~/*~do~forever~*/
Setup.0~=~Rest
do~s~=~0~to~smax
~~SetupLines~=~SplitSetupAtSemicolons(~Setup.s~)
~~/*say~SetupLines*/
~~call~lineout~cmdfile,~'setup.'s'~=~,'
~~call~lineout~cmdfile,~SetupLines
~~call~lineout~cmdfile,~''
end~/*~do~s~*/
call~lineout~cmdfile,~'smax~=~'smax
call~lineout~cmdfile,~'if~class~=~"WPLaunchPad"~then'
call~lineout~cmdfile,~'~~orinames~=~"FPOBJECTS=~DRAWEROBJECTS="'
call~lineout~cmdfile,~'else'
call~lineout~cmdfile,~'~~orinames~=~"EXENAME=~SHADOWID=~STARTUPDIR="'
call~lineout~cmdfile,~''
call~lineout~cmdfile,~'do~s~=~0~to~smax'
call~lineout~cmdfile,~''
call~lineout~cmdfile,~'~~setup~=~setup.s'
call~lineout~cmdfile,~''
call~lineout~cmdfile,~'~~do~n~=~1~to~words(~orinames~)'
call~lineout~cmdfile,~'~~~~oriname~=~word(~orinames,~n~)'
call~lineout~cmdfile,~'~~~~p1~=~pos(~oriname,~setup~)'
call~lineout~cmdfile,~'~~~~if~p1~=~0~then'
call~lineout~cmdfile,~'~~~~~~iterate~n'
call~lineout~cmdfile,~'~~~~p2~=~p1~+~length(oriname)'
call~lineout~cmdfile,~'~~~~if~oriname~=~"DRAWEROBJECTS="~then'
call~lineout~cmdfile,~'~~~~~~p2~=~pos(~",",~setup,~p2~+~1~)~+~1'
call~lineout~cmdfile,~'~~~~p3~=~pos(~";",~setup,~p2~+~1~)'
call~lineout~cmdfile,~'~~~~objstring~=~substr(~setup,~p2,~max(~0,~p3~-~p2~)~)'
call~lineout~cmdfile,~'~~~~newobjstring~=~""'
call~lineout~cmdfile,~'~~~~rest~=~objstring'
call~lineout~cmdfile,~'~~~~do~until~rest~=~""'
call~lineout~cmdfile,~'~~~~~~startp~=~length(objstring)~-~length(~rest~)'
call~lineout~cmdfile,~'~~~~~~parse~var~rest~oriobj","rest'
call~lineout~cmdfile,~'~~~~~~neworiobj~=~oriobj'
call~lineout~cmdfile,~'~~~~~~do~while~ExistObj(~neworiobj~)~=~0'
call~lineout~cmdfile,~'~~~~~~~~say~"~~~~"oriname""objstring'
call~lineout~cmdfile,~'~~~~~~~~neworiobj~=~GetNotExistAnswer(~neworiobj~)'
call~lineout~cmdfile,~'~~~~~~end~/*~do~while~*/'
call~lineout~cmdfile,~'~~~~~~if~newobjstring~=~""~then'
call~lineout~cmdfile,~'~~~~~~~~newobjstring~=~neworiobj'
call~lineout~cmdfile,~'~~~~~~else'
call~lineout~cmdfile,~'~~~~~~~~newobjstring~=~newobjstring","neworiobj'
call~lineout~cmdfile,~'~~~~end~/*~do~until~*/'
call~lineout~cmdfile,~'~~~~newsetup~=~delstr(~setup,~p2,~max(~0,~p3-p2~)~)'
call~lineout~cmdfile,~'~~~~newsetup~=~insert(~newobjstring,~newsetup,~p2-1~)'
call~lineout~cmdfile,~'~~~~setup~=~newsetup'
call~lineout~cmdfile,~'~~end~/*~do~n~*/'
call~lineout~cmdfile,~''
call~lineout~cmdfile,~'~~/*if~s~=~0~&~(~class~=~"WPLaunchPad"~|~class~=~"SmartCenter"~)~then'*/
call~lineout~cmdfile,~'~~if~s~=~0~&~(~class~=~"WPLaunchPad"~)~then'
call~lineout~cmdfile,~'~~~~updatereplace~=~"r"'
call~lineout~cmdfile,~'~~else'
call~lineout~cmdfile,~'~~~~updatereplace~=~"u"'
call~lineout~cmdfile,~'~~retcode~=~SysCreateObject(~class,~title,~location,~setup,~updatereplace~)'
call~lineout~cmdfile,~'~~if~retcode~then~say~"OK!"'
call~lineout~cmdfile,~'~~else~say~"Fehler!"'
call~lineout~cmdfile,~''
call~lineout~cmdfile,~'end~/*~do~s~*/'
call~lineout~cmdfile,~''

call~lineout~cmdfile,~'return~retcode'
call~lineout~cmdfile,~''
call~lineout~cmdfile,~''
call~lineout~cmdfile,~'ExistObj:~~procedure'
call~lineout~cmdfile,~'~~Obj~=~arg(1)'
call~lineout~cmdfile,~'~~if~Obj~=~""~then'
call~lineout~cmdfile,~'~~~~ExistRC~=~0'
call~lineout~cmdfile,~'~~else'
call~lineout~cmdfile,~'~~~~ExistRC~=~SysSetObjectData(~Obj,~""~)'
call~lineout~cmdfile,~'~~if~ExistRC~=~0~then'
call~lineout~cmdfile,~'~~~~ExistRC~=~(~SysSearchPath(~"PATH",~Obj~)~<>~""~)'
call~lineout~cmdfile,~'return~ExistRC'
call~lineout~cmdfile,~''
call~lineout~cmdfile,~''
call~lineout~cmdfile,~'GetNotExistAnswer:~~procedure'
call~lineout~cmdfile,~'~~neworiobj~=~arg(1)'
call~lineout~cmdfile,~'~~say~"***~Das~Objekt~"neworiobj"~existiert~nicht!"'
call~lineout~cmdfile,~'~~say~"~~~~Neues~Objekt~eingeben:"'
call~lineout~cmdfile,~'~~say~"~~~~(<OBJECTID>~oder~Dateinamen,~X~=~Abbruch,~K~=~keins,"'
call~lineout~cmdfile,~'~~say~"~~~~Return~=~"neworiobj")"'
call~lineout~cmdfile,~'~~parse~pull~answer'
call~lineout~cmdfile,~'~~answer~=~strip(answer)'
call~lineout~cmdfile,~'~~select'
call~lineout~cmdfile,~'~~~~when~translate(answer)~=~"X"~then'
call~lineout~cmdfile,~'~~~~~~return'
call~lineout~cmdfile,~'~~~~when~translate(answer)~=~"K"~then'
call~lineout~cmdfile,~'~~~~~~do~'
call~lineout~cmdfile,~'~~~~~~~~neworiobj~=~""'
call~lineout~cmdfile,~'~~~~~~~~leave'
call~lineout~cmdfile,~'~~~~~~end~/*~do~*/'
call~lineout~cmdfile,~'~~~~when~translate(answer)~=~""~then'
call~lineout~cmdfile,~'~~~~~~leave'
call~lineout~cmdfile,~'~~otherwise'
call~lineout~cmdfile,~'~~~~neworiobj~=~answer'
call~lineout~cmdfile,~'~~end~/*~select~*/'
call~lineout~cmdfile,~'return~neworiobj'
call~lineout~cmdfile,~''
call~stream~cmdfile,~'c',~'close'

return


SplitSetupAtSemicolons:~procedure
/*****************************************************************************/
parse~arg~String
i~=~0
CRLF~=~'0d0a'x
SetupLines~=~''

do~until~String~=~''
~~i~=~i~+~1
~~parse~var~String~StringPart.i~';'~String
~~StringPart.i~=~strip(StringPart.i)
~~StringPart.0~=~i
end

do~j~=~1~to~StringPart.0
~~SetupLines~=~SetupLines'"'StringPart.j';"'
~~if~j~<>~StringPart.0~then
~~~~SetupLines~=~SetupLines'~||,'CRLF
end

/*
rest~=~String
do~while~rest~<>~''
~~parse~var~rest~next~';'~rest
~~if~length(next)~>~250~then
~~~~do
~~~~~~rrest~=~next
~~~~~~do~while~rrest~<>~''
~~~~~~~~lp~=~lastpos(~',',~rrest,~250~)
~~~~~~~~if~lp~=~0~then
~~~~~~~~~~lp~=~250
~~~~~~~~SetupLines~=~SetupLines'"'substr(~rrest,~1,~lp~)'"~||,~'CRLF
~~~~~~end~/*~do~while~*/
~~~~end~/*~do~*/
~~i~=~i~+~1
end~/*~do~while~*/
*/

return~SetupLines



/*~String~(Zeichenkette)~in~einem~String~(z.B.~Zeile)~ersetzen,~auch~mehrfach~*/
/*~arg(1)~bis~arg(3)~wie~translate~*/
/*~defproc~replace_str(from_str,~to_str,~source_str)~*/
replace_str:~~procedure
/*****************************************************************************/
~~~source_str~=~arg(1)
~~~to_str~~~~~=~arg(2)
~~~from_str~~~=~arg(3)
~~~do~forever
~~~~~~p~=~pos(from_str,~source_str)
~~~~~~if~p~=~0~then~leave
~~~~~~source_str=insert(to_str,~delstr(source_str,~p,~length(from_str)),~p-1)
~~~end~/*~do~*/
~~~return~source_str


( Zeige die Threadübersicht ) [ Version zum Drucken ] ( Zur Startübersicht )

Datum Thema
07.01.2017 *

*

Name: * eMail: Benachrichtigung

Mit * markierte Felder müssen ausgefüllt werden !


php.net OpenIT © 1998-2017 by WebTeam OS2.org