-; Convert characters to screen codes
-
-; Helper macro that converts and outputs one character
-.macro _scrcode char
-.if 1
- .if (char >= 96) .and (char <= 127)
- .byte (char)
- .else
- .byte (char - 32)
- .endif
-.else
- .if (char >= 0) .and (char <= 31)
- .byte (char + 64)
- .elseif (char >= 32) .and (char <= 95)
- .byte (char + 32)
- .elseif (char >= 96) .and (char <= 127)
- .byte char
- .elseif (char >= 128) .and (char <= 159)
- .byte (char + 64)
- .elseif (char >= 160) .and (char <= 223)
- .byte (char - 32)
- .elseif (char >= 224) .and (char <= 255)
- .byte char
- .else
- .error "scrcode: Character constant out of range"
- .endif
-.endif
-.endmacro
-
-.macro scrcode arg1, arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
-
- ; Bail out if next argument is empty
- .if .blank (arg1)
- .exitmacro
- .endif
-
- ; Check for a string
- .if .match ({arg1}, "")
-
- ; Walk over all string chars
- .repeat .strlen (arg1), i
- _scrcode {.strat (arg1, i)}
- .endrepeat
-
- ; Check for a number
- .elseif .match (.left (1, {arg1}), 0)
-
- ; Just output the number
- _scrcode arg1
-
- ; Check for a character
- .elseif .match (.left (1, {arg1}), 'a')
-
- ; Just output the character
- _scrcode arg1
-
- ; Anything else is an error
- .else
-
- .error "scrcode: invalid argument type"
-
- .endif
-
- ; Call the macro recursively with the remaining args
- scrcode arg2, arg3, arg4, arg5, arg6, arg7, arg8, arg9
-.endmacro
+.include "atari.mac"