home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
64'er
/
64ER_CD.iso
/
sh1x
/
sh12a.d64
/
window.src
(
.txt
)
< prev
Wrap
Commodore BASIC
|
1995-03-30
|
9KB
|
334 lines
10 SYS9*4096:.OPT O,OO
15 *=$C000
20 XLO = $F7 ;KOORDINATEN DER LINKEN
21 YLO = $F8 ;OBEREN ECKE DES WINDOWS
22 XRU = $F9 ;KOORDINATEN DER RECHTEN
23 YRU = $FA ;UNTEREN ECKE DES WINDOWS
24 ZSP = $AA ;ZWISCHENSPEICHER
26 FKEY = $FB ;SPEICHER F. FTASTEN
28 CNT = $57 ;ZAEHLER
30 CUX = $A8 ;RELATIVE CURSORPOSITION
31 CUY = $A9 ;INNERHALB DES WINDOWS
32 POL = $AA ;ZWEI-BYTE ZAEHLER
33 POH = $AB ;FUER DIVERSE ZWECKE
34 POS = $FC ;POSITION IM TEXTSPEICHER
36 ZBR = $FD ;BREITE DES WINDOWS
38 ZAN = $FE ;HOEHE DES WINDOWS
40 MPOS = $FF ;LAENGE DES TEXTSPEICHERS
42 STZ = $22 ;STRINGZEIGER
44 STAT = $90 ;STATUS - BYTE
46 CFLG = $CC ;FLAG FUER CURSOR
48 CREP = $CD ;ZAEHLER F. CURSORBLINKEN
50 IFLG = $11 ;FLAG F. INPUT,GET,READ
52 TFLG = $0D ;TYPFLAG (NUMER./STRING)
54 CGL = $7A
56 CGH = $7B ;ZEIGER D. CHRGET-ROUTINE
58 ZCGL = $4B ;ZWISCHENSPEICHER FUER
59 ZCGH = $4C ;CHRGET-ZEIGER
60 ZVL = $49 ;ZEIGER AUF
61 ZVH = $4A ;VARIABLENWERT
62 COLL = $14
63 COLH = $15 ;ZEIGER IN FARBRAM
64 VRAM =$288 ;HIGH-BYTE VIDEO-RAM
66 CCOL =$286 ;FARBE DES CURSORS
68 ERLZT =$33C;TAB. F. ERLAUBTE ZEICHEN
100 RBYTE = $B79E ;1-BYTE-WERT LESEN
102 PKOM = $AEFD ;AUF KOMMA PRUEFEN
103 PCHAR = $AEFF ;AUF ZEICHEN PRUEFEN
104 FRMEVL = $AD9E ;AUSDRUCK AUWERTEN
106 FRESTR = $B6A3 ;STRINGVERWALTUNG
108 C(null)T = $0079 ;LETZTES Z. HOLEN
110 CGET = $0073 ;NAECHSTES Z. HOLEN
112 GET = $FFE4 ;GET
114 ZANFL = $ECF0 ;TAB. D. BILDSCHIRM-
115 ZANFH = $D9 ;ZEILENANFAENGE
116 CSET = $FFF0 ;CURSOR SETZEN
118 PLET = $B113 ;PRUEF. AUF BUCHST.
120 SVAR = $B08B ;VARIABLE SUCHEN
122 CGSET = $AB76 ;CHRGETZEIGER SETZEN
124 STHOL = $B487 ;STRING HOLEN
126 PRSET = $B7E2 ;PRGZEIGER SETZEN
128 STRVAR = $A9DA ;STRING AN VAR ZUW.
130 PRBYTE = $B7F1 ;S.O. NACH KOMMA
132 CRBYTE = $B79B ;S.O. MIT CHRGET
200 ;
205 ; AUSGABE IN WINDOW
210 ;
215 PRINT JSR POSREAD ;TEXT HOLEN
220 JMP WTEXT ;UND IN WINDOW SCHREIBEN
300 ;
305 ; EINGABE IN WINDOW
310 ;
312 ; - PARAMETER EINLESEN
313 ;
315 INPUT JSR POSREAD ;KOORD. & TEXT
320 LDA #<ERLZT:LDX #>ERLZT
325 JSR RSTRING ;ERLAUBTE ZEICHEN LESEN
330 TXA:BNE PEB ;ALTE EINSTELLUNG
332 STA (POL),Y ;TAB MIT 0 ABSCHLIESSEN
335 PEB JSR C(null)T:CMP #",":BNE PEA
340 JSR CRBYTE ;ANZAHL D. FTASTEN HOLEN
345 CPX #09 ;VGL. <= 8
347 BCS PEA ;NEIN - NICHT BEACHTEN
350 TXA:ADC #133 ;IN ASCII UMRECHNEN
351 STA FKEY ;UND SPEICHERN
355 PEA LDA #";"
360 JSR PCHAR ;AUF SEMIKOLON PRUEFEN
400 ;
405 ; - EINGABE VORBEREITEN
410 ;
415 HOM LDY #00:STY CUX ;CURSOR IN
420 STY CUY ;LINKE OBERE ECKE
425 STY CFLG ;CURSOR EIN
430 STY POS ;AN TEXTANFANG
500 ;
505 ; - EINGABE
510 ;
515 EIN JSR CUSWRT ;TEXT SCHREIBEN
520 EIA JSR GET ;ZEICHEN VON TASTATUR
522 BEQ EIA ;HOLEN
525 LDX #02:STX CREP ;REPEATFUNKTION
526 ;
527 ; - PRUEFUNG AUF SONDERZEICHEN
528 ;
530 CMP #"[133]":BCC E4 ;AUF FTASTE PRUEFEN
535 CMP FKEY ;PR. ERLAUBTE FTASTE
537 BCC E5 ;JA - WIE RETURN
540 CMP #"[140]"+1 ;PR. NICHT DEF. FTASTE
542 BCC EIA ;JA - NICHT BEACHTEN
545 E4 CMP #13 ;PR. RETURN
547 BNE E3 ;NICHT RETURN
550 E5 JMP RET ;RETURN
555 E3 LDX CUX ;CURSORPOSITION IN
557 LDY CUY ;X/Y - REGISTER
560 CMP # 19:BEQ HOM ;HOME
565 CMP #141:BEQ SRET ;SHIFT-RETURN
570 CMP # 29:BEQ CUSR ;CURSOR RIGHT
575 CMP # 17:BEQ CUSD ;CURSOR DOWN
580 CMP #145:BEQ CUSU ;CURSOR UP
585 CMP #157:BEQ CUSL ;CURSOR LEFT
590 CMP # 20:BEQ DEL ;DELETE
595 CMP #148:BEQ INST ;INSERT
600 CMP #147:BEQ CLR ;CLEAR
605 ;
610 ; - PRUEFUNG AUF ERLAUBTE ZEICHEN
615 ;
620 LDY #255 ;Y ALS ZEIGER IN TAB.
625 EIB INY ;ZEIGER ERHOEHEN
627 LDX ERLZT,Y ;ZEICHEN AUS TAB. HOLEN
630 BEQ EIA ;TABELLENENDE
635 CMP ERLZT,Y ;PR. ERLAUBTES ZEICHEN
637 BEQ EIE ;ERLAUBTES ZEICHEN
640 CPX #"[133]":BNE EIC ;AUF F1 PRUEFEN
645 CMP #"0" ;F1 - AUF ZIFFER PRUEFEN
647 BCC EIB
650 CMP #"9"+1
652 BCC EIE ;ZIFFER - ERLAUBT
655 EIC CPX #"[134]" ;AUF F3 PRUEFEN
657 BNE EID
660 JSR PLET ;F3 - AUF BUCHST. PRUEFEN
665 BCS EIE ;BUCHSTABE - ERLAUBT
670 EID CPX #"[135]" ;AUF F5 PRUEFEN
672 BNE EIB
675 CMP #"[193]":BCC EIB ;F5 - AUF GESHIFT.
680 CMP #"[218]"+1 ;BUCHSTABEN PRUEFEN
685 BCS EIB ;KEIN BUCHSTABE
690 EIE LDY POS ;POSITION IM TEXTSP.
695 PTEXT STA TEXTT,Y ;ZEICHEN SPEICHERN
700 ;
705 ; - SONDERZEICHEN-BEHANDLUNG
710 ;
715 CUSR JMP INCU ;CURSOR N. RECHTS
720 SRET LDX #00 ;CUS. AN ZEILENANFANG
725 LDA POS:SBC CUX ;POS NEU BERECHNEN
730 .BYTE $2C ;NAECHSTEN BEF. AUSLASSEN
735 CUSD LDA POS:INY ;CURSORZEILE+1
740 CPY ZAN
745 BCS CDB ;CUY ZU GROSS
750 ADC ZBR ;POS NEU BERECHNEN
755 .BYTE $24 ;NAECHSTEN BEF. AUSLASSEN
760 CDB DEY ;CURSORZEILE-1
765 CDA STA POS ;POS SPEICHERN
770 JMP SCURS ;CURSOR SETZEN
775 CUSU LDA POS
780 CPY #00:BEQ CDA ;CURS. IN 1. ZEILE
785 SBC ZBR ;POS NEU BERECHNEN
790 BCS CDB ;UNBEDINGTER SPRUNG
795 CLR JSR CLEAR ;TEXT LOESCHEN
800 JMP HOM ;ZUR HOME-ROUTINE
805 DEL LDY POS:BEQ INCB ;TEXTANFANG
810 DEB LDA TEXTT,Y:STA TEXTT-1,Y
815 INY:BNE DEB ;TEXT VERSCHIEBEN
820 LDA #32:LDX MPOS
825 STA TEXTT-1,X ;SPACE AN TEXTENDE
830 CUSL JMP DECU ;CURSOR LINKS
835 INST LDY MPOS
840 INA LDA TEXTT-1,Y:STA TEXTT,Y
845 DEY:CPY POS ;TEXT VERSCHIEBEN
850 BNE INA ;BIS ZUR AUGENBL. POSITION
855 LDA #32
860 STA TEXTT,Y ;SPACE EINFUEGEN
865 BNE INCB ;UNBEDINGTER SPRUNG
900 ;
905 ; - CURSORBEWEGUNGEN
910 ;
915 INCU LDX CUX ;CURSOR RIGHT
920 LDY CUY ;CPOS LADEN
925 INX ;SPALTE + 1
930 CPX ZBR:BNE INCC ;KEINE NEUE ZEILE
935 LDX #00 ;ZEILENANFANG
940 INY ;ZEILE + 1
945 CPY ZAN
950 BEQ INCB ;CURSOR RIGHT UNMOEGLICH
955 INCC INC POS ;POS. IN TEXT + 1
960 SCURS STX CUX ;REL. CURSORPOSITION
962 STY CUY ;SPEICHERN
965 INCB JMP EIN ;ZUR EINGABESCHLEIFE
970 DECU LDY CUY ;CURSOR LEFT
975 LDX CUX
980 BNE DECB ;NICHT AM ZEILENANFANG
985 LDX ZBR ;ZEILENENDE
990 TYA
992 BEQ INCB ;CURSOR LEFT UNMOEGLICH
995 DEY ;ZEILE - 1
1000 DECB DEX ;SPALTE - 1
1005 DEC POS ;POS. IN TEXT - 1
1010 JMP SCURS
1100 ;
1105 ; - ENDE DER EINGABE
1110 ;
1115 RET STX CFLG ;CURSOR AUS
1120 SBC #"[133]"-2 ;FTASTENNR. ERRECHNEN
1125 BCS REA ;NICHT RETURN
1130 LDA #00 ;00 FUER RETURN
1135 REA STA STAT ;IN ST SPEICHERN
1140 JSR WTEXT ;TEXT AUF BS AUSGEBEN
1145 REB LDA TEXTT-1,X:CMP #32
1150 BNE REC ;TEXT NACH UEBER-
1152 DEX ;FLUESSIGEN LEERZEICHEN
1155 BNE REB ;DURCHSUCHEN
1160 REC LDA #00
1165 STA TEXTT,X ;00 FUER TEXTENDE
1170 STA IFLG ;00 FUER INPUT
1175 JSR SVAR ;VARIABLE SUCHEN
1180 BIT TFLG
1185 BPL SYNERR ;NUMERISCHE VARIABLE
1190 STA ZVL ;ZEIGER AUF VARIABLE
1195 STY ZVH ;SPEICHERN
1200 LDA CGL:LDY CGH ;CHRGET-ZEIGER
1205 STA ZCGL
1210 STY ZCGH ;ZWISCHENSPEICHERN
1215 LDA PTEXT+1 ;ANFANGSADRESSE DES
1220 LDY PTEXT+2 ;TEXTES UEBERGEBEN
1225 JSR STHOL:JSR PRSET ;STRING HOLEN
1230 JSR STRVAR ;UND DER VAR. ZUWEISEN
1235 LDA ZCGL:LDY ZCGH ;CHRGET-ZEIGER
1240 JMP CGSET ;WIEDERHERSTELLEN
1245 ;
1250 SYNERR JMP $AF08 ;SYNTAX ERROR
2000 ;
2005 ; - UNTERROUTINEN
2010 ;
2015 ; - CURSOR SETZEN
2020 ;
2025 CUSWRT CLC:LDA CUY ;AUS RELATIVER
2030 ADC YLO:TAX ;CURSORPOSITION
2035 LDA CUX ;ABSOLUTE CURSORPOSITION
2040 ADC XLO:TAY ;BERECHNEN
2045 JSR CSET ;CURSOR SETZEN
2100 ;
2105 ; - TEXT IN WINDOW SCHREIBEN
2110 ;
2115 WTEXT LDX #00 ;ZEIGER IN TEXT
2120 LDA YLO:STA CNT ;ZEILENZAEHLER
2125 WTA LDY CNT ;BS-ZEILE
2130 LDA ZANFL,Y ;ZEIGER IN
2135 STA POL ;BILDSCHIRMSPEICHER
2140 STA COLL ;UND FARBRAM SETZEN
2145 LDA ZANFH,Y:AND #03
2150 PHA:ORA VRAM:STA POH
2155 PLA:ORA #$D8:STA COLH
2160 LDY XLO ;SPALTEN - ZAEHLER
2165 WTB LDA TEXTT,X ;ZEICHEN HOLEN
2170 BCWAND BMI BCA ;UMWANDLUNG ASCII-
2175 CMP #96:BCC BCA ;CODE IN
2180 AND #%11011111 ;BILDSCHIRMCODE
2185 BNE BCB
2190 BCA AND #%10111111
2195 BCB BPL BCE:EOR #%11000000
2200 BCE STA (POL),Y ;ZEICHEN IN BSRAM
2205 LDA CCOL ;SCHREIBEN UND
2210 STA (COLL),Y ;FARBE SETZEN
2215 INX ;ZEIGER IN TEXT + 1
2220 INY ;SPALTENZAEHLER + 1
2225 CPY XRU
2230 BCC WTB ;NOCH NICHT LETZTE SPALTE
2235 INC CNT ;ZEILENZAEHLER + 1
2240 CPX MPOS ;PR. AUF TEXTENDE
2245 BCC WTA ;NOCH NICHT TEXTENDE
2250 RTS
2300 ;
2305 ; - KOORDINATENPAAR LESEN
2310 ;
2315 RKOORD JSR PKOM ;AUF KOMMA PRUEFEN
2320 STX ZSP ;ZAEHLER FUER KOORDINATEN
2325 JSR RBYTE ;BYTE-WERT LESEN
2330 CPX #40 ;PR. < 40 (X-KOORDINATE)
2335 BCS ILLERR ;NEIN - FEHLERMELDUNG
2340 LDY ZSP:STX XLO,Y ;WERT SPEICHERN
2345 JSR PRBYTE ;BYTE-WERT LESEN
2350 CPX #25 ;PR. < 25 (Y-K.)
2355 BCS ILLERR ;NEIN
2360 LDY ZSP:STX XLO+1,Y ;SPEICHERN
2365 RTS
2370 ;
2375 ILLERR JMP $B248 ;ILLEGAL Q. ERROR
2400 ;
2405 ; - WINDOWPARAMETER & TEXT-
2410 ; STRING LESEN
2411 ;
2420 POSREAD LDX #00 ;1.KOORDINATENPAAR
2425 JSR RKOORD+3 ;LESEN
2430 LDX #02:JSR RKOORD ;2. ''
2435 INC XRU ;(BESSER VERARBEITBAR)
2440 SEC:LDA XRU ;BREITE DES WINDOWS +1
2445 SBC XLO ;BERECHNEN
2450 BCC ILLERR ;<0 - FEHLER
2455 STA ZBR ;UND SPEICHERN
2460 TXA ;HOEHE DES WINDOWS + 1
2465 SBC YLO ;BERECHNEN
2470 BCC ILLERR:ADC #00:STA ZAN
2475 TAX ;HOEHE (IN X-REG.) MIT
2480 LDA #00 ;BREITE MALNEHMEN = LAENGE
2485 POA ADC ZBR ;DES EINGABETEXTES
2490 BCS ILLERR ;>255 - FEHLER
2495 DEX:BNE POA
2500 STA MPOS ;LAENGE SPEICHERN
2505 CLEAR LDY #00 ;TEXTSPEICHER
2510 LDA #32 ;LOESCHEN
2515 CLEA STA TEXTT,Y:INY:BNE CLEA
2600 ;
2605 ; - STRING LESEN & SPEICHERN
2610 ;
2615 RSTRINGT LDA PTEXT+1 ;ZEIGER AUF
2620 LDX PTEXT+2 ;TEXTSPEICHER
2625 RSTRING STA POL ;ZEIGER FUER
2630 STX POH ;SPEICHERUNG D. STRINGS
2635 JSR C(null)T ;LETZTES ZEICHEN HOLEN
2640 CMP #"," ;PR. AUF KOMMA
2645 BNE RSTE ;NEIN - KEIN STRING FOLGT
2650 JSR CGET:JSR FRMEVL ;STRING LESEN
2655 JSR FRESTR ;& PARAMETER HOLEN
2660 LDY #00
2665 TAX ;LAENGE D. STRING IN X-REG.
2670 BEQ RSTE ;LAENGE = 0
2675 RSTB LDA (STZ),Y ;STRING IN
2680 STA (POL),Y ;SPEICHER (POL/H =
2685 INY ;ANFANGSADRESSE) VERSCHIEBEN
2690 DEX:BNE RSTB
2695 RSTE RTS
3000 ;
3005 ; - TEXTSPEICHER
3010 ;
3015 TEXTT = *