Subversion Repositories Kolibri OS

Rev

Rev 958 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. #include "kosSyst.h"
  2.  
  3. char* DialogOpenFile(void (*draw)())
  4. {
  5.   sProcessInfo proc;
  6.   kosFileInfo fi;
  7.   char param[6];
  8.   int i;
  9.   Dword pID,msg_num=0;
  10.   char path[1040];
  11.   Byte* pPath=(Byte*)&path;
  12.  
  13.   //Ïàðàìåòðû çàïóñêà X-TREE
  14.   kos_ProcessInfo(&proc,-1);
  15.   pID=proc.processInfo.PID;
  16.   for(i=3;i!=-1;i--)
  17.   {
  18.     param[i]=(char)('0'+(pID % 10));
  19.     pID=pID/10;
  20.   }
  21.   param[4]=(char)0x20;
  22.   param[5]='O';
  23.   param[6]=(char)0;
  24.   //IPC
  25.   ((Dword*)pPath)[0] = 0;
  26.   ((Dword*)pPath)[1] = 8;
  27.  
  28.   Dword retval;
  29.   __asm
  30.   {
  31.     mov  eax,60
  32.     mov  ebx,1
  33.     mov  ecx,pPath
  34.     mov  edx,1040
  35.     int  40h
  36.   }
  37.  
  38.   sprintf(fi.fileURL,"/sys/sysxtree");
  39.   fi.rwMode = 7;
  40.   fi.OffsetLow = 0;
  41.   fi.OffsetHigh = (Dword)param;
  42.   fi.dataCount = 0;
  43.   fi.bufferPtr = 0;
  44.   int dlg_pID=kos_FileSystemAccess(&fi);
  45.   if (dlg_pID<=0) return 0;
  46.  
  47.   //kos_SetMaskForEvents(0x47);
  48.   kos_SetMaskForEvents(0x67);
  49.   //draw();
  50.  
  51.   Dword btnID;
  52.   Byte keyCode;
  53.  
  54.   for(;;)
  55.   {
  56. get_next_event:
  57.     //Ñîáûòèÿ
  58.     switch (kos_WaitForEvent(50))
  59.     {
  60.       case 1:
  61.         draw();
  62.       break;    
  63.       case 2:
  64.         kos_GetKey(keyCode);
  65.       break;
  66.       case 3:
  67.         kos_GetButtonID(btnID);
  68.       break;
  69.       case 7:
  70.         if (msg_num==0)
  71.         {
  72.           ((Dword*)pPath)[0] = 0;
  73.           ((Dword*)pPath)[1] = 8;
  74.           ((Dword*)pPath)[2] = 0;
  75.           ((Dword*)pPath)[3] = 0;
  76.           ((Dword*)pPath)[4] = 0;
  77.           msg_num=1;
  78.           draw();
  79.         } else {
  80.           return (char*)pPath+16;
  81.         }
  82.       break;
  83.       default:
  84.         //Æèâ ëè åùå X-TREE?
  85.         if (msg_num)
  86.         {
  87.           int proc_count=kos_ProcessInfo(&proc,-1);
  88.           for(i=1;i<=proc_count;i++)
  89.           {
  90.             kos_ProcessInfo(&proc,i);
  91.             if (proc.processInfo.PID==dlg_pID)
  92.             {
  93.               if (proc.processInfo.slot_state==9)
  94.               {
  95.                 return 0;
  96.               } else {
  97.                 goto get_next_event;
  98.               }
  99.             }
  100.           }
  101.           return 0;
  102.         }
  103.       break;
  104.     }
  105.   }
  106.   return 0;
  107. }