summaryrefslogtreecommitdiff
path: root/0.2.5a2
diff options
context:
space:
mode:
Diffstat (limited to '0.2.5a2')
-rw-r--r--0.2.5a2/INSTALL.txt103
-rw-r--r--0.2.5a2/LIESMICH.txt45
-rw-r--r--0.2.5a2/TODO.txt27
-rw-r--r--0.2.5a2/UPDATES.txt75
-rw-r--r--0.2.5a2/bar.gifbin0 -> 231 bytes
-rw-r--r--0.2.5a2/config.pm320
-rw-r--r--0.2.5a2/help.sno54
-rw-r--r--0.2.5a2/htdocs.pl206
-rw-r--r--0.2.5a2/index.pl368
-rw-r--r--0.2.5a2/main.pl633
-rw-r--r--0.2.5a2/main2.pl571
-rw-r--r--0.2.5a2/online.pl56
-rw-r--r--0.2.5a2/push.pl97
-rw-r--r--0.2.5a2/setup.sh40
-rw-r--r--0.2.5a2/unten.gifbin0 -> 662 bytes
-rw-r--r--0.2.5a2/yBanner.gifbin0 -> 5185 bytes
-rw-r--r--0.2.5a2/yBanner2.gifbin0 -> 2105 bytes
-rw-r--r--0.2.5a2/yChat.jpgbin0 -> 50407 bytes
18 files changed, 2595 insertions, 0 deletions
diff --git a/0.2.5a2/INSTALL.txt b/0.2.5a2/INSTALL.txt
new file mode 100644
index 0000000..77c4628
--- /dev/null
+++ b/0.2.5a2/INSTALL.txt
@@ -0,0 +1,103 @@
+#############################################################################
+## yChat.de Version 0.2.5 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+yChat findest Du im Internet unter der Adresse www.yChat.de. Bei Kritik,
+Anregungen oder Fragen bitte in das dort vorhandene Board posten oder eine
+E-Mail an die oben stehende Adresse senden. Ich bemühe mich, yChat so gut wie
+möglich zu machen und bin über Ratschläge immer sehr erfreut :-) ...
+
+Die Installation kann auf Unix-Systemen voll automatisch duchgeführt werden.
+Allerdings ist dafür ein Telnet-Zugang notwendig. Kopiere alle vorhandenen
+Dateien in das Verzeichnis cgi-bin/yChat und führe dann das Shellskript
+setup.sh mit dem Befehl ./setup.sh aus. Alle Verzeichnisse werden
+automatisch erstellt. Dies wurde allerdings nur auf SuSE Linux Systemen
+mit root-Zugriff getestet. Solltest Du ein anderes System verwenden oder
+den Chat auf einen virtuellen Webserver installieren wollen, dann mußt Du
+unter umständen das Verzeichnis "../../htdocs/yChat" nach "../../yChat"
+in der setup.sh umbenennen. Ansonsten werden die dazugehörigen Grafikdateien
+falsch oder garnicht kopiert.
+
+Wenn Du keinen Telnet-Zugang hast, kannst Du hier die Verzeichnisse manuell
+erstellen:
+
+Folgende Basis-Dateien sind im Chat enthalten und müssen in das cgi-bin
+Verzeichnis kopiert werden. Z.B. nach ./cgi-bin/yChat/:
+
+config.pm => Configurationsdatei ("Shared subs")
+htdocs.pl => HTML-Dokumentdateien (Nicht unbedingt erforderlich)
+index.pl => Startskript (Registrierung, Frameset, Login, Daten edit.)
+main.pl => Hauptskript (Alle Hauptfunktionen des Chats)
+main2.pl => Skript für editieren der Benutzerdaten etc.
+online.pl => Anzeige und Überprüfung der eingelogten Benutzer
+push.pl => Server-Push-Routine
+setup.sh => Dient zur automatischen Einrichtung des Chats.
+LIESMICH.txt => Beinhaltet wichtige Informationen
+UPDATES.txt => Updateliste der verschiedenen Versionen
+INSTALL.txt => Dieses Dokument
+help.sno => Datei beinhaltet alle Chatbefehle
+
+Folgende Verzeichnisse müssen erstellt werden (chmod 777 sollte
+funktionieren):
+
+- Hier befinden sich alle für den Chat notwenidgen Daten:
+ ./cgi-bin/yChat/data/*
+
+- Hier befinden sich alle Logdateien, die vom Chat erstellt werden:
+ ./cgi-bin/yChat/data/logs/*
+
+- Hier befinden sich die Message-Dateien der eingelogten Benutzer:
+ ./cgi-bin/yChat/data/msgs/*
+
+- Hier befinden sich alle Daten der registrierten Benutzer:
+ ./cgi-bin/yChat/data/user/*
+
+- Hier wird abgespeichert, wie oft ein Benutzerprofil insgesant schon
+ aufgerufen wurde:
+ ./cgi-bin/yChat/data/user/counts/*
+
+- Hier befinden sich alle Chat-Optionen und Passwörter der registrierten
+ Benutzer:
+ ./cgi-bin/yChat/data/user/options/*
+
+- Hier befinden sich alle Benutzerprofile der Benutzer:
+ ./cgi-bin/yChat/data/user/profiles/*
+
+- Hier befinden sich alle Gästebucheinträge der Benutzer:
+ ./cgi-bin/yChat/data/user/gbooks/*
+
+- Hier wird Protokolliert, wann sich die Benutzer zum letzten mal eingelogt haben:
+ ./cgi-bin/yChat/data/user/lastlogin/*
+
+- Hier befinden sich alle Daten zu den aktuellen Chaträumen und User die online sind
+ ./cgi-bin/yChat/data/online/*
+
+- Hier befinden sich alle offnenen Räume
+ ./cgi-bin/yChat/data/online/rooms/*
+
+- Hier befinden sich die Chatter, die sich in den jew. Räumen befinden. Die
+ Verzeichnisse der Räume werden automatisch erstellt.
+ ./cgi-bin/yChat/data/online/rooms/RAUMNAME/*
+
+- Hier befinden sich alle Chatter, die sich z.Z. im System befinden
+ ./cgi-bin/yChat/data/online/users/*
+
+- Hier befinden sich alle IP-Nummern der eingelogten Chatter
+ ./cgi-bin/yChat/data/online/ident/*
+
+Folgende GRafikdateien sollten in ein nicht-CGI-BIN-Verzeichnis kopiert werden. Z.B.
+nach ./yChat/
+
+ bar.gif => Der gelb gestreifte Rand auf den meisten Seiten
+ unten.gif => Der Hintergrund für das Eingabeformular im Chat
+ yChat.gif => Das yChat-Logo auf der Startseite
+ yBanner.gif => 400x40 yChat-Banner
+ yBanner2.gif => 88x31 yChat-Banner
+
+Zum schluß sollte die config.pm-Datei nach wünschen editiert werden. Allerdings sollten
+die Copyright Hinweise und die Versionsnummern nicht manipuliert werden.
+
+Folgende Dateien werden von yChat automatisch erstellt:
+
+Viel Spaß beim Chatten ...
+ Snooper \ No newline at end of file
diff --git a/0.2.5a2/LIESMICH.txt b/0.2.5a2/LIESMICH.txt
new file mode 100644
index 0000000..1bfe3d9
--- /dev/null
+++ b/0.2.5a2/LIESMICH.txt
@@ -0,0 +1,45 @@
+#############################################################################
+## yChat.de Version 0.2.5 by CXG.de: The chatters of the next generation ##
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Allgemeine Bedingungen bezgl. yChat:
+
+ - Das yChat-System darf ohne Erleubnis des Autors nicht auf irgendeiner Art
+ und Weise weitergegeben- oder eingesetzt werden.
+
+ - Wird das yChat-System eingesetzt, so darf es manipuliert werden, soweit
+ die Copyright-Hinweise des Autors, die Versionsbezeichnung und der Link
+ auf der Startseite nach servers.yChat.de unverändert bleibt.
+ Ansonsten darf der gesamte Code manipuliert werden.
+
+ - Wird das yChat-System erlaubter Weise manipuliert, so muß das veränderte
+ Skript auf Anforderung an den Autor weitergegeben werden. Dieser darf
+ die Veränderungen in das Standard-yChat-System integrieren.
+
+ - Wird das yChat-System eingesetzt, su muß dem Autor die Location bzw. die
+ URL bekanntgegeben werden. Diese wird in servers.yChat.de eingetragen.
+ und mit einer URL wwX.yChat.de verlinkt. Wobei X für die Nummer des jew.
+ Servers steht.
+
+ - Es ist verboten, Sourcecode aus dem yChat-System zu kopieren und
+ für andere, nicht von yChat abhängige Perl-Programme einzusetzen.
+
+Im Flogenden einige yChat-bezügl. Verknüpfungen:
+
+ www.servers.yChat.de => Liste aller laufenden yChat-Systeme
+ www.install.yChat.de => Installationsdokumentation
+ www.liesmich.yChat.de => Allgemeine Bedingungen usw.
+ www.todo.yChat.de => Funktionen, die später integriert werden
+ www.updates.yChat.de => Update-Liste
+ www.yChat.de => Das Skript zum testen
+
+Vielen Dank an:
+
+ - Andreas Buchwald für die Programmierung des "Nach-UntenScroll-JavaScripts"
+ (www.anklepper.de).
+
+ - Michi aka Snoopy für die Erstellung und Anregung der Farbtabelle
+ (www.berlin-singeltreff.de).
+
+ - Peacemaker für die Erstellung des yChat-Logos
+ (www.peaceplace.de).
diff --git a/0.2.5a2/TODO.txt b/0.2.5a2/TODO.txt
new file mode 100644
index 0000000..80440ce
--- /dev/null
+++ b/0.2.5a2/TODO.txt
@@ -0,0 +1,27 @@
+Folgende Funktionen werden demnächst in yChat integriert:
+
+ - Die Schlucht (Ein Raum wo Chatter hineingeworfen werden,
+ die sich nicht benehmen und noch nicht aus dem Chat
+ katapultiert werden sollen).
+
+ - Löschung aller Chatter, die sich seit 60 Tagen nicht mehr
+ eingelogt haben.
+
+ - IP-Adressen ver-/entbannen.
+
+ - E-Mail zusendung bei verlorenem Passwort.
+
+ - Totale Onlinezeit der einzelnen Chatter soll protokolliert
+ werden. Daraus wird dann eine Top20 der Chatter erstellt.
+
+ - Unter "Benutzer" sollen Chatter über eine Eingabemaske nach
+ dem Anfangsbuchstaben gesucht werden können (vergl. Kilahu).
+
+ - Java-Applet-Eingabezeile für einen flüssigeren Chat
+
+ - Der Cybarkeeper (künstlich intilligenter Chatroboter, der
+ sich im Hauptraum Cyberbar aufhält, virtuelle Drinks verteilt
+ und von Real-Chattern übernommen werden kann. (Zukunftsmusik)
+
+Für weitere Vorschläge bitte in das yChat-Board unter www.yChat.de
+texten oder eine E-Mail an paul@buetow.oxg.de :-) \ No newline at end of file
diff --git a/0.2.5a2/UPDATES.txt b/0.2.5a2/UPDATES.txt
new file mode 100644
index 0000000..f746a96
--- /dev/null
+++ b/0.2.5a2/UPDATES.txt
@@ -0,0 +1,75 @@
+########################### yChat.de UPDATE LIST ###########################
+## Copyright by Paul C. Bütow aka Snooper 2000 (paul@buetow.oxg.de) ##
+#############################################################################
+Hier sind alle Erneuerungen der Versionen dokumentiert:
+
+Update von 0.2.4 auf 0.2.5 vom 15.12.2k
+ - Derjenige, der einen Raum zuerst betritt, hat Raumbesetzerrechte.
+ - Raumbesetzer, Wächter und Oberwächte können weitere Raumbesetzer
+ bestimmen. Diese können Raumbeseter auch wieder degradieren.
+ - Raumbesetzer, Wächter und Oberwächter können dem aktuellen Raum
+ auf/absperren und Themen geben. Wächter und Oberwächter können
+ abgesperrte Räume betreten.
+ - Das Verzeichnis ".data/htdocs" wurde entfernt. Die Datei help_html
+ heist nun help.sno und befindet sich im yChat-Hauptverzeichnis.
+ - Das Verzeichnis ".data/user/lastlogin" wurde hinzugefügt. Hier
+ wird beim erfolgreichen Einloggen ein "Timestamp" gesetzt. Später
+ sollen Oberwächter "veraltete" Benutzer entfernen können.
+ - Neuer Oberwächterbefehl: "/kill Alias" entfernt Alias ganz und gar
+ vom System. Oberwächter und Wächter können nicht entfernt werden.
+ - Perl-Cache wurde im gesamten System komplett deaktiviert ( Weniger
+ Ladezeiten der HTML-Dokumente ).
+ - Nur Nachrichten aus dem Raum "Cyberbar" werden gelogt.
+ Selbsterstellte Räume werden nichtmehr gelogt. Viele Logfunktionen
+ wurden entfernt (weniger Serverbalast).
+ - Beseitigung einiger kleinen Bugs.
+ - Unter "Optionen" im Chat wir die Farbe nun mit einem Drop-Down-Menü
+ ausgewählt ( Vielen dank an Michi aka Snoopy ).
+ - Auf der Startseite wird nun angezeigt wieviele Benutzer eingelogt
+ sind. Ist keiner eingelogt, dann wird das System "aufgeräumt". D.h.
+ Dateien die nicht mehr gebraucht werden und noch nicht gelöscht
+ wurden werden entfernt ( z.B. Nachrichtendateien der einzelnen
+ Chatter und die Dateien die die IP-Nummern der eingelogten Benutzer
+ beinhalteten usw.).
+ - Hunzufügung einer TODO-Liste. Hier sind mehrere Funktionen
+ vermerkt, die in späteren yChat-Versionen eingebaut werden sollen.
+ (www.todo.yChat.de oder TODO.txt).
+
+Update von 0.2.3 auf 0.2.4 - 30.11.2k
+ - Optimierung bzw. Verbesserung der Push-Routine push.pl.
+ - Server-Ping wurde von 2-Pings-per-Minute auf 4 erhöht.
+ - yChat-Banner wurde erstellt und ist unter
+ documents.yChat.de/yBanner.jpg vorzufinden.
+ - Unter der URL servers.yChat.de wurde eine Serverliste angelegt,
+ welche anzeigt wo yChat-Systeme laufen.
+ - Des weiteren wurden die URLs updates.yChat.de, install.yChat.de
+ und liesmich.yChat.de eingerichtet.
+ - Die Menüpunkte wurden zusammengefaßt, damit sie unter einer
+ Auflösung von 800x600 nur eine Zeile belegen.
+ - Einige Bugs wurden entfernt.
+
+Update von 0.2.2 auf 0.2.3 - 25.11.2k
+ - Smooth scrolling JavaScript ( Vielen Dank an Andreas Buchwald ).
+ - "IP#-Fehler" wurde so gut wie beseitigt.
+ - Aufrufe der einzelnen Benutzerprofile wird gezählt und angezeigt.
+ Diese werden in data/user/counts/* gespeichert.
+ - Automatische Einrichtung des Chats mit setup.sh und Telnet.
+ - Menüpunkt "Dein Profil" wurde entfernt da eigenes Profil auch
+ stets über die Onlineliste aufgerufen werden kann.
+
+Update von 0.2.1 auf 0.2.2 - 23.11.2k
+ - Einige Bugs wurden entfernt.
+ - Geschwindigkeit des Chats wurde optimiert.
+ - Eine Liste aller eingelogten Benutzer erscheint am Rand. Hierfür
+ wurde die Datei online.pl eingeführt. Sie aktuallisiert sich alle
+ 20 Sekunden.
+ - Die UPDATES.txt wurde eingeführt.
+
+Update von 0.2.0 auf 0.2.1
+ - Einige Bugs wurden entfernt.
+ - Die IP# der eingelogten Benutzer werden nun anders verwaltet.
+
+Update von Alpha XVIII auf 0.2.0
+ - Die Handhabung der eingelogten Benutzer im System wurde komplett neu
+ überarbeitet.
+ - Neue Versionsnumern wurden eingeführt. \ No newline at end of file
diff --git a/0.2.5a2/bar.gif b/0.2.5a2/bar.gif
new file mode 100644
index 0000000..61d02b7
--- /dev/null
+++ b/0.2.5a2/bar.gif
Binary files differ
diff --git a/0.2.5a2/config.pm b/0.2.5a2/config.pm
new file mode 100644
index 0000000..029394a
--- /dev/null
+++ b/0.2.5a2/config.pm
@@ -0,0 +1,320 @@
+# yChat - Copyright by Paul C. Bütow
+
+########################### Dieser Teil bestimmt die Standart-Variabeln.
+##STANDART-CONFIGURATION:## (CSS, Farben, Version etc.)
+###########################
+$alias = $q->param("alias");
+$var = $q->param("var");
+$room = $q->param("room");
+$col = $q->param("col");
+$secol = $q->param("secol");
+$msg = $q->param("msg");
+$tmp = $q->param("tmp");
+$id = $q->param("id");
+$room = "Cyberbar" if ($room eq "");
+$col = "ffffef" if ($col eq "");
+$secol = "ffffef" if ($secol eq "");
+$datum = "16.12.2k";
+$version = "0.2.5a2";
+$title = "yChat.de ($version)";
+$gfxpath = "../../yChat/";
+$style = <<ENDCSS;
+<style rel="stylesheet" type="text/css">
+ body { background-image: url("$gfxpath/bar.gif"); background-color: 000000 }
+ body.menu { background-image: none }
+ body.log { background-color: 000000 }
+ body.online { background-color: 444444; background-image: none }
+ div { font-family: arial, verdana, helvetiva; font-size: 10pt; color: ffffff }
+ div.b { font-weight: bold; color: ffa500 }
+ a { color: ffffef }
+ a:hover { color: ffffff; text-decoration: none }
+</style>
+ENDCSS
+
+############### Dieser Teil enthält Programmcode, der an verschiedenen
+##SHARED-SUBS## Stellen ausgeführt werden muß und jedem Skript zur
+############### Verfügung steht.
+
+sub printfile { # Liest eine externe Datei ein und gibt sie mit print aus
+ my ($file2print,$pagetitle,$bodyclass) = @_;
+ if ($pagetitle ne "") {
+ &start_html($pagetitle,$bodyclass);
+ }
+ print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a></div><hr>" if ($bodyclass eq "log");
+ &read_file($file2print);
+ @file2print = <DATEI>;
+ close DATEI;
+ print @file2print;
+}
+
+
+sub start_html { # Der HEADER einer HTML-Datei
+print "<html><head>";
+print "<meta http-equiv=\"refresh\" content=\"20\" URL=\"online.pl?room=$room\">" if ($_[1] eq "online");
+print <<END;
+ <title>
+ $title - $_[0]
+ </title>
+ $style
+ </head>
+END
+ if ($_[1] ne "") {
+ print "<body class=$_[1]>";
+ } else {
+ print "<body>";
+ }
+}
+
+sub post { # Öffentliche Nachricht im aktuellen Raum $room posten.
+ my ($msg2post,$secroom) = @_;
+ my @rooms = ($room,$secroom);
+ foreach(@rooms) {
+ my $room2post = $_;
+ &list_dir("data/online/rooms/$room2post");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/rooms/$room2post/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ }
+ &log("$msg2post") if ($room eq "Cyberbar");
+}
+
+
+sub post_all { # Öffentliche Nachricht in ALLEN Räumen gleichzeitig posten.
+ my $msg2post = $_[0];
+ &list_dir("data/online/users");
+ foreach(@dir) {
+ my $alias2post = $_;
+ if (-f "data/online/users/$alias2post") {
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+ }
+ }
+ &log("$msg2post");
+}
+
+sub post_prv { # Private Nachricht posten (flüstern).
+ my $alias2post = $_[0];
+ my $msg2post = $_[1];
+ &write_file("data/msgs/$alias2post");
+ print DATEI "$msg2post<br>\n";
+ close DATEI;
+}
+
+sub log { # Protokollieren der Nachrichten etc.
+ my ($msg2log) = @_;
+ &zeit;
+ &write_file("data/logs/$day.$month.$year");
+ print DATEI "<br><font color=ffffef><i>($hours:$min:$sec)</i></font> $msg2log\n";
+ close DATEI;
+}
+
+
+sub zeit { # Aktuelles Datum und Uhrzeit bestimmen.
+ ($sec, $min, $hours, $day, $month, $year) = (localtime)[0..5];
+ $month += 1;
+ $hours = "0".$hours if ($hours < 10);
+ $min = "0".$min if ($min < 10);
+ $sec = "0".$sec if ($sec < 10);
+ $day = "0".$day if ($day < 10);
+ $month = "0".$month if ($month < 10);
+ $year = $year - 100;
+ if ($year < 10) {
+ $year = "200".$year;
+ } else {
+ $year = "20".$year;
+ }
+}
+
+sub count { # Zeilen in einer Datei Zählen.
+ my $file2count = $_[0];
+ &read_file($file2count);
+ my @datei = <DATEI>;
+ close DATEI;
+ $number = $#datei+1;
+}
+
+sub read_file { # Datei öffnen.
+ my $file2read = $_[0];
+ if (-e "$file2read") {
+ open (DATEI,"<$file2read") || &error("Konnte $file2read nicht öffnen");
+ }
+}
+
+sub write_file { # Text an eine Datei anhängen.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">>$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub write_file_new { # Datei neu schreiben.
+ my $file2write = $_[0];
+ if (-e "$file2write") {
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ } else {
+ &create_file("$file2write");
+ open (DATEI,">$file2write") || &error("Konnte $file2write nicht öffnen");
+ }
+}
+
+sub create_file { # Datei erstellen.
+ my $file2create = $_[0];
+ open (CREATE, ">$file2create") || &error("Konnte $file2create nicht erstellen!");
+ print CREATE "";
+ close CREATE;
+}
+
+sub error { # Error-Ausgabe.
+ my $error_msg = $_[0];
+ &start_html( "Error: ($error_msg)" );
+ print $q->div( "Error: ($error_msg)" ),
+ $q->end_html;
+ exit;
+}
+
+sub remove_online { # Chatter entfernen
+ my ($alias,$room,$method) = @_;
+ unlink("data/online/users/$alias");
+ unlink("data/online/rooms/$room/$alias") if ($room ne undef);
+ unlink("data/online/ident/$alias");
+ &rm_rooms;
+ &zeit;
+ if ($method eq undef) {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500>$alias verläßt den Chat ...</font></i>");
+ } elsif ($method ne "kick") {
+ &post("<i><font color=ffffff>($hours:$min:$sec)</font> <font color=ffa500> $_ hat den Chat verlassen ... </font></i>");
+ }
+ &rm_rstat($room,$alias) if ($room ne undef);
+}
+
+sub rm_alias { # Chatter aus dem System entfernen, dessen Timestamps älter als 60 Sekunden sind
+ my ($dir2rm,$rstatroom) = @_;
+ &list_dir($dir2rm,2);
+ foreach(@dir2) {
+ if (-f "$dir2rm/$_" && $_ ne undef) {
+ &read_file("$dir2rm/$_");
+ my $timestamp = <DATEI>;
+ close DATEI;
+ if ($timestamp < (time - 60)) {
+ if ($dir2rm eq "data/online/users") {
+ &remove_online($_,undef,1);
+ } else {
+ unlink("$dir2rm/$_");
+ &rm_rstat($rstatroom,$_) if ($rstatroom ne undef);
+ }
+ }
+ }
+ }
+}
+
+sub rm_rooms { # Leere Räume aus dem System entfernen
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &rm_alias("data/online/rooms/$_",$_);
+ &list_dir("data/online/rooms/$_",2);
+ if ($#dir2 = 1) {
+ rmdir("data/online/rooms/$_");
+ }
+ }
+ }
+}
+
+sub rm_rstat { # Benutzer als Raumbesetzer austragen
+ my ($rstatroom,$r_alias) = @_;
+ &read_file("data/online/rstat/$rstatroom");
+ my @rstat = <DATEI>;
+ close DATEI;
+ my $newfile = $rstat[0].$rstat[1];
+ for ($i=2;$i<=$#rstat;$i++) {
+ $newfile = $newfile."\n".$rstat[$i] if ($rstat[$i] ne $r_alias."\n");
+ }
+ write_file_new("data/online/rstat/$rstatroom");
+ print DATEI $newfile;
+ close DATEI;
+}
+
+sub secure_removeip { # Beim ausloggen die IP-Nummer aus dat/ip austragen.
+ my $alias2rm = $_[0];
+ unlink("data/online/ident/$alias2rm");
+}
+
+sub secure_checkip { # data/ip auf die eigene IP-Nummer überprüfen.
+ my ($alias2check,$method) = @_;
+ my $ip;
+ for($i=0 ;$i<=5;) {
+ &read_file("data/online/ident/$alias2check");
+ $ip = <DATEI>;
+ close DATEI;
+ if ($ip ne $ENV{'REMOTE_ADDR'}) {
+ $i++;
+ } else {
+ goto ENDCHECKIP
+ }
+ if ($i<=5) {
+ if ($method eq undef) {
+ &error("Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein.");
+ } else {
+ &post_prv("$alias2check","<font color=red>Du bist nicht befugt, mit der IP# $ENV{'REMOTE_ADDR'} und dem Alias \"$alias\" zu handeln. Sollte diese Meldung aufgrund eines Fehlers aufgetaucht sein, dann log Dich doch bitte neu in den Chat ein.</font>");
+ &input_html("true") if ($method = 2);
+ }
+ exit;
+ }
+ }
+ENDCHECKIP:
+}
+
+sub remove_rooms { # Leere Räume entfernen.
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-d "data/online/rooms/$_") {
+ &list_dir("data/online/rooms/$_");
+ rmdir("data/online/rooms/$_") if ($#dir = 1);
+ }
+ }
+}
+
+sub list_dir { # Beliebigen Verzeichnisbaum einlesen.
+ my ($dir,$method) = @_;
+ opendir(DIR, $dir);
+ if ($method eq undef) {
+ @dir = readdir(DIR);
+ } elsif ($method = 2) {
+ @dir2 = readdir(DIR);
+ }
+ closedir(DIR);
+}
+
+sub hirachie { # Chatter nach Sonderrechte überprüfen.
+ my $alias2prove = $_[0];
+ $hirachie = undef;
+ &read_file("data/wa");
+ @was = <DATEI>;
+ close DATEI;
+ foreach(@was) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "wa";
+ }
+ }
+ &read_file("data/ow");
+ @ows = <DATEI>;
+ close DATEI;
+ if ($hirachie ne "wa" || $_ eq "$alias2prove\n") {
+ foreach(@ows) {
+ if ($_ eq $alias2prove || $_ eq "$alias2prove\n") {
+ $hirachie = "ow";
+ }
+ }
+ }
+}
+
+$| = 1; # Cache von Perl ausschalten \ No newline at end of file
diff --git a/0.2.5a2/help.sno b/0.2.5a2/help.sno
new file mode 100644
index 0000000..8fe0455
--- /dev/null
+++ b/0.2.5a2/help.sno
@@ -0,0 +1,54 @@
+<div>
+ Alle Chat-Befehle:
+</div>
+<hr>
+<table width=100% bgcolor=555555>
+<tr><th bgcolor=666666><div>SU</div></th><th bgcolor=666666><div>Befehl</div></th><th bgcolor=666666><div>Beschreibung</div></th></tr>
+<tr><td><div>NC</div></td><td><div>/about</div></td><td><div>Zeigt aktuelle Version und andere Infos der Community an</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/away <font color=red>Nachricht</font></div></td><td><div>Abmelden mit einer<font color=red>Abmeldenachricht</font></div></td></tr>
+<tr><td><div>NC</div></td><td><div>/clear</div></td><td><div>Bildschirm wird gelöscht</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/col <font color=red>XXXXXX</font> <font color=ffa500>XXXXXX</font></div></td><td><div>Farbe/n (<font color=red>Namensfarbe</font> / <font color=ffa500>Textfarbe</font>) wechseln. Angabe in Hexadezimal.</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/date</div></td><td><div>Zeigt aktuelles Datum und Urzeit an</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/j <font color=red>Raumname</font></div></td><td><div>Raum wechseln/erstellen</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/ju <font color=red>Alias</font></div></td><td><div>In den Raum wechseln/folgen, wo sich <font color=red>Alias</font> befindet.</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/m <font color=red>Aktion</font></div></td><td><div>Handeln mit 2 Farben</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/me <font color=red>Aktion</font></div></td><td><div>Handeln mit einer Farbe</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/msg <font color=red>Alias</font> <font color=ffa500>Nachricht</font></div></td><td><div><font color=red>Alias</font> eine private <font color=ffa500>Nachricht</font> flüstern.</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/ <font color=ffa500>Nachricht</font></div></td><td><div>Eine private <font color=ffa500>Nachricht</font> demjenigen flüstern, dem zuletzt eine geflüstert wurde</div></td></tr>
+<tr><td><div>NC</div></td><td><div>//</div></td><td><div>Wurde zuletzt eine öffentliche Nachricht gepostet, dann wird diese nocheinmal gepostet (Funktioniert nicht bei und nach Befehlen, flüstern oder schreien)</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/q</div></td><td><div>Cumunnity verlassen</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/s <font color=red>Nachricht</font></div></td><td><div><font color=red>Nachricht</font> schreien</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/w</div></td><td><div>Zeigt an, wer sich im aktuellen Raum befindet</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/wc <font color=red>Raum</font></div></td><td><div>Zeigt an, wer sich im <font color=red>Raum</font> befindet. Wird kein Raum angegeben, dann wird jedeglich angezeigt, wer sich im System befindet</div></td></tr>
+<tr><td><div>NC</div></td><td><div>/wc/</div></td><td><div>Zeigt alle offenen Räume und deren Chatter an</div></td></tr>
+<tr><td><div>NC</div></td><td> <div>/wj <font color=red>Alias</font></div></td><td><div>Zeigt an, in welchen Raum sich <font color=red>Alias</font> befindet</div></td></tr>
+<tr><td><div><font color=778899>RB</font></div></td><td><div>/l</div></td><td><div>Der aktuelle Raum wird ab- bzw. aufgesperrt</div></td></tr>
+<tr><td><div><font color=778899>RB</font></div></td><td><div>/rsu <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> die Raumbesetzerrechte entnehmen</div></td></tr>
+<tr><td><div><font color=778899>RB</font></div></td><td><div>/su <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> zum Raumbesetzer ernennen</div></td></tr>
+<tr><td><div><font color=778899>RB</font></div></td><td><div>/t <font color=red>Thema</font></div></td><td><div>Dem aktuellen Raum wird ein <font color=red>Thema</font> gegeben</div></td></tr>
+<tr><td><div><font color=ffa500>WÄ</font></div></td><td><div>/k <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> wird aus dem Chat katapultiert!</div></td></tr>
+<tr><td><div><font color=green>OW</font></div></td><td><div>/ban</div></td><td><div>Zeigt alle verbannten Benutzer an</div></td></tr>
+<tr><td><div><font color=green>OW</font></div></td><td><div>/ban <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> verbannen</div></td></tr>
+<tr><td><div><font color=green>OW</font></div></td><td><div>/rban <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> "entbannen"</div></td></tr>
+<tr><td><div><font color=green>OW</font></div></td><td><div>/ip <font color=red>Alias</font></div></td><td><div>Zeigt die IP-Nummer von <font color=red>Alias</font> an</div></td></tr>
+<tr><td><div><font color=green>OW</font></div></td><td><div>/kill <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> wird ganz und gar aus dem System entfernt</div></td></tr>
+<tr><td><div><font color=green>OW</font></div></td><td><div>/wa <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> zum Wächter ernennen</div></td></tr>
+<tr><td><div><font color=green>OW</font></div></td><td><div>/rwa <font color=red>Alias</font></div></td><td><div><font color=red>Alias</font> vom Wächter zum normalen Chatter degradieren</div></td></tr>
+<tr><td><div><font color=green>OW</font></div></td><td><div>/sys <font color=red>Nachricht</font></div></td>
+<td><div>Systemnachricht schreiben. (Erscheint in allen existierenden Räumen)</div></td></tr>
+</table><hr>
+<div>
+ Zur Erklärung: NC steht für "Normale Chatter", RB für "Raumbesetzer", WÄ für "Wächter" und OW für "Oberwächter".
+ Obrige Befehle können nur von der/den jeweiligen Benutzergruppe/n werden.<br><br>
+ Allerdings gibt es folgendes zu beachten: Oberwächter verfügen über alle Chatbefehle. Normale Wächter über alle Chatbefehle, außer über die der Oberwächter.
+ Raumbesetzer können nur Raumbesetzerbefehle und die Befehle der normalen Chatter durchführen. Normale Chatter haben jedeglich die Standardbefehle zu verwenden.<br><br>
+ Weitere Besonderheiten der Wächter und Oberwächter:<br><br>
+ Wächter und Oberwächter können ....<br>
+ ... abgesperrte Chaträume problemlos betreten.<br>
+ ... nicht gekickt, verbannt oder gekillt werden.<br>
+ ... Logdateien der Cyberbar lesen.<br><br>
+
+ Des weiteren: Oberwächter ernennt nur der Systemadministrator!
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/0.2.5a2/htdocs.pl b/0.2.5a2/htdocs.pl
new file mode 100644
index 0000000..c1008a7
--- /dev/null
+++ b/0.2.5a2/htdocs.pl
@@ -0,0 +1,206 @@
+#!/usr/bin/perl -w
+
+# yChat - Copyright by Paul C. Bütow
+
+use CGI; # CGI-Modul laden
+$q = new CGI;
+
+require config; # config.pm in Dokument laden
+
+print
+ $q->header(); # HTTP-Header erzeugen
+
+
+#####################################
+##WELCHE SUB MUß AUSGEFÜHRT WERDEN?##
+#####################################
+if ($var eq "help_html") {
+ &printfile("help.sno","Alle Chatbefehle");
+} elsif ($var eq "menu_html") {
+ &menu_html;
+} elsif ($var eq "werda_html") {
+ &werda_html;
+} elsif ($var eq "logs_html") {
+ &logs_html;
+} elsif ($var eq "view_sulogs_html") {
+ &hirachie($alias);
+ if ($hirachie eq "ow") {
+ &start_html("Oberwächter-Logdateien");
+ print "<div><a href=\"push.pl?alias=$alias&tmp=$tmp&var=push_logs_html\">Push</a><hr>";
+ &printfile($tmp);
+ print "</div></body></html>";
+ }
+} elsif ($var eq "view_logs_html") {
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ &printfile($tmp,$tmp,"log");
+ }
+} elsif ($var eq "superuser_html") {
+ &superuser_html;
+} elsif ($var eq "bar_html") {
+ print
+ $q->start_html(-bgcolor=>"ffa500"),
+ $q->end_html;
+} else {
+ print
+ $q->start_html(-bgcolor=>"000000"),
+ $q->end_html;
+}
+
+sub menu_html {
+ if ($tmp eq "quit") {
+ print
+ $q->script( { -language=>"JavaScript" }, "window.open(\"index.pl?tmp=quit\",\"_top\")" );
+ sleep 1;
+ &remove_online($alias);
+ &secure_removeip($alias);
+ unlink("data/msgs/$alias");
+ }
+ &start_html("Menü","menu");
+print <<END;
+ <center>
+ <div>
+ [<a href="htdocs.pl?var=werda_html&alias=$alias&room=$room&col=$col&secol=$secol&&tmp=$tmp" target="werda">Wer ist da?</a>]
+ [<a href="main2.pl?var=edit_profile_html&alias=$alias" target="ProfilAendern">Profil ändern</a>]
+ [<a href="main2.pl?var=edit_options_html&alias=$alias" target="main">Optionen</a>]
+ [<a href="main2.pl?var=list_alias_html&alias=$alias" target="Benutzerliste">Benutzer</a>]
+ [<a href="htdocs.pl?var=help_html" target="Befehle">Befehle</a>]
+ [<a href="main2.pl?var=gb_html&alias=$alias" target="Board">Board</a>]
+ [<a href="htdocs.pl?var=superuser_html&alias=$alias" target="Hirachie">Superuser</a>]
+ [<a href="htdocs.pl?var=logs_html&alias=$alias" target="Logdateien">Logs</a>]
+ [<a href="push.pl?alias=$alias&room=$room&var=clear_screen" target="main">Weiterchatten</a>]
+ [<a href="htdocs.pl?var=menu_html&tmp=quit&alias=$alias">Verlassen</a>]
+ </div>
+ </center>
+</body>
+</html>
+END
+}
+
+
+sub werda_html { # Anzeige, wer eingelogt ist.
+ &start_html("Wer ist da?");
+ print <<END;
+<div>
+ $alias, schön daß Du hier bist :-)
+</div>
+<hr>
+<div>
+ Folgende Personen befinden sich im Chat:
+</div>
+<br>
+<div>
+END
+ &list_dir("data/online/rooms");
+ foreach(@dir) {
+ if (-e "data/online/rooms/$_" && $_ ne ".." && $_ ne ".") {
+ my $room = $_;
+ &read_file("data/online/rstat/$room");
+ my @rstat = <DATEI>;
+ close DATEI;
+ my $door = "[<font color=red>Abgesperrt!</font>]" if ($rstat[0] eq "1\n");
+ &list_dir("data/online/rooms/$room",2);
+ local $nr = $#dir2-1;
+ print $q->b( $_ ),
+ " $door ($nr) Raumthema: $rstat[1]",
+ $q->br;
+ foreach(@dir2) {
+ if ($_ ne ".." && $_ ne ".") {
+ print
+ $q->a( { -href=>"main2.pl?var=alias_html&alias=$alias&tmp=$_" }, "$_"), " ";
+ }
+ }
+ print $q->br, $q->br;
+ }
+ }
+ print
+ "</div>",
+ $q->end_html;
+}
+
+sub logs_html {
+ &secure_checkip($alias);
+ &start_html("Logdateien");
+ print <<END;
+<div>
+ Hier befinden sich alle Logdateien
+</div>
+<hr>
+END
+ &hirachie($alias);
+ if ($hirachie eq "ow" || $hirachie eq "wa") {
+ print $q->div( "Folgende Logdateien des Raumes \"Cyberbar\" können nur von Wächtern und Oberwächtern gelesen werden (Sort