Difference between revisions of "GSREAD"

From BeebWiki
Jump to: navigation, search
m (table order)
m (grammar)
Line 8: Line 8:
 
| C || align="left" | undefined || align="left" | 0=Character valid<br>1=End of string reached
 
| C || 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" | Next 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"
 
|- 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 17: Line 17:
 
|}
 
|}
  
Returns a character from a string found using [[GSINIT]].  The string may be enclosed in double quotes (<tt>"</tt>) 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.
+
Returns one character at a time from a string found using [[GSINIT]].  The string may be enclosed in double quotes (<tt>"</tt>) 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.
 
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 unless the closing <tt>"</tt> is reached; then C=1 and A=&0D is returned.  [[VDU 13|CR]] encountered before the closing <tt>"</tt> causes error &FD, '''Bad string'''.
+
If the string began with <tt>"</tt> then a character is returned with C=0 unless the closing <tt>"</tt> has been reached; then C=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 unless CR or space (if C=0 to GSINIT), or CR only (if C=1 to GSINIT) is reached; then C=1 and A=&0D.
+
Otherwise a character is returned with C=0 unless CR, or also space if GSINIT was called with C=0, has been reached; then C=1 and A=&0D is returned.
  
(?&F2,?&F3)+Y points to the next character unless C=1, in which case GSREAD skips any spaces following the end of the string.
+
(?&F2,?&F3)+Y is left pointing to the next character unless C=1, in which case GSREAD skips any spaces following the end of the string.
  
 
;Note
 
;Note

Revision as of 00:06, 12 January 2019

Read character from string

Specification

 6502  On entry: On exit:
C undefined 0=Character valid
1=End of string reached
A undefined Current character of string; =&0D if end of string reached
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 C=1 and A=&0D is returned. CR encountered before the closing " causes error &FD, Bad string.

Otherwise a character is returned with C=0 unless CR, or also space if GSINIT was called with C=0, has been reached; then C=1 and A=&0D is returned.

(?&F2,?&F3)+Y is left pointing to the next character unless C=1, in which case GSREAD skips any spaces following the end of the string.

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)

Regregex (talk) 18:31, 11 January 2019 (CET)