Platon Technologies
not logged in Login Registration
EnglishSlovak
open source software development celebrating 10 years of open source development! Friday, October 16, 2026

Diff for games/3do-view/3do-view.c between version 1.2 and 1.3

version 1.2, 2003/05/19 22:24:46 version 1.3, 2003/05/20 23:38:22
Line 1 
Line 1 
 /* $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>
Line 14 
Line 14 
 #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) {

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

Platon Group <platon@platon.org> http://platon.org/
Copyright © 2002-2006 Platon Group
Site powered by Metafox CMS
Go to Top