mirror of
https://github.com/antoinevignau/source.git
synced 2025-01-08 13:29:45 +00:00
1 line
4.7 KiB
ArmAsm
1 line
4.7 KiB
ArmAsm
|
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,<EFBFBD>,#TNPHON,else1 ; if (cc < Scphon.ph_nphon) {
; {
sta [endptr] ; *endptr++ = (UCHAR)cc;
incl endptr
if_ x,<EFBFBD>,#TE_LRIND,loop ; if (cc == TE_LRIND) {
; {
shortm
while_ [blkptr],<EFBFBD>,#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. <09><>MSL 8/3/89 |||
; v
; decl blkptr ; --blkptr;
; } ; }
bra loop
; }
else1 if_ x,<,Tlexmingrm,iszero ; } else if (cc < lp->lx_mingrm)
; break;
if_ x,<EFBFBD>,#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
;
|