Merge pull request #108 from xexyl/1990-jaw

Fixes in 1990/jaw
This commit is contained in:
Landon Curt Noll authored and GitHub committed 2023-03-21 15:42:36 -07:00
commit b1c5857a67
4 files changed
+70 -16

No files matched your search

+3
View File
@@ -1,3 +1,6 @@
atob
jaw
zcat
receive
unshark
unshark.c
+23 -14
View File
@@ -21,17 +21,33 @@
## To build:
make all
make all
[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed the script to
work properly in modern environments (to do with PATH not having '.' in it). He
notes that with an invocation in the try section below you will with macOS get
what appears to be an error message but is actually okay. He gives more
information in the [bugs.md](/bugs.md) file. Thank you Cody for the help and
notes!
NOTE: as `btoa` is not common we used a ruby script from [Yusuke
Endoh](/winners.html#Yusuke_Endoh). Thank you Yusuke for your implementation of
`btoa`!
### Try:
To test the official C entry, one might try:
echo "Quartz glyph jocks vend, fix, BMW." | compress | ./btoa | ./jaw
NOTE: part of this entry does not work under macOS.
which should apply the identity transformation to a minimal
holoalphabetic sentence.
NOTE: Cody notes the above will not work under macOS. The `sh shark.sh jaw.*
README.md > receive` and following commands below do work with macOS after the
fixes he made.
## Judges' comments:
@@ -42,30 +58,23 @@ The program, in its base form, implements two useful utilities:
atob - ascii to binary conversion
zcat - decompression filter
To test the official C entry, one might try:
echo "Quartz glyph jocks vend, fix, BMW." | compress | ./btoa | ./jaw
which should apply the identity transformation to a minimal
holoalphabetic sentence.
Included with this entry is a shell script (with comments edited down
to reduce it to 1530 bytes) which implements the complete
shark utility. The script, shark.sh, contains a 'jaw.c' embedded
within it!
The sender must have 'compress' and 'btoa'. To send, try:
The sender must have `compress` and `btoa`. To send, try:
sh shark.sh jaw.* > receive
sh shark.sh jaw.* README.md > receive
The resulting file, 'receive', unpacks the input files
even if the receiver lacks 'uncompress' and 'btoa':
even if the receiver lacks `uncompress` and `btoa`:
mkdir test
mkdir -p test
cd test
sh ../receive
cmp ../jaw.c jaw.c
cmp ../jaw.hint jaw.hint
cmp ../README.md README.md
## Authors' comments:
+2 -2
View File
@@ -10,7 +10,7 @@ for i in "${@?${usage?$0 file...}}";do<"$i"||exit;done
# "Cleverly he dialed from within." -- D. Van Vliet, "Trout Mask Replica"
#
PATH=$PATH:. a=atob m=unshark z=zcat
r="rm -f $a $m* $z" v="cc -o $z $m.c"
r="rm -f $a $m* $z" v="cc -Wno-implicit-function-declaration -o $z $m.c"
trap "$r;exit 1" 1 2 13 15
echo decoding...
(:|compress|./btoa|$a|$z)2>$m>&2||(sed '1,9s/./#define & /
@@ -43,5 +43,5 @@ Z,h@=w;n=8;f=Q+e;i=o=HIo<0)X,1;P(i)WH+1){Iw==Q&e){Z;m=n=8;f=QIH<0)X}
c=wIw>=f)U++=i,w=oWw>=Q)U++=h@,w=t@;P(i=h@)Wp>D+Q)P(*--p)
I(w=f)<1l<<k)t@=o,h[f++]=i;o=c}X}
_
($v||$v -Mh)&&ln $z $a)&&$a<<\w>$m-&&$z<$m->$m&&tar xvf $m&&$r
($v)&&ln $z $a)&&$a<<\w>$m-&&$z<$m->$m&&tar xvf $m&&$r
Z
+42
View File
@@ -20,6 +20,7 @@ you have one if you like).
## Known bugs that are OK to fix
### [1995/cdua](1995/cdua/cdua.c) ([README.md](1995/cdua/README.md))
This did not compile under macOS and after it did it crashed.
@@ -103,6 +104,47 @@ Vax-11 or pdp-11. In 1984 machine dependent code was allowed.
This entry is known to segfault after printing its output. It was documented by
the judges and needn't be fixed.
### [1990/jaw](1990/jaw/jaw.c) ([README.md](1990/jaw/README.md))
[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) fixed the scripts to
work in modern systems. He notes however that the command in the try section,
the one to test the official C entry, appear to not work with macOS, giving:
$ echo "Quartz glyph jocks vend, fix, BMW." | compress | ./btoa | ./jaw
oops: Undefined error: 0
oops: Undefined error: 0
However this is because the entry uses `perror()` and it just so happens that
the default `errno` gives that result. For instance if you run the following C
program under macOS you will get undefined error but if you do it under linux
you'll likely get success.
```c
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main()
{
errno = 0;
printf("%d, %s\n", errno, strerror(errno));
}
```
In fact the condition which is in the `a()` function on line 18 of the entry
namely:
I k>16)
is true on both linux and macOS, with `k` being equal to 22.
Should the entry use `perror()`? Perhaps not but we're not sure of its purpose
so it can stay for now with this note.
### [1996/westley](1996/westley/westley.c) ([README.md](1996/westley/README.md))
This entry will possibly segfault even when showing the proper output in the