Import the piano program again, except this time in the right location.

Submitted by:	Toshihiro Kanda <candy@kgc.co.jp>
This commit is contained in:
jkh 1995-04-28 17:38:08 +00:00
parent 0579a71a61
commit 1a57f0671c
4 changed files with 243 additions and 0 deletions

8
games/piano/Makefile Normal file
View File

@ -0,0 +1,8 @@
# @(#)Makefile 8.1 (Berkeley) 5/31/93
PROG= piano
MAN6= piano.6
DPADD= ${LIBCURSES} ${LIBTERMCAP}
LDADD= -lcurses -ltermcap
.include <bsd.prog.mk>

12
games/piano/README Normal file
View File

@ -0,0 +1,12 @@
Hello. I've been using FreeBSD from version 1.0 1993 and very happy.
One of my favorite is /dev/speaker. Here is my /dev/speaker
application named `piano' which is a piano/organ emulator. I'd like
to contribute this program to FreeBSD if you like it.
This directory contains sources, Makefile and man page.
Make sure to config /dev/speaker and make it writable. Please select
appropriate owner/group/mode for /dev/speaker and piano.
._. . ._ _.. _ .... . .._. .. _. . __ ._ _. .._ ._ ._..
candy@kgc.co.jp (Toshihiro Kanda) or zw6t-knd@asahi-net.or.jp

57
games/piano/piano.6 Normal file
View File

@ -0,0 +1,57 @@
.Dd Feb 3, 1995
.Dt "PIANO" 6
.Os
.Sh NAME
.Nm piano
.Nd "a piano emulator"
.Sh SYNOPSIS
.Nm piano
.Op Fl vV
.Op Fl i Ar string
.Sh DESCRIPTION
The
.Nm piano
plays note by typing
.Em "QWERTYUIOP[]"
or
.Em "12 45 789 -=" .
Type
.Em ESC
key to quit
.Nm piano .
.Nm Piano
uses
.Em /dev/speaker .
.Pp
Available option:
.Bl -tag -width flag
.It Fl v
The
.Fl v
option causes
.Nm piano
to generate
.Em "play-string language" .
.It Fl V
The
.Fl V
option is for
.Nm piano
usage.
.It Fl i Ar string
The
.Fl i
option initializes
.Em /dev/speaker
by
.Ar string .
The default value is 't160 o1 l16 ml'.
.El
.Sh FILES
.Bl -tag -width /dev/speakerxx
.It Pa /dev/speaker
speaker device file
.Sh SEE ALSO
.Xr spkr 4
.Sh AUTHOR
Toshihiro Kanda <candy@kgc.co.jp> Nov. 1993

166
games/piano/piano.c Normal file
View File

@ -0,0 +1,166 @@
/*
* piano.c - a piano emulator
*/
static char rcsid[] = "$Id$";
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curses.h>
#include <unistd.h>
#include <sys/file.h>
char *myname;
int verbose;
static char *initcmd = "t160 o1 l16 ml";
static char usage_msg[] =
"simple keyboard player V0.8086\n"
"usage: %s [-v][-i str]\n"
"\t-i str defaults 't160 o1 l16 ml'\n"
"function: play by console keyboard\n"
"\tESC to exit. Note keys are ...\n"
"\t1 2 4 5 7 8 9 - = \\\n"
"\t Q W E R T Y U I O P [ ]\n"
;
struct kdef_t {
int ch;
char *str;
};
static char *kstr[256];
static struct kdef_t kdef[] = {
/* white key */
{ '\t', "<g>" },
{ 'q', "<a>" },
{ 'w', "<b>" },
{ 'e', "c" },
{ 'r', "d" },
{ 't', "e" },
{ 'y', "f" },
{ 'u', "g" },
{ 'i', "a" },
{ 'o', "b" },
{ 'p', ">c<" },
{ '[', ">d<" },
{ ']', ">e<" },
{ '\n', ">f<" },
{ '\r', ">f<" },
/* black key */
{ '`', "<f#>" },
{ '1', "<g#>" },
{ '2', "<a#>" },
/*{ '3', "<b#>" },*/
{ '4', "c#" },
{ '5', "d#" },
/*{ '6', "e#" },*/
{ '7', "f#" },
{ '8', "g#" },
{ '9', "a#" },
/*{ '0', "b#" },*/
{ '-', ">c#<" },
{ '=', ">d#<" },
/*{ '\', ">e#<" },*/
{ '\177', ">f#<" },
{ '\0', NULL }
};
static int
init_kstr(void)
{
struct kdef_t *mv = kdef;
while (mv->str != NULL) {
kstr[mv->ch] = mv->str;
mv++;
}/* while */
return 0;
}/* init_kstr */
static int
fdputs(const char *s, int fd, int echo)
{
int err, len = strlen(s);
write(fd, s, len);
err = write(fd, "\n", 1);
if (echo) {
fputs(s, stdout);
}
return err;
}/* fdputs */
static int
outspkr(const char *s)
{
int err = -1, fd = open("/dev/speaker", O_WRONLY);
if (fd >= 0) {
fdputs(initcmd, fd, 0);
err = fdputs(s, fd, verbose);
close(fd);
}
return err;
}/* outspkr */
static int
nain(void)
{
int ch;
initscr();
noecho();
nonl();
raw();
init_kstr();
while ((ch = getch()) != '\033') {
if (kstr[ch] != NULL) {
outspkr(kstr[ch]);
}
else {
if (verbose) {
switch (ch) {
case ' ':
fputs(" ", stdout);
break;
case '\b':
fputs("\b", stdout);
break;
}/* switch */
}
}
}/* while */
endwin();
return 0;
}/* nain */
int
main(int argc, char *argv[])
{
extern char *optarg;
extern int optind, opterr;
int ch, ex, show_usage = 0;
myname = argv[0];
while ((ch = getopt(argc, argv, "-vi:")) != EOF) {
switch (ch) {
default:
case 'V':
show_usage++;
break;
case 'v':
verbose++;
break;
case 'i':
initcmd = optarg;
break;
}/* switch */
}/* while */
ex = 1;
if (show_usage) {
fprintf(stderr, usage_msg, myname);
}
else {
printf("Type ESC to exit.\n");
ex = 0;
nain();
}
return ex;
}/* main */