Difference between revisions of "GSREAD"
m (grammar) |
(X preserved) |
||
Line 6: | Line 6: | ||
| 6502 || align="left" | '''On entry:''' || align="left" | '''On exit:''' | | 6502 || align="left" | '''On entry:''' || align="left" | '''On exit:''' | ||
|- align="center" valign="top" | |- align="center" valign="top" | ||
− | | | + | | Cy || align="left" | undefined || align="left" | 0=Character valid<br>1=End of string reached |
|- align="center" valign="top" | |- align="center" valign="top" | ||
| A || align="left" | undefined || align="left" | Current character of string; =&0D if end of string reached | | A || align="left" | undefined || align="left" | Current character of string; =&0D if end of string reached | ||
+ | |- align="center" valign="top" | ||
+ | | X || align="left" | undefined || align="left" | preserved | ||
|- align="center" valign="top" | |- align="center" valign="top" | ||
| Y || align="left" | Offset of current character || align="left" | Offset of next character | | Y || align="left" | Offset of current character || align="left" | Offset of next character | ||
Line 21: | Line 23: | ||
GSREAD parses the character sequence at the position given by (?&F2,?&F3)+Y and scans forward. | GSREAD parses the character sequence at the position given by (?&F2,?&F3)+Y and scans forward. | ||
− | If the string began with <tt>"</tt> then a character is returned with C=0 unless the closing <tt>"</tt> has been reached; then | + | If the string began with <tt>"</tt> then a character is returned with C=0 unless the closing <tt>"</tt> has been reached; then Cy=1 and A=&0D is returned. [[VDU 13|CR]] encountered before the closing <tt>"</tt> causes error &FD, '''Bad string'''. |
+ | |||
+ | Otherwise a character is returned with Cy=0 unless CR, or also space if GSINIT was called with Cy=0, has been reached; then Cy=1 and A=&0D is returned. | ||
− | + | (?&F2,?&F3)+Y is left pointing to the next character unless Cy=1, in which case GSREAD skips any spaces following the end of the string. | |
− | + | It is safe to call GSREAD at least once following GSINIT, and repeatedly on reaching CR. | |
;Note | ;Note |
Revision as of 15:12, 3 February 2019
Read character from string
Specification
6502 | On entry: | On exit: |
Cy | undefined | 0=Character valid 1=End of string reached |
A | undefined | Current character of string; =&0D if end of string reached |
X | undefined | preserved |
Y | Offset of current character | Offset of next character |
?&F2 | LSB of start of array | preserved |
?&F3 | MSB of start of array | preserved |
Returns one character at a time from a string found using GSINIT. The string may be enclosed in double quotes (") in which case spaces in the string are preserved. The string may also contain control codes and high-order characters encoded with an escape sequence.
GSREAD parses the character sequence at the position given by (?&F2,?&F3)+Y and scans forward.
If the string began with " then a character is returned with C=0 unless the closing " has been reached; then Cy=1 and A=&0D is returned. CR encountered before the closing " causes error &FD, Bad string.
Otherwise a character is returned with Cy=0 unless CR, or also space if GSINIT was called with Cy=0, has been reached; then Cy=1 and A=&0D is returned.
(?&F2,?&F3)+Y is left pointing to the next character unless Cy=1, in which case GSREAD skips any spaces following the end of the string.
It is safe to call GSREAD at least once following GSINIT, and repeatedly on reaching CR.
- Note
The character returned by GSINIT is not necessarily the character returned by the first call to GSREAD.
Calling from BBC BASIC
Entry points
- 6502 Entry Address: &FFC5 (I/O processor only)