3,12 → 3,24 |
#define LIST_INFO_H 59 |
int status_bar_h = 15; |
|
llist mail_list; |
llist letter_view; |
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 scroll2 = { 17,200,210, LIST_INFO_H,18,0,115,15,0,0xCCCccc,0xD2CED0,0x555555,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1}; |
|
struct letter_attr |
{ |
char adress[64]; |
char header[256]; |
byte m_type; |
int size; |
void CreateMailsArray(); |
void SetMailsSizes(); |
int GetLetterSize(int N); |
}; |
letter_attr atr; |
dword mails_db; |
|
llist mail_list; |
llist letter_view; |
|
char from[256]; |
char to[256]; |
252,8 → 264,8 |
debug("Got mail list"); |
DrawMailBox(); |
|
CreateMailsArray(); |
SetMailsSizes(); |
atr.CreateMailsArray(); |
atr.SetMailsSizes(); |
} |
} |
} |
268,7 → 280,7 |
if (EAX == 0xffffffff) { notify("Error while trying to get letter from server"); aim=NULL; break;} |
|
mailbuffer = free(mailbuffer); |
letter_size = GetLetterSize(mail_list.current+1) + 1024; |
letter_size = atr.GetLetterSize(mail_list.current+1) + 1024; |
mailbuffer = malloc(letter_size); |
mailpointer = mailbuffer; |
aim = GET_ANSWER_RETR; |
365,8 → 377,7 |
DefineButton(0, on_y, mail_list.w-1, mail_list.line_h, 30+i+BT_HIDE+BT_NOFRAME); |
DrawBar(0, on_y + mail_list.line_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, itoa(GetLetterSize(i+mail_list.first+1))); |
WriteText(mail_list.w - 40, on_y+5, 0x80, 0, ConvertSize(GetLetterSize(i+mail_list.first+1))); |
WriteText(mail_list.w - 40, on_y+5, 0x80, 0, ConvertMemSize(atr.GetLetterSize(i+mail_list.first+1))); |
} |
DrawBar(0, i*mail_list.line_h + mail_list.y, mail_list.w, -i*mail_list.line_h+mail_list.h, 0xFFFfff); |
DrawScroller1(); |
382,20 → 393,6 |
} |
|
|
dword ConvertSize(unsigned int bytes) |
{ |
unsigned char size_prefix[8], size_nm[4]; |
if (bytes>=1073741824) strcpy(#size_nm, " Gb"); |
else if (bytes>=1048576) strcpy(#size_nm, " Mb"); |
else if (bytes>=1024) strcpy(#size_nm, " Kb"); |
else strcpy(#size_nm, " b "); |
while (bytes>1023) bytes/=1024; |
strcpy(#size_prefix, itoa(bytes)); |
strcat(#size_prefix, #size_nm); |
return #size_prefix; |
} |
|
|
void DrawLetterInfo() |
{ |
int lt_y = mail_list.y+mail_list.h; |
520,15 → 517,6 |
|
|
|
|
|
|
|
|
|
|
|
|
void listputc(char agot_char){ |
*listpointer=agot_char; |
listpointer++; |
547,39 → 535,24 |
} |
|
|
struct line_element |
{ |
byte m_type; |
char adress[64]; |
char header[256]; |
int size; |
}; |
dword mails_db; |
|
void CreateMailsArray() |
|
void letter_attr::CreateMailsArray() |
{ |
mails_db = free(mails_db); |
mails_db = malloc( mail_list.count * sizeof(line_element) ); |
mails_db = malloc( mail_list.count * sizeof(atr) ); |
} |
|
dword GetCurrentElement(int el_N) |
void letter_attr::SetMailsSizes() |
{ |
return sizeof(line_element)*el_N + #mails_db; |
} |
|
void SetMailsSizes() |
{ |
int i, temp; |
int i, off; |
for (i=0; i < mail_list.count; i++) |
{ |
temp = GetLetterSize_(i); |
EBX = GetCurrentElement(i); //в регистр EBX суём адрес блока памяти со смещением к элементу N с котрым мы хотим работать |
EBX.line_element.size = temp;//работаем с m_type N-ного элемента структуры отраженной на блок памяти |
ESDWORD[sizeof(atr)*i+#mails_db+#atr.size-#atr] = GetLetterSize_(i); |
} |
} |
|
int GetLetterSize(int el_N) |
int letter_attr::GetLetterSize(int N) |
{ |
EBX = GetCurrentElement(el_N); |
return EBX.line_element.size; |
return ESDWORD[sizeof(atr)*N+#mails_db+#atr.size-#atr]; |
} |