Showing
55 changed files
with
2012 additions
and
0 deletions
classes/precalc.class
0 → 100755
No preview for this file type
classes/test.class
0 → 100755
No preview for this file type
classes/triangle.class
0 → 100755
No preview for this file type
classes/vertex.class
0 → 100755
No preview for this file type
css/style.css
0 → 100755
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 | +} | ... | ... |
de/copyright.txt
0 → 100755
1 | +Diese Seiten wurden für <A href="http://www.mozilla.org/">mozilla</A> | |
2 | +bei einer Auflö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. | ... | ... |
de/gtkclmon.inc
0 → 100755
1 | +<TABLE width="595" border="0" cellspacing="0" cellpadding="0"> | |
2 | +<TR> | |
3 | + <TD> | |
4 | + Ein Projekt, das ich für einen Ex-Arbeitgeber von mir angefangen | |
5 | + hatte...seit ich diesen verlassen habe schlä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ür mich mehr | |
10 | + über GTK, Socketprogrammierung und threads zu lernen.<BR> | |
11 | + Das Programm ist noch nicht fertig aber vielleicht findet es | |
12 | + irgendjemand nü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ä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ür user, Blau für | |
26 | + system und Grün für idle. Ist der node down oder | |
27 | + nicht online (oder mein Server läft nicht) dann ist der | |
28 | + Balken Schwarz. Clickt man auf einen Button bekommt man ein | |
29 | + Popup-Menü ü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äft oder nicht evtl. Dinge beschädigt. Allerdings läuft | |
36 | + es bei mir gut und hat noch nichts beschä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ß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ümmern (vielleicht in Zukunft nochmal wieder) und | |
44 | + es währe eine Schande die ganze Arbeit die ich da schon | |
45 | + reingesteckt habe wegzuschmeiß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ß....(oder Frustration..Entschuldigung) | |
50 | + </TD> | |
51 | +</TR> | |
52 | +</TABLE> | ... | ... |
de/info.inc
0 → 100755
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önnte | |
5 | + langweilig sein):<BR><BR> | |
6 | + | |
7 | + Name: Georg Steffers<BR> | |
8 | + Geburtstag: 15.12.1973 (Geschenke immer willkommen)<BR> | |
9 | + Wohnort: Münster<BR> | |
10 | + <BR> | |
11 | + Ich wurde in einem kleinen Ort in Nord-NRW, Ochtrup geboren. Das | |
12 | + liegt in der nähe vom Mü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ß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ß daran | |
17 | + gefunden. Also bin ich an einen Schule für angewandte Informatik | |
18 | + gegangen um eine Ausbildung zum staatlich geprüften | |
19 | + Informatikassistent Softwaretechnologie zu machen. Diese Schule war | |
20 | + das B.I.B in Bergisch-Gladbach nahe Köln. | |
21 | + Wärend meiner Ausbildung dort hatte ich ne Menge Spass, sowohl was | |
22 | + die Ausbildung betrifft als auch wegen der nähe zu Kö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ück nach Münster gezogen. Im Moment arbeite ich bei | |
26 | + einer Webagentur in Emsdetten (deltacity.NET). Da programmiere ich | |
27 | + alles was so anfällt in C/C++, Perl, PHP, Java, JavaScript, HTML, SQL | |
28 | + und was noch so anfä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> | ... | ... |
de/main.inc
0 → 100755
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ß 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ä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ügung stellen zu können. | |
13 | + So plane ich zum Beispiel eine Newsbereich. Trotzdem sind diese Seite | |
14 | + eine reine private Tätigkeit von mir und deshalb gibt es keine | |
15 | + Garantie für regelmäßige updates.<BR> Ich stelle alle | |
16 | + Dateien aus denen sich dieser Auftritt aufbaut | |
17 | + zum download für jeden der daran Interesse hat zur | |
18 | + verfü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ür | |
21 | + viele Leute sind. | |
22 | + </TD> | |
23 | +</TR> | |
24 | +</TABLE> | ... | ... |
de/menu.cfg
0 → 100755
1 | +Dokumentation | |
2 | +Zeiger in C/C++#zeiger#zeiger#Eine Einführung zu Zeigern in C/C++#120#80#100#50 | |
3 | + | |
4 | +Projekte | |
5 | +Clustermonitor#gtkclmon#gtkclmon#Ein Programm zur überwachung eines Rechner-Clusters#120#125#100#50 | |
6 | +3D-Grafik / Java#show3d#show3d#eine Studie ü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önliches | |
11 | +News#news#news#aktuelle Neuigkeiten#120#235#70#30 | |
12 | +Über mich#info#info#eine kurze persönliche Info ü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ü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 | ... | ... |
de/news.inc
0 → 100755
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ür habe ich einen Fileselector mit hilfe von | |
10 | + PHP, Javascript und <DIV>-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üpunkt. Das war ne | |
36 | + Sauarbeit, weil man fü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ß aber leider nicht warum. | |
40 | + Wer da ne Idee hat möchte sich doch bitte bei mir melden, damit | |
41 | + ich das endlich hinbekomme, danke.</TD> | |
42 | +</TR> | |
43 | +</TABLE> | ... | ... |
de/show3d.inc
0 → 100755
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ür Webseite in Java geschrieben. Wenn es fertig ist soll es | |
6 | + eine Menge Vertexe in einem Kugelfö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ß aktiviert sein um hier etwas sehen zu kö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ä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ächst eine Dokumentation über das zu schreiben, | |
50 | + was ich biher an 3D-Grafikprogrammierung in diesem Applet umgesetzt | |
51 | + habe. | |
52 | + </TD> | |
53 | +</TR> | |
54 | +</TABLE> | ... | ... |
de/source.inc
0 → 100755
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> | |
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"> 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> | ... | ... |
de/zeiger.inc
0 → 100755
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 <<Datentypen>> 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 <<Adresse>> 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 <<erste>> als char */ | |
194 | + char zweite; /* Deklariert die Variable <<zweite>> 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 <<erste>> ein Synonym fuer Adresse 5 im | |
250 | + Speicher und <<zweite>> 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 <<erste>> als char */ | |
405 | + char zweite; /* Deklariert die Variable <<zweite>> 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 <<zeiger>> | |
506 | + der Adresse von <<erste>> entspricht.<br> | |
507 | + Wie oben bereits erwaehnt waere es jetzt sinnvoll, wenn man ueber | |
508 | + <<zeiger>> auch irgendwie an den Wert von | |
509 | + <<erste>> 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 | + <<erste>> zu kommen kann man <<*zeiger>> | |
513 | + schreiben. Das nennt man dereferenzieren. Das Wort kommt daher, das | |
514 | + <<zeiger>> eine Referenz auf <<erste>> 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 <<*zeiger>> identisch mit | |
571 | + <<erste>> 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 | + <<segmentation fault>> oder <<overflow error>> | |
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 | + <<*zeiger>> 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> | ... | ... |
en/copyright.txt
0 → 100755
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. | ... | ... |
en/gtkclmon.inc
0 → 100755
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> | ... | ... |
en/info.inc
0 → 100755
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ü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ü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ü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> | ... | ... |
en/main.inc
0 → 100755
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> | ... | ... |
en/menu.cfg
0 → 100755
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 | ... | ... |
en/news.inc
0 → 100755
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 <DIV>-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> | ... | ... |
en/show3d.inc
0 → 100755
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> | ... | ... |
en/source.inc
0 → 100755
en/zeiger.inc
0 → 100755
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> | ... | ... |
fileselpics/gnome-file-c.png
0 → 100755
875 Bytes
fileselpics/gnome-file-h.png
0 → 100755
880 Bytes
fileselpics/gnome-folder-close.png
0 → 100755
698 Bytes
fileselpics/gnome-folder.png
0 → 100755
892 Bytes
fileselpics/gnome-graphics.png
0 → 100755
1.02 KB
fileselpics/gnome-html.png
0 → 100755
1.08 KB
fileselpics/gnome-package.png
0 → 100755
928 Bytes
fileselpics/gnome-textfile.png
0 → 100755
767 Bytes
images/boppel.png
0 → 100755
366 Bytes
images/bow.png
0 → 100755
239 Bytes
images/bow2.png
0 → 100755
212 Bytes
images/dcam.jpg
0 → 100755
52.9 KB
images/gaensebl.png
0 → 100755
2.85 KB
images/img1.png
0 → 100755
37.8 KB
images/img2.png
0 → 100755
3.05 KB
images/maintop.png
0 → 100755
212 Bytes
images/maintopbg.png
0 → 100755
151 Bytes
images/menubg.png
0 → 100755
353 Bytes
images/menubg1.png
0 → 100755
777 Bytes
images/menubg2.png
0 → 100755
763 Bytes
images/menubg3.png
0 → 100755
1013 Bytes
images/menurborder.png
0 → 100755
147 Bytes
images/screenshot.jpg
0 → 100755
76.5 KB
images/test/XDisplay.h
0 → 100755
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__*/ | ... | ... |
images/testimlib.php
0 → 100755
images/topbg.png
0 → 100755
159 Bytes
images/trans.gif
0 → 100755
43 Bytes
images/uploading.jpg
0 → 100755
index.php
0 → 100755
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ü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"> </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> </TD> | |
150 | + </TR> | |
151 | + </TABLE> | |
152 | + </BODY> | |
153 | +</HTML> | ... | ... |
php/base.inc
0 → 100755
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 © 2001 "; | |
221 | + echo "<A href=\"mailto:georg@steffers.org\">Georg Steffers</A>"; | |
222 | + echo "<BR> written with <A href=\"http://www.vim.org/\">vim</a>"; | |
223 | + echo "<BR> 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 | +?> | ... | ... |
testimlib.php
0 → 100755
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> | ... | ... |
webcam.php
0 → 100755
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ü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ß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