diff --git a/src/cmd/sl/LICENSE b/src/cmd/sl/LICENSE new file mode 100644 index 0000000..19b1c72 --- /dev/null +++ b/src/cmd/sl/LICENSE @@ -0,0 +1,6 @@ +Copyright 1993,1998,2014 Toyoda Masashi (mtoyoda@acm.org) + +Everyone is permitted to do anything on this program including copying, +modifying, and improving, unless you try to pretend that you wrote it. +i.e., the above copyright notice has to appear in all copies. +THE AUTHOR DISCLAIMS ANY RESPONSIBILITY WITH REGARD TO THIS SOFTWARE. diff --git a/src/cmd/sl/Makefile-unix b/src/cmd/sl/Makefile-unix new file mode 100644 index 0000000..17b4ec1 --- /dev/null +++ b/src/cmd/sl/Makefile-unix @@ -0,0 +1,13 @@ +#========================================== +# Makefile: makefile for sl 5.1 +# Copyright 1993, 1998, 2014 +# Toyoda Masashi +# (mtoyoda@acm.org) +# Last Modified: 2014/03/31 +#========================================== + +CC = gcc +CFLAGS = -O -Wall -Werror + +sl: sl.c sl.h + $(CC) $(CFLAGS) -o sl sl.c -lncurses diff --git a/src/cmd/sl/README b/src/cmd/sl/README index 768ed72..5760501 100644 --- a/src/cmd/sl/README +++ b/src/cmd/sl/README @@ -1,12 +1,8 @@ -=========================================== - SL: $B%-!<%?%$%W6:@5%=%U%H(B - Copyright 1993,1998 Toyoda Masashi - (toyoda@is.titech.ac.jp) -=========================================== - -$B$`$+$7$K$bEj9F$5$l$?>iCL%=%U%H$N(B sl $B$N9k2ZHG$G$9!#(B -$B%"%$%G%"$O>N(J -sl \- $@%-!<%?%$%W$r6:@5$7$^$9!#(J -.SH $@7A<0(J +.\" @(#)sl.1 +.\" +.TH SL 1 "March 31, 2014" +.SH NAME +sl \- cure your bad habit of mistyping +.SH SYNOPSIS .B sl [ -.B \-alF +.B \-alFc ] -.SH $@2r@b(J +.SH DESCRIPTION .B sl -$@$O!"9bEY$KH/E8$7$?!"%-!<%?%$%W6:@5$rL\E*$H$9$k%"%K%a!<%7%g%s%W%m%0%i%`$G$9!#(J +is a highly advanced animation program for curing your bad habit of mistyping. .PP -$@.$5$/$J$j$^$9!#(J +Little version .TP .B \-F -$@Ht$S$^$9!#(J +It flies like the galaxy express 999. +.TP +.B \-c +C51 appears instead of D51. .PP -.SH $@4XO";v9`(J +.SH SEE ALSO .BR ls (1) -.SH $@%P%0(J -$@%+%l%s%H%G%#%l%/%H%j$NFbMF$,I=<($5$l$k$3$H$,$"$j$^$9!#(J -.SH $@Cx #include #include #include "sl.h" +void add_smoke(int y, int x); +void add_man(int y, int x); +int add_C51(int x); +int add_D51(int x); +int add_sl(int x); +void option(char *str); +int my_mvaddstr(int y, int x, char *str); + int ACCIDENT = 0; int LOGO = 0; int FLY = 0; +int C51 = 0; int my_mvaddstr(int y, int x, char *str) { for ( ; x < 0; ++x, ++str) - if (*str == '\0') return ERR; + if (*str == '\0') return ERR; for ( ; *str != '\0'; ++str, ++x) - if (mvaddch(y, x, *str) == ERR) return ERR; + if (mvaddch(y, x, *str) == ERR) return ERR; return OK; } @@ -50,23 +68,24 @@ void option(char *str) extern int ACCIDENT, FLY, LONG; while (*str != '\0') { - switch (*str++) { - case 'a': ACCIDENT = 1; break; - case 'F': FLY = 1; break; - case 'l': LOGO = 1; break; - default: break; - } + switch (*str++) { + case 'a': ACCIDENT = 1; break; + case 'F': FLY = 1; break; + case 'l': LOGO = 1; break; + case 'c': C51 = 1; break; + default: break; + } } } -void main(int argc, char *argv[]) +int main(int argc, char *argv[]) { int x, i; for (i = 1; i < argc; ++i) { - if (*argv[i] == '-') { - option(argv[i] + 1); - } + if (*argv[i] == '-') { + option(argv[i] + 1); + } } initscr(); signal(SIGINT, SIG_IGN); @@ -75,13 +94,17 @@ void main(int argc, char *argv[]) scrollok(stdscr, FALSE); for (x = COLS - 1; ; --x) { - if (LOGO == 0) { - if (add_D51(x) == ERR) break; - } else { - if (add_sl(x) == ERR) break; - } - refresh(); - usleep(20000); + if (LOGO == 1) { + if (add_sl(x) == ERR) break; + } + else if (C51 == 1) { + if (add_C51(x) == ERR) break; + } + else { + if (add_D51(x) == ERR) break; + } + refresh(); + usleep(20000); } mvcur(0, COLS - 1, LINES - 1, 0); endwin(); @@ -91,62 +114,62 @@ void main(int argc, char *argv[]) int add_sl(int x) { static char *sl[LOGOPATTERNS][LOGOHIGHT + 1] - = {{LOGO1, LOGO2, LOGO3, LOGO4, LWHL11, LWHL12, DELLN}, - {LOGO1, LOGO2, LOGO3, LOGO4, LWHL21, LWHL22, DELLN}, - {LOGO1, LOGO2, LOGO3, LOGO4, LWHL31, LWHL32, DELLN}, - {LOGO1, LOGO2, LOGO3, LOGO4, LWHL41, LWHL42, DELLN}, - {LOGO1, LOGO2, LOGO3, LOGO4, LWHL51, LWHL52, DELLN}, - {LOGO1, LOGO2, LOGO3, LOGO4, LWHL61, LWHL62, DELLN}}; + = {{LOGO1, LOGO2, LOGO3, LOGO4, LWHL11, LWHL12, DELLN}, + {LOGO1, LOGO2, LOGO3, LOGO4, LWHL21, LWHL22, DELLN}, + {LOGO1, LOGO2, LOGO3, LOGO4, LWHL31, LWHL32, DELLN}, + {LOGO1, LOGO2, LOGO3, LOGO4, LWHL41, LWHL42, DELLN}, + {LOGO1, LOGO2, LOGO3, LOGO4, LWHL51, LWHL52, DELLN}, + {LOGO1, LOGO2, LOGO3, LOGO4, LWHL61, LWHL62, DELLN}}; static char *coal[LOGOHIGHT + 1] - = {LCOAL1, LCOAL2, LCOAL3, LCOAL4, LCOAL5, LCOAL6, DELLN}; + = {LCOAL1, LCOAL2, LCOAL3, LCOAL4, LCOAL5, LCOAL6, DELLN}; static char *car[LOGOHIGHT + 1] - = {LCAR1, LCAR2, LCAR3, LCAR4, LCAR5, LCAR6, DELLN}; + = {LCAR1, LCAR2, LCAR3, LCAR4, LCAR5, LCAR6, DELLN}; int i, y, py1 = 0, py2 = 0, py3 = 0; - + if (x < - LOGOLENGTH) return ERR; y = LINES / 2 - 3; if (FLY == 1) { - y = (x / 6) + LINES - (COLS / 6) - LOGOHIGHT; - py1 = 2; py2 = 4; py3 = 6; + y = (x / 6) + LINES - (COLS / 6) - LOGOHIGHT; + py1 = 2; py2 = 4; py3 = 6; } for (i = 0; i <= LOGOHIGHT; ++i) { - my_mvaddstr(y + i, x, sl[(LOGOLENGTH + x) / 3 % LOGOPATTERNS][i]); - my_mvaddstr(y + i + py1, x + 21, coal[i]); - my_mvaddstr(y + i + py2, x + 42, car[i]); - my_mvaddstr(y + i + py3, x + 63, car[i]); + my_mvaddstr(y + i, x, sl[(LOGOLENGTH + x) / 3 % LOGOPATTERNS][i]); + my_mvaddstr(y + i + py1, x + 21, coal[i]); + my_mvaddstr(y + i + py2, x + 42, car[i]); + my_mvaddstr(y + i + py3, x + 63, car[i]); } if (ACCIDENT == 1) { - add_man(y + 1, x + 14); - add_man(y + 1 + py2, x + 45); add_man(y + 1 + py2, x + 53); - add_man(y + 1 + py3, x + 66); add_man(y + 1 + py3, x + 74); + add_man(y + 1, x + 14); + add_man(y + 1 + py2, x + 45); add_man(y + 1 + py2, x + 53); + add_man(y + 1 + py3, x + 66); add_man(y + 1 + py3, x + 74); } add_smoke(y - 1, x + LOGOFUNNEL); return OK; } -add_D51(int x) +int add_D51(int x) { static char *d51[D51PATTERNS][D51HIGHT + 1] - = {{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, - D51WHL11, D51WHL12, D51WHL13, D51DEL}, - {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, - D51WHL21, D51WHL22, D51WHL23, D51DEL}, - {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, - D51WHL31, D51WHL32, D51WHL33, D51DEL}, - {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, - D51WHL41, D51WHL42, D51WHL43, D51DEL}, - {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, - D51WHL51, D51WHL52, D51WHL53, D51DEL}, - {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, - D51WHL61, D51WHL62, D51WHL63, D51DEL}}; + = {{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, + D51WHL11, D51WHL12, D51WHL13, D51DEL}, + {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, + D51WHL21, D51WHL22, D51WHL23, D51DEL}, + {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, + D51WHL31, D51WHL32, D51WHL33, D51DEL}, + {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, + D51WHL41, D51WHL42, D51WHL43, D51DEL}, + {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, + D51WHL51, D51WHL52, D51WHL53, D51DEL}, + {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7, + D51WHL61, D51WHL62, D51WHL63, D51DEL}}; static char *coal[D51HIGHT + 1] - = {COAL01, COAL02, COAL03, COAL04, COAL05, - COAL06, COAL07, COAL08, COAL09, COAL10, COALDEL}; + = {COAL01, COAL02, COAL03, COAL04, COAL05, + COAL06, COAL07, COAL08, COAL09, COAL10, COALDEL}; int y, i, dy = 0; @@ -154,72 +177,112 @@ add_D51(int x) y = LINES / 2 - 5; if (FLY == 1) { - y = (x / 7) + LINES - (COLS / 7) - D51HIGHT; - dy = 1; + y = (x / 7) + LINES - (COLS / 7) - D51HIGHT; + dy = 1; } for (i = 0; i <= D51HIGHT; ++i) { - my_mvaddstr(y + i, x, d51[(D51LENGTH + x) % D51PATTERNS][i]); - my_mvaddstr(y + i + dy, x + 53, coal[i]); + my_mvaddstr(y + i, x, d51[(D51LENGTH + x) % D51PATTERNS][i]); + my_mvaddstr(y + i + dy, x + 53, coal[i]); } if (ACCIDENT == 1) { - add_man(y + 2, x + 43); - add_man(y + 2, x + 47); + add_man(y + 2, x + 43); + add_man(y + 2, x + 47); } add_smoke(y - 1, x + D51FUNNEL); return OK; } +int add_C51(int x) +{ + static char *c51[C51PATTERNS][C51HIGHT + 1] + = {{C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7, + C51WH11, C51WH12, C51WH13, C51WH14, C51DEL}, + {C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7, + C51WH21, C51WH22, C51WH23, C51WH24, C51DEL}, + {C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7, + C51WH31, C51WH32, C51WH33, C51WH34, C51DEL}, + {C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7, + C51WH41, C51WH42, C51WH43, C51WH44, C51DEL}, + {C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7, + C51WH51, C51WH52, C51WH53, C51WH54, C51DEL}, + {C51STR1, C51STR2, C51STR3, C51STR4, C51STR5, C51STR6, C51STR7, + C51WH61, C51WH62, C51WH63, C51WH64, C51DEL}}; + static char *coal[C51HIGHT + 1] + = {COALDEL, COAL01, COAL02, COAL03, COAL04, COAL05, + COAL06, COAL07, COAL08, COAL09, COAL10, COALDEL}; -int add_man(int y, int x) + int y, i, dy = 0; + + if (x < - C51LENGTH) return ERR; + y = LINES / 2 - 5; + + if (FLY == 1) { + y = (x / 7) + LINES - (COLS / 7) - C51HIGHT; + dy = 1; + } + for (i = 0; i <= C51HIGHT; ++i) { + my_mvaddstr(y + i, x, c51[(C51LENGTH + x) % C51PATTERNS][i]); + my_mvaddstr(y + i + dy, x + 55, coal[i]); + } + if (ACCIDENT == 1) { + add_man(y + 3, x + 45); + add_man(y + 3, x + 49); + } + add_smoke(y - 1, x + C51FUNNEL); + return OK; +} + + +void add_man(int y, int x) { static char *man[2][2] = {{"", "(O)"}, {"Help!", "\\O/"}}; int i; for (i = 0; i < 2; ++i) { - my_mvaddstr(y + i, x, man[(LOGOLENGTH + x) / 12 % 2][i]); + my_mvaddstr(y + i, x, man[(LOGOLENGTH + x) / 12 % 2][i]); } } -int add_smoke(int y, int x) -#define SMOKEPTNS 16 +void add_smoke(int y, int x) +#define SMOKEPTNS 16 { static struct smokes { - int y, x; - int ptrn, kind; + int y, x; + int ptrn, kind; } S[1000]; static int sum = 0; static char *Smoke[2][SMOKEPTNS] - = {{"( )", "( )", "( )", "( )", "( )", - "( )" , "( )" , "( )" , "()" , "()" , - "O" , "O" , "O" , "O" , "O" , - " " }, - {"(@@@)", "(@@@@)", "(@@@@)", "(@@@)", "(@@)", - "(@@)" , "(@)" , "(@)" , "@@" , "@@" , - "@" , "@" , "@" , "@" , "@" , - " " }}; + = {{"( )", "( )", "( )", "( )", "( )", + "( )" , "( )" , "( )" , "()" , "()" , + "O" , "O" , "O" , "O" , "O" , + " " }, + {"(@@@)", "(@@@@)", "(@@@@)", "(@@@)", "(@@)", + "(@@)" , "(@)" , "(@)" , "@@" , "@@" , + "@" , "@" , "@" , "@" , "@" , + " " }}; static char *Eraser[SMOKEPTNS] - = {" ", " ", " ", " ", " ", - " " , " " , " " , " " , " " , - " " , " " , " " , " " , " " , - " " }; + = {" ", " ", " ", " ", " ", + " " , " " , " " , " " , " " , + " " , " " , " " , " " , " " , + " " }; static int dy[SMOKEPTNS] = { 2, 1, 1, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0 }; + 0, 0, 0, 0, 0, 0 }; static int dx[SMOKEPTNS] = {-2, -1, 0, 1, 1, 1, 1, 1, 2, 2, - 2, 2, 2, 3, 3, 3 }; + 2, 2, 2, 3, 3, 3 }; int i; if (x % 4 == 0) { - for (i = 0; i < sum; ++i) { - my_mvaddstr(S[i].y, S[i].x, Eraser[S[i].ptrn]); - S[i].y -= dy[S[i].ptrn]; - S[i].x += dx[S[i].ptrn]; - S[i].ptrn += (S[i].ptrn < SMOKEPTNS - 1) ? 1 : 0; - my_mvaddstr(S[i].y, S[i].x, Smoke[S[i].kind][S[i].ptrn]); - } - my_mvaddstr(y, x, Smoke[sum % 2][0]); - S[sum].y = y; S[sum].x = x; - S[sum].ptrn = 0; S[sum].kind = sum % 2; - sum ++; + for (i = 0; i < sum; ++i) { + my_mvaddstr(S[i].y, S[i].x, Eraser[S[i].ptrn]); + S[i].y -= dy[S[i].ptrn]; + S[i].x += dx[S[i].ptrn]; + S[i].ptrn += (S[i].ptrn < SMOKEPTNS - 1) ? 1 : 0; + my_mvaddstr(S[i].y, S[i].x, Smoke[S[i].kind][S[i].ptrn]); + } + my_mvaddstr(y, x, Smoke[sum % 2][0]); + S[sum].y = y; S[sum].x = x; + S[sum].ptrn = 0; S[sum].kind = sum % 2; + sum ++; } } diff --git a/src/cmd/sl/sl.h b/src/cmd/sl/sl.h index fd5055c..6e7206e 100644 --- a/src/cmd/sl/sl.h +++ b/src/cmd/sl/sl.h @@ -1,14 +1,15 @@ /*======================================== - * sl.h: Text data of SL version 3.01 - * Copyright 1993 Toyoda Masashi - * (toyoda@is.titech.ac.jp) - * Last Modified: 1992/12/23 + * sl.h: SL version 5.02 + * Copyright 1993,2002,2014 + * Toyoda Masashi + * (mtoyoda@acm.org) + * Last Modified: 2014/06/03 *======================================== */ #define D51HIGHT 10 #define D51FUNNEL 7 -#define D51LENGTH 83 +#define D51LENGTH 83 #define D51PATTERNS 6 @@ -102,3 +103,48 @@ #define LCAR6 " (O) (O) " #define DELLN " " + +#define C51HIGHT 11 +#define C51FUNNEL 7 +#define C51LENGTH 87 +#define C51PATTERNS 6 + +#define C51DEL " " + +#define C51STR1 " ___ " +#define C51STR2 " _|_|_ _ __ __ ___________" +#define C51STR3 " D__/ \\_(_)___| |__H__| |_____I_Ii_()|_________|" +#define C51STR4 " | `---' |:: `--' H `--' | |___ ___| " +#define C51STR5 " +|~~~~~~~~++::~~~~~~~H~~+=====+~~~~~~|~~||_| |_|| " +#define C51STR6 " || | :: H +=====+ | |:: ...| " +#define C51STR7 "| | _______|_::-----------------[][]-----| | " + +#define C51WH61 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__" +#define C51WH62 "------'|oOo|==[]=- || || | ||=======_|__" +#define C51WH63 "/~\\____|___|/~\\_| O=======O=======O |__|+-/~\\_| " +#define C51WH64 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ " + +#define C51WH51 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__" +#define C51WH52 "------'|oOo|===[]=- || || | ||=======_|__" +#define C51WH53 "/~\\____|___|/~\\_| O=======O=======O |__|+-/~\\_| " +#define C51WH54 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ " + +#define C51WH41 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__" +#define C51WH42 "------'|oOo|===[]=- O=======O=======O | ||=======_|__" +#define C51WH43 "/~\\____|___|/~\\_| || || |__|+-/~\\_| " +#define C51WH44 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ " + +#define C51WH31 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__" +#define C51WH32 "------'|oOo|==[]=- O=======O=======O | ||=======_|__" +#define C51WH33 "/~\\____|___|/~\\_| || || |__|+-/~\\_| " +#define C51WH34 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ " + +#define C51WH21 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__" +#define C51WH22 "------'|oOo|=[]=- O=======O=======O | ||=======_|__" +#define C51WH23 "/~\\____|___|/~\\_| || || |__|+-/~\\_| " +#define C51WH24 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ " + +#define C51WH11 "| /~~ || |-----/~~~~\\ /[I_____I][][] --|||_______|__" +#define C51WH12 "------'|oOo|=[]=- || || | ||=======_|__" +#define C51WH13 "/~\\____|___|/~\\_| O=======O=======O |__|+-/~\\_| " +#define C51WH14 "\\_/ \\_/ \\____/ \\____/ \\____/ \\_/ " diff --git a/src/libcurses/cr_tty.c b/src/libcurses/cr_tty.c index 4d72c8e..cc506d3 100644 --- a/src/libcurses/cr_tty.c +++ b/src/libcurses/cr_tty.c @@ -59,6 +59,8 @@ gettmode() fprintf(outf, "GETTMODE: NONL = %s\n", NONL ? "TRUE" : "FALSE"); fprintf(outf, "GETTMODE: ospeed = %d\n", ospeed); # endif + /* Use nonl mode by default. */ + nonl(); } /*