unit dosutil;
interface
uses winprocs, wintypes, windos, dvcrt, strings, dvwin, dosproc,
     dosgeral, dosmsg;

procedure chamaUtilitarios (tipo: char);

implementation

{--------------------------------------------------------}
{            extrai um parâmetro de uma cadeia
{--------------------------------------------------------}

function extraiParam (s: string; qual: integer): string;
var i, p: integer;
begin
    if qual > 1 then                              { remove os primeiros parâmetros }
        for i := 2 to qual do
            begin
                p := pos (',', s);
                delete (s, 1, p);
            end;

    p := pos (',', s);                            { pega até virgula }
    if qual = 4 then p := 0;                      { no ultimo parametro vale até o fim }
    if p = 0 then p := length (s) + 1;
    s := copy (s, 1, p-1);

    while (s <> '') and (s[1] = ' ') do           { remove brancos no início e fim }
        delete (s, 1, 1);
    while (s <> '') and (s[length (s)] = ' ') do
        delete (s, length (s), 1);

    extraiParam := s;
end;

{--------------------------------------------------------}
{                 ajuda dos utilitarios
{--------------------------------------------------------}

procedure ajudaUtil (secao: pchar; prefixo: string);

var arqNomes: text;
    s, result: string;
    i, n: integer;
    returnString: array [0..80] of char;
    abrev: string [1];
    nomeSom: string [8];
    texto: string[80];

begin
    for i := 1 to 50 do
        begin
            str (i, s);
            s := prefixo + s + #$0;
            n := GetPrivateProfileString(secao, @s[1],
                    '', @returnString, 80, 'DOSVOX.INI');
            if n <> 0 then
                begin
                    s := strPas(returnString);
                    abrev   := extraiParam (s, 1);
                    nomeSom := extraiParam (s, 3);
                    texto   := extraiParam (s, 4);

                    writeln ('  ', abrev, ' - ', texto);
                    sintCarac (abrev[1]);
                    if nomeSom[1] = '-' then
                        sintetiza (texto)
                    else
                        sintSom (nomeSom);
                    while sintFalando do;
                    delay (200);
                end;
        end;

    repeat until not sintFalando;
end;

{--------------------------------------------------------}
{                  opcao de chamada do DOS
{--------------------------------------------------------}

procedure chamaUtilitarios (tipo: char);
var
    nomeArq, nomeDir, param, s, comando: string;
    arqNomes: text;
    c, c2: char;
    retorno: word;
    secao: string;
    prefixo: string;
    i, n: integer;
    returnString: array [0..80] of char;

label inicio, achou;

begin

inicio:
    textBackground (RED);

    case tipo of
        'U':  begin
                        secao := 'PROGUTIL' + #$0;
                        prefixo:= 'Util';
                        mensagem (DVTECPGM, 0);
              end;
        'J':  begin
                        secao := 'PROGJOGOS' + #$0;
                        prefixo:= 'Jogo';
                        mensagem (DVTECJOG, 0);
              end;
        'R':  begin
                        secao := 'PROGREDE' + #$0;
                        prefixo:= 'Rede';
                        mensagem (DVTECRED, 0);
              end;
        'M':  begin
                        secao := 'PROGMULTI' + #$0;
                        prefixo:= 'Multi';
                        mensagem (DVTECMUL, 0);
              end;
    end;
    textBackground (BLACK); clreol;

    c := sintReadkey;
    writeln;
    if c = #$0 then
        begin
            c2 := readkey;
            if c2 = F1 then ajudaUtil (@secao[1], prefixo);
            goto inicio;
        end;

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

    c := upcase (c);
    for i := 1 to 50 do
        begin
            str (i, s);
            s := prefixo + s + #$0;
            n := GetPrivateProfileString(@secao[1], @s[1],
                    '', @returnString, 80, 'DOSVOX.INI');
            if n <> 0 then
                begin
                    s := strPas(returnString);
                    if upcase(s[1]) = c then
                        goto achou;
                end;
        end;

    mensagem (DVUTLNAO, 1);
    mensagem (DVESCF1, 1);
    goto inicio;

achou:
    comando := extraiParam (s, 2);
    getdir (0, nomeDir);
    i := pos (' ', comando);
    if i = 0 then
        param := ''
    else
        begin
            param := copy (comando, i+1, 999);
            delete (comando, i, 999);
        end;

    while sintFalando do;
    if executaProg (comando, nomeDir, param, SW_SHOWNORMAL) then
        esperaProgVoltar;
end;

end.
