home *** CD-ROM | disk | FTP | other *** search
/ 64'er / 64ER_CD.iso / sh1x / sh12a.d64 / window.src (.txt) < prev   
Commodore BASIC  |  1995-03-30  |  9KB  |  334 lines

  1. 10 SYS9*4096:.OPT O,OO
  2. 15 *=$C000
  3. 20 XLO  = $F7 ;KOORDINATEN DER LINKEN
  4. 21 YLO  = $F8 ;OBEREN ECKE DES WINDOWS
  5. 22 XRU  = $F9 ;KOORDINATEN DER RECHTEN
  6. 23 YRU  = $FA ;UNTEREN ECKE DES WINDOWS
  7. 24 ZSP  = $AA ;ZWISCHENSPEICHER
  8. 26 FKEY = $FB ;SPEICHER F. FTASTEN
  9. 28 CNT  = $57 ;ZAEHLER
  10. 30 CUX  = $A8 ;RELATIVE CURSORPOSITION
  11. 31 CUY  = $A9 ;INNERHALB DES WINDOWS
  12. 32 POL  = $AA ;ZWEI-BYTE ZAEHLER
  13. 33 POH  = $AB ;FUER DIVERSE ZWECKE
  14. 34 POS  = $FC ;POSITION IM TEXTSPEICHER
  15. 36 ZBR  = $FD ;BREITE DES WINDOWS
  16. 38 ZAN  = $FE ;HOEHE DES WINDOWS
  17. 40 MPOS = $FF ;LAENGE DES TEXTSPEICHERS
  18. 42 STZ  = $22 ;STRINGZEIGER
  19. 44 STAT = $90 ;STATUS - BYTE
  20. 46 CFLG = $CC ;FLAG FUER CURSOR
  21. 48 CREP = $CD ;ZAEHLER F. CURSORBLINKEN
  22. 50 IFLG = $11 ;FLAG F. INPUT,GET,READ
  23. 52 TFLG = $0D ;TYPFLAG (NUMER./STRING)
  24. 54 CGL  = $7A
  25. 56 CGH  = $7B ;ZEIGER D. CHRGET-ROUTINE
  26. 58 ZCGL = $4B ;ZWISCHENSPEICHER FUER
  27. 59 ZCGH = $4C ;CHRGET-ZEIGER
  28. 60 ZVL  = $49 ;ZEIGER AUF
  29. 61 ZVH  = $4A ;VARIABLENWERT
  30. 62 COLL = $14
  31. 63 COLH = $15 ;ZEIGER IN FARBRAM
  32. 64 VRAM =$288 ;HIGH-BYTE VIDEO-RAM
  33. 66 CCOL =$286 ;FARBE DES CURSORS
  34. 68 ERLZT =$33C;TAB. F. ERLAUBTE ZEICHEN
  35. 100 RBYTE  = $B79E ;1-BYTE-WERT LESEN
  36. 102 PKOM   = $AEFD ;AUF KOMMA PRUEFEN
  37. 103 PCHAR  = $AEFF ;AUF ZEICHEN PRUEFEN
  38. 104 FRMEVL = $AD9E ;AUSDRUCK AUWERTEN
  39. 106 FRESTR = $B6A3 ;STRINGVERWALTUNG
  40. 108 C(null)T   = $0079 ;LETZTES Z. HOLEN
  41. 110 CGET   = $0073 ;NAECHSTES Z. HOLEN
  42. 112 GET    = $FFE4 ;GET
  43. 114 ZANFL  = $ECF0 ;TAB. D. BILDSCHIRM-
  44. 115 ZANFH  = $D9   ;ZEILENANFAENGE
  45. 116 CSET   = $FFF0 ;CURSOR SETZEN
  46. 118 PLET   = $B113 ;PRUEF. AUF BUCHST.
  47. 120 SVAR   = $B08B ;VARIABLE SUCHEN
  48. 122 CGSET  = $AB76 ;CHRGETZEIGER SETZEN
  49. 124 STHOL  = $B487 ;STRING HOLEN
  50. 126 PRSET  = $B7E2 ;PRGZEIGER SETZEN
  51. 128 STRVAR = $A9DA ;STRING AN VAR ZUW.
  52. 130 PRBYTE = $B7F1 ;S.O. NACH KOMMA
  53. 132 CRBYTE = $B79B ;S.O. MIT CHRGET
  54. 200 ;
  55. 205 ; AUSGABE IN WINDOW
  56. 210 ;
  57. 215 PRINT JSR POSREAD ;TEXT HOLEN
  58. 220 JMP WTEXT ;UND IN WINDOW SCHREIBEN
  59. 300 ;
  60. 305 ; EINGABE IN WINDOW
  61. 310 ;
  62. 312 ;   - PARAMETER EINLESEN
  63. 313 ;
  64. 315 INPUT JSR POSREAD ;KOORD. & TEXT
  65. 320 LDA #<ERLZT:LDX #>ERLZT
  66. 325 JSR RSTRING ;ERLAUBTE ZEICHEN LESEN
  67. 330 TXA:BNE PEB ;ALTE EINSTELLUNG
  68. 332 STA (POL),Y ;TAB MIT 0 ABSCHLIESSEN
  69. 335 PEB JSR C(null)T:CMP #",":BNE PEA
  70. 340 JSR CRBYTE ;ANZAHL D. FTASTEN HOLEN
  71. 345 CPX #09 ;VGL. <= 8
  72. 347 BCS PEA ;NEIN - NICHT BEACHTEN
  73. 350 TXA:ADC #133 ;IN ASCII UMRECHNEN
  74. 351 STA FKEY ;UND SPEICHERN
  75. 355 PEA LDA #";"
  76. 360 JSR PCHAR ;AUF SEMIKOLON PRUEFEN
  77. 400 ;
  78. 405 ;   - EINGABE VORBEREITEN
  79. 410 ;
  80. 415 HOM LDY #00:STY CUX ;CURSOR IN
  81. 420 STY CUY ;LINKE OBERE ECKE
  82. 425 STY CFLG ;CURSOR EIN
  83. 430 STY POS ;AN TEXTANFANG
  84. 500 ;
  85. 505 ;   - EINGABE
  86. 510 ;
  87. 515 EIN JSR CUSWRT ;TEXT SCHREIBEN
  88. 520 EIA JSR GET ;ZEICHEN VON TASTATUR
  89. 522 BEQ EIA ;HOLEN
  90. 525 LDX #02:STX CREP ;REPEATFUNKTION
  91. 526 ;
  92. 527 ;   - PRUEFUNG AUF SONDERZEICHEN
  93. 528 ;
  94. 530 CMP #"[133]":BCC E4 ;AUF FTASTE PRUEFEN
  95. 535 CMP FKEY ;PR. ERLAUBTE FTASTE
  96. 537 BCC E5 ;JA - WIE RETURN
  97. 540 CMP #"[140]"+1 ;PR. NICHT DEF. FTASTE
  98. 542 BCC EIA ;JA - NICHT BEACHTEN
  99. 545 E4 CMP #13 ;PR. RETURN
  100. 547 BNE E3 ;NICHT RETURN
  101. 550 E5 JMP RET ;RETURN
  102. 555 E3 LDX CUX ;CURSORPOSITION IN
  103. 557 LDY CUY ;X/Y - REGISTER
  104. 560 CMP # 19:BEQ HOM    ;HOME
  105. 565 CMP #141:BEQ SRET   ;SHIFT-RETURN
  106. 570 CMP # 29:BEQ CUSR   ;CURSOR RIGHT
  107. 575 CMP # 17:BEQ CUSD   ;CURSOR DOWN
  108. 580 CMP #145:BEQ CUSU   ;CURSOR UP
  109. 585 CMP #157:BEQ CUSL   ;CURSOR LEFT
  110. 590 CMP # 20:BEQ DEL    ;DELETE
  111. 595 CMP #148:BEQ INST   ;INSERT
  112. 600 CMP #147:BEQ CLR    ;CLEAR
  113. 605 ;
  114. 610 ;   - PRUEFUNG AUF ERLAUBTE ZEICHEN
  115. 615 ;
  116. 620 LDY #255 ;Y ALS ZEIGER IN TAB.
  117. 625 EIB INY ;ZEIGER ERHOEHEN
  118. 627 LDX ERLZT,Y ;ZEICHEN AUS TAB. HOLEN
  119. 630 BEQ EIA ;TABELLENENDE
  120. 635 CMP ERLZT,Y ;PR. ERLAUBTES ZEICHEN
  121. 637 BEQ EIE ;ERLAUBTES ZEICHEN
  122. 640 CPX #"[133]":BNE EIC ;AUF F1 PRUEFEN
  123. 645 CMP #"0" ;F1 - AUF ZIFFER PRUEFEN
  124. 647 BCC EIB
  125. 650 CMP #"9"+1
  126. 652 BCC EIE ;ZIFFER - ERLAUBT
  127. 655 EIC CPX #"[134]" ;AUF F3 PRUEFEN
  128. 657 BNE EID
  129. 660 JSR PLET ;F3 - AUF BUCHST. PRUEFEN
  130. 665 BCS EIE ;BUCHSTABE - ERLAUBT
  131. 670 EID CPX #"[135]" ;AUF F5 PRUEFEN
  132. 672 BNE EIB
  133. 675 CMP #"[193]":BCC EIB ;F5 - AUF GESHIFT.
  134. 680 CMP #"[218]"+1 ;BUCHSTABEN PRUEFEN
  135. 685 BCS EIB ;KEIN BUCHSTABE
  136. 690 EIE LDY POS ;POSITION IM TEXTSP.
  137. 695 PTEXT STA TEXTT,Y ;ZEICHEN SPEICHERN
  138. 700 ;
  139. 705 ;   - SONDERZEICHEN-BEHANDLUNG
  140. 710 ;
  141. 715 CUSR JMP INCU ;CURSOR N. RECHTS
  142. 720 SRET LDX #00 ;CUS. AN ZEILENANFANG
  143. 725 LDA POS:SBC CUX ;POS NEU BERECHNEN
  144. 730 .BYTE $2C ;NAECHSTEN BEF. AUSLASSEN
  145. 735 CUSD LDA POS:INY ;CURSORZEILE+1
  146. 740 CPY ZAN
  147. 745 BCS CDB ;CUY ZU GROSS
  148. 750 ADC ZBR ;POS NEU BERECHNEN
  149. 755 .BYTE $24 ;NAECHSTEN BEF. AUSLASSEN
  150. 760 CDB DEY ;CURSORZEILE-1
  151. 765 CDA STA POS ;POS SPEICHERN
  152. 770 JMP SCURS ;CURSOR SETZEN
  153. 775 CUSU LDA POS
  154. 780 CPY #00:BEQ CDA ;CURS. IN 1. ZEILE
  155. 785 SBC ZBR ;POS NEU BERECHNEN
  156. 790 BCS CDB ;UNBEDINGTER SPRUNG
  157. 795 CLR JSR CLEAR ;TEXT LOESCHEN
  158. 800 JMP HOM ;ZUR HOME-ROUTINE
  159. 805 DEL LDY POS:BEQ INCB ;TEXTANFANG
  160. 810 DEB LDA TEXTT,Y:STA TEXTT-1,Y
  161. 815 INY:BNE DEB ;TEXT VERSCHIEBEN
  162. 820 LDA #32:LDX MPOS
  163. 825 STA TEXTT-1,X ;SPACE AN TEXTENDE
  164. 830 CUSL JMP DECU ;CURSOR LINKS
  165. 835 INST LDY MPOS
  166. 840 INA LDA TEXTT-1,Y:STA TEXTT,Y
  167. 845 DEY:CPY POS ;TEXT VERSCHIEBEN
  168. 850 BNE INA ;BIS ZUR AUGENBL. POSITION
  169. 855 LDA #32
  170. 860 STA TEXTT,Y ;SPACE EINFUEGEN
  171. 865 BNE INCB ;UNBEDINGTER SPRUNG
  172. 900 ;
  173. 905 ;   - CURSORBEWEGUNGEN
  174. 910 ;
  175. 915 INCU LDX CUX ;CURSOR RIGHT
  176. 920 LDY CUY ;CPOS LADEN
  177. 925 INX ;SPALTE + 1
  178. 930 CPX ZBR:BNE INCC ;KEINE NEUE ZEILE
  179. 935 LDX #00 ;ZEILENANFANG
  180. 940 INY ;ZEILE + 1
  181. 945 CPY ZAN
  182. 950 BEQ INCB ;CURSOR RIGHT UNMOEGLICH
  183. 955 INCC INC POS ;POS. IN TEXT + 1
  184. 960 SCURS STX CUX ;REL. CURSORPOSITION
  185. 962 STY CUY ;SPEICHERN
  186. 965 INCB JMP EIN ;ZUR EINGABESCHLEIFE
  187. 970 DECU LDY CUY ;CURSOR LEFT
  188. 975 LDX CUX
  189. 980 BNE DECB ;NICHT AM ZEILENANFANG
  190. 985 LDX ZBR ;ZEILENENDE
  191. 990 TYA
  192. 992 BEQ INCB ;CURSOR LEFT UNMOEGLICH
  193. 995 DEY ;ZEILE - 1
  194. 1000 DECB DEX ;SPALTE - 1
  195. 1005 DEC POS ;POS. IN TEXT - 1
  196. 1010 JMP SCURS
  197. 1100 ;
  198. 1105 ;   - ENDE DER EINGABE
  199. 1110 ;
  200. 1115 RET STX CFLG ;CURSOR AUS
  201. 1120 SBC #"[133]"-2 ;FTASTENNR. ERRECHNEN
  202. 1125 BCS REA ;NICHT RETURN
  203. 1130 LDA #00 ;00 FUER RETURN
  204. 1135 REA STA STAT ;IN ST SPEICHERN
  205. 1140 JSR WTEXT ;TEXT AUF BS AUSGEBEN
  206. 1145 REB LDA TEXTT-1,X:CMP #32
  207. 1150 BNE REC ;TEXT NACH UEBER-
  208. 1152 DEX ;FLUESSIGEN LEERZEICHEN
  209. 1155 BNE REB ;DURCHSUCHEN
  210. 1160 REC LDA #00
  211. 1165 STA TEXTT,X ;00 FUER TEXTENDE
  212. 1170 STA IFLG ;00 FUER INPUT
  213. 1175 JSR SVAR ;VARIABLE SUCHEN
  214. 1180 BIT TFLG
  215. 1185 BPL SYNERR ;NUMERISCHE VARIABLE
  216. 1190 STA ZVL ;ZEIGER AUF VARIABLE
  217. 1195 STY ZVH ;SPEICHERN
  218. 1200 LDA CGL:LDY CGH ;CHRGET-ZEIGER
  219. 1205 STA ZCGL
  220. 1210 STY ZCGH ;ZWISCHENSPEICHERN
  221. 1215 LDA PTEXT+1 ;ANFANGSADRESSE DES
  222. 1220 LDY PTEXT+2 ;TEXTES UEBERGEBEN
  223. 1225 JSR STHOL:JSR PRSET ;STRING HOLEN
  224. 1230 JSR STRVAR ;UND DER VAR. ZUWEISEN
  225. 1235 LDA ZCGL:LDY ZCGH ;CHRGET-ZEIGER
  226. 1240 JMP CGSET ;WIEDERHERSTELLEN
  227. 1245 ;
  228. 1250 SYNERR JMP $AF08 ;SYNTAX ERROR
  229. 2000 ;
  230. 2005 ;   - UNTERROUTINEN
  231. 2010 ;
  232. 2015 ;      - CURSOR SETZEN
  233. 2020 ;
  234. 2025 CUSWRT CLC:LDA CUY ;AUS RELATIVER
  235. 2030 ADC YLO:TAX ;CURSORPOSITION
  236. 2035 LDA CUX ;ABSOLUTE CURSORPOSITION
  237. 2040 ADC XLO:TAY ;BERECHNEN
  238. 2045 JSR CSET ;CURSOR SETZEN
  239. 2100 ;
  240. 2105 ;      - TEXT IN WINDOW SCHREIBEN
  241. 2110 ;
  242. 2115 WTEXT LDX #00 ;ZEIGER IN TEXT
  243. 2120 LDA YLO:STA CNT ;ZEILENZAEHLER
  244. 2125 WTA LDY CNT ;BS-ZEILE
  245. 2130 LDA ZANFL,Y ;ZEIGER IN
  246. 2135 STA POL ;BILDSCHIRMSPEICHER
  247. 2140 STA COLL ;UND FARBRAM SETZEN
  248. 2145 LDA ZANFH,Y:AND #03
  249. 2150 PHA:ORA VRAM:STA POH
  250. 2155 PLA:ORA #$D8:STA COLH
  251. 2160 LDY XLO ;SPALTEN - ZAEHLER
  252. 2165 WTB LDA TEXTT,X ;ZEICHEN HOLEN
  253. 2170 BCWAND BMI BCA ;UMWANDLUNG ASCII-
  254. 2175 CMP #96:BCC BCA ;CODE IN
  255. 2180 AND #%11011111 ;BILDSCHIRMCODE
  256. 2185 BNE BCB
  257. 2190 BCA AND #%10111111
  258. 2195 BCB BPL BCE:EOR #%11000000
  259. 2200 BCE STA (POL),Y ;ZEICHEN IN BSRAM
  260. 2205 LDA CCOL ;SCHREIBEN UND
  261. 2210 STA (COLL),Y ;FARBE SETZEN
  262. 2215 INX ;ZEIGER IN TEXT + 1
  263. 2220 INY ;SPALTENZAEHLER + 1
  264. 2225 CPY XRU
  265. 2230 BCC WTB ;NOCH NICHT LETZTE SPALTE
  266. 2235 INC CNT ;ZEILENZAEHLER + 1
  267. 2240 CPX MPOS ;PR. AUF TEXTENDE
  268. 2245 BCC WTA ;NOCH NICHT TEXTENDE
  269. 2250 RTS
  270. 2300 ;
  271. 2305 ;      - KOORDINATENPAAR LESEN
  272. 2310 ;
  273. 2315 RKOORD JSR PKOM ;AUF KOMMA PRUEFEN
  274. 2320 STX ZSP ;ZAEHLER FUER KOORDINATEN
  275. 2325 JSR RBYTE ;BYTE-WERT LESEN
  276. 2330 CPX #40 ;PR. < 40 (X-KOORDINATE)
  277. 2335 BCS ILLERR ;NEIN - FEHLERMELDUNG
  278. 2340 LDY ZSP:STX XLO,Y ;WERT SPEICHERN
  279. 2345 JSR PRBYTE ;BYTE-WERT LESEN
  280. 2350 CPX #25 ;PR. < 25 (Y-K.)
  281. 2355 BCS ILLERR ;NEIN
  282. 2360 LDY ZSP:STX XLO+1,Y ;SPEICHERN
  283. 2365 RTS
  284. 2370 ;
  285. 2375 ILLERR JMP $B248 ;ILLEGAL Q. ERROR
  286. 2400 ;
  287. 2405 ;      - WINDOWPARAMETER & TEXT-
  288. 2410 ;        STRING LESEN
  289. 2411 ;
  290. 2420 POSREAD LDX #00 ;1.KOORDINATENPAAR
  291. 2425 JSR RKOORD+3 ;LESEN
  292. 2430 LDX #02:JSR RKOORD ;2. ''
  293. 2435 INC XRU ;(BESSER VERARBEITBAR)
  294. 2440 SEC:LDA XRU ;BREITE DES WINDOWS +1
  295. 2445 SBC XLO ;BERECHNEN
  296. 2450 BCC ILLERR ;<0 - FEHLER
  297. 2455 STA ZBR ;UND SPEICHERN
  298. 2460 TXA ;HOEHE DES WINDOWS + 1
  299. 2465 SBC YLO ;BERECHNEN
  300. 2470 BCC ILLERR:ADC #00:STA ZAN
  301. 2475 TAX ;HOEHE (IN X-REG.) MIT
  302. 2480 LDA #00 ;BREITE MALNEHMEN = LAENGE
  303. 2485 POA ADC ZBR ;DES EINGABETEXTES
  304. 2490 BCS ILLERR ;>255 - FEHLER
  305. 2495 DEX:BNE POA
  306. 2500 STA MPOS ;LAENGE SPEICHERN
  307. 2505 CLEAR LDY #00 ;TEXTSPEICHER
  308. 2510 LDA #32 ;LOESCHEN
  309. 2515 CLEA STA TEXTT,Y:INY:BNE CLEA
  310. 2600 ;
  311. 2605 ;      - STRING LESEN & SPEICHERN
  312. 2610 ;
  313. 2615 RSTRINGT LDA PTEXT+1 ;ZEIGER AUF
  314. 2620 LDX PTEXT+2 ;TEXTSPEICHER
  315. 2625 RSTRING STA POL ;ZEIGER FUER
  316. 2630 STX POH ;SPEICHERUNG D. STRINGS
  317. 2635 JSR C(null)T ;LETZTES ZEICHEN HOLEN
  318. 2640 CMP #"," ;PR. AUF KOMMA
  319. 2645 BNE RSTE ;NEIN - KEIN STRING FOLGT
  320. 2650 JSR CGET:JSR FRMEVL ;STRING LESEN
  321. 2655 JSR FRESTR ;& PARAMETER HOLEN
  322. 2660 LDY #00
  323. 2665 TAX ;LAENGE D. STRING IN X-REG.
  324. 2670 BEQ RSTE ;LAENGE = 0
  325. 2675 RSTB LDA (STZ),Y ;STRING IN
  326. 2680 STA (POL),Y ;SPEICHER (POL/H =
  327. 2685 INY ;ANFANGSADRESSE) VERSCHIEBEN
  328. 2690 DEX:BNE RSTB
  329. 2695 RSTE RTS
  330. 3000 ;
  331. 3005 ;   - TEXTSPEICHER
  332. 3010 ;
  333. 3015 TEXTT = *
  334.