kolibrios/programs/cmm/experimental/liza/liza.c

191 lines
4.4 KiB
C
Raw Normal View History

//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: