From db552a4dcacc5d82f00e595be4ca3faae75a3ddb Mon Sep 17 00:00:00 2001
From: pommicket <pommicket@gmail.com>
Date: Thu, 6 Jan 2022 14:02:30 -0500
Subject: string

---
 04b/in03  | 31 +++++++++++++++++++++++++++++++
 04b/in04b | 17 +++--------------
 2 files changed, 34 insertions(+), 14 deletions(-)

(limited to '04b')

diff --git a/04b/in03 b/04b/in03
index b07874d..66bc3a6 100644
--- a/04b/in03
+++ b/04b/in03
@@ -140,6 +140,13 @@ call :string=
 D=A
 ?D!0:handle_byte
 
+I=:line
+J=:"string"
+C=x20
+call :string=
+D=A
+?D!0:handle_string
+
 ; set delimiter to newline
 C=xa
 
@@ -227,6 +234,27 @@ align
 :byte
 	reserve d1
 
+:handle_string
+	I=:line
+	; 7 = length of "string "
+	I+=d7
+	J=I
+	; find end of string
+	:string_loop
+		C=1J
+		D=xa
+		?C=D:string_loop_end
+		J+=d1
+		!:string_loop
+	:string_loop_end
+	; get length of string
+	D=J
+	D-=I
+	; output fd
+	J=d4
+	syscall x1
+	!:read_line
+	
 :handle_call
 	J=I
 	; just use the rvalue function call code
@@ -1586,6 +1614,9 @@ align
 :"byte"
 	str byte
 	x20
+:"string"
+	str string
+	x20
 :"function"
 	str function
 	xa
diff --git a/04b/in04b b/04b/in04b
index c64aecd..caee4f0 100644
--- a/04b/in04b
+++ b/04b/in04b
@@ -43,26 +43,15 @@
 ;     <term> < <term>  (left shift)
 ;     <term> > <term>  (unsigned right shift)
 
-
 syscall(1, 1, .str_hw, 14)
 syscall(0x3c, 42)
 
 :str_hw
-	byte 'H
-	byte 'e
-	byte 'l
-	byte 'l
-	byte 'o
-	byte ',
-	byte 32
-	byte 'w
-	byte 'o
-	byte 'r
-	byte 'l
-	byte 'd
-	byte '!
+	string Hello, world!
 	byte 10
 	
+	
+
 :syscall
 function
 	; I've done some testing, and this should be okay even if
-- 
cgit v1.2.3