kolibrios/programs/media/imgview/dlgopen.cpp

107 lines
2.1 KiB
C++
Raw Normal View History

#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;
}