forked from KolibriOS/kolibrios
102d7cd4b6
git-svn-id: svn://kolibrios.org@3467 a494cfbc-eb01-0410-851d-a64ba20cac60
243 lines
5.2 KiB
C
243 lines
5.2 KiB
C
struct f70{
|
|
dword func;
|
|
dword param1;
|
|
dword param2;
|
|
dword param3;
|
|
dword param4;
|
|
char rezerv;
|
|
dword name;
|
|
};
|
|
|
|
struct BDVK{
|
|
dword attr;
|
|
byte type_name;
|
|
byte rez1, rez2, rez3;
|
|
dword timecreate;
|
|
dword datecreate;
|
|
dword timelastaccess;
|
|
dword datelastaccess;
|
|
dword timelastedit;
|
|
dword datelastedit;
|
|
dword sizelo;
|
|
dword sizehi;
|
|
char name[518];
|
|
};
|
|
|
|
inline fastcall void SetCurDir( ECX)
|
|
{
|
|
$mov eax,30
|
|
$mov ebx,1
|
|
$int 0x40
|
|
}
|
|
|
|
inline fastcall void GetCurDir( ECX, EDX)
|
|
{
|
|
$mov eax,30
|
|
$mov ebx,2
|
|
$int 0x40
|
|
}
|
|
|
|
///////////////////////////
|
|
// Ïàðàìåòðû ôàéëà //
|
|
///////////////////////////
|
|
f70 getinfo_file_70;
|
|
:dword GetFileInfo(dword file_path, bdvk_struct)
|
|
{
|
|
getinfo_file_70.func = 5;
|
|
getinfo_file_70.param1 =
|
|
getinfo_file_70.param2 =
|
|
getinfo_file_70.param3 = 0;
|
|
getinfo_file_70.param4 = bdvk_struct;
|
|
getinfo_file_70.rezerv = 0;
|
|
getinfo_file_70.name = file_path;
|
|
$mov eax,70
|
|
$mov ebx,#getinfo_file_70.func
|
|
$int 0x40
|
|
}
|
|
|
|
///////////////////////////
|
|
// Çàïóñê ïðîãðàììû //
|
|
///////////////////////////
|
|
f70 run_file_70;
|
|
signed int RunProgram(dword run_path, run_param)
|
|
{
|
|
run_file_70.func = 7;
|
|
run_file_70.param1 =
|
|
run_file_70.param3 =
|
|
run_file_70.param4 =
|
|
run_file_70.rezerv = 0;
|
|
run_file_70.param2 = run_param;
|
|
run_file_70.name = run_path;
|
|
$mov eax,70
|
|
$mov ebx,#run_file_70.func
|
|
$int 0x40
|
|
}
|
|
|
|
///////////////////////////
|
|
// Ñîçäàíèå ïàïêè //
|
|
///////////////////////////
|
|
f70 create_dir_70;
|
|
:int CreateDir(dword new_folder_path)
|
|
{
|
|
create_dir_70.func = 9;
|
|
create_dir_70.param1 =
|
|
create_dir_70.param2 =
|
|
create_dir_70.param3 =
|
|
create_dir_70.param4 =
|
|
create_dir_70.rezerv = 0;
|
|
create_dir_70.name = new_folder_path;
|
|
$mov eax,70
|
|
$mov ebx,#create_dir_70.func
|
|
$int 0x40
|
|
}
|
|
|
|
////////////////////////////
|
|
// Óäàëåíèå ôàéëà/ïàïêè //
|
|
////////////////////////////
|
|
f70 del_file_70;
|
|
:int DeleteFile(dword del_file_path)
|
|
{
|
|
del_file_70.func = 8;
|
|
del_file_70.param1 =
|
|
del_file_70.param2 =
|
|
del_file_70.param3 =
|
|
del_file_70.param4 =
|
|
del_file_70.rezerv = 0;
|
|
del_file_70.name = del_file_path;
|
|
$mov eax,70
|
|
$mov ebx,#del_file_70.func
|
|
$int 0x40
|
|
}
|
|
|
|
////////////////////////////
|
|
// Ïðî÷èòàòü ôàéë //
|
|
////////////////////////////
|
|
f70 read_file_70;
|
|
:int ReadFile(dword read_pos, read_file_size, read_buffer, read_file_path)
|
|
{
|
|
read_file_70.func = 0;
|
|
read_file_70.param1 = read_pos;
|
|
read_file_70.param2 = 0;
|
|
read_file_70.param3 = read_file_size;
|
|
read_file_70.param4 = read_buffer;
|
|
read_file_70.rezerv = 0;
|
|
read_file_70.name = read_file_path;
|
|
$mov eax,70
|
|
$mov ebx,#read_file_70.func
|
|
$int 0x40
|
|
}
|
|
|
|
////////////////////////////
|
|
// Çàïèñàòü ôàéë //
|
|
////////////////////////////
|
|
f70 write_file_70;
|
|
:int WriteFile(dword write_file_size, write_buffer, write_file_path)
|
|
{
|
|
write_file_70.func = 2;
|
|
write_file_70.param1 = 0;
|
|
write_file_70.param2 = 0;
|
|
write_file_70.param3 = write_file_size;
|
|
write_file_70.param4 = write_buffer;
|
|
write_file_70.rezerv = 0;
|
|
write_file_70.name = write_file_path;
|
|
$mov eax,70
|
|
$mov ebx,#write_file_70.func
|
|
$int 0x40
|
|
}
|
|
|
|
///////////////////////////
|
|
// Ïðî÷èòàòü ïàïêó //
|
|
///////////////////////////
|
|
f70 read_dir_70;
|
|
:int ReadDir(dword file_count, read_buffer, dir_path)
|
|
{
|
|
read_dir_70.func = 1;
|
|
read_dir_70.param1 =
|
|
read_dir_70.param2 =
|
|
read_dir_70.rezerv = 0;
|
|
read_dir_70.param3 = file_count;
|
|
read_dir_70.param4 = read_buffer;
|
|
read_dir_70.name = dir_path;
|
|
$mov eax,70
|
|
$mov ebx,#read_dir_70.func
|
|
$int 0x40
|
|
}
|
|
|
|
char isdir(dword fpath)
|
|
{
|
|
BDVK fpath_atr;
|
|
GetFileInfo(fpath, #fpath_atr);
|
|
if ( $test fpath_atr.attr, 4 ) return 1; else return 0;
|
|
}
|
|
:int GetFile(dword buf, filesize, read_path)
|
|
{
|
|
BDVK ReadFile_atr;
|
|
dword rBuf;
|
|
if (! GetFileInfo(read_path, #ReadFile_atr))
|
|
{
|
|
rBuf = malloc(ReadFile_atr.sizelo);
|
|
if (! ReadFile(0, ReadFile_atr.sizelo, rBuf, read_path))
|
|
{
|
|
ESDWORD[buf] = rBuf;
|
|
ESDWORD[filesize] = ReadFile_atr.sizelo;
|
|
return 1;
|
|
}
|
|
}
|
|
free(rBuf);
|
|
return 0;
|
|
}
|
|
|
|
enum
|
|
{
|
|
DIRS_ALL,
|
|
DIRS_NOROOT,
|
|
DIRS_ONLYREAL
|
|
};
|
|
:int GetDir(dword dir_buf, file_count, path, doptions)
|
|
{
|
|
dword buf, fcount, error;
|
|
buf = malloc(32);
|
|
error = ReadDir(0, buf, path);
|
|
if (!error)
|
|
{
|
|
fcount = ESDWORD[buf+8];
|
|
buf = realloc(buf, fcount+1*304+32);
|
|
ReadDir(fcount, buf, path);
|
|
//fcount=EBX;
|
|
|
|
if (doptions == DIRS_ONLYREAL)
|
|
{
|
|
if (!strcmp(".",buf+72)) {fcount--; memmov(buf,buf+304,fcount*304);}
|
|
if (!strcmp("..",buf+72)) {fcount--; memmov(buf,buf+304,fcount*304);}
|
|
}
|
|
if (doptions == DIRS_NOROOT)
|
|
{
|
|
if (!strcmp(".",buf+72)) {fcount--; memmov(buf,buf+304,fcount*304);}
|
|
}
|
|
|
|
ESDWORD[dir_buf] = buf;
|
|
ESDWORD[file_count] = fcount;
|
|
}
|
|
else
|
|
{
|
|
ESDWORD[file_count] = 0;
|
|
ESDWORD[dir_buf] = free(buf);
|
|
}
|
|
return error;
|
|
}
|
|
|
|
:void notify(dword notify_param)
|
|
{
|
|
RunProgram("@notify", notify_param);
|
|
}
|
|
|
|
:dword abspath(dword relative_path) //GetAbsolutePathFromRelative()
|
|
{
|
|
char absolute_path[4096];
|
|
if (ESBYTE[relative_path]=='/') return relative_path;
|
|
strcpy(#absolute_path, #program_path);
|
|
absolute_path[strrchr(#absolute_path, '/')] = '\0';
|
|
strcat(#absolute_path, relative_path);
|
|
return #absolute_path;
|
|
}
|