forked from KolibriOS/kolibrios
107 lines
2.1 KiB
C++
107 lines
2.1 KiB
C++
|
#include "kosSyst.h"
|
|||
|
|
|||
|
char* DialogOpenFile(void (*draw)())
|
|||
|
{
|
|||
|
sProcessInfo proc;
|
|||
|
kosFileInfo fi;
|
|||
|
char param[6];
|
|||
|
int i;
|
|||
|
Dword pID,msg_num=0;
|
|||
|
char path[1040];
|
|||
|
Byte* pPath=(Byte*)&path;
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> X-TREE
|
|||
|
kos_ProcessInfo(&proc,-1);
|
|||
|
pID=proc.processInfo.PID;
|
|||
|
for(i=3;i!=-1;i--)
|
|||
|
{
|
|||
|
param[i]=(char)('0'+(pID % 10));
|
|||
|
pID=pID/10;
|
|||
|
}
|
|||
|
param[4]=(char)0x20;
|
|||
|
param[5]='O';
|
|||
|
param[6]=(char)0;
|
|||
|
//IPC
|
|||
|
((Dword*)pPath)[0] = 0;
|
|||
|
((Dword*)pPath)[1] = 8;
|
|||
|
|
|||
|
Dword retval;
|
|||
|
__asm
|
|||
|
{
|
|||
|
mov eax,60
|
|||
|
mov ebx,1
|
|||
|
mov ecx,pPath
|
|||
|
mov edx,1040
|
|||
|
int 40h
|
|||
|
}
|
|||
|
|
|||
|
sprintf(fi.fileURL,"/sys/sysxtree");
|
|||
|
fi.rwMode = 7;
|
|||
|
fi.OffsetLow = 0;
|
|||
|
fi.OffsetHigh = (Dword)param;
|
|||
|
fi.dataCount = 0;
|
|||
|
fi.bufferPtr = 0;
|
|||
|
int dlg_pID=kos_FileSystemAccess(&fi);
|
|||
|
if (dlg_pID<=0) return 0;
|
|||
|
|
|||
|
//kos_SetMaskForEvents(0x47);
|
|||
|
kos_SetMaskForEvents(0x67);
|
|||
|
//draw();
|
|||
|
|
|||
|
Dword btnID;
|
|||
|
Byte keyCode;
|
|||
|
|
|||
|
for(;;)
|
|||
|
{
|
|||
|
get_next_event:
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
switch (kos_WaitForEvent(50))
|
|||
|
{
|
|||
|
case 1:
|
|||
|
draw();
|
|||
|
break;
|
|||
|
case 2:
|
|||
|
kos_GetKey(keyCode);
|
|||
|
break;
|
|||
|
case 3:
|
|||
|
kos_GetButtonID(btnID);
|
|||
|
break;
|
|||
|
case 7:
|
|||
|
if (msg_num==0)
|
|||
|
{
|
|||
|
((Dword*)pPath)[0] = 0;
|
|||
|
((Dword*)pPath)[1] = 8;
|
|||
|
((Dword*)pPath)[2] = 0;
|
|||
|
((Dword*)pPath)[3] = 0;
|
|||
|
((Dword*)pPath)[4] = 0;
|
|||
|
msg_num=1;
|
|||
|
draw();
|
|||
|
} else {
|
|||
|
return (char*)pPath+16;
|
|||
|
}
|
|||
|
break;
|
|||
|
default:
|
|||
|
//<2F><><EFBFBD> <20><> <20><><EFBFBD> X-TREE?
|
|||
|
if (msg_num)
|
|||
|
{
|
|||
|
int proc_count=kos_ProcessInfo(&proc,-1);
|
|||
|
for(i=1;i<=proc_count;i++)
|
|||
|
{
|
|||
|
kos_ProcessInfo(&proc,i);
|
|||
|
if (proc.processInfo.PID==dlg_pID)
|
|||
|
{
|
|||
|
if (proc.processInfo.slot_state==9)
|
|||
|
{
|
|||
|
return 0;
|
|||
|
} else {
|
|||
|
goto get_next_event;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
return 0;
|
|||
|
}
|
|||
|
break;
|
|||
|
}
|
|||
|
}
|
|||
|
return 0;
|
|||
|
}
|