Program GF_1;

uses crt;

type
	Tinf=integer;
	List=^TList;
	TList=record
	data:TInf;
	next,prev:List;
end;

Procedure DelElemPos(var Head:List; pos:integer);
var
	i:integer;
	tmp,tmpi:List;
begin
	if (pos>=1) and (Head<>nil) then
	begin
		i:=1;
		tmp:=Head;
		
		while (tmp<>nil) and (i<>pos) do
		begin
			tmp:=tmp^.next;
			inc(i);
		end;
		
		if tmp<>nil then
			begin
				if tmp=Head then
				begin
					Head:=tmp^.next;
					Dispose(tmp);
					tmp:=nil;
			end
		else
			begin
				tmpi:=Head;
				while tmpi^.next<>tmp do
				tmpi:=tmpi^.next;
				tmpi^.next:=tmp^.next;
				Dispose(tmp);
				tmp:=nil;
			end;
			
			Writeln('Элемент был удалён.');
		end
		else
			Writeln('Такой номер элемента ' , pos, ' не существует.');
			Readln;
	end
	else
	begin
	Writeln('Такой номер элемента ' ,pos, ' не существует.');
	end;
end;

/// - - - - - - - - - - program - - - - - - - - - - -
var
	Head,Last,Current,tmp:List;
	i,num,pos,number:integer;
	value:Tinf;
begin
	while number<>5 do
	begin
		case number of 	
			// - - - - - - - - delete spisok- - - - - -
			1:while head<>nil do
				begin
					tmp:=head;
					head:=head^.next;
					Dispose(tmp);
					tmp:=nil;
			end;
			
			// - - - - - - - - delete element- - - - - -
			2:begin
				Writeln('Введите номер элемента для удаления: ');
				Readln(pos);
				DelElemPos(Head,pos);
			end;	
			
			// - - - - - - - - add- - - - - -
			3:begin
				Writeln('Введите элемент:');
				Readln(value);
				Writeln('Элемент был добавлен');
				Readln;
				GetMem(tmp,sizeof(TList));
				tmp^.next:=Head;
				tmp^.data:=value;
				Head:=tmp;
			end;	
			// - - - - - - - - вывод списка- - - - - -
			4:begin
				Writeln('Полченный список: ');
				
				While Head<>nil do
				begin
					Write(Head^.Data, ' ');
					Head:=Head^.Next;
				end;
				Readln;
			end;
			
		end;

		clrscr;
		Writeln('Выберете действие из списка? =)');
		Writeln('1 - DEL_s-Удаление всего списка.');
		Writeln('2 - DEl_e-Удаление одного элемента.');
		Writeln('3 - Add-Добавление элемента.');
		Writeln('4 - Vid-Вывести список на экран.');
		Writeln('5 - Exit-Выход.');
		Readln(number);
	end;
end.