00001 #include "engine.h"
00002
00003 #define SET_MENU_LEFT 98
00004 #define SET_MENU_WIDTH 60
00005
00006
00007 int pick_set(void)
00008 {
00009 SYM_ENTRY *SymPtr;
00010 int num_files = 0;
00011 int num_files_alloced = 8;
00012 int retval = 1;
00013 char temp_filename[32];
00014
00015 int top, height, ii, selection, input;
00016 char **ftab = (char**)malloc_throw(num_files_alloced * sizeof(char**));
00017 static int is_first_time = 1;
00018
00019 FolderOp(SYMSTR("\x7F") , FOP_LOCK);
00020
00021
00022
00023 SymPtr = SymFindFirst(SYMSTR(""), FO_RECURSE);
00024
00025 while(SymPtr)
00026 {
00027 strcpy(temp_filename, SymFindFolderName());
00028 strcat(temp_filename, "\\");
00029 strcat(temp_filename, SymPtr->name);
00030 if(match_extension(temp_filename, "SKye"))
00031 {
00032 if(num_files+1 >= num_files_alloced) {
00033 num_files_alloced += 8;
00034 ftab = (char**)realloc_throw(ftab,
00035 num_files_alloced * sizeof(char**));
00036 }
00037 ftab[num_files] = (char*)alloca( strlen(temp_filename)+1 );
00038 strcpy(ftab[num_files], temp_filename);
00039 num_files++;
00040 }
00041
00042 SymPtr = SymFindNext();
00043 }
00044
00045 FolderOp(SYMSTR("\x7F") , FOP_UNLOCK);
00046
00047 clear_screen();
00048
00049 if(num_files==0) {
00050 draw_string("No levels found!", 20, 40, F_6x8);
00051 read_char();
00052 retval = 0;
00053 goto ret;
00054 }
00055 if(num_files==1) {
00056 strcpy(active_set, ftab[0]);
00057 retval = is_first_time;
00058
00059 goto ret;
00060 }
00061
00062
00063 draw_string("SKye", 25, 15, F_8x10);
00064 draw_string(VERSION_STRING, 32, 26, F_4x6);
00065 draw_string("By Jim Babcock", 13, 35, F_4x6);
00066 draw_string("Based on Kye by Dillon", 5, 47, F_4x6);
00067 draw_string("Collins and on Kye by", 5, 54, F_4x6);
00068 draw_string("Colin Garbutt.", 5, 61, F_4x6);
00069
00070
00071
00072 height = num_files*6 + 2;
00073 top = 50-(height/2);
00074 draw_rect(SET_MENU_LEFT, top, SET_MENU_WIDTH, height);
00075 for(ii=0; ii<num_files; ii++)
00076 draw_string(ftab[ii], SET_MENU_LEFT+2, top + 1 + ii*6, F_4x6);
00077 selection = 0;
00078
00079 xor_rect(SET_MENU_LEFT+1, top+1+selection*6,
00080 SET_MENU_WIDTH-2, 6);
00081 do
00082 {
00083 input = read_char();
00084 xor_rect(SET_MENU_LEFT+1, top+1+selection*6,
00085 SET_MENU_WIDTH-2, 6);
00086
00087 if (input == KEY_DOWN) {
00088 selection++;
00089 selection %= num_files;
00090 } else if(input == KEY_UP) {
00091 if(selection==0) selection = num_files-1;
00092 else selection--;
00093 } else if(input == KEY_ENTER) {
00094 strcpy(active_set, ftab[selection]);
00095 goto ret;
00096 } else if(input == KEY_ESC) {
00097 strcpy(active_set, ftab[selection]);
00098 retval = 0;
00099 goto ret;
00100 }
00101
00102 xor_rect(SET_MENU_LEFT+1, top+1+selection*6,
00103 SET_MENU_WIDTH-2, 6);
00104 } while(1);
00105
00106 ret:
00107 if(ftab) free(ftab);
00108 is_first_time = 0;
00109 return retval;
00110 }
00111
00112
00113
00114 int match_extension(const char *filename, const char *typename)
00115 {
00116 FILE *fin = fopen(filename, "rb");
00117 unsigned char ftype;
00118 int len;
00119 char type[8];
00120 int ret = 0;
00121
00122 if(!fin) return 0;
00123
00124 len = strlen(typename);
00125 if(len>=8) len = 7;
00126
00127 fseek(fin, -1, SEEK_END);
00128 ftype = fgetc(fin);
00129
00130 if(ftype == OTH_TAG) {
00131 fseek(fin, -(strlen(typename)+2), SEEK_CUR);
00132 fread(type, strlen(typename)+1, 1, fin);
00133 if(!strcmp(type, typename))
00134 ret = 1;
00135 }
00136
00137 fclose(fin);
00138 return ret;
00139 }
00140