Pastey Simple database app

without warning
without type_check 
 
include std/eds.e 
include std/filesys.e 
include win32lib.ew 
 
--include cximage.ew 
 
ifdef not WINDOWS then 
	puts(1,"Software only runs under windows") 
	abort(1) 
end ifdef 
 
constant App = {"My Personal Game Database", "0.0.0.1", 2011/*year*/, 12/*month*/, 1/*day*/} 
 
-- if not CXI_Init() then 
-- 	abort(0) 
-- end if 
 
constant ptr = allocate(4) 
 
constant GameType = {"GameList","*.ginf"} 
 
constant PDF_FORMAT = {"PDF", "*.pdf"} 
 
constant ImageType = {"ImageFiles","*.bmp","*.png","*.gif","*.jpg","*.tga"} 
 
enum 
	TITLE, 
	DEVELOPER, 
	PUBLISHER, 
	YEAR, 
	GENRE, 
	SYSTEM, 
	INPUT, 
	MEDIA_STORAGE, 
	SAVE_STATE, 
	PLAYERS, 
	INFO, 
	IMAGES, 
	MANUAL, 
	ID, 
	RATING, 
	NETWORK_SYSTEM, 
	MEMORY, 
	ONLINE, 
	Last_Field, 
	$ 
 
integer handle = 0 
sequence file = "" 
 
sequence shortName = "" 
object buffer = {} 
 
integer players = 1 
integer images = 0 
integer image_count = 0 
integer image_total = 0 
 
integer current_image = 0 
integer next_image = 0 
integer last_image = 0 
 
integer games = 0 
integer current_game = 0 
integer total_games = 0 
 
atom game_image = 0 
 
sequence ImageList = {current_image,next_image,last_image} 
 
sequence sGame_Added = "Game Added to Database" 
sequence sGame_Removed = "Game removed from database" 
 
sequence sStorageMedia = {"Cartridge","CD-ROM","DVD-ROM","Floppy","Card","Blu-ray","HDDVD-Rom","Hucard"} 
 
sequence szInputs = {"GamePad", "Gun", "Trackpad", "Headset", "Remote", "Mic", "Mouse", "Keyboard", 
					 "Body Movement", --body movement for input (kinect, playstation movie, etc) 
					 "SteeringWheel + Pedals", 
					 "Guitar", "Drums", "Bass", "Vocals", "Keyboards", "Real-Guitar" 
					 } 
 
sequence szMemories = {"Built-in Memory", "Memory Card", "Harddrive", "Flashdrive", "Battery-Backup" } 
 
sequence szPlayers = {"1-Player", "2-Players", "1-3 Players", "1-4 Players", "1-5 Players", "1-6 Players", "1-7 Players", "1-8 Players"} 
 
sequence sYesNo = {"Yes", "No"} 
 
sequence sDialup = "Dial-up" 
sequence sDSL = "DSL" 
sequence sBroadband = "Broadband" 
 
sequence sRating = {"EC", "E", "E10", "T", "M", "A", "K-A"} 
 
sequence sLSystem = {"Atari-2600","Atari-5200","Atari-7800","Atari-XEGS","Atari Jaguar", 
					"NES", "SNES", "N64", "Gamecube", "PS1","PS2","PS3","Xbox","Xbox 360", 
					"Wii", "Gameboy", "Gameboy Color","Gameboy Advance","Gameboy DS","Gamebody 3DS", 
					"PSP","Windows","MS-DOS", "GNU/Linux", "FreeBSD","AmigaOS", "MacOS","PC6000", 
					"PC8801","PC98","Turbo-Grafx16","Wonderswan","Commodore 64","Virtual Boy","Sega Master System", 
					"Sega Genesis/Megadrive","Sega Saturn","Sega Dreamcast","Neo-Geo","Neo-Geo CD", 
					"Neo-Geo Pocket","Arcade"} --43 
 
constant MainWin = createEx(Window,"My Personal Game Database - Geek Punk Games",0,Default,Default,800,600,0,0), 
MainStat = createEx(StatusBar,"",MainWin,0,0,0,0,0,0) 
 
constant 
	File = createEx(Menu,"&File",MainWin,0,0,0,0,0,0), 
		File_Open = createEx(MenuItem,"Open exiting DB",File,0,0,0,0,0,0), 
		File_New  = createEx(MenuItem,"Create new DB",File,0,0,0,0,0,0), 
		File_Exit = createEx(MenuItem,"Exit",File,0,0,0,0,0,0) 
 
constant 
	About = createEx(Menu,"&About",MainWin,0,0,0,0,0,0), 
		About_Now = createEx(MenuItem,"About MPGD",About,0,0,0,0,0,0) 
 
constant 
	Title_Text = createEx(LText,   "Title:", MainWin, 10, 30,  40, 20, 0, 0), 
	Title_Edit = createEx(EditText,"",       MainWin, 90, 30, 130, 22, 0, 0), 
 
	Developer_Text = createEx(LText,"Developer:",MainWin,10,60,55,20,0,0), 
	Developer_Edit = createEx(EditText,"",MainWin,90,60,130,22,0,0), 
 
	Publisher_Text = createEx(LText,"Publisher:",MainWin,10,90,55,20,0,0), 
	Publisher_Edit = createEx(EditText,"",MainWin,90,90,130,22,0,0), 
 
	Genre_Text = createEx(LText,"Genre:",MainWin,10,120,55,20,0,0), 
	Genre_Edit = createEx(EditText,"",MainWin,90,120,130,22,0,0), 
 
	Info_Text = createEx(LText,"Info:",MainWin,10,150,40,20,0,0), 
	Info_Edit = createEx(EditText,"",MainWin,90,150,190,130,0,0) 
 
constant Year_Text = createEx(LText,"Year:",MainWin,10,300,40,20,0,0), 
Year_DropDown = createEx(DropDownList,"",MainWin,90,300,120,20,0,0), 
SaveState_Text = createEx(LText,"SaveState:",MainWin,10,330,60,20,0,0), 
SaveState_DropDown = createEx(DropDownList,"",MainWin,90,330,120,20,0,0), 
Input_Text = createEx(LText,"Input:",MainWin,10,360,60,20,0,0), 
Input_DropDown = createEx(DropDownList,"",MainWin,90,360,120,20,0,0), 
Memory_Text = createEx(LText,"Memory:",MainWin,10,390,60,20,0,0), 
Memory_DropDown = createEx(DropDownList,"",MainWin,90,390,120,20,0,0), 
System_Text = createEx(LText,"System:",MainWin,10,420,60,20,0,0), 
System_DropDown = createEx(DropDownList,"",MainWin,90,420,120,20,0,0) 
 
constant 
	StorageMedia_Text = createEx(LText,"StorageMedia:",MainWin,250,300,80,20,0,0), 
	StorageMedia_DropDown = createEx(DropDownList,"",MainWin,340,300,120,20,0,0), 
	Online_Text = createEx(LText,"Online",MainWin,250,330,65,20,0,0), 
	Online_DropDown = createEx(DropDownList,"",MainWin,340,330,120,20,0,0), 
	Players_Text = createEx(LText,"Players:",MainWin,250,360,60,20,0,0), 
	Players_DropDown = createEx(DropDownList,"",MainWin,340,360,120,20,0,0), 
	Rating_Text = createEx(LText,"Rating:",MainWin,250,390,60,20,0,0), 
	Rating_DropDown = createEx(DropDownList,"",MainWin,340,390,120,20,0,0) 
 
constant 
	NewDB_Window = createEx(Window, "New Database", 0, 50, 50, 560, 150, 0, 0), 
	NDB_Label    = createEx(LText,  "Database Name:", NewDB_Window, 10, 20, 14*8, 20, 0, 0), 
	NDB_Text     = createEx(EditText, "",             NewDB_Window, 10 + 14*8 + 2, 20, 50*8, 22, 0, 0), 
	NDB_Close    = createEx(Button, "Ok",             NewDB_Window, 10, 50, 60, 20, w32AUTOCLOSE, 0), 
	NDB_Cancel   = createEx(Button, "Cancel",         NewDB_Window, 80, 50, 60, 20, w32AUTOCLOSE, 0), 
	NDB_Delete   = createEx(CheckBox, "Clear existing?", NewDB_Window, 400, 50, 150, 20, 0, 0) 
 
-------------------------------------------- 
procedure Load_DropDown( integer pID, sequence pData, integer pRange = 0) 
-------------------------------------------- 
	addItem(pID, "n/a") 
	if pRange then 
		for i = pData[1] to pData[2] do 
			addItem(pID, sprintf("%g", i)) 
		end for 
	else 
		for i = 1 to length(pData) do 
			addItem(pID, pData[i]) 
		end for 
	end if 
end procedure 
 
Load_DropDown(Players_DropDown,      szPlayers) 
Load_DropDown(Rating_DropDown,       sRating) 
Load_DropDown(Memory_DropDown,       szMemories) 
Load_DropDown(Input_DropDown,        szInputs) 
Load_DropDown(StorageMedia_DropDown, sStorageMedia) 
Load_DropDown(SaveState_DropDown,    sYesNo) 
Load_DropDown(Online_DropDown,       sYesNo) 
Load_DropDown(System_DropDown,       sLSystem) 
Load_DropDown(Year_DropDown,         {1970, 2025}, w32True) 
 
 
constant 
	Add = createEx(PushButton,"Update",MainWin,10,480,100,25,0,0), 
	Remove = createEx(PushButton,"Remove",MainWin,110,480,100,25,0,0) 
setEnable({Add,Remove}, 0) 
 
constant 
	Image_Grp = createEx(GroupBox,"Image",MainWin,500,30,250,250,0,0), 
	Image_Win = createEx(Window,"",MainWin,510,50,230,180,{WS_CHILD,WS_CLIPSIBLINGS,WS_VISIBLE},0), 
	Image_Add = createEx(PushButton,"Add",MainWin,510,240,100,25,0,0), 
	Image_Remove = createEx(PushButton,"Remove",MainWin,630,240,100,25,0,0) 
 
constant 
	Exit_Push = createEx(PushButton,"Exit",MainWin,660,480,100,25,0,0) 
 
setWindowBackColor(Image_Win,Black) 
 
constant 
	GameList_Grp = createEx(Group,"Game List",MainWin,300,30,180,150,0,0), 
	Game_List = createEx(List,"",MainWin,310,50,150,120,0,0) 
 
setHint(Info_Edit,"A brief description of the game.") 
 
setHint(Add,"Add or update game in the database.") 
setHint(Remove,"Remove game from database") 
 
setHint(Game_List,"Title of game is displayed in box, other fields are filled in when game is selected.") 
 
-------------------------------------------- 
procedure show_list_item(integer pID, sequence pData) 
-------------------------------------------- 
	integer idx 
 
	idx = findItem(pID, pData, 1) 
	if idx > 0 then 
		setIndex(pID, idx) 
	else 
		setIndex(pID, 0) 
	end if 
	 
end procedure 
 
integer DBOpen = 0 
-------------------------------------------- 
procedure OpenDB(integer self, integer event, sequence parm) 
-------------------------------------------- 
	sequence game_data 
	sequence fName 
 
	setText(MainStat,"") 
	fName = getOpenFileName(MainWin,file,GameType) 
 
	if length(fName) = 0 then 
		return 
	end if 
 
	db_close()	-- Close any that might still be open. 
	DBOpen = 0 
	 
	if db_open(fName) != DB_OK then 
		setText(MainStat,"Failed to open database") 
		return 
	end if 
 
	if db_select_table("gameapp") != DB_OK then 
		setText(MainStat,"Not a game database") 
		return 
	end if 
 
	if db_select_table("gamemaster") != DB_OK then 
		setText(MainStat,"Not a game database") 
		return 
	end if 
 
 
	eraseItems(Game_List) 
	if db_table_size() > 0 then 
		for i = 1 to db_table_size() do 
			game_data = db_record_data(i) 
			addItem(Game_List, game_data[TITLE]) 
		end for 
	 
		-- Show inital data from db. 
		setIndex(Game_List, 1) 
		invokeHandler(Game_List, w32HClick, {}) 
 
	else 
		setText(Add, "Add") 
	end if 
	setEnable({Add,Remove}, 1) 
	DBOpen = 1 
	 
end procedure 
setHandler(File_Open,w32HClick,routine_id("OpenDB")) 
 
-------------------------------------------- 
procedure NewDB(integer self, integer event, sequence parm) 
-------------------------------------------- 
	sequence fName 
 
	setText(MainStat,"") 
	eraseItems(Game_List) 
	db_close() 
 
 
	openDialog(NewDB_Window) 
 
	fName = getText(NDB_Text) 
	if length(fName) = 0 then 
		return 
	end if 
	fName = defaultext(fName, "ginf") 
 
	if isChecked(NDB_Delete) then 
		delete_file(fName) 
	end if 
 
	if db_create(fName) != DB_OK then 
		setText(MainStat, "Failed to create database") 
		return 
	end if 
 
	db_select(fName) 
 
	db_create_table("gamemaster") 
	if db_select_table("gamemaster") != DB_OK then 
		setText(MainStat, "Failed to initialize database") 
		return 
	end if 
 
	db_create_table("gameapp") 
	if db_select_table("gameapp") != DB_OK then 
		setText(MainStat, "Failed to initialize database") 
		return 
	end if 
 
	db_insert("Name", App[1]) 
	db_insert("Version", App[2]) 
	db_insert("Date", App[3..5]) 
 
	setEnable(Add, 1) 
end procedure 
setHandler(File_New,w32HClick,routine_id("NewDB")) 
 
 
-------------------------------------------- 
procedure AddGame(integer self, integer event, sequence parm) 
-------------------------------------------- 
 
	sequence newrecord 
	sequence newkey 
	integer recid 
	sequence msg 
 
	if not DBOpen then 
		return 
	end if 
	 
	setText(MainStat,"") 
 
	if db_select_table("gamemaster") != DB_OK then 
		setText(MainStat, "Database might not be open") 
		return 
	end if 
 
 
	newrecord = repeat(0, Last_Field - 1) 
 
	newkey = getText(Title_Edit) 
	if length(newkey) = 0 then 
		return -- No key so no updating done. 
	end if 
 
	newrecord[TITLE]         = newkey 
	newrecord[DEVELOPER]     = getText(Developer_Edit) 
	newrecord[PUBLISHER]     = getText(Publisher_Edit) 
	newrecord[GENRE]         = getText(Genre_Edit) 
	newrecord[INFO]          = getText(Info_Edit) 
	newrecord[YEAR]          = getText(Year_DropDown) 
	newrecord[SAVE_STATE]    = getText(SaveState_DropDown) 
	newrecord[INPUT]         = getText(Input_DropDown) 
	newrecord[MEMORY]        = getText(Memory_DropDown) 
	newrecord[SYSTEM]        = getText(System_DropDown) 
	newrecord[MEDIA_STORAGE] = getText(StorageMedia_DropDown) 
	newrecord[ONLINE]        = getText(Online_DropDown) 
	newrecord[PLAYERS]       = getText(Players_DropDown) 
	newrecord[RATING]        = getText(Rating_DropDown) 
 
	-- These fields are not getting any data yet. 
-- 	newrecord[IMAGES] = ? 
-- 	newrecord[MANUAL] = ? 
-- 	newrecord[ID] = ? 
-- 	newrecord[NETWORK_SYSTEM] = ? 
 
		-- save image 
-- 		buffer = CXI_SaveImage(game_image,ptr,CXI_FORMAT_JPG) 
-- 		if buffer <= 0 then 
-- 			abort(0) 
-- 		end if 
 
 
	-- See if record already exists in the DB 
	recid = db_find_key(newkey) 
	if recid > 0 then 
		-- it exists so we are updating the record. 
		db_replace_data(recid, newrecord) 
		msg = "Game Updated" 
	else 
		-- it doesn't exist so we are adding the record 
		db_insert(newkey, newrecord) 
		msg = "Game Added!" 
 
		-- Rebuild the game list 
		eraseItems(Game_List) 
		for i = 1 to db_table_size() do 
			newrecord = db_record_data(i) 
			addItem(Game_List, newrecord[TITLE]) 
		end for 
	end if 
 
	-- Ensure game list shows item just added/updated. 
	show_list_item(Game_List, newkey) 
	setText(Add, "Update") 
 
	setText(MainStat, msg) 
 
end procedure 
setHandler(Add,w32HClick,routine_id("AddGame")) 
 
-------------------------------------------- 
procedure RemoveGame(integer self, integer event, sequence parm) 
-------------------------------------------- 
 
	sequence newrecord 
	sequence newkey 
	integer recid 
	sequence msg 
 
	if not DBOpen then 
		return 
	end if 
	 
	setText(MainStat,"") 
 
	if db_select_table("gamemaster") != DB_OK then 
		setText(MainStat, "Database might not be open") 
		return 
	end if 
 
 
	newkey =