{-------------------------------------------------------------}
{                     CartaVox - configurador
{-------------------------------------------------------------}

unit carConf;

interface

uses winTypes, winProcs, winDos, shellApi, strings,
     dvcrt, dvWin,
     carVars, carMsg;

procedure configurar;

implementation

{-------------------------------------------------------------}
{                     configura programa
{-------------------------------------------------------------}

procedure configuraTudo;

label SMTPok, POP3ok, nomeOk, enderOk, contaOk, dirRecOk,
      dirEnvOk, limiteOk, assinaturaOk, guardaOk;
var c1, c2: char;
    s: string;
    sz: array [0..144] of char;
    erro: integer;
    dirAtual: string;
    arqTeste: text;

begin
    if hostSMTP <> '' then
        begin
            mensagem ('CTSVSMTP', 1);  {'Servidor para envio de cartas - SMTP'}
            sintWriteln (hostSMTP);
            mensagem ('CTPODSER', 0);  {'Pode ser ? '}
            sintLeTecla (c1, c2);
            writeln;
            if upcase (c1) <> 'N' then goto SMTPok;
        end;

    mensagem ('CTNSSMTP', 1);  {'Nome do servidor SMTP'}
    sintReadln (hostSMTP);

SMTPok:
    if hostPOP3 <> '' then
        begin
            mensagem ('CTSVPOP3', 1);  {'Servidor para recepção de cartas - POP3'}
            sintWriteln (hostPOP3);
            mensagem ('CTPODSER', 0);  {'Pode ser ? '}
            sintLeTecla (c1, c2);
            writeln;
            if upcase (c1) <> 'N' then goto POP3ok;
        end;

    mensagem ('CTNSPOP3', 1);  {'Nome do servidor POP3'}
    sintReadln (hostPOP3);

POP3ok:
    if nomeUsuario <> '' then
        begin
            mensagem ('CTSEUNOM', 1);  {'Seu nome esta registrado como'}
            sintWriteln (nomeUsuario);
            mensagem ('CTPODSER', 0);  {'Pode ser ? '}
            sintLeTecla (c1, c2);
            writeln;
            if upcase (c1) <> 'N' then goto nomeOk;
        end;

    mensagem ('CTQSEUNO', 1);  {'Qual seu nome ?'}
    sintReadln (nomeUsuario);

nomeOk:

    if enderUsuario <> '' then
        begin
            mensagem ('CTENDREM', 1);  {'Endereço eletrônico do remetente'}
            sintWriteln (enderUsuario);
            mensagem ('CTPODSER', 0);  {'Pode ser ? '}
            sintLeTecla (c1, c2);
            writeln;
            if upcase (c1) <> 'N' then goto enderOk;
        end;

    mensagem ('CTENDCMP', 1);  {'Qual seu endereço completo ?'}
    sintReadln (enderUsuario);

EnderOk:
    if enderUsuario <> '' then
        begin
            mensagem ('CTCONREG', 1);  {'Conta no servidor registrada como'}
            sintWriteln (contaUsuario);
            mensagem ('CTPODSER', 0);  {'Pode ser ? '}
            sintLeTecla (c1, c2);
            writeln;
            if upcase (c1) <> 'N' then goto contaOk;
        end;

    mensagem ('CTQNOMEC', 1);  {'Qual o nome de sua conta ?'}
    sintReadln (contaUsuario);

ContaOk:
    if dirRecebe <> '' then
        begin
            mensagem ('CTDICREC', 1);  {'Diretório atual para cartas recebidas'}
            sintWriteln (dirRecebe);
            mensagem ('CTPODSER', 0);  {'Pode ser ? '}
            sintLeTecla (c1, c2);
            writeln;
            if upcase (c1) <> 'N' then goto dirRecOk;
        end;

    mensagem ('CTQDIREC', 1);  {'Qual o diretório para cartas recebidas ?'}
    sintReadln (dirRecebe);

    getDir (0, dirAtual);
    {$I-}  chdir (dirRecebe);  {$I+}
    if ioresult <> 0 then
        begin
            mensagem ('CTERRDIR', 1);    {'Diretório inexistente, informe de novo'}
            dirRecebe := '';
            chdir (dirAtual);
            goto ContaOk;
        end;

    chdir (dirAtual);

dirRecOk:
    if dirEnvia <> '' then
        begin
            mensagem ('CTDINREC', 1);  {'Diretório atual para cartas ainda não enviadas'}
            sintWriteln (dirEnvia);
            mensagem ('CTPODSER', 0);  {'Pode ser ? '}
            sintLeTecla (c1, c2);
            writeln;
            if upcase (c1) <> 'N' then goto dirEnvOk;
        end;

    mensagem ('CTQDINRC', 1);  {'Qual o diretório para cartas a enviar?'}
    sintReadln (dirEnvia);

    getDir (0, dirAtual);
    {$I-}  chdir (dirEnvia);  {$I+}
    if ioresult <> 0 then
        begin
            mensagem ('CTERRDIR', 1);    {'Diretório inexistente, informe de novo'}
            dirEnvia := '';
            chdir (dirAtual);
            goto dirRecOk;
        end;

    chdir (dirAtual);

dirEnvOk:
    mensagem ('CTTAMMAX', 1);  {'Tamanho máximo de carta recebida'}
    str (maxTamAuto, s);
    sintWriteln (s);
    mensagem ('CTPODSER', 0);  {'Pode ser ? '}
    sintLeTecla (c1, c2);
    writeln;
    if upcase (c1) <> 'N' then goto limiteOk;

    mensagem ('CTQTAMAX', 1);  {'Qual o tamanho máximo de carta recebida?'}
    sintReadln (s);
    if s <> '' then
        begin
            val (s, maxTamAuto, erro);
            if (maxTamAuto < 5000) then
                maxTamAuto := 10000000;
        end;

limiteOk:
    mensagem ('CTARQASS', 1);  {'Nome do arquivo de assinatura'}
    if nomeAssinatura = '' then
        mensagem ('CTSEMASS', 1)   {'-- Nenhum --'}
    else
        sintWriteln (nomeAssinatura);
    mensagem ('CTPODSER', 0);  {'Pode ser ? '}
    sintLeTecla (c1, c2);
    writeln;
    if upcase (c1) <> 'N' then goto assinaturaOk;

    mensagem ('CTQARQAS', 1);  {'Qual o nome completo do arquivo de assinatura?'}
    sintReadln (nomeAssinatura);

    if nomeAssinatura <> '' then
        begin
            assign (arqTeste, nomeAssinatura);
            {$I-}  reset (arqTeste);  {$I+}
            if ioresult = 0 then
                close (arqTeste)
            else
                mensagem ('CTASSNAO', 1);   {'Arquivo não existe, não esqueça de criá-lo'}
        end;

assinaturaOk:
    if guardaEnviadas then
        mensagem ('CTGUENV', 1)     {'Vou guardar uma cópia de todas as cartas enviadas'}
    else
        mensagem ('CTNGUENV', 1);   {'Armazenagem das cartas já enviadas está inibida'}
    mensagem ('CTPODSER', 0);  {'Pode ser ? '}
    sintLeTecla (c1, c2);
    writeln;
    if upcase (c1) <> 'N' then goto guardaOk;

    guardaEnviadas := not guardaEnviadas;
    if guardaEnviadas then
        mensagem ('CTGUENV', 1)     {'Vou guardar uma cópia de todas as cartas enviadas'}
    else
        mensagem ('CTNGUENV', 1);   {'Armazenagem das cartas já enviadas está inibida'}

guardaOk:
    strPCopy (sz, hostSMTP);
    writePrivateProfileString('CARTAVOX', 'SERVIDORSMTP', sz, 'DOSVOX.INI');
    strPCopy (sz, hostPOP3);
    writePrivateProfileString('CARTAVOX', 'SERVIDORPOP3', sz, 'DOSVOX.INI');
    strPCopy (sz, nomeUsuario);
    writePrivateProfileString('CARTAVOX', 'NOMEUSUARIO',  sz, 'DOSVOX.INI');
    strPCopy (sz, enderUsuario);
    writePrivateProfileString('CARTAVOX', 'ENDERUSUARIO', sz, 'DOSVOX.INI');
    strPCopy (sz, contaUsuario);
    writePrivateProfileString('CARTAVOX', 'CONTAUSUARIO', sz, 'DOSVOX.INI');
    strPCopy (sz, dirRecebe);
    writePrivateProfileString('CARTAVOX', 'DIRRECEBE',    sz, 'DOSVOX.INI');
    strPCopy (sz, dirEnvia);
    writePrivateProfileString('CARTAVOX', 'DIRENVIA',     sz, 'DOSVOX.INI');
    str (maxTamAuto, s);
    strPCopy (sz, s);
    writePrivateProfileString('CARTAVOX', 'LIMITEAUTOREC',sz, 'DOSVOX.INI');
    strPCopy (sz, nomeAssinatura);
    writePrivateProfileString('CARTAVOX', 'ASSINATURA',   sz, 'DOSVOX.INI');
    if guardaEnviadas then
        writePrivateProfileString('CARTAVOX', 'COPIAENVIADAS', 'SIM', 'DOSVOX.INI')
    else
        writePrivateProfileString('CARTAVOX', 'COPIAENVIADAS', 'NAO', 'DOSVOX.INI');

    while keypressed do readkey;
    mensagem ('CTFIMCNF', 1);   {'Fim da configuração'}
end;

{--------------------------------------------------------}
{                  guarda configuração
{--------------------------------------------------------}

procedure guardaConfig;
var
    nomeConfig: string;
    sz, szNomeConfig: array [0..144] of char;
    n: integer;
begin
    mensagem ('CTNOMCNF', 1);   {'Informe o nome da configuração (até 20 letras)'}
    sintReadln (nomeConfig);
    while (nomeConfig <> '') and (nomeConfig [1] = ' ') do
        delete (nomeConfig, 1, 1);
    if nomeConfig = '' then exit;
    strPCopy (szNomeConfig, nomeConfig);

    getPrivateProfileString('CARTAVOX',     'SERVIDORSMTP', '', sz, 144, 'DOSVOX.INI');
    writePrivateProfileString(sznomeConfig, 'SERVIDORSMTP', sz, 'CARTAVOX.INI');

    getPrivateProfileString('CARTAVOX',     'SERVIDORPOP3', '', sz, 144, 'DOSVOX.INI');
    writePrivateProfileString(sznomeConfig, 'SERVIDORPOP3', sz, 'CARTAVOX.INI');

    getPrivateProfileString('CARTAVOX',     'NOMEUSUARIO',   '', sz, 144, 'DOSVOX.INI');
    writePrivateProfileString(sznomeConfig, 'NOMEUSUARIO',   sz, 'CARTAVOX.INI');

    getPrivateProfileString('CARTAVOX',     'ENDERUSUARIO',  '', sz, 144, 'DOSVOX.INI');
    writePrivateProfileString(sznomeConfig, 'ENDERUSUARIO',  sz, 'CARTAVOX.INI');

    getPrivateProfileString('CARTAVOX',     'CONTAUSUARIO',  '', sz, 144, 'DOSVOX.INI');
    writePrivateProfileString(sznomeConfig, 'CONTAUSUARIO',  sz, 'CARTAVOX.INI');

    getPrivateProfileString('CARTAVOX',     'DIRRECEBE',     '', sz, 144, 'DOSVOX.INI');
    writePrivateProfileString(sznomeConfig, 'DIRRECEBE',     sz, 'CARTAVOX.INI');

    getPrivateProfileString('CARTAVOX',     'DIRENVIA',      '', sz, 144, 'DOSVOX.INI');
    writePrivateProfileString(sznomeConfig, 'DIRENVIA',      sz, 'CARTAVOX.INI');

    getPrivateProfileString('CARTAVOX',     'LIMITEAUTOREC', '', sz, 144, 'DOSVOX.INI');
    writePrivateProfileString(sznomeConfig, 'LIMITEAUTOREC', sz, 'CARTAVOX.INI');

    getPrivateProfileString('CARTAVOX',     'ASSINATURA',    '', sz, 144, 'DOSVOX.INI');
    writePrivateProfileString(sznomeConfig, 'ASSINATURA',    sz, 'CARTAVOX.INI');

    getPrivateProfileString('CARTAVOX',     'COPIAENVIADAS', '', sz, 144, 'DOSVOX.INI');
    writePrivateProfileString(sznomeConfig, 'COPIAENVIADAS', sz, 'CARTAVOX.INI');
end;

{--------------------------------------------------------}
{                recupera configuração
{--------------------------------------------------------}

procedure recuperaConfig;
var
    nomeConfig: string;
    sz, szNomeConfig: array [0..144] of char;
    n, erro: integer;
begin
    mensagem ('CTNOMCNF', 1);   {'Informe o nome da configuração (até 20 letras)'}
    sintReadln (nomeConfig);
    while (nomeConfig <> '') and (nomeConfig [1] = ' ') do
        delete (nomeConfig, 1, 1);
    if nomeConfig = '' then exit;
    strPCopy (szNomeConfig, nomeConfig);

    n := getPrivateProfileString(szNomeConfig, 'SERVIDORSMTP', '', sz, 144, 'CARTAVOX.INI');
    if n <= 0 then
        begin
            mensagem ('CTCNFNAO', 1);   {'Configuração não achada'}
            exit;
        end;
    writePrivateProfileString('CARTAVOX', 'SERVIDORSMTP', sz, 'DOSVOX.INI');
    hostSMTP := strPas (sz);

    getPrivateProfileString(szNomeConfig, 'SERVIDORPOP3', '', sz, 144, 'CARTAVOX.INI');
    writePrivateProfileString('CARTAVOX', 'SERVIDORPOP3', sz, 'DOSVOX.INI');
    hostPOP3 := strPas (sz);

    getPrivateProfileString(szNomeConfig, 'NOMEUSUARIO', '', sz, 144, 'CARTAVOX.INI');
    writePrivateProfileString('CARTAVOX', 'NOMEUSUARIO',  sz, 'DOSVOX.INI');
    nomeUsuario := strPas (sz);

    getPrivateProfileString(szNomeConfig, 'ENDERUSUARIO', '', sz, 144, 'CARTAVOX.INI');
    writePrivateProfileString('CARTAVOX', 'ENDERUSUARIO', sz, 'DOSVOX.INI');
    enderUsuario := strPas (sz);

    getPrivateProfileString(szNomeConfig, 'CONTAUSUARIO', '', sz, 144, 'CARTAVOX.INI');
    writePrivateProfileString('CARTAVOX', 'CONTAUSUARIO', sz, 'DOSVOX.INI');
    contaUsuario := strPas (sz);

    getPrivateProfileString(szNomeConfig, 'DIRRECEBE', '', sz, 144, 'CARTAVOX.INI');
    writePrivateProfileString('CARTAVOX', 'DIRRECEBE',    sz, 'DOSVOX.INI');
    dirRecebe := strPas (sz);

    getPrivateProfileString(szNomeConfig, 'DIRENVIA', '', sz, 144, 'CARTAVOX.INI');
    writePrivateProfileString('CARTAVOX', 'DIRENVIA',     sz, 'DOSVOX.INI');
    dirEnvia := strPas (sz);

    getPrivateProfileString(szNomeConfig, 'LIMITEAUTOREC', '', sz, 144, 'CARTAVOX.INI');
    writePrivateProfileString('CARTAVOX', 'LIMITEAUTOREC',sz, 'DOSVOX.INI');
    val (strPas (sz), maxTamAuto, erro);
    if erro <> 0 then maxTamAuto := 1000000;

    getPrivateProfileString(szNomeConfig, 'ASSINATURA', '', sz, 144, 'CARTAVOX.INI');
    writePrivateProfileString('CARTAVOX', 'ASSINATURA',     sz, 'DOSVOX.INI');
    nomeAssinatura := strPas (sz);

    getPrivateProfileString(szNomeConfig, 'COPIAENVIADAS', '', sz, 144, 'CARTAVOX.INI');
    writePrivateProfileString('CARTAVOX', 'COPIAENVIADAS',     sz, 'DOSVOX.INI');
    guardaEnviadas := upcase(sz[1]) <> 'N';
end;

{--------------------------------------------------------}
{                 Opções de configuração
{--------------------------------------------------------}

procedure configurar;
var c, c2: char;
begin
    mensagem ('CTOPCONF', 0);
                  {Opção: C-configurar   G-guardar configuração   R-recuperar  '}
    sintLeTecla (c, c2);
    writeln;

    case upcase (c) of
        'C':  configuraTudo;
        'G':  guardaConfig;
        'R':  recuperaConfig;
    else
        mensagem ('CTOPCINV', 1);  {'Opção inválida'}
    end;
end;

end.
