Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define MEMSIZE 0x3E80
- #include "..\lib\kolibri.h"
- #include "..\lib\strings.h"
- #include "..\lib\mem.h"
- #include "..\lib\file_system.h"
- #define SHM_OPEN 0
- #define SHM_OPEN_ALWAYS 0x04
- #define SHM_CREATE 0x08
- #define SHM_READ 0x00
- #define SHM_WRITE 0x01
- #define E_NOTFOUND 5
- #define E_ACCESS 10
- #define E_NOMEM 30
- #define E_PARAM 33
- #define SC_OK 0
- #define SC_EXIT 1
- #define SC_PUTC 2
- #define SC_PUTS 3
- #define SC_GETC 4
- #define SC_GETS 5
- #define SC_CLS 6
- char *buffer;
- char *name;
- proc_info App;
- int sc_init() {
- int result;
- GetProcessInfo(#App, SelfInfo);
- name=int2str(App.ID);
- strcat(name, "-SHELL");
- //*buffer = NULL;
- result=createMemoryBuffer(name, SHM_OPEN_ALWAYS | SHM_WRITE, 1024*16, buffer);
- return result;
- }
- void sc_exit()
- {
- *buffer = SC_EXIT;
- /*while (*buffer)*/ pause(5);
- closeMemoryBuffer(name);
- }
- void sc_puts(char *str)
- {
- *buffer = SC_PUTS;
- strcpy(buffer+1, str);
- }
- void main()
- {
- int result,id,key;
- mem_init();
- result=sc_init();
- if(result==0) {
- sc_exit();
- }
- loop()
- {
- switch(WaitEvent())
- {
- case evButton:
- id=GetButtonID();
- if ((id==1) || (id==2)) ExitProcess();
- break;
- case evKey:
- key = GetKey();
- IF (key==013){ //Enter
- WriteText(50,90,0x80,0xFF00FF,"Pressed Enter");
- }
- break;
- case evReDraw:
- draw_window();
- WriteText(10,10,0x80,0x000000,name);
- /*WriteText(10,25,0x80,0x000000,int2str(name));
- WriteText(10,40,0x80,0x000000,int2str(buffer));*/
- if(result==0){ //Enter
- WriteText(50,110,0x80,0xFF00FF,"MemoryBuffer created");
- WriteText(50,125,0x80,0xFF00FF,int2str(result));
- } else {
- WriteText(50,110,0x80,0xFF00FF,"MemoryBuffer creation error");
- WriteText(50,125,0x80,0xFF00FF,int2str(result));
- //WriteText(50,140,0x80,0xFF00FF,error);
- }
- break;
- }
- }
- }
- int createMemoryBuffer(char *name, int flags, int size, char **buf) {
- int error;
- char *buff;
- $mov eax,68;
- $mov ebx,22;
- ECX=*name;
- EDX=size;
- ESI=flags;
- $int 0x40
- error=EDX;
- buff=EAX;
- if(error==0)
- *buf=buff;
- return error;
- }
- void closeMemoryBuffer(char *name) {
- ECX=name;
- $mov eax,68;
- $mov ebx,23;
- $int 0x40
- }
- dword int2str(int n) {
- //char number=48+num;
- char str[255];
- int i=0;
- do {
- DSBYTE[str+i]=n%10+48;
- i++;
- n=n/10;
- } while(n>0);
- DSBYTE[str+i]='\0';
- //DSBYTE[str]=number;
- str_reverse(str);
- return str;
- }
- void str_reverse(char *str) {
- int length=str_length(str);
- int i, j;
- char c;
- for(i=0, j=length-1; i<j; i++, j--) {
- c=DSBYTE[str+i];
- DSBYTE[str+i]=DSBYTE[str+j];
- DSBYTE[str+j]=c;
- }
- }
- int str_length(char *str) {
- int i=0;
- while(DSBYTE[str+i]!='\0')
- i++;
- return i;
- }
- void draw_window()
- {
- proc_info Form;
- DefineAndDrawWindow(215,100,250,200,0x34,0xFFFFFF,"Window header");
- GetProcessInfo(#Form, SelfInfo);
- WriteText(50,80,0x80,0,"Press Enter:");
- //WriteText(50,95,0x80,0,int2str(5));
- WriteText(10,110,0x80,0,#param);
- //DrawCaptButton(10,130,50,50,0x00000002,0x00CCCCCC,0x00000000,"Test");
- }
- stop:
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement