{--------------------------------------------------------}
{
{    Programa de impressao comum
{
{    Configuração
{
{    Autor: Jose' Antonio Borges e Geraldo Junior
{
{    Em 26/06/2000
{
{--------------------------------------------------------}

unit lisconf;
interface

uses dvwin, dvcrt, winprocs, wintypes, strings,
     lismsg, lisvars;

function pegaParametros: boolean;

implementation

{--------------------------------------------------------}
{                 assume valores padrao
{--------------------------------------------------------}

procedure pegaParamDefault;
var s: string;

    function pegaParam (param: string; default: integer): integer;
    var erro, i: integer;
        s: string;
        pcParam, pcValor: array [0..20] of char;
    begin
        pegaParam := default;
        s := sintAmbiente ('LISTAVOX', param);
        if s <> '' then
            begin
                val (s, i, erro);
                if erro = 0 then pegaParam := i;
            end
        else
            begin
                strPCopy (pcParam, param);
                str (default, s);
                strPCopy (pcValor, s);
                writePrivateProfileString ('LISTAVOX', pcParam, pcValor, 'DOSVOX.INI');
            end;
    end;

begin
    numerando := false;
    ncopias := 1;
    pagInicial := 1;
    pagFinal := 9999;
    numInicial := 1;

    colunasPapel := pegaParam ('ColunasPapel', 80);
    LinhasPapel  := pegaParam ('LinhasPapel', 66);
    primLinha :=  pegaParam ('PrimeiraLinha', 3);
    ultLinha := pegaParam ('UltimaLinha', 62);
    primCol := pegaParam ('PrimeiraColuna', 8);
    ultCol := pegaParam ('UltimaColuna', 79);
end;

{--------------------------------------------------------}
{          altera configuração física da página
{--------------------------------------------------------}

procedure configFisica;
var c: char;

        procedure guardaParam (param: string; valor: integer);
        var s: string;
            sz, szparam: array [0..40] of char;
        begin
            strPCopy (szparam, param);
            str (valor, s);
            strPCopy (sz, s);
            writePrivateProfileString('LISTAVOX', szparam, sz, 'DOSVOX.INI');
        end;

begin
    mensagem ('LICOLPAP', 0);        {'Quantas colunas tem o papel (geralmente 80) ? '}
    sintReadInt (colunasPapel);
    mensagem ('LILINPAP', 0);        {'Quantas linhas tem o papel (geralmente 66)  ? '}
    sintReadInt (linhasPapel);
    mensagem ('LIPRILIN', 0);        {'Primeira linha a imprimir (geralmente 3):  '}
    sintreadInt (primLinha);
    mensagem ('LIULTLIN', 0);        {'Última linha a imprimir (geralmente 62):   '}
    sintreadInt (ultLinha);
    mensagem ('LIPRICOL', 0);        {'Primeira coluna a imprimir (geralmente 8): '}
    sintreadInt (primCol);
    mensagem ('LIULTCOL', 0);        {'Última coluna a imprimir (geralmente 72):  '}
    sintreadInt (ultCol);

    mensagem ('LIGUARDA', 0);        {'Guardo esses valores como novos padrões ? '}
    c := sintReadKey;
    writeln (c);
    if upcase(c) = 'S' then
        begin
            guardaParam ('ColunasPapel', colunasPapel);
            guardaParam ('LinhasPapel', LinhasPapel);
            guardaParam ('PrimeiraLinha', primLinha);
            guardaParam ('UltimaLinha', ultLinha);
            guardaParam ('PrimeiraColuna', primCol);
            guardaParam ('UltimaColuna', ultCol);
        end;
end;

{--------------------------------------------------------------}
{    substitui a impressora padrão por outra existente
{--------------------------------------------------------------}

function modifImpressoraPadrao: boolean;

var
   imp: array [1..30] of pchar;
   nImp: integer;
   returnString: array [0..2000] of char;
   paramImp, padrao: array [0..200] of char;
   i, n, l: integer;
   s :string;

begin
  modifImpressoraPadrao := false;

  GetProfileString('Devices', nil, '', returnString, 2000);

  nImp := 0;
  i := 0;
  while returnString[i] <> #0 do
      begin
          nImp := nImp + 1;
          imp[nimp] := @returnString[i];
          while returnString[i] <> #0 do
              i := i + 1;
          i := i + 1;
      end;

  if nImp = 0 then
      begin
          mensagem ('LISEMIMP', 1);    {'Não existe impressora instalada'}
          exit;
      end;

  mensagem ('LIIMEX',1);  {  As impressoras existentes são: }

  for n := 1 to nImp do
      begin
          str (n, s);
          sintWriteln (s + ' ' + strPas (imp[n]));
      end;

  mensagem ('LIQUDEPA',0);   { Qual impressora você desejá tornar padrão ? }
  l := 0;
  SintReadInt (l);
  if l = 0 then
      mensagem ('LIMAIMAT',1)    { Mantida impressora atual }
  else
      begin
          if (l < 1) or (l > nImp) then l := 1;

          GetProfileString('Devices', imp[l], '', paramImp, 200);
          strcopy (padrao, imp[l]);
          strcat (padrao, ',');
          strcat (padrao, paramImp);
          writeProfileString ('windows', 'device', padrao);

          mensagem ('LIIMPAAL',1);  { impressora padrão alterada }
      end;

  modifImpressoraPadrao := true;
end;


{--------------------------------------------------------}
{            pega parametros para a impressao
{--------------------------------------------------------}

function pegaParametros: boolean;
var c, c2: char;
begin
    pegaParametros := true;
    pegaParamDefault;

    textBackground (RED);
    mensagem ('LIPADRAO', 0);               {'Posso usar a configuração habitual ? '}
    textBackground (BLACK); clreol;
    c := sintReadKey;
    writeln (c);

    if c = #$1b then
        begin
            writeln;
            pegaParametros := false;
            exit;
        end;

    if upcase(c) = 'N' then
        begin
            writeln;
            mensagem ('LINUMERA', 0);        {'Deseja numeração de páginas ? '}
            c := sintReadKey;
            writeln (c);
            if c <> ENTER then
                numerando := upcase (c) = 'S';

            mensagem ('LINCOP', 0);          {'Quantas cópias ? '}
            sintReadInt (ncopias);
            mensagem ('LIPAGINI', 0);        {'Página inicial a imprimir (assumo 1) ? '}
            sintreadint (pagInicial);
            mensagem ('LIPAGFIN', 0);        {'Página final a imprimir (assumo 9999) ? '}
            sintreadint (pagFinal);
            if numerando then
                begin
                    mensagem ('LINUMINI', 0);        {'Número a imprimir na página inicial (assumo 1) ? '}
                    sintreadint (numInicial);
                end;

            writeln;
            mensagem ('LITRIMPA',0);         {'Deseja trocar impressora padrão do DOSVOX ?}
            c := sintReadKey;
            writeln (c);
            if upcase (c) = 'S' then
                if not modifImpressoraPadrao then
                    begin
                        pegaParametros := false;
                        exit;
                    end;

            writeln;
            mensagem ('LIMUDPAD', 0);        {'Deseja configurar padrões físicos de impressão ? }
            c := sintReadKey;
            writeln (c);
            if upcase (c) = 'S' then
                configFisica;

            writeln;
            mensagem ('LIPOSIMP', 0);        {'Posso imprimir agora ? '}
            c := sintReadKey;
            writeln(c);
            if upcase (c) = 'N' then pegaParametros := false;
        end;
end;

end.