ToDo: Kontrolle

Hamsterskript: Eingebaute Funktionen (allgemein)

Allgemeine Funktionen zum Manipulieren von Variablen

Numerische Funktionen

Zeichenketten/String-Funktionen

Datums-/Zeit-Funktionen

Fehlerbehandlung

Dateien und Verzeichnisse

Listen

Artikel bearbeiten

Ein- und Ausgabe

Zeitgeber/Scheduler

DFÜ-Netzwerk

Zeiger-Funktionen

Sonstige Funktionen

Allgemeine Funktionen zum Manipulieren von Variablen

set( <var>, <expression> )
<var> = <expression>

Setzt die Variable <var> auf den Wert <expression>.

Rückgabewert: Ergebnis von <expression>.

Beispiel:

var( $a, $b, $c )
$a = 42
set( $b, "Die Antwort lautet: " )
$c = $b + $a
print( $c ) # Ausgabe: "Die Antwort lautet: 42"

inc( <var>, <count> )
inc( <var> )
dec( <var>, <count> )
dec( <var> )

Erhöht („inc“) bzw. vermindert („dec“) die Variable <var> um den Betrag <count> bzw. um 1, wenn <count> nicht angegeben wird.

Rückgabewert: Erhöhte oder verminderte Variable <var>.

Beispiele:

inc( $a )
dec( $a, 2 )

Numerische Funktionen

true

Repräsentiert den logischen Wert WAHR.

Rückgabewert: 1

Beispiel:

$a = true

false

Repräsentiert den logischen Wert FALSCH.

Rückgabewert: 0

Beispiel:

$a = false

isint( <expression> )

Testet, ob der Ausdruck vom Typ Integer ist.

Rückgabewert: True (1) = Wahr oder False (0) = Falsch.

Beispiel:

$result = iif( isint($a), $a, 0 )

int( <expression>, <default> )
int( <expression> )

Konvertiert eine Zeichenkette in einen numerischen Integerwert. Beginnt die Zeichenkette mit den Zeichen „0x“, wird sie als hexadezimal kodiert betrachtet.

Rückgabewert: Integer-Variable oder im Fehlerfall Inhalt des Parameters <default>.

Beispiele:

$a = "1"
$b = 2
$c = $a + $b # Ergebnis: "12"
$d = int($a) + $b # Ergebnis: 3
print( int("0xFF") ) # Ausgabe: 255

abs( <number> )

Liefert den vorzeichenlosen Betrag von <number>.

Rückgabewert: Integer.

Beispiele:

print( abs( 42) ) # Ausgabe: 42
print( abs(-42) ) # Ausgabe: 42

sgn( <number> )

Liefert –1, wenn <number> negativ ist, +1, wenn <number> positiv ist, und 0, wenn <number> 0 ist.

Rückgabewert: Integer.

Beispiele:

print( sgn( 42) ) # Ergebnis: 1
print( sgn(-42) ) # Ergebnis: -1

Zeichenketten/String-Funktionen

isstr( <expression> )

Testet, ob der Ausdruck vom Typ String ist.

Rückgabewert: True (1) = Wahr oder False (0) = Falsch.

Beispiel:

$result = iif( isstr($a), $a, "0x"+hex($a) )

ord( <string> )

Liefert den ASCII-Wert des ersten Zeichens einer Zeichenkette.

Rückgabewert: ASCII-Wert oder 0, wenn <string> leer ist.

Beispiel:

print( ord("*") ) # Ausgabe: 42

chr( <number> )

Liefert das ASCII-Zeichen an der Position <number> und ist somit die Gegenfunktion von „ord“.

Rückgabewert: Zeichenkette mit einem Zeichen.

Beispiel:

print( chr(42) ) # Ausgabe: "*"

str( <number>, <length>, <leadchar> )
str( <number>, <length> )
str( <number> )

Konvertiert einen numerischen Wert <number> zu einer Zeichenkette. Ist die Länge <length> vorhanden, wird die Zeichenkette von links beginnend mit dem Zeichen <leadchar> auf die vorgegebene Länge aufgefüllt. (Standard für <leadchar> ist „0“.)

Rückgabewert: String.

Beispiel:

$a = 42
print( str( $a ) ) # Ausgabe: "42"
print( str( $a, 5 ) ) # Ausgabe: "00042"
print( str( $a, 5, " " ) ) # Ausgabe: " 42"

hex( <number>, <digits> )
hex( <number> )

Konvertiert einen numerischen Wert zu einer Zeichenkette in hexadezimaler Schreibweise. Ist der Wert <digits> vorhanden, wird die Zeichenkette diesem Wert entsprechend oft mit dem Zeichen „0“ aufgefüllt.

Rückgabewert: Zeichenkette.

Beispiele:

$a = 42
print( hex( $a, 2 ) ) # Ausgabe: "002A"
print( int( "0x" + hex(42) ) ) # Ausgabe: 42

len( <string> )

Liefert die Länge einer Zeichenkette.

Rückgabewert: Integer.

Beispiel:

print( len("abc") ) # Ausgabe: 3

pos( <substr>, <string>, <startpos> )
pos( <substr>, <string> )

Liefert die Position der Teilzeichenkette <substr> in der Zeichenkette <string>. Ist eine Startposition <startpos> angegeben, wird ab dieser Position in der Zeichenkette gesucht.

Rückgabewert: Position oder 0, wenn Teilzeichenkette nicht gefunden.

Beispiele:

print( pos( "b", "abcde" ) ) # Ausgabe: 2
print( pos( "b", "abcde", 3 ) ) # Ausgabe: 0

copy( <string>, <startpos>, <length> )
copy( <string>, <startpos> )

Liefert eine Teilzeichenkette <string> ab Position <startpos> mit der Länge <length>. Ist die Länge <length> nicht angegeben, wird der Rest der Zeichenkette geliefert.

Rückgabewert: Zeichenkette.

Beispiele:

print( copy( "abcde", 3, 1 ) ) # Ausgabe: "c"
print( copy( "abcde", 3 ) ) # Ausgabe: "cde"

delete( <string>, <startpos>, <length> )
delete( <string>, <startpos> )

Löscht in der Zeichenkette <string> ab Position <startpos>. Ist die Länge <length> nicht angegeben, werden alle Zeichen bis zum Ende der Zeichenkette gelöscht, ansonsten so viele Zeichen wie angegeben.

Rückgabewert: Zeichenkette.

Beispiele:

print( delete( "abcde", 3, 1 ) ) # Ausgabe: "abde"
print( delete( "abcde", 3 ) ) # Ausgabe: "ab"
$s = delete( $s, 1, 1 ) # 1. Zeichen von „$s“ löschen
                        # und wieder in „$s“ speichern

trim( <string>, <trimchars> )
trim( <string> )

Entfernt alle führenden und folgenden Zeichen in der Zeichenkette <string>, soweit sie in <trimchars> enthalten sind. Fehlt <trimchars>, werden alle führenden und folgenden Leerzeichen entfernt.

Rückgabewert: Zeichenkette.

Beispiele:

print( trim(" 42 ") ) # Ausgabe: "42"
$WHITESPACE = " " + chr(9)
print( trim( $line, $WHITESPACE ) )

lowercase( <string> )

Konvertiert die Zeichenkette <string> in Kleinbuchstaben.

Rückgabewert: Zeichenkette.

Beispiel:

print( lowercase( "AbCd" ) ) # Ausgabe: "abcd"

uppercase( <string> )

Konvertiert die Zeichenkette <string> in Großbuchstaben.

Rückgabewert: Zeichenkette.

Beispiel:

print( uppercase( "AbCd" ) ) # Ausgabe: "ABCD"

replace( <string>, <find>, <replace>, <all>, <ignorecase> )
replace( <string>, <find>, <replace>, <all> )
replace( <string>, <find>, <replace> )

Liefert als Rückgabewert einen String, in dem alle Vorkommen von <find> in <string> durch <replace> ersetzt wurden. Ist der Wert <all> true = wahr, dann werden alle gefundenen Zeichenketten ersetzt, ansonsten nur das erste Vorkommen. Ist der Wert <ignorecase> true = wahr, wird die Groß-/Kleinschreibweise nicht beachtet.

Rückgabewert: Zeichenkette.

Beispiele:

print( replace( "abcABCabc", "b", "[X]" ) ) # Ausgabe: "a[X]cABCabc"
print( replace( "abcABCabc", "b", "[X]", true ) ) # Ausgabe: "a[X]cABCa[X]c"
print( replace( "abcABCabc", "b", "[X]", true, true ) ) # Ausgabe: "a[X]cA[X]Ca[X]c"

DecodeMIMEHeaderString( <string>, <charset>)
DecodeMIMEHeaderString( <string>)

Liefert die dekodierte Version einer gemäß MIME base64- oder quoted-printable-kodierten Zeichenkette zurück. Die Variable <charset> liefert, falls vorhanden, den Zeichensatz zurück, mit dem der String kodiert war. Der Rückgabewert enthält nach erfolgreicher Dekodierung den 8-Bit-Zeichencode an Stelle der ehemals MIME-kodierten 7-Bit-Zeichenkette. Die Bedeutung der zurückgegebenen Zeichenkette ist von der Variable <charset> abhängig und muss nicht mit dem Windows-Zeichensatz übereinstimmen.

Beispiel:

Warning(Addlog(DecodeMimeHeaderString("=?ISO-8859-15?Q?0.02=80?="),3))

DecodeToLocalCharset( <Text>, <Zeichensatz> )

Liefert den in <Text> enthaltenen kodierten Text dekodiert im lokalen Zeichensatz zurück. <Zeichensatz> muss den Zeichensatz des zu dekodierenden Strings enthalten.

UTF8toUCS32( <string> )

Entfernt die UTF-Transportkodierung einer UTF-8-kodierten Zeichenkette und liefert die 32 Bit (4 Byte) langen equivalenten UCS-Werte zurück.

UTF7toUCS16( <string> )

Entfernt die UTF-Transportkodierung einer UTF-7-kodierten Zeichenkette und liefert die 16 Bit (2 Byte) langen equivalenten UCS-Werte zurück.

DecodeBase64 ( <string> )

Dekodiert base64-kodierte Texte.

DecodeQP ( <string> )

Dekodiert quoted-printable-kodierte Texte.

eval( <string> )

Verwendet den Inhalt der Zeichenkette <string> als Ausdruck und liefert das Ergebnis zurück.

Rückgabewert: Integer.

Beispiel:

print( "4" + "+" + "2" ) # Ausgabe: "4+2"
print( eval( "4" + "+" + "2" ) ) # Ausgabe: 6

RE_Match( <string>, <regex> )

Liefert „true“, wenn <string> zum Regulären Ausdruck (PCRE) passt (siehe auch die FAQ „Hamster und Reguläre Ausdrücke“).

Rückgabewert: True (1) = Treffer oder False (0) = kein Treffer.

Beispiel:

$answer = "abc4efg2hij"
if( RE_Match( $answer, "4.*2" ) )
  print( "OK." )
endif

RE_Extract( <string>, <regex> )

Liefert den Teil von <string>, welcher zum Regulären Ausdruck (PCRE) passt (siehe auch die FAQ „Hamster und Reguläre Ausdrücke“).

Rückgabewert: Zeichenkette (ist leer, wenn nichts gefunden wurde).

Beispiele:

$answer = "abc4efg2hij"
print( RE_Extract( $answer, "4.*2" ) ) # Ausgabe: "4efg2"
print( RE_Extract( $answer, "A.*C" ) ) # Ausgabe: "abc"
print( RE_Extract( $answer, "(?-i)A.*C" ) ) # Ausgabe: ""

RE_Parse( <string>, <regex>, <var1> [ , <var2> , ... ] )

Teilt den <string> in Gruppen auf entsprechend dem gruppierten Regulären Ausdruck. Die Gruppen werden in die einzelnen Variablen <varX> gespeichert. Siehe auch die FAQ „Hamster und Reguläre Ausdrücke“.

Rückgabewert: True (1) = OK oder False (0) = Fehler.

Beispiel:

$line = "Subject: Das ist ein Test"
RE_Parse( $line, "(\S+:)\s+(.*)", $a, $b ) # Ausgabe: $a="Subject:",
# $b="Das ist ein Test"

RE_Split( <string>, <regex>, <var1>, <var2> [ , <var3> , ... ] )

Teilt eine Zeichenkette in einzelne Abschnitte auf, der Reguläre Ausdruck <regex> gibt dabei die erwünschte/gesuchte Trennstelle an. Die Teilabschnitte werden in den einzelnen Variablen <varX> gespeichert. Siehe auch die FAQ „Hamster und Reguläre Ausdrücke“.

Rückgabewert: True (1) = OK oder False (0) = Fehler.

Beispiele:

$line = "Das  ist    ein   Test" # Zuerst 2, dann 4 und zuletzt 3 Leerzeichen
RE_Split( $line, "\s+", $a, $b ) # Ergebnis: $a = "Das", $b = "ist ein Test"
RE_Split( $line, "\s+", $a, $b, $c ) # Ergebnis: $a = "Das", $b = "ist",
                                     # $c = "ein Test"
RE_Split( $line, "\s+", $a, $b, $c, $d ) # Ergebnis: $a = "Das", $b = "ist",
                                         # $c = "ein", $d = "Test" 

Zeit-Funktionen

ticks

Liefert die Zeit in Millisekunden seit dem letzten Start von Windows.

Vorsicht! Diese Funktion unterliegt Beschränkungen im Wertebereich: Sie funktioniert nur die ersten 2.147.483.647 (= 231-1) ms korrekt, was einem Wert von ungefähr 24 Tagen, 20 Stunden, 31 Minuten und 23 Sekunden entspricht.

Rückgabewert: Integer.

Beispiel:

$stop = ticks
print( "Zeit: "+ $stop +" ms seit letztem Windows-Start" )

time

Liefert die aktuelle Zeit im Unix-Format (Sekunden seit dem 01.01.1970).

Rückgabewert: Integer.

Beispiel:

$now = time
# 1 Tag = 24 Std., 1 Std. = 60 min, 1 min = 60 s
# => 1 Tag = 24*60*60 Sekunden
$yesterday = $now - 24*60*60

timegmt

Liefert die aktuelle GMT (Greenwich Mean Time) im Unix-Format (Sekunden seit dem 01.01.1970).

Rückgabewert: Integer.

RFCTimeZone

Liefert die Zeitdifferenz zwischen GMT (Greenwich Mean Time) und Ortszeit unter Berücksichtigung der Sommerzeit zurück.

Für Deutschland wird +100 (Normalzeit) bzw. +0200 (Sommerzeit) zurückgeliefert.

Rückgabewert: String.

decodetime( <time>, <yyyy> [ , <mm>, <dd>, <hh>, <nn>, <ss>, <wd> ] )

Konvertiert das Unix-Zeitformat in Jahr, Monat, Tag, Stunde, Minute, Sekunde und Wochentag. Variablen: <yyyy> (Jahr), <mm> (Monat), <dd> (Tag), <hh> (Stunden), <nn> (Minute), <ss> (Sekunde), <wd> (Tag in der Woche: 1 = Sonntag, ..., 7 = Sonnabend).

Rückgabewert: <time>.

Hinweis:

Die Rückgabewerte werden dabei nicht automatisch formatiert. Den Variablen <mm>, <dd>, <hh>, <nn> und <ss> wird bei einstelligem Ergebnis keine führende Null angefügt.

Beispiele:

varset( $time123, 1234567890 )
var( $jahr, $mon, $tag, $std, $min, $sec )
decodetime( $time123, $jahr, $mon, $tag, $std, $min, $sec )
print( "Die UNIX-Zeit ", $time123, " entspricht dem ", _
       $tag, ".", $mon, ".", $jahr, ", ", $std, ":", $min, ":", $sec, "." )

decodetime( time, 0, 0, 0, $std, $min, $sec )
print( "Aktuelle Zeit: ", $std, ":", $min, ":", $sec )

encodetime( <yyyy>, <mm>, <dd>, <hh>, <nn>, <ss> )

Liefert die Unix-Zeit zurück. Parameter: <yyyy>: Jahr, <mm>: Monat, <dd>: Tag, <hh>: Stunden, <nn>: Minuten, <ss> Sekunden.

Rückgabewert: <time>.

Beispiel:

encodetime( 2000, 12, 31, 23, 59, 59 )

GetUptimeSecs( )
GetUptimeMins( )
GetUptimeHours( )
GetUptimeDays( )

Liefert den jeweiligen Anteil an der Uptime des Hamsters.

Fehlerbehandlung

ErrCatch( <bool> )
ErrCatch

Mit <bool> gleich „TRUE“ (<>0) wird die interne Fehlerhandlung abgeschaltet. Der Hamster beendet dann im Fehlerfall das Skript nicht. Für die Fehlerbehandlung müssen in diesem Fall im Skript selber Maßnahmen zu Fehlerbehandlung getroffen werden. Der Fehlerstatus kann vom Skript mit der Funktion „ErrNum“ abgefragt werden, im Falle eines Fehlers wird dabei ein Wert ungleich Null zurückgeliefert. Die dazu gehörende Fehlermeldung kann mit „ErrMsg“ angezeigt werden.

Rückgabewert:
False (0) Abgeschaltet (Standard, stoppt Skript im Fehlerfall)
True (1) Eingeschaltet

Beispiel:

$OldErrCatch = ErrCatch
ErrCatch( True )
print( 42/0 ) # division by zero causes error
if( ErrNum<>0 )
  print( "Error: ", ErrNum, " ", ErrMsg )
endif
ErrCatch( $OldErrCatch )

SysErrorMessage( <errnumber> )

Liefert den Fehlertext zu einer Windows-System-Fehlernummer zurück.

ErrNum

Liefert die letzte Fehlernummer zurück.

Achtung: Die Fehlernummern sind versionsabhängig.

Rückgabewert: Integer (=0: Kein Fehler, <>0: Fehler).

Beispiel:

if( ErrNum <> 0 )
  # weitere Anweisungen
endif

ErrMsg

Liefert die letzte Fehlermeldung zurück.

Rückgabewert: Zeichenkette.

Beispiel:

print( "Letzter Fehler: ", ErrMsg )

ErrModule

Liefert den Namen des Moduls, welches den Fehler verursacht hat.

Rückgabewert: Zeichenkette.

Beispiel:

print( "Letzter Fehler verursacht durch ", ErrModule )

ErrLineNo

Liefert die Nummer der Zeile, welche den Fehler verursacht hat.

Rückgabewert: Integer.

ErrLine

Liefert die Zeile, welche den Fehler verursacht hat.

Rückgabewert: Zeichenkette.

ErrSender

Liefert den Namen des Skript-Objektes, welches den Fehler verursacht hat.

Rückgabewert: Zeichenkette.

Beispiel:

print( "Letzter Fehler in Skript '", ErrSender, "'" )

Dateien und Verzeichnisse

Siehe auch: ListLoad, ListSave, ListFiles, ListDirs.

IniRead( <filename>, <section>, <ident>, <default> )

Liest aus dem Abschnitt <section> der INI-Datei <filename> den Wert des Schlüssels <indent> aus. Ist kein Dateiname angegeben, wird die Datei „HScripts.ini“ verwendet. Ist kein Abschnitt <section> angegeben, wird der Abschnitt „[All]“ verwendet. Ist der gewünschte Eintrag nicht in der INI-Datei enthalten, wird der Wert <default> zurückgeliefert.

Rückgabewert: Zeichenkette.

Beispiele:

$answer = IniRead( "MyScript.ini", "Antwort", "Letzte", "42")
$LastConnected = int( IniRead( "", "", "LastConnected", 0 ) )

IniWrite( <filename>, <section>, <ident>, <value> )

Setzt bzw. ändert im Abschnitt <section> der INI-Datei <filename> den Wert für den Schlüssel <ident> auf den neuen Wert <value>. Ist kein Dateiname angegeben, wird die Datei „HScripts.ini“ verwendet. Ist kein Abschnitt <section> angegeben, wird der Abschnitt „[All]“ verwendet.

Rückgabewert: Integer (-1, wenn ein Fehler auftrat, 0 bei fehlerfreier Ausführung).

Beispiele:

IniWrite( "MyScript.ini", "Antwort", "Letzte", $answer )
IniWrite( "", "", "LastConnected", time )

IniEraseSection( <filename>, <section>)

Löscht einen Abschnitt <section> der Ini-Datei <filename>.

Rückgabewert: Integer (-1, wenn ein Fehler auftrat, 0 bei fehlerfreier Ausführung).

IniDelete ( <filename>, <section> >ident>)

Löscht in einem Abschnitt <section> der Ini-Datei <filenamen> den Schlüssel <ident>.

Rückgabewert:

Integer (-1, wenn ein Fehler auftrat, 0 bei fehlerfreier Ausführung).

FileExists( <filename> )

Testet, ob die Datei <filename> vorhanden ist. Die Joker „?“ und „*“ sind im Dateinamen zugelassen.

Rückgabewert: Integer (1 = Datei existiert, 0 = Datei nicht vorhanden).

Beispiel:

if( !fileexists("myfile.cfg" ) )
  error( "Falsche Konfiguration!" )
endif

DiskFreeKB( <Laufwerksbuchstabe> )

Liefert den freien Speicherplatz eines Laufwerkes in Kibibytes (1 KiB = 1024 Byte) zurück.

Rückgabewert: Integer (bei fehlerhaftem Parameter: -1).

Beispiel:

DiskFreeKB("C")

FileSize( <filename> )

Liefert die Länge der Datei <filename> in Bytes.

Rückgabewert: Integer (-1 im Fehlerfall).

Beispiel:

print( FileSize( HamPath + "Hamster.exe" ) )

FileTime( <filename> )

Liefert die Zeit des letzten Schreibzugriffes auf die Datei <filename> im Unix-Format (Sekunden seit dem 01.01.1970).

Rückgabewert: Integer (-1 im Fehlerfall).

Beispiel:

print( "Your Hamster's age: ", time - FileTime( HamPath + "Hamster.exe" ), " seconds" )

FileDelete( <filename> )

Löscht die Datei <filename>. Die Joker „?“ und „*“ sind im Dateinamen zugelassen.

Rückgabewert: 0: OK, <>0: Fehler.

Beispiel:

FileDelete( "MyScript.tmp" )

FileRename( <oldname>, <newname> )

Benennt die Datei <oldname> in <newname> um.

Rückgabewert: 0: OK, <>0: Fehler.

Beispiel:

FileRename( "MyScript.dat", "MyScript.bak" )

FileCopy( <oldname>, <newname> )

Kopiert die Datei <oldname> nach <newname>. Für <oldname> dürfen die Joker „?“ und „*“ verwendet werden.

Rückgabewert: 0: OK, <>0: Fehler.

Beispiel:

FileCopy( "MyScript.dat", "MyScript.bak" )

FileMove( <source>, <destination> )

Verschiebt die Datei <source > nach <destination>. Für <source> dürfen die Joker „?“ und „*“ verwendet werden.

Rückgabewert: 0: OK, <>0: Fehler.

Beispiel:

FileMove( "MyScript.dat", "MyScript.bak" )

DirExists( <dirname> )

Testet, ob das Verzeichnis <dirname> existiert. Sofern kein absoluter Pfad angegeben ist, bezieht sich die relative Angabe auf das aktuelle Arbeitsverzeichnis.

Rückgabewert: 1 = Verzeichnis existiert, 0 = Verzeichnis nicht vorhanden.

Beispiel:

if( !direxists( "mydir" ) )
  # weitere Anweisungen
endif

DirMake( <dirname> )

Erstellt ein Verzeichnis mit dem Namen <dirname>. Sofern kein absoluter Pfad angegeben ist, bezieht sich die relative Angabe auf das aktuelle Arbeitsverzeichnis.

Rückgabewert: 0: OK, <>0: Fehler.

Beispiel:

DirMake( HamPath + "MyScript" )

DirRemove( <dirname> )

Löscht das Verzeichnis <dirname>, wenn es leer ist. Sofern kein absoluter Pfad angegeben ist, bezieht sich die relative Angabe auf das aktuelle Arbeitsverzeichnis.

Rückgabewert: 0: OK, <>0: Fehler.

Beispiel:

DirRemove( HamPath + "MyScript" )

DirChange( <dirname> )

Setzt das Verzeichnis <dirname> als aktuelles Arbeitsverzeichnis.

Hinweis: Es ist im Normalfall sinnvoller, stattdessen in den anderen Funktionen absolute Verzeichnisangaben zu verwenden.

Rückgabewert: 0: OK, <>0: Fehler.

Beispiel:

DirChange( HamPath + "MyScript" )

DirCurrent

Liefert das aktuelle Arbeitsverzeichnis zurück.

Rückgabewert: Zeichenkette.

DirWindows

Liefert den Namen des Windows-Verzeichnisses.

Rückgabewert: Zeichenkette.

DirSystem

Liefert den Namen des Windows-System-Verzeichnisses.

Rückgabewert: Zeichenkette.

Listen

Siehe auch „Listbox“.

ListAlloc( <sorted>, <duplicates> )
ListAlloc( <sorted> )
ListAlloc

Erstellt eine neue Liste und liefert das zugehörige Handle zurück. Dieses Handle wird als Parameter in allen anderen Listen-Funktionen erwartet. Vor dem Skriptende muss es wieder mittels „ListFree“ freigegeben werden, um Speicherlöcher zu vermeiden.

Ist die Variable <sorted> gleich „TRUE“ (<>0), wird die Liste nach dem Zufügen neuer Einträge automatisch sortiert. Falls <duplicates> gleich „TRUE“ (<>0) ist, sind doppelte Einträge erlaubt, andernfalls werden Einträge nur einmal in die Liste aufgenommen.

Hinweis: Voraussetzung für die Duplikat-Erkennung ist eine sortierte Liste.

Rückgabewert: >=0: Handle für die Liste, -1: Zu viele Listen offen.

Beispiel:

$list = ListAlloc

ListFree( <listhdl> )

Löscht die Liste und gibt deren Speicherplatz und das Handle wieder frei. Siehe auch „ListAlloc“.

Rückgabewert: 0: OK, -1: Fehlerhaftes Handle.

Beispiel:

listfree( $list )

ListExists( <listhdl>, <index> )
ListExists( <listhdl> )

Testet, ob das List-Handle <listhdl> (siehe „ListAlloc“) gültig ist und – sofern angegeben – ob der Eintrag Nr. <index> in der Liste existiert.

Rückgabewert: True (1): gültig; False (0): ungültig.

Beispiel:

sub DoSomethingWithList( $list )
if( !ListExists( $list ) )
  error( "Liste fehlt!" )
endif
# weitere Anweisungen
endsub

ListClear( <listhdl> )

Löscht alle Einträge einer Liste, deren Handle <listhdl> ist (siehe „ListAlloc“).

Rückgabewert: 0: OK; -1: Fehlerhaftes Handle.

Beispiel:

ListClear( $list )

ListCount( <listhdl> )

Liefert die Anzahl der Listeneinträge. Siehe auch „ListAlloc“.

Rückgabewert: Integer.

Beispiel:

print( ListCount( $list ) )

ListGet( <listhdl>, <index> )

Liefert den Eintrag in einer Liste mit dem Handle <listhdl> (siehe „ListAlloc“) zum Index <index>. Die Zählung der Einträge beginnt bei 0 und geht bis ListCount-1.

Rückgabewert: Zeichenkette (leer, wenn Eintrag Nr. <index> nicht existiert).

Beispiel:

$i = 0
while( $i < ListCount($list) )
  print( $i, ": ", ListGet($list,$i) )
  inc( $i )
endwhile

ListSet( <listhdl>, <index>, <value> )
ListSet( <listhdl>, <index> )

Setzt in einer Liste mit dem Handle <listhdl> (siehe „ListAlloc“) den Listeneintrag mit Index <index> auf den Wert <value>. Sollte der entsprechende Listeneintrag noch nicht existieren, so wird er angelegt, was die Nutzung einer Liste als Array-Ersatz erlaubt. Sollte kein <value> übergeben werden, bekommt der Eintrag einen Leerstring zugewiesen.

Rückgabewert: <value>.

Beispiel:

ListSet( $list, 42, "The answer!" )

ListGetTag( <listhdl>, <index> )

Liefert die „Tag“-Eigenschaft des Listeneintrages Nr. <index> in einer Liste mit dem Handle <listhdl> (siehe „ListAlloc“). Diese Eigenschaft existiert zusätzlich zum Zeichenketteninhalt jedes Listeneintrages und enthält eine Zahl. Falls bislang nicht gesetzt, wird 0 zurückgeliefert.

Rückgabewert: Integer.

Beispiel:

$entry_itself = ListGet( $list, 42 )
$tag_of_entry = ListGetTag( $list, 42 )

ListSetTag( <listhdl>, <index>, <tag> )

Setzt die „Tag“-Variable für den Listeneintrag mit dem Index Nr. <index> in einer Liste mit dem Handle <listhdl> (siehe „ListAlloc“).

Rückgabewert: <tag>.

Beispiel:

$index = ListAdd( $list, "The answer!" )
ListSetTag( $list, $index, 42 )

ListGetKey( <listhdl>, <key> )

Enthält die Liste mit dem Handle <listhdl> (siehe „ListAlloc“) Zeichenketten in Form von „Schlüssel=Wert“, so liefert diese Funktion den Wert zum Schlüssel <key>.

Rückgabewert: Zeichenkette: Wert zu <key>.

Beispiel siehe unter „ListSetKey“.

ListSetKey( <listhdl>, <key>, <value> )
ListSetKey( <listhdl>, <key> )

Enthält die Liste mit dem Handle <listhdl> (siehe „ListAlloc“) Zeichenketten in Form von „Schlüssel=Wert“, setzt diese Funktion den Wert zum Schlüssel <key> auf <value> bzw. auf eine leere Zeichenkette.

Rückgabewert: <value>.

Beispiel:

$list = ListAlloc
ListSetKey( $list, "RTFM", "Read the f... manual!" )
ListSetKey( $list, "SCNR", "Sorry, could not resist!" )
print( ListGetKey( $list, "SCNR" ) )

ListAdd( <listhdl>, <value> )
ListAdd( <listhdl> )

Fügt am Ende der Liste mit dem Handle <listhdl> (siehe „ListAlloc“) einen Listeneintrag <value> hinzu. Ohne dessen Angabe wird ein leerer Wert eingetragen.

Rückgabewert: Index des neuen Eintrages.

Beispiel:

$index = ListAdd( $list, $text )

ListDelete( <listhdl>, <index> )

Löscht den Listeneintrag mit dem Index <index> in einer Liste mit dem Handle <listhdl> (siehe „ListAlloc“), die restlichen Einträge wandern entsprechend.

Rückgabewert: 0

ListInsert( <listhdl>, <index>, <value> )
ListInsert( <listhdl>, <index> )

Fügt in einer Liste mit dem Handle <listhdl> (siehe „ListAlloc“) einen Listeneintrag mit dem Index <index> mit dem Inhalt <value> ein, die folgenden Einträge verschieben sich entsprechend.

Rückgabewert: 0

Beispiel:

ListInsert( $list, 0, $text )

ListSort( <listhdl> )

Sortiert die Liste mit dem Handle <listhdl> (siehe „ListAlloc“).

Rückgabewert: 0

Beispiel:

ListSort( $list )

ListSetText( <listhdl>, <text> )

Löscht den Inhalt einer Liste mit dem Handle <listhdl> (siehe „ListAlloc“) und fügt ihr den Text <text>, zeilenweise getrennt durch CR/LF, der Liste hinzu.

Rückgabewert: <text>.

Beispiel:

ListSetText( $list, $article )
print( ListGet( $list, 0 ) ) # Ausgabe: Erste Zeile von $article

ListGetText( <listhdl> )

Liefert den Inhalt der gesamten Liste mit dem Handle <listhdl> (siehe „ListAlloc“) als Zeichenkette zurück, die einzelnen Einträge (Zeilen) der Liste werden dabei nur mit CR/LF voneinander getrennt.

Rückgabewert: Zeichenkette.

Beispiel:

$article = ListGetText( $list )

ListIndexOf( <listhdl>, <value> )

Sucht in der Liste mit dem Handle <listhdl> (siehe „ListAlloc“) den Eintrag <value> und liefert dessen Index zurück.

Rückgabewert: >=0: Index, -1: nicht gefunden.

Beispiel:

ListSetText( $list, $article )
$EndOfHdr = ListIndexOf( $list, "" )

ListLoad( <listhdl>, <textfile> )

Füllt die Liste mit dem Handle <listhdl> (siehe „ListAlloc“) mit dem Inhalt der Textdatei <textfile> zeilenweise.

Rückgabewert: 0 = OK, -1 = ungültiges List-Handle, -2 = fehlende Zugriffsrechte, -3 = Datei nicht gefunden.

Beispiel:

ListLoad( $list, "MyScript.cfg" )

ListSave( <listhdl>, <textfile> )

Speichert die Liste mit dem Handle <listhdl> (siehe „ListAlloc“) in die Textdatei <textfile>.

Rückgabewert: 0 = OK, -1 = ungültiges List-Handle, -2 = fehlende Zugriffsrechte.

Beispiel:

ListSave( $list, "MyScript.cfg" )

ListAppend( <listhdl>, <textfile> )

Fügt die Liste mit dem Handle <listhdl> (siehe „ListAlloc“) an die Textdatei <textfile> an. Existiert die Datei nicht, wird sie erzeugt.

Rückgabewert: Integer (0 = OK, -1 = ungültiges List-Handle, -2 = fehlende Zugriffsrechte).

Beispiel:

ListAppend( $list, "MyScript.cfg" )

ListFiles( <listhdl>, <filemask>, <fullpath> )
ListFiles( <listhdl>, <filemask> )

Füllt die Liste, deren Handle <listhdl> ist (siehe „ListAlloc“), mit den Dateinamen aus dem Verzeichnis <filemask>. Ist die Variable <fullpath> gleich „TRUE“ (<>0), werden die Dateien inklusive Pfad aufgeführt, andernfalls nur die Dateinamen.

Rückgabewert: Integer; >=0: OK (Anzahl der Dateien), <0: Datei(en) nicht gefunden.

Beispiel:

ListFiles( $list, HamPath + "Mails\Mail.Out\*.msg", true )

ListDirs( <listhdl>, <filemask>, <fullpath> )
ListDirs( <listhdl>, <filemask> )

Füllt die Liste, deren Handle <listhdl> ist (siehe „ListAlloc“), mit den Verzeichnisnamen aus dem Verzeichnis <filemask>. Ist die Variable <fullpath> gleich „TRUE“ (<>0), werden die kompletten Pfade aufgeführt, andernfalls nur die Verzeichnisnamen.

Rückgabewert: Integer; >=0: OK (Anzahl der Verzeichnisse), <0: Verzeichnis(se) nicht gefunden.

Beispiel:

ListDirs( $list, HamPath + "Mails\*." )

ListRasEntries( <listhdl> )

Füllt die Liste, deren Handle <listhdl> ist (siehe „ListAlloc“), mit DFÜ-Netzwerk-Einträgen (Telefonbuch des DFÜ-Netzwerkes).

Rückgabewert: >=0: OK (Anzahl der Einträge), <0: Liste fehlerhaft.

Beispiel:

var( $RasConnection )
$RasConnection = SelectRasConnection
if( $RasConnection <> "" )
  print( "Wähle ", $RasConnection )
  # weitere Anweisungen
endif
quit

sub SelectRasConnection
  var( $RasList, $RasSelIndex, $RasSelName )
  $RasSelName = ""
  $RasList = ListAlloc
  if( ListRasEntries( $RasList )>0 )
    $RasSelIndex = ListBox( $RasList, "Wählen sie aus:" )
    if( $RasSelIndex >= 0 )
      $RasSelName = ListGet( $RasList, $RasSelIndex )
    endif
  endif
  ListFree( $RasList )
  return( $RasSelName )
endsub

Ein- und Ausgabe

print( <text> [ , <text> , ...] )

Gibt den enthaltenen Text im Hamsterprotokoll aus (Info-Stufe).

Rückgabewert: <text>.

Beispiel:

varset( $answer , 42 )
print( "Und die richtige Antwort lautet: ", $answer )

warning( <text> [ , <text> , ...] )

Bewirkt das Gleiche wie „print“, der Text ist allerdings gelb unterlegt und wirkt dadurch auffälliger.

Rückgabewert: <text>.

Beispiel:

warning( "Hirnfehlfunktion! Keine Ideen mehr! Beispiel terminiert!" )

Addlog( <text> , <x> [ , <ZeigeSkriptname> ] )

Bewirkt das Gleiche wie „print“, nur kann die Art des Eintrages mit der Variablen <x> beliebig festgelegt werden. Der Parameter <ZeigeSkriptname> (boolsch) legt fest, ob der Skriptname mit im Log erscheint.

Gültige Werte für <x>, wenn Sie das Modul „hamster.hsm“ in Ihr Skript einbinden, können Sie die dort vordefinierten Konstanten verwenden:
WertKonstanteLoglevel
1$Ham_DebugDebug
2$Ham_DetailDetail
3$Ham_InfoInfo
4$Ham_SystemSystem
5$Ham_WarningWarning
6$Ham_ErrorError
7Status, d. h. Eintrag im Statusfenster „Aufträge (Threads)“

Rückgabewert: <text>.

Beispiel:

Addlog( "Hirnfehlfunktion! Keine Ideen mehr! Beispiel terminiert!" ,5)

HamRotatelog

Ein neues Logfile wird angelegt .

MsgBox( <text>, <caption>, <style> )
MsgBox( <text>, <caption> )
MsgBox( <text> )

Zeigt eine Textbox mit dem Text <text> und der Überschrift <caption> an. <style> legt den Typ und die Schalter der Textbox fest, verbunden durch den binären Oder-Operator „|“. Wenn Sie das Modul „hwindows.hsm“ in Ihr Skript einbinden, können Sie die dort vordefinierten Kostanten verwenden.

Standardvorgaben: „Information“ und „OK“-Schalter.

Typen:

0x10$MB_ICONHAND, $MB_ICONERROR, $MB_ICONSTOPFehler
0x20$MB_ICONQUESTIONFrage
0x30$MB_ICONEXCLAMATION, $MB_ICONWARNINGWarnung
0x40$MB_ICONASTERISK, $MB_ICONINFORMATIONInformation

Schalter:

0x0$MB_OKOK
0x1$MB_OKCANCELOK+Abbrechen
0x2$MB_ABORTRETRYIGNOREAbbrechen+Wiederholen+Ignorieren
0x3$MB_YESNOCANCELJa+Nein+Abbrechen
0x4$MB_YESNOJa+Nein
0x5$MB_RETRYCANCELWiederholen+Abbrechen

Vorauswahl der Schalter

0x000$MB_DEFBUTTON11. Schalter
0x100$MB_DEFBUTTON22. Schalter
0x200$MB_DEFBUTTON33. Schalter
0x400$MB_DEFBUTTON44. Schalter

Rückgabewert:

0Fehler
1$IDOK OK
2$IDCANCELAbbruch
3$IDABORTAbbruch
4$IDRETRY Wiederholen
5$IDIGNOREIgnorieren
6$IDYESJa
7$IDNONein

Beispiel:

if( MsgBox( "Was ist Ihre Frage?", "", 0x20|0x4 ) = 6 )
  Error( "Unerwartete Antwort." )
 else
  MsgBox( "Vergiss es ..." )
endif

PopupBox( <text>, <caption>, <style>, <timeout>, <default> )

Zeigt eine Textbox mit dem Text <text> und der Überschrift <caption> an. <style> legt den Typ und die Schalter der Textbox fest (Standard: „Information“ und „OK“-Schalter). Falls kein Schalter gedrückt wird, schließt das Fenster nach <timeout> Sekunden (max. 4.194.304) automatisch, und gibt <default> zurück (<default> muss kein Wert sein, der einem Schalter zugeordnet ist).

Wenn Sie das Modul „hwindows.hsm“ in Ihr Skript einbinden, können Sie die dort vordefinierten Konstanten verwenden.

Typen:

0x10$MB_ICONHAND, $MB_ICONERROR, $MB_ICONSTOPFehler
0x20$MB_ICONQUESTIONFrage
0x30$MB_ICONEXCLAMATION, $MB_ICONWARNINGWarnung
0x40$MB_ICONASTERISK, $MB_ICONINFORMATIONInformation

Schalter:

0x0$MB_OKOK
0x1$MB_OKCANCELOK+Abbrechen
0x2$MB_ABORTRETRYIGNOREAbbrechen+Wiederholen+Ignorieren
0x3$MB_YESNOCANCELJa+Nein+Abbrechen
0x4$MB_YESNOJa+Nein
0x5$MB_RETRYCANCELWiederholen+Abbrechen

Rückgabewert:

0Fehler
1$IDOK OK
2$IDCANCELAbbruch
3$IDABORTAbbruch
4$IDRETRY Wiederholen
5$IDIGNOREIgnorieren
6$IDYESJa
7$IDNONein

Beispiel:

var ( $result )
$result = PopupBox( "Ist da jemand?", "Hallo!", 0x04, 5, 3 )
icase( $result, 3, print( "Niemand da." ), _
       6, print( "Ich bin nicht allein." ), _
       7, print( "Lügner!" ) )

InputBox( <text> [ , <caption>, <default>, <code> ] )

Zeigt in einer Texteingabebox den Text <text> mit der Überschrift <caption> an. Die Eingabezeile wird mit den Text <default> vorbelegt. Ist die Variable <code> nach Rückkehr 1 (True), wurde der Schalter „OK“ betätigt, andernfalls der Schalter „Abbrechen“.

Rückgabewert: Zeichenkette (leer, wenn Schalter „Abbrechen“ betätigt wurde).

Beispiel:

$answer = InputBox( "What's the answer ...?", "", "42", $ok )

InputPW( <text> [ , <caption>, <default>, <code> ] )

Zeigt in einer Texteingabebox den Text <text> mit der Überschrift <caption> an. Die Eingabezeile wird mit den Text <default> vorbelegt, aber mit Sternchen verschleiert dargestellt. Ist die Variable <code> nach Rückkehr 1 (True) wurde der Schalter „OK“ betätigt, andernfalls der Schalter „Abbrechen“.

Rückgabewert: Zeichenkette (Vorgabewert oder leer, wenn Schalter „Abbrechen“ betätigt wurde).

Beispiel:

$answer = InputPW( "What's the answer ...?", "", "42", $ok )

ListBox( <list>, <text> [ , <caption>, <default>, <code> ] )

Zeigt eine Listbox mit dem Text <text> und der Überschrift <caption> an und erlaubt die Auswahl aus der Liste <list>. Die Variable <default> legt fest, welcher Listeneintrag vorausgewählt angezeigt wird (Standard ist -1, gleichbedeutend mit „Keine Vorauswahl“). Ist die Variable <code> nach Rückkehr 1 (True), wurde der Schalter „OK“ betätigt, andernfalls der Schalter „Abbrechen“.

Rückgabewert: Index des ausgewählten Eintrages.

Beispiel:

var( $list, $selindex )
$list = ListAlloc
ListAdd( $list, "41" )
ListAdd( $list, "42" )
ListAdd( $list, "43" )
$selindex = ListBox( $list, "What's the answer ...?" )
print( iif( $selindex=1, "Correct!", "Wrong!" ) )
ListFree( $list )

Artikel verwalten

ArtAlloc( <Text> )
ArtAlloc

Erstellt einen neuen Message-Puffer und liefert ein Handle dafür zurück. Dieses Handle wird in den anderen Message-Funktionen mit <msg> bezeichnet. Es ist solange gültig, bis es mit „ArtFree“ wieder freigegeben wird. Ist der Parameter <text> vorhanden, wird er als Message verwendet, andernfalls wird eine leere Message angelegt.

Rückgabewert: Integer.

Beispiel:

$msg = ArtAlloc

ArtFree( <msg> )

Gibt ein Message-Handle wieder frei. Siehe auch „ArtAlloc“.

Rückgabewert: 0: OK, -1: Fehlerhaftes Handle.

Beispiel:

ArtFree( $msg )

ArtLoad( <msg>, <filename> )

Lädt eine Textdatei <filename> in einen zuvor durch „ArtAlloc“ angelegten Message-Puffer <msg>.

Rückgabewert: 0: OK, -1: Datei nicht gefunden, -2: Fehler.

Beispiel:

ArtLoad( $msg, HamMailsOutPath + "42.msg" )

ArtSave( <msg>, <filename> )

Speichert einen Message-Puffer <msg> (siehe „ArtAlloc“) in eine Datei <filename>.

Rückgabewert: 0: OK, -2: Fehler.

Beispiel:

ArtSave( $msg, HamMailsOutPath + "42.msg" )

ArtGetHeaders( <msg> )
ArtGetBody( <msg> )
ArtGetText( <msg> )

Liefert von einem Message-Puffer (siehe „ArtAlloc“) den Header, den Body oder beides zusammmen als String zurück.

Rückgabewert: String.

Beispiel:

$Hdrs = ArtGetHeaders( $msg )
$Body = ArtGetBody( $msg )
$Text = ArtGetText( $msg )

ArtSetHeaders( <msg>, <headers> )
ArtSetBody( <msg>, <body> )
ArtSetText( <msg>, <text> )

Speichert den Inhalt eines Strings für die Header(<header>), den Body (<body>) oder beides zusammen (<text>) komplett in einem zuvor durch „ArtAlloc“ angelegten Message-Puffer <msg>.

Rückgabewert: 0: OK, -1: Fehlerhaftes Handle.

Beispiel:

ArtSetHeaders( $msg, $Headers )
ArtSetBody( $msg, $Body )
ArtSetText( $msg, $Text )

Hiervon zu unterscheiden ist die Funktion „ArtSetHeader“.

ArtHeaderExists( <msg>, <hdrname> )

Testet die Existenz einer Headerzeile mit dem Namen <hdrname> in einem Message-Puffer <msg> (siehe „ArtAlloc“).

Rückgabewert: 0 (false) = Nicht vorhanden, 1 (true) = vorhanden.

ArtGetHeader( <msg>, <hdrname>, <separate> )
ArtGetHeader( <msg>, <hdrname> )

Liefert aus einem Message-Puffer <msg> (siehe „ArtAlloc“) den Inhalt der Header-Zeile mit dem Namen <hdrname> zurück. Wenn die Header-Zeile nicht gefunden wurde, liefert die Funktion eine leere Zeichenkette zurück. Hat die Header-Zeile eine oder mehrere Folgezeilen, so liefert die Funktion, abhängig vom Parameter <separate>, die Zeilen entweder getrennt mit einem Leerzeichen (<separate> = 0) oder im Originalzustand (<separate> = 1) zurück.

Rückgabewert: String.

Beispiel:

$Subject = ArtGetHeader( $msg, "Subject" )

ArtAddHeader( <msg>, <hdrname>, <hdrval> )

Erweitert im Message-Puffer <msg> (siehe „ArtAlloc“) den Header um eine Zeile mit dem Namen <hrdname> und dem Inhalt <hdrval>.

Rückgabewert: 0=OK.

Beispiel:

ArtAddHeader( $msg, "Subject", "This is the subject!" )

ArtSetHeader( <msg>, <hdrname>, <hdrval>, <xhdrname> )
ArtSetHeader( <msg>, <hdrname>, <hdrval> )

Ersetzt im Message-Puffer <msg> (siehe „ArtAlloc“) den Inhalt einer Header-Zeile mit dem Namen <hrdname> durch den Inhalt <hdrval>. Mit dem Parameter <xhdrname> kann ein optionaler Name angegeben werden, um die vorhandene Header-Zeile in eine andere Header-Zeile unter diesem neuen Namen zu kopieren.

Rückgabewert: 0=OK.

Beispiel:

ArtSetHeader( $msg, "Subject", "This is the new subject!", "X-Old-Subject" )

Hiervon zu unterscheiden ist die Funktion „ArtSetHeaders“.

ArtDelHeader( <msg>, <hdrname> )

Löscht eine Header-Zeile <hdrname> aus dem Header einer Message im Message-Puffer <msg> (siehe „ArtAlloc“).

Rückgabewert: 0=OK.

Beispiel:

ArtDelHeader( $msg, "X-Old-Subject" )

Zeitgeber/Scheduler

AtAdd( <subname>, <von> [ , <bis>, <wtage>, <repeat>, <immediate> ] )

Fügt dem Scheduler einen Eintrag hinzu.

Die Variable <subname> muss den Namen der auszuführenden Prozedur enthalten, welche zum gewünschten Zeitpunkt ausgeführt werden soll. Es darf kein Parameter für die Prozedur angegeben werden.

Die Variablen <von> und <bis> müssen den Zeitraum im „hh:mm“-Format enthalten, in welchem die Subroutine zyklisch ausgeführt werden soll. Führende Nullen dürfen nicht weg gelassen werden, ‚"24:00"‘ ist nur für den „<bis>“-Parameter erlaubt.

Die Variable <wtage> muss die Wochentage als sieben Zeichen lange Zeichenkette enthalten, an denen die Subroutine auszuführen ist. Jedes Zeichen darf den Zustand 1 (= Ausführen) oder 0 (= nicht Ausführen) annehmen und repräsentiert – beginnend mit Montag – einen Wochentag.

Die Variable <repeat> muss die Zeitspanne in Minuten enthalten, nach welcher die Ausführung der Subroutine wiederholt werden soll.

Die Variable <immediate> entscheidet, wann die Ausführung der Subroutine beginnt: 0 = Erste Ausführung nach Ablauf des ersten Intervalls; 1 = Erste Ausführung sofort; 2 = Ausführung nur exakt zu den Minuten, die sich aus Anfangszeit und Minutenabstand ergeben.

Hinweis: Ein Intervall beginnt immer mit der aktuellen Minute des Skriptstarts.

Rückgabewert: Index für den Schedulereintrag.

Beispiel:

AtClear
AtAdd( getmails, "00:00", "06:00", "1111100", 60, 1 )
AtAdd( getmails, "06:00", "18:00", "1111100", 15, 1 )
AtAdd( getmails, "18:00", "24:00", "1111100", 60, 1 )
AtAdd( getmails, "12:00", "", "0000011" )
AtAdd( getnews, "03:15" )
AtAdd( getnews, "18:45" )
AtExecute
quit

sub getmails
  # weitere Anweisungen
endsub

sub getnews
  # weitere Anweisungen
endsub

AtClear

Löscht alle Einträge des Schedulers.

Rückgabewert: 0.

Siehe Beispiel unter AtAdd.

AtExecute( <timeout> )
AtExecute

Wartet, bis eine der Subroutinen, die mit „AtAdd“ dem Scheduler zugefügt wurden, einen Wert ungleich 0 zurückliefert oder bis die in der Variablen <timeout> festgelegte Zeit abgelaufen ist.

Rückgabewert: -1: Timeout, >0: Rückgabewert der zuletzt ausgeführten Subroutine.

Siehe Beispiel unter AtAdd.

AtCount

Liefert die Anzahl der Einträge im Scheduler zurück.

Rückgabewert: Integer.

AtSubfunction( <Index> )

Liefert die zu einem Scheduler-Eintrag gehörige Subfunktion zurück.

Rückgabewert: String.

AtFrom ( <Index> )

Liefert die zu einem Scheduler-Eintrag gehörige Anfangszeit zurück.

Rückgabewert: String.

AtUntil ( <Index> )

Liefert die zu einem Scheduler-Eintrag gehörige Endzeit zurück.

Rückgabewert: String.

AtOnDays ( <Index> )

Liefert die zu einem Scheduler-Eintrag gehörigen Wochentagseinträge zurück.

Rückgabewert: String.

AtEveryMins ( <Index> )

Liefert die zu einem Scheduler-Eintrag gehörige Wartezeit zurück.

Rückgabewert: Integer.

DFÜ-Netzwerk

Siehe auch die Funktion ListRasEntries.

RasGetConnection

Liefert den Namen der aktuellen DFÜ-Netzwerkverbindung zurück.

Rückgabewert: Zeichenkette (leer wenn nicht vorhanden).

RasLastError

Liefert den Fehlerstatus der letzten DFÜ-Netzwerkverbindung zurück.

Rückgabewert: Integer.

Hinweis: Nach Beendigung einer DFÜ-Netzwerkverbindung benötigen Modemen und andere DFÜ-Hardware eine gewisse Erholungszeit. Dieses führt dazu, dass diese Funktion erst nach einer kleinen Pause den korrekten Zustand anzeigt. Der konkrete Wert für diese Verzögerung ist von der verwendeten Hardware abhängig.

RasErrText

Liefert den Fehlertext der letzten DFÜ-Netzwerkverbindung zurück.

Rückgabewert: String.

Hinweis: Nach Beendigung einer DFÜ-Netzwerkverbindung benötigen Modemen und andere DFÜ-Hardware eine gewisse Erholungszeit. Dieses führt dazu, dass diese Funktion erst nach einer kleinen Pause den korrekten Zustand anzeigt. Der konkrete Wert für diese Verzögerung ist von der verwendeten Hardware abhängig.

RasIsConnected

Testet, ob eine DFÜ-Netzwerkverbindung besteht.

Rückgabewert: True (1), wenn ja; False (0), wenn nein.

Hinweis: Nach Beendigung einer DFÜ-Netzwerkverbindung benötigen Modemen und andere DFÜ-Hardware eine gewisse Erholungszeit. Dieses führt dazu, dass diese Funktion erst nach einer kleinen Pause den korrekten Zustand anzeigt. Der konkrete Wert für diese Verzögerung ist von der verwendeten Hardware abhängig.

Beispiel:

Sleep(1000)
if( !RasIsConnected )
  # Dial
endif

RasDial( <name>, <user>, <pass>, <connid> )

Stellt eine DFÜ-Netzwerkverbindung mit dem Namen <name> unter Verwendung von Benutzername <user> und Passwort <pass> her. Die Variable <connid> enthält dann das Handle für die Verbindung. Der Name der DFÜ-Netzwerkverbindung muss bereits in Windows unter „Arbeitsplatz“ → „DFÜ-Netzwerk“ (Telefonbuch des DFÜ-Netzwerkes) definiert worden sein (Groß- und Kleinschreibweise beachten).

Hinweis: Diese Funktion wird nicht von den passwort-spezifischen Funktionen des Hamsters unterstützt! Hierzu müssten stattdessen die Funktionen „HamRasDial“ und „HamRasHangup“ verwendet werden.

Rückgabewert: 0: Verbindung aufgebaut; >0: Fehler-Code des DFÜ-Netzwerkes; -1: DFÜ-Netzwerk nicht installiert.

Beispiel:

$try = 1
while( RasDial("MyProvider","MyUsername","MyPassword") != 0 )
 if( $try >= 3 )
   error( "Dialing failed!" )
 endif
 inc( $try )
 sleep( 10000 )
endwhile

RasHangup( <connid> )
RasHangup

Beendet DFÜ-Netzwerkverbindungen. Ist die Variable <connid> nicht angegeben, werden alle DFÜ-Verbindungen beendet.

Rückgabewert: 0: OK; >0: Fehler-Code; -1: DFÜ-Netzwerk nicht installiert.

RasGetIP

Liefert die (in den meisten Fällen dynamische) IP-Adresse, die beim Verbinden über das DFÜ-Netzwerk vom Provider zugewiesen worden ist.

Rückgabewert: IP-Adresse als Zeichenkette (leer wenn nicht vorhanden).

Zeiger-Funktionen

MemAlloc( <size> )

Reserviert den Speicher <size> und liefert einen Zeiger auf diesen Speicherplatz zurück. Vor dem Skriptende muss er wieder mittels „MemFree“ freigegeben werden, um Speicherlöcher zu vermeiden.

MemSize( <ptr> )

Liefert den durch MemAlloc (der Zeiger <ptr> ist dessen Rückgabewert) reservierten Speicherplatz zurück.

MemFree( <ptr> )

Gibt den durch MemAlloc (der Zeiger <ptr> ist dessen Rückgabewert) reservierten Speicherplatz wieder frei.

MemForget( <ptr> )

Leert den Speicher mit dem Zeiger <ptr> (siehe MemAlloc), ohne den reservierten Speicherplatz wieder freizugeben.

MemSetInt( <ptr> , <int> )

Schreibt den Inhalt der Integervariablen <int> in den vom Zeiger <ptr> (siehe MemAlloc) referenzierten Speicherplatz.

MemGetInt( <ptr> )

Liefert aus dem vom Zeiger <ptr> (siehe MemAlloc) referenzierten Speicherplatz einen Integerwert zurück.

MemSetStr ( <ptr> , <str> , <len> )
MemSetStr ( <ptr> , <str> )

Schreibt den Inhalt der Stringvariablen <int> in den vom Zeiger <ptr> (siehe MemAlloc) referenzierten Speicherplatz. Mit <len> kann optional die Länge des zu kopierenden Strings angegeben werden.

Achtung: Es wird von einem NULL-terminierten String ausgegangen, falls der Parameter <len> nicht angegeben wurde.

MemGetStr ( <ptr> , <len> )
MemGetStr ( <ptr> )

Liefert aus dem vom Zeiger <ptr> (siehe MemAlloc) referenzierten Speicherplatz einen String zurück. Mit <len> kann optional die Länge des zu kopierenden Strings angegeben werden.

Achtung: Es wird von einem NULL-terminierten String ausgegangen, falls der Parameter <len> nicht angegeben wurde.

MemVarPtr ( <var> )

Liefert einen Zeiger auf den Speicherplatz der Variablen <var> zurück.

Sonstige Funktionen

execute( <cmdline> [ , <workdir>, <show>, <wait>, <exitcode> ] )

Startet das Programm <cmdline> inkl. ggf. angehängten Parametern im Arbeitsverzeichnis <workdir>. Die Variable <show> legt die Eigenschaften des Programmfenster fest (0 = unsichtbar, 1 = normal, 2 = minimiert, 3 = maximiert). Ist die Variable <wait> True = Wahr, wartet das Skript auf das Ende des aufgerufenen Programms, andernfalls wird die Ausführung des Skriptes unmittelbar fortgesetzt, während das aufgerufene Programm im Hintergrund arbeitet. Die Variable <exitcode> enthält den Beendigungscode des aufgerufenen Programms. Bitte beachten Sie, dass die Kommandozeilen-API von Windows benutzt wird, und der Programmaufruf daher analog zur Kommandozeile erfolgt. Der Rückgabewert der Funktion bezieht sich immer auf das Funktionieren der Windows API, nicht auf die Funktion des aufgerufenen Programms. Die Variable <exitcode> liefert den Wert -1 zurück, wenn die Windows-API nicht fehlerfrei funktioniert hat. Daher ist immer der Status beider Variablen (<exitcode> und Funktionsergebnis von execute()) zu prüfen. Wird die Funktion durch einen user-bedingten Skript-Stop ausgelöst, liefert sie -1 als Funktionsergebnis zurück.

Rückgabewert: Integer (0=Kein Fehler, <>0=Fehler).

Beispiel:

execute( "notepad.exe myfile.cfg" )

Shell( <filename>, <modus>, <path>, <oprtn> )

Erlaubt den Aufruf von Dokumenten über die in der Registry definierte Verknüpfung. Bis auf den Dateinamen <filename> sind alle Parameter optional. Die Variable <modus> legt die Eigenschaften des Programmfensters fest (0 = unsichtbar, 1 = normal, 2 = minimiert, 3 = maximiert). Der Pfad <path> wird mit der Pfadangabe des Dateinamens vorbelegt. Mit Operation <oprtn> sind Angaben wie „open“, „print“ oder „explore“ gemeint. Welche Operationen gültig sind, hängt vom jeweiligen Datei-Typ ab.

Rückgabewert: Integer (>32=Kein Fehler, 32>=Fehler).

Beispiel:

shell( "readme.txt",1, "","open" )

GetEnvironment( <Variablenname> )

Liefert den Inhalt einer Umgebungsvariablen des Betriebssystems zurück.

ClipRead()

Liefert den Inhalt der Zwischenablage als Text zurück.

ClipWrite( <text> )

Schreibt den Text <text> in die Zwischenablage.

Hinweis: Skripte für den allgemeinen Gebrauch sollten die ClipWrite-Funktion vermeiden oder deutlich auf die Verwendung hinweisen, da der Inhalt der Zwischenablage üblicherweise vom Anwender und nicht von Programmen verändert zu werden hat!

GetProcessIdentifier

Liefert einen String zur eindeutigen Identifizierung der Hamster-Instanz zurück.

random( <maximum> )

Liefert eine Pseudo-Zufallszahl zwischen 0 und <maximum>.

Achtung! Die Funktion ist nur bei Verwendung der OpenSSL-Bibliotheken kryptographisch sicher.

ScriptPriority( <priority > )

Ändert die Priorität des eigenen Skriptes. Zulässiger Wertebereich: 0–6.

Wenn Sie das Modul „hwindows.hsm“ in Ihr Skript einbinden, können Sie die dort vordefinierten Konstanten verwenden.

Achtung:> Die Verwendung von 6 = $THREAD_PRIORITY_TIME_CRITICAL kann unter Umständen zum Blockieren des Systems führen. Testen Sie die Skripte immer vorher aus, bevor sie diesen Parameter verwenden.

digest( <typ> , <string> , <form> )

Liefert ein krypthographisches Digest (Fingerabdruck) bzw. die Checksumme des Strings <string> im Format <form> zurück.

Mögliche Typen:

0CRC32, Integer
1MD5, Zeichenkette mit 16 Zeichen
2SHA1, Zeichenkette mit 20 Zeichen

Mögliche Formate:

0String
1String mit hexadezimalem Inhalt

Rückgabewerte: Integer bzw. String für CRC32 und String für MD5 oder SHA1.

paramcount

Liefert die Anzahl der dem Skript beim Start übergebenen Parameter zurück.

paramstr( <index> )

Liefert den dem Skript beim Start übergebenen Parameter mit der laufenden Nummer <index> zurück. Der erste Parameter hat dabei den Index 1, durch den Index 0 wird der Skriptname zurückgeliefert.

SetTaskLimiter( <limit> )

Setzt die Anzahl der gleichzeitig zu bearbeitenden Tasks für Verbindungen zum Provider auf <limit> und liefert den zuvor verwendeten Wert zurück.

GetTasksActive

Liefert die Anzahl der aktiven Tasks zurück.

GetTasksWait

Liefert die Anzahl der wartenden Tasks zurück.

GetTasksRun

Liefert die Anzahl der laufenden Tasks zurück.

StopThread ( <ThreadID> )

Stoppt den Thread mit dem Identifier <ThreadID>.

Rückgabewert: 1 = Thread gestoppt.

SetHostsEntry_ByName( <hostname> , <IP-address> )
SetHostsEntry_ByName( <hostname> )

Trägt zu einem Hostnamen <hostname> die IP-Adresse in die Datei „hosts“ ein. Ist der Parameter <IP-address> leer, wird der Eintrag aus der Datei entfernt.

SetHostsEntry_ByAddr( <IP-address> , <hostname>)
SetHostsEntry_ByAddr( <IP-address> )

Trägt zu einer IP-Adresse den Hostnamen <hostname> in die Datei „hosts“ ein. Bestehende Einträge werden überschrieben. Ist der Parameter <hostname> leer, wird der Eintrag aus der Datei entfernt.

DeleteHostsEntry ( <hostname> , <IP-address>)

Löscht einen Eintrag mit den Parametern <hostname> und <IP-address> aus der Datei „hosts“.

localhostname

Liefert den eigenen Hostnamen von der Netzwerkschnittstelle zurück.

localhostaddr

Liefert die momentane eigene IP-Adresse von der Netzwerkschnittstelle zurück.

lookuphostaddr ( <hostname> )

Liefert die IP-Adresse zu einem Hostnamen aus dem DNS.

lookuphostname ( <IP-address> )

Liefert den Hostnamen aus dem DNS zu einer IP-Adresse.

XCounter( <Nummer> )

Liefert den Inhalt der Fußzeilenvariablen <Nummer> zurück.

ClearXCounter( <Nummer> , <bis_Nummer> )
ClearXCounter( <Nummer> )

Löscht den Inhalt der Fußzeilenvariablen von <Nummer> bis zu <bis_Nummer>. Fehlt der zweite Wert, wird nur der Zähler <Nummer> gelöscht.

SetXCounter( <Nummer> , <Wert> )

Verändert den Inhalt der Fußzeilenvariablen <Nummer> zu <Wert>.

DecXCounter( <Nummer> , <Wert> )
DecXCounter( <Nummer> )

Verringert den Inhalt der Fußzeilenvariablen <Nummer> um <Wert> oder bei fehlender Angabe um 1.

IncXCounter( <Nummer> , <Wert> )
IncXCounter( <Nummer> )

Erhöht den Inhalt der Fußzeilenvariablen <Nummer> um <Wert> oder bei fehlender Angabe um 1.

DLLLoad( <Name> )

Lädt die DLL <Name> in den Speicher und liefert ein Handle auf die geladene DLL zurück. Diese Funktion ist für die Ausführung von „DLLCall“ zwar nicht zwingend notwendig, oft aber sinnvoll, Näheres siehe dort. System-Bibliotheken (z. B. „kernel32.dll“) sollten nicht geladen werden, da sie bereits vom Betriebssystem permanent vorgehalten werden.

Eine mit DLLLoad geladene Bibliothek muss vor dem Skriptende auch wieder mittels „DllFree“ aus dem Speicher entfernt werden, damit Speicherlöcher vermieden werden.

Rückgabewert: <>0: Handle der DLL; = 0: Fehler (siehe „DllLastError“).

DLLFree( <Handle> )

Gibt eine zuvor mit DllLoad geladene DLL wieder frei, wobei das von dieser Funktion zurückgelieferte Handle anzugeben ist.

DLLLastError

Liefert den letzten Fehlerstatus der DLL-Funktionen zurück.

Achtung! Aufgrund eines Fehlers im Hamster 2.1.0.11 wird der Rückgabewert von DllLastError nicht zuverlässig gesetzt. Dieser Fehler wurde in der Beta-Version 2.1.0.1517 behoben.

DLLCall( <Deklaration> [ , <par1> , ... , <par11> ] )

Ruft eine Funktion in einer DLL auf. Ist die DLL bereits geladen, wird diese Instanz verwendet. Ist die DLL noch nicht geladen, so wird sie für jeden Aufruf temporär geladen und nach Ausführung der Funktion sofort wieder freigegeben. Daher empfiehlt sich bei mehrfacher Nutzung einer oder mehrerer Funktionen einer DLL die Verwendung von „DLLLoad“. Das Laden der System-Bibliotheken (z. B. „kernel32.dll“) ist jedoch nicht erforderlich, da sie bereits vom Betriebssystem permanent vorgehalten werden, und sollte daher unterbleiben.

Der Parameter <Deklaration> muss die für die Aktivierung notwendigen vier Felder, getrennt durch einen senkrechten Strich, in folgendem Format enthalten:

"<DLL_Name>|<Funktions_Name>|<Ergebnis_Typ>|<Parameter_Typen>"

<DLL_Name>gültiger Dateiname einer Bibliothek
<Funktions_Name>Name einer darin vorhandenen Funktion
<Ergebnis_Typ>Typ des Rückgabewertes der Funktion. Folgende Werte sind hierfür zulässig:
vkein Rückgabewert vorhanden („void“)
nInteger oder Pointer

Integer steht für alle Integertypen bis zu 32 Bit (auch BOOL, CHAR usw.). Die Interpretation des Wertes (Integer, Pointer oder Sonstiges) ergibt sich aus der Beschreibung der DLL.

<Parameter_Typen> Liste der Typen der einzelnen Funktionsparameter; die Anzahl der Einträge in dieser Liste muss der Anzahl der Parameter der Funktionsdeklaration entsprechen (außer wenn die Funktion keine Parameter besitzt).

Folgende Werte sind möglich:
vFunktion hat keinen Parameter („void“)
nInteger oder Pointer
1Callback-Funktion mit 1 Parameter (s. Anmerkung)
2Callback-Funktion mit 2 Parametern (s. Anmerkung)

Anmerkung zu Callback-Funktionen: Die Skriptsprache des Hamster bietet eigentlich keine Möglichkeit, Callback-Funktionen zu erstellen. Anstelle eines Pointer auf eine Funktion erwartet der Hamster als Parameter einen Pointer auf einen 4 Byte großen Puffer. In diesen „Pointer“-Puffer legt die DLLCall-Funktion einen weiteren Pointer auf den eigentlichen „Daten“-Puffer ab. In diesen „Daten“-Puffer legt eine intern realisierte Callback-Funktion die empfangenen Daten als 32-Bit-DWORD ab. Das erste DWORD enthält die Anzahl der bislang empfangenen Datensätze. Die folgenden DWORDs enthalten jeweils den Wert des ersten Parameters der Callback-Funktion, welcher dieser bei ihrem Aufruf übergeben wurde (siehe Beispiel zu „EnumWindows“). Treffen weitere Daten ein, kann sich die Größe des „Daten“-Puffers und damit auch der Wert des Pointers auf den „Daten“-Puffer ändern. Der „Daten“-Puffer wird zwar von der DLLCall-Funktion alloziert, muss aber bei Skriptende zusätzlich zum ursprünglich allozierten „Pointer“- Puffer frei gegeben werden (siehe Beispiel zu „EnumWindows“). In „<Parameter_Typen>“ wird für diesen Puffer (an der betreffenden Stelle in der Reihenfolge) die Anzahl der Parameter der Callback-Funktion eingetragen (max. 9).

Die optionalen Parameter <par1> bis <par11> stehen für eventuell von der DLL verarbeitete Werte oder Variablen, deren Parametertyp innerhalb von <Deklaration> festgelegt wird, vgl. auch die Beispiele.

Achtung! Die Angabe einer falschen Parameteranzahl kann zu Fehlern im Programmablauf des Hamsters 2.1.0.11 führen, die seine Programmstruktur zerstören. Dieser Fehler wurde in der Beta-Version 2.1.0.1517 behoben.

Beispiele:

# HWND GetForegroundWindow(VOID)
sub ApiGetForegroundWindow
  var( $hwnd )
  $hwnd = DllCall( "user32.dll|GetForegroundWindow|n|v" )
  return( $hwnd )
endsub

# int GetWindowText( HWND hWnd, LPTSTR lpString, int nMaxCount )
sub ApiGetWindowText( $hwnd )
  varset( $buf, MemAlloc(256) )
  DllCall( "user32.dll|GetWindowTextA|n|nnn", $hwnd, $buf, 255 )
  varset( $Result, MemGetStr($buf) ) 
  MemFree( $buf )
  return( $Result )
endsub

# BOOL SetWindowText( HWND hwnd, LPCTSTR lpsz )
sub ApiSetWindowText( $hwnd, $Text )
  varset( $buf, MemAlloc( len($Text)+1 ) )
  MemSetStr( $buf, $Text )
  DllCall( "user32.dll|SetWindowTextA|n|nn", $hwnd, $buf )
  MemFree( $buf )
endsub

# Parameter $WindowList erwartet ein List-Objekt (ListAlloc).
sub ApiEnumWindowsList( $WindowList )
  # BOOL EnumWindows( WNDENUMPROC lpEnumFunc, LPARAM lParam )
  # [ BOOL CALLBACK EnumWindowsProc( HWND hwnd, LPARAM lParam ) ]
  # => callback function type „2“
  varset( $ApiEnumWindows, "user32.dll|EnumWindows|n|2n" )
  var( $Count, $ptr, $i, $k, $wnd, $txt )
  assert( ListExists($WindowList), "ApiEnumWindowsList: list expected!" )
  $Count = 0
  ListClear( $WindowList )
  # Alloc Pointer-Buffer:
  varset( $pWnds, MemAlloc(4) ) # handle to buffer on call/on return
  MemSetInt( $pWnds, 0 )
  if( DllCall( $ApiEnumWindows, $pWnds, 0 ) )
    # Give Callback function time to work:
    sleep(100)
    # Get Pointer to Data-Buffer:
    $ptr = MemGetInt( $pWnds )
    # First entry in buffer is the number of reported results:
    $Count = MemGetInt( $ptr )
    # Additional entries are the values reported to callback function:
    for( $i, 1, $count )
      # get next entry
      inc( $ptr, 4 )
      $wnd = MemGetInt( $ptr )
      $txt = ApiGetWindowText( $wnd )
      # add entry to result list
      $k = ListAdd( $WindowList, $txt )
      ListSetTag( $WindowList, $k, $wnd )
    endfor
  endif
  # Free Data-Buffer:
  MemFree( MemGetInt($pWnds) )
  # Free Pointer-Buffer:
  MemFree( $pWnds )
  return( $Count )
endsub

Für ein Anwendungsbeispiel mit intensiver Verwendung von „DLLCall“ siehe auch das Skript „Online-Check.hsc“ im FAQ-Beitrag „Kann ich den Hamster über einen Router betreiben?“.