Curso de Clipper
Comandos Básicos
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
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
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"
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.
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 |
+
Concatenação de strings (união) |
Operadores Relacionais |
Operadores Lógicos |
<
Menor |
.NOT. ou ! "Não"
lógico |
Atribuição |
Incremento/Decremento |
=
Atribuição normal |
+ + Incrementa o operando em 1 - - Decrementa o operando em 1 |
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.
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.
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( ) |