Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Визначення / встановленн поточного диска

Поиск

int getdisk ();

int setdisk (int drive);

Нумерація дисків: 0 - А, 1 - В, 2 - С,...

getdisk повертає номер поточного диска, setdisk повертає загальну кількість доступних дисків.

Приклад.

# include <stdio.h>

# include <dir.h>

int main (void)

{

int disk, maxdrives = setdisk (2);

disk = getdisk () + 'A';

printf ("\ nКолічество логічних дисків:% d \ n", maxdrives);

printf ("Поточний диск:% c \ n", disk);

return 0;

}

Приклад.

# include <stdio.h>

# include <dir.h>

int main (void)

{

int save, disk, disks;

/ * Зберегти вихідний диск * /

save = getdisk ();

/ * Надрукувати кількість логічних дисків * /

disks = setdisk (save);

printf ("У системі% d логічних дисків \ n \ n", disks);

/ * Надрукувати імена доступних логічних дисків * /

printf ("Доступні диски: \ n");

for (disk = 0; disk <26; + + disk)

{

setdisk (disk);

if (disk == getdisk ())

printf ("% c: диск доступний \ n", disk + 'a');

}

setdisk (save);

return 0;

}

Пошук файлу

char * searchpath (char * file);

Спочатку пошук здійснюється у поточному каталозі поточного диска. Якщо файл не знайдено, функція перебирає шляху з змінної оточення PATH.

У разі успіху повертає рядок, що містить повний шлях до файлу. Це ім'я розміщується в статичному буфері і перезаписується при кожному наступному виклику. У разі невдачі повертається NULL.

Питання для контролю:

1.Як втановити поточний диск?

2. Як визначити поточну робочу директорію?

3. Як знайти файл?

Література:

1. Т.Сван, “ Освоение BORLAND C++ 4.5 Практический курс”, Киев, “Диалектика”, 1996 г.- с. 268-270

Урок №55

(згідно робочої навчальної програми)

Тема:Створення і видалення каталогів

Питання:

1. Створення, видалення, зміна директорій

2. Приклад програми для роботи з директоріями

 

Створення, видалення, зміна директорій

Створення директорії:

int mkdir (char * pathname);

int rmdir (char * pathname);

Видаляє директорію pathname, яка: має бути порожньою, не повинна бути поточної робочої директорією, не повинна бути кореневої директорією.

У разі успіху повертають 0, при невдачі errno набуває значень:

ENOENT - немає такого файлу або директорії,

EACCES - немає доступу.

Приклад програми для роботи з директоріями

int chdir (char * pathname);

# include <stdio.h>

# include <conio.h>

# include <process.h>

# include <dir.h>

# define DIRNAME "testdir. $ $ $"

int main (void)

{

int stat;

stat = mkdir (DIRNAME);

if (! stat)

printf ("Директорія створена \ n");

else

{

printf ("Не можу створити директорію \ n");

exit (1);

}

getch ();

system ("dir / p");

getch ();

stat = rmdir (DIRNAME);

if (! stat)

printf ("\ nДіректорія видалена \ n");

else

{

perror ("\ nне можу видалити директорію \ n");

exit (1);

}

return 0;}

Питання для контролю:

1.Як створити директорію?

2. Як видалити директорію?

3. Які бібліотеки потрібно підключити для роботи програми з директоріями?

Література:

1. Т.Сван, “ Освоение BORLAND C++ 4.5 Практический курс”, Киев, “Диалектика”, 1996 г.- с. 270-272

Урок №56

(згідно робочої навчальної програми)

Тема:Відображення каталогів, перегляд маршрутів каталогів

Питання:

1. Перегляд каталогу диска

2. Параметри структури ffblk

Перегляд каталогу диска

int findfirst (char * pathname, struct ffblk * ffblk, int attrib);

int fidtnext (struct ffblk * ffblk);

Функція findfirst робить пошук в каталозі диска за допомогою системного виклику DOS 0x4E.

Параметр pathname являє собою символьну рядок, що містить необов'язкову специфікацію дискового пристрою, маршрут пошуку та ім'я шуканого файлу. Ім'я файлу може містити шаблони (такі як? Або *). Якщо відповідний файл знайдений, структура ffblk заповнюється інформацією про файл і каталозі, його містить.

Cтруктура ffblk визначена наступним чином:

struct ffblk {

char ff_reserved [21]; / * зарезервовано DOS * /

char ff_attrib; / * атрибути * /

int ff_ftime; / * час * /

int ff_fdate; / * дата * /

long ff_fsize; / * розмір * /

char ff_fname [13]; / * ім'я файлу * /

};

Параметри структури ffblk

Параметр attrib - це використовуваний в MS-DOS байт атрибуту файлу, який вживається при виборі відповідних для пошуку файлів. Параметр attrib може бути однією з наступних визначених у файлі dos.h констант:

FA_NORMAL = 0x00 - Звичайний файл без атрибутів

FA_RDONLY = 0x01 - Атрибут "тільки читання".

FA_HIDDEN = 0x02 - Прихований файл.

FA_SYSTEM = 0x04 - Системний файл.

FA_LABEL = 0x08 - Мітка тому.

FA_DIREC = 0x10 - Каталог.

FA_ARCH = 0x20 - Архів.

Відзначимо, що ff_ftime і ff_fdate містять бітові поля для визначення дати та часу. Ці структури підтримуються DOS. Обидві 16-бітові структури діляться на 3 поля:

ff_ftime:

біти 0-4 Секунди, поділені на 2. (Тобто 10 відповідає 20 секундам).

біти5-10 хвилини

біти 11-15 години

ff_fdate:

біти 0-4 день

біти 5-8 місяць

біти 9-15 рік з 1980 (тобто 9 відповідає 1989)

При успішному завершенні, тобто при успішному значення пошуку файлу, відповідного параметру pathname, функція findfirst повертає значення 0. Якщо підходящих файлів більше не існує, або в імені файлу допущена помилка, функція повертають значення -1 і глобальна змінна errno отримує одне з наступних значень:

ENOENT - Маршрут доступу або ім'я файлу не знайдені,

а змінної doserrno присвоюється одне з наступних значень:

ENOENT - Маршрут доступу або ім'я файлу не знайдені.

ENMFILE - Немає більше файлів.

Функція findnext використовується для вибірки послідовності файлів, відповідних параметру pathname, що задається функцією findfirst.

ffblk - це той же самий блок, який заповнюється при виклику функції findfirst. Даний блок містить всю необхідну інформацію для продовження пошуку.

При кожному виклику функції findnext буде повертатися одне ім'я файлу до тих пір, поки файли, відповідні параметру, pathname не закінчаться.

При успішному завершенні, тобто при успішному значення пошуку файлу, відповідного параметру pathname, функція findnext повертає значення 0. Якщо підходящих файлів більше не існує, або в імені файлу допущена помилка, функція повертає значення -1 і глобальна змінна errno отримує одне з наступних значень:

ENOENT - Маршрут доступу або ім'я файлу не знайдені,. а змінної doserrno присвоюється одне з наступних значень:

ENOENT - Маршрут доступу або ім'я файлу не знайдені.

ENMFILE - Немає більше файлів.

Приклад:

# Include <stdio.h>

# Include <dir.h>

int main (void)

{

struct ffblk ffblk;

int done;

printf ("Лістинг каталогу *. * \ n");

done = findfirst (**. **, & ffblk, 0);

while (! done) {

printf ("% s \ n", ffblk.ff_name);

done = findnext (& ffblk);

}

return 0;}

Питання для контролю:

1.Як зробити перегляд каталогу диску?

2. Які параметри має структура ffblk?

3. Що визначає параметр ff_ftime?

Література:

1. Т.Сван, “ Освоение BORLAND C++ 4.5 Практический курс”, Киев, “Диалектика”, 1996 г.- с. 272-274

Урок №57

(згідно робочої навчальної програми)

Тема:Робота з системними областями

Питання:

1.Робота з клавіатурою

Робота з клавіатурою

Для роботи З клавіатурою використовуються бібліотечні функції Keypad_Init, Keypad_Read і Keypad_Released.

Опис цих функцій:

Опис функції Keypad_Init

Прототип - void Keypad_Init (unsigned * port)

Повертає значення - Немає

Опис - ініціалізує порт для роботи з клавіатурою. Повинна викликатися перед використанням інших функцій даної бібліотеки

Вимоги - немає

Приклад - Keypad_Init (& PORTB)

Опис функції Keypad_Read

Прототип - unsigned short Keypad_Read (void)

Повертає значення - 1 -16 в залежності від натиснутої клавіші і 0, якщо немає натиснутих клавіш.

Опис - перевіряє натиснення клавіші. Функція повертає 1 -16 в залежності від натиснутої клавіші і 0, якщо немає натиснутих клавіш

Вимоги - порт повинен бути попередньо ініціалізованим першим за допомогою функції Keypad_Init.

Приклад - kp = Keypad_Read ()

Опис функції Keypad_Released

Прототіп - unsigned short Keypad_Released (void)

Повертає значення - Повертане значення 1 - 16 залежно від клавіші

Опис - виклик функції Keypad_Released - блокуючий: функція чекає, поки клавіша не буде натиснута і відпущена. При відпусканні функція повертає код від 1 до 16 в залежності від клавіші

Вимоги - порт повинен бути попередньо ініціалізованим першим за допомогою функції Keypad_Init

Приклад - kp = Keypad_Released ()

Наступний програмний код може бути використаний для перевірки клавіатури. Він підтримує клавіатури з матричною організацією від 1 до 4 рядків і від 1 до 4 стовпців. Код, повернений бібліотечними функціями, перекодовується в ASCII-коди [0.. 9, A.. F]. Додатково використовується однобайтовий лічильник для виведення загальної кількості натискань на клавіші у другому рядку РКІ.

unsigned short kp, cnt;

char txt [5];

void main () {

cnt = 0;

Keypad_Init (& PORTC);

Lcd_Init (& PORTB); / / Ініціалізація LCD на PORTC

Lcd_Cmd (LCD_CLEAR); / / Очищення дисплея

Lcd_Cmd (LCD_CURSOR_OFF); / / Відключення курсора

Lcd_Out (1, 1, "Key:");

Lcd_Out (2, 1, "Times:");

do {

kp = 0; / / Очікування натискання клавіші

do

/ / Закоментувати невживану функцію опитування клавіатури kp = Keypad_Released ();

/ / Kp = Keypad_Read ();

while (! kp);

cnt + +; / / підготувати значення для виведення

if (kp> 10)

kp + = 54;

else

kp + = 47;

/ / Вивід його на LCD

Lcd_Chr (1, 10, kp);

WordToStr (cnt, txt);

Lcd_Out (2, 10, txt);

}

while (1);

}

/ / Кінець прорамми

Приклад програми, яка блокує клавіатуру при натиснені клавіші "3" при натиснені комбінації Left Shift+Right Ctr+F3. При повторному натиснені клавіатура розблокується.

#include <dos.h>

void interrupt (*old9)();

void interrupt new();

void *readvect(int in);

void writevect(int in,void *h);

unsigned char F3_code=61;

unsigned char key3_code=4;

char f=0;

union regs rr;

struct sregs sr;

void main()

{

char string[80];

textbackground(0);

clrscr;

textattr(0x0a);

cprintf("________________________________________");

cprintf(" Низькорівневе програмування ");

cprintf("________________________________________");

cprintf("________________________________________");

cprintf(" Керування клавіатурою ");

cprintf("________________________________________");

old9=readvect(9);

writevect(9,new9);

textattr(0x0c);

cprintf("\n\n\r\"горяча\"комбінація:");

textattr(0x0a);

cprintf("Left Shift,Right Ctr,F3\n\r");

textattr(0x0b);

cprintf("Клавіша,яка блокується");

textattr(0x0f);

cprintf("3");

textattr(0x07);

cprintf("\r\nВвести рядок символів>");

scanf("%s",string);

writevect(9,old9);

}

void *readvect(int in)

{

rr.a.ah=0x35;

rr.a.al=in;

intdosx(&rr,&rr,&sr);

return(MK_FP(sr.es,rr.x.bx));

}

void writevect(int in,void *h)

{

rr.h.ah=0x25;

rr.h.al=in;

sr.ds=FP_SEG(h);

rr.x.dx=FP_OFF(h);

indosx(&rr,&rr,&sr);

}

void interrupt new9()

{

unsigned char c,x,y;

unsigned char byte17,byte18;

unsigned char mask=0x02;

unsigned char mask17=0x04;

unsigned char mask18=0x01;

byte17=peekb(0x40,0x17);

byte18=peekb(0x40,0x18);

if((inportb(0x60)==F3_code)&&(byte17&mask)&&

(byte17&mask17)&&(!(byte18&mask18)))

{

cputs("\7");

x=wherex();

y=wherey();

gotoxy(55,3);

textattr(0x1e);

if(f==0)

{

f=1;

cprintf("Клавіша \"3\" заблокована");

}

else

{

f=0;

cprintf("Клавіша \"3\" разблокована");

}

gotoxy(x,y);

textattr(0x07);

(*old9)();

}

if((f==1)&&(inportb(0x60)==key3_code))

{

c=inportb(0x61);

outportb(0x61,c|0x80);

outportb(0x61,c);

outportb(0x20,0x20);

}

else

(*old9)();

}

Питання для контролю:

1.Які є функції для роботи з клавіатурою?

2. Що робить функція Keypad_Init?

3. Що робить функція Keypad_Released?

 

Література:

1. Павловская Т.А., Щупак Ю.А. С/С++. Практикум. –СПб.: Питер, 2002. –204 с.- с. 274-279

Урок №61

(згідно робочої навчальної програми)



Поделиться:


Последнее изменение этой страницы: 2016-08-10; просмотров: 196; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 13.59.134.65 (0.006 с.)