more cleaning!!!
This commit is contained in:
parent
1aed01279b
commit
fbdaf55d1c
24
.gitignore
vendored
24
.gitignore
vendored
@ -1,23 +1,5 @@
|
|||||||
bin/echo
|
dist/
|
||||||
bin/false
|
echo/echo
|
||||||
bin/id
|
|
||||||
bin/lowercase
|
|
||||||
bin/nonzero
|
|
||||||
bin/nutshell
|
|
||||||
bin/pscat
|
|
||||||
bin/retval
|
|
||||||
bin/rldecode
|
|
||||||
bin/rlencode
|
|
||||||
bin/roll
|
|
||||||
bin/rot13
|
|
||||||
bin/simexec
|
|
||||||
bin/sleep
|
|
||||||
bin/str
|
|
||||||
bin/streq
|
|
||||||
bin/sysexits
|
|
||||||
build/*
|
|
||||||
include/sysexits.h
|
|
||||||
lib/*.o
|
|
||||||
roll/roll
|
roll/roll
|
||||||
rot13/rot13
|
rot13/rot13
|
||||||
src/*.o
|
str/str
|
||||||
|
3
arraylen.h
Normal file
3
arraylen.h
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#ifndef ARRAYLEN
|
||||||
|
# define ARRAYLEN(a) sizeof(a) / sizeof *(a)
|
||||||
|
#endif
|
@ -4,6 +4,11 @@
|
|||||||
# define Use_of_this_function_is_not_permitted(a) invalid_token
|
# define Use_of_this_function_is_not_permitted(a) invalid_token
|
||||||
# define BAN(a) Use_of_this_function_is_not_permitted(a)
|
# define BAN(a) Use_of_this_function_is_not_permitted(a)
|
||||||
|
|
||||||
|
# undef fscanf
|
||||||
|
# define fscanf(...) BAN(fscanf)
|
||||||
|
# undef scanf
|
||||||
|
# define scanf(...) BAN(scanf)
|
||||||
|
|
||||||
# undef strcat
|
# undef strcat
|
||||||
# define strcat(a,b) BAN(strcat)
|
# define strcat(a,b) BAN(strcat)
|
||||||
|
|
||||||
|
61
bin/head
61
bin/head
@ -1,61 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
length=10 # default length
|
|
||||||
|
|
||||||
# core [input] [output] [length]
|
|
||||||
core() {
|
|
||||||
sed $3q <"$1" >"$2"
|
|
||||||
}
|
|
||||||
|
|
||||||
usage() {
|
|
||||||
printf "Usage: %b [-h] [-n number]\n" "$1"
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
argc=$#
|
|
||||||
argv0="$0"
|
|
||||||
output="/dev/stdout"
|
|
||||||
|
|
||||||
while getopts 'hn:' c; do
|
|
||||||
case $c in
|
|
||||||
(h) usage "$0";;
|
|
||||||
(n)
|
|
||||||
stris uint "$OPTARG" \
|
|
||||||
&& length=$OPTARG \
|
|
||||||
|| usage "$argv0"
|
|
||||||
;;
|
|
||||||
(:)
|
|
||||||
printf "%b: \"-$OPTARG\" requires an argument (number)\n" "$argv0" >/dev/stderr
|
|
||||||
exit 1;;
|
|
||||||
(?)
|
|
||||||
stris uint $OPTOPT >/dev/null \
|
|
||||||
&& printf "%b: This program doesn't support -[number] arguments as they're not POSIX\n" "$argv0" >/dev/stderr \
|
|
||||||
|| usage "$argv0"
|
|
||||||
exit 1;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
if eq $OPTIND $(add $argc 1); then # no file specified, assume stdin
|
|
||||||
core /dev/stdin "$output" $length
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
shift $OPTIND
|
|
||||||
temp0="$0"
|
|
||||||
|
|
||||||
while true; do
|
|
||||||
! [ -e "$0" ] \
|
|
||||||
&& printf "%b: %b: File does not exist\n" "$argv0" "$0" >/dev/stderr \
|
|
||||||
&& exit 1
|
|
||||||
|
|
||||||
[ -n "$1" ] && ! streq "$0" "$temp0" \
|
|
||||||
&& printf "\n" >"$output"
|
|
||||||
[ -n "$1" ] \
|
|
||||||
&& printf "==> %b <==\n" "$0" >"$output"
|
|
||||||
|
|
||||||
core "$0" "$output" $length
|
|
||||||
|
|
||||||
[ -n "$1" ] && shift 1 || break
|
|
||||||
done
|
|
||||||
|
|
||||||
exit 0
|
|
87
bin/man
87
bin/man
@ -1,87 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
argv0="$0"
|
|
||||||
|
|
||||||
die() { printf "$*" >/dev/stderr && exit 1; }
|
|
||||||
|
|
||||||
# A lot of these break convention when recording errors because this tries to
|
|
||||||
# imitate other implementations.
|
|
||||||
[ -n "$1" ] || die "What manual page do you want?\nFor example, try 'man man'.\n"
|
|
||||||
|
|
||||||
[ -n "$LANG" ] || LANG="C"
|
|
||||||
|
|
||||||
[ -n "$MANPATH" ] || MANPATH="/usr/share/man"
|
|
||||||
[ -d "$MANPATH" ] || die "$0: \$MANPATH: $MANPATH: Does not exist\n"
|
|
||||||
[ -n "$MANSECTIONS" ] \
|
|
||||||
&& default_mansections="$MANSECTIONS" \
|
|
||||||
|| default_mansections="1nl830254967"
|
|
||||||
[ -d "$MANPATH"/"$LANG" ] \
|
|
||||||
&& MANDIR="$MANPATH/$LANG" \
|
|
||||||
|| MANDIR="$MANPATH"
|
|
||||||
|
|
||||||
if [ -z "$PAGER" ]; then
|
|
||||||
for prog in $(printf "
|
|
||||||
less
|
|
||||||
more
|
|
||||||
cat
|
|
||||||
dd
|
|
||||||
"); do
|
|
||||||
if which "$prog" >/dev/null 2>&1; then
|
|
||||||
PAGER="$prog"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
man() {
|
|
||||||
eq $# 2 || die "$argv0: man() called with $# arguments. Expected 2. This is a programmer error\n"
|
|
||||||
MANSECTIONS="$1"
|
|
||||||
NAME="$2"
|
|
||||||
|
|
||||||
# the way manpages are laid out SUCKS
|
|
||||||
# so, yeah, each man section is one character. which means it's totally
|
|
||||||
# bueno to just iterate over the string like this. but $MANDIR/man1 can
|
|
||||||
# have both man.1.gz AND man.1p.gz. ARGH!!!!
|
|
||||||
for SECTION in $(printf "$MANSECTIONS" | sed 's/\(.\)/\1\n/g'); do
|
|
||||||
PAGE="$(find "$MANDIR/man$SECTION" -type f 2>/dev/null | grep "\/$NAME\.\|\/$NAME$" | sed q)"
|
|
||||||
[ -z "$PAGE" ] || break
|
|
||||||
done
|
|
||||||
|
|
||||||
! [ -n "$PAGE" ] \
|
|
||||||
&& printf "No manual entry for $NAME\n" \
|
|
||||||
&& return 1
|
|
||||||
|
|
||||||
case "$(file -bir --no-buffer "$PAGE")" in
|
|
||||||
("text/"*)
|
|
||||||
COMMAND="cat" ;;
|
|
||||||
("application/gzip"*)
|
|
||||||
COMMAND="zcat" ;;
|
|
||||||
(*)
|
|
||||||
die "$argv0: $PAGE: Unknown file type.\n" ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
$COMMAND "$PAGE" | nroff -man | $PAGER
|
|
||||||
}
|
|
||||||
|
|
||||||
# this seems to be what the popular man does
|
|
||||||
# so like `man foo -k bar` will show the manpages for foo, -k, and bar
|
|
||||||
# expected behavior imo would be manpage for foo, then gist for bar
|
|
||||||
# but let's not break things
|
|
||||||
if streq "$1" "-k"; then # -k
|
|
||||||
printf "Not yet implemented\n" && exit 1
|
|
||||||
else # not -k
|
|
||||||
while gt $# 0; do
|
|
||||||
if eq $(fdivide $# 2) 0 && gt 1 $# || ! stris int "$1"; then
|
|
||||||
MANSECTIONS="$default_mansections"
|
|
||||||
NAME="$1"
|
|
||||||
SHIFTING=1
|
|
||||||
elif gt 1 $(fdivide $# 2); then
|
|
||||||
MANSECTIONS="$1"
|
|
||||||
NAME="$2"
|
|
||||||
SHIFTING=2
|
|
||||||
else exit 0 # no more args
|
|
||||||
fi
|
|
||||||
man "$MANSECTIONS" "$NAME"
|
|
||||||
shift $SHIFTING
|
|
||||||
done
|
|
||||||
fi
|
|
1
dotfiles/.nethackrc
Normal file
1
dotfiles/.nethackrc
Normal file
@ -0,0 +1 @@
|
|||||||
|
OPTIONS=!autopickup
|
@ -1,13 +0,0 @@
|
|||||||
#ifndef _STDBOOL_H
|
|
||||||
# define _STDBOOL_H
|
|
||||||
# define bool _Bool
|
|
||||||
# define false 0
|
|
||||||
# define true 1
|
|
||||||
# define __bool_true_false_are_defined 1
|
|
||||||
/* "dirtbag boolean"
|
|
||||||
* - ideally the compiler would keep all the booleans in [x] number of unsigned
|
|
||||||
* [type]s so it could squeeze eight booleans out of one byte.
|
|
||||||
* alas, the simplest thing tends to be best, and it's nice to not waste 20
|
|
||||||
* cycles (figure made up) on applying a bitmask to an int to read a bool */
|
|
||||||
# define _Bool unsigned char
|
|
||||||
#endif /* ifndef _STDBOOL_H */
|
|
@ -1,9 +0,0 @@
|
|||||||
/* #include <stddef.h>
|
|
||||||
* - Needed for NULL in NOARGVZERO
|
|
||||||
* #include <sysexits.h>
|
|
||||||
* - Needed for EX_OSERR in NOARGVZERO
|
|
||||||
* #include <unistd.h>
|
|
||||||
* - Needed for write(2) in NOARGVZERO */
|
|
||||||
|
|
||||||
#define ARRAYLEN(a) sizeof((a)) / sizeof(*(a))
|
|
||||||
#define NOARGVZERO(a) if(*(a) == NULL) { write(2, "argv[0] is NULL; OS error, exiting...\n", 38); return EX_OSERR; }
|
|
16
irc/irc.c
Normal file
16
irc/irc.c
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
/* RFC 1459 1.2
|
||||||
|
* 9 characters + nul terminator */
|
||||||
|
static int nickname[9 + 1];
|
||||||
|
|
||||||
|
/* RFC 1459 1.3
|
||||||
|
* 200 characters + nul terminator */
|
||||||
|
static int channel[200 + 1];
|
||||||
|
|
||||||
|
/* RFC 1459 1.3
|
||||||
|
* channel names cannot contain these characters */
|
||||||
|
static int channel_restricted[] = { 0x07, ' ', ',', '\0' };
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user