rpms/alphabet-soup/devel alphabet-soup-1.1-linux.patch, NONE, 1.1 alphabet-soup.desktop, NONE, 1.1 alphabet-soup.png, NONE, 1.1 alphabet-soup.spec, NONE, 1.1 .cvsignore, 1.1, 1.2 sources, 1.1, 1.2

Hans de Goede (jwrdegoede) fedora-extras-commits at redhat.com
Mon Dec 4 05:27:22 UTC 2006


Author: jwrdegoede

Update of /cvs/extras/rpms/alphabet-soup/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv1676/devel

Modified Files:
	.cvsignore sources 
Added Files:
	alphabet-soup-1.1-linux.patch alphabet-soup.desktop 
	alphabet-soup.png alphabet-soup.spec 
Log Message:
auto-import alphabet-soup-1.1-2.fc7 on branch devel from alphabet-soup-1.1-2.fc7.src.rpm

alphabet-soup-1.1-linux.patch:

--- NEW FILE alphabet-soup-1.1-linux.patch ---
--- /dev/null	2006-12-01 08:45:08.001995750 +0100
+++ alphabet-soup-1.1/Makefile.unix	2006-12-01 11:20:56.000000000 +0100
@@ -0,0 +1,24 @@
+CC = gcc
+PREFIX  = /usr
+DATADIR = $(PREFIX)/share/$(TARGET)
+CFLAGS  = -g -Wall -O2 -Wno-deprecated-declarations
+LDFLAGS = -lalfont `allegro-config --libs` -ldumb -laldmb
+DEFINES = -DDATADIR=\"$(DATADIR)/\"
+OBJS    = ncds.o hs.o animate.o 3dsprite.o main.o data.o game.o menu.o map.o \
+          snake.o input.o dictionary.o effects.o text.o credits.o unix.o
+TARGET  = alphabet-soup
+
+$(TARGET): $(OBJS)
+	$(CC) -o $@ $^ $(LDFLAGS) 
+
+%.o: %.c
+	$(CC) $(CFLAGS) $(DEFINES) -o $@ -c $<
+
+install: $(TARGET)
+	mkdir -p $(PREFIX)/bin
+	mkdir -p $(DATADIR)
+	install -p -m 755 $(TARGET) $(PREFIX)/bin
+	install -p -m 644 soup.dat $(DATADIR)
+	
+clean:
+	rm -f $(OBJS) $(TARGET) *~
--- alphabet-soup-1.1/animate.c.unix	2003-12-22 19:41:18.000000000 +0100
+++ alphabet-soup-1.1/animate.c	2006-12-01 11:20:56.000000000 +0100
@@ -358,7 +358,7 @@
 
 BITMAP * get_ani(ANIMATION * ap, int f)
 {
-    int i, d;
+    int i = 0, d;
     
     switch(ap->type)
     {
@@ -432,8 +432,6 @@
 /* like draw_sprite but for animations (pick frame based on f) */
 int draw_ani(BITMAP * bp, ANIMATION * ap, int x, int y, unsigned long f)
 {
-    int i;
-
     if(ap != NULL)
     {
         /* make sure there are frames to draw */
--- alphabet-soup-1.1/config.c.unix	2004-01-21 21:56:48.000000000 +0100
+++ alphabet-soup-1.1/config.c	2006-12-01 11:20:56.000000000 +0100
@@ -12,7 +12,7 @@
 	install_mouse();
 	ncds_install();
 	set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0);
-	bg = load_pcx("soup.dat#images/background.pcx", palette);
+	bg = load_pcx(DATADIR "soup.dat#images/background.pcx", palette);
 	set_palette(palette);
 	while(!key[KEY_ESC])
 	{
--- alphabet-soup-1.1/credits.c.unix	2004-01-29 08:47:10.000000000 +0100
+++ alphabet-soup-1.1/credits.c	2006-12-01 11:20:56.000000000 +0100
@@ -1,5 +1,6 @@
 #include <allegro.h>
 #include <alfont.h>
+#include <string.h>
 #include "credits.h"
 
 void credits_add_item(CREDITS * cp, char * text, ALFONT_FONT * fp, int oy, int color)
--- alphabet-soup-1.1/data.c.unix	2004-09-21 16:54:02.000000000 +0200
+++ alphabet-soup-1.1/data.c	2006-12-01 11:20:56.000000000 +0100
@@ -1,5 +1,6 @@
 #include <allegro.h>
 #include <alfont.h>
+#include <string.h>
 #include "hs.h"
 #include "animate.h"
 #include "data.h"
@@ -10,10 +11,11 @@
 #include "menu.h"
 #include "text.h"
 #include "credits.h"
+#include "ncds.h"
 
 /* main data */
 int state = STATE_MENU;
-int logic_ticks = 0;
+volatile int logic_ticks = 0;
 int frame = 0;
 char * mem_buffer = NULL;
 int mem_buffer_size = 0;
@@ -29,7 +31,7 @@
 int score_view;
 char * score_title[MAX_GAME_MODES] = {"Scatter Word", "Blind Worm", "Elimination", "Poison Letter", "Fat Worm", "Skinny Worm", "Cold Soup", "Nibbles"};
 int game_modes = 8;
-char word_file[MAX_WORD_FILES][1024] = {0};
+char word_file[MAX_WORD_FILES][1024] = { {0} };
 char word_files = 0;
 char word_selected = 0;
 int gtime = 0;
@@ -68,18 +70,18 @@
 
 void word_file_add(const char * fn, int attrib, int param)
 {
-	strcpy(word_file[word_files], fn);
+	strcpy(word_file[(int)word_files], fn);
 	word_files++;
 }
 
 void build_dictionary_list(void)
 {
 	word_files = 0;
-	word_file_add("soup.dat#dictionaries/default.asd", 0, 0);
-	word_file_add("soup.dat#dictionaries/kids.asd", 0, 0);
-	word_file_add("soup.dat#dictionaries/strange.asd", 0, 0);
+	word_file_add(DATADIR "soup.dat#dictionaries/default.asd", 0, 0);
+	word_file_add(DATADIR "soup.dat#dictionaries/kids.asd", 0, 0);
+	word_file_add(DATADIR "soup.dat#dictionaries/strange.asd", 0, 0);
 	for_each_file("*.asd", FA_ARCH | FA_RDONLY, word_file_add, 0);
-	dictionary_load(&dictionary[DICTIONARY_MAIN], word_file[word_selected]);
+	dictionary_load(&dictionary[DICTIONARY_MAIN], word_file[(int)word_selected]);
 }
 
 void load_mem_file(char * fn)
@@ -183,36 +185,36 @@
 	int i;
 	
 	/* load sounds */
-	sound[SOUND_BITE] = load_wav("soup.dat#sounds/eat.wav");
-	sound[SOUND_MENU_MOVE] = load_wav("soup.dat#sounds/navigate.wav");
-	sound[SOUND_MENU_ENTER] = load_wav("soup.dat#sounds/select.wav");
-	sound[SOUND_MENU_OPTION] = load_wav("soup.dat#sounds/option.wav");
-	sound[SOUND_WORD] = load_wav("soup.dat#sounds/word.wav");
-	sound[SOUND_LEVEL] = load_wav("soup.dat#sounds/level.wav");
-	sound[SOUND_PAPER] = load_wav("soup.dat#sounds/paper.wav");
-	sound[SOUND_CLAP] = load_wav("soup.dat#sounds/clap.wav");
+	sound[SOUND_BITE] = load_wav(DATADIR "soup.dat#sounds/eat.wav");
+	sound[SOUND_MENU_MOVE] = load_wav(DATADIR "soup.dat#sounds/navigate.wav");
+	sound[SOUND_MENU_ENTER] = load_wav(DATADIR "soup.dat#sounds/select.wav");
+	sound[SOUND_MENU_OPTION] = load_wav(DATADIR "soup.dat#sounds/option.wav");
+	sound[SOUND_WORD] = load_wav(DATADIR "soup.dat#sounds/word.wav");
+	sound[SOUND_LEVEL] = load_wav(DATADIR "soup.dat#sounds/level.wav");
+	sound[SOUND_PAPER] = load_wav(DATADIR "soup.dat#sounds/paper.wav");
+	sound[SOUND_CLAP] = load_wav(DATADIR "soup.dat#sounds/clap.wav");
 	
 	/* load images */
-	image[IMAGE_GAME_BACKGROUND] = load_pcx("soup.dat#images/bowl.pcx", palette);
-	image[IMAGE_MENU_BG] = load_pcx("soup.dat#images/background.pcx", NULL);
-	image[IMAGE_SOUP_CAN] = load_pcx("soup.dat#images/can_texture.pcx", NULL);
-	image[IMAGE_SOUP_SHADOW] = load_pcx("soup.dat#images/can_shadow.pcx", NULL);
+	image[IMAGE_GAME_BACKGROUND] = load_pcx(DATADIR "soup.dat#images/bowl.pcx", palette);
+	image[IMAGE_MENU_BG] = load_pcx(DATADIR "soup.dat#images/background.pcx", NULL);
+	image[IMAGE_SOUP_CAN] = load_pcx(DATADIR "soup.dat#images/can_texture.pcx", NULL);
+	image[IMAGE_SOUP_SHADOW] = load_pcx(DATADIR "soup.dat#images/can_shadow.pcx", NULL);
 	image[IMAGE_MENU_SURFACE] = create_sub_bitmap(image[IMAGE_SOUP_CAN], 0, 90, image[IMAGE_SOUP_CAN]->w / 2, image[IMAGE_SOUP_CAN]->h - 90 - 4);
-	image[IMAGE_PAPER] = load_pcx("soup.dat#images/score_sheet.pcx", NULL);
-	image[IMAGE_BODY_H] = load_pcx("soup.dat#snake/body_horizontal.pcx", NULL);
-	image[IMAGE_BODY_V] = load_pcx("soup.dat#snake/body_vertical.pcx", NULL);
-	image[IMAGE_BODY_DUL] = load_pcx("soup.dat#snake/body_up_left.pcx", NULL);
-	image[IMAGE_BODY_DUR] = load_pcx("soup.dat#snake/body_up_right.pcx", NULL);
-	image[IMAGE_BODY_DDL] = load_pcx("soup.dat#snake/body_down_left.pcx", NULL);
-	image[IMAGE_BODY_DDR] = load_pcx("soup.dat#snake/body_down_right.pcx", NULL);
-	image[IMAGE_HEAD_UP] = load_pcx("soup.dat#snake/head_up.pcx", NULL);
-	image[IMAGE_HEAD_DOWN] = load_pcx("soup.dat#snake/head_down.pcx", NULL);
-	image[IMAGE_HEAD_LEFT] = load_pcx("soup.dat#snake/head_left.pcx", NULL);
-	image[IMAGE_HEAD_RIGHT] = load_pcx("soup.dat#snake/head_right.pcx", NULL);
-	image[IMAGE_TAIL_UP] = load_pcx("soup.dat#snake/tail_up.pcx", NULL);
-	image[IMAGE_TAIL_DOWN] = load_pcx("soup.dat#snake/tail_down.pcx", NULL);
-	image[IMAGE_TAIL_LEFT] = load_pcx("soup.dat#snake/tail_left.pcx", NULL);
-	image[IMAGE_TAIL_RIGHT] = load_pcx("soup.dat#snake/tail_right.pcx", NULL);
+	image[IMAGE_PAPER] = load_pcx(DATADIR "soup.dat#images/score_sheet.pcx", NULL);
+	image[IMAGE_BODY_H] = load_pcx(DATADIR "soup.dat#snake/body_horizontal.pcx", NULL);
+	image[IMAGE_BODY_V] = load_pcx(DATADIR "soup.dat#snake/body_vertical.pcx", NULL);
+	image[IMAGE_BODY_DUL] = load_pcx(DATADIR "soup.dat#snake/body_up_left.pcx", NULL);
+	image[IMAGE_BODY_DUR] = load_pcx(DATADIR "soup.dat#snake/body_up_right.pcx", NULL);
+	image[IMAGE_BODY_DDL] = load_pcx(DATADIR "soup.dat#snake/body_down_left.pcx", NULL);
+	image[IMAGE_BODY_DDR] = load_pcx(DATADIR "soup.dat#snake/body_down_right.pcx", NULL);
+	image[IMAGE_HEAD_UP] = load_pcx(DATADIR "soup.dat#snake/head_up.pcx", NULL);
+	image[IMAGE_HEAD_DOWN] = load_pcx(DATADIR "soup.dat#snake/head_down.pcx", NULL);
+	image[IMAGE_HEAD_LEFT] = load_pcx(DATADIR "soup.dat#snake/head_left.pcx", NULL);
+	image[IMAGE_HEAD_RIGHT] = load_pcx(DATADIR "soup.dat#snake/head_right.pcx", NULL);
+	image[IMAGE_TAIL_UP] = load_pcx(DATADIR "soup.dat#snake/tail_up.pcx", NULL);
+	image[IMAGE_TAIL_DOWN] = load_pcx(DATADIR "soup.dat#snake/tail_down.pcx", NULL);
+	image[IMAGE_TAIL_LEFT] = load_pcx(DATADIR "soup.dat#snake/tail_left.pcx", NULL);
+	image[IMAGE_TAIL_RIGHT] = load_pcx(DATADIR "soup.dat#snake/tail_right.pcx", NULL);
 	
 	set_palette(black_palette);
 	gui_fg_color = 224;
@@ -230,13 +232,14 @@
 	build_dictionary_list();
 	
 	/* load fonts */
-	load_mem_file("soup.dat#fonts/game.ttf");
+	memset(gfont, 0, MAX_FONTS * sizeof(void *));
+	load_mem_file(DATADIR "soup.dat#fonts/game.ttf");
 	gfont[FONT_GAME] = alfont_load_font_from_mem(mem_buffer, mem_buffer_size);
 	alfont_set_font_size(gfont[FONT_GAME], 32);
 	gfont[FONT_GAME_BIG] = alfont_load_font_from_mem(mem_buffer, mem_buffer_size);
 	alfont_set_font_size(gfont[FONT_GAME_BIG], 48);
 	free_mem_file();
-	load_mem_file("soup.dat#fonts/menu.ttf");
+	load_mem_file(DATADIR "soup.dat#fonts/menu.ttf");
 	gfont[FONT_MENU_HEADER] = alfont_load_font_from_mem(mem_buffer, mem_buffer_size);
 	alfont_set_font_size(gfont[FONT_MENU_HEADER], 24);
 	gfont[FONT_MENU] = alfont_load_font_from_mem(mem_buffer, mem_buffer_size);
@@ -244,7 +247,7 @@
 	free_mem_file();
 	
 	/* load animations */
-	animation[ANIMATION_APPEAR_FG] = load_ani("soup.dat#animations/letter_appear.ani", NULL);
+	animation[ANIMATION_APPEAR_FG] = load_ani(DATADIR "soup.dat#animations/letter_appear.ani", NULL);
 	
 	buffer = create_bitmap(640, 480);
 //	buffer_map = create_sub_bitmap(buffer, (SCREEN_W - image[IMAGE_GAME_BACKGROUND]->w) / 2 + 16, (SCREEN_H - image[IMAGE_GAME_BACKGROUND]->h) / 2 + 16, MAP_W * 32, MAP_H * 32);
--- alphabet-soup-1.1/data.h.unix	2004-09-21 16:42:22.000000000 +0200
+++ alphabet-soup-1.1/data.h	2006-12-01 11:20:56.000000000 +0100
@@ -58,7 +58,7 @@
 #define STATE_SCORES 4
 
 extern int state;
-extern int logic_ticks;
+extern volatile int logic_ticks;
 extern int frame;
 
 extern BITMAP * buffer;
--- alphabet-soup-1.1/dictionary.c.unix	2004-01-21 09:56:20.000000000 +0100
+++ alphabet-soup-1.1/dictionary.c	2006-12-01 11:20:56.000000000 +0100
@@ -128,7 +128,7 @@
 void dictionary_save(DICTIONARY * dp, char * fn)
 {
 	PACKFILE * fp;
-	int i, j, k;
+	int i, j;
 	
 	fp = pack_fopen(fn, "w");
 	for(i = 15; i >= 3; i--)
@@ -145,7 +145,7 @@
 
 int  dictionary_find(DICTIONARY * dp, SNAKE * sp)
 {
-	int i, j, k, l;
+	int i, j, l;
 	int r = 0;
 	
 	for(i = 0; i < dp->words; i++)
@@ -171,8 +171,7 @@
 
 int  dictionary_find_all(DICTIONARY * dp, SNAKE * sp)
 {
-	int i, j, k, l;
-	int r = 0;
+	int i, j, l;
 	int marked[SNAKE_MAX_SEGMENTS] = {0};
 	int found[DICTIONARY_MAX_WORDS] = {0};
 	
@@ -217,7 +216,7 @@
 {
 	int list[DICTIONARY_MAX_WORDS];
 	int list_length = 0;
-	int i, j, pick;
+	int i;
 	
 	for(i = 0; i < dp->words; i++)
 	{
@@ -234,7 +233,7 @@
 {
 	int list[DICTIONARY_MAX_WORDS];
 	int list_length = 0;
-	int i, j, pick;
+	int i, pick;
 	
 	for(i = 0; i < dp->words; i++)
 	{
--- alphabet-soup-1.1/effects.c.unix	2004-07-19 13:18:00.000000000 +0200
+++ alphabet-soup-1.1/effects.c	2006-12-01 11:20:56.000000000 +0100
@@ -10,7 +10,7 @@
 	drawing_mode(DRAW_MODE_SOLID, NULL, 0, 0);
 }
 
-void myblend(PALETTE pal, int x, int y, RGB *rgb)
+void myblend(const PALETTE pal, int x, int y, RGB *rgb)
 {
 	int light;
 	
@@ -36,7 +36,7 @@
 {     
 	int x, y; // coordinates on the target bitmap 
 //	int p, q; // coordinates on the source bitmap
-	fixed p, q; // coordinates on the source bitmap
+	fixed p; // coordinates on the source bitmap
 	fixed cy, oy;
 	int iy;
      
--- alphabet-soup-1.1/effects.h.unix	2004-01-14 11:11:38.000000000 +0100
+++ alphabet-soup-1.1/effects.h	2006-12-01 11:20:56.000000000 +0100
@@ -4,7 +4,7 @@
 #include <allegro.h>
 
 void draw_shadow(BITMAP * bp, int x, int y, int w, int h, int ox, int oy);
-void myblend(PALETTE pal, int x, int y, RGB *rgb);
+void myblend(const PALETTE pal, int x, int y, RGB *rgb);
 int get_pixel_wrap(BITMAP * bp, int x, int y);
 void draw_cylinder(BITMAP * bp, BITMAP * texture, int x, int y, int w, int h, fixed angle); 
 void mapped_cylinder(BITMAP * target, int cx, int top, int r, int h, BITMAP * map, int ofs);
--- alphabet-soup-1.1/game.c.unix	2004-09-22 09:56:00.000000000 +0200
+++ alphabet-soup-1.1/game.c	2006-12-01 11:55:12.000000000 +0100
@@ -167,7 +167,7 @@
 void game_start(GAME * gp)
 {
 	/* reload the dictionary */
-	dictionary_load(&dictionary[DICTIONARY_MAIN], word_file[word_selected]);
+	dictionary_load(&dictionary[DICTIONARY_MAIN], word_file[(int)word_selected]);
 	
 	game_set_options(gp);
 	
@@ -200,8 +200,7 @@
 
 int game_advance(GAME * gp)
 {
-	int i, ol;
-	int ret = 0;
+	int ol, ret = 0;
 	
 	ol = gp->level;
 	gp->level = gp->snake.words / 10;
@@ -262,8 +261,7 @@
 				main_render();
 				main_draw();
 				game_state = GAME_STATE_PLAY;
-				ncds_play_music("soup.dat#music/bgm.xm", 1);
-				logic_ticks = 0;
+				ncds_play_music(DATADIR "soup.dat#music/bgm.xm", 1);
 			}
 			break;
 		}
@@ -362,7 +360,6 @@
 					score_state = SCORE_STATE_IN;
 				}
 				score_view = game.mode;
-				logic_ticks = 0;
 			}
 			break;
 		}
@@ -391,7 +388,6 @@
 void game_draw_word(GAME * gp, ALFONT_FONT * fp, int x, int y)
 {
 	char text[256] = {0};
-	int i;
 	int ofs, ofs2;
 	
 	strcpy(text, gp->snake.word);
--- alphabet-soup-1.1/game.h.unix	2004-09-22 08:23:54.000000000 +0200
+++ alphabet-soup-1.1/game.h	2006-12-01 11:20:56.000000000 +0100
@@ -45,5 +45,6 @@
 void game_logic(GAME * gp);
 void game_render(GAME * gp);
 void game_draw(GAME * gp);
+int game_advance(GAME * gp);
 
 #endif
--- alphabet-soup-1.1/hs.c.unix	2004-09-22 10:12:40.000000000 +0200
+++ alphabet-soup-1.1/hs.c	2006-12-01 11:20:56.000000000 +0100
@@ -1,6 +1,7 @@
 #include <allegro.h>
 #include <alfont.h>
 #include <string.h>
+#include <stdio.h>
 #include "hs.h"
 
 int hs_save_fp(HIGH_SCORES * hp, PACKFILE * fp)
--- alphabet-soup-1.1/includes.h.unix	2004-09-21 16:19:06.000000000 +0200
+++ alphabet-soup-1.1/includes.h	2006-12-01 11:20:56.000000000 +0100
@@ -3,6 +3,8 @@
 
 #include <allegro.h>
 #include <alfont.h>
+#include <stdio.h>
+#include <string.h>
 
 #include "ncds.h"
 #include "hs.h"
@@ -19,4 +21,7 @@
 #include "text.h"
 #include "credits.h"
 
+void main_render(void);
+void main_draw(void);
+
 #endif
--- /dev/null	2006-12-01 08:45:08.001995750 +0100
+++ alphabet-soup-1.1/license-change.txt	2006-12-01 11:20:56.000000000 +0100
@@ -0,0 +1,199 @@
+The original license statement in readme.txt was:
+"Alphabet Soup is freeware and may be distributed freely (without charge). If
+you would like to include Alphabet Soup on a compilation CD you must contact us
+for permission. Please see the "Contacting Us" section at the bottom of this
+document."
+
+This was changed to the current text by Hans de Goede
+<j.w.r.degoede at hhs.nl>, with permission from the original author Todd Cope,
+below is are literal copies of the email exchange in which he gave his
+permission:
+
+---
+
+Message-ID: <456DE5CA.7020300 at hhs.nl>
+Date: Wed, 29 Nov 2006 20:55:54 +0100
+From: Hans de Goede <j.w.r.degoede at hhs.nl>
+User-Agent: Thunderbird 1.5.0.5 (X11/20060803)
+MIME-Version: 1.0
+To:  todd at t3-i.com
+Subject: alphabet soup, laserwars en others license
+X-Enigmail-Version: 0.94.0.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 7bit
+
+Hi Todd,
+
+Remember me I mailed you patches for a Linux version for crystalstacker
+quite some time ago. and I've created Fedora Linux packages of
+crystalstacker so that Fedora users can easily install it.
+
+Besides a Linux enthousiast / Fedora developer I'm also a Computer
+Science teacher at a Dutch University. This period I'm teaching my
+students howto write portable code, so I thought it would be fun to give
+them some games written with allegro, but not with another OS like Linux
+in mind, to "port" to Linux. Today there was a practical lesson where
+they did just that and it was a great success.
+
+The managed to get smashteroid and alphabet soup running under Linux
+quite easily. Their work still needs some cleaning up and then I'll send
+it to you. Know that I've seen your other games in action I would like
+to package them for Fedora Linux too.
+
+I'm interested in creating packages for all your (non java) games, but
+lets start with those for which you currently already make source
+available: alphabet soup, smashteroid and laserwars.
+
+All 3 of these come with a Freeware-ish license currently in the text. I
+don't know if you remember, but we had some discussions about some rough
+(and thus for Fedora troublesome) edges with the crystalstacker license.
+
+In the end you put the following license on crystalstacker (for which
+I'm still very grateful):
+
+"Crystal Stacker is freeware. This means you can pass copies around
+freely provided you include this document in it's original form in your
+distribution. Please see the "Contacting Us" section of this document if
+you need to contact us for any reason.
+
+The source code is provided as-is and you may do with it whatsoever you
+please provided that you include this file in its unmodified form with
+any new distribution. NewCreature Design makes no gaurantees regarding
+the usability of the source but are willing to help with any problems
+you might run into. Please see the "Contacting Us" section of this
+document if you need to get in touch with us about any issues you have
+regarding the source."
+
+Are you willing to release: alphabet soup, smashteroid and laserwars
+under this license too? And in that case is it ok for me to distribute
+the current available versions under this license?
+
+Thanks & Regards,
+
+Hans
+
+
+p.s.
+
+While I'm asking any chance you could release source of any of your
+other games like vgolf and secret of the hose? I know you already make
+linux binaries available, but source under an unrestrictive license
+would be really awsome!
+
+
+
+---
+
+Return-Path: <todd at t3-i.com>
+Received: from koko.hhs.nl ([145.52.2.16] verified)
+  by hhs.nl (CommuniGate Pro SMTP 4.3.6)
+  with ESMTP id 55013466 for j.w.r.degoede at hhs.nl; Thu, 30 Nov 2006 01:50:54 +0100
+Received: from exim by koko.hhs.nl with spam-scanned (Exim 4.62)
+	(envelope-from <todd at t3-i.com>)
+	id 1Gpa8Z-0007DU-2j
+	for j.w.r.degoede at hhs.nl; Thu, 30 Nov 2006 01:50:54 +0100
+X-Spam-Checker-Version: SpamAssassin 3.1.0 (2005-09-13) on koko.hhs.nl
+X-Spam-Level: 
+X-Spam-Status: No, score=0.6 required=5.0 tests=AWL,BAYES_05,NO_REAL_NAME,
+	UNWANTED_LANGUAGE_BODY autolearn=no version=3.1.0
+Received: from exim (helo=koko)
+	by koko.hhs.nl with local-smtp (Exim 4.62)
+	(envelope-from <todd at t3-i.com>)
+	id 1Gpa8Y-0007DR-VX
+	for j.w.r.degoede at hhs.nl; Thu, 30 Nov 2006 01:50:51 +0100
+Received: from [68.178.232.10] (port=55956 helo=smtpout15-02.prod.mesa1.secureserver.net)
+	by koko.hhs.nl with smtp (Exim 4.62)
+	(envelope-from <todd at t3-i.com>)
+	id 1Gpa8Y-0007DM-Bx
+	for j.w.r.degoede at hhs.nl; Thu, 30 Nov 2006 01:50:50 +0100
+Received: (qmail 23995 invoked from network); 30 Nov 2006 00:50:48 -0000
+Received: from unknown (HELO gem-wbe25.prod.mesa1.secureserver.net) (64.202.189.228)
+  by smtpout15-02.prod.mesa1.secureserver.net with SMTP; 30 Nov 2006 00:50:48 -0000
+Received: (qmail 20967 invoked by uid 99); 30 Nov 2006 00:50:48 -0000
+Date: Wed, 29 Nov 2006 17:50:48 -0700
+From: todd at t3-i.com
+Subject: RE: alphabet soup, laserwars en others license
+To: Hans de Goede <j.w.r.degoede at hhs.nl>
+Message-ID: <20061129175048.c1bf2b7c2c1de069cff39b794cd5d62e.b7005c9902.wbe at email.secureserver.net>
+MIME-Version: 1.0
+Content-Type: TEXT/plain; CHARSET=US-ASCII
+User-Agent: Web-Based Email 4.9.0
+X-Originating-IP: 70.157.254.177
+X-Anti-Virus: Kaspersky Anti-Virus for MailServers 5.5.2/RELEASE, bases: 30112006 #232888, status: clean
+
+Hello Hans,
+
+To your first request to release the other games (Alphabet Soup, Smashteroid, Laser War) under the Crystal Stacker license, I give you my permission to do so.
+
+As for vGolf, it is unfinished but the source code is available under the "Linux" packages on the web site. No Linux binaries exist as I have no idea how to make them so they work with all Linux versions :) I am fine with you releasing the current vGolf under the Crystal Stacker license as well.
+
+However, Secret of the Hose is closed-source at the request of the game designer. He wanted to keep it closed-sourced so that people wouldn't be able to cheat as easily in online play. I would love to release the source otherwise. I see no benefit personally in keeping my sources under wraps Your case of using them for educational purposes makes me quite happy.
+
+Sincerely,
+
+Todd
+
+> -------- Original Message --------
+> Subject: alphabet soup, laserwars en others license
+> From: Hans de Goede <j.w.r.degoede at hhs.nl>
+> Date: Wed, November 29, 2006 12:55 pm
+> To: todd at t3-i.com
+> 
+> Hi Todd,
+> 
+> Remember me I mailed you patches for a Linux version for crystalstacker
+> quite some time ago. and I've created Fedora Linux packages of
+> crystalstacker so that Fedora users can easily install it.
+> 
+> Besides a Linux enthousiast / Fedora developer I'm also a Computer
+> Science teacher at a Dutch University. This period I'm teaching my
+> students howto write portable code, so I thought it would be fun to give
+> them some games written with allegro, but not with another OS like Linux
+> in mind, to "port" to Linux. Today there was a practical lesson where
+> they did just that and it was a great success.
+> 
+> The managed to get smashteroid and alphabet soup running under Linux
+> quite easily. Their work still needs some cleaning up and then I'll send
+> it to you. Know that I've seen your other games in action I would like
+> to package them for Fedora Linux too.
+> 
+> I'm interested in creating packages for all your (non java) games, but
+> lets start with those for which you currently already make source
+> available: alphabet soup, smashteroid and laserwars.
+> 
+> All 3 of these come with a Freeware-ish license currently in the text. I
+> don't know if you remember, but we had some discussions about some rough
+> (and thus for Fedora troublesome) edges with the crystalstacker license.
+> 
+> In the end you put the following license on crystalstacker (for which
+> I'm still very grateful):
+> 
+> "Crystal Stacker is freeware. This means you can pass copies around
+> freely provided you include this document in it's original form in your
+> distribution. Please see the "Contacting Us" section of this document if
+> you need to contact us for any reason.
+> 
+> The source code is provided as-is and you may do with it whatsoever you
+> please provided that you include this file in its unmodified form with
+> any new distribution. NewCreature Design makes no gaurantees regarding
+> the usability of the source but are willing to help with any problems
+> you might run into. Please see the "Contacting Us" section of this
+> document if you need to get in touch with us about any issues you have
+> regarding the source."
+> 
+> Are you willing to release: alphabet soup, smashteroid and laserwars
+> under this license too? And in that case is it ok for me to distribute
+> the current available versions under this license?
+> 
+> Thanks & Regards,
+> 
+> Hans
+> 
+> 
+> p.s.
+> 
+> While I'm asking any chance you could release source of any of your
+> other games like vgolf and secret of the hose? I know you already make
+> linux binaries available, but source under an unrestrictive license
+> would be really awsome!
+
--- alphabet-soup-1.1/main.c.unix	2004-09-22 10:19:34.000000000 +0200
+++ alphabet-soup-1.1/main.c	2006-12-01 11:20:56.000000000 +0100
@@ -145,9 +145,26 @@
 void main_loop(void)
 {
 	int i;
+#ifdef __unix__
+	char buf[512];
+	char *home = getenv("HOME");
+	int check_and_create_dir(const char *name);
 
+	snprintf(buf, sizeof(buf), "%s/.alphabet-soup", home? home:".");
+	if (check_and_create_dir(buf))
+		return;
+
+	snprintf(buf, sizeof(buf), "%s/.alphabet-soup/soup.cfg",
+		home? home:".");
+	config_load(buf);
+
+	snprintf(buf, sizeof(buf), "%s/.alphabet-soup/soup.hs",
+		home? home:".");
+	load_scores(buf);
+#else
 	config_load("soup.cfg");
 	load_scores("soup.hs");
+#endif
 	can_x = SCREEN_W / 2 - CAN_R;
 	can_y = -CAN_H;
 	can_ofs = CAN_START_OFS;
@@ -155,22 +172,37 @@
 	menu_init();
 	blit(image[IMAGE_MENU_BG], screen, 0, 0, 0, 0, SCREEN_W, SCREEN_H);
 	fade_in(palette, 4);
-	ncds_play_music("soup.dat#music/title.xm", 1);
+	ncds_play_music(DATADIR "soup.dat#music/title.xm", 1);
 	logic_ticks = 0;
 	while(state != STATE_FIN)
 	{
-		for(i = 0; i < ((logic_ticks < 30) ? logic_ticks : 30); i++)
+		if (logic_ticks > 30)
+			logic_ticks = 30;
+		
+		while (logic_ticks)
 		{
 			main_logic();
+			logic_ticks--;
 		}
 		ncds_update_music();
-		logic_ticks = 0;
 		main_render();
 		main_draw();
+		while (logic_ticks == 0)
+			rest(1);
 	}
 	ncds_stop_music();
+#ifdef __unix__
+	snprintf(buf, sizeof(buf), "%s/.alphabet-soup/soup.cfg",
+		home? home:".");
+	config_save(buf);
+
+	snprintf(buf, sizeof(buf), "%s/.alphabet-soup/soup.hs",
+		home? home:".");
+	save_scores(buf);
+#else
 	config_save("soup.cfg");
 	save_scores("soup.hs");
+#endif
 	fade_out(4);
 }
 
--- alphabet-soup-1.1/map.c.unix	2004-01-26 08:28:38.000000000 +0100
+++ alphabet-soup-1.1/map.c	2006-12-01 11:20:56.000000000 +0100
@@ -139,9 +139,8 @@
 void map_add_letter(MAP * mp, char letter)
 {
 	int loc;
-	int val = rand() % 26;
 	int i, j;
-	int smap[MAP_H][MAP_W] = {0};
+	int smap[MAP_H][MAP_W] = { {0} };
 	
 	/* find a place to put the letter */
 	map_update_blocked(mp, &game.snake);
@@ -183,7 +182,7 @@
 
 void map_clear(MAP * mp)
 {
-	int i, j;
+	int i;
 	
 	for(i = 0; i < MAX_LETTERS; i++)
 	{
@@ -279,7 +278,7 @@
 
 void map_draw(BITMAP * bp, MAP * mp, int ox, int oy)
 {
-	int i, j;
+	int i;
 	char str[2] = {'\0', '\0'};
 	
 	for(i = 0; i < MAX_LETTERS; i++)
--- alphabet-soup-1.1/map.h.unix	2004-01-26 08:29:06.000000000 +0100
+++ alphabet-soup-1.1/map.h	2006-12-01 11:20:56.000000000 +0100
@@ -1,8 +1,6 @@
 #ifndef _MAP_H
 #define _MAP_H
 
-#include "dictionary.h"
-
 #define MAP_W (12)
 #define MAP_H (12)
 
@@ -31,10 +29,16 @@
 	
 } MAP;
 
-//void map_auto_shuffle(MAP * mp, SNAKE * sp);
+#include "snake.h"
+#include "dictionary.h"
+
+void map_auto_shuffle(MAP * mp, SNAKE * sp);
 void map_new_letter(MAP * mp, int val, int x, int y);
 void map_add_letter(MAP * mp, char letter);
 void map_logic(MAP * mp);
 void map_draw(BITMAP * bp, MAP * mp, int ox, int oy);
+void map_clear(MAP * mp);
+void map_re_letter(MAP * mp, char * wp);
+
 
 #endif
--- alphabet-soup-1.1/menu.c.unix	2004-09-21 16:15:36.000000000 +0200
+++ alphabet-soup-1.1/menu.c	2006-12-01 11:56:20.000000000 +0100
@@ -1,5 +1,7 @@
 #include <allegro.h>
 #include <alfont.h>
+#include <stdio.h>
+#include <string.h>
 #include "ncds.h"
 #include "data.h"
 #include "menu.h"
@@ -95,8 +97,7 @@
 		if(music_vol <= 0)
 		{
 			ncds_enable_music();
-			ncds_play_music("soup.dat#music/title.xm", 1);
-			logic_ticks = 0;
+			ncds_play_music(DATADIR "soup.dat#music/title.xm", 1);
 		}
 		music_vol += 5;
 		ncds_set_music_volume(music_vol);
@@ -199,7 +200,7 @@
 
 void menu_dictionary_text(void)
 {
-	strcpy(gmenu_wtext, get_filename(word_file[word_selected]));
+	strcpy(gmenu_wtext, get_filename(word_file[(int)word_selected]));
 }
 
 void menu_proc_dictionary_left(void)
@@ -208,7 +209,7 @@
 	{
 		ncds_play_sample(sound[SOUND_MENU_OPTION], 128, -1, -1);
 		word_selected--;
-		dictionary_load(&dictionary[DICTIONARY_MAIN], word_file[word_selected]);
+		dictionary_load(&dictionary[DICTIONARY_MAIN], word_file[(int)word_selected]);
 		menu_dictionary_text();
 	}
 }
@@ -219,7 +220,7 @@
 	{
 		ncds_play_sample(sound[SOUND_MENU_OPTION], 128, -1, -1);
 		word_selected++;
-		dictionary_load(&dictionary[DICTIONARY_MAIN], word_file[word_selected]);
+		dictionary_load(&dictionary[DICTIONARY_MAIN], word_file[(int)word_selected]);
 		menu_dictionary_text();
 	}
 }
@@ -241,7 +242,6 @@
 		build_dictionary_list();
 	}
 	ncds_resume_music();
-	logic_ticks = 0;
 }
 
 void config_init(void)
@@ -482,8 +482,6 @@
 
 void menu_logic(void)
 {
-	int i;
-	int f = frame;
 	char k;
 	
 	if(keypressed())
@@ -522,7 +520,7 @@
 				menu_state = MENU_STATE_TO_OS;
 				ncds_play_sample(sound[SOUND_MENU_ENTER], 128, -1, -1);
 			}
-			if(k == KEY_ENTER)
+			if(k == KEY_ENTER || k == KEY_SPACE)
 			{
 				menu_state = MENU_STATE_TO_OPTIONS;
 				ncds_play_sample(sound[SOUND_MENU_ENTER], 128, -1, -1);
@@ -565,7 +563,7 @@
 			{
 				menu.item[menu.selected].right_proc();
 			}
-			if(k == KEY_ENTER && menu.item[menu.selected].enter_proc)
+			if((k == KEY_ENTER || k == KEY_SPACE) && menu.item[menu.selected].enter_proc)
 			{
 				menu.item[menu.selected].enter_proc();
 			}
@@ -701,8 +699,6 @@
 
 void menu_render(void)
 {
-	int i, j;
-	
 //	clear_to_color(buffer, makecol(0, 0, 128));
 /*	for(i = 0; i < SCREEN_H / image[IMAGE_MENU_SHAPE_1]->h + 2; i++)
 	{
@@ -746,7 +742,7 @@
 			{
 				k = 0;
 			}
-			if(k == KEY_ESC)
+			if(k == KEY_ESC || k == KEY_ENTER || k == KEY_SPACE)
 			{
 				score_state = SCORE_STATE_OUT;
 			}
@@ -847,8 +843,7 @@
 //				can_ofs = CAN_START_OFS;
 				state = STATE_MENU;
 				menu_state = MENU_STATE_FROM_SCORES;
-				ncds_play_music("soup.dat#music/title.xm", 1);
-				logic_ticks = 0;
+				ncds_play_music(DATADIR "soup.dat#music/title.xm", 1);
 			}
 			break;
 		}
--- alphabet-soup-1.1/menu.h.unix	2004-01-29 08:53:22.000000000 +0100
+++ alphabet-soup-1.1/menu.h	2006-12-01 11:20:56.000000000 +0100
@@ -58,5 +58,9 @@
 void menu_logic(void);
 void menu_render(void);
 void menu_draw(void);
+void scores_logic(void);
+void scores_render(void);
+void scores_draw(void);
+
 
 #endif
--- alphabet-soup-1.1/ncds.c.unix	2004-09-14 06:54:42.000000000 +0200
+++ alphabet-soup-1.1/ncds.c	2006-12-01 11:20:56.000000000 +0100
@@ -60,7 +60,7 @@
 SAMPLE * ncds_sample_queue[NCDS_MAX_QUEUE] = {NULL};
 int ncds_queue_channel = -1;
 
-char ncds_music_type[NCDS_MAX_MUSIC_TYPES][8] = {0};
+char ncds_music_type[NCDS_MAX_MUSIC_TYPES][8] = { {0} };
 int ncds_music_types = 0;
 
 void ncds_add_music_type(char * ext)
@@ -410,7 +410,6 @@
 {
 	char str[1024] = {0};
 	int i;
-	int mode = 0;
 	
 	if(fn[0] != '\0')
 	{
@@ -456,7 +455,7 @@
 
 void ncds_update_queue(void)
 {
-	int i, j;
+	int j;
 	
 	if(ncds_initialized)
 	{
@@ -515,7 +514,7 @@
 
 void ncds_update_music(void)
 {
-	int i, ret;
+	int ret;
 	
 	if(ncds_initialized && !ncds_done)
 	{
@@ -812,8 +811,6 @@
 /* saves a wave file to file pointer */
 int ncds_save_wav_fp(SAMPLE * SamplePointer, PACKFILE * f)
 {
-    int i;
-
     /* create the header */
     char RiffHeader[4] = {'R', 'I', 'F', 'F'};
     unsigned long FileLength = 36 + SamplePointer->len;
@@ -961,7 +958,6 @@
 /* figure out sound panning based on X coordinate and width */
 int ncds_place_sound(int x, int width)
 {
-    float fw = width;
     float wr = width / 256;
     float fx = x * wr;
 
--- alphabet-soup-1.1/ncds.h.unix	2004-09-13 08:53:52.000000000 +0200
+++ alphabet-soup-1.1/ncds.h	2006-12-01 11:20:56.000000000 +0100
@@ -9,8 +9,8 @@
 
 /* undefine these to disable portions of NCDS */
 #define NCDS_DUMB
-#define NCDS_ALMP3
-#define NCDS_ALOGG
+// #define NCDS_ALMP3
+// #define NCDS_ALOGG
 
 /* sound system channel modes */
 #define NCDS_MAX_CHANNELS     32
@@ -73,4 +73,8 @@
 }
 #endif
 
+#ifndef DATADIR
+#define DATADIR
+#endif
+
 #endif
--- alphabet-soup-1.1/readme.txt.unix	2004-01-29 21:50:44.000000000 +0100
+++ alphabet-soup-1.1/readme.txt	2006-12-01 11:20:56.000000000 +0100
@@ -1,147 +1,155 @@
-Alphabet Soup 1.0 (c)2004 NewCreature Design
---------------------------------------------
-
-Alphabet Soup is freeware and may be distributed freely (without charge). If
-you would like to include Alphabet Soup on a compilation CD you must contact us
-for permission. Please see the "Contacting Us" section at the bottom of this
-document.
-
-
-Disclaimer
-----------
-
-NewCreature Design makes no gaurantees regarding the Alphabet Soup software. We
-take no responsibility for any damages the software may cause to you or your
-equipment, though it has not been known to cause any problems. Please contact
-us if you have any trouble with the software and we'll see if we can resolve
-the problem.
-
-
-Description
------------
-
-Guide your worm through the soup to spell words and earn points. Play the way
-you like with several game mode selections. Words are chosen from one of three
-included dictionaries, or import your own.
-
-
-System Requirements
--------------------
-
-Pentium or better PC
-VGA or better graphics card
-
-
-Navigating the Menu
--------------------
-
-Use the UP and DOWN arrow keys to move through the menu, LEFT and RIGHT to
-modify options, ENTER to select.
-
-
-Playing the Game
-----------------
-
-Alphabet soup contains several game modes, all with a similar goal. You are
-given a word and you must maneuver your worm through the soup to spell out that
-word. Larger words, naturally, earn you more points.
-
-
-Game Modes
-----------
-
-All game modes share the same basic rules as spelled out above, however, some
-details about how the game plays depend on what game mode you've chosen.
-
-
-  Scatter Word
-  ------------
-  
-  The basic game mode, spell the given word to earn points.
-  
-
-  Blind Worm
-  ----------
-  
-  Just like Scatter Word, except you must figure out what word you are supposed
-  to find based on what letters are floating in the soup.
-  
-  
-  Elimination
-  -----------
-  
-  Like Scatter Word but each word you find is eliminated from the dictionary
-  until no words remain.
-  
-  
-  Poison Letter
-  -------------
-  
-  Eat the wrong letter and you lose.
-  
-  
-  Fat Worm
-  --------
-  
-  Your worm does not get smaller as you find words.
-  
-  
-  Skinny Worm
-  -----------
-  
-  Your worm does not get bigger with each word.
-  
-  
-  Cold Soup
-  ---------
-  
-  Letters do not float around in the soup.
-  
-
-  Nibbles
-  -------
-  
-  The simplest mode, only the letter you need appears.
-  
-  
-Dictionaries
-------------
-
-When playing Alphabet Soup, words are selected from a dictionary. You can use
-any of the provided dictionaries or import your own. To import a dictionary
-press ENTER on the Dictionary option in the menu and select the text file which
-contains your list of words. The file must be formatted one word per line with
-a line break at the end of the file to be imported properly.
-
-
-Credits
--------
-
-Programming, Concept, Design, Graphics, Music, and Sound by Todd Cope.
-
-Additional Design by Brandy Cope.
-
-
-Conclusion
-----------
-
-Alphabet Soup has been a blast to work on. We hope the you all will enjoy the
-game. If you would like to comment or report problems with the game please
-contact us using the information below.
-
-
-Contacting Us
--------------
-
-If you have general questions about our programs or anything else you can
-contact us via e-mail. Please report any bugs you find in our software as well.
-Comments are also appreciated. Visit our web site for the latest updates and
-releases.
-
-E-mail     - todd at ncdgames.com
-
-Snail Mail - 1409 Diuguid Drive Apt. A5
-             Murray, KY 42071
-             Apt. A5
-
-Web Site   - http://www.ncdgames.com
+Alphabet Soup 1.0 (c)2004 NewCreature Design
+--------------------------------------------
+
+Alphabet Soup is freeware. This means you can pass copies around
+freely provided you include this document in it's original form in your
+distribution. Please see the "Contacting Us" section of this document if
+you need to contact us for any reason.
+
+The source code is provided as-is and you may do with it whatsoever you
+please provided that you include this file in its unmodified form with
+any new distribution. NewCreature Design makes no gaurantees regarding
+the usability of the source but are willing to help with any problems
+you might run into. Please see the "Contacting Us" section of this
+document if you need to get in touch with us about any issues you have
+regarding the source.
+
+
+Disclaimer
+----------
+
+NewCreature Design makes no gaurantees regarding the Alphabet Soup software. We
+take no responsibility for any damages the software may cause to you or your
+equipment, though it has not been known to cause any problems. Please contact
+us if you have any trouble with the software and we'll see if we can resolve
+the problem.
+
+
+Description
+-----------
+
+Guide your worm through the soup to spell words and earn points. Play the way
+you like with several game mode selections. Words are chosen from one of three
+included dictionaries, or import your own.
+
+
+System Requirements
+-------------------
+
+Pentium or better PC
+VGA or better graphics card
+
+
+Navigating the Menu
+-------------------
+
+Use the UP and DOWN arrow keys to move through the menu, LEFT and RIGHT to
+modify options, ENTER to select.
+
+
+Playing the Game
+----------------
+
+Alphabet soup contains several game modes, all with a similar goal. You are
+given a word and you must maneuver your worm through the soup to spell out that
+word. Larger words, naturally, earn you more points.
+
+
+Game Modes
+----------
+
+All game modes share the same basic rules as spelled out above, however, some
+details about how the game plays depend on what game mode you've chosen.
+
+
+  Scatter Word
+  ------------
+  
+  The basic game mode, spell the given word to earn points.
+  
+
+  Blind Worm
+  ----------
+  
+  Just like Scatter Word, except you must figure out what word you are supposed
+  to find based on what letters are floating in the soup.
+  
+  
+  Elimination
+  -----------
+  
+  Like Scatter Word but each word you find is eliminated from the dictionary
+  until no words remain.
+  
+  
+  Poison Letter
+  -------------
+  
+  Eat the wrong letter and you lose.
+  
+  
+  Fat Worm
+  --------
+  
+  Your worm does not get smaller as you find words.
+  
+  
+  Skinny Worm
+  -----------
+  
+  Your worm does not get bigger with each word.
+  
+  
+  Cold Soup
+  ---------
+  
+  Letters do not float around in the soup.
+  
+
+  Nibbles
+  -------
+  
+  The simplest mode, only the letter you need appears.
+  
+  
+Dictionaries
+------------
+
+When playing Alphabet Soup, words are selected from a dictionary. You can use
+any of the provided dictionaries or import your own. To import a dictionary
+press ENTER on the Dictionary option in the menu and select the text file which
+contains your list of words. The file must be formatted one word per line with
+a line break at the end of the file to be imported properly.
+
+
+Credits
+-------
+
+Programming, Concept, Design, Graphics, Music, and Sound by Todd Cope.
+
+Additional Design by Brandy Cope.
+
+
+Conclusion
+----------
+
+Alphabet Soup has been a blast to work on. We hope the you all will enjoy the
+game. If you would like to comment or report problems with the game please
+contact us using the information below.
+
+
+Contacting Us
+-------------
+
+If you have general questions about our programs or anything else you can
+contact us via e-mail. Please report any bugs you find in our software as well.
+Comments are also appreciated. Visit our web site for the latest updates and
+releases.
+
+E-mail     - todd at t3-i.com
+
+Snail Mail - 1409 Diuguid Drive Apt. A5
+             Murray, KY 42071
+             Apt. A5
+
+Web Site   - http://www.t3-i.com/
--- alphabet-soup-1.1/snake.c.unix	2004-09-22 10:06:48.000000000 +0200
+++ alphabet-soup-1.1/snake.c	2006-12-01 11:20:56.000000000 +0100
@@ -28,8 +28,6 @@
 
 void snake_add(SNAKE * sp, char val)
 {
-	int i;
-	
 	sp->segment[sp->length].letter = val;
 	if(sp->length < SNAKE_MAX_SEGMENTS - 1)
 	{
@@ -39,8 +37,6 @@
 
 void snake_control(SNAKE * sp)
 {
-	int i, j;
-	
 	read_controller(&sp->controller);
 	if(sp->segment[0].nx != sp->segment[0].x)
 	{
@@ -108,11 +104,8 @@
 
 void snake_move(SNAKE * sp, MAP * mp)
 {
-	int i, j, r;
-	char tester[17] = {0};
-	char snake_string[256] = {0};
+	int i, j;
 	int points = 5;
-	int count = 0;
 	char c[2] = {0};
 	int cx;
 	
@@ -285,7 +278,7 @@
 void snake_draw(BITMAP * bp, SNAKE * sp, int ox, int oy)
 {
 	int i;
-	BITMAP * sbp;
+	BITMAP * sbp = NULL;
 	
 	if(sp->segment[1].x > sp->segment[0].x)
 	{
--- alphabet-soup-1.1/snake.h.unix	2004-01-26 08:29:18.000000000 +0100
+++ alphabet-soup-1.1/snake.h	2006-12-01 11:20:56.000000000 +0100
@@ -1,7 +1,6 @@
 #ifndef SNAKE_H
 #define SNAKE_H
 
-#include "map.h"
 #include "input.h"
 
 #define SNAKE_MAX_SEGMENTS 256
@@ -32,8 +31,10 @@
 	
 } SNAKE;
 
+#include "map.h"
+
 void snake_compile(SNAKE * sp);
-//void snake_move(SNAKE * sp, MAP * mp);
+void snake_move(SNAKE * sp, MAP * mp);
 void snake_draw(BITMAP * bp, SNAKE * sp, int ox, int oy);
 
 #endif
--- /dev/null	2006-12-01 08:45:08.001995750 +0100
+++ alphabet-soup-1.1/unix.c	2006-12-01 11:20:56.000000000 +0100
@@ -0,0 +1,50 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+int check_and_create_dir(const char *name)
+{
+	struct stat stat_buffer;
+
+	if (stat(name, &stat_buffer))
+	{
+		/* error check if it doesn't exist or something else is wrong */
+		if (errno == ENOENT)
+		{
+			/* doesn't exist letts create it ;) */
+#ifdef BSD43
+			if (mkdir(name, 0775))
+#else
+				if (mkdir(name, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH))
+#endif
+				{
+					fprintf(stderr, "Error creating dir %s", name);
+					perror(" ");
+					return -1;
+				}
+		}
+		else
+		{
+			/* something else went wrong yell about it */
+			fprintf(stderr, "Error opening %s", name);
+			perror(" ");
+			return -1;
+		}
+	}
+	else
+	{
+		/* file exists check it's a dir otherwise yell about it */
+#ifdef BSD43
+		if (!(S_IFDIR & stat_buffer.st_mode))
+#else
+			if (!S_ISDIR(stat_buffer.st_mode))
+#endif
+			{
+				fprintf(stderr,"Error %s exists but isn't a dir\n", name);
+				return -1;
+			}
+	}
+	return 0;
+}


--- NEW FILE alphabet-soup.desktop ---
[Desktop Entry]
Encoding=UTF-8
Name=Alphabet Soup
Comment=Guide your worm through the soup to spell words
Exec=alphabet-soup
Icon=alphabet-soup.png
Terminal=false
StartupNotify=false
Type=Application
Categories=Game;


--- NEW FILE alphabet-soup.spec ---
Name:           alphabet-soup
Version:        1.1
Release:        2%{?dist}
Summary:        Guide your worm through the soup to spell words
Group:          Amusements/Games
License:        Freeware
URL:            http://www.t3-i.com/asoup.htm
Source0:        http://www.t3-i.com/ncdgames/as11src.zip
Source1:        alphabet-soup.desktop
Source2:        alphabet-soup.png
Patch0:         alphabet-soup-1.1-linux.patch
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires:  alfont-devel dumb-devel desktop-file-utils
Requires:       hicolor-icon-theme

%description
Guide your worm through the soup to spell words and earn points. Play the way
you like with several game mode selections. Words are chosen from one of three
included dictionaries, or import your own.


%prep
%setup -q -c
%patch0 -p1 -z .unix
sed -i 's/\r//' readme.txt


%build
make %{?_smp_mflags} -f Makefile.unix PREFIX=%{_prefix} \
  CFLAGS="$RPM_OPT_FLAGS -fsigned-char -Wno-deprecated-declarations"


%install
rm -rf $RPM_BUILD_ROOT
make -f Makefile.unix install PREFIX=$RPM_BUILD_ROOT%{_prefix}

# below is the desktop file and icon stuff.
mkdir -p $RPM_BUILD_ROOT%{_datadir}/applications
desktop-file-install --vendor fedora            \
  --dir $RPM_BUILD_ROOT%{_datadir}/applications \
  %{SOURCE1}
mkdir -p $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/48x48/apps
install -p -m 644 %{SOURCE2} \
  $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/48x48/apps


%clean
rm -rf $RPM_BUILD_ROOT


%post
touch --no-create %{_datadir}/icons/hicolor || :
if [ -x %{_bindir}/gtk-update-icon-cache ]; then
   %{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || :
fi

%postun
touch --no-create %{_datadir}/icons/hicolor || :
if [ -x %{_bindir}/gtk-update-icon-cache ]; then
   %{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || :
fi


%files
%defattr(-,root,root,-)
%doc readme.txt license-change.txt
%{_bindir}/%{name}
%{_datadir}/%{name}
%{_datadir}/applications/fedora-%{name}.desktop
%{_datadir}/icons/hicolor/48x48/apps/%{name}.png


%changelog
* Sun Dec  3 2006 Hans de Goede <j.w.r.degoede at hhs.nl> 1.1-2
- Add dumb-devel to BR (bz 218023)
- Add Requires hicolor-icon-theme (bz 218023)

* Fri Dec  1 2006 Hans de Goede <j.w.r.degoede at hhs.nl> 1.1-1
- Initial Fedora Extras package


Index: .cvsignore
===================================================================
RCS file: /cvs/extras/rpms/alphabet-soup/devel/.cvsignore,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- .cvsignore	4 Dec 2006 05:25:44 -0000	1.1
+++ .cvsignore	4 Dec 2006 05:26:51 -0000	1.2
@@ -0,0 +1 @@
+as11src.zip


Index: sources
===================================================================
RCS file: /cvs/extras/rpms/alphabet-soup/devel/sources,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- sources	4 Dec 2006 05:25:44 -0000	1.1
+++ sources	4 Dec 2006 05:26:51 -0000	1.2
@@ -0,0 +1 @@
+364fe30c53a86217db37f53308604f74  as11src.zip




More information about the scm-commits mailing list