
		CASE	OBJECT 
;------------------------------------------
;
; Equates from procedure Tlexcmp
;
;------------------------------------------
TFLAGSIND	equ $ff
;------------------------------------------
;
; Equates from procedure Tlexphon
;
;------------------------------------------
TNPHON	equ 58
TE_LRIND	equ 4

;-----------------------------------------------
;
;   Imported addresses
;
;-----------------------------------------------

	IMPORT	Tlexblkptr
	IMPORT	Tlexgramtab
	IMPORT	Tlexmingrm
	IMPORT	Tlexstrip
	IMPORT	Tscendptr
*****************************************************************
*
*   LEXASM.SRC - Various routines from lex.src I hand-coded
*
*   Robert A. Hearn
*
*****************************************************************

	LOAD 'macros.dump'

*****************************************************************

Tlexcmp	PROC		EXPORT


		input	str1:l,str2:l
		output   result:w
		begin
		lda #0
		shortm

loop	lda [str2]
		beq done
		cmp [str1]
		bne different
		longm
		inc str1
		inc str2
		shortm
		bra loop

different	cmp #TFLAGSIND
		beq done
		cmp [str1]
		bmi done
		longm
		moveword #-1,result
		bra really

done	lda [str1]
		longm
		sta result
really	return

		ENDP

*****************************************************************

;lexstrip START
;
;IW_COMMON	  gequ 1
;
;		 input eptr:l
;
;		 begin
;
;		 dec eptr
;		 dec eptr
;		 stz Sctag
;
;		 lda [eptr]
;		 tax
;		 and #$ff
;		 cmp #TFLAGSIND
;		 beq goahead
;		 moveword #IW_COMMON,Scfdecomp
;		 brl done
;
;goahead  lda #0
;		 sta [eptr]
;		 txa
;		 xba
;		 and #$ff
;		 sta Scfdecomp
;
;done	 return
;
;		 END

*****************************************************************

Tlexphon	PROC		EXPORT


		local endptr:l,blkptr:l,gramtab:l

		begin

		movelong Tscendptr,endptr						; endptr = Tscendptr;
		movelong Tlexblkptr,blkptr						; blkptr = lp->lx_blkptr;
loop	lda [blkptr]									; while (cc = ctoi(*blkptr++)) {
		incl blkptr
		and #$ff
		tax
		jeq iszero
;		{
			if_ x,³,#TNPHON,else1						;		if (cc < Scphon.ph_nphon) {
;			{
				sta [endptr]							;			*endptr++ = (UCHAR)cc;
				incl endptr
				if_ x,­,#TE_LRIND,loop				;			if (cc  == TE_LRIND) {
;				{
					shortm
					while_ [blkptr],­,#TFLAGSIND		;				while ((cc = ctoi(*blkptr++)) != TFLACSIND) {
;					{
						sta [endptr]					;					*endptr++ = (UCHAR)cc;
						longm
						incl blkptr
						incl endptr
						shortm
;					}									;				}
					endwhile_
					longm
;
;					This is not needed, since blkptr is incremented AFTER the test ^^^ in
;					|	the while loop.	ÑÑMSL 8/3/89							   |||
;				    v
;					decl blkptr							;				--blkptr;
;				}										;			}
				bra loop
;			}
else1		if_ x,<,Tlexmingrm,iszero					;		} else if (cc < lp->lx_mingrm)
														;			break;
			if_ x,³,#TFLAGSIND,else2					;		else if (cc < TFLAGSIND) {
;			{
				movelong Tlexgramtab,gramtab			;			*endptr++ = lp->lx_gramtab[cc][0];
				txa										;			*endptr++ = lp->lx_gramtab[cc][1];
				asl a
				tay
				moveword [gramtab]:y,[endptr]
				incl endptr
				incl endptr
				brl loop
;			}											;		} else {
else2	;	{														*endptr++ = (UCHAR)cc;
				txa										;			*endptr++ = *blkptr++;
				sta [endptr]				; this is safe
				incl endptr
				moveword [blkptr],[endptr]	; because this 
				incl blkptr					; writes the next 
				incl endptr					; byte, & this 
;			}								; is safe too		}
			brl loop						; because ...
;		}												;	}
iszero	lda #0											;	*endptr = 0;
		shortm								; this will 
		sta [endptr]						; always write 
		longm								; one more byte.
		movelong endptr,Tscendptr						; 	Tscendptr = endptr;
		decl blkptr										; 	lp->lx_blkptr = blkptr - 1;
		movelong blkptr,Tlexblkptr

		pushlong endptr									; 	lexstrip(endptr);
		call Tlexstrip
		ply
		ply

		return

		ENDP

*****************************************************************

;Tlexbinnext   START
;
;NUMBACK  gequ 16
;
;		 output result:w
;		 local blkptr:l,temp:w,tptr:l
;
;		 begin
;
;		 movelong Tlexblkptr,blkptr
;
;		 lda [blkptr]
;		 inc blkptr
;		 and #$ff
;		 bne ok
;		 call Tlexnextblk
;		 sta result
;		 brl done
;
;ok	   cmp Tlexminbsd
;		 bpl else
;		 sec
;		 sbc #TNPHON
;		 sta temp
;		 lda Tscendptr
;		 sbc temp
;		 sta Tscendptr
;		 lda #NUMBACK-1
;		 cmp temp
;		 bne around
;		 lda [blkptr]
;		 inc blkptr
;		 and #$ff
;		 sec
;		 sbc #TNPHON
;		 sta temp
;		 lda Tscendptr
;		 sbc temp
;		 sta Tscendptr
;		 bra around
;
;else	 tax
;		 asl a
;		 asl a
;		 tay
;		 movelong Tlexdelta,tptr
;		 pushlong [tptr]:y
;		 txy
;		 movelong Tlexbs,tptr
;		 lda [tptr],y
;		 and #$ff
;		 sta temp
;		 pushword Tscendptr+2
;		 lda Tscendptr
;		 sec
;		 sbc temp
;		 pha
;		 call strecpy
;		 ply
;		 ply
;		 ply
;		 ply
;		 sta Tscendptr
;		 stx Tscendptr+2
;
;around   movelong blkptr,Tlexblkptr
;		 call Tlexphon
;		 moveword #1,result
;
;done	 return
;
;		 END
		END

