
; CygnusEd MegaPatch for PC style editing...
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

; This patch works for V3.5 of CeD...

o:	move.l		4.w,a6
	lea		name,a1
	jsr		-408(a6)
	move.l		d0,gfxbase

	move.l		gfxbase(pc),a1
	move.l		-58(a1),normal+2
	move.l		#mytext,-58(a1)
	move.l		-394(a1),normal2+2
	move.l		#mytext2,-394(a1)

	move.l		4.w,a6
	lea		name2,a1
	jsr		-408(a6)
	move.l		d0,a6

wait:	moveq		#25,d1
	jsr		-198(a6)
	btst		#10,$dff016
	bne.s		wait

	move.l		a6,a1
	move.l		4.w,a6
	jsr		-414(a6)

	move.l		gfxbase(pc),a1
	move.l		normal+2,-58(a1)	
	move.l		normal2+2,-394(a1)	
	jsr		-414(a6)
	moveq		#0,d0
	rts

;-------------------------------------------------------

; Text(); Patch

mytext:	tst.l		thisRastPort
	bne		found

	move.l		a0,-(sp)
	cmpi.b		#";",(a0)+
	bne.s		notfound
	cmpi.b		#"$",(a0)+
	bne.s		notfound
	cmpi.b		#":",(a0)+
	bne.s		notfound
	cmpi.b		#")",(a0)
	bne.s		notfound
	move.l		(sp)+,a0
	move.l		a1,thisRastPort
	bra		found
notfound:
	move.l		(sp)+,a0
	bra		normal

found:	cmpa.l		thisRastPort(pc),a1
	bne		normal

	move.b		#7,24(a1)		;set write mask....

	movem.l		d0-d1/a0-a1,-(sp)	;make white background...
	moveq		#2,d0
	jsr		-348(a6)
	movem.l		(sp),d0-d1/a0-a1
	move.l		(a1),a0
	move.l		8(a0),a0
	subq.w		#7,20(a0)
	movem.l		(sp),d0-d1/a0-a1
	jsr		-42(a6)
	movem.l		(sp),d0-d1/a0-a1
	move.l		(a1),a0
	move.l		8(a0),a0
	addq.w		#7,20(a0)
	movem.l		(sp),d0-d1/a0-a1

	move.w		d0,numchars
	beq		black
	
	cmpi.b		#";",(a0)
	beq.L		red
	cmpi.b		#"*",(a0)
	beq.L		red

;label   memo   opcode ;remark
;black   blue   black  red

	move.l		a1,-(sp)
	lea		mystring,a1
	subq.w		#1,d0
copy	move.b		(a0)+,(a1)+
	dbf		d0,copy
	clr.b		(a1)+
	clr.b		(a1)
	move.l		(sp)+,a1
	lea		mystring,a0

	move.b		(a0),d1
	beq		black		;eof in symbolscan...
	cmpi.b		#9,d1
	beq.s		nosymbol
	cmpi.b		#32,d1
	beq.s		nosymbol

search	move.b		(a0)+,d1
	beq		black		;eof in symbolscan...
	cmpi.b		#9,d1
	beq		skip
	cmpi.b		#32,d1
	beq		skip
	cmpi.b		#":",d1
	bne		search
skip:	move.l		a0,d0
	move.l		a0,stringstart
	sub.l		#mystring,d0
	lea		mystring,a0
	movem.l		d0/a0/a1,-(sp)
	moveq		#1,d0			;black symbol...
	jsr		-342(a6)
	movem.l		(sp),d0/a0/a1
	sub.w		d0,numchars
	jsr		normal
	movem.l		(sp)+,d0/a0/a1
	bra		cont2

nosymbol:
	move.b		(a0)+,d1
	beq		black		;eof in symbolscan...
	cmpi.b		#9,d1
	beq		nosymbol
	cmpi.b		#32,d1
	beq		nosymbol
	lea		-1(a0),a0
	move.l		a0,d0
	move.l		a0,stringstart
	sub.l		#mystring,d0
	lea		mystring,a0
	sub.w		d0,numchars
	movem.l		d0/a0/a1,-(sp)
	bsr		normal
	movem.l		(sp)+,d0/a0/a1

cont2:	move.l		a1,-(sp)		;blue rest...
	move.l		stringstart,a0
	lea		datablue,a1
	bsr		checkforkeyword		;trashes a1
	cmpi.w		#6,d0
	beq		bluedatafound

	move.l		stringstart,a0
	lea		datagreen,a1
	bsr		checkforkeyword		;trashes a1
	cmpi.w		#6,d0
	bne		scancomments

greendatafound:
	moveq		#5,d0
bluedatafound:
	move.l		(sp),a1
	move.l		a0,-(sp)
	jsr		-342(a6)
	move.l		(sp)+,a0
	move.l		(sp),a1

	move.l		a0,d0
	sub.l		stringstart(pc),d0
	move.l		a0,-(sp)
	move.l		stringstart(pc),a0
	move.l		(sp)+,stringstart
	sub.w		d0,numchars
	movem.l		d0/a0/a1,-(sp)
	bsr		normal
	movem.l		(sp)+,d0/a0/a1
; move.l (sp)+,a1
; bra sss

scancomments:
	move.l		(sp)+,a1

	movem.l		d0/d1/a0/a1,-(sp)
	moveq		#1,d0
	jsr		-342(a6)
	movem.l		(sp)+,d0/d1/a0/a1

sss:	move.l		stringstart,a0
	move.w		numchars,d0
	ble		skip33
	bsr		normal
skip33	movem.l		(sp)+,d0-d1/a0-a1
	rts

;-------------------------------------------------------

;out: d0=color a0=upto this char

checkforkeyword:
	move.b		(a0)+,d0
	beq.s		nokeyword
	cmpi.b		#32,d0
	beq.s		checkforkeyword
	cmpi.b		#9,d0
	beq.s		checkforkeyword
	lea		-1(a0),a0
	move.l		a0,-(sp)

scanword:
	move.l		(sp),a0
scanletters:
	move.b		(a1)+,d1
	bmi		nokey
	beq		wordok	

	move.b		(a0)+,d0
	andi.b		#%11011111,d0
	cmp.b		d0,d1
	beq		scanletters
seek	tst.b		(a1)+
	bne		seek
	bra		scanword

nokey:	addq.l		#4,sp
nokeyword:
	move.l		stringstart(pc),a0
	moveq		#1,d0
	rts

wordok:	addq.l		#4,sp
	cmpi.b		#".",(a0)
	bne		noext
	lea		1(a0),a0
seek2	move.b		(a0)+,d0
	beq		noext2
	cmpi.b		#32,d0
	beq		noext
	cmpi.b		#9,d0
	beq		noext
	bra		seek2
noext:	moveq		#6,d0
	rts
noext2:	lea		-1(a0),a0
	moveq		#6,d0
	rts

;--------------------------------------
black	moveq		#1,d0
	bra.s		cont
red	moveq		#7,d0
cont	jsr		-342(a6)
	movem.l		(sp)+,d0-d1/a0-a1
normal:	jmp		$80000000

; ScrollRaster(); Patch

mytext2:	cmpa.l		thisRastPort(pc),a1
;		bne.s		normal2
		move.b		#7,24(a1)
normal2:	jmp		$80000000

;-----------------------------------------------------------

name:		dc.b	"graphics.library",0
name2:		dc.b	"dos.library",0
		even

gfxbase:	dc.l	0
thisRastPort:	dc.l	0
stringstart:	dc.l	0
numchars:	dc.w	0
mystring:	blk.b	256,0

datagreen:	dc.b	"MACRO",0,"ENDM",0,"INCLUDE",0,"INCDIR",0
		dc.b	"SET",0,"DC",0,"BLK",0,"DS",0,"RSRESET",0,"RS",0
		dc.b	"SECTION",0,"EQU",0,"ENDC",0
		dc.b	"INCBIN",0,"EVEN",0,"ODD",0,"CNOP",0,"END",0
		dc.b	-1

datablue:	DC.B	"ADDA",0,"ADDI",0,"ADDQ",0,"ADDX",0,"ADD",0,"CLR",0
		DC.B	"CMPA",0,"CMPI",0,"CMPM",0,"CMP",0,"DIVS",0,"DIVU",0
		DC.B	"EXT",0,"MULS",0,"MULU",0,"NEG",0,"NEGX",0
		DC.B	"SUBA",0,"SUBI",0,"SUBQ",0,"SUBX",0,"TST",0,"SUB",0

		DC.B	"ABCD",0,"NBCD",0,"SBCD",0,"ANDI",0,"AND",0
		DC.B	"EORI",0,"NOT",0,"ORI",0,"TAS",0,"ASL",0,"OR",0,"EOR",0
		DC.B	"ASR",0,"LSL",0,"LSR",0,"ROL",0,"ROR",0,"ROXL",0
		DC.B	"ROXR",0

		DC.B	"BCHG",0,"BCLR",0,"BSET",0,"BTST",0,"EXG",0
		DC.B	"LEA",0,"LINK",0,"MOVEA",0,"MOVEM",0
		DC.B	"MOVEP",0,"MOVEQ",0,"PEA",0,"SWAP",0,"UNLK",0,"MOVE",0

		dc.b	"BCC",0,"BCS",0,"BEQ",0,"BGE",0,"BGT",0,"BHI",0,"BLE",0
		dc.b	"BLS",0,"BLT",0,"BMI",0,"BNE",0,"BPL",0,"BVC",0,"BVS",0

		dc.b	"SCC",0,"SCS",0,"SEQ",0,"SGE",0,"SGT",0,"SHI",0,"SLE",0,"ST",0
		dc.b	"SLS",0,"SLT",0,"SMI",0,"SNE",0,"SPL",0,"SVC",0,"SVS",0,"SF",0

		dc.b	"DBCC",0,"DBCS",0,"DBEQ",0,"DBGE",0,"DBGT",0,"DBHI",0,"DBLE",0,"DBF",0
		dc.b	"DBLS",0,"DBLT",0,"DBMI",0,"DBNE",0,"DBPL",0,"DBVC",0,"DBVS",0

		dc.b	"BRA",0,"BSR",0,"CHK",0,"JMP",0,"JSR",0,"NOP",0
		DC.B	"RESET",0,"RTE",0,"RTR",0,"RTS",0,"STOP",0,"TRAP",0
		dc.b	"TRAPV",0

		dc.b	-1
