Эмуляция командного процессора ОС UNIX в среде Windows 9x
Курсовой проект - Компьютеры, программирование
Другие курсовые по предмету Компьютеры, программирование
p>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;
end;
r1 := 0; r2 := 0;
v1 := True;
v2 := True;
v3 := True;
if par = 1 then
v1 := False;
if par = 2 then
v2 := False;
if par = 3 then
v3 := False;
if par = 12 then
begin
v1 := False;
v2 := False;
end;
if par = 13 then
begin
v1 := False;
v3 := False;
end;
if par = 23 then
begin
v2 := False;
v3 := False;
end;
while True do
begin
Reset(f1);
for i := 1 to r1 do
ReadLn(f1, s1);
Inc(r1);
ReadLn(f1, s1);
Reset(f2);
b := False;
while not EOF(f2) do
begin
ReadLn(f2, s2);
if s1 = s2 then
begin
if v3 then
WriteLn(s_or_f, , s1);
b := True;
Break;
end;
end;
if not b and v1 then
WriteLn(s_or_f, s1);
Reset(f2);
for i := 1 to r2 do
ReadLn(f2, s2);
Inc(r2);
ReadLn(f2, s2);
if EOF(f1) and EOF(f2) then
r1 := - 1;
Reset(f1);
b := False;
while not EOF(f1) do
begin
ReadLn(f1, s1);
if s1 = s2 then
begin
b := True;
Break;
end;
end;
if not b and v2 then
WriteLn(s_or_f, , s2);
if (r1 = - 1) then
Break;
end;
Close(f1);
Close(f2);
end;
Procedure Rmcat(comu:string);
var
keys, f: string;
p, s: boolean;
n, i: integer;
BEGIN
if Error(comu) then exit;
Delete(comu, 1, 6);
keys := ;
if Pos(-, comu) <> 0 then
begin
keys := Copy(comu, 1, Pos( , comu));
Delete(comu, 1, Pos( , comu));
end;
if Pos(p, keys) <> 0 then
p := True
else
p := False;
if Pos(s, keys) <> 0 then
s := True
else
s := False;
f := comu;
{$I-} RmDir(f); {$I+}
if IOResult <> 0 then
begin
if not s then
WriteLn(Kаталог не существует или содержит файлы!);
Exit;
end;
WriteLn(Каталог , f, удален.);
if p then
begin
if Pos(\, f) = 0 then
begin
GetDir(0, f);
ChDir(..);
end
else
begin
for i := 1 to Length(f) do
if f[i] = \ then
n := i;
f[0] := Chr(n - 1);
end;
RmDir(f);
end;
End;
Procedure Cat(comu: string);
var
fname, fname2: string;
b: string;
f: text;
p, Flag: boolean;
k, f2: integer;
begin
if Error(comu) then Exit;
Delete(comu, 1, 4);
f2 := 0;
if Pos( , comu) = 0 then
fname := comu
else
begin
f2 := 1;
fname := Copy(comu, 1, Pos( , comu) - 1);
fname2 := Copy(comu, Pos( , comu) + 1, Length(comu) - Pos( , comu));
end;
if (fname = -) or (fname = ) then
fname := con;
repeat
if f2 = 2 then
f2 := 0;
{$I-} Assign(f, fname); Reset(f); {$I+}
if IOResult <> 0 then
begin
WriteLn(Неверное имя файла!);
Exit;
end;
k := 0;
while not EOF(f) do
begin
ReadLn(f, b);
k := k + 1;
WriteLn(s_or_f, b);
end;
Close(f);
if f2 = 1 then
begin
fname := fname2;
f2 := 2;
end;
until f2 = 0;
end;
procedure Mv(comu:string);
{перенос файлов}
const rs = 512;
var
keys, fname1, fname2, f: string;
f1, f2: file;
nr, nw: word;
buf: array [1..rs] of char;
i, r: boolean;
yn: char;
Begin
if error(comu) then exit;
delete(comu, 1, 3);
if error(comu) then exit;
keys := ;
if pos(-, comu) <> 0 then
begin
keys := copy(comu, 1, pos( , comu));
delete(comu, 1, pos( , comu));
end;
if pos(