//CODED by Veliant, Leency, Nable. GNU GPL licence. #startaddress 0 #code32 TRUE char os_name[8] = {'M','E','N','U','E','T','0','1'}; dword os_version = 0x00000001; dword start_addr = #main; dword final_addr = #stop+32; dword alloc_mem = #0x00100000; dword x86esp_reg = #0x00100000; dword I_Param = #param; dword I_Icon = 0x0; char param[256]=""; //Events #define evMouse 6 #define evButton 3 #define evKey 2 #define evReDraw 1 //Button options #define BT_DEL 0x80000000 #define BT_HIDE 0x40000000 #define BT_NOFRAME 0x20000000 #define OLD -1 #define true 1 #define false 0 //------------------------------------------------------------------------- struct mouse{ dword x,y,lkm,pkm,hor,vert; void get(); }; void mouse::get() { EAX = 37; EBX = 1; $int 0x40 $mov ebx, eax $shr eax, 16 $and ebx,0x0000FFFF x = EAX; y = EBX; EAX = 37; EBX = 2; $int 0x40 $mov ebx, eax $and eax, 0x00000001 $shr ebx, 1 $and ebx, 0x00000001 lkm = EAX; pkm = EBX; EAX = 37; //скролл EBX = 7; $int 0x40 $mov ebx, eax $shr eax, 16 $and ebx,0x0000FFFF //hor = EAX; vert = EBX; } struct proc_info{ dword use_cpu; word pos_in_stack,num_slot,rezerv1; char name[11]; char rezerv2; dword adress,use_memory,ID,left,top,width,height; word status_slot,rezerv3; dword work_left,work_top,work_width,work_height; char status_window; void GetInfo(dword ECX); #define SelfInfo -1 }; void proc_info::GetInfo(dword ECX) { EAX = 9; EBX = #use_cpu; $int 0x40 } struct system_colors{ dword frame,grab,grab_button,grab_button_text,grab_text,work,work_button,work_button_text,work_text,work_graph; void get(); }; void system_colors::get() { EAX = 48; EBX = 3; ECX = #frame; EDX = 40; $int 0x40 } //------------------------------------------------------------------------------ inline fastcall dword WaitEvent(){ EAX = 10; $int 0x40 } inline fastcall dword WaitEventTimeout(dword EBX){ EAX = 23; $int 0x40 } inline fastcall SetEventMask(dword EBX) { EAX = 40; $int 0x40 } inline fastcall ScancodesGeting(){ $mov eax,66; $mov ebx,1; $mov ecx,1; //сканкоды $int 0x40 } inline fastcall word GetKey(){ EAX = 2; // just read this key from buffer $int 0x40 EAX = EAX >> 8; } inline fastcall word GetButtonID(){ EAX = 17; $int 0x40 EAX = EAX >> 8; } inline fastcall ExitProcess(){ EAX = -1; // close this program $int 0x40 } inline fastcall Pause(dword EBX) { //Пауза, в сотых долях секунды EBX = value $mov eax, 5 $int 0x40 } //------------------------------------------------------------------------------ inline fastcall void DrawTitle(dword ECX) { EAX = 71; EBX = 1; $int 0x40; } inline fastcall dword GetSkinWidth() { EAX = 48; EBX = 4; $int 0x40 } inline fastcall void ChangeSkin(ECX){ EAX = 48; EBX = 8; $int 0x40 } inline fastcall dword GetScreenWidth() { EAX = 14; EBX = 4; $int 0x40 $shr eax, 16 $and eax,0x0000FFFF } inline fastcall MoveSize(dword EBX,ECX,EDX,ESI) { EAX = 67; $int 0x40 } inline fastcall dword LoadLibrary(dword ECX) { $mov eax, 68 $mov ebx, 19 $int 0x40 } //------------------------------------------------------------------------------ inline fastcall dword strlen(dword EDI){ EAX=0; ECX=-1; $REPNE $SCASB EAX-=2+ECX; } inline fastcall copystr(dword ESI,EDI) { $cld l1: $lodsb $stosb $test al,al $jnz l1 } byte fastcall TestBit(EAX, CL) { $shr eax,cl $and eax,1 } char buffer[11]=""; inline fastcall dword IntToStr(dword ESI) { $mov edi, #buffer $mov ecx, 10 $test esi, esi $jns f1 $mov al, '-' $stosb $neg esi f1: $mov eax, esi $push -'0' f2: $xor edx, edx $div ecx $push edx $test eax, eax $jnz f2 f3: $pop eax $add al, '0' $stosb $jnz f3 $mov eax, #buffer $ret } inline fastcall dword StrToInt() { ESI=EDI=EAX; IF(DSBYTE[ESI]=='-')ESI++; EAX=0; BH=AL; do{ BL=DSBYTE[ESI]-'0'; EAX=EAX*10+EBX; ESI++; }while(DSBYTE[ESI]>0); IF(DSBYTE[EDI]=='-') -EAX; } /*int strcmp(char* string1, char* string2) { loop () { IF (*string1<*string2) RETURN -1; IF (*string1>*string2) RETURN 1; IF (*string1=='\0') RETURN 0; string1++; string2++; } }*/ inline fastcall int strcmp(ESI, EDI) { loop() { IF (DSBYTE[ESI]DSBYTE[EDI]) RETURN 1; IF (DSBYTE[ESI]=='\0') RETURN 0; ESI++; EDI++; } } inline fastcall unsigned int find_symbol(ESI,BL) { int jj=0, last=-1; do{ jj++; $lodsb IF(AL==BL) last=jj; } while(AL!=0); return last; } dword StrToCol(char* htmlcolor) { dword j=1, color=0; char ch=0x00; IF (ESBYTE[htmlcolor]<>'#') RETURN; FOR (;j<7;j++) { ch=ESBYTE[htmlcolor+j]; IF ((ch>='0') && (ch<='9')) ch -= '0'; IF ((ch>='A') && (ch<='F')) ch -= 'A'-10; IF ((ch>='a') && (ch<='f')) ch -= 'a'-10; color = color*0x10 + ch; } EAX=color; } inline fastcall dword upcase(dword ESI) { do{ AL=DSBYTE[ESI]; IF(AL>='a')IF(AL<='z')DSBYTE[ESI]=AL&0x5f; ESI++; }while(AL!=0); } /*inline fastcall void lowcase(ESI) { do{ $LODSB IF(AL>='A')&&(AL<='Z'){ AL+=0x20; DSBYTE[ESI-1]=AL; CONTINUE; } }while(AL!=0); }*/ inline fastcall lowcase(ESI) { do{ $LODSB IF(AL>='A')&&(AL<='Z'){ AL+=0x20; DSBYTE[ESI-1]=AL; CONTINUE; } }while(AL!=0); } inline fastcall wintodos (dword ESI) { while (BL=ESBYTE[ESI]) { IF (BL>=192) { IF (BL>=240) ESBYTE[ESI] = BL - 16; ELSE ESBYTE[ESI] = BL - 64; } ELSE { IF (BL==178) ESBYTE[ESI] = 73; //I IF (BL==179) ESBYTE[ESI] = 105; //i IF (BL==175) ESBYTE[ESI] = 244; //J IF (BL==191) ESBYTE[ESI] = 245; //j IF (BL==170) ESBYTE[ESI] = 242; //E IF (BL==186) ESBYTE[ESI] = 243; //e IF (BL==168) ESBYTE[ESI] = 240; //Ё IF (BL==184) ESBYTE[ESI] = 'e'; //e IF ((BL==147) || (BL==148) || (BL==171) || (BL==187)) ESBYTE[ESI] = 34; IF ((BL==150) || (BL==151)) ESBYTE[ESI] = 45; } ESI++; } } dword Hex2Symb(char* htmlcolor) { dword j=0, symbol=0; char ch=0x00; FOR (;j<2;j++) { ch=ESBYTE[htmlcolor+j]; IF (ch==0x0d) || (ch=='\9') RETURN ''; IF ((ch>='0') && (ch<='9')) ch -= '0'; IF ((ch>='A') && (ch<='F')) ch -= 'A'-10; IF ((ch>='a') && (ch<='f')) ch -= 'a'-10; symbol = symbol*0x10 + ch; } wintodos(#symbol); AL=symbol; } byte mas[66] = "юабцдефгхийклмнопярстужвьызшэщчъЮАБЦДЕФГХИЙКЛМНОПЯРСТУЖВЬЫЗШЭЩЧЪ"; inline fastcall void koitodos(dword EDI) { WHILE (BL=ESBYTE[EDI]) { IF (BL >= 0xC0) { BL -= 0xC0; ESBYTE[EDI] = mas[BL]; } //IF (ESBYTE[EDI]=='\244') ESBYTE[EDI]='i'; EDI++; } } //Asper //uncomplete inline fastcall int utf8rutodos(dword ESI) //- { EDI=ESI; while (BL=ESBYTE[ESI]) { IF (BL == 0xD0) || (BL == 0xD1) EDI--; else IF (BL == 0x81) && (ESBYTE[ESI-1]==0xD0) ESBYTE[EDI] = 0xF0; //ш else IF (BL == 0x91) && (ESBYTE[ESI-1]==0xD1) ESBYTE[EDI] = 0xF1; //м else IF (BL == 0xE2) && (ESBYTE[ESI+1]==0x80) && (ESBYTE[ESI+2]==0x94) //long defis { ESBYTE[EDI] = '-'; ESI+=2; } else IF (BL == 0xE2) && (ESBYTE[ESI+1]==0x80) && (ESBYTE[ESI+2]==0xA2) //central point { ESBYTE[EDI] = '*'; ESI+=2; } else IF (BL == 0xC2) && (ESBYTE[ESI+1]==0xA9) // (c) { ESBYTE[EDI] = '('; ESBYTE[EDI+1] = 'c'; ESBYTE[EDI+2] = ')'; EDI+=2; ESI++; } ELSE IF (BL == 0xC2) && ((ESBYTE[ESI+1]==0xAB) || (ESBYTE[ESI+1]==0xBB)) // " { ESBYTE[EDI] = '\"'; ESI++; } ELSE IF (BL == 0xC2) && (ESBYTE[ESI+1]==0xB7) // _ { ESBYTE[EDI] = '_'; ESI++; } ELSE IF (BL >= 0x90) && (BL <= 0xAF) { BL -= 0x10; ESBYTE[EDI] = BL; } ELSE IF (BL >= 0x80) && (BL <= 0x8F) { BL += 0x60; ESBYTE[EDI] = BL; } ELSE IF (BL >= 0xB0) && (BL <= 0xBF) { BL -= 0x10; ESBYTE[EDI] = BL; } ELSE ESBYTE[EDI] = BL; ESI++; EDI++; } WHILE (EDI0) DefineButton(x,y,width,height,id+BT_HIDE,0xEFEBEF); //кнопка WriteText(-strlen(text)*6+width/2+x+1,height/2-3+y,0x80,0,text,0); } void DrawCircle(int x, y, r) { int i; float px=0, py=r, ii = r * 3.1415926 * 2; FOR (i = 0; i < ii; i++) { PutPixel(px + x, y - py, 0); px = py / r + px; py = -px / r + py; //Pause(1); } } //------------------------------------------------------------------------------ inline fastcall dword WriteDebug(dword EDX) { $push ebx $push ecx $mov eax, 63 $mov ebx, 1 next_char: $mov ecx, DSDWORD[edx] $or cl, cl $jz done $int 0x40 $inc edx $jmp next_char done: $mov cl, 13 $int 0x40 $mov cl, 10 $int 0x40 $pop ecx $pop ebx }