1

(21 Antworten, geschrieben in Devshare Plausch)

naja, mein gentoo hier funktioniert besser als mein slackware. cool sollte das bedeuten (eines meiner universal-wörter). und leet bin ich nicht. und jetz nutz ich mal meinen prozessor *g* (system updaten)

2

(47 Antworten, geschrieben in JavaScript - Allgemeines)

@matho:

Nun hat mir Manphil gesagt, dass er das nicht schön findet, weil man nicht beim ahover die Adresse iim Status sehen kann.


ok, ich hab mich verlesen
nichtsdestotrotz find ich, animation gehört auf keine webseite.
irgendwie war dein posting nicht viel konstruktiver als meins *g*

3

(21 Antworten, geschrieben in Devshare Plausch)

bzw. die cdrtools 2.0 können auch ohne scsiemu
mein favorit ist - ich habs nämlich - gentoo (slackware is nich so cool)

4

(47 Antworten, geschrieben in JavaScript - Allgemeines)

<einwurf>
... und sich fragen, ob der ganze bloat nötig is ...
</einwurf>

@sometimes2: Ich meinte, dass das scheiß viel kostet (sorry).

6

(13 Antworten, geschrieben in JavaScript - Hilfe)

Wieso machst du nicht 3 select boxen, von denen du immer eine ausblendest? *dumm-frag*

lass doch die kopierschutz scheiße. das lohnt sich wirklich nicht. geht ja nicht gerade um 100.000 Euro.

8

(23 Antworten, geschrieben in PHP)

@Basti: Ich muss doch wohl nicht immer konstruktiv sein?
@Tink: Jo, weiß ich. Bin ja nich blind. Wollte nur klarmachen, dass Templates nicht nur das sind, was ihr unter ihnen versteht. Und dann wollte ich natürlich auch noch verwirren <img src="/forum/images/graemlins/laugh.gif" alt="" />.

9

(23 Antworten, geschrieben in PHP)

Na, das kann ja nich so stehen bleiben... War PHP nicht eigentlich selbst eine Sprache für Templates? Templates... darunter verstehe ich sowas:

 template<class T, class Y = type_traits<T> > Y::iterator func(Y::iterator start, Y::iterator end, Y::arg v); 

edit: ok, ok, das geht zwar nicht soo gut, aber das:

template<class T, class Y = type_traits<T> > struct F { static Y::iterator func(Y::iterator start, Y::iterator end, Y::arg v);  }; 

10

(2 Antworten, geschrieben in CGI)

Ich nehme mal an, das ist nicht auf Anhieb verständlich. Deshalb erklär ich es mal:

Es gibt eine Klasse CgiIn und eine Funktion apply_template. Zunächts das einfachere, apply_template: Es gibt den übergebenen String mit ersetzten Templates an einen Stream. Die Templates (keine berühmt-berüchtigten von mir so geliebten C++ Templates) funktionieren so: Normal werden die Buchstaben einfach durchgegeben. Wird jedoch ein $number[$] angetroffen, so wird durch den entsprechenden Text ersetzt.

Interessanter ist da schon die Klasse CgiIn. Ihr Konstruktor ist in zwei Phasen aufgeteilt: Lesen und Parsen. In der Lese-Phase werden die vom CGI-Layer übergebenen Daten in die Variable input gespeichert. In der zweiten Phase werden dann die name=value Paare mit ihrer Nummer gespeichert. (Um die Zugriffszeiten zu verkürzen, habe ich festgelegt, dass auf die Namen mit Nummern zugegriffen wird).
Na das war jetzt ziemlich viel auf wenig Text. Kommt davon, wenn man schreibfaul ist.

11

(2 Antworten, geschrieben in CGI)

Dann gibts da  noch:

template.h

#ifndef TEMPLATE_H
 #define TEMPLATE_H
 #include <ostream>
 #include <cstdlib>
 void apply_template(std::ostream &, const char *, const char **, std::size_t);
 #endif
 

template.cpp

#include <ostream>
 #include <cstdlib>
 #include <stdexcept>
 #include <cctype>
 
 using namespace std;
  
 void apply_template(ostream &stream, const char *tmpl, const char **replacements, size_t n) {
     while (*tmpl) {
         if (*tmpl == '$' && *++tmpl != '$') {
             int v = 0;
             while (isdigit(*tmpl))
                 v = *tmpl++ - '0' + v * 10;
             
             if (*tmpl == '$')
                 ++tmpl;
             
             if (v < n)
                 stream << replacements[v];
             else
                 throw out_of_range("Too high number in template()");
         } else
             stream << *tmpl++;
     }
 }
 

c++bb.cpp

#include <iostream>
 #include <stdexcept>
 #include "cgiin.h"
 #include "template.h"
 
 using namespace std;
 
 int main() {
     cout << "Content-type: text/html" << endl << endl;
     const char *n[1] = { "a" }, *k[1];
     CgiIn cgi(n, 1);
     *k = cgi.get(0);
     apply_template(cout, "<a href="c++bb?a=$0X">$0$1</a>", k, 1);
 }
 

Makefile

CXX = g++
 CXXFLAGS = -g -pipe
 
 all: c++bb
 
 clean:
     rm *.o c++bb
 
 redo: clean all
 
 c++bb: c++bb.o cgiin.o template.o
     $(CXX) $(CXXFLAGS) -o c++bb c++bb.o cgiin.o template.o
 
 c++bb.o: c++bb.cpp
     $(CXX) $(CXXFLAGS) -o c++bb.o -c c++bb.cpp
 
 cgiin.o: cgiin.cpp
     $(CXX) $(CXXFLAGS) -o cgiin.o -c cgiin.cpp
 
 template.o: template.cpp
     $(CXX) $(CXXFLAGS) -o template.o -c template.cpp
 
 c++bb.cpp: cgiin.h template.h
 
 cgiin.cpp: cgiin.h
 
 template.cpp:
 

12

(6 Antworten, geschrieben in CSS)

Weil das Ganze aber aus der Datenbank kommt, kann ich keine Grafiken einsetzen, sonder muss auf Text zurückgreifen.

Den Satz kann ich nicht nachvollziehen.

13

(14 Antworten, geschrieben in Perl)

Hier isses:
http://www.devshare.de/forum/showflat.p … #Post34523

14

(2 Antworten, geschrieben in CGI)

Als alter  C++ Fan:

cgiin.h:
 

#ifndef CGIIN_H
 
 #include <cstdlib>
 
 class CgiIn {
     const char **names;
     const char **values;
     int number;
     char *input;
     static const char * const TRUE, * const EMPTY;
 public:
     /*
     CgiIn::CgiIn(const char **, size_t)
 
     This is the constructor for our CgiIn object. It takes two parameters:
     - a list of strings
     - the size of the list
     This list contains the recognized names.
     */
     CgiIn(const char **s, std::size_t n);
 
     ~CgiIn() { 
         delete [] input; 
         delete [] values;
     }
     const char *get(int i) const { 
         return values[i] ? values[i] : EMPTY; 
     }
     const char *operator[](int i) const { return values[i]; }
 private:
     void readInput();
     void parseInput();
     CgiIn(const CgiIn &) {}
 };
 
 #endif
  

cgiin.cpp:
   

#include <stdexcept>
 #include <iostream>
 #include <cstdlib>
 #include <cstring>
 #include <cstdio>
 #include <cctype>
 #include "cgiin.h"
 
 using namespace std;
 
 const char * const CgiIn::TRUE = "TRUE";
 const char * const CgiIn::EMPTY = "";
 
 namespace {
     inline int hexval(char c) {
         c = toupper(c);
         if (c >= '0' && c <= '9')
             return c - '0';
         else
             return c - 'A' + 10;
     }
 
     void unescape(char *in) {
         char *buf = in;
         while (*in) 
             switch (*in) {
             case '%':
                 *buf++ = hexval(in[1]) * 16 + hexval(in[2]);
                 in += 3;    
                 break;
             case '+':
                 *buf++ = ' ';
                 ++in;
                 break;
             default:
                 *buf++ = *in++;
             }
         *buf = 0;
     }
 }
 
 CgiIn::CgiIn(const char **s, size_t n) 
 : names(s), values(new const char *[n]), number(n) {
     for (int i = 0; i < number; ++i)
         values[i] = 0;
     readInput();
     parseInput();
 }
 
 /*
 [private] CgiIn::readInput
 
 This reads in the CGI data.
 */
 void CgiIn::readInput() {
     const char *meth_s = getenv("REQUEST_METHOD");
 
         if (meth_s == 0)
                 throw runtime_error("Invocation in non-CGI context");
 
         enum { GET, POST } method =
                 strcmp(meth_s, "GET") == 0 ? GET : POST;
 
         if (method == GET) {
                 const char *query = getenv("QUERY_STRING");
                 input = new char[strlen(query)];
                 strcpy(input, query);
         } else if (method == POST) {
                 int len = atoi(getenv("CONTENT_LENGTH"));
                 input = new char[len+1];
                 fread(input, 1, len, stdin);
         input[len] = 0;
         }
 }
 
 /*
 [private] CgiIn::parseInput()
 
 This function parses the member input of the form:
 name=value&name2=value2&name3
 
 The first token is a name. If there is a '=' appended, the next token is considered
 a value otherwise a name. If there is a '&' then the next token is considered a name
 etcetera.
 */
 void CgiIn::parseInput() {
     enum mode_t { NAME, VALUE } mode = NAME;
     char *p = input;
     int val;
 
     while (*p) {
         char *begin = p; 
 
         // Read in one token
         while (*p != '&' && *p != '=' && *p)
             ++p;
 
         enum mode_t next_mode = 
             (*p == '&' || *p == 0) ? NAME : VALUE;
 
         *p++ = 0;
 
         unescape(begin);
 
         if (mode == NAME) { // a name
             // Find the index of the string.
             val = -1;
             for (int i = 0; i < number; i++) 
                 if (strncmp(names[i], begin, p - begin) == 0) {
                     val = i;
                     break;
                 }
 
             // If the next mode is NAME, then remember that the name
             // was found.
             if (next_mode == NAME && val != -1) 
                 values[val] = TRUE;
         } else if (val != -1) // a value
             values[val] = begin;
 
         mode = next_mode;
     }
 }
  

das fürs erste

15

(31 Antworten, geschrieben in Devshare Plausch)

kann alles an meinem alten Browser liegen - NS 4.75

  <img src="/forum/images/graemlins/shocked.gif" alt="" /> Rechner zu lahm für NS 7?

16

(14 Antworten, geschrieben in Perl)

@whitehouse: na das brauch ich ja da nicht *g* ... machs konstruktiv und erweitere es für einen Dateiupload ;o)

Wenn du mir multipart/form-data erklärst... <img src="/forum/images/graemlins/wink.gif" alt="" />
Ausserdem mach ich das (kann zwar auch etwas Perl - für nen C++'ler ziemlich gut <img src="/forum/images/graemlins/wink.gif" alt="" />) lieber in C++.
PS: Kannst ja sehen, wie sowas in C++ aussieht...

17

(14 Antworten, geschrieben in Perl)

Sollte das hier nicht nach CGI? *g*
@Hannes: <destruktiv> Du hast multipart/form-data vergessen... </>

18

(31 Antworten, geschrieben in Devshare Plausch)

Schon viel besser (h40b80)...
  [color="red"]H[/color][color="green"]a[/color][color="blue"]l[/color][color="orange"]l[/color][color="yellow"]o[/color]! <img src="/forum/images/graemlins/grin.gif" alt="" />

19

(0 Antworten, geschrieben in CGI)

Oder wie das genau heisst. Programmier grad ne kleine CGI-Library in C++ und die sollte das wohl auch können. Nur: Wie funktioniert "multipart/formdata"? <img src="/forum/images/graemlins/confused.gif" alt="" />

20

(31 Antworten, geschrieben in Devshare Plausch)

Neues Board neues Glück *g*. Nur das Eingabefenster is n bissl klein *g*. Und die Smilies...

21

(9 Antworten, geschrieben in Devshare Plausch)

@gi: Dein erster Beitrag war ja mal wirklich zynisch. Das gefällt mir *g*.

22

(5 Antworten, geschrieben in Siteseeing)

OK *fg*: Beim Starten kommt ne Fehlermeldung  <img border="0" title="" alt="[Ha!]" src="images/icons/tongue.gif" />

23

(3 Antworten, geschrieben in Devshare Plausch)

dito die 2.
aber brauchst ja nich gleich schreien  <img border="0" title="" alt="[Winken]" src="images/icons/wink.gif" />

24

(7 Antworten, geschrieben in Algorithmen)

@wintelknecht: Bin auf dreckiges C++ umgestiegen.  <img border="0" title="" alt="[Breites Grinsen]" src="images/icons/grin.gif" />

25

(7 Antworten, geschrieben in Algorithmen)

Schau mal nach Newtons Annäherungsverfahren.