#asm use32 org 0x0 db 'MENUET01' dd 0x01 dd _main dd I_END dd 0x100000 dd 0x7fff0 dd 0x0,0x0 include 'INTRINS.ASM' #endasm /********* C library *********/ s_get_event() { #asm mov eax,10 int 0x40 #endasm } s_get_key() { #asm mov eax,2 int 0x40 and eax,0x0000ff00 shr eax,8 #endasm } s_get_button() { #asm mov eax,17 int 0x40 shr eax,8 #endasm } s_begin_draw() { #asm mov ebx,1 mov eax,12 int 0x40 #endasm } s_end_draw() { #asm mov ebx,2 mov eax,12 int 0x40 #endasm } s_draw_window(x1,y1,w,h,c_area,c_grab,c_fram) int x1,y1,w,h; /* esp +32 +28 +24 +20 */ int c_area,c_grab,c_fram; /* esp +16 +12 +8 */ { #asm ; color of frames mov edi,[esp+8] ; color of grab bar bit 8->color gl mov esi,[esp+12] ; color of work area bit 8-> color gl mov edx,[esp+16] ;left / width mov ebx,[esp+32] shl ebx,16 mov bx,[esp+24] ;top / height mov ecx,[esp+28] shl ecx,16 mov cx,[esp+20] ;execute mov eax,0 int 0x40 #endasm } s_print_text(x,y,color,p_string) int x,y,color; /* esp +20 +16 +12 */ char *p_string; /* esp +8 */ { #asm mov ebx,[esp+20] shl ebx,16 mov bx,[esp+16] mov ecx,[esp+12] mov edx,[esp+8] ;find text lenght xor esi,esi .next: cmp byte [edx+esi],0 jz .good inc esi jmp .next .good: mov eax,4 int 0x40 #endasm } s_draw_button(x1,y1,w,h,color,id) int x1,y1,w,h; /* esp +28 +24 +20 +16 */ int color,id; /* esp +12 +8 */ { #asm ;left / width mov ebx,[esp+28] shl ebx,16 mov bx,[esp+20] ;top / height mov ecx,[esp+24] shl ecx,16 mov cx,[esp+16] mov edx,[esp+8] mov esi,[esp+12] mov eax,8 int 0x40 #endasm } s_quit() { #asm mov eax,-1 int 0x40 #endasm } /* s_get_event() s_get_key() s_get_button() s_begin_draw() s_end_draw() s_draw_window(x1,y1,w,h,c_area,c_grab,c_fram) s_print_text(x,y,color,p_string) s_draw_button(x1,y1,w,h,color,id) s_quit() */ /*****************************/ void main() {int event; int button_id; draw_window(); while(1) {event=s_get_event(); switch(event) {case 1: draw_window(); break; case 2: s_get_button(); break; case 3: button_id=s_get_button(); if(button_id==1) s_quit(); break; } } } char text1[50]="THIS IS AN EXAMPLE PROGRAM YOU COULD"; char text2[50]="SYSTEM FUNCTIONS ARE IN FILE SYSFUNCS.TXT"; char text3[50]=""; char text4[50]="SUCCESS"; int p_text[4]; draw_window() {int i; /* for index */ int y;y=25; p_text[0]=&text1[0]; p_text[1]=&text2[0]; p_text[2]=&text3[0]; p_text[3]=&text4[0]; s_begin_draw(); s_draw_window(100,100,300,120,0x02ffffff,0x805080d0,0x005080d0); s_print_text(8,8,0x10ddeeff,"Example application"); s_draw_button(300-19,5,12,12,0x6688dd,1); for(i=0;i<4;i++) s_print_text(20,y+=10,0x000000,p_text[i]); s_end_draw(); } #asm I_END: #endasm