Programmänderungen in UNITED/XY

V1.972 (2008-02-18)

Achteinhalb Jahre nach dem letzten Release probierte in der Person von Michael Frenzel zum ersten Mal ein Spielleiter eine bestimmte Kombination von Parameterwerten... also auf zum fröhlichen Bugfixen:

TDD: Falls der Parameter TDD gesetzt und der Parameter HTML-ERZEUGEN nicht gesetzt war, stürzte das Programm bei jeder Austragung eines Spiels mit einem "runtime error 105" ab, weil eine Ausgabefunktion von HTML-Code innerhalb des TDD-Moduls den Wert des Parameters HTML-ERZEUGEN an zwei Stellen (Öffnen und Schließen der HTML-Tabelle für das gesamte Spiel-Ergebnis) nicht korrekt abfragte und dann versuchte, in die zuvor nicht geöffnete HTML-Ergebnisdatei zu schreiben.
TDD: Falls der Parameter TDD gesetzt und ein Verein keinen Spieler auf der Bank sitzen hatte (also sämtliche Spieler seines Mannschaftskaders in einem Spiel einsetzen musste), erzeugte das Programm beim Versuch, eine "leere Bank" in der Auswertung darzustellen, eine Meldungsausgabe "MSG: NO MESSAGE IN PREPARATION (TDD00004)", weil die Anweisungen zur Erzeugung und Ausgabe der die "leere Bank" beschreibenden Meldung TDD00023 im Programmcode fälschlicherweise nicht in einen gemeinsamen Block geklammert waren (nur das Anfordern der Meldung beim Meldungssystem wurde von der leeren Bank abhängig gemacht, die Ausgabe mit Zugriff auf den tatsächlichen Meldungstext erfolgte dagegen immer, auch wenn gar keine Meldung zuvor angefordert wurde)

V1.972 (2002-12-26)

Ein paar kleinere Änderungen aus Eigenbedarf, für welche sich ein Release nicht lohnte (im Wesentlichen eine Umstellung des HTML-Codes auf XHTML und Cascading Style Sheets):

RND_ENDE, SAISON: HTML-Code bei der Ausgabe der Sperren verschönert (bisher <h1>-Überschrift plus Tabelle, nun Tabelle mit CSS-formatierbarer <caption>); dafür musste die Reihenfolge der Ausgabe zweier Meldungen vertauscht werden, um den Programmcode plausibel zu halten (die Änderung der Texte selbst erfolgte in der Meldungsdatei, in den Meldungen RNDEN121 bzw. RNDEN113).
Dieselbe Änderung (mit denselben Meldungen) war auch in der expliziten Sperren-Ausgabefunktion für das Saison-Info erforderlich (normalerweise werden die Sperren ja implizit während des Rundenendes berechnet).
SAISON: Die HTML-Tabelle der abgebuchten Vermögenssteuern (Teilprogramm "Saisonwechsel") für die Auswertung des Saison-Infos wurde um eine Spalte für die Anzeige des zu versteuernden Betrags erweitert, wofür die Meldung SAISO631 eine zusätzliche Einfügeposition erhielt.
TABELLEN: HTML-Code bei der Ausgabe der Ligatabellen verschönert (bisher <h1>-Überschrift plus Tabelle, nun Tabelle mit <caption> und CSS-Klasse "n" für Namens-Zellen); zudem relative Spaltenbreiten mit den neuen Meldungen TABEL011 bis TABEL015 in XHTML-kompatibler Form (<colgroup> bzw. <col>-Tags) definiert.
UNITED.MSD, UNITED.MSE: Keine exakten Formatierungen mehr direkt in HTML, also nun "spartanischer" HTML-Code; dies erleichtert die einheitliche Formatierung aller von UNITED/XY erzeugten HTML-Ausgabedateien mit Hilfe zentral definierter Cascading Style Sheets, anstatt wie vorher erforderlich entweder die exakte Formatierung der programmgenerierten Dateien übernehmen oder diese in jeder Auswertung manuell anpassen zu müssen. (Eigentlicher Sinn der Aktion war die automatische Erzeugung von validem XHTML-Code für die Auswertungen auf www.schroepl.net, worin exakte HTML-Formatierungen nicht mehr geduldet werden.)
Die wichtigsten Änderungen:
  • HTML DOCTYPE von HTML 3.2 nach XHTML 1.0 Transitional
  • Spiel-Ergebnisse: Tabellen haben nun eine CSS-Klasse "spiel", die Ergebnis-Zeile innerhalb der Tabelle eine CSS-Klasse "e".
  • GM-Angebot & Privater Handel: Tabellen haben nun eine CSS-Klasse "handel", die Zellen mit dem Spieler- und dem Vereinsnamen des Käufers eine CSS-Klasse "name" (für eventuelle linksbündige Ausrichtung im Gegensatz zu den anderen Spalten mit Zahlenwerten).
  • Nichtliga: Tabellen haben nun eine CSS-Klasse "nl".
  • Spielplan: Tabellen haben nun eine CSS-Klasse "spielplan".
  • Sperren: Tabellen haben nun eine CSS-Klasse "sperren" und eine <caption> als Überschrift.
  • Torschützenlisten: Tabellen haben nun eine CSS-Klasse "tor".
  • Transferliste: Tabellen haben nun eine CSS-Klasse "tfl".
  • Alle HTML-Tags nun in Kleinbuchstaben (Dateien im WWW besser komprimiert übertragbar).
Nebenbei wurden während der Anpassung der englischen Version der Meldungsdatei eine Handvoll Texte innerhalb von HTML-Schablonen, die bisher übersehen worden waren, nachträglich übersetzt.
Ganz ohne CSS-Formatierung sehen die neuen HTML-Dateien deutlich anders aus als in der vorherigen Version; die Erstellung eines kleinen Style Sheets ist also sehr anzuraten.

V1.97 (1999-07-18), Release-Version!)

Die Pentium-Rechner werden schneller!

Sogar so schnell, dass im Initialisierungscode von Borland-Pascal 7.0 eine dort vorhandene Warteschleife nicht mehr ausreicht - und jedes mit diesem Compiler übersetzte Programm mit einem "runtime error 200" abstürzt.

Von Borland gibt es glücklicherweise einen Patch (zwei Standardmodule des Compilers werden ausgetauscht). Mit dem so veränderten Pascal-Compiler habe ich UNITED/PC neu übersetzt.

GM_ANGEB: Beim Prompt "Ist dieser Spieler so in Ordnung" nach der Eingabe eines neuen Spielers werden nun bereits seine ins Standardformat umgesetzten Werte angezeigt (neuer Insert in Meldung GMANG116).

V1.96 (1998-12-15)

Im Wesentlichen Unterstützung für USW 1.13:

SP_POKAL: Bei der Erzeugung der HTML-Auswertungsdatei stimmte mit der Erweiterung konsistenter HTML-Strukturen nicht alles so recht. Es gab eine entsprechende Fehlermeldung; die Auswertungslogik war allerdings nicht betroffen. Die Verarbeitung wurde nun repariert.
UDEC: Die Länge eines Dateinamens inklusive Pfad wurde von 40 Zeichen auf 255 Zeichen gesetzt.
Weiß der Himmel, was uns damals geritten hat - aber bei nur 40 Zeichen maximaler Pfadlänge funktionieren einige Datei- und Verzeichniszugriffe nicht mehr, wenn UNITED/XY relativ tief im Verzeichnispfad installiert ist. (Bei mir auf Verzeichnisebene 6, und dann stürzte das Programm beim dynamischen Anlegen des USW-Verzeichnisses ab.)
Speicherprobleme sind mir bisher keine aufgefallen (die hätten eine Erklärung für das Byte-Sparen sein können).
USW: Die fehlerhafte Anzeige der Rest-WP wurde korrigiert.
Die generierten Anweisungen enthalten nun auch einen Verweis (Kommando GHW) auf die Handelswerttabelle von UNITED/XY.
Die Kommandos zur Beschreibung der einzelnen Spieler enthalten nun auch die Namen der Spieler (USW konnte das bereits), sodass die USW-Ausgabedatei nun besser lesbar wird.
Die Kommandos in den generierten USW-Anweisungsdateien nutzen die neuen Möglichkeiten von USW 1.13:
  • Der neue Geldzähler wird mit dem Bargeld des Vereins plus dem Wert der nach dem NMR-Trainings ggf. noch verbleibenden WP (bewertet über parameter.wp_wert) initialisiert.
  • vor und nach jedem von UNITED/XY bereits NMR-trainierten Spieler wird die neue USW-Variable In-Abschnitt so gesetzt, dass diese Spieler von USW in derselben Runde nicht ebenfalls trainiert werden.
Die zusätzlichen Flags, mit denen man beim MEMORY-Kommando wahlweise nur Teile der vier Speicher anzeigen kann, habe ich nicht verwendet, da USW dann bisher keine Überschrift ausgibt. Wer so etwas will, kann in der Meldungsdatei die Meldung USWEX282 bzw. USWEX424 selbst anpassen.
Eigentlich wollte ich auch noch die Transferliste scannen und die ggf. dort angebotenen Spieler des jeweiligen Vereins mit bewerten; das ist aber nicht so einfach, wie es vielleicht klingt.
Betriebskonzept: Ich habe in das vom Programm angelegte USW-Verzeichnis die Dateien USW.USW (Basis-Parameter) und USW.EXE kopiert sowie dort eine Datei USW.BAT mit dem Inhalt "USW.EXE -Vzd AUFSTIEG.USW" angelegt. Ein Doppelklick auf diese Batch-Datei führt die Bewertung meines gesamten Ligasystems durch (nachdem UNITED/XY zuvor aktuelle Kommandodateien exportiert hat).
UTILITY: Die Funktion sp_extra zur Berechnung eines Spielerdatenstrings inklusive Sondereigenschaften berücksichtigt jetzt auch Sperren und DP. (Die wurden bisher zwar schon berechnet, aber nicht in den String eingefügt...)

V1.95 (1998-09-18)

UNITED.MS*: Diverse Reparaturen bei den HTML-Anweisungen. (Nur schöneres Layout, keine geänderte Funktionalität; 'veraltete' Tags wie <FONT>, <CENTER> etc. eliminiert.)
Auch der uralte Ausrichtungsfehler bei der Kontrollausgabe des GM-Angebots auf dem Bildschirm wurde hierbei endlich korrigiert.
diverse:
(u. a. COMMENT, ERGEBNIS, SC_FILE, SP_LIGA)
Die HTML-Ausgabedatei für das Siegchancenprotokoll wurde versehentlich mehrfach logisch abgeschlossen. Dafür fehlte das logische Dokumentende in der Datei mit den Spielergebnissen. (Beides wurde von den toleranten Browsern bisher akzeptiert.)
Ich habe die gesamte Logik der HTML-Kommentarausgabe so geändert, dass nun konsequent immer ein logisch abgeschlossenes HTML-Dokument existiert, auch in jedem Zwischenzustand (also z. B. auch nach der Ausgabe einer Zeile des Spielkommentars!).
Außerdem habe ich meine gesamte aktuelle Auswertung durch einen HTML-Validator gejagt; dabei habe ich eine Handvoll kleinerer Fehlerchen gefunden und behoben.
GM_ANGEB: Die Verdrängung der Ausgabedatei GMNEU.AUS erfolgt nun tatsächlich nach GMNEU.BAK (bisher nach GMNEUBAK).
TS_LISTE: Schönerer HTML-Code (überflüssige Leerzeile eliminiert); 'Torschützenliste' in <TITLE> nun HTML-encoded (also mit '&uuml;').
TRAINING: Die Funktion für das NMR-Training wurde nach außen sichtbar gemacht - weiter unten brauchen wir die nämlich...
TRANSF_L: Schönerer HTML-Code (Zeilenumbruch, Ausrichtung der Felder).
Bisher wurde versehentlich das Durchfallen eines Spielers an die Nichtliga nicht in die HTML-Datei protokolliert (weil das in einem ganz anderen Programmzweig stattfindet als die Versteigerung); dies wurde nun ergänzt.
UTILITY: neue Funktion sp_extra, welche eine Zeichenkette mit Spielerdaten nun inklusive Sondereigenschaften erzeugt (Trainingsgrenze, Trainingsaufwand, Fremdeinsätze, DP und Sperren nach UNITED/XY-Notation). Das brauchte ich für die nachfolgende Neuerung, könnte man aber auch an anderer Stelle benutzen, etwa im Dialog zur Auswahl eines Spielers etc.
USW: Neues Modul: Schnittstelle zum Programm USW (United-Spieler-Werte, von Robert Gunst, zur Berechnung von Handelswerten nach der RWP-Theorie).
Im Teilprogramm "Hilfsfunktionen" wird nun zusätzlich ein Menüpunkt zum Export der Spielerdaten aller Vereine im USW-Format angeboten. Diese bewirkt folgendes:
  1. Im Verzeichnis TEXT des Ligasystems wird ein Unterverzeichnis USW angelegt.
  2. In diesem Verzeichnis wird für jede Vereinsdatei eine korrespondierende USW-Kommandodatei mit demselben Basisnamen, aber der Endung .USW angelegt.
    Vorher machen wir schnell noch ein NMR-Training in der Kopie des Vereins, um die vorhandenen WP sinnvoll anzulegen - dadurch wird später die Bewertung des Vereinsvermögens realistischer.
  3. Zudem wird eine weitere Vereinsdatei mit dem Namen des Ligasystem-Verzeichnisses als Basisname und ebenfalls der Endung .USW angelegt, welche die Anweisungen zur Auswertung aller in 2. erzeugten Vereinsdateien enthält und nach jeder Einzeldatei nochmal den Gesamtwert des Vereins anzeigt. Diese allgemeine Datei versucht vor der Auswertung der vielen Vereinsdateien, eine Datei namens USW.USW auszuwerten - dort kann der Spielleiter eine Basisbeschreibung ablegen, welche als Grundlage der Spielerbewertung herangezogen werden soll.
(Hoffentlich) alles, was man in USW sonst noch an Parametern einstellen kann und was UNITED/XY selbst an Werten kennt (letzte Handelsrunde etc.), wird als Befehl in jeder einzelnen Vereinsdatei eingestellt. Insgesamt kann der Spielleiter also in USW den Befehl durch <systemname> eingeben und erhält - neben vielen einzelnen Ausgabedateien - insbesondere eine Datei mit dem Namen <systemname>.TXT, in der alle Vereinsnamen und die jeweilige Gesamtbewertung des Vereins aufgelistet sind.
Zur Bewertung eines Spielers wird der Befehl WERT ohne Parameter verwendet. Das mag bei einigen Spielern nicht exakt das sein, was der Spielleiter vielleicht haben will; falls andererseits USW auf die Idee kommt, auf eine ungewöhnliche Methode den maximalen Wert aus einem Spieler herauszuholen (denn das versucht dieser Befehl), sollte sich der Spielleiter ernsthafte Gedanken über die von ihm verwendeten Einstellungen zur Bewertung machen...
Leider bietet USW derzeit keine Möglichkeit, das Geld des Vereins und den (nach dem NMR-Training übriggebliebenen) Restbestand an WP mitzubewerten...
Um die Eindeutigkeit der erzeugten Dateinamen kümmert sich die Export-Funktion übrigens nicht - im Konfliktfall würde sie einfach über eine existierende Datei drüberschreiben.

V1.94 (1998-06-26)

GM_ANGEB: Bei der Protokollierung verkaufter GM-Angebots-Spieler war in der HTML-Variante versehentlich ein '>'-Zeichen fest eingebrannt nach '&gt;' umgesetzt wurden, statt die hierfür vorgesehene (und per Parameter abschaltbare!) Funktion html_code zu verwenden. Dies wurde korrigiert. (Gemeldet von Robert Gunst.)
HTML: Das Zeichen '"' wurde bisher versehentlich auf den HTML-Code für '&' abgebildet. Dies wurde korrigiert.
PARAMETR: Neuer Parameter STEUER-FREIBETRAG (Standardwert: 1500).
SAI_INFO: Die Meldungen SAIIN004 und SAIIN005 (Protokollierung von Sperren und Handelssperren im Saison-Info) wurden bisher identisch nach INFO.AUS und INFO.HTM ausgegeben. Im zweiten Falle wurden jetzt die fehlenden Aufrufe der HTML-Codierungsfunktion für Sonderzeichen eingebaut. (Gemeldet von Robert Gunst.)
SAISON: Implementierung der progressiven Vermögenssteuer aus AUFSTIEG, mit einstellbarem Freibetrag als Parameter (1/100 des darüber hinausgehenden Betrages wird als Steuersatz auf eben diesen Betrag angewendet) als neuer Menüeintrag im Teilprogramm zum Saisonwechsel.
Die Ausgabe der Steuerzahlungen erfolgt in ASCII und HTML, inklusive der Summe aller zu versteuernden Vermögensbeträge und Summe aller gezahlten Steuerbeträge. Würde UNITED/XY sich bei kompatiblem Datenformat noch an das Vermögen der Vereine zu Saisonbeginn erinnern, dann hätte ich auch gleich die Zugewinnsteuer aus OBERFOUL mit eingebaut.
SCFILE: Neues Modul, herausgelöst aus GLUECK, wo diese Funktionen inhaltlich nicht wirklich hingehörten. (Drei bereits existierende Meldungen haben dabei den Präfix gewechselt, fünf neue sind hinzugekommen.)
Die Ausgabe der Chancenverteilung eines Ligaspiels in die entsprechende SC-Datei wurde bisher versehentlich in eine einzige Zeile vorgenommen statt in je eine Zeile pro Begegnung. Dies wurde korrigiert. (Gemeldet von Robert Gunst.)
Auch die SC-Dateien werden nun in einer HTML-Variante erzeugt. (Robert Gunst will das für TDD verwenden.) Die Ausgabe für jeweils eine Tabellenzeile musste leider auf mehrere Meldungen verteilt werden, da der verwendete Pascal-Compiler intern keine längeren Zeichenketten als 256 Byte erlaubt, was nicht reichte. (Ich bin ja schon froh, dass ich jetzt nicht mit den gerade überschrittenen 32 kB Texten in der Meldungsdatei an eine harte Grenze stoße - diese Tabelle kann bis zu 64 kB groß werden...)
Erwartungstor-Werte werden in der ASCII-Variante nun im Format 5:2 (bisher 4:2) ausgegeben, sodass nun auch zweistellige Anzahlen von Erwartungstoren in einheitlicher Ausrichtung dargestellt werden können. (Da sich bisher keiner beschwert hat, scheint das nicht so oft vorzukommen...)
SP_LIGA: Reihenfolge der Zugriffe auf Ausgabe- und SC-Dateien umgestellt. Es gab Probleme bei der Implementierung der HTML-Ausgabevariante für SC-Dateien, weil beide Zugriffe bisher wild gemischt waren. Bei den ASCII-Dateien ist das wegen getrennter Dateihandles kein Problem, aber das HTML-Modul ist aus grundsätzlichen Überlegungen nicht reentrant, sodass sich die verschiedenen Zugriffe auf die gemeinsame htmlFile nun gegenseitig die Dateien zerschossen.

(Vorläufig) abgelehnte Änderungswünsche:

Auf der Watchlist für kommende Änderungen stehen:

V1.934 (1998-06-11)

Diverse bug fixes - und von was für uralten Fehlern! Vielen Dank an die betroffenen Spielleiter, die mir die Suche sehr erleichtert haben.

AUFST_NM: Bei der vorrangigen Aufstellung von (nur) uneingespielten neuen Talenten in einer NMR-Aufstellung wurde versehentlich nicht abgefragt, ob der Spieler gesperrt sei. (Martin Schlumpberger meldete den Fehler - der war leicht zu finden, es fehlte einfach eine der vielen Abfragen. Wie oft ist schon ein uneingespieltes nT gesperrt?)
AUFST_AM: Bei Pokalspielen werden nun endlich auch für Amateure mit Heimvorteil die Wahrscheinlichkeiten korrekt angezeigt. (Andreas Steffens meldete den Fehler mit genauen Daten.)
Bei der ganzen Statistik-Rechnerei werden intern diverse Reihenwertungen mitgeführt (mit und ohne Härte, vor und nach Roten Karten etc.) Bei Profi-Vereinen wird der Heimvorteil der 'Netto'-Aufstellung zugeschlagen, bei Amateurvereinen bisher fehlerhafterweise der 'Brutto'-Aufstellungen (bei den Profis ist das die mit Härte vor Härtefolgen). Angezeigt wird aber natürlich immer die Statistik basierend auf den 'Netto'-Daten des Amateurs, weil die Ausgaberoutine ja weiß, dass der Amateurverein Härte 0 eingesetzt hat, und deshalb die Chancenverteilung 'Heim mit Härte' (wo der HV dringesteckt hätte) automatisch unterdrückt. Deshalb war der Fehler so schwer zu finden. (Außerdem gibt es natürlich bei keinem der beiden Programmautoren Pokalspiele mit Heimvorteil...)
NEU: Der erste Ligaspieltag einer Runde wird nun auch für überzählige Runden der Saison nach dem Saisonende (laut Parameterdatei) 'korrekt' gesetzt.

Der seit vielen Jahren existierende mysteriöse Fehler bei der Ausgabe des Spielplans konnte aufgrund der Konfiguration von Kai König (im Ligasystem Wadenbeißer) erstmals reproduziert werden!

Er tritt dann auf, wenn ein Spielleiter in seinem Ligasystem in derjenigen Runde, welche laut seiner Parameterdatei die letzte der Saison ist (das war in diesem Falle Runde 11), null Ligaspieltage definiert hat. (Das wird in der Datei VDATEI.DAT im Verzeichnis MIXDAT gespeichert.)
Das passiert insbesondere dann, wenn der GM beim Aufbau der VDATEI.DAT während der Neuordnung des Ligasystems angibt, weniger Runden (im vorliegenden Fall nur 10) in der kommenden Saison austragen zu wollen, als er gleichzeitig in seiner Parameterdatei angegeben hat.
In diesem Falle ist die Nummer des ersten Spieltages dieser Runde nicht definiert (wie sollte sie auch?), aber eben aus diesem Wert versucht das Programm nun, die Menge der auszugebenden Spieltage zu berechnen, weil es der Parameterdatei glauben muss. Es gibt nirgendwo eine andere Stelle, wo man die Anzahl der Runden abspeichern könnte: Die Tabellen in der VDATEI.DAT sind immer 11 Einträge lang. Ohne diesen Parameter könnte man also gar keine andere Saisonlänge als 11 Runden konfigurieren, und wenn der falsch angegeben wird, dann funktioniert eben die Berechnung der Spielplanausgabe bisher nicht. (Und womöglich manches andere auch nicht, grusel...)

Abhilfe:

  1. ANZAHL_RUNDEN in der Parameterdatei korrekt setzen, oder
  2. in der entsprechenden Zeile der VDATEI.DAT die Angabe für den ersten Spieltag dieser letzten (spielfreien) Runde der Saison so setzen, wie das Programm das erwartet, also auf eins mehr als den letzten Spieltag der Saison.

Letzteres wird das Auswerteprogramm ab dieser Version selbst tun. (Bisher schrieb es für alle überzähligen Runden am Saisonende immer '0' dorthin - was bei Kai König eben genau das Problem auslöste, dass nur alle Spieltage von 1 bis -1 ausgegeben wurden, nämlich gar keine.)

V1.933 (1998-04-17)

Zwei bug fixes für 1.93:

TABELLEN: Bei der Erzeugung einer Tabellenzeile wurde der Parameter zur HTML-Erzeugung in einem logischen Ausdruck falsch verwendet.
Deshalb konnte es zu Aufrufen mit unsinnigen Parameterwerten kommen, was in einem Programmabsturz ("error 201 at 0B1B:1221") führen konnte, falls der Parameter HTML-ERZEUGEN ausgeschaltet war.
TORLISTE: Noch schlimmer: Die Erzeugung von Torschützenlistenzeilen in HTML wurde bisher sogar ohne Abfrage dieses Parameters durchgeführt (da krachte es also auch, wenn die HTML-Datei nicht offen war).

Mist - der ganze Nicht-HTML-Teil ist einfach nicht sinnvoll zu testen, ohne ein paar komplette reale Auswertungen zu machen - aber ich selbst brauche die HTML-Ausgaben für das Amtsblatt... :-(

V1.932 (1998-01-31)

SP_POKAL: (Bug fix für 1.93) Beim Öffnen der HTML-Ausgabedatei wurde statt dem Text der entsprechenden Meldung ein konstanter Text in den Kopf des HTML-Meta-Tags geschrieben. Dabei wurde die angeforderte Meldung nicht beim Meldungssystem abgeholt, und die nächste Meldung (HTML0101) kollidierte dann mit dieser (SPPOK202).

V1.931 (1998-01-18)

Hauptsächlich bug fixes für 1.93:

PARAMETR: Der neue Parameter aus 1.93 heißt HTML-CODIEREN, nicht HTML-KONVERTIEREN (wie fälschlicherweise in der CHANGES-Datei von 1.93 behauptet).
TABELLE: Bei der Ausgabe einer Tabellenzeile wurde fälschlicherweise der Parameter HTML-ERZEUGEN nicht abgefragt - deshalb wurde die Ausgabe der Zeile auch dann versucht, wenn die HTML-Ausgabedatei gar nicht geöffnet war ( -> Crash!).

V1.93 (1997-12-29)

UNITED/XY kann nun neben den bereits bekannten Auswertungsdateien zusätzlich weitere Auswertungsdateien mit HTML-formatierten Informationen generieren.
Ich bin nicht sicher, ob ich nicht das eine oder andere Modul übersehen habe - ich habe nicht alles, was in ASCII generiert wird, nach HTML 'portiert', sondern mich auf die wirklich veröffentlichten Teile von United- bzw. TDD-Auswertungen konzentriert. Falls jemand unbedingt weitere HTML-Ausgaben haben will, bitte bei mir melden!

Sämtliche generierte HTML-Anweisungen wurden über Meldungen realisiert. Das heißt insbesondere, dass statt HTML ggf. auch andere Formate generiert werden könnten (TeX???), wenn die Meldungen angemessen ersetzt würden. Sollte das jemand versuchen und dabei auf Probleme stoßen, bitte ich um entsprechende Rückmeldung!
Falls für andere Formate an speziellen Stellen weitere Ausgaben von Meldungen erforderlich sein sollten, kann ich diese gerne einbauen (und in der HTML-Version durch leere Zeichenketten füllen). HTML ist zum Glück nicht von einer Zeilenstruktur abhängig - ich habe dennoch an den meisten Stellen versucht, eine lesbare Struktur der generierten Dateien zu erzeugen, bin aber bezüglich Zeilenumbrüchen relativ flexibel.
Das Problem ist schon eher, dass das Meldungssystem Probleme bekommt, falls eine Meldung länger als 255 Zeichen wird. Ich bin bei HTML mehrere Male nur knapp unter dieser Grenze geblieben (insbesondere bei den komplexen Liga- und Teamtabellenzeilen); wenn jemand an diesen Stellen noch längere Meldungen generieren will, dann müsste ich eventuelle Ausgaben auf mehrere Meldungen verteilen.

COMMENT: HTML-Ausgabeanweisungen für den Spielkommentar.
DATAFILE: Die bisher existierende Verdrängungsfunktion konnte nur nach *.BAK verdrängen, das würde bei gleichzeitig existierenden ASCII- und HTML-Dateien nichts helfen. Nun muss beim Verdrängen einer Datei eine neue Endung angegeben werden. (Millionen von bereits existierenden Aufrufen wurden angepasst.) Dadurch wurde es möglich, *.TXT nach *.BAK und *.HTM nach *.HTB zu verdrängen.
ERGEBNIS: Diverse HTML-Ausgabeanweisungen für Spiel-Ergebnisse, Torschützen, Gelbe und Rote Karten.
GM_ANGEB: Ausgaberoutinen für Versteigerung und neues Angebot in HTML.
bug fix: Während der Konstruktion des Werte-Strings für einen versteigerten Spieler wurde die Funktion r_Char aufgerufen (um die externe Darstellung eines Reihenbuchstaben bei Fremdeinsätzen zu berechnen). Dies ist aber zu diesem Zeitpunkt nicht erlaubt ("MESSAGE COLLISION"), weil das Meldungssystem nicht reentrant ist. (Der Fehler konnte nur bei der Eingabe von Sonderspielern auftreten, die bereits Einsätze in fremden Reihen haben. Beim Testen der neuen Ausgaberoutinen habe ich halt einiges durchprobieren müssen...)
Die Reihenfolge dieser Operationen wurde korrigiert.
HANDEL: Die Generierung einer vollständig korrekten HTML-Ausgabedatei für alle Privaten Handel einer Runde ist etwas tricky, da pro Runde mehrere Handelsphasen stattfinden können und das Programm nicht weiß, welche davon die letzte ist, aber die generierte Datei mit einer HTML-Endesequenz (</BODY></HTML>) abgeschlossen werden muss.
Deshalb muss UNITED/XY bei jedem Schließen der Auswertungsdatei für NL-Verkäufe auf Verdacht die HTML-Endung erzeugen, beim nächsten Öffnen dieser Datei selbige vorher umbenennen, bis vor die HTML-Endung duplizieren, anschließend mit den neuen Informationen über Verkäufe ergänzen und dann wieder HTML-abschließen. ("Aber wenn's schee macht...")
Das muss ein mutiger GM wissen, der versucht, das Ausgabeformat umzustellen (TeX?), denn UNITED/XY sucht in diesem Falle nach der Zeichenkette, die in der Meldung mit dem Index 'HTML0121' steht (das ist die '</BODY>'-Zeile). Diese also bitte bewusst mit spitzen Fingern anfassen!
HTML: Neue Unit mit folgenden Funktionen:
  • Erzeugen eines assoziierten Dateinames zum Namen einer Ausgabedatei (die Endung wird durch .HTM ersetzt)
  • Konvertieren von ASCII-Sonderzeichen in HTML-Entities (58 Sonderzeichen werden durch die jeweils entsprechende Wortcodierung von HTML nach ISO 8559 ersetzt).
    Diese Funktion ist über einen eigenen Parameter (siehe unten) separat abschaltbar. (Das brauchen die TeX-Leute.)
  • Erzeugen eines HTML-Dokumentkopfes
  • Erzeugen eines HTML-Dokumentabschlusses
Alle generierten HTML-Anweisungen sind durch Meldungen mit entsprechenden Einfügungen beschrieben. Insbesondere werden alle erzeugten HTML-Dokumente mit einem einheitlichen (aber parametrisierten) Dateikopf generiert, dessen Struktur an einer einzigen Stelle der Meldungsdatei leicht änderbar ist. (Beispielsweise lässt sich die hübsche grasgrüne Hintergrundfarbe - passend zum Thema Fußball - zentral einstellen...)
MSG: Das Potential des Meldungssystems wurde auf 1000 Meldungen mit 35000 Zeichen Text erhöht.
Das Meldungssystem hat noch eine Menge Luft: Ohne Änderung des Konzeptes sind 4368 Meldungen mit 65535 Zeichen Text möglich. Dies jetzt schon auszureizen, würde allerdings sinnlos DOS-Speicher kosten - die zwei Zahlenwerte kann man bei Bedarf immer noch ändern.
NL: Den ganzen Ärger mit den HTML-Ausgaben (siehe oben beim Privaten Handel) gibt es an dieser Stelle ganz identisch, weil NL-Verkäufe wie Privater Handel mehrfach pro Auswertung stattfinden können.
PAARUNG: HTML-Ausgabeanweisungen für die Spielpläne aller Ligen. Wie in der ASCII-Version werden die Vereins-Kurznamen verwendet; ein Versuch mit den Langnamen (sechs Programmzeilen Änderung) erbrachte keine 'schönen' Ergebnisse.
PARAMETR: Neuer Parameter HTML-ERZEUGEN (default: 'N'), schaltet die gesamte HTML-Generierung ein bzw. aus.
Neuer Parameter HTML-CODIEREN (default: 'J'), schaltet die Konvertierung von Sonderzeichen nach HTML-Standard ein bzw. aus. (Sollte mal jemand TeX oder anderes Zeug mit dieser Funktionalität generieren wollen, wäre er über diese HTML-Sonderzeichencodes gar nicht glücklich...)
RND_ENDE: HTML-Ausgabeanweisungen für die Ausgabe von Sperren.
SAI_INFO: HTML-Ausgabeanweisungen für die Vereinsübersicht des Saison-Infos.
SP_FREUN: Dateiverwaltung für HTML-Ausgaben.
SP_LIGA: Dateiverwaltung für HTML-Ausgaben.
SP_POKAL: Dateiverwaltung für HTML-Ausgaben.
SPERREN: HTML-Ausgabeanweisungen für die Ausgabe von Sperren.
SPIELE: Parameterversorgung für untergeordnete Aufrufe.
TABELLE: Ausgaberoutinen für Ligatabellen in HTML.
Hierbei wird nicht wie in der ASCII-Version der Kurzname. sondern der volle Name des Vereins in der Tabelle verwendet, da bei der Darstellung durch einen Browser entsprechendes Skalierungspotential vorliegt.
Die große Sortiertabelle wurde auf den Heap gelegt, da das Programm an die 64k-Grenze für statische Variablen stößt.
TALENTE: Ausgaberoutinen für entdeckte Talente in HTML.
TDD: Alles, was mit print zusätzlich in die ASCII-Ausgabedatei geschrieben wird, wird auch in die HTML-Datei geschrieben. Bei TDD-KURZ entsteht eine zusätzliche Tabellenzeile für das Partie-Ergebnis, bei der Langform entstehen zwei zusätzliche Tabellenzeilen.
alle Ausgaben werden gnadenlos HTML-codiert - ich hoffe, das funktioniert so... (auf diese Weise war das Ganze mit relativ wenig zusätzlichem Code zu realisieren.) Das Problem könnte sein, dass man nicht bedenkenlos Meldungen HTML-codieren darf, da hierbei das für das Meldungssystem relevante Zeichen '&' ersetzt würde. Da muss man leider aufpassen.
bug fix: Auch hier gab es eine Meldungskollision - allerdings nur in der TDD-Langform der Ausgaben. (Benutzt die überhaupt jemand ???)
TEAMSTAT: Neben dem Kurznamen wird auch der Name des Vereins in die entsprechende Datenstruktur aufgenommen (siehe unten).
TEAMTAB: Ausgaberoutinen für Team-Tabellen in HTML. Anders als in der ASCII-Version wird hier der vollständige Vereinsname verwendet. (Die Tabelle wird eh so breit, dass der Browser den Vereinsnamen auch noch unterbringen wird.)
TORLISTE: Ausgaberoutinen für Torschützenlisten in HTML.
Die Torschützenlisten werden als Tabellen nebeneinander generiert, was für Ligasysteme bis zu 3 Ligen effizient erscheint. Da die Formatierung vollständig über die Meldungsdatei erfolgt, sind entsprechende Anpassungen durch den Programmbenutzer möglich.
Hier wiederum wird in der HTML-Version der Kurzname des Vereins verwendet, um die Tabellenbreite erträglich zu halten (sonst macht der Spaltensatz wenig Sinn). Die große Sortiertabelle wurde auf den Heap gelegt, da das Programm an die 64k-Grenze für statische Variablen stößt.
TRANSF_L: Ausgaberoutinen für Versteigerung und neues Angebot in HTML.
Bei der Präsentation des neuen Angebotes werden - anders als in der ASCII-Version - nicht mehr umfangreiche Klartexte, sondern die Kürzeldarstellung von Sondereigenschaften verwendet. (Sonst werden die Zeilen zu lang, und das Layout der Tabelle wirkt dann nicht mehr richtig.)
UNITED.MS*: Neue Meldungen für fast alle oben erwähnten Units.

... und 30000 lines of code haben wir nun 'endlich' auch erreicht - ähem, eher wohl ziemlich deutlich überschritten, es sind nämlich schon mehr als 31000...

V1.92 (1997-07-03)

SP_LIGA: Bei der Meldung SPLIG011 war ein String-Insert angegeben, der in dieser Meldung nicht (mehr) zulässig war.
AUFST_PR: Die uralte Routine zur Ausgabe der rechten Seite der Aufstellung war so fehlerintolerant programmiert, dass sie tatsächlich abstürzte, wenn man eine NMR-Aufstellung produzierte, in der der Ausputzer fehlte. (Da macht das NMR-Modul irgendwas anders als die normale Profi-Aufstellung, die irgendwie einen gültigen Index in den leeren Ausputzer schreibt...) Dies wurde nun behoben - das Programm stürzt an dieser Stelle nicht mehr ab.
UDEC: Der Name des gespeicherten GM-Angebotes heißt nun (wieder) GMANGEB.DAT statt (in 1.91, aus ästhetischen Gründen) GM_ANGEB.DAT. Im Zweifelsfalle hat die Kompatibilität Vorrang.
UNITED.MS*: Die Meldungsdatei wurde - jeweils separat von Lukas und mir - überprüft; dabei wurden einige fehlerhaft in Gänsefüßchen geklammerte Meldungstexte korrigiert.

V1.91 (1996-03-26)

Diese Version ist etwas völlig Neues.

Bisher war UNITED/XY ein Auswerteprogramm für pbm- und ftf-United. Es waren immer Züge für die teilnehmenden Mannschaften erforderlich.

Ab der vorliegenden Version beginnt ein neuer Entwicklungszweig, der natürlich jetzt noch nicht vollständig abgeschlossen sein kann: UNITED/XY als Solitär-Computerspiel!

Hat der Manager eines Vereins den (reservierten) Namen "<UNITED/XY>", dann verhält sich dieser Verein in mancherlei Hinsicht anders als andere Vereine. Was immer von diesem Verein verlangt wird, das Programm wird (in künftigen Versionen in zunehmendem Maße) versuchen, dies ohne Aktion des Programmbedieners zu tun.

Vereine mit dem Manager "<UNITED/XY>" werden also automatisch vom Programm geführt. In künftigen Versionen ist geplant, die Fähigkeiten solcher Vereine immer weiter auszudehnen (Startaufbau, automatische Talent-Entdeckung, Gebote für versteigerte Spieler, NL-Verkäufe usw.)

Bisher wurden folgende Änderungen im Verhalten realisiert:

Training: Wird ein Training für einen automatisch geführten Verein angefordert, dann wertet UNITED/XY ein NMR-Training aus, ohne hierfür einen Bildschirm-Dialog zu führen.
Aufstellungen: Wird eine Aufstellung für einen automatisch geführten Verein angefordert, dann erzeugt UNITED/XY eine NMR-Aufstellung, ohne hierfür einen Bildschirm-Dialog zu führen. UNITED/XY setzt bei einer solchen automatisch Aufstellung (derzeit noch) keine Härte ein; ein Modell hierfür befindet sich aber in der Entwurfsphase.
Ergebnisse von Spielen: Ergebnisse werden wie bisher ausgegeben. Ist der ftf-Schalter aktiv, dann werden Reihenwertungen, Hochrechnungen usw. unterdrückt.

Im ftf-Modus kann man also United nun als Solitär-Spiel durchführen, ohne etwas über die Vereinsdaten seiner 'Konkurrenten' wissen zu müssen. (Das gilt bisher natürlich nur eingeschränkt, denn irgendwer muss zu Beginn die Vereinsdaten aller Teilnehmer eingeben...)

Im pbm-Modus kann der Spielleiter alle Aktionen eines langfristig managerlosen Vereins vollautomatisch abwickeln lassen, sich dabei aber bei den Spielen Taktik, Chancen usw. ansehen, um entsprechende Kommentare zu schreiben.

V1.90 (1996-03-26)

Eigentlich ist das ein wenig 'gemogelt' - eine Version 1.89 hat es nie gegeben -, aber um die Übersicht zu erleichtern, habe ich die 'regulären Bug Fixes', die nach 1.88 (z. T. überlappend mit 1.89) entstanden sind, in diese Datei ausgelagert. Die Überarbeitungen von '1.89' waren leider so umfangreich, dass zwischendurch doch auch ein paar inhaltliche bzw. technische Änderungen angefallen sind...

AUFST_NM: Die automatische Aufstellungsroutine stürzte ab, falls es ein Spielleiter geschafft hat, eine 'Taktik' von 0-0-0 als Referenzaufstellung zu verwenden. (Eingeben im Dialog kann man die nicht - man muss sie schon in einem zuvor abgespeicherten Spiel verwendet haben.)
Beim Laden einer Taktik wird der Sonderfall, dass ein Reihenwert kleiner als 1 ist, nun explizit abgefangen (der Wert wird auf 1 gesetzt). 0-0-0 wird also insbesondere zur 'Gleichverteilung'.
DATAFILE: Die Meldung, dass für eine Datei beim Öffnungsvorgang eine Sicherheitskopie angelegt wurde, konnte bei Verwendung voller Pfadnamen länger als 80 Zeichen werden. Und dann stürzte das Programm ab, da die gotoxy-Funktion von Turbo-Pascal negative Koordinaten nicht überlebt. Daher gibt die backup-Funktion jetzt nur noch die Basisnamen der betroffenen Dateien aus.
COMMENT: Ist der Parameter KOMMENTAR-UMBRUCH ausgeschaltet (default: eingeschaltet), dann werden Spielkommentare nicht mehr als Zeilen, sondern als eine zusammenhängende Zeichenkette in die Ergebnisdatei geschrieben. Dies erleichtert den Import der Ergebnisse in ein Textverarbeitungssystem, das Absatzstrukturen verarbeiten will.
ERGEB: Die Ausgabe von Sieg-(usw.)-Chancen kleiner als Epsilon (derzeit 1E-04 %), die im Exponential-Format ausgegeben wurden, führten, weil die beiden Pascal-Compiler hier inkompatibel sind (Turbo-Pascal zeigt - wahrscheinlich wegen der numerischen Koprozessoren der neuen PCs - den Exponenten vierstellig an, Maxon-Pascal dagegen nur zweistellig) zu einem lästigen zusätzlichen Zeilenumbruch. Dadurch überschrieb der Kommentar-Editor (der 'weiß', wieviel Platz er auf dem Bildschirm hat) die letzten Zeilen der Hochrechnungswerte.
Um keine Routine zur Darstellung von Real-Zahlen selbst schreiben zu müssen, habe ich in einem solchen Fall den Text "minimal" ausgegeben. (Sollte wirklich jemand diese miniwinzigen - und wahrscheinlich stark rundungsfehler-gefährdeten - Zahlen vermissen, dann reden wir noch mal drüber...)
MSG: Bei der Portierung des Programms nach Borland-Pascal 7.0 musste ich feststellen, dass keiner der diversen verfügbaren Editoren in der Lage ist, rechtsstehende Leerzeichen zu akzeptieren. Insbesondere kann man auf dieser Basis natürlich die Meldungsdateien nicht vernünftig warten.
Die Leseroutine für die Meldungsdatei prüft nun zusätzlich, ob das erste und das letzte Zeichen eines Meldungstextes übereinstimmend ein einfaches bzw. doppeltes Hochkomma darstellen. Ist dies der Fall, dann werden diese beiden Zeichen aus dem Meldungstext entfernt. In den Meldungsdateien habe ich alle Meldungen in Gänsefüßchen eingeschlossen.
Das Delimiter-Zeichen selbst darf nach wie vor an beliebigen Stellen im Meldungstext auftreten, auch wenn ich selbst - aus ästhetischen Gründen - davon keinen Gebrauch gemacht habe.
PAARUNG: Neue Unit, bisher in SAISON.
Der angebliche Fehler, der bei Andy Müller auftreten soll, ist nicht zu finden.
Bei der druckaufbereiteten Ausgabe der Spielpläne war eine Befehlsfolge fehlerhaft geklammert, sodass bei bestimmten fehlerhaft aufgebauten Spielplandateien nur ein Teil der Begegnungen erfasst worden wäre. Dies dürfte praktisch aber keine Auswirkungen gehabt haben, da bei Spielplänen mit fehlerhafter Zeilenstruktur sowieso nicht viel funktionieren wird (man kann in diesem Fall z. B. keine Ligaspieltage korrekt auswerten).
PARAMETR: Neuer Parameter KOMMENTAR_UMBRUCH (siehe COMMENT).
SPIELE: Manche Programmfehler merkt man einfach, wenn man den Quelltext besser dokumentiert. Beim Einsatz eines uneingespielten Talentes in einem Pokalspiel wurde fälschlicherweise der Parameter POKAL_FREMD abgefragt statt des hierfür vorgesehenen Parameters POKAL_TALENT. Die Klammerung des logischen Ausdrucks war zudem auch noch verkehrt. (Offensichtlich verwendet niemand die Möglichkeit, Liga- und Pokalspiele unterschiedlich zu behandeln...) Dies alles wurde korrigiert.
SYS_FILE: Anlässlich des gotoxy-Problems (siehe oben) wurde die entsprechende Funktion ein wenig sicherer gemacht: Sie bildet unzulässige Bildschirm-Koordinaten auf die zulässigen Randwerte ab.
T_EDITOR: Der Editor kann nun auch Geldbeträge kleiner als -1000 verarbeiten, ohne sich bei der Eingabe aufzuhängen. Man kann jedoch solche Beträge nicht mit dem Editor selbst erzeugen.

V1.89 (1995-07-08)

Diese Version enthält keine funktionellen Erweiterungen, dafür aber zahlreiche interne Verschönerungen (mal wieder) des Programms. Die Zielrichtung lautete dabei: Alle Zeichenketten raus aus dem Programm bzw. vereinheitlichen.

Das bedeutet:

V1.88 (1994-01-30, Release-Version!)

Einige Nacharbeiten zur NMR-Aufstellung von Version 1.87 waren fällig:

AUFST_NM: Nachträglicher Einbau der Eingabe einer gewünschten Maximalhärte für ftf-United (mal eben schnell eingebaut auf dem Sylvester-Con bei Lukas Kautzsch...). Das brachte auch eine zusützliche Meldung AUFNM003 mit sich.
Wegen Speicherbegrenzung im PC bzw. Turbo-Pascal (64-kB-Grenze für die Summe aller statischen Variablen!) wurde wieder mal eine große Variable auf den Heap gelegt (diesmal war es der bearbeitete Club der NMR-Aufstellung). Da müssen wir irgendwann mal richtig aufräumen. (Blöder MS/DOS-PC!)
AUFST_PR: Beim Abspeichern der NMR-Taktik wurde bisher die Netto-Taktik (Spieler+HV, aber ohne Härte) abgespeichert. (Diese hält nicht immer die 3:1-Regel ein und wird eigentlich vor allem zur Berechnung der Änderung der Siegchance durch Härteeinsatz verwendet.) Nun wird stattdessen die Brutto-Taktik abgespeichert (incl. Härte, nach 3:1-Regel).
Das Problem bestand eigentlich darin, dass sich die Brutto-Taktik während des Spiels weiter ändern kann (Platzverweise, wodurch dann auch wieder die 3:1-Regel gebrochen sein kann!); die Taktik wird aber schon vor dem Anpfiff in den Verein übertragen, nämlich dann, wenn der GM die Aufstellung akzeptiert hat. (Abgespeichert wird das ganze Team allerdings erst nach dem Spiel!)
DATAFILE: Die Funktion zur Initialisierung der NMR-Taktik-Tabelle eines Vereins musste außerhalb dieses Moduls sichtbar gemacht werden (siehe unten).
NEU: Beim Anlegen eines neuen Vereins wurden die NMR-Taktik-Daten bisher nicht initialisiert. Nun wird die Funktion initTaktik an der entsprechenden Stelle aufgerufen.
PARAMETR: Neuer Parameter NMR-POKAL-MERKEN (Schalter, Standardwert 'J') bewirkt, dass die Taktik eines Profi-Vereins aus einem Pokalspiel als Heim- bzw. Auswärtstaktik (je nach den Pokalregeln des Ligasystems) abgespeichert wird. Ist der Schalter nicht gesetzt, dann wird die Taktik dieses Spiels 'vergessen'.
Neuer Parameter NMR-AMATEUR-SPEICHERN (Schalter, Standardwert 'J') bewirkt, dass die Taktik eines Profi-Vereins in einem Pokalspiel gegen einen Amateurverein als Heim- bzw. Auswärtstaktik (je nach den Pokalregeln des Ligasystems) abgespeichert wird. Ist der Schalter nicht gesetzt, dann wird die Taktik dieses Spiels 'vergessen'. Ist der Schalter NMR-POKAL-MERKEN ausgeschaltet, dann hat der Schalter NMR-AMATEUR-SPEICHERN natürlich keine Wirkung.
Die Standard-Parameterdatei wurde entsprechend erweitert.

V1.87 (1993-12-28)

Dies ist mal wieder eine 'große' Version. In den 'Weihnachtsferien' haben Lukas und ich mal schnell 1500 Zeilen NMR-Aufstellungen geschrieben.

Was diese Routinen tun und wie man sie bedient, darüber gibt es eine eigene Dokumentation. Hier seien nur die technischen Interna aufgelistet.

AUFST_NM: Neues Modul für NMR-Aufstellungen.
AUFST_PR: Einbettung der NMR-Funktionen (Tastatursteuerung); Anzeige der automatisch erzeugten Aufstellung.
Da die NMR-Aufstellungen z. T. zusätzliche Informationen benötigen (z. B. Heimvorteil), mussten zusätzliche Parameter durchgeschleift werden.
DATAFILE: Anpassungen in getTeam und putTeam (Lesen / Schreiben der zusätzlichen Aufstellungs-Daten).
PARAMETR: Neuer Parameter NMR-GEDÄCHTNIS (Zahl, Standardwert 10).
UDEC: Erweiterung des Datentyps team.

V1.86 (1993-12-28)

DATAFILE: Interne Änderungen des Funktions-Interface (siehe unten).
ERGEBNIS: Bei der Ausgabe einer Roten Karte nach einem Spielergebnis fehlte ein Leerzeichen zwischen Spielername und öffnender Klammer. Nun sieht es wieder hübscher aus.
FORMAT: Die Schönheitsreparatur aus Version 1.85 (Unterdrückung von Leerzeichen am Zeilenende) wurde wieder ausgebaut.
Bei der Nachbearbeitung der Auswertungsdateien mit Textverarbeitungsprogrammen stellte sich heraus, dass die Leerzeichen (die z. B. von WordPlus als Fortsetzungszeichen eines mehrzeiligen Absatzes verwendet werden) doch recht angenehm sind. Also lassen wir sie nun doch lieber drin...
HILF: Die Funktion zur Ausgabe einer Liste aller Spieler des Ligasystems sortiert nach Handelswert wurde geändert; die Anzahl der Spieler musste von 800 (seit Maxon-Pascal 1.5) wieder auf 400 gesetzt werden. Schuld daran ist ein erneuter Compilerfehler in Maxon-Pascal.
Seit V1.5 ist die Verwendung größerer Variablen als 32 kB zulässig. (Turbo-Pascal auf PC kann maximal 64 kB.) Tests ergaben jedoch, dass der erzeugte Code nicht korrekt funktioniert (im vorliegenden Falle wird die Adressierung eines anderen großen Arrays zerschossen, nämlich der Tabelle des Meldungssystems). Es wird daher ausdrücklich davor gewarnt, Variablen mit einer Größe von mehr als 32 kB zu verwenden - die Folgen sind nicht absehbar!
PARAMETR: Neuer Parameter CASH-TRAINING für die Variante United/Cash im Zine Mutated United (siehe unten).
RND_ENDE: Es kamen immer noch Klagen, dass auch V1.8x beim Rundenende zwar in der VDATEI den Rundenzähler erhöht, ihn aber während des Programmlaufs nicht korrigiert.
Das ist so zwar nicht richtig (der Rundenzähler wird im Auswertungsmenü angezeigt), aber nach dem Rundenende wird eine Tabelle, die beim Einlesen der VDATEI anhand des aktuellen Rundenzählers initialisiert wurde, nicht ebenfalls angepasst. Auch wenn der Rundenzähler von 1 auf 2 umgeschaltet wurde, bietet das Programm dann bei den Ligaspielen wieder die Spieltage 1 und 2 an. (Um Hauptspeicher zu sparen, hatten wir in den Gründertagen - vor V1.00 - beschlossen, nicht die ganze Tabelle im Speicher halten zu wollen... heutzutage könnte man da mal ein paar Dinge entrümpeln.)
Ich habe jetzt den Aufruf, der die VDATEI einliest und die entsprechenden Initialisierungen vornimmt, im Rundenende ebenfalls eingebaut.
SP_LIGA: In den vorherigen Versionen war eine Änderung eingebaut worden, die den Datenverlust in Auswertungs-Dateien bei einem Programm- bzw Rechnerausfall verhindern sollte. Dieser Datenverlust konnte jedoch auch bezüglich der Datenbasis des Glückswürfel-Service auftreten, da auch diese Datei bisher nur am Ende eines kompletten Spieltages abgespeichert wurde. Die entsprechende Datei wird nun nach jedem Spiel erneut abgespeichert. Das sichert den Benutzer auch hier gegen Datenverlust ab, kostet allerdings ein wenig Rechenzeit (Plattenzugriffe - die Datei ist nicht ganz klein...). Diese Änderung ist nur bei eingeschaltetem Glückswürfel-Parameter relevant.
TRAINING: Für die Variante United/Cash wurde ein entsprechender Parameter CASH-TRAINING eingebaut. Ist dieser Parameter gesetzt, dann ändert sich die Wirkung der Trainings-Routinen folgendermaßen:
  1. Vor dem Training kauft ein Verein mit seinem Geld automatisch solange halbe WPs, bis er sein Kreditlimit von -1000 kKj überschreiten würde.
    Der Preis eines WP ist durch den bereits existierenden Parameter WP-WERT festgelegt. (Der wurde bisher nur für Handelswert-Berechnungen verwendet.)
  2. Das Training wird normal mit WPs durchgeführt. (Insbesondere behalten also Sonderspieler mit negativem Trainingsaufwand ihre übliche Wirkung!)
  3. Das Verfallen von WP am Ende des Trainings und die Meldung, die davor warnt, werden unterdrückt.
  4. Nach dem Training verkauft der Verein alle noch übrigen WP wieder.
Das realisierte Verfahren lässt dem Spielleiter die Freiheit, die Basis-Einnahmen der Vereine direkt in Cash oder (wie in normalem United üblich) in WP und Cash auszudrücken (beides würde funktionieren). Der Unterschied besteht darin, dass in der Ligatabelle normalerweise WP angezeigt würden, mit denen die Manager wenig anfangen könnten; diese WP würden auch erst nach dem Training in Cash umgetauscht sein und stünden z. B. für einen Privaten Handel vor der Trainingsphase der nächsten Runde noch nicht als Geld zur Verfügung.
Problematisch erscheint, dass das derzeit realisierte Verfahren für NMR-Training in United/Cash keine sinnvollen Ergebnisse liefert, weil es nicht wissen kann, dass WPs nicht verfallen, und deshalb den Wertverlust der verbrauchten WP bei seiner Optimierung mit einkalkuliert. (Ich werde mal nachsehen, wie tief diese Eigenschaft im Verfahren drinsteckt - vielleicht kann man die auch abschalten...)
Sinnvoll wäre vielleicht ein NMR-Training, das
  • alle Spieler jünger als Alter I trainiert (und was tun, wenn dafür die WP nicht reichen?), oder
  • so viel Training durchführt, dass der Kontostand nicht unter 0 sinkt, oder
  • genau alle Spieler trainiert, bei denen durch das Training ein Wertgewinn für den Verein entstehen würde (das sind aber in vielen Fällen Null Spieler!), oder
  • was auch immer.
Es ist nicht ganz einfach, für ein Szenario mit flexibler WP-Zuordnungsmöglichkeit einen sinnvollen Default-Wert anzugeben, ohne eigene Erfahrungen darüber zu haben...
Es wird bis auf weiteres nicht besonders sinnvoll sein, NMR-Training bei United/Cash zu verwenden; nach Rücksprache mit dem Spielleiter im Zine Mutated United soll eine sinnvolle Regelung gefunden und implementiert werden.
Was sich beim Testen ganz nebenbei mit herausstellte: Wenn das Verfallen von WP auf diese Weise abgeschaltet ist, kann man natürlich prinzipiell Spieler um mehr als eine Stufe pro Runde trainieren. Zwar geht das nicht in einem einzigen Dialogschritt - aber durch mehrfaches Training desselben Vereins. Das funktioniert ja normalerweise nur deshalb nicht, weil der Verein nach einem normalen Training keine WP mehr übrig hat (besitzt der Verein einen Trainer, dann stimmt nicht einmal das!); UNITED/XY 'weiß' nicht, ob das Training für einen Verein bereits durchgeführt wurde oder nicht, weil es keine starre Reihenfolge an Phasen kennt.
T_EDITOR: Werden die Daten eines Vereins abgespeichert, bei dessen Bearbeitung der Name des Vereins geändert wurde, dann wird dieser neue Vereinsname auch in die Tabelle der Mannschaftsnamen übernommen, die (außerhalb der Vereinsdatei) zur Auswahl von Vereinen verwendet wird. Zusätzlich wird diese Datei (nur für die betroffene Liga) ebenfalls abgespeichert.
Hierfür wurde in der Unit DATAFILE eine neue Funktion geschaffen (vorher war das Schreiben einzelner LDATEIen nicht notwendig). Hanno Girke meldete diesen Fehler.

V1.85 (1993-07-04)

FORMAT: Eine kleine Schönheitsreparatur: Wird eine Zeichenkette bei der Ausgabe vom Format-Modul umgebrochen (bevorzugt an einer Stelle, an der ein Leerzeichen in dieser Zeichenkette steht), dann wurde dieses Leerzeichen als letztes Zeichen der Zeile vor dem Umbruch noch ausgegeben. Da das Leerzeichen an dieser Stelle nichts bringt und eher stört, wird es nun in genau diesem Fall unterdrückt.
GM_ANGEB: Bei der Anzeige der Daten der demnächst zu versteigernden Spieler wurde beim Trainingsaufwand ein Leerzeichen zuviel ausgegeben, falls ein Wert von '[0]' oder '[0.5]' vorlag. (Die neue Funktion print_wp war falsch verwendet worden.)
HANDEL: Diverse kleine Verschönerungen:
In der Protokolldatei konnte es vorkommen, dass die Ausgabe des nächsten Handels falsch eingerückt wurde oder die eigentlich gewünschte Leerzeile als Trennung zwischen zwei Ausgaben fehlte. Beides wurde korrigiert. (Die Leerzeilen hätten bereits seit anno dunnemals erzeugt werden sollen, was aber durch einen Programmierfehler nicht funktionierte; die Einrückung wurde in manchen Fällen nicht zurückgenommen - das wird nun an einer ganz anderen Stelle erledigt.)
Bei der Bestätigung eines Handels werden nun, wo immer möglich, zu jedem Spieler auch dessen Daten angezeigt. Diese Routine existiert schon lange und wurde bisher für den Parameter HANDEL_OFFEN verwendet; zusätzlich wird nun abgefragt, ob die Ausgabe nur auf den Bildschirm gehen soll (da kann ja gerne alles offen sein) oder auch in die Datei (dafür ist der Parameter gedacht). Gewusst wo - das war eine Mini-Änderung...
Die Faktoren beim Wertvergleich für die 'Genehmigung' eines Handels werden nun spaltenmäßig untereinander angezeigt.
SAI_INFO: Bei der 'Reparatur' der Funktion zur Ausgabe des Spielplans hatte sich ein Fehler eingeschlichen, sodass nun gar nichts mehr richtig funktionierte.
Wenn man nicht mehr bis zum Dateiende lesen darf, dann muss man sich die Anzahl der zu erwartenden Zeilen eben ausrechnen. Das war in 1.83 eingebaut worden, aber total verkehrt - und wurde nun korrigiert.
TEAMSTAT: Bei der Berechnung der Vereins-Statistiken war die Anzahl der Gesamt-WP des Vereins aus halben und ganzen WPs fehlerhaft zusammengesetzt worden und daher nur etwa halb so groß wie vorhanden angegeben worden. Dieser Fehler (der etwa bei 1.7, mit der Entstehung der Unit TEAMSTAT, passiert sein dürfte) wurde nun korrigiert.

V1.84 (1993-04-30)

diverse: Ein ziemlicher Rundumschlag war es, einen alten Programmfehler bei der Berechnung der Siegwahrscheinlichkeiten zu beheben.
Da bisher innerhalb einer Aufstellung nur eine einzige Tabelle für die (ggf. mehrfach modifizierten) Reihengesamtwertungen gespeichert wurde, war es unmöglich, nach 3:1-Reduzierungen die Originalwerte der Nettoreihen zu bestimmen. Für die Siegchancen der Netto-Teams wurden in diesem Fall falsche Werte abgeleitet, weil das Programm einfach die eingesetzten Härtepunkte von den Bruttowerten abzog. Gerade dann, wenn durch Härte die 3:1-Regel gebrochen wurde, wurde die eingesetzte Härte - laut Berechnung des Programms - oft als besonders wirksam betrachtet, weil die Tatsache der Reduzierung in Vergessenheit geraten war.
Um dies zu ändern, musste der bisherige Stärkewert in einen Netto- und einen Bruttowert getrennt werden. Der neue Bruttowert entspricht dem bisherigen Stärkewert, auf den sämtliche Modifikationen (Härte, 3:1-Reduzierungen, Rote Karten) angewendet werden. Der neue Nettowert dagegen enthält die reinen Reihenwertungen plus Heimvorteil nach der entsprechenden 3:1-Reduzierung und wird ausschließlich für die Berechnung der Siegchancen ohne Härteeinsatz verwendet.
Die Menge der betroffenen Module umfasst etwa ein Dutzend Units - insbesondere alle, die irgendwie mit Aufstellungen zu tun haben und Stärkewerte setzen, bzw. solche wie STATISTI oder CHANCEN, die Stärkewerte auswerten.
AUSWERT: In der Titel-Überschrift wird nun die Nummer der aktuellen Runde angezeigt (Meldung AUSWE002). Lukas Kautzsch hatte das angeregt.
PROGHEAD: Das schöne Copyright-Zeichen der Atari-Version ist wieder da!
Das bedeutet allerdings keineswegs, dass der Compilerfehler in Maxon-Pascal 1.6 behoben wäre. Nach wie vor funktioniert die Funktion length nicht, wenn in dem ihr übergebenen String das Sonderzeichen '©' (Hex 'BD', Copyright-Symbol) enthalten ist. Nur habe ich jetzt drum herum programmiert: Ich habe die Länge fest eingebrannt - schluchz...
SAISON: Beim Saisonwechsel ist es nun möglich, sowohl die Struktur des Ligasystems (Liganamen, Ligagrößen) als auch die Saison-Einstellungen (Rundenzahl, Spiele pro Runde, Heimvorteil) unverändert zu haben. Hierfür wurden die neuen Meldungen SAISO117 und SAISO118 definiert. Die Zuordnung der Vereine zu den Ligen muss bei der Neuordnung des Ligasystems in jeden Falle neu getroffen werden (Dialog). Das werde ich sofort für AUFSTIEG verwenden... (Lukas Kautzsch hatte die Idee.)
SPIELE: Noch ein uralter Bug: Bisher wurde nach einem Pokalspiel der Pflichtspiel-Indikator der beteiligten Vereine nicht gesetzt. Das bedeutete, dass ein Verein bisher in einer Runde ohne Ligaspiele weder Basis-WP noch Basis-Einnahmen erhielt! (Ja doch, es gibt Ligasysteme, die Runden ohne Ligaspiele austragen - ein GM eines solchen hatte mich angerufen und mir den Fehler nebenbei gemeldet. Leider weiß ich nicht mehr, wer das war - vielen Dank jedenfalls!)
SYS_RAND: Beim Aufruf der Würfel-Funktion wird der Parameter seitenzahl nun auf Werte kleiner als 1 geprüft. Liegt ein solcher Wert vor, dann wird immer das Würfelergebnis 0 zurückgeliefert.
Da Torwart-, Ausputzer- und Elfmeterwürfel parametrisierbar sind, soll dadurch ein Programmabsturz verhindert werden, falls der Benutzer versehentlich den Wert 0 eingestellt hat. (Die Seitenzahl wird nämlich als Divisor verwendet, um die absolute Gleichwahrscheinlichkeit aller Restklassen zu garantieren.) Das funktioniert auch; allerdings kommt an anderen Stellen dummes Zeug heraus, etwa bei den Erwartungswerten für Tore und bei den Siegchancen... (aber wer wird auch schon wirklich 0 eingeben!?)

V1.83 (1993-04-22)

AUFST_HV: Endlich wurde etwas eingebaut, was in der AUFSTIEG-Regel schon seit längerer Zeit definiert ist: Eine automatische Reduzierung von Härteeinsatz über 10 Punkten.
Es werden einzelne Punkte reduziert, und zwar jeweils aus derjenigen Reihe, in der am meisten Härte eingesetzt wurde (bei Gleichstand wird eine Reihe gleichwahrscheinlich ausgewürfelt). Wenn dabei ungerade Härtezahlen in Hintermannschaftsreihen entstehen - Pech für den Manager...
Es sei ausdrücklich darauf hingewiesen, dass das Verfahren bei zuviel Heimvorteil anders ist und wohl auch so bleiben wird. HV kann und soll bei Missbrauch kräftig reduziert werden; Härte darf nicht zu sehr reduziert werden, weil weniger Härte für den Verein selbst ja auch Vorteile haben würde. Man könnte höchstens darüber nachdenken, das weniger restriktive Verfahren bei Härte in Zukunft auch für den Heimvorteil anzuwenden - Meinungen erbeten!
SAISON: Die Routine zur Ausgabe aller Begegnungen in eine druckbare Spielplan-Datei wurde geändert. Bisher las diese Routine die Spielplandatei bis zum Dateiende. Das bewirkte, dass eine (unzulässige) Leerzeile am Ende der Datei das Programm zum Absturz brachte. Nun liest das Programm so viele Zeilen, wie in der Verwaltungstabelle der Liga an Spieltagen definiert wurden; darüber hinaus gehende Zeilen der Spielplandatei werden ignoriert.
TDD: Bei der Auflistung der kompletten Aufstellung in der Auswertung (TDD-Langform) war ein Schönheitsfehler: Die abschließende Klammer der Spieler auf der Bank wurde versehentlich auf den Bildschirm ausgegeben statt in die Datei. Außerdem fehlte ein Zeilenumbruch. Beides wurde korrigiert.

V1.82 (1993-04-22)

Diese Version versucht, ein uraltes Problem zu lösen, nämlich den Informationsverlust bei Programmabstürzen. Diese werden niemals grundsätzlich zu verhindern sein, da ihre Ursachen außerhalb von UNITED/XY liegen können - z. B. ein Stromausfall durch ein Baby, das über eine Mehrfachsteckdose krabbelt...

Da die hierfür vorgenommenen Änderungen diverse Units betreffen, versuche ich lieber, global zu erklären, was sich wie geändert hat.

Hauptproblem war der Verlust an Informationen, wenn das Programm innerhalb eines Spieltages abstürzte (aus welchem Grund auch immer). Die zu diesem Zeitpunkt noch geöffneten Dateien waren in diesem Falle leer, da die Länge der Datei erst dann vom Betriebssystem gesetzt wird, wenn die Datei erfolgreich geschlossen wurde.

Die Auswertungsdatei ist nun nicht mehr während des gesamten Spieltages geöffnet, sondern sie wird für diverse Ausgaben explizit neu geöffnet, am Ende erweitert und sofort wieder geschlossen:

  1. Bei Beginn der Auswertungsphase (Freundschaftsspiele, Pokalspiele) bzw. des Spieltages (Ligaspiele) wird die Datei geöffnet (hier erfolgt ggf. die bereits bekannte Verdrängung einer bereits existierenden Datei nach *.BAK), eine Überschrift ausgegeben und die Datei nun wieder geschlossen.
  2. Nach der kompletten Verarbeitung eines Spieles wird die Datei für die Ausgabe der Ergebnisse (simultan auf Bildschirm und Datei) nun kurz geöffnet und sofort wieder geschlossen.
  3. Jede einzelne (!) Zeile des Kommentar-Editors wird getrennt in die Datei geschrieben, die für jeden dieser Vorgänge nun neu geöffnet und wieder geschlossen wird.

Die Auswertungsdatei ist nun also in keinem Falle mehr länger als Sekundenbruchteile geöffnet. Und da sie nach jedem Schreibvorgang sofort wieder geschlossen wird, sollten die bereits abgespeicherten Informationen selbst dann nicht mehr verloren gehen, wenn das Programm ausgerechnet während eines Schreibvorgangs abstürzen sollte. In einem solchen Falle wäre nur Inhalt des aktuell betroffenen Schreibvorgangs verloren, Länge und signifikanter Inhalt der Datei jedoch unverändert.

Die Daten der an einem Spiel beteiligten Vereine werden erst nach der vollständigen Ausgabe der Ergebnisse abgespeichert. Sollte das Programm also während der Ergebnisausgabe unterbrochen werden, dann ist das Spiel komplett verloren, ohne Spuren zu hinterlassen. Startet man das Programm also neu, dann kann man mit der Auswertung problemlos an genau dieser Stelle neu aufsetzen, indem man die vorherigen Spiele (für die jeweils eine Abfrage angeboten wird, weil der Verein ja bereits ein Spiel zuviel absolviert hat!) überspringt.

Für diese Änderungen mussten die betroffenen 'primitiven' Funktionen ergebnisausgabe und kommentar lernen, die Ausgabedatei selbständig zu öffnen und zu schließen (und sie mussten den Dateinamen übergeben bekommen). Davon betroffen waren die Units ERGEBNIS, COMMENT sowie alle SP_* (für die angepassten Prozeduraufrufe).

Genau dasselbe Problem liegt natürlich auch für die SC-Dateien des Glückswürfelservices vor. Auch hier wurde nun dieselbe Steuerlogik eingebaut: Öffnen, Überschrift ausgeben, sofort wieder schließen und für jede nachfolgende Ausgabe kurz öffnen und sofort wieder schließen.

Obwohl ein willkürlicher Programmabbruch nach wie vor keine empfehlenswerte Methode ist, sollte durch einen Programmabbruch im Kommentar-Editor am Anfang einer neuen Eingabezeile nun die Möglichkeit bestehen, das Programm notfalls mitten in einem Spieltag verlassen zu können, ohne dabei Informationen zu verlieren.

Für die spätere manuelle Zusammenfügung der beiden 'halben' Dateien ist der GM aber ebenso selbst verantwortlich wie dafür, diese Operation rechtzeitig vorzunehmen: Zwei Programmabbrüche innerhalb derselben Ausgabedatei werden immer dazu führen, dass das erste Drittel der Informationen durch die zweifache Umbenennung der Datei verloren geht, sofern der GM die Datei nicht rechtzeitig manuell in Sicherheit bringt.

Eine weiterer Fehler könnte mit dieser Version ebenfalls behoben sein, und zwar das 'Aufhängen' des Programms bei einer Ja/Nein-Frage.

An der entsprechenden Stelle wird nämlich versucht, den Tastaturpuffer zu löschen, damit die bewusste Frage explizit durch ein erst danach eingegebenes Zeichen beantwortet wird, nicht aber durch einen - ggf. Sekunden vorher erfolgten - versehentlichen Tastendruck, der zufällig syntaktisch zulässig wäre.

Leider sagt das Handbuch zu Maxon-Pascal nicht arg viel Genaues über die Pufferung von Eingabezeichen aus. In einem Beispiel zu der an dieser Stelle verwendeten Funktion wird das mit keypressed als anwesend festgestellte Zeichen allerdings nicht mit read, sondern mit readkey gelesen. Also habe ich die entsprechende Routine in diesem Sinne angepasst.

Durch die Erzeugung sehr vieler überzähliger Eingabezeichen konnte ich die Fehlersituation mit Version 1.79 reproduzieren. Dasselbe Vorgehen führt bei Version 1.82 nicht mehr zum entsprechenden Effekt. Das gibt doch Hoffnung, nicht wahr?

V1.81 (1993-04-21)

Anlässlich der neuen Compiler-Version Maxon-Pascal 1.6, die einen Tag vor Beginn eines 14-tägigen Urlaubs eintraf, war mal wieder eine Runde Großreinemachen angesagt. Es hatte sich so manches an kleineren Unschönheiten angesammelt, die von den Testfliegern Robert Gunst und Lukas Kautzsch gemeldet wurden:

diverse: Seit der Einführung des Meldungssystems wurde der WP-Wert '-0.5' (wieder einmal) an allen Stellen falsch angezeigt. Um dies zu reparieren, wurde eine neue Funktion geschrieben, die einen WP-Wert druckaufbereitet. An allen Stellen, an denen ein WP-Wert in der Form '[#1].[#2]' in einer Meldung enthalten war, wird nun stattdessen die aufbereitete Zeichenkette in die Meldung eingefügt. (Betroffene Meldungen: AUSWA006, AUSWA102, AUSWA104, HILF0008, HILF0052, HILF0055, NEU00308, SAIIN101, SAISO306, START201, TRAIN011, TRAIN021, TRANS406.)
Hoffentlich waren das alle Stellen - bei der Ausgabe der Spielerwerte (für TDD) in das Saison-Info wurde nämlich ebenfalls eine solche Stelle entdeckt und angepasst! Anschließend habe ich das gesamte Programm nach div und mod durchsucht - und tatsächlich beim GM-Angebot eine weitere Stelle gefunden, an der nun ebenfalls die neue Funktion aufgerufen wird.
AUFST_PR: Falls für den Aufstellungsdialog der Parameter FREMD-ZEIGEN aktiviert wurde, dann wurde der Name des Spielers, der in diesem Falle nur in der Länge von 21 Zeichen angezeigt wird, versehentlich nur auf 19 Zeichen plus eigene Länge mit Leerzeichen aufgefüllt. Falls der Spielername also nur 1 Zeichen lang war, wurde die erzeugte Zeichenkette 1 Zeichen zu kurz. (Das sah hässlich aus, hatte sonst aber keine weiteren Folgen.) Der Fehler wurde behoben.
GM_ANGEB: Die Warnung "Letzte Handelsrunde schon vorbei!" zerstörte den Bildschirmaufbau für die nachfolgende Kontrollausgabe des zu versteigernden Angebots. Dies wurde durch eine zwischengeschaltete titel-Ausgabe behoben.
HILF: Bei der Ausgabe von Vereinsdaten in eine Textdatei wird nun zusätzlich eine Überschrift ausgegeben, in welcher der Name des Ligasystems, die Nummer der aktuellen Saison sowie die Nummer der aktuellen Runde ausgegeben werden. Dadurch ist der Stand eines solchen Printouts für den Empfänger (Manager) ohne zusätzliche Rückfrage ersichtlich. (Vorausgesetzt, der GM macht solche Printouts nur direkt nach Rundenende!) Für diese Ausgabe wurde die neue Meldung HILF0096 definiert.
Bei der Ausgabe der Spielerdaten wurden bisher die Stärkewerte tiefgekühlter Talente (-1 in allen Reihen) als 'ungewöhnlich' betrachtet und entsprechende Warnungen ausgegeben. Nun werden 'normale' tiefgekühlte Talente korrekt behandelt und verursachen keine Warnungen mehr.
Die Tabelle der nach Handelswert sortierten Spieler enthält nun 800 statt 400 Tabelleneinträge. Die bisherige Beschränkung auf 32 K pro Variable ist mit Maxon-Pascal 1.5 weggefallen; jetzt ist es Turbo-Pascal, das Variablen auf 64 kB beschränkt.
MSG: Es gab offenbar einen ganz seltenen Sonderfall, in dem das Meldungssystem einen korrekt definierten Meldungsindex nicht finden konnte. Seltsamerweise trat der entsprechende Fehler bei den bisherigen Compiler-Versionen nicht zutage. Das Suchverfahren wurde nun in dieser Hinsicht korrigiert.
SAISON: Bei der Ausgabe der Sperren für das Saison-Info wurde nach einer eventuellen Warnung, dass die Ausgabedatei umbenannt werden musste, der Bildschirm zerstört. Dies wurde korrigiert; die außerdem fehlende Überschrift "Sperren:" wird nun auch auf dem Bildschirm angezeigt (bisher nur in der Ausgabedatei selbst).
Beim expliziten Auflösen eines Vereins wurde der entsprechende Text, mit dem der Vereinsname im Auswahlmenü überschrieben wurde, abgeschnitten. Nun wird der Text ohne die bisher vorhandenen führenden Leerzeichen in den Vereinsnamen gesetzt und passt exakt hinein.
UNITED.MSE: Die Meldungsdatei wurde etwas überarbeitet. Sämtliche Ordinalpunkte (die es in der englischen Sprache nicht gibt) wurden entfernt und durch geänderte Formulierungen ersetzt.
SYS_NAME: Die neue Version 1.6 von Maxon-Pascal funktioniert nun offenbar (der rename-bug wurde explizit behoben), also wird sie auch sofort verwendet (und V1.1 bzw. 1.5 auf dem Müll geworfen).
Deutlichste Verbesserung: Maxon-Pascal hatte schon in 1.5 die Ausgaberoutinen auf den Bildschirm beschleunigt; der Bildschirmaufbau erfolgt nun spürbar schneller.

V1.80 (1993-03-04)

GM_ANGEB: Bei der Ausgabe des Handelswertes eines Spielers, der über das GM-Angebot versteigert wurde, in der Auswertung wird nun der Wert dieses Spielers in der nachfolgenden Runde ausgegeben.
Dabei wurde die entsprechende Berechnungsfunktion so angepasst, dass die 'schmutzige' Umschaltung des Rundenzählers nun nur noch an einer einzigen Stelle vorgenommen wird.
Alle Aufrufstellen wurden angepasst. (Wobei auch an allen Stellen darüber nachgedacht werden konnte, was jeweils sinnvoll wäre.) Dabei fiel auf, dass die Reduzierung des Erlöses eines über die TFL versteigerten Spielers anhand des Handelswertes des Spielers in der aktuellen, nicht der nachfolgenden Runde vorgenommen wird! Es wäre ggf. sinnvoll, auch diesen Punkt irgendwann mal anzupassen. Das habe ich nur deshalb nicht sofort getan, weil es eine inkompatible Regeländerung wäre und ich nicht weiß, wie viele GMs ihren Parameter TFL-LIMIT der bisherigen Berechnungsweise angepasst haben.
SYS_NAME: Hier wird nun auch die Version des Maxon-Pascal-Compilers abgefragt; liegt die (fehlerhafte) Version 1.5 vor, dann wird ein Syntaxfehler künstlich erzeugt, um die versehentliche Verwendung des Compilers zu verhindern.

V1.79 (1992-11-07)

Der Quelltext von UNITED/XY wurde versuchsweise mit dem Compiler Pure-Pascal übersetzt.

Dieser Compiler erlaubt es, DEFINE-Variablen beim Aufruf anzugeben (bei Maxon-Pascal ist ATARI fest vordefiniert, bei Turbo-Pascal keine Variable). Beim Test wurde keine Variable vordefiniert; es wurde also die Turbo-Pascal-Version des Quelltextes übersetzt.

Zur Kompatibilität: Pure-Pascal kam mit allen (!) Turbo-Pascal-Spezialitäten problemlos zurecht. (Ganz anders als etwa der Maxon-Pascal-Compiler, für den zahlreiche bedingte Übersetzungen erforderlich sind.)

Der Pure-Pascal-Compiler macht außerdem - anders als alle bisher bekannten Compiler - eine sehr leistungsfähige Kontroll- und Datenflussanalyse (ohne dadurch spürbar langsam zu sein).

Auf diese Weise wurden bei der Übersetzung zahlreiche versteckte Fehlerchen gefunden:

In einigen wenigen Fällen konnte der Compiler nicht feststellen, dass das gefundene Problem durch 'Seiteneffekte' anderer Anweisungen niemals auftreten konnte. Das war aber natürlich schlechter Programmierstil - und ließ sich auch jeweils durch einfache Umstellungen von wenigen Anweisungen korrigieren. In einem einzigen Fall wurde eine zusätzliche nop-Zuweisung eingefügt, um den Compiler zu 'beruhigen'.

Zudem wurden durch die zusätzlichen Prüfungen auch ein paar echte Bugs gefunden:

Aber keine Rose ohne Dornen:

Was der Pure-Pascal-Compiler leider nicht findet, das sind völlig unbenutzte Variablen und Prozeduren. Letztere befanden sich u. a. im Formatierungs-Modul; so konnte das permanente Wachstum des Programms mal wieder etwas in Grenzen gehalten werden.

V1.78 (1992-10-17)

AUFST_HV: Innerhalb des Aufstellungsdialogs gab es bei der Eingabe von Härte bzw. Heimvorteil Platzprobleme auf dem Bildschirm, wenn die englische Meldungsdatei verwendet wurde. ("hardness" ist nun mal länger als "Härte".) Daher wurde die Aufteilung des Bildschirmplatzes in der rechten unteren Ecke geringfügig überarbeitet. Dabei entstanden auch neue Meldungen.
Dies bedeutet auch die Eliminierung der Funktion writeReihen, mit der bisher Reihenwertungszeilen ausgegeben wurden. Das gesamte Layout dieser Meldungen steht nun in der Meldungsdatei.
SP_POKAL: Bei der Auslosung der nächsten Pokalrunde wurde die Meldung SPPOK003 bisher falsch behandelt (Nr. des Inserts). Die Abschlussmeldung war zudem länger als eine Bildschirmzeile. Beides wurde korrigiert.
TABELLE: Die zusätzliche Ausgabe von "Manager" in der Ligatabelle sieht zwar in der Auswertungsdatei hübsch aus, passt aber nicht in die entsprechende Bildschirmzeile. Daher wurde die entsprechende Meldung TABEL001 in TABEL001 und TABEL002 geteilt.
In der Titelzeile ('Berechnung der Ligatabelle[$1|n]') wurde die Plural-Struktur nicht korrekt aufgelöst. Der fehlende Aufruf wurde eingefügt.

V1.77 (1992-10-04)

MSG: Die Sortierung der Meldungsliste, die für das spätere binäre Suchen während der Initialisierungsphase durchgeführt wird, dauerte bisher ziemlich lang.
Dagegen wurden zwei Verbesserungen eingeführt:
  • Die Meldungsliste wird nun mit dem Algorithmus 'Shakersort' verarbeitet, sodass ein einzelner Ausreißer in maximal zwei Durchgängen sortiert werden kann. Bisher konnte dies Hunderte von Durchgängen auslösen...
  • Bei Programmtest wurden Zwischenausgaben während der Sortierung vorgenommen, durch die festgestellt wurde, dass die bisherigen Meldungsdateien zwar bezüglich der Unit-Namen, nicht aber auch bezüglich der Meldungs-Indizes sortiert waren. Dies wurde nun nachgeholt (in der deutschen wie in der englischen Version der Meldungsdatei). Die Fähigkeit des Programms, seine Meldungen notfalls selbst sortieren zu können, war ja ohnehin eher für Benutzer-Eingriffe in die Meldungsdatei gedacht und muss im Standardfall gar nicht unbedingt verwendet werden.
Die Sortierung ist nun zeitlich nicht mehr spürbar.

Außerdem wird am Ende der Initialisierung des Meldungssystems eine (englische) Meldung ausgegeben, die die Anzahl der Meldungen und Zeichen im Meldungspuffer ausgibt.

Der erste Wert ist eher für den Entwickler von Interesse (momentan verkraftet das Meldungssystem 1000 Meldungen, 655 sind derzeit definiert), während der zweite Wert auch für einen Benutzer, der Änderungen in seiner Meldungsdatei vorgenommen hat, bedeutsam sein kann (32 kB Puffer sind reserviert und aufgrund einer Beschränkung von Maxon-Pascal 1.1 maximal mäglich, 23 kB werden in der vorliegenden Version verwendet).

V1.76 (1992-10-03)

Turbo-Pascal besitzt angeblich eine Prozedur flush, die - ähnlich wie in C - das Laufzeitsystem dazu zwingt, eventuelle Dateipuffer zu leeren und die Daten auf das Speichermedium auszugeben. Das 'kompatible' Maxon-Pascal besitzt diese Funktion leider nicht. Ich hätte sie gerne verwendet, um mögliche Datenverluste zu verhindern (z. B. nach jedem Spiel). Tja...

DATAFILE: Es wurde eine neue Prozedur backup_file erstellt, die eine (anschließend zu überschreibende) Ausgabedatei umbenennt, falls sie bereits existiert.

Durch diesen Mechanismus soll erreicht werden, dass in Zukunft bei fehlerhafter Programmbedienung der Verlust von Teilen der Auswertung unwahrscheinlicher wird.

Bisher wurden ja bereits die Ergebnisdateien der drei Typen von Spielen so behandelt, nun sind es fast alle Ausgabedateien mit nur wenigen Ausnahmen:

Im einzelnen werden folgende Dateien automatisch nach *.BAK verdrängt:

GM_ANGEB: GMALT.AUS
GMANGEB.DAT
GMNEU.AUS
(das GM-Angebot neu zu erzeugen ist lästig und fehleranfällig, wenn man schon mal eines hatte)
RND_ENDE: SPERRE.AUS
SAISON: SPERRE.AUS
PAARUNG.AUS
POSTEING.AUS
(vielleicht will jemand die alten Dateien archivieren)
SAI_INFO: INFO.AUS (der GM könnte manuelle Änderungen vorgenommen haben)
SP_FREUN: FR_SPIEL.AUS (bisher schon so behandelt)
SP_LIGA: ST_xy_z.AUS (bisher schon so behandelt)
SC_xy_z.AUS (ähnlich kostbar wie die Ergebnisdatei; dafür musste der Mechanismus der Bestimmung des Dateinamens in GLUECK bzw. SP_LIGA geändert werden.)
SP_POKAL: POKAL.AUS (bisher schon so behandelt)
POKALLOS.AUS ('Abfallprodukt')
TABELLEN: TAB.AUS (...)
TALENTE: TALENT.AUS (sehr kostbar!)
TEAMTAB: TABxxyyz.TXT (heiße Kandidaten für Archivierungen)
TORLISTE: TOR.AUS (...)
TRANSF_L: TRANSALT.AUS
TRANSFER.DAT (absolut unersetzlich!)
TRANSNEU.AUS

Das ganze bedeutet übrigens nicht, dass der Speicherplatzbedarf des Programms sprunghaft zugenommen hätte! Fast alle genannten Dateien sind solche, die der GM ohnehin nach Abschluss der Auswertung manuell löschen sollte. Die einzigen Ausnahmen sind GM-Angebot und Transferliste (sollte die jemals durch mehrfache Erzeugung verloren gehen, hat der GM einen Haufen Ärger!), die beide nur wenige kB an Platz kosten. Daher habe ich diese Sicherheitsstufe nicht per Parameter ein- bzw. ausschaltbar gemacht.

UNITED.MS*: Neue Meldung für backup_file, mehrere Meldungen für die bisherige Verdrängung bei den Spiel-Ergebnissen entfernt.
Die Datei UNITED.MSE, die nun eine komplette (wenngleich noch keineswegs virtuose) Übersetzung aller Meldungen ins Englische enthält, wird ab dieser Version permanent mit gewartet.

V1.75 (1992-10-03)

ERGEBNIS: Bei einem Spielergebnis nach Verlängerung fehlt nun nicht mehr das Leerzeichen vor "n.V.". (Das wurde von Lukas Kautzsch in einer 'Parallel-Version' 1.74 repariert und jetzt in den gemeinsamen Quelltext integriert.)
INPUTS: Die Menge der für read_string zulässigen Eingabezeichen wurde erweitert. Bisher waren sämtliche Zeichen der Atari-Tastatur plus das PC-ß explizit definiert; nun sind neben den Steuerzeichen Backspace, Return und Escape auch alle Zeichen zwischen ASCII-32 und ASCII-255 erlaubt. (Ob diese Zeichen auf der Tastatur alle erzeugt werden können, kann mir ja wohl egal sein.)
Anlaß für diese Änderung war der Wunsch von Borger Borgersen, norwegische Spezial-Buchstaben für Spielernamen eingeben zu dürfen. Borger konnte zwar die ASCII-Werte dieser Zeichen angeben, auf den entsprechenden Positionen der Atari-Zeichentabelle liegen allerdings andere Zeichen (ASCII ist eben nur bis 127 'richtig' genormt), sodass die Funktion ziemlich unverständlich geworden wäre. Dann also gleich alles zulassen. (Hauptsache, Control-... ist nach wie vor verboten!)
SAI_INFO: Bei der Ausgabe der Vereinsübersicht des Saison-Infos gab es einen Fehler bei der Behandlung der Meldung SAIIN102 (Ausgabe der Statistik-Zeile). Die Meldung wurde einmal angefordert, aber ggf. mehrfach oder auch gar nicht abgeholt (je nachdem, wieviele Statistikzeilen man haben wollte), was diverse Folgefehler nach sich zog. Die Routine wurde korrigiert. (Robert Gunst meldete den Fehler - danke!)
TABELLEN: In den Überschriftszeilen der Ligatabellen wird nach dem Cash zusätzlich das Wort "Manager" ausgegeben (Änderung in der Meldungsdatei).
Bei der Bildschirm-Meldung wird nun zwischen einer und mehreren Tabellen unterschieden (msgPlural für TABEL101).
TEAMSTAT: Die Werte für HIM in den Team-Tabellen werden nun relativ zu den tatsächlich verwendeten Seitenzahlen für Torwart- und Ausputzerwürfel (siehe Parameterdatei) berechnet.
Bisher waren an dieser Stelle noch die 'magischen' Zahlen 14 und 15 fest eincodiert. (Das fiel mir beim Lesen des von Peter Stanton nach Englisch übersetzten Handbuchs zur Version 1.52 auf.)
diverse: Es besteht die begründete Hoffnung, dass der uralte Fehler, der die überflüssige Leerzeile vor dem Kommentar zum ersten Ligaspiel verursachte, gefunden ist. An dieser Stelle wird nämlich mit einer Formatierungsroutine eine Einrückung definiert, nachdem zuvor auch Ausgaben in dieselbe Datei erfolgten, die ohne diese Formatierungsroutinen erfolgten.
Um das Problem grundsätzlich anzugehen, wurde in allen Units, in denen mit Einrückungsdefinitionen in eine Textdatei geschrieben wird, die entsprechende Initialisierung direkt nach dem Öffnen der Datei eingefügt. (Hoffen wir das Beste...)
UNITED.MSG: Die Nummer der Meldung TRANS001 hat nun nicht mehr eine überzählige führende Null.
Die sorgte nicht nur dafür, dass die entsprechende Meldung nicht gefunden wurde, sondern sie verlängerte die Sortierung der Meldungen beim Programmstart auch von ca. 5 auf über 30 Sekunden (gemessen auf ST).

V1.74 (1992-08-30)

HILF: Bei der cash-edit-Funktion ("Verändern des Kontostands eines Vereins") störte mich immer wieder, dass Geldstrafen nicht über -1000 kKj hinaus abgebucht werden konnten. Dies kommt in AUFSTIEG nämlich immer mal wieder vor!
Das Intervall der möglichen Eingabewerte wurde daher so geändert, dass als Ergebnis der Änderung ein gültiger Integer-Wert entsteht. Zudem kann natürlich maximal ein Integer-Wert eingegeben werden. Die sonstigen Einschränkungen wurden aufgehoben.
Im integrierten Team-Editor bleibt die Begrenzung dagegen erhalten; dort kann man den Wert -1000 nach wie vor nicht unterschreiten.
UDEC: Neuer Datentyp maximal_str = string[255] (siehe unten).
WUERFELN: Bei der Erzeugung der Liste der Torminuten war ganz tief drinnen eine Beschränkung auf maximal 5 Torminuten-Angaben pro Spieler eingebrannt, die den entsprechenden Parameterwert nicht abfragte. Dies wurde entsprechend geändert (bei mehr als 5 Toren fehlten bisher die Torminuten in der Auswertung!).
Dabei liegt aber ein Problem vor. Die bisherige Beschränkung war dazu da, einen möglichen Programmabsturz wegen Stringüberlauf zu verhindert. Der Datentyp, der im Maximalfall nun den Spielernamen plus sämtliche Torminuten aufnehmen muss, wurde auf maximal_str geändert; da eine Torminute in z. B. "(29., 83.)" normalerweise 5 Zeichen 'kostet' und Spielername plus Klammern noch einmal knapp 35 Zeichen schlucken können, würde das Programm derzeit maximal 44 Treffer eines Spielers in einer Begegnung verkraften. (Das sollte allerdings nur sehr selten auftreten.)
Irgendwann einmal sollte das Problem aber trotzdem ordentlich gelöst werden (z. B. durch Anhängen von '...', wenn der String andernfalls zu lang wird). Die jetzige Änderung ist lediglich ein bug fix, der das Problem vorläufig lösen soll.

Damit überschreitet der Quelltext (incl. Meldungsdatei) die Grenze von 1 MB! Außerdem überschreiten die Changes-Dateien gleichzeitig die Grenze von 200 kB - was für eine geschwätzige Dokumentation...

V1.73 (1992-07-15)

(Änderungen durch Lukas Kautzsch)

UNITED.MSG: Diverse Fehler beseitigt.
IS: Die Funktion norm_maxstufe wurde repariert. (Nach der jüngsten Änderung war bei Alter-I-Spielern die Stufe 10 nicht mehr als normale Trainings-Obergrenze erkannt worden, sodass S I 8 >10 etc. ausgegeben wurde.)
TRANSF_L: Nach dem Verkauf eines Transferlisten-Spielers an einen anderen Verein wird nun nicht mehr gefragt: "Ist dieser Verkauf an die NL so in Ordnung?". (Die eigentliche Korrektur fand natürlich in der MSG-Datei statt - aber der Kommentar im Programmtext wurde eben auch korrigiert.)
MSG: Zwecks Verkleinerung des Datensegments (beschränkt auf 64 KByte bei Turbo-Pascal 6.0) wurden die Variablen msgHead und msgBuffer auf den Heap gelegt.
UDEC: Zwecks Verkleinerung des Datensegments wurde die Länge der Dateinamen-Strings in den Tabellen des Ligasystems auf nur noch 12 Zeichen reduziert. (Dazu musste der neue Typ tName_str eingeführt werden, da fName_str (= string[40]) anderswo für ganze Pfadnamen verwendet wird.)
COM_OPT: Für die PC-Version wurden die Compiler-Optionen $N+ und $E+ eingefügt (Coprozessor-Code und Emulation erzeugen). Vorher konnte man mit 1-1-24-23-69 gegen 1-1-24-23-69 einen Fließkomma-Überlauf herbeiführen. Außerdem ist nun auch in dieser Datei das Datum der letzten Änderung vermerkt.

V1.72 (1992-0?-??)

AUSWAHL: Bei der Meldung AUSWA011 fehlte der Aufruf msgPlural (1, sHSperre), durch den ein Teil des Meldungstextes bearbeitet werden sollte. Der Aufruf wurde eingebaut.
FILES: Diese Unit existiert nun nicht mehr.
Sie enthielt nur eine einzige Funktion, und zwar die zum Einlesen eines Dateinamens für eine Ausgabedatei. Verwendet wurde diese für die Ausgabe der Tabelle "Posteingang" sowie für die Ausgabe von Teamdaten einzelner bzw. aller Vereine.
Einerseits bedeutet die Eliminierung: Je weniger Eingaben ein Benutzer machen muss, desto weniger kann er verkehrt machen (insbesondere bei Dateinamen, wo es nicht einfach war, zu erklären, welche Zeichen darin zulässig sind und welche nicht).
Und andererseits ist die Zerlegung von Quelltext in Units zwar erstrebenswert, aber Maxon-Pascal (und vermutlich auch Turbo-Pascal) kennt eine Obergrenze für die Anzahl der Units, aus denen ein Programm zusammengesetzt werden darf...
HANDEL: Der Meldungsindex HANDE103 war mehrdeutig verwendet worden. Für die zweite Verwendung wurde die Meldung HANDE104 neu definiert.
HILF: Die Ausgabe von Daten einzelner bzw. aller Vereine erfolgt nun nicht mehr in eine Datei, deren Name vom Benutzer einzugeben ist, sondern in eine Datei, deren Name das Programm selbst erzeugt (siehe oben):
  • Werden die Daten aller Vereine ausgegeben, dann erfolgt diese Ausgabe in die Datei \TEXT\ALLE.TXT.
  • Werden dagegen nur die Daten eines einzelnen Vereins ausgegeben, dann werden diese in eine Datei geschrieben, die ebenfalls im Ordner \TEXT angelegt wird, deren Name aber aus der Datei der Vereinsdaten abgeleitet wird. Der Name der Vereinsdatei wird zunächst auf 8 Zeichen gekürzt (es könnte ihn ja jemand per Hand manipuliert haben); falls nun noch ein '.' darin enthalten ist, werden dieser und alle anschließenden Zeichen abgeschnitten. Der restliche Dateiname wird um die Extension .TXT' erweitert.
IS: Dank eines eigenartigen Sonderspielers fand Lukas Kautzsch einen uralten Programmfehler: Der Spieler S nT 3 >6 [0.5] wurde von den Routinen des GM-Angebotes sowohl bei der Kontrollanzeige als auch bei der Anpreisung in der Auswertung nur als S nT 3 [0.5] angezeigt.
Die Ursache war ein Fehler in der funktion normMaxstufe, die in einem komplexen boole'schen Ausdruck als erstes den Fall '3 Stufen trainierbar, aber maximal bis 10' als Normalfall betrachtete, ohne dabei das Alter des Spielers zu berücksichtigen. (Bei Spielern jünger als Alter I ist das aber gerade nicht der Normalfall!) Daher wurden bisher alle dreimal trainierbaren Talente jeweils als 'normal trainierbar' angezeigt (allerdings dennoch vom Programm beim Training korrekt behandelt), ebenso wie alle bis 10 trainierbaren Talente (aufgrund eines anderen Teil-Ausdrucks).
SAISON: Die Ausgabe der Tabelle "Posteingang" erfolgt nun immer in die Datei \TEXT\POSTEING.TXT (siehe oben).
SP_POKAL: Für die Auslosung einer Pokalrunde werden nun mindestens 3 Teilnehmer erwartet. (Die Auslosung bei 1 bzw. 2 Vereinen war ja bisher auch ungeheuer spannend...)
diverse: Seitdem msgText eine Funktion ist und nicht mehr eine exportierte Variable der Unit MSG (seit 1.71), muss es an allen Aufrufstellen auch als Funktion behandelt werden.
Syntaktisch hat sich da zwar nichts geändert, aber semantisch: Weil msgText das Semaphor 'Meldung in Bearbeitung' zurücksetzt, darf der Text der aktuellen Meldung nicht mehrfach abgerufen werden (dies würde beim 2. Mal die Warnung "NO MSG IN PREPARATION" auslösen). Ein gutes halbes Dutzend Aufrufstellen (allesamt solche, bei denen die Länge des Meldungstextes für die Weiterverarbeitung der Meldung benötigt wurde), wurden nun in diesem Sinne angepasst (der Meldungstext wird jeweils in einer lokalen Variable des Aufrufers zwischengespeichert).
diverse: Sämtliche Singular-/Plural-Formen in der Meldungsdatei wurden nahezu redundanzfrei gekürzt, was diese Datei um spektakuläre 400 Byte verkürzt hat. Dabei wurden einige zusätzliche Aufrufe von msgPlural bei ggf. kritischen Texten eingebaut.

V1.71 (1992-06-20)

Manchmal ist es wirklich nützlich, sich mit einem regelmäßigen Verwender von Turbo-Pascal (in diesem Falle Hajo Gurt) zu unterhalten. Sowohl Turbo-Pascal als auch Maxon-Pascal verstehen nämlich gemeinsame Dinge, die Standard-Pascal nicht erlaubt.

LOWLEVEL: Die von Pascal/ST ererbte und für Maxon-Pascal nachprogrammierte Prozedur writev gibt es in Turbo-Pascal bereits unter dem Namen str. Das vereinfachte so manches.
Außerdem versteht Turbo-Pascal, anders als Standard-Pascal, function x : string, was dazu führte, dass die bisherigen Prozeduren writev und sp_values auf Funktionen umgestellt werden konnten. (Das spart die lokale Hilfsvariable an jeder Aufrufstelle.)
MSG: Auch die Rückgabe des fertigen Meldungstextes erfolgt nun über eine Funktion statt einer globalen Variable.
Das bewirkt, dass während der Bearbeitung einer Meldung nun ein Semaphor gesetzt (und beim Abholen der Meldung wieder gelöscht) werden kann, das es erlaubt, Kollisionen festzustellen (neue Meldung angefordert, während die alte noch nicht abgeholt wurde - dabei wurde bisher einfach der Meldungspuffer überschrieben, und anschließend klappten natürlich die Inserts nicht mehr).
Die Beschreibung des Meldungsmoduls wurde vervollständigt. Die Übersetzung der UNITED.MSG nach Englisch dürfte demnächst anstehen, wenn keine weiteren Meldungs-Fehler entdeckt werden.
SAISON: Die Tabelle "Posteingang" hat nun nicht mehr konstant maxrunden Spalten (also 11), sondern parameter.anzahl_runden Spalten (Parameter ANZAHL-RUNDEN aus der Parameterdatei).

Das Copyright-Zeichen (siehe Version 1.66) ist nun leider wieder '(c)', auch in der Atari-Version. Das zu erklären wäre eine längere Geschichte; die Ursache ist letztendlich ein Compilerfehler von Maxon-Pascal 1.1. (In manchen Fällen - ich weiß noch nicht, in welchen - ist das Ergebnis der function length für Strings undefiniert.)

V1.70 (1992-06-17)

Der Kulturschock hält Einzug: UNITED/XY ist sprachunabhängig!

LOWLEVEL: Abgespalten aus der Unit UTILITY; enthält allgemeine Prozeduren zur Erweiterung der Programmiersprache Pascal.
MSG: Neue Unit zur sprachunabhängigen Verwaltung von Meldungen. Die Meldungstexte werden der Datei UNITED.MSG entnommen. (Dadurch dauert die Programm-Initialisierung nun leider etwa dreimal so lange wie bisher...)
UTILITY: Enthält nur noch United-spezifische Hilfsprozeduren. Diese Zerlegung war notwendig, weil UTILITY Funktionen aus MSG verwendet, MSG aber eine UTILITY-Funktion benötigte (die jetzt in der Unit LOWLEVEL liegt).
TORLISTE: Abgespalten aus der Unit TABELLEN; enthält die Berechnung der Torschützenlisten.

Außerdem wurden in allen Units zahlreiche Strings in die neue Meldungsdatei UNITED.MSG ausgelagert und durch entsprechende neue Prozeduraufrufe ersetzt. Der Quelltext ist daher praktisch nicht wiederzuerkennen, weil zur Verwendung der neuen Meldungsroutinen teilweise die Verarbeitungslogik komplett umgeändert werden musste. Die nächsten Versionen werden wohl die dadurch entstandenen Fehler ausbügeln dürfen...
Das Programm ist übrigens (trotz 33 kB Meldungsdatei!) nicht wesentlich kleiner geworden.

V1.67 (1992-04-06, Release-Version!)

SYSxxxxx: Sowohl Maxon-Pascal als auch Turbo-Pascal kennen Compiler-Optionen, die eine bedingte Übersetzung von Quelltext-Teilen bewirken. Symbolische Variablen können definiert und abgefragt werden; bei Maxon-Pascal ist die Variable ATARI vordefiniert, sodass automatisch erkannt werden kann, welcher Compiler verwendet wird.
Unter Verwendung dieser Anweisungen wurde versucht, sämtliche bisher erforderlichen Duplikate der SYS*-Units für Turbo-Pascal zu eliminieren, indem die (geringen) Unterschiede zwischen beiden Sprachen in den entsprechenden Quelltexten durch bedingte Quelltextverwendung überbrückt wurden.
Dadurch gibt es nun also wirklich nur noch einen einzigen, vollkommen gemeinsamen Quelltext für beide Compiler, der allerdings in den systemabhängigen Routinen z. T. die beiden Varianten von Anweisungsfolgen enthält. Dies sollte allfällige Anpassungs- und Portierungsaktionen weiter erleichtern.
TEAMSTAT: Robert Gunst merkte zu Recht an, dass UNITED/XY bisher im NL-Wert der Team-Tabellen pro WP 80 kKj anrechnete, ohne dass WP einen eigentlichen NL-Wert darstellen (sie könnten ja auch verfallen müssen). Zudem weicht dieses Verfahren von der Dokumentation des Programms ab. Daher wurde diese Anrechnung der WP nun aus dem Programm gestrichen.
In den Team-Tabellen wurde eine weitere Änderung vorgenommen: Die Spalte 'nT' der Tabelle (die ja schon einmal geändert wurde, und zwar damals von Anzahl Spieler auf Anzahl Strukturen) enthält ab jetzt die Summe der Trainingshöchstgrenzen aller Talente des Vereins. Dies entspricht bei normalen Spielern genau dem Zehnfachen des bisherigen Wertes, weicht aber bei Sonderspielern (VMS nT 6 >13 [1.5], V nT 3 >5 [0] usw.) von diesem Wert ab und beschreibt nun exakt die Menge von jungen WP, die ein Verein durch Training maximal erzeugen kann. Auch diese Änderung wurde von Robert Gunst angeregt.

V1.66 (1992-03-01)

CHANGES: Aufgrund der Daten der CHANGES-Dateien wurde in der Sammel-Liste CHANGES.TXT der Versuch unternommen, die Datumsangaben sämtlicher Versionen aufzuführen. Da in einigen Fällen CHANGES-Dateien nachträglich geändert wurden, ist dies leider nur teilweise gelungen. (* Durch Wühlen in den Uralt-Archiven konnten einige Lücken geschlossen werden. LK 1992-03-16 *)
HILF: Bei der Ausgabe von Vereinsdaten auf Textdatei wurden einige zusätzliche Tests eingebaut.
Wurden bisher schon bei der Ausgabe der Daten einzelner Spieler besondere Zeilen für ungewöhnlichen Trainingsaufwand usw. erzeugt, so können nun weitere Zeilen hinzukommen, die mit der Zeichenkette "ACHTUNG: " beginnen und darauf hinweisen, dass die Daten des betreffenden Spielers im Sinne von UNITED/XY inkonsistent sind.
Als inkonsistent werden derzeit folgende Fälle erkannt:
  1. Stufenangaben kleiner als 0 bzw. größer als 14
    Solche Werte werden z. B. bei der Berechnung von Handelswerten automatisch auf 0 bzw. 13 abgebildet.
  2. negative Werte bei der Anzahl von Einsätzen pro Reihe
    Solche Werte könnten ggf. eigenartig interpretiert werden, obwohl mir derzeit nur Vergleiche mit 6 (und bei Talenten 10) im Gedächtnis sind. Bei -1 bräuchte der Spieler dann wohl noch 7 Einsätze für die Fremdqualifikation...
  3. Abweichung zwischen der eingetragenen Reihenstärke und dem aus Stufe und Einsätzen abgeleiteten Wert. Solche Eingriffe habe ich selbst schon für Sonderspieler verwendet; da die Stärkewerte allerdings bei Änderung von Stufe und Einsätzen - u. a. auch im eingebauten Team-Editor! - automatisch angepasst werden, ist davon eher abzuraten. Grundsätzlich übernehme ich keine Garantie dafür, wie das Programm solche Spielerdaten in besonderen Fällen (z. B. beim Altern!) auswertet.
Die Menge der hier beschriebenen Tests ist bisher noch klein, wird aber in Zukunft dynamisch erweitert werden. Wem etwas Schlaues dazu einfällt: Immer her damit!
Es ist also keine schlechte Idee, beim ersten Einsatz einer neuen Programmversion mit der ersten Funktion des Hilfs-Menüs eine komplette Liste aller Spielerdaten des Ligasystems zu erstellen und darin per Text-Editor nach der Zeichenkette "ACHTUNG" zu suchen. Man weiß ja nie...
NEU: In der Routine zur Eingabe der Spieler eines neu gegründeten Vereins war seit Urzeiten (Version 1.00 oder so) ein Fehler enthalten: Wurde ein Spieler als neu zu entdeckendes nT 0 eingegeben, bei der Bestätigung aber abgelehnt und anschließend korrigiert, dann wurde trotz der Ablehnung des Spielers die Anzahl der entdeckten Talente des Vereins um 1 erhöht. (Dies war besonders lästig bei ftf-Partien, wo man einen Tippfehler ohne GM kaum korrigieren kann, aber auch ein normaler GM dürfte sich bei der Eingabe der neuen Vereinsdaten geärgert haben. Immerhin wurde die Routine ja nicht sooo häufig gebraucht...)
Das Fehlverhalten wurde jetzt behoben: die Anzahl der entdeckten Talente wird erst dann erhöht, wenn die Eingabe der Daten eines Spielers vom Benutzer bestätigt wurde.
PROGHEAD: Auf Wunsch des Portierers Lukas Kautzsch wurde das im Programmkopf enthaltene Copyright-Zeichen, das im PC-Zeichensatz nicht verfügbar ist, durch einen (im systemabhängigen Modul SYS_NAME definierten) variabel langen Copyright-String ersetzt. Dieser String (auf Atari "©", auf PC "(c)") wird an der bisherigen Position des Programmkopfes rechtbündig eingesetzt.
SYS_NAME: Die neue globale Variable v_copyright (siehe oben) wurde eingebaut.

V1.65 (1992-02-21)

Bei einer Untersuchung stellte sich heraus, dass die Version 1.64 einen Hauptspeicherbedarf von etwa 320 kB hat (der nicht direkt aus der Programmgröße abzulesen ist). Diese Zahl sollte in eine technische Spezifikation des Programms eingebaut werden (im Handbuch?).

HILF: Bei der Erstellung der Liste aller Spielern sortiert nach Handelswert wurden Spieler mit Handelswert 0 bisher nicht einsortiert (weil nicht wertvoller als ein no_Player, dessen - unverständliche - Daten stattdessen in der Tabelle enthalten waren). Robert Gunst meldete diesen Fehler, der jetzt korrigiert wurde.

V1.64 (1992-02-01)

Die Version 1.63 (während meiner Krankheit husch-husch noch schnell übersetzt und weggeschickt) funktionierte nicht; diese Version wurde als 1.631 nachträglich repariert.

TRANSF_L: Seit der Einführung der Sperrgebote ohne tatsächlichen Geldtransfer (V1.55) hatte UNITED/XY einen Fehler.
Fällt ein Spieler an die Nichtliga durch, dann war die interne Information, ob ein Sperrgebot des Vorbesitzers vorliegt, undefiniert. Das führte dazu, dass der Erlös des Verkaufs dem Käufer manchmal nicht gutgeschrieben wurde - je nachdem, ob der direkt zuvor versteigerte Spieler verkauft oder per Sperrgebot festgenagelt wurde. Der Fehler ist nun behoben.
T_EDITOR: Zu Beginn des Team-Editors wird in einer Initialisierungsphase ein vorher nicht geladener Verein 'entladen'. Hierbei war eine Variable undefiniert. Dies führte zu einem Programmabsturz der PC-Version (während die ST-Version zufällig korrekt funktionierte). Der Fehler ist nun behoben.

V1.63 (1991-11-25)

SPIELE Aus dem Modul wurden die Verwaltungsschichten für Liga-, Pokal- und Freundschaftsspiele ausgelagert (neue Units SP_LIGA, SP_POKAL und SP_FREUN); die Pokalauslosung (bisher in HILF) wurde der Pokalsteuerung zugeschlagen. (Vorarbeiten für die geplante Vollautomatisierung des Pokalwettbewerbs)
Das Ergebnis der Pokal-Auslosung wird nun in den Ordner AUSWERT ausgegeben (bisher in den Ordner TEXT).

V1.62 (1991-11-24)

ALTHEINZ: Beim Auftauen eines tiefgekühlten Talents wurde die Trainingsgrenze bisher nicht verändert. Nun wird dieser Wert auf max (Stufe, 10) gesetzt.
AUFST_PR: Besitzt ein Verein keinen einsatzfähigen Ausputzer, dann wird die entsprechende Reihe in der Aufstellung übergangen (als hätte der GM <Return> eingegeben). Den einzigen Ausputzer automatisch aufstellen darf ich noch nicht einbauen, solange man den nicht mit <backspace> entfernen kann. Das könnte aber irgendwann mal kommen.
Ist der Parameter FREMD-ZEIGEN eingeschaltet, dann werden die Fremdeinsätze nun in TEAMCHEF-Notation angezeigt. Von den Spielernamen können nun 21 Zeichen eingeblendet werden (bisher 18).
AUSWAHL: Die Funktion des neuen Moduls TEAMSTAT wird nun verwendet.
HILF: Die Funktion des neuen Moduls TEAMSTAT wird nun verwendet.
TALENTE: Vor dem Schließen der Protokolldatei für Entdeckungen neuer Talente wird nun noch ein fPrintLn-Aufruf abgesetzt. (Ich glaube zwar nicht, dass meine Formatierungs-Routinen irgendwas puffern, was dabei verloren gehen kann, aber der Fehler ist nicht systematisch reproduzierbar...)
TEAMSTAT: Neues Modul zur Berechnung statistischer Daten über einen Verein. Diese Daten werden bei den Team-Tabellen, aber auch beim Ansehen eines Vereins auf dem Bildschirm und beim Erstellen eines Mannschaftsausdrucks verwendet. Bisher wurden sie an diesen drei Stellen separat berechnet.
Die Berechnung der Werte wurde grundsätzlich neu realisiert, dokumentiert und als Funktion zur Verfügung gestellt. Dadurch konnte an den neuen Aufrufstellen einiges eliminiert werden, sodass das Programm insgesamt um etwa 3 kB kleiner wurde.
Dabei wurden zwei Änderungen eingebracht:
  1. Die Durchschnittswerte pro Liga wurden bisher falsch gerundet; dies ist nun korrigiert.
  2. Bei der Berechnung der WP-Zahlen eines Vereins in den besten 11 Spielern (mit und ohne uneingespielte Talente) werden Spieler, die für mindestens zwei Spiele gesperrt oder vom Alter tT sind, nicht mehr berücksichtigt. Damit werden diese Werte den tatsächlichen Teamstärken der nächsten Runde angepasst. (Dies betrifft vor allem Sonderspieler mit Langzeitsperren und wird in Ligasystemen ohne solche Spieler nur selten eine Wirkung haben.)
TEAMTAB: Die Funktionen des neuen Moduls TEAMSTAT werden verwendet.

V1.61 (1991-1?-??)

Bei Tests wurde ein fataler Compilerfehler von Maxon-Pascal 1.5 festgestellt, der bei UNITED/XY einen Programmabsturz erzeugt. (Die Systemfunktion rename meldet immer GEMDOS-Fehler -33.) Die Entwicklung wurde daher wieder auf die Compiler-Version V1.10 zurückgestellt. (Also leider immer noch keine arrays > 32 kB...)

AUFSTELL: Diese Monster-Unit wurde in die drei Teile AUFST_UT (Hilfsroutinen), AUFST_HV (HV + Härte), AUFST_AM (Amateure) und AUFST_PR (Profis) zerlegt. (AUFST_PR ist nun nicht mehr die größte Quelltextdatei!)
AUSWAHL: Beim "Ansehen eines Vereins" wurde das Layout geändert, um den Platz auf dem Bildschirm besser auszunutzen.
In dieser Funktion werden nun auch die gesperrten Spieler des Vereins angezeigt; die bisher verfügbare separate Funktion dafür ist entfallen.
Zu jedem gesperrten Spieler werden nun auf dem Bildschirm auch Reihenqualifikationen, Alter und Stufe angezeigt.
AUSWERT: Der Menü-Punkt "Sperren eines Vereins anzeigen" wurde gestrichen (siehe oben).
GLUECK: In die SC-Dateien werden nun zusätzlich zu den S/U/N-Wahrscheinlichkeiten das Ergebnis und das Erwartungsergebnis des Spieles ausgegeben. (Lukas Kautzsch wollte das.)
Es gibt Wünsche, diese Werte für Pokalspiele bis zum Elfmeterschießen durchzurechnen. Dabei gibt es jedoch prinzipielle algorithmische Probleme; wer so etwas will, soll sich explizit bei mir melden.
PARAMETR:: Neuer Parameter TORMINUTEN-MAXIMUM (Zahl, Standardwert: 5), beschreibt die maximale Anzahl von Toren pro Schütze, für die noch alle Tore einzeln mit Torminuten angezeigt werden. Hat ein Schütze in einem Spiel mehr Treffer erzielt, dann wird wie bisher nur die Summe seiner Tore angezeigt.
Neuer Parameter ELFMETER-GEFAHR (Zahl, Standardwert: 10), beschreibt die Wahrscheinlichkeit, mit der jeder einzelne Härtepunkt zu einem Elfmeter gegen das hart spielende Team führen kann.
PROGHEAD: Neue Unit, ausgelagert aus UNITED. (Teile und herrsche.)
SYS_VT52: Die letzten Referenzen auf die Pascal/ST-Unit wurden nun eliminiert (VT52-Kommandos nun mit Escape-Sequenzen).
Leider spinnt der Maxon-Pascal-Compiler, sodass hier eine (scheinbar überflüssige) Definition uses Dos stehenbleiben musste...
Sämtliche VT52-Prozeduren wurden in VT52* umbenannt; in sämtlichen anderen Units wurden direkte Verweise auf SYS_VT52 eliminiert (nur INPUTS und OUTPUTS dürfen noch VT52-Funktionen direkt verwenden).
TABELLEN: Sind mehrere Vereine punkt- und torgleich, dann wird nur noch für den ersten dieser Vereine eine Platzierung in der Ligatabelle ausgegeben.
TALENTE: Der Sortier-Algorithmus der Spielernamen tat immer noch nicht. Jetzt ist mir die Sache endgültig zu blöd, und ich habe die paar möglichen Fälle alle explizit hingeschrieben. Hoffentlich tut's nun endlich!
Der Aufruf zum Schließen der Protokolldatei, in der manchmal die letzten Zeilen fehlten, stand an einer unlogischen Stelle (sollte aber eigentlich immer ausgeführt worden sein). Vielleicht tritt der Effekt nun nicht mehr auf?
diverse: Sämtliche Kommandos zum Ein- und Ausschalten des Cursors wurden aus den Anwendungsroutinen entfernt. Der Cursor wird nun nur noch dann ein- und anschließend sofort wieder ausgeschaltet, wenn eine Eingabe vorgenommen werden soll, die länger als ein Zeichen sein kann (String- und Zahleingabe), sowie bei Ja/Nein-Fragen.
INPUTS: Bei der Eingabe der Spielkommentare (und vielleicht auch in anderen Texteingabefeldern) ist jetzt auch in der PC-Version das 'ß' zulässig, welches im IBM-Zeichensatz mit dem 'beta' identisch ist. (* In welcher Version genau diese Änderung vorgenommen wurde, lässt sich nicht mehr eindeutig bestimmen. LK 1992-01-31 *)

V1.60 (1991-10-05)

DARF: Ein Spieler, der auf die Transferliste gesetzt werden soll, darf dies nun auch dann, wenn er noch eine Handelssperre für genau eine Runde hat. Lukas Kautzsch wollte das so für OBERFOUL; wann der 'Verkauf' stattfindet, ist hierbei Ansichtssache.
START: Bei der ftf-Kontrollausgabe nach dem Aufbau neuer Teams wurde ein Leerzeichen eingefügt. Außerdem wurden Trainings-WPs bei diversen Kontrollsummen bisher doppelt gezählt - dies wurde korrigiert.
SYS_NAME: Die Meldung über die Compiler-Version (nun 1.50) wurde angepasst.
Erste Erkenntnis des Compiler-Updates: Bildschirmausgaben werden nun wesentlich schneller durchgeführt.
TEAMTAB: Die Team-Tabellen werden nun (auf Wunsch von Lukas Kautzsch) in Dateien mit Namen TABxxyyz.TXT ausgegeben. Dabei bedeuten:
  • xx = Nr. der aktuellen Runde,
  • yy = 'HW'/'WP' (Sortierkriterium),
  • Z = 'E'/'Z' (einzeln/zusammen).
Die Dateinamen bleiben nun über die gesamte Saison eindeutig, die Dateien werden nicht mehr jede Runde überschrieben.

V1.59 (1991-09-19)

PARAMETR: Neuer Parameter MEMORY-TEST (Schalter, Standardwert 'J'). Beim Laden eines Ligasystems prüft das Programm normalerweise, wieviel Speicherplatz auf dem aktuellen Laufwerk noch frei ist; sind dies weniger als 50 kByte, dann wird eine Meldung auf den Bildschirm ausgegeben.
UNITED/ST stürzt bei einem vollen Laufwerk übrigens nicht ab, sondern - schlimmer! - das Maxon-Pascal-Laufzeitsystem unterdrückt alle weiteren Ausgaben, sodass sämtliche zum Schreiben geöffneten Dateien anschließend leer sind! Was die PC-Version in diesem Falle tut, ist mir nicht bekannt. Der Test ist also keineswegs sinnlos!
Bei Besitzers großer Festplatten und vor allem bei TOS-Versionen kleiner als 1.4 dauert der Aufruf der entsprechenden XBIOS-Routine allerdings seine Zeit. Daher kann man diesen Test nun per Parameter abschalten (sagt aber nachher nicht, ich hätte Euch nicht gewarnt!).
SPIELE: Zu Beginn einer Pokalrunde wird gefragt, ob überhaupt (noch) Amateurvereine mitspielen. Wird dies verneint, dann fallen für den Spielleiter später etliche Abfragen weg.
T_EDITOR: Ich werde vorerst Stärke- und Einsätze-Werte von Spielern nicht editierbar machen. Dagegen spricht vor allem, dass die bereits verfügbare Möglichkeit, die Stufe zu editieren, die Stärkewerte für alle Reihen automatisch konsistent neu berechnet. Die Einsätze möchte ich nicht aufmachen, weil dadurch Spielerdaten entstehen könnten, die nicht mehr korrekt verarbeitet werden können (z. B. ein TA X Y). Da für die Zukunft geplant ist, beim Einlesen eines Vereins eine Konsistenzprüfung für alle Daten vorzunehmen (und fehlerhafte Daten plausibel anzupassen - aber wie?), möchte ich keine zusätzliche Möglichkeit schaffen, fehlerhafte Daten bewusst erzeugen zu können.

V1.58 (1991-08-25, Release-Version!)

TALENTE: Der mysteriöse Programmabsturz beim Entdecken von mehr als einem Talent pro Verein scheint von Lukas Kautzsch entdeckt worden zu sein. (Da ich den Fehler selbst nie habe reproduzieren können, kann ich nun auch sein Verschwinden nicht melden...)
T_EDITOR: Kleine Verbesserungen wurden vorgenommen. Vorschläge werden nach wie vor mit Spannung erwartet.

V1.57 (1991-08-??)

COM_OPT: Die Datei mit dem Compiler-Optionen wurde in COM_OPT.PAS umbenannt (nun umfasst *.PAS den gesamten Quelltext, was die Archivierung erleichtert).
SYS_NAME: Diese Unit wurde auch für die PC-Version eingerichtet, sodass UNITED.PAS jetzt auch systemabhängig ist.
T_EDITOR: Eine neue Unit, mal wieder. Nachdem lange genug diverse Spielleiter gejammert haben, dass es den separaten Team-Editor (mit Atari-GEM-Oberfläche) nicht in der PC-Version gibt, habe ich im Schnellverfahren einen in das Programm selbst eingebaut. Allfällige Fehlermeldungen und Verschönerungswünsche bitte baldmöglichst einreichen!

V1.56 (1991-08-05)

diverse: Die Länge eines Managernamens wurde (auf besonderen Wunsch von Robert Gunst) von 15 auf 20 Zeichen erhöht.
AUFSTELL: Kleine Ausfallerscheinungen nach der Umstellung der Positionier-Prozeduren in 1.55 - jetzt behoben.
COMMENT: Neue Unit, die den Editor für Spiel-Kommentare enthält.
INPUTS: Bei der Eingabe von Zeichenketten werden nun nur noch 'normale' Eingabezeichen zugelassen. (Das war intern bereits vorgesehen, aber nicht 'scharf' gemacht.)
Leider sind einige Sonder-Tasten immer noch nicht zu verhindern, darunter Cntrl-c (Programmabbruch!), Cntrl-s (Ausgabe und Programmablauf anhalten), Cntrl-q (Cntrl-s-Effekt aufheben). Einige andere Tasten bewirken ebenfalls die angegebenen Kombinationen (z. B. Cntrl-1, Cntrl-3).
PARAMETR: Nach monatelangem Zögern wurde endlich ein dritter Typ von Parametern eingeführt: Die Zeichenkette (STRING), eingeschlossen in einfache Hochkommata ('').
Als erstes Exemplar dieses neuen Typs wurde der Parameter WAEHRUNG (STRING, Standardwert: 'kKj') eingeführt.
In zahlreichen Units wurden die bisher fest eincodierten (und z. T. unterschiedlichen!) Zeichenketten 'kKj' (oder so ähnlich) durch den Wert des neuen Parameters ersetzt.
START: Eine seit langem (besonders für ftf-Partien) angestrebte Verbesserung wurde eingebaut: Nach der Eingabe aller Teams bei der Gründung eines neuen Ligasystems wird für alle Teams eine globale Übersichtszeile ausgegeben, welche die WP-Verteilung auf Altersstufen, Geld- und Trainings-WP sowie Anzahl von Spielern und Talenten enthält. Dies soll den bisher erforderlichen GM bei Partiestart ersetzen helfen.

Nebenbei wurde übrigens auch die Parameter-Datei von Grund auf überarbeitet; alle Kommentare sind nun ausführlicher als zuvor.

V1.55 (1991-07-26)

AUSWAHL: Beim Ansehen eines Vereins mit 31767 kKj Bargeld gab es einen Programmabsturz. (NL-Wert > maxint...) Nun wird der NL-Wert als long_int dargestellt. Beim Handelswert kamen negative Werte heraus, weil zwischendurch mit integer gerechnet wurde - auch das ist behoben.
OUTPUTS: Die Prozedur titel gibt nun selbsttätig den Namen des Programms am Anfang eines jeden Überschriftstextes aus (und bezieht ihn in die Unterstreichung mit ein).
In einem Rundumschlag wurden alle Prozeduren zur Bildschirm-Positionierung auf ein einheitliches Parameter-Format umgestellt (erst Spalte, dann Zeile). Durch das bisherige Durcheinander kam es immer wieder zu fehlerhaften Aufrufen.
PARAMETR: Neuer Parameter GELDSTRAFEN (Schalter, Standardwert 'N').
RND_ENDE: Falls der Parameter GELDSTRAFEN auf 'J' gesetzt ist, wird nun eine Frage ausgegeben, ob nun Geldstrafen einkassiert werden sollen. Ggf. wird hier die Hilfs-Funktion zum Ändern von Kontoständen aufgerufen.
SYS_NAME: Es wurde eine neue Unit eingerichtet, die global verwendete Namen (z. B. Name und Versionsnr. des Programms) verwaltet und als Variablen zur Verfügung stellt.
Damit sollte die Systemabhängigkeit der Unit UNITED nun eliminiert sein, sodass endlich nur noch die SYS_-Units systemabhängige Daten enthalten.
diverse: Zahlreiche Referenzen auf "UNITED/ST" in Aufrufen der Prozedur titel wurden eliminiert, um der obigen Forderung gerecht zu werden. Zudem wurde in allen Units Kommentare der Art "UNITED/ST:" in "UNITED/XY:" geändert.
TEAMTAB: Die Fehlermeldung von Robert Gunst, dass die Spalte WPT in der Team-Tabelle falsch berechnet würde, ist nicht mehr nachvollziehbar (muss wohl bereits behoben worden sein).
TRANSF_L: Kleinere Änderungen im Protokollierungs-Layout.
Außerdem wird bei einem Sperrgebot nun kein echter Geldtransfer mehr durchgeführt (da hierbei 'beliebig' hohe Geldbeträge - bis zu 32767 kKj - zulässig sind, konnte es an dieser Stelle zu einem Programmabsturz kommen).

V1.54 (1991-05-25)

diverse: In allen Units wurde das deutsche 'scharfe s' (ß) durch das Beta-Zeichen (ß) ersetzt. Letzteres existiert nämlich auch in MS/DOS, ersteres dagegen wird dort durch ein (hässliches) Peseta-Zeichen ersetzt.
Nun haben also auch die PC-Besitzer korrekte Meldungstexte.
Allerdings ist mir gerade der bisherige PC-Portierer zerfallen (Clemens Misch hat seinen PC der alten Firma zurückgeben müssen). Was tun?
FORMAT: Der 'intelligente' Blocksatzformatierer ist nun wieder ein bisschen weniger dumm als zuvor.
Bisher war nämlich nicht vorgesehen, dass der überhängende Rest nach dem Umbruch selbst länger sein konnte als eine komplette Zeile (was bei einem hinreichend kleinem Parameterwert durchaus passieren konnte) - dies führte zu einem Programmabsturz.
Auch konnte es in einigen wenigen Fällen vorkommen, dass nach einer Ausgabe kein Zeilenumbruch vorgenommen wurde.
Beide Effekte sollten nun nicht mehr auftreten.
Ich kann daher nun wieder dazu raten, den Parameter FORMAT-KOMMENTAR versuchsweise zu benutzen.
GM_ANGEB: Kleinere Korrekturen im Layout des Verkaufsprotokolls in der Auswertungsdatei. (Ein Blank mehr, eines weniger.)
OUTPUTS: Da diverse Meldungen des Programms Dateinamen enthalten und daher in variabler Länge ausgegeben werden müssen, werden Meldungen nun nicht mehr an einer festen Bildschirmkoordinate, sondern rechtsbündig in die rechte untere Bildschirmecke ausgegeben.
SPIELE: Statt mit einer erzwungenen Return-Eingabe wird der Kommentar-Editor nun mit einer Sicherheitsabfrage beendet (ich selbst habe oft genug durch einen Tastaturpreller zwei Returns eingegeben...).
In diesem Zusammenhang: Finger weg von der Control-Taste! Wann immer Eingaben (oder auch Ausgaben!) erfolgen, können Control-Sequenzen aller Art (Cntrl-s, q, c, j, k, ...) abenteuerliche Folgen haben! Ich garantiere für nichts!
START: Beim Einrichten eines ersten neuen Ligasystems konnten bisher keine neuen Talente eingegeben werden. Das lag daran, dass zu diesem Zeitpunkt noch keine Parameter-Datei eingelesen worden war (welche denn auch?) und folglich sämtliche Parameterwerte undefiniert waren.
Nun wird direkt nach dem Einrichten der Struktur-Ordner versucht, die (ggf. gerade dort hinein kopierte) Parameter-Datei zu lesen (ggf. werden nun die Standardwerte gesetzt). Eine eventuelle Meldung, dass die Parameterdatei fehlt, kommt nun allerdings noch ein zweites Mal.
Anmerkung für alle Erst-Einrichter eines Ligasystems: Wer Sonderwünsche hat, muss zuerst seine Parameterdatei (im Ordner DAT) entsprechend einstellen, um schon beim Aufbau des Ligasystems die entsprechenden Werte verwenden zu können!
SYS_FILE: Wenn UNITED/ST versuchte, eine der Auswertungs-Dateien umzubenennen, um sie vor Überschreiben zu schützen, gab es einen Programmabsturz, falls auch mit dem Backup-Dateinamen bereits eine Datei existierte (GEMDOS-Fehler -36). Der Fehler konnte nur auftreten, wenn ein GM zwei Runden lang seine Auswertungsdateien nicht gelöscht hatte. In diesem Fall wird die verdrängte Datei nun explizit gelöscht.
SYS_FOLD: Dieses Maxon-Pascal ist ein Schwein! Nicht genug, dass es rewrite normwidrig ausführt:
Die Routine GetDir, die das aktuelle Verzeichnis eines Laufwerkes zurückmelden soll, liefert, wenn das aktuelle Verzeichnis ein Ordner ist, einen Pfadnamen ohne \ am Ende zurück (wie im Beispiel im Handbuch implizit angegeben), für das Wurzelverzeichnis von A: allerdings A:\ und nicht A:! Daher funktionierte UNITED/ST (wieder einmal) nicht ordentlich, wenn man es außerhalb eines Ordners starten wollte (u. a. konnte von dort aus natürlich kein Ligasystem neu eingerichtet werden).
Und wenn ich das aktuelle Verzeichnis dann vom Programm aus in einen Ordner legen will (z. B. ChDir (concat ('A:\', '\TEST\BASIS')), dann wird ChDir einfach nicht ausgeführt, liefert aber auch keinen Fehler zurück (IOResult = 0)! Großartig, nicht wahr? Bloß weil zwei \ im Pfadnamen benachbart stehen...
Also musste ich
  • das Ergebnis von GetDir ansehen und ggf. das letzte Zeichen abschneiden sowie
  • das Ergebnis von ChDir mit GetDir prüfen und die Funktion ordner_existiert entsprechend umbauen
(seufz... jetzt geht es!).
TRANSF_L: Bei der Anpreisung eines aufgetauten tiefgekühlten Talentes einer Stufe < 2 (und nur dann!) fehlte in der Angebotsdatei ein Komma-Zeichen. Dieses wurde nachgereicht.

V1.53 (1991-05-12)

(unter tatkräftiger Mitwirkung von Pedl Rau!)

SYS_FILE: Da Maxon-Pascal die Prozedur rewrite abweichend vom Pascal-Standard ausführt (den vorherigen Inhalt der Datei nicht löscht!), wird nun jede zum Schreiben zu öffnende, bereits existierende Datei explizit vorher gelöscht. (Seufz...)
SYS_FOLD: In der Funktion ordner_existiert war ein logischer Fehler (ein not fehlte). Der war beim Umschreiben nach Maxon-Pascal entstanden. Nun wird die (Nicht-)Existenz von Ordnern wieder korrekt erkannt.
UDEC: Die globale Variable united_path, die nach SYS_FOLD migriert war, stand auch hier noch herum (und sabotierte, weil undefiniert, aber verwendet, die Einrichtung neuer Ligasysteme; jetzt geht's wieder).

V1.52 (1991-04-29)

Nacharbeiten zur Portierung von 1.51 auf IBM/PC.

AUFSTELL: Neuer Parameter FREMD-ZEIGEN (Schalter, Standardwert 'N') bewirkt das (bisher an ftf gekoppelte) Einblenden der Fremdeinsätze über Spalte 20-30 der Spielernamen im Aufstellungsdialog.
Neuer Parameter HÄRTE-EINZEL (Schalter, Standardwert 'J') bewirkt, dass (nach wie vor) alle 5 Härtewerte eingegeben werden müssen. Bei 'N' wird zuvor gefragt, ob überhaupt Härte eingesetzt werden soll.
Ein per backspace aus einer Aufstellung gelöschter Spieler wird nun auch von der rechten Bildschirmseite korrekt gelöscht. (Da Turbo-ST 1.8 auch ClrEoL nicht korrekt auswertet, schreiben wir nun eben Leerzeichen drüber...)
AUSWAHL: Layout-Schnitzer bei lsys_wahl repariert. (Trat nur auf, wenn mehrere Systeme installiert waren.)
GM_ANGEB: Fällt ein Spieler an die NL durch, dann muss nun kein Zweitgebot mehr eingegeben werden.
Die unterschiedliche Anzeige des Handelswerts der versteigerten Spieler zwischen Komplett- und Einzelanzeige wurde korrigiert.
SAISON: Bei der Ausgabe der Sperren für das Saison-Info wurde ein fehlender Zeilenumbruch nach der Überschrift nachgeholt.
SYS_FILE: Die gesamte in Pascal/ST-Zeiten mühsam gebastelte Hilfskonstruktion zum Erweitern von bereits bestehenden Dateien (c_app_file usw.) wurde weggeworfen und durch die in Maxon-Pascal wie in Turbo-Pascal verfügbare Prozedur append ersetzt. Dabei konnten auch Teile von HANDEL und NICHT_LI stark vereinfacht werden. (Ganz nebenbei ist das Programm dadurch auch etwas schneller geworden - Diskettenbenutzer, freut Euch!)
TEAMTAB: Der seit 1.3x von mehreren GMs gemeldete Programmabsturz während der Team-Tab-Generierung ist nun endlich geklärt: In der Tat war dort eine lokale Variable undefiniert. Diese wird nun nicht mehr verwendet.
Der Name der zu erzeugenden Ausgabedatei wird nun nicht mehr vom GM eingegeben, sondern vom Programm aus den Dialog-Informationen generiert. Diese Politik soll in Zukunft für alle Ausgabedateien verfolgt werden; bei der Eingabe von Dateinamen sind Verstöße gegen Betriebssystemkonventionen immer möglich, und eine systemunabhängige Prüfung ist nicht realisierbar.
TRANSF_L: Auch der Besitzer eines Spielers muss nun bei einem Sperrgebot den NL-Wert überbieten. Dies wurde bisher nicht geprüft.
UDEC: Für die Zukunft ist die komplette Ausrottung von Variablen des Typs String (ohne Längenangabe) geplant. Jeder Compiler hat andere Default-Längen; zudem musste beim Portieren wieder getrickst werden, weil einige Variablen 32 kB überschritten. Daher wurde etwa ein halbes Dutzend elementare String-Typen definiert; diese sollen in Zukunft ausschließlich verwendet werden. (Wenn ich die Millionen alter Strings endlich alle gefunden und ersetzt habe...)

Allgemeine Warnung vor Turbo-ST 1.80:

Neben ClearEoS wird auch ClearEoL von diesem Accessory zwar unglaublich schnell, aber fehlerhaft ausgeführt. In manchen Fällen werden ab der Cursor-Position nur die ersten 3-4 Zeichen, nicht aber der Rest dieser Zeile komplett gelöscht.

V1.51 (1991-04-28)

HILF: Die Routine zur Sortierung aller Spieler des Ligasystems nach Wert war im ersten Versuch der Portierung nicht übersetzbar (Speichermangel) und wurde vorläufig ausgelagert.
INIT: Bei der Initialisierung des Programms werden nun Meldungen ausgegeben, welche Dateien eingelesen wurden.

V1.50 (1991-04-28)

Portierung von Pascal/ST nach Maxon-Pascal! (Deshalb der Versions-Sprung.)

Alle externen Übersetzungseinheiten wurden in (hoffentlich) Turbo-Pascal-kompatible Units umgewandelt.

Dabei wurden zahlreiche neue Units eingerichtet bzw. die Strukturierung des Programmtextes überarbeitet:

ALTHEINZ: Früher Teil von ALTERN. Enthält die (umweltfreien) Routinen zum Altern eines Spielers.
ALTLIGA: Früher Teil von ALTERN: Enthält die Routinen zum Altern des gesamten Ligasystems.
DARF: Früher Teil von UTILITY. Enthält Prozeduren, die United-Regeln prüfen (darf_entdecken, kann_bezahlen usw.).
DATAFILE: Früher Teil von FILES. Enthält die High-Level-Routinen zum Lesen von UNITED/ST-Dateien.
FILES: Enthält nur noch eine einzige Routine zum Öffnen einer Ausgabedatei mit Eingabe des Dateinamens über den Bildschirm. Langfristig soll diese Routine eliminiert werden (Generierung von weiteren Standardnamen), um Bedienungsfehler zu verhindern.
FORMAT: Früher Teil von OUTPUT. Enthält die Routinen zum automatischen Formatieren mit Zeilenumbruch.
HAERTE: Früher Teil von WUERFELN. Ausgelagert zur Erhöhung der Übersichtlichkeit.
IS: Früher Teil von UTILITY. Enthält Prozeduren, die Attribute von Spielern abfragen (is_noPlayer, is_ausputzer usw.)
SORT: Früher Teil von UTILITY. enthält Routinen zum Sortieren von Spielerkadern.
STATISTI: Früher Teil von WUERFELN. Enthält Routinen zur Berechnung der Wahrscheinlichkeitsverteilung für Sieg/Unentschieden/Niederlage.
SYS_DISK: Früher Teil von TOS. Enthält (derzeit nur) eine Routine zum systemabhängigen Verarbeiten eines Laufwerks.
SYS_FILE: Früher Teil von FILES. Enthält die systemabhängigen Einschalungen von Dateizugriffen.
SYS_FOLD: Früher Teil von TOS. Enthält die systemabhängigen Routinen zum Verarbeiten von Ordnern.
SYS_KBD: Früher Teil von TOS. Enthält die systemabhängigen Routinen zur Tastatursteuerung.
SYS_RAND: Früher Teil von TOS. Enthält die systemabhängigen Routinen zur Erzeugung von Zufallszahlen.
TORCHANC: Früher Teil von WUERFELN. Enthält Routinen zur Berechnung von Torchancen.
UDEC: Include-Datei für alle Übersetzungseinheiten. Langfristig sollen möglichst viele Variablen denjenigen Units zugeordnet werden, die sie hauptsächlich verarbeiten.

Änderungen bei Units:

AUSWAHL: team_ansehen und verein_wahl rufen einander gegenseitig auf. Dies ohne Deklaration innerhalb derselben Unit zu realisieren, habe ich lieber nicht versucht. Die bisherige Unit SHOW wurde folglich in AUSWAHL integriert.
UNITED: "UNITED/ST, Version 1.50 (Maxon-Pascal 1.10)".
Letzteres soll man laut Handbuch bei jedem Programm angeben, um den Lizenzbedingungen Genüge zu tun.

Einschränkungen / Besonderheiten von Maxon-Pascal:

Das make-Konzept ist allerdings großartig!

Beim Testen des neuen Programms wurde eine interessante Beobachtung gemacht: Die Atari-Betriebssystemerweiterung Turbo-ST 1.80 wertet offenbar mindestens eine VT52-Sequenz falsch aus, nämlich die Sequenz zum Löschen des Bildschirms ab Cursor-Position. Bei Verwendung von Turbo-ST 1.80 kann es also vorkommen, dass Teile vorheriger Meldungsausgaben noch auf dem Bildschirm stehen bleiben! Sollten solche 'Fehler' bemerkt werden, bitte überprüfen, ob diese Effekte ohne Turbo-ST ebenfalls auftreten!

Diese Version ist natürlich nicht zum Weitergeben an Anfänger! Wer weiß, was der Compiler noch alles für Macken hat?

V1.42 (1991-04-09)

HILF: Die Tabelle der nach Handelswerten sortierten Spieler des Ligasystems wurde auf maximal 999 Spieler erweitert. In einem normalen Ligasystem dürfte es wohl kaum so viele Spieler geben; damit sollten nun alle Spieler in dieser Liste enthalten sein. (Bisher waren es fast nur die X I 10.) Das Einsortieren ist damit allerdings etwas langsamer geworden.
INIT: In 1.39 hatte ich bei der Änderung des Formats eines noPlayer auch die Anzahl der Einsätze in allen Reihen auf verboten (= -1) initialisiert. Das aber verkraften einige andere Routinen nicht, die dort eine Null erwarten. Bei der Erzeugung neuer Spieler wurde diese -1 nicht in allen Fällen auf 0 gesetzt, so etwa bei der Entstehung von Spielern über das GM-Angebot. Nun stehen die entsprechenden Werte wieder auf 0. (Hoffentlich haben nicht so arg viele GMs sich diese falschen Spielerdaten eingehandelt - die muss man nun nämlich per Hand reparieren...)
OUTPUT: Bei der Ausgabe der Spielerübersicht für das Saison-Info wurde eine interne Hilfsprozedur (die verhindern sollte, dass eine öffnende Klammer für die Liste der Sondereigenschaften noch an das Zeilenende gesetzt wurde) mit einem falschen Parameter aufgerufen, sodass der (korrekt berechnete) Zeilenumbruch auf dem Bildschirm statt in der Ausgabedatei vorgenommen wurde. Dadurch konnten in der Ausgabedatei sehr lange Zeilen entstehen, die nicht jeder Editor problemlos verkraftete (z. B. WORDPLUS).
SAISON: Aus didaktischen Gründen (Lukas Kautzsch) wurde die Reihenfolge der Menü-Einträge geändert (nun wieder "AUFLÖSUNG" vor "NEUORDNUNG"). (Ich selbst löse Vereine niemals per Programm auf, sondern bunkere die Daten für Tests und als Demos.)
SAISON: Das bereits seit 1.20 (Umstellung des Trainings-Dialogs) konzeptionell nicht mehr funktionsfähige Absteigertraining wurde nun komplett aus dem Programmtext entfernt. Tina Leiffheidt, die diese Funktion im Merlin-United bisher nutzen wollte, wird dafür den Team-Editor verwenden; in OBERFOUL steht die Abschaffung der entsprechenden Regel bevor. Wer noch?
Die Möglichkeit der Vergabe von (auch negativen) Liga-WP wird dagegen im Programm erhalten bleiben, da diese WP als Variationsmäglichkeit der normalen Basis-WP vom normalen Trainings-Verfahren problemlos genutzt werden können. Für eine Beibehaltung des Absteigertrainings erscheinen angesichts der inzwischen verfügbaren (negativ trainierbaren!) Sonderspieler die Probleme zu groß.
SPIELE: Bei der Auswahl der Teilnehmer an einem Pokalspiel wird nun zur Kontrolle zusätzlich die aktuelle Nummer des Pokalspiels in der Kopfzeile angezeigt.
Die Zahl der Zeilen des Fensters für den Editor zur Eingabe eines Spielkommentars kann nun durch den neuen Parameter FENSTER-GROESSE (Zahl, Standardwert: 5) eingestellt werden. Die Position der Ausgabe für die Hochrechnungen wird vom Programm dieser Fenstergröße flexibel angepasst: Das Spielergebnis fällt den Bildschirm von oben, Hochrechnungen und Spielkommentar von unten. Je kleiner das Fenster ist, um so weniger Gefahr besteht, dass die Ausgabe der Hochrechnungen einen Teil der vorherigen Ausgaben (z. B. gesperrte Spieler) überdeckt.
Falls eine Wahrscheinlichkeit für ein Ereignis einer Hochrechnung kleiner als ein 0.0001% ist, dann wird diese Wahrscheinlichkeit nun in der von Taschenrechnern geläufigen Exponentialschreibweise ausgegeben. (Das mag manchen Spiele-Kommentator mit neuem Material füttern...)
Parameterdatei: Im Kommentar zu den WP- und Geldprämien war bei Pokalspielen fälschlicherweise angegeben: "Bei Remis die Hälfte". Dem ist aber nicht so: Bei einem Unentschieden in einem Pokalspiel werden keine Prämien ausgeschüttet.

V1.41 (1991-02-25)

Alle Quelltexte und Include-Dateien wurden mit dem neuen Tempus 2.10 komprimiert. Dadurch waren TABs der Weite 8 in allen Quelltexten enthalten, was den Umfang des gesamten Quelltextes von 795 auf 614 kB reduziert hatte (nun passte er wieder auf eine Diskette). Tempus kann solche Dateien direkt bearbeiten - man muss sich allerdings ein wenig umgewöhnen.
Später musste ich allerdings alles rückgängig machen: An den Compiler werden nicht etwa die entkomprimierten Texte, sondern die TABs durchgereicht - was dazu führt, dass TABs innerhalb von Strings bei der Bildschirmausgabe, die an einer anderen Spaltenposition als der im Quelltext durchgeführt wird, falsch ausgewertet werden. (Diverse Meldungen waren zu kurz oder zu lang.) Mist!
Tempus 2.10 versteht beim impliziten Applikationsaufruf keine Dateinamen, deren Basisteil nur aus Ziffern besteht (vielleicht ist es auch ein Neodesk-Problem?) - daher wurden alle CHANGES-Dateien umbenannt.
Anschließend wurden alle Quelltexte mit der neuen Compiler-Version Pascal/ST 2.08 übersetzt (12:20 min.) und mit der neuen paslib gebunden (0:35 min.). Der komprimierte Text hätte in 11:10 min. übersetzt werden können...

HANDEL: In 1.39 hatte ich in der Hektik einen großartigen Fehler in das Modul hineinrepariert: Spieler wurden immer in den Kader zurückkopiert, nicht nur nach einem versuchten Abbruch. (Dadurch behielten alle Verkäufer ihre Spieler, die Käufer bekamen ein Duplikat!) Eine entsprechende Abfrage wurde eingebaut.

V1.40 (1991-02-11)

AUFSTELL: Falls der Parameter FTF aktiv ist, dann wird der Name des Spielers im Aufstellungsmenü auf 19 Zeichen gekürzt. Dahinter werden eventuelle Einsätze des Spielers in V, M und S angezeigt. (Die Idee stammt vom letzten Sylvesterturnier.)
FILES: Die in 1.39 überarbeitete Sortierung des Mannschaftskaders wird nun jedesmal aufgerufen, wenn die Daten eines Vereins eingelesen werden.
HANDEL: Wird bei einem privaten Handel die Auswahl der Spieler eines Vereins nach der Ablehnung eines ausgewählten Spielers neu gestartet (ohne den gesamten Handel abzubrechen), dann werden nun die im vorherigen Versuch ausgewählten Spieler aus der Ware in den Verein zurück übertragen. Dies war bisher nicht der Fall.
Nach jedem privaten Handel wird nun in der Protokolldatei (wieder) eine Leerzeile ausgegeben.
HILF: Bei der Ausgabe von Spielerdaten auf Datei wurde die Angabe "(eingespielt)" für ein trainierbares nT 0 bisher falsch eingerückt und es fehlte der anschließende Zeilenumbruch. Beides wurde korrigiert.
Neuer Menüpunkt: Ausgabe einer Liste der 100 wertvollsten Spieler des Ligasystems in eine Textdatei.
OUTPUT: Neue Prozedur printTest (<n>:integer) erlaubt, einen bedingten Zeilenumbruch vorzunehmen, falls weniger als <n> Zeichen in die aktuelle Formatierer-Zeile passen. Dies war erforderlich, um den bisher aufgetretenen Umbruch nach einer '(' beim Saison-Info zu vermeiden. Die Klammer wird nämlich zu einem Zeitpunkt erzeugt, zu dem noch nicht absehbar ist, in welche Zeile sie denn später ausgegeben werden sollte. Nun wird der Blocksatz nicht immer optimal aufgefüllt, das beschriebene Problem aber wohl umgangen.
RND_ENDE: Bei der Ausgabe der Sperren wurde ein fehlender Zeilenumbruch nachgeholt.
SPERRE: Vor der Ausgabe der gesperrten Spieler eines Vereins wurde die bisher fehlende Bildschirm-Positionierung eingebaut.
Bei der Berechnung der Sperren wird der bearbeitete Verein nur noch dann wieder abgespeichert, wenn mindestens einer seiner Spieler mehr als 0 DP_NEU besaß. Dadurch wurde die (bisher erhebliche) Dauer der Sperrenberechnung deutlich verkürzt. (Beim noch langsameren Rundenende gibt es leider nichts zu tunen - irgendwas ändert sich da immer.)
SPIELE: Eine Pokalrunde wird nun durch die Bearbeitung einer zu Beginn einzugebenden Anzahl von Pokalspielen abgewickelt. Die Nummer des aktuellen Spiels wird jeweils in der Bildschirm-Kopfzeile angezeigt.
TALENTE: Nach der Überschrift in der Protokolldatei wurde der fehlende Zeilenumbruch nachgetragen.
Die Namen der neu entdeckten Talente werden vor der Ausgabe in die Protokolldatei nun alphabetisch sortiert.
Auf Wunsch eines gewissen Pedl Rau wurde die Dialogführung bei der Entdeckung von Talenten ein wenig aufgemotzt: Am Ende wird eine Kontroll-Ausgabe angeboten, die Behandlung eines Vereins kann wahlweise abgebrochen bzw. wiederholt werden, und zu jedem Talent wird angezeigt, das wievielte selbstentdeckte Talent des Vereins (in der laufenden Saison) es ist.
Zu Beginn der Talententdeckung für einen Verein wird eine Meldung ausgegeben, falls der Verein keinen spielberechtigten Torwart (ungleich tT) besitzt.
TRAINING: Zusätzlich zu den bisherigen Angaben wird nun auch die Wertänderung des gesamten Vereins angezeigt.
UDEC: Die Konstante maxtalente=6 wurde durch den Parameter MAX-TALENTE (Zahl, Standardwert: 6) ersetzt.
UTILITY: Die 'normale Trainingsgrenze' für ein tT ist jetzt 10 (bisher implizit Stufe+3).
Der Parameter MAX-TALENTE wurde eingebaut.
Neue Funktion is_U_nT ('ist ein uneingespieltes nT'). An etlichen Stellen wurde die entsprechende (bisher oft unterschiedliche) Bestimmung dieser Eigenschaft durch die neue Funktion abgelöst.
Neue Prozeduren swapPlayer, swapLong, swapInt. Auch hier wurden diverse Insellösungen eliminiert.
WERT: Durch eine fehlende Abfrage wurde bisher auch für einen noPlayer die Berechnung eines Handelswertes vorgenommen, die aufgrund seiner eigenartigen Werte einen Wert größer als 0 ergab. Dadurch waren bisher die Handelswerte von Spielern, die die nächste Alterung nicht überlebten, minimal zu hoch (ein X nT 0 war z. B. bisher 1 kKj. wert).
Für uneingespielte Talente wird bei Verwendung des Parameters GHW-EXTRA nun nicht mehr einfach der Wert des Spielers aus der Tabelle verwendet, sondern pro Einsatz ein c_eingespielt-tel des Wertes des eingespielten Spielers angerechnet. Damit wird der üblicherweise in Runde 2 eintretende Wert-Sprung vermieden und jedes teilweise eingespielte Talent schon mit mehr als 0 bewertet (was vor allem für das Setzen auf die Transferliste bei Ertragsbegrenzung wichtig ist!).

V1.39 (1991-02-09)

FILES: Beim Einlesen eines Vereins werden die im Mannschaftskader nicht besetzten Positionen mit noPlayer initialisiert. Das war bisher nicht der Fall, und das machte bei der neuen Sortier-Funktion erhebliche Probleme (siehe unten).
INIT: Der noPlayer wird intern nun als F X -1 dargestellt. Die bisherige Darstellung TAVMS '-II' -1 führte zu Fehlern bei der (undefinierten) Ausgabe des Alters eines noPlayers (bei Programmtests).
SPIELE: Wenn ein Spieler seinen 6. Einsatz in einer Reihe absolviert hat, wird die Zahl seiner Einsätze nun auf 12 gesetzt. Damit wird die Tatsache gespeichert, dass der Spieler in der laufenden Saison 6 echte Einsätze absolviert hat.
UTILITY: Die Funktion crunchTeam ist abgeschafft. Ihre Funktion wird von der überarbeiteten Funktion sortTeam übernommen. Diese wird nun an den entsprechenden Stellen aufgerufen und komprimiert und sortiert das Team. Dabei wird nun nicht mehr nach Reihenqualifikationen, sondern nach Einsätzen in der laufenden Saison sortiert (eine Reihenqualifikation zählt als 1 Einsatz). Gesperrte Spieler und tiefgekühlte Talente kommen (in dieser Reihenfolge) ganz nach hinten.

V1.38 (1990-12-29)

ERGEBNIS: Durch eine Änderung im Formatierer wurde nach dem Spielergebnis kein Zeilenumbruch vorgenommen. Der Fehler (1.3x) wurde behoben.
GM_ANGEB: Neuer Parameter GMA-ZWEITGEBOT (Schalter, Standardwert N), der die Eingabe des zweithöchsten Gebotes anfordert und diesen Wert in die Auswertung protokolliert.
Ein Fragetext wurde um ein Leerzeichen gekürzt.
Wurde die Eingabe eines neuen GM-Angebotes abgelehnt, dann wurde bisher fälschlicherweise die Meldung "Kein GM-Angebot vorhanden!" ausgegeben. Nun wird die Meldung zum richtigen Zeitpunkt angezeigt.
In der Kontrollausgabe des GM-Angebotes wurde bei Trainern bisher ein Leerzeichen zuviel ausgegeben.
In der entsprechenden Prozedur wurde die angezeigte Datei nicht wieder geschlossen! Das friedliche Pascal/ST-Laufzeitsystem störte sich bisher nicht daran.
Nach dieser Kontrollausgabe wird nun der Handelswert des gesamten Angebots in einer Meldung angezeigt.
Die Kontrollausgabe wird nun auch vor der Versteigerung eines Angebotes aufgerufen - damit der GM sieht, was gleich auf ihn zukommen wird.
NEU: Bei der Angabe der Einsätze eines Sonderspieler in fremden Reihen wurde die Angabe bisher nicht auf dem Bildschirm angezeigt (aufgrund einer 1.2x-Änderung in ziffRead). Dies wurde nun nachgeholt.
Für neue Sonderspieler können nun nicht mehr zusätzlich zur T-Reihe Einsätze in weiteren Reihen eingegeben werden (bisher ging das).
SPIELE: Das Aufbereiten des im Dialog eingegebenen Spielkommentars durch den Formatierer wurde von dem neuen Parameter FORMAT-KOMMENTAR (Schalter, Standardwert N) abhängig gemacht. Wird die Formatierung gewünscht, dann wird an jeden Eingabestring ein Leerzeichen angehängt, bevor die Formatierung durchgeführt wird.
WUERFELN: Im Rahmen der Überarbeitung der AUFSTIEG-Regeln wurden zwei inkompatible Programmänderungen vorgenommen, um das Programmverhalten an den Regeltext von OBERFOUL (!) anzupassen:
  • Bei der Auswertung eines Platzverweises wird nun wirklich die reduzierte Stärke des vom Feld gestellten Spielers (bisher der Stufenverlust) gerundet. Bei einer Rot-Minute, durch die als Nachkomma-Anteil der reduzierten Stufe genau 0.5 entstand, wurde bisher in die falsche 'Richtung' gerundet.
  • Bei der Entfernung eines Spielers, der vom Platz gestellt wurde, aus der Aufstellung (zu Beginn der Verlängerung) wurde bisher die T- bzw. A-Reihe auf 0 gesetzt. Nun wird lediglich die restliche Stärke des Spielers entfernt, die Härtepunkte der entsprechenden Reihe bleiben nun tatsächlich auch in der Verlängerung erhalten.

V1.37 (1990-12-10)

NEU: Kleine Änderung im Text-Layout (die Eingabe der Spieltage pro Runde passte nicht in eine Zeile).
OUTPUT: Sämtliche Formatierungs-Prozeduren wurden auf eine Stringlänge von 255 Zeichen erweitert - man weiß ja nie.
SAISON: Hier waren noch Altlasten vorhanden, die die internen Formatierungs-Variablen direkt manipulierten (und dann krachte es).
TDD: Auch hier waren noch direkte Zugriffe auf die Formatierungs-Variablen drin. Gefunden wurden sie erst durch die Umbenennung der Variablen und die Neu-Übersetzung des gesamten Programm. Jetzt fummelt niemand mehr an den prettyprint-Variablen herum...
UDEC: Neuer Dateityp string255.

V1.36 (1990-12-09)

ERGEBNIS: Die Ausgabe der Torschützen wurde optional um die Torminuten (siehe unten) erweitert.
PARAMETR: Neuer Parameter TORMINUTEN (Standardwert: N) erlaubt die Ausgabe der Torminuten statt der Anzahl der Tore in der Auswertung und auf dem Bildschirm.
WUERFELN: Zu jedem Feldtor (auch in der Verlängerung) wird nun eine Torminute berechnet (nach der Originalregel aus United3).
Das erforderte natürlich wieder mal einen ganze Rattenschwanz an Änderungen, weil bisher die Torschützen erst nach allen Toren berechnet wurden; zu diesem Zeitpunkt wäre der Zeitpunkt des Tores aber nicht mehr bestimmbar gewesen, weil dieser u. a. aus der aktuellen Nummer der Torchance einer Reihe bestimmt wird.
Nun wird zu jedem gefallenen Tor einzeln der Torschütze berechnet und das Tor sowie die Torminute sofort in diesen Spieler eingetragen.
Um die Menge der Ausgaben in Grenzen zu halten und einem eventuellen Programmabsturz durch Überlauf vorzubeugen, werden die Torminuten nur dann gespeichert und ausgegeben, wenn ein Spieler maximal 5 Tore erzielt hat. Hat er mehr Tore erzielt, dann wird nur noch die Anzahl seiner Treffer bekanntgegeben.
Leider führt diese Änderung übrigens nicht dazu, ein 'Halbzeitergebnis' zu bestimmen, da sich nach den bestehenden Regeln Elfmeter nicht eindeutig einer der beiden Halbzeiten zuordnen lassen. Daher wird bisher kein Halbzeitresultat ausgegeben. (Man könnte natürlich analog zu den Feldchancen auch die Elfmeterchancen auf ein Zeitraster abbilden usw.)

V1.35 (1990-12-03)

HANDEL: Die Ausgabedatei HANDEL.BAK wird nun durch Umbenennen aus der Datei HANDEL.AUS erzeugt (bisher durch Kopieren).
NICHT_LI: Die Ausgabedatei NL.BAK wird nun durch Umbenennen aus der Datei NL.AUS erzeugt (bisher durch Kopieren).
SAISON: Bei der Eingabe von Liga-WP sind nun auch negative Werte zulässig (-20 bis +20 halbe WP). Damit ist das 'Modell Ahlemeyer' nun ohne Eingriffe in die Parameterdatei möglich. Siehe aber auch unten!
TALENTE: 1.2x-Fehler bei der Entdeckung von Talenten behoben (eine Bedingung war bei einer Änderung negiert worden), weshalb die Entdeckung von Talenten ab 1.30 nicht mehr erlaubt war.
Eine Ausgabepositionierung wurde korrigiert (jetzt ab Spalte 1).
Alternativ zum bisherigen Verfahren kann jetzt die Entdeckung von Talenten auch für alle Vereine des Ligasystems durchgeführt werden (was in Runde 1 sinnvoll erscheint; die Entdeckung von Talenten kann durch die Ablehnung des 1. Talents ja auch unterbunden werden).
TRAINING: Die obige Änderung (in SAISON) sieht zwar trivial aus, aber sie war es keineswegs: Bei negativen WP-Ständen fiel die Funktion 'optimales Training' in eine endlose Rekursion! (Das lässt sich ohne weitreichende Änderungen auch gar nicht beheben.)
Daher wird nun das Training eines Vereins, dessen WP-Konto kleiner als 0 ist, mit einer entsprechenden Meldung abgewiesen.
Außerdem wurde zur Feststellung des Fehlers die globale Compiler-Option stack/heap-control eingeschaltet, was das Programm leider wieder 3 kByte größer macht.

Der Inhalt des Entwicklungs-Ordners UNITED\ ist nun zum ersten Mal größer als 1.5 MB...

V1.34 (1990-12-02)

ERGEBNIS: Vor dem Kommentar wurde nach mehreren Umstellungen eine überflüssige Leerzeile ausgegeben. Der Fehler wurde korrigiert.
FILES: Neue Funktion rename_file zum Umbenennen von Dateien (siehe unten).
HILF: Der gemeldete Layout-Fehler bei der Pokal-Auslosung (Lukas Kautzsch, 1.30) konnte nicht mehr beobachtet werden.
SPIELE: Vor jedem Ligaspiel wird nun überprüft, ob dieses Spiel für die beiden beteiligten Vereine wirklich das nächste Spiel der laufenden Saison ist. (In der Bilanz steht ja drin, wieviele Spiele der Verein bereits absolviert hat.) Ist dies nicht der Fall, dann wird eine entsprechende Meldung ausgegeben und das Spiel kann nun übersprungen werden. Auf diese Weise bietet das Programm nach einem Absturz innerhalb eines Ligaspieltages nun halbautomatisch die korrekte Wiederaufsetzstelle an und verhindert zudem in vielen Fällen, dass durch Fehlbedienung des Programms Ligaspiele vergessen oder mehrfach ausgewertet werden. (Eine vollständige Kontrolle wäre nur beim Rundenende möglich - vielleicht kommt das noch.)
Wenn eine der Protokolldateien für Liga-, Pokal- oder Freundschaftsspiele geöffnet werden soll, die bereits existiert, dann wird die alte Datei zuvor in <name>.BAK umbenannt und eine entsprechende Meldung ausgegeben. (Eine bereits existierende .BAK-Datei wird hierbei kommentarlos überschrieben.) Damit ist nun auch das Protokoll gegen eine versehentliche Zerstörung durch einen Bedienungsfehler (z. B. die Auswertung eines bereits ausgewerteten Spieltages) geschützt.
Bei der Auswahl von Vereinen für Pokalspiele wird jetzt auch bei Amateurvereinen ein neuer Titel ausgegeben. Bei der Auswahl von Profi gegen Amateur (in dieser Reihenfolge) gab es bisher Bildschirm-Überschreiber.
SPERRE: Eine fehlerhafte Ausgabepositionierung bei der Berechnung der Sperren nach der Beendigung aller Spiele wurde korrigiert.
TRANSF_L: Der gemeldete Programmabsturz durch floating point overflow beim Versteigern eines T nT 2 (Lukas Kautzsch, 1.30) konnte nicht reproduziert werden.

V1.33 (1990-1?-??)

HANDEL: Der Staub der Jahrhunderte wurde gewischt! Das Modul wurde komplett überarbeitet und dokumentiert. Sämtliche Code-Duplizierungen (z. B. durch identische Ausgaben auf Bildschirm und Protokolldatei) wurden eliminiert (dafür wurde an einer Stelle erstmals in UNITED/ST ein Parameter vom Typ procedure verwendet).
Sämtliche Prüfungen, die bei einem Privaten Handel anfallen, werden nun von einer speziellen Testprozedur erledigt (nicht mehr von vielen kleinen Prozeduren, die für jeden der beiden Partner einzeln aufgerufen wurden).
Alle Prüfungen werden nun ausgeführt, bevor die Bestätigung des Handels durch den Spielleiter erfolgt (der Handel wird intern schon mal abgewickelt, sodass man alles prüfen kann). Nun kann der Spielleiter sicher sein, dass der Handel wirklich regelkonform ist, wenn er die Zahlen über Handelswertdifferenzen usw. auf dem Bildschirm hat.
Der falsche Fragetext aus 1.2x wurde korrigiert (Lukas Kautzsch); einige weitere Fragetexte sind nun etwas ausführlicher bzw. werden nun ab Spalte 2 des Bildschirms ausgegeben.
Ein privater Handel eines Vereins mit sich selbst ist nun nicht mehr erlaubt.
Ein privater Handel, bei dem kein Spieler den Verein wechselt, ist ebenfalls nicht mehr zulässig. (Für Geldtransfers zur Korrektur vorheriger Fehler gibt es die Hilfsfunktion, Kontostände von Vereinen zu ändern - das reicht.)
Ein privater Handel, bei dem einer der beiden Vereine weder Geld noch einen Spieler abgibt (das geht derzeit noch, wenn man nach dem Ansehen der Daten des ersten Spielers diesen ablehnt und auch keinen weiteren Spieler auswählt), wird (bisher noch) nicht unterbunden; es wird allerdings eine entsprechende Warnung ausgegeben. (Die Alternative wäre, die Auswahl mindestens eines Spielers in diesem Falle zu erzwingen; dann wäre es für den Spielleiter aber schwerer, einen Handel abzubrechen, wenn er erst zu diesem Zeitpunkt merkt, dass etwas verkehrt ist. Was ist besser?)
Und als dann alles fertig zu sein schien, probierte ich, einen Spieler mehrfach in dieselbe Handelsware zu stecken. Die Folgen waren grauenhaft. Das Problem ließ sich nur durch eine Änderung des Datentyps ware lösen. Und hieß, so ziemlich das gesamte Modul neu zu schreiben...
Ausgewählte Spieler werden nun komplett in die Ware übertragen und aus dem Verein gelöscht. Sämtliche Prozeduren, die die Handelsware bearbeiten, mussten angepasst werden. (Mal sehen, ob jetzt noch alles geht...)
UTILITY: Der Versuch, einen leeren Verein zu komprimieren, führte zum Programmabsturz. Damit hatten wir natürlich bisher nicht gerechnet - aber wenn zwei Vereine ihren Kader komplett tauschen wollen, kann das nun passieren.

V1.32 (1990-1?-??)

Allgemeines: Beim Stöbern durch die Module werden immer mal wieder Fragetexte geringfügig überarbeitet, neue Überschriften als Dialog-Strukturierungen eingefügt usw. - solche Korrekturen werde ich nicht mehr explizit aufzählen.
ERGEBNIS: Wenn die Torschützen einer Reihe ausgegeben werden sollten, in der von Spielbeginn an kein Spieler stand (nur HV!), stürzte das Programm ab. Nun wird in diesem Fall die Ausgabe "<kein Spieler>" bei den Torschützen vorgenommen.
INPUT: Bei der Eingabe von Zahlenwerten über intRead werden nun führende Nullen unterdrückt. Es hat mich schon lange gestört, dass man bei der Eingabe einer Integer-Zahl bisher nicht wusste, wieviel Bildschirm dadurch zerstört wird. Jetzt weiß man es (siehe Gültigkeitsintervall für den Eingabewert).
NICHT_LI: Der gemeldete Fehler (Kontostand des Vereins nicht am Anfang bzw. zum falschen Zeitpunkt angezeigt, Lukas Kautzsch) konnte nicht reproduziert werden.
Was allerdings bisher über den Bildschirm flackerte, war eine Zwischenausgabe der bereits verkauften Spieler, die von der anschließenden heinzWahl vernichtet wird, weil heinzWahl seit 1.2x selbsttätig den restlichen Bildschirm löscht (um Überschreibe-Effekten vorzubeugen). Die zusätzliche Ausgabe aller bereits zum Verkaufen ausgewählten Spieler wird nun nur noch vor der Frage "Noch einen Spieler verkaufen?" vorgenommen - das sollte auch reichen. Perfekt sieht's allerdings nicht aus...
Der Kontostand des Vereins wird nun immer fünfstellig ausgegeben (bisher blieben alte Zeichen auf dem Bildschirm stehen, wenn durch die Abzahlung die Stellenzahl des Kassenstandes zurückging oder dieser gar das Vorzeichen wechselte).
Das Verkaufsprotokoll in die Textdatei wird nun vollständig über die neuen Formatierungsroutinen erledigt; Aufrufe der veralteten Prozedur fPrintKkj konnten eliminiert werden.
OUTPUT: Korrektur in der Formatierungsroutine: Die Ausgabe der Sonderzeichen in die letzte Spalte funktionierte nicht, da anschließend ab dieser Spalte rückwärts eine Umbruchstelle gesucht wurde. Nun beginnt die Suche erst hinter dieser Spalte.
RND_ENDE: Zusätzlich wird am Ende der Phase die Summe aller abgebuchten Zinszahlungen in einer Meldung ausgegeben. (Das brauche ich - MS - für mein Saison-Info.)
Bei der Auflistung der Sperren auf den Bildschirm wurden zwei Zeilen eingespart, sodass ein eventuelles Scrolling erst zwei Vereine später einsetzt.
SPERRE: Zusätzliche Positionierung in der Funktion "Anzeigen der Sperren eines Vereins" eingefügt - die fehlte bisher.
SPIELE: Die Ausgabe der neu hinzugekommenen Sperren wurde in einer der vorherigen Versionen - dort war es leider nicht dokumentiert worden - nun wieder vor den Siegchancen ausgegeben (da gab es Probleme mit der Reihenfolge, um Bildschirm-Überschreiber zu verhindern - ganz zu verhindern sind sie nicht!).
Das Wort 'WIRKLICH' wurde aus der abschließenden Frage, ob alle Spiele beendet seien und die Sperren berechnet werden könnten, entfernt (Lukas Kautzsch).
Die überzählige Leerzeile zwischen je zwei Spielen in der Auswertungsdatei wurde wieder entfernt (Lukas Kautzsch).
Zudem werden nun die eingegebenen Kommentar-Strings nicht mehr direkt in die Auswertungsdatei geschrieben, sondern vorher durch den Formatierer geschickt. Das bedeutet, dass man an jedes Eingabe-Ende ein Leerzeichen anhängen sollte, sonst werden zwei Worte direkt zusammengeklebt!
TALENTE: Der gemeldete Fehler (3. Talent kann nicht einzeln entdeckt werden, Lukas Kautzsch) konnte nicht reproduziert werden. Bei mir geht's! Es sei denn, der Verein besaß bereits 6 Talente (nt + tT)!
Allerdings wurde bei der entsprechenden abweisenden Meldung bisher nicht unterschieden, weshalb keine weiteren Talente mehr entdeckt werden können. Dies wurde geändert (getrennte Meldungen für 3 Entdeckungen und 6 Talente insgesamt; letzteres wird auch gemeldet, wenn es während des Entdeckungsvorgangs auftritt, um zu zeigen, dass das eigentliche Entdeckungspotential noch nicht ausgeschöpft ist).
Talententdeckungen werden nun genau wie NL-Verkäufe in der Auswertung auf eine gemeinsame Spalte (32) eingerückt.
TRAINING: Spielerwerte werden jetzt im Trainings-Dialog mit einer Breite von 12 Zeichen ausgegeben ('AVMS_VIII_13').
Auf vielfachen Wunsch eines einzelnen Herrn (Lukas Kautzsch) wurde die Kontrollausgabe der aktuellen Trainings-WPs des Vereins um eine Zeile nach unten verschoben (damit der Herr nach wie vor die Neodesk-Uhr laufen lassen kann, ohne dass ihm dadurch wichtige Features verloren gehen).
TRANSF_L: Der gemeldete Fehler (bei TFL_LIMIT=0 wird das Geld bei einem Sperrgebot vernichtet, Lukas Kautzsch) konnte nicht reproduziert werden. Unabhängig davon wurde die Dialogführung geringfügig geändert.
WUERFELN: Wenn die Torschützen einer Reihe, in der von Spielbeginn an kein Spieler stand (nur HV!), berechnet werden sollten, stürzte das Programm ab (seit dem Tie-Breaker bei gleicher Torwut, in 1.2x). Die Bestimmung der Torschützen wird in diesem Falle unterdrückt (siehe auch ERGEBNIS).
UNITED: Der Info-Kopf wird nun nur noch beim ersten Mal so 'buntig' ausgegeben - wir können auch anders... (Peter Rau).

V1.31 (1990-1?-??)

AUFSTELL: Ein überflüssiges Leerzeichen bei einer Bestätigung wurde entfernt.
ERGEBNIS: In 1.2x wurden falsche Tor-Anzahlen bei den Schützen sowie ein überflüssiges Leerzeichen am Zeilenanfang ausgegeben.
Auch vor den Elfmetertoren wurde bisher ein Leerzeichen zuviel ausgegeben.
Vor den Torschützen wird nun ein zusätzliches Leerzeichen ausgegeben, um die Ausgabe genauso weit einzurücken wie Elfmetertore, Gelbe und Rote Karten.
INPUT: Vereinheitlichung der Funktionen frage und frage2.
Das Echo bei allen jaodernein-Fragen wurde vorerst ausgeschaltet, da die Eingabe nicht in allen Fällen korrekt wieder gelöscht werden kann. Es ist praktisch nicht auszuschließen, dass ein durch zu hektische Eingabe noch im Tastaturpuffer befindliches Return-Zeichen (das bei der nächsten Ausgabe, nämlich gerade beim Fragetext, ausgewertet wird) die Positionierung zerstört - so oft kann man den Tastaturpuffer gar nicht leeren, dass sich so etwas verhindern lässt. (Beim Kommentar-Editor wird es z. B. gemacht, hat aber manchmal keine Wirkung.)
OUTPUT: 1.2x-Fehler in formatKopf behoben (Einrückung funktionierte nicht, ein Parameter war nicht als VAR übergeben worden).
In printKopf wird nun die zusätzliche Bildschirm-Einrückung um eine Spalte global erledigt; damit sind nun sämtliche Ausgabefunktionen symmetrisch für Bildschirm und Datei und können (und werden!) bei simultaner Ausgabe von einer Menge gemeinsamer Prozeduren erledigt werden.
In formatln wurde eine falsche Variable referenziert; daher war die Einrückung bei der Ausgabe in Text-Dateien um 1 zu weit. Der Fehler ist behoben.
Die Prozedur format wird langsam 'intelligent'. Das bedeutet vorerst:
  • Ausgabestrings werden an der Stelle des letztmöglichen Leerzeichens umgebrochen. Dadurch wird der Blocksatz nun wesentlich kompakter durchgeführt. Der definierte rechte Rand wird allerdings nicht komplett ausgenutzt (siehe unten).
  • Leerzeichen am Anfang einer Fortsetzungszeile werden unterdrückt (das war bisher nicht so).
  • Einige Sonderzeichen (',', '.', ';') werden, falls sie in die 1. Spalte einer neuen Zeile ausgegeben würden, stattdessen in die nur in diesem Fall verwendete letzte Spalte der Formatierungszeile ausgegeben.
Mit dieser Funktion sind noch Erfahrungen zu sammeln - Erweiterungen können noch folgen.
SPERRE: Die Ausgabe-Formatierung wurde komplett auf die Prozedur format umgestellt.
TRANSF_L: Dialog-Layout geändert; Fehler bei der Behandlung des Parameters TFL_LIMIT behoben.
Programmabsturz (1.2x-Fehler) beim Durchfallen eines Spielers an die NL behoben.
WERT: Bei Verwendung von GHW-EXTRA wurden folgende Änderungen eingeführt:
  • Der Handelswert von Hintermannschaftsspielern wird nun mit einem Faktor von 2 bewertet (bisher progressiv bzw. mit 1.7).
  • Fremdqualifikationen werden nun nur noch mit 10 kKj. pro Stufe des Spielers bewertet (bisher mit völlig überhöhten 10% des Spielerwertes).
  • Fremdeinsätze werden wie bisher relativ zu fertigen Reihenqualifikationen bewertet, also nun ebenfalls deutlich abgewertet.
WUERFELN: Falls die DI-Matrix bei Härte 0 Strafen vergibt und der Spielleiter keinen Spieler aufgestellt hat (z. B. bei einem Test), dann stürzte bisher das Programm ab (bei dem Versuch, Gelbe bzw. Rote Karten auf nicht existierende Spieler zu verteilen). Der Fehler ist nun behoben - die Vergabe von Strafen wird in diesem Fall unterdrückt.

V1.30 (1990-10-21)

ALTERN: Fehler aus 1.2x behoben (tTs wurden nicht zu nTs).
TALENTE: Irgendwie war die Entdeckerei immer noch nicht perfekt. Jetzt wird auch die zum Abschluss ausgegebene überflüssige Meldung "Zu viele Talente" unterdrückt. (Dazu musste in UTILITY eine Prozedur zerlegt werden!)
TRAINING: Das Training eines Vereins wird nun auch immer dann ermöglicht, wenn 'es sich überhaupt lohnt', d. h. wenn der Verein mindestens so viele WP besitzt, dass er den am billigsten trainierbaren seiner in dieser Saison noch nicht austrainierten Spieler in diesem Moment trainieren könnte.
Bisher war das Training nur dann aufgerufen worden, wenn wenigstens 1.0 WP vorhanden waren; dies könnte in einem Szenario mit AUFSTIEG-Sonderspielern und Ahlemeyerschem Basis-WP-Modell mit 0 Basis-WP in Runde 11 und 1 nicht genug sein. (Noch gibt es dieses Szenario nirgendwo - aber OBERFOUL stand schon dicht davor...)
Die ursprüngliche Bedingung wird allerdings immer noch geprüft, damit sich z. B. ein Verein mit lauter überteuren Spielern nicht um das Verfallen seines einen WP drücken kann.
Die Reihenfolge der Versuche beim optimalen Training wurde umgestellt: Nun wird für jeden Spieler zuerst mit, dann erst ohne Training probiert. Bisher fand es das Programm besser, einen WP verfallen zu lassen, als ihn in einen Spieler mit Handelswert 0 (nach dem Training!) zu stecken.
WERT: Bei der Berechnung des neuen Handelswertes (Parameter GHW-EXTRA) wird für Hintermannschaftsspieler der Wert des entsprechenden Feldspielers nicht mehr mit 1.7, sondern mit (1.07 hoch Stufe) multipliziert. Die Abzüge aufgrund von DP erfolgen nun nicht mehr pauschal am Ende der Berechnung, sondern innerhalb der jeweiligen Teilberechnung vor der rundenspezifischen Relativierung (Robert Gunst).
Ich weise an dieser Stelle ausdrücklich darauf hin, dass der Algorithmus noch nicht endgültig ist, und übernehme keinerlei Kompatibilitätsgarantie! (Bisher ist dieser Wert also nur zum Experimentieren zu gebrauchen.)

V1.29 (1990-1?-??)

Allgemeines: Viele, viele kleine Fehler aus 1.28 behoben, darunter auch zwei herbe Programmabstürze im Bereich 'Eingabe von Amateuren bei Pokalspielen'. Herzlichen Dank an Robert Gunst, der mehrere 1.2x-Fassungen als Pilot testete und mir die Erkenntnisse sofort meldete!
Der Fehler bei der Darstellung von -0.5 WP als Trainingsaufwand war natürlich noch an vier weiteren Stellen - blödes Mehrfach-Coding! Da muss noch einiges neu geschrieben werden...
UDEC: Nach langem Zögern bin ich nun endlich dazu übergegangen, von der Pascal/ST-Fähigkeit Gebrauch zu machen, dass in einem Modul auch globale Typen definiert werden können. (Die PC-Portierung beeinträchtigt das nicht, da dort Turbo-Pascal sowieso eigene Modul-Pakete haben will und es UDEC dort nicht als Include-Datei geben kann.) Dadurch konnten einige Definitionen, die nur von einem einzigen Modul benötigt werden, ausgelagert werden.
Globale Variablen kann man in einem Modul nicht definieren, ohne sie innerhalb einer Prozedur anzulegen. Es war eine bittere Erfahrung, dass weder der Compiler noch der Linker sich daran störte, dass sich dann nämlich mehrere globale Variablen im gebundenen Programm überlappen - von den Ergebnissen und dem stundenlangen Suchen nach der Ursache schweigen wir lieber. (Ach hätten wir doch ein vernünftiges Modul-Konzept - aber läuft denn auf allen Rechnern Modula oder etwas Ähnliches?)
Auch konnten ein paar Leichen entfernt werden: Zwei global definierte Variablen wurden überhaupt nicht mehr verwendet, eine weitere konnte durch Parametrisierung lokal gehalten werden.
Angesichts der Tatsache, dass eine komplette Übersetzung des Programms inzwischen eine Viertelstunde dauert und UDEC (mit jetzt nur noch 500 Zeilen!) für jeden der über 30 Module komplett mit übersetzt werden muss, erscheinen diese Bestrebungen wohl erklärlich...
AUFSTELL: Das Programm betrachtet einen T tT Y nun bereits bei der automatischen Aufstellung des Torwarts als 'nicht einsetzbar' - bisher nur bei der expliziter Auswahl, die nun mangels Torleuten ggf. nicht mehr notwendig ist. (Lukas Kautzsch)
Sämtliche Routinen zur Eingabe von Amateur-Aufstellungen wurden praktisch komplett neu geschrieben. (Leider wurde das Programm dadurch nicht wesentlich kleiner - nur schöner.) Die automatische WP-Reduzierung ist etwas schlauer geworden: Sie reduziert Hintermannschaftsreihen in jedem Durchgang abwechselnd um jeweils eine Stufe, Feldreihen natürlich nur so, dass die 3:1-Regel nicht bricht, und der letzte WP wird nun garantiert aus einer Feldreihe genommen, sodass nicht (wie bisher) am Ende ein WP zuviel reduziert wird. Damit dies immer geht, wurde das Intervall der möglichen WP-Zahlen für Amateure auf 40..150 verkleinert. (Stört das jemanden?)
Nach wie vor können Amateure Stufen von 0-10 in T und A sowie Gesamtwertungen von 0 bis 90 WP in jeder Feldreihe angeben; es wird zuerst die 3:1-Regel geprüft, dann die WP-Masse, ggf. nach dem Heimvorteil noch einmal die 3:1-Regel.
ERGEBNIS: Die Wahrscheinlichkeiten für Sieg / Unentschieden / Niederlage werden auf dem Bildschirm nun mit 4 Nachkommastellen angezeigt (dafür war noch Platz), um auch verschwindend kleine Chancen noch von 0 unterscheiden zu können.
FILES: Die Abstände zwischen einzelnen Werten innerhalb der Vereins- und Spielerdaten wurden geändert (das Datenformat bleibt natürlich kompatibel). Dadurch wurde eine Gruppierung logisch zusammengehöriger Werte deutlicher gemacht, sodass das Lesen von Team-Dateien per Editor durch den Spielleiter erleichtert wird. (Trotzdem: Höllische Vorsicht bei jeglichen Eingriffen!!!)
Alle Basisdaten des Ligasystems werden nun über dieselbe interne Datei-Variable gelesen und geschrieben.
GLÜCK: Auch die Ausgabe der Glückswürfeltabelle erfolgt nun über die Datei textFile (die ist zu diesem Zeitpunkt verfügbar - das wusste ich vorher nicht).
GM_ANGEB: Der von Robert Gunst gemeldete Fehler bei der Kontrollausgabe der Spieler bei der Eingabe des Angebotes (Handelswert passt nicht in die Zeile?) konnte nicht reproduziert werden.
OUTPUT: Nun wird zwischen Meldungen mit (Prozedur alarm) und ohne (neue Prozedur meldung) akustischem Signal unterschieden. Aufrufe in allen Modulen wurden angepasst.
Die Prozeduren [f]print, [f]println, [f]printKopf und [f]printKkj wurden intern auf jeweils eine gemeinsame Prozedur format, formatln usw. abgebildet, sodass sich beide Gruppen von Formatierungsroutinen garantiert gleich verhalten. (Kleiner wurde das Programm dadurch aber noch nicht, wegen der üppigen Parameterlisten.) Zudem gibt es nun auch die Prozeduren bPrint, bPrintln usw., die jeweils das entsprechende Paar von Prozeduraufrufen absetzen. (Damit fliegt in näherer Zukunft auch das massenhaft vorhandene Gestrüpp an doppeltem Coding aus der Ergebnisausgabe raus!) Die zahlreichen Doppelaufrufe werden in Kürze ausgeforstet.
Langfristig will ich die Prozedur format 'intelligent' machen, sodass sie sich selbst eine geeignete Umbruchstelle sucht (durch Analyse des ihr übergebenen Strings); damit wären dann zahlreiche explizite Eingriffe diverser Prozeduren in eigentlich interne Variablen der Umbruch-Steuerung (so wird es nämlich bisher gemacht - igitt!) nicht mehr nötig. Außerdem würde der Umbruch 'kompakter' erfolgen, z. B. könnte bei jedem Leerzeichen eine zulässige Umbruchstelle liegen. Durch ein Sonderzeichen ('_'?) könnten 'feste' Leerzeichen im zu druckenden String gekennzeichnet werden, die ansonsten auf ein Leerzeichen abgebildet werden, aber keinen Umbruch an dieser Stelle erlauben (z. B. bei "4_DP" usw.).
SPIELE: Es ist für manchen Spielleiter anscheinend nicht so einfach, die Berechnung der Sperren zum richtigen Zeitpunkt zu erledigen. Nun werden ausführliche Meldungen ausgegeben, die das Verständnis erleichtern sollten. (Tina Leiffheidt)
TEAMTAB: Code-Duplizierung vernichtet durch zwei neue Prozeduren (das brachte fast 2 kByte weniger an Programmgröße!).
TOS: Eine milde Gabe für die armen Nicht-Festplattenbesitzer: Während der Initialisierung eines Ligasystems bestimmt das Programm die Größe des auf dem aktuellen Laufwerk noch verfügbaren Speicherplatzes und gibt diese in einer Meldung aus, wenn weniger als 100 kByte frei sind.

Das Programm wuchert weiter - durch die deutlich ausgeweiteten Meldungstexte sind es jetzt 247 kByte...

V1.28 (1990-1?-??)

NEU: Der Dialog bei der Neu-Strukturierung des Ligasystems wurde komplett überarbeitet. Die Frage-Texte sind ausführlicher, mehrere Bestätigungen und Kontroll-Ausgaben sind hinzugekommen.
Beim Neu-Aufbau der Ordnerstruktur (Neu-Ordnung des Ligasystems) konnte es bisher passieren, dass ein neuer Ordner eingerichtet wurde, der aufgrund einer nachfolgenden Nicht-Bestätigung unnötig erhalten blieb. In diesem Fall wird der Ordner nun automatisch wieder gelöscht.
Liga-Ordner aus der vergangenen Saison können weiterhin erhalten bleiben, da sich in ihnen ggf. noch Leichen von aufgelösten Vereinen befinden, die der GM vielleicht archivieren will - daher werden diese nicht automatisch gelöscht.
SAISON: Hier gilt dasselbe wie für NEU (mehr und ausführlichere Meldungen).
Vor einem eventuellen Übertragen einer Datei werden nun nicht mehr intern die Ordnernamen verglichen (was früher zu Fehlern geführt hat!), sondern es wird direkt geprüft, ob die Datei unter ihrem (alten und) neuen Namen bereits im richtigen Ordner existiert.
Sicherheitshalber werden sämtliche Eingaben von Datei- und Ordnernamen sofort in Großbuchstaben umgesetzt (das war bisher nicht überall getan worden). Dies gilt übrigens auch für Dateinamen, die bereits eingetragen waren und für die die zugehörigen Vereine beim Saisonwechsel übernommen werden!
Die Prozedur neu_putTeam wurde ebenso wie die Funktion putTeam auf die neue (nur lokal in FILES bekannte) Funktion writeTeam abgebildet; beide äußeren Prozeduren übergeben Clubdaten und (dort unterscheiden sie sich) Dateinamen aus verschiedenen Ligasystemtabellen. (Wieder 30 Zeilen doppeltes coding weniger...)
TRAINING: Fehler aus 1.20 behoben (bei Spielern mit einem Trainingsaufwand von genau -0.5 WP wurde das negative Vorzeichen nicht ausgegeben).
TOS: Hier hat sich intern einiges getan.
Die Behandlung von Laufwerk-Kennzeichen wurde komplett eliminiert (es funktioniert alles auch mit dem Default-Drive!).
Die Funktion set_path funktionierte bisher nicht, wenn ihr ein leerer Pfad übergeben wurde (das war der Grund dafür, weshalb UNITED.TOS nur innerhalb eines Ordners funktionierte!). Der Fehler ist beseitigt.
Die gesamte interne Debugging-Umgebung der Zugriffsfunktionen auf Ordner ist erhalten geblieben (wer weiß, wann man die wieder mal braucht!), ist aber nicht aktiv. (Zum Einschalten muss die Konstante debug auf true gesetzt und das Modul neu übersetzt werden.)

Sources plus Changes passen nun nicht mehr gemeinsam auf eine Diskette - wo soll das bloß enden?

V1.27 (1990-1?-??)

UDEC: Auslagerung einiger bisher global definierter Variablen in die entsprechenden Module (was dort ggf. die Erweiterung einiger Parameterlisten erforderte).
ALTERN: Fehler behoben: Der Saison-Zähler wurde bisher beim Altern jeder Liga (!) um 1 erhöht. (Da den niemand referenziert, hatte es auch keiner gemerkt.)
Während der Alterung werden nun ausführliche Meldungen ausgegeben, was denn so alles geschieht.
ERGEBNIS: Kleinere Veränderungen im Layout der Ergebnisausgabe (Bildschirm).
Falls das TDD-Flag an ist, bleibt der Informationsgehalt wie bisher; andernfalls werden statt den Vereinsnamen nun die Kurznamen, gefolgt von den Reihengesamtwertungen bei Spielende, ausgegeben.
Im Dialog werden Sub-Ergebnisse nach 90 bzw. 120 Minuten nicht mehr angezeigt (dafür reicht der Platz in einer Zeile nicht aus).
Die Ausgabefunktion für Statistikdaten berechnet selbst die günstigste Bildschirm-Position für ihre Ausgaben.
Der kleine 'Editor' wurde noch ein wenig 'getuned' (beim Aufbau des Eingabefeldes schaltet read_string nun den Cursor kurzzeitig aus).
NICHT_LI: Schwerer Fehler bei der Schleifensteuerung behoben (aus 1.2x). Nun kann man diese Phase wieder beenden.
Der Versuch von NL-Verkäufen eines Vereins mit nur 11 Spielern wird nun präventiv mit einer entsprechenden Meldung abgewiesen.
RND_ENDE: Es werden nun ausführliche Meldungen ausgegeben, was diese Aktion bewirkt. Bei der angeforderten Bestätigung wird u. a. die Nummer der aktuellen Runde angezeigt, sodass man erkennen kann, ob man für die aktuelle Auswertung bereits ein Rundenende durchgeführt hatte.
Nach Ablauf der Saison wird die Durchführung dieser Aktion mit einer Meldung abgewiesen; in der letzten Runde der Saison wird eine zusätzliche Meldung ausgegeben, die diese Tatsache anzeigt.
TABELLEN: Neues Modul, abgeteilt aus RND_ENDE (darin nahm das eigentliche Rundenende nämlich kaum 30% an Platz ein!).
Schrecksekunde: Bei 'Compiler Files' werde ich keine weiteren Dateien mehr angeben können! Also muss ich die Anzahl der Module in Grenzen halten - aber wie?
TDD: Mit TDD-KURZ werden die beiden WP-Summen-Ausgaben in der Protokolldatei nun in einer Zeile und mit minimaler Länge ausgegeben (Peter Rau).
UTILITY: Korrektur in der Funktion darf_verkaufen: Ein Torwart darf nun verkauft werden, wenn ein Verein mehrere Torleute, aber zu wenige Feldspieler besitzt. (Bisher fehlte die Abfrage, ob der betrachtete Spieler ein Torwart ist.)
diverse: Allgemeine debugging-Runde. Zahlreiche kleinere Fehlerchen gefunden und behoben, vor allem Positionierungen oder Logik-Fehler bei der Verwendung von frage.

Strategie-Aussage: Die Spalte 0 soll bei der Bildschirmausgabe generell nicht mehr verwendet werden (das sieht nämlich hässlich aus). Zahlreiche Änderungen in dieser Hinsicht sind bereits implementiert; das war an manchen Stellen gar nicht so einfach, weil oftmals nur eine einheitliche Prozedur für die Ausgabe sowohl auf Datei als auch auf Bildschirm existiert. Hoffentlich habe ich jetzt alle Stellen gefunden...

Ab diesem Moment ist UNITED.TOS unwiderruflich größer als 240 kByte und der Inhalt des UNITED/-Source-Ordners (inklusive aller Objektdateien) erstmals größer als 1.4 MByte - aua, aua!

V1.26 (1990-1?-??)

AUFSTELL: Zusätzlich zum bisherigen Funktionsumfang kann man nun die Auswahl des zuletzt aufgestellten Feldspielers mit der Taste <backspace> zurücknehmen! (Damit kann der GM z. B. ausprobieren, wieviele Einsätze ein Spieler in der aktuellen Reihe schon hat, wenn er gerade eine NMR-Aufstellung bastelt.)
Die Rücknahme funktioniert bisher nur innerhalb einer Feldreihe; das Weiterschalten auf die nächste Reihe ist nach wie vor nur durch dem Neubeginn der gesamten Aufstellung (Escape) zu korrigieren. (Das wird wohl auch irgendwann mal gehen, aber dafür muss die gesamte Logik der nächsthöheren Prozedurschichten geändert werden - dort werden einzelne Reihen bisher strikt getrennt behandelt.)
SPIELE: Wie war das doch gleich mit dem kleinen "mehrzeiligen Editor" zur Eingabe des Spielkommentars? Wie dem auch sei: Wenn hier jemand scrollt, dann (nun) das Programm selbst, nicht etwa die Überlaufkontrolle des Betriebssystems! (Recht so, Lukas?)
Neue Parameter VERLÄNGERUNG und ELFMETERSCHIESSEN (Standardwerte jeweils 'J') - mir war die immer wieder erforderliche Eingabe bei jedem einzelnen Test-Pokalspiel schließlich doch zu lästig.
TDD: Neues Modul: Die TDD-spezifischen Protokollfunktionen (Spieler in der Aufstellung usw.) wurden aus dem Modul ERGEBNIS ausgelagert. Schnittstelle: eine einzige Prozedur.
WUERFELN: Hurra: Die Handwerker haben neue Tore aufgestellt, die nun endlich auf beiden Seiten gleich hoch sind!
Im Klartext: Haben mehrere Spieler dieselbe maximale Torwut, dann wird nun nicht mehr wie bisher einfach der erste ('rechts stehende') dieser Spieler, sondern ein (gleichwahrscheinlich) zufällig bestimmter dieser Spieler als Torschütze bekanntgegeben - so wie es auch im Regeltext stehen sollte...
Fehler behoben: Falls eine Disziplinarmatrix verwendet wird, in der auch bei Härte 0 Strafen möglich sind, dann wird nun geprüft, ob ein Amateurverein vorliegt. Bisher stürzte das Programm an dieser Stelle mit Division durch Null ab! (Joachim Jahnel)

V1.25 (1990-10-15)

Unzählige: Überall wurden die Funktionen okay und JaOderNein eliminiert und durch die Funktion frage ersetzt.
AUFSTELL: Sämtliche Fragen werden nun über eine neue Funktion frage2 gestellt (wie frage, aber mit anderen Bildschirmkoordinaten).
Es ist nun nicht mehr möglich, einen Härtewert für eine Reihe ohne Spieler einzugeben. Das Programm setzt hierfür sofort 0 ein und fordert den Wert für die nächste Reihe an. (Bisher konnte man dort ohnehin nur den Wert 0 eingeben...)
AUSWAHL: Die Eingabe-Taste wird auf dem Bildschirm nicht mehr geechot. In den meisten Fällen erfolgt anschließend ohnehin eine Bestätigungsfrage in Zeile 23, sodass das Eingabezeichen eher stört.
GLUECK: In der SC-Datei werden die Vereins-Kurznamen nun in der richtigen Länge ausgegeben.
TRANSF_L: Auf dem Bildschirm wird bei der Versteigerung nun auch der Name des Besitzers des Spielers angezeigt. NL- und Handelswert werden nun direkt bei der Eingabe des Kaufpreises angezeigt. Das Layout wurde geringfügig geändert.

V1.24 (1990-??-??)

AUFSTELL: Bei den Daten der aufzustellenden Spieler wird nun auch das Alter mit angezeigt. (Sollte ein AVMS VIII 10 dabei auftreten, dann wird seine zweite Stufen-Ziffer während der Aufstellung eventuell überschrieben - das nehme ich in Kauf.)
INPUT: Das gesamte Modul wurde ausführlich dokumentiert.
Die Funktion IntRead wurde so erweitert, dass sie nun auch dann funktioniert, wenn der Wert 0 nicht im Intervall der zulässigen Eingaben liegt. Das war bisher nicht der Fall, da schon nach der ersten Ziffer überprüft wurde, ob das Zwischenergebnis im Eingabe-Intervall liegt.
Neue Funktion frage (text):boolean. Diese Funktion soll sämtliche Fragen übernehmen, die mit Ja/Nein zu beantworten sind, damit diese z. B. immer an derselben Stelle des Bildschirms gestellt werden. Die Funktion JaOderNein soll dann nur noch lokal in INPUT existieren, die Funktion Okay soll abgeschafft werden.
FILES: Das gesamte Modul wurde ausführlich dokumentiert.
NEU: Der gesamte Dialog zur Eingabe neuer Spieler, Vereine usw. wurde komplett überarbeitet; es wurden (unter Verwendung der neuen Funktion frage) zahlreiche zusätzliche Bestätigungen und Zwischenausgaben eingebaut.
OUTPUT: Ausrottung der Funktionen [f]WriteQualifikationen und [f]WriteAlter. Stattdessen Verwendung von sp_werte.
SPIELE: Eine Begegnung der Vereins-Nummern 0 gegen 0 innerhalb eines Ligaspieltags wird ab sofort (ohne Meldung) übergangen. Nach einem Programmabsturz während eines Ligaspieltages kann man nun also durch einen Eingriff in der Spielplandatei einen Aufsetzpunkt innerhalb eines Ligaspieltages schaffen und den Rest des Spieltages nachholen, ohne die vorherigen Ligaspiele zweimal austragen und die Daten der betroffenen Vereine völlig zerstören oder aus einem (ggf. nicht existierenden) Backup holen zu müssen. Der Inhalt der Ausgabedatei, die während des gesamten Spieltages zum Schreiben geöffnet ist, bleibt aber verloren; der Spielleiter muss die entsprechenden Informationen ggf. mühsam aus den Teamdaten ableiten.
Bei der Bestimmung der Anzahl der WP eines Amateurteams wurde nun ein Intervall von 10 bis 300 vorgegeben. (Werte kleiner als 3 führen bei der automatischen WP-Reduzierung zwangsläufig zu einer Endlosschleife!)
START: Einführung der neuen Funktion frage (siehe INPUT). Zahlreiche neue PosWrites waren erforderlich. Das Programm wird dadurch aber wieder etwas kleiner. Der Dialog beim Aufbau eines neuen Ligasystems wurde grundlegend überarbeitet.
UTILITY: Ausrottung der Funktionen intLength, laengeAlter und lengthStufe; stattdessen Verwendung von sp_werte. (Endlich ist der Mist weg - das brachte 3 kByte Programmgröße weniger!)

Außerdem sieht der 'werbewirksame' Begrüßungsbildschirm wieder ein wenig anders aus - da ist diesmal eindeutig der Spieltrieb mit mir durchgegangen. Es war halt so einfach... Um das alte Verhalten wieder herzustellen, würde es übrigens reichen, den Aufruf des Zufallszahlengenerators mit (* *) auszukommentieren.

V1.23 (1990-??-??)

HANDEL: Falsche Überweisung der Geldbeträge (aus 1.22) repariert (die zuvor verwendeten Namen der Hilfsvariablen, z. B. diff, waren einfach nicht aussagekräftig genug...).
SAISON: Vor der Auflistung der Spielernamen im Saisoninfo wird nun zusätzlich die Anzahl der Spieler des Vereins ausgegeben. (Alex Reschke)
SHOW: Neues Modul (Anzeigen von Teams und Spielern), wurde ausgelagert aus AUSWAHL.
Fehler behoben: Seit der Einführung der Prozedur titel wurden beim Anzeigen von Teamdaten Teile des Bildschirms nicht gelöscht, weil die Bildschirmpositionierung geändert worden war.
Beim Ansehen von Vereinsdaten wird nun nicht mehr "1 Talente" ausgegeben.
SPIELE: Die Fragen beim Beginn einer Pokalrunde (Elfmeterschießen bzw. Amateur-WP-Zahl) werden nun ohne Scrolling in Zeile 23 gestellt.
TALENTE: Die (seit längerem defekte) Talententdeckung wurde endlich repariert: Nach jedem entdeckten Talent wird nun gefragt, ob ein weiteres Talent entdeckt werden soll (falls das überhaupt noch möglich wäre). Nicht verhindert werden kann derzeit eine Fehlermeldung, falls der Verein schon 6 Talente besitzt.
TRAINING: Beim Einzelteamtraining können nun in einer Schleife mehrere Vereine trainiert werden (Robert Gunst).
UTILITY: Regelrelevante Änderung in der Funktion anzahl_talente: Hier werden nun auch die Tiefgekühlten Talente mitgezählt. Bisher konnte ein Verein nämlich 7 tT's kaufen und hatte dadurch in der nächsten Saison automatisch eine illegal große Anzahl an Talenten. Hoffentlich bringt diese Änderung keinen GM durcheinander - langfristig muss es aber einfach sein.
diverse: Die Prozedur titel führt nun selbsttätig Unterstreichungen von Überschriftszeilen durch. Dazu wurde eine zusätzlicher Parameter als Unterstreichungszeichen notwendig (Leerzeichen = keine Unterstreichung).

V1.22 (1990-??-??)

GLUECK: In der SC-Datei werden nun die Mannschafts-Kurznamen (bisher die vollen Mannschaftsnamen) ausgegeben. (Peter Rau)
TRAINING: Mit der Leertaste kann nun ein den Wert des Team optimierendes NMR-Training durchgeführt werden. Der Spielleiter muss allerdings nach wie vor per Hand die trainierten Spieler mitschreiben, da die NMR-Funktion lediglich eine Option ist und per Hand nachkorrigiert werden kann.
TRANSFER: Neuer Parameter TFL-LIMIT (Zahl) bewirkt, dass maximal der dort festgelegte Prozentsatz des geschätzten Handelswertes (zum Zeitpunkt des Verkaufs) an Bargeld beim Verkäufer ankommt (um die Transfermafia endlich zu bremsen!). Die Reduzierung wird nicht durchgeführt, wenn der Spieler an die NL geht. Die Reduzierung wird als Meldung auf dem Bildschirm auf dem Bildschirm angezeigt und in der Auswertungsdatei protokolliert.
Der Standardwert 0 bewirkt, dass der Ertrag eines Verkaufes wie bisher unbeschränkt bleibt.
WERT: Neuer Parameter GHW-EXTRA (Standardwert: N) ermöglicht eine wesentlich detailliertere Bestimmung des Handelswertes eines Spielers:
  • <n> Fremdeinsätze in einer Reihe bringen ((<n>/6) hoch 2)/10 % Wertgewinn,
  • DP kosten nun 4 kKj pro Stufe des Spielers (!),
  • Sperren kosten 5 kKj. pro Spiel und Stufe des Spielers,
  • Handelssperren kosten 1 WP pro Runde der Sperre.
Ich weise ausdrücklich darauf hin, dass sich hier noch Änderungen ergeben werden!

Nebenbei wurde die Parameterdatei PARAMETR.DAT grundsätzlich überarbeitet:

V1.21 (1990-09-18)

AUSWAHL: Die Positionierung vor dem Aufruf von heinzWahl wurde in diese Funktion integriert (war sowieso immer dieselbe).
OUTPUT: Neue Prozedur titel (titel_string), die eine Dialog-Überschrift auf einen zuvor gelöschten Bildschirm ausgibt.
In alle Module wurden Aufrufe dieser Funktion eingebaut. Nun ist die Positionierung im Anschluss an eine solche Ausgabe endlich überall identisch. (Nebenbei ist die Datei UNITED.TOS dadurch um ca. 3 kB kleiner geworden.)
Durch diese beiden Maßnahmen konnten zahlreiche Verweise auf SYS_VT52 eliminiert werden; SYS_VT52 ist nun (fast) nur noch ein Hilfsmodul für die abstrakten Dialogfunktionen in INPUT und OUTPUT.
NEU: In der Routine zur Eingabe von neuen Spielern durch den GM (bei GM-Angebot und Eingabe neuer Teams) wird nun der neue Parameter GMA-SONDER abgefragt. Hat dieser den Wert 'J', dann wird nach jedem eingegebenen Spieler gefragt, ob es sich um einen normalen Spieler handelt. Falls nicht, muss der GM einige Werte des Spielers im Dialog eingeben: Trainingsgrenze und -aufwand, Einsätze in Feldreihen, deren Qualifikation der Spieler noch nicht besitzt, DP und Anzahl der Sperren. (Es wurde bewusst nicht alles erlaubt, damit der GM nicht zu leicht Spieler des Typs TA usw. erfinden kann, die nicht mehr korrekt verarbeitet werden könnten.)
GM_ANGEB: Bei der Kontrollausgabe des GM-Angebots auf den Bildschirm sowie bei der Ausgabe des neuen Angebotes und bei der Protokollierung der Versteigerung auf Datei werden alle eingebbaren Sondereigenschaften mit angezeigt. (Bei der Versteigerung selbst sieht der GM noch nix - das kommt als nächstes.)
PARAMETR: Wird ein unbekannter Parametername gefunden, dann gibt das Programm eine Warnung auf den Bildschirm aus.
diverse: Die ftf-flag-Ausgaben werden nun als Alarm-Meldungen vorgenommen. (VT52-Funktionen in high-level-code ausrotten, wo immer möglich!)

V1.20 (1990-08-28)

ALTERN: Die Alterungsfunktion wurde im Dialogverhalten den übrigen Funktionen des Menüs SAISON angepasst (siehe unten).
AUSWERT: Die einzelnen Menü-Punkte wurden durch Leerzeilen in thematisch zusammengehörige Gruppen gegliedert.
HILF, SAISON: Die Funktion "Tabelle POSTEINGANG", die normalerweise nur zu Saisonbeginn benötigt wird, wurde von HILF nach SAISON verlagert. (Das war gar nicht so einfach: Einerseits musste die nun in beiden Modulen verwendete Hilfsfunktion open_textFile extern deklariert werden - dabei wurde sie gleich nach FILES ausgelagert -, andererseits reichten die Menü-Ziffern nun in SAISON nicht mehr aus, folglich wurden die Menü-Einträge wie bei AUSWERT nun ebenfalls auf Buchstaben-Eingabe umgestellt und dabei ebenfalls durch Leerzeilen gruppiert.)
SAISON: Alle Funktionen dieses Menüs müssen nun mit der Beantwortung einer Rückfrage bestätigt werden. (Bisher war das nur bei einigen dieser Funktionen der Fall, u. a. nicht bei den besonders zeitaufwendigen...)
Die Funktion "Übernahme eines Vereins durch einen neuen Manager" ist nun nur noch im Menü HILF vorhanden.
SYS_VT52: Neues Modul; alle Ausgabefunktionen, die nur solche speziellen Bildschirmsteuerzeichen enthalten, wurden hierhin ausgelagert (aus OUTPUT). OUTPUT soll ein maschinenunabhängiges Modul werden.
TRAINING: Der komplette Trainings-Modul wurde überarbeitet. Das Training erfolgt nun nicht mehr über die Funktion heinzWahl, sondern über einen eigenen Dialog, bei dem man einzelne Spieler durch die Eingabe ihres Kennbuchstabens trainieren bzw. dieses Training genauso wieder rückgängig machen kann. Austrainierte Spieler haben keinen Kennbuchstaben; trainierte Spieler werden invertiert dargestellt. Trainingsaufwand und Maximalstufe werden angezeigt. Per Sondertaste (Escape) kann derjenige Spieler zum Training ausgewählt werden, dessen Training des Handelswert des Vereins (inklusive Trainings-WP) am meisten positiv beeinflussen würde.
Neuer Parameter TRAIN-SINGLE (Standardwert: N) ermöglicht es, einzelne Vereine zu trainieren (fiel als Nebenprodukt beim Testen mit ab). Ein GM kann damit z. B. einzelne Trainingszüge sofort eingeben; anschließend können auch wieder alle Vereine trainiert werden, denn das Training eines Vereins ohne WP wird übersprungen.
Neuer Parameter WP-WERT (Standardwert: 350) zur Bestimmung des Wertes eines WPs in kKj. Wird verwendet bei der Berechnung des Gesamt-Handelswerts eines Vereins in TEAMTAB und HILF sowie bei der Optimal-Trainingsfunktion.
TOS: Die Eingabefunktion bconin wurde hierher ausgelagert und in der Prozedur lies_taste eingeschalt; nur letztere ist noch nach außen sichtbar. Auch die Funktion leere_tastaturpuffer wurde nach TOS verlagert; INPUT ist damit jetzt ein (hoffentlich) maschinenunabhängiges Modul.
UTILITY: Neue Funktion anzahl_feldspieler, berechnet die Anzahl der einsatzfähigen Nicht-Torleute.
Fehler in darf_verkaufen behoben: Es wird nicht mehr mSAnzahl, sondern der Wert der neuen Funktion anzahl_feldspieler gegen 11 getestet. Ein Verein darf nun also den 10. Feldspieler nicht mehr verkaufen, wenn er mehrere Torleute besitzt (Lukas Kautzsch). In diesem Falle darf der Verein derzeit auch keinen Torwart verkaufen - soll das so bleiben?

V1.19 (1990-08-04)

Das Programm wächst: Zum Binden reichen 450 kByte freier Speicher schon nicht mehr aus! Also muss ich nun die RAM-Disk opfern...

Hinter jeder Änderung werde ich (MS) in Zukunft angeben, wer diese Änderung haben wollte bzw. wer einen offensichtlichen Fehler gemeldet hat. Fehlt die Angabe, dann war ich selbst derjenige, welcher.

AUFSTELL: Zwischen der Ausgabe der Netto-Stärke eines aufgestellten Spielers und seines Namens auf der rechten Bildschirmseite wurde eine zusätzliche Spalte eingeführt, die normalerweise durch ein Leerzeichen gefüllt wird. Spielt jedoch ein neues Talent der Stufe 0, oder ein beliebiger älterer Spieler in einer Reihe, deren Qualifikation er noch nicht besitzt, dann wird in dieser neuen Spalte angezeigt (invertiert), der wievielte Einsatz in der entsprechenden Reihe dies für diesen Spieler ist. Damit kann der Spielleiter eventuelle Angaben des Managers überprüfen und bei Abweichungen die entsprechende Anzahl in der Auswertung angeben.
Für uneingespielte Talente wird auch auf der linken Seite des Aufstellungs-Bildschirms die Anzahl der bereits absolvierten Einsätze hinter den normalen Spielerwerten (eingeschlossen in geschweifte Klammern) angezeigt.
AUSWERT: Tippfehler im Menü-Text korrigiert (Robert Gunst)
ERGEBNIS: Falls der Parameter TDD_KURZ eingeschaltet ist, wird die Ausgabe der Spieler auf der Bank unterdrückt (Robert Gunst, Peter Rau).
Die Ausgabe der Reihenwertungen wurde wieder in die alte, platzsparende Form (Härte in eckigen Klammern) geändert (Peter Rau).
FILES: Eine nicht existierende Datei wird nicht mehr gelöscht. (Irgendjemandem, der keine Glückswürfelei haben wollte, war das Programm am Saisonende beim Löschen der daher nicht vorhandenen Datenbasis abgestürzt.)
GM_ANGEB: Wird ein neu eingegebener Spieler bei der Bestätigung abgelehnt, dann wird er nun auch tatsächlich ignoriert, anstatt wie bisher zusätzlich zu den gewünschten Spielern im Aufgebot zu erscheinen (Lukas Kautzsch).
Die Anzahl der Spieler im GM-Angebot beträgt nun mindestens 1 (bisher 0). Bei 0 wäre zwar nichts Böses passiert, aber wer braucht schon ein leeres Angebot, wenn er auch komplett auf das Erfinden verzichten darf?
HANDEL: Überall wurde 'Händel' durch 'Handel' ersetzt (Andre Bronswijk).
Vor der Meldung "Gibt es jetzt private Handel?" wird eine Ausgabepositionierung vorgenommen (wegen der möglichen Warnung nach der letzten Handelsrunde).
Bei allen Fehlermeldungen, die bei einem der beiden Vereine auftreten können (zu wenig Geld, zu wenige / zu viele Spieler, zu viele Talente), wird nun der Verein-Kurzname in der Meldung mit ausgegeben (Lukas Kautzsch).
HILF: Bei der Auflistung der Spieler eines Vereins auf Textdatei wird nun auch ein F korrekt behandelt. Der Aufruf der veralteten Funktion writeQualifikationen wurde durch den Aufruf der Prozedur sp_werte ersetzt.
Menütext: Ausgabe "in eine Textdatei" statt "auf Textfile".
INIT: Vor dem zeitaufwendigen init_main wird eine entsprechende Meldung ausgegeben; nach dem Ende der Prozedur wird diese Meldung wieder gelöscht.
NEU: Ein neu eingegebenes X nT 1 wird nun immer als bereits eingespielt behandelt. Bisher wurde an dieser Stelle gefragt, ob der Spieler bereits eingespielt sei - im Widerspruch zum Handbuch (Andre Bronswijk).
Bei der Eingabe von Spielern eines neuen Vereins werden nun nur noch uneingespielte Talente als vom Verein selbst entdeckt gezählt. Bisher wurden hier alle eingegebenen Talente gezählt, was in der Folge zu fehlerhaften Werten in den Vereinsdaten führte (bis zu 6 'entdeckte' Talente). Eingegeben werden dürfen weiterhin bis zu 6 Talente, davon bis zu 3 nicht eingespielte (Gerhard Wahlig).
Beim Aufbau eines neuen Vereins wurde in der Kopfzeile bisher immer der Name des vorherigen Vereins (bzw. beim ersten Verein überhaupt kein Name) angezeigt. Der Fehler wurde behoben. (Lukas Kautzsch).
NICHT_LI: Bei Verkäufen an die NL wird nun der Wert des gerade verkauften Spielers und der aktuelle Kassenstand des verkaufenden Vereins (inklusive der aktuellen Einnahmen) angezeigt.
Vor der Meldung "Gibt es jetzt NL-Verkäufe?" wird eine Ausgabepositionierung vorgenommen (wegen der möglichen Warnung nach der letzten Handelsrunde). Der von Frank Altpeter angeblich erzeugte Programmabsturz konnte allerdings nicht reproduziert werden.
SAISON: Bei der Auflistung der Spieler im Saisoninfo im TDD-Modus wird nun auch eine eventuelle Handelssperre angezeigt. Trainingsobergrenze bei Talenten wird nun nur noch angegeben, wenn sie bei Stufe 0 ungleich 0 und sonst ungleich 10 ist (Robert Gunst).
Menütext: Ausgabe "in eine Textdatei" statt "auf Textfile".
SPIELE: Neuer Parameter POKAL_HV (Schalter, Standardwert JA) gibt an, ob bei Pokalspielen der erstgenannte Verein Heimvorteil (dann wie bei Ligaspielen derselben Runde) verwenden darf.
Zu Beginn einer Pokalrunde ist die Anzahl der WP einzugeben, die jedem Amateur-Team zur Verfügung steht. Wird diese Anzahl bei der Eingabe einer Amateur-Aufstellung überschritten, dann werden die eingesetzten WP in allen Reihen möglichst gleichmäßig reduziert, wobei Hintermannschaft in ganzen Stufen bleibt (dadurch kann im Extremfall maximal 1 WP zuviel gestrichen werden!) und die 3:1-Regel beachtet wird (es wird nur aus 'starken' Feldreihen gestrichen); der Algorithmus wird ggf. noch verbessert werden.
Bei Korrekturen aller Art an Amateur-Aufstellungen wird die veränderte Aufstellung vor der Bestätigung durch den Spielleiter auf dem Bildschirm angezeigt.
START: Beim Einrichten eines Ligasystems wird nun neben der Disziplinarmatrix und der Handelswerttabelle auch eine ggf. vorhandene Parameterdatei in den Ordner BASIS kopiert.
Wird versucht, ein 'zuvieltes' Ligasystem einzurichten, dann wird in der Fehlermeldung die maximale Anzahl der möglichen Ligasysteme mit ausgegeben.
TALENTE: Die Alarm-Meldung wurde aus der Funktion darf_entdecken ausgelagert und wird jetzt nur noch dann ausgegeben, wenn die Talente-Entdeckung für einen Verein aufgerufen wurde, der bereits vorher alle Talente entdeckt hatte (Lukas Kautzsch).

V1.18 (1990-05-06)

FILES: Die Pascal-Prozeduren reset und rewrite wurden durch die Prozeduren open_read und open_write eingeschalt.
open_read (datei) ruft zudem vorher existiert (datei) auf. Falls die gesuchte Datei nicht existiert, wird eine Meldung auf den Bildschirm ausgegeben (mit acknowledge - die Meldung ist also auch bei Programmstart vom Desktop aus immer lesbar!), welche Datei nicht gefunden wurde und dass das Programm nun abgebrochen wird. Zudem werden alle zu diesem Zeitpunkt geöffneten Dateien geschlossen, um Datenverluste zu vermeiden (mit der Pascal/ST-Standardprozedur halt).
Die Pascal-Prozedur erase, die ein vorheriges reset erforderte, wurde ebenfalls durch eine neue Prozedur namens delete_file eingeschalt.
In insgesamt 15 Modulen wurden alle Aufrufe von reset, rewrite und erase durch Aufrufe der neuen Prozeduren ersetzt.
Die Prozeduren existiert, copy_file und c_app_file wurden aus dem Modul TOS nach FILES verlagert.
TRANSFER: Das in Version 1.15 fehlerhafte Verhalten bei einem Sperrgebot wurde repariert. Zudem wird nun in der Auswertung eine entsprechende Anmerkung ausgegeben.

V1.17 (1990-03-28)

Allgemeine Verschönerungen des Quelltextes: Einheitliche Modulköpfe in allen Modulen

V1.16 (1990-03-21, Release-Version!)

diverse: Überall im Kopf "UNITED/ST, ...: ..."
WUERFELN: Fehler behoben: Ausgabe "n.E.", ohne dass es ein Elfmeterschießen gab.

V1.15 (1990-03-11)

GLUECK: Die (in der Phase 'Tabellen') berechneten Glückswürfeltabellen werden nun (da 'Rundenende' in diesem Moment bereits vorbei ist) mit einer um 1 erniedrigten actRunde berechnet. Nun stimmt der Umfang der Ausgabe.
GM-ANGEBOT: Die Angaben über den Handelswert eines zu versteigenden Spielers wurden sowohl bei der Erfindung als auch beim Verkauf des Spielers auf den Zeitpunkt seiner ersten Verwendung für den Käufer hochgerechnet.
Jeder einzelne Spieler muss mit <okay> bestätigt werden; das gesamte Angebot wird am Ende komplett vor der Bestätigung noch einmal angezeigt.
HILF: Menü-Punkt 8 "Spielplan ausgeben" ist nun wieder wirksam.
NEU: Fehler behoben: Ein Talent, das nachträglich abgelehnt wurde, wurde bei der Eingabe eines neuen Vereins dennoch als entdecktes Talent mitgezählt.
Der Name der Vereins-Datei wurde von 12 auf 8 Zeichen gekürzt. Es gingen auch 12 Zeichen, aber nicht 12 beliebige! Dann muss der Benutzer etwas über ATARI-Dateinamen wissen, und das will ich nicht. So kann nicht viel passieren.
Es wird derzeit übrigens noch nicht abgefragt, ob das zu erstellende Team bereits existiert - man könnte fröhlich ein Team überschreiben. Dasselbe gilt, wenn ein Team in eine andere Liga kopiert wird...
NICHTLI: Bei der Protokollierung werden nun die ersten 32 Zeichen einer zusammengesetzten Zeichenkette ausgegeben (bisher nur 30 Zeichen, daher fehlte bei maximal langem Teamnamen der Teil ': ').
SAISON: Layout-Korrektur: Beim Abstiegstraining wurde die Ausgabe der noch zur Verfügung stehenden Abstiegs-WP nach oben verschoben, da sie mit einer Meldungsausgabe kollidierten.
Neu-Ordnung des Ligasystems: Diverse Meldungen werden nun nicht mehr von acknowledge überschrieben.
Die Warnung bezöglich der Sicherung der GW-Datei wird nicht mehr ausgegeben, da diese Datei nun bereits beim Altern einer Liga gelöscht wird.
TEAMTAB: Bei den Summenwerten wurde der GHW von real auf long_integer geändert. Es gab nämlich einen real overflow, als ich aus Versehen das Ligasystem altern ließ, danach aber die alten Teams zurückholte und nun in Runde 1 sagenhafte Handelswerte - bis 50 MKj. pro Team - bekam!
TRANSFER: Auch beim Verkauf an die NL wird der Name des Spielers nun tabuliert ausgegeben.
UTILITY: Blöder 1.13-Fehler! Natürlich geht anzahl_torleute nicht, weil nur 8 Zeichen bei Prozedurnamen signifikant sind und anzahl_talente ebenfalls existiert (zufällig mit derselben Parameterliste, deshalb wurde der Fehler erst jetzt entdeckt). Die Funktion heißt jetzt anzahl_keeper.
Fehler in Funktion anzahl_spieler behoben: Bisher kam das Programm bei einem Verein, der zuerst einen alten A und danach ein A nT 0 besaß, nicht auf die Idee, den zuerst geprüften alten A rückwirkend ins Feld zu stellen. Daher durfte ein solcher Verein mit 12 Spielern keinen Spieler verkaufen. Jetzt geht's.

V1.14 (1990-0?-??)

ALTERN: Während des Alterns einer Liga wird nun auch die zugehörige Glückswürfel-Datenbasis automatisch gelöscht. Die Namen der alternden Vereine werden auf dem Bildschirm angezeigt.
Solche Kontroll-Ausgaben möchte ich in Zukunft bei allen lange dauernden Vorgängen einbauen - nicht jeder Benutzer hat eine Festplatte...
AUFSTELL: Die Ausgabe der ftf-Schutz-Ausgabe wurde außerhalb einer Schleife verschoben, sodass nun nicht nach Abbruch einer Aufstellung mit Escape in diese Schutz-Situation zurückgekehrt wird (als wäre nichts gewesen).
ERGEBNIS: Gemeldeter, aber nicht reproduzierbarer Fehler bei Verlängerung und Elfmeterschießen. Bisher wurden die entsprechenden Indikator-Variablen hinterhältig sowohl für die Möglichkeit als auch für Markierung der entsprechenden Vorgänge für die Ergebnisausgabe verwendet! Das konnte wohl auf Dauer nicht gutgehen... Es wurden also zwei neue Variablen erg_n_V und erg_n_E eingeführt; Ergebnisse wie "2:3 n.E. (2:3 n.V.) (0:0)" sollten nun nicht mehr auftreten. (Sind sie bei mir auch nie!)
Neuer Parameter STATISTIK (Standard-Wert: J). Von diesem (nicht wie bisher vom Parameter FTF) wird nun die Ausgabe der Chancen und Wahrscheinlichkeiten abhängig gemacht.
SPIELE: Ein zusätzliches Leerzeichen bei einer jaodernein-Frage ("Spieltag wirklich überspringen").
UTILITY: Neue Funktionen anzahl_torleute (verein), darf_kaufen (verein,spieler), kann_bezahlen (verein,spieler) (prüft auch gegen NL-Gebot!), darf_verkaufen (verein,index) sowie deren Aufrufe in diversen Modulen.
TALENTE: Neue Funktion darf_entdecken (mit Aufrufen).
OUTPUT: Neue Prozedur alarm (string), gibt eine (kurze) Meldung aus.
In (fast?) allen Modulen wird nun diese koordinaten-unabhängige Prozedur anstatt den diversen fehlerMeldung (x,y,string) aufgerufen, um das Bildschirm-Layout zu entflechten. Langfristig geplant ist eine Reservierung bestimmter Bildschirmbereiche für Meldungen, Fragen usw.
TEAMTAB: Die Frage "einzeln/zusammen" wird nur noch ausgegeben, falls überhaupt mehrere Ligen existieren.
TRANSFER: Programmänderung mit Regeländerungs-Charakter: Das Programm erlaubt nun auch Sperrgebote, die über die Liquidität eines Vereins hinausgehen! Der Besitzer eines Spielers darf nun also Sperrgebote in beliebiger Höhe abgeben.
Code Review: Interne Reorganisation bei allen Spielertransfers. Bisher waren praktisch alle Abfragen in NL, TRANSFER, HANDEL usw. getrennt implementiert (z. B. drei verschieden formulierte, aber semantisch identische Prozeduren zur Bestimmung der Anzahl der einsatzfähigen Torleute eines Teams).

V1.13 (1990-02-08)

ALTERN: Das präventive Löschen aller 5 Reihen in alt_staerke wurde entfernt. Es werden nun für T, A und sonstige separat alle Stärke-Werte korrigiert. 'Fehlerhafte' (im Sinne des Drei-Typen-Konzeptes) Spieler werden hierbei auf korrekte Spieler abgebildet. Diese Prozedur arbeitet nun mit den bisherigen Prozeduren is_torwart bzw. is_ausputzer zusammen - die Korrektur 1.121 ist hinfällig.
Nach dem Altern der Spieler wird nun die Runde nicht nur in der VDATEI, sondern auch in der Variablen actRunde auf 1 gesetzt (das fehlte bisher).
Nach dem Altern eines jeden Vereins wird nun eine Warnung ausgegeben, falls dieser Verein nun keinen Torwart mehr besitzt (und in Runde 1 der nächsten Saison folglich ein T nT 0 entdecken muss).
AUFSTELL: Neues Modul (ca. die erste Hälfte von SPIELE).
Die Trennung konnte sauber vorgenommen werden (nur drei externe Referenzen von SPIELE nach AUFSTELL). Damit ist nun kein Modul-Quelltext mehr größer als 41 kByte.
HILF: Neue Funktion "Kontostand eines Vereins verändern", z. B. zum Abbuchen von Strafen wegen Nicht-Einhalten des Zugformats.
RND_ENDE: Fehler behoben: Bisher wurde beim Rundenende die aktuelle Runden-Nummer um 1 erhöht abgespeichert, aber die globale Variable actRunde nicht geändert. Daher war die erhöhte Runde erst bei einem erneuten Programmstart gültig.
Design-Änderung: Vereine mit mehr erzielten Toren werden nun bei sonstigem Gleichstand in der Tabelle höher bewertet. In den OBERFOUL-Regeln steht's (noch) nicht drin - in den neuen AUFSTIEG-Regeln schon!
SAISON: Überflüssige Leerzeichen bei der Spielerauflistung für das Saison-Info entfernt. Im TDD-Modus werden nun zusätzlich auch DP und Sperren (falls ungleich 0) ausgegeben.
SPERRE: Neues Modul (aus SPIELE). Die Funktion "Sperren anzeigen" bewirkt nun wirklich das Vermutete; bisher klappte das nur, wenn zuvor die Sperren noch nicht berechnet wurden. In diesem Falle werden nun die (noch nicht erkannten) Sperren aus der laufenden Runde nicht berücksichtigt.
SPIELE: Fehler (?) behoben: Ein tT darf nun auch in einem Freundschaftsspiel nicht eingesetzt werden.
WÜRFELN: Es wurde die neue Komponente fTore im Typ aufstType eingeführt, um die Berechnung und Ausgabe des Spielergebnisses zu vereinfachen.
Die Auswertung der Torchancen wird nun exakt so vorgenommen wie in den Regeln beschrieben: Erst ein Würfelwurf gegen den Ausputzer, und nur im Erfolgsfalle ein weiterer Würfelwurf gegen den Torwart. (Nieder mit der Spätzle-Presse!)

V1.121 (1990-01-04)

UTILITY: In der Prozedur is_torwart wird ein spielberechtigter Torwart jetzt (wieder?) erkannt durch sEinsatz[t] >= c_fremdqual, also mindestens 6 Einsätze auf der Position T. Dies war nötig, um das Funktionieren der Prozedur alt_staerke im Modul ALTERN zu gewährleisten: Bisher wurden dort nach dem Setzen aller staerke[]-Werte auf verboten (= -1) Hintermannschaftsspieler nicht mehr erkannt und in Feldspieler 'umgewandelt'... Analog wurde die Prozedur is_ausputzer geändert.
Vermutlich ist diese Korrektur noch nicht der Weisheit letzter Schluss?

V1.12 (1989-12-30)

ALTERN: Unterscheidung zwischen tT und sonstigen Spielern wird in der Prozedur altHeinz durchgeführt. Damit wird nun der Handelswert auch bei tT richtig berechnet.
PARAMETR: Neuer Parameter FTF (Standardwert N) bewirkt (falls J), dass beim Training und bei der Mannschaftsaufstellung vor der Bildschirmausgabe eines Vereins auf einer Extraseite eine Warnung ausgegeben wird.
TRAINING: Einbau des Parameters FTF (s. o.).
SPIELE: Einbau des Parameters FTF (s. o.).
ERGEBNIS: Einbau des Parameters FTF (s. o.).
GLUECK: Fehlerhaftes Verhalten in Runde 1 beseitigt. Funktioniert vorläufig nur, wenn vor Runde 1 GW_TABLE.DAT von Hand gelöscht wird (in jeder Liga!).

V1.11 (1989-12-26)

ERGEBNIS: Neuer Parameter TDD-KURZ (Standardwert: N) bewirkt, dass bei TDD nicht mehr die Auflistung aller Spieler des Mannschaftskaders, sondern nur noch die in diesem Spiel gültigen Reihengesamtwertungen und die Summe der Gesamt-WP sowie die Anzahl der eingesetzten Härtepunkte veröffentlicht wird (siehe unten).
Bei der Lang-Form der TDD-Ausgabe wurde eingebaut, dass umgestellte Spieler durch die Angabe "-1" hinter der Stufe gekennzeichnet werden.
SAISON: Bei der Ausgabe des Saison-Infos wird der Parameter TDD-FLAG berücksichtigt. Für TDD-Partien werden die Spieler nicht alphabetisch sortiert, sondern in der Reihenfolge ihrer Reihenqualifikationen ausgegeben; außerdem werden ihre wichtigsten Werte aufgelistet (Reihen, Alter, Stufe, ungewöhnliche Trainingsgrenze, Einsätze von Talenten, Einsätze in fremden Reihen, ungewöhnlicher Trainingsaufwand).
Als 'gewöhnlich' wird eine Trainingsgrenze in folgenden Fällen angesehen:
  • X nT 0: bis 0
  • X nT >0: bis 10
  • sonstige Spieler: bis min (10, Stufe+3)
  • Spieler >10: austrainiert.
Nur davon abweichende Werte werden angegeben.
Diese Spielerliste eignet sich (nach der Entfernung saisoninfo-spezifischer Teile) zur Veröffentlichung in jeder TDD-Auswertung, vor allem in Verbindung mit dem neuen Parameter TDD-KURZ (siehe oben).
SPIELE: Bei Freundschaftsspielen sind nun auch Spieler einsetzbar, die für Pflichtspiele gesperrt sind (das war bisher nicht der Fall). Dies war erst seit der Einführung der globalen Variablen spielTyp (Version 1.097) realisierbar.
TEAMTAB: Die Spalte "nT" bezeichnet nun die Anzahl der Talent-Strukturen (bisher die Anzahl der Talente) des Vereins, wobei Torwart bzw. Ausputzer als 2 Strukturen bewertet werden. Nun werden dort auch tiefgekühlte Talente mitgezählt (das war bisher nicht so), nicht aber uneingespielte neue Talente (die bisher mitgezählt wurden).
WERT: Korrektur bei der Berechnung des Handelswerts. Für Spieler, die nach dem Altern sterben, war der NL-Wert nach dem Altern falsch berechnet worden. Die berechneten Handelswerte sollten nun wieder stimmen (sie waren mehrere Versionen lang zu hoch).
UNITED: Der Schmackofatz-Kopf wird nur noch ausgegeben, wenn dies nötig ist.
Zahlreiche initmain-Aufrufe (mit zeitaufwendigen Dateizugriffen) wurden in eine äußere Schleife verlegt.

V1.10 (1989-12-22)

Die lang ersehnte Glückswürfel-Dateiverwaltung wurde endlich eingebaut. Dabei wurden mehrere Module von den Änderungen betroffen:

Wahrscheinlichkeiten für S/U/N einzelner Spiele

SPIELE: Parallel zur Auswertungs-Datei wird nun eine weitere Datei geöffnet bzw. geschlossen, in die Wahrscheinlichkeiten für Sieg, Unentschieden und Niederlage geschrieben werden (unter Berücksichtigung der Wahrscheinlichkeiten mit beiderseitigem Härteeinsatz, vor der Auswertung der Roten Karten).
Achtung: Offenbar spinnt das Laufzeitsystem von Pascal/ST, wenn man zu viele Dateien gleichzeitig geöffnet hat - nach dem Umsortieren einiger Aufrufe ging es wieder!
ERGEBNIS: Die entsprechenden Werte werden abgespeichert (wenn die Wahrscheinlichkeiten auf den Bildschirm ausgegeben werden).

Erwartungswerte über eine gesamte Saison

SPIELE: Vor dem Lesen eines Spielplans wird eine Datei eingelesen, in der für alle Vereine ihre bisherigen Erwartungspunkte für alle Spieltage sowie die tatsächlich erreichten Punkte stehen. Am Ende eines Spieltags (wenn das Programm regulär unterbrochen werden darf) wird diese Datei zurückgeschrieben; bei jedem Spiel wird die interne Tabelle aktualisiert.
RND_ENDE: Bei der Berechnung der sonstigen Tabellen wird nun auch die Glückswürfeldatei ausgewertet und eine entsprechende Übersicht ausgegeben.

Einsatz der Glückswürfelverwaltung

Da die Verwaltung der Glückswürfeltabellen zahlreiche zusätzliche Dateizugriffe erfordert, was bei einem Betrieb von UNITED/ST auf Diskette einiges an Zeit kosten kann, wird die Nutzung dieser neuen Programmfähigkeit optional angeboten.

PARAMETR: Neuer Parameter: 'GW-SERVICE' (Schalter) bewirkt die Aktivierung aller Mechanismen zur Glückswürfel-Verwaltung. (Vorbelegung: 'N')

Neues Modul

GLUECK: Alle Verarbeitungs-Funktionen wurden in ein eigenes neues Modul ausgelagert. In jeder dieser Funktionen wird zuerst der entsprechende Programm-Parameter abgefragt; ist dieser nicht eingeschaltet, dann bewirkt der Aufruf der Prozedur nichts.

V1.097 (1989-12-21)

In allen Modulen wurden die folgenden Konstanten systematisch durch symbolische Werte ersetzt:

AUSWAHL: Der Aufstellungs-Dialog wurde überarbeitet.
Nun muss nach dem Aufstellen des 6. Spielers einer Feldreihe explizit mit <return> auf die nächste Reihe umgeschaltet werden.
Aufgestellte Spieler werden nicht mehr von der linken Seite des Bildschirms gelöscht, sondern ihre Namen werden dort invertiert dargestellt. (Die Spielerdaten sind in der entsprechenden Prozedur nicht verfügbar - es wäre eine erhebliche Änderung dafür nötig.)
Der bisher nötige zusätzliche Bildschirmaufbau am Ende des Dialoges sowie die Prozedur rechte_seite sind entfallen.
Auch gesperrte Spieler werden nun in der Aufstellung angezeigt; sie erhalten allerdings keinen Kennbuchstaben, sondern die Markierung "---" und werden wie bereits aufgestellte Spieler (aber inklusive ihrer Daten) invers dargestellt.
AUSWERT: Neue Funktion "Anzeigen von Sperren eines Vereins" (wurde gewünscht, um darauf bedingte Aktionen eines Vereins auswerten zu können, z. B. NL-Verkäufe, Gebote auf Spieler usw.). Es wird die bereits existierende Funktion aufgerufen, der Verein aber nicht abgespeichert.
ERGEBNIS: Die Ausgabe der Ergebnisse der je nach Härteeinsatz unterschiedlich vorgenommenen Chancenanalysen wird nur noch für diejenigen Fälle vorgenommen, die durch die Züge der Spieler und die Auswertung der Härtefolgen tatsächlich vorliegen. Auch die Berechnungsfunktionen werden nur noch in den tatsächlich benötigten Fällen aufgerufen.
Nach "Gelbe Karten: " wurde bei der Ausgabe ein Leerzeichen entfernt, sodass die anschließenden Spielernamen genauso weit eingerückt werden wie die Empfänger von Roten Karten.
GM_ANGEB: Bei der Versteigerung eines Spielers wird nun zuerst der Name des Spielers angefordert (falls der nicht ohnehin vom GM vorgegeben war -> Parameter!) und erst danach die endgültige Bestätigung des Verkaufs angefordert.
NICHT_LI: Die Liste der verkauften Spieler wird jetzt für alle Vereine gleich weit eingerückt. Die Meldungen bei Phasenende werden nun so ausgegeben, dass kein Scrolling mehr auf dem Bildschirm erfolgt.
PARAMETR: Neuer Parameter ANZAHL-RUNDEN (Standardwert: 11); nach Ablauf der entsprechenden Runde kann die Phase Liga-Spiele nicht mehr aufgerufen werden (bei einem versehentlichen Aufruf nach Saisonende gab es einen Programmabsturz, weil die Spielplandatei über ihr Ende hinaus gelesen wurde).
Neuer Parameter DRUCK-BREITE (Standardwert: 85) regelt die maximale Anzahl von Spalten für den Zeilenumbruch in den Auswertungs-Textdateien.
Neuer Parameter GMA-PRINT-GHW (Standardwert: N) gibt an, ob in der Auswertung für jeden vom GM-Angebot versteigerten Spieler der aktuelle (rundenspezifische) geschätzte Handelswert angegeben werden soll.
SAISON: Neuer Menüpunkt 'Liga-WP'. In dieser Phase können allen Vereinen des Ligasystems zusätzliche Trainings-WP zugeteilt werden. Alle Vereine einer Liga erhalten dabei jeweils dieselbe WP-Menge (zwischen 0 und 20 halben WP) zugeteilt. Die bearbeiteten Vereine werden auf dem Bildschirm aufgelistet. Wird der Wert 0 angegeben, dann wird die Liga (ohne Dateizugriffe) sofort übergangen.
SPIELE: Die Bestätigung einer Aufstellung erfolgt nun erst nach der Berechnung der Grund-Reihenwertung und damit insbesondere nach einer eventuellen Fehlermeldung wegen Verletzung der 3:1-Regel. Damit kann der GM die Aufstellung nun sofort ablehnen, ohne erst sinnlose Eingaben für Härte und Heimvorteil vornehmen zu müssen.
TEAMTAB: Talente werden nur noch dann als uneingespielt erkannt (bei WPT), wenn sie keine eingespielte Reihenqualifikation und eine Stufe < 2 besitzen (ein F nT 4 wird dort also nun korrekt verarbeitet).
TRANSFER: Die Liste der verkauften Spieler wird jetzt wie die Liste der verkauften Spieler des GM-Angebots eingerückt. Die bisherige Prozedur-Struktur (Deklarationen stark ineinander geschachtelt) wurde durch erweiterte Parameterlisten der Prozeduren aufgebrochen.
Eingespielte Talente werden nun mit der Anmerkung "trainierbar bis 10" versehen (bisher: "eingespielt").
TRAINING: Die neuen Stärkewerte eines gerade trainierten Spielers in allen Reihen werden nun immer aus der Stufe des Spielers und der Anzahl der Einsätze in der entsprechenden Reihe abgeleitet; bisher waren die aktuellen Reihenstärken um 1 erhöht worden. Durch die Änderung wird erreicht, dass ein (Sonder-)Spieler mit nicht regelkonformen Reihenstärken diese nach dem Training verliert.
Das geplante Redesign des Trainings-Dialoges (analog zum Aufstellungs-Dialog: bereits trainierte Spieler kennzeichnen) wurde vorerst zurückgestellt, da die Funktionalität der dort (und an diversen anderen Stellen!) aufgerufenen Prozedur heinzWahl nicht ausreicht und eine Änderung weitreichende Folgen hätte.
Bei der Anzeige der bereits trainierten Spieler wird nun auch deren neu erreichte Stufe ausgegeben.
UNITED: Das Einrichten eines Ligasystems wurde auf die Ebene der Wahl eines Ligasystems verschoben.
UTILITY: Ein ziemlich alter Fehler in der Routine anzahl_spieler (welche die Anzahl der gleichzeitig aufstellbaren Spieler bestimmt) wurde behoben. Bisher wurde dort auch bei mehreren Ausputzern im Mannschaftskader keiner davon als spielberechtigter Feldspieler berücksichtigt; dadurch durfte ein Verein mit einem Torwart, 2 Ausputzern und 9 Feldspielern keinen Feldspieler verkaufen (einen A dagegen schon).
WERT: Die beiden Funktionen zur Bestimmung des NL-Wertes und des Handelswertes von Spielern wurden in ein eigenes Modul ausgelagert. (Das ist nun das 27. Modul von UNITED/ST!)
Das Programm stürzt nun nicht mehr ab, wenn ein Spieler mit einer ungültigen Stufe auftritt; Stufen < min_Stufe (= 0) werden auf min_stufe, Stufen < max_stufe werden auf max_stufe (= 13) abgebildet.
Verschiedene: Diverse Prozeduren wurden dahingehend erweitert, dass bei der Eingabe einer Reihenqualifikation eines Spielers nun zusätzlich auch der Buchstabe 'F' für 'Feldspieler ohne V/M/S-Qualifikation' zulässig ist. Genau wie 'T' kann 'F' nur als einziger Buchstabe angegeben werden. In einigen Prozeduren, die diese Eingabe weiterverarbeiten, wurde eine Sonderbehandlung für 'F'-Spieler eingebaut (z. B. ist die Konvertierungs-Funktion CharR für 'F' undefiniert, da der Typ Reihe nach wie vor nur die Elemente t, a, v, m und s enthält). Auch einige Ausgabeprozeduren wurden für die Verarbeitung von 'F'-Spielern angepasst.
Diverse Module: Alle Meldungen über das Verstreichen der letzten Handelsrunde werden nun von einer acknowledge-Aufforderung begleitet.

V1.09 (1989-11-09)

UDEC: Die maximale Anzahl der Vereine pro Liga ist nun 14 (bisher 12).
UTILITY: Zwei neue Funktionen is_torwart und is_ausputzer wurden eingebaut, um die Abhängigkeit der Programmlogik von der konkreten Interpretation der Datenstrukturen zu entkoppeln und konsistente Änderungen zu erleichtern.
SPIELE: Der Fehler aus Version 1.08 beim Einspielen neuer Qualifikationen wurde behoben.
Der neue Parameter A-KANN-V bewirkt, dass ein Ausputzer ohne Stärkeverlust in V eingesetzt werden kann (Standardwert: N). Die korrigierte Stärke wird nur in die Aufstellung eingetragen; in der Mannschafts-Datei stehen (um die Verwaltung von Ausputzern einheitlich zu regeln) weiterhin die UNITED/ST-typischen Werte (also die reduzierte Stärke in V).
Alle Komponenten von aType wurden von s??? in a??? umbenannt, um die Unterscheidung von Komponenten des Typs player zu erleichtern.
Das Flag pokal wurde überall durch den Parameter spielTyp ersetzt, der nun zwischen Ligaspielen, Pokalspielen und Freundschaftsspielen unterscheidet.
Freundschaftsspiele sind ohne jeden Einfluss auf die Daten der beteiligten Vereine; gesperrte Spieler können jedoch nicht eingesetzt werden (sitzen dabei aber auch keine Sperre ab).
Die Frage, ob ein Liga-Spieltag übersprungen werden soll, wird nun wie alle anderen Fragen über die Prozedur jaodernein abgewickelt.
Der neue Parameter POKAL-FREMD regelt, ob Einsätze in Pokalspielen beim Erwerb von neuen Reihenqualifikationen berücksichtigt werden. (Standardwert: JA).
HANDEL: Neuer Parameter HANDEL-OFFEN bewirkt, dass bei der Durchführung eines privaten Handels alle Spielerdaten veröffentlicht werden. Die entsprechenden Daten werden durch eine neue Prozedur sp_werte an den Namen der Ware angefügt.
HILF: Bei der Ausgabe der kompletten Spielerdaten auf Textfile wird für ein aufgetautes X tT 0 nun nicht mehr die (maximale) Anzahl der Einsätze, sondern der Vermerk "(eingespielt)" ausgegeben.
GM_ANGEB: Neuer Parameter GMA-NAME-VOM-GM bewirkt, dass Namen von Spielern des GM-Angebotes nur noch wahlweise beim Erfinden bzw. Versteigern des Spielers eingegeben werden (bisher musste der Name beide Male eingegeben werden). Das Dialog-Layout wurde geringfügig geändert.
ALTERN: Die aktuelle Runde des Ligasystems wird nun bereits beim Altern der Vereine auf 1 zurückgesetzt. Damit können schon zu diesem Zeitpunkt aussagefähige Hochrechnungen erstellt werden.
AUSWERT: Die drei unterschiedlichen Typen von Spielen (Liga, Pokal, Freundschaft) können nun durch getrennte Menü-Einträge im Haupt-Menü ausgewählt werden.
Die automatische Berechnung der Sperren wird sowohl am Ende der Liga- wie der Pokalspiele angeboten, um eine beliebige Reihenfolge dieser beiden Spiele-Arten zu ermöglichen.
diverse: Bisher wurde im Dialog zuerst die gewünschte Aktion, dann das zugehörige Ligasystem (falls mehr als eines existierte) eingegeben. Nun wurde die Dialogstruktur geändert: Die Eingabe des Ligasystems erfolgt zuerst und nur ein einziges Mal; falls kein Ligasystem existiert, wird automatisch die Erzeugung eines Ligasystems aufgerufen (bisher wurde das Programm abgebrochen!).
Neben lsys_wahl wird auch initMain nun nur noch ein einziges Mal aufgerufen.

V1.08 (1989-09-09)

Anpassung an Pascal/ST 2.07: Der Compiler erzeugt nun anscheinend externe Symbole auch für Prozeduren, die nur lokal definiert sind. Daher müssen nun alle Prozeduren programmweit einheitliche Namen besitzen. Einige Namen wurden in diesem Sinne angepasst.

ALTERN: Die Prozeduren zum Altern von Spielern wurden in ein eigenes Modul ausgelagert. Die duplizierten Prozeduren zum Schein-Altern für den Handelswert wurden eliminiert (jetzt wird die normale Alterungs-Prozedur aufgerufen).
PARAMETR: Beim Einlesen der Parameter werden nun entsprechende Meldungen ausgegeben.
Fehler behoben: Die DP für Gelbe / Rote Karten bei Spielern waren vertauscht.
WÜRFELN: Die duplizierten Prozeduren zur Berechnung und Auswertung von Chancen wurden durch Parametrisierung eliminiert.
ERGEBNIS: Die Anzahl der Einsätze von nicht eingespielten Talente, die auf der Bank sitzen, wurde korrigiert (Parameter für tdd_print_heinz).

V1.07 (1989-0?-??)

ERGEBNIS: Die zusätzlichen Routinen von TDDERGEB wurden geringfügig überarbeitet, kommentiert, neu eingerückt, anders benannt (tdd_...) und in ERGEBNIS eingefügt.
Die oberste Routine tdd_print wird in Abhängigkeit von dem neuen Parameter tdd_switch aufgerufen. Damit entfallen die Dateien TDD.PAS, TDDERG.PAS und TDD.OLF ersatzlos.
Bei der Ausgabe der Aufstellungen wird nun zusätzlich die Anzahl der insgesamt aufgestellten WP pro Team ausgegeben (eingeschlossen in eckige Klammern).
PARAMETER: Neue Parameter: TDD (Schalter zwischen The Dirty Dozen und normalem United) und HANDELSSPERRE (in Runden)
Das Lesen von Parameter-Schaltern wurde formalisiert.
Die Eingabe von Parametern und deren Werten wurde luxuriöser gestaltet; nun kann an jeder Stelle zwischen Zeilenanfang, Parameterwort, Trennzeichen und Parameterwert eine beliebige Anzahl von Leerzeichen folgen. Eine entsprechende Beschreibung wurde in eine Demo-Parameter-Datei eingearbeitet; dort sind auch die Standardwerte aller Parameter verzeichnet.

V1.06 (1989-06-03)

SAISON: Alter-X-Spieler sterben nun endgültig beim Altern.
PARAMETER: (neu) Es wurde die Grundlage für die seit langem gewünschte Parametrisierbarkeit des Ligasystems geschaffen. Das Programm erwartet im Ordner BASIS eine Datei mit dem Namen PARAMETR.DAT, in der eine Vielzahl von Parametern eingestellt werden können. Bisher sind folgende Parameter realisiert:
  • Sorte der Würfel gegen Torwart/Ausputzer und bei Elfmeter
  • Anzahl der DP für eine Gelbe / Rote Karte
  • Anzahl der WP pro Runde
  • Anzahl der WP bei einem Sieg in einem Liga- bzw. Pokalspiel
  • Einnahmen pro Runde
  • Einnahmen bei einem Sieg in einem Liga- bzw. Pokalspiel
Weitere Parameter werden folgen. Die bisherigen Parameter werden nicht für zukünftige Versionen garantiert, sondern sollen als Beispiele für die Implementierbarkeit von Parametern fungieren.
Falls die Parameter-Datei nicht vorliegt (das wird vom Programm überprüft), werden für alle Parameter die Standardwerte verwendet.

V1.05 (1989-06-03)

Ab dieser Version bin ich (MS) bis auf weiteres der Verwalter des Programm-Quelltextes.

Für den Benutzer sind in dieser neuen Version keine Änderungen sichtbar. Die interne Struktur des Programms wurde jedoch erheblich geändert.

Das Monster-Modul IO wurde in die folgenden Klein-Module aufgeteilt:

Zu jedem dieser Module existiert eine gleichnamige Datei *.INC, welche die entsprechenden Deklarationen der externen Prozeduren enthält.

In allen Großmodulen wurden jeweils nur die benötigten Referenzen auf andere Module angegeben.

Statt der Angabe expliziter Compiler-Optionen in allen Programmdateien wurde eine Datei COMP_OPT.INC eingerichtet, die in alle Module (außer den Hauptprogrammen UNITED.TOS und TDD.TOS) eingefügt wird. Dadurch kann der Umfang der gewünschten Compiler-Optionen (z. B. Code zum Programmtest) an globaler Stelle beeinflusst werden. Allerdings sollten dann auch alle Module neu übersetzt werden, da unterschiedliche Compiler-Optionen (z. B. DEBUG) laut Pascal-Handbuch zu überraschendem Verhalten des Programms führen sollen...

Die Übersetzung des Programms erfolgt nun nicht mehr abhängig von den fest eincodierten Pfadnamen aller Include-Dateien. Stattdessen ist innerhalb des PASCAL-Ordners (d. h. dort, wo die Datei MANAGER.PRG steht) ein Ordner mit dem Namen UNITED anzulegen, in dem sich alle Quellprogrammdateien befinden müssen. Dadurch wurde die Verarbeitung des Programms weitgehend unabhängig vom Besitz einer Festplatte (der Ordner UNITED enthält während der Entwicklung allerdings ca. 1.2 MB an Dateien!) und von konkreten Ordnerstrukturen gestaltet.

Die für die Version 1.04 erheblich erweiterte Ausgabe von Erwartungswerten bei Spielen wurde auch in TDDERGEB kopiert.

V1.04 (1989-05-24, Release-Version!)

WUERFELN: Bei der Ermittlung der Siegwahrscheinlichkeiten und Erwartungsergebnisse wird die Gefahr von Elfmetern nun berücksichtigt.
Außerdem werden obige Werte zusätzlich auch vor der Vergabe von Roten Karten für imaginäre Aufstellungen ohne Härte ermittelt (dabei wird die Härte einfach von den Gesamtreihenwertungen abgezogen, was in Einzelfällen wegen der 3:1-Regel nicht ganz korrekt ist).
Nach wie vor wird die Gefahr von Roten Karten bei den stochastischen Berechnungen ignoriert.
ERGEBNIS: Die Siegwahrscheinlichkeiten und Erwartungsergebnisse werden für alle oben genannten Fälle angezeigt, zusätzlich jeweils die Feldtorchancen jeder Mannschaft.
UDEC: Einführung von erwArray, Änderung von erwType und erwartung (zwecks Realisierung obiger Änderungen).
IO: Einführung von initErwType in initMain (dito).
IO: initNoPlayer ist nun als external überall bekannt.
START: initNoPlayer wird zu Beginn aufgerufen. Dadurch wird beim Start eines Ligasystems jeder Spieler korrekt initialisiert (war bisher nicht so...).
SPIEL: An einer Stelle wird nun "Härte:" statt "Haerte:" angezeigt.

V1.031 (1989-01-19)

HILF: Menüpunkt "7) Spielpaarungen": Der komplette Spielplan der Saison wird im Klartext auf \TEXT\PAARUNG.TXT ausgegeben.
IO: Die Prozedur intlength ist jetzt überall extern bekannt.

V1.03 (1988-11-22)

IO: Das Programm versteht jetzt auch Spieler ohne Reihenqualifikation (jedenfalls beim Sortieren der Mannschaft nach Reihen...).
SAISON: Tiefgekühlte Talente werden jetzt korrekt aufgetaut, d. h. ihre Stärke in Fremdreihen wird korrekt berechnet.
Bei der Neuordnung des Ligasystems wird jetzt berücksichtigt, dass das Betriebssystem bei Dateinamen Groß- und Kleinbuchstaben nicht unterscheidet; es sollte also nicht mehr vorkommen, dass Vereinsdateien verschwinden.
Beim Absteigertraining werden jetzt auch Eingaben von bis zu 5 Stufen (bisher 3) für einen Spieler (nT) akzeptiert.
TRANS: Wenn ein Verein mehrere Torwarte, aber nur 10 sonstige Spieler hat, kann er jetzt einen Torwart auf die Transferliste setzen.

V1.02 (1988-06-15)

HANDEL: Beim Verhältnis der Werte wird Division durch 0 abgefangen, Ausgabe dann "x:0" bzw. "0:x".
WUERFELN: Man kann nun auch Elfmeter zugesprochen bekommen, wenn man selbst keine Karten bekommen hat...
Die endgültige Summe jeder Reihe ist immer positiv (das war bei 3:1-Reduzierung und Härtestrafen bisher nicht unbedingt der Fall...).
IO: NL-Wert und Handelswert sind nicht mehr von sTraining abhängig, sondern nur noch von sEinsatz[t]/[a].
Die Variable handelssperre wird erst nach der letzten Handelsrunde true - d. h. in der letzten Handelsrunde kommen nicht mehr die verfrühten Warnungen...
Nach Runde 11 wird in initVTable der Heimvorteil und Spielplan auf die Werte aus Runde 11 gesetzt - bisher stürzte an dieser Stelle das Programm ab!
anz_qualifikationen von einem AV ist jetzt richtig 2.
RND_ENDE: Zusätzliche Frage: "Wirklich alle Aktionen beendet?"
TRANSF_L: Bei neu angebotenen Talenten mit einem Einsatz wird nun "(1 Spiel)" statt "(1 Spiele)" ausgegeben.
NL: Der rechte Rand der Druckausgabe wird durch die Konstante maxfpos geregelt (bisher hart '77' im Programmtext).

V1.01 (1988-0?-??)

IO: anzQualifikationen ist nur noch von sEinsatz abhängig (bisher war der NL-Wert von T/A tT x verkehrt, da nur 0.9-fach).
Bei showHeinz wird bei nT 0 mit einem Spiel tatsächlich "1 Spiel" ausgegeben (es war ein Fehler in der Abfrage: statt max_einsatz = 1 muss es natürlich max_einsatz = 7 heißen...)
Bei der Gelegenheit habe ich bei "Eingabe eines Spielers" gleich die unzähligen identischen Prozedurköpfe (kopiert...) korrigiert.

V1.00 (1988-04-06)

Portierung von Apple II+ nach ATARI ST