sl (3.03-16) 40_apply_sl-h

Summary

 Makefile |    7 
 header.h |   15 +
 sl-h.c   |  750 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 sl-h.h   |  237 +++++++++++++++++++
 sl.c     |   12 -
 sl.h     |    6 
 6 files changed, 1022 insertions(+), 5 deletions(-)

    
download this patch

Patch contents

#! /bin/sh /usr/share/dpatch/dpatch-run
## 40_apply_sl-h.dpatch by Hiroyuki Yamamoto <yama1066@gmail.com>
##
## All lines beginning with `## DP:' are a description of the patch.
## DP: apply sl-h.

@DPATCH@
diff -urNad sl-3.03~/Makefile sl-3.03/Makefile
--- sl-3.03~/Makefile	2008-12-27 20:05:20.000000000 +0900
+++ sl-3.03/Makefile	2008-12-27 20:05:21.000000000 +0900
@@ -7,12 +7,15 @@
 #         2008/12/27
 #==========================================
 
-all: sl
+all: sl sl-h
 
 sl: sl.c sl.h
 	$(CC) $(CFLAGS) -o sl sl.c $(LDFLAGS)
 
+sl-h: sl-h.c sl-h.h header.h
+	$(CC) $(CFLAGS) -o sl-h sl-h.c $(LDFLAGS)
+
 clean::
-	rm -f sl
+	rm -f sl sl-h
 
 distclean:: clean
diff -urNad sl-3.03~/header.h sl-3.03/header.h
--- sl-3.03~/header.h	1970-01-01 09:00:00.000000000 +0900
+++ sl-3.03/header.h	2008-12-27 20:05:21.000000000 +0900
@@ -0,0 +1,15 @@
+/*                   *
+ *                   *
+ *                   */
+
+extern int add_D51_coach();
+extern int add_D51_coach_r();
+extern int add_sl();
+extern int add_man();
+extern int add_smoke();
+extern int add_smoke_r();
+extern int add_cross();
+extern int begin_gate();
+extern int end_gate();
+extern int x_gate();
+extern void end_proc();
diff -urNad sl-3.03~/sl-h.c sl-3.03/sl-h.c
--- sl-3.03~/sl-h.c	1970-01-01 09:00:00.000000000 +0900
+++ sl-3.03/sl-h.c	2008-12-27 20:05:21.000000000 +0900
@@ -0,0 +1,750 @@
+/*========================================
+ *    sl.c:
+ *	Copyright 1993,1998 Toyoda Masashi 
+ *		(toyoda@is.titech.ac.jp)
+ *	Last Modified: 1998/ 7/22
+ *========================================
+ */
+/* sl version 3.03 : add usleep(20000)                                       */
+/*                                              by Toyoda Masashi 1998/ 7/22 */
+/* sl version 3.02 : D51 flies! Change options.                              */
+/*                                              by Toyoda Masashi 1993/ 1/19 */
+/* sl version 3.01 : Wheel turns smoother                                    */
+/*                                              by Toyoda Masashi 1992/12/25 */
+/* sl version 3.00 : Add d(D51) option                                       */
+/*                                              by Toyoda Masashi 1992/12/24 */
+/* sl version 2.02 : Bug fixed.(dust remains in screen)                      */
+/*                                              by Toyoda Masashi 1992/12/17 */
+/* sl version 2.01 : Smoke run and disappear.                                */
+/*                   Change '-a' to accident option.			     */
+/*                                              by Toyoda Masashi 1992/12/16 */
+/* sl version 2.00 : Add a(all),l(long),F(Fly!) options.                     */
+/* 						by Toyoda Masashi 1992/12/15 */
+/* sl version 1.02 : Add turning wheel.                                      */
+/*					        by Toyoda Masashi 1992/12/14 */
+/* sl version 1.01 : Add more complex smoke.                                 */
+/*                                              by Toyoda Masashi 1992/12/14 */
+/* sl version 1.00 : SL runs vomitting out smoke.                            */
+/*						by Toyoda Masashi 1992/12/11 */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <curses.h>
+#include <signal.h>
+#include <unistd.h>
+#include "sl-h.h"
+#include "header.h"
+
+#define RTOL 0
+#define LTOR 1
+
+#ifndef useconds_t
+  #define USLEEP_ARG0_TYPE unsigned
+#else
+  #define USLEEP_ARG0_TYPE useconds_t
+#endif
+
+int ACCIDENT  = 0;
+int LOGO      = 0;
+int FLY       = 0;
+int INTR      = 1;
+int PASSNUM = 5;
+int ALL_LENGTH = 0;
+int DIREC = RTOL;
+int WAIT_TIME = 20000;
+
+int my_mvaddstr(int y, int x, char *str)
+{
+    int i = 0;
+
+    for ( ; x < 0; ++x, ++i)
+	if (str[i] == '\0')  return ERR;
+    if (mvaddnstr(y, x, &str[i], (int)COLS - x) == ERR) return ERR;
+    return OK;
+}
+
+int my_mvaddstr_r(int y, int x, char *str)
+{
+    int i = 0;
+    char c;
+
+    for ( ; x >= COLS; --x, ++i)
+	if (str[i] == '\0')  return ERR;
+    for ( ; str[i] != '\0'; ++i, --x) {
+	c = str[i];
+	switch (c) {
+	  case '\\': c = '/'; break;
+	  case '/': c = '\\'; break;
+	  case '(': c = ')'; break;
+	  case ')': c = '('; break;
+	  case '[': c = ']'; break;
+	  case ']': c = '['; break;
+        }
+	if (mvaddch(y, x, str[i]) == ERR)  return ERR;
+    }
+    return OK;
+}
+
+void option(char *str)
+{
+    extern int ACCIDENT, FLY;
+
+    while (*str != '\0') {
+	switch (*str++) {
+	    case 'a': ACCIDENT = 1; break;
+	    case 'F': FLY      = 1; break;
+	    case 'l': LOGO     = 1; break;
+            case 'e': INTR     = 1; break;
+	    default:                break;
+	}
+    }
+}
+
+int dirc(int y, int x)
+ {
+  if (DIREC == RTOL) {
+    my_mvaddstr(y + 5, cros0l[5] + x - 1, "<-- ");
+  } else {
+    my_mvaddstr(y + 5, cros0l[5] + x - 1, " -->");
+  }
+  return 0;
+}
+ 
+int main(int argc, char *argv[])
+{
+    int x, i, j, k, p, ONEDIREC, len;
+    int (*sl_func)();
+    time_t t;
+    char num[10];
+    unsigned short int s;
+    char *pp;
+    char *c[D51PATTERNS][D51HIGHT+1];
+
+    for (i = 1; i < argc; ++i) {
+	if (*argv[i] == '-') {
+	    option(argv[i] + 1);
+	}
+    }
+    time(&t);
+    s = (unsigned short int)t;
+    seed48(&s);
+#ifdef DEBUG
+    PASSNUM = 3;
+    ONEDIREC = 1;
+    WAIT_TIME = (USLEEP_ARG0_TYPE)100;
+    signal(SIGINT, end_proc);
+#else
+    if (INTR == 0) {
+        signal(SIGINT, SIG_IGN);
+    }
+    PASSNUM = (int)(drand48() * 20.0) + 10;
+    if (drand48() > 0.5) {
+      ONEDIREC = 1;
+    } else {
+      ONEDIREC = 0;
+    }
+    WAIT_TIME = (USLEEP_ARG0_TYPE)(drand48() * 50000.0);
+#endif
+    ALL_LENGTH = (3 * D51LENGTH + (PASSLENGTH * (PASSNUM - 1)) + LPASSLENGTH);
+
+    initscr();
+    noecho();
+#ifdef DEBUG
+    printf("%d,%d\n\r", COLS, LINES);
+    printf("Hit any key\n\r");
+    fflush(stdout);
+    getc(stdin);
+#endif
+    leaveok(stdscr, TRUE);
+    scrollok(stdscr, FALSE);
+
+    DIREC = RTOL;
+    p = 3 * COLS / 10;
+    pp = (char*)malloc((size_t)(COLS + ALL_LENGTH + 10) * (D51HIGHT + 1) * (D51PATTERNS + 1));
+    for (i = 0; i <= (COLS + ALL_LENGTH + 1) * (D51HIGHT + 1) * D51PATTERNS; ++i) {
+      pp[i] = (char)NULL;
+    }
+
+    for (j = 0; j < D51PATTERNS; ++j) {
+      for (i = 0; i <= D51HIGHT; ++i) {
+	c[j][i] = pp + (COLS + ALL_LENGTH + 2) * i + (COLS + ALL_LENGTH + 1) * (D51HIGHT + 1) * j;
+	for (k = 0; k < COLS; ++k) {
+	  strcat(c[j][i], " ");
+	}
+	strncat(c[j][i], d51[j][i], 53);
+	strncat(c[j][i], coal[i], 29);
+	strncat(c[j][i], d51[j][i], 53);
+	strncat(c[j][i], coal[i], 29);
+	strncat(c[j][i], d51[j][i], 53);
+	strncat(c[j][i], coal[i], 29);
+	for (k = 0; k < PASSNUM - 1; ++k) {
+	  strncat(c[j][i], coach[i], 88);
+	  if ( i == 3 ) {
+	    sprintf(num, "%d", k + 1);
+	    len = strlen(num);
+	    strncpy(c[j][i] + COLS + 254 + (PASSLENGTH * k), num, len);
+	  }
+	}
+	strncat(c[j][i], lcoach[i], 89);
+	if ( i == 3 ) {
+	  sprintf(num, "%d", k + 1);
+	  len = strlen(num);
+	  strncpy(c[j][i] + COLS + 254 + (PASSLENGTH * k), num, len);
+	}
+      }
+    }
+    if (FLY != 1) {
+      begin_gate(p);
+    }
+    if (LOGO == 0) {
+      sl_func = add_D51_coach;
+    } else {
+      sl_func = add_sl;
+    }
+    for (x = COLS - 1; ; --x) {
+        if ((*sl_func)(x, c) == ERR) break;
+        if (FLY != 1) {
+          if (add_cross(p) == ERR) break;
+        }
+	refresh();
+	usleep((USLEEP_ARG0_TYPE)WAIT_TIME);
+    }
+    if (FLY != 1 && LOGO == 0 && ONEDIREC == 1) {
+      x_gate(p);
+      for (x = 0; ; ++x) {
+        if (add_D51_coach_r(x) == ERR) break;
+        if (add_cross(p) == ERR) break;
+        refresh();
+        usleep((USLEEP_ARG0_TYPE)WAIT_TIME);
+      }
+    }
+    if (FLY != 1) {
+      end_gate(p);
+    }
+    mvcur(0, COLS - 1, LINES - 1, 0);
+    endwin();
+
+    return 0;
+}
+
+void end_proc() {
+    mvcur(0, COLS - 1, LINES - 1, 0);
+    endwin();
+    exit(SIGINT);
+}
+
+
+int add_cross(int p)
+{
+  int i, y, n = 20, hn;
+  static int tt;
+#ifdef DEBUG
+  char buf[100];
+#endif
+
+  hn = n / 2;
+  if ( LOGO == 0) {
+    y = LINES / 2 - 5;
+  } else {
+    y = LINES / 2 - 7;
+  }
+  for (i = 2; i < D51HIGHT; ++i) {
+    my_mvaddstr(y + i, cros0l[i] + p, cros0[i]);
+  }
+  for (i = 8; i < D51HIGHT; ++i) {
+    my_mvaddstr(y + i, p + 5, cros3[i]);
+  }
+#ifdef DEBUG
+  sprintf(buf, "%d", tt);
+  my_mvaddstr(0, 0, buf);
+#endif
+
+  if ( tt % n >= 0 && tt % n < hn) {
+    my_mvaddstr(y + 4, cros0l[5] + p - 1, "O");
+    my_mvaddstr(y + 4, cros0l[5] + p + 2, "X");
+    my_mvaddstr(y + 5, cros0l[5] + p - 1, " || ");
+  } else if ( tt % n >= hn && tt % n < n) {
+    my_mvaddstr(y + 4, cros0l[5] + p - 1, "X");
+    my_mvaddstr(y + 4, cros0l[5] + p + 2, "O");
+    dirc(y, p);
+  }
+  ++tt;
+
+  return 0;
+}
+
+
+int begin_gate(int p)
+{
+  int i, y, n = 20, hn;
+  int tt;
+
+  hn = n / 2;
+  if ( LOGO == 0) {
+    y = LINES / 2 - 5;
+  } else {
+    y = LINES / 2 - 7;
+  }
+
+  for (tt = 0; tt < 80; ++tt) {
+    for (i = 0; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, p + 5, cros1[i]);
+    }
+    for (i = 2; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, cros0l[i] + p, cros0[i]);
+    }
+    if ( tt % n >= 0 && tt % n < hn) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "O");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "X");
+      my_mvaddstr(y + 5, cros0l[5] + p - 1, " || ");
+    } else if ( tt % n >= hn && tt % n < n) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "X");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "O");
+      dirc(y, p);
+    }
+    my_mvaddstr(LINES + 1, COLS + 1, "");
+    refresh();
+    usleep((USLEEP_ARG0_TYPE)WAIT_TIME);
+  }
+  for (tt = 0; tt <= 15; ++tt) {
+    for (i = 0; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, p + 5, cros2[i]);
+    }
+    for (i = 2; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, cros0l[i] + p, cros0[i]);
+    }
+    if ( tt % n >= 0 && tt % n < hn) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "O");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "X");
+      my_mvaddstr(y + 5, cros0l[5] + p - 1, " || ");
+    } else if ( tt % n >= hn && tt % n < n) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "X");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "O");
+      dirc(y, p);
+    }
+    my_mvaddstr(LINES + 1, COLS + 1, "");
+    refresh();
+    usleep((USLEEP_ARG0_TYPE)WAIT_TIME);
+  }
+  for (tt = 0; tt <= 20; ++tt) {
+    for (i = 0; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, p + 5, cros3[i]);
+    }
+    for (i = 2; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, cros0l[i] + p, cros0[i]);
+    }
+    if ( tt % n >= 0 && tt % n < hn) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "O");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "X");
+      my_mvaddstr(y + 5, cros0l[5] + p - 1, " || ");
+    } else if ( tt % n >= hn && tt % n < n) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "X");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "O");
+      dirc(y, p);
+    }
+    my_mvaddstr(LINES + 1, COLS + 1, "");
+    refresh();
+    usleep((USLEEP_ARG0_TYPE)WAIT_TIME);
+  }
+
+  return 0;
+}
+
+int end_gate(int p)
+{
+  int i, y, n = 20, hn;
+  int tt;
+
+  hn = n / 2;
+  if ( LOGO == 0) {
+    y = LINES / 2 - 5;
+  } else {
+    y = LINES / 2 - 7;
+  }
+  
+  for (tt = 0; tt <= 20; ++tt) {
+    for (i = 0; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, p + 5, cros3[i]);
+    }
+    for (i = 2; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, cros0l[i] + p, cros0[i]);
+    }
+    if ( tt % n >= 0 && tt % n < hn) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "O");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "X");
+      my_mvaddstr(y + 5, cros0l[5] + p - 1, " || ");
+    } else if ( tt % n >= hn && tt % n < n) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "X");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "O");
+      dirc(y, p);
+    }
+    my_mvaddstr(LINES + 1, COLS + 1, "");
+    refresh();
+    usleep((USLEEP_ARG0_TYPE)WAIT_TIME);
+  }
+  for (tt = 0; tt <= 15; ++tt) {
+    for (i = 0; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, p + 5, cros2[i]);
+    }
+    for (i = 2; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, cros0l[i] + p, cros0[i]);
+    }
+    if ( tt % n >= 0 && tt % n < hn) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "O");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "X");
+      my_mvaddstr(y + 5, cros0l[5] + p - 1, " || ");
+    } else if ( tt % n >= hn && tt % n < n) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "X");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "O");
+      dirc(y, p);
+    }
+    my_mvaddstr(LINES + 1, COLS + 1, "");
+    refresh();
+    usleep((USLEEP_ARG0_TYPE)WAIT_TIME);
+  }
+  for (tt = 0; tt < 80; ++tt) {
+    for (i = 0; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, p + 5, cros1[i]);
+    }
+    for (i = 2; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, cros0l[i] + p, cros0[i]);
+    }
+    my_mvaddstr(y + 4, cros0l[5] + p - 1, "X");
+    my_mvaddstr(y + 4, cros0l[5] + p + 2, "X");
+    my_mvaddstr(LINES + 1, COLS + 1, "");
+    my_mvaddstr(y + 5, cros0l[5] + p - 1, " || ");
+    refresh();
+    usleep((USLEEP_ARG0_TYPE)WAIT_TIME);
+  }
+
+  return 0;
+}
+
+
+int x_gate(int p)
+  {
+  int i, y, n = 20, hn;
+  int tt;
+
+  hn = n / 2;
+  if ( LOGO == 0) {
+    y = LINES / 2 - 5;
+  } else {
+    y = LINES / 2 - 7;
+  }
+
+  for (tt = 0; tt <= 20; ++tt) {
+    for (i = 0; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, p + 5, cros3[i]);
+    }
+    for (i = 2; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, cros0l[i] + p, cros0[i]);
+    }
+    if ( tt % n >= 0 && tt % n < hn) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "O");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "X");
+      my_mvaddstr(y + 5, cros0l[5] + p - 1, " || ");
+    } else if ( tt % n >= hn && tt % n < n) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "X");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "O");
+      dirc(y, p);
+    }
+    my_mvaddstr(LINES + 1, COLS + 1, "");
+    refresh();
+    usleep((USLEEP_ARG0_TYPE)WAIT_TIME);
+  }
+  for (tt = 0; tt <= 10; ++tt) {
+    for (i = 0; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, p + 5, cros2[i]);
+    }
+    for (i = 2; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, cros0l[i] + p, cros0[i]);
+    }
+    if ( tt % n >= 0 && tt % n < hn) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "O");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "X");
+      my_mvaddstr(y + 5, cros0l[5] + p - 1, " || ");
+    } else if ( tt % n >= hn && tt % n < n) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "X");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "O");
+      dirc(y, p);
+    }
+    my_mvaddstr(LINES + 1, COLS + 1, "");
+    refresh();
+    usleep((USLEEP_ARG0_TYPE)WAIT_TIME);
+  }
+  DIREC = ( DIREC + 1 ) % 2;
+  for (tt = 0; tt <= 10; ++tt) {
+    for (i = 0; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, p + 5, cros2[i]);
+    }
+    for (i = 2; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, cros0l[i] + p, cros0[i]);
+    }
+    if ( tt % n >= 0 && tt % n < hn) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "O");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "X");
+      my_mvaddstr(y + 5, cros0l[5] + p - 1, " || ");
+    } else if ( tt % n >= hn && tt % n < n) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "X");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "O");
+      dirc(y, p);
+    }
+    my_mvaddstr(LINES + 1, COLS + 1, "");
+    refresh();
+    usleep((USLEEP_ARG0_TYPE)WAIT_TIME);
+  }
+  for (tt = 0; tt <= 20; ++tt) {
+    for (i = 0; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, p + 5, cros3[i]);
+    }
+    for (i = 2; i < D51HIGHT; ++i) {
+      my_mvaddstr(y + i, cros0l[i] + p, cros0[i]);
+    }
+    if ( tt % n >= 0 && tt % n < hn) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "O");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "X");
+      my_mvaddstr(y + 5, cros0l[5] + p - 1, " || ");
+    } else if ( tt % n >= hn && tt % n < n) {
+      my_mvaddstr(y + 4, cros0l[5] + p - 1, "X");
+      my_mvaddstr(y + 4, cros0l[5] + p + 2, "O");
+      dirc(y, p);
+    }
+    my_mvaddstr(LINES + 1, COLS + 1, "");
+    refresh();
+    usleep((USLEEP_ARG0_TYPE)WAIT_TIME);
+  }
+
+  return 0;
+}
+
+int add_sl(int x, char *c[])
+{
+    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}};
+
+    static char *car[LOGOHIGHT + 1]
+	= {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;
+    }
+    for (i = 0; i <= LOGOHIGHT; ++i) {
+	my_mvaddstr(y + i, x, sl[(LOGOLENGTH + x) / 3 % LOGOPATTERNS][i]);
+	my_mvaddstr(y + i + py1, x + 21, lcoal[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_smoke(y - 1, x + LOGOFUNNEL);
+    return OK;
+}
+
+
+int add_D51_coach(int x, char *c[])
+{
+    int y, i, dy = 0;
+#ifdef DEBUG
+    char buf[100];
+#endif
+
+    if (x < ( 4 - ALL_LENGTH ))  return ERR;
+    y = LINES / 2 - 5;
+
+#ifdef DEBUG
+    sprintf(buf, "%d", x);
+    my_mvaddstr(1, 0, buf);
+#endif
+    if (FLY == 1) {
+	y = (x / 7) + LINES - (COLS / 7) - D51HIGHT;
+	dy = 1;
+    }
+    for (i = 0; i <= D51HIGHT; ++i) {
+       my_mvaddstr(y + i, 0, c[(D51HIGHT + 1) * ((ALL_LENGTH + x) % D51PATTERNS) + i] + COLS - x);
+    }
+    if (ACCIDENT == 1) {
+	add_man(y + 2, x + 43);
+	add_man(y + 2, x + 47);
+        add_man(y + 2, x + 125);
+        add_man(y + 2, x + 129);
+        add_man(y + 2, x + 207);
+        add_man(y + 2, x + 211);
+    }
+    add_smoke(y - 1, x + D51FUNNEL);
+    add_smoke(y - 1, x + D51FUNNEL + 81);
+    add_smoke(y - 1, x + D51FUNNEL + 162);
+    return OK;
+}
+
+
+int add_D51_coach_r(int x)
+{
+    int y, i, j;
+    char num[10];
+
+    if (x > ALL_LENGTH + COLS)  return ERR;
+    y = LINES / 2 - 5;
+
+    for (i = 0; i <= D51HIGHT; ++i) {
+	my_mvaddstr_r(y + i, x, d51_r[(ALL_LENGTH + x) % D51PATTERNS][i]);
+	my_mvaddstr_r(y + i, x - 53, coal[i]);
+	my_mvaddstr_r(y + i, x - 82, d51_r[(ALL_LENGTH + x) % D51PATTERNS][i]);
+	my_mvaddstr_r(y + i, x - 135, coal[i]);
+	my_mvaddstr_r(y + i, x - 164, d51_r[(ALL_LENGTH + x) % D51PATTERNS][i]);
+	my_mvaddstr_r(y + i, x - 217, coal[i]);
+        for (j = 0; j < PASSNUM - 1; ++j) {
+	  my_mvaddstr_r(y + i, x - 246 - (PASSLENGTH * j), coach[i]);
+          if ( i == 3 ) {
+	    sprintf(num, "%d", j + 1);
+	    my_mvaddstr(y + i, x - 255 - (PASSLENGTH * j), num);
+	  }
+        }
+	my_mvaddstr_r(y + i, x - 246 - (PASSLENGTH * (PASSNUM - 1)), lcoach[i]);
+	if ( i == 3 ) {
+	  sprintf(num, "%d", j + 1);
+	  my_mvaddstr(y + i, x - 255 - (PASSLENGTH * (PASSNUM - 1)), num);
+	}
+    }
+    if (ACCIDENT == 1) {
+	add_man(y + 2, x - 45);
+	add_man(y + 2, x - 49);
+	add_man(y + 2, x - 127);
+        add_man(y + 2, x - 131);
+        add_man(y + 2, x - 209);
+        add_man(y + 2, x - 213);
+
+    }
+    add_smoke_r(y - 1, x - D51FUNNEL - 3);
+    add_smoke_r(y - 1, x - D51FUNNEL - 84);
+    add_smoke_r(y - 1, x - D51FUNNEL - 167);
+    return OK;
+}
+
+
+int add_man(int y, int x)
+{
+    static char *man[2][2] = {{"", "(O)"}, {"Help!", "\\O/"}};
+    int i;
+
+    if ( x < 0 ) {
+      return 0;
+    }
+    for (i = 0; i < 2; ++i) {
+	my_mvaddstr(y + i, x, man[(LOGOLENGTH + x) / 12 % 2][i]);
+    }
+    return 0;
+}
+
+
+int add_smoke(int y, int x)
+#define SMOKEPTNS	16
+{
+    static struct smokes {
+	int y, x;
+	int ptrn, kind;
+    } S[1000];
+    static int sum = 0;
+    static char *Smoke[2][SMOKEPTNS]
+	= {{"(   )", "(    )", "(    )", "(   )", "(  )",
+	    "(  )" , "( )"   , "( )"   , "()"   , "()"  ,
+	    "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             };
+    static int dx[SMOKEPTNS] = {-2, -1, 0, 1, 1, 1, 1, 1, 2, 2,
+				 2,  2, 2, 3, 3, 3             };
+    int i;
+
+    if (x < - COLS) {
+      return 0;
+    }
+
+    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 ++;
+    }
+    return 0;
+}
+
+
+int add_smoke_r(int y, int x)
+#define SMOKEPTNS	16
+{
+    static struct smokes {
+	int y, x;
+	int ptrn, kind;
+    } S[1000];
+    static int sum = 0;
+    static char *Smoke[2][SMOKEPTNS]
+	= {{"(   )", "(    )", "(    )", "(   )", "(  )",
+	    "(  )" , "( )"   , "( )"   , "()"   , "()"  ,
+	    "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             };
+    static int dx[SMOKEPTNS] = {-2, -1, 0, 1, 1, 1, 1, 1, 2, 2,
+				 2,  2, 2, 3, 3, 3             };
+    int i;
+
+    if (x > 2 * COLS) {
+      return 0;
+    }
+
+    if (x % 4 == 0) {
+	for (i = 0; i < sum; ++i) {
+	    my_mvaddstr_r(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_r(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 ++;
+    }
+    return 0;
+}
diff -urNad sl-3.03~/sl-h.h sl-3.03/sl-h.h
--- sl-3.03~/sl-h.h	1970-01-01 09:00:00.000000000 +0900
+++ sl-3.03/sl-h.h	2008-12-27 20:05:21.000000000 +0900
@@ -0,0 +1,237 @@
+/*========================================
+ *    sl.h: Text data of SL version 3.01
+ *	Copyright 1993 Toyoda Masashi 
+ *		(toyoda@is.titech.ac.jp)
+ *	Last Modified: 1992/12/23
+ *========================================
+ */
+
+#define D51HIGHT	10
+#define D51FUNNEL	 7
+/*#define D51LENGTH       82*/
+#define D51LENGTH       172
+#define D51PATTERNS	 6
+
+
+#define D51STR1  "      ====        ________                ___________ "
+#define D51STR2  "  _D _|  |_______/        \\__I_I_____===__|_________| "
+#define D51STR3  "   |(_)---  |   H\\________/ |   |        =|___ ___|   "
+#define D51STR4  "   /     |  |   H  |  |     |   |         ||_| |_||   "
+#define D51STR5  "  |      |  |   H  |__--------------------| [___] |   "
+#define D51STR6  "  | ________|___H__/__|_____/[][]~\\_______|       |   "
+#define D51STR7  "  |/ |   |-----------I_____I [][] []  D   |=======|__ "
+
+#define D51WHL11 "__/ =| o |=-~~\\  /~~\\  /~~\\  /~~\\ ____Y___________|__ "
+#define D51WHL12 " |/-=|___|=    ||    ||    ||    |_____/~\\___/        "
+#define D51WHL13 "  \\_/      \\O=====O=====O=====O_/      \\_/            "
+
+#define D51WHL21 "__/ =| o |=-~~\\  /~~\\  /~~\\  /~~\\ ____Y___________|__ "
+#define D51WHL22 " |/-=|___|=O=====O=====O=====O   |_____/~\\___/        "
+#define D51WHL23 "  \\_/      \\__/  \\__/  \\__/  \\__/      \\_/            "
+
+#define D51WHL31 "__/ =| o |=-O=====O=====O=====O \\ ____Y___________|__ "
+#define D51WHL32 " |/-=|___|=    ||    ||    ||    |_____/~\\___/        "
+#define D51WHL33 "  \\_/      \\__/  \\__/  \\__/  \\__/      \\_/            "
+
+#define D51WHL41 "__/ =| o |=-~O=====O=====O=====O\\ ____Y___________|__ "
+#define D51WHL42 " |/-=|___|=    ||    ||    ||    |_____/~\\___/        "
+#define D51WHL43 "  \\_/      \\__/  \\__/  \\__/  \\__/      \\_/            "
+
+#define D51WHL51 "__/ =| o |=-~~\\  /~~\\  /~~\\  /~~\\ ____Y___________|__ "
+#define D51WHL52 " |/-=|___|=   O=====O=====O=====O|_____/~\\___/        "
+#define D51WHL53 "  \\_/      \\__/  \\__/  \\__/  \\__/      \\_/            "
+
+#define D51WHL61 "__/ =| o |=-~~\\  /~~\\  /~~\\  /~~\\ ____Y___________|__ "
+#define D51WHL62 " |/-=|___|=    ||    ||    ||    |_____/~\\___/        "
+#define D51WHL63 "  \\_/      \\_O=====O=====O=====O/      \\_/            "
+
+#define D51DEL   "                                                      "
+
+#define COAL01 "                             "
+#define COAL02 "                             "
+#define COAL03 "    _________________        "
+#define COAL04 "   _|                \\_____A "
+#define COAL05 " =|                        | "
+#define COAL06 " -|                        | "
+#define COAL07 "__|________________________|_"
+#define COAL08 "|__________________________|_"
+#define COAL09 "   |_D__D__D_|  |_D__D__D_|  "
+#define COAL10 "    \\_/   \\_/    \\_/   \\_/   "
+
+#define COALDEL "                             "
+
+#define LOGOHIGHT    	 6
+#define LOGOFUNNEL  	 4
+#define LOGOLENGTH      84
+#define LOGOPATTERNS	 6
+
+#define LOGO1  "     ++      +------ "
+#define LOGO2  "     ||      |+-+ |  "
+#define LOGO3  "   /---------|| | |  "
+#define LOGO4  "  + ========  +-+ |  "
+
+#define LWHL11 " _|--O========O~\\-+  "
+#define LWHL12 "//// \\_/      \\_/    "
+
+#define LWHL21 " _|--/O========O\\-+  "
+#define LWHL22 "//// \\_/      \\_/    "
+
+#define LWHL31 " _|--/~O========O-+  "
+#define LWHL32 "//// \\_/      \\_/    "
+
+#define LWHL41 " _|--/~\\------/~\\-+  "
+#define LWHL42 "//// \\_O========O    "
+
+#define LWHL51 " _|--/~\\------/~\\-+  "
+#define LWHL52 "//// \\O========O/    "
+
+#define LWHL61 " _|--/~\\------/~\\-+  "
+#define LWHL62 "//// O========O_/    "
+
+#define LCOAL1 "____                 "
+#define LCOAL2 "|   \\@@@@@@@@@@@     "
+#define LCOAL3 "|    \\@@@@@@@@@@@@@_ "
+#define LCOAL4 "|                  | "
+#define LCOAL5 "|__________________| "
+#define LCOAL6 "   (O)       (O)     "
+
+#define LCAR1  "____________________ "
+#define LCAR2  "|  ___ ___ ___ ___ | "
+#define LCAR3  "|  |_| |_| |_| |_| | "
+#define LCAR4  "|__________________| "
+#define LCAR5  "|__________________| "
+#define LCAR6  "   (O)        (O)    "
+
+#define DELLN  "                     "
+
+#define PASSLENGTH 88
+
+#define PASS01 "          _____  _____  _____  _____  _____  _____  _____  _____  _____  _____          "
+#define PASS02 " _________|___|__|___|__|___|__|___|__|___|__|___|__|___|__|___|__|___|__|___|_________ "
+#define PASS03 "  | ____  _____  _____  _____  _____  _____  _____  _____  _____  _____  _____  ____ |  "
+#define PASS04 "  | |  |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |  | |  "
+#define PASS05 "  | |  |  |___|  |___|  |___|  |___|  |___|  |___|  |___|  |___|  |___|  |___|  |  | |  "
+#define PASS06 "  | |  |                                                                        |  | |  "
+#define PASS07 "  | |  |                                   @@                                   |  | |  "
+#define PASS08 "__|_|__|________________________________________________________________________|__|_|__"
+#define PASS09 "\\==|_/_\\____/_\\_|  |______|Z          +--|_________________|------+    |_/_\\____/_\\_|==/"
+#define PASS10 "     \\_/    \\_/                                       +++~~              \\_/    \\_/     "
+
+#define PASSDEL "                                                                                        "
+
+#define LPASSLENGTH 88
+
+#define LPASS01 "          _____  _____  _____  _____  _____  _____  _____  _____  _____  _____           "
+#define LPASS02 " _________|___|__|___|__|___|__|___|__|___|__|___|__|___|__|___|__|___|__|___|________   "
+#define LPASS03 "  | ____  _____  _____  _____  _____  _____  _____  _____  _____  _____  ____   _____|   "
+#define LPASS04 "  | |  |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |   |  |  |   |   |    "
+#define LPASS05 "  | |  |  |___|  |___|  |___|  |___|  |___|  |___|  |___|  |___|  |___|  |  |   |   |    "
+#define LPASS06 "  | |  |                                                                 |  |   |___|    "
+#define LPASS07 "  | |  |                                   @@                            |  |   |_|_|    "
+#define LPASS08 "__|_|__|_________________________________________________________________|__|___|_|_|___ "
+#define LPASS09 "\\==|_/_\\____/_\\_|  |______|XX                    +-|_______|------+    |_/_\\____/_\\_|==/ "
+#define LPASS10 "     \\_/    \\_/                                                          \\_/    \\_/      "
+
+#define LPASSDEL "                                                                                         "
+
+#define CROS001 ""
+#define CROS002 ""
+#define CROS003 "-_||_-"
+#define CROS004  "_><_"
+#define CROS005 "- || -"
+#define CROS006   "||"
+#define CROS007   "||"
+#define CROS008   "||"
+#define CROS009   "||"
+#define CROS010 "\\&||~"
+
+static int cros0l[] = {0, 0, 0, 1, 0, 2, 2, 2, 2, 0};
+
+#define CROS101 " |                  "
+#define CROS102 " |                  "
+#define CROS103 " |                  "
+#define CROS104 " |                  "
+#define CROS105 " |                  "
+#define CROS106 " |                  "
+#define CROS107 " |                  "
+#define CROS108 " |                  "
+#define CROS109 "_|_                 "
+#define CROS110 "|||                 "
+
+#define CROS201 "          /         "
+#define CROS202 "         /          "
+#define CROS203 "        /           "
+#define CROS204 "       /            "
+#define CROS205 "      /             "
+#define CROS206 "     /              "
+#define CROS207 "    /               "
+#define CROS208 "   /                "
+#define CROS209 "__/                 "
+#define CROS210 "|/|                 "
+
+#define CROS301 "                    "
+#define CROS302 "                    "
+#define CROS303 "                    "
+#define CROS304 "                    "
+#define CROS305 "                    "
+#define CROS306 "                    "
+#define CROS307 "                    "
+#define CROS308 "                    "
+#define CROS309 "___"
+#define CROS310 "|-+-----------------"
+
+/*#define PASSNUM 5*/
+/*#define ALL_LENGTH (D51LENGTH + (PASSLENGTH * (PASSNUM - 1)) + LPASSLENGTH)*/
+
+static char *cros0[D51HIGHT]
+= {CROS001, CROS002, CROS003, CROS004, CROS005,
+   CROS006, CROS007, CROS008, CROS009, CROS010};
+static char *cros1[D51HIGHT]
+= {CROS101, CROS102, CROS103, CROS104, CROS105,
+   CROS106, CROS107, CROS108, CROS109, CROS110};
+static char *cros2[D51HIGHT]
+= {CROS201, CROS202, CROS203, CROS204, CROS205,
+   CROS206, CROS207, CROS208, CROS209, CROS210};
+static char *cros3[D51HIGHT]
+= {CROS301, CROS302, CROS303, CROS304, CROS305,
+   CROS306, CROS307, CROS308, CROS309, CROS310};
+
+static char *lcoal[LOGOHIGHT + 1]
+= {LCOAL1, LCOAL2, LCOAL3, LCOAL4, LCOAL5, LCOAL6, DELLN};
+
+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}};
+static char *coal[D51HIGHT + 1]
+= {COAL01, COAL02, COAL03, COAL04, COAL05,
+   COAL06, COAL07, COAL08, COAL09, COAL10, COALDEL};
+static char *coach[D51HIGHT + 1]
+= {PASS01, PASS02, PASS03, PASS04, PASS05,
+   PASS06, PASS07, PASS08, PASS09, PASS10, PASSDEL};
+static char *lcoach[D51HIGHT + 1]
+= {LPASS01, LPASS02, LPASS03, LPASS04, LPASS05,
+   LPASS06, LPASS07, LPASS08, LPASS09, LPASS10, LPASSDEL};
+
+static char *d51_r[D51PATTERNS][D51HIGHT + 1]
+= {{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
+    D51WHL11, D51WHL12, D51WHL13, D51DEL},
+   {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
+    D51WHL61, D51WHL62, D51WHL63, D51DEL},
+   {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
+    D51WHL51, D51WHL52, D51WHL53, D51DEL},
+   {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
+    D51WHL41, D51WHL42, D51WHL43, D51DEL},
+   {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
+    D51WHL31, D51WHL32, D51WHL33, D51DEL},
+   {D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
+    D51WHL21, D51WHL22, D51WHL23, D51DEL}};
diff -urNad sl-3.03~/sl.c sl-3.03/sl.c
--- sl-3.03~/sl.c	2008-12-27 20:05:20.000000000 +0900
+++ sl-3.03/sl.c	2008-12-27 20:05:21.000000000 +0900
@@ -48,7 +48,7 @@
 
 void option(char *str)
 {
-    extern int ACCIDENT, FLY, LONG;
+    extern int ACCIDENT, FLY;
 
     while (*str != '\0') {
 	switch (*str++) {
@@ -61,7 +61,7 @@
     }
 }
 
-void main(int argc, char *argv[])
+int main(int argc, char *argv[])
 {
     int x, i;
 
@@ -89,6 +89,8 @@
     }
     mvcur(0, COLS - 1, LINES - 1, 0);
     endwin();
+
+    return 0;
 }
 
 
@@ -133,7 +135,7 @@
 }
 
 
-add_D51(int x)
+int add_D51(int x)
 {
     static char *d51[D51PATTERNS][D51HIGHT + 1]
 	= {{D51STR1, D51STR2, D51STR3, D51STR4, D51STR5, D51STR6, D51STR7,
@@ -182,6 +184,8 @@
     for (i = 0; i < 2; ++i) {
 	my_mvaddstr(y + i, x, man[(LOGOLENGTH + x) / 12 % 2][i]);
     }
+
+    return 0;
 }
 
 
@@ -226,4 +230,6 @@
 	S[sum].ptrn = 0; S[sum].kind = sum % 2;
 	sum ++;
     }
+
+   return 0;
 }
diff -urNad sl-3.03~/sl.h sl-3.03/sl.h
--- sl-3.03~/sl.h	1994-01-19 02:23:24.000000000 +0900
+++ sl-3.03/sl.h	2008-12-27 20:05:21.000000000 +0900
@@ -102,3 +102,9 @@
 #define LCAR6  "   (O)        (O)    "
 
 #define DELLN  "                     "
+
+extern int add_D51();
+extern int add_sl();
+extern int add_man();
+extern int add_smoke();
+