This Technical Note describes a problem using Control-^ to change the text cursor with programs that use GETLN.
On the Apple IIGS, typing Control-^ changes the cursor to the next character typed. This feature works properly from the keyboard, but there is a problem when programs print the control sequence. Try entering the following from AppleSoft to demonstrate this problem:
NEW PRINT CHR$(30);"_"
It changes the cursor into a blinking underscore, as expected. But now enter the following:
12345 HOME LIST
You should see 2345 HOME, which demonstrates that the first character is ignored. This is a problem with GETLN, which AppleSoft uses to read each line of input. Even if your program does not use this routine, you should be aware of this problem since it will occur the next time another program uses GETLN.
Since changing the cursor works fine when done from the keyboard, the way to work around this problem is to have your program simulate the appropriate keypresses for GETLN.
301: CLD ; required by BASIC.SYSTEM 302: STA ($28),Y ; remove cursor if present 304: LDY $0300 ; get index into simulated-keys list 307: LDA $310,Y ; get a simulated keypress 30A: INC $0300 ; point to the next key for next time 30B: RTS ; return the key to GETLN 310: 9E DF 8D ; Ctrl-^, underscore, return 100 POKE 768,0:PRINT CHR$(4);"IN#A$301":REM Start getting simulated keys 110 INPUT "";A$ 120 PRINT CHR$(4);"IN#0":REM Get real keys again
From an assembly-language program, the equivalent of IN#A$301 is storing $01 and $03 in locations $38 and $39, while the equivalent of INPUT is JSR $FD6A (GETLN). (Store a harmless prompt character, like $80, into location $33 first.)
This and all of the other Apple II Technical Notes have been converted to HTML by Aaron Heiss as a public service to the Apple II community, with permission by Apple Computer, Inc. Any and all trademarks, registered and otherwise, are properties of their owners.