Primeiro tipo procedural

program Meu_Primeiro_Tipo_Procedural;

type TBomProc = procedure;
{ Uma variavel do tipo TBomProc armazenara pontos
de entrada (entry points) de procedimentos. De certa
forma, uma variavel do tipo procedural pode ser
"executada" }

procedure BomDia;
begin
WriteLn('Bom Dia');
end;

procedure BoaNoite;
begin
WriteLn('Boa Noite');
end;

var Bom : TBomProc;  { variavel do tipo TBomProc ( procedural ) }

begin { of program }
Bom:=BomDia; { Bom armazena o ponto de entrada de BomDia }
Bom; { executa BomDia }
Bom:=BoaNoite;
Bom; { executa BoaNoite }
end. { of program }