[Allegro] Perl-Skrite für Avanti

Thomas Berger ThB at Gymel.com
Fr Mai 19 14:20:02 CEST 2006


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Lieber Herr Mentzel-Reuters,

> Oder sind es wieder die mysteriösen Sonderkonditionen meines Rechners,
> die das alles verschulden?

diesmal eher unwahrscheinlich...


> (1) ALLEGRO.PL (Z. 393 im Originalskript, wie esmit dem aktuellen Avanti
> geliefert wird):  Um mit Hilfe von REGSRCH.PL die Kurztitelliste zu
> öffnen, wird $Input übergeben, die Kurztitel werden geladen und mittels
> SPLIT in Segmente zerlegt. Man findet diese Stelle leicht, wenn man nach
> "foreach $Z" sucht.  Der Trenner zwischen den Kurztiteln wird von
> Höppner als Hexwert 7F kodiert. Unter meinem alten Avanti auf Xitami ist
> das richtig. Im neuen System ist es der Hexwert CA (Ê). [[Darum, Herr
> Berger, gab es bei Ihren Versuchen an unserem OPAC die leeren Kurztitel
> - der Splitbefehl war wirkungslos, alle Kurztitel gerieten in einen
> HTML-Tag <TD ...> hinein und blieben unsichtbar.]]

Herr Allers hatte ja schon die relevanten alten Mailinglisten-
Beitraege herausgesucht. (Mir war im Maerz allerdings nicht klargewesen,
dass hier ein Feature von acwww25 zerbrochen war, ich hatte gedacht,
nur Herr Allers haette das Problem gehabt).


> (2) ALLGERO.PL Z. 473 ff. wird das Holen der nächsten Seite bei der
> Kurztitelanzeige geregelt. Die aktuelle Fassung von Z. 491ff lautet so:
> 
>    if( $Command =~ /ende/i )

das betrifft also nur die Anforderung "letzte Seite".

>    {
>        $Position = ($#nummern-1) - (  ($#nummern-1)  % $maxKurztitel );
>        $Mitte = 1;
>        return;
>    }
> 
> Das funktioniert aber sehr schlecht; das Skript kann dabei in negative
> Zahlen geraten und überhaupt vergessen, wo es ist. Der Apache reagiert
> darauf sehr ungnädig, Xitami zwar nicht, aber eine gescheite
> Funktionalität habe ich auch dort nicht erlebt. Nimmt man statt dessen
> Höppners Version aus der Allegro.pl von ca. 1996, dann läuft es. Die
> ging so:
> 
> 
>     if( $Command =~ /ende/i )      # alte Version
>   {
>      $Position = $#nummern + 1 - ( ( $#nummern + 1 ) % $maxKurzTitel );
>     $Mitte = 1;
>    return;
>    }


Hier ist grosse Vorsicht geboten, evtl. ist Ihre Version ein Mix aus
verschiedenen Versionen:

Ab Zeile 99 findet sich im aktuellen allegro.pl eine ueberraschende
Operation:

if( $in{'recnums'} ){
	@nummern    = split( ",", $in{'recnums'} );
	$#nummern++;
}

d.h. gab es den Uebergabeparameter 'recnums' nicht, so wurde das
Array @nummern nicht ins Leben gerufen, und $#nummern ist -1.
War der Parameter leer, so hat $#nummern den Wert 0.
Regulaer ist aber vermutlich nur der Fall mindestens einer Satznummer,
@nummern enthaelt dann diese (das typischerweise abschliessende ","
im Parameter 'recnums' wird gluecklicherweise nicht beruecksichtigt)
*plus* ein undefiniertes Element, $#nummern ist dann mindestens 1.
Das in der Formel stets benutzte $#nummern -1 ist also eigentlich
das originale $#nummern ...

Als $Position benoetigen wir (angenommen $maxKurzTitel ist 10) die
Werte 0, 10, 20, ...

Wir haben mit dem Code aus dem aktuellen allegro.pl

uebergebene Satznummern  1  2  3  4  5  6  7  8  9 10 11 ...
$Position                0  0  0  0  0  0  0  0  0  0 10 ...

damit ist also alles korrekt.
Einen negativen Wert (-10) gibt es nur, wenn der Uebergabeparameter
'recnums' nicht existiert / nicht gelesen werden konnte. Sind wir
da wieder bei Ihrem alten Problem?

Die Formel aus der 1996er-Version hingegen liefert (egal ob das
ominoese $#nummern++ vorhanden ist oder nicht) fuer 10 Werte
immer die falsche $Position = 10 (allerdings nie eine negative
Zahl)


viele Gruesse
Thomas Berger
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.3-nr1 (Windows XP)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFEbbfyhKFJT0F1FsoRApKUAJ4i3DSefJ90MiAn0M9N3G7Y3VVNYwCdEWH7
+pbNU987aePZxzVr4HpkYQs=
=jdWJ
-----END PGP SIGNATURE-----



Mehr Informationen über die Mailingliste Allegro