;:sys36864
	;.opt oo
	*= $c000
;
;auto-checker
;nikolaus heusler 16.12.90
;XXXXXXXXXXXX XX/X XXXXXXXX XX
;
;automatischer syntax-check bei eingabe
;einer basic-zeile
;
	jmp hoch
addr	=*
	.word $a00c,$a00d	;end
	.word $a024,$a025	;restore
	.word $a028,$a029	;return
	.word $a02c,$a02d	;stop
	.word $a040,$a041	;cont
	.word $a044,$a045	;clr
	.word $a050,$a051	;new
	.word $a070,$a071	;len
	.word $a076,$a077	;asc
	.word $bb12	;divison by zero
	.word $b853	;fac = arg-fac
	.word $b854
	.word $b855
	.word $b856
	.word $b857
	.word $ab47	;zeichenausgabe
	.word $a871	;run
	.word $a872
	.word $a873
	.word $a874
	.word $a875
	.word $a884,$a885	;gosub
	.word $a058,$a059	;usr
	.word $a95d,$a95e	;on
	.word $a938,$a939	;if
	.word $a949,$a94a	;rem
	.word $a74d,$a74e	;for
	.word $a779,$a77a	;for
	.word $a7a0,$a7a1	;for
	.word $ad28,$ad29	;next
	.word $ad76,$ad77	;next
	.word $aa91,$aa92	;cmd
	.word $ac07,$ac08	;read
	.word $ab8e,$ab8f	;get
	.word $ab81	;get
	.word $abcf,$abd0	;input
	.word $abd2,$abd3	;input
	.word $abae,$abaf	;input#
	.word $b2fd,$b2fe	;array
	.word $b74b	;mid$
	.word $b3b6	;deffn
	.word 0	;endemarke
data	=*
	.word $ab36	;test ueberfluess. zeichen
	.word $ab36
	.word $ab36
	.word $ab36
	.word $ab36
	.word $ab36
	.word $ab36
	.word $b7ad	;val
	.word $b7ad
	.byt $24
	.byt $a9
	.byt $00
	.byt $85
	.byt $61
	.byt $60
	.byt $2c
	.byt $f0
	.byt $03
	.byt $20
	.byt $6b
	.byt $a9
	.word $a8a0	;goto
	.word $b39e	;pos
	.word inter
	.word $a940	;ausdruck wahr
	.word inter
	.word $a757	;for ausfuehren
	.word $a792	;for parameter testen
	.word state
	.word $ad7d	;naechste variable fuer next
	.word state
	.word $aa97	;print ausfuehren
	.word $ac15	;read
	.word $ac06	;read
	.byt $0b
	.word $a3b6	;direktmodustest aus
	.word $ac06	;read
	.word $ac06	;read
	.word $b30f	;array
	.byt $24
	.byt $2c
	.byt 123	;sicherheitsbyte
;rucksack fuer $ac18 - read
way1	jsr 121
	beq okay
	cmp #":"
	beq okay
	cmp #","
	beq komma
okay	rts	;befehl nicht ausfuehren
komma	jsr 115
	jmp $ac15	;noch eine variable
	.byt -1	;endekennz.
;rucksack fuer $b3f7 - fn
way2	jsr $aef1	;term in klammern
	jmp $ad8d	;numerisch
	.byt -1	;endekennz.
new	brk	;flag new-befehl ausfuehren
oldiin	.word $e38b
oldigone	.word $a7e4
save	.word 0,0,0,0,0
adr	.word 0
	brk
txt1	.byt 13
	.byte "syntax-test aus"
	.byt 13,0
txt2	.byt 13
	.byte "syntax-test v1 ein"
	.byt 13,13
	.byte "(c) nikolaus heusler 12.90"
	.byt 13,0
modify	jsr poke
	lda #$60	;rts
	sta $a876	;run
	sta $b827	;poke
	sta $a8a3	;goto
	sta $e12d	;sys
	sta $a6bb	;list
	sta $b83c	;wait
	sta $aa83	;cmd
	sta $e1c1	;open
	sta $e1ca	;close
	sta $e16f	;load
	sta $e159	;save
	lda #$4c	;jmp
	sta $a883	;gosub
	sta $a937	;if
	sta $a74c	;for
	sta $a778	;for
	sta $a79f	;for
	sta $ad27	;next
	sta $ad75	;next
	sta $aa90	;cmd
	sta $ac06	;read
	sta $ab8d	;get
	sta $abd1	;input
	sta $abad	;input#
	sta $b2fc	;array
	lda #$ea	;nop
	sta $ab7b	;get
	sta $ab7c	;direktmodustest aus
	sta $ab7d	;get
	ldx #0	;read-rucksack
copy1	lda way1,x
	cmp #-1
	beq cend1
	sta $ac18,x
	inx
	bne copy1
cend1	ldx #0	;fn-rucksack
copy2	lda way2,x
	cmp #-1
	beq cend2
	sta $b3f7,x
	inx
	bne copy2
cend2	ldx #0
copy4	lda #$58
	sta $a052,x
	lda #$bc
	inx	;numerische funktionen
	sta $a052,x	;auf abs umlenken
	inx
	cpx #$1c
	bcc copy4
	lda new
	bne hatnew
	inc new
	jsr $a644	;new-befehl
hatnew	jsr $a660	;clr
	jmp $e39d	;fertig
rom	sei
	lda oldigone
	ldy oldigone+1
	sta $308
	sty $309	;vektor befehl ausfuehren
	lda oldiin
	ldy oldiin+1
	sta $300
	sty $301	;vektor direktmodus
	lda #55
konf	sta 1
	cli
ret	rts
ram	sei
	lda $308
	cmp #<igone
	beq sat
	sta oldigone
	lda $309
	sta oldigone+1
	lda $300
	sta oldiin
	lda $301
	sta oldiin+1
	lda #<igone
	ldy #>igone
	sta $308
	sty $309
	lda #<iin
	ldy #>iin
	sta $300
	sty $301
sat	lda #53
	bne konf
poke	ldx #0
poklp	txa
	asl
	tay
	lda addr,y
	sta 2
	lda addr+1,y
	beq endpok
	sta 3
	ldy #0
	lda data,x
	sta (2),y
	inx
	bne poklp
endpok	lda data,x
	cmp #123	;sicherheitsbyte
	beq ret
	jmp 64738	;reset bei stoerunmg
hoch	lda $302
	cmp #<line
	bne an
	ldx #9
copy3	lda save,x
	sta $302,x
	dex
	bpl copy3
	jsr rom
	lda #<txt1
	ldy #>txt1
	jmp $ab1e
an	ldy #9
copy5	lda $302,y
	sta save,y
	dey
	bpl copy5
	lda #<line
	ldx #>line
	sta $302
	stx $303
	iny
	sty 2
	sty 4
	lda #160
	sta 5
	lda #224
	sta 3
	ldx #32
copy6	lda (4),y
	sta (4),y
	lda (2),y
	sta (2),y
	iny
	bne copy6
	inc 5
	inc 3
	dex
	bne copy6
	lda #<txt2
	ldy #>txt2
	jsr $ab1e
	jmp modify
line	jsr $a560	;eingabe lesen
	stx $7a
	sty $7b
	jsr 115
	tax
	beq line	;puffer leer
	ldx #-1
	stx $3a
	bcc zif	;ziffer, dann programmzeile
	jsr rom
	jsr $a579	;crunch
	jmp $a7e4	;direktmodus-befehle
zif	jsr $a96b	;ziffern wandeln
	jsr $a579	;crunch
	sty adr
	lda $14
	sta adr+1
	lda $15
	sta adr+2
	jsr ram
	lda #-1
	sta $7a
	lda #1
	sta $7b
igone	jsr $a663	;clr
	jsr 115
	jsr test0
state	ldy #0
	lda ($7a),y
	bne nonull
null	jsr rom
	lda adr+1
	sta $14
	lda adr+2
	sta $15
	jsr $a660	;clall und clr
	ldy adr
	jmp $a4a2	;basic-zeile bearbeiten
test0	tay	;zeilenende
	beq jnull
	cmp #":"
	beq igone
	sec
inter	sbc #128
	bcc kl
	cmp #$23
	bcs function
	asl
	tay
	lda $a00d,y
	pha	;befehladressen ablegen
	lda $a00c,y
	pha
	jmp 115
jnull	rts
nonull	cmp #":"
	beq igone
	jsr rom
	jmp $af08
kl	jsr $a9a5	;let ausfuehren
	jmp state
function	cmp #$4b	;go-token
	bne iin
	jsr 115
	lda $a4	;to
	jmp $aeff	;zeichen testen
iin	txa
	pha
	jsr rom
	pla
	tax
	jmp ($300)
