From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1EYOtd-0001xI-AH for mharc-grub-devel@gnu.org; Sat, 05 Nov 2005 09:19:53 -0500 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1EYOtY-0001wO-37 for grub-devel@gnu.org; Sat, 05 Nov 2005 09:19:48 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1EYOtU-0001uz-DQ for grub-devel@gnu.org; Sat, 05 Nov 2005 09:19:45 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1EYOtT-0001ub-M7 for grub-devel@gnu.org; Sat, 05 Nov 2005 09:19:43 -0500 Received: from [217.12.11.33] (helo=smtp002.mail.ukl.yahoo.com) by monty-python.gnu.org with smtp (Exim 4.34) id 1EYOtT-0007o1-8D for grub-devel@gnu.org; Sat, 05 Nov 2005 09:19:43 -0500 Received: (qmail 71730 invoked from network); 5 Nov 2005 14:17:41 -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:X-Enigmail-Version:Content-Type; b=al4pGv4snvyhnalHyRU23NRN8c9HMgspq43fj9buVszA9LZCzO8DPTwHZ9ux07jfvfh66HHZQbRqTQYpaYMzAGJvkW+Mol/Trt/+zOKEvoCmkSbMrgQKx5ecisNyio3fQEttXoVuwV1+hJOfvAIdWiGlzhCHaW/UwofI/8U6hIc= ; Received: from unknown (HELO ?192.168.0.2?) (subdino2004@82.127.186.219 with plain) by smtp002.mail.ukl.yahoo.com with SMTP; 5 Nov 2005 14:17:41 -0000 Message-ID: <436CBF00.1060304@yahoo.fr> Date: Sat, 05 Nov 2005 15:17:36 +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 X-Enigmail-Version: 0.93.0.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="------------enigF51D9F6450C24FD35DC0B35C" Subject: 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 14:19:49 -0000 This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enigF51D9F6450C24FD35DC0B35C Content-Type: multipart/mixed; boundary="------------000004030203030707020401" This is a multi-part message in MIME format. --------------000004030203030707020401 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: 7bit Hi. Here is the play command, along with some songs. 2005-11-05 Vincent Pelletier * commands/i386/pc/play.c: New file. * conf/i386-pc.rmk (pkgdata_MODULES): Added play.mod. (play_mod_SOURCES, play_mod_CFLAGS, play_mod_LDFLAGS): New macros. Vincent Pelletier --------------000004030203030707020401 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,248 @@ +/* play.c - command to play a tune */ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2003 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) --------------000004030203030707020401 Content-Type: application/octet-stream; name="Beverly Hills Cop." Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Beverly Hills Cop." WAIAAEgBCAAAABAAhwEGAAAACAAAAAgASAEEAAAACABIAQUAAAACALgBBQAAAAgASAEGAAAA CAAjAQUAAAAIAEgBBgAAAAgAAAAQAO0BBgAAAAgAAAAIAEgBBgAAAAgASAEGAAAAAgAEAgQA AAAIAO0BBQAAAAgAhwEDAAAABAAAAAgASAEDAAAABAAAAAgA7QEDAAAABAAAAAgAkAIEAAAA CABIAQMAAAAEACMBBQAAAAgAIwEFANwABAAAAAQAAAAIAFwBDAAAAAQASAFcAAAAEAAAACAA --------------000004030203030707020401 Content-Type: application/octet-stream; name="Enclosure" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Enclosure" LAEAALgBIABGAiAAuAIgAA4DIAAEAiAAcANAALgCIAAEAiAARgJAAA4DIAC4AiAAuAJAAJAC IAC4ASAARgIgALgCIAAOAyAACAQgAKQDMABwAwgADgMIAHADIAC4AiAARgIgAA4DQACQAiAA RgJAAA== --------------000004030203030707020401 Content-Type: application/octet-stream; name="FSF_Song" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="FSF_Song" oAAAAEYCEAAEAggA7QEQALgBEADtARAABAIIAO0BCAC4AQgAhwEQAIcBGAC4ARgA7QEIAAQC GADtAQ4AAAACAO0BCABGAggAuAEWAAAAAgC4ASAABAIQAEYCCAAEAhAA7QEYAEYCEAAEAggA 7QEQALgBEADtARAABAIIAO0BCAC4AQgAhwEQAIcBGAC4ARgA7QEIAAQCGADtAQ4AAAACAO0B CABGAggAuAEWAAAAAgC4AR4AAAACALgBOAA= --------------000004030203030707020401 Content-Type: application/octet-stream; name="I_Feel_Pretty" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="I_Feel_Pretty" oAAAAAIBCABIAQgAXAEEALgBFAAAAAgAAgEIAEgBCABcAQQAuAEUAAAACAACAQgASAEIAFwB BAC4AQwASAEIAFwBBAC4AQwAXAEIAAQCIADSAQgAuAEIAIcBBABcARQAAAAIAIcBCAC4AQgA 0gEMALgBBACHAQQAXAEEAEgBEAAjAQMASAECACMBAwACATgA --------------000004030203030707020401 Content-Type: application/octet-stream; name="Indiana_Jones_Theme" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Indiana_Jones_Theme" +gAAAEgBBAAAAAgAXAEEAIcBBAAAAAQABAIYAAAAEAAjAQQAAAAIAEgBBABcASAAAAAQAIcB BAAAAAgAuAEEAO0BBAAAAAQAuAIYAAAAEAC4AQQAAAAIAO0BBAAEAggAAAAIAEYCDAAAAAQA kAIIAAAACABIAQQAAAAIAFwBBACHAQQAAAAEAAQCGAAAABAARgIEAAAACACQAgQAuAIgAAAA EACHAQQAAAAIAIcBBACQAhAARgIEAAAACACHAQQAkAIQAEYCBAAAAAgAhwEEALgCEACQAgQA AAAIAEYCBAAEAiAA --------------000004030203030707020401 Content-Type: application/octet-stream; name="Star Trek: The Next Generation" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Star Trek: The Next Generation" WAIAAFwBQAAAABAAhwEgAAAACABcASoAAAAIAAAACADtAUAAAAAIAAAAEAAAAAgA7QEqAAAA CAAAAAgABAJAAAAACAAAABAAuAIqAAAACACQAlUAAAAIAAAAEAAEAkAAAAAQAA4DKgAAAAgA uAJAAAAACAAAAAgAXAEqAAAACACQAkAABAIVAAAACADtASoAAAAIAIcBVQA= --------------000004030203030707020401 Content-Type: application/octet-stream; name="Summertime" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Summertime" eAAAAO0BCACHAQgA7QEkAAAABAC4AQYAhwECALgBBgDtAQIAhwEIAEgBEAD2ABgAAAAIAO0B CACHAQgAuAEDAAAAAQC4ARwAAAAIAIcBBgBIAQIAhwEGAEgBAgCHAQgAcQEwAAAABADtAQgA hwEEAO0BAwAAAAEA7QEHAAAAAQDtARQAAAAIALgBBgCHAQIAuAEGAO0BAgCHAQgASAEQAPYA IAAAAAgA9gAIACMBCAD2AAQAIwEEAEgBCACHAQgA7QECAP4BAQAQAgEAuAEMAIcBDwAAAAEA hwEEAEgBRAA= --------------000004030203030707020401 Content-Type: application/octet-stream; name="Tetris_Theme" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Tetris_Theme" LAEAAJACEADtAQgABAIIAEYCCACQAgQARgIEAAQCCADtAQgAuAEQALgBCAAEAggAkAIQAEYC CAAEAggA7QEYAAQCCABGAhAAkAIQAAQCEAC4ARAAuAEgAAAACABGAhAAuAIIAOAGEAAOAwgA uAIIAJACGAAEAggAkAIQAEYCCAAEAggA7QEQAO0BCAAEAggARgIQAJACEAAEAhAAuAEQALgB EAAAABAAkAIQAO0BCAAEAggARgIIAJACBABGAgQABAIIAO0BCAC4ARAAuAEIAAQCCACQAhAA RgIIAAQCCADtARgABAIIAEYCEACQAhAABAIQALgBEAC4ASAAAAAIAEYCEAC4AggA4AYQAA4D CAC4AggAkAIYAAQCCACQAhAARgIIAAQCCADtARAA7QEIAAQCCABGAhAAkAIQAAQCEAC4ARAA uAEQAAAAEABIASAAAgEgACMBIAD2ACAAAgEgANwAIABcACAA9gAQAAAAEABIASAAAgEgACMB IAD2ACAAAgEQAEgBEAC4ASAAnwEgAAAAEAAAABAAkAIQAO0BCAAEAggARgIIAJACBABGAgQA BAIIAO0BCAC4ARAAuAEIAAQCCACQAhAARgIIAAQCCADtARgABAIIAEYCEACQAhAABAIQALgB EAC4ASAAAAAIAEYCEAC4AggA4AYQAA4DCAC4AggAkAIYAAQCCACQAhAARgIIAAQCCADtARAA 7QEIAAQCCABGAhAAkAIQAAQCEAC4ARAAuAEQAAAAEACQAhAA7QEIAAQCCABGAggAkAIEAEYC BAAEAggA7QEIALgBEAC4AQgABAIIAJACEABGAggABAIIAO0BGAAEAggARgIQAJACEAAEAhAA uAEQALgBIAAAAAgARgIQALgCCADgBhAADgMIALgCCACQAhgABAIIAJACEABGAggABAIIAO0B EADtAQgABAIIAEYCEACQAhAABAIQALgBEAC4ARAAAAAQAA== --------------000004030203030707020401-- --------------enigF51D9F6450C24FD35DC0B35C 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) iD8DBQFDbL8EFEQoKRQyjtURAuBGAJ45zYcPEyqwyxTbihvRY/X/AhyjqACcDE7P YU6ag0SPoC4764InwrSa2dQ= =0YvP -----END PGP SIGNATURE----- --------------enigF51D9F6450C24FD35DC0B35C-- ___________________________________________________________________________ Appel audio GRATUIT partout dans le monde avec le nouveau Yahoo! Messenger Téléchargez cette version sur http://fr.messenger.yahoo.com