Форум 29 кафедры

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Форум 29 кафедры » IT Вопросы, Ответы » Технология программирования


Технология программирования

Сообщений 21 страница 30 из 40

21

С:\\RT-11\\rt_11.exe

0

22

поздно, но да ладно=)) все равно уже сдал=)

0

23

Все равно менять придется

0

24

! ! ! А Х Т У Н Г      К И Н Д Е Р Ы ! ! !

Я В ОЧЕРЕДНОЙ РАЗ ВЫВЕСИЛ НА НАШУ ПОЧТУ СВОЮ ФУНКЦИЮ (FORMAT) - ВЕРСИЯ ПОСЛЕДНЯЯ, ВСЁ ЛИШНЕЕ ВРОДЕ ИНТЕРФЕЙСА, ОФОРМИЛОВКИ  И Т.Д. ВЫБРОШЕНО, ОСТАВЛЕНА ТОЛЬКО ПРОЦЕДУРА СОЗДАНИЯ ДИСКА.

ВСЁ ПОДРОБНО ЗАКОММЕНЧЕНО

Внимательно читаем камменты! Там чётко всё указано, куда и что записывается.

У кого не стыкуется - подгоняем номера байт - и всё срастётся!

Для справки:

WORD - СЛОВО = ДВА БАЙТА = ДВА СИМВОЛА CHAR

DWORD - ДВОЙНОЕ СЛОВО = ДВАЖДЫ ДВА БАЙТА = ЧЕТЫРЕ СИМВОЛА CHAR

На все вопросы с буддийским терпением отвечу в асе.

0

25

Я сделал оччень важное открытие:

Оказывается, кроме меня и тов. Якубенко никто абсолютно не умеет читать бинарные файлы. Книжки читать тоже мало кто умеет, да и, собственно, литературой народ тоже обделён.

В связи с вышесказанным к середине вторника перекомпилю свою процедуру так, чтобы диск создавался в виде текстового файла.

0

26

Чёрт, нет времени пока править прогу. Дискра - чуть более насущная проблема.
Товарищи, которые ещё не в теме: открывайте бинарку через fstream. Ничего экстрасложного в этом нет. Мы с тов. Якубенко поможем.

0

27

Внимание:

На текущий момент вы должны отталкиваться от этого формата.

Написаный мною FORMAT  предельно прост для понимания:
Перед каждой записью указатель переносится в четкую позицию, чтобы у вас не возникало проблем с пониманием. Также написан для примера мною же метод DIRSPC - для демонстрации работы с файлом. Здесь же и впредь будут выкладываться написанные функции. От вас требую изменять документацию в соотвествие с необходимостью и вести диалог, на уровне понятно/нет. Те, кто этого не сделают, подставят в первую очередь себя, и, впридачу всех.

0

28

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);

}

0

29

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);

}

0

30

Текущие глобальные переменные

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);

0


Вы здесь » Форум 29 кафедры » IT Вопросы, Ответы » Технология программирования