;Latin Translator v1.0
; By Michael Vincent - michael@radicalsoft.org
;
; Radical Software - http://www.radicalsoft.org
;
;
; (C)2000, by Michael Vincent. All rights reserved.
; This code is quite messy, and the commented part near the bottom was the original code
; that displays a screen of translations at a time. Completely useless, but I can't convince
; myself to delete it. :-)
; I removed backspace code instead of finishing it because I prefer
; to practice my typing rather than taking the easy way out if I make
; a mistake.
;
;
.nolist
#include "ion.inc"
#include "keypad.inc"
.list
;#define oldpos saferam1
#define inputlen saferam1+1
#define inputtxt saferam1+2
#ifdef TI83P
.org progstart-2
.db $BB,6D
#else
.org progstart
#endif
 ret
 jr nc,start
Title: .db "Latin Translator v1.0",0
start:
 ld hl,File
 rst 20h
 bcall(_chkfindsym)
 ret c
FirstDraw:
 bcall(_clrscrnfull)
 ld hl,0
 ld (pencol),hl
 ld hl,Title
 set textInverse,(iy+textFlags)
 bcall(_vputs)
 res textInverse,(iy+textFlags)
 ld hl,14*256
 ld (pencol),hl
 ld hl,menu1
 bcall(_vputs)
 ld hl,21*256
 ld (pencol),hl
 ld hl,menu2
 bcall(_vputs)
 ld hl,28*256
 ld (pencol),hl
 ld hl,menu3
 bcall(_vputs)
 ld hl,35*256
 ld (pencol),hl
 ld hl,menu4
 bcall(_vputs)
firstloop:
 ei \ halt
 bcall(_getcsc)
 or a
 jr z,firstloop
 cp sk1
 jp z,lookup
 cp sk2
 jp z,search
 cp sk3
 jr z,EnglishSearch
 cp sk4
 ret z
 jr firstloop
EnglishSearch:
 bcall(_clrscrnfull)
 ld hl,0
 ld (pencol),hl
 ld hl,Prompt
 set textInverse,(iy+textFlags)
 bcall(_vputs)
 res textInverse,(iy+textFlags)
 ld hl,11*256
 ld (pencol),hl
 xor a
 ld (inputlen),a
 ld ix,inputtxt
EngsearchInputLoop:
 ei \ halt
 bcall(_getcsc)
 or a
 jr z,EngsearchInputLoop
 cp skEnter
 jr z,Engsearchinputdone
; cp skDel
; jr z,Engsearchbackspace
 ld d,0
 ld e,a
 ld hl,chartable-10
 add hl,de
 ld a,(hl)
 cp '.'
 jr z,EngsearchInputLoop
 ld (ix),a
 inc ix
 push af
 ld a,(inputlen)
 inc a
 ld (inputlen),a
 pop af
 push ix
 bcall(_vputmap)
 pop ix
 jr EngsearchInputLoop
;Engsearchbackspace:
; ld a,(inputlen)
; or a
; jr z,EngsearchInputLoop
; dec a
; ld (inputlen),a
; ld a,(oldpos)
; ld (pencol),a
; ld hl,spacestr
; bcall(_vputs)
; ld a,(oldpos)
; ld (pencol),a
; dec ix
; jr EngsearchInputLoop
Engsearchinputdone:
 ld hl,File
 rst 20h
 bcall(_chkfindsym)
 ex de,hl
 inc hl \ inc hl
Engsearchsearchloop:
 xor a
 ld c,-1
 cpir
 ld a,(hl)
 cp $ff
 jp z,FirstDraw
 ld de,inputtxt
 ld a,(inputlen)
 ld b,a
EngsearchcmpStr:
 ld a,(de)
 ld c,(hl)
 cp c
 jr nz,Engsearchsearchloop
 inc hl
 inc de
 djnz EngsearchcmpStr
 ld a,(inputlen)
 ld d,0
 ld e,a
 or a
 sbc hl,de
 push hl
 bcall(_clrscrnfull)
 ld hl,0
 ld (pencol),hl
 ld hl,message2
 set textInverse,(iy+textFlags)
 bcall(_vputs)
 res textInverse,(iy+textFlags)
 ld hl,14*256
 ld (pencol),hl
 pop hl
 push hl
 bcall(_vputs)
 ld hl,20*256
 ld (pencol),hl
 pop hl
 ld c,-1
 xor a
 cpdr
 xor a
 ld c,-1
 cpdr
 inc hl \ inc hl
 bcall(_vputs)
 call Pause
 jp FirstDraw
search:
 bcall(_clrscrnfull)
 ld hl,0
 ld (pencol),hl
 ld hl,Prompt
 set textInverse,(iy+textFlags)
 bcall(_vputs)
 res textInverse,(iy+textFlags)
 ld hl,11*256
 ld (pencol),hl
 xor a
 ld (inputlen),a
 ld ix,inputtxt
searchInputLoop:
 ei \ halt
 bcall(_getcsc)
 or a
 jr z,searchInputLoop
 cp skEnter
 jr z,searchinputdone
; cp skDel
; jr z,searchbackspace
 ld d,0
 ld e,a
 ld hl,chartable-10
 add hl,de
 ld a,(hl)
 cp '.'
 jr z,searchInputLoop
 ld (ix),a
 inc ix
 push af
 ld a,(inputlen)
 inc a
 ld (inputlen),a
 pop af
 push ix
 bcall(_vputmap)
 pop ix
 jr searchInputLoop
;searchbackspace:
; ld a,(inputlen)
; or a
; jr z,searchInputLoop
; dec a
; ld (inputlen),a
; ld a,(oldpos)
; ld (pencol),a
; ld hl,spacestr
; bcall(_vputs)
; ld a,(oldpos)
; ld (pencol),a
; dec ix
; jr searchInputLoop
searchinputdone:
 ld hl,File
 rst 20h
 bcall(_chkfindsym)
 ex de,hl
 inc hl \ inc hl
searchsearchloop:
 xor a
 ld c,-1
 cpir
 ld a,(hl)
 cp $ff
 jp z,FirstDraw
 ld de,inputtxt
 ld a,(inputlen)
 ld b,a
searchcmpStr:
 ld a,(de)
 ld c,(hl)
 cp c
 jr nz,searchsearchloop
 inc hl
 inc de
 djnz searchcmpStr
 ld a,(inputlen)
 ld d,0
 ld e,a
 or a
 sbc hl,de
 push hl
 bcall(_clrscrnfull)
 ld hl,0
 ld (pencol),hl
 ld hl,message2
 set textInverse,(iy+textFlags)
 bcall(_vputs)
 res textInverse,(iy+textFlags)
 ld hl,14*256
 ld (pencol),hl
 pop hl
 push hl
 bcall(_vputs)
 ld hl,20*256
 ld (pencol),hl
 pop hl
 ld c,-1	;equivalent to ld c,255; I just like it better!
 xor a
 cpir
 bcall(_vputs)
 call Pause
 jp FirstDraw

lookup:
 bcall(_clrscrnfull)
 ld hl,0
 ld (pencol),hl
 ld hl,Prompt
 set textInverse,(iy+textFlags)
 bcall(_vputs)
 res textInverse,(iy+textFlags)
 ld hl,11*256
 ld (pencol),hl
 xor a
 ld (inputlen),a
 ld ix,inputtxt
InputLoop:
 ei \ halt
 bcall(_getcsc)
 or a
 jr z,InputLoop
 cp skEnter
 jr z,inputdone
; cp $38	;del
; jr z,backspace
 ld d,0
 ld e,a
 ld hl,chartable-10
 add hl,de
 ld a,(hl)
 cp '.'
 jr z,InputLoop
 ld (ix),a
 inc ix
 push af
 ld a,(inputlen)
 inc a
 ld (inputlen),a
 pop af
 push ix
 bcall(_vputmap)
 pop ix
 jr InputLoop
;backspace:
; ld a,(inputlen)
; or a
; jr z,InputLoop
; dec a
; ld (inputlen),a
; ld a,(oldpos)
; ld (pencol),a
; ld hl,spacestr
; bcall(_vputs)
; ld a,(oldpos)
; ld (pencol),a
; dec ix
; jr InputLoop
inputdone:
 xor a
 ld (ix),a
 ld a,(inputlen)
 inc a
 ld (inputlen),a
 ld hl,File
 rst 20h
 bcall(_chkfindsym)
 ex de,hl
 inc hl \ inc hl
searchloop:
 xor a
 ld c,-1
 cpir
 ld a,(hl)
 cp $ff
 jp z,FirstDraw
 ld de,inputtxt
 ld a,(inputlen)
 ld b,a
cmpStr:
 ld a,(de)
 ld c,(hl)
 cp c
 jr nz,searchloop
 inc hl
 inc de
 djnz cmpStr
 push hl
 bcall(_clrscrnfull)
 ld hl,0
 ld (pencol),hl
 ld hl,message
 set textInverse,(iy+textFlags)
 bcall(_vputs)
 res textInverse,(iy+textFlags)
 ld hl,14*256
 ld (pencol),hl
 pop hl
 bcall(_vputs)
 call Pause
 jp FirstDraw
Pause:
 ei \ halt
 bcall(_getcsc)
 or a
 jr z,Pause
 ret
; inc hl
; inc hl
; ld (curpointer),hl
; call DspPge
;MainLoop:
; ei
; halt
; bcall(_getcsc)
; cp skMode
; ret z
; cp skDown
; jr nz,MainLoop
;DspPge:
; ld hl,(curpointer)
; push hl
; bcall(_clrlcdfull)
; ld a,-6
; ld (penrow),a
; pop hl
; ld b,10
;disploop:
; xor a
; ld (pencol),a
; ld a,(penrow)
; add a,6
; ld (penrow),a
; xor a
; ld c,-1
; cpir
; ld a,(hl)
; cp $ff
; ret z
; push hl
; bcall(_vputs)
; ld hl,strng
; bcall(_vputs)
; pop hl
; xor a
; ld c,-1
; cpir
; push hl
; bcall(_vputs)
; pop hl
; djnz disploop
; ld (curpointer),hl
; jp MainLoop
File:
 .db 6,"ZLATIN",0,0
message:
 .db "English Translation:",0
message2:
 .db "Match Found!",0
spacestr:
 .db "   ",0
Prompt:
 .db "Enter Latin:",0
menu1:
 .db "1.  Latin Translator",0
menu2:
 .db "2.  Latin Search",0
menu3:
 .db "3.  English Search",0
menu4:
 .db "4.  Exit",0
;strng:
; .db " -",0
 .db "................."
 .db "................."
chartable:
 .db ".wrmh."
 .db "...vqlg...zupkfc"
 .db ". ytojebx.xsnida"
 .db "................"
 .db "................"
.end
