С:\\RT-11\\rt_11.exe
Технология программирования
Сообщений 21 страница 30 из 40
Поделиться2204-12-2006 21:41:05
поздно, но да ладно=)) все равно уже сдал=)
Поделиться2304-12-2006 21:47:02
Все равно менять придется
Поделиться2404-12-2006 22:56:08
! ! ! А Х Т У Н Г К И Н Д Е Р Ы ! ! !
Я В ОЧЕРЕДНОЙ РАЗ ВЫВЕСИЛ НА НАШУ ПОЧТУ СВОЮ ФУНКЦИЮ (FORMAT) - ВЕРСИЯ ПОСЛЕДНЯЯ, ВСЁ ЛИШНЕЕ ВРОДЕ ИНТЕРФЕЙСА, ОФОРМИЛОВКИ И Т.Д. ВЫБРОШЕНО, ОСТАВЛЕНА ТОЛЬКО ПРОЦЕДУРА СОЗДАНИЯ ДИСКА.
ВСЁ ПОДРОБНО ЗАКОММЕНЧЕНО
Внимательно читаем камменты! Там чётко всё указано, куда и что записывается.
У кого не стыкуется - подгоняем номера байт - и всё срастётся!
Для справки:
WORD - СЛОВО = ДВА БАЙТА = ДВА СИМВОЛА CHAR
DWORD - ДВОЙНОЕ СЛОВО = ДВАЖДЫ ДВА БАЙТА = ЧЕТЫРЕ СИМВОЛА CHAR
На все вопросы с буддийским терпением отвечу в асе.
Поделиться2504-12-2006 23:38:31
Я сделал оччень важное открытие:
Оказывается, кроме меня и тов. Якубенко никто абсолютно не умеет читать бинарные файлы. Книжки читать тоже мало кто умеет, да и, собственно, литературой народ тоже обделён.
В связи с вышесказанным к середине вторника перекомпилю свою процедуру так, чтобы диск создавался в виде текстового файла.
Поделиться2605-12-2006 15:49:24
Чёрт, нет времени пока править прогу. Дискра - чуть более насущная проблема.
Товарищи, которые ещё не в теме: открывайте бинарку через fstream. Ничего экстрасложного в этом нет. Мы с тов. Якубенко поможем.
Поделиться2705-12-2006 20:02:19
Внимание:
На текущий момент вы должны отталкиваться от этого формата.
Написаный мною FORMAT предельно прост для понимания:
Перед каждой записью указатель переносится в четкую позицию, чтобы у вас не возникало проблем с пониманием. Также написан для примера мною же метод DIRSPC - для демонстрации работы с файлом. Здесь же и впредь будут выкладываться написанные функции. От вас требую изменять документацию в соотвествие с необходимостью и вести диалог, на уровне понятно/нет. Те, кто этого не сделают, подставят в первую очередь себя, и, впридачу всех.
Поделиться2805-12-2006 20:02:41
v0.03
void DIRSPC()
{
DWORD dwWritten;
dwSize=0;
dwFree=0;
DWORD curfsize=0;
char addr[50];
sprintf(addr,"C:\\RT-11\\%s.dsk",lpszFileName);
if (!strcmp(lpszFileName,lpParam[0]))
{
hFile=CreateFileA(addr,GENERIC_READ|GENERIC_WRITE,NULL,NULL,OPEN_ALWAYS,NULL,NULL);
char system[12];
SetFilePointer(hFile,1008,NULL,FILE_BEGIN);
ReadFile(hFile,system,12,&dwWritten,0);
if (strcmp(system,"RT-11"))
{
dwError=0x01000005;
return;
}
SetFilePointer(hFile,3082,NULL,FILE_BEGIN);
ReadFile(hFile,&curfsize,2,&dwWritten,0);
while (curfsize!=40)
{
if (curfsize==10)
{
SetFilePointer(hFile,6,NULL,FILE_CURRENT);
ReadFile(hFile,&curfsize,4,&dwWritten,0);
dwFree+=curfsize;
dwSize+=curfsize;
SetFilePointer(hFile,4,NULL,FILE_CURRENT);
}
else
{
SetFilePointer(hFile,10,NULL,FILE_CURRENT);
ReadFile(hFile,&curfsize,2,&dwWritten,0);
dwSize+=curfsize;
SetFilePointer(hFile,2,NULL,FILE_CURRENT);
}
ReadFile(hFile,&curfsize,2,&dwWritten,0);
}
}
else
{
dwError=0x02000001;
}
CloseHandle(hFile);
}
Поделиться2905-12-2006 20:03:13
v0.03
void FORMAT()
{
int nsize=atoi(lpParam[0]);
if (strcmp(lpParam[4],"RT-11"))
{
dwError=0x01000005;
return;
}
if ((nsize<=69)|(nsize>9999))
{
dwError=0x01000001;
return;
}
hFile=CreateFile(L"C:\\RT-11\\ffile1.dsk",GENERIC_READ|GENERIC_WRITE,NULL,NULL,CREATE_ALWAYS,NULL,NULL);
const int nbsize=nsize*512;
char tilda=126;
char * lpBuff=new char[nbsize];
int i=0;
DWORD dwWritten=0;
for(;i<nbsize;i++)
lpBuff[i]=tilda;
WriteFile(hFile,lpBuff,nbsize,&dwWritten,0);
SetFilePointer(hFile,982,NULL,FILE_BEGIN);
int nver=atoi(lpParam[1]);
if ((nver<=0)|(nver>99))
{
dwError=0x01000002;
return;
}
WriteFile(hFile,&nver,2,&dwWritten,0);
strncpy(lpBuff,lpParam[2],12);
SetFilePointer(hFile,984,NULL,FILE_BEGIN);
WriteFile(hFile,lpBuff,12,&dwWritten,0);
strncpy(lpBuff,lpParam[3],12);
SetFilePointer(hFile,996,NULL,FILE_BEGIN);
WriteFile(hFile,lpBuff,12,&dwWritten,0);
strncpy(lpBuff,lpParam[4],12);
SetFilePointer(hFile,1008,NULL,FILE_BEGIN);
WriteFile(hFile,lpBuff,12,&dwWritten,0);
//making the free-space file and first catalogue
int blf=2;
SetFilePointer(hFile,3074,NULL,FILE_BEGIN);
WriteFile(hFile,&blf,2,&dwWritten,0);
blf=1;
SetFilePointer(hFile,3076,NULL,FILE_BEGIN);
WriteFile(hFile,&blf,2,&dwWritten,0);
blf=68;
SetFilePointer(hFile,3080,NULL,FILE_BEGIN);
WriteFile(hFile,&blf,2,&dwWritten,0);
char * filename="freesp";
char * type=".xyz";
blf=10;
SetFilePointer(hFile,3082,NULL,FILE_BEGIN);
WriteFile(hFile,&blf,2,&dwWritten,0);
SetFilePointer(hFile,3084,NULL,FILE_BEGIN);
WriteFile(hFile,filename,6,&dwWritten,0);
SetFilePointer(hFile,3090,NULL,FILE_BEGIN);
WriteFile(hFile,type,4,&dwWritten,0);
blf=nsize-68;
DWORD freespc=blf;
SetFilePointer(hFile,3090,NULL,FILE_BEGIN);//Свободное место, используются слова 5-6
WriteFile(hFile,&freespc,4,&dwWritten,0);
blf=0x6460;
SetFilePointer(hFile,3096,NULL,FILE_BEGIN);
WriteFile(hFile,&blf,2,&dwWritten,0);
blf=40;
SetFilePointer(hFile,3098,NULL,FILE_BEGIN);
WriteFile(hFile,&blf,2,&dwWritten,0);
CloseHandle(hFile);
}
Поделиться3005-12-2006 20:04:13
Текущие глобальные переменные
HANDLE hFile;
char * lpszFileName="ffile1";
unsigned int dwError=0x00000000; //Код ошибки
char * lpParam[5]; //Параметры
char lpszInfo[512]; //Информация (для команд ADDNEW и WRITEF)
char lpszCom[7]; //Команда
DWORD dwSize(0);
DWORD dwFree(0);