16.05.2015 Views

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

Programowanie w C++ Borland Builder - Wyższa Szkoła Informatyki ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

zakończyć program posługując się przerywaniem INT 39 (27 hex).<br />

Jeśli natomiast zamierzamy posługiwać się dłuższymi programami,<br />

mamy do dyspozycji funkcję systemową nr 49 (31 hex). Należy tu<br />

zwrócić uwagę, że zakończenie programu w taki sposób (z<br />

pozostawieniem w pamięci) nie spowoduje automatycznego<br />

zamknięcia plików, a jedynie opróżnienie buforów. Programy<br />

rezydentne dzieli się umownie na trzy kategorie:<br />

[BP] - background process - procesy działające "w tle";<br />

[SV] - services - programy usługowe - np. PRINT;<br />

[PP] - pop up programs - uaktywniane przez określoną kombinację<br />

klawiszy;<br />

System DOS dysponuje tzw. przerywaniem multipleksowym<br />

(naprzemiennym) wykorzystywanym często przez programy<br />

rezydentne. Jest to przerywanie nr INT 47 (2F hex). MS DOS<br />

załatwia takie problemy funkcjami nr 37 (25 hex) - zapisanie<br />

wektora przerywania i 53 (35 hex) - odczytanie wektora<br />

przerywania.<br />

Z jakich funkcji <strong>C++</strong> można skorzystać?<br />

W <strong>C++</strong> masz do dyspozycji parę funkcji getvect() i setvect()<br />

(ang. GET/SET VECTor - pobierz/ustaw wektor przerywania).<br />

Poniżej krótkie przykłady zastosowań tych funkcji.<br />

/* Opcja: Options | Compiler | Code generation | Test Stack<br />

Overflow powinna zostać wyłączona [ ] (off) */<br />

# include "stdio.h"<br />

# include "dos.h"<br />

# include "conio.h"<br />

/* INT 28 (1C hex) - Przerywanie zegarowe */<br />

void interrupt ( *oldhandler)(void);<br />

int licznik = 0;<br />

void interrupt handler(void)<br />

{<br />

/* Inkrementacja globalnej zmiennej licznik */<br />

licznik++;<br />

/* Wywolujemy stary "handler" zegara */<br />

oldhandler();<br />

}<br />

void main()<br />

{<br />

/* Zapamiętaj poprzedni wektor przerywania 28 */<br />

oldhandler = getvect(28);<br />

/* Zainstaluj nową funkcje obslugi przerywania */<br />

setvect(28, handler);<br />

- 208-

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!