Реферат по предмету "Информатика"


Эмуляция командного процессора ОС UNIX в среде Windows 9x

--PAGE_BREAK--Список литературы

1. Паскаль для персональных компьютеров: Справ. пособие / Ю.С. Бородич, А.Н. Вальвачев, А.И. Кузьмич. – Мн.: Выш. шк.: БФ ГИТМП “НИКА”, 1991. – 365 с.: ил.

2. Информатика: Учеб. пособие для студ. вузов / А.В. Могилев, Н.И. Пак, Е.К. Хеннер; под ред. Е.К. Хеннера. – М.: Изд. центр «Академия», 2000. – 816 с.

3. UNIX: Справочник / Рейчард К., Фостер — Джонсон Э. – Спб: Питер Ком, 1999. — 384 с.

Приложение А

Листинг программы

Program unix_com;

Uses Dos;

Var comu:string;

s_or_f:text;

k:integer;

Function Unix_num (comu:string):integer;

const inp:array[1..9] of string[6] = (

'ls', 'dircmp', 'tr', 'comm', 'rmdir', 'cat', 'mv', 'man', 'exit');

var f:boolean;

i:integer;

Begin f:=False;

for i:=1 to 9 do

if (Copy(comu, 1, Pos(' ', comu)-1)=inp[i]) or (comu=inp[i]) then

begin

f:=True;

Break;

end;

if not f then i:=11;

Unix_num:=i;

End;

Procedure Reout(var comu:string);

var Dev:string;

Flag:boolean;

Begin

Dev:='con';

Flag:=False;

if Pos ('>', comu) 0 then

begin

if Pos ('>>', comu) 0 then

begin

Delete (comu, Pos('>', comu), 1);

Flag:=True;

end;

Dev:=Copy(comu, Pos('>', comu)+1, Length(comu)-Pos('>', comu)+1);

if Dev[1]='' then Delete(dev, 1, 1);

Delete(comu, Pos('>', comu), Length(comu)-Pos('>', comu)+1);

end;

Assign (s_or_f, dev);

if Flag then begin

{$I-} Append (s_or_f); {$I+}

if IOResult 0 then Rewrite (s_or_f);

end

else Rewrite(s_or_f);

End;

Function Error (comu:string):boolean;

Begin

Error:=False;

if Pos(' ', comu)=0 then

begin

WriteLn('Команда введена неверно!');

Error:=True;

end;

end;

Procedure Spaces (var s:string);

Begin

while Pos(' ', s)0 do Delete(s, Pos(' ', s), 1);

while Pos(' ', s)=1 do Delete(s, 1, 1);

if s[Length(s)]=' ' then Delete (s, Length(s), 1);

end;

Procedure Attr(at:byte);

const Ast:array[0..6] of string[5] = (

'-', 'R', 'H', 'S', 'V', '', 'A');

A16:array[0..6] of byte = (

$00, $01, $02, $04, $08, $10, $20);

var i, i1, i2, i3, i4, i5:integer;

at1:byte;

ss:string[20];

Begin

for i:=0 to 1 do

for i:=1 to 2 do

for i:=2 to 3 do

for i:=3 to 4 do

for i:=4 to 5 do

for i:=5 to 6 do

begin

at1:=A16[i]+A16[i1]+A16[i2]+A16[i3]+A16[i4]+A16[i5];

if at1=at then

begin

ss:=Ast[i]+Ast[i1]+Ast[i2]+Ast[i3]+Ast[i4]+Ast[i5]+'';

write(s_or_f, ss);

Exit;

end;

end;

End;

Procedure Ls(comu: string);

var

Info: SearchRec;

dt: DateTime;

atr: byte;

keys, maska, cmd1: string;

o1, p1, a1, p, l, r: boolean;

nn, pos1: integer;

c0: string[1];

begin

atr := $3F;

Spaces(comu);

cmd1 := comu;

Delete(comu, 1, 3);

keys := '';

if Pos('-', comu) 0 then

begin

if Pos(' ', comu) = 0 then

pos1 := Length(comu)

else

pos1 := Pos(' ', comu);

keys := Copy(comu, 1, pos1);

Delete(comu, 1, pos1);

end;

if Pos('l', keys) 0 then

l := True

else

l := False;

if Pos('1', keys) 0 then

o1 := True

else

o1 := False;

if Pos('a', keys) 0 then

a1 := True

else

a1 := False;

if Pos('p', keys) 0 then

p1 := True

else

p1 := False;

if Pos('R', keys) 0 then

r := True

else

r := False;

if comu '' then

begin

if comu[Length(comu)] '\' then

maska := comu + '\*.*'

else

maska := comu + '*.*'

end

else

maska := '*.*';

FindFirst(maska, atr, Info);

if Info.Name = '.' then

FindNext(Info);

nn := 0;

repeat

if (DosError = 0) and a1 and (Info.Name ='..') then

begin

Write(s_or_f, Info.Name, ' ':(15 — Length(Info.Name)));

Inc(nn);

end;

if (DosError = 0) and (Info.Name '..') then

begin

if (Info.Attr = $10) and p1 then

Info.Name := Info.Name + '\';

if (Info.Attr = $02) or (Info.Attr = $10) then

begin

if a1 then

begin

Write(s_or_f, Info.Name, ' ':(15 — Length(Info.Name)));

Inc(nn);

end;

end

else

begin

Write(s_or_f, Info.Name, ' ':(15 — Length(Info.Name)));

Inc(nn);

end;

if l then

begin

Attr(Info.Attr);

UnpackTime(Info.Time, DT);

with DT do

begin

c0 := '';

if Day

c0 := '0';

Write(s_or_f, c0, Day, '-');

c0 := '';

if Month

c0 := '0';

Write(s_or_f, c0, Month, '-', Year);

c0 := '';

if Hour

c0 := '0';

Write(s_or_f, ' ', c0, Hour, ':');

c0 := '';

if Min

c0 := '0';

if o1 then

begin

WriteLn(s_or_f, c0, Min, ' ');

Inc(k);

end

else

begin

if nn = 3 then

begin

WriteLn(s_or_f, c0, Min, ' ');

nn := 0;

Inc(k);

end

else

Write(s_or_f, c0, Min, ' ')

end;

end;

end

else

begin

if o1 then

begin

WriteLn(s_or_f);

Inc(k);

end

else

if nn = 3 then

begin

WriteLn(s_or_f);

Inc(k);

nn := 0;

end;

end;

if (Info.Attr = $10) and r then

begin

WriteLn(s_or_f);

WriteLn(s_or_f, 'Просмотркаталога', Info.Name);

Inc(k);

keys := '';

if p then

keys := ' |more';

if cmd1[Length(cmd1)] '\' then

begin

comu := cmd1;

Delete(comu, 1, 3);

if Pos('-', comu) 0 then

begin

if Pos(' ', comu) = 0 then

pos1 := Length(comu)

else

pos1 := Pos(' ', comu);

Delete(comu, 1, pos1);

end;

if comu = '' then

Ls(cmd1 + ' ' + Info.Name + keys)

else

Ls(cmd1 + '\' + Info.Name + keys);

end

else

Ls(cmd1 + Info.Name + keys);

end;

end;

FindNext(Info);

until DosError 0;

WriteLn(s_or_f);

Inc(k);

end;

Procedure Diff(comu: string);

var

fname1, fname2, f: string[80];

f1, f2: text;

s1, s2: string;

r, c: integer;

Function Compare(s1, s2: string): integer;

var

i, k: integer;

Begin

k := 0;

for i := 1 to Length(s2) do

begin

if i > Length(s1) then

Break;

if s2[i] = s1[i] then

k := k + 1;

end;

Compare := Round(100 * k / (Length(s2) +

Abs(Length(s1) — Length(s2))));

End;

Begin

Delete(comu, 1, 5);

fname1 := Copy(comu, 1, Pos(' ', comu) — 1);

Delete(comu, 1, Pos(' ', comu));

fname2 := comu;

Assign (f1, fname1); Reset (f1);

Assign (f2, fname2); Reset (f2);

r := 0;

while True do

begin

s1 := #0;

s2 := #0;

if not EOF(f1) then

ReadLn(f1, s1);

if not EOF(f2) then

ReadLn(f2, s2);

r := r + 1;

if s1 s2 then

begin

Write(r, ' ');

c := Compare(s1, s2);

if c > 80 then

WriteLn('c')

else

WriteLn('d');

WriteLn('

if c > 80 then

WriteLn('----')

else

WriteLn(r, ' a');

WriteLn('>', s2);

end;

if EOF(f1) and not EOF(f2) then

begin

WriteLn('Второй файл длинее первого!');

Break;

end;

if EOF(f2) and not EOF(f1) then

begin

WriteLn('Первый файл длинее второго!');

Break;

end;

if EOF(f1) and EOF(f2) then

Break;

end;

Close(f1);

Close(f2);

End;

Procedure Dircmp(cnp: string);

type

FileList = array [1..500] of string[12];

var

f1, f2: FileList;

Flag, w, p, d, s: boolean;

i, j, n1, n2, k, n, pos1, cod: integer;

dir1, dir2, keys: DirStr;

st: string;

Procedure Scan(dir: DirStr; var f: FileList; var n: integer);

var

Info: SearchRec;

begin

if dir[Length(dir)] = '\' then

dir := dir + '*.*'

else

dir := dir + '\*.*';

FindFirst(dir, $3F, Info);

if DosError 0 then

begin

WriteLn('Ошибка при задании каталога ', dir);

n := — 1;

Exit;

end;

n := 0;

if Info.Name = '.' then

FindNext(Info);

repeat

if (DosError = 0) and (Info.Name '..') then

begin

if Info.Attr $10 then

begin

Inc(n);

f[n] := Info.Name;

end;

end;

FindNext(Info);

until DosError 0;

end;

begin

if Pos(' ', cnp) = 0 then

begin

WriteLn('Необходимо задать параметры!');

Exit;

end;

Delete(cnp, 1, 7);

n := 72;

keys := '';

if Pos('-', cnp) 0 then

begin

if Pos(' ', cnp) = 0 then

pos1 := Length(cnp)

else

pos1 := Pos(' ', cnp);

keys := Copy(cnp, 1, pos1);

Delete(keys, 1, 1);

Delete(cnp, 1, pos1);

end;

if Pos('d', keys) 0 then

begin

d := True;

Delete(keys, Pos('d', keys), 1);

end

else

d := False;

if Pos('s', keys) 0 then

begin

s := True;

Delete(keys, Pos('s', keys), 1);

end

else

s := False;

if Pos('w', keys) 0 then

begin

w := True;

Delete(keys, Pos('w', keys), 1);

while Pos(' ', keys) 0 do

Delete(keys, Pos(' ', keys), 1);

Val(keys, n, cod);

if cod 0 then

begin

WriteLn('Ошибка при задании длины строки!');

Exit;

end;

end

else

w := False;

dir1 := Copy(cnp, 1, Pos(' ', cnp) — 1);

Delete(cnp, 1, Pos(' ', cnp));

dir2 := cnp;

Scan(dir1, f1, n1);

if n1 = — 1 then

Exit;

Scan(dir2, f2, n2);

if n2 = — 1 then

Exit;

k := 0;

WriteLn(s_or_f, 'Файлы из первого каталога.');

for i := 1 to n1 do

begin

cod := 0;

for j := 1 to n2 do

if f1[i] = f2[j] then

cod := 1;

if cod = 0 then

begin

Inc(k);

WriteLn(s_or_f, f1[i]);

end;

end;

WriteLn(s_or_f, 'Файлыизвторогокаталога.');

for j := 1 to n2 do

begin

cod := 0;

for i := 1 to n1 do

if f2[j] = f1[i] then

cod := 1;

if cod = 0 then

begin

Inc(k);

WriteLn(s_or_f, f2[j]);

end;

end;

if s then

Exit;

WriteLn(s_or_f, 'Файлы общие для двух каталогов.');

for j := 1 to n2 do

begin

cod := 0;

for i := 1 to n1 do

if f2[j] = f1[i] then

cod := 1;

if cod = 1 then

begin

Inc(k);

WriteLn(s_or_f, f2[j]);

if d then

begin

st := dir1;

if st[Length(st)] = '\' then

st := st + f2[j]

else

st := st + '\' + f2[j];

st := st + ' ' + dir2;

if st[Length(st)] = '\' then

st := st + f2[j]

else

st := st + '\' + f2[j];

Diff(st);

end;

end;

end;

end;

Procedure Tr(comu: string);

var

p1, p2, s, s1: string;

k: integer;

begin

if Error(comu) then exit;

Delete(comu, 1, 3);

if Pos(' ', comu) = 0 then

begin

WriteLn('Недостаточно параметров!');

exit;

end;

p1 := Copy(comu, 1, Pos(' ', comu) — 1);

Delete(comu, 1, Pos(' ', comu));

p2 := comu; ReadLn(s);

while Pos(p1, s) 0 do

begin

k := Pos(p1, s); Delete(s, k, length(p1));

insert(p2, s, k);

end;

WriteLn(s_or_f, s);

end;

Procedure Comm(comu:string);

var

fname1, fname2, f: string[80];

f1, f2: text;

s1, s2: string;

par: string[10];

r1, r2, i: integer;

b, v1, v2, v3: boolean;

begin

if Pos(' ', comu) = 0 then

begin

WriteLn('Не указаны параметры команды!');

Exit;

end;

Delete(comu, 1, 5);

if Pos(' ', comu) = 0 then

begin

WriteLn('Недостаточно параметров!');

Exit;

end;

par := '';

if Pos('-', comu) 0 then

begin

par := Copy(comu, 2, Pos(' ', comu) — 2);

Delete(comu, 1, Pos(' ', comu));

end;

fname1 := Copy(comu, 1, Pos(' ', comu) — 1);

Delete(comu, 1, Pos(' ', comu));

fname2 := comu;

if fname1 = fname2 then

begin

WriteLn('Одинаковые имена файлов!');

Exit;

end;

{$I-}

Assign (f1, fname1); Reset (f1);

if IOResult 0 then

begin

Writeln ('Файл', fname1, ' ненайден!');

Exit;

end;

Assign (f2, fname2); Reset (f2);

{$I+}

if IOResult 0 then

begin

Writeln ('Файл', fname2, ' ненайден!');

Exit;
    продолжение
--PAGE_BREAK--


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.