APPLICATIONSPROGRAMMATION ★ VARDUMP für 464 ★

Vardump (CPC Amstrad International)Applications Programmation
★ Ce texte vous est présenté dans sa version originale ★ 
 ★ This text is presented to you in its original version ★ 
 ★ Este texto se presenta en su versión original ★ 
 ★ Dieser Text wird in seiner Originalfassung präsentiert ★ 

Haben Sie auch schon einmal fremde Programme erweitert oder für Ihre speziellen Anwendungen optimiert und danach festgestellt, daß "nichts mehr läuft"? Das Programm "Vardump" ist in diesen Fällen ein leistungsfähiges Hilfsmittel. Es ermittelt alle in einem Basicprogramm enthaltenen Variablen und gibt sie tabellarisch, zusammen mit den Programmzeilennummern, in denen sie benutzt werden, wahlweise auf einem Drucker oder auf dem Bildschirm aus.

Auch bei der Fehlersuche in selbstgeschriebenen Basicprogrammen werden Sie Vardump bald nicht mehr missen wollen, denn z.B. einen Schreibfehler in einem Variablennamen kann der Basic-Interpreter grundsätzlich nicht erkennen. Auch falsch geschriebene Basic-Kommandos interpretiert der CPC meist als Variable und bringt dann keine Fehlermeldung. Mit Vardump erkennen Sie solche Fehler sofort.

Außerdem liefert Ihnen Vardump eine wertvolle Ergänzung für Ihre Programmdokumentation. Kenner der Schneider-Programmszenc werden jetzt sagen: "So etwas Ähnliches gibt es doch schon". Das stimmt zwar, aber die bereits veröffentlichten Programme leisten wirklich nur Ähnliches. Diese Programme laufen entweder wesentlich langsamer ab, als das hier vorgestellte Programm, oder sie verarbeiten die Typdeklarationsbe-fehle nicht, was natürlich zu völlig unbefriedigenden Ergebnissen führt. Auch hinsichtlich der Ausgabemöglichkeiten ist das vorliegende Programm komfortabler und flexibler.

Um mit Vardump zu arbeiten, müssen Sie es zunächst mittels MERGE "VARDUMP" zu dem zu untersuchenden Programm laden, und dann mit RUN 60000 starten. Vardump erstellt zuerst die Bildschirmmaske und definiert fünf Windows. Danach werden Sie von Vardump nach dem zu bearbeitenden Programmzeilenbereich gefragt. Sie können die Fragen "von Programmzeile?" und "bis Programmzeile?" auch mit ENTER quittieren. Dann bearbeitet Vardump das Programm ab der ersten Programmzeile und stoppt, wenn es auf Zeile 60000 (erste Zeile von Vardump) stößt. Sie können aber auch beliebige Zeilennummern eingeben, auch solche größer 60000, so daß Sie auch eigene Programme in Zeilennummernbereiche um 60000 untersuchen können, nachdem Sie vorher Vardump mittels RENUM in einen anderen Zeilennummernbereich transformiert haben. Danach bestimmt Vardump die Zahl zz der zu untersuchenden Programmzeilen und dimensioniert dann entsprechend dieser Zahl ein Variablennamenarray var-nam$(varz), ein zweidimensionales Zeilennummernarray znr(varz,x), wobei x von der Zahl zz abhängt, und ein Hilfsarray refl(varz) für maximal 70 Variable (varz=70) in Zeile 60280.

Nach Ausgabe von Programmzeilenzahl und Programmlänge in Bytes beginnt Vardump in Zeile 60350 Ihr Basicprogramm zeilenweise nach Variablennamen zu durchsuchen.

Das Unterprogramm ab Zeile 60970 ermittelt Zeilennummer (znr) und Programmzeilenlänge (zlaenge) der aktuell untersuchten Zeile.

Diese Zeile wird dann im Unterprogramm "Programmzeile bearbeiten" (ab Zeile 60590) nach Token für Variable durchsucht. Dies sind &02, &03 und &04 für Variable mit

den Typkennzeichen %, S und !, also Integer-, String- und Realvariable, sowie &0B, &0C und &0D für Integer-, String- und Realvariable ohne Typkennzeichen. Kommentartexte (token=&C0 bzw. &C5) überspringt Vardump. Dadurch steigert es seine Arbeitsgeschwindigkeit bei reichlich kommentierten Programmen erheblich.

Um eine eindeutige Typzuweisung bei Variablen ohne Typkennzeichen vornehmen zu können, durchsucht Vardump den Programmcode auch nach Token für DEFINT-, DEFSTR- und DEFREAL-Befehle(Token=&8E bzw. &8F bzw. &90) und merkt sich die Typzuweisungen, indem es in der Variable vartypS für jeden der 26 Buchstaben des Alphabets die entsprechenden Typkennzeichen speichert. Dies ist erforderlich, weil der Basic-Interpreter des CPC bei der Programmzeileneingabe zunächst alle Variablen ohne Typkennzeichen als REAL-Variable ansieht. Erst beim erstmaligen Programmdurchlauf wandelt der Interpreter die Token der Variablen endgültig, entsprechend der Typzuweisungen, in den DEFINT-, DEFSTR- und DEF-REAL-Instruktionen um.

Hier sei noch angemerkt, daß sich dadurch die Möglichkeit bietet, in einem Programm solche Passagen herauszufinden, die beim Programmablauf nie durchlaufen werden. Meist handelt es sich in diesem Fall um überflüssige Abfragen oder es liegt ein logischer Fehler im Programmaufbau vor.

Vardump hat immer dann einen Variablennamen gefunden, wenn es auf ein Token für ein Typkennzeichen stößt. Es merkt sich den Variablentyp und springt zum Unterprogramm "Variablennamen dekodieren" ab Zeile 61030. Um dessen Arbeitsweise zu verstehen, muß man die Interpretercodierung für Variable kennen. Das erste Byte einer Variablen im Programm legt deren Typ fest: Danach folgen zwei Bytes, die eine relative 16-Bit-Adresse des Speicherplatzes der Variablen im RAM, bezogen auf den Start des Variablenspeichers darstellen. Diese Bytes sind für Vardump ohne Bedeutung und werden übersprungen.

Anschließend folgen die ASCII-Codes für die Buchstaben des Variablennamens mit der Besonderheit, daß dem ASCII-Code des letzten Buchstabens der Wert 128 hinzuaddiert ist. An diesem Merkmal erkennt Vardump das Ende des Variablennamens. Jede gefundene Variable wird von Vardump anschließend im Unterprogramm "Variable identifizieren" (ab Zeile 61280) mit den bereits gefundenen Variablen verglichen. Wenn der Variablenname zum ersten Mal auftritt, wird er im Array varnam$(n) gespeichert. Vorher wird er aber auf maximal 12 Buchstaben begrenzt. Wenn er länger war, wird dies durch ein angehängtes "*" kenntlich gemacht. Jeder neue Variablenname und die Anzahl der im Array varnam$(n) gespeicherten Variablennamen werden laufend auf dem Bildschirm ausgegeben.

Danach wird die Zeilennummer, in der die Variable gefunden wurde, in dem Array znr(n,x) gespeichert, wenn sie in derselben Programmzeile nicht schon einmal gefunden wurde. Um Speicherplatz zu sparen, ist dieses Array vom Integertyp. Da die Zeilennummern auch außerhalb des durch Integerzahlen darstellbaren Zahlenbereichs liegen können, wird vorher die Zahl 32768 subtrahiert. Diese Zahl wird später bei der Ausgabe wieder hinzuaddiert. Wenn eine Variable in mehr als x Zeilen vorkommt, wäre das Zeilennummernarray znr(varz,x) zu klein dimensioniert, und der Programmablauf würde durch eine Fehlermeldung unterbrochen. Dies vermeidet Vardump, indem es bei vollem Zeilennummernspeicher alle weiteren Zeilennummern ignoriert. Um dies anzuzeigen, wird die letzte speicherbare Zeilennummer gleich der ersten Zeilennummer von Vardump gesetzt. Auf diese Weise durchsucht Vardump das Basicprogramm und bricht erst ab. wenn der bei Programmstart eingegebene Zeilennummernbereich abgearbeitet ist, oder wenn die letzte Basiczeile bearbeitet wurde. Die aktuell bearbeitete Programmzeile wird laufend auf dem Bildschirm ausgegeben. Außerdem zeigt eine eingebaute Stoppuhr die seit dem Programmstart verstrichene Zeit. Bevor das Ausgabemcnuc angeboten wird, werden die Variablennamen alphabetisch sortiert. Um Rechenzeit zu sparen, wird das Zeilennummernarray nicht mitsortiert, sondern lediglich das Hilfsarray refl(n). das nach dem Sortiervorgang anzeigt in welcher Zeile des Zeilennummern-arrays die Zeilennummern, in denen der in varnamS(n) gespeicherte Variablenname vorkommt, zu finden sind. Das Ausgabemenue enthält die Menuepunkte "Druckerausgabe", "Bildschirmausgabe", "Start" und "Ende". Bei "Start" fragt das Programm wieder nach dem zu untersuchenden Zeilennummernbereich und beginnt erneut mit der Variablensuche. Mit "Ende" kann das Programm beendet werden.

Nach zweimaligem Drücken der ESC-Taste verzweigt das Programm immer zum Ausgabemenue.

Token Variablentyp

  • &02 Integervariable mit Typkennzeichen "%"
  • &03 Stringvariable mit Typkennzeichen "$"
  • &04 Realvariable mit Typkennzeichen "!"
  • &0B Integcrvariable ohne Typkennzcichen
  • &0C Stringvariable ohne Typkennzeichen
  • &0D Realvariable ohne Typkennzeichen
Variablenübersicht:
  • ber Flag
  • breakflag Flag
  • drksp Spaltenzahl bei Ausgabe
  • drkz Zeilenzahl bei Bildschirmausgabe
  • erstzeil! 1. Zeilennummer von Vardump
  • first! 1. Zeilennummer des zu untersuchenden Programmabschnitts
  • gnr Ausgabegerätenummer
  • last! letzte Zeilennummer des zu untersuchenden Programmabschnitts
  • firstadr! RAM-Adresse der Programmzeile first!
  • nmax Zahl der Variablennamen
  • ram! Laufvariable der aktuellen RAM-Adresse
  • refl(n) Referenzliste für Zeilennummern nach
  • dem Sortiervorgang
  • s$ Eingabestring
  • token Basic-Token
  • i,n,nl Laufvariable
  • min Minute
  • sek Sekunde
  • varz maximale Variablenzahl
  • typ$ Variablentyp
  • var$ gefundene Variable
  • vartyp$ enthält Variablentyp als Ergebnis von DEFINT-, DEFSTR- und DEFREAL-Befehlen
  • varnam$(n) Variablennamenarray
  • vznr vorangegangene Zeilennummer
  • znr aktuelle Zeilennummer
  • znr(inj) Zeilennummernarray
  • zlaenge Zeilenlänge
  • zanf! Zeiger auf den Anfang der aktuellen Basiczeile im RAM
  • zwspl,zwsp2 Zwischenspeicher
  • zz Zeilenanzahl des Programmbereichs

TM, CPCAI 8609

★ PUBLISHER: CPC Amstrad International
★ YEAR: 1986
★ CONFIG: 64K + AMSDOS
★ LANGUAGE:
★ LiCENCE: LISTING
★ COLLECTION: CPC AMSTRAD INTERNATIONAL 1986
★ AUTHOR: Reiner Nitsch
 

★ AMSTRAD CPC ★ DOWNLOAD ★

Type-in/Listing:
» Variablen-Dump    (CPC  Amstrad  International)    GERMANDATE: 2012-12-27
DL: 254
TYPE: ZIP
SiZE: 7Ko
NOTE: 40 Cyls
.HFE: Χ

★ AMSTRAD CPC ★ A voir aussi sur CPCrulez , les sujets suivants pourront vous intéresser...

Lien(s):
» Applications » Ams-Forth/Amsforth
» Applications » Neue RSX Left, Right, Down, Up, Overlap , Border , Cls (Markus Adamski/Schneider Aktiv)
» Applications » CPC-Macro
» Applications » Fenster, Formen, Farben (Happy Computer)
» Applications » Variable Height
» Applications » Turbo Pascal v3
Je participe au site:
» Vous avez des infos personnel, des fichiers que nous ne possédons pas concernent ce programme ?
» Vous avez remarqué une erreur dans ce texte ?
» Aidez-nous à améliorer cette page : en nous contactant via le forum ou par email.

CPCrulez[Content Management System] v8.7-desktop
Page créée en 076 millisecondes et consultée 1556 fois

L'Amstrad CPC est une machine 8 bits à base d'un Z80 à 4MHz. Le premier de la gamme fut le CPC 464 en 1984, équipé d'un lecteur de cassettes intégré il se plaçait en concurrent  du Commodore C64 beaucoup plus compliqué à utiliser et plus cher. Ce fut un réel succès et sorti cette même années le CPC 664 équipé d'un lecteur de disquettes trois pouces intégré. Sa vie fut de courte durée puisqu'en 1985 il fut remplacé par le CPC 6128 qui était plus compact, plus soigné et surtout qui avait 128Ko de RAM au lieu de 64Ko.