Ergebnis 1 bis 5 von 5
  1. #1
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard CfgParser v2.0

    Mein zweiter Config-Parser. (der erste sollte hier irgendwo noch rumschwirren, ist aber schon relativ alt...)

    Ich weiß es gibt Bibliotheken für soetwas, aber ich mache mir mein Zeug lieber selbst

    Die Syntax ist wie folgt:

    Kommentare:
    ... können ähnlich wie in PHP mit

    1. /* C Stil */
    2. // C++ Stil
    3. # Perl Stil

    eingeleitet werden.
    Die Kommentare 2. und 3. werden mit einem Zeilenumbruch beendet.
    1. wird durch */ beendet und kann theoretisch über mehrere Zeilen gehen.

    Einträge:
    ... können wie folgt getätigt werden:
    1 Bezeichner 1 = 123 Wert 123
    Die blauen Zahlen bezeichnen mögliche Orte für Kommentare.
    Dort können Kommentare stehen, müssen aber nicht.
    An den Stellen, an denen nur eine eins steht ist nur ein Block-Kommentar möglich. Wo 123 steht, sind alle Kommentare möglich.
    Die Bereiche nach dem "ist-gleich-Zeichen" (=) sind optional.

    Das Bezeichner-Feld:
    Hier stehen folgende Zeichen zur Verfügung:
    Code:
    abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_
    Das heißt: a-z + A-Z + 0-9 + _ (Unterstrich)
    Dieses Feld kann maximal 30 Zeichen lang sein.

    Das Werte-Feld:
    Hier werden 3 Typen unterschieden:

    1. String / Zeichenkette
    2. vorzeichenbehaftete Zahl (signed int)
    3. Leer / Nichts

    Ein String kann folgende Zeichen enthalten:
    Code:
    abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789^°!\"§$%&/()=?`´²³{[]}\\@€~|µüÜöÖäÄ+*#'-_.:,;<>\t\v\a\b\f
    (C-Syntax: \t steht z.B. für einen Tabulator)
    Er kann maximal 512 Bytes (1/2 KB) groß sein.

    Will man Leerzeichen benutzen muss der String in einfachen bzw. doppelten Anführungszeichen (' bzw. ") stehen.

    Eine Zahl kann entweder in oktaler, dezimaler, oder hexadezimaler Form angegeben werden.
    Normalerweise wird die dezimale Form angenommen.
    Um eine Oktalzahl zu schreiben wird der Zahl eine 0 vorausgestellt.
    Um eine Hexadezimalzahl zu schreiben wird der Zahl ein 0x vorausgestellt.
    Die Zahlen sind durch die Größe eines vorzeichenbehafteten Integers (signed int) begrenzt.
    Hier einige Beispiele:
    Code:
    mydec = 1010
    myhex = 0xBEEF
    myoct = 044535
    Ein leerer Eintrag wird erzeugt, indem man nach dem "ist-gleich-Zeichen" einen Zeilenumbruch einfügt, oder einen der folgenden Werte hinschreibt:
    '', "", None, Empty, Null
    Groß- bzw. Kleinschreibung wird hierbei nicht beachtet.

    Benutzung:
    Um den Parser benutzen zu können muss man cfgparser.c zu seinem Projekt hinzufügen und cfgparser.h inkludieren.
    Anschließend ruft man die Funktion cfgp_parse auf.
    Ihr übergibt man den Dateinamen als ersten und eine "Callback-Funktion" als zweiten Parameter.

    Die "Callback-Funktion" besitzt folgenden Funktionsprototypen:
    Code:
    void cfgp_callback(char *name, void *value, int type)
    Name ist hierbei der Bezeichner (siehe oben) und value ein Zeiger auf den Wert.
    Von welchem Typ dieser Zeiger ist wird durch den Parameter type beschrieben.
    Mögliche Werte für type sind:
    Code:
    #define CFGP_TYPE_INTEGER 0
    #define CFGP_TYPE_STRING 1
    #define CFGP_TYPE_EMPTY 2
    (siehe cfgparser.h)

    Im Fall von CFGP_TYPE_INTEGER ist value ein Zeiger auf einen signed int.
    Für CFGP_TYPE_STRING ist value ein Zeiger auf einen char (char * - nicht char **).
    Bei CFGP_TYPE_EMPTY ist value uninteressant und wird auf 0 gesetzt.

    Der Rückgabewert von cfg_parse ist ein Integer, welcher im Erfolgsfall CFGP_SUCCESS (0) entspricht.
    Ist ein Fehler vorhanden wird (FEHLERCODE | ZEILE) zurückgegeben (| = Bitweises einschließendes ODER).

    Der Fehlercode kann mit dem Makro CFGP_ERROR_GET_CODE(x) extrahiert werden. Als Parameter wird der Rückgabewert angenommen.

    Das Makro CFGP_ERROR_GET_LINE(x) nimmt ebenfalls den Rückgabewert von cfgp_parse als Parameter, gibt hingegen die Zeile zurück, in der der Fehler aufgetreten ist.

    Ein Beispiel hierfür kann unten zusammen mit den anderen Sourcecodes gedownloadet werden.

    PS: dieses Verfahren kann ab der Zeile 268435455 (0x0FFFFFFF) zu Fehlern führen, da sich dann die Zeilenzahl mit dem Fehlercode überlagert und diesen somit verfälscht.
    Ich glaube jedoch nicht, dass jemand so große Dateien parsen wird.

    Download Inhalt:
    Der Download enthält folgende Dateien:

    • cfgparser.c - die Hauptsourcedatei
    • cfgparser.h - die Schnittstelle
    • CfgParser.dev - die Projektdatei für Dev-C++
    • CfgParserZustände.png - ein (unvollständiges) Zustandsdiagramm (Achtung: nicht aktuell)
    • main.cpp - ein Beispielprogramm, welches die Werte aus example.conf ausgibt
    • example.conf - eine Beispielkonfiguationsdatei - wird von main.cpp benötigt


    Download:
    http://bbsrc.incecx.net/cfgparser.rar <--- freundlicherweise zur Verfügung gestellt von cby
    MD5 Checksum: a9a287d027bcda29f05d6a4c6dcf6d8f *cfgparser.rar
    Passwort: free-hack.com

    Ich hoffe jemand kann das hier gebrauchen

    PS: Feedback ist erwünscht - ich hab das Programm heute erst fertiggestellt, also wer lust hat kann gerne nach Bugs suchen.


    mfG. BlackBerry
    Geändert von blackberry (14.05.2012 um 15:42 Uhr) Grund: Neuer Link

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  2. #2
    W32.Lovgate
    Registriert seit
    01.07.2007
    Beiträge
    354

    Standard

    Echt cool dieses Programm, gefaellt mir von der Idee bis zur Umsetzung sehr gut.
    Ich wuerde fast sagen, das ist das beste und brauchbarste was hier gepostet wurde. Und mal was anderes als diese C&P Stealer, Trojaner, Crypter, endlos-schleifen-messagebox etc.

    Grosses Lob von meiner Seite.

  3. #3
    just ir0nic Avatar von ir0n
    Registriert seit
    15.09.2007
    Beiträge
    218

    Standard

    Hi.
    Ich mache solche Sachen eigentlich auch immer ganz gerne selber.
    Werde mir mal den Source anschauen, in C habe ich großen Vergleichs- und Analysekram eigentlich immer gemieden, da ich mit Strings nicht so wirklich klar kam
    Solangsam wird's aber, danke

    Achja, wie wäre es, wenn du die möglichkeit gibst, eine Überladung von cfg_parse zu erstellen die einen Zeiger einen vector<cfgStruct> aus der STL akzeptiert? Das fände ich irgendwie besser & einfacher

    Gruß
    F++ - Erweiterung für Free-Hack
    Aktuelle Version: 1.0.0

    Biete
    :: Codinghilfe in C & C++, C#, VB.NET, Python, Java, PHP, (X)HTML, CSS, JavaScript, Bash
    :: Programmerstellung (kleinere, auch Bots oder ähnliches) auf Wunsch (C & C++ ohne GUI!)
    :: Hilfe beim erfolgreichen Aufbau einer Website und deren Weiterführung
    :: Privathack für CS:S (auf Wunsch auch extra Anfertigungen)


    Suche
    :: STEAM Accounts (CS:S - DoD:S - TF2 - L4D)
    :: Bietet was!


    Kontakt / Sonstiges
    :: Private Nachricht (*klick*)
    :: BlackMarket Profil (*klick*)

  4. #4
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Zitat Zitat von ir0n Beitrag anzeigen
    Achja, wie wäre es, wenn du die möglichkeit gibst, eine Überladung von cfg_parse zu erstellen die einen Zeiger einen vector<cfgStruct> aus der STL akzeptiert? Das fände ich irgendwie besser & einfacher
    Das war zwar eigentlich nicht meine Absicht, aber da die Idee ja nicht so schlecht ist habe ich mich nochmal drangesetzt

    Überladen habe ich die Funktion jedoch nicht, da man, wenn man es verwendet, ja sowieso nur eine Version davon verwenden würde, also habe ich den Code nur etwas modifiziert.

    Der neue Funktionsprototyp der Funktion cfgp_parse lautet nun:
    Code:
    int cfgp_parse(char *, vector<cfgpStruct> *);
    cfgpStruct ist wie folgt definiert:
    Code:
    typedef struct cfgpStruct
    {
        int type;
        char *name;
        union
        {
            void *value;
            char *valStr;
            int *valInt;
        };
    };
    Die namenlose Union deshalb, um sich unnötiges Typecasting sparen zu können.

    Beispiel Code (als main.cpp im Download enthalten):


    Da wegen dem Vector für jedes Element Speicherplatz reserviert wird (mit new), sollte man diesen bei großen Projekten mit delete wieder freigeben.

    Download:
    http://www.megaupload.com/?d=AKB4ECG1
    Passwort: free-hack.com


    mfG. BlackBerry

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  5. #5
    just ir0nic Avatar von ir0n
    Registriert seit
    15.09.2007
    Beiträge
    218

    Standard

    Hi.
    Ja, so gefällt mir dass doch gleich viel besser
    Ich wusste gar nicht, dass es sowas wie `union` gibt, kann ich für eines meiner Projekte auch gut gebrauchen (auch ein Parser für KeyValues ).

    Gruß
    F++ - Erweiterung für Free-Hack
    Aktuelle Version: 1.0.0

    Biete
    :: Codinghilfe in C & C++, C#, VB.NET, Python, Java, PHP, (X)HTML, CSS, JavaScript, Bash
    :: Programmerstellung (kleinere, auch Bots oder ähnliches) auf Wunsch (C & C++ ohne GUI!)
    :: Hilfe beim erfolgreichen Aufbau einer Website und deren Weiterführung
    :: Privathack für CS:S (auf Wunsch auch extra Anfertigungen)


    Suche
    :: STEAM Accounts (CS:S - DoD:S - TF2 - L4D)
    :: Bietet was!


    Kontakt / Sonstiges
    :: Private Nachricht (*klick*)
    :: BlackMarket Profil (*klick*)

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •