Commit 61367a2d6254b65527c18a9ed518725ccf64c287

Authored by Georg Hopp
1 parent 6c9155db

Initial repository layout

No preview for this file type
No preview for this file type
No preview for this file type
No preview for this file type
  1 +A:link {
  2 + color: #FF0000;
  3 + font-family: Arial, Helvetica, sans-serif;
  4 + text-decoration: none; }
  5 +
  6 +A:visited {
  7 + color: #FF0000;
  8 + font-family: Arial, Helvetica, sans-serif;
  9 + text-decoration: none; }
  10 +
  11 +A:active {
  12 + color: #FF0000;
  13 + font-family: Arial, Helvetica, sans-serif;
  14 + text-decoration: none; }
  15 +
  16 +A:hover {
  17 + color: #FF8888;
  18 + font-family: Arial, Helvetica, sans-serif;
  19 + text-decoration: none; }
  20 +
  21 +H1 {
  22 + font-size: 10pt;
  23 + font-family: Arial, Helvetica, sans-serif;
  24 + color: #000000; }
  25 +
  26 +H2 {
  27 + font-size: 10pt;
  28 + font-family: Arial, Helvetica, sans-serif;
  29 + color: #000000; }
  30 +
  31 +p, table, tr, td, ul {
  32 + font-size: 9pt;
  33 + font-family: Arial, Helvetica, sans-serif;
  34 + color: #000000; }
  35 +
  36 +body {
  37 + font-family: Arial, Helvetica, sans-serif;
  38 + font-size: 9pt;
  39 + color: #000000;
  40 + margin-top: 0pt;
  41 + margin-left: 0pt; }
  42 +
  43 +.header {
  44 + background-image:url(../images/topbg.png);
  45 + background-attachment:fixed;
  46 + padding-top: 0pt;
  47 + padding-left: 0pt; }
  48 +
  49 +.header2 {
  50 + background-image:url(../images/img1.png);
  51 + background-attachment:fixed;
  52 + background-repeat:no-repeat;
  53 + padding-top: 0pt;
  54 + padding-left: 0pt; }
  55 +
  56 +.menubg1 {
  57 + background-image:url(../images/menubg1.png);
  58 + background-repeat:repeat-y;
  59 + background-color: #a0a0ff; }
  60 +
  61 +.menubg2 {
  62 + background-image:url(../images/menubg2.png);
  63 + background-repeat:repeat-y;
  64 + background-color: #a0a0ff; }
  65 +
  66 +.menubg3 {
  67 + background-image:url(../images/menubg3.png);
  68 + background-repeat:repeat-y;
  69 + background-color: #a0a0ff; }
  70 +
  71 +.menubg {
  72 + background-image:url(../images/menubg.png);
  73 + background-repeat:repeat-y;
  74 + background-color: #a0a0ff; }
  75 +
  76 +.maintopbg {
  77 + background-image:url(../images/maintop.png);
  78 + background-repeat:repeat-y;
  79 + background-attachment:fixed;
  80 + background-color: #5c5cff; }
  81 +
  82 +.menuborder {
  83 + background-color: #a2a2ff; }
  84 +
  85 +.menusubject {
  86 + font-size: 10pt;
  87 + font-family: Arial, Helvetica, sans-serif;
  88 + color: #000000;
  89 + font-weight: bold; }
  90 +
  91 +.copyright {
  92 + font-size: 7pt;
  93 + font-family: Arial, Helvetica, sans-serif;
  94 + color: #000000; }
  95 +
  96 +.fixed {
  97 + font-size: 9pt;
  98 + font-family: Courier; }
  99 +
  100 +.tooltip {
  101 + position: absolute;
  102 + width: 400; height: 200px;
  103 + visibility: hidden;
  104 + z-Index: 1;
  105 + font-class: arial, helvetica, sans-serif;
  106 + font-style: italic;
  107 + font-variant: small-caps;
  108 + font-weight: bold;
  109 + font-size: 10pt;
  110 +}
  111 +
  112 +.invis {
  113 + position: relative;
  114 + display: none;
  115 + z-Index: 1;
  116 +}
  117 +
  118 +.vis {
  119 + position: relative;
  120 + display: block;
  121 + z-Index: 1;
  122 +}
  123 +
  124 +.dir {
  125 + font-class: arial, helvetica, sans-serif;
  126 + font-size: 10pt;
  127 + text-decoration: none;
  128 + font-weight: bold;
  129 +}
  130 +
  131 +.file {
  132 + font-class: arial, helvetica, sans-serif;
  133 + font-size: 10pt;
  134 + font-decoration: none;
  135 +}
  1 +Diese Seiten wurden f&uuml;r <A href="http://www.mozilla.org/">mozilla</A>
  2 +bei einer Aufl&ouml;sung von 800x600 optimiert, sollten aber auch mit dem IE
  3 +betrachtbar sein. Leider sind einige Elemente meiner Seite nicht mit NS 4.x
  4 +betrachtbar. Unter Windows wechseln sie bitte zu IE oder NS 6.0 oder besser noch
  5 +zu mozilla. Unter Linux nutzen Sie bitte mozilla. Opera sollte die Seiten auch
  6 +richtig darstellen. Bei Problemen ... mailt mir bitte.
  1 +<TABLE width="595" border="0" cellspacing="0" cellpadding="0">
  2 +<TR>
  3 + <TD>
  4 + Ein Projekt, das ich f&uuml;r einen Ex-Arbeitgeber von mir angefangen
  5 + hatte...seit ich diesen verlassen habe schl&auml;ft es.<BR>
  6 + Es gab da einen Cluster von 33 Alphas (keine Ahnung mehr welchen Typ
  7 + genau) und ich wollte mir einen einfachen und schnellen Weg schaffen
  8 + informationen ueber jedem dieser 33 Rechner zu erhalten.<BR>
  9 + Ein weiterer Grund diese Programm zu schreiben war f&uuml;r mich mehr
  10 + &uuml;ber GTK, Socketprogrammierung und threads zu lernen.<BR>
  11 + Das Programm ist noch nicht fertig aber vielleicht findet es
  12 + irgendjemand n&uuml;tzlich (zumindest um daraus zu lernen).
  13 + Der Sourcecode liegt zu download bereit.<BR>
  14 + <BR><BR>
  15 + Hier ein Screenshot von dem Programm:<BR>
  16 + <BR>
  17 + <TABLE border="0" cellpadding="2" cellspacing="0">
  18 + <TR>
  19 + <TD valign="top">
  20 + <img src="images/screenshot.jpg" alt="clmon" align=left></TD>
  21 + <TD>
  22 + Jeder Button repr&auml;sentiert einen node in dem cluster.
  23 + Der Text auf den Buttons ist der jeweilige Name des nodes
  24 + und der darunterliegende Balken zeigt die aktuelle
  25 + Prozessornutzung. Rot steht f&uuml;r user, Blau f&uuml;r
  26 + system und Gr&uuml;n f&uuml;r idle. Ist der node down oder
  27 + nicht online (oder mein Server l&auml;ft nicht) dann ist der
  28 + Balken Schwarz. Clickt man auf einen Button bekommt man ein
  29 + Popup-Men&uuml; &uuml;ber das man verschiedene Informationen
  30 + zu den einzelnen nodes abfragen kann.</TD>
  31 + </TR>
  32 + </TABLE>
  33 + <BR><BR>
  34 + Dieses Programm ist noch nicht fertig. Ich gebe keine Garantie, das es
  35 + l&auml;ft oder nicht evtl. Dinge besch&auml;digt. Allerdings l&auml;uft
  36 + es bei mir gut und hat noch nichts besch&auml;digt, obwohl noch eine
  37 + Menge Bugs zu fixen sind.<BR><BR>
  38 + Leider habe ich zur Zeit keine Informationen wie das Programm zu
  39 + installieren ist (leider keine Zeit). Wenn es trotzdem jemand
  40 + ausprobiert und auf bugs sto&szlig;en oder Anregungen haben bitte
  41 + schickt mir ne kurze mail. Sollte jemand bugfixes haben, oder interesse
  42 + weiter daran zu arbeiten, bitte. Ich habe leider nicht die Zeit mich
  43 + weiter darum zu k&uuml;mmern (vielleicht in Zukunft nochmal wieder) und
  44 + es w&auml;hre eine Schande die ganze Arbeit die ich da schon
  45 + reingesteckt habe wegzuschmei&szlig;en. ;-)<BR><BR>
  46 + Ich habe angefangen das Ding in C++ neu zu schreiben, bin aber nicht
  47 + fertig geworden damit...allerdings is der serverteil so gut wie +fertig.
  48 + <BR><BR>
  49 + Viel Spa&szlig;....(oder Frustration..Entschuldigung)
  50 + </TD>
  51 +</TR>
  52 +</TABLE>
  1 +<TABLE width="595" border="0" cellspacing="0" cellpadding="0">
  2 +<TR>
  3 + <TD>
  4 + OK, ihr fragt danach, dann bekommt ihrs auch (aber es k&ouml;nnte
  5 + langweilig sein):<BR><BR>
  6 +
  7 + Name: Georg Steffers<BR>
  8 + Geburtstag: 15.12.1973 (Geschenke immer willkommen)<BR>
  9 + Wohnort: M&uuml;nster<BR>
  10 + <BR>
  11 + Ich wurde in einem kleinen Ort in Nord-NRW, Ochtrup geboren. Das
  12 + liegt in der n&auml;he vom M&uuml;nster. Mein Leben verlief
  13 + einigermassen normal, ich bin zur Schule gegangen habe in den Tag
  14 + gespielt, bis ich mich eines Tages entscheiden mu&szlig;te was ich
  15 + mit dem Rest meines Lebens anfangen wollte. Zu diesem Zeitpunkt hatte
  16 + ich bereits einige Erfahrung mit C-programmierung und Spa&szlig; daran
  17 + gefunden. Also bin ich an einen Schule f&uuml;r angewandte Informatik
  18 + gegangen um eine Ausbildung zum staatlich gepr&uuml;ften
  19 + Informatikassistent Softwaretechnologie zu machen. Diese Schule war
  20 + das B.I.B in Bergisch-Gladbach nahe K&ouml;ln.
  21 + W&auml;rend meiner Ausbildung dort hatte ich ne Menge Spass, sowohl was
  22 + die Ausbildung betrifft als auch wegen der n&auml;he zu K&ouml;ln und
  23 + ich habe heute noch einige gute Freunde dort.
  24 + Irgendwann hatte ich dann meinen Abschluss an der Schule und bin
  25 + zur&uuml;ck nach M&uuml;nster gezogen. Im Moment arbeite ich bei
  26 + einer Webagentur in Emsdetten (deltacity.NET). Da programmiere ich
  27 + alles was so anf&auml;llt in C/C++, Perl, PHP, Java, JavaScript, HTML, SQL
  28 + und was noch so anf&auml;llt. OK, das wars...vielleicht packe ich hier
  29 + in Zukunft noch ein paar Fotos drauf ums ein weinig spannender zu
  30 + machen.
  31 + </TD
  32 +</TR>
  33 +</TABLE>
  1 +<TABLE width="595" border="0" cellspacing="0" cellpadding="0">
  2 +<TR>
  3 + <TD>
  4 + So, hier jetzt meine neue Homepage und ich hoffe, da&szlig; sie, nachdem
  5 + es so lange gedauert hat Anklang findet.<BR><BR>
  6 + Diesmal ist das Design komplett auf meinen eigenen Mist gewachsen
  7 + mit einigen Anregungen von meiner Freundin. Der Inhalt besteht
  8 + immer noch haupts&auml;chlich aus Informationen rund ums programmieren
  9 + allerdings diesmal sowohl auf deutsch als auch auf englisch.<BR><BR>
  10 + Diese Seiten bauen sich jetzt aus leicht und schnell zu verwaltenden
  11 + Konfigurations und Includedateien auf. Dadurch hoffe ich schneller
  12 + aktuelle Informationen zur verf&uuml;gung stellen zu k&ouml;nnen.
  13 + So plane ich zum Beispiel eine Newsbereich. Trotzdem sind diese Seite
  14 + eine reine private T&auml;tigkeit von mir und deshalb gibt es keine
  15 + Garantie f&uuml;r regelm&auml;&szlig;ige updates.<BR> Ich stelle alle
  16 + Dateien aus denen sich dieser Auftritt aufbaut
  17 + zum download f&uuml;r jeden der daran Interesse hat zur
  18 + verf&uuml;gung.<BR><BR>
  19 + Wie dem auch sei...ich hoffe das die Informationen die auf diesen
  20 + Seiten gesammelt werden auch so von ausreichendem Interesse f&uuml;r
  21 + viele Leute sind.
  22 + </TD>
  23 +</TR>
  24 +</TABLE>
  1 +Dokumentation
  2 +Zeiger in C/C++#zeiger#zeiger#Eine Einf&uuml;hrung zu Zeigern in C/C++#120#80#100#50
  3 +
  4 +Projekte
  5 +Clustermonitor#gtkclmon#gtkclmon#Ein Programm zur &uuml;berwachung eines Rechner-Clusters#120#125#100#50
  6 +3D-Grafik / Java#show3d#show3d#eine Studie &uuml;ber die Grundlagen der 3D-programmierung#120#145#100#50
  7 +Quellcodes#http://www.muenster.de/~steffers/src/#src#alle meine Quellcodes#120#185#75#30
  8 +test#source#src2#Testseite#120#185#75#30
  9 +
  10 +Pers&ouml;nliches
  11 +News#news#news#aktuelle Neuigkeiten#120#235#70#30
  12 +&Uuml;ber mich#info#info#eine kurze pers&ouml;nliche Info &uuml;ber mich#120#230#100#50
  13 +webcam#javascript:newWin('/smain/webcam.php?LANG=de');#cam#Ich bei der arbeit (meistens)#120#245#75#50
  14 +
  15 +Links
  16 +The Gimp#http://www.gimp.org/#gimp#Die Open-Source Bildbearbeitungs-<br>software#120#295#100#50
  17 +Gnome#http://www.gnome.org/#gnome#Desktopumgebung f&uuml;r das X-Windows System#120#310#100#50
  18 +Mozilla#http://www.mozilla.org/#mozilla#ein toller Browser#120#345#70#30
  19 +Sourceforge#http://www.sourceforge.net/#sourceforge#Open Source Management Website#120#340#75#50
  20 +Freshmeat#http://www.freshmeat.net/#freshmeat#Suche nach freier Software#120#370#80#30
  21 +Seti@Home#http://www.alien.de/seti/#seti#na wo sind sie wohl?#120#385#75#30
  22 +NOePATENTS#http://petition.eurolinux.org/#petition#Bitte keine Softwarepatente in Europa!#120#380#100#50
  23 +deltacity.NET#http://www.deltacity.net/#dcn#Mein Arbeitgeber#120#415#50#30
  1 +<TABLE width="595" border="0" cellspacing="0" cellpadding="0">
  2 +<TR>
  3 + <TD>
  4 + <B>18.03.2001</B></TD>
  5 +</TR>
  6 +<TR>
  7 + <TD>
  8 + Seit ein paar Tagen bin ich dabei eine Seite fuer meine Sourcecodes
  9 + zu schreiben. Daf&uuml;r habe ich einen Fileselector mit hilfe von
  10 + PHP, Javascript und &lt;DIV&gt;-Layern geschrieben. Der is echt nett
  11 + unter mozilla und Internet Explorer zu betrachten. Das einzige ist
  12 + ... ich bekomme das Ding unter Netscape 4.x nich zum laufen ...
  13 + Naja, deshalb wird ab sofort die offizielle Unterstuetzung von NS 4.x
  14 + gestrichen.</TD>
  15 +</TR>
  16 +<TR>
  17 + <TD height="5">
  18 + <IMG src="images/trans.gif" width="1" height="5"></TD>
  19 +</TR>
  20 +<TR>
  21 + <TD>
  22 + Unter dem Link Projekte/test kann man einen ersten Eindruck von dem
  23 + Fileselektor bekommen.</TD>
  24 +</TR>
  25 +<TR>
  26 + <TD height="20">
  27 + <IMG src="images/trans.gif" width="1" height="20"></TD>
  28 +</TR>
  29 +<TR>
  30 + <TD>
  31 + <B>12.03.2001</B></TD>
  32 +</TR>
  33 +<TR>
  34 + <TD>
  35 + Ich habe jetzt tooltips zu jedem Men&uuml;punkt. Das war ne
  36 + Sauarbeit, weil man f&uuml;r jeden verdammten Browser ne eigene
  37 + Version schreiben muss, ist aber ganz nett geworden finde ich.
  38 + Leider sieht der ganze Auftritt mit NS 4.x immer noch etwas
  39 + naja komisch aus, ich wei&szlig; aber leider nicht warum.
  40 + Wer da ne Idee hat m&ouml;chte sich doch bitte bei mir melden, damit
  41 + ich das endlich hinbekomme, danke.</TD>
  42 +</TR>
  43 +</TABLE>
  1 +<TABLE width="595" border="0" cellspacing="0" cellpadding="0">
  2 +<TR>
  3 + <TD>
  4 + Dies ist der Start von einem Informationssystem wie einem Lauftext
  5 + f&uuml;r Webseite in Java geschrieben. Wenn es fertig ist soll es
  6 + eine Menge Vertexe in einem Kugelf&ouml;rmigen Raum bewegen und
  7 + Worte daraus formen. Das grundlegende 3D-Zeug ist fertig und wird in
  8 + dem kleinen Applet unten demonstriert. Leider ist es nicht besonders
  9 + schnell, weshalb ich nicht sicher bin ob es wirklich jemals auf
  10 + die Art funktionieren wird, die ich mir vorgestellt habe.<BR>
  11 + <BR>
  12 + <CENTER>
  13 + <APPLET code="test.class" codebase="classes"
  14 + width=200 height=150 name="test">
  15 + Java mu&szlig; aktiviert sein um hier etwas sehen zu k&ouml;nnen.
  16 + </APPLET>
  17 + </CENTER><BR>
  18 + Im jetztigen Stadium tut das Applet bereits folgendes:
  19 + <OL>
  20 + <LI>
  21 + <B>Translation, Rotation und Scalierung.</B><BR>
  22 + Berechnung der 3D-Koordinaten jedes Vertexes.<BR>
  23 + <I>Das geht recht schnell.</I>
  24 + <LI>
  25 + <B>Projection</B><BR>
  26 + Die 3D-Koordinaten der Vertexe werden auf 2D-Screenkoordinateni
  27 + projeziert.<BR>
  28 + <I>Auch das geht recht schnell.</I>
  29 + <LI>
  30 + <B>Beleuchtung.</B><BR>
  31 + Ermittlung der Farbintensit&auml;t ueber den Winkel des
  32 + Normalenvektors eines Polygons (Dreiecks) zu einem
  33 + definierten Lichtvektor.<BR>
  34 + <I>Auch das ist nicht das Geschwindigkeitsproblem.</I>
  35 + <LI>
  36 + <B>Backface-Culling</B><BR>
  37 + Poligone die vom Betrachter wegzeigen werden nicht
  38 + gezeichnet.<BR>
  39 + <I>schnell...</I>
  40 + <LI>
  41 + <B>Scanline-Converting und lineares Texturemapping</B><BR>
  42 + Ich mappe ein vorher dynamisch erzeugtes Karomuster auf die
  43 + Pyramiede. dabei gibt es noch einige (evtl. Rundungs-)Fehler
  44 + die ich noch nicht im Griff habe und das ganze ist...<BR>
  45 + <I>langsam....</I>
  46 + </OL><BR>
  47 +
  48 + Der Quellcode steht zum download bereit.<BR>
  49 + Ich plane demn&auml;chst eine Dokumentation &uuml;ber das zu schreiben,
  50 + was ich biher an 3D-Grafikprogrammierung in diesem Applet umgesetzt
  51 + habe.
  52 + </TD>
  53 +</TR>
  54 +</TABLE>
  1 +<?
  2 + $menucl=new base();
  3 +?>
  4 +<TABLE width="595" border="0" cellspacing="0" cellpadding="0">
  5 +<TR>
  6 + <TD width="395" valign="top">
  7 + <FONT class="menusubject">
  8 + Clustermointor</FONT>&nbsp;&nbsp;
  9 + <IMG src="fileselpics/gnome_package.png"
  10 + height="20" width="20"></TD>
  11 + <TD width="200">
  12 + <TABLE width="200" border="0" cellspacing="0" cellpadding="0">
  13 + <TR>
  14 + <TD width="1" height="1" bgcolor="#5C5CFF">
  15 + <IMG src="images/trans.gif" width="1" height="1"></TD>
  16 + <TD width="198" height="1" bgcolor="#5C5CFF">
  17 + <IMG src="images/trans.gif" width="198" height="1"></TD>
  18 + <TD width="1" height="1" bgcolor="#5C5CFF">
  19 + <IMG src="images/trans.gif" width="1" height="1"></TD>
  20 + </TR>
  21 + <TR>
  22 + <TD width="1" height="1" bgcolor="#5C5CFF">
  23 + <IMG src="images/trans.gif" width="1" height="1"></TD>
  24 + <TD width="198" height="20" bgcolor="#C9C9FF">
  25 + <FONT class="menusubject">&nbsp;Projekt Dateien</FONT></TD>
  26 + <TD width="1" height="1" bgcolor="#5C5CFF">
  27 + <IMG src="images/trans.gif" width="1" height="1"></TD>
  28 + </TR>
  29 + <TR>
  30 + <TD width="1" height="1" bgcolor="#5C5CFF">
  31 + <IMG src="images/trans.gif" width="1" height="1"></TD>
  32 + <TD width="198" height="1" bgcolor="#5C5CFF">
  33 + <IMG src="images/trans.gif" width="198" height="1"></TD>
  34 + <TD width="1" height="1" bgcolor="#5C5CFF">
  35 + <IMG src="images/trans.gif" width="1" height="1"></TD>
  36 + </TR>
  37 + <TR>
  38 + <TD width="1" height="1" bgcolor="#5C5CFF">
  39 + <IMG src="images/trans.gif" width="1" height="1"></TD>
  40 + <TD width="198" height="1" bgcolor="#FFFFFF">
  41 + <? $menucl->scandir("./", "./", 0, "vis"); ?></TD>
  42 + <TD width="1" height="1" bgcolor="#5C5CFF">
  43 + <IMG src="images/trans.gif" width="1" height="1"></TD>
  44 + </TR>
  45 + <TR>
  46 + <TD width="1" height="1" bgcolor="#5C5CFF">
  47 + <IMG src="images/trans.gif" width="1" height="1"></TD>
  48 + <TD width="198" height="1" bgcolor="#5C5CFF">
  49 + <IMG src="images/trans.gif" width="198" height="1"></TD>
  50 + <TD width="1" height="1" bgcolor="#5C5CFF">
  51 + <IMG src="images/trans.gif" width="1" height="1"></TD>
  52 + </TR>
  53 + </TABLE>
  54 + </TD>
  55 +</TR>
  56 +</TABLE>
  1 +<TABLE width="595" border="0" cellspacing="0" cellpadding="0">
  2 +<TR>
  3 + <TD>
  4 + <h1><u>Eine kurze Einfuehrung in die Geheimnisse des Speichers und
  5 + der Zeigerprogrammierung (Pointer) in C/C++</u></h1><br>
  6 + <br>
  7 + Autor: <i>Georg Steffers (georg@steffers.org)</i><br>
  8 + Copyright (c)2001 Georg Steffers<br>
  9 + <br>
  10 + Ueber mich: Zur Zeit bin ich in einer Web-Agentur als Programmierer
  11 + beschaeftigt.
  12 + Ich programmiere seit meinem 16. Lebensjahr in C was mittlerweile satte
  13 + 11 Jahre macht und ich denke ich kann mich durchaus als fortgeschritten
  14 + bezeichnen. Trotzdem koennen sich natuerlich in diesen Text Fehler
  15 + eingeschlichen haben. Wenn irgend jemandem einer auffallen sollte bitte
  16 + einfach eine Mail an obige mail-Adresse schicken, danke :-)<br>
  17 + <br>
  18 + Sollte dieser Text als Lehrstoff genutzt werde bitte ich darum ihn wie
  19 + er ist abzudrucken und an die Lernenden weiterzugeben. Bei Zitaten oder
  20 + Teilausdrucken bitte ich darum das ich weiterhin als Autor erkennbar
  21 + bin. Danke.<br>
  22 + <br>
  23 + Ich habe versucht diesen Text so einfach wie moeglich zu halten um
  24 + Anfaengern eine verstaendliche Einfuehrung in die Problematik von
  25 + Pointern unter C zu geben. Dazu werde ich zunaechst eine einfache
  26 + Schematische Darstellung des Speichers erklaeren um dann darauf
  27 + einzugehen, wie man in einem Programm auf diesen zugreift (Variablen)
  28 + und darauf aufbauend Zeiger erklaeren.<br>
  29 + Dieses Wissen ist leider elementar und man kann nicht darauf verzichten,
  30 + wenn man in C programmieren moechte. Auch nicht wenn man VisualC oder
  31 + aehnliches verwendet. Denn leider bleibt es immer am Programmierer
  32 + haengen wenn irgendetwas nicht funktioniert und um ein Programm debuggen
  33 + (Fehler beseitigen) zu koennen muss man leider verstehen, wie es
  34 + funktioniert.<br>
  35 + <br>
  36 + Ich rate dazu jedes Kapitel das einem noch nicht bekannt ist mehrfach
  37 + zu lesen und dazwischen ein paar Pausen einzulegen um das gelesene zu
  38 + verarbeiten. Wenn nach mehrfachem lesen Dinge immer noch nicht klar
  39 + sind, habe ich sie nicht ausreichend erklaert und ich bitte darum mir
  40 + die entsprechende Frage zu mailen. Ich werde dann mein bestes tun um
  41 + das Problem zu loesen.<br>
  42 + <br>
  43 + Ich versuche in diesem Text kein Vorwissen vorauszusetzen. Sollte das
  44 + irgendwo nicht geklappt haben schicken Sie mir bitte eine Mail und ich
  45 + versuche den Fehler zu korrigieren.<br>
  46 + <br>
  47 + <br>
  48 + <br>
  49 + <b><u>Zu Bits und Bytes:</u></b><br>
  50 + <br>
  51 + Ein Rechner ist eine elektronische Maschine und auch die Daten in einem
  52 + Rechner werden elektronisch gespeichert und verarbeitet. Genau wie jedes
  53 + Elektronisches Geraet kennt der Rechner und somit ein einzelnes
  54 + Speicherelement zwei Grundlegende zustaende (an/aus). Das ist
  55 + vergleichbar mit einer Gluehbirne. Man kann sie einschalten oder
  56 + ausschalten.<br>
  57 + Wenn man jetzt dem ausgeschalteten Zustand des Speichers den Wert 0
  58 + zuweist und dem eingeschalteten den Wert 1 koennen wir schon mal zwei
  59 + Werte speichern. Voila, das waere ein Bit.<br>
  60 + Nu hat man in modernen (und auch in den aelteren) Programmen aber meist
  61 + mehr Werte zu verarbeiten als 0 und 1. Leider gibt es keinen Schalter
  62 + der mehr als ein oder ausschalten kann (mal abgesehen von Dimmern
  63 + vielleicht, aber Dimmer haben wir leider nicht in einem Rechner).<br>
  64 + <br>
  65 + Hier hilft uns wie so oft bei Rechnern die Mathematik. Wenn sie sich mit
  66 + verschiedenen Zahlensystemen (Dual oder Binaer, Oktal, Dezimal,
  67 + Hexadezimal) auskennen koennen Sie die folgenden Zeilen zum goessten
  68 + Teils ueberfliegen und zum naechsten Absatz weitergehen. Fuer alle
  69 + anderen hier eine kurze Einfuehrung in Zahlensysteme.<br>
  70 + Wie ihnen vielleicht bekannt ist rechnen wir normalerweise im
  71 + dezimalsystem. Das bedeute unsere Zahlen bilden sich auch Ziffern zur
  72 + basis 10 oder anders ausgedrueckt, jede Stelle einer Zahl kann Werte von
  73 + 0 bis 9 annehmen. Fuer einen Rechner ist das wie ich oben schon
  74 + festgestellt habe eher bloed, weil unsere kleinste Speichereinheit das
  75 + Bit nur entweder 0 oder 1 darstellen kann. Es gibt aber ein Zahlsystem,
  76 + das genau diese anforderung Erfuellt. Das Dual oder Binaersystem. In
  77 + diesem Zahlensystem werden Zahlen nur aus folgen von 0 und 1 gebildet.
  78 + Dabei werden Zahlen zu einem grossen Teil genauso behandelt wie im
  79 + Dezimalsystem. Wenn wir im Dezimalsystem mit einer Stelle nicht mehr
  80 + auskommen, so erhoehen wir den Wert in der naechsten Stellen.
  81 + Wir gehen von 9 nach 10 und von 49 nach 50. Genau dasselbe tun wir im
  82 + Binaersystem auch, mit dem unterschied das wir halt nicht erst bei 9
  83 + eine neue Stellen bekommen sondern bereits nach 1. <br>
  84 + <br>
  85 + Im Rechner werden die Daten binaer abgebildet. im Binaersystem sehen
  86 + die Zahlen dann folgendermassen aus:<br>
  87 + <br>
  88 + <pre>
  89 + dez -> bin
  90 + 0 -> 0
  91 + 1 -> 1
  92 + 2 -> 10
  93 + 3 -> 11
  94 + 4 -> 100
  95 + 5 -> 101
  96 + 6 -> 110
  97 + 7 -> 111
  98 + 8 -> 1000
  99 + 9 -> 1001
  100 + 10 -> 1010
  101 + 11 -> 1011
  102 + 12 -> 1100
  103 + 13 -> 1101
  104 + 14 -> 1110
  105 + 15 -> 1111
  106 + 16 -> 10000
  107 + </pre><br>
  108 + Wir haben also fuer jede Ziffer im Binaersystem immer nur den Wert 0
  109 + oder 1 und diese koenne wir in unserem Bit darstellen.<br>
  110 + Um jetzt Werte zu verarbeiten, die groesser als 0 oder 1 sind fasst man
  111 + eine bestimmte Menge Speicherelement zusammen und betrachtet diese dann
  112 + als eine Zahl. Bei dieser Zusammenfassung hat man sich auf bestimmte
  113 + Mengen geeinigt. Die kleinste dieser Mengen fasst 8 Bits zusammen und
  114 + nennt sich Byte. In einem Byte kann man also Werte von 00000000 bis
  115 + 11111111 binaer darstellen. Das mach Dezimal 0 - 255. Fuer groessere
  116 + Zahlen wurden dann groessere &lt;&lt;Datentypen&gt;&gt; eingefuehrt,
  117 + die alle ein vielfaches von 8 Bits bilden:<br>
  118 + <br><pre>
  119 + Byte -> 8 Bit
  120 + Word -> 16 Bit
  121 + double word -> 32 Bit
  122 + </pre><br>
  123 + <br>
  124 + <br>
  125 + <b><u>Der Speicher (und wie der Rechner (das Programm) ihn sieht):
  126 + </u></b><br>
  127 + <br>
  128 + Da es hoechst selten vorkommt, das man wirklich nur 0 oder 1 benoetigt
  129 + organisieren Rechner ihren Speicher nicht Bitweise sonder in groesseren
  130 + Einheiten. <br>
  131 + Hier sei nur kurz erwaehnt, das es vom Rechner abhaengt, was
  132 + als kleinst moegliche Datenmenge angesehen wird, in diesem Text gehe ich
  133 + davon aus , das der Rechner den Speicher Byteweise organisiert. Das soll
  134 + fuer diesen Text reichen. Die Erkenntnisse aus diesem Text lassen sich
  135 + aber auch problemlos auf Speicherorganisationen anwenden.
  136 + Trotzdem moechte ich darauf hinweisen, da dieser Umstand in Programmen
  137 + manchmal zu auf den ersten Blick nicht leicht zu findenden Fehlern
  138 + fuehren kann.<br>
  139 + Also, unser Rechner organisiert den Speicher Byteweise. Dabei wird
  140 + intern jedem Byte eine &lt;&lt;Adresse&gt;&gt; zugewiesen.
  141 + Diese Adresse ist einfach eine Zahl, die vom ersten Byte des Speichers
  142 + bis zu seinem letzten Byte hochgezaehlt
  143 + wird. Haben wir also nur 16 Byte Speicher in unserem Rechner so erreicht
  144 + der Rechner das erste Byte ueber die Adresse 0 und das letzte ueber die
  145 + Adresse 15. Jedes dieser Bytes kann dann einen anderen Wert haben.<br>
  146 + Das kann man sehr schoen auf folgenden Art darstellen:<br>
  147 + <br><pre>
  148 + Speicher Adresse
  149 + ---------
  150 + | 32 | 0
  151 + |---------|
  152 + | 0 | 1
  153 + |---------|
  154 + | 12 | 2
  155 + |---------|
  156 + | 0 | 3
  157 + |---------|
  158 + | 0 | 4
  159 + |---------|
  160 + | 0 | 5
  161 + |---------|
  162 + | 0 | 6
  163 + |---------|
  164 + | 0 | 7
  165 + |---------|
  166 + | 48 | 8
  167 + |---------|
  168 + | 0 | 9
  169 + |---------|
  170 + | 156 | 10
  171 + |---------|
  172 + | 0 | 11
  173 + |---------|
  174 + | 0 | 12
  175 + |---------|
  176 + | 0 | 13
  177 + |---------|
  178 + | 0 | 14
  179 + |---------|
  180 + | 0 | 15
  181 + ---------
  182 + </pre><br>
  183 + Nun ist es fuer ein Programm nich besonders praktisch wenn man sich fuer
  184 + alle Daten, die man speichern moechte die Adresse merken muesste. Bei 16
  185 + Bytes mag das noch gehen aber moderne Computer habe haeufig 64 Millionen
  186 + oder sogar noch mehr Bytes an Arbeitsspeicher (die bekannte MByte Zahl
  187 + fuer den Hauptspeicher.) Das wuerde dann doch ein wenig
  188 + unuebersichtlich. <br>
  189 + Deshalb kann man in einem C/C++ Programm einer Speicherstelle einen
  190 + Namen geben. Das tut man wenn man Variablen deklariert:<br>
  191 + <br><pre>
  192 +int main(void) {
  193 + char erste; /* Deklariert die Variable &lt;&lt;erste&gt;&gt; als char */
  194 + char zweite; /* Deklariert die Variable &lt;&lt;zweite&gt;&gt; als char */
  195 +
  196 + .
  197 + .
  198 + .
  199 + .
  200 +
  201 + return 0;
  202 +}
  203 +</pre><br>
  204 + C/C++ kennt intern unterschiedliche Datentypen. Diese Datentypen nehmen
  205 + vielfaches von einem Byte an Speicher in Anspruch. Bei einem char ist
  206 + das immer 1 Byte. Bei einer deklaration wird einem Namen in dem Programm
  207 + eine Adresse im Speicher zugewiesen, hinter der genuegend Bytes fuer
  208 + diese Variable frei sind. Wenn es geht werden Variablen wenn sie direkt
  209 + hintereinander
  210 + deklariert wurden auch direkt hintereinander im Speicher abgelegt.<br>
  211 + Die obige deklaration koennte in unserem Beispielspeicher also
  212 + folgendermassen aussehen.<br>
  213 + <br><pre>
  214 + Speicher Adresse Variable
  215 + ---------
  216 + | 32 | 0
  217 + |---------|
  218 + | 0 | 1
  219 + |---------|
  220 + | 12 | 2
  221 + |---------|
  222 + | 0 | 3
  223 + |---------|
  224 + | 0 | 4
  225 + |---------|
  226 + | 0 | 5 erste
  227 + |---------|
  228 + | 0 | 6 zweite
  229 + |---------|
  230 + | 0 | 7
  231 + |---------|
  232 + | 48 | 8
  233 + |---------|
  234 + | 0 | 9
  235 + |---------|
  236 + | 156 | 10
  237 + |---------|
  238 + | 0 | 11
  239 + |---------|
  240 + | 0 | 12
  241 + |---------|
  242 + | 0 | 13
  243 + |---------|
  244 + | 0 | 14
  245 + |---------|
  246 + | 0 | 15
  247 + ---------
  248 +</pre><br>
  249 + Dann waehre &lt;&lt;erste&gt;&gt; ein Synonym fuer Adresse 5 im
  250 + Speicher und &lt;&lt;zweite&gt;&gt; ein Synonym fuer adresse 6. Um jetzt
  251 + Werte im Speicher abzulegen kann man einfach folgendes machen:<br>
  252 + <br><pre>
  253 +int main(void) {
  254 + char erste;
  255 + char zweite;
  256 +
  257 + erste=7; /* Zuweisung */
  258 + zweite=10; /* Zuweisung */
  259 +
  260 + .
  261 + .
  262 + .
  263 + .
  264 +
  265 + return 0;
  266 +}
  267 + </pre><br>
  268 + Das nennt man einer Variable einen Wert zuweisen. Diese Zuweisung kann
  269 + auch aus einer Arithmetischen Operation bestehen z.B. erste=7+4. Dann
  270 + wuerde zuerst die berechnung durchgefuehrt und das Ergebnis der Variable
  271 + zugewiesen. Nach obigem Beispiel saehe unser Speicher so aus:<br>
  272 + <br><pre>
  273 + Speicher Adresse Variable
  274 + ---------
  275 + | 32 | 0
  276 + |---------|
  277 + | 0 | 1
  278 + |---------|
  279 + | 12 | 2
  280 + |---------|
  281 + | 0 | 3
  282 + |---------|
  283 + | 0 | 4
  284 + |---------|
  285 + | 7 | 5 erste
  286 + |---------|
  287 + | 10 | 6 zweite
  288 + |---------|
  289 + | 0 | 7
  290 + |---------|
  291 + | 48 | 8
  292 + |---------|
  293 + | 0 | 9
  294 + |---------|
  295 + | 156 | 10
  296 + |---------|
  297 + | 0 | 11
  298 + |---------|
  299 + | 0 | 12
  300 + |---------|
  301 + | 0 | 13
  302 + |---------|
  303 + | 0 | 14
  304 + |---------|
  305 + | 0 | 15
  306 + ---------
  307 + </pre><br>
  308 + an die Stelle im Speicher mit der Adresse 5 wurde eine 7 geschrieben und
  309 + an die folgende mit der Adresse 6 wurde eine 10 geschrieben. Wenn man
  310 + seine Variable jetzt irgendwoanders als in einer Zuweisung verwendet so
  311 + wird dar Name der Variable durch den Inhalt des Bytes im Speicher
  312 + ersetzt auf das er verweist. Wir koennen zum Beispiel mit unseren
  313 + Variablen rechnen:<br>
  314 + <br><pre>
  315 +int main(void) {
  316 + char erste;
  317 + char zweite;
  318 + char ergebnis;
  319 +
  320 + erste=7; /* Zuweisung */
  321 + zweite=10; /* Zuweisung */
  322 +
  323 + ergebnis=erste+zweite; /* hier werden zunaechst die Variablen durch
  324 + den Speicherinhalt (also 7 und 10) ersetzt,
  325 + dann eine addition mit ihnen durchgefuehrt
  326 + und anschliessend das Ergebnis einer weiteren
  327 + Variable zugewiesen. */
  328 +
  329 + .
  330 + .
  331 +
  332 + return 0;
  333 +}
  334 + </pre><br>
  335 + Unser Speicher saehe danach also folgendermassen aus:<br>
  336 + <br><pre>
  337 + Speicher Adresse Variable
  338 + ---------
  339 + | 32 | 0
  340 + |---------|
  341 + | 0 | 1
  342 + |---------|
  343 + | 12 | 2
  344 + |---------|
  345 + | 0 | 3
  346 + |---------|
  347 + | 0 | 4
  348 + |---------|
  349 + | 7 | 5 erste
  350 + |---------|
  351 + | 10 | 6 zweite
  352 + |---------|
  353 + | 17 | 7 ergebnis
  354 + |---------|
  355 + | 48 | 8
  356 + |---------|
  357 + | 0 | 9
  358 + |---------|
  359 + | 156 | 10
  360 + |---------|
  361 + | 0 | 11
  362 + |---------|
  363 + | 0 | 12
  364 + |---------|
  365 + | 0 | 13
  366 + |---------|
  367 + | 0 | 14
  368 + |---------|
  369 + | 0 | 15
  370 + ---------
  371 +
  372 + </pre><br>
  373 + Das ist soweit alles was mir zu Variablen einfaellt, obwohl bestimmt
  374 + noch hunderte von Fragen offen bleiben. Wie gesagt bitte mailen... :-)
  375 + Jetzt kommen wir dann zu:<br>
  376 + <br>
  377 + <br>
  378 + <b><u>Zeiger oder (ja wo stehen sie denn?)<br>
  379 + oder (warum C Programmierer dauernd fluchen):</u></b><br>
  380 + <br>
  381 + Ein Zeiger (Pointer) ist eine spezielle Form einer Variable.
  382 + Anstatt einen Wert zu enthalten enthaelt dies Variable eine
  383 + Speicheradresse Der Inhalt eines Zeigers zeigt also sozusagen auf eine
  384 + andere Stelle im Speicher.<br>
  385 + Einer meiner Dozenten hat mal eine passende Analogie gebracht:<br>
  386 + <br>
  387 + Ein Zeiger ist wie ein Vorwegweiser an einer Strasse.<br>
  388 + <ul>
  389 + <li>Der Vorwegweiser zeigt auf den Ort wo man hinfahren moechte.
  390 + <li>Ein Zeiger zeigt auf die Stelle im Speicher an die man moechte.
  391 + </ul><br>
  392 + Im Moment ist es sicher schwierig den Sinn einer solchen Variable zu
  393 + verstehen, aber Sie koennen mir glauben, wenn ich ihnen sage, das man
  394 + in C/C++ dauernd Zeiger braucht. Machen Sie sich im Moment keine
  395 + Gedanken darueber wann und warum sondern konzentrieren Sie sich voll
  396 + auf das wie. Das wann und warum kommt beim programmieren und im Laufe
  397 + des folgenden Textes von ganz alleine (hoffe ich).<br>
  398 + <br>
  399 + C/C++ hat eine besonder Syntax (Schreibweise) um mit Zeigern umzugehen:
  400 + <br><br>
  401 + Ich hoffe folgendes Programm/Diagramm mach deutlich was gemeint ist.<br>
  402 + <br><pre>
  403 +int main(void) {
  404 + char erste; /* Deklariert die Variable &lt;&lt;erste&gt;&gt; als char */
  405 + char zweite; /* Deklariert die Variable &lt;&lt;zweite&gt;&gt; als char */
  406 +
  407 + char* zeiger; /* Deklariert einen Zeiger, der auf eine Speicherbereich
  408 + zeigt, der die groesse eines char habe soll.
  409 + Kling kompliziert ich weiss...ich versuche es unten
  410 + in einem weiten Speicherdiagramm zu verdeutlichen. */
  411 +
  412 + /* Man kann Zeigern wie jeder anderen Variable auch Werte zuweisen. */
  413 + zeiger=0;
  414 +
  415 + .
  416 +
  417 + return 0;
  418 +}
  419 + </pre><br>
  420 + das ganze sieht dann im Speicher bildlich so aus:<br>
  421 + <br><pre>
  422 + Speicher Adresse Variable
  423 + ---------
  424 + -->| 32 | 0
  425 + | |---------|
  426 + | | 0 | 1
  427 + | |---------|
  428 + | | 12 | 2
  429 + | |---------|
  430 + | | 0 | 3
  431 + | |---------|
  432 + | | 0 | 4
  433 + | |---------|
  434 + | | 7 | 5 erste
  435 + | |---------|
  436 + | | 10 | 6 zweite
  437 + | |---------|
  438 + ---| 0 | 7 zeiger
  439 + |---------|
  440 + | 48 | 8
  441 + |---------|
  442 + | 0 | 9
  443 + |---------|
  444 + | 156 | 10
  445 + |---------|
  446 + | 0 | 11
  447 + |---------|
  448 + | 0 | 12
  449 + |---------|
  450 + | 0 | 13
  451 + |---------|
  452 + | 0 | 14
  453 + |---------|
  454 + | 0 | 15
  455 + ---------
  456 + </pre><br>
  457 + Gut...wenn also ein Wert in einer Zeigervariable steht soll dieser fuer
  458 + die Adresse einer Speicher stelle stehen. Das hat allerdings nur einen
  459 + Sinn wenn ich auch an den Inhalt dieser Speicheradresse kommen kann auf
  460 + die der Zeiger zeigt.<br>
  461 + Benutzt man den Zeiger wie die normalen Variablen, so wird er immer
  462 + durch die Adresse ersetzt und nicht durch den Wert der Speicherstelle an
  463 + dieser Adresse. Folgendes kleine Programm soll das erleutern. In diesem
  464 + Programm tauchen ein paar neue Dinge auf, die ich aber versuche direkt
  465 + an dem Programm zu erklaeren. Dies wird das erste Programm in diesem
  466 + Text was sie compilieren und ausfuhren koennen:<br>
  467 + <br><pre>
  468 +int main(void) {
  469 + char erste; /* Variable deklarieren */
  470 + char zweite; /* Variable deklarieren */
  471 +
  472 + char* zeiger; /* Zeiger deklarieren */
  473 +
  474 + erste = 7; /* 7 zuweisen */
  475 + zweite = 10; /* 10 zuweisen */
  476 +
  477 + zeiger = &erste; /* Das & vor erste hat eine spezielle Bedeutung.
  478 + Normalerweise wird ja eine Variable durch ihren
  479 + Wert ersetzt. Schreibt man in C/C++ aber ein &
  480 + vor die Variable so wird diese durch die
  481 + Speicheradresse an der sie steht ersetzt. Da
  482 + der Inhalt eines Zeigers eine Adresse ist kann man
  483 + ihm diese dann zuweisen. */
  484 +
  485 + /* Jetzt folgen ein paar Ausgaben, die Zeigen sollen an welcher Adresse
  486 + welcher Wert steht. Es ist sehr wichtig zu verstehen, was hier
  487 + passiert. Das setzt voraus das man die printf Funktion von C
  488 + kennt und versteht */
  489 +
  490 + printf("Variable: erste - Adresse: %lu - Wert: %lu\n", &erste, erste);
  491 + printf("Variable: zweite - Adresse: %lu - Wert: %lu\n", &zweite, zweite);
  492 + printf("Zeiger: zeiger - Adresse: %lu - Wert: %lu\n", &zeiger, zeiger);
  493 +
  494 + return 0;
  495 +}
  496 + </pre><br>
  497 + Nachdem diese Programm uebersetzt und ausgefuehrt wurde sollte man in
  498 + etwa folgende Ausgabe erhalten (die Werte weden unterschiedlich sein):
  499 + <br>
  500 + <br><pre>
  501 +Variable: erste - Adresse: 3221223243 - Wert: 7
  502 +Variable: zweite - Adresse: 3221223242 - Wert: 10
  503 +Zeiger: zeiger - Adresse: 3221223236 - Wert: 3221223243
  504 + </pre><br>
  505 + Hier ist wichtig zu erkennen, das der Wert von &lt;&lt;zeiger&gt;&gt;
  506 + der Adresse von &lt;&lt;erste&gt;&gt; entspricht.<br>
  507 + Wie oben bereits erwaehnt waere es jetzt sinnvoll, wenn man ueber
  508 + &lt;&lt;zeiger&gt;&gt; auch irgendwie an den Wert von
  509 + &lt;&lt;erste&gt;&gt; kommen koennte. Tatsaechlich dienen Zeiger
  510 + eigentlich nur diesem Zweck.<br>
  511 + Dafuer gibt es in C wieder eine spezielle Syntax. Um an den Wert von
  512 + &lt;&lt;erste&gt;&gt; zu kommen kann man &lt;&lt;*zeiger&gt;&gt;
  513 + schreiben. Das nennt man dereferenzieren. Das Wort kommt daher, das
  514 + &lt;&lt;zeiger&gt;&gt; eine Referenz auf &lt;&lt;erste&gt;&gt; ist und
  515 + man diese Referenz jetzt aufloest (dereferenzieren) (klingt furchtbar
  516 + kompliziert ich weiss).<br>
  517 + <br>
  518 + Diese Syntax verwirrt gerade Anfaenger haeufig, da man den * auch schon
  519 + bei der deklaration des Zeigers benutzt hat.<br>
  520 + Hier muss man
  521 + strikt zwischen der deklaration eines Zeigers und dem dereferenzieren
  522 + unterscheiden. Ich mache es mir dadurch leichter, das ich bei der
  523 + deklaration den * immer an den Datentyp schreibe und beim
  524 + dereferenzieren an den Variablennamen. Beispiel:<br>
  525 + <br><pre>
  526 + - char* zeiger; /* deklaration eines Zeiger */
  527 + - erste = *zeiger; /* dereferenzieren von Zeiger */
  528 + </pre><br>
  529 + Wie sich das auswirkt soll folgendes Programm zeigen. Es ist im
  530 + wesentlichen dasselbe Programm wie vorhin mit einer zusaetzlichen
  531 + Ausgabe:<br>
  532 + <br><pre>
  533 +int main(void) {
  534 + char erste; /* Variable deklarieren */
  535 + char zweite; /* Variable deklarieren */
  536 +
  537 + char* zeiger; /* Zeiger deklarieren */
  538 +
  539 + erste = 7; /* 7 zuweisen */
  540 + zweite = 10; /* 10 zuweisen */
  541 +
  542 + zeiger = &erste; /* Das & vor erste hat eine spezielle bedeutung.
  543 + Normalerweise wird ja eine Variable durch ihren
  544 + Wert ersetzt. Schreibt man in C/C++ aber ein &
  545 + vor die Variable so wird diese durch die
  546 + Speicheradresse an der sie streht ersetzt. Da
  547 + der Inhalt eines Zeigers eine Adresse ist kann man
  548 + ihm diese dann zuweisen. */
  549 +
  550 + /* Jetzt folgen ein paar Ausgaben, die Zeigen sollen an welcher Adresse
  551 + welcher Wert steht. Es ist sehr wichtig zu verstehen, was hier
  552 + passiert. Das setzt voraus das man die printf Funktion von C
  553 + kennt und versteht */
  554 +
  555 + printf("Variable: erste - Adresse: %lu - Wert: %lu\n", &erste, erste);
  556 + printf("Variable: zweite - Adresse: %lu - Wert: %lu\n", &zweite, zweite);
  557 + printf("Zeiger: zeiger - Adresse: %lu - Wert: %lu\n", &zeiger, zeiger);
  558 + printf("dereferenziert: zeiger - %lu\n", *zeiger);
  559 +
  560 + return 0;
  561 +}
  562 + </pre><br>
  563 + Das Programm sollte folgende Ausgabe machen:<br>
  564 + <br><pre>
  565 +Variable: erste - Adresse: 3221223243 - Wert: 7
  566 +Variable: zweite - Adresse: 3221223242 - Wert: 10
  567 +Zeiger: zeiger - Adresse: 3221223236 - Wert: 3221223243
  568 +dereferenziert: zeiger - 7
  569 + </pre><br>
  570 + Man sieht, das &lt;&lt;*zeiger&gt;&gt; identisch mit
  571 + &lt;&lt;erste&gt;&gt; ist.<br>
  572 + So, das solls fuers erste mal sein...ich wuerde vorschlagen mit den
  573 + Programmen ein bisschen herumzuexperimentieren.<br>
  574 + Noch ein Wort: Es kann Ihnen beim experimentieren durchaus passieren,
  575 + das das Programm nachdem sie es ausfuehren ein Fehlermeldung der art
  576 + &lt;&lt;segmentation fault&gt;&gt; oder &lt;&lt;overflow error&gt;&gt;
  577 + oder aehnlches (je nach dem mit welchem System sie arbeiten) ausgibt.
  578 + Das sind Fehler, die darauf hinwiesen, das der Pointer keine gueltige
  579 + Adresse enthaelt. Dadurch greift dann naemlich das
  580 + &lt;&lt;*zeiger&gt;&gt; auf eine ungueltige (nicht dem eigenen Programm
  581 + zugeordnete Adresse) zu.<br>
  582 + <br>
  583 + Viel Spass und bei Fragen bitte mail an mich...ich bin fuer
  584 + Verbesserungsvorschlaege und Fragen immer offen.
  585 + </TD>
  586 +</TR>
  587 +</TABLE>
  1 +This pages are optimized for <A href="http://www.mozilla.org/">mozilla</A>
  2 +at a minimum resolution of 800x600 but should still look fine under IE.
  3 +Sadly some elements of my page can't be viewed with NS 4.x. Under Windows please
  4 +use IE or NS 6 or better mozilla. Under Linux please use mozilla. Opera should
  5 +show this pages correct, too. If you run into troubles ... please mail me.
  1 +<TABLE width="595" border="0" cellspacing="0" cellpadding="0">
  2 +<TR>
  3 + <TD>
  4 + This is a project i worked on for an Ex-Employer of me...it sleep 'til
  5 + i left him.<BR>
  6 + There was an cluster of 33 Alpha (i don't know what kind of)
  7 + Computers and i suggested an easy and fast way to get information about
  8 + every computer in that cluster. Another reason to start this was
  9 + to learn more about GTK, socketprogramming and threads.<BR>
  10 + It isn't really
  11 + ready now but it seems to be useful. You can find it in my Source
  12 + Directory.<BR>
  13 + <BR><BR>
  14 + Here is a screenshot of it:<BR>
  15 + <BR>
  16 + <TABLE border="0" cellpadding="2" cellspacing="0">
  17 + <TR>
  18 + <TD valign="top">
  19 + <img src="images/screenshot.jpg" alt="clmon" align=left></TD>
  20 + <TD>
  21 + Every button represents a node in the cluster. The text on
  22 + the button is the name of the node and the bar shows the
  23 + actual cpu-usage. red is user, blue is system and green is
  24 + idle. If the node is down...(the server isn´t running on it)
  25 + then the bar is black. On a click you get an popup-menu in
  26 + which you can choose from severel informations you may get
  27 + from the node.
  28 + </TD>
  29 + </TR>
  30 + </TABLE>
  31 + <BR><BR>
  32 + Concider this as not ready at all. I will give no guaranty that it will
  33 + work for you or did not harm something, however it works fine for me
  34 + even if it has a lot of bugs to fix.<BR>
  35 + <BR>
  36 + Sorry, there is no instruction how
  37 + to install along with it (no time :) If you try it and encounter bugs
  38 + or have suggestion, please mail me! If you have fixes feel free to
  39 + mail too :] I would be very pleased if anyone is interested in
  40 + continuing this because i dont have the time and it would be a pity to
  41 + drop all the work i did already ;)<BR><BR>
  42 + I started a rewrite of it in C++ but did not finish...however, the
  43 + server-part is mostly done.<BR><BR>
  44 +
  45 + Much fun....(or frustration..sorry)
  46 + </TD>
  47 +</TR>
  48 +</TABLE>
  1 +<TABLE width="595" border="0" cellspacing="0" cellpadding="0">
  2 +<TR>
  3 + <TD>
  4 + Ok, you ask for it now you'll get it (but it might be boring):<br><br>
  5 + name: Georg Steffers<br>
  6 + birthday: 15.12.1973<br>
  7 + town: M&uuml;nster<br>
  8 + <br>
  9 + I was born in a small town in germany called Ochtrup, you never heard
  10 + about it, right?!? Well my live was very normal, i went to school did
  11 + some play and lived in the day without thinking about anything until
  12 + one day i had to decide what to do with the rest of my live...
  13 + At this time i had already experimented with c-programming and found it
  14 + a lot of fun so i went to a school for computer-science near cologne
  15 + This school was called BIB what means "Bildunszentrum f&uuml;r
  16 + informationsverarbeitende Berufe" and i am sure you never heard about it
  17 + too...but i am quite sure you have heard about cologne. It was much fun
  18 + to live there and i already have some good friends there. Well, well...
  19 + i got my examen on that school and turned to a town called M&uuml;nster
  20 + where i live now. I am working at a web-agency in Emsdetten...again a
  21 + town where you never heard about, yes?!? There i do some programming
  22 + in C, C++, Perl, PHP, Java, Java-Script, HTML and what else comes up.
  23 + Ok, thats it for now...i am sure you sleep already, sorry :)<br>
  24 + Mayby i will add some pictures here in future,
  25 + that might not so boring....
  26 + </TD
  27 +</TR>
  28 +</TABLE>
  1 +<TABLE width="595" border="0" cellspacing="0" cellpadding="0">
  2 +<TR>
  3 + <TD>
  4 + So, after all here is my new homepage and i hope, that it will
  5 + appreciate you after all the time it takes until it was ready.<BR><BR>
  6 + Now the design of it is complete from my own, with some fillips
  7 + from my girlfriend.
  8 + The content is already mostly programming-relatet, but from now
  9 + on in german as well as in english (please be patient with my english
  10 + a am not a native speaker).<BR><BR>
  11 + This pages are build by easy and fast manageable configuration and
  12 + includefiles. By doing this i hope to be able to submit actual
  13 + informations faster. I am planning a newarea for example.
  14 + Nevertheless this pages are only a sparetime job for me and therefore
  15 + i will give no guarantee on constant updates.<BR>
  16 + I will make all files available for download to everyone who is
  17 + interested in it.<BR><BR>
  18 + Be that as it may...i hope the information, that are collected on
  19 + this site will be of some interest for someone.
  20 + </TD>
  21 +</TR>
  22 +</TABLE>
  1 +documentations
  2 +pointer in C/C++#zeiger#zeiger#an introduction to pointer in C/C++#120#80#100#50
  3 +
  4 +projects
  5 +clustermonitor#gtkclmon#gtkclmon#a programm for watching a cluster of computers#120#125#100#50
  6 +3D-graphics / Java#show3d#show3d#a study about the basics of 3D-programming#120#145#100#50
  7 +sourcecodes#http://www.muenster.de/~steffers/src/#src#all my sourcecodes#120#185#75#30
  8 +test#source#src2#Testseite#120#185#75#30
  9 +
  10 +personal
  11 +news#news#news#actual news#120#235#70#30
  12 +about myself#info#info#a short personal info about myself#120#230#100#50
  13 +webcam#javascript:newWin('/smain/webcam.php?LANG=en');#cam#me at work (the most time)#120#245#75#50
  14 +
  15 +links
  16 +the Gimp#http://www.gimp.org/#gimp#The open-source image manipulation software#120#295#100#50
  17 +Gnome#http://www.gnome.org/#gnome#desktop-environment for the X-Windows system#120#310#100#50
  18 +Mozilla#http://www.mozilla.org/#mozilla#a cool browser#120#345#70#30
  19 +Sourceforge#http://www.sourceforge.net/#sourceforge#open source management website#120#340#75#50
  20 +Freshmeat#http://www.freshmeat.net/#freshmeat#search for free software#120#370#80#30
  21 +Seti@Home#http://www.alien.de/seti/#seti#where my they be?#120#385#75#30
  22 +NOePATENTS#http://petition.eurolinux.org/#petition#please, no software patents in europe#120#380#100#50
  23 +deltacity.NET#http://www.deltacity.net/#dcn#my employer#120#415#50#30
  1 +<TABLE width="595" border="0" cellspacing="0" cellpadding="0">
  2 +<TR>
  3 + <TD>
  4 + <B>03/18/2001</B></TD>
  5 +</TR>
  6 +<TR>
  7 + <TD>
  8 + I write on a page for my sourcecodes for a few days. For that i have
  9 + written a fileselector with PHP, Javascript and &lt;DIV&gt;-layers. It
  10 + is very nice to view under mozilla and Internet Explorer. But ...
  11 + i can't get it running under Netscape 4.x ... Because if this i have
  12 + striked out the official support for NS 4.x.</TD>
  13 +</TR>
  14 +<TR>
  15 + <TD height="5">
  16 + <IMG src="images/trans.gif" width="1" height="5"></TD>
  17 +</TR>
  18 +<TR>
  19 + <TD>
  20 + You can get a first impression of my fileselector under the link
  21 + projects/test.</TD>
  22 +</TR>
  23 +<TR>
  24 + <TD height="20">
  25 + <IMG src="images/trans.gif" width="1" height="20"></TD>
  26 +</TR>
  27 +<TR>
  28 + <TD>
  29 + <B>03/12/2001</B></TD>
  30 +</TR>
  31 +<TR>
  32 + <TD>
  33 + now i have tooltips to every menupoint. That was very much work
  34 + because you have to write a own version for every damn browser out
  35 + there, but i think it has become very nice finally.
  36 + Sadly the whole page looks a little strange under NS 4.x but i don't
  37 + know why. If anyone has any idea, please tell me, that i can fix it,
  38 + thanks</TD>
  39 +</TR>
  40 +</TABLE>
  1 +<TABLE width="595" border="0" cellspacing="0" cellpadding="0">
  2 +<TR>
  3 + <TD>
  4 + This is the beginning of an information-system like a running-text
  5 + written in java. At the end it should wirl a lot of vertices in a
  6 + spherical room and form words from it. The basic 3D-Stuff is ready and
  7 + shown in the applet below. Sadly it is so slow that i am not sure if
  8 + it will ever work as i thought it should.<BR><BR>
  9 +
  10 + <CENTER>
  11 + <APPLET code="test.class" codebase="classes"
  12 + width=200 height=150 name="test">
  13 + You must activate Java with your browser if you want to see
  14 + anything...
  15 + </APPLET>
  16 + </CENTER><BR>
  17 +
  18 + In the actual state the applet does the following:<BR><BR>
  19 +
  20 + <OL>
  21 + <LI>
  22 + <B>translation, rotation, scale</B><BR>
  23 + calculation of the 3D-coordinates for every vertex.<BR>
  24 + <I>relatively fast</I>
  25 + <LI>
  26 + <B>projection</B><BR>
  27 + The 3D-coordinates will be projected on 2D-screenspace.<BR>
  28 + <I>relatively fast, too</I>
  29 + <LI>
  30 + <B>lighting</B><BR>
  31 + calculating a color-intensity by the angle of the normal
  32 + vector of a polygon (triangle)to a defined light-vector.<BR>
  33 + <I>even this isn't the speed problem</I>
  34 + <LI>
  35 + <B>backface-culling</B><BR>
  36 + Polygons facing away from the viewer are not drawn.<BR>
  37 + <I>fast...</I>
  38 + <LI>
  39 + <B>scanline-conversion and lineal texturemapping</B><BR>
  40 + i map previously calculatet checker-texture on every polygon.
  41 + There are a few error (rounding?) in this and it is...<BR>
  42 + <I>slow....</I>
  43 + </OL><BR>
  44 +
  45 + The sourcecode is available for download.<BR>
  46 + I plan to write a documentation about the things i have done so far
  47 + in this applet.
  48 + </TD>
  49 +</TR>
  50 +</TABLE>
  1 +<?
  2 + $menucl=new base();
  3 +?>
  4 +<TABLE width="595" border="0" cellspacing="0" cellpadding="0">
  5 +<TR>
  6 + <TD width="395">&nbsp;</TD>
  7 + <TD width="200">
  8 + <? $menucl->scandir("./", "./", 1, "vis"); ?></TD>
  9 +</TR>
  10 +</TABLE>
  1 +<TABLE width="595" border="0" cellspacing="0" cellpadding="0">
  2 +<TR>
  3 + <TD>
  4 + sorry, actually this text is only available in the german Version
  5 + this will change in future...until then you may want to try an
  6 + online translator to translate the german version in english.
  7 + </TD>
  8 +</TR>

239 Bytes

212 Bytes

  1 +#ifndef __XDisplay_h__
  2 +#define __XDisplay_h__
  3 +
  4 +#include <X11/Xlib.h>
  5 +#include <X11/Xutil.h>
  6 +#include <X11/Xos.h>
  7 +#include <X11/Xatom.h>
  8 +
  9 +class XDisplay {
  10 + private:
  11 + //alles zum Display und screen
  12 + Display* display;
  13 + int screen_num;
  14 +
  15 + int argc;
  16 + char** argv;
  17 +
  18 + unsigned int display_width;
  19 + unsigned int display_height;
  20 + char* display_name;
  21 +
  22 + XFontStruct* font_info;
  23 + XEvent report;
  24 + Colormap default_cm;
  25 +
  26 + public:
  27 + //Konstruktoren und Destruktoren
  28 + /* Displayname=NULL -> Wert der DISPLAY env-var nutzen */
  29 + XDisplay(int argc, char** argv, char* name=NULL);
  30 + ~XDisplay();
  31 +
  32 + //Inline Funktionen
  33 + unsigned int getWidth(void) { return display_width; }
  34 + unsigned int getHeight(void) { return display_height; }
  35 + XFontStruct* getFont(void) { return font_info; }
  36 + Display* getDisplay(void) { return display; }
  37 + int getScreen(void) { return screen_num; }
  38 + Colormap getDefaultCm(void) { return default_cm; }
  39 + int getArgc(void) { return argc; }
  40 + char** getArgv(void) { return argv; }
  41 +
  42 + // weitere Funktionen
  43 + unsigned long getColor(unsigned short, unsigned short, unsigned short);
  44 + void loadFont(char* name="9x15");
  45 + Window getRootWindow(void);
  46 + unsigned long getBlackPixel(void);
  47 + unsigned long getWhitePixel(void);
  48 +};
  49 +
  50 +#endif /*__XDisplay_h__*/
  1 +<?
  2 + dl("imlib.so");
  3 +
  4 + $img1=imlib_load_image("images/img1.png");
  5 +
  6 + echo imlib_get_image_width($img1)."<br>\n";
  7 +
  8 + imlib_free_image($img1);
  9 +?>

159 Bytes

  1 +<?
  2 + include("php/base.inc");
  3 + $menucl=new base();
  4 +?>
  5 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
  6 +<HTML>
  7 + <HEAD>
  8 + <TITLE>steffers.org</TITLE>
  9 +
  10 + <META name="keywords" lang="de"
  11 + content="Programmierung, programmierung, programmieren, 3D, 3d, 3D-Grafik, 3D-grafik, Grafik, grafik, Java, java, C/C++, C, C++, Dokumentation, Dokumentationen">
  12 + <META name="keywords" lang="en"
  13 + content="programming, 3D, 3D-graphics, graphics, Java, java, C/C++, C, C++, documentation, documentations">
  14 + <META name="description" lang="de"
  15 + content="Der Anfang einer kompletten Einf&uuml;hrung in C/C++ programmierung. Sie soll alle Aspekte der Programmierung unter C, C++ und Java behandeln und in einer kleine Applikation enden, die den Anfang einer 3D-Engine bildet.">
  16 + <META name="description" lang="en"
  17 + content="The beginning of a complete introduction in C/C++ programming. It should cover all aspects of programming in C, C++ and Java and result in a small application, that is the beginning of a small 3D-engine.">
  18 +
  19 + <META name="author"
  20 + content="Georg Steffers">
  21 + <META name="robots"
  22 + content="index,follow">
  23 + <META name="date"
  24 + content="2001-02-26T23:00:00+01:00">
  25 +
  26 + <META http-equiv="keywords"
  27 + content="programming, 3D, 3D-graphics, graphics, Java, java, C/C++, C, C++, documentation, documentations">
  28 + <META http-equiv="description"
  29 + content="The beginning of a complete introduction in C/C++ programming. It should cover all aspects of programming in C, C++ and Java and result in a small application, that is the beginning of a small 3D-engine.">
  30 + <META http-equiv="Content-Type"
  31 + content="text/html">
  32 +
  33 + <!--BASE HREF="http://www.steffers.org/smain/"-->
  34 + <BASE HREF="http://localhost/~georg/smain/">
  35 +
  36 + <LINK rev=made href="mailto:georg@steffers.org">
  37 + <LINK rel="stylesheet" href="css/style.css">
  38 +
  39 + <script language="JavaScript1.2">
  40 + <!--
  41 + if(navigator.appName=='Netscape' &&
  42 + navigator.appVersion.charAt(0)=='4')
  43 + browser='NS';
  44 + else
  45 + if(navigator.appName=='Microsoft Internet Explorer' &&
  46 + navigator.appVersion.charAt(0)>='4') {
  47 + browser='IE';
  48 + var layers=document.all.tags('DIV');
  49 + }
  50 + else {
  51 + browser='DOM';
  52 + var layers=document.getElementsByTagName('DIV');
  53 + }
  54 +
  55 + function newWin(url) {
  56 + openWindow = window.open(url,'Webcam','resizable=no,\
  57 + scrollbars=auto, menubar=no,\
  58 + toolbar=no,location=no,\
  59 + width=400,height=300');
  60 +
  61 + openWindow.moveTo(20,20);
  62 + }
  63 +
  64 + function tooltip_on(id, num) {
  65 + if(browser=='IE')
  66 + layers[num].style.visibility='visible';
  67 + else if(browser=='NS')
  68 + window.document.layers[num].visibility='visible';
  69 + else
  70 + document.getElementById(id).style.visibility='visible';
  71 + }
  72 +
  73 + function tooltip_off(id, num) {
  74 + if(browser=='IE')
  75 + layers[num].style.visibility='hidden';
  76 + else if(browser=='NS')
  77 + window.document.layers[num].visibility='hidden';
  78 + else
  79 + document.getElementById(id).style.visibility='hidden';
  80 + }
  81 +
  82 + function showdir(regexp, regexp2) {
  83 + if(browser=='DOM' || browser=='IE') {
  84 + for(i=0; i<layers.length; i++) {
  85 + if(layers[i].id.match(regexp))
  86 + layers[i].style.display='block';
  87 + if(layers[i].id.match(regexp2))
  88 + layers[i].style.display='none';
  89 + }
  90 + }
  91 + // Problem beim NS 4: layers mit display='none' tauchen nicht in
  92 + // der Liste document.layers auf. Evtl. kann ich im NS auch die
  93 + // DIV-Liste durchgehen...spaeter mal schauen
  94 + }
  95 +
  96 + function hidedir(regexp, regexp2) {
  97 + if(browser=='DOM' || browser=='IE') {
  98 + for(i=0; i<layers.length; i++) {
  99 + if(layers[i].id.match(regexp))
  100 + layers[i].style.display='none';
  101 + if(layers[i].id.match(regexp2))
  102 + layers[i].style.display='block';
  103 + }
  104 + }
  105 + // Problem beim NS 4: layers mit display='none' tauchen nicht in
  106 + // der Liste document.layers auf. Evtl. kann ich im NS auch die
  107 + // DIV-Liste durchgehen...spaeter mal schauen
  108 + }
  109 + // -->
  110 + </script>
  111 + </HEAD>
  112 +
  113 + <BODY bgcolor="#FFFFFF">
  114 + <?
  115 + $url=parse_url($HTTP_REFERER);
  116 + // echo $url["host"]."<br>\n";
  117 + ?>
  118 + <? $menucl->site_header(); ?>
  119 +
  120 + <TABLE width="770" border="0" cellspacing="0" cellpadding="0">
  121 + <TR>
  122 + <TD width="160" valign="top">
  123 + <? $menucl->menu(); ?>
  124 + </TD>
  125 + <TD width="610" valign="top">
  126 + <TABLE width="610" border="0" cellspacing="0"
  127 + cellpadding="0">
  128 + <TR>
  129 + <TD width="610" class="maintopbg">
  130 + <IMG align="left" src="images/maintop.png"
  131 + vspace="0" hspace="0" width="388" height="2"></TD>
  132 + </TR>
  133 + </TABLE>
  134 + <TABLE width="610" border="0" cellspacing="0"
  135 + cellpadding="0">
  136 + <TR>
  137 + <TD width="15" height="15">
  138 + <IMG src="images/bow.png" width="15" height="15"></TD>
  139 + <TD width="595" height="15">&nbsp;</TD>
  140 + </TR>
  141 + <TR>
  142 + <TD width="15">
  143 + <IMG SRC="images/trans.gif" width="15" height="1"></TD>
  144 + <TD width="595" valign="top">
  145 + <? $menucl->page(); ?></TD>
  146 + </TR>
  147 + </TABLE>
  148 + </TD>
  149 + <TD>&nbsp;</TD>
  150 + </TR>
  151 + </TABLE>
  152 + </BODY>
  153 +</HTML>
  1 +<?
  2 + if(!isset($BASE_INC)) {
  3 + $BASE_INC=1;
  4 +
  5 + /****************************************************************
  6 + * Funktionen fuer den Aufbau der Startseite *
  7 + ****************************************************************/
  8 + class BASE {
  9 +
  10 + var $result;
  11 + /**********************************************************
  12 + * Konstruktor: *
  13 + **********************************************************/
  14 + function BASE() {
  15 + global $LANG, $PAGE;
  16 + global $HTTP_REFERER, $REMOTE_ADDR;
  17 +
  18 + $url=parse_url($HTTP_REFERER);
  19 +
  20 + if($url["host"] != "www.steffers.org")
  21 + $this->result=system("../exec/counter ../counters/smain ".
  22 + $REMOTE_ADDR." ../sems/smain");
  23 +
  24 + if(!isset($LANG))
  25 + $LANG="de";
  26 +
  27 + if(!isset($PAGE))
  28 + $PAGE="main";
  29 + }
  30 +
  31 + function site_header() {
  32 + global $LANG, $PAGE, $PHP_SELF;
  33 +
  34 + $main=$PHP_SELF."?LANG=".$LANG."&PAGE=main";
  35 + $de=$PHP_SELF."?LANG=de&PAGE=".$PAGE;
  36 + $en=$PHP_SELF."?LANG=en&PAGE=".$PAGE;
  37 +
  38 + echo "<MAP name=\"logomap\">\n";
  39 + echo " <area shape=\"rect\" coords=\"1,71,250,94\" ";
  40 + echo "href=\"".$main."\">\n";
  41 + echo " <area shape=\"rect\" coords=\"184,47,214,64\" ";
  42 + echo "href=\"".$en."\">\n";
  43 + echo " <area shape=\"rect\" coords=\"218,47,248,64\" ";
  44 + echo "href=\"".$de."\">\n";
  45 + echo "</MAP>\n\n";
  46 +
  47 + $mfile=fopen($LANG."/menu.cfg", "r");
  48 + $head=fgets($mfile, 4096);
  49 + while(!feof($mfile)) {
  50 + $line=fgets($mfile, 4096);
  51 + while(!feof($mfile) && strcmp($line, "\n")) {
  52 + $link=explode("#", chop($line));
  53 + $this->tooltip($link[2], $link[3], $link[4], $link[5],
  54 + $link[6], $link[7], "#c9c9ff",
  55 + "#a0a0ff");
  56 +
  57 + $line=fgets($mfile, 4096);
  58 + }
  59 +
  60 + $head=fgets($mfile, 4096);
  61 + }
  62 + fclose($mfile);
  63 +
  64 + //echo $this->result."<br>\n";
  65 +
  66 + echo "<TABLE width=\"770\" border=\"0\" cellspacing=\"0\" ";
  67 + echo "cellpadding=\"0\">\n";
  68 + echo "<TR>\n";
  69 + echo " <TD class=\"header\" width=\"516\" height=\"100\">\n";
  70 + echo " <IMG src=\"images/img1.png\" border=\"0\"\n";
  71 + echo " vspace=\"0\" hspace=\"0\"\n";
  72 + echo " width=\"516\" height=\"100\"></TD>\n";
  73 + echo " <TD class=\"header\" width=\"254\" height=\"100\">\n";
  74 + echo " <IMG align=\"right\" src=\"images/img2.png\" ";
  75 + echo "border=\"0\"\n";
  76 + echo " usemap=\"#logomap\" hspace=\"0\" ";
  77 + echo "vspace=\"0\"\n";
  78 + echo " width=\"254\" height=\"100\"></TD>\n";
  79 + echo "</TR>\n";
  80 + echo "</TABLE>\n";
  81 + }
  82 +
  83 + function menu_header($text, $style) {
  84 + echo "<TR>\n";
  85 + echo " <TD colspan=\"3\" class=\"".$style."\">\n";
  86 + echo " <TABLE width=\"150\" border=\"0\" ";
  87 + echo "cellspacing=\"0\" cellpadding=\"0\">\n";
  88 + echo " <TR>\n";
  89 + echo " <TD width=\"5\">\n";
  90 + echo " <IMG src=\"images/trans.gif\"\n";
  91 + echo " width=\"5\" height=\"1\"></TD>\n";
  92 + echo " <TD width=\"145\" height=\"20\" ";
  93 + echo "valign=\"middle\">\n";
  94 + echo " <FONT class=\"menusubject\">\n";
  95 + echo " ".$text."</FONT></TD>\n";
  96 + echo " </TR>\n";
  97 + echo " </TABLE></TD>\n";
  98 + echo " <TD class=\"menuborder\" width=\"10\">\n";
  99 + echo " <IMG src=\"images/trans.gif\"\n";
  100 + echo " width=\"10\" height=\"1\"></TD>\n";
  101 + echo "</TR>\n";
  102 + }
  103 +
  104 + function menu_space($height, $bgcolor) {
  105 + echo "<TR>\n";
  106 + echo " <TD height=\"".$height."\" width=\"20\" ";
  107 + echo "bgcolor=\"".$bgcolor."\">\n";
  108 + echo " <IMG src=\"images/trans.gif\"\n";
  109 + echo " width=\"20\" height=\"1\"></TD>\n";
  110 + echo " <TD height=\"".$height."\" width=\"5\" ";
  111 + echo "bgcolor=\"".$bgcolor."\">\n";
  112 + echo " <IMG src=\"images/trans.gif\"\n";
  113 + echo " width=\"5\" height=\"1\"></TD>\n";
  114 + echo " <TD height=\"".$height."\" width=\"125\" ";
  115 + echo "bgcolor=\"".$bgcolor."\">\n";
  116 + echo " <IMG src=\"images/trans.gif\"\n";
  117 + echo " width=\"125\" height=\"1\"></TD>\n";
  118 + echo " <TD height=\"".$height."\" width=\"10\" ";
  119 + echo "class=\"menuborder\">\n";
  120 + echo " <IMG src=\"images/trans.gif\"\n";
  121 + echo " width=\"10\" height=\"1\"></TD>\n";
  122 + echo "</TR>\n";
  123 + }
  124 +
  125 + function menu_link($text, $link, $name, $num, $bgcolor) {
  126 + global $LANG, $PHP_SELF;
  127 +
  128 + if(strncmp(strtolower($link), "http://", 7) &&
  129 + strncmp(strtolower($link), "javascript:", 11))
  130 + $link=$PHP_SELF."?LANG=".$LANG."&PAGE=".$link;
  131 +
  132 + echo "<TR>\n";
  133 + echo " <TD width=\"20\" align=\"right\"\n";
  134 + echo " bgcolor=\"".$bgcolor."\" valign=\"middle\">\n";
  135 + echo " <A href=\"".$link."\" ";
  136 + echo "onMouseOver=\"javascript:tooltip_on('".$name."',".$num.");\" ";
  137 + echo "onMouseOut=\"javascript:tooltip_off('".$name."',".$num.");\">\n";
  138 + echo " <IMG src=\"images/boppel.png\" width=\"8\"\n";
  139 + echo " height=\"8\" border=\"0\"></A></TD>\n";
  140 + echo " <TD width=\"5\" bgcolor=\"".$bgcolor."\">\n";
  141 + echo " <IMG src=\"images/trans.gif\"\n";
  142 + echo " width=\"5\" height=\"1\"></TD>\n";
  143 + echo " <TD width=\"125\" align=\"left\"";
  144 + echo " bgcolor=\"".$bgcolor."\" valign=\"middle\">\n";
  145 + echo " <A href=\"".$link."\" ";
  146 + echo "onMouseOver=\"javascript:tooltip_on('".$name."',".$num.");\" ";
  147 + echo "onMouseOut=\"javascript:tooltip_off('".$name."',".$num.");\">\n";
  148 + echo $text."</A></TD>\n";
  149 + echo " <TD class=\"menuborder\" width=\"10\">\n";
  150 + echo " <IMG src=\"images/trans.gif\"\n";
  151 + echo " width=\"10\" height=\"1\"></TD>\n";
  152 + echo "</TR>\n";
  153 + }
  154 +
  155 + function tooltip($ttname, $tttext, $x, $y,
  156 + $width, $height, $bgcol, $border) {
  157 + global $LANG, $PHP_SELF;
  158 +
  159 + echo "<DIV id=\"".$ttname."\" class=\"tooltip\" ";
  160 + echo "style=\"left: ".$x."px; top: ".$y."px;\">\n";
  161 + echo "<TABLE border=\"0\" cellspacing=\"0\" ";
  162 + echo " cellpadding=\"0\">\n";
  163 + echo "<TR>\n";
  164 + echo " <TD width=\"1\" height=\"1\" ";
  165 + echo " bgcolor=\"".$border."\">\n";
  166 + echo " <IMG src=\"images/trans.gif\" width=\"1\" ";
  167 + echo " height=\"1\" border=\"0\"></TD>\n";
  168 + echo " <TD width=\"".$width."\" height=\"1\" ";
  169 + echo " bgcolor=\"".$border."\">\n";
  170 + echo " <IMG src=\"images/trans.gif\" width=\"".$width."\" ";
  171 + echo " height=\"1\" border=\"0\"></TD>\n";
  172 + echo " <TD width=\"1\" height=\"1\" ";
  173 + echo " bgcolor=\"".$border."\">\n";
  174 + echo " <IMG src=\"images/trans.gif\" width=\"1\" ";
  175 + echo " height=\"1\" border=\"0\"></TD>\n";
  176 + echo "</TR>\n";
  177 + echo "<TR>\n";
  178 + echo " <TD width=\"1\" height=\"".$height."\" ";
  179 + echo " bgcolor=\"".$border."\">\n";
  180 + echo " <IMG src=\"images/trans.gif\" width=\"1\" ";
  181 + echo " height=\"".$height."\" border=\"0\"></TD>\n";
  182 + echo " <TD width=\"".$width."\" height=\"".$height."\" ";
  183 + echo " bgcolor=\"".$bgcol."\">\n";
  184 + echo $tttext."</TD>\n";
  185 + echo " <TD width=\"1\" height=\"".$height."\" ";
  186 + echo " bgcolor=\"".$border."\">\n";
  187 + echo " <IMG src=\"images/trans.gif\" width=\"1\" ";
  188 + echo " height=\"".$height."\" border=\"0\"></TD>\n";
  189 + echo "</TR>\n";
  190 + echo "<TR>\n";
  191 + echo " <TD width=\"1\" height=\"1\" ";
  192 + echo " bgcolor=\"".$border."\">\n";
  193 + echo " <IMG src=\"images/trans.gif\" width=\"1\" ";
  194 + echo " height=\"1\" border=\"0\"></TD>\n";
  195 + echo " <TD width=\"".$width."\" height=\"1\" ";
  196 + echo " bgcolor=\"".$border."\">\n";
  197 + echo " <IMG src=\"images/trans.gif\" width=\"".$width."\" ";
  198 + echo " height=\"1\" border=\"0\"></TD>\n";
  199 + echo " <TD width=\"1\" height=\"1\" ";
  200 + echo " bgcolor=\"".$border."\">\n";
  201 + echo " <IMG src=\"images/trans.gif\" width=\"1\" ";
  202 + echo " height=\"1\" border=\"0\"></TD>\n";
  203 + echo "</TR>\n";
  204 + echo "</TABLE>\n";
  205 + echo "</DIV>\n";
  206 + }
  207 +
  208 + function menu_cinfo($text, $bgcolor) {
  209 + echo "<TR>\n";
  210 + echo " <TD colspan=\"3\" bgcolor=\"".$bgcolor."\">\n";
  211 + echo " <TABLE width=\"150\" border=\"0\" ";
  212 + echo "cellspacing=\"0\" cellpadding=\"0\">\n";
  213 + echo " <TR>\n";
  214 + echo " <TD width=\"5\">\n";
  215 + echo " <IMG src=\"images/trans.gif\"\n";
  216 + echo " width=\"5\" height=\"1\"></TD>\n";
  217 + echo " <TD width=\"145\" height=\"20\" ";
  218 + echo "valign=\"middle\">\n";
  219 + echo " <FONT class=\"copyright\">\n";
  220 + echo " Copyright &copy 2001 ";
  221 + echo "<A href=\"mailto:georg@steffers.org\">Georg Steffers</A>";
  222 + echo "<BR>&nbsp;written with <A href=\"http://www.vim.org/\">vim</a>";
  223 + echo "<BR>&nbsp;graphics created with ";
  224 + echo "<a href=\"http://www.gimp.org/\">gimp</a>";
  225 + echo "<BR><BR>\n";
  226 + echo $text."\n";
  227 + echo " </FONT></TD>\n";
  228 + echo " </TR>\n";
  229 + echo " </TABLE></TD>\n";
  230 + echo " <TD class=\"menuborder\" width=\"10\">\n";
  231 + echo " <IMG src=\"images/trans.gif\"\n";
  232 + echo " width=\"10\" height=\"1\"></TD>\n";
  233 + echo "</TR>\n";
  234 + }
  235 +
  236 + function menu_end() {
  237 + echo "<TR>\n";
  238 + echo " <TD colspan=\"3\" class=\"menubg\">\n";
  239 + echo " <TABLE width=\"150\" border=\"0\" cellspacing=\"0\"";
  240 + echo " cellpadding=\"0\">\n";
  241 + echo " <TR>\n";
  242 + echo " <TD width=\"5\">\n";
  243 + echo " <IMG src=\"images/trans.gif\"\n";
  244 + echo " width=\"5\" height=\"1\"></TD>\n";
  245 + echo " <TD width=\"145\" height=\"10\" ";
  246 + echo "valign=\"middle\">\n";
  247 + echo " <IMG src=\"images/trans.gif\"\n";
  248 + echo " width=\"145\" height=\"1\"></TD>\n";
  249 + echo " </TR>\n";
  250 + echo " </TABLE></TD>\n";
  251 + echo " <TD width=\"10\">\n";
  252 + echo " <IMG src=\"images/bow2.png\"\n";
  253 + echo " width=\"10\" height=\"10\"></TD>\n";
  254 + echo "</TR>\n";
  255 + }
  256 +
  257 + function menu() {
  258 + global $LANG;
  259 +
  260 + echo "<TABLE width=\"160\" border=\"0\" cellspacing=\"0\"";
  261 + echo " cellpadding=\"0\">\n";
  262 +
  263 + srand((double)microtime() * 1000000);
  264 +
  265 + $layernum=0;
  266 + $mfile=fopen($LANG."/menu.cfg", "r");
  267 +
  268 + $head=fgets($mfile, 4096);
  269 +
  270 + while(!feof($mfile)) {
  271 + $bgnum=rand(1,3);
  272 +
  273 + $this->menu_header($head, "menubg".$bgnum);
  274 + $this->menu_space("5", "#c9c9ff");
  275 +
  276 + $line=fgets($mfile, 4096);
  277 + while(!feof($mfile) && strcmp($line, "\n")) {
  278 + $link=explode("#", chop($line));
  279 + $this->menu_link($link[0], $link[1], $link[2],
  280 + $layernum++, "#c9c9ff");
  281 + $line=fgets($mfile, 4096);
  282 + }
  283 +
  284 + $this->menu_space("15", "#c9c9ff");
  285 + $head=fgets($mfile, 4096);
  286 + }
  287 +
  288 + fclose($mfile);
  289 +
  290 + if(!($cr=file($LANG."/copyright.txt")))
  291 + return 0;
  292 +
  293 + $cr_text="";
  294 + foreach($cr as $line)
  295 + $cr_text.=$line;
  296 +
  297 + $this->menu_cinfo($cr_text, "#c9c9ff");
  298 + $this->menu_end();
  299 +
  300 + echo "<TR>\n";
  301 + echo " <TD width=\"20\">\n";
  302 + echo " <IMG src=\"images/trans.gif\"\n";
  303 + echo " width=\"1\" height=\"1\"></TD>\n";
  304 + echo " <TD width=\"5\">\n";
  305 + echo " <IMG src=\"images/trans.gif\"\n";
  306 + echo " width=\"1\" height=\"1\"></TD>\n";
  307 + echo " <TD width=\"125\">\n";
  308 + echo " <IMG src=\"images/trans.gif\"\n";
  309 + echo " width=\"1\" height=\"1\"></TD>\n";
  310 + echo " <TD width=\"10\">\n";
  311 + echo " <IMG src=\"images/trans.gif\"\n";
  312 + echo " width=\"1\" height=\"1\"></TD>\n";
  313 + echo "</TR>\n";
  314 + echo "</TABLE>\n";
  315 + }
  316 +
  317 + function page() {
  318 + global $LANG, $PAGE;
  319 +
  320 + $page=$LANG."/".$PAGE.".inc";
  321 +
  322 + include($page);
  323 + }
  324 +
  325 + function scandir($dir, $base, $depth, $class) {
  326 + $d=dir($dir);
  327 + $dircount=0;
  328 + $filecount=0;
  329 + $width=20;
  330 + $tgif="images/trans.gif";
  331 + $filepics["gz"]="fileselpics/gnome-package.png";
  332 + $filepics["tar"]="fileselpics/gnome-package.png";
  333 + $filepics["tgz"]="fileselpics/gnome-package.png";
  334 + $filepics["inc"]="fileselpics/gnome-html.png";
  335 + $filepics["html"]="fileselpics/gnome-html.png";
  336 + $filepics["htm"]="fileselpics/gnome-html.png";
  337 + $filepics["php"]="fileselpics/gnome-html.png";
  338 + $filepics["css"]="fileselpics/gnome-html.png";
  339 + $filepics["c"]="fileselpics/gnome-file-c.png";
  340 + $filepics["cpp"]="fileselpics/gnome-file-c.png";
  341 + $filepics["h"]="fileselpics/gnome-file-h.png";
  342 + $filepics["png"]="fileselpics/gnome-graphics.png";
  343 + $filepics["gif"]="fileselpics/gnome-graphics.png";
  344 + $filepics["jpg"]="fileselpics/gnome-graphics.png";
  345 +
  346 + while($entry=$d->read()) {
  347 + if($entry!="." && $entry!="..") {
  348 + if(is_dir($dir.$entry))
  349 + $dirs[$dircount++]=$entry;
  350 + else
  351 + $files[$filecount++]=$entry;
  352 + }
  353 + }
  354 + $d->close();
  355 +
  356 + $tmp=str_replace(".", "&fs", $dir);
  357 + $id_base=str_replace("/", "", $tmp);
  358 +
  359 + $recall="";
  360 + $recall_a=explode("/", $tmp);
  361 + for($i=0; $i<count($recall_a)-2; $i++)
  362 + $recall.=$recall_a[$i];
  363 +
  364 + $recall=$recall."_".$recall_a[count($recall_a)-2];
  365 +
  366 + if($dir != $base) {
  367 + echo "<div name=\"".$id_base."_#\" id=\"".$id_base."_#\"";
  368 + echo " class=\"".$class."\">\n";
  369 + echo "<table width=\"200\" border=\"0\" cellspacing=\"0\"";
  370 + echo " cellpadding=\"0\">\n";
  371 + echo "<tr>\n";
  372 + echo " <td width=\"".(($depth-1)*$width)."\"";
  373 + echo " height=\"".$width."\">\n";
  374 + echo " <img src=\"".$tgif."\"";
  375 + echo " width=\"".(($depth-1)*$width)."\"";
  376 + echo " height=\"".$width."\"></td>\n";
  377 + echo " <td width=\"".$width."\"";
  378 + echo " height=\"".$width."\">\n";
  379 + echo " <img src=\"fileselpics/gnome-folder.png\"";
  380 + echo " width=\"".$width."\"";
  381 + echo " height=\"".$width."\"></td>\n";
  382 + echo " <td width=\"".(200-(($depth-1)*$width)-$width)."\"";
  383 + echo " height=\"".$width."\">\n";
  384 + echo " <a class=\"dir\" href=\"javascript: ";
  385 + echo " hidedir(/".$id_base.".+/, /".$recall."$/);\">\n";
  386 + echo " <b>".$recall_a[count($recall_a)-2]."</b>";
  387 + echo " </a></td>\n";
  388 + echo "</tr>\n";
  389 + echo "</table></div>\n";
  390 + }
  391 +
  392 + if(isset($dirs)) {
  393 + sort($dirs);
  394 +
  395 + foreach($dirs as $entry) {
  396 + $id=$id_base."_".$entry;
  397 +
  398 + echo "<div name=\"".$id."\" id=\"".$id."\"";
  399 + echo " class=\"".$class."\">\n";
  400 + echo "<table width=\"200\" border=\"0\"";
  401 + echo " cellspacing=\"0\" cellpadding=\"0\">\n";
  402 + echo "<tr>\n";
  403 + echo " <td width=\"".($depth*$width)."\"";
  404 + echo " height=\"".$width."\">\n";
  405 + echo " <img src=\"".$tgif."\"";
  406 + echo " width=\"".($depth*$width)."\"";
  407 + echo " height=\"".$width."\"></td>\n";
  408 + echo " <td width=\"".$width."\"";
  409 + echo " height=\"".$width."\">\n";
  410 + echo " <img src=\"fileselpics/gnome-folder-close.png\"";
  411 + echo " width=\"".$width."\"";
  412 + echo " height=\"".$width."\"></td>\n";
  413 + echo " <td width=\"".(200-($depth*$width))."\"";
  414 + echo " height=\"".$width."\">\n";
  415 + echo " <a class=\"dir\" href=\"javascript:";
  416 + echo " showdir(/".$id_base.$entry."_.+/, /".$id."$/);\">\n";
  417 + echo " <b>".$entry."</b></a></td>\n";
  418 + echo "</tr>\n";
  419 + echo "</table></div>\n";
  420 +
  421 + $this->scandir($dir.$entry."/", $base, $depth+1, "invis");
  422 + }
  423 + }
  424 +
  425 + if(isset($files)) {
  426 + sort($files);
  427 + $id=$id_base."_files";
  428 +
  429 + echo "<div name=\"".$id."\" id=\"".$id."\"";
  430 + echo " class=\"".$class."\">\n";
  431 +
  432 + foreach($files as $file) {
  433 + $img=$filepics[substr($file, strrpos($file, ".")+1)];
  434 +
  435 + if(!isset($img))
  436 + $img="fileselpics/gnome-textfile.png";
  437 +
  438 + echo "<table width=\"200\" border=\"0\"";
  439 + echo " cellspacing=\"0\" ";
  440 + echo " cellpadding=\"0\">\n";
  441 + echo "<tr>\n";
  442 + echo " <td width=\"".($depth*$width)."\"";
  443 + echo " height=\"".$width."\">\n";
  444 + echo " <img src=\"".$tgif."\"";
  445 + echo " width=\"".($depth*$width)."\"";
  446 + echo " height=\"".$width."\"></td>\n";
  447 + echo " <td width=\"".$width."\"";
  448 + echo " height=\"".$width."\">\n";
  449 + echo " <img src=\"".$img."\" width=\"".$width."\"";
  450 + echo " height=\"".$width."\"></td>\n";
  451 + echo " <td width=\"".(200-($depth*$width))."\"";
  452 + echo " height=\"15\">\n";
  453 + echo " <font class=\"file\">\n";
  454 + echo $file."<br>\n";
  455 + echo " </font></td>\n";
  456 + echo "</tr>\n";
  457 + echo "</table>";
  458 + }
  459 +
  460 + echo "</div>\n";
  461 + }
  462 + }
  463 + }
  464 + }
  465 +?>
  1 +<html>
  2 +<head></head>
  3 +<body>
  4 +<?
  5 + /*dl("imlib.so");
  6 +
  7 + $img1=imlib_load_image("images/img1.png");
  8 +
  9 + echo imlib_get_image_width($img1)."<br>\n";
  10 +
  11 + imlib_free_image($img1);*/
  12 +
  13 + //passthru("ls -ld /usr/local/lib/php/extensions/no-debug-non-zts-20001222");
  14 + nl2br(passthru("ls -l /usr/local/lib/php"));
  15 + //passthru("md /usr/local/lib/php/extensions");
  16 + //passthru("set");
  17 +
  18 + //phpinfo();
  19 +?>
  20 +</body>
  21 +</html>
  1 +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
  2 +<HTML>
  3 + <HEAD>
  4 + <TITLE>Steffers Workroom</TITLE>
  5 +
  6 + <META name="keywords" lang="de"
  7 + content="Programmierung, programmierung, programmieren, 3D, 3d, 3D-Grafik, 3D-grafik, Grafik, grafik, Java, java, C/C++, C, C++, Dokumentation, Dokumentationen">
  8 + <META name="keywords" lang="en"
  9 + content="programming, 3D, 3D-graphics, graphics, Java, java, C/C++, C, C++, documentation, documentations">
  10 + <META name="description" lang="de"
  11 + content="Der Anfang einer kompletten Einf&uuml;hrung in C/C++ programmierung. Sie soll alle Aspekte der Programmierung unter C, C++ und Java behandeln und in einer kleine Applikation enden, die den Anfang einer 3D-Engine bildet.">
  12 + <META name="description" lang="en"
  13 + content="The beginning of a complete introduction in C/C++ programming. It should cover all aspects of programming in C, C++ and Java and result in a small application, that is the beginning of a small 3D-engine.">
  14 +
  15 + <META name="author"
  16 + content="Georg Steffers">
  17 + <META name="robots"
  18 + content="index,follow">
  19 + <META name="date"
  20 + content="2001-02-26T23:00:00+01:00">
  21 +
  22 + <META http-equiv="keywords"
  23 + content="programming, 3D, 3D-graphics, graphics, Java, java, C/C++, C, C++, documentation, documentations">
  24 + <META http-equiv="description"
  25 + content="The beginning of a complete introduction in C/C++ programming. It should cover all aspects of programming in C, C++ and Java and result in a small application, that is the beginning of a small 3D-engine.">
  26 + <META http-equiv="Content-Type"
  27 + content="text/html">
  28 +
  29 + <BASE HREF="http://www.steffers.org/smain/">
  30 +
  31 + <LINK rev=made href="mailto:steffers@iname.com">
  32 + <LINK rel="stylesheet" href="css/style.css">
  33 +
  34 + <SCRIPT language=JavaScript1.2>
  35 + function reload_cam()
  36 + {
  37 + var im;
  38 +
  39 + im="http://www.steffers.org/smain/images/dcam.jpg";
  40 + im+="?"+Math.floor(100000*Math.random()+1);
  41 + document.cam.src = im;
  42 + setTimeout("reload_cam()", 30000);
  43 + }
  44 + function loaded() {
  45 + reload_cam();
  46 + }
  47 + </SCRIPT>
  48 + </HEAD>
  49 +
  50 + <BODY bgcolor="#FFFFFF" onLoad="javascript:loaded()">
  51 + <CENTER>
  52 + steffers@work (live)<br>
  53 + <IMG src="http://www.steffers.org/smain/images/dcam.jpg"
  54 + name=cam><br><br>
  55 + <A href="javaScript:self.close()">
  56 + <DIV align="right"><B>
  57 + <?
  58 + if($LANG=="de")
  59 + echo "schlie&szlig;en";
  60 + else
  61 + echo "close";
  62 + ?>
  63 + </B></DIV>
  64 + </A>
  65 + </CENTER>
  66 + </BODY>
  67 +</HTML>
Please register or login to post a comment