«Системне програмування і операційні системи»
Системне програмування (практика)
Реалізувати програму, яка періодично перевіряє стан функціональних клавіш: Shift, Ctrl, Alt, ScrollLock, NumLock, CapsLock, Ins з виводом результату на екран, вихід з програми після натискання клавіші Esc.
?include <WRITE.H-->
main()
byte VarAl,VarKey;
word *Statbyte;
{
Statbyte=0417;
do
{
AH=0ch;
AL=08h;
$int 21h
VarAl=AL;
$push DS
DS=0;
VarKey= *Statbyte;
$pop DS
if (VarKey & 64>0) WRITESTR("Caps On");
else WRITESTR("Caps Off");
if (VarKey & 32 >0) WRITESTR("Num On");
else WRITESTR("Num Off");
if (VarKey & 16>0) WRITESTR("Scroll On");
else WRITESTR("Scroll Off");
if (VarKey & 2>0) WRITESTR("LShift On");
else WRITESTR("LShift Off");
if (VarKey & 1>0) WRITESTR("RShift On");
else WRITESTR("RShift Off");
if (VarKey & 128>0) WRITESTR("Insert On");
else WRITESTR("Insert Off");
WRITELN();
}
while (VarAl!=27);
}
Реалізувати програму, яка дозволяє побачити і, при необхідності, змінити атрибути файлу.
? include “WRITE.H--”
char * fn=”1.txt”;
void main()
{
AH=0x43;
DX=fn;
AL=0x1;
CX=0x01;
$int 0x21;
AH=0x43;
DX=fn;
$int 0x21;
if(!CARRYFLAG)
{
WriteStr(“THERE IS NO ERROR”);
Writeln();
}
if(CX&0x01)
{
WriteStr(“C:\ TBL.dat is read only”);
Writeln();
}
if(CX&0x02)
{
WriteStr(“C:\ TBL.dat is hidden”);
Writeln();
}
if(CX&0x04)
{
WriteStr(“C:\ TBL.dat is system”);
Writeln();
}
}
Реалізувати програму, яка дозволяє побачити і, при необхідності, змінити час і дату створення файлу.
Реалізувати програму, яка дозволяє перекодувати вміст заданого файлу шляхом перестановки символів в непарних позиціях між собою.
Реалізувати програму, яка періодично перевіряє стан маніпулятора миша (положення курсору, стан кнопок) з виводом результату на екран, вихід з програми після натискання клавіші Esc.
?include<WRITE.H--> /* підключення бібліотеки */
?include<mouse.h-->
? define lkey 0x01
? define rkey 0x02 /* задання бітів, які відповідають кнопкам миші */
main()
{
int key,mkey,x,y,xm,ym,xp,yp; /* задання змінних */
x=y=xp=yp=0;
RESETMOUSE(); /* ініціалізація миші */
SHOWMOUSE(); /* показуєм на екран */
do
{
AH=01h; /* перевірка буферу на наявність в ньому символів */
$int 16h
key=AL;
AX=0003h; /* визначення положення курсора */
$int 33h
mkey=BX;
xm=CX/8;
ym=DX/8;
if(mkey==lkey) { /* вивід координат курсора в верхньому лівому куті */
x=y=1;
WRITESTR(" ");
GOTOXY(x,y);WRITEINT(xm);
WRITESTR(" ");WRITEINT(ym);
}
if(mkey==rkey){ /* вивід координат курсора в нижньому правому куті */
x=70;y=23;
WRITESTR(" ");
GOTOXY(x,y);WRITEINT(xm);
WRITESTR(" ");WRITEINT(ym);
}
}
while(key!=27); /* вихід з програми по натисканні Esc */
}
Реалізувати програму, що визначає кількість наявних паралельних (LPT) та послідовних (COM) портів та їх базові адреси з виводом результату на екран.
Реалізувати програму, що визначає кількість наявних FDD пристроїв та їх ємність з виводом результату на екран.
Реалізувати програму, яка дозволяє перевірити правильність розстановки дужок: [], (), {} заданого файлу на основі кінцевого автомату з виводом результату на екран.
Реалізувати програму, яка дозволяє об’єднати два задані файли, а результат зберегти в третьому.
Реалізувати програму, яка дозволяє визначити об’єм заданого текстового файлу, підрахувати кількість розділових знаків та наявних слів з виводом результату на екран.
#include <stdio.h>
#include <stdlib.h>
#include <DOS.H> /* підключення бібліотек */
#include <iostream.h>
#include <ctype.h>
#include <string.h>
#include <conio.h>
FILE *f;
char *s;
int i,j=0,k=1,len;
int v = 0;
int slova;
char ch; /* оголошення змінних */
int a[23][2]={0};
main(int argc, char *argv[])
{
f=fopen(argv[1],"rt"); /* відкриття файлу */
if(f==NULL)
{
cputs ("Cant open file\r\n");
exit(0);
}
while(!feof(f)) /* організовуємо цикл поки не кінець файлу */
{
fgets(s,255,f); /* функція зчитування з файлу */
len=strlen(s);
for (i=0;i<len;i++)
{
cout<<s[i];
if (s[i]==' '&& s[i]==13) slova++;
ch=s[i];
v++;
if(s[i]>32&&s[i]<48||s[i]>57&&s[i]<64||s[i]>90&&s[i]<97||s[i]>122&&s[i]<127) /*перевірка скан кодів*/
{
for(j=0;j<k;j++)
{
if(a[j][0]==0) /* якщо ми знайшли розділовий знак, то збільшуємо його кількість */
{
a[j][0]=s[i];
a[j][1]++;
k++;
break;
}
else if(a[j][0]==s[i]) /* якщо попередній цикл не знайшов коду */
{
a[j][1]++;break;
}
}
}
}
}
cout<<endl<<k<<endl;
for(j=0;j<k;j++)
cout<<a[j][0]<<"="<<a[j][1]<<endl;
/* вивід на екран */
cout<<endl<<slova<<endl;
cout<<endl<<v<<endl;
cin>>i;
fcloseall(); /* закриття файлів */
}