LZW compression: Difference between revisions

m
→‎version 2: change type of compare (for input), added/changed comments and whitespace.
m (→‎version 2: corrected a misspelling.)
m (→‎version 2: change type of compare (for input), added/changed comments and whitespace.)
Line 4,415:
This REXX version can execute on   '''ASCII'''   or   '''EBCDIC'''   systems.
<lang rexx>/*REXX program compresses text using the LZW (Lempel─Ziv─Welch), and reconstitutes it.*/
parse arg x; if x=='' then /*get an optional argument from the CL.*/
x= '"There is nothing permanent except change." ─── Heraclitus [540-475 BC]'
say 'original text=' x /* [↑] Not specified? Then use default*/
Line 4,427:
do k=1 for length(y)+1; z= w || substr(y, k, 1)
if @.z=='' then do; $= $ @.w; @.z= #; #= # + 1; w= substr(y, k, 1); end
else w= z /*#: the dictionary size.*/
end /*k*/; return substr($, 2) /*delelide a leading blank. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
LZWd: procedure; parse arg x y,,@.; #= 256 /*LZW decompress algorithm.*/
do j=0 for #; @.j= d2c(j); end /*j*/
$= @.x; w= $ /*#: the dictionary size.*/
do k=1 for words(y); z= word(y, k)
if @.z\=='' | @.k==" " then ?= @.z
else if z==# then ?= w || left(w, 1)
$= $ || ?
@.#= w || left(?, 1); #= # + 1; w= ?
end /*k*/; return $</lang>
{{out|output|text=&nbsp; when using the default input:}}
<pre>