getstr: xor a ld c,a ;c = length counter ld (op1),a ;mode 0 = CAPS getstr1: ;ix = place to put string ;b = max legnth push bc push ix B_CALL getcsc pop ix pop bc or a jr z,getstr1 cp 09h jr z,donestr ;enter pressed cp 0Fh push af call z,clear_all_input pop af jr z,getstr1 cp 30h push af call z,next_keytable pop af jr z,getstr1 cp 38h push af call z,del ;del pressed pop af jr z,getstr1 ld e,a ld d,0 call get_keytable add hl,de ld a,(hl) or a jr z,getstr1 ld (ix+0),a inc ix inc c push bc push ix B_CALL vputmap pop ix pop bc djnz getstr1 donestr: ld a,c or a jr z,getstr1 ;ya had to input SOMETHING! xor a ld (ix+0),a inc c ;c ends up returning the total ;entered characters. ret ;done getting string del: ld a,c or a ret z ;nothing to delete! inc b ;one more to enter dec c ;one less entered dec ix ;decrement ptr ld a,(ix+0) ;here comes the fun part ld l,a ld h,0 add hl,hl ;a*2 add hl,hl ;a*4 add hl,hl ;a*8 push bc push ix B_CALL sfont_len ;b = num pixels wide chr is ld d,b ;for some reason its b, not a (?) pop ix pop bc xor a ld (ix+0),a ld a,(pencol) sub d ;a - length ld (pencol),a push af push bc push ix ld b,d dec b del_loop: ld a,20h B_CALL vputmap djnz del_loop pop ix pop bc pop af ld (pencol),a ret clear_all_input: call del ld a,c or a jr nz,clear_all_input ret get_keytable: push af ld a,(op1) ld hl,keytable_caps or a jr z,done_keytable_check ld hl,keytable_mini dec a jr z,done_keytable_check ld hl,keytable_num dec a jr z,done_keytable_check ld hl,keytable_caps done_keytable_check: pop af ret next_keytable: ld a,(op1) inc a cp 3 jr c,no_reset_keytable xor a no_reset_keytable: ld (op1),a ret keytable_caps: db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 22h db 57h db 52h db 4Dh db 48h db 00h db 00h db 3Fh db 21h db 56h db 51h db 4Ch db 47h db 00h db 00h db 3Ah db 5Ah db 55h db 50h db 4Bh db 46h db 43h db 00h db 20h db 59h db 54h db 4Fh db 4Ah db 45h db 42h db 00h db 00h db 58h db 53h db 4Eh db 49h db 44h db 41h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h keytable_mini: db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 22h db 77h db 72h db 6Dh db 68h db 00h db 00h db 3Fh db 21h db 76h db 71h db 6Ch db 67h db 00h db 00h db 3Ah db 7Ah db 75h db 70h db 6Bh db 66h db 63h db 00h db 20h db 79h db 74h db 6Fh db 6Ah db 65h db 62h db 00h db 00h db 78h db 73h db 6Eh db 69h db 64h db 61h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h keytable_num: db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 2Bh ;+ db 2Dh ;- db 2Ah ;* db 2Fh ;/ db 5Eh ;^ db 00h db 00h db 3Fh ;? db 33h ;3 db 36h ;6 db 39h ;9 db 29h ;) db 00h db 00h db 00h db 2Eh ;. db 32h ;2 db 35h ;5 db 38h ;8 db 28h ;( db 00h db 00h db 00h db 30h ;(space) db 31h ;1 db 34h ;4 db 37h ;7 db 2Ch ;, db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h db 00h