From 7640bce419e7186de8abbf8856bd1736945b9aba Mon Sep 17 00:00:00 2001 From: Erik Osheim Date: Wed, 12 Feb 2025 10:56:40 -0500 Subject: [PATCH] start adding support for creating archives --- tar.tal | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/tar.tal b/tar.tal index 085f57a..658c76e 100644 --- a/tar.tal +++ b/tar.tal @@ -27,24 +27,33 @@ @panic ( -> $exit ) #010e DEO #010f DEO BRK +@print-usage ( -> ) + ;usage1 print ;usage2 !print + ( handle all provided command-line arguments ) @arg-callback ( -> ) ;arg/count LDA - DUP #00 EQU ?&missing-mode - DUP #01 EQU ?&missing-file - #02 GTH ?&toomany !run - &missing-mode ;missing-mode !&error - &missing-file ;missing-filename !&error - &toomany ;too-many-arguments - &error print ;usage print #01 !exit + DUP #00 GTH ?{ POP ;missing-mode !handle-error } + DUP #01 GTH ?{ POP ;missing-filename !handle-error } + !run + +@error-toomany ( -> BRK ) + ;too-many-arguments !handle-error + +@error-noinput ( -> BRK ) + ;no-input-arguments !handle-error + +@handle-error ( ;msg -> BRK ) + print print-usage #01 !exit ( run the program ) @run ( -> BRK ) #01 arg/read .File1/name DEO2 #00 arg/read LDA + DUP LIT "c NEQ ?{ POP create-archive #00 !exit } DUP LIT "t NEQ ?{ POP list-entries #00 !exit } DUP LIT "x NEQ ?{ POP expand-entries #00 !exit } - POP ;invalid-mode print ;usage print #00 !exit + POP ;invalid-mode print print-usage #00 !exit ( exit normally ) @exit ( code^ -> BRK ) @@ -124,10 +133,9 @@ ADD2r INC2 GTH2k ?&loop ( limit* pos+1* [sum+n*] ) POP2 POP2 STH2r JMP2r ( sum* ) - - ( list all the entries in the tar archive ) @list-entries ( -> ) + ;arg/count LDA #02 GTH ?error-toomany read-header ?{ JMP2r } ;header/filename LDA ?&non-null #800f DEO BRK @@ -177,6 +185,7 @@ ( expand a .tar archive in the current working directory ) @expand-entries ( -> ) + ;arg/count LDA #02 GTH ?error-toomany read-header ?{ JMP2r } ;header/filename LDA ?&non-null #800f DEO BRK @@ -216,9 +225,9 @@ print-filename ;header/size load-octal11 round-up-to-512 skip !expand-entries -( src and dst should be paths ) -@compress-entries ( src* dst* -> ) - POP2 POP2 JMP2r +@create-archive ( -> ) + ;arg/count LDA #03 LTH ?error-noinput + JMP2r ( writes `n` bytes from File1 to File2 ) ( uses a 32k internal buffer ) @@ -406,10 +415,12 @@ JMP2r ( some handy string constants ) -@usage "usage: 20 "uxncli 20 "tar.rom 20 "t|x 20 "FILENAME 0a 00 +@usage1 "usage: 20 "uxncli 20 "tar.rom 20 "t|x 20 "TARFILE 0a 00 +@usage2 20 20 20 20 20 20 20 "uxncli 20 "tar.rom 20 "c 20 "TARFILE 20 "FILE1 20 "... 0a 00 @missing-mode "error: 20 "missing 20 "mode 0a 00 @missing-filename "error: 20 "missing 20 "filename 0a 00 @too-many-arguments "error: 20 "too 20 "many 20 "arguments 0a 00 +@no-input-arguments "error: 20 "no 20 "input 20 "files 0a 00 @invalid-mode "error: 20 "invalid 20 "mode 0a 00 @read-error "error 20 "reading 20 "data 0a 00 @write-error "error 20 "writing 20 "data 0a 00