Main Page | Modules | Alphabetical List | Data Structures | File List | Data Fields | Globals | Related Pages

sys/curses/main.c

Go to the documentation of this file.
00001 #include "crogue.h"
00002 
00003 static void init_file_prefix(const char *prefix);
00004 static void handle_args(int argc, char **argv);
00005 
00006 //{{{
00007 int main(int argc, char **argv)
00008 {
00009     init_file_prefix(argv[0]);
00010     handle_args(argc, argv);
00011     initialize();
00012     eventloop();
00013     return 0;
00014 }
00015 //}}}
00016 char *file_prefix;
00017 //{{{
00018 static void init_file_prefix(const char *prefix)
00019 {
00020     int ii, jj;
00021     
00022     for(ii=strlen(prefix)-1; ii>=0; ii--) {
00023         if(prefix[ii] == '/' || prefix[ii] == '\\')
00024             break;
00025     }
00026     
00027     file_prefix = (char*)malloc_throw(ii+1);
00028     for(jj=0; jj<=ii; jj++)
00029         file_prefix[jj] = prefix[jj];
00030     file_prefix[jj] = '\0';
00031 }
00032 //}}}
00033 
00034 //{{{
00035 static void handle_args(int argc, char **argv)
00036 {
00037 //  int ii;
00038 //  for(ii=1; ii<argc; ii++)
00039 //  {
00040 //      if(!strcmp(argv[ii], "-h")) {
00041 //          printf("Usage: %s [-L language]\n", argv[0]);
00042 //          exit(0);
00043 //      }
00044 //      if(!strcmp(argv[ii], "-L")) {
00045 //          ii++;
00046 //          if(ii>=argc) {
00047 //              fprintf(stderr, "You must specify a language file.\n");
00048 //              exit(1);
00049 //          }
00050 //          if( gettext_open(argv[ii]) == 0 ) // Error opening
00051 //          {
00052 //              fprintf(stderr, "Error opening language file.\n"
00053 //                              "Press ENTER to continue\n");
00054 //              getchar();
00055 //              fflush(stdin);
00056 //          }
00057 //      }
00058 //  }
00059 }
00060 //}}}
00061 
00062 //{{{
00063 const char *asciistart[24] =
00064     {
00065 " +--------------------------------------------------------------------------+   ",
00066 " |                ########                             #####                |   ",
00067 " |              #######                                  #####              |   ",
00068 " |            #######             ###############         #####             |   ",
00069 " |           ######           ######################       #####            |   ",
00070 " |           #####          ########  # #   #  ######       #####           |   ",
00071 " |          ######        ####### CalcRogue ###########      #####          |   ",
00072 " |          #####        #######    by Jim Babcock #####      ####          |   ",
00073 " |         ######        ######    ####+##  #############     #####         |   ",
00074 " |         ######       ######     #.....#  #       #####     #####         |   ",
00075 " |         ######       ############..V.T#  #  }    #####     #####         |   ",
00076 " |         ######       ######     +.D...#  #       ######    #####         |   ",
00077 " |         ######       ############.W..@#  #       #####     #####         |   ",
00078 " |          ######      ######     #####-####+##########     #####          |   ",
00079 " |          ######       ######    #   ...     +   ######   ######          |   ",
00080 " |           ######       ######   ##############################           |   ",
00081 " |            ######       ########              ##############             |   ",
00082 " |             ######         ######################  ########              |   ",
00083 " |              #######         ##################      ####                |   ",
00084 " |                ########         ###########                  ###         |   ",
00085 " |                   ########                                 #####         |   ",
00086 " |                     ##########                          #######          |   ",
00087 " +--------------------------------------------------------------------------+   ",
00088 "                                                                                "
00089     };
00090 //}}}
00091 //{{{
00092 const char *asciicolors[24] = {
00093 " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB   ",
00094 " B                ########                             #####                B   ",
00095 " B              #######                                  #####              B   ",
00096 " B            #######             ###############         #####             B   ",
00097 " B           ######           ######################       #####            B   ",
00098 " B           #####          ########uuuuuuuuuuu######       #####           B   ",
00099 " B          ######        #######uWWWWWWWWWuuuuuu######      #####          B   ",
00100 " B          #####        #######uuuuWWWWWWWWWWWWWWu#####      ####          B   ",
00101 " B         ######        ######uuuuuuuuuuuuuuuuuuuuu#####     #####         B   ",
00102 " B         ######       ######uuuuuuuuuuuuuuuuuuuuuu#####     #####         B   ",
00103 " B         ######       ######uuuuuuuuuuuuuuuuuuuuuuu####     #####         B   ",
00104 " B         ######       ######uuuuuuuuuuuuuuuuuuuuuu######    #####         B   ",
00105 " B         ######       ######uuuuuuuuuuuuuuuuuuuuuu#####     #####         B   ",
00106 " B          ######      ######uuuuuuuuuuuuuuuuuuuuuu####     #####          B   ",
00107 " B          ######       ######uuuuuuuuuuuuuuuuuuuu######   ######          B   ",
00108 " B           ######       ######uuuuuuuuuuuuuuuuuu###############           B   ",
00109 " B            ######       ########uuuuuuuuuuuuuu##############             B   ",
00110 " B             ######         ######################  ########              B   ",
00111 " B              #######         ##################      ####                B   ",
00112 " B                ########         ###########                  ###         B   ",
00113 " B                   ########                                 #####         B   ",
00114 " B                     ##########                          #######          B   ",
00115 " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB   ",
00116 "                                                                                "
00117     };
00118 //}}}
00119 
00120 //{{{
00121 void display_title_screen(void)
00122 {
00123     int ii, jj, color;
00124     for(ii=0; ii<24; ii++)
00125     for(jj=0; jj<80; jj++)
00126     {
00127         switch(toupper(asciicolors[ii][jj])) {
00128             case 'Y': color = YELLOW; break;
00129             case 'U': color = BLUE;   break;
00130             case 'R': color = RED;    break;
00131             case 'B': color = BLACK;  break;
00132             default:  color = WHITE;  break;
00133         }
00134         attroff(COLOR_PAIR(DEFAULT_COLOR));
00135         if(isupper(asciicolors[ii][jj]))
00136             attron(A_BOLD);
00137         attron(COLOR_PAIR(color+1));
00138         mvaddch(ii, jj, asciistart[ii][jj]);
00139         attroff(COLOR_PAIR(color+1));
00140         if(isupper(asciicolors[ii][jj]))
00141             attroff(A_BOLD);
00142     }
00143     attron(A_BOLD);
00144     mvaddstr(20, 50, CROGUE_VERSION);
00145     attroff(A_BOLD);
00146 }
00147 //}}}
00148 //{{{
00149 void init_layout(void)
00150 {
00151     uint tilefield_top, tilefield_bottom;
00152     uint tilefield_height;
00153     uint tilefield_width;
00154     uint tile_size;
00155     uint status_pos;
00156     const char *tileset;
00157     
00158     tileset = tiles;
00159     tile_size = 1;
00160     
00161     status_pos = SCREEN_HEIGHT - 2;
00162     tilefield_top = 2;
00163     tilefield_bottom = status_pos - 1;
00164     tilefield_height = tilefield_bottom-tilefield_top;
00165     
00166     tilefield_width = SCREEN_WIDTH/tile_size;
00167     
00168     UI_Status_Place(status_pos, tilefield_height + tilefield_top);
00169     
00170     UI_TF_Place(
00171             COORD(0, tilefield_top),
00172             COORD(tilefield_width, tilefield_height/tile_size),
00173             tileset,
00174             tile_size, tile_size
00175             );
00176 }
00177 //}}}
00178 
00179 //{{{
00180 void sys_init(void)
00181 {
00182     (void)initscr();
00183     if(has_colors())
00184     {
00185         if(start_color() == ERR)
00186             panic("Error initializing color.");
00187         init_pair(1, COLOR_BLACK,   COLOR_BLACK);
00188         init_pair(2, COLOR_RED,     COLOR_BLACK);
00189         init_pair(3, COLOR_GREEN,   COLOR_BLACK);
00190         init_pair(4, COLOR_YELLOW,  COLOR_BLACK);
00191         init_pair(5, COLOR_BLUE,    COLOR_BLACK);
00192         init_pair(6, COLOR_MAGENTA, COLOR_BLACK);
00193         init_pair(7, COLOR_CYAN,    COLOR_BLACK);
00194         init_pair(8, COLOR_WHITE,   COLOR_BLACK);
00195     }
00196     if(attron(COLOR_PAIR(DEFAULT_COLOR)) == ERR)
00197         panic("attron() returned ERR");
00198     if(attroff(A_BOLD) == ERR)
00199         panic("attroff() returned ERR");
00200     noecho();
00201     cbreak();
00202     if(notimeout(stdscr, TRUE) == ERR)
00203         panic("notimeout() returned ERR");
00204     if(keypad(stdscr, TRUE) == ERR)
00205         panic("keypad() returned ERR");
00206 #   ifdef USE_NCURSES
00207         ESCDELAY=0;
00208 #   endif
00209 }
00210 //}}}
00211 //{{{
00212 void sys_init_data_file(void)
00213 {
00214     FILE *constfile;
00215     
00216     // Load constant-data file
00217     constfile = fopen(retprintf("%s%s", file_prefix, DATAFILENAME_PC), "rb");
00218     if(!constfile)
00219         panic("Couldn't open constant data file.");
00220     // This is much simpler than figuring out how large the file really is.
00221     // We know it can't be more than 64k, because then it wouldn't fit in
00222     // the calculator version. Of course this is wasting memory, but it's
00223     // not in any mem-critical environments.
00224     w->constfileoffset = debug_malloc(65536);
00225     (void)fread(w->constfileoffset, 65536, 1, constfile);
00226     memcpy(&w->desc, w->constfileoffset, sizeof(struct world_descriptor));
00227     fclose(constfile);
00228     
00229     link_data_file();
00230 }
00231 //}}}
00232 //{{{
00233 void sys_cleanup(void)
00234 {
00235     if(w && w->constfileoffset)
00236         free(w->constfileoffset);
00237     clrscr();
00238     move(0, 0);
00239     endwin();
00240 }
00241 //}}}
00242 
00243 //{{{
00244 int curses_title_screen(void)
00245 {
00246     int choice;
00247     clrscr();
00248     
00249     display_title_screen();
00250     
00251     do {
00252         choice = read_char();
00253     } while(choice < 'a' || choice > 'e');
00254     choice -= 'a';
00255     return choice;
00256 }
00257 //}}}
00258 

Generated on Thu May 20 13:12:11 2004 for CalcRogue by doxygen 1.3.6