Tips & Tricks

Escape-Taste für Gänsefüßchen-Modus

Beim Editieren geschieht es oft, daß man anstelle einer Cursorbewegung ein reverses Feld erhält, auch wenn man das gar nicht wünscht. Der einzige Weg zurück zur normalen Cursorkontrolle führte bis jetzt über das Drücken der RETURN-Taste. Mit dieser Routine kommen Sie durch einfachen Druck auf die »F7«-Taste aus dem »Gänsefüßchen-Modus« heraus.

Vielleicht haben Sie sich auch schon über die etwas exotisch klingenden Ausdrücke im Titel gewundert, aber sie beziehen sich auf eine typische Eigenschaft des Commodore Basic-Editors. Wenn man Anführungszeichen oder die INSERTTaste getippt hat, wird jedes Drücken einer Cursortaste nicht durch eine direkte Bewegung des Cursors, sondern durch ein reverses Steuerzeichen quittiert. Nebenbei: dasselbe geschieht beim Drücken der Funktions-, der CLR/HOME- oder der CTRL-Taste zusammen mit den Farbentasten. Dieser Modus, in dem sich der Editor dann befindet, wird Quote-Modus, zu deutsch »Gänsefüßchen-Modus« oder programmierter Cursor genannt.

Manchmal ist das sehr erwünscht, wenn man zum Beispiel die Cursor- oder Farbsteuersequenzen ins Programm einbinden möchte. Oft ist es aber auch unerwünscht, und man überschreibt durch Unachtsamkeit eine halbe Programmzeile mit reversen »Q« oder sonstigen Steuerzeichen. Aus dem »Gänsefüßchen-Modus« heraus gelangt man nur, indem man noch einmal die Taste für Anführungsstriche oder RETURN drückt. Wie gut wäre es, wenn man mit einem einfachen Tastendruck aus dem störenden Quote-Modus herausgelangen könnte, ohne irgendein Zeichen überschreiben zu müssen.

Die Escape-Routine realisiert diese Möglichkeit vollständig. Durch simplen Druck auf die Funktionstaste »F7« werden alle Bits gelöscht, die verhindern, daß sich der Cursor normal steuern läßt. »F7«ermöglichtalsodas Entkommen (englisch: escape) aus diesem Modus.

Damit Sie auch immer genau wissen, wann welcher Modus aktiv ist, stehen in der rechten oberen Bildschirmecke die entsprechenden Buchstaben in weißer Farbe. Haben Sie Anführungsstriche geschrieben, dann erscheint ein »Q« als Zeichen dafür, daß der Quote-Modus eingschaltet ist. Das »Q« steht dort so lange, bis der Modus ausgeschaltet wird, das heißt, bis entweder RETURN, Schlußzeichen oder »F7« gedrückt wurde. Wollen Sie etwas in reverser Schrift erscheinen lassen, dann müssen Sie CTRL/RVS ON drücken und schon erscheint ein weißes »R« als Abkürzung für Revers-Modus in der Bildschirmecke. Als drittes Zeichen kann noch das »I« vorkommen, nämlich dann, wenn die INSERT-Taste benutzt wurde. Im Insert-Modus kann man nicht einmal ein falsch eingetipptes Zeichen mit der DEL-Taste löschen, da nur reverse »T«s erzeugt werden, aber ein Druck auf »F7« genügt, und das Problem ist behoben.

Das Programm wird dann mit SYS49152 aufgerufen, und ab sofort ist die Routine »Escape-Taste« in den Systeminterrupt eingebunden. Das allerdings nur solange bis RUN/STOP-RESTORE gedrückt wird, dann wird der lnterruptvektorwieder direkt auf die normale Interruptroutine gelenkt und die neue Routine wird so lange übergangen, bis das Programm neu gestartet wird.

Da diese Routine für den Einsatz beim Programmieren gedacht ist, sollten dabei keine Probleme entstehen.

Als einzige Einschränkung muß gesagt werden, daß die Benutzer von Kassettengeräten bei einem Zugriff auf die Datasette die Routine mit RUN/STOP-RESTORE ausschalten sollten, da Kassettenoperationen den Interruptvektor auf spezielle Kassettenroutinen umschreiben und sich ein schon verstellter IRQ-Vektor negativ auswirkt.

(Christian Spörri/aw)

Eingabehinweise

Wer im Besitz eines Assembler ist, kann das Assemblerprogramm (Listing 1) abtippen, alle anderen verwenden bitte den Weg über den MSE (Listing 2).

Die Startadresse des Programmes liegt bei $C000 gleich 49152 dezimal, die Endadresse bei $C08F oder 49295.

Das Programm wird natürlich nach dem Abtippen und Speichern wieder mit der Sekundäradresse 1, das heißt absolut geladen. Nach dem Laden muß »NEW« eingegeben werden, damit die Basic-Zeiger, die in den Bereich $C000-$CFFF verstellt wurden, wieder »zurechtgebogen« werden.

10 SYS9*4096
15 .OPT P,OO
20 ;
25 ;****************************************
30 ;===== ESCAPE-TASTE FUER QUOTE-MODE =====
35 ;*              AUF COMMODORE 64        *
40 ;****************************************
45 ;*                                      *
50 ;*            CHRISTIAN SPOERRI         *
55 ;*              LANGWEID 9              *
60 ;*     CH-8045 ZUERICH/SCHWEIZ          *
65 ;*                                      *
70 ;*        TEL.00411/463 65 94           *
75 ;*                                      *
80 ;****************************************
85 ;
90 ;
95 ;
100 ;
105 ;
110 COUNT   =$FB   ;VERZOEGERUNGSZAEHLER
115 DELAY   =$02   ;ANZAHL DURCHLAEUFE BIS
120 :              ;ZUR ABFRAGE
125 LASTKEY =$D7   ;ASCII-CODE DER LETZTEN
130 :              ;GEDRUECKTEN TASTE
135 QUOTE   =$D4   ;FLAGGE FUER QUOTE-MODE
140 :              ;(GAENSEFUESSCHEN-MODUS)
145 INVERS  =$C7   ;RVS FLAG FUER BILDSCHIRM
150 NINSERT =$DB   ;ANZAHL FAELLIGER INSERTS
155 FLAG    =$FC   ;FLAGGE, OB ZEICHEN GE-
160 :              ;LOESCHT WERDEN MUSS
165 BSPALTE =$D3   ;ZEIGER AUF BILDSCHIRM-
170 :              ;SPALTE
175 ZEILE   =$D1   ;VEKTOR, ZEIGT AUF ZEILENBE-
180 :              ;GINN IM BILDSCHIRMSPEICHER
185 CHCURSOR=$CE   ;ZEICHEN UNTER CURSOR
190 NOKEYS  =$C6   ;ANZAHL ZEICHEN IM TASTATUR-
195 :              ;PUFFER
200 KBBUFFER=$277  ;BEGINN DES TASTATURPUFFERS
205 F7      =$88   ;ASCII-CODE DER FUNKTIONS-
210 :              ;TASTE 'F7'
215 QSCODE  =$11   ;BILDSCHIRMCODE VON "Q"
220 RSCODE  =$12   ;BILDSCHIRMCODE VON "R"
225 ISCODE  =$09   ;BILDSCHIRMCODE VON "I"
230 NORMIRQ =$EA31 ;EINSPRUNGADRESSE FUER NOR-
235 :              ;MALE INTERRUPTROUTINE
240 IRQVCT  =$314  ;ADRESSE DES INTERRUPTVECTOR
245 COLOR   =$01   ;FARBE DER INDIKATORBUCH-
250 :              ;STABEN (WEISS)
255 SCREEN  =$427  ;SPEICHERPLATZ IM BILD-
260 :              ;SCHIRMSPEICHER
265 CLRTBL  =$D827 ;SPEICHERPLATZ IN DER
270 :              ;COLORTABELLE
275 ;
280 ;
285 *= $C000
290 ;
300 ;
305          SEI           ;INTERRUPT VERHINDERN
310          LDA #<START   ;STARTADRESSE DER NEU-
315          LDX #>START   ;EN ROUTINE LADEN
316          STA IRQVCT    ;IRQ-VEKTOR AUF NEUE
317          STX IRQVCT+1  ;ROUTINE STELLEN
318          CLI           ;INTERRUPT ERLAUBEN
320          LDA #DELAY    ;VERZOEGERUNGS-
325          STA COUNT     ;ZAEHLER SETZEN
335          RTS           ;ZURUECK INS BASIC
340 ;
345 START    DEC COUNT     ;VERZ. ZAEHLER-1
350          BEQ CHANGE    ;GENUEGEND UEBERSPR.
355          JMP NORMIRQ   ;NEIN, NORMALER IRQ
360 CHANGE   LDA #DELAY    ;JA,NEUE ROUTINE
365          STA COUNT     ;ZAEHLER HOCHSETZEN
370          LDA #$00
375          STA FLAG      ;FLAGGE LOESCHEN
380          LDA QUOTE     ;EDITOR IM QUOTEMODE
385          BEQ NOTQUOTE  ;NEIN, UEBERSPRINGEN
390          LDA #$FF
395          STA FLAG      ;FLAGGE SETZEN
400          LDA #QSCODE   ;LADE "Q"
405          STA SCREEN    ;BRINGE AUF BILDSCHIRM
410          LDA #COLOR    ;SETZE FARBE INS
415          STA CLRTBL    ;FARBRAUM
420          JMP REVERS    ;NAECHSTE ABFRAGE
425 NOTQUOTE LDA #" "      ;LEERZEICHEN AN STELLE
430          STA SCREEN    ;DES "Q" SCHREIBEN
435 REVERS   LDA INVERS    ;EDITOR IM REVERSMODE
440          BEQ NOREVERS  ;NEIN, UEBERSPRINGE
445          LDA #RSCODE   ;LADE "R", PRINTE EINE
450          STA SCREEN-1  ;STELLE LINKS VON "Q"
455          LDA #COLOR    ;FARBE
460          STA CLRTBL-1  ;SETZEN
465          JMP INSERT    ;NAECHSTE ABFRAGE
470 NOREVERS LDA #" "      ;LEERZEICHEN AN STELLE
475          STA SCREEN-1  ;DES "R" SCHREIBEN
480 INSERT   LDA NINSERT   ;WURDE 'INSERT'
485 :                      ;GEDRUECKT
490          BEQ NOINSERT  ;NEIN, UEBERSPRINGE
495          LDA #$FF
500          STA FLAG      ;FLAGGE SETZEN
505          LDA #ISCODE   ;"I" LINKS VON "R"
510          STA SCREEN-2  ;HINSCHREIBEN
515          LDA #COLOR    ;FARBE
520          STA CLRTBL-2  ;SETZEN
525          JMP KEYTEST   ;ZUR ABFRAGE VON ´F7´
530 NOINSERT LDA #" "      ;BLANK AN STELLE
535          STA SCREEN-2  ;DES "I" SCHREIBEN
540 KEYTEST  LDA LASTKEY   ;LETZTE GEDRUECKTE
545          CMP #F7       ;TASTE GLEICH ´F7´
550          BNE END       ;NEIN, ZUM ENDE
555          LDX #$00      ;JA
560          STX QUOTE     ;QUOTE-MODE LOESCHEN
565          STX INVERS    ;REVERS-FLAGGE AUS
570          STX NINSERT   ;INSERT-MODUS AUS
575          LDA FLAG      ;WENN FLAGGE GLEICH
580          BEQ END       ;NULL, DANN ZEICHEN
585 :                      ;NICHT LOESCHEN
590          INX           ;JETZT 1 IM X-REG
595          STX NOKEYS    ;TASTATURPUFFER ENT-
600 :                      ;HAELT EIN ZEICHEN
605          LDY BSPALTE   ;CURSOR EINE STELLE
610          DEY           ;ZURUECKBEWEGEN
615          LDA CHCURSOR  ;CHAR. UNTER CURSOR
620          STA (ZEILE),Y ;AUF BILDSCHIRM
625          LDA #$9D      ;ASCII-CODE FUER
630 :                      ;CURSOR ZURUECK
635          STA KBBUFFER  ;IN TASTATURPUFFER
640 END      JMP NORMIRQ   ;ENDE, GEHE ZUR NOR-
645 :                      ;MALEN IRQ-ROUTINE
READY.
Listing 1. Das Assemblerlisting zum Programm »Escape-Taste«
PROGRAMM : ESCAPE-T.COD   C000 C090
-----------------------------------
C000 : 78 A9 11 A2 C0 8D 14 03   B4
C008 : 8E 15 03 58 A9 02 85 FB   A5
C010 : 60 C6 FB F0 03 4C 31 EA   1D
C018 : A9 02 85 FB A9 00 85 FC   4E
C020 : A5 D4 F0 11 A9 FF 85 FC   38
C028 : A9 11 8D 27 04 A9 01 8D   4F
C030 : 27 D8 4C 3A C0 A9 20 8D   13
C038 : 27 04 A5 C7 F0 0D A9 12   06
C040 : 8D 26 04 A9 01 8D 26 D8   DD
C048 : 4C 50 C0 A9 20 8D 26 04   31
C050 : A5 D8 F0 11 A9 FF 85 FC   6A
C058 : A9 09 8D 25 04 A9 01 8D   3B
C060 : 25 D8 4C 6A C0 A9 20 8D   47
C068 : 25 04 A5 D7 C9 88 D0 1B   4E
C070 : A2 00 86 D4 86 C7 86 D8   C1
C078 : A5 FC F0 0F E8 86 C6 A4   E0
C080 : D3 88 A5 CE 91 D1 A9 9D   64
C088 : 8D 77 02 4C 31 EA 00 2D   A0
Listing 2. Das MSE-Ladeprogramm zu »Escape-Taste«. Bitte beachten Sie die Eingabehinweise auf Seite 6
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →