commit 94882720be8c030582227a4d0808539217fcbb45
parent b486d9585bedbb130ee7297882f7f8eafa79cb99
Author: neauoire <aliceffekt@gmail.com>
Date:   Sun, 23 Jan 2022 14:19:10 -0800
(dos.tal) Improved error reporting
Diffstat:
1 file changed, 149 insertions(+), 62 deletions(-)
diff --git a/projects/software/dos.tal b/projects/software/dos.tal
@@ -1,4 +1,4 @@
-( gui/terminal )
+( UXN-DOS )
 
 %+  { ADD }  %-  { SUB }  %*  { MUL }  %/  { DIV }
 %<  { LTH }  %>  { GTH }  %=  { EQU }  %!  { NEQ }
@@ -37,7 +37,7 @@
 
 %RTN { JMP2r }
 
-%WIDTH { #40 }
+%WIDTH { #38 }
 %HEIGHT { #20 }
 %PAD { #0018 }
 
@@ -53,7 +53,8 @@
 
 |0000
 
-@buffer $80
+@buffer $3
+	&input $80
 @path $40
 @frame $1
 
@@ -62,9 +63,9 @@
 |0100 ( -> )
 
 	( theme ) 
-	#05f5 .System/r DEO2 
-	#0cf5 .System/g DEO2 
-	#0af5 .System/b DEO2
+	#50f8 .System/r DEO2 
+	#c0f8 .System/g DEO2 
+	#a0f8 .System/b DEO2
 
 	( vectors ) 
 	;on-button .Controller/vector DEO2
@@ -119,7 +120,7 @@ BRK
 	&ver
 		WIDTH #00
 		&hor
-			#03 .Screen/sprite DEO
+			#02 .Screen/sprite DEO
 			INC GTHk ,&hor JCN
 		POP2
 		PAD .Screen/x DEO2
@@ -131,6 +132,8 @@ BRK
 RTN
 	&blank-icn 8000 0000 0000 0000
 
+( DOS )
+
 @validate ( -- )
 	
 	;clear JSR2
@@ -151,15 +154,13 @@ JMP2r
 			NIP2 ;commands -- RTN
 			&continue
 		INC2 INC2 GTH2k ,&loop JCN
-	&end
 	POP2 ;commands --
 
 RTN
 
-@cmd-ls "ls $1
-	&docs "list_folder_content $1
-	&func
+@cmd-ls "ls $1 &docs "list 20 "folder 20 "content $1 &func
 
+	( load )
 	;path .File/name DEO2
 	#8000 .File/length DEO2
 	;view .File/read DEO2
@@ -168,53 +169,97 @@ RTN
 
 RTN
 
-@cmd-cp "cp $1 &docs "copy_file_to_name $1
-	&func
+@cmd-mk "mk $1 &docs "make 20 "file $1 &func
+
+	;buffer/input ;file-exists JSR2 #01 ! ,&no-exists JCN
+		;error-exists-txt ;buffer/input ;draw-message JSR2 RTN
+		&no-exists
+	( save )
+	;buffer/input .File/name DEO2
+	#0001 .File/length DEO2
+	;&buf .File/write DEO2
+	( message ) 
+	;make-success-txt ;buffer/input ;draw-message JSR2
 
 RTN
+	&buf 0a
 
-@cmd-mv "mv $1 &docs "move_file_to_name $1
+@cmd-cp "cp $1 &docs "copy 20 "file 20 "to 20 "name $1 &func
+
+	( b ) ;buffer/input #20 ;next-char JSR2 STH2k INC2
+	#00 STH2r STA
+	( a ) ;buffer/input
+	( a exists )
+	;buffer/input ;file-exists JSR2 ,&valid JCN
+		;error-unexists-txt ;buffer/input ;draw-message JSR2 POP2 POP2 RTN
+		&valid
+	( b unexists )
+	OVR2 ;file-exists JSR2 #00 = ,&available JCN
+		OVR2 ;error-exists-txt SWP2 ;draw-message JSR2 POP2 POP2 RTN
+		&available
+	( load )
+	.File/name DEO2
+	#8000 .File/length DEO2
+	;view .File/read DEO2
+	( save )
+	DUP2 .File/name DEO2
+	#8000 .File/length DEO2
+	;view .File/write DEO2
+	( message ) 
+	;copy-success-txt SWP2 ;draw-message JSR2
+
+RTN
+
+@cmd-mv "mv $1 &docs "move 20 "file 20 "to 20 "name $1
 	&func
 
+	( todo )
+
 RTN
 
-@cmd-rm "rm $1 &docs "remove_file $1
+@cmd-rm "rm $1 &docs "remove 20 "file $1
 	&func
 
-	;buffer #0003 ++ .File/name DEO2
+	( exists )
+	;buffer/input ;file-exists JSR2 ,&valid JCN
+		;error-unexists-txt ;buffer/input ;draw-message JSR2 RTN
+		&valid
+	( delete )
+	;buffer/input .File/name DEO2
 	#01 .File/delete DEO
-
-	;&remove-txt #01 ;draw-str JSR2
-	;buffer #0003 ++ #01 ;draw-str JSR2
+	( message ) 
+	;remove-success-txt ;buffer/input ;draw-message JSR2
 
 RTN
-	&remove-txt "removed_file: $1
 
-@cmd-tx "tx $1 &docs "display_file_as_text $1
+@cmd-tx "tx $1 &docs "display 20 "file 20 "as 20 "text $1
 	&func
 
-	;buffer #0003 ++ .File/name DEO2
+	( exists )
+	;buffer/input ;file-exists JSR2 ,&valid JCN
+		;error-unexists-txt ;buffer/input ;draw-message JSR2 RTN
+		&valid
+	( load )
+	;buffer/input .File/name DEO2
 	#8000 .File/length DEO2
 	;view .File/read DEO2
-
-	.File/success DEI2 #0000 >> ,&valid JCN
-		;&error-txt #02 ;draw-str JSR2 RTN &valid
-
+	( message )
 	;view #01 ;draw-tx JSR2
 
 RTN
-	&error-txt "unknown_file $1
 
-@cmd-hx "hx $1 &docs "display_file_as_hex $1
+@cmd-hx "hx $1 &docs "display 20 "file 20 "as 20 "hex $1
 	&func
 
-	;buffer #0003 ++ .File/name DEO2
+	( exists )
+	;buffer/input ;file-exists JSR2 ,&valid JCN
+		;error-unexists-txt ;buffer/input ;draw-message JSR2 RTN
+		&valid
+	( load )
+	;buffer/input .File/name DEO2
 	#8000 .File/length DEO2
 	;view .File/read DEO2
-
-	.File/success DEI2 #0000 >> ,&valid JCN
-		;&error-txt #02 ;draw-str JSR2 RTN &valid
-
+	( message )
 	AUTO-YADDR
 	.File/success DEI2 #0000
 	&loop
@@ -234,15 +279,14 @@ RTN
 	POP2 POP2
 
 RTN
-	&error-txt "unknown_file $1
 
-@cmd-do "do $1 &docs "run_file_as_rom $1
+@cmd-do "do $1 &docs "run 20 "file 20 "as 20 "rom $1
 	&func
 
 	( release inputs )
 	#0000 .Controller/button DEO2
 
-	;buffer #0003 ++
+	;buffer/input
 	DUP2 ;check-rom JSR2 ,&valid JCN
 		PAD .Screen/x DEO2
 		PAD .Screen/y DEO2
@@ -253,9 +297,9 @@ RTN
 	;load-rom JSR2 
 
 RTN
-	&invalid-txt "invalid_rom: $1
+	&invalid-txt "invalid 20 "rom: $1
 
-@cmd-tm "tm $1 &docs "display_time $1
+@cmd-tm "tm $1 &docs "display 20 "time $1
 	&func
 
 	#00 .DateTime/month DEI 4* ;month-txt ++ #01 ;draw-str JSR2
@@ -272,7 +316,28 @@ RTN
 
 RTN
 
-@cmd-?? "-- $1 &docs "display_commands $1
+@cmd-1b "1b $1 &docs "display 20 "1bit 20 "file $1
+	&func
+
+	( todo )
+
+RTN
+
+@cmd-2b "2b $1 &docs "display 20 "2bit 20 "file $1
+	&func
+
+	( todo )
+
+RTN
+
+@cmd-sn "sn $1 &docs "play 20 "sound 20 "file $1
+	&func
+
+	( todo )
+
+RTN
+
+@cmd-?? "-- $1 &docs "display 20 "commands $1
 	&func
 
 	;&help-txt #01 ;draw-tx JSR2
@@ -281,30 +346,42 @@ RTN
 	;commands/end ;commands
 	&loop
 		PAD .Screen/x DEO2
-		( name ) LDA2k #08 ;draw-str JSR2
+		( name ) LDA2k #04 ;draw-str JSR2
 		PAD #0020 ++ .Screen/x DEO2
 		( docs ) DUP2 ;commands -- ;commands-docs ++ LDA2 #01 ;draw-str JSR2
 		.Screen/y DEI2k #0010 ++ ROT DEO2
 		INC2 INC2 GTH2k ,&loop JCN
-	&end
 	POP2 POP2
 
 RTN
 	&help-txt "Commands: $1
 
 @commands
-	:cmd-ls :cmd-cp :cmd-mv :cmd-rm 
+	:cmd-ls :cmd-mk :cmd-cp :cmd-mv :cmd-rm 
 	:cmd-hx :cmd-tx :cmd-do :cmd-tm
+	:cmd-1b :cmd-2b :cmd-sn
 	&end :cmd-??
 @commands-docs
-	:cmd-ls/docs :cmd-cp/docs :cmd-mv/docs :cmd-rm/docs 
+	:cmd-ls/docs :cmd-mk/docs :cmd-cp/docs :cmd-mv/docs :cmd-rm/docs 
 	:cmd-hx/docs :cmd-tx/docs :cmd-do/docs :cmd-tm/docs
+	:cmd-1b/docs :cmd-2b/docs :cmd-sn/docs
 	&end :cmd-??/docs
 @commands-func
-	:cmd-ls/func :cmd-cp/func :cmd-mv/func :cmd-rm/func 
+	:cmd-ls/func :cmd-mk/func :cmd-cp/func :cmd-mv/func :cmd-rm/func 
 	:cmd-hx/func :cmd-tx/func :cmd-do/func :cmd-tm/func
+	:cmd-1b/func :cmd-2b/func :cmd-sn/func
 	&end :cmd-??/func
 
+@file-exists ( name* -- bool )
+
+	.File/name DEO2
+	#0040 .File/length DEO2
+	;&buf .File/stat DEO2
+	.File/success DEI2 #0000 >>
+
+RTN
+	&buf $40
+
 ( gui )
 
 @draw-input ( color -- )
@@ -331,6 +408,13 @@ RTN
 
 JMP2r
 
+@draw-message ( a* b* -- )
+
+	SWP2 #02 ;draw-str JSR2
+	#01 ;draw-str JSR2
+	
+RTN
+
 @draw-tx ( str* color -- )
 
 	AUTO-YADDR
@@ -402,6 +486,18 @@ RTN
 
 ( utils )
 
+@next-char ( addr* char -- addr* )
+
+	STH
+	&while
+		LDAk STHkr = ,&end JCN
+		LDAk #00 = ,&end JCN
+		INC2 LDAk ,&while JCN
+	&end
+		POPr
+
+RTN
+
 @slen ( str* -- len* )
 
 	DUP2 ,scap JSR SWP2 --
@@ -428,22 +524,6 @@ RTN
 
 RTN
 
-@scmp ( a* b* -- flag )
-
-	STH2
-	&loop
-		LDAk LDAkr STHr = ,¬-diff JCN
-			POP2 POP2r #00 RTN
-			¬-diff
-		LDAk LDAkr STHr #0000 !! ,¬-end JCN
-			POP2 POP2r #01 RTN
-			¬-end
-		INC2 INC2r
-		,&loop JMP
-	POP2 POP2r #00
-
-RTN
-
 @scmp-seg ( a* b* -- flag )
 
 	STH2
@@ -491,8 +571,12 @@ JMP2r
 
 JMP2r
 
-~projects/library/check-rom.tal
-~projects/library/load-rom.tal
+@error-exists-txt "file_exists: 20 $1
+@error-unexists-txt "file_does_not_exists: 20 $1
+
+@make-success-txt "made: 20 $1
+@copy-success-txt "copied: 20 $1
+@remove-success-txt "removed: 20 $1
 
 @week-txt
 	"Sun $1 "Mon $1 "Tue $1 "Wed $1 "Thu $1 "Fri $1 
@@ -616,4 +700,7 @@ JMP2r
 	0000 1818 1818 0018 1818 1818 0000 0000
 	0000 7018 1818 0e18 1818 1870 0000 0000
 
+~projects/library/check-rom.tal
+~projects/library/load-rom.tal
+
 @view