Mailinglisten-Archive |
Marc Logemann wrote:
> Keine Ahnung, muss ich ersma checken was das sein soll :))
Ein Perl-Script, das Du in Deinem PHP3-Sourcetree aussetzen kannst und
das dann alle Funktionsnamen aus dem C-Source pflückt.
#! /usr/bin/perl --
# Benutze das Modul File::Find, um den Dateibaum abzusuchen.
# Siehe auch "perldoc File::Find"
use File::Find;
#
# Diese Funktion wird mit einem Dateinamen aufgerufen und durchsucht
# die angegebene C-Datei nach Funktionsnamen.
#
sub scanforfunction {
my($file) = shift;
# Einlesen der gesamten Datei $file in eine Variable $line.
$x = $/;
open(IN, "<$file") or warn "Cannot open $file ";
undef $/;
$line = <IN>;
close IN;
$/ = $x;
# Durchsuche $line nach Text der Art
# function entry pcre_functions[] = { };
# und merke Dir den Modulnamen ("pcre") und den Teil zwischen
# den geschweiften Klammern als $1 und $2.
$line =~ m!function_entry\s+(\w+)_functions\[\]\s*=\s*\{(.*?)\};!s;
# Nix in der Datei zu finden -> weg hier.
if (!$1) {
return;
}
# $1 ist der Modulname ("pcre")
# _(at)_lines sind die Zeilen zwischen den geschweiften Klammern ($2).
$mod = $1;
_(at)_lines = split "\n", $2;
# Diese Zeilen _(at)_lines gehen wir jetzt durch. Sie haben entweder die Form
# {"funktionsname", cfunktionsname, irgendwas } oder die Form
# PHP_FE(funktionsname, irgendwas)
foreach $i (_(at)_lines) {
# Suche nach {"funktionsname", cfunctionsname,
# und merke Dir funktionsname ($1) und cfunctionsname ($2).
# Drucke den Treffer aus.
$i =~ /\{\s*"(\w+)"\s*,\s*(\w+)\s*,/ &&
printf "%-18s %-18s %-18s %-18s\n",
$mod, $1, $file, $2;
# Suche nach PHP_FE(funktionsname,
# und merke Dir funktionsname ($1).
# Drucke den Treffer aus.
$i =~ /PHP_FE\(\s*(\w+)\s*,/ &&
printf "%-18s %-18s %-18s %-18s\n",
$mod, $1, $file, "php3_$1";
}
}
# Durchsuche Dateien mit der Endung .c
# Rufe für jede dieser Dateien scanforfunction von oben auf.
sub wanted {
if (/\.c$/) {
&scanforfunction($_);
}
}
# Drucke Überschrift
printf "%-18s %-18s %-18s %-18s\n",
"\_(at)_MODULE", "PHP Function", "FILE", "C Function";
# Durchsuche das aktuelle Verzeichnis gemäß der Funktion wanted von oben.
finddepth(\&wanted, ".");
Kristian
--
Kristian Köhntopp, NetUSE Kommunikationstechnologie GmbH
Siemenswall, D-24107 Kiel, Germany, +49 431 386 436 00
Using PHP3? See our web development library at
http://phplib.shonline.de/ (GPL)
php::bar PHP Wiki - Listenarchive