RuckZuck
Web-Anbindung auf die Schnelle 

	1.  `Wer kann RuckZuck brauchen?`	5.  `Was macht/sieht der Nutzer?` 
	2.  `Was ist RuckZuck?`	6.  `FLEXe, Hinweise für CGI-Kundige` 
	3.  `Wie startet man RuckZuck?`	7.  `Hinweise für allegro-Kenner` 
	4.  `Funktionsweise`	8.  `HTML-Dokumentation` 

Nicht immer hat man die Zeit, das Geld, die Erfahrung - oder alles zusammen - um eine Web-Schnittstelle nach allen Regeln der Kunst für die eigene Datenbank zu machen. Nicht immer ist der Aufwand notwendig, den man mit avanti und mit ACWWW25 oder "populo" treiben muß. Deshalb gibt es als Alternative eine Schnittstelle für Schnellschüsse: RuckZuck. Ab September 2001 gibt es zwei Varianten:  
	F arbeitet ohne avanti nur mit FLEXen (a99 als Server), 
	P arbeitet mit avanti und mit `PHP` (darin sind dann FLEXe eingebettet). 
•	RuckZuck-F kommt ohne Skriptsprache aus (Perl, Python, Javascript), nur ganz normales HTML ist nötig. Variante P ist kompatibel in den Funktionen, aber realisiert mit der relativ einfach zu lernenden Skriptsprache PHP 
•	Ein möglichst vielseitiges Repertoire von Funktionen (einschl. Schreibzugriff) wird vorgefertigt bereitgestellt, wobei die Anforderungen an das System und die Notwendigkeit von Anpassungen auf ein Minimum reduziert sind. 
•	Lokalen Anpassungen sind keine Grenzen gesetzt - JavaScript ist dabei leicht anwendbar - wobei die FLEXe eine größere Rolle spielen als die Parametrierung. 
·	·	·	·	·	
So kann ein Startbildschirm aussehen, wenn man eine mit RuckZuck angebundene Datenbank anwählt: 
(Dies ist nur ein Bild, kein funktionsfähiger Katalog, mitgeliefert als Datei  OPAC.HTM ) 

OPAC der UB Braunschweig` 
Universitätsbibliothek der TU Braunschweig - Pockelsstr. 13 - D-38106 Braunschweig - Tel. ++49 531 391 5026		

Schnellsuche

Titelwort:           _________________             (Einzelnes Wort!) 
	 
   Personenname:	            _________________             (Nachname, Vorname)	

Suchen   Registerlisten 

Beide Angaben werden automatisch trunkiert. 
Wenn Sie in beide Felder etwas eintragen, wird mit UND verknüpft 

Detail-Suche
(Wenn die Schnellsuche nicht geeignet ist, wählen Sie "Detail-Suche") 

1. Wer kann RuckZuck brauchen?
Schon lange gibt es die `allegro-WWW-Schnittstelle`. Mehr als 100 Web-Kataloge sind damit am Netz. 
Sie haben eine allegro-Datenbank (oder eine andere, aus der man eine machen könnte), die ins Inter- oder Intranet soll? 
Nein: --> Ende 
Ja: Welche dieser Aussagen gelten für Sie: 
1.	Sie haben zu wenig Geld 
2.	Sie haben zu wenig Zeit 
3.	Sie haben zu wenig Ahnung von der WWW-Programmierung, insbes. von Perl, Python etc. 
4.	Hoher Aufwand lohnt nicht, denn Ihre Datenbank soll nur für begrenzte Zeit oder einen begrenzten Kreis verfügbar gemacht werden, vielleicht gar nur für eine einzelne Person am anderen Ende des Internet. 
Nichts davon trifft zu: --> Ende. 
Denn dann verwenden Sie avanti auf einer UNIX- oder Linux-Anlage und richten mit Hilfsmitteln wie z.B. Thomas Bergers `"populo"-Paket` einen maßgeschneiderten Qualitätsdienst ein, mit hoher Betriebssicherheit, der monatelang ohne Aufsicht und ohne Eingriff laufen kann. Damit verglichen ist "RuckZuck" vielleicht eine 90%%-Lösung - doch manchmal braucht man ja gar nicht mehr! 
Wenn eine oder mehr dieser Aussagen für Sie zutreffen, ist die RuckZuck-Methode eine Überlegung wert. Oder auch dann, wenn schnell ein Provisorium gebraucht wird, damit man die Dauerlösung dann in Ruhe ausarbeiten kann. Die Variante P ist aber technisch durchaus auch als Dauerlösung geeignet! 
 
2. Was ist "RuckZuck"? 
Es ist ein Fertigpaket für das Bereitstellen einer "allegro"-Datenbank im Inter- oder Intranet. Variante F kommt ohne Skriptsprache (wie Perl, Python oder Javascript) aus. Programmiert wird mit den Mitteln der Exportsprache und der FLEX-Sprache und mit ganz gewöhnlichem HTML. Das jetzt verfügbare Paket KANN leicht durch weitere Module ergänzt und natürlich auch lokal angepaßt und ausgebaut werden; nur an ganz wenigen Punkten MUSS aber wirklich eingegriffen werden. 
RuckZuck sollte mit jedem Kategorienschema, also mit jeder "allegro"-Datenbank funktionieren. Es enthält nur die wichtigsten Funktionen, die jeder braucht, aber sorgfältig durchdacht und offen für Erweiterungen. Die Standarddateien werden ohne grafische Elemente geliefert, die Einbindung eigener Grafiken, insbes. Logos oder GIF-Dateien für Links wie "Nächste Seite", "Neue Suche" usw., ist für HTML-Kenner sehr einfach. Neudeutsch: man kann leicht seine eigene "Corporate Identity" integrieren. 
RuckZuck besteht aus ganz wenigen Dateien und bleibt damit sehr übersichtlich. Alle Dateien sind voll kommentiert, die Stellen für notwendige Eingriffe sind markiert, daher braucht man nicht alles zu verstehen, was da abläuft. 
Erforderlich: 
1.	Ein Rechner mit Win'XP oder Vista . Er muß am Internet hängen. Dazu braucht er keinen eigenen Namen, nur eine IP-Nummer. Eine solche hat jeder PC, der z.B. in einem Hochschulnetz steht. Testen kann man ohne Anschluß nach draußen! 
2.	Das Programm  a99  (normalerweise auf c:\allegro gelegen) 
3.	Das neue Hilfsprogramm   cgi.exe  (-> Verzeichnis cgi-bin von xampp)
4.	Die Datei  opac.htm  (-> Verzeichnis htdocs/opac von xampp)
5.	das Paket ruckzuck.lzh, dieses enthält Dateien, die man für jede Datenbank auf ein eigenes Verzeichnis kopieren muß. (Nicht auf das allegro-Programmverzeichnis!) Die in 3./4. genannten Dateien sind auch drin. 
6.	Ein Webserver.Sehr zu empfehlen ist das `XAMPP-Paket`, das neben dem Apache-Webserver auch PHP enthält. Installieren Sie Apache nicht als Dienstprogramm, sondern als ganz normales Programm! Man startet es dann jeweils mit dem XAMPP Control. ("Dienst" geht auch, ist aber nicht nötig. Wenn man das will, muß man unter Start / Systemsteuerung / Verwaltung / Dienste  auf "Apache" rechtsklicken, dann Eigenschaften / Anmelden  und einen Haken setzen bei "Datenaustausch zwischen Dienst und Desktop zulassen"). 

Alles muß auf demselben PC installiert werden! Webserver und a99 können nicht über cgi.exe kommunizieren, wenn das nicht der Fall ist. Die Datenbank kann aber im LAN auf einem anderen Fileserver (z.B. auch Novell) liegen. 
Bereitgestellt wird mit RUCKZUCK.LZH ein Paket, das außer einem Webserver alles enthält, was gebraucht wird. 
Für Unix oder Linux existiert nur RuckZuck Variante P , dafür wird der jeweilige avanti-Server gebraucht. 
 
3. Wie startet man RuckZuck? 

1.	Webserver starten, 
Standard: Apache über das XAMPP Control starten
Für Variante P wird hauptsächlich Apache empfohlen. 

2.	a99 starten / Variante P:  avanti-Server starten 
Standard: auf c:\opac den Befehl` c:\allegro\a99 demo  geben  / Var. P:  avanti.exe  

3.	Test auf dem lokalen Rechner: 
Standard: Browser starten, dann zum Testen: http://127.0.0.1/opac/opac.htm   /  Var. P : http://.../detail.php 

Über die präparierte HTML-Eingangsseite (OPAC.HTM mit lokaler Anpassung) kann jetzt der Zugriff losgehen. 
An der Datenbank kann von anderen Fenstern aus normal gearbeitet werden, entweder mit den DOS-Programmen oder a99. 
Das Fenster von a99 kann man u.a. benutzen, um sich die abgerufenen Ergebnismengen anzuschauen (Alt+e, dann sieht man die Liste). 
Es entsteht ein Protokoll RZ.LOG auf dem CGI-Verzeichnis des Web-Servers. Dieses kann man jederzeit gefahrlos löschen. Darin stehen die wesentlichen FLEX-Befehle, die zu einem Job gehören. 

Ab hier beschränkt sich die Beschreibung auf die FLEX-Variante! Mehr über die P-Variante steht in PHPAC.TXT, mitgeliefert im Paket PHPAC.LZH.

4. Wie geht das? 
Funktionsweise der RuckZuck-Schnittstelle, Variante F 

Als Server dient a99.exe, das Windows-Hauptprogramm des allegro-Systems, die Anfragen werden ihm als externe FLEXe übergeben. (Ein FLEX ist eine Art Makro, das man sowohl interaktiv in a99 ausführen, aber auch von außen dem Programm übergeben kann, gewissermaßen zur Fernsteuerung.) Es wird keine Skriptsprache benutzt, auch nicht Java. 

So wird installiert, wenn man eine eigene Datenbank zugänglich machen will: 
Hier sind in rot die Namen der Dateien hervorgehoben, in denen Änderungen nötig sein können. In den Dateien sind die Stellen mit XXX gekennzeichnet. 

1.	In den eigenen Indexparametern (Standard: CAT.API) muß man symbolische Namen für die Register und die Restriktionen haben (z.B. PER für das Personenregister etc.) siehe Handbuch S. 176. Nur ganz alte Datenbanken haben so etwas noch nicht. Solche Zeilen sehen so aus: 
		Symbolische Registernamen: 
	I PER 1 "Personennamen"       Register 1 = Personennamen
		Symbolische Restriktionsnamen: 
	R ERJ r1 "Erscheinungsjahr"   Restr. 1 = Ersch.Jahr beginnt auf  Pos. 1 der RES-Datei 

2.	Die Startdatei OPAC.HTM kopiert man auf das Dokumentenverzeichnis des Webservers, Unterverzeichnis "allegro". Bei XAMPP ist das z.B. 
	...\xampp\htdocs\opac` (anderer Name ist möglich). In OPAC.HTM muß man evtl. an wenigen Stellen eingreifen. Zweimal muß der Verzeichnisname eingetragen werden, wo a99 gestartet wurde (siehe 4., In der Vorlage steht jeweils c:\opac.) 
Auf dasselbe Verzeichnis dann auch das Icon  ruckzuck.gif - oder eines Ihrer Wahl unter demselben Namen. Eine Kopie davon auch auf's CGI-Verzeichnis (s.3.). 
In OPAC.HTM müssen auch die Namen und Ziffern der Register für die Schnellsuche evtl. geändert werden. 
Diese müssen mit den Angaben in FIND-S.FLX zusammenpassen. 
Die URL dieser Datei teilt man dann den betroffenen Personen mit. Diese Datei ist der Zugang und zugleich so etwas wie die INI-Datei für Ihren Web-Katalog. Daher enthält sie den Pfad, wo a99 läuft. 

3.	Das Programm CGI.EXE muß auf das CGI-Verzeichnis des Web-Servers. Bei einer Standard-Installation von XAMPP ist das ...\xampp\cgi-bin. CGI.EXE wird bei Bedarf vom Webserver aufgerufen, wie es der CGI-Methodik entspricht. 

4.	Man legt ein Verzeichnis für die Schnittstelle an, z.B. C:\OPAC (günstig ist ein nicht zu langer Name, denn er muß bei jeder Transaktion mit durchgereicht werden). Der Name dieses Verz. muß in OPAC.HTM stehen (siehe 2.). Wenn Sie es einmal verlagern: nur OPAC.HTM entsprechend ändern. Auf C:\OPAC entpackt man ruckzuck.lzh: die FLEXe, Parameter und HTM-Dateistücke, aus denen die Schnittstelle besteht. Hier muß auch eine Datei xyz.ini angelegt werden für a99. Darin stehen Name und Pfad der Datenbank etc. und außerdem: 
	PrintParameter=D-H0
	ExportParameter=D-HTML
	Wenn a99 nicht auf C:\ALLEGRO installiert ist, muß man die Eintragung` ProgDir entsprechend ändern. 
	Mit "a99 xyz" startet man a99 dann auf diesem Verzeichnis (nicht woanders). Man stellt es dann so ein, daß irgendein Titelsatz in der Anzeige ist. Nun wartet es auf Arbeit... 

	In den .FLX- und .HTM-Dateien sind Stellen für Anpassungen mit XXX markiert. Achtung: es sind keine vollständigen Dateien, sondern sie werden während der Laufzeit als Bausteine verwendet zum Zusammensetzen der dynamischen Seiten. 

5.	Für weitere Datenbanken legt man weitere Schnittstellenverzeichnisse an (Kopien von C:\OPAC), die jeweils eine individuelle .INI für den Start von a99 brauchen. D.h. es muß für jede Datenbank ein eigenes a99 auf dem zugehörigen Schnittstellenverzeichnis gestartet werden. Im Hinblick auf Systemressourcen ist das unkritisch: jedes laufende a99 belegt höchstens 2.5MB Arbeitsspeicher und braucht nur dann Rechenleistung, wenn gerade eine Anfrage bearbeitet wird. 
	Änderungen: (markiert mit XXX) Immer nötig in der Datei FIND-S.FLX` , die aus OPAC.HTM aufgerufen wird. Außerdem in GETEDIT.FLX und WRITE.FLX sowie D-EDIT.APR, wenn man Schreibzugriffe erlauben will. Für die Einstellung der Sortierposition auch FIND-D.FLX. Wenn die HTM-Startseite nicht OPAC.HTM heißt, muß man den Namen jeweils in den FLX-Dateien ändern. 

6.	Wer nicht mit dem Standardschema A.CFG arbeitet: Für die eigene Datenbank muß eine Datei D-HTML.cPR angelegt werden (wobei c der eigene Konfigurationsbuchstabe ist, z.B. P für Pica), sowie eine D-EDIT.cPR, wenn man Schreibzugriff anbieten will.  Letztere kann eine Kopie der D-EDIT.APR sein. 
	Die Datei D-H0.APR kann unverändert auf D-H0.cPR kopiert werden, sie wird für einige Hilfsfunktionen unbedingt gebraucht. 

Schnelle Lösung: 
Man kopiert D-H0.APR zusätzlich auf D-HTML.cPR. Dann bekommt man zwar nur eine Anzeige im Internformat, aber es funktioniert. 
Außerdem:` P-HTM.APT  auf  P-HTM.cPT  kopieren. 
Aufwendige Lösung: 
Man erstellt` D-HTML.cPR aus der in der Regel vorhandenen D-1.cPR, indem man diese Einstellungen darin vornimmt: 

zl=80 
ze=10 
zm=0 
zb=" " 
ab="" 
as="" 
tad-aw

die letzte Zeile am besten ans Ende der Datei! (sie enthält eine Codetabelle ASCII - ANSI) 
Wenn man keine  AD-AW.cPT hat, kopiert man AD-AW.APT auf diesen Namen. Im allgemeinen wird es dann schon klappen. Das Erscheinungsbild der Datensätze läßt sich durch Bearbeitung der D-HTML.cPR` noch beliebig verbessern. 
In die Hilfsparameter D-H0.APR wird man normalerweise nicht eingreifen müssen. Diese erledigen einige bei allen Datenbanken gleiche Aufgaben, wie das Formatieren der Kurzlistenausgabe oder der Liste aller symbolischen Registernamen. Die Standardisierung solcher Aufgaben ist eine Erleichterung. 

Die Funktionsweise 
•	Für die Übergabe von Nutzerdaten werden ganz normale HTML-Formulare verwendet. Diese werden an ein kleines CGI-Programm übergeben, CGI.EXE. Es ist in C geschrieben und daher viel schneller als z.B. Perl. 
•	CGI.EXE wandelt die Formulardaten um, verbindet sie mit einem vorgefertigten FLEX, dessen Name im Formular steckt, und übergibt diesen an a99. 
•	Der FLEX veranlaßt a99, eine Ausgabe HTML-Ausgabe zu erzeugen, die durch CGI unmittelbar an den Nutzer übergeben wird. Auch hier können vorgefertigte Teile zum Einsatz kommen, z.B. HTML-Kopfdateien. 
•	Schematischer Ablauf:` 
·	·	·	·	·	` 
Nutzer:` `  CGI . . . . . . . . . . .  . . . .CGI` Nutzer:
HTML-Seite` ` ` ` ` ` ` ` ` ` ` ` `  HTML` ` ` ` ` neue 
mit` ` ` `  --->` FLEX ---> a99 ---> Ausgabe` ---> HTML-` ` --> Anfang 
Formular` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` ` `  ` Seite 

Es gibt eine Anzahl von vorgefertigten FLEXen mit wichtigen Grundfunktionen, die auf diesem Wege aktiviert werden können. Diese sind jeweils ausführlich kommentiert. Insbesondere ist mit XXXX markiert, wo man Veränderungen vornehmen kann oder muß. 
Man braucht nur eine einzige feste HTML-Seite, die für den Einstieg (Standard OPAC.HTM). Die anderen werden immer ad-hoc von den FLEXen erstellt. 

5. Der Ablauf 
Was sieht/macht der Nutzer -- was wird dann ausgelöst 
Hier sieht man, wie die FLX-Dateien untereinander zusammenhängen. In jedem Fall werden die Formulardaten aus HTML dem CGI-Programm CGI.EXE übergeben, dieses macht daraus einen FLEX-Auftrag und sendet ihn an a99. a99 produziert als Ausgabe eine neue HTML-Datei, die CGI.EXE nur an den Webserver und dieser dann an den User zurückgeben muß. 
Dabei gibt es fünf Typen von Seiten, die der User zu sehen bekommt: 

` START: z.B. 
` OPAC.HTM` --> FIND-S.FLX` Ausführung einer Suche 
` ` ` ` ` ` ` ` ` ` ` ` ` ` Ausgabe: Ergebnisliste oder Registerausschnitt 
` ` ` oder` --> DETAIL.FLX` produziert Formular für kombinierte Suche 
` ` ` ` ` ` ` ` ` ` ` ` ` ` Ausgabe: Das Eingabeformular
` Eingabeformular für kombinierte Suche 
` ` ` ` ` ` --> FIND-D.FLX` Neue Suche ausführen 
` ` ` ` ` ` ` ` ` ` ` ` ` ` Ausgabe: Ergebnisliste oder Registerausschnitt 
` Ergebnisliste besteht aus 1 Zeile (mit Link) je Datensatz 
` ` ` ` ` ` --> GETREC.FLX` holt den ausgewählten Satz 
` ` ` ` ` ` ` ` ` ` ` ` ` ` Ausgabe: Satzanzeige 
` ` ` ` ` ` --> FIND-D.FLX` veränderte Suche ausführen - andere Ergebnisliste 
` ` ` ` ` ` --> DETAIL.FLX` Ausgabe: Neues Eingabeformular
` Registerausschnitt jede Zeile steht für einen oder mehrere Sätze 
` ` ` ` ` ` --> FIND-D.FLX` holt die zu einer Registerzeile gehörigen Sätze 
` ` ` ` ` ` ` ` ` ` ` ` ` ` Ausgabe: Ergebnisliste oder Satzanzeige 
` ` ` ` ` ` --> PAGE.FLX` ` eine Seite im Register vor oder zurück 
` ` ` ` ` ` ` ` ` ` ` ` ` ` Ausgabe: Registerausschnitt 
` ` ` ` ` ` --> DETAIL.FLX` Ausgabe: Neues Eingabeformular 
` Satzanzeige Vollanzeige des Datensatzes 
` ` ` ` ` ` --> DETAIL.FLX` Ausgabe: Neues Eingabeformular
` ` ` ` ` ` --> GETEDIT.FLX Satz zum Bearbeiten bereitstellen 
` ` ` ` ` ` ` ` ` ` ` ` ` ` Ausgabe: Bearbeitungsformular 
` Bearbeitungsformular 
` ` ` ` ` ` --> WRITE.FLX`  Satz speichern, entw. als Korrektur oder Neusatz 

Eingreifen muß man bei eigenen (nicht dem Standard entsprechenden) Datenbanken in die rot geschriebenen Dateien, denn darin gibt es datenbankabhängige Teile. Man findet die Stellen leicht, denn es steht immer XXX und ein Kommentar über den zu ändernden Stellen. In GETEDIT.FLX kann man auch diejenigen Felder einstellen, die zum Bearbeiten angeboten werden sollen, Kommentare siehe dort. 

6. Liste der FLEXe 
Diese FLEXe werden als Grundpaket bereitgestellt. Sie erzeugen jeweils eine HTML-Seite als Ausgabe. Sie benutzen jeweils eine (meistens) gleichnamige .HTM-Datei als Kopf. Hier kann man lokale Design-Elemente einbringen, z.B. ein eigenes Logo statt "ruckzuck.gif" (man kopiert das eigene auf diesen Namen, dann hat man weiter nichts zu tun). und Links zu eigenen Seiten. In diesen Kopfdateien kann man aber auch JavaScript-Funktionen unterbringen. 
In die FLEXe eingebunden sind die HTM-Seiten immer mit dem Befehl` write Ffilename. Die HTM-Köpfe enthalten keinen Abschnitt "<head>...</head>", denn dieser wird schon von CGI erstellt und enthält nur einen <title>...</title> mit der internen Nummer des Jobs. 

Liste der FLEXe mit zugehörigen HTM-Kopfdateien (werden automatisch eingebunden): 

FIND-S.FLX`  wird von der Startseite OPAC.HTM gestartet 
find.htm 

DETAIL.FLX`  kann von OPAC.HTM aufgerufen werden, und durch den Link 
detail.htm`  "Neue Suche" von anderen Stellen 
` ` ` ` ` `  Holt sich die Registernamen automatisch 

FIND-D.FLX`  Start aus DETAIL.FLX und aus PAGE.FLX 
find.htm` `  Erg.Menge (wenn mehr als 1 Satz), sonst Satzanzeige, 
		 ODER Anzeige eines  Registerabschnitts 

PAGE.FLX` `  Ruft sich selber auf mit [Seite höher] / [Seite weiter] 
page.htm` `  Zeigt einen Registerabschnitt, ruft FIND-D.FLX auf, wenn 
` ` ` ` ` `  eine Zeile angeklickt wird. 

GETREC.FLX`  Aufruf aus FIND-D.FLX, wenn ein einzelner Satz gezeigt werden soll 
getrec.htm` `Startet GETEDIT.FLX, wenn gewünscht (sonst ausblenden in GETREC.FLX und FIND-D.FLX) 

GETEDIT.FLX` Start aus GETREC.FLX  oder  FIND-D.FLX
getedit.htm` Legt einen Satz zum Bearbeiten vor. Mit JavaScript-Beispiel zur 
` ` ` ` ` `  Eingabekontrolle 

WRITE.FLX` ` Start aus GETEDIT.FLX 
getrec.htm`  Schreibt den Datensatz zurück, wahlweise als neuen Satz oder Korrektur 

Weitere Hinweise für CGI-kundige Leser 
Das Programm CGI.EXE kann sowohl POST wie auch GET-Aufträge entgegennehmen, d.h. man kann Aufträge über Formulare bzw. über Links erzeugen. 
Ein Auftrag muß bestimmte Dinge enthalten: 

VuwD=Name des Verz., wo a99 läuft (working Directory). Das ist nicht das Datenverzeichnis! 
flex=Name eines FLEXes (der auf dem VuwD liegen muß) 
Vuxy=...`  beliebig viele #u-Variablen; werden dem FLEX vorangestellt 
optional können folgende Variablen auftreten` (nur bei Schreibaufträgen sinnvoll, s. WRITE.FLX): 
Vnnn=...`  beliebig viele normale Datenfelder, die dann mit den angegebenen Inhalten besetzt werden 
Rnum=...`  interne Nummer des zu bearbeitenden Satzes. Ist diese Variable gegeben, dann wird dieser Satz zuerst geladen, bevor der FLEX anläuft und bevor die V-Befehle ausgeführt werden, d.h. die in den anderen Variablen mitgelieferten Kategorien werden in den Satz eingeordnet, bevor der eigentliche FLEX beginnt. 
Text=...`  Inhalt eines TEXTAREA-Feldes in einem Eingabeformular; Verwendung in GETEDIT.FLX, siehe dort. 

Die Variablen Vuxy werden also dem zu startenden FLEX überreicht, d.h. CGI.EXE fabriziert einen neuen FLEX (und löscht ihn hinterher sofort wieder) Dieser temporäre FLEX enthält am Anfang die Setzung der #uxy-Variablen etc. (s.o.) und am Ende deren Löschung. Man verwende daher nicht den Befehl "end", sondern statt dessen "jump exit", denn die Sprungmarke :exit wird ebenfalls erzeugt. 
Anders gesagt: CGI erstellt einen "Sandwich"-FLEX: 

` Laden des Satzes (wenn Rnum gegeben) 
` Setzungen der Variablen #uxy für a99 
` Inhalt des Text-Feldes
` ` ` `  (d.h. Einfügen der darin enth. Kategorien in den Datensatz) 
` der FLEX aus der CGI-Variablen flex=... 
`:exit
` Löschen der #u-Variablen 

Der Name des temporären FLEX enthält u.a. die Uhrzeit in Sekunden, daher ist keine Kollision zweier Aufträge zu befürchten. 
CGI sendet diesen Namen an a99 und wartet, bis die Ausgabedatei fertig ist (d.h. von a99 das Signal zurückkommt, es sei alles erledigt). Keines der Programme muß also ständig die Platte überwachen oder dergleichen, sondern die Kommunikation geschieht über Windows-Systemmeldungen. 
Als Exportparameter für die Vollanzeige von Sätzen wird per default D-HTML.cPR benutzt. Zusätzlich für immer gleiche Standardaufgaben eine D-H0.APR - wenn die FLEX-Sprache nicht reicht, um einen output zu produzieren. Ansonsten ist der Output des FLEXes genau das, was CGI.EXE dann dem Web-Server zurückreicht, d.h. man muß in seinem FLEX den kompletten HTML-Ausgabetext fabrizieren. Das kann abwechselnd durch "write"- und "download"-Befehle passieren. Bei "write" hat man ja die Möglichkeit, ganze Fertigteile, d.h. Dateien "name.htm", mit  wri Fname.htm auszugeben. 
Übrigens kann auf dem Rechner, auf dem der Webserver, a99 und CGI laufen, durchaus ganz normal gearbeitet werden. Z.B. kann man darauf Netscape starten und den Katalog selber benutzen, indem man die Adresse` ` http://127.0.0.1/allegro/opac.htm` aufruft. 

Tips 
Sollen einige Nutzer Schreibrechte haben, andere aber nicht: zwei Eingangsseiten und zwei Startverzeichnisse anlegen, a99 zweimal starten (auf jedem der Verzeichnisse). In der INI-Datei für die Nutzer ohne Schreibrecht kann man zur Sicherheit eintragen:` access=0.` In GETREC.FLX und FIND-D.FLX nimmt man die kommentierten Zeilen heraus, die den Link "Bearbeiten" erzeugen. 
Den Zugang zu der Eingangsseite mit Schreibrecht kann man zusätzlich durch Passwort absichern. 
Auf einem weiteren Verzeichnis kann man ein drittes a99 starten, um damit ohne Störung durch die Web-Zugriffe selber an der Datenbank arbeiten zu können. Hier sollte dann access=4 in der INI-Datei stehen, damit man alles machen kann. 

7. Hinweise für allegro-Kundige 
Die Parameterdatei D-H0.APR besorgt einige Standardaufgaben wie das Produzieren von Registerauszügen und SELECT-Listen für die Registerauswahl. Sie wird über den neuen FLEX-Befehl "Download" (mit großem D) benutzt. Dieser benutzt zum` Exportieren nicht die ExportParameter, sondern die PrintParameter - die man als solche für RuckZuck nicht braucht. In der INI-Datei muß stehen` PrintParameter=d-h0. So wird vermieden, daß man die Anzeigeparameter D-HTML.APR auch noch mit diesen Sonderaufgaben befrachten bzw. daß man in vorhandene Anzeigeparameter, die man für "avanti" schon gemacht hat, die etwas komplizierten Hilfsprozeduren auch noch einbauen muß. Das spart u.U. viel Zeit. 
Ausnutzen kann man in eigenen FLEXen evtl. zwei weitere Nutzervariablen: #urH und #urA. Diese enthalten jeweils den Namen des Host bzw. die Adresse, von der aus der FLEX gekommen ist. 
allegro-Anwender wissen: fast nichts ist unverrückbar festgeschraubt, fast alles läßt sich irgendwie variieren oder die Entwicklungsabteilung macht, wenn begründete Vorschläge kommen, eine Programmverbesserung. Das gilt auch für RuckZuck. 

8. HTML-Dokumentation für RuckZuck
Hier wird beschrieben, wie die verschiedenen RuckZuck-Seiten in HTML aussehen müssen. 
Das ist nützlich, wenn man eigene Abfragen und Befehle per HTML-Seite an einen a99-Server senden will. 
Man muß dazu wissen: es gibt im HTTP-Protokoll keine "Sitzung" (wie z.B. im Z39-Protokoll), sondern jede HTML-Seite ist eine selbständige Einheit. Daher kann ein Auftrag an a99, der in  eine HTM-Seite eingebettet ist, nicht auf eine vorher gelaufene Aktion Bezug nehmen. Das macht die Dinge einerseits viel einfacher als bei einem Sitzungsprotokoll, andererseits in mancher Beziehung auch schwieriger - es kommt darauf an, was gemacht werden soll. Z.B. das Zurückholen einer früheren Ergebnismenge ist ein schwieriges Problem, auch das Blättern in einer großen Ergebnismenge, die nicht als Ganzes übermittelt werden kann.  Wir wollen das an dieser Stelle nicht vertiefen (und RuckZuck löst diese schwierigen Probleme nicht!), sondern uns mit einigen einfachen Prozeduren begnügen. 
Wir betrachten als Beispiele die verschiedenen Elemente, die man in RuckZuck-Seiten sieht, und zeigen, was jeweils dahinter steckt. 
Damit kann man ähnliche Dinge dann selber stricken. 
Um alles leichter durchschaubar zu machen, verwenden wir ein paar Farben: 
Rot 	sind die Namen der Argumente, die dem Programm CGI.EXE übergeben werden 
Blau 	sind die zugehörigen Werte, und 
Grün 	Teile, die unverändert immer so aussehen müssen.

Startseite
Diese ist als einzige fest eingerichtet, die anderen muß man nicht schreiben und pflegen, sondern sie werden jeweils dynamisch erzeugt, und zwar von einem FLEX. Der FLEX setzt in der Regel einen festen Kopfteil mit einem per Export und/oder mit "write"-Befehlen erzeugten Teil zusammen. 

<form action="/cgi-bin/cgi.exe" method=post>

<table> 
<tr> 
  <td ALIGN=RIGHT>Titelwort:</td> 

  <td><input name="Vus1" type=text size=40 maxlength=40 default></td> 

  <td>(Einzelnes Wort!)</td> 
</tr> 

<tr> 
  <td ALIGN=RIGHT>Personenname:</td> 
  <td><input name="Vus2" type=text size=40 maxlength=40></td> 
  <td>(Nachname, Vorname)</td> 
</tr> 
</table> 

<input type=radio name="VusI" value="">Suchen&nbsp; 
<input type=radio name="VusI" checked value="i">Registerlisten 
  <br>Beide Angaben werden automatisch trunkiert. 
  <br>Wenn Sie in beide Felder etwas eintragen, wird mit UND verkn&uuml;pft 

Die folgenden 4  Zeilen sind ganz typisch für POST-Aufträge (Formularaufträge). Variabel ist nur der Name des FLEXes, hier find-s:

<input type="hidden" name="flex" value="find-s"> 
<input type="hidden" name="VuwD" value="c:\opac"> 
<input type=submit value="Ausf&uuml;hren"> 
<input type=reset value="Neuer Versuch"> 
</form> 

Die Zeilen vom Typ "hidden" können innerhalb des Formulars an beliebiger Stelle stehen, weil sie nicht sichtbar werden. Der genannte FLEX, hier find-s.flx, wird mit den Formulardaten zu einem lauffähigen FLEX zusammengesetzt. Beispiele siehe unten. 

Links für Neue Suche und Detail-Suche  

Auf fast allen Seiten sieht man den Link  Neue Suche
Das ist sehr einfach: es wird nur die Startseite wieder angezeigt: 
<a href="/allegro/opac.htm"> 
    <h3>Neue Suche</h3> 
</a> 

Der Link Detailsuche  macht dagegen etwas ganz anderes: 

<a href="/cgi-bin/cgi.exe?flex=detail&VuwD=c:\opac"> 
  Detail-Suche 
</a> 

Aufgerufen wird das Programm CGI.EXE. Es erstellt auf dem Verzeichnis c:\opac einen FLEX, der aus einer Kopie von detail.flx besteht. 
Diesen führt a99 dann aus.  Es entsteht die Seite mit der "Suchmaske", die dann erscheint: 

Detail-Suche
Die "Suchmaske" ist im HTML-Text ein Formular und sieht wie folgt aus. Erstellt wird diese Datei vom FLEX detail.flx, d..h. man muß sie nicht selber erstellen! 
(In Wirklichkeit ist der HTM-Text nicht so schön ordentlich eingerückt!) Soll das Formular anders aussehen? Dann muß man in detail.flx eingreifen. 

<FORM action="/cgi-bin/cgi.exe" method=POST> 
<table> 
<tr><td>Register: </td> 
    <td><SELECT name="Vui1" size=""> 
          <OPTION value="PER 1">Personennamen</OPTION> 
          <OPTION value="TIT 3">Titelwörter, Schlagwörter</OPTION> 
          <OPTION value="TAF 4">Titelanfänge</OPTION> 
          ...  [etc. Auswahlliste der Register]
        </select> 
    </td> 
</tr> 
<tr><td><b>Ihr Suchbegriff:</b> </td> 
    <td><input name="Vus1" type=text size=40 maxlength=40> 
        <input type="Checkbox" name="Vut1" checked value="?">Trunkieren 
    </td> 
</tr> 
<tr><td>2. Register: </td> 
    <td><SELECT name="Vui2" size=""> 
        <OPTION value="PER 1">Personennamen</OPTION> 
        ... 
        </select></td></tr> 
<tr><td><b>2. Suchbegriff:</b> 
    </td> 
    <td><input name="Vus2" type=text size=40 maxlength=40> 
        <input type="Checkbox" name="Vut2" checked value="?">              Trunkieren 
    </td> 
</tr> 
<tr><td>Eingrenzung: </td> 
    <td><SELECT name="VurS" size=""> 
          <OPTION value="PYR">Erscheinungsjahr</OPTION> 
          <OPTION value="TYP">Typ</OPTION> 
          <OPTION value="BDT">Bestelldatum</OPTION> 
        </SELECT></td></tr><tr> 
    <td><b>Ihre Eingabe:</b> </td> 
    <td><SELECT name="VuoP" size=""> 
          <option value=">">gr&ouml;&szlig;er als</option> 
          <option value="=">gleich</option> 
          <option value="<">kleiner als</option> 
        </select> 
       <input name="VurE" type=text size=10 maxlength=10> 
    </td> 
</tr> 
<tr><td> </td> 
    <td> <input type="hidden" name="flex" value="find-d">
         <input type="hidden" name="VuwD" value="c:\opac">
         <input type=radio name="VusI" checked value="">Suchen 
         <input type=radio name="VusI" value="i">Registerlisten 
    </td> 
</tr> 
<tr><td> </td> 
    <td> <input type=submit value="Ausf&uuml;hren"> 
         <input type=reset value="Neuer Versuch"> 
    </td> 
</tr> 
</table> 
</table> 
</FORM> 

Dieses Formular arbeitet mit der POST-Methode, typisch sind dafür die grün markierten Teile. Das heißt: 
Alle in rot zu sehenden Variablen werden an CGI.EXE gegeben, wenn der  submit-Button gedrückt wird (auf dem "Ausführen" steht). 
CDI.EXE macht daraus einen FLEX, den es auf das Verzeichnis schreibt, das mit VuwD angegeben ist. In diesem FLEX, stehen dann nacheinander die Variablen #ui1, #us1, #ut1 usw., die aus den Werten Vui1 usw. gebildet werden, dann wird der FLEX  find-d.flx angehängt. 

Registeranzeige
Typisch ist folgende Anzeige. 
Zuerst kommen zwei Links für das Blättern: 

Eine Seite höher / Eine Seite weiter

Dahinter stecken CGI-Aufrufe, die wie folgt aussehen. Dies sind typische Beispiele für die GET-Methode der CGI-Technik, im Gegensatz zu der POST-Methode, die immer mit einer Formularkonstruktion  <form>...</form> arbeitet. 

<a href="/cgi-bin/cgi.exe?flex=page&VuwD=c:\opac&VupG=-15+|3&VurG=tit+3 &VuzL=shakespaere">
Eine Seite h&ouml;her 
</a> / 
<a href="/cgi-bin/cgi.exe?flex=page&VuwD=c:\opac&VupG=15+|3&VurG=tit+3 &VuzL=shakespeares">
Eine Seite weiter 
</a>

Dem Programm CGI.EXE werden hier per GET-Methode fünf Werte übergeben  (Das + steht immer für das Leerzeichen, wie bei CGI üblich): 
flex  :  der Name der FLEX-Datei, die auszuführen ist: page.flx 
VurG  :  Name und Nummer des Registers 
VuzL  :  Die Zeile, mit der das Blättern beginnen soll 
VupG  :  Die Anzahl Zeilen und die Nummer des Registers, aus der sie zu holen sind. Bei "Seite höher" ist die Anzahl negativ! 
VuwD  :  Verzeichnis, wo der a99-Server arbeitet 

Dann die Registerzeilen:  (aufbereitet in D-H0.APR, wobei die Variable #uII vorher per FLEX präpariert wird) 
	shakespaere (1) 
	shakespear (3) 
	shakespeare (78) 
	shakespeare * (1) 
	shakespeare, william -- 1564-1616 * (1) 
	...
	shakespeares (32) 
      .... 

Hinter einer typischen Zeile, der dritten, steckt dieses (auch wieder ein GET-Auftrag): 

<a href="/cgi-bin/cgi.exe?flex=find-d&VuwD=c:\opac&VufC=|3+'_shakespeare'"> 
shakespeare 
</a>  (78) 

flex  :  der Name der FLEX-Datei, die auszuführen ist: find-d.flx
VuwD  :  Verzeichnis, wo der a99-Server arbeitet 
VufC  :  Register und Inhalt der Zeile. Letztere mit '...' eingeschlossen und _ vorweg, da exakt gesucht werden soll. 
Auch in  VufC  müssen Leerzeichen durch + ersetzt werden! 

Kurzliste: Struktur einer Titelzeile

2.    Mikroprozessortechnik                  ·Müller, He·1992·2716-0826

Der HTM-Text dahinter sieht so aus: 

2.    <a href="/cgi-bin/cgi.exe?flex=getrec&VuwD=c:\opac&Vurn=229"> 
 Mikroprozessortechnik                  ·Müller, He·1992·27160826 
</a>

Dem Programm CGI.EXE werden drei Werte übergeben: 
flex  :  der Name der FLEX-Datei, die auszuführen ist: getrec.flx
VuwD, Vurn  :  Die Werte für die Variablen #uwD und #urn, die der FLEX benötigt. 
#uwd ist das Verzeichnis, wo der a99-Server arbeitet, und #urn die interne Nummer des Satzes, der geholt werden soll. 

Link zum Bearbeiten eines Satzes

Bearbeiten

Auch hier steckt ein CGI-Befehl dahinter, nur mit einem anderen FLEX: 

<a href="/cgi-bin/cgi.exe?flex=getedit&VuwD=c:\opac&Vurn=43"> 
   Bearbeiten 
</a>

Der FLEX  getedit.flx  produziert damit die Seite, die man anschließend sieht, mit eingebettetem Bearbeitungsformular. 
Soll dieses anders aussehen: einen anderen FLEX schaffen, abgeleitet von getedit.flx, und dessen Namen oben einsetzen. 
Auch der Baustein GETEDIT.HTM (Kopfteil der Ergebnisseite) muß evtl. modifiziert werden. 

Bearbeitungsformular

Beispiel: So sieht in HTML das Formular aus, das zum Editieren vorgelegt wird. 
Erzeugt wird es von GETEDIT.FLX und D-EDIT.APR (nur für die TEXTAREA), wodurch die in blau zusehenden Werte des aktuellen Satzes eingefügt werden. 
Darin sind die Stellen für Anpassungen mit XXX markiert! Beim Absenden wird der FLEX  write.flx  angestoßen. 
Als Kopf wird GETEDIT.HTM benutzt. Zu beachten ist die Variable VusM für den Speichermodus: Ist diese besetzt, wird im FLEX der Befehl new gegeben, womit der übergebene Satz als neuer Satz gespeichert wird. Diese Setzung nimmt schon das Programm CGI.EXE vor, es steht nicht im WRITE.FLX. Das muß sein, weil schon vor dem WRITE.FLX die Feldinhalte eingesetzt werden, und new muß davor kommen. 

...
<form name="Satz" action="/cgi-bin/cgi.exe" method=POST onSubmit="return CheckIn();"> 
<input type="hidden" name="flex" value="write"> 
<input type="hidden" name="VuwD" value="c:\opac">
<input type="hidden" name="Rnum" value="#350"> 
<input type="hidden" name="Vurn" value="350"> 
<input type="hidden" name="VueD" value="20010303"> 
<input type=submit value="Speicherung ausf&uuml;hren"> 
<input type=radio name="VusM" checked value="">als Korrektur 
<input type=radio name="VusM" value="i">als Neusatz 
<table> 
<tr> 
 <td><b>Titel:</b> </td> 
 <td><font face="allegro Lucida Console"> 
 <input name="V20 " type=text size=100 maxlength=200 value="¬The¬ Prince and the 
   professor"></td> 
 </tr> 
<tr> 
<td><b>Name:</b> </td> 
<td><font face="allegro Lucida Console"> 
<input name="V40 " type=text size=100 maxlength=200 value="Fleissner, Robert F"></td> 
</tr> 
<tr><td valign=top><b>Rest:</b> </td> 
<td><font face="allegro Lucida Console"> 
<TEXTAREA name="Text" rows=12 cols=100> 
#30asl 
#31p_s4054714; Goethe, Johann Wolfgang ¬von; Marlowe, Christopher; Frost, Robert 
#31tHamlet; Faust 
#74 Heidelberg 
#75 Winter 
#76 1986 
#77 XXVII, 217 S. 
#85 Beiträge zur neueren Literaturgeschichte Folge 3 ; 73 
#87 3-533-03791-6 = 3-533-03792-4 
#90 2651-4101 
</TEXTAREA>
</td></tr> 
</table><br> 
</form><hr> 
... 

Zu guter Letzt 
Hinweis zum Laden eigener Daten 
Mehr zu dem Thema steht in einem eigenen Text über `Fremddaten`. 
Das gilt in dieser Form für Datenbanken mit dem CoOL-Schema. 
Sollen eigene Daten in die Datenbank eingemischt werden, muß man eine Datei EXTERN.DAT in folgender Form bereitstellen (und zwar auf dem Verzeichnis, wo man a99 gestartet hat): 
#00  IdNr  <optional>
#20  Titel 
#8e  URL 
#30  Sachgruppe (z.B. ma für Mathematik; s. Register 7) 
#0c  Rubrik (z.B. 015 für E-Journal; s. Register 7 unter F) 
#40  Verfassername (falls einer existiert) 
#61  Körperschaftsname 
#88  ISSN 
#98  Annotation 
Zwischen zwei Datensätzen eine Leerzeile. 
Zeichencodierung: DOS-ASCII. 
Weitere Kategorien: siehe `"allegro"-Formatdokumentation`. 
Das Einlesen geht dann so: In a99 wählt man den Menüpunkt` "Datei | Externe Ergebnismenge laden", dann wird die Datei EXTERN.DAT zunaechst in einer Kurzübersicht angezeigt. Wenn alles richtig aussieht: "Datei | Offline-Datei - Datenbank". 
Lange Datenfelder, z.B. #98, können umgebrochen sein, dann muß aber jede Fortsetzungszeile mit einem Leerzeichen anfangen. 

?Wer kann RuckZuck brauchen?=h =1. Wer kann RuckZuck brauchen 
?Was ist RuckZuck?=h =2. Was ist "RuckZuck"? 
?Wie startet man RuckZuck?=h =3. Wie startet man RuckZuck? 
?Funktionsweise=h =4. Wie geht das? 
?Was macht/sieht der Nutzer?=h =5. Der Ablauf 
?FLEXe, Hinweise für CGI-Kundige=h =6. Liste der FLEXe 
?Hinweise für allegro-Kenner=h =7. Hinweise 
?HTML-Dokumentation=h =8. HTML-Dokumentation 
?"allegro"-Formatdokumentation=h aca-1 
?allegro-WWW-Schnittstelle=x jan http://www.allegro-c.de/ac-dbs.htm 
?"populo"-Paket=x jan http://www.gymel.com 
?Fremddaten=h fremd 
?PHP=h phpac 
?XAMPP-Paket=x jan http://www.apachefriends.org/de/xampp-windows.html#628