Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
958 leency 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
}