| ")+1;
for (i=0;fcstr[i]!='<'&&(i")+strlen ("")+1;
for (i=0;fcstr[i]!='<'&&(i | ")+1;
for (i=0;fcstr[i]!='<'&&(i | ")+1;
for (i=0;fcstr[i]!='<'&&(i | ")+1;
for (i=0;fcstr[i]!='<'&&(igui.state=1;
}
void onClose(MAIN_GUI *data, void (*mfree_adr)(void *))
{
data->gui.state=0;
}
void onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *))
{
data->gui.state=2;
DisableIDLETMR();
}
void onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *))
{
if (data->gui.state!=2) return;
data->gui.state=1;
}
int OnKey(MAIN_GUI *data, GUI_MSG *msg)
{
DirectRedrawGUI();
if (msg->gbsmsg->msg==KEY_DOWN)
{
switch(msg->gbsmsg->submess)
{
case RIGHT_SOFT:
#ifndef NEWSGOLD
case RED_BUTTON:
#endif
return(1);
}
}
return(0);
}
extern void kill_data(void *p, void (*func_p)(void *));
void method7(MAIN_GUI *data, void (*mfree_adr)(void *))
{
kill_data(data, mfree_adr);
}
int method8(void){return(0);}
int method9(void){return(0);}
const void * const gui_methods[11]={
(void *)OnRedraw,
(void *)onCreate,
(void *)onClose,
(void *)onFocus,
(void *)onUnfocus,
(void *)OnKey,
0,
(void *)method7,
(void *)method8,
(void *)method9,
0
};
/*
void fdt2dt(unsigned int uitime, TTime *time, TDate *date)
{
date->year=(uitime>>25) + 80;
if(date->year>100)date->year-=100;
date->month=(uitime>>21) & 0x0f;
date->day=(uitime>>16) & 0x1f;
time->hour=(uitime>>11) & 0x1f;
time->min=(uitime>>5) & 0x3f;
}
*/
const RECT Canvas={0,0,0,0};
void maincsm_oncreate(CSM_RAM *data)
{
MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI));
MAIN_CSM*csm=(MAIN_CSM*)data;
zeromem(main_gui,sizeof(MAIN_GUI));
patch_rect((RECT*)&Canvas,0,0,ScreenW()-1,ScreenH()-1);
main_gui->gui.canvas=(void *)(&Canvas);
//main_gui->gui.flag30=2;
main_gui->gui.methods=(void *)gui_methods;
main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr();
csm->csm.state=0;
csm->csm.unk1=0;
csm->gui_id=CreateGUI(main_gui);
/*
DIR_ENTRY de;
unsigned int err;
char fullname[256];
TDate curdate, fdate;
TTime curtime, ftime;
GetDateTime(&curdate, &curtime);
sprintf(fullname, "%s1.data", ICON_PATH, page_num);
FindFirstFile(&de,fullname,&err);
fdt2dt(de.create_date_time, &ftime, &fdate);
*/
ews=AllocWS(1024);
do_start_connection();
}
void ElfKiller(void)
{
extern void *ELF_BEGIN;
kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr());
}
void maincsm_onclose(CSM_RAM *csm)
{
FreeWS(ews);
SUBPROC((void *)ElfKiller);
}
int maincsm_onmessage(CSM_RAM *data, GBS_MSG *msg)
{
MAIN_CSM *csm=(MAIN_CSM*)data;
if ((msg->msg==MSG_GUI_DESTROYED)&&((int)msg->data0==csm->gui_id))
{
csm->csm.state=-3;
}
if (msg->msg==MSG_HELPER_TRANSLATOR)
{
if ((int)msg->data1==sock)
{
//Если наш сокет
switch((int)msg->data0)
{
case ENIP_SOCK_CONNECTED:
if (connect_state==1)
{
//Если посылали запрос
if (!strstr(logbuf,"Connected\n")) strcat(logbuf,"Connected\n");
SUBPROC((void *)send_req);
REDRAW();
}
else
{
ShowMSG(1,(int)"Illegal message ENIP_SOCK_CONNECTED!");
}
break;
case ENIP_SOCK_DATA_READ:
if (connect_state==2)
{
//Если посылали send
SUBPROC((void *)get_answer);
REDRAW();
}
else
{
ShowMSG(1,(int)"Illegal message ENIP_DATA_READ");
}
break;
case ENIP_SOCK_REMOTE_CLOSED:
//Закрыт со стороны сервера
if (connect_state) SUBPROC((void *)end_socket);
break;
case ENIP_SOCK_CLOSED:
//Закрыт вызовом closesocket
sprintf(logbuf, "%sReceived page %i\n", logbuf, page_num);
SUBPROC((void *)Parsing);
connect_state=0;
sock=-1;
break;
}
}
}
return(1);
}
const struct
{
CSM_DESC maincsm;
WSHDR maincsm_name;
}MAINCSM =
{
{
maincsm_onmessage,
maincsm_oncreate,
#ifdef NEWSGOLD
0,
0,
0,
0,
#endif
maincsm_onclose,
sizeof(MAIN_CSM),
1,
&minus11
},
{
maincsm_name_body,
NAMECSM_MAGIC1,
NAMECSM_MAGIC2,
0x0,
139
}
};
void UpdateCSMname(void)
{
wsprintf((WSHDR *)(&MAINCSM.maincsm_name),"Weather");
}
extern const unsigned int TID;
int main()
{
InitConfig();
if (TID)
{
char dummy[sizeof(MAIN_CSM)];
UpdateCSMname();
LockSched();
MAINCSM_ID=CreateCSM(&MAINCSM.maincsm,dummy,0);
UnlockSched();
sprintf(Town_ID, "%i", TID);
}
else
{
LockSched();
ShowMSG(1,(int)"Please setup Town ID!");
UnlockSched();
}
return 0;
}
//---------------------------- Edit Control -----------------------------------
int wd_id;
static const SOFTKEY_DESC menu_sk[] =
{
{0x0018, 0x0000, (int)"Города"},
{0x0001, 0x0000, (int)"Выход"},
{0x003D, 0x0000, (int)LGP_DOIT_PIC}
};
void edchat_ghook(GUI *data, int cmd)
{
DYNPNGILIST_MY *t=EDIT_GetUserPointer(data);
PNGTOP_DESC *pltop=PNG_TOP();
if (cmd==3)
{
while (t)
{
DYNPNGILIST_MY *d;
d=t;
t=t->dpl.next;
mfree(d->dpl.img->bitmap);
mfree(d->dpl.img);
mfree(d->fname);
mfree(d);
}
}
if (cmd==9)
{
pltop->dyn_pltop=NULL;
}
if (cmd==0x0A)
{
pltop->dyn_pltop=(DYNPNGICONLIST *)t;
DisableIDLETMR();
}
if (cmd==7)
{
SetSoftKey(data,&menu_sk[0],0);
SetSoftKey(data,&menu_sk[1],1);
}
}
int edchat_onkey(GUI *data, GUI_MSG *msg)
{
void ShowWeather(void);
switch (msg->gbsmsg->submess)
{
case LEFT_SOFT:
DispTownsMenu();
break;
case RIGHT_SOFT:
#ifndef NEWSGOLD
case RED_BUTTON:
#endif
CloseCSM(MAINCSM_ID);
break;
case RIGHT_BUTTON:
itemnum++;
if (itemnum==20) itemnum=19;
GeneralFunc_flag1(wd_id,1);
ShowWeather();
break;
case LEFT_BUTTON:
itemnum--;
if (itemnum==-1) itemnum=0;
GeneralFunc_flag1(wd_id,1);
ShowWeather();
break;
}
return(0); //Do standart keys
}
char hdesc[48];
void patch_hdesc()
{
sprintf(hdesc, "%i/20, %s", itemnum+1, Town_Name);
//strcat(hdesc, Town_Name);
}
void edchat_locret(void){};
HEADER_DESC edchat_hdr={0,0,0,0,NULL,(int)hdesc,LGP_NULL};
const SOFTKEYSTAB menu_skt =
{
menu_sk, 0
};
static const INPUTDIA_DESC edchat_desc =
{
1,
edchat_onkey,
edchat_ghook,
(void *)edchat_locret,
0,
&menu_skt,
{0,NULL,NULL,NULL},
FONT_SMALL,
100,
101,
0,
// 0x00000001 - Выровнять по правому краю
// 0x00000002 - Выровнять по центру
// 0x00000004 - Инверсия знакомест
// 0x00000008 - UnderLine
// 0x00000020 - Не переносить слова
// 0x00000200 - bold
0,
// 0x00000002 - ReadOnly
// 0x00000004 - Не двигается курсор
// 0x40000000 - Поменять местами софт-кнопки
0x00000002
};
#define wslen(ws) ws->wsbody[0]
void ShowWeather(void)
{
EDITCONTROL ec;
EDITC_OPTIONS ec_options;
void *ma=malloc_adr();
void *eq;
DYNPNGILIST_MY *top=0;
int pic_n;
PrepareEditControl(&ec);
eq=AllocEQueue(ma,mfree_adr());
if (Town_Name!=0)
{
patch_hdesc();
char str[1024];
CutWSTR(ews,0);
utf82win(str,(const char *)weath[itemnum].DateTime);
ascii2ws(ews, str);
extern const unsigned int FONT_SIZE_DATE;
extern const unsigned int FONT_DATE_COLOR;
PrepareEditCOptions(&ec_options);
SetPenColorToEditCOptions(&ec_options,FONT_DATE_COLOR);
SetFontToEditCOptions(&ec_options,FONT_SIZE_DATE);
ConstructEditControl(&ec,ECT_READ_ONLY,0x40,ews,wslen(ews));
CopyOptionsToEditControl(&ec,&ec_options);
AddEditControlToEditQend(eq,&ec,ma);
extern const unsigned int FONT_SIZE_DATA;
extern const unsigned int FONT_DATA_COLOR;
PrepareEditCOptions(&ec_options);
SetPenColorToEditCOptions(&ec_options,FONT_DATA_COLOR);
SetFontToEditCOptions(&ec_options,FONT_SIZE_DATA);
CutWSTR(ews,0);
extern const char ICON_PATH[];
pic_n= AddPicIfNotExist(&top,MakeGlobalString(ICON_PATH, '\\', weath[itemnum].Pic));
if (pic_n!=-1)
{
wsAppendChar(ews,pic_n);
wsAppendChar(ews,' ');
ConstructEditControl(&ec,ECT_READ_ONLY,0x00,ews,wslen(ews));
CopyOptionsToEditControl(&ec,&ec_options);
AddEditControlToEditQend(eq,&ec,ma);
}
sprintf(str, "%s\xB0\x43\n%s\n%s\n%s\n%s", weath[itemnum].Temp,
weath[itemnum].Cloudiness,
weath[itemnum].Pressure,
weath[itemnum].Wind,
weath[itemnum].Rewlet);
utf82win(str,(const char *)str);
ascii2ws(ews, str);
ConstructEditControl(&ec,/*ECT_READ_ONLY*/ECT_NORMAL_TEXT,0x40,ews,wslen(ews));
CopyOptionsToEditControl(&ec,&ec_options);
AddEditControlToEditQend(eq,&ec,ma);
}
else
{
wsprintf(ews, "Информация о погоде в городе с ID %i отсутствует!", TID);
PrepareEditCOptions(&ec_options);
SetPenColorToEditCOptions(&ec_options,2);//красный
SetFontToEditCOptions(&ec_options,4);
ConstructEditControl(&ec,ECT_READ_ONLY,0x00,ews,wslen(ews));
CopyOptionsToEditControl(&ec,&ec_options);
AddEditControlToEditQend(eq,&ec,ma);
}
//*((int **)(&edchat_hdr.icon))=(int *)MakeGlobalString(ICON_PATH, '\\', "logo.png");
patch_header(&edchat_hdr);
patch_input(&edchat_desc);
wd_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,top);
}
| | | |