Add 2004/schnitzi/try.sh + make it use fgets()

Format/typo check README.md file.

I also slowed down the animations as well as in modern systems they go
too fast, especially the Star Wars scrolling text one.
This commit is contained in:
Cody Boone Ferguson committed 2023-11-18 12:32:02 -08:00
1 parent 5d9557a126
commit 2e99bb2a20
6 files changed
+55 -31

No files matched your search

+15 -27
View File
@@ -8,36 +8,20 @@ make
## To use: ## To use:
```sh ```sh
./schnitzi ./schnitzi <foo | vi -n
``` ```
### Try: ### Try:
```sh ```sh
./schnitzi <schnitzi.inp0 2>/dev/null| vi ./try.sh
./schnitzi <schnitzi.inp1 2>/dev/null| vi
``` ```
For others, create an output file and use your system
pasteboard/selection/cut buffer to "input" the output into vi:
```sh
./schnitzi <schnitzi.inp0 >schnitzi.out0
./schnitzi <schnitzi.inp1 >schnitzi.out1
```
NOTE: if you're one of those who don't know how to exit `vi` :-) don't worry as NOTE: if you're one of those who don't know how to exit `vi` :-) don't worry as
it will exit for you. it will exit for you.
NOTE: this entry will make vi(m) swap files in the current working directory.
You might wish to clean them up. We could say how but lest there is another file
that matches the glob we won't. In any event vi swap files start with a dot
followed by the file name followed by another dot followed by `s` and two more
letters like. If no file is opened it will not have the file name but just be
e.g. `.swp`. When a second letter has no remaining availabilities it goes to
another one e.g. `u`.
## Judges' remarks: ## Judges' remarks:
@@ -64,9 +48,10 @@ string contains cursor navigation commands, you can go back and
overwrite things that were already inserted earlier in string, overwrite things that were already inserted earlier in string,
anywhere on the screen. Can you see where this is going? anywhere on the screen. Can you see where this is going?
### ANIMATION! ### ANIMATION!
The program takes input from stdin which defines the animated The program takes input from `stdin` which defines the animated
elements (sprites) that appear on the screen. For each sprite, elements (sprites) that appear on the screen. For each sprite,
you can specify exactly when and how long it will appear, and which you can specify exactly when and how long it will appear, and which
direction it is moving. Also, the sprite can oscillate between direction it is moving. Also, the sprite can oscillate between
@@ -75,16 +60,17 @@ Forgive me, animators, if I'm mangling the terminology. Sprites
which appear later in the input file will be drawn in front of which appear later in the input file will be drawn in front of
sprites which appear earlier. sprites which appear earlier.
The output, to stdout, is a string which, when pasted into vi, will The output, written to `stdout`, is a string which, when pasted into vi, will
perform the animation defined in the input. (The vi editor is a perform the animation defined in the input. (The vi editor is a common (and
common (and ancient) editor that should be available on most Unix, ancient) editor that should be available on most Unix, Linux, Solaris, and macOS
Linux, Solaris, and Mac OS X machines; you can get it on Windows systems; you can get it on Windows by installing Cygwin, which is how I do
by installing Cygwin, which is how I do it.) it.)
### THE INPUT ### THE INPUT
It's easiest to place the input in a file, so you can redirect it It's easiest to place the input in a file, so you can redirect it
to stdin when running the program. What follows is a detailed to `stdin` when running the program. What follows is a detailed
description of the input file format. description of the input file format.
The first line is specified thusly: The first line is specified thusly:
@@ -93,12 +79,12 @@ The first line is specified thusly:
[duration] [timefactor] [duration] [timefactor]
``` ```
The first parameter, duration, defines how long the animation will run. The The first parameter, `duration`, defines how long the animation will run. The
second, `timefactor`, is used as sort of a fudge factor for machines that run second, `timefactor`, is used as sort of a fudge factor for machines that run
too fast to see the animation. A `timefactor` of 0 means, "run the animation as too fast to see the animation. A `timefactor` of 0 means, "run the animation as
fast as you can". On a pretty fast machine, I've had to set it as high as 2000 fast as you can". On a pretty fast machine, I've had to set it as high as 2000
to get the animation to slow down sufficiently. Note that the higher the to get the animation to slow down sufficiently. Note that the higher the
`timefactor`, the longer the output string that you'll have to copy- and-paste, `timefactor`, the longer the output string that you'll have to copy and paste,
as extra characters are necessary to "waste time" between frames. as extra characters are necessary to "waste time" between frames.
Following the first line parameters, you may have up to nine Following the first line parameters, you may have up to nine
@@ -139,6 +125,7 @@ Input is terminated by end of file. Duh.
Two samples input files are included; one a nice pastoral park Two samples input files are included; one a nice pastoral park
scene, the other a bit of scrolling text. scene, the other a bit of scrolling text.
### RUNNING THE ANIMATION ### RUNNING THE ANIMATION
Try one of these methods to get the animation to run: Try one of these methods to get the animation to run:
@@ -164,6 +151,7 @@ is a right-click menu option on the top window bar.
3. Memorize the output, and type it into vi really really fast. 3. Memorize the output, and type it into vi really really fast.
### A FINAL NOTE ### A FINAL NOTE
I would like to remind the Pixar Animation Studios that I retain I would like to remind the Pixar Animation Studios that I retain
+2 -1
View File
@@ -1,4 +1,5 @@
#include <stdio.h> #include <stdio.h>
#define gets(x) fgets((x),100,stdin)
#define l "==================================================" #define l "=================================================="
#define m " " #define m " "
int _( int _(
@@ -6,7 +7,7 @@ float x,
float y){ float y){
return x>=0&&x<50&&y>=0&&y<20;} return x>=0&&x<50&&y>=0&&y<20;}
int main (){ int main (){
char a[2][20][51],c[9][4][51][51],d[100]; char a[2][20][51],c[9][4][100][100],d[100];
int e,f,g,h=0,i,j=0,k,b=0,n[9],o[9],p[9],x[9],y[9],q[9],r,s,t; int e,f,g,h=0,i,j=0,k,b=0,n[9],o[9],p[9],x[9],y[9],q[9],r,s,t;
float u[9],v[9],w[9],z[9]; float u[9],v[9],w[9],z[9];
printf ("i%s\033Yppppppppppppppppppp1G0",l); printf ("i%s\033Yppppppppppppppppppp1G0",l);
+1 -1
View File
@@ -1,4 +1,4 @@
100 1000 100 2000
0 1000 0 10 0.0 0.0 50 2 1 0 1000 0 10 0.0 0.0 50 2 1
------------------------------\~~~~~~~~~~~~~~~~~~~ ------------------------------\~~~~~~~~~~~~~~~~~~~
\__________________ \__________________
+1 -1
View File
@@ -1,4 +1,4 @@
30 2000 30 10000
0 100 10 25 0.0 -1.0 25 4 1 0 100 10 25 0.0 -1.0 25 4 1
A long time A long time
ago, in a ago, in a
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env bash
#
# try.sh - demonstrate IOCCC winner 2004/schnitzi
#
# make sure CC is set so that when we do make CC="$CC" it isn't empty. Doing it
# this way allows us to have the user specify a different compiler in an easy
# way.
if [[ -z "$CC" ]]; then
CC="cc"
fi
make CC="$CC" all >/dev/null || exit 1
# clear screen after compilation so that only the entry is shown
clear
echo "$ ./schnitzi <schnitzi.inp0 | vi -n" 1>&2
./schnitzi <schnitzi.inp0 | vi -n
read -r -n 1 -p "Press any key to continue: "
echo
echo "$ ./schnitzi <schnitzi.inp1 | vi -n" 1>&2
./schnitzi <schnitzi.inp1 | vi -n
+10 -1
View File
@@ -1818,7 +1818,7 @@ original buffer size. Cody explains this in the at [1994/schnitzi in
bugs.md](/bugs.md#1994-schnitzi). bugs.md](/bugs.md#1994-schnitzi).
The purpose for these versions it both demonstrate how the magic works behind it The purpose for these versions it both demonstrate how the magic works behind it
and to help others, should they wish to, get the code to work with `fgets(3)`, with and to help others, should they wish, get the code to work with `fgets(3)`, with
or without an increase in buffer size. See [1994/schnitzi in or without an increase in buffer size. See [1994/schnitzi in
bugs.md](/bugs.md#1994-schnitzi) where Cody also explains the magic for more bugs.md](/bugs.md#1994-schnitzi) where Cody also explains the magic for more
details. Later on, if nobody takes up the task, Cody might resume it, but for details. Later on, if nobody takes up the task, Cody might resume it, but for
@@ -2753,6 +2753,15 @@ get it to work, that being `kopczynski-10-rev`.
Cody and Landon individually fixed this to work with clang. Cody and Landon individually fixed this to work with clang.
## [2004/schnitzi](2004/schnitzi/schnitzi.c) ([README.md](2004/schnitzi/README.md]))
Cody made this use `fgets(3)`.
He also changed the time factor in the data files as the animations went too
fast in modern systems, especially the scrolling text of
[schnitzi.inp1](schnitzi.inp1).
## [2004/vik2](2004/vik2/vik2.c) ([README.md](2004/vik2/README.md)) ## [2004/vik2](2004/vik2/vik2.c) ([README.md](2004/vik2/README.md))
Cody fixed this to compile in Linux. Although it compiled cleanly in macOS (and Cody fixed this to compile in Linux. Although it compiled cleanly in macOS (and