home *** CD-ROM | disk | FTP | other *** search
/ 64'er Special 12 / 64er_Magazin_Sonderheft_12_86-12_1986_Markt__Technik_de_Side_A.d64 / window.src (.txt) < prev   
Commodore BASIC  |  2022-10-26  |  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.