| version 1.2, 2003/05/19 22:24:46 |
version 1.3, 2003/05/20 23:38:22 |
|
|
| /* $Platon: games/3do-view/3do-view.c,v 1.1.1.1 2003/05/11 18:48:36 nepto Exp $ */
|
/* $Platon: games/3do-view/3do-view.c,v 1.2 2003/05/19 22:24:46 nepto Exp $ */
|
|
|
|
| #include <stdio.h>
|
#include <stdio.h>
|
| #include <string.h>
|
#include <string.h>
|
|
|
| #if PLATON_SYSTEM_MSDOS
|
#if PLATON_SYSTEM_MSDOS
|
| # include <conio.h>
|
# include <conio.h>
|
| # include <dos.h>
|
# include <dos.h>
|
| |
# include <dir.h>
|
| #endif
|
#endif
|
|
|
|
| #include <typedef.h>
|
#include <typedef.h>
|
| Line 46 enum file_selector_modes |
|
| Line 47 enum file_selector_modes |
|
| {
|
{
|
| MODE_SELECTED_NONE,
|
MODE_SELECTED_NONE,
|
| MODE_SELECTED_DIRECTORY,
|
MODE_SELECTED_DIRECTORY,
|
| MODE_SELECTED_FILE
|
MODE_SELECTED_FILE,
|
| |
MODE_SELECTED_DIRECTORY_MOVE,
|
| |
MODE_SELECTED_FILE_MOVE
|
| };
|
};
|
|
|
|
| int q,k,l,pocbod,stop=0;
|
int q,k,l,pocbod,stop=0;
|
| Line 57 int bodxbase[100],bodybase[100],bodzbase |
|
| Line 60 int bodxbase[100],bodybase[100],bodzbase |
|
| int pocspoj[100],spoj[100][20];
|
int pocspoj[100],spoj[100][20];
|
|
|
|
| /* Function prototypes */
|
/* Function prototypes */
|
| void open_3do_file(const char *filename);
|
int open_3do_file(const char *filename);
|
| void vykresli(int color);
|
void vykresli(int color);
|
|
|
|
| void intro(void) /* {{{ */
|
void intro(void) /* {{{ */
|
| Line 213 void manual(void) /* {{{ */ |
|
| Line 216 void manual(void) /* {{{ */ |
|
| void file_selector(int mode, int item) /* {{{ */
|
void file_selector(int mode, int item) /* {{{ */
|
| {
|
{
|
| register int i;
|
register int i;
|
| static char **files = NULL;
|
static int files_offset = 0, directories_offset = 0;
|
| |
static int files_size = 0, directories_size = 0;
|
| static char **directories = NULL;
|
static char **directories = NULL;
|
| bar(10, 20, 500, 40);
|
static char **files = NULL;
|
| gl_printf(10, 30, "file_selector(%d, %d) ", mode, item);
|
char out_str[18];
|
| if (mode == MODE_SELECTED_DIRECTORY
|
if (mode == MODE_SELECTED_DIRECTORY) {
|
| && directories != NULL && files != NULL) {
|
item += directories_offset;
|
| free_directories_or_files(directories);
|
if (item >= 0 && item < directories_size)
|
| free_directories_or_files(files);
|
chdir(directories[item]);
|
| directories = NULL;
|
if (directories != NULL)
|
| files = NULL;
|
free_directories_or_files(directories);
|
| }
|
if (files != NULL)
|
| if (files == NULL && directories == NULL) {
|
free_directories_or_files(files);
|
| get_directories_and_files(NULL, &directories, &files);
|
directories = NULL;
|
| |
files = NULL;
|
| |
files_offset = 0;
|
| |
directories_offset = 0;
|
| |
} else if (mode == MODE_SELECTED_FILE) {
|
| |
item += files_offset;
|
| |
if (item >= 0 && item < files_size) {
|
| |
vykresli(BLACK);
|
| |
if (open_3do_file(files[item])) {
|
| |
settextjustify(LEFT_TEXT, TOP_TEXT);
|
| |
bar(1, 1, 470, 11);
|
| |
setcolor(WHITE);
|
| |
outtextxy(1, 1, files[item]);
|
| |
settextjustify(CENTER_TEXT, CENTER_TEXT);
|
| |
}
|
| |
vykresli(WHITE);
|
| |
}
|
| |
} else if (mode == MODE_SELECTED_DIRECTORY_MOVE) {
|
| |
directories_offset += item;
|
| |
directories_offset = min(directories_size - 14, directories_offset);
|
| |
directories_offset = max(0, directories_offset);
|
| |
} else if (mode == MODE_SELECTED_FILE_MOVE) {
|
| |
files_offset += item;
|
| |
files_offset = min(files_size - 14, files_offset);
|
| |
files_offset = max(0, files_offset);
|
| |
}
|
| |
if (directories == NULL && files == NULL) {
|
| |
get_directories_and_files(&directories, &files);
|
| |
for (i = 0; directories != NULL && directories[i] != NULL; i++);
|
| |
directories_size = i;
|
| |
for (i = 0; files != NULL && files[i] != NULL; i++);
|
| |
files_size = i;
|
| |
}
|
| |
if (q != MODE_FILE_SELECTION
|
| |
|| mode == MODE_SELECTED_DIRECTORY
|
| |
|| mode == MODE_SELECTED_DIRECTORY_MOVE
|
| |
|| mode == MODE_SELECTED_FILE_MOVE) {
|
| hidemouse();
|
hidemouse();
|
| setfillstyle(0,0);
|
setfillstyle(0,0);
|
| bar(480,1,638,478);
|
bar(480,1,638,478);
|
| outtextxy(559,16,"OTVORENIE SUBORU");
|
outtextxy(559,16,"OTVORENIE SUBORU");
|
| rectangle(486,387,633,440);
|
rectangle(486,387,633,440);
|
| outtextxy(559,430,"HLAVNE MENU");
|
outtextxy(559,430,"HLAVNE MENU");
|
| rectangle(486,57,633,200);
|
/* directories box */
|
| rectangle(486,207,633,350);
|
rectangle(486,37,633,185);
|
| |
rectangle(486,190,505,200);
|
| |
rectangle(509,190,524,200);
|
| |
rectangle(595,190,610,200);
|
| |
rectangle(614,190,633,200);
|
| |
setcolor(directories_offset == 0 ? LIGHTGRAY: WHITE);
|
| |
outtextxy(496, 196, "<<");
|
| |
outtextxy(517, 196, "<");
|
| |
setcolor(directories_offset == max(0, directories_size - 14) ? LIGHTGRAY : WHITE);
|
| |
outtextxy(603, 196, ">");
|
| |
outtextxy(624, 196, ">>");
|
| |
setcolor(WHITE);
|
| |
sprintf(out_str, "[%d]", directories_size);
|
| |
outtextxy(559, 196, out_str);
|
| |
/* files box */
|
| |
rectangle(486,207,633,355);
|
| |
rectangle(486,360,505,370);
|
| |
rectangle(509,360,524,370);
|
| |
rectangle(595,360,610,370);
|
| |
rectangle(614,360,633,370);
|
| |
setcolor(files_offset == 0 ? LIGHTGRAY : WHITE);
|
| |
outtextxy(496, 366, "<<");
|
| |
outtextxy(517, 366, "<");
|
| |
setcolor(files_offset == max(0, files_size - 14) ? LIGHTGRAY : WHITE);
|
| |
outtextxy(603, 366, ">");
|
| |
outtextxy(624, 366, ">>");
|
| |
setcolor(WHITE);
|
| |
sprintf(out_str, "[%d]", files_size);
|
| |
outtextxy(559, 366, out_str);
|
| settextjustify(LEFT_TEXT, CENTER_TEXT);
|
settextjustify(LEFT_TEXT, CENTER_TEXT);
|
| for (i = 0; directories != NULL && directories[i] != NULL; i++) {
|
for (i = 0; directories != NULL && directories[i] != NULL && i < 14; i++) {
|
| outtextxy(490, 67 + i * 10, directories[i]);
|
strncpy(out_str, directories[i + directories_offset], 18);
|
| |
if (strlen(directories[i + directories_offset]) > 17)
|
| |
strcpy(out_str + 15, "...");
|
| |
outtextxy(490, 47 + i * 10, out_str);
|
| }
|
}
|
| for (i = 0; files != NULL && files[i] != NULL; i++) {
|
for (i = 0; files != NULL && files[i] != NULL && i < 14; i++) {
|
| outtextxy(490, 217 + i * 10, files[i]);
|
strncpy(out_str, files[i + files_offset], 18);
|
| |
if (strlen(files[i + files_offset]) > 17)
|
| |
strcpy(out_str + 15, "...");
|
| |
outtextxy(490, 217 + i * 10, out_str);
|
| }
|
}
|
| settextjustify(CENTER_TEXT, CENTER_TEXT);
|
settextjustify(CENTER_TEXT, CENTER_TEXT);
|
| showmouse();
|
showmouse();
|
| delay(150);
|
if ((mode != MODE_SELECTED_DIRECTORY_MOVE || abs(item) > 1)
|
| }
|
&& (mode != MODE_SELECTED_FILE_MOVE || abs(item) > 1))
|
| if (mode == MODE_SELECTED_FILE) {
|
delay(160);
|
| vykresli(BLACK);
|
|
| switch (item) {
|
|
| case 0: open_3do_file("data/rocket.3do"); break;
|
|
| case 1: open_3do_file("data/cube.3do"); break;
|
|
| case 2: open_3do_file("data/pyramid.3do"); break;
|
|
| default: open_3do_file("data/stand.3do"); break;
|
|
| }
|
|
| vykresli(WHITE);
|
|
| }
|
}
|
| q = MODE_FILE_SELECTION;
|
q = MODE_FILE_SELECTION;
|
| } /* }}} */
|
} /* }}} */
|
| Line 378 BYTE isinbar(int x1,int y1,int x2,int y2 |
|
| Line 444 BYTE isinbar(int x1,int y1,int x2,int y2 |
|
| } /* }}} */
|
} /* }}} */
|
|
|
|
| /**************************** OPEN 3DO FILE *********************************/
|
/**************************** OPEN 3DO FILE *********************************/
|
| void open_3do_file(const char *filename) /* {{{ */
|
int open_3do_file(const char *filename) /* {{{ */
|
| {
|
{
|
| FILE *f;
|
FILE *f;
|
| if ((f=fopen(filename,"rt"))==NULL) {
|
if ((f = fopen(filename, "rt")) == NULL) {
|
| |
#if 0
|
| my_graph_close();
|
my_graph_close();
|
| printf("File not found. [%s]\n",filename);
|
printf("File not found. [%s]\n",filename);
|
| exit(1);
|
exit(1);
|
| |
#endif
|
| |
return 0;
|
| |
}
|
| |
if (fscanf(f,"%d",&pocbod) != 1) {
|
| |
fclose(f);
|
| |
return 0;
|
| }
|
}
|
| fscanf(f,"%d",&pocbod);
|
|
| for (k=1;k<=pocbod;k++) {
|
for (k=1;k<=pocbod;k++) {
|
| fscanf(f,"%d",&bodxbase[k]);
|
fscanf(f,"%d",&bodxbase[k]);
|
| fscanf(f,"%d",&bodybase[k]);
|
fscanf(f,"%d",&bodybase[k]);
|
| Line 399 void open_3do_file(const char *filename) |
|
| Line 471 void open_3do_file(const char *filename) |
|
| }
|
}
|
| }
|
}
|
| fclose(f);
|
fclose(f);
|
| |
return 1;
|
| } /* }}} */
|
} /* }}} */
|
|
|
|
| /**************************** HLAVNY PROGRAM ********************************/
|
/**************************** HLAVNY PROGRAM ********************************/
|
| Line 409 int main(int argc,char *argv[]) /* {{{ * |
|
| Line 482 int main(int argc,char *argv[]) /* {{{ * |
|
| if ((initmouse()!=2)&&(initmouse()!=3))ERROR1();
|
if ((initmouse()!=2)&&(initmouse()!=3))ERROR1();
|
| if (argc > 1) {
|
if (argc > 1) {
|
| if (strcmp(argv[1], "-h") && strcmp(argv[1], "--help"))
|
if (strcmp(argv[1], "-h") && strcmp(argv[1], "--help"))
|
| open_3do_file(argv[1]);
|
(void) open_3do_file(argv[1]);
|
| else
|
else
|
| ERROR2();
|
ERROR2();
|
| }
|
}
|
| Line 425 int main(int argc,char *argv[]) /* {{{ * |
|
| Line 498 int main(int argc,char *argv[]) /* {{{ * |
|
| p=OSX+OSY+OSZ;
|
p=OSX+OSY+OSZ;
|
| showmouse();
|
showmouse();
|
| while (q != MODE_QUIT) {
|
while (q != MODE_QUIT) {
|
| bar(0, 0, 200, 30);
|
|
| gl_printf(10, 10, "q = %d ", q);
|
|
| if (isinbar(486,387,633,440) == 1 && q == MODE_MAIN_MENU)
|
if (isinbar(486,387,633,440) == 1 && q == MODE_MAIN_MENU)
|
| quit();
|
quit();
|
| if (isinbar(486,297,633,350) == 1 && q == MODE_MAIN_MENU)
|
if (isinbar(486,297,633,350) == 1 && q == MODE_MAIN_MENU)
|
| Line 445 int main(int argc,char *argv[]) /* {{{ * |
|
| Line 516 int main(int argc,char *argv[]) /* {{{ * |
|
| manual();
|
manual();
|
| if (q == MODE_FILE_SELECTION) {
|
if (q == MODE_FILE_SELECTION) {
|
| int mode = MODE_SELECTED_NONE;
|
int mode = MODE_SELECTED_NONE;
|
| if (isinbar(486,57,633,200)) {
|
int item = 0;
|
| |
if (isinbar(486,37,633,185)) {
|
| mode = MODE_SELECTED_DIRECTORY;
|
mode = MODE_SELECTED_DIRECTORY;
|
| } else if (isinbar(486,207,633,350)) {
|
} else if (isinbar(486,207,633,355)) {
|
| mode = MODE_SELECTED_FILE;
|
mode = MODE_SELECTED_FILE;
|
| |
} else if (isinbar(486,190,505,200)) {
|
| |
mode = MODE_SELECTED_DIRECTORY_MOVE;
|
| |
item = -10;
|
| |
} else if (isinbar(509,190,524,200)) {
|
| |
mode = MODE_SELECTED_DIRECTORY_MOVE;
|
| |
item = -1;
|
| |
} else if (isinbar(595,190,610,200)) {
|
| |
mode = MODE_SELECTED_DIRECTORY_MOVE;
|
| |
item = 1;
|
| |
} else if (isinbar(614,190,633,200)) {
|
| |
mode = MODE_SELECTED_DIRECTORY_MOVE;
|
| |
item = 10;
|
| |
} else if (isinbar(486,360,505,370)) {
|
| |
mode = MODE_SELECTED_FILE_MOVE;
|
| |
item = -10;
|
| |
} else if (isinbar(509,360,524,370)) {
|
| |
mode = MODE_SELECTED_FILE_MOVE;
|
| |
item = -1;
|
| |
} else if (isinbar(595,360,610,370)) {
|
| |
mode = MODE_SELECTED_FILE_MOVE;
|
| |
item = 1;
|
| |
} else if (isinbar(614,360,633,370)) {
|
| |
mode = MODE_SELECTED_FILE_MOVE;
|
| |
item = 10;
|
| }
|
}
|
| if (mode != MODE_SELECTED_NONE) {
|
if (mode != MODE_SELECTED_NONE) {
|
| int yy;
|
if (item == 0) {
|
| getmousepos(NULL, (WORD *) &yy);
|
getmousepos(NULL, (WORD *) &item);
|
| yy -= mode == MODE_SELECTED_FILE ? 212 : 62;
|
item -= mode == MODE_SELECTED_FILE ? 212 : 42;
|
| yy /= 10;
|
item /= 10;
|
| yy = min(13, yy);
|
item = min(13, item);
|
| yy = max(0, yy);
|
item = max(0, item);
|
| file_selector(mode, yy);
|
}
|
| |
file_selector(mode, item);
|
| }
|
}
|
| }
|
}
|
| if (q == MODE_AUTOMATIC_TURNING) {
|
if (q == MODE_AUTOMATIC_TURNING) {
|