Curso de Clipper

Comandos Básicos


   Conteúdo:

                O que é Clipper?
                Escrevendo o arquivo fonte do programa
                Compilando e Linkeditando o programa
                Executando o programa
                Entrada de dados
                Estrutura de controle de repetição e condição
                Criando um menu de opções
                Criando arquivo de dados
                Gravando em arquivo de dados
                Pesquisando registros no arquivo de dados
                Alterando registros no arquivo de dados
                Excluindo registros no arquivo de dados
                Criando relatórios
                Chamando arquivo fonte externo
                Funções e símbolos usados com picture
                Tabela de cores e atributos
                Operadores
                Nomes de campos e variáveis de memória
                Opções de compilação
                Opções de linkedição
                Comandos e funções usadas neste curso


   O que é Clipper?

                Clipper é uma moderna e eficiente linguagem de programação, baseada na linguagem xBASE, permite o encadeamento ordenado e lógico de seus comandos possibilitando rapidamente a definição de programas com alto grau de complexidade e sofisticação.  Ao longo dos anos, a linguagem Clipper, tornou-se tão popular a ponto de fazer do Brasil a sua maior base instalada. Ao lado do Cobol, Clipper é uma das linguagens mais difundidas e estudadas em todos os tempos.
                Inúmeras empresas começaram sua informatização utilizando programas escritos em
Clipper, criando um mercado de trabalho muito promissor para os profissionais e desenvolvedores de aplicativos. Os sistemas escritos em Clipper são fáceis de desenvolver e manter, e ainda são largamente utilizados seja por empresas ou pelos desenvolvedores de aplicativos.

   Voltar


    Escrevendo o arquivo fonte do programa

                Inicialmente iremos criar um arquivo onde colocaremos os comandos do Clipper para que mais tarde seja compilado e linkeditado.  Este arquivo que armazena esses comandos é chamado de arquivo fonte.   Para escrever o arquivo teremos que usar um editor de textos, nós usaremos o EDIT do DOS, por ser um editor simples e fácil de usar.  Teremos que definir um nome para o arquivo fonte, este nome pode ter até 8 caracteres e obrigatoriamente a extensão .PRG.   Para o nome do arquivo serão aceitos somente letras, números e "_".  Deve começar com letra e não pode conter espaço em branco.
                O Clipper por ser uma linguagem feita para DOS, teremos que trabalhar no prompt do MS-DOS, para isto você deve selecionar o botão Iniciar, Programas e depois Prompt do MS-DOS.
                Vamos criar uma pasta onde iremos gravar os arquivos que serão criados, para isto digite os seguintes comandos:

                CD\   <Enter>
                MD AGENDA  <Enter>
                CD\AGENDA  <Enter>

                Agora vamos criar o arquivo fonte do nosso programa, digite:

                EDIT exerc1.prg  <Enter>

                O editor é aberto.  Como primeiro exemplo vamos fazer duas telas com molduras no vídeo, digite os comandos abaixo:

                CLEAR
                BORDA = CHR(218) + CHR(196) + CHR(191) + CHR(179) + ;
                CHR(217) + CHR(196) + CHR(192) + CHR(179) + CHR(176)
   
             @  1,1,24,79  BOX  BORDA
                @  4,4 CLEAR TO 21,76
               
@  4,4 TO 21,76  DOUBLE
                INKEY(0)
                CLEAR
                RETURN

                Agora temos que gravar (Salvar) o arquivo, pressione as teclas ALT+A, selecione a opção SALVAR e tecle Enter.  Pronto já está salvo o arquivo, podemos sair do EDIT, pressione ALT+A novamente e selecione a opção SAIR.

                Comandos utilizados:
                Na sintaxe dos comandos descritos abaixo usaremos a seguinte notação sintática:

                [   ] - Indica as partes opcionais de um comando
                < > - Indica as partes obrigatórias de um comando

                CLEAR 
                Apaga a tela e coloca o cursor na posiçao inicial (linha 0 e coluna 0)
                CLS é o mesmo que CLEAR.

                @  1,1,24,79  BOX  BORDA
                Desenha uma caixa na tela, da linha 1 coluna 1 até a linha 24 coluna 79.

                Sintaxe

                @ <nLinTopo>, <nColTopo>, <nLinBase>, <nColBase> BOX <cStringCaixa>

                Argumentos

                <nLinTopo>, <nColTopo>, <nLinBase>, e <nColBase> definem as coordenadas da caixa. @...BOX desenha uma caixa usando valores de linha de 0 até 24, e coluna de 0 até 79. <cStringCaixa> é um string de oito caracteres de borda e um de preenchimento.

                @  4,4 CLEAR TO 21,76
                Limpa uma regiao retangular da tela, da linha 4 coluna 4 até a linha 21 coluna 76.

                Sintaxe

                @ <nLinTopo>, <nColTopo> [CLEAR [TO <nLinBase>, <nColBase>]]

                Argumentos

                <nLinTopo> e <nColTopo> define as coordenadas do canto superior esquerdo.  <nLinBase> e <nColBase> define as coordenadas do canto inferior direito a ser limpo.

                @  4,4 TO 21,76  DOUBLE
                Desenha uma caixa em linha dupla, da linha 4 coluna 4 até a linha 21 coluna 76.

                Sintaxe

                @ <nLinTopo>, <nColTopo> TO <nLinBase>, <nColBase> [DOUBLE]

                Argumentos

                <nLinTopo>, <nColTopo>, <nLinBase>, e <nColBase> definem as coordenadas da caixa.
                DOUBLE desenha a caixa em linha dupla. Se não for especificado, a caixa é desenhada em linha simples.

                INKEY(0)
                Espera uma tecla ser pressionada.

                Sintaxe

                INKEY([<nSegundos>]) --> nCodInkey

                Argumentos

                <nSegundos> especifica a quantidade de segundos que INKEY() deve esperar por uma tecla. O valor pode ser especificado em incrementos do tamanho de até um décimo de segundo. Se for especificado zero, o programa pára até que uma tecla seja pressionada.

                Retorno

                INKEY() retorna um valor numérico inteiro de -39 até 386, que identifica a tecla pressionada.  Caso não seja pressionada tecla nenhuma, INKEY() retorna zero.

                RETURN
                Encerra o programa, função ou procedure.

   Voltar


    Compilando e Linkeditando o programa

                Agora que já criamos o arquivo fonte temos que compilar o arquivo, este processo vai criar um outro arquivo com o mesmo nome do arquivo fonte, só que com a extensão .OBJ.  Este nós chamamos de arquivo objeto.   Quando compilamos um arquivo (.prg) o compilador verifica se não há erros no arquivo, se for encontrado algum erro, o compilador apresenta o nome do arquivo e entre parênteses a linha do arquivo onde está o erro, para que possamos corrigir a linha de comando.

                Comando para compilar o arquivo fonte:

                CLIPPER <nomedoarquivo>

                Exemplo:   CLIPPER exerc1  <Enter>

                Vamos agora criar o arquivo executável, digite o comando abaixo:

                RTLINK FI <nomedoarquivo>

                Exemplo:   RTLINK FI exerc1  <Enter>

                O linkeditor vai criar um outro arquivo, agora com a extensão .EXE (executável).

   Voltar


    Executando o programa

                Vamos agora executar o programa, para isto devemos digitar o nome do arquivo executável, que acabamos de criar, na linha de comando do DOS.

                Exemplo: EXERC1  <Enter>

                Observe que vai ser apresentado duas caixas com molduras no vídeo e se for pressionada alguma tecla o programa é finalizado.

   Voltar


    Entrada de dados

                Para que possamos entrar com dados em um programa teremos que armazenar informações em memória através de constantes que chamamos de variáveis.    Os conceitos de variável no Clipper e na matemática coincidem.   No Clipper existem basicamente quatro tipos de variáveis:

                a) variáveis numéricas;
                b) variáveis alfanumérica (string);
                c) variáveis lógicas;
                d) variáveis data

                A variável numérica corresponde a números com até dezenove dígitos, contando pontos e vírgula.
                A variável alfanumérica, ou string, corresponde às cadeias de caracteres, incluindo letras, números, caracteres especiais e espaços (até 64 Kbytes).
                A variável lógica representa um dos dois estados lógicos possíveis:  .T. (verdadeiro) ou .F. (falso).
                A variável data é usada para armazenar datas.

                O nome da variável de memória pode ter até 10 caracteres.  Somente letras, números e "_" são permitidos.  Deve começar com letra e não pode conter espaços em branco.

                Para criarmos nossas variáveis iremos usar o operador de atribuição simples "=", da seguinte forma:

                <nomedavariavel> = <valordavariavel>

                Exemplo:
                                    nValor = 0.00
                                    cNome = SPACE(40)
                                    cEmp = "PC TOLEDO SOFTWARE"
                                    lCond = .T.
                                    dNascto = CTOD("  ")

                Observe que o valor atribuído a uma variável de memória defini o tipo de variável que foi criada.  Se for atribuído um número a variável será numérica, se for espaços em branco (SPACE(40)) ou uma cadeia de caracteres entre aspas a variável será alfanumérica, se for .T. ou .F. a variável será lógica e se for uma data em branco (CTOD(" ")) a variável será data.   As variáveis alfanuméricas ou strings devem ser escritas entre aspas ou apóstrofos e as variáveis lógicas devem ser escritas entre pontos.
                Podemos também criar uma variável a partir de uma outra variável já existente, observe o exemplo abaixo:

                nValor = 10
                nTotal = nValor * 2

                cNome = "PAULO CESAR "
                cNomei = cNome + "TOLEDO"

                No primeiro exemplo foi criada uma variável numérica com o valor 10, depois foi criada uma outra variável (também numérica) onde vai ter o seu valor 20, que é o resultado de 10 multiplicado por 2.
                No segundo exemplo foi criada uma variável alfanumérica com o conteúdo "PAULO CESAR", depois foi criada uma outra com o conteúdo "PAULO CESAR TOLEDO", que a concatenação da primeira variável com a expressão "TOLEDO".   A operação entre variáveis só pode ser  feita com variáveis do mesmo tipo, se forem de tipos diferentes ocorrerá um erro durante a execução do programa.

                Agora que já sabemos criar variáveis vamos montar uma tela para digitação de entrada de dados, entre no EDIT e crie um arquivo com o nome de Exerc2.prg e digite os comandos abaixo.

                CLEAR
                SET DATE BRITISH
                SET CENTURY ON
                SET CONFIRM ON
                nCodigo = 0
   
             cNome = SPACE(40)
                cEnd = SPACE(40)
                dAniver = CTOD("  ")
                cFone = SPACE(10)
                cEmail = SPACE(30)
                BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ;
                CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176)
   
             @  1,1,24,79  BOX  BORDA
                @  4,4 CLEAR TO 21,76
                @  4,4 TO 21,76  DOUBLE
                @  6,30 SAY "AGENDA DE ENDEREÇOS"
                @  8,8 SAY "Código...........:" GET nCodigo PICTURE "999" VALID (nCodigo>0)
                @  9,8 SAY "Nome..............:" GET cNome PICTURE "@!" VALID (!EMPTY(cNome))
                @ 10,8 SAY "Endereço........:" GET cEnd PICTURE "@!"
                @ 11,8 SAY "Aniversário.....:" GET dAniver PICTURE "@D"
                @ 12,8 SAY "Telefone..........:" GET cFone PICTURE "@R (999)999-9999"
                @ 13,8 SAY "E-mail..............:" GET cEmail
                READ
                CLEAR
                RETURN

                Após gravar o arquivo compile para ver se não há erros, linkedite para criar o arquivo executável e depois execute o programa e digite as informações solicitadas.

                Comandos utilizados:
                Apenas os novos comandos serão descritos.

                SET DATE BRITISH
                Configura o formato de datas para entrada de dados e exibição em tela, o formato BRITISH é o usado em nosso país (DIA/MES/ANO).

                SET CENTURY ON
                Controla a exibição dos dígitos de século em datas, preparando seu programa para o próximo milênio.

                Argumentos

                ON permite a entrada e exibição dos dígitos de século para datas.

                OFF suprime a entrada e exibição dos dígitos de século para datas.

                SET CONFIRM ON
                Comuta a tecla de saída necessária para a terminação de GETs.

                Argumentos

                ON obrigará o usuário a pressionar uma das teclas de saída para abandonar um GET.

                OFF permite ao usuário abandonar um GET com a própria digitação de caracteres, tendo o GET que ser todo preenchido, não havendo a necessidade de ser pressionada uma das teclas de saída.

                SET CONFIRM determina se uma das teclas de saída será exigida para abandonar um GET. Se o CONFIRM está OFF, o usuário pode digitar quaisquer caracteres até o fim do GET que o cursor se moverá
automaticamente para o próximo GET se houver um. Caso não haja um outro GET, o READ é terminado. Se, contudo, o CONFIRM estiver ON, uma das teclas de saída deve ser pressionada para abandonar o GET corrente.  As teclas de saída mais usadas são: Enter, Seta para cima, Seta para baixo e ESC.

                CTOD("  ")
   
             Converte uma cadeia de caracteres em uma data correspondente

                Sintaxe

                CTOD(<cData>)

                Argumentos

                <cData> é uma cadeia de caracteres que contém números representando o mês, dia, e ano separados por qualquer outro caractere que não um número. Os dígitos do mês, dia, e ano devem ser especificados de acordo com o formato indicado pelo SET DATE.  Para inicializar uma data vazia para uma
entrada de dados, especifique a <cData> como sendo uma cadeia de caracteres nula (" ").

                SPACE(...)
   
             Retorna um string de espaços.

                Sintaxe

                SPACE(<nCont>)

                Argumentos

                <nCont> é a quantidade de espaços a serem retornados, sendo que o número máximo é 65.535 (64K).

                @...SAY
                Exibe dados em uma linha e coluna especificadas.

                Sintaxe

                @ <nLin>, <nCol> [SAY <exp> [PICTURE <cSayPicture>]]

                Argumentos

                <nLin> e <nCol> sao as coordenadas de linha e coluna da saída. Os valores de linha podem variar entre zero e 24, de coluna entre zero a 79 (coordenadas de vídeo).

                SAY <exp> exibe o resultado de uma expressão de qualquer tipo.

                PICTURE <cSayPicture> define a máscara para a saída de exp.

                @...SAY é um comando de tela que exibe os resultados de <exp> para tela ou impressora nas coordenadas de linha e coluna especificadas. Ele pode opcionalmente formatar a saída usando a cláusula PICTURE. @...SAY é usado para criar telas de entrada de dados ou relatórios.

                @...SAY...GET
                Cria um novo objeto GET e o coloca em exibiçao na tela.

                Sintaxe

                @ <nLin>, <nCol> [SAY <exp> GET <idVar> [PICTURE <cGetPicture>] [VALID <lPosCondiçao>]

                Argumentos

                <nLin> e <nCol> são as coordenadas de linha e coluna para a operação. Se a claúsula SAY está presente, especificam as coordenadas para o SAY, e o GET é exibido a direita deste. Caso a saída esteja
além da extensão visível ela não aparecerá.

                SAY exibe o valor de <exp> nas coordenadas especificadas.

                GET <idVar> define o nome da variável de qualquer tipo de dados a ser editada. Ela pode ser caractere, data, numérica ou lógica.

                PICTURE <cGetPicture> especifica uma máscara para exibição e as regras para edição do GET. No exemplo acima está sendo usado: "999" que é para números, "@D" que é para datas, "@R(999)999-9999" que é para telefones e "@!" para caracteres em maiúsculos. 

                VALID <lPosCondiçao> especifica uma expressão que deve ser satisfeita antes que o cursor possa deixar a região de edição do GET corrente.  Se <lPosCondiçao> retorna falso (.F.), o controle retorna ao GET e o usuário não pode deixá-lo até que <lPosCondiçao> retorne verdadeiro (.T.) ou o usuário aperte Esc.  No exemplo acima está sendo usado: !EMPTY(...) que vai retornar verdadeiro (.T.) somente se o campo estiver preenchido, se estiver vazio retorna falso (.F.).

                EMPTY(...)

                Determina se o resultado de uma expressão é vazio.

                Sintaxe

                EMPTY(<exp>)

                Argumentos

                <exp> é uma expressão de qualquer tipo de dados.

                EMPTY() retorna verdadeiro (.T.) se a expressão resultar em um valor vazio; do contrário, ela retorna falso (.F.).  No exemplo acima foi utilizado antes da função EMPTY o operador ! que retorna o inverso lógico, isto é, se a função EMPTY retornar verdadeiro (.T.) é alterado para o inverso falso (.F.) e vice-versa.

                READ
   
             Ativa edição em tela usando objetos GET, este comando vem sempre depois do último comando @...SAY...GET.

    Voltar


    Estrutura de controle de repetição e condição

                Normalmente, a execução de um arquivo de comandos (programa) realiza-se de uma linha para a outra imediatamente seguinte.  Os comandos de controle são utilizados para alterar tal seqüência ou fazer com que a execução de determinados números de linhas de programa seja repetida certo número de vezes.
                Todos os comandos de controle para poder funcionar necessitam de uma condição, dependendo do valor retornado pela condição o comando de controle desvia a execução do programa para uma determinada linha de comando.

                Entre no EDIT e crie um arquivo com o nome de Exerc3.prg e digite os comandos abaixo.

                CLEAR
                SET DATE BRITISH
                SET CENTURY ON
                SET CONFIRM ON
                BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ;
                CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176)
   
             @  1,1,24,79  BOX  BORDA
                DO WHILE .T.
                   nCodigo = 0
   
                cNome = SPACE(40)
                   cEnd = SPACE(40)
                   dAniver = CTOD("  ")
                   cFone = SPACE(10)
                   cEmail = SPACE(30)
                   cFim = "S"
                   @  4,4 CLEAR TO 21,76
                   @  4,4 TO 21,76  DOUBLE
                   @  6,30 SAY "AGENDA DE ENDEREÇOS"
                   @  8,8 SAY "Código...........:" GET nCodigo PICTURE "999" VALID (nCodigo>0)
                   @  9,8 SAY "Nome..............:" GET cNome PICTURE "@!" VALID (!EMPTY(cNome))
                   @ 10,8 SAY "Endereço........:" GET cEnd PICTURE "@!"
                   @ 11,8 SAY "Aniversário.....:" GET dAniver PICTURE "@D"
                   @ 12,8 SAY "Telefone..........:" GET cFone PICTURE "@R (999)999-9999"
                   @ 13,8 SAY "E-mail..............:" GET cEmail
                   @ 15,8 SAY "Deseja Continuar?...:" GET cFim PICTURE "@!" VALID (cFim $ "SN")
                   READ
                   IF cFim = "N"
                      EXIT
                   ELSE
                      LOOP
                   ENDIF
                ENDDO
                CLEAR
                RETURN

               Após gravar o arquivo compile para ver se não há erros, linkedite para criar o arquivo executável e depois execute o programa e observe como o programa vai trabalhar conforme as condições.

                Comandos utilizados:
                Apenas os novos comandos serão descritos.

                DO WHILE
   
             Executa um bloco enquanto uma condição é verdadeira.

                Sintaxe

                DO WHILE <lCondição>
                    <declarações>...
                    [EXIT]
                    <declarações>...
                    [LOOP]
                    <declarações>...
                END[DO]

                Argumentos

                <lCondiç
ão> é a expressão lógica de controle do DO WHILE, se esta condição for verdadeira (.T.) os comandos dentro do DO WHILE é executados, caso contrário falso (.F.), a instrução é desviada para a linha imediatamente seguinte ao ENDDO.

                EXIT incondicionalmente desvia o controle de dentro de um DO WHILE para a instrução imediatamente seguinte ao ENDDO.  EXIT é usado geralmente para encerrar o DO WHILE.

                LOOP desvia o controle para o início do DO WHILE mais recente.

                DO WHILE...ENDDO é uma estrutura de controle que executa um bloco repetitivamente, enquanto <lCondição> for avaliada como verdadeira (.T.). Quando a condição é avaliada como verdadeira (.T.), o controle passa para dentro da estrutura e assim continua até que um EXIT, LOOP, ou ENDDO seja encontrado. ENDDO retorna o controle para o início do DO WHILE e o processo se repete. Se um EXIT for encontrado, o DO WHILE é encerrado. Se um LOOP for encontrado, controle desvia para o mais recente DO WHILE. Se a condição é avaliada como falsa (.F.), a estrutura DO WHILE termina e o controle passa para a instrução imediatamente seguinte ao ENDDO.

                IF...ELSE...ENDIF
   
             Executa um dentre vários blocos de instruções.

                Sintaxe

                IF <lCondição1>
                    <instruções>...
                [ELSEIF <lCondição2>]
                    <instruções>...
                [ELSE]
                    <instruções>...
                END[IF]

                Argumentos

                <lCondição> é uma expressão lógica de controle. Se ela é avaliada como verdadeira (.T.), o bloco seguinte é executado até que um ELSEIF, ELSE ou ENDIF seja encontrado.

                ELSEIF identifica um bloco a ser executado caso <lCondição> seja avaliada como verdadeira (.T.) e todas as condições IF e ELSEIF anteriores foram avaliadas como falsas (.F.). Qualquer número de ELSEIFs pode ser especificado dentro de uma estrutura IF...ENDIF.

                ELSE identifica o bloco a ser executado se todos os IF e ELSEIF preliminares foram avaliados como falso (.F.).

                No exemplo se você digitar "N" no campo "Deseja Continuar?" o EXIT é executado saindo da estrutura DO WHILE e encerrando o programa, mas se digitar "S" o programa é retornado ao começo do DO WHILE. 

                $
   
             O operador $ é um operador relacional binário que executa uma busca sensível a maiúscula e minúscula e retorna verdadeiro (.T.) se um caractere ou uma cadeia de caracteres for encontrado dentro de uma outra cadeia de caracteres.

                No exemplo o operador $ está sendo usado dentro do VALID de um GET, para verificar se vai ser pressionado somente as teclas "S" e "N", qualquer outra tecla será validado como falso (.F.) e não sendo aceito pelo GET.   Tente digitar outras letras para ver o que acontece.

   Voltar


    Criando um menu de opções

                Na maiorias dos programas as operações são escolhidas através de um menu que tem várias opções.  O usuário vai selecionar dentre as opções a que ele quer executar.   O Clipper dispõe também deste recurso, que veremos a seguir.

                Entre no EDIT e crie um arquivo com o nome de Exerc4.prg e digite os comandos abaixo.

                CLEAR
                SET MESSAGE TO 21 CENTER
                SET WRAP ON
                BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ;
                CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176)
   
             @  1,1,24,79  BOX  BORDA
                @  20,29 TO 22,50
                @  15,25 TO 17,54
                @  16,27 SAY "Você Escolheu ->"
                nOp = 1
                DO WHILE .T.
                   @  5,33 TO 11,45
                   @ 06,34 PROMPT " INCLUSÃO     " MESSAGE " INCLUSÃO DE DADOS     "
                   @ 07,34 PROMPT " ALTERAÇÃO " MESSAGE " ALTERAÇÃO DE DADOS "
                   @ 08,34 PROMPT " CONSULTA    " MESSAGE " CONSULTA DE DADOS   "
                   @ 09,34 PROMPT " EXCLUSÃO   " MESSAGE " EXCLUSÃO DE DADOS   "
                   @ 10,34 PROMPT " FINALIZA        " MESSAGE " SAIR DO PROGRAMA       "
                   MENU TO nOp
                   DO CASE
                      CASE nOp = 1
                         @ 16,44 SAY "INCLUSÃO"
                      CASE nOp = 2
                         @ 16,44 SAY "ALTERAÇÃO"
                      CASE nOp = 3
                         @ 16,44 SAY "CONSULTA"
                      CASE nOp = 4
                         @ 16,44 SAY "EXCLUSÃO"
                      CASE nOp = 5
                         @ 16,44 SAY "FINALIZA"
                         INKEY(0)
                         EXIT
                   ENDCASE
                ENDDO
                CLEAR
                RETURN

               Grave o arquivo, compile para ver se não há erros, linkedite para criar o arquivo executável e depois execute o programa.   Através das setas cursoras (para cima e para baixo) você navega entre as opções, observe que a mensagem correspondente a opção é apresentada em um quadro logo abaixo do menu.  Se você selecionar com o Enter uma das opções o programa vai mostrar qual foi a opção escolhida.

                Comandos utilizados:
                Apenas os novos comandos serão descritos.

                SET MESSAGE TO 21 CENTER
   
             Configura a linha onde vai aparecer a mensagem de @...PROMPT

                Sintaxe

                SET MESSAGE TO <nLin> [CENTER]

                Argumentos

                <nLin> especifica a linha de mensagem.

                CENTER centraliza a mensagem na linha especificada.

                SET WRAP ON
   
             Comuta rotação em Menus.

                Sintaxe

                SET WRAP ON | OFF

                Argumentos

                ON permite à barra luminosa rotacionar quando estiver navegando em um menu de barra.

                OFF suprime a rotação num menu de barra.

                SET WRAP comuta a rotação da barra luminosa em um @...PROMPT do primeiro para o último item e vice-versa. Quando WRAP está ON e o último item está iluminado, Cursor para direita ou Cursor para baixo movem a barra luminosa para o primeiro item. Também quando o primeiro item de menu está iluminado, Cursor para esquerda ou Cursor para cima movem a barra para o último item.
                Quando WRAP está OFF, pressionar Cursor para cima ou Cursor para esquerda no primeiro item ou Cursor para baixo ou Cursor para direita no último item, não causam nenhuma ação.

                @...PROMPT
   
             Exibe um item de menu e define uma mensagem.

                Sintaxe

                @ <nLin>, <nCol> PROMPT <cItemMenu> [MESSAGE <cItemMensagem>]

                Argumentos

                <nLin> e <nCol> são as coordenadas de linha e coluna para exibir o item de menu. Valores de linha estão na faixa de zero até 24 e de coluna de zero até 79.

                <cItemMenu> é o string com o item de menu a ser exibido.

                <cItemMenssagem> define a mensagem a ser exibida cada vez que o item corrente é iluminado.

                @...PROMPT é a porção exibidora de sistema de menu de barra luminosa do Clipper. Cada @...PROMPT exibe um item de menu e define uma mensagem associada a ser exibida na linha definida em SET MESSAGE. O menu de barra luminosa é invocado com MENU TO. Os itens de menu podem ser
exibidos na tela em qualquer ordem e configuração de linha e coluna.  MENU TO, entretanto, navega na lista de itens de menu corrente na ordem em que estes foram definidos.

                MENU TO
   
             Executa um menu de barra luminosa para PROMPTs definidos.

                Sintaxe

                MENU TO <idVar>

                Argumentos

                <idVar> é o nome da variável à qual será atribuída o resultado da seleção de menu. Esta variável tem que ser criada previamente, o seu valor inicial vai determinar o primeiro PROMPT sobre o qual ficará a barra luminosa.

                O comando MENU TO é o mecanismo de seleção para o sistema de menus de barra luminosa do Clipper. Antes de chamar o comando MENU TO, defina primeiro os PROMPTS do menu e mensagens associadas com uma série de comandos @...PROMPT. Depois, ative o menu com MENU TO <idVar>.

                DO CASE
   
             Executa um de vários blocos de declarações.

                Sintaxe

                DO CASE
                    CASE <lCondiçao1>
                       <declarações>...
                    [CASE <lCondiçao2>]
                       <declarações>...
                    [OTHERWISE]
                      <declarações>...
                END[CASE]

                Argumentos

                CASE <lCondição> define um bloco de declarações para executar caso <lCondição> é avaliada como verdadeira (.T.).

                OTHERWISE define um bloco de declarações para executar caso nenhum dos CASE seja verdadeiro (.T.).

                DO CASE...ENDCASE é uma estrutura de controle que executa um de vários blocos de declarações dependendo de qual das condições associadas seja verdadeira (.T.). Ele trabalha desviando a execução para as declarações seguintes ao primeiro CASE <lCondição> que for verdadeiro (.T.). Execução continua até que o próximo CASE, OTHERWISE ou ENDCASE seja encontrado. Controle então é desviado para a primeira instrução seguinte ao ENDCASE.
                Se nenhuma das condições CASE for avaliada como verdadeira (.T.), as declarações seguintes ao OTHERWISE são executadas até que seja encontrado o ENDCASE. Caso não seja especificado um OTHERWISE, o controle desvia para a instrução em seguida ao ENDCASE.

   Voltar


    Criando arquivo de dados

                Junto com o Clipper vem um programa chamado DBU que serve para criar a estrutura de um arquivo de dados.   Para executar o DBU basta digitar DBU e pressionar a tecla enter.  Surgirá uma tela com um menu de barras na sua parte superior.  As opções do menu podem ser acionadas através do pressionamento da tecla de função correspondente.  Nesse instante, surgirá um submenu com várias opções.  Através das setas para cima e para baixo você seleciona uma das subopções e teclando Enter para ativá-la.

                Teclas utilizadas no DBU:

                F1 - Help: Aciona uma tela de Help sensitiva ao contexto.
                F2 - Open: Permite a abertura de um arquivo de dados, índice ou view.
                F3 - Create: Permite a criação de arquivos de dados e índices.
                F4 - Save: Grava a estrutura atual.
                F5 - Browse: Permite a visualização dos registros do arquivo de dados.
                F6 - Utility: Menu de comandos Utilitários.
                F7 - Move: Permite a movimentação pelos registros do arquivo.
                F8 - Set: Permite o estabelecimento de filtros, relações e campos.

                Para criar um arquivo de dados você deve pressionar a tecla F3 e selecionar a opção DATABASE.  Depois você terá que informar a estrutura do arquivo que será criado, você deve informar:

                Field Name - Nome do campo. Somente letras, números e "_" são permitidos. Deve começar com letra e não pode conter espaço em branco.

                Type - Tipo de campo.  (C)aractere, (D)ata, (L)ógico, (M)emo ou (N)úmero.

                Width - Tamanho do campo. Data (8), Caractere (até 64kb), Lógico (1), Memo (até 64kb) e Número (19)

                Dec - Casas decimais. Somente para tipo número.

                Após informar todos os dados de um campo, a seta para baixo abre mais uma linha de digitação.

                O arquivo que iremos criar tem a seguinte estrutura:

                Field Name        Type           Width        Dec

                CODIGO               N                3                0
                NOME                   C                40
                ENDERECO        C                40
                ANIVER                 D                8
                FONE                    C                10
                EMAIL                    C                30

                Após digitar toda a estrutura, você deve pressionar a tecla F4 e selecionar a opção STRUCT para gravá-la.  Depois informe o nome do arquivo: AGENDA   Pressione a tecla Enter duas vezes.

                Pronto, você criou um arquivo de dados que futuramente irá armazenar os dados digitados em nosso programa.

   Voltar


    Gravando em arquivo de dados

                Todas as informações armazenadas em variáveis de memória são perdidas assim que você sair do programa ou da rotina que as criou.  Para não perder estas informações você pode gravá-las em arquivos de dados.  Com as informações gravadas você poderá: recuperar dados do arquivo a qualquer momento; modificar a seqüência dos dados, intercalando-os ou classificando-os da forma desejada; executar cálculos com os dados; mostrar os resultados do processamento através de relatórios em impressora ou através do monitor de vídeo; modificar, excluir ou consultar os dados gravados.

               Entre no EDIT e crie um arquivo com o nome de Exerc5.prg e digite os comandos abaixo.

                CLEAR
                SET DATE BRITISH
                SET CENTURY ON
                SET CONFIRM ON
                BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ;
                CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176)
                SELECT 1
                USE AGENDA
                IF !FILE("INDIC1.NTX")
                   INDEX ON STR(CODIGO,3,0) TO INDIC1
                ENDIF
                SET INDEX TO INDIC1
                SET COLOR TO "R/W"
   
             @  1,1,24,79  BOX  BORDA
                nCodigo = 0
                DO WHILE .T.
   
                cNome = SPACE(40)
                   cEnd = SPACE(40)
                   dAniver = CTOD("  ")
                   cFone = SPACE(10)
                   cEmail = SPACE(30)
                   cGrav = "S"
                   SET COLOR TO "N/B"
                   @  4,4 CLEAR TO 21,76
                   @  4,4 TO 21,76  DOUBLE
                   @  6,30 SAY "AGENDA DE ENDEREÇOS"
                   @  8,8 SAY "Código...........:" GET nCodigo PICTURE "999" VALID (nCodigo>0)
                   @  9,8 SAY "Nome..............:" GET cNome PICTURE "@!" VALID (!EMPTY(cNome))
                   @ 10,8 SAY "Endereço........:" GET cEnd PICTURE "@!"
                   @ 11,8 SAY "Aniversário.....:" GET dAniver PICTURE "@D"
                   @ 12,8 SAY "Telefone..........:" GET cFone PICTURE "@R (999)999-9999"
                   @ 13,8 SAY "E-mail..............:" GET cEmail
                   @ 15,8 SAY "Deseja Gravar?...:" GET cGrav PICTURE "@!" VALID (cGrav $ "SN")
                   READ
                   IF LASTKEY( ) = 27
                      EXIT
                   ENDIF

                   IF cGrav = "S"
                      APPEND BLANK
                      REPLACE CODIGO WITH nCodigo, NOME WITH cNome, ENDERECO WITH cEnd
                      REPLACE ANIVER WITH dAniver, FONE WITH cFone, EMAIL WITH cEmail
                      nCodigo = nCodigo + 1
                   ENDIF
                ENDDO
                CLOSE DATABASE
                CLEAR
                RETURN

               Grave o arquivo, compile para ver se não há erros, linkedite para criar o arquivo executável e depois execute o programa.   Digite as informações, se no campo "Deseja Gravar?" você informar "S", todos os dados digitados serão gravados no arquivo AGENDA.DBF.  Faça várias inclusões para testar o programa, e anote as informações que forem gravadas, principalmente os campo "Código", para facilitar as pesquisas e alterações que faremos nos próximos exercícios.  Para sair do programa pressione a tecla ESC.

                Comandos utilizados:
                Apenas os novos comandos serão descritos.

                SELECT
                O comando SELECT é usado para selecionar uma área de trabalho onde será aberto um arquivo de dados.  Referências a áreas de trabalho com o comando SELECT podem ser feitas através de números, de 0 a 250.  Para cada arquivo de dados aberto você terá que selecionar uma área de trabalho diferente.  Área de trabalho zero refere-se à primeira área de trabalho vazia.

                USE
   
             USE abre um arquivo de dados (.dbf), seu arquivo memo associado (.dbt), e opcionalmente índices associados(.ntx) na área corrente ou na próxima área disponível.

                Sintaxe:

                USE [<xcArquivo> [INDEX <xcLista de Indices>] [ALIAS <idAlias>]

                Argumentos

                <xcArquivos> é o nome do arquivo a ser aberto, o qual pode ser especificado literalmente ou como expressão caractere entre parênteses.

                INDEX <xcLista de Indices> especifica o(s) nome(s) de até 15 índices a serem abertos na área corrente. Cada índice pode ser especificado literalmente ou como expressão caractere entre parênteses,
sendo que o primeiro índice da lista torna-se o índice de controle.

                ALIAS <idAlias> é o nome a ser associado à área de trabalho quando o arquivo de dados é aberto. Se esta cláusula não é especificada, o alias assumido é o nome do arquivo.

                No exemplo acima está sendo aberto o arquivo AGENDA.DBF, onde iremos gravar os dados digitados.

               
FILE( )
   
             FILE() é uma função de tratamento de ambiente utilizada para determinar se é encontrado algum arquivo que corresponda a um padrão de especificação de arquivo. FILE() procura no diretório especificado e em um path explicitamente especificado. Caso não seja especificado path, FILE() pesquisa no diretório padrão Clipper corrente e depois no path Clipper. Em nenhuma circunstância o path DOS é pesquisado. Observe também que a função FILE() não reconhece arquivos de sistemas ou escondidos em sua pesquisa.

                FILE() retorna verdadeiro (.T.) caso haja algum arquivo que corresponda ao padrão <cEspecArq>; caso contrário, ela retorna falso (.F.).  No exemplo acima foi utilizado antes da função FILE( ) o operador ! que retorna o inverso lógico, isto é, se a função FILE( ) encontrar o arquivo INDC1.NTX retornar verdadeiro (.T.), que é alterado para o inverso falso (.F.) e vice-versa.

                INDEX ON...TO...
               
Cria um arquivo de índices que serve para ordenar o arquivo de dados (.DBF).

                Sintaxe

                INDEX ON <expChave> TO <xcIndice>

                Argumentos

                <expChave> é uma expressão que retorna o valor chave a ser colocado no índice para cada registro na área de trabalho corrente. <expChave> pode ser do tipo caractere, data, lógico, ou numérico. O tamanho
máximo da expressão da chave de indexação é de 250 caracteres.

                TO <xcIndice> especifica o nome do arquivo de índices a ser criado. O nome do arquivo pode ser especificado literalmente ou por expressão caractere entre parênteses. Normalmente, a extensão de arquivo padrão é (.ntx). 

                O comando INDEX ON cria um arquivo que contém um índice dos registros do arquivo de dados corrente baseado em <expChave>. Quando o arquivo de índices é usado, os registros do arquivo de dados aparecem na ordem da expressão chave, embora o índice não altere a ordem física dos registros dentro do arquivo de dados. O comando INDEX ordenas as chaves de caractere de acordo com o valor ASCII de cada caractere dentro da cadeia, valores numéricos em ordem numérica, ordem cronológica dos valores de datas, considerando datas em branco como valores baixos, e valores lógicos classificados com valor verdadeiro
(.T.) considerados como valores altos.  No exemplo acima estamos indexando o arquivo pelo Código.

                STR( )
   
             Converte um valor numérico para uma cadeia de caracteres.

                Sintaxe

                STR(<número>,[<nTamanho>],[<nDecimais>])

                Argumentos

                <número> é o número que será convertido para caractere.

                <nTamanho> é o tamanho da cadeia de caracteres a ser retornada incluindo dígitos decimais, ponto decimal, e sinal.

                <nDecimais> é a quantidade de casas decimais a serem retornadas.


               
SET INDEX TO
 
  
             O comando SET INDEX é utilizado para abrir arquivos de índices para o arquivo de dados corrente, este comando vai ordenar os registros do arquivo de dados de acordo com chave feita no comando INDEX ON... TO...

               SET COLOR TO
   
             Define cores de tela.

                Sintaxe

                SET COLOR TO [<padrão> [, <destaque>][, <borda>][, <fundo>] [, <naoselecionados>]]

                Argumentos

                <padrão> é a cor utilizada para escrever em toda a tela do vídeo, incluindo a utilização de todos os comandos e funções quando exibidas na tela. Isto inclui comandos como @...PROMPT, @...SAY, e ?; e funções como ACHOICE(), DBEDIT(), e MEMOEDIT().

                <destaque> é a cor utilizada para configurar a exibição das barras luminosas. Este argumento influi sobre a barra luminosa de seleção sobre os GETs com INTENSITY ON, o comando MENU TO, a função DBEDIT(), e ACHOICE().

                <borda> é a cor utilizada para configurar a cor que será colocada na área em torno da tela de vídeo, que é inacessível para a utilização normal dos programas que escrevem algo na tela. Esta configuração
somente funciona com adaptadores de vídeo do tipo CGA, mas nao com
adaptadores EGA ou VGA.

                <fundo> atualmente não é suportada por máquinas nas quais a Nantucket não provê drivers apropriados. Esta configuração é suportada somente para propósitos de compatibilidade.

                <naoselecionados> é o par de cores utilizado para configurar uma determinada entrada de dados exibindo o GET corrente na cor de destaque definida, enquanto que os outros GETs são mostrados nesta cor.

                Observação: Ver Tabela de cores e atributos

                LASTKEY( )
   
             Retorna o valor da última tecla pressionada no teclado.

                LASTKEY() retorna um número de -39 a 386 que identifica o valor INKEY() da última tecla extraída do buffer de teclado.  No exemplo acima a função LASTKEY( ) verifica se foi pressionada a tecla ESC que corresponde ao número 27.

                APPEND BLANK
   
             Adiciona um registro vazio ao arquivo de dados corrente para que possamos gravar os dados digitados.

                APPEND BLANK adiciona um registro vazio no fim do arquivo corrente e o torna o registro corrente. Os novos valores de campos são inicializados em valores vazios para cada tipo de dado. A campos caractere são atribuídos espaços, campos numéricos são inicializados com zero, campos lógicos são inicializados com falso (.F.), e campos data são atribuídos CTOD("").

                REPLACE
   
             Grava nos campos do arquivo de dados os valores atribuídos as variáveis de memória.

                Sintaxe

                REPLACE <idCampo> WITH <exp> [, <idCampo2> WITH <exp2>...]

                Argumentos

                <idCampo> é o nome do campo do arquivo de dados à qual será atribuído novo valor. 

                <exp> é o valor a ser atribuído a <idCampo>.

                CLOSE DATABASE
   
             Fecha um conjunto específico de arquivos.

                DATABASES Fecha todos os arquivos de dados abertos, memos e índices em todas as áreas, e libera filtros e relações ativas.

   Voltar


    Pesquisando registros no arquivo de dados

                Para poder pesquisar os registros que foram gravados em um arquivo de dados é necessário que este arquivo esteja indexado, isto é, tenha algum arquivo de índice ativo junto com o arquivo de dados.
                Vamos montar um programa para pesquisar os registros do arquivo de dados AGENDA.DBF.

               Entre no EDIT e crie um arquivo com o nome de Exerc6.prg e digite os comandos abaixo.

                CLEAR
                SET DATE BRITISH
                SET CENTURY ON
                SET CONFIRM ON
                BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ;
                CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176)
                SELECT 1
                USE AGENDA
                IF !FILE("INDIC1.NTX")
                   INDEX ON STR(CODIGO,3,0) TO INDIC1
                ENDIF
                SET INDEX TO INDIC1
                SET COLOR TO "R/W"
   
             @  1,1,24,79  BOX  BORDA
                DO WHILE .T.
                   nCodigo = 0
                   cSai = "N"
                   SET COLOR TO "N/B"
                   @  4,4 CLEAR TO 21,76
                   @  4,4 TO 21,76  DOUBLE
                   @  6,30 SAY "AGENDA DE ENDEREÇOS"
                   @  8,8 SAY "Código...........:" GET nCodigo PICTURE "999" VALID (nCodigo>0)
                   READ
                   IF LASTKEY( ) = 27
                      EXIT
                   ENDIF
                   GO TOP
                   SEEK STR(nCodigo,3,0)
                   IF FOUND( )
                      @  9,8 SAY "Nome..............: " + NOME
                      @ 10,8 SAY "Endereço........: " + ENDERECO
                      @ 11,8 SAY "Aniversário.....: " + DTOC(ANIVER)
                      @ 12,8 SAY "Telefone..........: " + FONE
                      @ 13,8 SAY "E-mail..............: " + EMAIL
                   ELSE
                       TONE(400,3)
                      @ 10,8 SAY "NÃO ENCONTRADO"
                   ENDIF
                   @ 15,8 SAY "Deseja Sair?...:" GET cSai PICTURE "@!" VALID (cSai $ "SN")
                   READ
                   IF cSai = "S"
                      EXIT
                   ENDIF
                ENDDO
                CLOSE DATABASE
                CLEAR
                RETURN

               Grave o arquivo, compile para ver se não há erros, linkedite para criar o arquivo executável e depois execute o programa.   Digite o Código dos registro que foram gravados no exercício anterior (espero que você tenha anotado) para pesquisar estes registros.  Depois digite um Código que você tem certeza que não existe no arquivo e observe a reação do programa.

                Comandos utilizados:
                Apenas os novos comandos serão descritos.

                GO
   
            Move o ponteiro de registro para um registro específico no arquivo de dados.

                Sintaxe

                GO <nRegistro> | BOTTOM | TOP

                Argumentos

                <nRegistro> especifica o número do registro destino.

                BOTTOM especifica o último registro na área de trabalho corrente.

                TOP especifica o primeiro registro na área de trabalho corrente.

                O comando GO posiciona o ponteiro num registro especificado na área de trabalho corrente. O registro pode ser especificado através de seu número ou como registro início ou fim do arquivo. Se a nova posição é início (TOP) e há um índice ativo, o ponteiro de registros vai até o primeiro registro do índice.  Caso a nova posição seja fim (BOTTOM) e haja um índice ativo, o ponteiro de registros vai para o último registro do índice.  Antes de qualquer procura em um arquivo de dados indexado é necessário voltar para o primeiro registro do arquivo de dados.

                SEEK
   
             Pesquisa um índice através de um valor chave especificado.

                Sintaxe

                SEEK <expPesquisa>

                Argumentos

                <expPesquisa> é uma expressão à qual a chave de indexação deverá corresponder.

                O comando SEEK pesquisa o índice de controle que começa com a primeira chave e continua até que seja encontrada correspondência ou até que haja um valor chave maior do que o argumento de pesquisa. Caso haja correspondência, o ponteiro de registro é posicionado no número do registro encontrado no índice.  No exemplo acima, o comando SEEK procura nos registros gravados um que tenha o código que você digitou.

                FOUND( )
   
             Determina se a operação de pesquisa anterior foi bem sucedida.

                Sintaxe

                FOUND() --> lSucesso

                Retorno

                FOUND() retorna verdadeiro (.T.) se o último comando de pesquisa foi bem sucedido; do contrário, ela retorna falso (.F.).

                FOUND() é uma função de tratamento de banco de dados utilizada para determinar se uma operação de pesquisa (isto é, FIND, LOCATE, CONTINUE, SEEK, SET RELATION) foi bem sucedida antes que o próximo passo no programa seja executado.

                
TONE( )
   
             Aciona o alto-falante por uma duração e freqüência especificadas.

                Sintaxe

                TONE(<nFreqüência>, <nDuração>)

                Argumentos

                <nFreqüência> é um valor numérico positivo que indica a freqüência do som a ser produzido.

                <nDuração> é um valor numérico positivo que indica a duração do som.

   Voltar


    Alterando registros no arquivo de dados

                Já fizemos várias inclusão de informações no arquivo de dados nos exercícios anteriores, agora vamos alterar estes registros.

               Entre no EDIT e crie um arquivo com o nome de Exerc7.prg e digite os comandos abaixo.

                CLEAR
                SET DATE BRITISH
                SET CENTURY ON
                SET CONFIRM ON
                BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ;
                CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176)
                SELECT 1
                USE AGENDA
                IF !FILE("INDIC1.NTX")
                   INDEX ON STR(CODIGO,3,0) TO INDIC1
                ENDIF
                SET INDEX TO INDIC1
                SET COLOR TO "R/W"
   
             @  1,1,24,79  BOX  BORDA
                DO WHILE .T.
                   nCodigo = 0
                   cAlt = "N"
                   SET COLOR TO "N/B"
                   @  4,4 CLEAR TO 21,76
                   @  4,4 TO 21,76  DOUBLE
                   @  6,30 SAY "AGENDA DE ENDEREÇOS"
                   @  8,8 SAY "Código...........:" GET nCodigo PICTURE "999" VALID (nCodigo>0)
                   READ
                   IF LASTKEY( ) = 27
                      EXIT
                   ENDIF
                   GO TOP
                   SEEK STR(nCodigo,3,0)
                   IF !FOUND( )
                       TONE(400,3)
                      @ 10,8 SAY "NÃO ENCONTRADO"
                       LOOP
                   ENDIF
   
                cNome = NOME
                   cEnd = ENDERECO
                   dAniver = ANIVER
                   cFone = FONE
                   cEmail = EMAIL
                   @  9,8 SAY "Nome..............:" GET cNome PICTURE "@!" VALID (!EMPTY(cNome))
                   @ 10,8 SAY "Endereço........:" GET cEnd PICTURE "@!"
                   @ 11,8 SAY "Aniversário.....:" GET dAniver PICTURE "@D"
                   @ 12,8 SAY "Telefone..........:" GET cFone PICTURE "@R (999)999-9999"
                   @ 13,8 SAY "E-mail..............:" GET cEmail
                   @ 15,8 SAY "Alterar?...:" GET cAlt PICTURE "@!" VALID (cAlt $ "SN")
                   READ
                   IF cAlt = "S"
                      REPLACE NOME WITH cNome, ENDERECO WITH cEnd
                      REPLACE ANIVER WITH dAniver, FONE WITH cFone, EMAIL WITH cEmail
                   ENDIF
                ENDDO
                CLOSE DATABASE
                CLEAR
                RETURN

               Grave o arquivo, compile para ver se não há erros, linkedite para criar o arquivo executável e depois execute o programa.   Digitando um código já cadastrado o programa apresenta todos os campos para que você possa fazer alguma alteração nos dados que foram gravados no arquivo.   Para sair do programa pressione a tecla ESC na hora de digitar o "Código".

                Comandos utilizados:
                Todos os comandos usados já foram vistos.

   Voltar


    Excluindo registros no arquivo de dados

                Vamos supor que você brigou com um dos seus amigos e gostaria de excluir os seus dados da sua Agenda de Endereços.  Para isto, temos que primeiro procurar qual o registro que queremos excluir e depois através de uma confirmação excluir o registro.

               Entre no EDIT e crie um arquivo com o nome de Exerc8.prg e digite os comandos abaixo.

                CLEAR
                SET DATE BRITISH
                SET CENTURY ON
                SET CONFIRM ON
                BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ;
                CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176)
                SELECT 1
                USE AGENDA
                IF !FILE("INDIC1.NTX")
                   INDEX ON STR(CODIGO,3,0) TO INDIC1
                ENDIF
                SET INDEX TO INDIC1
                SET COLOR TO "R/W"
   
             @  1,1,24,79  BOX  BORDA
                DO WHILE .T.
                   nCodigo = 0
                   cExc = "N"
                   cRec = "S"
                   SET COLOR TO "N/B"
                   @  4,4 CLEAR TO 21,76
                   @  4,4 TO 21,76  DOUBLE
                   @  6,30 SAY "AGENDA DE ENDEREÇOS"
                   @  8,8 SAY "Código...........:" GET nCodigo PICTURE "999" VALID (nCodigo>0)
                   READ
                   IF LASTKEY( ) = 27
                      EXIT
                   ENDIF
                   GO TOP
                   SEEK STR(nCodigo,3,0)
                   IF !FOUND( )
                       TONE(400,3)
                      @ 10,8 SAY "NÃO ENCONTRADO"
                       LOOP
                   ENDIF
                   @  9,8 SAY "Nome..............: " + NOME
                   @ 10,8 SAY "Endereço........: " + ENDERECO
                   @ 11,8 SAY "Aniversário.....: " + DTOC(ANIVER)
                   @ 12,8 SAY "Telefone..........: " + FONE
                   @ 13,8 SAY "E-mail..............: " + EMAIL
                    IF DELETED( )
                       TONE(400,3)
                       @ 15,8 SAY "Registro já Excluído, Recuperar?...:" GET cRec PICT "!" VALID (cRec $ "SN")
                       READ
                       IF cRec = "S"
                          RECALL
                       ENDIF
                    ELSE
                       @ 15,8 SAY "Excluir Registro?...:" GET cExc PICTURE "@!" VALID (cExc $ "SN")
                       READ
                       IF cExc = "S"
                          DELETE
                       ENDIF
                    ENDIF
                ENDDO
                PACK
                CLOSE DATABASE
                CLEAR
                RETURN

               Grave o arquivo, compile para ver se não há erros, linkedite para criar o arquivo executável e depois execute o programa.   Agora digite o Código do registro que você quer excluir e depois confirme a exclusão.  Observe que se você informar o código de algum registro já excluído o programa pergunta se você quer recuperar este registro.   Para sair do programa pressione a tecla ESC na hora de digitar o "Código".

                Comandos utilizados:
                Apenas os novos comandos serão descritos.

                DELETED( )
   
             Esta função retorna verdadeiro (.T.) se o registro corrente está marcado para para eliminação (se já foi excluído); caso contrário, retornará falso (.F.). 

                RECALL
   
             O comando RECALL recupera registros marcados para eliminação na área de trabalho corrente. É o inverso do comando DELETE.   Um registro que foi recuperado pelo comando RECALL não será mais excluído.

                DELETE
   
             Marca os registros para eliminação.  Este comando vai marcar quais os registro que serão excluídos futuramente pelo comando PACK.

                PACK
   
             Quando você utiliza o comando PACK, todos os registros marcados para eliminação são removidos do arquivo de dados corrente, o espaço físico ocupado pelos registros eliminados é recuperado, e todos os índices ativos na área de trabalho corrente são atualizados. 

   Voltar


    Criando relatórios

                Para que você obtenha informações sobre os registros do arquivo de dados do programa AGENDA de uma forma mais abrangente, você terá que criar um relatório que forneça todas as informações que você necessita.  É importante antes de começar a criar o relatório planejar o layout do relatório, ou seja, quais informações devem aparecer, qual será a sua disposição no papel, qual será o cabeçalho e rodapé, que cálculos serão realizados, número de linhas a serem impressas, etc.

               Entre no EDIT e crie um arquivo com o nome de Exerc9.prg e digite os comandos abaixo.

                CLEAR
                SET DATE BRITISH
                SET CENTURY ON
                SET CONFIRM ON
                SET DELETED ON
                BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ;
                CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176)
                SELECT 1
                USE AGENDA
                IF !FILE("INDIC1.NTX")
                   INDEX ON STR(CODIGO,3,0) TO INDIC1
                ENDIF
                SET INDEX TO INDIC1
                SET COLOR TO "R/W"
   
             @  1,1,24,79  BOX  BORDA
                DO WHILE .T.
                   nCodigoi = 0
                   nCodigof = 0
                   cImp = "N"
                   SET COLOR TO "N/B"
                   @  4,4 CLEAR TO 21,76
                   @  4,4 TO 21,76  DOUBLE
                   @  6,30 SAY "LISTA DE ENDEREÇOS"
                   @  8,8 SAY "Código Inicial....:" GET nCodigoi PICTURE "999" VALID (nCodigoi>0)
                   READ
                   IF LASTKEY( ) = 27
                      EXIT
                   ENDIF
                   GO TOP
                   SEEK STR(nCodigoi,3,0)
                   IF !FOUND( )
                       TONE(400,3)
                      @ 8,32 SAY "NÃO CADASTRADO"
                      INKEY(0)
   
                   LOOP
                   ENDIF
                   @ 8,32 SAY NOME
                   @  9,8 SAY "Código Final......:" GET nCodigof PICTURE "999" VALID (nCodigof>=nCodigoi)
                   READ
                   IF LASTKEY( ) = 27
                      EXIT
                   ENDIF
                   GO TOP
                   SEEK STR(nCodigof,3,0)
                   IF !FOUND( )
                       TONE(400,3)
                      @ 9,32 SAY "NÃO CADASTRADO"
                      INKEY(0)
   
                   LOOP
                   ENDIF
                   @ 9,32 SAY NOME
                   @ 11,8 SAY "Confirma impressão?...:" GET cImp PICTURE "@!" VALID (cImp $ "SN")
                   READ
                   IF LASTKEY( ) = 27
                      EXIT
                   ENDIF
                   IF cImp = "S"
                      DO WHILE .T.
                         IF !ISPRINTER( )
                            TONE(400,3)
                            @ 13, 8 SAY "PREPARE A IMPRESSORA - Pressione qualquer tecla"
                            tek=INKEY(0)
                            IF tek=27
                               EXIT
                            ENDIF
                            LOOP
                         ENDIF
                         SET PRINTER TO LPT1
                         SET DEVICE TO PRINTER
                         GO TOP
                         SEEK STR(nCodigoi,3,0)
                         vcab=.T.
                         DO WHILE !EOF( )
                            IF CODIGO > nCodigof
                               EXIT
                            ENDIF
                            IF vcab
                               @ 00,00 SAY "NOME DA SUA EMPRESA"
                               @ 01,00 SAY "AGENDA DE ENDERECO"
                               @ 02,00 SAY REPLICATE("-",80)
                               vcab = .F.
                            ENDIF
                            @ PROW( )+1,02 SAY "Codigo.......:"
                            @ PROW( ) , 17 SAY CODIGO PICT "999"
                            @ PROW( ) , 22 SAY "Nome..:"
                            @ PROW( ) , 30 SAY NOME PICT "@!"
                            @ PROW( )+1,02 SAY "Endereco......:"
                            @ PROW( ) , 17 SAY ENDERECO PICT "@!"
                            @ PROW( )+1,02 SAY "Aniversario..:"
                            @ PROW( ) , 17 SAY ANIVER PICT "@D"
                            @ PROW( ) , 29 SAY "Telefone..:"
                            @ PROW( ) , 41 SAY FONE PICT "@R (999)999-9999"
                            @ PROW( )+1,02 SAY "E-mail.......:"
                            @ PROW( ) , 17 SAY EMAIL
                            @ PROW( )+1,00 SAY REPLICATE("-",80)
                            IF PROW( ) > 50
                               vcab = .T.
                            ENDIF
                            SKIP
                         ENDDO
                         EJECT
                         SET DEVICE TO SCREEN
                         SET PRINTER TO
                         EXIT
                      ENDDO
                   ENDIF
                ENDDO
                CLOSE DATABASE
                CLEAR
                RETURN

               Grave o arquivo, compile para ver se não há erros, linkedite para criar o arquivo executável e depois execute o programa.   Para filtrar apenas alguns registros do arquivo de dados é solicitado o "Código Inicial" e o "Código Final", isto é, serão impressos somente os registros que o código esteja dentro deste intervalo.

                Comandos utilizados:
                Apenas os novos comandos serão descritos.

                SET DELETED
   
             Determina se os registros marcados serão considerados ou não no processamento.

                Sintaxe

                SET DELETED on | OFF

                Argumentos

                ON ignora registros marcados. (É como se eles não existissem.)

                OFF processa registros marcados.

                ISPRINTER( )
   
             ISPRINTER() é uma função de tratamento de impressoras utilizada para determinar se a saída paralela (LPT1) está on-line e pronta para imprimir.   Você pode usar ISPRINTER() para certificar-se de que a impressora está pronta antes que você inicie uma operação de impressão.

                SET PRINTER TO
   
             O comando SET PRINTER é usado para redirecionar as saídas da impressora para outras saídas que não seja a padrão.  A saída padrão é a porta paralela LPT1, onde normalmente se conecta uma impressora paralela.

                SET DEVICE TO
   
             Envia os comandos @...SAY para à tela ou à impressora.

                Sintaxe

                SET DEVICE TO SCREEN | printer

                Argumentos

                SCREEN envia todos os comandos @...SAY à tela e independe de como os comandos SET PRINTER e CONSOLE estejam ajustados.

                PRINTER envia todos os comandos @...SAY ao dispositivo ajustado em SET PRINTER TO. Isto pode incluir um porta de impressora local, um spooler de rede, ou um arquivo.

                EOF( )
   
             Determina se o final do arquivo foi atingido.

                Sintaxe

                EOF()

                Retorno

                EOF() retorna verdadeiro (.T.) quando é feita uma tentativa de mover o ponteiro de registros para além do último registro lógico em um arquivo de banco de dados; do contrário, ela retorna falso (.F.). Caso não haja nenhum arquivo de banco de dados aberto na área de trabalho corrente, EOF() retorna falso (.F.). Se o arquivo de banco de dados corrente não possui registros, EOF() retorna verdadeiro (.T.).

                REPLICATE( )
   
             Retorna uma cadeia de caracteres repetida uma quantidade de vezes especificada.

                Sintaxe

                REPLICATE(<cString>, <nCont>) 

                Argumentos

                <cString> é a cadeia de caracteres a ser repetida.

                <nCont> é a quantidade de vezes que <cString> será repetido.

                PROW( )
   
             Retorna a linha em que se encontra a cabeça de impressão.

                Sintaxe

                PROW()

                Retorno

                PROW() retorna o número de linha corrente enviado à impressora na forma de um valor numérico inteiro. A posição inicial de linha é zero.

               
SKIP
   
             Move o ponteiro de registro para uma nova posição no arquivo de dados.

                Sintaxe

                SKIP [<nRegistros>]

                Argumentos

                <nRegistros> é uma expressão numérica que especifica o número de registros para mover o ponteiro a partir da posição corrente. Um valor positivo especifica deslocamento do ponteiro para frente e valores negativos significam deslocamento do ponteiro para trás.  SKIP especificado sem argumentos move o ponteiro 1 registro para frente.

               
EJECT
   
             Avança a cabeça da impressora para o começo da próxima página.

                No exemplo está sendo usado o comando EJECT para avançar para uma nova página quando todos os registro do intervalo forem impressos.

   Voltar


    Chamando arquivo fonte externo

                Até agora criamos vários pequenos programas separados, a união de todos estes programas forma uma aplicação.  Para isto temos que criar um programa principal do qual chamaremos todos os outros programas.  Geralmente este programa principal tem um menu de opções e de acordo com a opção selecionada será chamado um programa onde você vai conseguir realizar a operação desejada.  Vamos ver como isto funciona.

               Entre no EDIT e crie um arquivo com o nome de Agenda.prg e digite os comandos abaixo.

                CLEAR
                SET DATE BRITISH
                SET CENTURY ON
                SET CONFIRM ON
                SET MESSAGE TO 21 CENTER
                SET WRAP ON
                BORDA = CHR(201) + CHR(205) + CHR(187) + CHR(186) + ;
                CHR(188) + CHR(205) + CHR(200) + CHR(186) + CHR(176)
   
             @  1,1,24,79  BOX  BORDA
                @  20,29 TO 22,50
                nOp = 1
                DO WHILE .T.
                   @  5,33 TO 12,45
                   @ 06,34 PROMPT " INCLUSÃO     " MESSAGE " INCLUSÃO DE DADOS     "
                   @ 07,34 PROMPT " ALTERAÇÃO " MESSAGE " ALTERAÇÃO DE DADOS "
                   @ 08,34 PROMPT " CONSULTA    " MESSAGE " CONSULTA DE DADOS   "
                   @ 09,34 PROMPT " EXCLUSÃO   " MESSAGE " EXCLUSÃO DE DADOS   "
                   @ 10,34 PROMPT " RELATÓRIO   " MESSAGE " EMISSÃO DE RELATÓRIO  "
                   @ 11,34 PROMPT " FINALIZA        " MESSAGE " SAIR DO PROGRAMA       "
                   MENU TO nOp
                   vTelap = SAVESCREEN(0,0,24,79)
                   DO CASE
                      CASE nOp = 1
                         DO EXERC5
                      CASE nOp = 2
                         DO EXERC7
                      CASE nOp = 3
                         DO EXERC6
                      CASE nOp = 4
                         DO EXERC8
                      CASE nOp = 5
                         DO EXERC9
                      CASE nOp = 6
                         EXIT
                   ENDCASE
                   RESTSCREEN(0,0,24,79,vTelap)
                ENDDO
                CLEAR
                RETURN

               Grave o arquivo, compile (ver observação abaixo) para ver se não há erros, linkedite para criar o arquivo executável e depois execute o programa.   Observe que quando você compila o arquivo AGENDA.PRG também são compilados os arquivos (.prg) que estão sendo chamados pelo comando DO.  Executando o programa será montado um menu de opções, selecionando uma das opções é chamado o arquivo (.prg) corresponde a opção escolhida.

                Observação: No começo dos arquivos exerc5.prg, exerc6.prg, exerc7.prg, exerc8.prg e exerc9.prg tem os seguintes comandos: CLEAR, SET DATE BRITISH, SET CENTURY ON e SET CONFIRM ON.  Estes comandos não são necessários por que já estão no programa principal (agenda.prg), seria necessário retirar estes comandos dos arquivos acima mencionados, evitando assim uma duplicidade destes comandos.  O comando CLEAR que está no final destes arquivos também terá de ser retirado, pois neste caso é um comando desnecessário já que no arquivo agenda.prg a tela do programa está sendo restaurada pelo comando RESTSCREEN( ).   Enquanto estes arquivos estavam sendo executados sozinhos estes comandos eram necessários.

                Pronto nosso programa já está completo.  Parabéns...

                Comandos utilizados:
                Apenas os novos comandos serão descritos.

                SAVESCREEN( )
   
             Grava uma região de tela para posterior exibição através da função RESTSCREEN( ).

                Sintaxe

                SAVESCREEN(<nTopo>, <nEsquerda>, <nBase>, <nDireita>) 

                Argumentos

                <nTopo>, <nEsquerda>, <nBase>, e <nDireita> definem as coordenadas da região de tela a ser gravada. 

                SAVESCREEN() é uma função de tratamento de tela, utilizada para gravar uma região de tela em uma variável de qualquer classe de armazenamento, inclusive variáveis de campo. Mais tarde, você pode re-exibir a imagem de tela gravada na mesma ou em uma nova localização, através da função RESTSCREEN(). Regiões de tela geralmente são gravadas e recuperadas quando se utiliza uma rotina de menu de opções.  Antes de chamar algum outro programa a tela é salva e depois que o programa retorna para o menu a tela é restaurada, evitando que você tenha que refazer a tela novamente.

                DO
   
             O comando DO executa uma rotina ou programa e indica para o compilador Clipper, quais as rotinas ou programas devem ser compiladas.   Quando um programa ou rotina chamados pelo comando DO são finalizados, o controle do fluxo de execução retorna ao programa que os chamou, exatamente na próxima linha do programa a ser executada, após o comando DO.

                RESTSCREEN( )
   
             Exibe (restaura) uma região de tela gravada em uma localização especificada.

                Sintaxe

                RESTSCREEN(<nTopo>, <nEsquerda>, <nBase>, <nDireita>, <cTela>)

                Argumentos

                <nTopo>, <nEsquerda>, <nBase>, e <nDireita> definem as coordenadas da informação de tela contida em <cTela>.

                <cTela> é uma cadeia de caracteres que contém a região de tela gravada. 

                RESTSCREEN() é uma função de tratamento de tela que re-exibe uma região de tela gravada com SAVESCREEN(). A localização da tela destino pode ou não ser a mesma que a localização original de quando a região de tela foi gravada. Se você especificar uma nova localização de tela, a nova região de tela deve ser do mesmo tamanho, pois do contrário você poderá obter resultados ambíguos.

   Voltar


    Funções e símbolos usados com picture

                Nos comandos @...SAY ou @...SAY...GET existe um cláusula PICTURE que serve para formatar o dado a ser exibido. O uso correto dessa cláusula é muito importante para um bom acabamento dos seus programas.   A cláusula PICTURE deve ser seguido por um caractere de formatação que é dividido em funções e símbolos.

                Funções:

                @A        Permite somente letras.
                @B        Alinha à esquerda dados numéricos.
                @C        Mostra o símbolo CR (crédito) após um número positivo.
                @D        Mostra datas no formato definido pelo comando SET DATE TO.
                @E        Mostra datas no formato dd/mm/aa e dados numéricos com a vírgula separando as
                               casas decimais e pontos separando milhares.
                @K        Limpa automaticamente o conteúdo corrente da variável se o primeiro caractere
                               digitado não for uma tecla de movimentação do cursor.
                @R        Literais na máscara são mostrados, mas não farão parte do conteúdo do dado.
                @S<n>  Limita a edição ou a visualização do dado em <n> caracteres.
                @X        Mostra o símbolo DB (débito) após um número negativo.
                @Z        Mostra brancos no lugar de zeros.
                @(         Mostra entre parênteses os números negativos.
                @!         Converte minúsculas em Maiúsculas.
                @)         O mesmo que @(, exceto que brancos iniciais não são mostrados dentro de
                               parênteses.

                Símbolos:

                9            Permite somente dígitos para dados tipos Caractere, dígitos e sinal para dados
                              tipo Numérico.
                #            Permite somente dígitos, espaços e sinais.
                A            Permite somente letras.
                L            Permite somente caracteres lógicos (T ou F, Y ou N).
                N            Permite somente letras e números.
                X            Permite qualquer caractere.
                !             Converte minúsculas em maiúsculas.
                $            Mostra $ no lugar de zeros não significativos.
                *             Mostra asteriscos no lugar de zeros não significativos.
                .              Identifica o ponto decimal.
                ,              Mostra uma vírgula a cada milhar.

                Funções ou símbolos mais utilizados:

                @ 10,10 SAY "C.P.F....:" GET cCPF PICTURE "@R 999.999.999-99"

                @ 10,10 SAY "Valor Total...:" GET nValor  PICTURE "@E 99,999,999.99"

                @ 10,10 SAY "Nome Completo..:" GET cNome PICTURE "@!"

                @ 10,10 SAY "Data....:" GET dData PICTURE "@D"

                @ 10,10 SAY "Código....:" GET cCod PICTURE "9999"

                @ 10,10 SAY "Telefone...:" GET cTel PICTURE "@R (999)999-9999"

   Voltar


    Tabela de cores e atributos

                O comando SET COLOR ou a função SETCOLOR( ) determinam as cores e atributos do vídeo.  Os parâmetros são fornecidos no formato c1/c2, onde c1 e c2 são letras, números ou atributos para as letras e fundo.   Os seguintes códigos são utilizados para especificar as cores ou atributos do vídeo:

Cor Letra Número
Preto N 0
Azul B 1
Verde G 2
Cyan BG 3
Vermelho R 4
Magenta RB 5
Marrom GR 6
Branco W 7
Cinza N+ 8
Azul-claro B+ 9
Verde-claro G+ 10
Cyan-claro BG+ 11
Vermelho-claro R+ 12
Magenta-claro RB+ 13
Amarelo GR+ 14
Branco intenso W+ 15

                Atributos:

                Invisível                    X
                Piscante                  *
                Vídeo reverso         I
                Alta intensidade     +
                Sublinhado             U

                Exemplos:

                SET COLOR TO "W+/B" ou  SETCOLOR("W+/B")  - Letra em branco intenso com fundo azul.

                SET COLOR TO "N/R"  ou  SETCOLOR("N/R") - Letra em preto com fundo vermelho.

   Voltar


    Operadores

                Os operadores utilizados pelo Clipper para a manipulação de expressões dividem-se nas seguintes categorias:

Operadores Matemáticos

Operadores de String

+          adição
-           subtração
*          multiplicação
/          divisão
^         exponenciação
%        Módulo (resto de divisão)

+         Concatenação de strings (união)
-          Concatenação de strings com eliminação dos brancos finais das strings intermediárias.
<str1> $ <str2> Retorna .T. se <str1> estiver contido em <str2>         

Operadores Relacionais

Operadores Lógicos

<        Menor
>        Maior
=        Igual
= =    Exatamente igual
<=     Menor ou igual
>=     Maior ou igual
<> ou # ou !=    Diferente

.NOT. ou !    "Não" lógico
.AND.           "E" lógico
.OR.              "Ou" lógico

Atribuição

Incremento/Decremento

=       Atribuição normal
: =     Permite atribuir um mesmo valor a
         diversas variáveis.
+=    Adiciona antes de atribuir
- =    Subtrai antes de atribuir
* =   Multiplica antes de atribuir
/ =    Divide antes de atribuir
^ =   Eleva antes de atribuir
%=   Calcula o módulo antes de atribuir

+ +    Incrementa o operando em 1

- -     Decrementa o operando em 1

   Voltar


    Nomes de campos e variáveis de memória

                Somente os 10 primeiros caracteres são significativos no nome.  Somente letras, números e "_" são permitidos. Deve começar com letra e não pode conter espaço em branco.  Campos e variáveis de memória podem ter o mesmo nome.   Quando ocorrer um conflito de nomes, nomes de campos têm precedências sobre os nomes de variáveis.

   Voltar


    Opções de compilação

                Compilador do Clipper -- CLIPPER.EXE

                Compila um ou mais arquivos programa (.prg) que contêm rotinas e funções definidas pelo usuário para formar um arquivo objeto (.OBJ).

                Sintaxe

                CLIPPER <arqFonte> [<lista opções>]

                Argumentos de Linha de Comando

                Esta é a sintaxe da linha de comando utilizada para invocar o compilador do Clipper. Se não forem especificados argumentos, é exibida uma tela de auxílio (help).

                <arqFonte> é o nome do arquivo programa (.prg) a ser compilado para um arquivo objeto.

                <lista opções> é uma lista de uma ou mais opções de controle do curso da compilação, todas elas descritas abaixo.

                Opções do Compilador

                /A        Evita confusão entre variáveis (declaradas com PRIVATE, PUBLIC ou PARAMETERS) e
                            campos com o mesmo nome.
                /B        Inclui informações de depuração no arquivo objeto.
                /CREDIT  Mostra o nome das pessoas que trabalharam no projeto do Clipper 5.x.
                /D<identificador>[=<texto>]   Define um identificador para o pré-processador com <texto> atribuídos
                           ao <identificador> se especificado.
                /I<path>  Adiciona o diretório especificado à frente da lista de paths INCLUDE.
                /L        Exclui os números de linha do código fonte do arquivo objeto.
                /M       Compila apenas o arquivo programa (.prg) corrente suprimindo a pesquisa automática para
                           arquivos programa (.prg) referenciados em um arquivo programa com os comandos DO,
                           SET FORMAT, e SET PROCEDURE.
                /N        Suprime a definição automática de uma rotina com o mesmo nome do arquivo programa
                            (.prg).
                /O<arqObj>  Define o nome e/ou localização do arquivo objeto de saída.
                /P         Pré-processa o o arquivo programa (.prg) e copia o resultado em um arquivo de saída com
                             uma extensão (.ppo).
                /Q        Suprime a exibição de números de linha quando da compilação.
                /R[<arqLib>]  Inclui uma solicitação de pesquisa em biblioteca no arquivo objeto.
                /S        Verifica a sintaxe do arquivo (.prg) corrente e não é gerado nenhum arquivo objeto.
                /T<path>  Especifica um diretório diferente para arquivos temporários gerados durante a
                                 compilação.
                /U[<arqHeaderPadraoUsuario>]  Identifica um arquivo header padrão alternativo a ser
                                                                         pré-procdessado ao invés do STD.CH, que vem com o Clipper, e
                                                                         que é utilizado automaticamente.
                /V        Força o compilador a assumir todas as referências a nomes de variáveis não declaradas ou
                           sem alias como sendo variáveis públicas ou privadas.
                /W      Gera mensagens de advertência para referências a variáveis (ambíguas) não declaradas ou
                           sem alias.

   Voltar


    Opções de linkedição

                Linker do Clipper -- RTLINK.EXE

                Combina arquivos objeto (.OBJ) com arquivos biblioteca (.LIB) para formar um arquivo executável (.EXE) ou biblioteca pré-linkada (.PLL).

                Sintaxe

                RTLINK [FILE <lista arqObj> [OUTPUT <arqSaida>] [LIBRARY [<lista arqLib>] [<lista opcoesLink>]]

                Se utilizado sem argumentos, o .RTLink entra no modo prompt, no qual você deve entrar com as opções do linker.

                Argumentos de Linha de Comando

                <lista arqObj> é uma lista dos arquivos objeto a serem linkados.

                <arqSaida> é o nome do arquivo de saída a ser gerado. Se não for especificado, o nome do primeiro arquivo da linha de comando do .RTLink é utilizado.

                <lista arqLib> é a lista de bibliotecas a serem pesquisadas a fim de resolver quaisquer símbolos não identificados.

                <lista OpcoesLink> refere-se à utilização de uma ou mais das opções do linker descritas abaixo.

                /BATCH | /NOBATCH

                BATCH evita que o linker consulte você quando ele não conseguir localizar um arquivo. NOBATCH é o padrão.

                BEGINAREA
                .
                . <opções freeformat do linker>
                .
                ENDAREA

                Designa uma área de overlays estáticas com todas as seções especificadas entre estes dois comandos tornando-se seções de overlays estáticas dentro da área de overlays. As áreas de overlays estáticas podem ser aninhadas especificando-se uma construção BEGINAREA...ENDAREA dentro de outra.

   
             /DEBUG

                Faz com que o gerenciador de overlays do .RTLink exiba uma mensagem que identifica cada overlay na medida em que é carregada na memória durante a execução do programa.

                /DEFAULTLIBRARYSEARCH | /NODEFAULTLIBRARYSEARCH

                NODEFAULTLIBRARYSEARCH faz com que o .RTLink ignore quaisquer nomes de bibliotecas incluídos pelo compilador. DEFAULTLIBRARYSEARCH é o padrão.

                /DYNAMIC[:<arqOvl>]
                DYNAMIC [INTO <arqOvl>]

                DYNAMIC força o linker a colocar quaisquer módulos subseqüentes compilados pelo Clipper em uma overlay dinâmica ao invés de colocar o módulo na seção raiz. DYNAMIC é o contrário de RESIDENT e é o modo padrão.

   
             /EXCLUDE:<simbolo>

                No modo de pré-linkagem, faz com que qualquer módulo que define o(s) símbolo(s) especificado(s) seja excluído da linkagem.

                /EXTDICTIONARY | /NOEXTDICTIONARY

                /NOEXTDICTIONARY faz com que o linker nao pesquise o dicionário estendido. /EXTDICTIONARY é o padrao.

                /FREEFORMAT

                Configura a interface do linker para o modo de entrada FREEFORMAT quando o .RTLink muda para um novo stream de entrada. /FREEFORMAT é o contrário de /POSITIONAL e modo de entrada padrão.

                /HELP

                Relaciona as opções do linker no console.

   
             /IGNORECASE | /NOIGNORECASE

                NOIGNORECASE faz com que o fato de as letras estarem em maiúsculo ou minúsculo seja significativo em nomes de símbolos e segmentos. IGNORECASE é o padrão.

                /INCREMENTAL[:<espaçoGasto>] | /NOINCREMENTAL

                INCREMENTAL habilita a linkagem incremental dos módulos compilados pelo Clipper. Quando um programa é linkado, somente os módulos que sofreram alteração são re-linkados. NOINCREMENTAL é o padrão.

                /MAP[:<lista OpcoesMap>]
                MAP [= <arqMap>] [<lista OpcoesMap>]

                Gera um arquivo map que contém uma ou mais informações a respeito da sessão de linkagem. As opções map disponíveis são S, N e A

   
             MODULE <lista nomeModulo>

                Move os segmentos dos módulos especificados para a seção de overlays estáticas corrente.

                /PLL:<Libprelink>

                Utilizada no modo de linkagem para especificar um arquivo biblioteca pré-linkada do qual o arquivo executável de saída depende.

                /POSITIONAL

                Configura a interface do linker para o modo de entrada POSITIONAL quando o .RTLink muda paraq um novo stream de entrada. /POSITIONAL é o oposto de /FREEFORMAT, que é o modo de entrada padrão.

                /PRELINK

                Altera o .RTLink para modo de pré-linkagem. Neste modo, o <arqSaida> gerado pelo .RTLink é uma biblioteca pré-linkada (.PLL) ao invés de um arquivo executável (.EXE).

   
             PRELOAD

                Faz a seção de overlays estáticas corrente ser carregada na memória antes que o programa inicie a execução. Normalmente, apenas as seções residentes do programa são carregadas na memória antes do início da execução.

                /REFER:<símbolo>
                REFER <lista simbolos>

                No modo de pré-linkagem, o .RTLink é forçado a pesquisar todas as bibliotecas especificadas a fim de carregar o código necessário associado aos símbolos especificados.

                /RESIDENT

                Faz com que os módulos subseqüentes compilados pelo Clipper sejam carregados na seção raiz do programa corrente, anulando a criação automática de overlays dinâmicas para todo código compilado pelo Clipper. RESIDENT é o oposto de DYNAMIC.

   
             SECTION [= <nomeSecao>] [INTO <arqOvl>]

                Cria uma seção de overlays estáticas, e faz com que os segmentos dentro de quaisquer módulos objeto que não sejam do Clipper especificados em opções FILE ou LIBRARY subseqüentes tornem-se parte desta seção.

                /SILENT

                Suprime a exibição dos prompts e respostas do linker quando o .RTLink é invocado com um arquivo script.

                /STACK:<bytesTamanho>

                Especifica uma pilha de programa que anula o tamanho da pilha especificado no módulo objeto. <bytesTamanho> é um valor numérico de no máximo 65.535.

   
             /VERBOSE[:<nível>]

                Faz com que o .RTLink exiba mensagens de status durante a linkagem, indicando os módulos sendo linkados e em qual ordem. <nível> especifica a quantidade de informações a serem exibidas (0, 1, ou 2).

   Voltar


    Comandos e funções usadas neste curso

                Abaixo estão relacionados todos os comandos e funções usadas neste curso, clicando sobre o nome do comando ou função você se deslocará até a parte de curso onde foi exemplificado o uso do comando ou da função.

COMANDOS

@...BOX... @...CLEAR TO... @...SAY...GET... @...PROMPT...
@...SAY... @...TO... APPEND BLANK CLEAR
CLOSE DATABASE DELETE DO DO CASE
DO WHILE EJECT EXIT GO
IF...ELSE...ENDIF INDEX ON...TO... LOOP MENU TO
PACK READ REPLACE RETURN
SEEK SELECT SKIP USE

COMANDOS SET

SET CENTURY SET COLOR SET CONFIRM SET DATE
SET DELETED SET INDEX TO SET MESSAGE SET PRINTER
SET SCOREBOARD SET WRAP

FUNÇÕES

CHR( ) CTOD( ) DATE( ) DTOC( )
DTOS( ) EMPTY( ) EOF( ) FILE( )
FOUND( ) INKEY( ) ISPRINTER( ) LASTKEY( )
REPLICATE( ) RESTSCREEN( ) SAVESCREEN( ) SPACE( )
TIME( ) TONE( )

   Voltar