Commit Graph

1008 Commits

Author SHA1 Message Date
Sam Lantinga
1fd5ea3b26 Date: Mon, 21 Jun 2004 16:52:47 +0200
From: Marcin Konicki
Subject: SDL 1.2.7 patch for BeOS (new input handling code)

I rewrote input handling code for BeOS. It should be faster now (i got
report that mouse is faster, keyboard should be too, but it's harder to
observe).

I'll try to add mouse wheel support too, soon.

Stefano Ceccherini (a.k.a Jack Burton) helped me beautify code (working
version was less clean), and it was he who asked me to write this thing ;).
2004-07-18 19:36:06 +00:00
Sam Lantinga
15eebb8ffd Date: Sat, 03 Jul 2004 02:23:48 +0200
From: Marcin Konicki
Subject: [PATCH] Add missing functions and bring back OpenGL

This patch adds missing functions:
IconifyWindow
GetWMInfo
GL_LoadLibrary
GL_GetProcAddress
GL_GetAttribute
GL_MakeCurrent

Adding GL_* functions brings back working OpenGL in SDL for BeOS :).
With addd GL_* functions there are few changes in Window class to handle
changes better.

Patch also fixes bug which freezed window when using MesaGL instead of
BeOS r5 GL - it just needed Window->Quit() added into BE_VideoQuit().
THX to Michael Weirauch (a.k.a emwe) who worked on that bug before and
found that it freezes because of lock somewhere.

THX to Matti "Mictlantecuhtli" Lev��nen for testing, Rod��ric Vicaire
(a.k.a. Ingenu) for OpenGL wisdom, and Stefano Ceccherini (a.k.a Jack
Burton) for asking me to fix SDL on BeOS :).
2004-07-18 19:14:33 +00:00
Sam Lantinga
54d0c70c1e Date: Wed, 7 Jul 2004 12:57:58 +0200
From: "Markus F.X.J. Oberhumer"
Subject: [SDL-CVS] [patch] small fix for SDL_joystick.h

the tiny patch below (against current CVS) fixes a syntax error
(not allow compilers allow multiple __cdecl).
2004-07-18 19:05:06 +00:00
Sam Lantinga
13bc764867 Date: Fri, 16 Jul 2004 17:25:45 +0200
From: "A. Umbach"
Subject: Patch for bug in SDL cdrom resume handling

Black| pointed out a bug on #sdl today, that when you pause CD playback,
and then Resume it, it'll play until the end of the disk, and not until
the track you specified.

Attached is a patch that fixes the issue, by saving the desired end position
in the SDL_CD struct, and seting it again upon resume

- Andreas
2004-07-18 19:01:27 +00:00
Sam Lantinga
7a9c165a1c Date: Sun, 18 Jul 2004 16:46:44 +0200
From: Georg Schwarz
Subject: Compiling SDL on IRIX 5.3

in order to make SDL compile on IRIX 5.3 I had to apply the following patch
2004-07-18 18:33:28 +00:00
Patrice Mandin
632cdc3d4f Forgot to initialize video mode list 2004-07-17 08:58:24 +00:00
Sam Lantinga
0a6926268b Date: Thu, 24 Jun 2004 15:13:40 +0300 (EEST)
From: Martin_Storsj�
Subject: Small patches for SDL/win32

I've tried playing with running SDL compiled for Windows with Wine (and
WineX) under Linux. It didn't originally work too well, but I somehow
managed to make it work. Most of the fixes was patches to Wine(X), but I
also found something in video/windx5/SDL_dx5video.c which, as far as I can
tell, actually is a bug in SDL. The result from the COM method Release,
which returns the new reference count, is compared to DD_OK. Because
QueryInterface is called immediately before, the reference count shouldn't
be DD_OK (== 0).
2004-06-25 05:24:50 +00:00
Sam Lantinga
e8954f1b31 *** empty log message *** 2004-05-27 22:57:30 +00:00
Sam Lantinga
f7597e6158 The tenth time is the charm... 2004-05-20 10:05:59 +00:00
Sam Lantinga
9c5353dc16 *** empty log message *** 2004-05-17 22:42:51 +00:00
Sam Lantinga
11d8dcb490 Date: Tue, 11 May 2004 22:05:32 -0400
From: Bob Ippolito
Subject: [SDL] SDL_QuartzWM patches

I've sent in two small patches to SDL_QuartzWM directly to Sam over the
past few months (well, I think I sent both anyway) and neither of them
have been implemented.  I didn't receive a response, so I'm sure he was
just busy and/or they got lost, so I decided to sign up to the list and
post them here.

This patch rolls both of them together:
- Mouse cursor becomes visible if hidden when it moves outside of the
game window.  If you want it to stay invisible you should warp it
because if it's not warped a user might click some random other
application!  Commercial games behave in this way (or at least Warcraft
III does, which is the only one that uses a custom mouse cursor and no
warping that I've played in recent memory).
- Right mouse button emulation is changed from Command-Click to
Control-Click, which is how OS X behaves.

Consider copyright assigned to whomever needs it under whichever
license it needs to be under.. yadda yadda yadda.
2004-05-17 00:16:24 +00:00
Sam Lantinga
9a80383a8f Date: Tue, 16 Mar 2004 12:40:33 +0000
From: Alan Swanson
Subject: [SDL] [PATCH] Linux joystick evdev axis count fix

The event device configuration under Linux does not check the returned
ioctl value when reading the axis information. This means extra
undefined axes are returned.

Note, in EV_HandleEvents, the default for case EV_ABS is to return any
axis information which is fine as we have already checked for all valid
absolute axes. No new axes should be returned after opening the device.

(Unless, of course, the evdev allows closing and reassigning a new
device while in use and I can't believe that happens.)
2004-05-16 22:48:06 +00:00
Sam Lantinga
4e9dd22b3e *** empty log message *** 2004-05-16 22:37:59 +00:00
Sam Lantinga
a6590f591a Don't crash if the stretch routines are used on hardware surfaces 2004-05-16 21:08:55 +00:00
Sam Lantinga
8cd47b4750 Fixed crash on exit 2004-05-16 19:02:19 +00:00
Sam Lantinga
f67acf7443 Date: Sun, 18 Apr 2004 16:09:53 -0400 (EDT)
From: David MacCormack
Subject: [SDL] Linux joystick patch

I recently got myself a PS2 -> USB converter (a super joybox 5).  It
accepts 4 PSX/PS2 controllers.  It's implemented as a HID, which is nice
because it doesn't require its own driver, but the problem is that it's
implemented as a *single* HID -- that is, it shows up as a single
joystick with 19 axes, 4 hats, and 48 buttons.  This poses a problem for a
number of apps which use SDL (stella, fce ultra, zsnes, to name a few) and
see only a single (physical) joystick even though there are really 4
(logical) joysticks.  There are a number of these types of devices on the
market, and I've seen others post messages (in the zsnes forum, for
example) with the same problem, so I came up with what I think is a pretty
generic solution.

I patched src/joystick/linux/SDL_sysjoystic.c to include support for
logical joysticks; basically, it's a static array and supporting functions
that map a single physical joystick to multiple logical joysticks.  The
attached patch has the new code.  It's wrapped inside #ifndef
statements so that you can get the old behavior if you want.
2004-05-16 18:46:24 +00:00
Sam Lantinga
c87a399c21 *** empty log message *** 2004-05-16 18:09:20 +00:00
Sam Lantinga
1bb80615d4 Date: Sat, 10 Apr 2004 10:05:46 +0200
From: Christian Walther
Subject: [SDL] OpenGL Accumulation Buffer on Mac OS X

Is there a reason for not having OpenGL accumulation buffer support in
SDL 1.2.7 (and as far as I have checked also in the current CVS) on Mac OS
X?

Maybe I am doing something wrong, but it seems very easy to add (at least
it works for for me in 10.3.3) - just add

  if ( this->gl_config.accum_red_size + this->gl_config.accum_green_size + this->gl_config.accum_blue_size + this->gl_config.accum_alpha_size > 0) {
    attr[i++] = NSOpenGLPFAAccumSize;
    attr[i++] = this->gl_config.accum_red_size + this->gl_config.accum_green_size + this->gl_config.accum_blue_size + this->gl_config.accum_alpha_size;
  }

to QZ_SetupOpenGL() in SDL_QuartzGL.m
2004-05-16 18:06:27 +00:00
Sam Lantinga
c5e9fb17f4 ate: Fri, 09 Apr 2004 20:07:10 +0200
From: Hibernatus
Subject: [SDL] BUG: changing video mode in opengl + windows

In WIN_GL_SetupWindow (SDL12/src/video/wincommon/SDL_wingl.c) you call
WIN_GL_ResetWindow when SetPixelFormat fails.
WIN_GL_ResetWindow cannot properly work in its current state, because there
are several things to update once you've created a new window. At least
DirectInput doesn't work anymore here (which is somewhat annoying for the
player :).
I think you can simply remove that function. Many games don't try to
recover from that exception, that's why the newest ATI drivers emulate 16
bpp display in 32 bpp mode so the error never occurs (but the games may run
much slower).

Having SDL_SetVideoMode return NULL would be better than actually setting
the video mode and losing focus, directinput and maybe directsound too. It
also made my previous drivers crash (when switching from 32 bpp windowed to
16 bpp fullscreen).
2004-05-16 18:02:48 +00:00
Sam Lantinga
07073fa04a Date: Sun, 28 Mar 2004 16:38:32 +1200
From: Paul Eggleton
Subject: [SDL] Possible memory leak in SDL 1.2.7

Taking a look at this function X11_CreateWMCursor and its companion
X11_FreeWMCursor (in src/video/x11/SDL_x11mouse.c), I can see that
X11_CreateWMCursor is making several calls to XCreatePixmap, but there are no
corresponding calls in X11_FreeWMCursor to XFreePixmap.
2004-05-16 17:40:32 +00:00
Sam Lantinga
faa0e1d28b Date: Mon, 10 May 2004 10:17:46 -0400
From: Mike Frysinger
Subject: Re: [SDL] gcc-3.4.0 / PIC fix

here's a combined patch (yours and the one i mentioned earlier) that i tested
with gcc-3.4.0 and gcc-3.3.3
2004-05-16 17:19:48 +00:00
Sam Lantinga
356c197ebd Date: Sat, 24 Apr 2004 15:13:32 +0300
From: "Mike Gorchak"
Subject: SDL updates for the QNX6

1. Updated the README.QNX
2. Updated libtool scripts, which are shipped with SDL for QNX6 support.
3. Added some code to support the new QNX 6.3.0, which is in beta now.
4. Added code to detect the hw features, which driver supports.
5. Added hw alpha blits code.
6. Fixed bug when application switches to fullscreen more the 2 times. (afte\
r that window becames always stay on top).
7. Updated a bit README for the tests.
8. Added information about acceleration show in the testalpha.c test.
9. Added small fixes to the testoverlay2.c test.
10. Added alpha and cc+alpha blits benchmarks to the testvidinfo.c test.
2004-05-06 15:55:06 +00:00
Sam Lantinga
e073227440 Date: Wed, 28 Apr 2004 16:52:41 -0400
From: "Damien A"
Subject: testdyngl fix

The test program you included in the latest version of SDL crashes on startup in Window (XP). The reason for this is that OpenGL functions on Windows use the __stdcall calling convention, not the C convention.  Placing APIENTRY infront of the * operator solves this problem.
2004-04-30 18:33:30 +00:00
Sam Lantinga
327a62cd62 Increment version... 2004-04-23 14:00:08 +00:00
Sam Lantinga
4423b9c455 Date: Sat, 10 Apr 2004 02:25:33 -0400
From: Glenn Maynard
To: sdl@libsdl.org
Subject: [SDL] SDL_SetVideoMode() failing and not setting an error (patch)

Running an OpenGL SDL application off 1.2.7, at SDL_InitSubSystem(SDL_INIT_VIDEO) time:

Warning: Unable to initialize AAlib mouseUsing AAlib driver: Slang driver 1.0 (slang)

SDL_SetVideoMode then fails; SDL_GetError() returns "".

The installation problem is straightforward: X (the higher priority
driver) isn't running, so SDL is falling back on aalib.  However,
no error is being set when aalib fails to initialize.  This also
happens with the svgalib driver.

SDL_video.c line ~653 sets mode to NULL, since aalib didn't return an
OpenGL surface.  Line ~711 ("failed setting a video mode") returns NULL.
The attached patch sets an error.  It's a horrible, useless error
message--it should really say eg. "aalib does not support OpenGL"; this
should probably be done earlier in the individual drivers, too.
2004-04-11 19:54:40 +00:00
Sam Lantinga
92d9b84afc Date: Sun, 11 Apr 2004 13:09:44 +0200
From: Stephane Marchesin
Subject: [SDL] [Patch] inlining memcpy functions

I (finally) did some benchmarking of the misc mmx & sse blitting
functions, and found a little bottleneck in the memcpy ones : you get
~10% more performance on small surface blitting if you inline them.
2004-04-11 19:52:58 +00:00
Sam Lantinga
6f9b06c0bb Date: Tue, 30 Mar 2004 18:18:13 -0600
From: Tyler Montbriand
Subject: [SDL] Detecting Opteron CPU features

I can now get SDL_cpuinfo.c to detect the AMD Opteron's RDTSC, MMX, MMXEXT,
3DNOW, 3DNOWEXT, SSE, and SSE2 instruction set extensions under Linux.  It
took one #ifdef'ed block of new asm code to account for the 64-bit flags
register, but the other two blocks worked fine without modification, just
needed to modify the #ifdef's a bit.
2004-04-11 19:49:34 +00:00
Sam Lantinga
9ce7dd9220 Date: Tue, 30 Mar 2004 21:26:47 -0600
From: Tyler Montbriand
Subject: [SDL] Opteron MMX patches for SDL_blit.c and SDL_blit_A.c

The inline MMX assembly in SDL_blit.c and SDL_blit_A.c compiles and runs fine
unmodified under AMD Opteron.  The inline assembly in SDL_yuv_mmx.c and
SDL_blit_N.c unfortunately isn't directly compatible.

I've included diffs from SDL_blit.c and SDL_blit_A.c that allow the MMX
assembly to be compiled when USE_ASMBLIT, __x86_64__, and __GNUC__ are all
defined.  All I had to modify was typedefs, the inline assembly itself wasn't
touched.
2004-04-11 19:47:28 +00:00
Sam Lantinga
37e0fb4d7b Date: Wed, 31 Mar 2004 09:15:57 -0600
From: Tyler Montbriand
Subject: [SDL] Opteron MMX patches for SDL_RLEaccel.c

The inline MMX assembly in SDL_RLEaccel.c compiles unmodified if the typedefs
are adjusted to accept __x86_64__.  The diff from SDL-1.2.7 is attached.
2004-04-08 21:13:14 +00:00
Sam Lantinga
db6b48df28 Argh... 2004-04-08 21:06:10 +00:00
Sam Lantinga
871cb27b15 Yack... finally fixed the MacOS X development package ... I hope! 2004-03-27 16:15:42 +00:00
Ryan C. Gordon
1373de79c0 (Said Max Horn on the SDL mailing list...)
Hi folks,

based on Eric Wing's patch, I created the attached patch which fixes
the OpenGL coordinate inversion bug in SDL. It works fine over here on
10.3 with Ryan's test program (which I also attached).

There is another change in it: I removed the "- 1" in the two lines
using CGDisplayPixelsHigh()... while I understand from a logical point
of view why they *should* be correct, I checked the actual values
computed that way, and they were off-by-one. After removing the " - 1",
the returned mouse coordinates are correct. I checked this by moving
the mouse to the screen top/bottom in fullscreen mode, BTW. With the
change, the proper values 0 and 479 are returned (in 640x480 mode).

Sam, you may still want to test on 10.1, it's very simple using Ryan's
minimal test code :-)

Cheers,

Max




(Here is the reproduction case for revision history's sake...)


/*
 * To compile:
 *   gcc -o test test.c `sdl-config --cflags` `sdl-config --libs` -framework OpenGL
 *
 *  --ryan.
 */

#include <stdio.h>
#include "SDL.h"
#include "SDL_opengl.h"

int main(int argc, char **argv)
{
    Uint32 flags = SDL_OPENGL /* | SDL_FULLSCREEN */;
    SDL_Surface *screen;
    SDL_Event event;
    int done = 0;
    GLfloat ratio;

    SDL_Init(SDL_INIT_VIDEO);
    SDL_ShowCursor(0);
    if ((argv[1]) && (strcmp(argv[1], "--grab") == 0))
        SDL_WM_GrabInput(SDL_GRAB_ON);
    screen = SDL_SetVideoMode(640, 480, 0, flags);
    if (!screen)
        return(42);

    ratio = ((GLfloat) screen->w) / ((GLfloat) screen->h);
    glClearColor( 0.0f, 0.0f, 0.0f, 0.0f );
    glClearDepth( 1.0f );
    glEnable( GL_DEPTH_TEST );
    glDepthFunc( GL_LEQUAL );
    glViewport( 0, 0, screen->w, screen->h);
    glMatrixMode( GL_PROJECTION );
    glLoadIdentity();
    gluPerspective( 45.0f, ratio, 0.1f, 100.0f );
    glMatrixMode( GL_MODELVIEW );
    glLoadIdentity();
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    SDL_GL_SwapBuffers();


    // eh, close enough.
    #define MAX_X 6.12
    #define MAX_Y 4.50

    while (!done)
    {
        int x, y;
        GLfloat glx, gly;

        if (!SDL_WaitEvent(&event))
            break;

        switch (event.type)
        {
            case SDL_KEYUP:
                if (event.key.keysym.sym == SDLK_ESCAPE)
                    done = 1;
                break;
        }

        SDL_GetMouseState(&x, &y);
        glx = ((((GLfloat) x) / ((GLfloat) screen->w)) - 0.5f) * MAX_X;
        gly = ((((GLfloat) y) / ((GLfloat) screen->h)) - 0.5f) * MAX_Y;

        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    	glLoadIdentity();
        glTranslatef(glx,-gly,-6.0f);

        glBegin(GL_TRIANGLES);
            glColor3f(1,0,0); glVertex3f( 0.00f,  0.25f, 0.00f);
            glColor3f(0,1,0); glVertex3f(-0.25f, -0.25f, 0.00f);
            glColor3f(0,0,1); glVertex3f( 0.25f, -0.25f, 0.00f);
	    glEnd();

        SDL_GL_SwapBuffers();
    }

    SDL_Quit();
    return(0);
}

/* end of test.c ... */
2004-03-22 09:38:20 +00:00
Sam Lantinga
133457bbfb Fixed the postinstall script 2004-03-11 13:38:51 +00:00
Sam Lantinga
5894574057 Date: Thu, 11 Mar 2004 18:45:17 +0900
From: Hayashi Naoyuki
Subject: Re: Tru64 cdrom and pthread option fix

I wrote
/* Some CD-ROM drives cannot play the first 150 frames. */
in src/cdrom/osf/SDL_syscdrom.c
and
Some CD-ROM drives(ex. TEAC CD-532E) cannot play first 150 frames(aka gap).

but this is not right.

It is written in MMC that LBA = 4500*M + 75*S + F - 150.
2004-03-11 12:59:41 +00:00
Sam Lantinga
8493c3e7ad Date: Sun, 07 Mar 2004 22:54:11 +0900
From: Hayashi Naoyuki
Subject: Tru64 cdrom and pthread option fix

SDL-1.2.7/src/cdrom/osf/SDL_syscdrom.c Fixes
Some CD-ROM drives(ex. TEAC CD-532E) cannot play
first 150 frames(aka gap).
CheckDrive() fix.
The end of comment is "* /" in AddDrive().

SDL-1.2.7/configure.in Fixes
Add *-*-osf pthread option and
delete line SDL_LIBS="$SDL_LIBS -lrt".
2004-03-07 16:40:15 +00:00
Sam Lantinga
456a172311 Date: Fri, 05 Mar 2004 16:08:01 +0000
From: Alan Swanson
Subject: Re: [SDL] Fatal signal when initiaize with USB joystick on 2.6.2 kern

On Fri, 2004-03-05 at 15:09, Sam Lantinga wrote:
> > Fred, how does the attached patch work for you? Do all your axes work?
>
> I think you meant the two lines to be reversed.
> I checked a more robust version of this into CVS.  Fred, can you see if
> it works?

You've misread the code. :-/

For coef[0] and coef[1], it is (values[2]+values[1]) / 2 and then add
or subtract values[4] to the answer.
2004-03-06 02:58:06 +00:00
Sam Lantinga
ac9d12eaf8 Avoid FPE with Linux 2.6 2004-03-05 15:09:18 +00:00
Sam Lantinga
3d4dbef0c5 Date: Wed, 3 Mar 2004 12:44:21 +0200
From: "Mike Gorchak"
Subject: Misc fixes again

I've added custom WM info for the QNX (same as generic for now), which allows to compile all applications, which included SDL_syswm.h directly, otherwise DISABLE_X11 appearing to be not defined and X11 info was used instead, which is wrong.
2004-03-04 05:41:57 +00:00
Sam Lantinga
09c66b6708 Instructive comments from Max Horn 2004-03-04 05:39:17 +00:00
Sam Lantinga
ef1b944fae sed, it's two, two commands in one! 2004-03-03 06:56:04 +00:00
Ryan C. Gordon
a8a00f5498 Force recreation of X11 window if going to or from a SDL_NOFRAME vidmode. 2004-03-02 19:38:55 +00:00
Sam Lantinga
b3e72359f4 Date: Tue, 2 Mar 2004 11:34:54 +0100
From: Bartosz Fenski aka fEnIo
Subject: outdated entry in INSTALL file

I've just found in INSTALL file:

        If you are cross-compiling from Linux to Win32, you should read
        the file README.Win32

But you don't shipped this file with SDL. I've found in CVS logs that
this file has been deleted and this information is now in FAQ.
2004-03-02 13:01:02 +00:00
Sam Lantinga
a122ee994b Date: Sun, 29 Feb 2004 15:14:22 +0200
From: Martin_Storsj
Subject: Dynamic loading of ALSA

I recently discovered that SDL can dynamically load ESD and aRts, and
made a patch which adds this same functionality to ALSA.

The update for configure.in isn't too good (it should e.g. look for
libasound.so in other directories than /usr/lib), because I'm not too
good at shellscripting and autoconf.

The reason for using dlfcn.h and dlopen instead of SDL_LoadLibrary and
SDL_LoadFunction is that libasound uses versioned symbols, and it is
necessary to load the correct version using dlvsym. This isn't probably
any real portability issue, because ALSA is linux-only.
2004-03-02 12:49:16 +00:00
Sam Lantinga
0b61527eaa Date: Sun, 29 Feb 2004 20:28:27 +0200
From: Martin_Storsj
Subject: Slight bug in ESD and aRts

When I experimented with the ALSA-patch, I found a slight bug in the
Load{ESD,ARTS}Library-functions. The check of whether a function pointer
was correctly loaded looks like this right now:

*esd_functions[i].func = SDL_LoadFunction(esd_handle,
esd_functions[i].name);
if ( ! esd_functions[i].func )

Isn't that supposed to be ( ! *esd_functions[i].func )?
2004-03-02 12:45:22 +00:00
Sam Lantinga
f119900ade Date: Tue, 2 Mar 2004 08:52:20 +0200
From: "Mike Gorchak"
Subject: Just a misc. fixes

1) I've added a small fix to the .qpg file - SDLqpg.diff. Added autoconf variables like the @SDL_BINARY_AGE@ instead of directly using "...so.7".
2004-03-02 12:38:27 +00:00
Sam Lantinga
7b56bd9487 IRIX doesn't have a GL library versioning system 2004-02-26 20:49:45 +00:00
Sam Lantinga
ba724f0612 Oops, ignore SIGALRM, not 0 2004-02-26 19:57:37 +00:00
Ryan C. Gordon
e5326a7e96 Create a 2D window and then manually focus a different window on your desktop,
call SDL_PumpEvents() so the X11 driver sets its this->hidden->switch_waiting,
then set a fullscreen OpenGL window (which makes the X11 driver tear down and
create a new window instead of just resizing the existing one), poll for
events, and the newly-created window will think it needs to pop back to a
window. Fixed by resetting switch_waiting to zero if X11_CreateWindow() had
to tear down a previous window.
2004-02-26 15:12:51 +00:00
Sam Lantinga
743d10080e This works on MacOS X too. :) 2004-02-26 14:26:07 +00:00
Sam Lantinga
c1005d13dc Date: Wed, 25 Feb 2004 06:41:17 -0500
From: "Ryan C. Gordon"
Subject: Re: MacOS X bugs...

This isn't an ideal patch (trying to open a joystick that has previously
been unplugged will report success, but it'll just never give any input,
etc), but it handles the worst case of deadlock in the event subsystem.
2004-02-26 13:45:22 +00:00