Advertisement
Guest User

Untitled

a guest
May 15th, 2014
381
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.17 KB | None | 0 0
  1. #define MEMSIZE 0x3E80
  2. #include "..\lib\kolibri.h"
  3. #include "..\lib\strings.h"
  4. #include "..\lib\mem.h"
  5. #include "..\lib\file_system.h"
  6.  
  7. #define SHM_OPEN        0
  8. #define SHM_OPEN_ALWAYS 0x04
  9. #define SHM_CREATE      0x08
  10. #define SHM_READ        0x00
  11. #define SHM_WRITE       0x01
  12.  
  13. #define E_NOTFOUND  5
  14. #define E_ACCESS    10
  15. #define E_NOMEM     30
  16. #define E_PARAM     33
  17.  
  18. #define SC_OK       0
  19. #define SC_EXIT     1
  20. #define SC_PUTC     2
  21. #define SC_PUTS     3
  22. #define SC_GETC     4
  23. #define SC_GETS     5
  24. #define SC_CLS      6
  25.  
  26. char *buffer;
  27. char *name;
  28. proc_info App;
  29.  
  30. int sc_init() {
  31.     int         result;
  32.  
  33.     GetProcessInfo(#App, SelfInfo);
  34.     name=int2str(App.ID);
  35.     strcat(name, "-SHELL");
  36.  
  37.     //*buffer = NULL;
  38.     result=createMemoryBuffer(name, SHM_OPEN_ALWAYS | SHM_WRITE, 1024*16, buffer);
  39.     return result;
  40. }
  41. void sc_exit()
  42. {
  43.     *buffer = SC_EXIT;
  44.     /*while (*buffer)*/ pause(5);
  45.     closeMemoryBuffer(name);
  46. }
  47. void sc_puts(char *str)
  48. {
  49.     *buffer = SC_PUTS;
  50.     strcpy(buffer+1, str);
  51. }
  52.  
  53.  
  54. void main()
  55. {  
  56.     int result,id,key;
  57.  
  58.     mem_init();
  59.     result=sc_init();
  60.     if(result==0) {
  61.         sc_exit();
  62.     }
  63.    
  64.    
  65.     loop()
  66.    {
  67.       switch(WaitEvent())
  68.       {
  69.          case evButton:
  70.             id=GetButtonID();              
  71.             if ((id==1) || (id==2)) ExitProcess();
  72.             break;
  73.      
  74.         case evKey:
  75.             key = GetKey();
  76.             IF (key==013){ //Enter
  77.                 WriteText(50,90,0x80,0xFF00FF,"Pressed Enter");
  78.             }
  79.             break;
  80.          
  81.          case evReDraw:
  82.             draw_window();
  83.             WriteText(10,10,0x80,0x000000,name);
  84.             /*WriteText(10,25,0x80,0x000000,int2str(name));
  85.             WriteText(10,40,0x80,0x000000,int2str(buffer));*/
  86.             if(result==0){ //Enter
  87.                 WriteText(50,110,0x80,0xFF00FF,"MemoryBuffer created");
  88.                 WriteText(50,125,0x80,0xFF00FF,int2str(result));
  89.             } else {
  90.                 WriteText(50,110,0x80,0xFF00FF,"MemoryBuffer creation error");
  91.                 WriteText(50,125,0x80,0xFF00FF,int2str(result));
  92.                 //WriteText(50,140,0x80,0xFF00FF,error);
  93.             }
  94.             break;
  95.       }
  96.    }
  97. }
  98.  
  99. int createMemoryBuffer(char *name, int flags, int size, char **buf) {
  100.     int error;
  101.     char *buff;
  102.  
  103.     $mov eax,68;
  104.     $mov ebx,22;
  105.     ECX=*name;
  106.     EDX=size;
  107.     ESI=flags;
  108.     $int 0x40
  109.  
  110.     error=EDX;
  111.     buff=EAX;
  112.  
  113.     if(error==0)
  114.         *buf=buff;
  115.    
  116.     return error;
  117. }
  118. void closeMemoryBuffer(char *name) {
  119.     ECX=name;
  120.     $mov eax,68;
  121.     $mov ebx,23;
  122.     $int 0x40
  123. }
  124.  
  125. dword int2str(int n) {
  126.     //char number=48+num;
  127.     char str[255];
  128.     int i=0;
  129.     do {
  130.         DSBYTE[str+i]=n%10+48;
  131.         i++;
  132.         n=n/10;
  133.     } while(n>0);
  134.     DSBYTE[str+i]='\0';
  135.     //DSBYTE[str]=number;
  136.     str_reverse(str);
  137.     return str;
  138. }
  139. void str_reverse(char *str) {
  140.     int length=str_length(str);
  141.     int i, j;
  142.     char c;
  143.     for(i=0, j=length-1; i<j; i++, j--) {
  144.         c=DSBYTE[str+i];
  145.         DSBYTE[str+i]=DSBYTE[str+j];
  146.         DSBYTE[str+j]=c;
  147.     }
  148. }
  149. int str_length(char *str) {
  150.     int i=0;
  151.     while(DSBYTE[str+i]!='\0')
  152.         i++;
  153.     return i;
  154. }
  155.  
  156.  
  157.  
  158.  
  159. void draw_window()
  160. {
  161.     proc_info Form;
  162.    
  163.     DefineAndDrawWindow(215,100,250,200,0x34,0xFFFFFF,"Window header");
  164.     GetProcessInfo(#Form, SelfInfo);
  165.     WriteText(50,80,0x80,0,"Press Enter:");
  166.     //WriteText(50,95,0x80,0,int2str(5));
  167.     WriteText(10,110,0x80,0,#param);
  168.     //DrawCaptButton(10,130,50,50,0x00000002,0x00CCCCCC,0x00000000,"Test");
  169. }
  170.  
  171.  
  172. stop:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement