PROGRAM Seriova_linka;
USES
Crt, ibmcom; {ibmcom je ke stazeni na www.programmersheaven.com}
{Po spusteni program nacita znak ze serioveho portu COM1, po nacteni 12 znaku
ziskane cislo zkusi najit v textovem souboru seznam.txt v aktualnim adresari.
Pokud toto cislo najde, zjisti jmeno majitele TM a jeho pristupove pravo,
oboji zobrazi na obrazovce. Pokud ma dana osoba vyssi pristupove pravo (1),
program mu povoli dalsi operaci - v nasem pripade soucet dvou cisel. Pokud
ma dana osoba nizsi pristupove pravo (ruzne od 1),program mu dalsi operaci
nepovoli a zacne se testovat dalsi TM.}
PROCEDURE read_key (VAR ch1, ch2: Char);
BEGIN
ch1 := ReadKey;
IF ch1 = #0 THEN
ch2 := ReadKey
ELSE
ch2 := #0;
END;
type clovek=record
jmeno : string[40];
cislo : string[12];
prava : string[1];
end;
CONST
port = 1; {zarizeni musi byt pripojeno na portu COM1}
initial_speed = 19200; {komunikacni rychlost 19200b/s}
VAR
lidi : array [1..1000] of Clovek; {max.1000 lidi v seznamu}
puvodni:string[40];
result : Word;
exit_prog: Boolean;
ch1, ch2 : Char;
ch,ch3 : Char;
volba : integer;
sercislo : string[12];
pocetlidi: Integer;
n:integer;
procedure Nacti;
var soubor : text;
begin
assign (soubor,'seznam.txt');
reset (soubor);
pocetlidi:=0;
while not eof(soubor) do
begin
pocetlidi:=pocetlidi+1;
readln (soubor,lidi[pocetlidi].jmeno);
readln (soubor,lidi[pocetlidi].cislo);
readln (soubor,lidi[pocetlidi].prava);
end;
close (soubor);
end;
procedure soucet;
var a,b:integer;
begin
gotoxy (10,12);
write ('Pristup povolen ');
gotoxy (10,15);
write ('Zadej cislo a:');
readln (a);
gotoxy (10,16);
write ('Zadej cislo b:');
readln (b);
gotoxy (10,17);
write (a,'+',b,'=',a+b);
end;
procedure zobraz (cis:integer);
begin
gotoxy (10,10);
write (' ');
gotoxy (10,9);
write('Jmeno uzivatele');
gotoxy(32,9);
write('Pristupove pravo');
gotoxy (10,10);
write (lidi[cis].jmeno);
gotoxy(32,10);
write(lidi[cis].prava);
if lidi[cis].jmeno<>puvodni then
begin
puvodni:=lidi[cis].jmeno;
if lidi[cis].prava='1' then
soucet
else
begin
gotoxy (10,12);
write ('Pristup nepovolen');
gotoxy (10,15);
write (' ');
gotoxy (10,16);
write (' ');
gotoxy (10,17);
write (' ');
end;
end;
end;
procedure kontrola;
var n:integer;
begin
n:=1;
while (sercislo<>lidi[n].cislo) and (n<=pocetlidi) do
n:=n+1;
if n<=pocetlidi then
zobraz(n)
else
begin
gotoxy (10,9);
write('Jmeno uzivatele');
gotoxy(32,9);
write('Pristupove pravo');
gotoxy (10,10);
write ('Nenalezeno v databazi ');
end;
end;
BEGIN
clrscr;
Writeln('Zabezpeceni pristupu do programu');
Writeln('=============================================================================');
Writeln('Rezim prijimani');
write('Port: COM',port);
writeln(' Rychlost: ',initial_speed,'b/s');
writeln('Stiskem Alt-X ukoncite program');
ComInstall (port, result);
IF result <> 0 THEN
BEGIN
CASE result OF
1: Writeln ('Chybne cislo portu: ', port);
2: Writeln ('UART port nenalezen: ', port);
3: Writeln ('Driver je uz jednou instalovan');
ELSE
Writeln ('Neocekavana chyba v ComInstall', result);
END;
Exit;
END;
ComRaiseDTR; {nastavi DTR}
ComSetSpeed (initial_speed); {nastavi komunik.rychlost}
ComSetParity (ComNone, 1); {zadna parita,8 datovych bitu,1 stop bit}
exit_prog := False;
nacti;
REPEAT
IF KeyPressed THEN
BEGIN
read_key (ch1, ch2);
CASE ch2 OF
#45: {Alt-X}
exit_prog := True;
END;
END;
ch3 := ComRx; {nacteni 1 znaku}
IF ch3 <> #0 THEN
begin
sercislo:=sercislo+ch3; {po 12 znacich kontrola cisla}
if length(sercislo)=12 then
begin
kontrola;
sercislo:='';
end;
end;
UNTIL exit_prog;
END.