Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

A1exSun



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Код:
void ChooseFile(void)
{
    char file[260], *fname, b;
    int handle;
    unsigned long fsize, i, crc;
    struct ftime ft;
    FILE *f;
    Header("ПЕРЕДАЧА ФАЙЛУ");
    cprintf(" Введiть шлях та iм'я файлу: ");
    ShowCursor(1);
    scanf(" %[^\n]",file);
    ShowCursor(0);
    f = fopen(file,"rb");
    if (f) {
        if (strrchr(file,'\\')) fname = strrchr(file,'\\')+1;
        else fname = file;
        cprintf("\r\n Iм'я файлу: %s\r\n",fname);
        handle = fileno(f);
        fsize = filelength(handle);
        cprintf(" Розмiр файлу: "); ShowSize(fsize);
        getftime(handle,&ft);
        cprintf(" Дата редагування: %02u.%02u.%02u, %02u:%02u\r\n",ft.ft_day,ft.ft_month,ft.ft_year+1980,ft.ft_hour,ft.ft_min);
        crc = crc32f(f,fsize);
        cprintf(" CRC32: %08lx\r\n",crc);
        strcpy(hello.info.fname,fname);
        hello.info.fsize = fsize;
        hello.info.ft = ft;
        hello.info.crc = crc;
        hello.info.isize = C.PackSize;
        SendStr(hello.data,27);
        bufi[n] = 0;
        if(SendFile(f)) cprintf("\r\n Файл переданий.");
        else cprintf("\r\n Перевiрте кабель.");
        fclose(f);
    }
    else {
        cprintf("\r\n Не вдалось вiдкрити файл.");
    }
    getch();
}
 
//---------------------------------------------------------------------------
 
int SendFile(FILE *f)
{ // передача файла
    unsigned long i, q;
    q = hello.info.fsize / C.PackSize;
    for (i = 0; i < q; i++) {
        fread(buffer[n^1],C.PackSize,1,f);
        if(!SendStr(buffer[n^1],C.PackSize)) return 0;
        bufi[n^1] = 0;
    }
    q = hello.info.fsize % C.PackSize;
    fread(buffer[n^1],q,1,f);
    SendStr(buffer[n^1],q);
    return 1;
}
 
//---------------------------------------------------------------------------
 
int SendStr(char *str, int len)
{ // передача строки
    int i;
    for (i = 0; i < len; i++) { // шлем данные
        while ((inportb(C.PortAddr+5) & 0x20) == 0);
        if (CheckErrors()) {
            getch();
            return 0;
        }
        outportb(C.PortAddr,str[i]);
    }
    return 1;
}
 
//---------------------------------------------------------------------------
 
void ReceiveFile(void)
{
    FILE *f;
    unsigned long i, q;
    int handle;
    Header("ПРИЙОМ ФАЙЛУ");
    cprintf(" Очiкування iнформацiї про файл...");
    while (bufi[n] < 27) {
        if (kbhit()) if (getch() == 27) return;
        if (CheckErrors()) {
            getch();
            return;
        }
    }
    memcpy(hello.data,buffer[n],27);
    bufi[n] = 0;
    cprintf("\r\n Iм'я файлу: %s\r\n",hello.info.fname);
    cprintf(" Розмiр файлу: "); ShowSize(hello.info.fsize);
    cprintf(" Дата редагування: %02u.%02u.%02u, %02u:%02u\r\n",hello.info.ft.ft_day,hello.info.ft.ft_month,hello.info.ft.ft_year+1980,hello.info.ft.ft_hour,hello.info.ft.ft_min);
    cprintf(" CRC32: %08lx\r\n",hello.info.crc);
    cprintf(" Розмiр пакету: "); ShowSize(hello.info.isize);
    f = fopen(hello.info.fname,"wb");
    if (f) {
        q = hello.info.fsize / C.PackSize;
        for (i = 0; i < q; i++) {
            while (bufi[n^1] < C.PackSize)
            if (CheckErrors()) {
                getch();
                return;
            }
            fwrite(buffer[n^1],C.PackSize,1,f);
            bufi[n^1] = 0;
        }
        q = hello.info.fsize % C.PackSize;
        while (bufi[n^1] < q) CheckErrors();
        fwrite(buffer[n^1],q,1,f);
        bufi[n^1] -= q;
        handle = fileno(f);
        setftime(handle,&hello.info.ft);
        fclose(f);
    }
    else {
        cprintf("Не вдалось створити файл.");
    }
    getch();
}
 
//---------------------------------------------------------------------------
 
int CheckErrors(void)
{ // проверка состояния линии
    LSR lsr;
    lsr.byte = inportb(C.PortAddr+5);
    if (lsr.bit.overflow) {
        cprintf("\r\n Помилка переповнення.");
        return 1;
    }
    else if (lsr.bit.parity) {
        cprintf("\r\n Помилка парностi.");
        return 2;
    }
    else if (lsr.bit.synch) {
        cprintf("\r\n Помилка синхронiзацiї.");
        return 3;
    }
    else if (lsr.bit.timeout) {
        cprintf("\r\n Таймаут.");
        return 4;
    }
    else if ((bufi[0] > 0) && (bufi[1] > 0)) {
        cprintf("\r\n Помилка буферизацiї.");
        return 5;
    }
    else return 0;
}
 
//---------------------------------------------------------------------------
 
void interrupt far PortISR(void)
{ // обработчик прерывания порта - прием данных
    LSR lsr;
    do {
        lsr.byte = inportb(C.PortAddr+5);
        if (lsr.bit.in_ready) {
            buffer[n][bufi[n]++] = inportb(C.PortAddr);
            if (bufi[n] == C.PackSize) n ^= 1;
        }
    } while (lsr.bit.in_ready);
    outportb(0x20,0x20);
}

Всего записей: 1871 | Зарегистр. 25-11-2009 | Отправлено: 17:47 03-12-2011 | Исправлено: A1exSun, 18:22 03-12-2011
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи по C/С++


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru