program EOEC_User;

uses
    Crc, Crt, Ernst;

var
    UserName : String;
    UserCRC  : longint;
    RegCode1 : string[1];
    RegCode2 : string[4];
    RegCode3 : string[4];
    SubCode3 : longint;
    Code     : string;

(* ---------------------------------------------------------------------- *)
function ValToChar(Valor: LongInt): string;
begin
    ValToChar := Chr(Valor+65);
end;

(* ---------------------------------------------------------------------- *)
function TrimVal4(w : Word) : String;
         {Ajusta um n£mero para duas casas, colocando zero na frente, se
         necess rio.  Retorna o resultado numa string}

var
  s : String;

begin

    Str(w:0,s);
    if length(s) < 4 then s := '0' + s;
    if length(s) < 4 then s := '0' + s;
    if length(s) < 4 then s := '0' + s;
    if length(s) < 4 then s := '0' + s;
    TrimVal4 := s;

end;

(* ---------------------------------------------------------------------- *)
function CopyInt(Valor:longint; Pos1, Len:byte) : longint;
var Valor1, Valor2 : longint;

     function DezA(X:byte) : longint;
     begin
         DezA := round(exp(ln(10)*X));
     end;

begin

    valor1 := (Valor div DezA(Pos1-Len));
    valor2 := (Valor div DezA(Pos1))*(DezA(Len));

    CopyInt := Valor1 - Valor2;

end;


(* ====================================================================== *)
begin

writeln('EOEC Registration Code Generator v1.0 (EOEC v1.5)');
writeln;
write('Entre o nome do usu rio registrado do EOEC: ');
readln(UserName);

UserCRC := Abs(CRC32(Upper(UserName)));

RegCode1 := ValToChar(CopyInt(UserCRC,2,2) mod 25);
RegCode2 := TrimVal4(CopyInt(UserCRC,6,4));
RegCode3 := ValToChar(CopyInt(UserCRC,8,2) mod 25);

{ Composi‡„o do c¢digo de registro do usu rio de acordo com o CRC32:

               CRC32 = XXXXXXXXXX
                         À´ÀÄÂÙÀ´
                          ³  ³  ³
                          ³ÚÄÁ¿ÚÙ
  User Register Code =    @NNNN@

                   @ = chr(XX mod 25)
                NNNN = XXXX                     }


writeln('O c¢digo de ',Capitalize(UserName),' ‚: ',RegCode1+RegCode2+RegCode3);
writeln;

end.
