示例#1
0
void init(void)
  {
    mapy_init();
    ddl_init();
    vga_font = LoadResourceFont("BOLDCZ");
    default_font = vga_font;
    icones = LoadResourceFont("IKONY");
    graph_init(1);
    curcolor = RGB555(24,24,24);memcpy(charcolors,flat_color(0x0000),sizeof(charcolors));
    init_events(100);
    curfont = default_font;
    register_ms_cursor(LoadResourceFont("SIPKA.HI"));
    init_mysky();
//    hranice_mysky(0,0,639,479);
    add_task(1024,key_test);
    send_message(E_ADD,E_STATUS_LINE,status_line);
    send_message(E_STATUS_LINE,E_ADD,E_IDLE,all_status);
    send_message(E_STATUS_LINE,E_ADD,E_IDLE,status_mem_info);
    send_message(E_STATUS_LINE,E_ADD,E_IDLE,show_time);
    send_message(E_ADD,E_TIMER,pc_metter);
    send_message(E_ADD,E_KEYBOARD,exit_key);
    send_message(E_ADD,E_PRGERROR,prg_error);
    signal(SIGILL,raise_error_conv);
    signal(SIGSEGV,raise_error_conv);
    install_gui();
    redraw_desktop();do_events();
    send_message(E_ADD,E_MOUSE,main_menu);
    msg_box_font = vga_font;
    msg_icn_font = icones;
    ukaz_mysku();
    update_mysky();
    }
示例#2
0
static gboolean queue_redraw (gpointer data)
{
  ClutterActor *stage = CLUTTER_ACTOR (data);
  clutter_actor_queue_redraw (stage);
  do_events (stage);
  return TRUE;
}
示例#3
0
/** handle nested comments and simple minded Prolog syntax
  */
void plMiniSyntax::highlightBlock(const QString &text)
{
    // simple state machine
    int nb = currentBlock().blockNumber();
    if (nb > 0) {
        setCurrentBlockState(previousBlockState());
        if (nb % 10 == 0)
            do_events();
    }
    else {
        startToEnd.start();
        qDebug() << "starting at " << QTime::currentTime();
        setCurrentBlockState(0);
    }

    for (int i = 0, j, l; ; i = j + l)
        if (currentBlockState()) {              // in multiline comment
            if ((j = text.indexOf("*/", i)) == -1) {
                setFormat(i, text.length() - i, fmt[Comment]);
                break;
            }
            setFormat(i, j - i + (l = 2), fmt[Comment]);
            setCurrentBlockState(0);
        } else {
            if ((j = text.indexOf("/*", i)) >= 0) {         // begin multiline comment
                setFormat(j, l = 2, fmt[Comment]);
                setCurrentBlockState(1);
            } else {
                if ((j = tokens.indexIn(text, i)) == -1)
                    break;
                QStringList ml = tokens.capturedTexts();
                Q_ASSERT(ml.length() == 5+1);
                if ((l = ml[1].length())) {         // number
                    setFormat(j, l, fmt[Number]);
                } else if ((l = ml[2].length())) {  // symbol
                    setFormat(j, l, fmt[Atom]);
                } else if ((l = ml[3].length())) {  // var
                    setFormat(j, l, fmt[Variable]);
                } else if ((l = ml[4].length())) {  // quoted
                    setFormat(j, l, fmt[String]);
                } else if ((l = ml[5].length())) {  // operator
                    setFormat(j, l, fmt[Operator]);
                } else {                            // single line comment
                    setFormat(j, text.length() - i, fmt[Comment]);
                    break;
                }
            }
        }

    if (currentBlock() == document()->lastBlock())
        qDebug() << "done at " << QTime::currentTime() << "in" << startToEnd.elapsed();
}
示例#4
0
void close_app(void)
  {
  WINDOW *w;
  CTL3D x = {0,0,0,0};

  w = create_window(0,0,1,1,0,&x);
  desktop_add_window(w);
  define(-1,0,0,639,477,0,fog_bar);property(NULL,NULL,NULL,RGB555(16,0,0));
  redraw_desktop();
  if ((ask_exit_status = msg_box("Dotaz?",'\x2',"Chce¨ program ukon‡it, nebo nahr t jinou mapu?","Jinou mapu","Ukon‡it","Ne",NULL)) != 3) terminate();
  close_window(w);
  do_events();
  }
int m1::game_platform::run()
{
    m1::signal<void()>::connection const exit_connection = event_destroy.connect([&] { exit(0); });
    ShowWindow(m_ImplPtr->window_handle, SW_SHOW);

    while(do_events())
    {
        on_idle();

        WaitMessage();
    }

    return m_ImplPtr->exit_code;
}
示例#6
0
bool dssim_t::tick() {
   do_events();
   bool going = false;
   for(auto& node : nodes) {
      if(paused.count(node.second->nid) == 0) {
         bool result = node.second->tick();
         going = going || result;
      } else {
         going = true;
      }
   }
   ticks++;
   LOG(l::DEBUG, "TickLive:" << ticks << "\n");
   if((ticks % 99) == 0) {
      LOG(l::DBG_EV, "Tick:" << ticks << "\n");
   }
   if(going == false) {
      // If we have a disconnected server, wait for him to time out and view change his way in
      node_id_t pr = (node_id_t)0;
      for(auto& node : nodes) {
         if(node.second->primary()) {
            pr = node.first;
         }
      }
      if(pr != (node_id_t)0) {
         const std::unique_ptr<node_t>& pr_node = nodes[pr];
         for(auto& node : nodes) {
            if(node.second->server()
               && !pr_node->in_view(node.first)) {
               LOG(l::DBG_EV, "Continue " << node.first << " not in view\n");
               going = true;
               break;
            }
         }
      }
   }
   return going;
}
示例#7
0
int		main(int	argc,
		     char	**argv)
{
  s_sound	*sounds = NULL;
  s_game	*game = NULL;
  s_perso	**persos;
  int		nb_players = 0;
  char		*custom_music = NULL;

  nb_players = parse_args(argc, argv, &custom_music);
  persos = malloc(nb_players * sizeof (s_perso));

  init_game(&game, nb_players, custom_music);

  init_main(game->screen, &sounds, persos, game);

  if (!welcome_main(game))
    {
      do_events(game, persos, sounds);
      close_main(game, sounds, persos);
    }

  return (0);
}
示例#8
0
void
io_loop(void)
{
	int r, i, errv, errlen = sizeof(errv);
	struct timeval tv = { 1, 0 };
	struct sockaddr_in sin;
	size_t ssin = sizeof(sin);
	char buffer[BUFSIZE];
	sock_t *sock, *tmp;

	memset(buffer, 0, BUFSIZE);
loop:	/* wiz is leet */
	FD_ZERO(&me.readfds);
	FD_ZERO(&me.writefds);
	for (sock = main_sock; sock;) {
		if (sock->flags & SOCK_DEL) {
			tmp = sock->next;
			del_sock(sock);
			sock = tmp;
			continue;
		}
		if (sock->flags & (SOCK_LISTEN|SOCK_CONN))
			FD_SET(sock->socket, &me.readfds);
		else
			FD_SET(sock->socket, &me.writefds);
		sock = sock->next;
	}
	while ((r = select(FD_SETSIZE, &me.readfds, &me.writefds, NULL, &tv)) == -1)
		if (errno != EINTR) {
			log("FATAL! select() == -1: %s", ERR);
			exit(1);
		}
	do_events(time(NULL));
	for (sock = main_sock; r > 0 && sock;) {
		if (FD_ISSET(sock->socket, &me.readfds) && r--) {
			if (sock->flags & SOCK_LISTEN) {
				memset(&sin, 0, sizeof(sin));
				if ((i = accept(sock->socket, (struct sockaddr *)&sin, &ssin)) == -1)
					goto nextsock;
				log("NET: connection from %s:%d", inet_ntoa(sin.sin_addr), ntohs(sin.sin_port));
				tmp = add_sock_to_list();
				if ((tmp->socket = nonblock_sock(i)) == -1) {
					del_sock(tmp);
					goto nextsock;
				} else if (!(tmp->fd = fdopen(tmp->socket, "r"))) {
					log("fdopen(%d) failed: %s", tmp->socket, strerror(errno));
					del_sock(tmp);
					goto nextsock;
				}
				tmp->conn = time(NULL);
				tmp->addr = sin.sin_addr;
				tmp->port = ntohs(sin.sin_port);
				tmp->buffer = leetcalloc(BUFSIZE, 1);
				tmp->flags |= (SOCK_CONN|sock->flags);
				tmp->flags &= ~SOCK_LISTEN;
				greet_dcc(tmp);
				goto nextsock;
			}
			if (!fgets(sock->buffer, BUFSIZE, sock->fd)) {
				errv = 0;
				if (getsockopt(sock->socket, SOL_SOCKET, SO_ERROR, &errv, &errlen) < 0) {
					log("NET: getsockopt(SO_ERROR) failed: %s", ERR);
					goto delsock;
				}
				goto readerr;
			}
			sock->last = time(NULL);
			for(i = 0; i < BUFSIZE; i++)
				if (sock->buffer[i] == '\r' || sock->buffer[i] == '\n')
					sock->buffer[i] = 0;
			if (sock->flags & SOCK_HUB)
				parse(sock->buffer);
			else if (sock->flags & (SOCK_DCC|SOCK_TELNET))
				parse_dcc(sock, sock->buffer);
			memset(sock->buffer, 0, BUFSIZE);
		} else if (FD_ISSET(sock->socket, &me.writefds) && r--) {
			errv = 0;
			if (getsockopt(sock->socket, SOL_SOCKET, SO_ERROR, &errv, &errlen) < 0) {
				log("NET: getsockopt(SO_ERROR) failed: %s", ERR);
				goto delsock;
			}
			if (errv > 0) {
				if (sock->flags & SOCK_HUB) {
					log("HUB: error connecting to %s: %s", sock->name, strerror(errv));
					alldcc("HUB: error connecting to %s: %s", sock->name, strerror(errv));
#if 0
				} else if (sock->flags & SOCK_DCC && find_client(sock->name))
					reply(OS, sock->name, "Error DCC connecting: %s", strerror(errv));
#else
				}
#endif
				goto delsock;
			}
			if (sock->flags & SOCK_HUB) {
				log("HUB: connected to %s", sock->name);
				alldcc("HUB: connected to %s", sock->name);
				del_event_func(&try_next_hub);
				sock->conn = time(NULL);
				me.conn = 1;
				switch (me.servtype) {
					case SERV_IRCNN:
						toserv("PASS :%s\r\n", servpass);
						toserv("SERVER %s 1 %lu %lu J09 :%s\r\n", me.servname, time(NULL), time(NULL), me.servdesc);
						add_linked_server(me.servname, me.servname, me.servdesc);
						intro_nicks(ALL);
						join_channels(OS);
						break;
					case SERV_HYBRD:
						toserv("CAPAB :QS EX IE EOB UNKLN KLN HOPS HUB TBURST\r\n");
						toserv("PASS %s :TS\r\n", servpass);
						toserv("SERVER %s 0 :%s\r\n", me.servname, me.servdesc);
						toserv("SVINFO 5 5 0 :%lu\r\n", time(NULL));
						add_linked_server(me.servname, me.servname, me.servdesc);
						break;
				}
			} else if (sock->flags & SOCK_DCC) {
				log("DCC: %s connected from %s:%d", sock->name, inet_ntoa(sock->addr), sock->port);
				me.dcc++;
			}
			sock->flags |= SOCK_CONN;
		}
		nextsock: {
			sock = sock->next;
			continue;
		}
		readerr: {
			log("NET: read error from %s: %s", (sock->name ? sock->name : inet_ntoa(sock->addr)), strerror(errv));
		}
		delsock: {
			sock->flags |= SOCK_DEL;
			goto nextsock;
		}
	}
示例#9
0
static LRESULT WizardDlgProc(HWND hDlg,UINT msg, WPARAM wParam,LPARAM lParam)
  {
  int i;
  switch (msg)
	{
	case WM_INITDIALOG:
	  hWizardDlg = hDlg;
	  hWizardText = GetDlgItem(hDlg,IDC_OUTPUT);
	  SendMessage(hWizardText,WM_SETFONT,(WPARAM)hfCourier,1);
	  display_game_status();
	  SetTimer(hDlg,10,20,NULL);
	  return 0;	
	case WM_TIMER: do_events();return 1;
	case WM_COMMAND:
	  switch (LOWORD(wParam))
		{
	 case IDCANCEL: EndDialog(hDlg,0);return 0;
     case IDC_CLEARMAP:
       {
          HWND listwnd = PrepareListWindow(hDlg);
          HWND list = GetDlgItem(listwnd,IDC_LIST);
          int res;
          ListBox_AddString(list,"Clear Monsters");
          ListBox_AddString(list,"Clear Items");
          res = PumpDialogMessages(listwnd);
          if (res == IDOK)
          {
            if (ListBox_GetSel(list,0))
            {
              for(i = 0;i<MAX_MOBS;i++)
                          if (mobs[i].vlajky & MOB_LIVE)
                            {
                            vybrana_zbran = -1;
                            select_player = -1;
                            mob_hit(mobs+i,mobs[i].lives);
                            }
            }
            if (ListBox_GetSel(list,1))
            {
              for(i = 0;i<mapsize*4;i++)
                              {
                              destroy_items(map_items[i]);
                              free(map_items[i]);
                              map_items[i] = NULL;
                              }
                           for(i = 0;i<vyk_max;i++)
                              {
                              destroy_items(map_vyk[i].items);
                              map_vyk[i].items[0] = 0;
                              }
            }
          }
          CloseListWindow(listwnd);          
       }
       break;
       
     case IDC_ADVENCE:
              {
              int i,j,c;
              if (!wzscanf("Advence to level <postava -1= vsichni><uroven>:","%d %d",&i,&j)) return 0;
              c = MessageBox(GetActiveWindow(),"Automaticky?","?",MB_YESNO|MB_ICONQUESTION);
              if (i>0) advence_player(i-1,j,c == IDYES);else
                 for(i = 0;i<POCET_POSTAV;i++) if (postavy[i].used) advence_player(i,j,c == IDYES);              
              return 0;
              }
     case IDC_GOTO:
			  {
			  char prompt[50];
              sprintf(prompt,"Goto sector <1-%d>:",mapsize-1);
			  if (!wzscanf(prompt,"%d",&viewsector)) return 0;
              chod_s_postavama(1);              
              SEND_LOG("(WIZARD) Goto %d",viewsector,0);
              return 0;
			  }
     case IDC_LOADMAP:
              if (!wzscanf("Load Map <filename><sector>","%s %hd",loadlevel.name,&loadlevel.start_pos)) return 0;
              for(i = 0;i<POCET_POSTAV;i++)postavy[i].sektor = loadlevel.start_pos;
              SEND_LOG("(WIZARD) Load map '%s' %d",loadlevel.name,loadlevel.start_pos);
			  EndDialog(hDlg,0);
              send_message(E_CLOSE_MAP);
              return 0;
     case IDC_OPENDOOR:if (map_sectors[viewsector].step_next[viewdir])
                delay_action(3,viewsector,viewdir,0x2000000,0,0);
              else
                delay_action(3,viewsector,viewdir,0,0,0);
              return 0;
     case IDC_TAKEMONEY:if (take_money()) return 0;break;
     case IDC_PURGE:if (purge_map()) return 0;break;
     case IDC_HEAL:if (heal_meditate()) return 0;break;
     case IDC_RAISEDEATH:if (raise_death()) return 0;break;
     case IDC_RAISEMONSTER:if (raise_killed_monster(hDlg)) return 0;break;
     case IDC_IMMORTAL:set_immortality();break;
     case IDC_NETECNOST:set_nohassle();break;
     case IDC_UNAFFECT :unaffect();break;
     case IDC_WEAPONSKILL:if (advance_weapon()) return 0;break;
     case IDC_REFRESH:display_game_status();break;
     case IDC_RELOADMOBILES:
			  i = MessageBox(hDlg,"Tato funkce precte znova parametry vsech existujicich nestvur. "
                      "Pouzivej jen v pripade, ze se tyto parametry zmenili a nesouhlasi tak "
                      "obsah ulozene pozice. Pokracovat? ","??",MB_YESNO|MB_ICONQUESTION);
              if (i == IDYES) reload_mobs();
              return 0;
     case IDC_LOADITEM:
                       {
                         HWND listdlg = PrepareListWindow(hDlg);
                         HWND list = GetDlgItem(listdlg,IDC_LIST);
                         char buff[256];
                         int i;
                         int res;

                         for (i = 0;i<item_count;i++)
                         {
                           _snprintf(buff,sizeof(buff),"%d. %s",i,glob_items[i].jmeno);
                           kamenik2windows(buff,strlen(buff),buff);
                           ListBox_AddString(list,buff);
                         }
                         res = PumpDialogMessages(listdlg);
                         while (res == IDOK)
                         {
                           int cnt;
                           for (i = 0,cnt = ListBox_GetCount(list);i<cnt;i++) if (ListBox_GetSel(list,i))
                           {
                             SEND_LOG("(WIZARD) Load Item %d (%s)",i,glob_items[i].jmeno);
                             macro_drop_item(viewsector,viewdir,i);                             
                             wzprintf("Dropped item: %d\r\n",i);
                           }
                           res = PumpDialogMessages(listdlg);
                         }
                         CloseListWindow(listdlg);
                       }
                       return 0;
		}
			
	 default: return 0;
     }
return 1;
}
示例#10
0
文件: appbar.c 项目: GYGit/reactos
static void test_setpos(void)
{
    APPBARDATA abd;
    RECT rc;
    int screen_width, screen_height;
    BOOL ret;
    int org_bottom1;

    screen_width = GetSystemMetrics(SM_CXSCREEN);
    screen_height = GetSystemMetrics(SM_CYSCREEN);

    /* create and register windows[0] */
    windows[0].hwnd = CreateWindowExA(WS_EX_TOOLWINDOW|WS_EX_TOPMOST,
        testwindow_class, testwindow_class, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0,
        NULL, NULL, NULL, NULL);
    ok(windows[0].hwnd != NULL, "couldn't create window\n");
    do_events();
    abd.cbSize = sizeof(abd);
    abd.hWnd = windows[0].hwnd;
    abd.uCallbackMessage = MSG_APPBAR;
    ret = SHAppBarMessage(ABM_NEW, &abd);
    ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret);

    /* ABM_NEW should return FALSE if the window is already registered */
    ret = SHAppBarMessage(ABM_NEW, &abd);
    ok(ret == FALSE, "SHAppBarMessage returned %i\n", ret);
    do_events();

    /* dock windows[0] to the bottom of the screen */
    windows[0].registered = TRUE;
    windows[0].to_be_deleted = FALSE;
    windows[0].edge = ABE_BOTTOM;
    SetRect(&windows[0].desired_rect, 0, screen_height - 15, screen_width, screen_height);
    SetWindowLongPtrA(windows[0].hwnd, GWLP_USERDATA, (LONG_PTR)&windows[0]);
    testwindow_setpos(windows[0].hwnd);
    do_events();

    /* create and register windows[1] */
    windows[1].hwnd = CreateWindowExA(WS_EX_TOOLWINDOW|WS_EX_TOPMOST,
        testwindow_class, testwindow_class, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0,
        NULL, NULL, NULL, NULL);
    ok(windows[1].hwnd != NULL, "couldn't create window\n");
    abd.hWnd = windows[1].hwnd;
    ret = SHAppBarMessage(ABM_NEW, &abd);
    ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret);

    /* dock windows[1] to the bottom of the screen */
    windows[1].registered = TRUE;
    windows[1].to_be_deleted = FALSE;
    windows[1].edge = ABE_BOTTOM;
    SetRect(&windows[1].desired_rect, 0, screen_height - 10, screen_width, screen_height);
    SetWindowLongPtrA(windows[1].hwnd, GWLP_USERDATA, (LONG_PTR)&windows[1]);
    testwindow_setpos(windows[1].hwnd);

    /* the windows are adjusted to they don't overlap */
    do_events_until(no_appbars_intersect);
    test_window_rects(0, 1);

    /* make windows[0] larger, forcing windows[1] to move out of its way */
    windows[0].desired_rect.top = screen_height - 20;
    testwindow_setpos(windows[0].hwnd);
    do_events_until(no_appbars_intersect);
    test_window_rects(0, 1);

    /* create and register windows[2] */
    windows[2].hwnd = CreateWindowExA(WS_EX_TOOLWINDOW|WS_EX_TOPMOST,
        testwindow_class, testwindow_class, WS_POPUP|WS_VISIBLE, 0, 0, 0, 0,
        NULL, NULL, NULL, NULL);
    ok(windows[2].hwnd != NULL, "couldn't create window\n");
    do_events();

    abd.hWnd = windows[2].hwnd;
    ret = SHAppBarMessage(ABM_NEW, &abd);
    ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret);

    /* dock windows[2] to the bottom of the screen */
    windows[2].registered = TRUE;
    windows[2].to_be_deleted = FALSE;
    windows[2].edge = ABE_BOTTOM;
    SetRect(&windows[2].desired_rect, 0, screen_height - 10, screen_width, screen_height);
    SetWindowLongPtrA(windows[2].hwnd, GWLP_USERDATA, (LONG_PTR)&windows[2]);
    testwindow_setpos(windows[2].hwnd);

    do_events_until(no_appbars_intersect);
    test_window_rects(0, 1);
    test_window_rects(0, 2);
    test_window_rects(1, 2);

    /* move windows[2] to the right side of the screen */
    windows[2].edge = ABE_RIGHT;
    SetRect(&windows[2].desired_rect, screen_width - 15, 0, screen_width, screen_height);
    testwindow_setpos(windows[2].hwnd);

    do_events_until(no_appbars_intersect);
    test_window_rects(0, 1);
    test_window_rects(0, 2);
    test_window_rects(1, 2);

    /* move windows[1] to the top of the screen */
    windows[1].edge = ABE_TOP;
    SetRect(&windows[1].desired_rect, 0, 0, screen_width, 15);
    testwindow_setpos(windows[1].hwnd);

    do_events_until(no_appbars_intersect);
    test_window_rects(0, 1);
    test_window_rects(0, 2);
    test_window_rects(1, 2);

    /* move windows[1] back to the bottom of the screen */
    windows[1].edge = ABE_BOTTOM;
    SetRect(&windows[1].desired_rect, 0, screen_height - 10, screen_width, screen_height);
    testwindow_setpos(windows[1].hwnd);

    do_events_until(no_appbars_intersect);
    test_window_rects(0, 1);
    test_window_rects(0, 2);
    test_window_rects(1, 2);

    /* removing windows[0] will cause windows[1] to move down into its space */
    expected_bottom = max(windows[0].allocated_rect.bottom, windows[1].allocated_rect.bottom);
    org_bottom1 = windows[1].allocated_rect.bottom;
    ok(windows[0].allocated_rect.bottom > windows[1].allocated_rect.bottom,
        "Expected windows[0] to be lower than windows[1]\n");

    abd.hWnd = windows[0].hwnd;
    windows[0].to_be_deleted = TRUE;
    ret = SHAppBarMessage(ABM_REMOVE, &abd);
    ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret);
    windows[0].registered = FALSE;
    DestroyWindow(windows[0].hwnd);

    do_events_until(got_expected_bottom);

    if (windows[1].allocated_rect.bottom == org_bottom1)
        win_skip("Some broken Vista boxes don't move the higher appbar down\n");
    else
        ok(windows[1].allocated_rect.bottom == expected_bottom,
            "windows[1]'s bottom is %i, expected %i\n",
            windows[1].allocated_rect.bottom, expected_bottom);

    test_window_rects(1, 2);

    /* remove the other windows */
    abd.hWnd = windows[1].hwnd;
    windows[1].to_be_deleted = TRUE;
    ret = SHAppBarMessage(ABM_REMOVE, &abd);
    ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret);
    windows[1].registered = FALSE;
    DestroyWindow(windows[1].hwnd);

    abd.hWnd = windows[2].hwnd;
    windows[2].to_be_deleted = TRUE;
    ret = SHAppBarMessage(ABM_REMOVE, &abd);
    ok(ret == TRUE, "SHAppBarMessage returned %i\n", ret);
    windows[2].registered = FALSE;
    DestroyWindow(windows[2].hwnd);
}
示例#11
0
static void
on_paint (ClutterActor *stage, gconstpointer *data)
{
  do_events (stage);
}
示例#12
0
int main(int argc,char *argv[])
  {
  char *s;
  char *pr;
  char test[50];
  char *mask;
  InitCrashDump();
  SetConsoleCtrlHandler(HandlerRoutine,TRUE);
  filename[0] ='\0';
  //  strcpy(filename,"TEST.MAP");
  args_support(argc-1,argv);
  printf("Hledam konfiguracni soubor\n");
  config_file = read_config("WSKELDAL.INI");
  if (config_file == NULL)
    {
    puts("...nemohu najit WSKELDAL.INI\n");
    return 1;
    }
  if (strlen(filename)>3 && stricmp(filename+strlen(filename)-3,"adv") == 0)
  {
	TSTR_LIST adv_cfg = read_config(filename);
	config_file = merge_configs(config_file,adv_cfg);
	filename[0] = 0;
  }  
  sample_path = get_text_field(config_file,"CESTA_ZVUKY");
  if (sample_path == NULL) sample_path ="";
  mob_dir = get_text_field(config_file,"CESTA_ENEMY");
  if (mob_dir == NULL) mob_dir ="";
  init_sound();
  init();

  concat(mask,get_text_field(config_file,"CESTA_MAPY"),"*.map");  
  atexit(shut_down);
//  signal(SIGABRT,shut_down);
  init_mob_list();
  InitMapFiles(get_text_field(config_file,"CESTA_MAPY"));
  do
     {
     ask_exit_status = 2;
     if (filename[0] =='\0') browser(mask,filename);
     if (filename[0]!='\0')
	 {
	   char *mapy = get_text_field(config_file,"CESTA_MAPY");
	   memmove(filename+strlen(mapy),filename,strlen(filename)+1);
	   memcpy(filename,mapy,strlen(mapy));
	   s = pripona(filename,".HI");
	   background_file = (char *)getmem(strlen(s)+1);strcpy(background_file,s);
       load_background();
	 }
     do_events();
     logo();
     pr = pripona(filename,SCR);
     script_name = NewArr(char,strlen(pr)+1);
     strcpy(script_name,pr);
     read_full_side_script(pr);
     read_spec_procs();
     read_side_list(ITEMS_SCRIPT,&vzhled_veci,0,4);
     read_side_list(ITEMS_PICS,&pohledy_veci,0,2);
     read_dlg_list(DLG_SCRIPT,&dlg_names,&dlg_pgfs);
     read_side_list(WEAPONS_SCRIPT,&weapons,0,3);
     read_side_list(WEAPONS_SCRIPT,&weapons_pos,2,3);
     set_defaults();
     init_multiactions();
     memset(vyklenky,0,sizeof(vyklenky));
     init_item_system();
     if (filename[0]!='\0' )
       {
       int sel = 1;

       init_maps();
       set_defaults();
       if (load_map(filename))
          msg_box(filename,'\01',"Tento soubor je buƒ ne‡iteln˜, nebo po¨kozen˜","Pokra‡ovat",NULL);
       if (check_password(NULL) == 0)
          if (ask_password(test,0) == 0 || check_password(test) == 0)
            {
            filename[0] = 0;
            ask_exit_status = 1;
            goto preskoc;
            }
       if (maplen<2)
          {
          sel = msg_box(filename,' ',"Soubor neexistuje, bude vytvo©en nov˜. Nyn¡ je nutn‚ nastavit z kladn¡ stˆny"
                               " a jin‚ dal¨¡ parametry pro tuto mapu","Pokra‡ujem","Zav©it",NULL);
          if (sel == 1)
             {
             newmap = 1;
             }

          }
       if (sel == 1)
           {
          create_menu();
          redraw_window();
          escape();
          filename[0] = 0;
          close_current();
          }
        }
     preskoc:
     free(background_file);
     }
  while (ask_exit_status == 1);
  ClearMapFiles();
  redraw_desktop();
  close_manager();
  return 0;
  }