diff -crN mpg123-0.59r/CVS/Entries mpg123-0.59r-maitou/CVS/Entries
*** mpg123-0.59r/CVS/Entries	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/CVS/Entries	Tue May 21 03:48:33 2002
***************
*** 0 ****
--- 1,79 ----
+ /BENCHMARKING/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /BUGS/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /CHANGES/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /COPYING/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /INSTALL/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /JUKEBOX/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /Makefile/1.2/Mon May 20 18:32:44 2002//
+ /Makefile.win32/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /README/1.1.1.1/Sat Sep  8 13:54:27 2001//
+ /README.WIN32/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /README.maitou/1.3/Mon May 20 18:38:57 2002//
+ /README.remote/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /TODO/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /audio.c/1.1.1.1/Sat Sep  8 13:54:27 2001//
+ /audio.h/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /audio_aix.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /audio_alib.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /audio_alsa.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /audio_dummy.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /audio_esd.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /audio_hp.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /audio_mint.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /audio_nas.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /audio_os2.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /audio_oss.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /audio_sgi.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /audio_sun.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /audio_win32.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /buffer.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /buffer.h/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /common.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /common.h/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /control_generic.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /control_sajber.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /control_tk3play.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /control_tk3play.h/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /dct64.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /dct64_3dnow.s/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /dct64_i386.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /dct64_i486.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /decode.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /decode_2to1.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /decode_3dnow.s/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /decode_4to1.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /decode_i386.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /decode_i486.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /decode_i586.s/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /decode_ntom.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /equalize.dat/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /equalizer.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /genre.h/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /getbits.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /getbits.h/1.1.1.1/Sat Sep  8 13:54:27 2001//
+ /getlopt.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /getlopt.h/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /httpget.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /huffman.h/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /l2tables.h/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /layer1.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /layer2.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /layer3.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /lyrics.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /mpg123.1/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /mpg123.c/1.1.1.1/Sat Sep  8 13:54:27 2001//
+ /mpg123.h/1.3/Mon May 20 18:48:15 2002//
+ /newmp3list.pl/1.6/Wed Apr 17 16:34:53 2002//
+ /readers.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /system.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /tabinit.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /term.c/1.7/Mon Sep 10 16:11:43 2001//
+ /term.h/1.8/Thu Oct  4 17:49:08 2001//
+ /version.h/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /wav.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /xfermem.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /xfermem.h/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ D/jukebox////
+ D/mpglib////
+ D/precompiled////
+ D/tools////
diff -crN mpg123-0.59r/CVS/Repository mpg123-0.59r-maitou/CVS/Repository
*** mpg123-0.59r/CVS/Repository	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/CVS/Repository	Tue May 21 03:48:32 2002
***************
*** 0 ****
--- 1 ----
+ mpg123-0.59r-maitou
diff -crN mpg123-0.59r/CVS/Root mpg123-0.59r-maitou/CVS/Root
*** mpg123-0.59r/CVS/Root	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/CVS/Root	Tue May 21 03:48:32 2002
***************
*** 0 ****
--- 1 ----
+ /project/cvsroot
diff -crN mpg123-0.59r/Makefile mpg123-0.59r-maitou/Makefile
*** mpg123-0.59r/Makefile	Wed Jun 16 05:39:06 1999
--- mpg123-0.59r-maitou/Makefile	Tue May 21 03:32:44 2002
***************
*** 89,95 ****
  linux-devel:
  	$(MAKE) OBJECTS='decode_i386.o dct64_i386.o audio_oss.o' \
          CC=gcc LDFLAGS= \
!         CFLAGS='-DREAL_IS_FLOAT -DLINUX -Wall -g -m486 \
  		-DREAD_MMAP -DOSS -funroll-all-loops \
  		-finline-functions -ffast-math' \
          mpg123-make
--- 89,95 ----
  linux-devel:
  	$(MAKE) OBJECTS='decode_i386.o dct64_i386.o audio_oss.o' \
          CC=gcc LDFLAGS= \
!         CFLAGS+='-DREAL_IS_FLOAT -DLINUX -Wall -g -m486 \
  		-DREAD_MMAP -DOSS -funroll-all-loops \
  		-finline-functions -ffast-math' \
          mpg123-make
***************
*** 97,103 ****
  linux-profile:
  	$(MAKE) OBJECTS='decode_i386.o dct64_i386.o audio_oss.o' \
          CC=gcc LDFLAGS='-pg' \
!         CFLAGS='-DREAL_IS_FLOAT -DLINUX -Wall -pg -m486 \
  		-DREAD_MMAP -DOSS -funroll-all-loops \
  		-finline-functions -ffast-math' \
          mpg123-make
--- 97,103 ----
  linux-profile:
  	$(MAKE) OBJECTS='decode_i386.o dct64_i386.o audio_oss.o' \
          CC=gcc LDFLAGS='-pg' \
!         CFLAGS+='-DREAL_IS_FLOAT -DLINUX -Wall -pg -m486 \
  		-DREAD_MMAP -DOSS -funroll-all-loops \
  		-finline-functions -ffast-math' \
          mpg123-make
***************
*** 106,112 ****
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o decode_i586.o \
  			audio_oss.o term.o' \
! 		CFLAGS='-DI386_ASSEM -DPENTIUM_OPT -DREAL_IS_FLOAT -DLINUX \
  			-DREAD_MMAP -DOSS -DTERM_CONTROL\
  			-Wall -O2 -m486 \
  			-fomit-frame-pointer -funroll-all-loops \
--- 106,112 ----
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o decode_i586.o \
  			audio_oss.o term.o' \
! 		CFLAGS+='-DI386_ASSEM -DPENTIUM_OPT -DREAL_IS_FLOAT -DLINUX \
  			-DREAD_MMAP -DOSS -DTERM_CONTROL\
  			-Wall -O2 -m486 \
  			-fomit-frame-pointer -funroll-all-loops \
***************
*** 117,123 ****
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_3dnow.o \
  			decode_3dnow.o audio_oss.o term.o' \
! 		CFLAGS='-DI386_ASSEM -DREAL_IS_FLOAT -DPENTIUM_OPT -DLINUX \
  			-DUSE_3DNOW -DREAD_MMAP -DOSS -DTERM_CONTROL\
  			-Wall -O2 -m486 \
  			-fomit-frame-pointer -funroll-all-loops \
--- 117,123 ----
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_3dnow.o \
  			decode_3dnow.o audio_oss.o term.o' \
! 		CFLAGS+='-DI386_ASSEM -DREAL_IS_FLOAT -DPENTIUM_OPT -DLINUX \
  			-DUSE_3DNOW -DREAD_MMAP -DOSS -DTERM_CONTROL\
  			-Wall -O2 -m486 \
  			-fomit-frame-pointer -funroll-all-loops \
***************
*** 128,134 ****
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o decode_i586.o \
  			decode_i486.o dct64_i486.o audio_oss.o term.o' \
! 		CFLAGS='-DI386_ASSEM -DREAL_IS_FLOAT -DI486_OPT -DLINUX \
  			-DREAD_MMAP -DOSS -DTERM_CONTROL\
  			-Wall -O2 -m486 \
  			-fomit-frame-pointer -funroll-all-loops \
--- 128,134 ----
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o decode_i586.o \
  			decode_i486.o dct64_i486.o audio_oss.o term.o' \
! 		CFLAGS+='-DI386_ASSEM -DREAL_IS_FLOAT -DI486_OPT -DLINUX \
  			-DREAD_MMAP -DOSS -DTERM_CONTROL\
  			-Wall -O2 -m486 \
  			-fomit-frame-pointer -funroll-all-loops \
***************
*** 140,146 ****
  		AUDIO_LIB='-lesd -laudiofile' \
  		OBJECTS='decode_i386.o dct64_i386.o decode_i586.o \
  			audio_esd.o' \
! 		CFLAGS='-DI386_ASSEM -DREAL_IS_FLOAT -DPENTIUM_OPT -DLINUX \
  			-DREAD_MMAP -DOSS -DUSE_ESD \
  			-Wall  -O2 -m486 \
  			-fomit-frame-pointer -funroll-all-loops \
--- 140,146 ----
  		AUDIO_LIB='-lesd -laudiofile' \
  		OBJECTS='decode_i386.o dct64_i386.o decode_i586.o \
  			audio_esd.o' \
! 		CFLAGS+='-DI386_ASSEM -DREAL_IS_FLOAT -DPENTIUM_OPT -DLINUX \
  			-DREAD_MMAP -DOSS -DUSE_ESD \
  			-Wall  -O2 -m486 \
  			-fomit-frame-pointer -funroll-all-loops \
***************
*** 153,159 ****
  		AUDIO_LIB='-lasound' \
  		OBJECTS='decode_i386.o dct64_i386.o decode_i586.o \
  			audio_alsa.o term.o' \
! 		CFLAGS='-DI386_ASSEM -DREAL_IS_FLOAT -DPENTIUM_OPT -DLINUX \
  			-DREAD_MMAP -DALSA -DTERM_CONTROL\
  			-Wall  -O2 -m486 \
  			-fomit-frame-pointer -funroll-all-loops \
--- 153,159 ----
  		AUDIO_LIB='-lasound' \
  		OBJECTS='decode_i386.o dct64_i386.o decode_i586.o \
  			audio_alsa.o term.o' \
! 		CFLAGS+='-DI386_ASSEM -DREAL_IS_FLOAT -DPENTIUM_OPT -DLINUX \
  			-DREAD_MMAP -DALSA -DTERM_CONTROL\
  			-Wall  -O2 -m486 \
  			-fomit-frame-pointer -funroll-all-loops \
***************
*** 165,171 ****
  	$(MAKE) CC=gcc LDFLAGS= \
  		AUDIO_LIB='-lasound' \
  		OBJECTS='decode.o dct64.o audio_alsa.o term.o' \
! 		CFLAGS='-DREAL_IS_FLOAT -DLINUX -DREAD_MMAP -DALSA \
  			-DTERM_CONTROL -Wall  -O2 \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math \
--- 165,171 ----
  	$(MAKE) CC=gcc LDFLAGS= \
  		AUDIO_LIB='-lasound' \
  		OBJECTS='decode.o dct64.o audio_alsa.o term.o' \
! 		CFLAGS+='-DREAL_IS_FLOAT -DLINUX -DREAD_MMAP -DALSA \
  			-DTERM_CONTROL -Wall  -O2 \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math \
***************
*** 174,180 ****
  
  linux-alpha:
  	$(MAKE) CC=gcc LDFLAGS= OBJECTS='decode.o dct64.o audio_oss.o' \
! 		CFLAGS='-DLINUX -DOSS -Wall -O2 \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math \
  			-Wall -O6 -DUSE_MMAP \
--- 174,180 ----
  
  linux-alpha:
  	$(MAKE) CC=gcc LDFLAGS= OBJECTS='decode.o dct64.o audio_oss.o' \
! 		CFLAGS+='-DLINUX -DOSS -Wall -O2 \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math \
  			-Wall -O6 -DUSE_MMAP \
***************
*** 185,191 ****
  	$(MAKE) CC=gcc LDFLAGS= \
  		AUDIO_LIB='-lesd -laudiofile' \
  		OBJECTS='decode.o dct64.o audio_esd.o' \
! 		CFLAGS='-DLINUX -DOSS -Wall -O2 \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math \
  			-Wall -O6 -DUSE_MMAP \
--- 185,191 ----
  	$(MAKE) CC=gcc LDFLAGS= \
  		AUDIO_LIB='-lesd -laudiofile' \
  		OBJECTS='decode.o dct64.o audio_esd.o' \
! 		CFLAGS+='-DLINUX -DOSS -Wall -O2 \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math \
  			-Wall -O6 -DUSE_MMAP \
***************
*** 195,201 ****
  #linux-ppc:
  #	$(MAKE) CC=gcc  LDFLAGS= \
  #		OBJECTS='decode.o dct64.o audio_oss.o' \
! #		CFLAGS='-DREAL_IS_FLOAT -DLINUX -Wall -O2 -mcpu=ppc \
  #			-DOSS -DPPC_ENDIAN \
  #			-fomit-frame-pointer -funroll-all-loops \
  #			-finline-functions -ffast-math' \
--- 195,201 ----
  #linux-ppc:
  #	$(MAKE) CC=gcc  LDFLAGS= \
  #		OBJECTS='decode.o dct64.o audio_oss.o' \
! #		CFLAGS+='-DREAL_IS_FLOAT -DLINUX -Wall -O2 -mcpu=ppc \
  #			-DOSS -DPPC_ENDIAN \
  #			-fomit-frame-pointer -funroll-all-loops \
  #			-finline-functions -ffast-math' \
***************
*** 205,211 ****
  #	$(MAKE) CC=gcc  LDFLAGS= \
  #		AUDIO_LIB='-lesd -laudiofile' \
  #		OBJECTS='decode.o dct64.o audio_esd.o' \
! #		CFLAGS='-DREAL_IS_FLOAT -DLINUX -Wall -O2 -mcpu=ppc \
  #			-DOSS -DPPC_ENDIAN \
  #			-fomit-frame-pointer -funroll-all-loops \
  #			-finline-functions -ffast-math' \
--- 205,211 ----
  #	$(MAKE) CC=gcc  LDFLAGS= \
  #		AUDIO_LIB='-lesd -laudiofile' \
  #		OBJECTS='decode.o dct64.o audio_esd.o' \
! #		CFLAGS+='-DREAL_IS_FLOAT -DLINUX -Wall -O2 -mcpu=ppc \
  #			-DOSS -DPPC_ENDIAN \
  #			-fomit-frame-pointer -funroll-all-loops \
  #			-finline-functions -ffast-math' \
***************
*** 214,220 ****
  linux-ppc:
  	$(MAKE) CC=gcc  LDFLAGS= \
  		OBJECTS='decode.o dct64.o audio_oss.o' \
! 		CFLAGS='-DREAL_IS_FLOAT -DLINUX -Wall -O2 -mcpu=ppc \
  			-DOSS \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math' \
--- 214,220 ----
  linux-ppc:
  	$(MAKE) CC=gcc  LDFLAGS= \
  		OBJECTS='decode.o dct64.o audio_oss.o' \
! 		CFLAGS+='-DREAL_IS_FLOAT -DLINUX -Wall -O2 -mcpu=ppc \
  			-DOSS \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math' \
***************
*** 224,230 ****
  	$(MAKE) CC=gcc  LDFLAGS= \
  		AUDIO_LIB='-lesd -laudiofile' \
  		OBJECTS='decode.o dct64.o audio_esd.o' \
! 		CFLAGS='-DREAL_IS_FLOAT -DLINUX -Wall -O2 -mcpu=ppc \
  			-DOSS  \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math' \
--- 224,230 ----
  	$(MAKE) CC=gcc  LDFLAGS= \
  		AUDIO_LIB='-lesd -laudiofile' \
  		OBJECTS='decode.o dct64.o audio_esd.o' \
! 		CFLAGS+='-DREAL_IS_FLOAT -DLINUX -Wall -O2 -mcpu=ppc \
  			-DOSS  \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math' \
***************
*** 233,246 ****
  linux-sparc:
  	$(MAKE) CC=gcc  LDFLAGS= \
  		OBJECTS='decode.o dct64.o audio_sun.o' \
! 		CFLAGS='-DREAL_IS_FLOAT -DUSE_MMAP -DSPARCLINUX -Wall -O2 \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math' \
  		mpg123-make
  
  linux-m68k:
  	$(MAKE) CC=gcc LDFLAGS= OBJECTS='decode.o dct64.o audio_oss.o' \
! 		CFLAGS='-DREAL_IS_FLOAT -DLINUX -DREAD_MMAP \
  			-DOSS -DOSS_BIG_ENDIAN -Wall -O2 -m68040 \
  			-fomit-frame-pointer -funroll-loops \
  			-finline-functions -ffast-math' \
--- 233,246 ----
  linux-sparc:
  	$(MAKE) CC=gcc  LDFLAGS= \
  		OBJECTS='decode.o dct64.o audio_sun.o' \
! 		CFLAGS+='-DREAL_IS_FLOAT -DUSE_MMAP -DSPARCLINUX -Wall -O2 \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math' \
  		mpg123-make
  
  linux-m68k:
  	$(MAKE) CC=gcc LDFLAGS= OBJECTS='decode.o dct64.o audio_oss.o' \
! 		CFLAGS+='-DREAL_IS_FLOAT -DLINUX -DREAD_MMAP \
  			-DOSS -DOSS_BIG_ENDIAN -Wall -O2 -m68040 \
  			-fomit-frame-pointer -funroll-loops \
  			-finline-functions -ffast-math' \
***************
*** 262,268 ****
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o decode_i586.o \
  			control_sajber.o control_tk3play.o audio_oss.o' \
! 		CFLAGS='-DFRONTEND -DOSS -DI386_ASSEM -DREAL_IS_FLOAT \
  			-DPENTIUM_OPT -DLINUX -Wall -O2 -m486 \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math' \
--- 262,268 ----
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o decode_i586.o \
  			control_sajber.o control_tk3play.o audio_oss.o' \
! 		CFLAGS+='-DFRONTEND -DOSS -DI386_ASSEM -DREAL_IS_FLOAT \
  			-DPENTIUM_OPT -DLINUX -Wall -O2 -m486 \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math' \
***************
*** 272,278 ****
  	$(MAKE) CC=gcc LDFLAGS='-L/usr/X11R6/lib' \
  		AUDIO_LIB='-laudio -lXau' \
  		OBJECTS='decode_i386.o dct64_i386.o audio_nas.o' \
! 		CFLAGS='-I/usr/X11R6/include \
  			-DI386_ASSEM -DREAL_IS_FLOAT -DLINUX -DNAS \
  			-Wall -O2 -m486 \
  			-fomit-frame-pointer -funroll-all-loops \
--- 272,278 ----
  	$(MAKE) CC=gcc LDFLAGS='-L/usr/X11R6/lib' \
  		AUDIO_LIB='-laudio -lXau' \
  		OBJECTS='decode_i386.o dct64_i386.o audio_nas.o' \
! 		CFLAGS+='-I/usr/X11R6/include \
  			-DI386_ASSEM -DREAL_IS_FLOAT -DLINUX -DNAS \
  			-Wall -O2 -m486 \
  			-fomit-frame-pointer -funroll-all-loops \
***************
*** 288,294 ****
  freebsd:
  	$(MAKE) CC=cc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o audio_oss.o' \
! 		CFLAGS='-Wall -ansi -pedantic -O4 -m486 -fomit-frame-pointer \
  			-funroll-all-loops -ffast-math -DROT_I386 \
  			-DREAD_MMAP \
  			-DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DOSS' \
--- 288,294 ----
  freebsd:
  	$(MAKE) CC=cc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o audio_oss.o' \
! 		CFLAGS+='-Wall -ansi -pedantic -O4 -m486 -fomit-frame-pointer \
  			-funroll-all-loops -ffast-math -DROT_I386 \
  			-DREAD_MMAP \
  			-DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DOSS' \
***************
*** 310,316 ****
  	$(MAKE) CC=cc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o audio_oss.o \
  			control_sajber.o control_tk3play.o' \
! 		CFLAGS='-Wall -ansi -pedantic -O4 -m486 -fomit-frame-pointer \
  			-funroll-all-loops -ffast-math -DROT_I386 \
  			-DFRONTEND \
  			-DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DOSS' \
--- 310,316 ----
  	$(MAKE) CC=cc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o audio_oss.o \
  			control_sajber.o control_tk3play.o' \
! 		CFLAGS+='-Wall -ansi -pedantic -O4 -m486 -fomit-frame-pointer \
  			-funroll-all-loops -ffast-math -DROT_I386 \
  			-DFRONTEND \
  			-DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DOSS' \
***************
*** 325,338 ****
  	$(MAKE) CC='purify -cache-dir=/tmp cc' \
  		LDFLAGS='-lsocket -lnsl' \
  		OBJECTS='decode.o dct64.o audio_sun.o term.o' \
! 		CFLAGS='-fast -native -xO4 -DSOLARIS -DTERM_CONTROL \
  			-DUSE_MMAP ' \
  		mpg123-make
  
  solaris-ccscc:
  	$(MAKE) CC=/usr/ccs/bin/ucbcc LDFLAGS='-lsocket -lnsl' \
  		OBJECTS='decode.o dct64.o audio_sun.o term.o' \
! 		CFLAGS='-fast -native -xO4 -DSOLARIS \
  			-DUSE_MMAP ' \
  		mpg123-make
  
--- 325,338 ----
  	$(MAKE) CC='purify -cache-dir=/tmp cc' \
  		LDFLAGS='-lsocket -lnsl' \
  		OBJECTS='decode.o dct64.o audio_sun.o term.o' \
! 		CFLAGS+='-fast -native -xO4 -DSOLARIS -DTERM_CONTROL \
  			-DUSE_MMAP ' \
  		mpg123-make
  
  solaris-ccscc:
  	$(MAKE) CC=/usr/ccs/bin/ucbcc LDFLAGS='-lsocket -lnsl' \
  		OBJECTS='decode.o dct64.o audio_sun.o term.o' \
! 		CFLAGS+='-fast -native -xO4 -DSOLARIS \
  			-DUSE_MMAP ' \
  		mpg123-make
  
***************
*** 340,346 ****
  solaris:
  	$(MAKE) CC=cc LDFLAGS='-lsocket -lnsl' \
  		OBJECTS='decode.o dct64.o audio_sun.o term.o' \
! 		CFLAGS='-fast -native -xO4 -DSOLARIS \
  			-DUSE_MMAP -DTERM_CONTROL' \
  		mpg123-make
  
--- 340,346 ----
  solaris:
  	$(MAKE) CC=cc LDFLAGS='-lsocket -lnsl' \
  		OBJECTS='decode.o dct64.o audio_sun.o term.o' \
! 		CFLAGS+='-fast -native -xO4 -DSOLARIS \
  			-DUSE_MMAP -DTERM_CONTROL' \
  		mpg123-make
  
***************
*** 348,354 ****
  	$(MAKE) CC='gcc' \
  		LDFLAGS='-lsocket -lnsl -pg' \
  		OBJECTS='decode.o dct64.o audio_sun.o' \
! 		CFLAGS='-g -pg -O2 -Wall -DSOLARIS -DREAL_IS_FLOAT -DUSE_MMAP \
  			-DREAD_MMAP \
  			-funroll-all-loops -finline-functions' \
  		mpg123-make
--- 348,354 ----
  	$(MAKE) CC='gcc' \
  		LDFLAGS='-lsocket -lnsl -pg' \
  		OBJECTS='decode.o dct64.o audio_sun.o' \
! 		CFLAGS+='-g -pg -O2 -Wall -DSOLARIS -DREAL_IS_FLOAT -DUSE_MMAP \
  			-DREAD_MMAP \
  			-funroll-all-loops -finline-functions' \
  		mpg123-make
***************
*** 357,363 ****
  	$(MAKE) CC=gcc \
  		LDFLAGS='-lsocket -lnsl' \
  		OBJECTS='decode.o dct64.o audio_sun.o term.o' \
! 		CFLAGS='-O2 -Wall -pedantic -DSOLARIS -DREAL_IS_FLOAT -DUSE_MMAP \
  			-DREAD_MMAP -DTERM_CONTROL \
  			-funroll-all-loops  -finline-functions' \
  		mpg123-make
--- 357,363 ----
  	$(MAKE) CC=gcc \
  		LDFLAGS='-lsocket -lnsl' \
  		OBJECTS='decode.o dct64.o audio_sun.o term.o' \
! 		CFLAGS+='-O2 -Wall -pedantic -DSOLARIS -DREAL_IS_FLOAT -DUSE_MMAP \
  			-DREAD_MMAP -DTERM_CONTROL \
  			-funroll-all-loops  -finline-functions' \
  		mpg123-make
***************
*** 366,372 ****
  	$(MAKE) CC=gcc LDFLAGS='-lsocket -lnsl' \
  		AUDIO_LIB='-lesd -lresolv' \
  		OBJECTS='decode.o dct64.o audio_esd.o' \
! 		CFLAGS='-O2 -Wall -DSOLARIS -DREAL_IS_FLOAT -DUSE_MMAP \
  			-DREAD_MMAP \
  			-funroll-all-loops -finline-functions' \
  		mpg123-make
--- 366,372 ----
  	$(MAKE) CC=gcc LDFLAGS='-lsocket -lnsl' \
  		AUDIO_LIB='-lesd -lresolv' \
  		OBJECTS='decode.o dct64.o audio_esd.o' \
! 		CFLAGS+='-O2 -Wall -DSOLARIS -DREAL_IS_FLOAT -DUSE_MMAP \
  			-DREAD_MMAP \
  			-funroll-all-loops -finline-functions' \
  		mpg123-make
***************
*** 375,381 ****
  	$(MAKE) CC=gcc LDFLAGS='-lsocket -lnsl' \
  		OBJECTS='decode_i386.o dct64_i386.o decode_i586.o \
  			audio_oss.o' \
! 		CFLAGS='-DI386_ASSEM -DREAL_IS_FLOAT -DPENTIUM_OPT -DUSE_MMAP \
  			-DREAD_MMAP -DOSS \
  			-Wall -O2 -m486 \
  			-funroll-all-loops -finline-functions' \
--- 375,381 ----
  	$(MAKE) CC=gcc LDFLAGS='-lsocket -lnsl' \
  		OBJECTS='decode_i386.o dct64_i386.o decode_i586.o \
  			audio_oss.o' \
! 		CFLAGS+='-DI386_ASSEM -DREAL_IS_FLOAT -DPENTIUM_OPT -DUSE_MMAP \
  			-DREAD_MMAP -DOSS \
  			-Wall -O2 -m486 \
  			-funroll-all-loops -finline-functions' \
***************
*** 385,391 ****
  	$(MAKE) CC=gcc LDFLAGS='-lsocket -lnsl' \
  		AUDIO_LIB='-L/usr/openwin/lib -laudio -lXau'\
  		OBJECTS='decode.o dct64.o audio_nas.o' \
! 		CFLAGS='-O2 -I/usr/openwin/include -Wall \
  			-DSOLARIS -DREAL_IS_FLOAT -DUSE_MMAP \
  			-DREAD_MMAP -DNAS \
  			-funroll-all-loops -finline-functions' \
--- 385,391 ----
  	$(MAKE) CC=gcc LDFLAGS='-lsocket -lnsl' \
  		AUDIO_LIB='-L/usr/openwin/lib -laudio -lXau'\
  		OBJECTS='decode.o dct64.o audio_nas.o' \
! 		CFLAGS+='-O2 -I/usr/openwin/include -Wall \
  			-DSOLARIS -DREAL_IS_FLOAT -DUSE_MMAP \
  			-DREAD_MMAP -DNAS \
  			-funroll-all-loops -finline-functions' \
***************
*** 394,400 ****
  sunos:
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode.o dct64.o audio_sun.o' \
! 		CFLAGS='-O2 -DSUNOS -DREAL_IS_FLOAT -DUSE_MMAP \
  			-funroll-loops' \
  		mpg123-make
  
--- 394,400 ----
  sunos:
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode.o dct64.o audio_sun.o' \
! 		CFLAGS+='-O2 -DSUNOS -DREAL_IS_FLOAT -DUSE_MMAP \
  			-funroll-loops' \
  		mpg123-make
  
***************
*** 402,461 ****
  hpux:
  	$(MAKE) CC=cc LDFLAGS= \
  		OBJECTS='decode.o dct64.o audio_hp.o' \
! 		CFLAGS='-DREAL_IS_FLOAT -Ae +O3 -D_HPUX_SOURCE -DHPUX' \
  		mpg123-make
  
  hpux-alib:
  	$(MAKE) CC=cc LDFLAGS='-L/opt/audio/lib' \
  		OBJECTS='decode.o dct64.o audio_alib.o' \
  		AUDIO_LIB=-lAlib \
! 		CFLAGS='-DREAL_IS_FLOAT -Ae +O3 -D_HPUX_SOURCE -DHPUX \
  			-I/opt/audio/include' \
  		mpg123-make
  
  hpux-gcc:
  	$(MAKE) CC=gcc LDFLAGS= OBJECTS='decode.o dct64.o audio_hp.o' \
! 		CFLAGS='-DREAL_IS_FLOAT -O3 -D_HPUX_SOURCE -DHPUX' \
  		mpg123-make
  sgi:
  	$(MAKE) CC=cc LDFLAGS= \
  		OBJECTS='decode.o dct64.o audio_sgi.o' AUDIO_LIB=-laudio \
! 		CFLAGS='-O2 -DSGI -DREAL_IS_FLOAT -DUSE_MMAP' \
  		mpg123-make
  
  sgi-gcc:
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode.o dct64.o audio_sgi.o' AUDIO_LIB=-laudio \
! 		CFLAGS='-O2 -DSGI -DREAL_IS_FLOAT -DUSE_MMAP' \
  		mpg123-make
  
  dec:
  	$(MAKE) CC=cc LDFLAGS= OBJECTS='decode.o dct64.o audio_dummy.o' \
! 		CFLAGS='-std1 -warnprotos -O4 -DUSE_MMAP' \
  		mpg123-make
  
  dec-nas:
  	$(MAKE) CC=cc LDFLAGS='-L/usr/X11R6/lib' \
  		AUDIO_LIB='-laudio -lXau -ldnet_stub'\
  		OBJECTS='decode.o dct64.o  audio_nas.o' \
! 		CFLAGS='-I/usr/X11R6/include -std1 -warnprotos -O4 -DUSE_MMAP' \
  		mpg123-make
  
  ultrix:
  	$(MAKE) CC=cc LDFLAGS= OBJECTS='decode.o dct64.o audio_dummy.o' \
! 		CFLAGS='-std1 -O2 -DULTRIX' \
  		mpg123-make
  
  aix-gcc:
  	$(MAKE) CC=gcc LDFLAGS= OBJECTS='decode.o dct64.o audio_aix.o' \
! 		CFLAGS='-DAIX -Wall -O6 -DUSE_MMAP -DREAD_MMAP -DREAL_IS_FLOAT \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math' \
  		mpg123-make
  
  aix-xlc:
  	$(MAKE) LDFLAGS= OBJECTS='decode.o dct64.o audio_aix.o' \
! 		CFLAGS="$(CFLAGS) -O3 -qstrict -qcpluscmt -DAIX -DUSE_MMAP \
  			-DREAD_MMAP " \
  		mpg123-make
  
--- 402,461 ----
  hpux:
  	$(MAKE) CC=cc LDFLAGS= \
  		OBJECTS='decode.o dct64.o audio_hp.o' \
! 		CFLAGS+='-DREAL_IS_FLOAT -Ae +O3 -D_HPUX_SOURCE -DHPUX' \
  		mpg123-make
  
  hpux-alib:
  	$(MAKE) CC=cc LDFLAGS='-L/opt/audio/lib' \
  		OBJECTS='decode.o dct64.o audio_alib.o' \
  		AUDIO_LIB=-lAlib \
! 		CFLAGS+='-DREAL_IS_FLOAT -Ae +O3 -D_HPUX_SOURCE -DHPUX \
  			-I/opt/audio/include' \
  		mpg123-make
  
  hpux-gcc:
  	$(MAKE) CC=gcc LDFLAGS= OBJECTS='decode.o dct64.o audio_hp.o' \
! 		CFLAGS+='-DREAL_IS_FLOAT -O3 -D_HPUX_SOURCE -DHPUX' \
  		mpg123-make
  sgi:
  	$(MAKE) CC=cc LDFLAGS= \
  		OBJECTS='decode.o dct64.o audio_sgi.o' AUDIO_LIB=-laudio \
! 		CFLAGS+='-O2 -DSGI -DREAL_IS_FLOAT -DUSE_MMAP' \
  		mpg123-make
  
  sgi-gcc:
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode.o dct64.o audio_sgi.o' AUDIO_LIB=-laudio \
! 		CFLAGS+='-O2 -DSGI -DREAL_IS_FLOAT -DUSE_MMAP' \
  		mpg123-make
  
  dec:
  	$(MAKE) CC=cc LDFLAGS= OBJECTS='decode.o dct64.o audio_dummy.o' \
! 		CFLAGS+='-std1 -warnprotos -O4 -DUSE_MMAP' \
  		mpg123-make
  
  dec-nas:
  	$(MAKE) CC=cc LDFLAGS='-L/usr/X11R6/lib' \
  		AUDIO_LIB='-laudio -lXau -ldnet_stub'\
  		OBJECTS='decode.o dct64.o  audio_nas.o' \
! 		CFLAGS+='-I/usr/X11R6/include -std1 -warnprotos -O4 -DUSE_MMAP' \
  		mpg123-make
  
  ultrix:
  	$(MAKE) CC=cc LDFLAGS= OBJECTS='decode.o dct64.o audio_dummy.o' \
! 		CFLAGS+='-std1 -O2 -DULTRIX' \
  		mpg123-make
  
  aix-gcc:
  	$(MAKE) CC=gcc LDFLAGS= OBJECTS='decode.o dct64.o audio_aix.o' \
! 		CFLAGS+='-DAIX -Wall -O6 -DUSE_MMAP -DREAD_MMAP -DREAL_IS_FLOAT \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math' \
  		mpg123-make
  
  aix-xlc:
  	$(MAKE) LDFLAGS= OBJECTS='decode.o dct64.o audio_aix.o' \
! 		CFLAGS+="$(CFLAGS) -O3 -qstrict -qcpluscmt -DAIX -DUSE_MMAP \
  			-DREAD_MMAP " \
  		mpg123-make
  
***************
*** 465,471 ****
  aix-frontend:
  	$(MAKE) LDFLAGS= OBJECTS='decode.o dct64.o audio_aix.o \
  			control_sajber.o control_tk3play.o' \
! 		CFLAGS='-DAIX -Wall -O6 -DUSE_MMAP -DFRONTEND \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math' \
  		$(FRONTEND)
--- 465,471 ----
  aix-frontend:
  	$(MAKE) LDFLAGS= OBJECTS='decode.o dct64.o audio_aix.o \
  			control_sajber.o control_tk3play.o' \
! 		CFLAGS+='-DAIX -Wall -O6 -DUSE_MMAP -DFRONTEND \
  			-fomit-frame-pointer -funroll-all-loops \
  			-finline-functions -ffast-math' \
  		$(FRONTEND)
***************
*** 473,479 ****
  os2:
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o audio_os2.o' \
! 		CFLAGS='-DREAL_IS_FLOAT -DNOXFERMEM -DOS2 -Wall -O2 -m486 \
  		-fomit-frame-pointer -funroll-all-loops \
  		-finline-functions -ffast-math' \
  		LIBS='-los2me -lsocket' \
--- 473,479 ----
  os2:
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o audio_os2.o' \
! 		CFLAGS+='-DREAL_IS_FLOAT -DNOXFERMEM -DOS2 -Wall -O2 -m486 \
  		-fomit-frame-pointer -funroll-all-loops \
  		-finline-functions -ffast-math' \
  		LIBS='-los2me -lsocket' \
***************
*** 482,488 ****
  netbsd:
  	$(MAKE) CC=cc LDFLAGS= \
  		OBJECTS='decode.o dct64.o audio_sun.o' \
! 		CFLAGS='-Wall -ansi -pedantic -O3 -fomit-frame-pointer \
  			-funroll-all-loops -ffast-math \
  			-DREAL_IS_FLOAT -DUSE_MMAP -DNETBSD' \
  		mpg123-make
--- 482,488 ----
  netbsd:
  	$(MAKE) CC=cc LDFLAGS= \
  		OBJECTS='decode.o dct64.o audio_sun.o' \
! 		CFLAGS+='-Wall -ansi -pedantic -O3 -fomit-frame-pointer \
  			-funroll-all-loops -ffast-math \
  			-DREAL_IS_FLOAT -DUSE_MMAP -DNETBSD' \
  		mpg123-make
***************
*** 490,496 ****
  netbsd-i386:
  	$(MAKE) CC=cc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o audio_sun.o' \
! 		CFLAGS='-Wall -ansi -pedantic -O4 -m486 -fomit-frame-pointer \
  			-funroll-all-loops -ffast-math -DROT_I386 \
  			-DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DNETBSD' \
  		mpg123-make
--- 490,496 ----
  netbsd-i386:
  	$(MAKE) CC=cc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o audio_sun.o' \
! 		CFLAGS+='-Wall -ansi -pedantic -O4 -m486 -fomit-frame-pointer \
  			-funroll-all-loops -ffast-math -DROT_I386 \
  			-DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DNETBSD' \
  		mpg123-make
***************
*** 499,505 ****
  	$(MAKE) CC=shlicc2 LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o \
  			 audio_oss.o' \
! 		CFLAGS='-Wall -O4 -m486 -fomit-frame-pointer \
  			-funroll-all-loops -ffast-math -DROT_I386 \
  			-DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DOSS \
  			-DDONT_CATCH_SIGNALS' \
--- 499,505 ----
  	$(MAKE) CC=shlicc2 LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o \
  			 audio_oss.o' \
! 		CFLAGS+='-Wall -O4 -m486 -fomit-frame-pointer \
  			-funroll-all-loops -ffast-math -DROT_I386 \
  			-DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DOSS \
  			-DDONT_CATCH_SIGNALS' \
***************
*** 508,514 ****
  bsdos4:
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o audio_oss.o' \
! 		CFLAGS='-Wall -O4 -m486 -fomit-frame-pointer \
  			-funroll-all-loops -ffast-math -DROT_I386 \
  			-DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DOSS \
  			-DREAD_MMAP -DDONT_CATCH_SIGNALS' \
--- 508,514 ----
  bsdos4:
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode_i386.o dct64_i386.o audio_oss.o' \
! 		CFLAGS+='-Wall -O4 -m486 -fomit-frame-pointer \
  			-funroll-all-loops -ffast-math -DROT_I386 \
  			-DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DOSS \
  			-DREAD_MMAP -DDONT_CATCH_SIGNALS' \
***************
*** 519,525 ****
  		AUDIO_LIB='-laudio -lXau -L/usr/X11R6/lib' \
  		OBJECTS='decode_i386.o dct64_i386.o \
  			audio_nas.o' \
! 		CFLAGS='-Wall -O4 -m486 -fomit-frame-pointer \
  			-funroll-all-loops -ffast-math -DROT_I386 \
  			-DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DOSS \
  			-DDONT_CATCH_SIGNALS -DNAS' \
--- 519,525 ----
  		AUDIO_LIB='-laudio -lXau -L/usr/X11R6/lib' \
  		OBJECTS='decode_i386.o dct64_i386.o \
  			audio_nas.o' \
! 		CFLAGS+='-Wall -O4 -m486 -fomit-frame-pointer \
  			-funroll-all-loops -ffast-math -DROT_I386 \
  			-DI386_ASSEM -DREAL_IS_FLOAT -DUSE_MMAP -DOSS \
  			-DDONT_CATCH_SIGNALS -DNAS' \
***************
*** 528,534 ****
  mint:
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode.o dct64.o audio_mint.o' \
! 		CFLAGS='-Wall -O2 -m68020-40 -m68881 \
  		-fomit-frame-pointer -funroll-all-loops \
  		-finline-functions -ffast-math \
  		-DREAL_IS_FLOAT -DMINT -DNOXFERMEM' \
--- 528,534 ----
  mint:
  	$(MAKE) CC=gcc LDFLAGS= \
  		OBJECTS='decode.o dct64.o audio_mint.o' \
! 		CFLAGS+='-Wall -O2 -m68020-40 -m68881 \
  		-fomit-frame-pointer -funroll-all-loops \
  		-finline-functions -ffast-math \
  		-DREAL_IS_FLOAT -DMINT -DNOXFERMEM' \
***************
*** 538,544 ****
  # maybe you need the additonal options LDFLAGS='-lnsl -lsocket' when linking (see solaris:)
  generic:
  	$(MAKE) LDFLAGS= OBJECTS='decode.o dct64.o audio_dummy.o' \
! 		CFLAGS='-O -DGENERIC -DNOXFERMEM' \
  		mpg123-make
  
  ###########################################################################
--- 538,544 ----
  # maybe you need the additonal options LDFLAGS='-lnsl -lsocket' when linking (see solaris:)
  generic:
  	$(MAKE) LDFLAGS= OBJECTS='decode.o dct64.o audio_dummy.o' \
! 		CFLAGS+='-O -DGENERIC -DNOXFERMEM' \
  		mpg123-make
  
  ###########################################################################
***************
*** 558,568 ****
  		tabinit.o audio.o layer1.o layer2.o layer3.o buffer.o \
  		getlopt.o httpget.o xfermem.o equalizer.o \
  		decode_ntom.o Makefile wav.o readers.o getbits.o \
! 		control_generic.o
  	$(CC) $(CFLAGS) $(LDFLAGS)  mpg123.o tabinit.o common.o layer1.o \
  		layer2.o layer3.o audio.o buffer.o decode_2to1.o equalizer.o \
  		decode_4to1.o getlopt.o httpget.o xfermem.o decode_ntom.o \
! 		wav.o readers.o getbits.o control_generic.o \
  		$(OBJECTS) -o $(BINNAME) -lm $(AUDIO_LIB)
  
  mpg123.exe: mpg123.o common.o $(OBJECTS) decode_2to1.o decode_4to1.o \
--- 558,568 ----
  		tabinit.o audio.o layer1.o layer2.o layer3.o buffer.o \
  		getlopt.o httpget.o xfermem.o equalizer.o \
  		decode_ntom.o Makefile wav.o readers.o getbits.o \
! 		control_generic.o lyrics.o
  	$(CC) $(CFLAGS) $(LDFLAGS)  mpg123.o tabinit.o common.o layer1.o \
  		layer2.o layer3.o audio.o buffer.o decode_2to1.o equalizer.o \
  		decode_4to1.o getlopt.o httpget.o xfermem.o decode_ntom.o \
! 		wav.o readers.o getbits.o control_generic.o lyrics.o \
  		$(OBJECTS) -o $(BINNAME) -lm $(AUDIO_LIB)
  
  mpg123.exe: mpg123.o common.o $(OBJECTS) decode_2to1.o decode_4to1.o \
***************
*** 606,611 ****
--- 606,612 ----
  wav.o:		mpg123.h
  readers.o:	mpg123.h buffer.h common.h
  term.o:		mpg123.h buffer.h term.h common.h
+ lyrics.o:	mpg123.h common.h
  
  ###########################################################################
  ###########################################################################
diff -crN mpg123-0.59r/README.maitou mpg123-0.59r-maitou/README.maitou
*** mpg123-0.59r/README.maitou	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/README.maitou	Tue May 21 03:38:57 2002
***************
*** 0 ****
--- 1,172 ----
+ ======================================================================
+     mpg123-0.59r + Lyrics (歌詞表示) + 日本語コード変換 + FIFO 出力
+                             - Release 4 -
+                              May 20, 2002
+ 
+                                            伊藤正史＠フジテレビジョン
+                    (C)1999-2002 Maitou Software <maitou@maitou.gr.jp>
+ ======================================================================
+ 
+ << このソフトウェアパッチの紹介 >>
+ ==================================
+ 
+    　このソフトウェアパッチは、mpg123 に Lyrics 形式の歌詞表示機能
+    を追加します。また、MP3 ファイルの ID3 情報に日本語を含める場合、
+    通常は日本語コードを S-JIS で記録しますが、UNIX  環境での使用に
+    適さないため、これを日本語 EUC に変換して表示するようにさせられ
+    ます。もちろん歌詞表示もこれに対応しています。さらに、 ID3 情報
+    や歌詞を、 FIFO (名前付きパイプ) を使って外部のプログラムに送る
+    ことも可能にします。
+ 
+      そもそもの製作背景としては、わが家では不要になったネットインカ
+    ム端末を改造し、 PC に接続し、ドライバを自作して家電機器制御を行
+    っており、今回は音楽演奏機能を追加したくなった為、上位のソフトウ
+    ェア部分に mpg123 のコントロールモードを改造すればイケると考えま
+    した。また、自宅ではネットインカムによる機器／音楽演奏操作の他、
+    テレビ画面表示サーバによって、家庭内の機器の情報が表示されており、
+    この中で演奏中の音楽の情報や歌詞を表示したかったため、mpg123  に
+    よる演奏だけでなく、（画面表示サーバ等の）外部プログラムにその内
+    部情報を出力してやる必要があったため、日本語コード変換や FIFO に
+    よる情報出力機能の追加を行いました。
+ 
+      自分以外の方でも、コンソールで使える mpg123 を内部で使用してシ
+    ステム開発されている方がいらっしゃるかもしれませんし、また、単に
+    コンソールで動くのが気に入って使われている方もいるかもしれません。
+    そのような方々には、コンソールに Lyrics の歌詞が表示される機能、
+    EUC に変換されて表示される機能、FIFO を使って情報を外部に出せる
+    機能はきっと重宝して使用して頂けるものと思います。
+ 
+ 
+ << 著作権と配布について >>
+ ==========================
+ 
+    　本ソフトウェアパッチは、mpg123 に対する機能追加のためのプログ
+    ラムです。このパッチの著作権は 「伊藤正史＠フジテレビジョン」に
+    あり、 その配布は本パッチに変更を加えない限り誰でも自由に行って
+    頂いて構いません。本パッチへの変更を加えて配布する場合は、 この
+    README.maitou ファイルには変更をすることなく、 また切り放すこと
+    なく行ってください。 また改変者が新たに追加する README ファイル
+    には、オリジナルパッチの作製者が 「伊藤正史＠フジテレビジョン」
+    であることを明記して下さい。
+ 
+ 
+ << 動作環境 >>
+ ==============
+ 
+      x86 Linux-2.2.17 及び IA-Solaris8 での動作確認を行いました。
+      mpg123 が動作する環境であれば、問題なく動作すると思います。
+ 
+ 
+ << インストール方法 >>
+ ======================
+ 
+      make の際に、'CFLAGS=-DMAITOU_PATCH' を引数に追加してください。
+    　その他は、オリジナルの mpg123 のインストール方法と同じです。
+ 
+      例1)
+      % make 'CFLAGS=-DMAITOU_PATCH' solaris-gcc
+ 
+      例2)
+      % make 'CFLAGS=-DMAITOU_PATCH' linux
+ 
+ 
+ << 使用方法 >>
+ ======================
+ 
+    [ Lyrics (歌詞表示) ]
+      デフォルトでは、MPEG AUDIO ファイルが存在するディレクトリにあ
+    る、MPEG AUDIO ファイルの拡張子を .txt としたファイルを Lyrics
+    歌詞データファイルとして検索します。強制的に、Lyrics 歌詞ファイ
+    ルのあるディレクトリを指定したい場合は、
+ 
+    % mpg123 -l /tmp [options...] [MPEG Audio Files...]
+ 
+    などと、-l オプションに続いて対象のディレクトリを指定して下さい。
+    これにより、MPEG AUDIO ファイルがあるディレクトリに Lyrics 歌詞
+    ファイルが存在しない場合に、続いてこのパスで検索されます。
+ 
+      歌詞表示は、mpg123 をコントロールモード (-C) で起動して、早送
+    りや巻き戻しを行っても問題なく、正しく表示されます。
+ 
+ 
+    [ 日本語コード変換 ]
+    　デフォルトでは、ID3 情報や歌詞表示の文字コード変換機能 (S-JIS
+    -> 日本語EUC ) が有効になります。日本語コード変換を行いたくない
+    場合は、
+ 
+    % mpg123 -j [options...] [MPEG Audio Files...]
+ 
+    などと、-j オプションを指定して下さい。この指定がされると、通常
+    の mpg123 と同様に日本語コード変換を行いません。
+ 
+ 
+    [ FIFO (名前付きパイプ) 出力 ]
+      名前付きパイプを使用して、現在演奏中の ID3 情報、歌詞を外部プ
+    ログラムに送りたい場合は、
+ 
+    % mpg123 -F /tmp/hoge.fifo
+ 
+    などと、-F オプションに続いて作成する FIFO ファイル名を指定して
+    下さい。指定するディレクトリには  mpg123 を実行するユーザがファ
+    イルを作成できる必要があります。受信側のプログラムは、先に FIFO
+    を開いておく必要はなく、演奏中に
+ 
+    % cat /tmp/hoge.fifo
+ 
+    などと開いても、正しく表示されます。
+ 
+ 
+ << バグ >>
+ ==========
+ 
+    　もし、このパッチにより追加される機能に関わるバグを見つけたら
+    maitou@maitou.gr.jp に連絡してください。パッチバージョンとあな
+    たのシステムに関する情報の明記も忘れないでください。
+ 
+ 
+ << まいとうソフトウェアについて >>
+ ==================================
+ 
+      まいとうソフトウェアパッチは、「まいとう情報通信研究会」によ
+    り製作されたソフトウェアパッチです。「まいとう情報通信研究会」
+    は、「伊藤正史＠フジテレビジョン」により運営されている任意団体
+    で、情報通信分野に興味を持つ社会人が集まり、会員相互の情報研究
+    に関する知識や技術力の向、ネットワーク社会への貢献を行うことを
+    目的として、通常は Linux や Solaris 等の UNIX 系の OS の情報交
+    換、ソフトウェア・ハードウェア・システム開発等を行っています。
+    ホームページは、http://www.maitou.gr.jp/ です。
+ 
+ 
+ << ご意見・ご感想・お問い合わせ >>
+ ==================================
+ 
+     本ソフトウェアに関するご意見・ご感想・お問い合わせは、
+   maitou@maitou.gr.jp へお願い致します。付加して欲しい機能等のご
+   要望もお待ちしています。
+ 
+ 
+ << 変更履歴 >>
+ ==============
+ 
+     Release 1  2001/09/09  ...  最初の公式リリース
+     Release 3  2001/09/10  ...
+         -DMAITOU_LOCAL_PATCH で, リストファイル内に複数のプレイリ
+ 	ストを持つことを可能にした。-C (コマンドモード) の際,  押
+ 	すキーにプレイリストを切り替えられる。
+ 	newmp3list.pl という,  mp3 ファイルを置いてあるディレクト
+ 	リを見て, プレイリストファイル内のプレイリスト番号 #0  の
+ 	リストを最新のものに自動更新するツールを添付。
+ 	-e オプションにより, 指定された演奏ファイルが最後に達する
+ 	と, 再び最初の曲から演奏するエンドレスモードを追加した。
+     Release 4  2002/05/10  ...
+ 	越智さんよりご指摘頂き、使用していない（開発時に使用して
+ 	いた）ライブラリをリンクオプションに含めてしまっていたの
+ 	が分かったためこれを除外した。
+ 
+ << 作成者 >>
+ ============
+                           伊藤 正史（まいとう） <maitou@maitou.gr.jp>
+ 
+ 
+ ----------------------------------------------------------------------
+                    (C)1999-2002 Maitou Software <maitou@maitou.gr.jp>
diff -crN mpg123-0.59r/common.c mpg123-0.59r-maitou/common.c
*** mpg123-0.59r/common.c	Wed Jun 16 06:24:19 1999
--- mpg123-0.59r-maitou/common.c	Sat Sep  8 22:54:28 2001
***************
*** 15,20 ****
--- 15,25 ----
  #endif
  #endif
  
+ #ifdef   MAITOU_PATCH
+ #  include <stdio.h>
+ static char strSongStatusSjis[BUFSIZ];  /* 曲ステータスの漢字変換用バッファ */
+ #endif /*MAITOU_PATCH*/
+ 
  #include "mpg123.h"
  #include "genre.h"
  #include "common.h"
***************
*** 467,472 ****
--- 472,480 ----
  
  void print_id3_tag(unsigned char *buf)
  {
+ #ifdef   MAITOU_PATCH
+   char *strSongStatusEuc = (char *)NULL;   /* 漢字変換後のステータス */
+ #endif /*MAITOU_PATCH*/
  	struct id3tag {
  		char tag[3];
  		char title[30];
***************
*** 499,507 ****
--- 507,598 ----
  		strncpy(genre,"Unknown",30);
  	}
  	
+ #ifdef MAITOU_PATCH
+ 
+ 	/* 
+ 	 *  名前付きパイプへの出力
+ 	 */
+ 	if( fifod != -2 ){  /* -2 は FIFO 不要, 絶対作成不可 */
+ 
+ 	  /* -- EUC 出力 -- */
+ 	  if( param.sjisoutput == FALSE ){
+ 	    snprintf( strSongStatusSjis, sizeof strSongStatusSjis,
+ 		      "### new song ###\n"
+ 		      "title=%s\n"
+ 		      "artist=%s\n"
+ 		      "album=%s\n"
+ 		      "year=%s\n"
+ 		      "comment=%s\n"
+ 		      "genre=%s\n",
+ 		      title, artist, album, year, comment, genre );
+ 	    *(strSongStatusSjis + sizeof strSongStatusSjis-1) = '\0';
+ 	    switch( sjis_to_euc( strSongStatusSjis, &strSongStatusEuc ) ){
+ 	    case 0:
+ 	      send_status( strSongStatusEuc );
+ 	      break;
+ 	    case -1:
+ 	      fputs( "strSongStatusEuc can't be allocated memory.\n", stderr );
+ 	      break;
+ 	    case -2:
+ 	      fputs( "strSongStatusEuc is null pointer.\n", stderr );
+ 	      break;
+ 	    default:
+ 	      fputs( "fatal error occured at sjis_to_euc().\n", stderr );
+ 	    }
+ 	    free(strSongStatusEuc);
+ 
+ 	  /* -- SJIS 出力 -- */
+ 	  }else{
+ 	    send_status( "### new song ###\n"
+ 			 "title=%s\n"
+ 			 "artist=%s\n"
+ 			 "album=%s\n"
+ 			 "year=%s\n"
+ 			 "comment=%s\n"
+ 			 "genre=%s\n",
+ 			 title, artist, album, year, comment, genre );
+ 	  }
+ 
+ 	}
+ 
+ 	
+ 	/*
+ 	 *  通常のステータス出力
+ 	 */
+ 	/* -- EUC 出力 -- */
+ 	if( param.sjisoutput == FALSE ){
+ 	  snprintf( strSongStatusSjis, sizeof strSongStatusSjis,
+ 		    "Title  : %-30s  Artist: %s\n"
+ 		    "Album  : %-30s  Year  : %4s\n"
+ 		    "Comment: %-30s  Genre : %s\n",
+ 		    title, artist, album, year, comment, genre );
+ 	  *(strSongStatusSjis + sizeof strSongStatusSjis-1) = '\0';
+ 	  switch( sjis_to_euc( strSongStatusSjis, &strSongStatusEuc ) ){
+ 	  case 0:
+ 	    fputs( strSongStatusEuc, stderr );
+ 	    break;
+ 	  case -1:
+ 	    fputs( "strSongStatusEuc can't be allocated memory.\n", stderr );
+ 	    break;
+ 	  case -2:
+ 	    fputs( "strSongStatusEuc is null pointer.\n", stderr );
+ 	    break;
+ 	  default:
+ 	    fputs( "fatal error occured at sjis_to_euc().\n", stderr );
+ 	  }
+ 	  free(strSongStatusEuc);
+ 
+ 	/* -- SJIS 出力 -- */
+ 	}else{
+ 	  fprintf(stderr,"Title  : %-30s  Artist: %s\n",title,artist);
+ 	  fprintf(stderr,"Album  : %-30s  Year  : %4s\n",album,year);
+ 	  fprintf(stderr,"Comment: %-30s  Genre : %s\n",comment,genre);
+ 	}
+ #else  /*MAITOU_PATCH*/
  	fprintf(stderr,"Title  : %-30s  Artist: %s\n",title,artist);
  	fprintf(stderr,"Album  : %-30s  Year  : %4s\n",album,year);
  	fprintf(stderr,"Comment: %-30s  Genre : %s\n",comment,genre);
+ #endif /*MAITOU_PATCH*/
  }
  
  #if 0
diff -crN mpg123-0.59r/decode_i586.s mpg123-0.59r-maitou/decode_i586.s
*** mpg123-0.59r/decode_i586.s	Sun Aug 24 05:31:18 1997
--- mpg123-0.59r-maitou/decode_i586.s	Sat Sep  8 22:54:28 2001
***************
*** 21,27 ****
  /
  / Stefan Bieschewski <stb@acm.org>
  /
! / $Id: decode_i386.S,v 1.2 1997/07/22 10:12:20 stb Exp $
  /
  .bss
  	.comm	buffs,4352,4
--- 21,27 ----
  /
  / Stefan Bieschewski <stb@acm.org>
  /
! / $Id: decode_i586.s,v 1.1.1.1 2001/09/08 13:54:28 maitou Exp $
  /
  .bss
  	.comm	buffs,4352,4
diff -crN mpg123-0.59r/jukebox/CVS/Entries mpg123-0.59r-maitou/jukebox/CVS/Entries
*** mpg123-0.59r/jukebox/CVS/Entries	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/jukebox/CVS/Entries	Tue May 21 03:48:33 2002
***************
*** 0 ****
--- 1,4 ----
+ /README/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /audio.h/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /controldata.h/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ D
diff -crN mpg123-0.59r/jukebox/CVS/Repository mpg123-0.59r-maitou/jukebox/CVS/Repository
*** mpg123-0.59r/jukebox/CVS/Repository	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/jukebox/CVS/Repository	Tue May 21 03:48:33 2002
***************
*** 0 ****
--- 1 ----
+ mpg123-0.59r-maitou/jukebox
diff -crN mpg123-0.59r/jukebox/CVS/Root mpg123-0.59r-maitou/jukebox/CVS/Root
*** mpg123-0.59r/jukebox/CVS/Root	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/jukebox/CVS/Root	Tue May 21 03:48:33 2002
***************
*** 0 ****
--- 1 ----
+ /project/cvsroot
diff -crN mpg123-0.59r/lyrics.c mpg123-0.59r-maitou/lyrics.c
*** mpg123-0.59r/lyrics.c	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/lyrics.c	Sat Sep  8 22:54:28 2001
***************
*** 0 ****
--- 1,284 ----
+ #ifdef MAITOU_PATCH
+ /*************************************************************
+  Copyright(C) 2001 Masashi ITO (Maitou). All Right Reserved.
+  mpg123 EUC 日本語, Lyrics, FIFO パッチ
+ 
+  Last Modefied:
+   2001.09.01      maitou@maitou.gr.jp (New)
+  ***************************************************************/
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <ctype.h>
+ 
+ #include "mpg123.h"
+ #include "common.h"
+ 
+ struct LYRICS        lyrics[LYRICS_MAX];    /* Lyrics データ */
+ static int           nLyricsLast;           /* Lyrics 最後の行番号 (1-) */
+ static int           nLyricsNext;           /* Lyrics 次の表示行 */
+ static char          strBuf[BUFSIZ];        /* 汎用バッファ */
+ static char          dummychar[] = "\n";    /* 漢字コード変換失敗時のダミー */
+ static unsigned long ulOldFrameNum;         /* 一つ前に処理したフレーム */
+ 
+ static void swapLyrics( struct LYRICS* obj1, struct LYRICS* obj2 );
+ 
+ 
+ /*****************************************************************************
+  Name      : getLyrics
+  Function  : Lyrics ファイルを読み出し, 各行づつ表示タイミングを
+              指定された時刻からフレーム番号に変換,
+ 	     昇順に並び替えて記憶しておく。
+  Paramater : const char *strLyricsPath;   Lyrics ファイル検索パス
+              char *strLyricsFile;         Lyrics ファイル名
+              struct frame *fr;            フレームデータ
+ 	     int kanji;                   TRUE=SJIS のまま, FALSE=EUC にする
+  Return    : ファイル無し  0
+              読出成功      1
+  Last Modified:
+   2001.09.01      maitou@maitou.gr.jp (New)
+  *****************************************************************************/
+ int getLyrics( const char *strLyricsPath, char *strLyricsFile,
+ 	       struct frame *fr, int kanji ){
+   FILE     *fp;
+   int       i,j;
+   char     *s;
+ 
+   double    fps;                /* sec/frame */
+   unsigned long lagf;           /* 処理フレと演奏フレのバッファによるずれ */
+   int       min, sec, msec;
+ 
+ 
+   /* --- 関連値を初期化 --- */
+   nLyricsLast   =  0;                 /* Lyrics の行数 */
+   nLyricsNext   = -1;                 /* 次に表示すべき Lyrics 行番号 */
+   ulOldFrameNum =  0;                 /* 再生時に必要となる値をクリア */
+   lagf          =  AUDIO_FRAME_LAG;   /* 処理フレ・演奏フレのずれ */
+   fps  = (double)1/compute_tpf(fr);   /* 秒当りのフレーム数 (sec/frame) */
+ 
+ 
+   /* --- Lyrics ファイルを ./ and strLyricsPath から探してオープン --- */
+   if( ( fp = fopen( strLyricsFile, "r" ) ) != (FILE *)NULL ) { /* ファイル有 */
+     fprintf( stderr, "Found lyrics file: %s\n", strLyricsFile );
+     send_status( "lyrics_file=%s\n"
+ 		 "### status end ###\n", strLyricsFile );
+   }else if( strLyricsPath == (char *)NULL ){   /* ファイルなく, パスも未設定 */
+     fprintf( stderr, "Lyrics file not found\n" );
+     send_status( "### status end ###\n" );
+     return (0);
+   }else{                                       /* ファイルなく, パスは設定有 */
+     /* -- 指定されたパスにすげ替えて検索 -- */
+     s = (strrchr( strLyricsFile, '/' )==(char *)NULL)?
+       (strLyricsFile):(strrchr( strLyricsFile, '/' )+1);
+     snprintf( strBuf, sizeof strBuf, "%s/%s", strLyricsPath, s );
+     *( strBuf + (sizeof strBuf) -1 ) = '\0';
+ 
+     if( ( fp = fopen( strBuf, "r" ) ) != (FILE *)NULL ) {  /* あった */
+       fprintf( stderr, "Found lyrics file: %s\n", strBuf );
+       send_status( "lyrics_file=%s\n"
+ 		   "### status end ###\n", strBuf );
+     }else{                                           /* 名前変えてもなかった */
+       fprintf( stderr, "Lyrics file not found\n" );
+       send_status( "### status end ###\n" );
+       return (0);
+     }
+   }
+ 
+ 
+   /* --- Lyrics ファイルを読む --- */
+   for( nLyricsLast=0; fgets( strBuf, sizeof strBuf, fp ) != (char *)NULL; ){
+     
+     if( strBuf[0] != '[' )    continue;             /* '[' で始まらない */
+     if( strlen(strBuf) < 11 ) continue;             /* 最低限必要な長さ */
+     if( !isdigit((int)strBuf[1]) || !isdigit((int)strBuf[2]) ||
+ 	!isdigit((int)strBuf[4]) || !isdigit((int)strBuf[5]) ){
+       /* [??:?? ではない */
+       continue;
+     }
+     *( strBuf + sizeof strBuf -1 ) = '\0';             /* -- fale safe -- */
+ 
+     min = ( strBuf[1]-'0' )*10 + ( strBuf[2]-'0' );
+     sec = ( strBuf[4]-'0' )*10 + ( strBuf[5]-'0' );
+ 
+     /* -- [??:??:?? 以外の表記か [??:??] の時 -- */
+     if( strBuf[6] == ']' ||
+ 	( !isdigit((int)strBuf[7])||!isdigit((int)strBuf[8])) ){
+ 
+       lyrics[nLyricsLast].ulFrameNum =
+ 	(unsigned long)((((double)min*60.0)+(double)sec+(double)lagf)*fps);
+ 
+       switch( (kanji==TRUE)?
+ 	      sjis_to_sjis( strBuf+7, &lyrics[nLyricsLast].strLyrics ):
+ 	      sjis_to_euc( strBuf+7, &lyrics[nLyricsLast].strLyrics ) ){
+       case 0:
+ 	break;
+       case -1:
+ 	fprintf( stderr, "lyrics can't be allocated memory.\n");
+ 	free(lyrics[nLyricsLast].strLyrics);
+ 	lyrics[nLyricsLast].strLyrics = dummychar;
+ 	continue;
+ 	break;
+       case -2:
+ 	fprintf( stderr, "lyrics have null pointer.\n");
+ 	free(lyrics[nLyricsLast].strLyrics);
+ 	lyrics[nLyricsLast].strLyrics = dummychar;
+ 	continue;
+ 	break;
+       default:
+ 	free(lyrics[nLyricsLast].strLyrics);
+ 	lyrics[nLyricsLast].strLyrics = dummychar;
+ 	continue;
+       }
+ 
+     }else{
+ 
+       msec = ( strBuf[7]-'0' )*100 + (strBuf[8]-'0')*10;
+       lyrics[nLyricsLast].ulFrameNum =
+ 	(unsigned long)((((double)min*60.0)
+ 			 +(double)sec+(double)lagf
+ 			 +((double)msec*0.006))*fps);
+       
+       switch( (kanji==TRUE)?
+ 	      sjis_to_sjis( strBuf+10, &lyrics[nLyricsLast].strLyrics ):
+ 	      sjis_to_euc( strBuf+10, &lyrics[nLyricsLast].strLyrics ) ){
+       case 0:
+ 	break;
+       case -1:
+ 	fprintf( stderr, "lyrics can't be allocated memory.\n");
+ 	free(lyrics[nLyricsLast].strLyrics);
+ 	lyrics[nLyricsLast].strLyrics = dummychar;
+ 	continue;
+ 	break;
+       case -2:
+ 	fprintf( stderr, "lyrics have null pointer.\n");
+ 	free(lyrics[nLyricsLast].strLyrics);
+ 	lyrics[nLyricsLast].strLyrics = dummychar;
+ 	continue;
+ 	break;
+       default:
+ 	free(lyrics[nLyricsLast].strLyrics);
+ 	lyrics[nLyricsLast].strLyrics = dummychar;
+ 	continue;
+       }
+ 
+     }
+ 
+     if( (s=strchr( lyrics[nLyricsLast].strLyrics, '\r' ))
+ 	!= (char *)NULL ){
+       *s = '\0';
+     }else if( (s=strchr( lyrics[nLyricsLast].strLyrics, '\n' ))
+ 	      != (char *)NULL ){
+       *s = '\0';
+     }
+ 
+     nLyricsLast++;
+   }
+ 
+   fclose(fp);
+ 
+ 
+   /* --- Lyrics データをフレーム順にソート --- */
+   for( i=0; i<=nLyricsLast-2; i++ ){
+     for( j=nLyricsLast-2; j>=i; j-- ){
+       if( lyrics[j].ulFrameNum > lyrics[j+1].ulFrameNum ){
+ 	swapLyrics( &lyrics[j], &lyrics[j+1] );
+       }
+     }
+   }
+ 
+   return (1);
+ }
+ 
+ 
+ 
+ /*****************************************************************************
+  Name      : static void swapLyrics
+  Function  : 歌詞一行分を入れ替える
+  Paramater : struct LYRICS* obj1;  入れ替える行1
+              struct LYRICS* obj2;  入れ替える行2
+  Return    : 
+  Last Modified:
+   2001.09.01      maitou@maitou.gr.jp (New)
+  *****************************************************************************/
+ static void swapLyrics( struct LYRICS* obj1, struct LYRICS* obj2 ){
+   struct LYRICS tmp;
+   tmp.ulFrameNum   = obj1->ulFrameNum;
+   tmp.strLyrics    = obj1->strLyrics;
+   obj1->ulFrameNum = obj2->ulFrameNum;
+   obj1->strLyrics  = obj2->strLyrics;
+   obj2->ulFrameNum = tmp.ulFrameNum;
+   obj2->strLyrics  = tmp.strLyrics;
+   return;
+ }
+ 
+ 
+ 
+ /*****************************************************************************
+  Name      : showLyrics
+  Function  : 歌詞を表示する
+  Paramater : unsigned long ulNowFrameNum;   現在処理中のフレーム番号
+  Return    : なし
+  Last Modified:
+   2001.09.01      maitou@maitou.gr.jp (New)
+  *****************************************************************************/
+ void showLyrics( unsigned long ulNowFrameNum ){
+   int i;
+ 
+   /* -- fale safe -- */
+   if( nLyricsNext >= (int)(sizeof lyrics) ){
+     return;
+   }
+   if( nLyricsNext <= -1 ){
+     fprintf( stderr, "\n" );
+     nLyricsNext = 0;
+     return;
+   }
+ 
+ #if 0
+   fprintf( stderr, "%ld(%ld), ", 
+ 	   lyrics[nLyricsNext].ulFrameNum, ulNowFrameNum );
+ #endif
+ 
+   if( nLyricsNext < nLyricsLast &&
+       lyrics[nLyricsNext].ulFrameNum < ulNowFrameNum ) {
+ 
+     /* -- 歌詞を表示 -- */
+     fprintf( stderr, "%s\n", lyrics[nLyricsNext].strLyrics );
+     send_status( "lyrics=%s\n", lyrics[nLyricsNext].strLyrics );
+     nLyricsNext++;
+ 
+   }else if( ulNowFrameNum != ++ulOldFrameNum ){
+     
+     /* -- フレーム番号の連続性がなくなった時は NEXT 行を作り直す -- */
+     for( i=0; i<nLyricsLast; i++ ){
+       if( lyrics[i].ulFrameNum > ulNowFrameNum ){
+ 	nLyricsNext = i;
+ 	break;
+       }
+     }
+ 
+     /* -- ulOldFrameNum を現在のフレーム番号でリセットする -- */
+     ulOldFrameNum = ulNowFrameNum;
+   
+   }
+ 
+   return;
+ }
+ 
+ 
+ 
+ 
+ /*****************************************************************************
+  Name      : freeLyrics
+  Function  : 歌詞領域を解放する
+  Paramater : なし
+  Return    : なし (void)
+  Last Modified:
+   2001.09.01      maitou@maitou.gr.jp (New)
+  *****************************************************************************/
+ void freeLyrics(){
+   int i;
+   for( i=0; i<nLyricsLast; i++ )
+     free( lyrics[i].strLyrics );
+   nLyricsLast = 0;
+ }
+ #endif /*MAITOU_PATCH*/
diff -crN mpg123-0.59r/mpg123.c mpg123-0.59r-maitou/mpg123.c
*** mpg123-0.59r/mpg123.c	Wed Jun 16 05:21:36 1999
--- mpg123-0.59r-maitou/mpg123.c	Sat Sep  8 22:54:27 2001
***************
*** 14,19 ****
--- 14,29 ----
  #include <sys/resource.h>
  #endif
  
+ #ifdef   MAITOU_PATCH
+ #  include <sys/stat.h>  /* mkfifo */
+ #  include <signal.h>    /* signal */
+ #  ifndef   OLD_OS
+ #    include <stdarg.h>    /* va_list */
+ #  else  /*!OLD_OS*/
+ #    include <varargs.h>   /* va_list */ 
+ #  endif /*!OLD_OS*/
+ #endif /*MAITOU_PATCH*/
+ 
  #include <errno.h>
  #include <string.h>
  #include <fcntl.h>
***************
*** 38,43 ****
--- 48,62 ----
  static void long_usage(char *);
  static void print_title(void);
  
+ #ifdef   MAITOU_PATCH
+ static void staticSjis2Jis( unsigned char *pc1, unsigned char *pc2 );
+ 
+ int          fifod;                   /* -- FIFO ファイルデスクリプタ -- */
+ char        *strFifoPath;             /* -- FIFO ファイル検索パス -- */
+ static char *strLyricsPath;           /* -- Lyrics ファイル検索パス -- */
+ static char  strLyricsFile[BUFSIZ];   /* -- Lyrics ファイル名格納バッファ -- */
+ #endif /*MAITOU_PATCH*/
+ 
  struct parameter param = { 
    FALSE , /* aggressiv */
    FALSE , /* shuffle */
***************
*** 61,66 ****
--- 80,89 ----
    0 ,	  /* force_reopen, always (re)opens audio device for next song */
    FALSE,  /* try to run process in 'realtime mode' */   
    { 0,},  /* wav,cdr,au Filename */
+ #ifdef   MAITOU_PATCH
+   FALSE,  /* normal S-JIS output */
+   FALSE,  /* endless play */
+ #endif /*MAITOU_PATCH*/
  };
  
  char *listname = NULL;
***************
*** 73,81 ****
--- 96,112 ----
  int buffer_fd[2];
  int buffer_pid;
  
+ #ifdef   MAITOU_LOCAL_PATCH
+ int   iCurListNum = 0;                  /* カンレトのプレイリスト番号 */
+ int   iCurFileNum = 0;                  /* カンレトプレイリスト内の演奏番目 */
+ char  **shufflist[PLAYLIST_MAX];        /* 各プレイリスト(実リスト) */
+ int   *shuffleord[PLAYLIST_MAX];        /* 各プレイリスト用の演奏順序リスト */
+ int    shuffle_listsize[PLAYLIST_MAX];  /* 各プレイリストのサイズ */
+ #else  /*MAITOU_LOCAL_PATCH*/
  char **shufflist= NULL;
  int *shuffleord= NULL;
  int shuffle_listsize = 0;
+ #endif /*MAITOU_LOCAL_PATCH*/
  
  static int intflag = FALSE;
  
***************
*** 218,223 ****
--- 249,301 ----
    }
  }
  
+ #ifdef   MAITOU_LOCAL_PATCH
+ 
+ /*****************************************************************************
+  Name      : shuffle_files
+  Function  : 
+  Paramater : int listno;     シャッフルするプレイリスト番号
+              int numfiles;   そのプレイリストの最大曲数
+  Return    : なし
+  Last Modified:
+   2001.09.01      maitou@maitou.gr.jp (New)
+  *****************************************************************************/
+ void shuffle_files( int listno, int numfiles ){
+   int loop, rannum;
+ 
+   srand(time(NULL));
+   if( shuffleord[listno] )
+     free( shuffleord[listno] );
+   shuffleord[listno] = (int *)malloc( (numfiles+1)*sizeof(int) );
+   if( !shuffleord[listno] ){
+     perror("malloc");
+     exit(1);
+   }
+   /* write songs in 'correct' order */
+   for( loop=0; loop<numfiles; loop++ ){
+     shuffleord[listno][loop] = loop;
+   }
+ 
+   /* now shuffle them */
+   if( numfiles >= 2 ){
+     for( loop=0; loop<numfiles; loop++ ){
+       rannum = (rand() % (numfiles * 4 - 4)) / 4;
+       rannum += (rannum >= loop);
+       shuffleord[listno][loop] ^= shuffleord[listno][rannum];
+       shuffleord[listno][rannum] ^= shuffleord[listno][loop];
+       shuffleord[listno][loop] ^= shuffleord[listno][rannum];
+     }
+   }
+ 
+ #if 0
+   /* print them */
+   for (loop = 0; loop < numfiles; loop++) {
+     fprintf(stderr, "%d ", shuffleord[loop]);
+   }
+ #endif
+ 
+ }
+ #else  /*MAITOU_LOCAL_PATCH*/
  void shuffle_files(int numfiles)
  {
      int loop, rannum;
***************
*** 254,260 ****
--- 332,460 ----
  #endif
  
  }
+ #endif /*MAITOU_LOCAL_PATCH*/
+ 
+ #ifdef   MAITOU_LOCAL_PATCH
+ 
+ /*****************************************************************************
+  Name      : find_next_file
+  Function  : コマンド引数やファイルから,
+              順番通りに曲ファイル名を読み出して返す。
+ 	     シャッフルプレイでなければ main() から演奏毎に直接,
+ 	     シャッフルプレイなら init_input() からプレイリスト作成時に呼ばれる
+  Paramater : int argc;     オプション解析が終了後のコマンド引数の数
+              char *argv[]; オプション解析が終了後のコマンド引数リスト
+ 	                   (演奏すべきファイル名だけの羅列が残ってるはず)
+  Return    : なし
+  Last Modified:
+   2001.09.01      maitou@maitou.gr.jp (New)
+  *****************************************************************************/
+ char *find_next_file( int argc, char *argv[], int *listno ){
+   static FILE *fp = (FILE *)NULL;
+   static char line[BUFSIZ];
+   static char linetmp[BUFSIZ];
+   char *slashpos, *s, *path;
+   int i;
+ 
+   /* [ listname -- -@ オプションで指定するリストファイル名 ] */
+ 
+   /* --- 検査 と 初期化 --- */
+   if( listno == (int *)NULL || argv == (char**)NULL )  return (char *)NULL;
+   *listno = 0;  /* 無指定時など, デフォルトのリスト番号は 0 */
+ 
+   /* Get playlist dirname to append it to the files in playlist */
+   if( listname ){        /* --- リストファイル指定時(ディレクトリ名抽出) --- */
+     if( (slashpos=strrchr(listname, '/')) ){
+       listnamedir=strdup (listname);
+       listnamedir[1 + slashpos - listname] = 0;
+     }
+   }
+ 
+   if( listname || fp ){  /* --- リストファイル指定時 or 既に開き済の場合 --- */
+ 
+     if( !fp ){           /* --- まだ開いてない場合 -> 開く --- */
+ 
+       if( !*listname || !strcmp(listname, "-") ){
+ 	/* -- [1] リストファイル名なしの場合 -- */
+ 	fp = stdin;                  /* 標準入力をファイルリスト取得元とする */
+ 	listname = NULL;  /* fp をセット,
+ 			     標準入力からの場合のみリストファイル名を落とす */
+ 
+       }else if( !strncmp(listname, "http://", 7) ){
+ 	/* -- [1] リストファイル名 http:// の場合 -- */
+ 	int fd;
+ 	fd = http_open(listname);
+ 	fp = fdopen(fd,"r");
+ 
+       }else if (!(fp = fopen(listname, "rb"))) {
+ 	/* -- [3] リストファイル名 = 通常のファイル の場合 -- */
+ 	perror (listname);
+ #ifdef TERM_CONTROL
+ 	if(param.term_ctrl)
+ 	  term_restore();
+ #endif
+ 	exit (1);
+       }
+ 
+       if (param.verbose)
+ 	fprintf (stderr, "Using playlist from %s ...\n",
+ 		 listname ? listname : "standard input");
+     }
+ 
+     /* --- リストファイル読み出し先から一曲だけ読み出す -- */
+     do {
+       if( fgets( line, (sizeof line) -1, fp) ){
+ 	line[strcspn(line, "\t\n\r")] = '\0';
+ #if !defined(WIN32)
+ 	/* MS-like directory format */
+ 	for (i=0;line[i]!='\0';i++)
+ 	  if (line [i] == '\\')
+ 	    line [i] = '/';
+ #endif
+ 	if( line[0]=='\0' || line[0]=='#' )
+ 	  continue;
+ 	if( (s=strchr(line,'=')) != (char *)NULL ){      /* リスト番号指定型 */
+ 	  *s = '\0';
+ 	  *listno = atoi(line);  /* リスト番号取得 */
+ 	  path = s+1;
+ 	}else{                                      /* リスト番号無指定型 =0 */
+ 	  path = line;
+ 	}
+ 	if( (listnamedir) && (path[0]!='/') && (path[0]!='\\') ){
+ 	  strncpy( linetmp, listnamedir, (sizeof linetmp)-1 );
+ 	  *( linetmp + (sizeof linetmp) -1 ) = '\0';
+ 	  strncat( linetmp, path, (sizeof linetmp) -strlen(linetmp) -1 );
+ 	  *( linetmp + (sizeof linetmp) -1 ) = '\0';
+ 	  strncpy( path, linetmp, (sizeof path)-1 );
+ 	  *( path + (sizeof path) -1 ) = '\0';
+ 	}
+ 	return (path);
+ 
+       }else{
+ 
+ 	/* -- 最後まで読んでしまって, 標準入力以外の時 -- */	
+ 	if( listname )  fclose(fp);
+ 	listname = NULL;  /* 閉じたら listname = NULL にしておく */
+ 	fp = NULL;        /* fp も NULL (閉じた状態) にしておく */
+       }
+ 
+     }while(fp);  /* fp が閉じられたら終わり */
+ 
+     /* 読み出せないとここに出る */
+ 
+   }else{
+ 
+     /* --- リストファイルからではなく, コマンド引数から一曲分を得る -- */
+     if( loptind < argc )
+       return (argv[loptind++]);
+ 
+     /* 読み出せないとここに来る */
  
+   }
+ 
+   return ((char *)NULL);
+ }
+ #else  /*MAITOU_LOCAL_PATCH*/
  char *find_next_file (int argc, char *argv[])
  {
      static FILE *listfile = NULL;
***************
*** 324,330 ****
--- 524,601 ----
      	return (argv[loptind++]);
      return (NULL);
  }
+ #endif /*MAITOU_LOCAL_PATCH*/
+ 
+ #ifdef   MAITOU_LOCAL_PATCH
+ 
+ /*****************************************************************************
+  Name      : init_input
+  Function  : シャッフルプレイの場合, 最初にプレイリストを作っておく関数。
+              find_next_file() を呼び, 適切な指定先(コマンド引数,リストファイル)
+ 	     から順次曲名を得て, プレイリスト番号ごとに
+ 	     プレイリストリストを作成。
+  Paramater : int argc;     オプション解析が終わった時点でのコマンド引数の数
+              char *argv[]; オプション解析が終わった時点でのコマンド引数リスト
+  Return    : なし
+  Last Modified:
+   2001.09.01      maitou@maitou.gr.jp (New)
+  *****************************************************************************/
+ void init_input (int argc, char *argv[]){
+   int i, listno;
+   int mallocsize[PLAYLIST_MAX];
+   char *tempstr;
+ 
+   /* -- 各プレイリスト, 現在のリスト数, リスト確保サイズの初期化 -- */
+   for( i=0; i<PLAYLIST_MAX; i++ ){
+     shufflist[i] = (char **)NULL;
+     shuffle_listsize[i] = 0;
+     mallocsize[i] = 0;
+   }
+   
+   if (!param.shuffle || param.remote) 
+     return;
+ 
+   /* -- 順に指定された曲名を読み取り, 該当する番号のプレイリストに追加 -- */
+   while( (tempstr = find_next_file(argc, argv, &listno)) ){
+     if( listno > PLAYLIST_MAX )
+       continue;
+ 
+     if( shuffle_listsize[listno] + 2 > mallocsize[listno] ){
+       mallocsize[listno] += 8;
+       shufflist[listno] =
+ 	(char **) realloc( shufflist[listno],
+ 			   mallocsize[listno]*sizeof(char *) );
+       if( !shufflist[listno] ){
+ 	perror("realloc");
+ 	exit(1);
+       }
+     }
+     if(  !( shufflist[listno][shuffle_listsize[listno]] =
+ 	    (char *)malloc( strlen(tempstr)+1 ) )  ){
+       perror("malloc");
+       exit(1);
+     }
+     strcpy(shufflist[listno][shuffle_listsize[listno]], tempstr);
+     shuffle_listsize[listno]++;
+   }
+ 
+   /* -- プレイリストごとにリストの終端を打ち, シャッフルする -- */
+   for( i=0; i<PLAYLIST_MAX; i++ ){
+     if( shuffle_listsize[i] ){
+       if (shuffle_listsize[i] +1 < mallocsize[i] ){
+ 	shufflist[i] =
+ 	  (char **)realloc( shufflist[i],
+ 			    (shuffle_listsize[i]+1) * sizeof(char *) );
+       }
+       shufflist[i][shuffle_listsize[i]] = (char *)NULL;
+     }
+     shuffleord[i] = (int *)NULL;  /* シャッフルリストを初期化 */
+     shuffle_files( i, shuffle_listsize[i] );
+   }
  
+   return;
+ }
+ #else  /*MAITOU_LOCAL_PATCH*/
  void init_input (int argc, char *argv[])
  {
      int mallocsize = 0;
***************
*** 360,365 ****
--- 631,730 ----
      shuffle_files(shuffle_listsize);
  }
  
+ /* 
+  * get_next_file() は，１曲演奏後に次の曲名を知る為, 直接 main() から呼ばれる。
+  * ~~~~~~~~~~~~~~~
+  *
+  * シャッフル指定（ランダム含む）でない場合:
+  *
+  *         find_next_file() から次の曲を得て, この値をそのまま返す。
+  *           ---
+  *           find_next_file() は, mpg123 コマンドの引数でリストファイルを
+  *           指定・直接曲ファイル指定のどちらであっても理解し, 順に次の曲
+  *           名を返す関数である。
+  *           ---
+  *         main()        -> get_next_file()   -> find_next_file()
+  *         次の曲名は？     次の曲名を読んで。   次の曲名を読んで返す。
+  *         
+  * シャッフル指定（ランダム含む）の場合:
+  *
+  *         初期処理 (init_input()) で事前に作られたシャッフル用リストか
+  *         ら, 指定されたシャッフル方法（シャッフル？or ランダム?）に合
+  *         わせた方法で一曲を取り出し, その値を返す。
+  *           ---
+  *           init_input() はコマンド実行の初期で呼ばれ, find_next_file()
+  *           をガンガン呼んで, 全ての演奏すべきファイルを順番に知り, 
+  *           シャッフルリストを作っていく関数である。シャッフルリストは, 
+  *           malloc() で増やされた char *shuffle[] 配列の各要素に，
+  *           ファイル名分の malloc() した領域へのポインタを納め,
+  *           その領域にファイル名を書き込んでいるものである。
+  *           malloc() - char *shuffle[]
+  *                               |
+  *                      char *shuffle[1] = malloc() - "/filename1"
+  *                      char *shuffle[2] = malloc() - "/filename1"
+  *                      char *shuffle[3] = malloc() - "/filename1"
+  *                      char *shuffle[4] = malloc() - "/filename1"
+  *           ---
+  *        [事前] init_input()              -> find_next_file()
+  *               shuffle[] リスト作るから,    次の曲名を読んで返す。
+  *               どんどん順に曲名教えて。
+  *
+  *         main()        -> get_next_file()
+  *         次の曲名は？     事前に作った shuffle[]
+  *                          リストから一曲取り出して返す。
+  */
+ #endif /*MAITOU_LOCAL_PATCH*/
+ 
+ #ifdef   MAITOU_LOCAL_PATCH
+ /*****************************************************************************
+  Name      : get_next_file
+  Function  : main() から呼ばれ, 次に演奏するファイル名を返す。
+              シャッフルプレイではない場合, find_next_file() で
+ 	     指定された順のファイル名を一つ得て, そのまま返す。
+ 	     シャッフルプレイの時は, init_input() で最初に作ってあった
+ 	     シャッフルリストから適切な方法で一曲取り出して返す。
+  Paramater : int argc;     オプション解析が終わった時点でのコマンド引数の数
+              char *argv[]; オプション解析が終わった時点でのコマンド引数リスト
+ 	              (シャッフル時なら何もない, それ以外なら曲名リストがある)
+  Return    : なし
+  Last Modified:
+   2001.09.01      maitou@maitou.gr.jp (New)
+  *****************************************************************************/
+ char *get_next_file( int argc, char **argv ){
+   /* static int curfile; は, 外部で値を変更する為 iCurFileNum; で global 化 */
+   char *s;
+   int   listno;
+   char *newfile;
+ 
+   if( !param.shuffle ){
+     /* -- シャッフルでない場合は, リスト番号が 0 のものを演奏する --- */
+     for(  ; (s=find_next_file(argc, argv, &listno)) != (char *)NULL;  ){
+       if( listno == 0 )  return s;
+     }
+     return (char *)NULL;
+   }
+   if( !shufflist[iCurListNum] || !shufflist[iCurListNum][iCurFileNum] ){
+     /* -- シャッフルなのにシャッフルリストが作られてない, 次の曲がない時 -- */
+     if( param.endless == TRUE )
+       iCurFileNum = 0;      /* また演奏曲番号を 0 に戻す */
+     else
+       return (char *)NULL;  /* 多数のプレイリスト番号がある場合, 
+ 			       演奏中プレイリストで終了になると終わっちゃう */
+   }
+   if( param.shuffle == 1 ){  /* 通常のシャッフルプレイ */
+     if( shuffleord ){
+       newfile = shufflist[iCurListNum][shuffleord[iCurListNum][iCurFileNum]];
+     }else{
+       newfile = shufflist[iCurListNum][iCurFileNum];
+     }
+     iCurFileNum++;
+   }else{                     /* ランダムプレイ */
+     newfile = shufflist[iCurListNum][ rand() % shuffle_listsize[iCurListNum] ];
+   }
+ 
+   return newfile;
+ }
+ #else  /*MAITOU_LOCAL_PATCH*/
  char *get_next_file(int argc, char **argv)
  {
      static int curfile = 0;
***************
*** 385,390 ****
--- 750,756 ----
  
      return newfile;
  }
+ #endif /*MAITOU_LOCAL_PATCH*/
  
  static void set_output_h(char *a)
  {
***************
*** 527,532 ****
--- 893,906 ----
      {0, "au",         GLO_ARG | GLO_CHAR, set_au, 0 , 0 },
      {'?', "help",       0,              usage, 0,           0 },
      {0 , "longhelp" ,    0,        long_usage, 0,           0 },
+ 
+ #ifdef   MAITOU_PATCH
+     {'l', "lyricspatch", GLO_ARG | GLO_CHAR, 0, &strLyricsPath, 0 },
+     {'j', "sjisoutput",	 0,		     0, &param.sjisoutput, TRUE },
+     {'F', "fifopath", GLO_ARG | GLO_CHAR, 0, &strFifoPath, 0 },
+     {'e', "endless",	 0,		     0, &param.endless, TRUE },
+ #endif /*MAITOU_PATCH*/
+ 
      {0, 0, 0, 0, 0, 0}
  };
  
***************
*** 776,781 ****
--- 1150,1159 ----
  #endif	
  	int init;
  
+ #ifdef   MAITOU_PATCH
+ 	char *s;
+ #endif /*MAITOU_PATCH*/
+ 
  #ifdef OS2
          _wildcard(&argc,&argv);
  #endif
***************
*** 815,820 ****
--- 1193,1203 ----
  	if (loptind >= argc && !listname && !frontend_type)
  		usage(NULL);
  
+ #ifdef   MAITOU_PATCH
+ 	signal( SIGPIPE, SIG_IGN );  /* --- パイプ破壊を無視 --- */
+ 	make_open_fifo();            /* --- FIFO 作成 (オプション解析後) */
+ #endif /*MAITOU_PATCH*/
+ 
  #if !defined(WIN32) && !defined(GENERIC)
  	if (param.remote) {
  		param.verbose = 0;        
***************
*** 903,908 ****
--- 1286,1295 ----
  	while ((fname = get_next_file(argc, argv))) {
  		char *dirname, *filename;
  		long leftFrames,newFrame;
+ #ifdef   MAITOU_PATCH
+ 		int   isLyrics = 0;  /* -- Lyrics ファイルの有無 0,1 -- */
+ #endif /*MAITOU_PATCH*/
+ 
  
  		if(!*fname || !strcmp(fname, "-"))
  			fname = NULL;
***************
*** 946,951 ****
--- 1333,1361 ----
  #ifdef TERM_CONTROL			
  tc_hack:
  #endif
+ 
+ #ifdef   MAITOU_PATCH
+ 		  /* --- 0 フレームを読んだ時だけ, Lyrics ファイルを読む --- */
+ 		  if( frameNum == 0 ){
+ 		    strncpy( strLyricsFile, fname, sizeof strLyricsFile );
+ 		    if( ( s=strrchr( strLyricsFile, '.' ) ) != (char *)NULL ){
+ 		      if( (strLyricsFile+(sizeof strLyricsFile)-1-s) >= 3){
+ 			strcpy( s+1, "txt" );
+ 		      }else{
+ 			strncpy( strLyricsFile, "NULL", sizeof strLyricsFile );
+ 		      }
+ 		    }else{
+ 		      if( (sizeof strLyricsFile)-1-strlen(strLyricsFile) >= 4){
+ 			strcat( strLyricsFile, ".txt" );
+ 		      }else{
+ 			strncpy( strLyricsFile, "NULL", sizeof strLyricsFile );
+ 		      }
+ 		    }
+ 		    isLyrics = getLyrics( strLyricsPath, strLyricsFile,
+ 					  &fr, param.sjisoutput );
+ 		  }
+ #endif /*MAITOU_PATCH*/
+ 
  			if(frameNum < startFrame || (param.doublespeed && (frameNum % param.doublespeed))) {
  				if(fr.lay == 3)
  					set_pointer(512);
***************
*** 981,989 ****
  				}
  			}
  #endif
! 
        }
  
  #ifndef NOXFERMEM
  	if(param.usebuffer) {
  		int s;
--- 1391,1407 ----
  				}
  			}
  #endif
! #ifdef   MAITOU_PATCH
! 			if( isLyrics ){           /*  歌詞表示 */
! 			  showLyrics( frameNum );
! 			}
! #endif /*MAITOU_PATCH*/
        }
  
+ #ifdef MAITOU_PATCH
+ 		freeLyrics(); /* 歌詞データ領域の解放 */
+ #endif
+ 
  #ifndef NOXFERMEM
  	if(param.usebuffer) {
  		int s;
***************
*** 1137,1142 ****
--- 1555,1565 ----
     fprintf(stderr,"   -z    shuffle play (with wildcards)  -Z    random play\n");
     fprintf(stderr,"   -u a  HTTP authentication string     -E f  Equalizer, data from file\n");
     fprintf(stderr,"   -C    enable control keys\n");
+ #ifdef   MAITOU_PATCH
+    fprintf(stderr,"   -l    lyrics file search path [.]    -j    status kanji-code is s-jis [euc]\n");
+    fprintf(stderr,"   -F    make FIFO file and output status [no]\n");
+    fprintf(stderr,"   -e    endless play (loop)            \n");
+ #endif /*MAITOU_PATCH*/
     fprintf(stderr,"See the manpage %s(1) or call %s with --longhelp for more information.\n", prgName,prgName);
     exit(1);
  }
***************
*** 1194,1202 ****
--- 1617,1874 ----
    fprintf(o," -w <f> --wav <f>          Writes samples as WAV file in <f> (- is stdout)\n");
    fprintf(o,"        --au <f>           Writes samples as Sun AU file in <f> (- is stdout)\n");
    fprintf(o,"        --cdr <f>          Writes samples as CDR file in <f> (- is stdout)\n");
+ #ifdef   MAITOU_PATCH
+   fprintf(o," -l     --lyricspath <f>   lyrics file search path <f>\n");
+   fprintf(o," -F     --fifopath <f>     make FIFO file <f> and output status.\n");
+   fprintf(o," -j     --sjisoutput       status kanji-code is s-jis\n");
+   fprintf(o," -e     --endless          endless play (loop)\n");
+ #endif /*MAITOU_PATCH*/
  
    fprintf(o,"\nSee the manpage %s(1) for more information.\n", prgName);
    exit(0);
  }
  
  
+ 
+ #ifdef MAITOU_PATCH
+ /*****************************************************************************
+  Name      : make_open_fifo
+  Function  : FIFO を開く。ない場合は作成する。
+              開けない場合 (=読み手無し) は, fifod = -1 とし, 次に備える。
+ 	     次回に備えられないエラー時は fifod = -2 としておく。
+  Paramater : なし
+  Return    : fifod の値
+  Last Modified:
+   2001.09.01      maitou@maitou.gr.jp (New)
+  *****************************************************************************/
+ int make_open_fifo(){
+   int fifo_open_errno;  /* errno を長く利用するためのコピー場所 */
+   int mkfifo_errno;     /* errno を長く利用するためのコピー場所 */
+ 
+   
+   /* -- fale safe (FIFO 作成パスが指定されていない場合は作成しない) -- */
+   if( strFifoPath == (char *)NULL ){
+     fifod = -2;
+     return (-2);
+   }
+   
+ #if 0
+   fprintf( stderr, "open FIFO file \"%s\".\n", strFifoPath );
+ #endif
+   if( ( fifod = open( strFifoPath, O_NONBLOCK|O_WRONLY ) ) < 0 ){
+     fifo_open_errno = errno;
+ 
+     /* ------------------------ FIFO がなかった場合の処理 ------------ */
+     if( fifo_open_errno == ENOENT ){
+       fprintf( stderr, "FIFO file not exist, make a FIFO file.\n" );
+       
+       if( mkfifo( strFifoPath, S_IRUSR|S_IWUSR | S_IRGRP | S_IROTH ) < 0 ){
+ 	mkfifo_errno = errno;
+ 
+ 	/* ------- FIFO 作成失敗時の処理 ----------------------------- */
+ 	if( mkfifo_errno == EEXIST ){        /* -- なぜか存在した時 -- */
+ 	  fprintf(stderr, "why? already FIFO file exist.\n" );
+ 	  if( ( fifod = open( strFifoPath, O_NONBLOCK|O_WRONLY ) ) < -1 ){ 
+ 	    fifo_open_errno = errno;         /* -- 開いてみる -- */
+ 	    if( fifo_open_errno == ENXIO ){    /* 読手なし -> 必要時 - */
+ 	      fifod = -1;
+ 	    }else{                             /* - その他   -> 諦め - */
+ 	      fprintf( stderr, "can't open a FIFO file.\n" );
+ 	      fifod = -2;
+ 	    }
+ 	  }
+ 	}else{                   /* -- 普通に FIFO 作成失敗 -> 諦め -- */
+ 	  fprintf(stderr, "can't make FIFO file.\n" );
+ 	  fifod = -2;
+ 	}
+ 	/* ----------------------------------------------------------- */
+ 	      
+       }else{  /* -- FIFO 作成 成功時 -- */
+ 	fprintf(stderr, "making FIFO file is done.\n" );
+ 	if( ( fifod = open( strFifoPath, O_NONBLOCK|O_WRONLY ) ) < -1 ){ 
+ 	  fifo_open_errno = errno;
+ 	  if( fifo_open_errno == ENXIO ){  /* - 読手なし -> 必要時 - */
+ 	    fifod = -1;
+ 	  }else{                       /* - その他   -> 諦め - */
+ 	    fprintf( stderr, "can't open a FIFO file.\n" );
+ 	    fifod = -2;
+ 	  }
+ 	}
+       }
+       /* ------------------------------------------------------------- */
+ 
+     }else if( fifo_open_errno == ENXIO ){ /* - 読手なし -> 必要時再度  */
+       fifod = -1;
+     }else{                       /* -- その他のエラー --> 諦め -- */
+       fprintf( stderr, "can't open a FIFO file.\n" );
+       fifod = -2;
+     }
+   }
+ 
+ #if 0
+   fprintf( stderr, "FIFO descripter is %d.\n", fifod );
+ #endif
+   return fifod;
+ }
+ 
+ 
+ 
+ /*****************************************************************************
+  Name      : send_status
+  Function  : FIFO にステータスメッセージを出力する
+  Paramater : const char *format;  フォーマットデータ (printf と同様)
+              ...
+  Return    : printf と同様
+  Last Modified:
+   2001.09.01      maitou@maitou.gr.jp (New)
+  *****************************************************************************/
+ void send_status( const char *format, ... ){
+   va_list args;
+   FILE *fp;
+   
+   /* -- FIFO が開けていない時は開く -- */
+   if( fifod == -1 ){
+     make_open_fifo();
+   }
+   /* -- FIFO が開かれている時 -- */
+   if( fifod > 0 ){
+     if( ( fp = fdopen( fifod, "w" ) ) != (FILE *)NULL ){
+       va_start( args, format );
+       vfprintf( fp, format, args );
+       va_end(args);
+       fflush(fp);
+     }else{  /* -- 失敗した時は FIFO を次回 open し直させる -- */
+       close(fifod);
+       fifod = -1;
+     }
+   }
+   return;
+ }
+ 
+ 
+ 
+ /********************************************************************
+  Name      : static void staticSjis2Jis
+  Function  : SJIS コードの 2 文字を
+              エスケープシーケンス無しの JIS コードに変換
+  Paramater : unsigned char *p1  文字 1
+              unsigned char *p2  文字 2
+  Return    : なし
+ ********************************************************************/
+ static void staticSjis2Jis( unsigned char *pc1, unsigned char *pc2 ){
+   
+   unsigned char c1 = (unsigned char)*pc1;
+   unsigned char c2 = (unsigned char)*pc2;
+   
+   int  iAdjust     = c2<159;
+   int  iRowOffset  = c1 < 160 ? 112 : 176 ;
+   int  iCellOffset = iAdjust ? ( c2 > 127 ? 32 : 31 ) : 126 ;
+   
+   *pc1  = (unsigned char)( ( ( c1 - iRowOffset ) << 1 ) - iAdjust );
+   *pc2 -= (unsigned char)( iCellOffset );
+   
+   return;
+ }
+ 
+ 
+ 
+ /*****************************************************************************
+  Name      : sjis_to_euc
+  Function  : SJIS を EUC にする。半角ニバイト文字対応。
+              補助漢字は SJIS にはない。
+  Paramater : char *sjis;   元となる SJIS 文字列
+              char **euc;   EUC に変更した格納先アドレスの格納先
+  Return    : 正常終了    0
+              メモリ不足 -1
+              引数異常   -2
+  Last Modified:
+   2001.09.01      maitou@maitou.gr.jp (New)
+  *****************************************************************************/
+ int sjis_to_euc( char *sjis, char **euc ){
+   
+   int size = 0;
+   unsigned char *pcInputIndex;
+   unsigned char cBuf2[3];                          /* 現在の対象文字の変換値 */
+   
+   /* -- 検査 -- */
+   if( !sjis || !euc )
+     return -2;
+   
+   /* -- 準備 -- */
+   if( ( size = strlen(sjis)*2 ) <= 0 )
+     return -1;
+   if( ( *euc = (char *)malloc( size+2 ) ) == (char *)NULL )
+     return -1;
+   *euc[0] = '\0';
+   
+   /* [本体] */  
+   for( pcInputIndex = (unsigned char *)sjis; *pcInputIndex; ){
+     
+     /* [ ASCII 圏内の時 ] */
+     if( *pcInputIndex <= (unsigned char)0x7f ){
+       
+       cBuf2[0] = *pcInputIndex++;
+       cBuf2[1] = '\0';                                /* EUC, SJIS = 1バイト */
+       size--;
+       
+     /* [ 半角カナ 圏内の時 ] */
+     }else if( ( *pcInputIndex >= (unsigned char)0xa1 )&&
+ 	      ( *pcInputIndex <= (unsigned char)0xdf ) ){
+       
+       cBuf2[0] = (unsigned char)0x8e;                  /* EUC 半角 8e を付加 */
+       cBuf2[1] = *pcInputIndex++;
+       cBuf2[2] = '\0';
+       size-=2;
+ 
+     /* [ 通常の 2 バイト文字 圏内の時 ] */      
+     }else{
+       
+       cBuf2[0] = (unsigned char)*pcInputIndex++;
+       cBuf2[1] = (unsigned char)*pcInputIndex++;
+       
+       staticSjis2Jis( &cBuf2[0], &cBuf2[1] );             /* 一旦 JIS にする */
+       cBuf2[0] += (unsigned char)0x80;                    /* MSB を立たせる  */
+       cBuf2[1] += (unsigned char)0x80;                    /* (ES無 JIS->EUC) */
+       cBuf2[2] = '\0';
+       size-=2;
+       
+     }
+ 
+     if( size >= 0 ){
+       strncat( (char *)*euc, (char *)cBuf2, 3 );
+     }else{
+       break;
+     }
+     
+   }
+   
+   return 0;
+ }
+ 
+ 
+ 
+ /*****************************************************************************
+  Name      : sjis_to_sjis
+  Function  : SJIS を SJIS でコピーする。
+              sjis_to_euc に対するダミー。
+  Paramater : char *sjis1;    元となる SJIS 文字列
+              char **sjis2;   コピーの格納先アドレスの格納先
+  Return    : 正常終了    0
+              メモリ不足 -1
+              引数異常   -2
+  Last Modified:
+   2001.09.01      maitou@maitou.gr.jp (New)
+  *****************************************************************************/
+ int sjis_to_sjis( char *sjis1, char **sjis2 ){
+ 
+   /* -- 検査 -- */
+   if( !sjis1 || !sjis2 )
+     return -2;
+   
+   /* -- 準備 -- */
+   if( ( *sjis2 = strdup(sjis1) ) == (char *)NULL )
+     return -1;
+   
+   return 0;
+ }
+ #endif /*MAITOU_PATCH*/
diff -crN mpg123-0.59r/mpg123.h mpg123-0.59r-maitou/mpg123.h
*** mpg123-0.59r/mpg123.h	Fri May 28 23:51:58 1999
--- mpg123-0.59r-maitou/mpg123.h	Tue May 21 03:48:15 2002
***************
*** 147,152 ****
--- 147,156 ----
    int force_reopen;
    long realtime;
    char filename[256];
+ #ifdef MAITOU_PATCH
+   int sjisoutput; /* status code is sjis */
+   int endless;    /* endless play */
+ #endif /*MAITOU_PATCH*/
  };
  
  struct reader {
***************
*** 356,359 ****
--- 360,394 ----
  extern int synth_1to1_486(real *bandPtr,int channel,unsigned char *out,int nb_blocks);
  
  
+ #ifdef  MAITOU_PATCH
  
+ #  define PLAYLIST_MAX        (31)     /* プレイリストの種類 (1-の数)
+ 					  (term.c 内のボタン数より多いこと) */
+ #  define LYRICS_MAX       (BUFSIZ)    /* Lyrics ** 有効歌詞 ** の最大行数 */
+ #  define AUDIO_FRAME_LAG  (1)         /* 処理フレームと演奏フレームのずれ */
+ 
+ struct LYRICS {
+   unsigned long  ulFrameNum;
+   char          *strLyrics;
+ };
+ 
+ int make_open_fifo();                           /* FIFO の作成とオープン */
+ void send_status( const char *format, ... );    /* FIFO への出力 */
+ int sjis_to_euc( char *sjis, char **euc );      /* SJIS->EUC */
+ int sjis_to_sjis( char *sjis1, char **sjis2 );  /* SJIS->SJIS (dummy) */
+ int getLyrics( const char *strLyricsPath, char *strLyricsFile,
+ 	       struct frame *fr, int kanji );   /* lyrics データを得る */
+ void freeLyrics();                              /* lyrics データを解放 */
+ void showLyrics( unsigned long ulNowFrameNum ); /* lyrics を表示 */
+ 
+ extern int   fifod;
+ extern int   iCurListNum;
+ extern int   iCurFileNum;
+ 
+ #ifdef MAITOU_LOCAL_PATCH
+ extern int   shuffle_listsize[];
+ #else
+ extern int   shuffle_listsize;
+ #endif
+ 
+ #endif /*MAITOU_PATCH*/
diff -crN mpg123-0.59r/mpglib/CVS/Entries mpg123-0.59r-maitou/mpglib/CVS/Entries
*** mpg123-0.59r/mpglib/CVS/Entries	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/mpglib/CVS/Entries	Tue May 21 03:48:33 2002
***************
*** 0 ****
--- 1,14 ----
+ /Makefile/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /README/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /TODO/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /common.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /dct64_i386.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /decode_i386.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /huffman.h/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /interface.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /layer3.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /main.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /mpg123.h/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /mpglib.h/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /tabinit.c/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ D
diff -crN mpg123-0.59r/mpglib/CVS/Repository mpg123-0.59r-maitou/mpglib/CVS/Repository
*** mpg123-0.59r/mpglib/CVS/Repository	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/mpglib/CVS/Repository	Tue May 21 03:48:33 2002
***************
*** 0 ****
--- 1 ----
+ mpg123-0.59r-maitou/mpglib
diff -crN mpg123-0.59r/mpglib/CVS/Root mpg123-0.59r-maitou/mpglib/CVS/Root
*** mpg123-0.59r/mpglib/CVS/Root	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/mpglib/CVS/Root	Tue May 21 03:48:33 2002
***************
*** 0 ****
--- 1 ----
+ /project/cvsroot
diff -crN mpg123-0.59r/newmp3list.pl mpg123-0.59r-maitou/newmp3list.pl
*** mpg123-0.59r/newmp3list.pl	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/newmp3list.pl	Thu Apr 18 01:34:53 2002
***************
*** 0 ****
--- 1,45 ----
+ #!/usr/local/bin/perl
+ #######################################
+ # プレイリストファイルを自動更新する  #
+ #                                     #
+ # % ./newmp3list.pl [return]          #
+ #######################################
+ $file   = "/export/home/ftp/pub/data/mp3/mp3.list";
+ $mp3dir = "/export/home/ftp/pub/data/mp3/";
+ $find   = "/usr/bin/find";
+ 
+ # 手で指定された現在のリストファイルデータを取得 (残すため)
+ print STDERR "$0: get 'mp? files list' but 'playlist #0' from $file ...\n";
+ @list   = '';
+ #push( @list, "#### your input mp3 files. (playlist #1-) #### \n" );
+ open(OLD,$file);
+ while(<OLD>){
+     if( /^\d/ || /^#/ ){   # プレイリスト番号指定のある曲名, コメントは残す
+ 	push( @list, $_ );
+     }              # そうでないものは消す
+ }
+ close(OLD);
+ 
+ 
+ # mp3 ファイル置き場の現在のファイル一覧を得る
+ print STDERR "$0: get 'all mp? files list' from $mp3dir ...\n";
+ #push( @list, "#### all files at the mp3 directory. (playlist #0) #### \n" );
+ open(NOW,$find." ".$mp3dir.' -name \*.mp\? |');
+ while(<NOW>){
+     push( @list, $_ );
+ }
+ close(NOW);
+ 
+ 
+ # 新しいリストファイルデータを書き込み
+ print STDERR "$0: output a new list to $file ...\n";
+ open(OUT,">".$file);
+   foreach(@list){
+       print OUT $_;
+   }
+ close(OUT);
+ 
+ # 終了
+ print STDERR "$0: done.\n";
+ exit(0);
+ 
diff -crN mpg123-0.59r/precompiled/CVS/Entries mpg123-0.59r-maitou/precompiled/CVS/Entries
*** mpg123-0.59r/precompiled/CVS/Entries	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/precompiled/CVS/Entries	Tue May 21 03:48:33 2002
***************
*** 0 ****
--- 1 ----
+ D/linux-i386////
diff -crN mpg123-0.59r/precompiled/CVS/Repository mpg123-0.59r-maitou/precompiled/CVS/Repository
*** mpg123-0.59r/precompiled/CVS/Repository	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/precompiled/CVS/Repository	Tue May 21 03:48:33 2002
***************
*** 0 ****
--- 1 ----
+ mpg123-0.59r-maitou/precompiled
diff -crN mpg123-0.59r/precompiled/CVS/Root mpg123-0.59r-maitou/precompiled/CVS/Root
*** mpg123-0.59r/precompiled/CVS/Root	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/precompiled/CVS/Root	Tue May 21 03:48:33 2002
***************
*** 0 ****
--- 1 ----
+ /project/cvsroot
diff -crN mpg123-0.59r/precompiled/linux-i386/CVS/Entries mpg123-0.59r-maitou/precompiled/linux-i386/CVS/Entries
*** mpg123-0.59r/precompiled/linux-i386/CVS/Entries	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/precompiled/linux-i386/CVS/Entries	Tue May 21 03:48:33 2002
***************
*** 0 ****
--- 1 ----
+ D
diff -crN mpg123-0.59r/precompiled/linux-i386/CVS/Repository mpg123-0.59r-maitou/precompiled/linux-i386/CVS/Repository
*** mpg123-0.59r/precompiled/linux-i386/CVS/Repository	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/precompiled/linux-i386/CVS/Repository	Tue May 21 03:48:33 2002
***************
*** 0 ****
--- 1 ----
+ mpg123-0.59r-maitou/precompiled/linux-i386
diff -crN mpg123-0.59r/precompiled/linux-i386/CVS/Root mpg123-0.59r-maitou/precompiled/linux-i386/CVS/Root
*** mpg123-0.59r/precompiled/linux-i386/CVS/Root	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/precompiled/linux-i386/CVS/Root	Tue May 21 03:48:33 2002
***************
*** 0 ****
--- 1 ----
+ /project/cvsroot
Binary files mpg123-0.59r/precompiled/linux-i386/dct64_3dnow.o and mpg123-0.59r-maitou/precompiled/linux-i386/dct64_3dnow.o differ
Binary files mpg123-0.59r/precompiled/linux-i386/decode_3dnow.o and mpg123-0.59r-maitou/precompiled/linux-i386/decode_3dnow.o differ
diff -crN mpg123-0.59r/term.c mpg123-0.59r-maitou/term.c
*** mpg123-0.59r/term.c	Thu Feb 11 06:15:49 1999
--- mpg123-0.59r-maitou/term.c	Tue Sep 11 01:11:43 2001
***************
*** 87,92 ****
--- 87,108 ----
    long offset = 0;
    extern struct audio_info_struct ai;
    
+ #ifdef  MAITOU_LOCAL_PATCH
+   /* -- ディレクトリの場合, 最初はストップして開始させる為 -- */
+   static int first_stop_mode = STOP_KEY;
+   if( first_stop_mode == STOP_KEY ){
+     first_stop_mode = CLEAR_KEY;     /* 起動して最初の一回だけ */
+     stopped=1-stopped;
+     if(paused) {
+       paused=0;
+       offset -= pause_cycle;
+     }
+     if(param.usebuffer) 
+       (stopped) ? buffer_stop() : buffer_start();
+     fprintf(stderr, "%s", (stopped) ? STOPPED_STRING : EMPTY_STRING);
+   }
+ #endif /*MAITOU_LOCAL_PATCH*/
+ 
    while(n > 0) {
      fd_set r;
      struct timeval t;
***************
*** 102,108 ****
--- 118,128 ----
        if(read(0,&val,1) <= 0)
          break;
  
+ #ifdef MAITOU_LOCAL_PATCH
+       switch(val) {
+ #else
        switch(tolower(val)) {
+ #endif
  	case BACK_KEY:
          audio_queueflush(&ai);
  
***************
*** 172,177 ****
--- 192,355 ----
  	case FAST_FORWARD_KEY:
  	  offset+=50;
  	  break;
+ #ifdef MAITOU_LOCAL_PATCH
+       case BACK_BACK_KEY:    /* 前の曲に戻る (-z の時だけ有効 -Z はダメ)  */
+ 	if( iCurFileNum <= 1 ){
+ 	  iCurFileNum = shuffle_listsize[iCurListNum]-1;
+ 	}else{
+ 	  iCurFileNum -= 2;
+ 	}
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON11:
+ 	iCurListNum = 1;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON12:
+ 	iCurListNum = 2;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON13:
+ 	iCurListNum = 3;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON14:
+ 	iCurListNum = 4;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON15:
+ 	iCurListNum = 5;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON16:
+ 	iCurListNum = 6;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON17:
+ 	iCurListNum = 7;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON18:
+ 	iCurListNum = 8;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+ 
+       case MAITOU_BUTTON21:
+ 	iCurListNum = 11;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON22:
+ 	iCurListNum = 12;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON23:
+ 	iCurListNum = 13;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON24:
+ 	iCurListNum = 14;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON25:
+ 	iCurListNum = 15;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON26:
+ 	iCurListNum = 16;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON27:
+ 	iCurListNum = 17;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON28:
+ 	iCurListNum = 18;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+ 
+       case MAITOU_BUTTON31:
+ 	iCurListNum = 21;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON32:
+ 	iCurListNum = 22;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON33:
+ 	iCurListNum = 23;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON34:
+ 	iCurListNum = 24;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON35:
+ 	iCurListNum = 25;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON36:
+ 	iCurListNum = 26;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON37:
+ 	iCurListNum = 27;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+       case MAITOU_BUTTON38:
+ 	iCurListNum = 28;
+ 	iCurFileNum = 0;
+ 	audio_queueflush(&ai);
+ 	kill(0,SIGINT);
+ 	break;
+ 
+ #endif
  	default:
  	  ;
        }
diff -crN mpg123-0.59r/term.h mpg123-0.59r-maitou/term.h
*** mpg123-0.59r/term.h	Tue Feb  9 19:42:14 1999
--- mpg123-0.59r-maitou/term.h	Fri Oct  5 02:49:08 2001
***************
*** 7,24 ****
   * own preferences.
   */
  
! #define BACK_KEY	'b'
! #define NEXT_KEY	'f'
! #define PAUSE_KEY	'p'
! #define QUIT_KEY	'q'
! #define STOP_KEY	's'
! #define REWIND_KEY	','
! #define FORWARD_KEY	'.'
  /* This is convenient on QWERTZ-keyboards. */
! #define FAST_REWIND_KEY ';'
! #define FAST_FORWARD_KEY ':'
! #define FINE_REWIND_KEY '<'
! #define FINE_FORWARD_KEY '>'
  /* You probably want to use the following bindings instead
   * on a standard QWERTY-keyboard:
   */
--- 7,113 ----
   * own preferences.
   */
  
! #ifdef  MAITOU_PATCH
! 
! #  define CLEAR_KEY		(0x00)      /* 何もないコードとして扱う */
! #  define PAUSED_STRING		"Paused. \b\b\b\b\b\b\b\b"
! #  define STOPPED_STRING	"Stopped.\b\b\b\b\b\b\b\b"
! #  define EMPTY_STRING		"        \b\b\b\b\b\b\b\b"
! 
! #  ifdef MAITOU_LOCAL_PATCH
! 
! /****************************************************************************
!   自宅のネットインカム ボタン別 発生 ASCII コード一覧 (keyコードとは異なる)
!   
! [108]   [ 91][ 56][ 42][ 92][ 93]     [ 09][114][121][119][113][116][117][101]
!  'l'     '['  '8'  '*'  '\'  ']'       HT   'r'  'y'  'w'  'q'  't'  'u'  'e'
! [---]   [   ][   ][ 50][ 32][ 47][ 51][ 43][ 48][   ][   ]     [045]     [055]
! SHIFT              <2>  ' '  '/'  <3>  '+'  <0>                 <->       <7>
!         [ 97][103][106][100][115][107][104][102][   ][   ]     [   ][   ][ 13]
!          'a'  'g'  'j'  'd'  's'  'k'  'h'  'f'                            CR
!         [ 97][103][106][100][115][107][104][102][   ][   ]
!          '8'  '''  'i'  '0'  '9'  'o'   BS  '-'
!         [ 59][ 52][ 54][ 50][ 49][ 55][ 53][ 51][   ][   ]
!          ';'  '4'  '6'  '2'  '1'  '7'  '5'  '3'
!         [122][ 98][109][ 99][120][ 44][110][118][   ][   ]
!          'z'  'b'  'm'  'c'  'x'  ','  'n'  'v'
! 
!  ASCII 文字が ' ' で囲まれたボタンは, その文字を出す唯一のボタン
!               < > で囲まれたボタンは, 同じ文字を出す別のボタンがある
! 
! *****************************************************************************/
! 
! #    define BACK_KEY		'c'   /* 122 */
! #    define NEXT_KEY		'v'   /* 118 */
! #    define PAUSE_KEY		'\x01'            /* - 暫定 SOH - */
! #    define QUIT_KEY		'x'   /* 120 */
! #    define STOP_KEY		','   /*  44 */
! #    define REWIND_KEY		'\x02'            /* - 暫定 STX - */
! #    define FORWARD_KEY		'\x03'            /* - 暫定 ETX - */
! #    define FAST_REWIND_KEY	'b'   /*  98 */
! #    define FAST_FORWARD_KEY	'n'   /* 110 */
! #    define FINE_REWIND_KEY	'm'   /* 109 */
! #    define FINE_FORWARD_KEY	'\x04'            /* - 暫定 EOT - */
! 
! /* --------- 追加コード ----------- */
! #    define BACK_BACK_KEY    'z'     /*  99 */
! #    define MAITOU_BUTTON11  'a'     /*  97 */
! #    define MAITOU_BUTTON12  'g'     /* 103 */
! #    define MAITOU_BUTTON13  'j'     /* 106 */
! #    define MAITOU_BUTTON14  'd'     /* 100 */
! #    define MAITOU_BUTTON15  's'     /* 115 */
! #    define MAITOU_BUTTON16  'k'     /* 107 */
! #    define MAITOU_BUTTON17  'h'     /* 104 */
! #    define MAITOU_BUTTON18  'f'     /* 102 */
! 
! #    define MAITOU_BUTTON21  '8'     /*  56 */
! #    define MAITOU_BUTTON22  '\''    /*  39 */
! #    define MAITOU_BUTTON23  'i'     /* 105 */
! #    define MAITOU_BUTTON24  '0'     /*  48 */
! #    define MAITOU_BUTTON25  '9'     /*  57 */
! #    define MAITOU_BUTTON26  'o'     /* 111 */
! #    define MAITOU_BUTTON27  '\x08'  /* BS (8) */
! #    define MAITOU_BUTTON28  '-'     /*  45 */
! 
! #    define MAITOU_BUTTON31  ';'     /*  59 */
! #    define MAITOU_BUTTON32  '4'     /*  52 */
! #    define MAITOU_BUTTON33  '6'     /*  54 */
! #    define MAITOU_BUTTON34  '2'     /*  50 */
! #    define MAITOU_BUTTON35  '1'     /*  49 */
! #    define MAITOU_BUTTON36  '7'     /*  55 */
! #    define MAITOU_BUTTON37  '5'     /*  53 */
! #    define MAITOU_BUTTON38  '3'     /*  51 */
! 
! #  else  /*MAITOU_LOCAL_PATCH*/
! 
! #    define BACK_KEY	'b'
! #    define NEXT_KEY	'f'
! #    define PAUSE_KEY	'p'
! #    define QUIT_KEY	'q'
! #    define STOP_KEY	's'
! #    define REWIND_KEY	','
! #    define FORWARD_KEY	'.'
! #    define FAST_REWIND_KEY ';'
! #    define FAST_FORWARD_KEY ':'
! #    define FINE_REWIND_KEY '<'
! #    define FINE_FORWARD_KEY '>'
! 
! #  endif /*MAITOU_LOCAL_PATCH*/
! 
! #else /*MAITOU_PATCH*/
! 
! #  define BACK_KEY	'b'
! #  define NEXT_KEY	'f'
! #  define PAUSE_KEY	'p'
! #  define QUIT_KEY	'q'
! #  define STOP_KEY	's'
! #  define REWIND_KEY	','
! #  define FORWARD_KEY	'.'
  /* This is convenient on QWERTZ-keyboards. */
! #  define FAST_REWIND_KEY ';'
! #  define FAST_FORWARD_KEY ':'
! #  define FINE_REWIND_KEY '<'
! #  define FINE_FORWARD_KEY '>'
  /* You probably want to use the following bindings instead
   * on a standard QWERTY-keyboard:
   */
***************
*** 28,36 ****
  /* #define FINE_REWIND_KEY ';' */
  /* #define FINE_FORWARD_KEY ':' */
  
! #define PAUSED_STRING	"Paused. \b\b\b\b\b\b\b\b"
! #define STOPPED_STRING	"Stopped.\b\b\b\b\b\b\b\b"
! #define EMPTY_STRING	"        \b\b\b\b\b\b\b\b"
  
  void term_init(void);
  long term_control(struct frame *fr);
--- 117,127 ----
  /* #define FINE_REWIND_KEY ';' */
  /* #define FINE_FORWARD_KEY ':' */
  
! #  define PAUSED_STRING	"Paused. \b\b\b\b\b\b\b\b"
! #  define STOPPED_STRING	"Stopped.\b\b\b\b\b\b\b\b"
! #  define EMPTY_STRING	"        \b\b\b\b\b\b\b\b"
! 
! #endif /*!MAITOU_PATCH*/
  
  void term_init(void);
  long term_control(struct frame *fr);
diff -crN mpg123-0.59r/tools/CVS/Entries mpg123-0.59r-maitou/tools/CVS/Entries
*** mpg123-0.59r/tools/CVS/Entries	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/tools/CVS/Entries	Tue May 21 03:48:33 2002
***************
*** 0 ****
--- 1,4 ----
+ /ASF.info/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /asfCDtomp3/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ /interface-and-phython/1.1.1.1/Sat Sep  8 13:54:28 2001//
+ D
diff -crN mpg123-0.59r/tools/CVS/Repository mpg123-0.59r-maitou/tools/CVS/Repository
*** mpg123-0.59r/tools/CVS/Repository	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/tools/CVS/Repository	Tue May 21 03:48:33 2002
***************
*** 0 ****
--- 1 ----
+ mpg123-0.59r-maitou/tools
diff -crN mpg123-0.59r/tools/CVS/Root mpg123-0.59r-maitou/tools/CVS/Root
*** mpg123-0.59r/tools/CVS/Root	Thu Jan  1 09:00:00 1970
--- mpg123-0.59r-maitou/tools/CVS/Root	Tue May 21 03:48:33 2002
***************
*** 0 ****
--- 1 ----
+ /project/cvsroot

