★ APPLICATIONS ★ DIVERS ★ Druckerausgabe umgeleitet ★ |
RSX Select (Schneider Aktiv) | Applications Divers |
Für jeden Basic-Programmierer ist es eine vertraute Situation: Man hat ein Programm geschrieben und möchte bei einem Probelauf sämtliche Bildschirmausgaben auf den Drucker bringen - oder umgekehrt: man schreibt ein Programm mit Druckerausgabe und möchte während der Entwicklungsphase zur Papier-und Zeitersparnis alle Ausgaben vorerst auf dem Bildschirm haben. Was kann man da tun? Etwa alle PRINT.#8-Befehle in normale PRINTs ändern? Bei längeren Programmen verursacht das so viel Arbeit, daß man meistens darauf verzichtet. Auch ein WINDOW SWAP 0,8 funktioniert nicht, da mit diesem Befehl nur die Bildschirmfenster 0 bis 7 angesprochen werden können, nicht aber der Drucker (#8) oder der Cassettenrecorder (#9). Das weiter unten abgedruckte Programm ist die Rettung, denn es erweitert das Schneider-Basic um vier neue RSX-Befehle, mit denen die Ausgabegeräte geändert werden können. Dazu wird dem Bildschirm die Kurzbeschreibung SC für SCREEN zugeordnet, dem Drucker PR wie PRINTER. Die RSX-Befehle beginnen wie üblich mit einem senkrechten Strich, nämlich dem geshifteten Klammeraffen. Darauf folgt der Name "SELECT" und ein Punkt, als nächstes das Ausgabegerät, von dem die Ausgabe weggelenkt werden soll, wieder ein Punkt, und dann das neue Zielgerät. Was sich jetzt recht kompliziert anhört, ist in Wirklichkeit völlig logisch aufgebaut und leicht zu merken: |SELECT.PR.SC lenkt alle Druckerausgaben auf den Bildschirm um. |SELECT.PR.PR gibt alle für den Drucker bestimmten Daten wieder dort aus. |SELECT.SC.PR gibt alle Bildschirmbefehle direkt an den Drucker. |SELECT.SC.SC setzt die Ausgabe wieder auf den Bildschirm zurück. Eine Einschränkung gibt es: Meldungen von der Cassettenverwaltung werden weiterhin auf dem Bildschirm ausgegeben. Diese Ausgaben Achten Sie bei |SELECT.SC.PR aber immer darauf, daß der Drucker wirklich eingeschaltet und ONLINE ist; der Computer wartet nämlich in einer Endlosschleife auf das Ready-Signal des Druckers. Eine Abwandlung des LIST #8-Befehls können Sie z.B. mit |SELECT.SC.PR:LIST und danach |SELECT.SC.SC erreichen; Sie können aber selbstverständlich auch die normalen Druckerbefehle weiterverwenden - wenn Sie nicht vorher ISELECT.PR.SC eingegeben und damit die Druckerausgabe auf den Bildschirm geschaltet haben! Funktionsweise des Programms Der Schneider CPC 464 ist ja inzwischen berühmt geworden für seine Sprungvektoren: Routinen des Betriebssystems werden nicht direkt aufgerufen, sondern über indirekte Sprünge, die in Tabellen zusammengefaßt sind. Da diese Tabellen im RAM stehen, kann man sie verändern und somit wichtige Systemfunktionen durch eigene Programme ersetzen. So bestehen die SELECT-Befehle auch nur aus LDIR-Kopierkommandos, mit denen die Vektoren für- Druckerausgabe (MC PRINT CHAR) und Bildschirmausgabe (TXT OUTPUT) im RAM hin- und hergeschoben werden. Die Bildschirmausgabe wird, wie aus dem Quellcode des Maschinenprogramms zu ersehen, durch SCNOUT ersetzt. Dieses Unterprogramm gibt nicht nur ein Zeichen auf dem Bildschirm aus, sondern setzt auch das Carry-Flag im Z80-Prozessor. Dieses dient nämlich bei der Druckerausgabe als Zeichen für einen erfolgreichen Druckversuch und wird von PRINT,#8, WRITE.#8 und LIST,#8 ausgewertet. PRNOUT ersetzt nach dem Befehl |SELECT.SC.PR die Druckerausgabe. Es wird hier in einer Endlosschleife versucht, das Zeichen auszudrucken, bis der Drucker empfangsbereit ist. Erst dann erfolgt der Rücksprung von dieser Routine.
|