From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1EYUX3-000641-AS for mharc-grub-devel@gnu.org; Sat, 05 Nov 2005 15:20:57 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1EYUX1-00063w-ND for grub-devel@gnu.org; Sat, 05 Nov 2005 15:20:55 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1EYUX0-00063k-6u for grub-devel@gnu.org; Sat, 05 Nov 2005 15:20:55 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1EYUX0-00063h-5b for grub-devel@gnu.org; Sat, 05 Nov 2005 15:20:54 -0500 Received: from [217.12.11.95] (helo=smtp006.mail.ukl.yahoo.com) by monty-python.gnu.org with smtp (Exim 4.34) id 1EYUWz-0001xU-TH for grub-devel@gnu.org; Sat, 05 Nov 2005 15:20:54 -0500 Received: (qmail 95857 invoked from network); 5 Nov 2005 20:20:53 -0000 DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=s1024; d=yahoo.fr; h=Received:Message-ID:Date:From:User-Agent:X-Accept-Language:MIME-Version:To:Subject:References:In-Reply-To:X-Enigmail-Version:Content-Type; b=4et/AAuYPQw3xbZiLpSiOCJDwH6mXlYVT3XWzSfjpW5W7Tj33xtl/wo2NGZuGkGrAN/J+1FjzrTAYewAiqP50wk0e9xe6JyqLuBcljtE3MmArzusb/m3B/E2PfBiYpqHuKvdtiMbOyTRS+DEDd5BSuPdwNiY7wjXTe3AsND+GX4= ; Received: from unknown (HELO ?192.168.0.2?) (subdino2004@82.127.215.45 with plain) by smtp006.mail.ukl.yahoo.com with SMTP; 5 Nov 2005 20:20:52 -0000 Message-ID: <436D1420.80507@yahoo.fr> Date: Sat, 05 Nov 2005 21:20:48 +0100 From: Vincent Pelletier User-Agent: Debian Thunderbird 1.0.7 (X11/20051017) X-Accept-Language: en-us, en MIME-Version: 1.0 To: The development of GRUB 2 References: <436CBF00.1060304@yahoo.fr> <200511051928.49549.okuji@enbug.org> In-Reply-To: <200511051928.49549.okuji@enbug.org> X-Enigmail-Version: 0.93.0.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enig8582914C72513589924D6B6D" Subject: Re: play.c X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 05 Nov 2005 20:20:55 -0000 This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enig8582914C72513589924D6B6D Content-Type: multipart/mixed; boundary="------------070802010702090102090704" This is a multi-part message in MIME format. --------------070802010702090102090704 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 7bit Yoshinori K. Okuji wrote: > I point out some stylish mistakes. For once that I have the Changelog entry right :) . > You must put the starting brace character on next line: Please don't waste your time giving an example when it's that trivial, or please do it in the diff file directly... > The lines are folded incorrectly. I also corrected the lines length where needed. Vincent Pelletier --------------070802010702090102090704 Content-Type: text/plain; name="play.diff" Content-Transfer-Encoding: quoted-printable Content-Disposition: inline; filename="play.diff" Index: commands/i386/pc/play.c =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: commands/i386/pc/play.c diff -N commands/i386/pc/play.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ commands/i386/pc/play.c 5 Nov 2005 14:06:00 -0000 @@ -0,0 +1,251 @@ +/* play.c - command to play a tune */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2005 Free Software Foundation, Inc. + * + * GRUB is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by= + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* Lots of this file is borowed from GNU/Hurd generic-speaker driver */ + +#include +#include +#include +#include +#include +#include +#include + +/* Read a byte from a port. */ +static inline unsigned char +inb (unsigned short port) +{ + unsigned char value; + + asm volatile ("inb %w1, %0" : "=3Da" (value) : "Nd" (port)); + asm volatile ("outb %%al, $0x80" : : ); + =20 + return value; +} + +/* Write a byte to a port. */ +static inline void +outb (unsigned short port, unsigned char value) +{ + asm volatile ("outb %b0, %w1" : : "a" (value), "Nd" (port)); + asm volatile ("outb %%al, $0x80" : : ); +} + +/* The speaker port. */ +#define SPEAKER 0x61 + +/* If 0, follow state of SPEAKER_DATA bit, otherwise enable output + from timer 2. */ +#define SPEAKER_TMR2 0x01 + +/* If SPEAKER_TMR2 is not set, this provides direct input into the + speaker. Otherwise, this enables or disables the output from the + timer. */ +#define SPEAKER_DATA 0x02 + +/* The PIT channel value ports. You can write to and read from them. + Do not mess with timer 0 or 1. */ +#define PIT_COUNTER_0 0x40 +#define PIT_COUNTER_1 0x41 +#define PIT_COUNTER_2 0x42 + +/* The frequency of the PIT clock. */ +#define PIT_FREQUENCY 0x1234dd + +/* The PIT control port. You can only write to it. Do not mess with + timer 0 or 1. */ +#define PIT_CTRL 0x43 +#define PIT_CTRL_SELECT_MASK 0xc0 +#define PIT_CTRL_SELECT_0 0x00 +#define PIT_CTRL_SELECT_1 0x40 +#define PIT_CTRL_SELECT_2 0x80 + +/* Read and load control. */ +#define PIT_CTRL_READLOAD_MASK 0x30 +#define PIT_CTRL_COUNTER_LATCH 0x00 /* Hold timer value until read. */ +#define PIT_CTRL_READLOAD_LSB 0x10 /* Read/load the LSB. */ +#define PIT_CTRL_READLOAD_MSB 0x20 /* Read/load the MSB. */ +#define PIT_CTRL_READLOAD_WORD 0x30 /* Read/load the LSB then the MSB. = */ + +/* Mode control. */ +#define PIT_CTRL_MODE_MASK 0x0e + +/* Interrupt on terminal count. Setting the mode sets output to low. + When counter is set and terminated, output is set to high. */ +#define PIT_CTRL_INTR_ON_TERM 0x00 + +/* Programmable one-shot. When loading counter, output is set to + high. When counter terminated, output is set to low. Can be + triggered again from that point on by setting the gate pin to + high. */ +#define PIT_CTRL_PROGR_ONE_SHOT 0x02 + +/* Rate generator. Output is low for one period of the counter, and + high for the other. */ +#define PIT_CTRL_RATE_GEN 0x04 + +/* Square wave generator. Output is low for one half of the period, + and high for the other half. */ +#define PIT_CTRL_SQUAREWAVE_GEN 0x06 + +/* Software triggered strobe. Setting the mode sets output to high. + When counter is set and terminated, output is set to low. */ +#define PIT_CTRL_SOFTSTROBE 0x08 + +/* Hardware triggered strobe. Like software triggered strobe, but + only starts the counter when the gate pin is set to high. */ +#define PIT_CTRL_HARDSTROBE 0x0a + +/* Count mode. */ +#define PIT_CTRL_COUNT_MASK 0x01 +#define PIT_CTRL_COUNT_BINARY 0x00 /* 16-bit binary counter. */ +#define PIT_CTRL_COUNT_BCD 0x01 /* 4-decade BCD counter. */ + +#define T_REST ((short) 0) +#define T_FINE ((short) -1) + +struct note +{ + short pitch; + short duration; +}; + +static void +beep_off (void) +{ + unsigned char status; + + status =3D inb (SPEAKER) & ~(SPEAKER_TMR2 | SPEAKER_DATA); + outb (SPEAKER, status); +} + +static void +beep_on (short pitch) +{ + unsigned char status; + unsigned int counter; + + if (pitch < 20) + pitch =3D 20; + else if (pitch > 20000) + pitch =3D 20000; + + counter =3D PIT_FREQUENCY / pitch; + + /* Program timer 2. */ + outb (PIT_CTRL, PIT_CTRL_SELECT_2 | PIT_CTRL_READLOAD_WORD + | PIT_CTRL_SQUAREWAVE_GEN | PIT_CTRL_COUNT_BINARY); + outb (PIT_COUNTER_2, counter & 0xff); /* LSB */ + outb (PIT_COUNTER_2, (counter >> 8) & 0xff); /* MSB */ + + /* Start speaker. */ + status =3D inb (SPEAKER) | SPEAKER_TMR2 | SPEAKER_DATA; + outb (SPEAKER, status); + +} + +static grub_err_t +grub_cmd_play (struct grub_arg_list *state __attribute__ ((unused)), + int argc, char **args) +{ + grub_file_t file; + struct note buf; + int tempo; + unsigned int to; + + if (argc !=3D 1) + return grub_error (GRUB_ERR_BAD_ARGUMENT, "file name required"); + + file =3D grub_file_open (args[0]); + if (! file) + return 0; + + if (grub_file_read (file, (void *) &tempo, sizeof(tempo)) !=3D sizeof(= tempo)) + return 0; + + grub_printf ("Now playing %s...\n", args[0]); + + grub_dprintf ("play","tempo =3D %d\n", tempo); + + while (grub_file_read (file, (void *) &buf, sizeof (struct note)) + =3D=3D sizeof (struct note) + && buf.pitch !=3D T_FINE + && grub_checkkey () =3D=3D -1) + { + =20 + grub_dprintf ("play","pitch =3D %d, duration =3D %d\n", buf.pitch,= + buf.duration); + + switch (buf.pitch) + { + case T_REST: + beep_off (); + break; + + default: + beep_on (buf.pitch); + break; + } + + to =3D grub_get_rtc () + 120 * buf.duration / tempo; + while ((unsigned int) grub_get_rtc () <=3D to && grub_checkkey () = =3D=3D -1) + ; + + } + + beep_off (); + + grub_printf ("Done\n"); + + grub_file_close (file); + + while (grub_checkkey () !=3D -1) + grub_getkey (); + + return 0; +} + +=0C +#ifdef GRUB_UTIL +void +grub_play_init (void) +{ + grub_register_command ("play", grub_cmd_play, GRUB_COMMAND_FLAG_BOTH, + "play FILE", "Play a tune", 0); +} + +void +grub_play_fini (void) +{ + grub_unregister_command ("play"); +} +#else /* ! GRUB_UTIL */ +GRUB_MOD_INIT +{ + (void)mod; /* To stop warning. */ + grub_register_command ("play", grub_cmd_play, GRUB_COMMAND_FLAG_BOTH, + "play FILE", "Play a tune", 0); +} + +GRUB_MOD_FINI +{ + grub_unregister_command ("play"); +} +#endif /* ! GRUB_UTIL */ Index: conf/i386-pc.rmk =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D RCS file: /cvsroot/grub/grub2/conf/i386-pc.rmk,v retrieving revision 1.50 diff -u -p -r1.50 i386-pc.rmk --- conf/i386-pc.rmk 24 Oct 2005 10:23:46 -0000 1.50 +++ conf/i386-pc.rmk 5 Nov 2005 14:06:02 -0000 @@ -117,7 +117,7 @@ pkgdata_MODULES =3D _chain.mod _linux.mod=20 apple.mod pc.mod sun.mod loopback.mod reboot.mod halt.mod \ help.mod default.mod timeout.mod configfile.mod vbe.mod \ vesafb.mod vbetest.mod vbeinfo.mod search.mod gzio.mod \ - terminfo.mod serial.mod xfs.mod affs.mod sfs.mod + terminfo.mod serial.mod xfs.mod affs.mod sfs.mod play.mod =20 # For _chain.mod. _chain_mod_SOURCES =3D loader/i386/pc/chainloader.c @@ -347,3 +347,8 @@ search_mod_LDFLAGS =3D $(COMMON_LDFLAGS) gzio_mod_SOURCES =3D io/gzio.c gzio_mod_CFLAGS =3D $(COMMON_CFLAGS) gzio_mod_LDFLAGS =3D $(COMMON_LDFLAGS) + +# For play.mod. +play_mod_SOURCES =3D commands/i386/pc/play.c +play_mod_CFLAGS =3D $(COMMON_CFLAGS) +play_mod_LDFLAGS =3D $(COMMON_LDFLAGS) --------------070802010702090102090704-- --------------enig8582914C72513589924D6B6D Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.2 (GNU/Linux) iD8DBQFDbRQkFEQoKRQyjtURAokxAKCvaqNs1BRn22hxm0hmcXPABTxLVACff1BX kLkYqfPYfeq0tjpqUisRWUI= =ZcCa -----END PGP SIGNATURE----- --------------enig8582914C72513589924D6B6D-- ___________________________________________________________________________ Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger Téléchargez cette version sur http://fr.messenger.yahoo.com