Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 9600 → Rev 9601

/programs/cmm/experimental/liza/mail_box.c
0,0 → 1,411
//Leency & SoUrcerer, LGPL
//Hidnplayer
 
#define LIST_INFO_H 59
int status_bar_h = 15;
 
scroll_bar scroll1 = { 17,200,210, LIST_INFO_H-3,18,0,115,15,0,0xCCCccc,0xD2CED0,0x555555,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1};
scroll_bar scroll_wv;
 
char *listbuffer;
char *listpointer;
 
char *mailstart;
char *mailend;
int mailsize;
 
int cur_charset;
 
llist list;
 
enum {
GET_MAIL = 20,
SEND_MAIL,
DELETE_LETTER,
SAVE_LETTER,
STOP_LOADING,
EXIT_MAIL,
CHANGE_CHARSET,
CLOSE_CHANGE_CHARSET
};
 
void MailBoxNetworkProcess() {
int load_persent;
if (aim) switch(aim)
{
case SEND_NSTAT:
SetMailBoxStatus(NULL, "Counting mail, awaiting answer...");
request_len = GetRequest("STAT", NULL);
Send(socketnum, #request, request_len, 0);
if (EAX == 0xffffffff) { debugln("Error sending STAT. Retry..."w); break;}
aim = GET_ANSWER_NSTAT;
break;
 
case GET_ANSWER_NSTAT:
ticks = Receive(socketnum, #immbuffer, BUFFERSIZE, 0);
if ((ticks == 0xffffff) || (ticks < 2)) break;
 
if (immbuffer[ticks-2]=='\n')
{
debugln(#immbuffer);
if (strstr(#immbuffer,"+OK"))
{
strcpyb(#immbuffer, #param, "+OK ", " ");
mail_list.count = atoi(#param);
free(listbuffer);
listbuffer = mem_Alloc(30*mail_list.count); //24* original
listpointer = listbuffer;
aim = SEND_NLIST;
debugln("Receiving mail list...");
}
else
{
StopConnect("Sorry, can't recieve your mail");
}
}
break;
 
case SEND_NLIST:
WriteText(5, Form.cheight-11, 0x80, sc.work_text, "Send LIST, awaiting answer...");
request_len = GetRequest("LIST", NULL);
Send(socketnum, #request, request_len, 0);
if (EAX == 0xffffffff) {debugln("Error while sending LIST. Retry..."); break;}
else aim = GET_ANSWER_NLIST;
break;
 
case GET_ANSWER_NLIST:
ticks = Receive(socketnum, listpointer, listbuffer + 30*mail_list.count - listpointer, MSG_DONTWAIT);
if (ticks == 0xffffffff) break;
listpointer = listpointer + ticks;
 
if (listpointer - listbuffer < 5) break;
if (strncmp(listpointer-5,"\n.\n",5)==0) // note that c-- assembles "\n.\n" to 0x0d, 0x0a, 0x2e, 0x0d, 0x0a
{
aim = SEND_RETR;
debugln("goto SEND_RETR");
DrawMailBox();
 
*listpointer='\0';
atr.CreateArray();
atr.SetSizes();
}
break;
 
case SEND_RETR:
from = to = date = subj = cur_charset = NULL;
DrawMailBox();
request_len = GetRequest("RETR", itoa(mail_list.cur_y+1));
if (Send(socketnum, #request, request_len, 0) == 0xffffffff)
{
StopConnect("Error while trying to get letter from server");
break;
}
mailsize = atr.GetSize(mail_list.cur_y+1) + 1024;
free(mailstart);
mailstart = malloc(mailsize);
mailend = mailstart;
if (!mailstart)
{
debugln("alloc error!");
aim=NULL;
break;
}
debugval("mailsize", mailsize);
aim = GET_ANSWER_RETR;
debugln("goto GET_ANSWER_RETR");
break;
 
case GET_ANSWER_RETR:
debugval("mailsize", mailsize);
debugval("mailstart", mailstart);
debugval("mailend", mailend);
ticks = Receive(socketnum, mailend, mailsize + mailstart - mailend, MSG_DONTWAIT);
if (ticks == 0xffffffff) break;
mailend = mailend + ticks;
if (mailsize + mailstart - mailend - 2 < 0)
{
debugln("Resizing buffer");
mailsize += 4096;
mailstart = realloc(mailstart, mailsize);
if (!mailstart) { StopConnect("Realloc error!"); break;}
}
/*
if (mailsize>9000)
{
load_persent = mailend - mailstart * 100 ;
load_persent /= mailsize - 1024;
if (load_persent != cur_st_percent) SetMailBoxStatus( load_persent , NULL);
}
*/
//ParseMail();
}
}
 
 
void MailBoxLoop() {
int id;
int panels_drag=0, clicked_list=0;
dword line_col, text_col;
 
mail_list.h = Form.cheight/4;
mail_list.ClearList();
SetMailBoxStatus( NULL , NULL);
cur_charset = 0;
aim = SEND_NSTAT;
 
goto _MB_DRAW;
 
loop()
{
WaitEventTimeout(2);
switch(EAX & 0xFF)
{
case evMouse:
mouse.get();
 
if (!mouse.lkm) panels_drag=0;
if (mouse.lkm) && (mouse.y>mail_list.y+mail_list.h-1) && (mouse.y<mail_list.y+mail_list.h+6)
&& (!scroll1.delta2) && (!scroll_wv.delta2) panels_drag = 1;
if (panels_drag)
{
if (mouse.y<mail_list.y+60) || (mouse.y>Form.cheight-60-status_bar_h-LIST_INFO_H) break;
mail_list.h = mouse.y - mail_list.y-2;
DrawMailBox();
break;
}
 
//links.hover(mouse.x, mouse.y);
 
if (!mail_list.count) break;
if (!panels_drag) { scrollbar_v_mouse (#scroll1); scrollbar_v_mouse (#scroll_wv); }
 
if (mail_list.first <> scroll1.position)
{
mail_list.first = scroll1.position;
DrawMailList();
break;
};
if (list.first <> scroll_wv.position)
{
list.first = scroll_wv.position;
DrawLetter();
break;
};
 
if (mail_list.y+mail_list.h + 10 > mouse.y)
{
if (mail_list.MouseScroll(mouse.vert)) DrawMailList();
}
else
{
if (list.MouseScroll(mouse.vert)) DrawLetter();
}
if (mouse.lkm) && (mail_list.MouseOver(mouse.x, mouse.y)) && (!clicked_list) clicked_list=1;
if (!mouse.lkm) && (clicked_list) if (mail_list.ProcessMouse(mouse.x, mouse.y))
{
clicked_list = 0;
if (aim) break;
DrawMailList();
aim = SEND_RETR;
}
 
break;
case evButton:
id = GetButtonID();
if (id==1) SaveAndExit();
if (id==GET_MAIL) aim = SEND_NSTAT;
if (id==SAVE_LETTER)
{
if (!mailstart) break;
CreateFile(strlen(mailstart), mailstart, "mail.txt");
pause(10);
RunProgram("/sys/tinypad", "mail.txt");
}
if (id==STOP_LOADING)
{
StopLoading();
DrawStatusBar();
DrawMailList();
}
if (id==EXIT_MAIL)
{
StopLoading();
Close(socketnum);
LoginBoxLoop();
}
if (id==CHANGE_CHARSET)
{
DefineButton(0,0,Form.cwidth,Form.cheight, CLOSE_CHANGE_CHARSET+BT_HIDE+BT_NOFRAME);
DrawRectangle(Form.cwidth-100, Form.cheight-status_bar_h- 70, 70, 82, sc.work_graph);
DrawRectangle3D(Form.cwidth-99, Form.cheight-status_bar_h- 69, 68, 80, 0xFFFfff, sc.work);
for (id=0; id<5; id++)
{
if (cur_charset==id+1) { line_col=sc.button; text_col=sc.button_text; }
else { line_col=sc.work; text_col=sc.work_text; }
DrawBar(Form.cwidth-98, id*16+Form.cheight-status_bar_h- 68, 67, 16, line_col);
DrawCaptButton(Form.cwidth-100, id*16+Form.cheight-status_bar_h- 68, 70,16, 10+id+BT_HIDE,
0, text_col, charsets[id+1]);
}
}
if (id==CLOSE_CHANGE_CHARSET) goto _MB_DRAW;
 
break;
case evKey:
GetKeys();
 
if (!aim) && (mail_list.ProcessKey(key_scancode))
{
DrawMailList();
aim = SEND_RETR;
}
 
break;
case evReDraw: _MB_DRAW:
if !(DefineWindow(MAILBOX_HEADER)) break;
scroll1.bckg_col = scroll_wv.bckg_col = 0xBBBbbb;
scroll1.frnt_col = scroll_wv.frnt_col = sc.work;
scroll1.line_col = scroll_wv.line_col = sc.work_graph;
DrawToolbar();
DrawMailBox();
 
break;
default:
MailBoxNetworkProcess();
}
}
}
 
 
void DrawMailBox()
{
DrawMailList();
DrawLetterInfo();
DrawLetter();
DrawStatusBar();
}
 
 
void DrawToolbar() {
#define BUT_Y 7
#define BUT_H 22
#define BUT_W 74
int toolbar_w = BUT_Y + BUT_H + BUT_Y + 3;
mail_list.SetSizes(0, toolbar_w, Form.cwidth - scroll1.size_x - 1, mail_list.h, 18);
 
DrawBar(0,0, Form.cwidth,toolbar_w-3, sc.work);
DrawCaptButton(10 , BUT_Y, BUT_W, BUT_H, GET_MAIL, sc.button, sc.button_text,"Get mail");
DrawCaptButton(BUT_W+ 20, BUT_Y, BUT_W+10, BUT_H, SAVE_LETTER, sc.button, sc.button_text,"Save letter");
DrawCaptButton(Form.cwidth-BUT_W - 10, BUT_Y, BUT_W, BUT_H, EXIT_MAIL, sc.button, sc.button_text,"< Exit");
 
DrawBar(0, mail_list.y-3, mail_list.w,1, sc.work_graph);
DrawBar(0, mail_list.y-2, mail_list.w,1, 0xdfdfdf);
DrawBar(0, mail_list.y-1, mail_list.w,1, 0xf0f0f0);
}
 
void DrawMailList() {
int i, on_y, on_x, direction;
dword sel_col;
mail_list.visible = mail_list.h / mail_list.item_h;
 
for (i=30; i<150; i++) DeleteButton(i);
for (i=0; (i<mail_list.visible) && (i+mail_list.first<mail_list.count); i++)
{
on_y = i*mail_list.item_h + mail_list.y;
if (mail_list.cur_y==mail_list.first+i) sel_col=0xEEEeee; else sel_col=0xFFFfff;
DrawBar(0, on_y, mail_list.w, mail_list.item_h-1, sel_col);
direction = atr.GetDirection(i+mail_list.first+1);
on_x = strlen(itoa(i+mail_list.first+1))*6;
letter_icons_pal[0]=sel_col;
PutPaletteImage(sizeof(letter_icons)/3*direction + #letter_icons, 18,12, on_x+18,
mail_list.item_h-12/2+ on_y, 8, #letter_icons_pal);
WriteText(on_x + 42, on_y+5, 0x80, 0, atr.GetSubject(i+mail_list.first+1));
DrawBar(0, on_y + mail_list.item_h-1, mail_list.w, 1, 0xCCCccc);
WriteText(10, on_y+5, 0x80, 0, itoa(i+mail_list.first+1));
WriteText(mail_list.w - 40, on_y+5, 0x80, 0, ConvertSize(atr.GetSize(i+mail_list.first+1)));
}
DrawBar(0, i*mail_list.item_h + mail_list.y, mail_list.w, -i*mail_list.item_h+mail_list.h, 0xFFFfff);
DrawScroller1();
}
 
void DrawLetterInfo() {
int lt_y = mail_list.y+mail_list.h;
DrawBar(0, lt_y, mail_list.w, 1, sc.work_graph);
DrawBar(0, lt_y+1, Form.cwidth, 1, LBUMP);
DrawBar(0, lt_y+2, Form.cwidth, LIST_INFO_H-4, sc.work);
WriteText(mail_list.w-30/2, lt_y, 0x80, 0x888888, "= = =");
WriteText(mail_list.w-30/2, lt_y+1, 0x80, 0xEeeeee, "= = =");
DrawBar(0, lt_y+LIST_INFO_H-2, Form.cwidth, 1, sc.work_graph); //bottom
DrawBar(0, lt_y+LIST_INFO_H-1, Form.cwidth, 1, 0xdfdfdf);
DrawBar(0, lt_y+LIST_INFO_H , Form.cwidth, 1, 0xf0f0f0);
WriteTextB(10, lt_y+8 , 0x80, sc.work_text, "From:");
WriteText (45, lt_y+8 , 0x80, sc.work_text, #from);
WriteTextB(10, lt_y+20, 0x80, sc.work_text, "To:");
WriteText (45, lt_y+20, 0x80, sc.work_text, #to);
WriteTextB(10, lt_y+32, 0x80, sc.work_text, "Date:");
WriteText (45, lt_y+32, 0x80, sc.work_text, #date);
WriteTextB(10, lt_y+44, 0x80, sc.work_text, "Subj:");
WriteText (45, lt_y+44, 0x80, sc.work_text, #subj);
}
 
 
void DrawLetter() {
//DrawTextLines();
DrawRectangle(scroll_wv.start_x, scroll_wv.start_y, scroll_wv.size_x, scroll_wv.size_y-1, 0xFFFfff);
}
 
void DrawScroller1() {
scroll1.max_area = mail_list.count;
scroll1.cur_area = mail_list.visible;
scroll1.position = mail_list.first;
scroll1.all_redraw=1;
scroll1.start_x = mail_list.x + mail_list.w;
scroll1.start_y = mail_list.y - 3;
scroll1.size_y = mail_list.h + 4;
scrollbar_v_draw(#scroll1);
}
 
 
 
void DrawStatusBar() {
int st_y = Form.cheight -status_bar_h;
DrawBar(0, st_y, Form.cwidth, status_bar_h, sc.work);
if (aim) {
SetMailBoxStatus(cur_st_percent, cur_st_text);
DrawCaptButton(240, st_y+1, 36, status_bar_h-3, STOP_LOADING, sc.button, sc.button_text,"Stop");
}
DrawCaptButton(Form.cwidth - 100, st_y+1, 70, status_bar_h-2, CHANGE_CHARSET+BT_HIDE,
sc.work, sc.work_text,cur_charset*10+#charsets);
}
 
 
 
void SetMailBoxStatus(dword percent1, text1) {
DrawProgressBar(3, Form.cheight -status_bar_h + 1, 220, 12, sc.work, 0xC3C3C3, 0x54B1D6, sc.work_text, percent1);
WriteText(3, Form.cheight -status_bar_h + 1, 0x80, sc.work_text, text1);
cur_st_percent = percent1;
cur_st_text = text1;
}
 
 
void StopLoading() {
aim = NULL;
mailstart = free(mailstart);
to = from = date = subj = cur_charset = NULL;
}
 
int GetLetterSize_(int number) {
char search_num[24];
char mailsize1[24];
strcpy(#search_num, "\x0a"); // 0x0d, 0x0a
itoa_(#search_num+1, number);
chrcat(#search_num, ' ');
strcpyb(listbuffer, #mailsize1, #search_num, "\x0d");
return atoi(#mailsize1);
}
 
 
/*
void EventClickLink() {
RunProgram("/sys/network/WebView", links.active_url);
}
*/
/programs/cmm/experimental/liza/liza.c
0,0 → 1,190
//Leency & SoUrcerer, LGPL
 
//libraries
#define MEMSIZE 0x100000
#include "../lib/kolibri.h"
#include "../lib/strings.h"
#include "../lib/mem.h"
#include "../lib/dll.h"
#include "../lib/gui.h"
#include "../lib/fs.h"
#include "../lib/list_box.h"
#include "../lib/socket.h"
#include "../lib/draw_buf.h"
#include "../lib/cursor.h"
#include "../lib/collection.h"
//*.obj libraries
#include "../lib/obj/box_lib.h"
#include "../lib/obj/network.h"
#include "../lib/obj/http.h"
#include "../lib/obj/libimg.h"
#include "../lib/obj/netcode.h"
#include "../lib/obj/iconv.h"
//images
byte letter_icons[sizeof(file "img/letter_icons.raw")] = FROM "img/letter_icons.raw";
#include "img/letter_icons.h"
 
_http http = {0};
bool debug_mode = false;
char accept_language[]= "Accept-Language: ru\n";
 
//connection algorithm
enum {
STOP,
RESOLVE,
OPEN_CONNECTION,
GET_ANSWER_CONNECT,
SEND_USER,
GET_ANSWER_USER,
SEND_PASS,
GET_ANSWER_PASS,
SEND_NLIST,
GET_ANSWER_NLIST,
SEND_NSTAT,
GET_ANSWER_NSTAT,
SEND_RETR,
GET_ANSWER_RETR
};
 
//WindowDefinitions
#define WIN_W 600
#define WIN_H 440
#define WIN_MIN_W 500
#define WIN_MIN_H 380
#define LOGIN_HEADER "Login - Email client Liza 0.9.4"
#define OPTIONS_HEADER "Options - Email client Liza 0.9.4"
#define MAILBOX_HEADER "Mail Box - Email client Liza 0.9.4"
#define BUFFERSIZE 512
proc_info Form;
#define LBUMP 0xFFFfff
 
//progress_bar definitions
char cur_st_percent;
dword cur_st_text;
 
//connection data
#define DEFAULT_POP_PORT 110;
char POP_server_path[128];
dword POP_server_port;
char login[128];
char request[256+22];
int request_len;
char connection_status;
dword socketnum;
 
sockaddr_in sockaddr;
 
int aim;
int ticks;
 
char immbuffer[BUFFERSIZE];
 
llist mail_list;
llist letter_view;
 
dword TAB_H = false; //19;
dword TAB_W = 150;
dword TOOLBAR_H = 31; //50;
dword STATUSBAR_H =15;
dword col_bg;
dword panel_color;
dword border_color;
 
bool open_in_a_new_window = false;
 
progress_bar wv_progress_bar = {0, 10, 83, 150, 12, 0, 0, 100, 0xeeeEEE, 8072B7EBh, 0x9F9F9F};
 
#define URL_SIZE 4000;
 
int http_transfer;
char version[]=" WebView 0.1";
#include "..\TWB\TWB.c"
 
#include "settings.c"
#include "login.c"
#include "letter_attr.c"
#include "mail_box.c"
#include "parselist.c"
 
void main() {
 
CursorPointer.Load(#CursorFile);
load_dll(boxlib, #box_lib_init,0);
load_dll(network_lib, #network_lib_init,0);
load_dll(netcode_lib, #base64_encode,0);
load_dll(libimg, #libimg_init,1);
load_dll(iconv_lib, #iconv_open,0);
OpenMailDat();
SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE + EVM_MOUSE_FILTER + EVM_STACK);
LoginBoxLoop();
}
 
 
int DefineWindow(dword wtitle) {
sc.get();
DefineAndDrawWindow(GetScreenWidth()-WIN_W/2,GetScreenHeight()-WIN_H/2, WIN_W, WIN_H, 0x73,sc.work, 0,0);
DrawTitle(wtitle);
GetProcessInfo(#Form, SelfInfo);
if (Form.status_window&ROLLED_UP) return 0; //rolled_up
if (Form.width < WIN_MIN_W) MoveSize(OLD,OLD,WIN_MIN_W,OLD);
if (Form.height < WIN_MIN_H) MoveSize(OLD,OLD,OLD,WIN_MIN_H);
return 1;
}
 
 
void OpenMailDat() {
char read_data[512], pass_b64[256];
ReadFile(0, 512, #read_data, "/sys/network/mail.dat");
if (!read_data)
{
strcpy(#email_text, "testliza@ya.ru");
strcpy(#pass_text, "kolibri");
}
else
{
strcpy(#pass_b64, strchr(#read_data, '\n'));
base64_decode stdcall (#pass_b64, #pass_text, strlen(#pass_b64));
ESBYTE[strchr(#read_data, '\n')] = NULL;
strcpy(#email_text, #read_data);
}
pass_box.size = pass_box.pos = strlen(#pass_text);
login_box.size = login_box.pos = strlen(#email_text);
}
 
void SaveAndExit() {
char write_data[512], pass_b64[256];
Close(socketnum);
strcpy(#write_data, #email_text);
chrcat(#write_data, '\n');
base64_encode stdcall (#pass_text, #pass_b64, strlen(#pass_text));
strcat(#write_data, #pass_b64);
CreateFile(strlen(#write_data)+1, #write_data, "/sys/network/mail.dat");
ExitProcess();
}
 
 
int GetRequest(dword command, text) {
strcpy(#request, command);
if (text)
{
chrcat(#request, ' ');
strcat(#request, text);
}
strcat(#request, "\n");
return strlen(#request);
}
 
void StopConnect(dword message) {
if (message) notify(message);
aim = STOP;
Close(socketnum);
}
 
void EventShowLinkMenu(dword _left, _top)
{
//do nothing, stub
return;
}
 
stop:
 
/programs/cmm/experimental/liza/login.c
0,0 → 1,222
//Leency & SoUrcerer, LGPL
 
//LoginPanel
#define PANEL_W 220
#define PANEL_H 140
int panel_x, panel_y;
 
//edit_boxes at LoginPanel
int mouse_dd;
unsigned char email_text[128];
unsigned char pass_text[32];
edit_box login_box= {PANEL_W-6,207,16,0xffffff,0x94AECE,0xffffff,0xffffff,0x10000000,sizeof(email_text)+2,#email_text,#mouse_dd,0b10};
edit_box pass_box= {PANEL_W-6,207,16,0xffffff,0x94AECE,0xffffff,0xffffff,0x10000000,sizeof(pass_text)+2,#pass_text,#mouse_dd,0b1};
 
 
void LoginNetworkProcess()
{
if (aim) switch(aim)
{
case RESOLVE:
if (!email_text) StopConnect("Enter email!");
if (!pass_text) StopConnect("Enter password!");
if ((!login) || (!POP_server_path)) StopConnect("Email should be such as username@somesite.com");
if (!aim) return;
 
sockaddr.sin_family = AF_INET4;
AX = POP_server_port;
$xchg al, ah
sockaddr.sin_port = AX;
sockaddr.sin_addr = GetIPfromAdress(#POP_server_path);
if (!sockaddr.sin_addr) { StopConnect("Can't obtain server IP."); break;}
else aim = OPEN_CONNECTION;
break;
case OPEN_CONNECTION:
socketnum = Socket(AF_INET4, SOCK_STREAM, 0);
if (socketnum == 0xffffffff) { StopConnect("Cannot open socket."); break;}
Connect(socketnum, #sockaddr, 16);
aim = GET_ANSWER_CONNECT;
break;
case GET_ANSWER_CONNECT:
ticks = Receive(socketnum, #immbuffer, BUFFERSIZE, 0);
if ((ticks == 0xffffff) || (ticks < 2)) { StopConnect("Connection failed"); break;}
immbuffer[ticks]='\0';
if (immbuffer[ticks-2]=='\n')
{
if (strstr(#immbuffer,"+OK"))
aim = SEND_USER;
else
StopConnect("Failed to connect to server. Retry...");
}
break;
case SEND_USER:
request_len = GetRequest("USER", #login);
if (Send(socketnum, #request, request_len, 0) == 0xffffffff)
{
SetLoginStatus("Failed to send USER. Retry...");
break;
}
else aim = GET_ANSWER_USER;
break;
case GET_ANSWER_USER:
ticks = Receive(socketnum, #immbuffer, BUFFERSIZE, 0);
if ((ticks == 0xffffffff) || (ticks < 2)) { SetLoginStatus("Connection failed"); break;}
immbuffer[ticks]='\0';
if (immbuffer[ticks-2]=='\n')
{
if (strstr(#immbuffer,"+OK"))
aim = SEND_PASS;
else
{
debug(#immbuffer);
StopConnect("Wrong username");
}
}
else
{
StopConnect("Connection failed");
}
break;
case SEND_PASS:
request_len = GetRequest("PASS", #pass_text);
if (Send(socketnum, #request, request_len, 0) == 0xffffffff)
{
SetLoginStatus("Failed to send PASS. Retry...");
break;
}
else aim = GET_ANSWER_PASS;
break;
case GET_ANSWER_PASS:
ticks = Receive(socketnum, #immbuffer, BUFFERSIZE, 0);
if ((ticks == 0xffffff) || (ticks < 2)) { SetLoginStatus("Server disconnected"); break;}
immbuffer[ticks]='\0';
if (immbuffer[ticks-2]=='\n')
{
if (strstr(#immbuffer,"+OK")) MailBoxLoop();
else
{
StopConnect("Wrong password or POP3 disabled");
debug(#immbuffer);
}
}
else
{
StopConnect("Connection failed");
}
}
}
 
 
void LoginBoxLoop()
{
int id;
 
SetLoginStatus(NULL);
goto _LB_DRAW;
loop()
{
WaitEventTimeout(2);
switch(EAX & 0xFF)
{
case evMouse:
edit_box_mouse stdcall (#login_box);
edit_box_mouse stdcall (#pass_box);
break;
case evButton:
id = GetButtonID();
if (id==1) SaveAndExit();
if (id==11) SettingsDialog();
if (id==12)
{
if (!aim) aim=RESOLVE; else aim=NULL;
GetSettings();
DrawLoginScreen();
}
break;
case evKey:
GetKeys();
if (key_scancode==SCAN_CODE_TAB)
{
if (login_box.flags & 0b10)
{ pass_box.flags = 0b11; login_box.flags = 0; }
else
{ pass_box.flags = 0b1; login_box.flags = 0b10; }
edit_box_draw stdcall(#login_box);
edit_box_draw stdcall(#pass_box);
break;
}
if (key_scancode==SCAN_CODE_ENTER) && (!aim)
{
aim=RESOLVE;
GetSettings();
DrawLoginScreen();
}
EAX = key_editbox;
edit_box_key stdcall(#login_box);
edit_box_key stdcall(#pass_box);
break;
case evReDraw: _LB_DRAW:
if !(DefineWindow(LOGIN_HEADER)) break;
DrawLoginScreen();
break;
 
default:
LoginNetworkProcess();
}
}
}
 
 
 
void DrawLoginScreen()
{
panel_x = Form.cwidth - PANEL_W /2;
panel_y = Form.cheight - PANEL_H /2 - 5;
 
DrawBar(0,0, Form.cwidth, Form.cheight, sc.work);
WriteText(panel_x,panel_y-3,0x80,sc.work_text,"Your Email:");
DrawEditBoxPos(panel_x+3, panel_y+12, #login_box);
WriteText(panel_x,panel_y+45,0x80,sc.work_text,"Password:");
DrawEditBoxPos(panel_x+3, panel_y+60, #pass_box);
if (!aim)
{
DrawCaptButton(panel_x,panel_y+100,100,26,11,sc.button, sc.button_text,"Settings");
DrawCaptButton(panel_x+120,panel_y+100,100,26,12,sc.button, sc.button_text,"Enter >");
}
else DrawCaptButton(panel_x+120,panel_y+100,100,26,12,sc.button, sc.button_text,"Stop");
SetLoginStatus(cur_st_text);
}
 
 
void GetSettings()
{
strcpy(#login, #email_text);
ESBYTE[strchr(#login,'@')] = NULL;
if (automatic.checked)
{
strcpy(#POP_server_path, "pop.");
strcat(#POP_server_path, strchr(#email_text,'@')+1);
POP_server_port = DEFAULT_POP_PORT;
}
else
{
strcpy(#POP_server_path, #POP_server1);
POP_server_port = atoi(#POP_server_port1);
}
if (!strcmp(#POP_server_path, "pop.gmail.com")) StopConnect("Can't connect GMAIL servers. Not support SSL/TLS encryption");
}
 
void SetLoginStatus(dword text1)
{
if (text1) WriteText(10, Form.cheight-22, 0x80, sc.work_text, text1);
cur_st_text = text1;
}
/programs/cmm/experimental/liza/settings.c
0,0 → 1,107
//Leency & SoUrcerer, LGPL
 
char *text1[] = {"POP server adress:", "POP server port:", "SMTP server adress:", "SMTP server port:", '\0'};
 
unsigned char POP_server1[128]="pop.server.com";
unsigned char POP_server_port1[7]="110";
unsigned char SMTP_server1[128]="smtp.server.com";
unsigned char SMTP_server_port1[7]="25";
edit_box POP_server_box = {210,230,125,0xffffff,0x94AECE,0xffc90E,0xCACACA,0x10000000,sizeof(POP_server1)-2,#POP_server1,0,0};
edit_box POP_server_port_box = {210,230,160,0xffffff,0x94AECE,0xffc90E,0xCACACA,0x10000000,sizeof(POP_server_port1)-2,#POP_server_port1,0,0};
edit_box SMTP_server_box = {210,230,195,0xffffff,0x94AECE,0xffc90E,0xCACACA,0x10000000,sizeof(SMTP_server1)-2,#SMTP_server1,0,0};
edit_box SMTP_server_port_box = {210,230,230,0xffffff,0x94AECE,0xffc90E,0xCACACA,0x10000000,sizeof(SMTP_server_port1)-2,#SMTP_server_port1,0,0};
 
checkbox automatic = { "Automatic configuration", true };
 
void UpdateEditboxFlags(dword additional_flag)
{
EditBox_UpdateText(#POP_server_box, additional_flag + 0);
EditBox_UpdateText(#POP_server_port_box, additional_flag + ed_figure_only + 0);
EditBox_UpdateText(#SMTP_server_box, additional_flag + 0);
EditBox_UpdateText(#SMTP_server_port_box, additional_flag + ed_figure_only + 0);
}
 
void SettingsDialog()
{
int id;
UpdateEditboxFlags(ed_disabled);
goto _OPT_WIN;
loop() switch(WaitEvent())
{
case evMouse:
edit_box_mouse stdcall(#POP_server_box);
edit_box_mouse stdcall(#POP_server_port_box);
edit_box_mouse stdcall(#SMTP_server_box);
edit_box_mouse stdcall(#SMTP_server_port_box);
break;
case evButton:
id = GetButtonID();
if (id==1) SaveAndExit();
if (id==19) LoginBoxLoop();
if (automatic.click(id))
{
if (automatic.checked) {
UpdateEditboxFlags(ed_disabled);
POP_server_box.blur_border_color = POP_server_port_box.blur_border_color =
SMTP_server_box.blur_border_color = SMTP_server_port_box.blur_border_color = 0xCACACA;
}
else {
UpdateEditboxFlags(0);
POP_server_box.flags = 0b10;
POP_server_box.blur_border_color = POP_server_port_box.blur_border_color =
SMTP_server_box.blur_border_color = SMTP_server_port_box.blur_border_color = 0xFFFfff;
}
DrawOptionsWindow();
}
break;
case evKey:
GetKeys();;
 
if (automatic.checked==true) break;
if (key_scancode==SCAN_CODE_TAB)
{
if (POP_server_box.flags & ed_focus) { UpdateEditboxFlags(0); POP_server_port_box.flags += ed_focus; } else
if (POP_server_port_box.flags & ed_focus) { UpdateEditboxFlags(0); SMTP_server_box.flags += ed_focus; } else
if (SMTP_server_box.flags & ed_focus) { UpdateEditboxFlags(0); SMTP_server_port_box.flags += ed_focus; } else
if (SMTP_server_port_box.flags & ed_focus) { UpdateEditboxFlags(0); POP_server_box.flags += ed_focus; } else
{ UpdateEditboxFlags(0); POP_server_box.flags = 0b10; }
DrawOptionsWindow();
}
EAX=key_ascii<<8;
edit_box_key stdcall(#POP_server_box);
edit_box_key stdcall(#POP_server_port_box);
edit_box_key stdcall(#SMTP_server_box);
edit_box_key stdcall(#SMTP_server_port_box);
break;
 
case evReDraw: _OPT_WIN:
if !(DefineWindow(OPTIONS_HEADER)) break;
DrawBar(0,0, Form.cwidth, Form.cheight, sc.work);
DrawOptionsWindow();
break;
}
}
 
void DrawOptionsWindow()
{
#define ELEM_X 25
int i;
incn y;
y.n=0;
DrawBar(0, Form.cheight - 40, Form.cwidth, 1, sc.work_graph);
DrawBar(0, Form.cheight - 40+1, Form.cwidth, 1, LBUMP);
DrawCaptButton(Form.cwidth-79, Form.cheight-32, 70, 25, 19, sc.button, sc.button_text,"Apply");
 
WriteText(ELEM_X, y.inc(20), 0x81, sc.work_text, "Network settings");
automatic.draw(ELEM_X, y.inc(65));
for (i=0; i<4; i++) {
WriteTextWithBg(ELEM_X+40, i*35+POP_server_box.top + 3, 0xD0, sc.work_text, text1[i], sc.work);
}
DrawEditBox(#POP_server_box);
DrawEditBox(#POP_server_port_box);
DrawEditBox(#SMTP_server_box);
DrawEditBox(#SMTP_server_port_box);
}
/programs/cmm/experimental/liza/parselist.c
0,0 → 1,155
//Leency & SoUrcerer, LGPL
 
void ParseMail()
{
dword line_off, new_buf;
char tline[256];
 
if ( mailend-mailstart > 9) if (strncmp(mailend-5,"\n.\n",5)==0) // note that c-- assembles "\n.\n" to 0x0d, 0x0a, 0x2e, 0x0d, 0x0a
{
aim = STOP;
mailend -= 5;
DSBYTE[mailend] = '\0';
if (strstr(mailstart, "+OK")!=mailstart)
{
aim = GET_ANSWER_RETR;
mailend = mailstart;
debug("GET_ANSWER_RETR != +OK, retry GET_ANSWER_RETR");
return;
}
mailsize = mailend - mailstart;
debug("Getting QP");
if (strstri(mailstart, "quoted-printable")!=0)
{
new_buf = malloc(mailsize);
qp_decode stdcall (mailstart, new_buf, mailsize);
if (EAX==-1) debug("Too small buffer to convert QUOTED-PRINTABLE");
else
{
free(mailstart);
mailstart = new_buf;
mailsize = strlen(mailstart);
mailend = mailsize + mailstart;
}
}
debug("ProcessBase64");
ProcessBase64();
debug("GetHeaders: From, To, Date, Subject");
GetHeader(#from, "\nFrom:");
GetHeader(#to, "\nTo:");
GetHeader(#date, "\nDate:");
GetHeader(#subj, "\nSubject:");
debug("Get mdata");
mdata = strstr(mailstart, "\x0a\x0d") + 3;
debug("ConvertToDOS");
ConvertToDOS(mdata, mailstart);
debug("SetAtrFromCurr");
atr.SetAtrFromCurr(mail_list.cur_y+1);
DrawMailBox();
}
}
 
void ConvertToDOS(dword inbuf, searchin)
{
dword dos_buf=0;
cur_charset = CH_CP866;
if (strstri(searchin, "windows-1251")!=0) || (strstri(searchin, "windows1251")!=0)
{ dos_buf = ChangeCharset("CP1251", "CP866", inbuf); cur_charset = CH_CP1251;}
else if (strstri(searchin, "koi8-")!=0)
{ dos_buf = ChangeCharset("KOI8-RU", "CP866", inbuf); cur_charset = CH_KOI8;}
else if (strstri(searchin, "utf-8")!=0) || (strstri(searchin, "utf8")!=0)
{ dos_buf = ChangeCharset("UTF-8", "CP866", inbuf); cur_charset = CH_UTF8;}
else if (strstri(searchin, "iso8859-5")!=0) || (strstri(searchin, "iso-8859-5")!=0)
{ dos_buf = ChangeCharset("ISO8859-5", "CP866", inbuf); cur_charset = CH_ISO8859_5;}
else if (strstri(searchin, "windows-1252")!=0) || (strstri(searchin, "windows1252")!=0)
{ dos_buf = ChangeCharset("CP1252", "CP866", inbuf); cur_charset = CH_CP1252;}
}
 
 
dword CopyBetweenOffsets(dword start, end) //do not forget to free(line) after use
{
dword line, new_line;
if (end <= start) return 0;
line = new_line = malloc(end - start + 3);
while (end > start)
{
DSBYTE[new_line] = DSBYTE[start];
start++;
new_line++;
}
DSBYTE[new_line] = '\0';
return line;
}
 
 
void GetHeader(dword workstr, searchstr)
{
char tmpbuf[512];
dword Qoff;
int q_start, b_start;
 
strcpyb(mailstart, workstr, searchstr, "\n");
/*
debug(searchstr);
debug(workstr);
if (strlen(workstr)<8) return;
q_start = strstri(workstr, "?Q?");
b_start = strstri(workstr, "?B?");
if (q_start)
{
qp_decode stdcall (workstr, #tmpbuf, strlen(workstr));
ConvertToDOS(#tmpbuf, workstr);
strcpy(workstr, #tmpbuf);
Qoff = strstri(workstr, "?Q?");
strcpy(workstr, Qoff);
}
 
//any text that goes after "?=" deletes now
if (b_start)
{
base64_decode stdcall (b_start, #tmpbuf, strlen(b_start)-5);
ConvertToDOS(#tmpbuf, workstr);
strcpy(workstr, #tmpbuf);
}
if (strlen(workstr)+10*6-Form.cwidth>0) { workstr=Form.cwidth/6+workstr-12; DSBYTE[workstr]='\0';}
*/
}
 
 
 
void ProcessBase64()
{
int b_start, b_end, b_size, b_buf;
int clean_mailstart;
 
b_start = strstr(mailstart, "?B?");
debugval("b_size", b_start);
if (b_start)
{
b_end = strstr(b_start, "?=");
debugval("b_end", b_end);
b_size = b_end - b_start;
debugval("b_size", b_size);
b_buf = malloc(b_size);
strcpyb(mailstart, b_buf, "?B?", "?=");
debugval("b_buf", b_buf);
 
base64_decode stdcall (b_buf, b_buf, b_size-3);
ConvertToDOS(b_buf, mailstart);
if (b_size<strlen(b_buf)) notify("base64 overflow");
 
clean_mailstart = malloc(strlen(mailstart));
strlcpy(clean_mailstart, mailstart, b_start-mailstart);
strcat(clean_mailstart, b_buf);
strcat(clean_mailstart, b_end+2);
free(b_buf);
free(mailstart);
mailsize = strlen(clean_mailstart);
mailstart = clean_mailstart;
mailend = mailstart + mailsize;
ProcessBase64();
}
}
 
 
//
/programs/cmm/experimental/liza/compile_en.bat
0,0 → 1,5
@C-- liza.c
@del liza
@rename liza.com liza
@del warning.txt
@pause
/programs/cmm/experimental/liza/letter_attr.c
0,0 → 1,63
char from[256];
char to[256];
char date[256];
char subj[256];
dword mdata;
 
struct letter_attr
{
char adress[sizeof(to)];
char subject[sizeof(subj)];
byte direction;
int size;
void CreateArray();
void SetSizes();
void SetAtrFromCurr(int N);
int GetSize(int N);
char GetDirection(int N);
dword GetSubject(int N);
dword GetAdress(int N);
};
letter_attr atr;
dword mails_db;
 
 
 
void letter_attr::CreateArray()
{
free(mails_db);
mails_db = malloc( mail_list.count * sizeof(atr) );
}
 
void letter_attr::SetSizes()
{
int i;
for (i=1; i < mail_list.count; i++)
{
ESDWORD[sizeof(atr)*i+#mails_db+#atr.size-#atr] = GetLetterSize_(i);
ESDWORD[sizeof(atr)*i+#mails_db+#atr.subject-#atr] = ' ';
ESDWORD[sizeof(atr)*i+#mails_db+#atr.subject-#atr+1] = '\0';
}
}
 
void letter_attr::SetAtrFromCurr(int N)
{
byte mail_direction=0;
if (strstri(#to, #email_text))
{
mail_direction = 1;
strcpy(sizeof(atr)*N+#mails_db+#atr.adress-#atr, #from);
}
if (strstri(#from, #email_text))
{
mail_direction = 2;
strcpy(sizeof(atr)*N+#mails_db+#atr.adress-#atr, #to);
}
ESBYTE[sizeof(atr)*N+#mails_db+#atr.direction-#atr] = mail_direction;
strcpy(sizeof(atr)*N+#mails_db+#atr.subject-#atr, #subj);
}
 
int letter_attr::GetSize(int N) { return ESDWORD[sizeof(atr)*N+#mails_db+#atr.size-#atr]; }
char letter_attr::GetDirection(int N) { return ESBYTE[sizeof(atr)*N+#mails_db+#atr.direction-#atr]; }
dword letter_attr::GetSubject(int N) { return sizeof(atr)*N+#mails_db+#atr.subject-#atr; }
dword letter_attr::GetAdress(int N) { return sizeof(atr)*N+#mails_db+#atr.adress-#atr; }
/programs/cmm/experimental/liza/img/letter_icons.h
0,0 → 1,0
dword letter_icons_pal[]= {0x008080C0,0x00ADADAD,0x00ABABAB,0x00A9A9A9,0x00A8A8A8,0x00B2B2B2,0x00F0F0F0,0x00FFFFFF,0x00F1F1F1,0x00B0B0B0,0x00D1D1D1,0x00DEDEDE,0x00FCFCFC,0x00F6F6F6,0x00F4F4F4,0x00F5F5F5,0x00DFDFDF,0x00CECECE,0x00ACACAC,0x00F8F8F8,0x00BEBEBE,0x00D8D8D8,0x00F3F3F3,0x00ECECEC,0x00DCDCDC,0x00BBBBBB,0x00A5A5A5,0x00EEEEEE,0x00B5B5B5,0x00D6D6D6,0x00EDEDED,0x00E6E6E6,0x00DADADA,0x009F9F9F,0x00E3E3E3,0x00AEAEAE,0x00E9E9E9,0x00D7D7D7,0x00E4E4E4,0x00E5E5E5,0x00989898,0x00CFCFCF,0x007C7C7C,0x00787878,0x00E0E0E0,0x00919191,0x00D2D2D2,0x009D9D9D,0x00F2F2F2,0x00999999,0x009B9B9B,0x00A7A7A7,0x00A2A2A2,0x00D4D4D4,0x008B8B8B,0x00CDCDCD,0x00A1A1A1,0x00858585,0x00EBEBEB,0x00E7E7E7,0x009A9A9A,0x00818181,0x00D9D9D9,0x00EAEAEA,0x00828282,0x00606060,0x00848484,0x00838383,0x00179C15,0x00F7F7CD,0x008FF778,0x00E4F7C0,0x00C2F7A6,0x00F3F6C2,0x00EBF7BF,0x00ADF791,0x0095F77E,0x002CF21F,0x0038E82A,0x0026DC17,0x0025CC1D,0x0020E915,0x00179714,0x00169C13,0x0026E21D,0x0029EC1D,0x0015909B,0x00B7F7FA,0x0078F6EC,0x00C3F9FB,0x00A6F6E3,0x0091F6E5,0x007DF7EC,0x001FE9F2,0x0029E2E8,0x0021CFDB,0x001DC2CB,0x0015DEE9,0x0012818B,0x001DD7E2,0x001DE3EC}
/programs/cmm/experimental/liza/img/letter_icons.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/cmm/experimental/liza/img/letter_icons.raw
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/programs/cmm/experimental/liza/img
Property changes:
Added: tsvn:logminsize
+5
\ No newline at end of property
/programs/cmm/experimental/liza
Property changes:
Added: tsvn:logminsize
+5
\ No newline at end of property