Manual do Usuário – Linguagem UACLIP

Introdução

Descrição do Software

Configuração Passo a Passo

Compilando um Programa

Regras Básicas da Linguagem UACLIP

Tipos de Variáveis

Instruções do Uaclip

Funções do Uaclip


Introdução

O presente manual têm por objetivo auxiliar os programadores no desenvolvimento de uma aplicação utilizando a linguagem UACLIP. Esta linguagem foi desenvolvida para uso no microterminal é uma linguagem de alto nível com comandos semelhantes aos encontrados no CLIPPER. Os microterminais da PASSO possuem um microprocessador, que executa localmente os programas aplicativos desenvolvidos pelo usuário.

O microterminal vem alcançando significativo sucesso devido a simplicidade no desenvolvimento de aplicações e facilidade de conexão com periféricos. Encontra grande número de aplicações em diversos segmentos da indústria e do comércio, atuando como um mecanismo inteligente de automação de processos.

Antes de iniciar a implementação de uma aplicação para o microterminal, certifique-se do modelo de equipamento que está utilizando e leia atentamente o manual de instalação e operação para garantia de um funcionamento correto.


Instruções do Uaclip

1. *	21. RESTORE SCREEN FROM

2. &&	22. SET INDEX

3. APPEND BLANK	23. SET DEVICE

4. CASE	24. SET FIXED

5. CLOSE	25. SET DELETED

6. CLEAR TYPEAHEAD	26. SET KEY

7. DECLARE	27. SAY

8. DELETE	28. SET MICROTERMINAL

9. DO	29. SET SERIAL

10. EXIT	30. SET TYPEAHEAD

11. FOR	31. SET SOFTSEEK

12. GET	32. SET CURSOR

13. GO/GO TO	33. SET DECIMALS

14. IF	34. SAVE SCREEN TO

15. LOOP	35. SKIP

16. NOTE	36. SEEK

17. PROCEDURE	37. UNLOCK

18. QUIT	38. USE

19. RECALL	39. WAIT

20. REPLACE	40. WHILE


SAY

SINTAXE:       @ <linha,coluna> SAY <expr>

DESCRIÇÃO: Exibe o conteúdo de uma variável ou constante em uma das saídas do microterminal: display, porta serial secundária, ou ainda,  impressora da rede de microterminais.

Para facilitar a formatação das telas no display dos microterminais as instruções SAY, envolvendo variáveis numéricas, terão seus conteúdos alinhados pela esquerda. Para maior flexibilidade na apresentação de variáveis numéricas, converta o valor para caracteres com auxílio da função STR.

Não é permitido o uso de campos de registros nas instruções SAY. Para apresentação de um campo, deve-se antes atribuí-lo a uma variável.

EXEMPLOS:

Escrita simples no visor @ 1,1 SAY “DIGITE O CODIGO:”  @ 2,1 SAY “   >      <     “	Escrita de uma variável numérica @ 1,1 SAY “CONTEÚDO DE A:  “ @ 2,1 SAY a
Escrita de uma variável caracter a=10 b=”” @ 1,1 SAY “CONTEÚDO DE A:  “  b=STR(a,3,0) @ 2,1 SAY b	Escrita do conteúdo de um campo de registro a = campo @ 1,1 SAY a

VEJA TAMBÉM: SET DEVICE, SELECTPRN, GET.


FOR

SINTAXE:	FOR <var>=<inicio> TO <fim> STEP <incremento>

<comando(s)>

NEXT

DESCRIÇÃO: Repete um bloco de programa n vezes. O comando STEP é opcional, sendo seu default 1.

EXEMPLO:

I=0

FOR I=1 TO 1000 STEP 2

@ 1,1 SAY I

NEXT

RETURN

VEJA TAMBÉM: DO, CASE, WHILE.


IF

SINTAXE:	IF <cond>

<comando1>

ELSE

<comando2>

ENDIF

DESCRIÇÃO: Desvio condicional de programa, se a condição testada for verdadeira o comando1 será executado, caso contrário (condição for falsa) o comando2 será executado.

O ELSE é opcional nesta estrutura. Além disso, a instrução suporta o teste de duas condições através dos operadores lógicos OR(ou) e AND(e). Sendo importante observar que as condições testadas não podem conter uma atribuição com mais de uma operação, por exemplo: A > (B + C).

Também é suportado o teste direto das funções: BOF, EOF, DELETED, EMPTY, FOUND, NETERR, FERROR, RLOCK, FLOCK, SELECTPRN.

EXEMPLOS:

IF cmd = "C"       @ 1,1 SAY "O comando    foi"       @ 2,1 SAY "    recebido    " ENDIF
IF EMPTY(var) = .T.       COMANDO1 ELSE       COMANDO2 ENDIF	IF teste = .t. .and. blidos = 0       @ 1,1 SAY " Rede Inativa ! "       @ 2,1 SAY "     aguarde... " ENDIF

VEJA TAMBÉM: CASE, WHILE.


GET

SINTAXE:       @ <linha,coluna> GET <expr>

DESCRIÇÃO: Esta instrução permite a entrada de dados através de 3 dispositivos de forma indiscriminada: teclado, slot reader ou caneta ótica.

Considerando as limitações de linhas no display dos microterminais, a instrução READ torna-se desnecessária. Assim as instruções GET são executadas no instante em que são lidas pelo processador.  Para finalizar um GET, basta digitar um [ENTER], ou [CLEAR] na primeira posição de digitação.

Para simplificar as aplicações foi implementado, nas instruções GET, o rolamento (scroll) horizontal automático. Isto significa que, após completar a digitação do número de dígitos aguardados, todos os demais serão rolados até a digitação da tecla [ENTER], ou [CLEAR].

As operações de leitura de variáveis do tipo caracter obedecem ao número de dígitos declarados para a variável no instante do GET.

EXEMPLOS:

Exemplo de GET com variável do tipo caracter

A = space(3)

@ 1,1 GET A

OBS: Aceitará a digitação de apenas 3 dígitos. Um quarto dígito provocaria um scroll horizontal, perdendo-se o primeiro dígito.

Exemplo de GET com variável do tipo numérica

FORMA RECOMENDADA  A=”  “ @ 1,1 SAY “DIGITE SUA IDADE”  @ 2,1 SAY “    >  <        “  @ 2,6 GET A IDADE=VAL(A)	FORMA NÃO RECOMENDADA  A = 0 @ 1,1 SAY “DIGITE SUA IDADE”  @ 2,1 GET A

VEJA TAMBÉM: VAL, STR.


APPEND BLANK

SINTAXE:       APPEND BLANK

DESCRIÇÃO: Insere um registro em branco no final do arquivo corrente.

EXEMPLOS:

FORMA RECOMENDADA  teste=10  APPEND BLANK REPLACE campo1 WITH teste	FORMA NÃO RECOMENDADA  APPEND BLANK teste=10  REPLACE campo1 WITH teste

VEJA TAMBÉM: USE, SET INDEX.


CLEAR TYPEAHEAD

SINTAXE:       CLEAR TYPEAHEAD

DESCRIÇÃO: Limpa o buffer de teclado completamente.

EXEMPLO:

cracha=SPACE(12)

CLEAR TYPEAHEAD

@ 1,1 SAY "Passe o Cartao> "

@ 2,1 GET cracha

VEJA TAMBÉM: SET TYPEAHEAD


CLOSE

SINTAXE:       CLOSE

DESCRIÇÃO: Fecha o arquivo aberto através do comando USE, .descarregando os buffers de dados no arquivo físico em disco.

EXEMPLO:

USE TESTE

SET INDEX TO TESTE

nome =”PASSO”

SEEK(nome)

T=FOUND()

IF T=.T.

      @ 1,1 SAY “   ACHEI !!!   “

ENDIF

CLOSE

VEJA TAMBÉM: USE, SET INDEX.


DELETE

SINTAXE:       DELETE

DESCRIÇÃO: Marca o registro corrente como eliminado (deleção lógica).

EXEMPLO:

USE pedido INDEX teste

SEEK cod

IF FOUND() = .T.

      DELETE

ENDIF

VEJA TAMBÉM: USE, SET INDEX, SET DELETED.


DO

SINTAXE:       DO <nome da procedure>

DESCRIÇÃO: Chamada para execução de uma rotina PROCEDURE. O UACLIP não prevê a passagem de parâmetros para rotinas. No entanto como todas as variáveis são globais, utiliza-se variáveis para esta finalidade.

EXEMPLO:

a=10

b=20

DO Media

...

QUIT

PROCEDURE Media

* Cálculo da média ponderada

      x=a*7

      y=b*3

      z=x+y

      z=z/10

RETURN

VEJA TAMBÉM: PROCEDURE, SET KEY.


CASE

SINTAXE:	DO CASE

CASE <cond1>

<comando1>

...

CASE <cond n>

<comando n >

OTHERWISE

<comando>

ENDIF

DESCRIÇÃO: Monta uma estrutura CASE, conforme padrão. Testa uma seqüência de condições, caso uma delas for verificada executa-se o comando ou bloco de comandos correspondente. O comando OTHERWISE é executado se não houver nenhuma condição verdadeira.

O OTHERWISE é opcional nesta estrutura. Além disso, a instrução suporta o teste de duas condições através dos operadores lógicos OR(ou) e AND(e). Sendo importante observar que as condições testadas não podem conter uma atribuição com mais de uma operação, por exemplo: A > (B + C).

EXEMPLO:

DO CASE

case peso=0

      peso_ini="11111111"

case peso=1

      peso_ini="22222222"

OTHERWISE

      peso_ini="00000001"

ENDCASE

VEJA TAMBÉM: DO, WHILE.


WHILE

SINTAXE:	DO WHILE <cond>

<comando(s)>

ENDDO

DESCRIÇÃO: Realiza um laço de programa enquanto a condição for verdadeira.

EXEMPLO:

B=.T.

DO WHILE B=.T.

      A=A+10

      IF A>1000

            B=.F.

      ENDIF

ENDDO

VEJA TAMBÉM: DO.


EXIT

SINTAXE:	EXIT

DESCRIÇÃO: Interrompe um laço do tipo WHILE ou FOR, passando o controle do programa para a primeira instrução fora do laço.

EXEMPLO:

DO WHILE T=.T.

      A=A+10

      IF A>1000

            EXIT

      ENDIF

ENDDO

VEJA TAMBÉM: QUIT, LOOP.


goto
GO/GOTO

SINTAXE:	GOTO <registro>

GO <TOP/BOTTOM>

DESCRIÇÃO: Desloca o apontador de registro para o registro apontado pela instrução.

GO TOP - Desloca o apontador de registro para o primeiro registro do arquivo em uso.

GO BOTTOM - Desloca o apontador de registro para o último registro do arquivo em uso.

EXEMPLO:

********************************

PROCEDURE COMUNICA

********************************

hi=0

ha=0

his="   "

USE CONTADOR.DBF

FOR hi=1 TO 50

ha=RECCOUNT()

IF ha<100

APPEND BLANK

ENDIF

his=STR(hi,3,0)

GOTO hi

REPLACE PLACA WITH his

IF NETERR()=.T.

@ 1,1 SAY "** NET ERROR! **"

@ 2,1 SAY "** NET ERROR! **"

WAIT

EXIT        && sai do FOR

ENDIF

his=PLACA

@ 2,13 SAY his

NEXT

CLOSE

RETURN

**************************************************************

VEJA TAMBÉM: USE.


LOOP

SINTAXE:	LOOP

DESCRIÇÃO: Retorna o controle de execução de programa para o início da instrução DO WHILE, sem executar as demais instruções.

EXEMPLO:

DO WHILE T=.T.

      @ 1,1 SAY “DIGITE O CODIGO”

      @ 2,1 SAY “>             <”

      @ 2,2 GET codigo

      flag=EMPTY(codigo)

      IF flag=.t.

            LOOP

      ENDIF

ENDDO

VEJA TAMBÉM: QUIT, EXIT.


NOTE

SINTAXE:	NOTE <comentário>

DESCRIÇÃO: Permite a inclusão de um comentário na linha. Só pode ser utilizada no início de uma linha. Para acrescentar um comentário à direita de uma linha de comando utilize &&.

EXEMPLO:

NOTE Atribuição de variável

a=10

VEJA TAMBÉM: *, &&


PROCEDURE

SINTAXE:	PROCEDURE <nome>

<bloco de comandos>

RETURN

DESCRIÇÃO: Define uma rotina. No UACLIP as procedures devem ser colocadas no fim do programa, após a instrução QUIT.

EXEMPLO:

a = 10

b = 20

DO Med_Ponder

......

QUIT

PROCEDURE Med_Ponder

      * Cálculo da média ponderada

      x = a*7

      y = b*3

      z = x+y

      z = z/10

RETURN

VEJA TAMBÉM: DO, SET KEY.


QUIT

SINTAXE:	QUIT

DESCRIÇÃO: Instrução obrigatória para indicação de final de programa.

VEJA TAMBÉM: PROCEDURE, EXIT.


RECALL

SINTAXE:	RECALL

DESCRIÇÃO: Recupera os registros assinalados para eliminação pelo DELETE.

EXEMPLO:

************************************

PROCEDURE gravalog

************************************

pessoa_d = -1

USE logdia

SET INDEX TO indlcp

v_data = DATE()

SEEK pessoa_d

achou = FOUND()

IF achou = .T.

      RECALL

      REPLACE hora WITH v_hora

      REPLACE pessoa WITH v_pessoa

      REPLACE data WITH v_data

ELSE

      APPEND BLANK

      REPLACE hora WITH v_hora

      REPLACE pessoa WITH v_pessoa

      REPLACE data   WITH v_data

ENDIF

CLOSE

RETURN

****************************************************

VEJA TAMBÉM: USE, DELETE.


REPLACE

SINTAXE:	REPLACE <campo> WITH <var>

DESCRIÇÃO: Substitui o conteúdo de um campo pelo da variável indicada. Deve ser utilizada para apenas um campo de cada vez. Para agilizar o tempo de atualização dos campos de um registro, deve-se sempre que possível, utilizar todas as instruções REPLACE em seqüência. Ou seja, sem que sejam intercaladas por outras instruções ou funções.

EXEMPLO:

FORMA RECOMENDADA  ( será executada em uma única comunicação ) var1=1 var2=2 var3=3 var4=4 REPLACE campo1 WITH var1 REPLACE campo2 WITH var2 REPLACE campo3 WITH var3 REPLACE campo4 WITH var4	FORMA NÃO RECOMENDADA  (necessitará executar quatro comunicações) var1=1 REPLACE campo1 WITH var1 var2=2 REPLACE campo2 WITH var2 var3=3 REPLACE campo3 WITH var3 var4=4 REPLACE campo4 WITH var4
VEJA TAMBÉM: USE, DELETE, APPEND BLANK.


RESTORE SCREEN FROM

SINTAXE:	RESTORE SCREEN FROM <var>

DESCRIÇÃO: Apresenta novamente a tela armazenada na variável indicada, previamente salva pela instrução SAVE SCREEN TO.

EXEMPLO:

visor="               "

...

PROCEDURE  MENSAGEM

      SAVE SCREEN TO visor

      @ 1,1 SAY linha1

      @ 2,1 SAY linha2

      INKEY(0)

      RESTORE SCREEN FROM visor

RETURN

VEJA TAMBÉM: SAVE SCREEN TO.


SAVE SCREEN TO

SINTAXE:	SAVE SCREEN TO <var>

DESCRIÇÃO: Salva a tela atual em uma variável caracter indicada.

EXEMPLO:

visor="               "

...

PROCEDURE  MENSAGEM

      SAVE SCREEN TO visor

      @ 1,1 SAY linha1

      @ 2,1 SAY linha2

      INKEY(0)

      RESTORE SCREEN FROM visor

RETURN

VEJA TAMBÉM: RESTORE SCREEN FROM.


SEEK

SINTAXE:	SEEK <var>

DESCRIÇÃO: Pesquisa registro conforme arquivo de dados e índice abertos, posicionando no primeiro registro cuja chave de índice satisfaça a expressão.

EXEMPLO:

a = ”FULANO DE TAL”

SEEK a

T = FOUND()

IF T=.F.

@ 1,1 SAY “NÃO CADASTRADO  “

@ 2,1 SAY “   tecle algo...”

WAIT

ENDIF

VEJA TAMBÉM: USE, SET INDEX e SET SOFTSEEK.


SET CURSOR

SINTAXE:	SET CURSOR <ON/OFF>

DESCRIÇÃO: Liga/Desliga cursor durante a execução de uma instrução GET. O defaul to microterminal é o cursor ligado (ON).

EXEMPLO:

PROCEDURE Rot_Pedido

      num_ped="    "

     SET CURSOR ON

     @ 1,1 SAY "TECLE NUM.PEDIDO"

     @ 2,1 SAY "     >    <     "

     @ 2,7 GET num_ped

     SET CURSOR OFF

RETURN

VEJA TAMBÉM: GET.


SET DECIMALS

SINTAXE:	SET DECIMALS TO <num>

DESCRIÇÃO: Define o número de casas decimais nas variáveis numéricas. Só é valida se a instrução SET FIXED estiver habilitada, ou seja, no estado (ON). Esta instrução só será válida nas operações matemáticas e atribuições a serem executadas.

EXEMPLO:

SET FIXED ON

SET DECIMALS TO 2

a = 1

b = 1

c = a*b

@ 1,1 SAY c

O resultado desta operação será 1.00

VEJA TAMBÉM: SET FIXED.


SET DEVICE

SINTAXE:	SET DEVICE TO <SCREEN/PRINT>

DESCRIÇÃO: Define que a saída das instruções SAY, habilitando sua apresentação no display ou em uma impressora conectada a porta serial secundária do microterminal, ou setada pela função SELECTPRN. A habilitação da instrução SAY para saída secundária também é utilizada no caso de comunicação com outros dispositivos periféricos como scanners, balanças, etc.

A regra para o posicionamento da cabeça de impressão nas linhas é a seguinte:

- Se o número da linha for igual a 1 a impressão será realizada na linha corrente;

- Se for maior que 1, n por exemplo, então a impressão será n-1 linhas da linha atual.

- O número de colunas deverá ser menor ou igual ao número de colunas da impressora em uso (48, 80, 132, etc.).

EXEMPLO:

Exemplo impressora na rede: IF T = SELECTPRN( LPT1 )       SET DEVICE TO PRINT              @ 2,1 SAY “DESCR.  QUANT. P.U.”       @ 2,1 SAY prod_01       @ 1,19 SAY quant_01       @ 1,28 SAY pre_01 :       SET DEVICE TO SCREEN  ENDIF	Exemplo de envio para serial secundária: SET DEVICE TO PRINT @ 1,1 say " " * Caracter ENQ 04H @ 1,1 say enq pesoteste=GETSERIAL() SET DEVICE TO SCREEN   resp=SUBSTR(pesoteste,25,7)

VEJA TAMBÉM: SELECTPRN, GETSERIAL.


SET FIXED

SINTAXE:	SET FIXED <ON/OFF>

DESCRIÇÃO: Faz com que seja ativada a instrução SET DECIMALS. Se SET FIXED estiver OFF, então as operações matemáticas e atribuições simples terão resultados com o mesmo número de casas decimais do operando de maior número de casas decimais, limitado a 3. O valor defaul desta operação é OFF.

EXEMPLO:

SET DECIMALS TO 2

SET FIXED ON

A=10

B=10

C=A*B         && O resultado será C=100.00

SET FIXED OFF

A=10

B=10.1

C=A*B         && O resultado será C=101.0

VEJA TAMBÉM: SET DECIMALS, SAYSERIAL.


SET DELETED

SINTAXE:	SET DELETED <ON/OFF>

DESCRIÇÃO: O comando SET DELETED determina se os registros marcados pelo comando DELETE serão (ON), ou não (OFF), ignorados no processamento do sistema. Default OFF.

EXEMPLO:

SET DELETED ON

SEEK codigo

IF FOUND()=.F.

      @ 1,1 SAY “CODIGO  INEXISTE”

      WAIT

ELSE

      desc = descricao

      @ 2,1 SAY desc

ENDIF

VEJA TAMBÉM: DELETED, DELETE.


SET INDEX

SINTAXE:	SET INDEX TO <nome_arquivo>

DESCRIÇÃO: Seleciona o arquivo de índices a ser utilizado com o arquivo de dados em uso. Esta instrução será executada mais rapidamente se for programada logo após a instrução USE.

EXEMPLO:

FORMA RECOMENDADA a=10 USE Cadastro SET INDEX TO Codigo	FORMA NÃO RECOMENDADA USE Cadastro a=10 SET INDEX TO Codigo

VEJA TAMBÉM: SEEK, SET SOFTSEEK, USE.


SET KEY

SINTAXE:	SET KEY <expr> TO <procedure>

DESCRIÇÃO: Habilita uma das teclas funcionais do microterminal. Quando digitada a tecla funcional habilitada, será executada a rotina PROCEDURE definida nesta instrução.

Atenção: As teclas funcionais só serão lidas quando o microterminal estiver em estado de leitura de teclado. Instrução GET ou função INKEY.

Para função F1,  SET KEY  -1  TO  Procedure

Para função F2,  SET KEY  -2  TO  Procedure

Para função F3,  SET KEY  -3  TO  Procedure

A tecla funcional pode ser desabilitada omitindo-se o nome da procedure.

A instrução SET KEY pode ser usada também como um TIMER programável para executar uma PROCEDURE específica como mostra o exemplo. Neste caso o T pode variar de 0 a 99, onde o valor máximo, ou seja, 99 refere-se a 9,9 segundos.

EXEMPLOS:

* Solicita a escolha de uma opção SET KEY -1 TO Opcoes opcao =” “ @ 1,1 SAY “ESCOLHA OPCAO?” @ 2,1 SAY “> <  F1 ajuda...” @ 2,2 GET opcao SET KEY -1 TO               && Desabilita a função                     : QUIT PROCEDURE Opcoes SAVE SCREEN TO visor @ 1,1 SAY “1-Entr. 2-Interv” @ 2,1 SAY “3-Saida 4-Nenhum” INKEY(0) RESTORE SCREEN FROM visor RETURN	Exemplo de uso do SET KEY com Timer de execução: cracha=SPACE(12) SET KEY T(10) to Int_tempo SET KEY -1 to tipotela @ 3,1 GET cracha SET KEY -1 to
VEJA TAMBÉM: DO.


SET MICROTERMINAL

SINTAXE:	SET MICROTERMINAL TO <LOCAL/CLP>

DESCRIÇÃO: Se o microterminal estiver setado como CLP fica habilitado para trabalhar como MCP-100, ou seja, como um microcontrolador programável. No caso de estar setado como LOCAL (default) opera no modo padrão TR-100.

EXEMPLO:

set microterminal to clp

set serial to catraca

DO WHILE t=.t.

   C1=SPACE(16)

   set cursor on

   @ 1,1  SAY " Acesso Liberado"

   @ 2,1  SAY " Empurre a Porta"

   sai(15,.T.)

   atusai()

   for i=1 to 50

   NEXT

   sai(15,.F.)

   atusai()

   @ 1,1  SAY "  Porta Fechada "

   @ 2,1  SAY "  Aguarde ...   "

   for i=1 to 2

   NEXT

ENDDO

VEJA TAMBÉM: ENT, ATUENT, SAI, ATUSAI.


SET SERIAL

SINTAXE:	SET SERIAL TO <CLP/CATRACA>

DESCRIÇÃO: Quando setado para CLP permite controlar um dispositivo de acionamento de entradas e saídas conectado à porta serial secundária do microterminal. Este dispositivo possui 2 entradas e 2 saídas e é normalmente utilizado para controle de acesso, interligado a portas ou catracas (roleta). Pode ser utilizado para comandar outros dispositivos, tais como, campainhas, lâmpadas, etc. No desenvolvimento de aplicações para catracas programáveis deve-se usar o set serial to catraca.

EXEMPLO:

set microterminal to clp

set serial to catraca

DO WHILE t=.t.

   C1=SPACE(16)

   set cursor on

   @ 1,1  SAY " Acesso Liberado"

   @ 2,1  SAY " Empurre a Porta"

   sai(15,.T.)

   atusai()

   for i=1 to 50

   NEXT

   sai(15,.F.)

   atusai()

   @ 1,1  SAY "  Porta Fechada "

   @ 2,1  SAY "  Aguarde ...   "

   for i=1 to 2

   NEXT

ENDDO

VEJA TAMBÉM: ENT, ATUENT, SAI, ATUSAI.


SET SOFTSEEK

SINTAXE:	SET SOFTSEEK <ON/OFF>

DESCRIÇÃO: Permite que a pesquisa realizada pela instrução SEEK seja feita através de uma sub-cadeia.

EXEMPLO:

SET SOFTSEEK ON

SEEK vtnome

VEJA TAMBÉM: USE, SET INDEX, SEEK.


SET TYPEAHEAD

SINTAXE:	SET TYPEAHEAD TO <tamanho>

DESCRIÇÃO: Define o tamanho do buffer de teclado. O tamanho default do buffer de teclado é de 5 caracteres, e seu tamanho máximo programável é de 15 caracteres. Qualquer valor maior do que 15, será interpretado como 15.

EXEMPLO:

SET TYPEAHEAD TO 10

VEJA TAMBÉM: CLEAR TYPEAHEAD.


SKIP

SINTAXE:	SKIP <n>

DESCRIÇÃO: Pula n registros conforme seqüência do arquivo de índice ou (caso não haja arquivo de índices habilitado) conforme posição no arquivo de dados.

EXEMPLO:

PROCEDURE Deletar

USE venda INDEX venda

SEEK nromesa

achou = FOUND()

IF achou = .t.

    j = space(3)

    j = nromesa

   DO WHILE j = nromesa

        DELETE

        SKIP

        j = mesa

   ENDDO

ENDIF

RETURN

VEJA TAMBÉM: GOTO, USE.


UNLOCK

SINTAXE:	UNLOCK

DESCRIÇÃO: Cancela o bloqueio de acesso a um arquivo ou registro gerado pela função RLOCK ou FLOCK. É utilizada para garantir a exclusividade de acesso a arquivos compartilhados por outros microterminais.

EXEMPLO:

USE Pedido

SET INDEX TO Pedido

APPEND BLANK

REPLACE codigo WITH codi

REPLACE quantidad WITH val_quant

REPLACE pedido WITH num_ped

UNLOCK

VEJA TAMBÉM: RLOCK, FLOCK.


USE

SINTAXE:	USE <nome_arquivo> INDEX <arquivo indice>

DESCRIÇÃO: Abre um arquivo de dados para uso do microterminal. A instrução USE permite o complemento INDEX para arquivos de dados que operem com arquivo de índice. Nestes casos recomendamos esta opção em vez da instrução SET INDEX, por ser mais rapidamente executada, otimizando o aplicativo.

EXEMPLO:

USE ESTOQUE INDEX ESTO_IND

equivale a:

USE ESTOQUE.DBF  INDEX ESTO_IND.NTX

VEJA TAMBÉM: SET INDEX.


WAIT

SINTAXE:	WAIT

DESCRIÇÃO: Faz uma pausa até que seja digitada uma tecla.

EXEMPLO:

@ 1,1 SAY  "Digite uma tecla"

@ 2,1 SAY " Aguardando...   "

WAIT

VEJA TAMBÉM: INKEY.


DECLARE

SINTAXE:	DECLARE Nome_Vetor (Num_Elementos, Tam_Elemento)

DESCRIÇÃO: Cria um vetor de variáveis tipo caracter indexadas. Seu número de elementos pode ser de até 250, e o tamanho de cada elemento até 254.

EXEMPLO:

DECLARE  MATRIZ( 100, 25 )  	&& declara 100 elementos de 25 posições

i=0

for i = 1 to 100

matriz [i] = “abcdefghijklmnoprstuvwxyz”

next

VEJA TAMBÉM: GET, SAY.


&&

SINTAXE:	&& <comentário>

DESCRIÇÃO: Permite a inclusão de um comentário à direita de uma linha de comando.

EXEMPLO:

A=10    && atribui a variável A o valor 10.

VEJA TAMBÉM: NOTE, *.


aa
*

SINTAXE:	* <comentário>

DESCRIÇÃO: Permite a inclusão de um comentário na linha. Só pode ser utilizada no início de uma linha sem nenhum comando precedente.

EXEMPLO:

* Atribuição de variável

a = 10

VEJA TAMBÉM: NOTE, &&.


funções
Funções do Uaclip

1. ATUENT	21. FWRITE

2. ATUSAI 	22. GETSERIAL

3. BOF 	23. INKEY

4. CALCDV 	24. LEN

5. CHR 	25. NETERR

6. CTOD 	26. RECCOUNT

7. DATE 	27. RECNO

8. DELETED 	28. RLOCK

9. DTOC 	29. SAI

10. EMPTY 	30. SAYSERIAL

11. ENT 	31. SELECTPRN

12. EOF 	32. SETDV

13. FCLOSE 	33. SETSERIAL

14. FERROR 	34. SPACE

15. FLOCK 	35. SUBSTR

16. FOUND 	36. STR

17. FOPEN 	37. TERMINAL

18. FREAD 	38. TIME

19. FREADSTR 	39. VAL

20. FSEEK 	40. ASC


ATUENT

SINTAXE:	ATUENT()

DESCRIÇÃO: Permite a leitura de entradas digitais, transportando os estados lógicos respectivos para ENT.

EXEMPLO:

SET MICROTERMINAL TO CLP

A = .T.

E01=.F.

E02=.F.

DO WHILE A = .T.

     ATUENT() 	 && Atualiza (lê) as entradas

     E01=ENT(21)

     && Atribui o estado da Entrada 01 a E01

     E02=ENT(22)

     SAI(11,.F.)  	   	 && Inicializa a saída 01 com .F.

     SAI(12,.F.)	 && Inicializa a saída 02 com .F.

     IF E01=.T.     	 && Se E01 ligada, aciona saída 01

          SAI(11,.T.)

     ENDIF

     IF E02=.T.    	 && Se E02 ligada, aciona saída 02

          SAI(12,.T.)

     ENDIF

     ATUSAI()	&& Atualiza  as saídas

ENDDO

VEJA TAMBÉM: ATUSAI, ENT, SAI, SET SERIAL, SET MICROTERMINAL.


ATUSAI

SINTAXE:	ATUSAI()

DESCRIÇÃO: Permite o acionamento das saídas digitais, conforme seus respectivos estados lógicos definidos por SAI.

EXEMPLO:

SET SERIAL TO CATRACA

@ 1,1 say "ACESSO LIBERADO "

@ 2,1 say "ENTRADA ou SAIDA"

SAI(11,.T.)

SAI(12,.T.)

SAI(13,.T.)

ATUSAI()

girou=.f.

FOR i=1 to 100

E01=ENT(21)

IF E01=.t.

@ 1,1 say "Catraca Girou   "

@ 2,1 SAY " p/ saida    ..."

girou=.t.

EXIT

ENDIF

E02=ENT(22)

IF E02=.t.

@ 1,1 say "Catraca Girou   "

@ 2,1 SAY " p/ entrada  ..."

girou=.t.

EXIT

ENDIF

NEXT

* trava imediatamente a catraca

SAI(12,.f.)

SAI(11,.f.)

SAI(13,.f.)

ATUSAI()

VEJA TAMBÉM: ATUENT, ENT, SAI, SET SERIAL, SET MICROTERMINAL.


BOF

SINTAXE:	BOF()

DESCRIÇÃO: Retorna verdadeiro (.T.) se o apontador de registro estiver apontando para o primeiro registro do arquivo e falso (.F.) caso contrário.

EXEMPLO:

A=BOF()

IF A=.T.

@ 1,1 SAY “ INICIO ARQUIVO “

WAIT

ENDIF

VEJA TAMBÉM: EOF.


CALCDV

SINTAXE:	CALCDV(<num_digitos>,<var_código>)

DESCRIÇÃO: Calcula dígito verificador conforme parâmetros especificados na função SETDV. Esta função tem maior aplicação na leitura de código de barras e cartões magnéticos. Para utiliza-la deve-se definir o número de dígitos do código e a variável que contém o código, sendo esta do tipo caracter. A função devolve para uma variável lógica verdadeiro (.T.) se o cálculo do digito verificador estiver correto e falso (.F.) caso contrário.

EXEMPLO:

flag=.t.

SETDV(1,11,1,0,10,11,255,0,1,0,11,0,2,3,4,5,6,7,8,9,10,11)

t = .t.

cod=0

x = 0

DO WHILE t=.t.

MAT = “     “

@ 1,1 SAY “ PASSE O CARTAO “

@ 2,1 SAY “>              <”

@ 2,6 GET MAT

cod = VAL(mat)

mat = STR(cod,5,0)

flag = CALCDV(5,mat)

@ 1,1 SAY “     ACESSO      “

IF flag = .f.

@ 2,1 SAY “    BLOQUEADO    “

ELSE

@ 2,1 SAY “    LIBERADO     “

ENDIF

WAIT

ENDDO

VEJA TAMBÉM: SETDV.


CHR

SINTAXE:	CHR(<código>)

DESCRIÇÃO: Retorna o caracter ASCII equivalente ao código definido pelo número indicado. O compilador UACLIP admite esta função em dois casos. Em atribuições simples a variável do tipo caracter, ou combinado com instrução SAY.

EXEMPLO:

Atribuição simples: a=CHR(10)	Configura impressora Epson para imprimir no modo Negrito: SET DEVICE TO PRINT @ 1,1 SAY CHR(27) @ 1,1 SAY “E” @ 1,1 SAY “TESTE DE IMPRESSÃO” @ 2,1 SAY “   MODO NEGRITO”
VEJA TAMBÉM: ASC.


CTOD

SINTAXE:	CTOD(<var_caracter>)

DESCRIÇÃO: Converte uma constante ou variável tipo caracter para data. Esta função só é permitida se a variável de destino for previamente declarada como sendo do tipo data, através da função DATE.

EXEMPLO:

data=DATE()

data_old=”12/12/1993”

data=CTOD(data_old)

VEJA TAMBÉM: DATE.


DATE

SINTAXE:	DATE()

DESCRIÇÃO: Informa a data corrente do sistema. Também deve ser utilizada para declarar variáveis do tipo data.

EXEMPLO:

data=DATE()

data_car=DTOC(data)

@ 1,1 SAY “DATA DO SISTEMA”

@ 2,1 SAY data_car

VEJA TAMBÉM: DTOC, CTOD.


DELETED

SINTAXE:	DELETED()

DESCRIÇÃO: Indica se o registro atual está deletado (.T.), ou não (.F).

EXEMPLO:

PROCEDURE procura_cod

USE CODIGO

SET INDEX TO INDCCB

SEEK vn_codbar

flag=FOUND()

IF flag=.F.

@ 1,1 SAY "CODIGO INEXISTE"

v_tipo=3

ELSE

deletado=DELETED()

IF deletado=.T.

flag=.f.

@ 1,1 SAY "CODIGO INEXISTE"

v_tipo=3

ENDIF

ENDIF

v_valido   = valido

v_pessoa   = pessoa

v_codbar   = codbar

RETURN

VEJA TAMBÉM: DELETE, SET DELETED.


DTOC

SINTAXE:	DTOC(<data>)

DESCRIÇÃO: Converte uma variável do tipo data em uma do tipo caracter. No microterminal a instrução SAY, quando realizada com uma data, não realiza a conversão automática para o formato DD/MM/AAAA. Dessa forma, recomendamos o uso da função DTOC combinado com a SAY conforme o exemplo abaixo.

EXEMPLO:

dia = space(10)

data   = DATE()

dia = DTOC( data )

@ 1,1 say dia

VEJA TAMBÉM: CTOD, TIME.


EMPTY

SINTAXE:	EMPTY(<var>)

DESCRIÇÃO: Indica se a variável do tipo caracter apresentada está vazia.

EXEMPLO:

a=.t.

DO WHILE a=.t.

codigo=”    “

@ 1,1 SAY “DIGITE O CODIGO”

@ 2,1 SAY “     >    <    “

@ 2,1 GET codigo

t=EMPTY(codigo)

IF t=.t.

LOOP

ENDIF

                    :

ENDDO

VEJA TAMBÉM: GET.


ENT

SINTAXE:	ENT(<num>)

DESCRIÇÃO: Indica o estado lógico das entradas.

Se a serial secundária está configurada como CLP, isto é, SET SERIAL TO CLP, os valores válidos para o comando ENT são: 21 e 22. Este comando torna-se válido após a execução da instrução ATUENT.

Se a serial secundária está configurada como CATRACA, isto é, SET SERIAL TO CATRACA, os valores válidos para o comando ENT são: 21, 22, 23 e 24. Este comando torna-se válido após a execução da instrução ATUENT.

EXEMPLO:

SET MICROTERMINAL TO CLP

A = .T.

E01=.F.

E02=.F.

DO WHILE A = .T.

     ATUENT() 	 && Atualiza (lê) as entradas

     E01=ENT(21)

     && Atribui o estado da Entrada 01 a E01

     E02=ENT(22)

     SAI(11,.F.)  	   	 && Inicializa a saída 01 com .F.

     SAI(12,.F.)	 && Inicializa a saída 02 com .F.

     IF E01=.T.     	 && Se E01 ligada, aciona saída 01

          SAI(11,.T.)

     ENDIF

     IF E02=.T.    	 && Se E02 ligada, aciona saída 02

          SAI(12,.T.)

     ENDIF

     ATUSAI()	&& Atualiza  as saídas

ENDDO

VEJA TAMBÉM: ATUENT, ATUSAI, ENT, SAI, SET SERIAL, SET MICROTERMINAL.


EOF

SINTAXE:	EOF()

DESCRIÇÃO: Retorna verdadeiro (.T.) se o apontador de registro estiver apontando para além do último registro do arquivo e, falso (.F.) caso contrário.

EXEMPLO:

IF A=.T.

@ 1,1 SAY “FINAL ARQUIVO”

WAIT A=EOF()

ENDIF

VEJA TAMBÉM: BOF.


FCLOSE

SINTAXE:	FCLOSE(<handle>)

DESCRIÇÃO: Fecha um arquivo ASCII aberto anteriormente pela função FOPEN.

EXEMPLO:

@ 1,1 SAY “passe seu cartao”

@ 2,5 GET codigo

@ 1,1 SAY “      aguarde...”

data=DATE()

data1=DTOC(data)

hora=TIME()

arquivo=0

s=codigo

s=s+”,”

s=s+data1

s=s+”,”

s=s+hora

arquivo=FOPEN(“movimen.txt”)

erro=FERROR()

IF erro = 0

     FSEEK(arquivo,0,2)

     FWRITE(arquivo,s,33)

     FCLOSE(arquivo)

ELSE

     @ 1,1 SAY “Ocorreu um erro ”

     @ 2,1 SAY “na abertura arq.  ”

ENDIF

VEJA TAMBÉM: FOPEN, FREAD, FREADSTR, FWRITE, FERROR e FSEEK.


FERROR

SINTAXE:	FERROR()

DESCRIÇÃO: Informa se a última operação realizada com arquivo ASCII teve êxito ou não.

EXEMPLO:

arquivo=FOPEN(“movimen.txt”)

erro=FERROR()

IF erro = 0

     FSEEK(arquivo,0,2)

     FWRITE(arquivo,s,33)

     FCLOSE(arquivo)

ELSE

     @ 1,1 SAY “Ocorreu um erro ”

     @ 2,1 SAY “na abertura arq.  ”

ENDIF

VEJA TAMBÉM: FOPEN, FREAD, FREADSTR, FWRITE, FCLOSE e FSEEK.


FLOCK

SINTAXE:	FLOCK()

DESCRIÇÃO: Bloqueia o arquivo para uso exclusivo do microterminal.

EXEMPLO:

PROCEDURE Adi_Reg

DO WHILE t=.T.

     flag = FLOCK()

     IF flag=.T.

          APPEND BLANK

          DO DELAY

          EXIT

     ELSE

          DO DELAY

     ENDIF

     flag=.F.

ENDDO

RETURN

VEJA TAMBÉM: RLOCK.


FOUND

SINTAXE:	FOUND()

DESCRIÇÃO: Informa se a última instrução SEEK executada encontrou o registro pesquisado.

EXEMPLO:

* PESQUISA CODIGO

SEEK codigo

flag=FOUND()

IF flag=.F.

     @ 1,1 SAY “CODIGO  INEXISTE”

     WAIT

ENDIF

desc=descricao

@ 1,1 SAY desc

VEJA TAMBÉM: SEEK, USE.


FOPEN

SINTAXE:	<Handle> = FOPEN(<nome_arquivo>)

DESCRIÇÃO: Abre um arquivo ASCII.

EXEMPLO:

* ESCRITA EM ARQUIVO ASCII

cr=CHR(13)

lf=CHR(10)

crlf=cr+lf

arquivo=FOPEN(“NOME.TXT”)

FSEEK(arquivo,0,2)

@ 2,1 SAY “   >       <    “

 codigo=”       “

@ 1,1 SAY “Passe seu cartao”

@ 2,5 GET codigo

@ 1,1 SAY “      aguarde...”

s=s+codigo

s=s+”,”

s=s+crlf

FWRITE(arquivo,s,33)

FCLOSE(arquivo)

VEJA TAMBÉM: FCLOSE, FREAD, FREADSTR, FWRITE, FERROR e FSEEK.


FREAD

SINTAXE:	<var1> = FREAD(<var2>,<var3>,<var4>)

Onde: 	var1 = número de bytes lidos pela função;

var2 = handle do arquivo obtido através da função FOPEN;

var3 = variável caracter destino da leitura;

var4 = número de bytes a serem lidos.

DESCRIÇÃO: Lê o conteúdo de um arquivo ASCII.

EXEMPLO:

* LEITURA EM ARQUIVO ASCII

arquivo=0

p1=0

arquivo=FOPEN( “NOME.TXT”)

FSEEK(arquivo,0,0) 	&& Posic. o apontador no início

buffer=””

p1 = FREAD(arquivo,buffer,10)

FCLOSE(arquivo)

VEJA TAMBÉM: FCLOSE, FOPEN, FREADSTR, FWRITE, FERROR e FSEEK.


FREADSTR

SINTAXE:	<var1> = FREADSTR(<var2>,<var3>)

Onde: 	var1 = é a variável destino do tipo caracter;

var2 = variável numérica que contém o handle do arquivo obtido através da função FOPEN;

var3 = é a variável numérica ou uma constante que define o número de caracteres a serem lidos.

DESCRIÇÃO: Lê seqüencialmente, de um arquivo ASCII, n caracteres ou até que encontre um caracter nulo (ASCII 0). A leitura iniciará a partir da posição atual do apontador de arquivo.

EXEMPLO:

* LEITURA DE UM ARQUIVO ASCII

arquivo = FOPEN( “NOME.TXT” )

buffer = SPACE(50)

buffer = FREADSTR( arquivo, 50 )

VEJA TAMBÉM: FCLOSE, FOPEN, FREAD, FWRITE, FERROR e FSEEK.


FSEEK

SINTAXE:	FSEEK(<var1>,<var2>,<var3>)

Onde:

var1 = handle do arquivo obtido através da função FOPEN;

var2 = número de bytes que deve ser deslocado o apontador;

var3 = método de deslocamento do apontador, que pode ser:

0 - para deslocar a partir do início do arquivo;

1 - para deslocar a partir da posição atual;

2 - para deslocar a partir do final do arquivo.

DESCRIÇÃO: Desloca o apontador dentro do arquivo ASCII.

EXEMPLO:

* LEITURA EM ARQUIVO ASCII

arquivo=0

p1=0

arquivo=FOPEN( “NOME.TXT”)

FSEEK(arquivo,0,0) 	&& Posic. o apontador no início

buffer=””

p1 = FREAD(arquivo,buffer,10)

FCLOSE(arquivo)

VEJA TAMBÉM: FCLOSE, FOPEN, FREAD, FWRITE, FERROR e FREADSTR.


FWRITE

SINTAXE:	FWRITE(<var1>,<var2>,<var3>)

Onde:

var1 = handle do arquivo obtido através da função FOPEN;

var2 = variável caracter que contém os dados a serem escritos;

var3 = número de bytes que devem ser escritos no arquivo.

DESCRIÇÃO: Escreve no arquivo ASCII

EXEMPLO:

* ESCRITA EM ARQUIVO ASCII

cr=CHR(13)

lf=CHR(10)

crlf=cr+lf

arquivo=FOPEN(“NOME.TXT”)

FSEEK(arquivo,0,2)

@ 2,1 SAY “   >       <    “

 codigo=”       “

@ 1,1 SAY “Passe seu cartao”

@ 2,5 GET codigo

@ 1,1 SAY “      aguarde...”

s=s+codigo

s=s+”,”

s=s+crlf

FWRITE(arquivo,s,33)

FCLOSE(arquivo)

VEJA TAMBÉM: FCLOSE, FOPEN, FREAD, FSEEK, FERROR e FREADSTR.


GETSERIAL

SINTAXE:	<var> = GETSERIAL()

DESCRIÇÃO: Lê a porta serial secundária e armazena na variável indicada. Função muito utilizada para conectar o microterminal a outros equipamentos inteligentes, tais como, balanças eletrônicas, scanners, impressoras, etc. A instrução SET DEVICE TO PRINT é necessária para que esta função seja executada.

EXEMPLO:

a = space(14)

SET DEVICE TO PRINT

a =GETSERIAL()

A instrução fará a leitura de tantos bytes quanto for o tamanho da variável declarada, no caso 14 bytes. Ver outro exemplo na função SAYSERIAL.

VEJA TAMBÉM: SAYSERIAL.


INKEY

SINTAXE:	<var> = INKEY()

DESCRIÇÃO: Lê buffer de teclado. Se INKEY(0), aguarda a digitação de uma tecla, se INKEY() não aguarda digitação.

EXEMPLO:

T=.T.

DO WHILE T=.T.

     hora =TIME()

     @ 1,1 SAY hora

     a =INKEY()

     IF A<>13

         LOOP

     ENDIF

ENDDO

VEJA TAMBÉM: WAIT, GET.


LEN

SINTAXE:	<tamanho> = LEN(<var>)

DESCRIÇÃO: Verifica o tamanho da variável caracter.

EXEMPLO:

i=0

nome = “Marcela”

i= LEN (nome)

VEJA TAMBÉM: SUBSTR, GET.


NETERR

SINTAXE:	<var> = NETERR()

DESCRIÇÃO: Informa se a última operação de APPEND BLANK, USE, FREAD, FWRITE ou REPLACE foi realizada com sucesso.

EXEMPLO:

PROCEDURE Adi_Reg

DO WHILE t =.T.

     APPEND BLANK

     flag =NETERR()

     IF flag =.F.

         DO AGUARDA

         LOOP

     ENDIF

ENDDO

RETURN

VEJA TAMBÉM: APPEND BLANK, USE, REPLACE.


RLOCK

SINTAXE:	<var> = RLOCK()

DESCRIÇÃO: Bloqueia o registro atual para uso exclusivo do microterminal. Sempre que executar a função RLOCK com sucesso, execute a instrução SKIP para certificar-se de que está realmente com a última atualização do registro.

EXEMPLO:

PROCEDURE Reg_Lock

DO WHILE t =.T.

     flag =RLOCK()

     IF flag =.T.

         SKIP 0  	 && Atualiza o registro sem perder bloqueio

         EXIT

     ENDIF

     DO AGUARDA

ENDDO

RETURN

VEJA TAMBÉM: FLOCK.


RECCOUNT

SINTAXE:	<num_registros> = RECCOUNT()

DESCRIÇÃO: Retorna o número total de registros existentes no arquivo de dados em uso.

EXEMPLO:

TamArq =0

TamArq = RECCOUNT()

VEJA TAMBÉM: FLOCK, RECNO, USE.


RECNO

SINTAXE:	<num_registro> = RECNO()

DESCRIÇÃO: Retorna um valor inteiro, representando o número do registro corrente.

EXEMPLO:

Nroreg=0

Nroreg = RECNO()

VEJA TAMBÉM: FLOCK, RECCOUNT, USE.


SAI

SINTAXE:	SAI(<num>,<var_lógica>)

DESCRIÇÃO: Define o estado lógico para uma das saídas digitais para acionamento externo.

Se a serial secundária está configurada como CLP, isto é, SET SERIAL TO CLP, os valores válidos para o comando SAI são: 11 e 12. Este comando torna-se válido após a execução da instrução ATUSAI.

Se a serial secundária está configurada como CATRACA, isto e, SET SERIAL TO CATRACA, os valores válidos para o comando SAI são: 11, 12, 13 e14.  Este comando torna-se válido após a execução da instrução ATUSAI.

EXEMPLO:

SET MICROTERMINAL TO CLP

A = .T.

E01=.F.

E02=.F.

DO WHILE A = .T.

     ATUENT() 	 && Atualiza (lê) as entradas

     E01=ENT(21)

     && Atribui o estado da Entrada 01 a E01

     E02=ENT(22)

     SAI(11,.F.)  	   	 && Inicializa a saída 01 com .F.

     SAI(12,.F.)	 && Inicializa a saída 02 com .F.

     IF E01=.T.     	 && Se E01 ligada, aciona saída 01

          SAI(11,.T.)

     ENDIF

     IF E02=.T.    	 && Se E02 ligada, aciona saída 02

          SAI(12,.T.)

     ENDIF

     ATUSAI()	&& Atualiza  as saídas

ENDDO

VEJA TAMBÉM: ATUENT, ATUSAI, ENT, SET SERIAL, SET MICROTERMINAL.


SAYSERIAL

SINTAXE:	SAYSERIAL(<var>)

DESCRIÇÃO: Transmite o conteúdo da variável indicada através da serial secundária. A instrução SET DEVICE TO PRINT é necessária para que esta função seja executada.

EXEMPLO:

SET DEVICE TO SCREEN

@ 1,1 SAY “TESTE DE COMUNICAÇÃO”

envia =”TESTA A PORTA SERIAL”

SET DEVICE TO PRINT

SETSERIAL(9600,N,8,1)

SAYSERIAL(envia)

VEJA TAMBÉM: SET DEVICE.


SELECTPRN

SINTAXE:	<var_lógica> = SELECTPRN (<var1>)

Onde: var1 = admite os parâmetros: COMM1, COMM2, COMM3, COMM4, LPT1 e LPT2. A ausência deste parâmetro indica uma impressora DEFAULT, configurada no programa CF100.

DESCRIÇÃO: Seleciona uma impressora escrava da rede de microterminais. A função devolve verdadeiro (.T.) se a seleção alcançar sucesso ou falso (.F.) caso contrário. Na primeira hipótese, a instrução SET DEVICE controlará a saída das instruções SAY para escrita no display ou na impressora escrava. Para liberar imediatamente a impressora para os demais usuários, a instrução SELECTPRN deverá ser repetida. Caso isto não ocorra, a liberação será automática ao final de 30 segundos.

Se algum aplicativo executado em DOS também utilizar a impressora escrava, deverá transmitir ao final de sua impressão, a seqüência ESC ‘ ‘ ( CHR(27) + CHR(32) ) para liberação rápida da impressora para os demais usuários da mesma. Um mesmo microterminal pode utilizar quantas impressoras necessitar, bastando para isto modificar o parâmetro de var1 de acordo com a conveniência.

Para acessar as impressoras, estas deverão ser previamente configuradas pelo programa CF100 ou WCF100.

EXEMPLO:

flag =.f.

DO WHILE flag =.f.

     flag =SELECTPRN(COMM1)  	&& Tenta selecionar impressora escrava COM1

     IF flag =.f.

          @ 1,1 SAY “AGUARDE  IMPRES-“

          @ 2,1 SAY “SORA OCUPADA ...”

          LOOP

     ENDIF

ENDDO

@ 1,1 SAY “IMPRIMINDO      “

@ 2,1 SAY “    AGUARDE ... “

SET DEVICE TO PRINT

@ 1,1  SAY “BOLETIM DE VENDA - PEDIDO NUM.: 12345”

                  :

SET DEVICE TO SCREEN

flag =SELECTPRN()   	&& Libera impressora escrava

VEJA TAMBÉM: SET DEVICE, SAY.


SETDV

SINTAXE: SETDV(P01,P02,P03,P04,P05,P06,P07,P08,P09,P10,P11,P12,P13,P14,...)

Onde:

P01 indica o modo de cálculo.(1 para Módulo menos resto; 3 para Quociente;4 Resto)

P02 valor do módulo ( 1 a 255)

P03 peso da soma (1 a 255)

P04 constante de soma (0 a 255)

P05 caso especial 1 (0 a 255)

P06 caso especial 2 (0 a 255)

P07 caso especial 3 (0 a 255)

P08 dígito para caso especial 1 (0 a 9)

P09 dígito para caso especial 2 (0 a 9)

P10 dígito para caso especial 3 (0 a 9)

P11 valor da soma (0 a 255)

P12 Soma dígitos (0 não, 1 sim)

P13 a P23 Peso de cada dígito (0 a 255).

DESCRIÇÃO: Fornece os parâmetros para cálculo do dígito verificador CALCDV de números de até 11 dígitos. O cálculo de dígito verificador pode ser realizado de três formas distintas: Módulo menos resto, quociente e Resto.

FÓRMULA PARA MÓDULO MENOS RESTO

Resultado D igual ao módulo M menos o resto da divisão R da soma ponderada S (dígito vezes o peso) dividida pelo módulo: D=M-R[S/M]

EXEMPLO:

flag=.t.

SETDV(1,11,1,0,10,11,255,0,1,0,11,0,2,3,4,5,6,7,8,9,10,11)

t = .t.

cod=0

x = 0

DO WHILE t=.t.

MAT = “     “

@ 1,1 SAY “ PASSE O CARTAO “

@ 2,1 SAY “>              <”

@ 2,6 GET MAT

cod = VAL(mat)

mat = STR(cod,5,0)

flag = CALCDV(5,mat)

@ 1,1 SAY “     ACESSO      “

IF flag = .f.

@ 2,1 SAY “    BLOQUEADO    “

ELSE

@ 2,1 SAY “    LIBERADO     “

ENDIF

WAIT

ENDDO

VEJA TAMBÉM: CALCDV.


SETSERIAL

SINTAXE: SETSERIAL(P1,P2,P3,P4)

ONDE:

P1 é a taxa de comunicação = 1200, 2400, 4800 ou 9600;

P2 é a paridade = N, O ou E;

P3 é o número de bit’s = 7 ou 8;

P4  é o número de stop bit’s= 1 ou 2.

DESCRIÇÃO: Configura a porta serial secundária com seus parâmetros de comunicação.

EXEMPLO:

SETSERIAL(9600,N,8,1)

VEJA TAMBÉM: SET DEVICE, SAYSERIAL.


SPACE

SINTAXE: <var> = SPACE (<num_espaços>)

DESCRIÇÃO: Utilizada para inicializar uma variável tipo caracter com espaços.

EXEMPLO:

* Inicializa a variável A com 10 espaços

* Equivale a A = “          “

A=SPACE(10)

VEJA TAMBÉM: DECLARE, SAY.


SUBSTR

SINTAXE: <var1> = SUBSTR (<var2>,<P1>, <P2>)

ONDE:

var1 é a variável do tipo caracter destino, que receberá a sub-cadeia;

var2 é a variável do tipo caracter origem;

P1 é a posição de var2 para início da sub-cadeia;

P2 é o número de caracteres da sub-cadeia.

DESCRIÇÃO: Retorna uma sub-cadeia de caracteres da variável indicada.

EXEMPLO:

* Pesquisa sub-cadeia RITA na variável nome

FOR I=1 TO 37

   teste =SUBSTR(nome,I,4)

   IF teste =”RITA”

      @ 1,1 SAY “ ACHEI !!! “

   ENDIF

NEXT

@ 1,1 SAY “NÃO ACHEI !!!”

VEJA TAMBÉM: DECLARE, SAY, SPACE, LEN.


STR

SINTAXE: <var1> = STR (<var2>,<P1>, <P2>)

ONDE:

var1 é a variável do tipo caracter destino;

var2 é a variável numérica para conversão;

P1 é o tamanho da variável destino;

P2 é o número de casas decimais.

DESCRIÇÃO: Converte uma variável numérica para uma do tipo caracter.

EXEMPLO:

* Converte valor para caracter

VALOR = 1234.45

STRING = “”

STRING = STR( VALOR, 7, 2 )

VEJA TAMBÉM: SUBSTR, SAY, SPACE, LEN.


TERMINAL

SINTAXE: <var> = TERMINAL ()

DESCRIÇÃO: Recebe numa variável do tipo caracter de seis posições o número de série do microterminal.

EXEMPLO:

TERM = SPACE (6)

TERM = TERMINAL()

@ 1,1 SAY TERM

VEJA TAMBÉM: SAY, FWRITE, SPACE.


TIME

SINTAXE: <var> = TIME ()

DESCRIÇÃO: Informa a hora corrente do sistema. Esta função realiza uma comunicação com o PC servidor, informando a hora atual no relógio do servidor.

EXEMPLO:

* O código abaixo mostra a hora atual do sistema até que seja teclado ENTER.

* Também é bastante utilizado para testar a comunicação entre o microterminal e o PC

* Podendo-se avaliar a performace de uma rede (comunicação padrão RS-485) de microterminais.

T=.T.

i = 0

hora = SPACE(10)

DO WHILE T=.T.

   hora =TIME()

   i = i + 1

   @ 1,1 SAY hora

   @ 2,1 SAY i

   a =INKEY()

   IF A<>13

      LOOP

   ENDIF

ENDDO

QUIT

VEJA TAMBÉM: SAY, DATE.


VAL

SINTAXE: <var1> = VAL (<var2>)

DESCRIÇÃO: Retorna o valor numérico da variável, ou constante, tipo caracter indicado.

EXEMPLO:

numero = “     “

@ 1,1 SAY “ PASSE O CARTAO “

@ 2,1 SAY “    >     <     “

@ 2,6 GET número

num_val = VAL(numero)

IF num_val=9999

   @ 1,1 SAY “   FINAL   “

WAIT

VEJA TAMBÉM: STR, SUBSTR.


ASC

SINTAXE: <var1> = ASC (<var2>)

DESCRIÇÃO: Retorna o número correspondente ao código do caracter ASCII indicado.

EXEMPLO:

n2 = 0

c1 = “ “

cracha=SPACE(12)

CLEAR TYPEAHEAD

@ 2,1 GET cracha

c1 = SUBSTR(cracha,1,1)

n2 = ASC(c1)

VEJA TAMBÉM: STR, CHR.


software
Descrição do Software

Para possibilitar a troca de informações entre os microterminais e um PC foram desenvolvidas algumas ferramentas que fornecerão um meio de programação, configuração e comunicação. O software descrito abaixo está disponível no site da Passo no endereço (http://www.passo.com.br/utilitarios.htm), incluindo códigos fonte, aplicativos de exemplo, manuais, dentre outros.

CF100 – Programa DOS utilizando para efetuar a configuração dos equipamentos, incluindo porta de comunicação, número de série do microterminal, arquivos utilizados, aplicativo uaclip, etc. Este software possui uma versão para windows denominada WCF100.

PC100C – Programa DOS gerenciador de rede que pode acessar bancos de dados DBF, arquivos de índice NTX e arquivos do tipo texto. Possui uma versão windows com a mesma finalidade, denominado WPC100C, que trabalha em conjunto com a DLL TROPASSO.

CA100 – A ca100 é uma DLL desenvolvida baseada na API do windows para viabilizar a comunicação entre os microterminais e o PC de forma transparente para o programador de alto nível, através da implementação de diversas funções.

UACLIP – Compilador Uaclip é responsável por gerar o código binário a ser interpretado pela BIOS do microterminal. Os programas fonte deverão ser editados conforme o padrão CLIPPER, observadas as restrições descritas neste manual.


configuração
Configuração Passo a Passo

O programa configurador CF100 ou o WCF100 versão windows foram desenvolvidos exclusivamente para permitir ao usuário informar aos programas de gerenciamento dos microterminais (PC100C, WPC100), ou a DLL CA100 no caso de uma aplicação em alto nível, todos os dados que caracterizam a sua aplicação especifica. Esta informação é passada por meio de um arquivo de configuração (pc100.cfg) gerado pelo configurador, incluindo: número de microterminais presentes, número de série de fabricação de cada um deles, nome dos programas aplicativos e arquivos acessados, etc.

Depois de instalar o configurador o usuário terá o contato com o menu principal composto pelas seguintes opções:

1. Terminal

Nesta opção deverão ser definidos quais os números de séries dos microterminais presentes na rede. Desta forma o programa de gerenciamento terá condições de realizar a comunicação entre os equipamentos. No modo UACLIP, o display do microterminal apresentará a mensagem:

Neste caso o número do microterminal a ser cadastrado seria 58241.

2. Comunicação

Opção utilizada para setar a porta de comunicação a qual está instalado o microterminal, o sistema permite a configuração nas portas: COM1, COM2, COM3 e COM4.

3. Arquivos

Esta opção permite a seleção dos arquivos de dados e índices acessados pelos programas aplicativos dos microterminais. Poderão ser utilizados arquivos de dados padrão DBF ou no formato ASCII, e arquivos de índices padrão CLIPPER (.ntx) ou DBASE (.ndx). Não é permitido, no entanto, o uso simultâneo de índices ndx e ntx, o usuário deverá optar por um dos dois tipos.

O próximo passo será informar os nomes dos arquivos utilizados na rede de microterminais com seus respectivos diretórios, conforme o padrão DOS, utilizando-se para isto a janela de entrada de dados, conforme o exemplo abaixo.

Os tipos de arquivo configuráveis são [D] Dados DBF, [A] Dados ASCII e [I] índice. Observar que, independentemente do número de microterminais presentes na rede, o número máximo de arquivos abertos permitidos pelo sistema é 30. Quando do desenvolvimento dos programas aplicativos dos terminais, o usuário deverá informar os nomes dos arquivos e diretórios de forma idêntica ao declarado na configuração.

USE C:\ESTOQUE\CADASTRO.DBF

4. Aplicativos

Nesta opção, o usuário deverá digitar os nomes dos programas aplicativos para cada um dos microterminais presentes na rede. Esta configuração se faz necessária para permitir a carga remota do aplicativo, no momento em que os microterminais são ligados.

O procedimento de entrada de dados segue o mesmo principio dos demais. Os arquivos utilizados e definidos neste modo deverão apresentar necessariamente a extensão (TRO). Ou seja os programas aplicativos devem ser compilados através do compilador UACLIP para que possam ser interpretados pelos microterminais.

5. Multitarefa

Esta opção permite que a fatia de tempo do microcomputador, dedicado ao controle da rede de microterminais seja programado. Utilizado em sistemas operando com MS-DOS.

6. Modo Seguro

Esta opção informa ao Gerenciador de Microterminais para executar um salvamento de registro, para o disco, a cada instrução REPLACE. Esta opção se comporta como a instrução COMMIT do Clipper. DEFAULT OFF.

7. Modo Ótimo

Reprograma o relógio do PC, permitindo que as operações sejam executadas a uma velocidade maior. DEFAULT ON.

8. Endereços

Pode ser necessário, a fim de evitar conflito com outros periféricos, que se tenha que trocar os endereços das portas usadas pelo Gerenciador de Microterminais. Deve-se ter atenção ao executar este procedimento, pois endereços programados nesta opção, que não correspondam aos configurados nas interfaces seriais e paralelas do microcomputador, poderão causar efeitos indesejáveis. Inicialmente os valores representam o padrão PC-IBM.


compilando
Compilando um Programa

O programa compilador UACLIP foi desenvolvido especialmente para gerar os programas aplicativos que serão executados nos microterminais, a partir de programas fontes editados segundo o padrão CLIPPER.

A compilação de programas é bastante simples e não envolve qualquer configuração ou parâmetros de controle. Basta digitar UACLIP e o nome do arquivo fonte. Em caso de duvida digitar apenas UACLIP que será apresentada a tela de ajuda.

SINTAXE: uaclip <nomedoarquivo.prg>


regras
Regras Básicas da Linguagem Uaclip

A linguagem de programação UACLIP obedece a algumas regras básicas de programação apresentadas a seguir.

1. Declaração de Variáveis

Todas as variáveis devem ser declaradas antes de usadas. A declaração é uma atribuição simples e pode ser feita em qualquer parte do programa. As variáveis, uma vez declaradas, não podem mais mudar de tipo. Os campos dos registro não são tratados como variáveis internas, portanto não devem ser declarados. Se declarados, serão confundidos como variáveis internas, não podendo mais ser atualizados com seus conteúdos nos registros.

O nome de uma variável poderá ter no máximo 10 caracteres começando necessariamente por uma letra. O compilador UACLIP não faz distinção entre letras maiúsculas e minúsculas. A declaração de uma variável do tipo data poderá ser feita com auxilio da função DATE.

2. Configuração de Ambiente

Os microterminais podem assumir duas configurações de trabalho: TR-100 ou MCP-100. Para que o compilador possa melhor interpretar os comandos de cada uma destas duas configurações, se faz necessário declarar a instrução SET MICROTERMINAL logo na primeira linha de programa. No modo default o microterminal é setado como LOCAL, ou seja, deste modo está configurado para operar na sua forma padrão TR-100. Na configuração MCP-100, sem visor e teclado, com placa de entradas e saídas para aquisição de dados e acionamentos externos, utilizar a instrução para setá-lo como CLP.

O microterminal admite ainda o uso da porta serial secundária para acionamentos externos. Para operar desta forma utilizar a instrução SET MICROTERMINAL para colocá-lo em modo LOCAL e em seguida a use a instrução SET SERIAL setando para CLP.

3. Operações com Arquivos

Embora o microterminal trabalhe com os arquivos instalados nos discos do PC, o programador deve tratá-los como se os discos do PC estivessem instalados de fato no microterminal. Assim o programador deve desenvolver normalmente seus programas com o conjunto de instruções de manipulação de arquivos, sem se preocupar com a comunicação de dados via rede, que é automática. O microterminal mantém em memória um buffer com o conteúdo do registro corrente. Este buffer tem capacidade de armazenar registros de até 1000 bytes. Para calcular o tamanho do registro utilizar a seguinte formula:

NC x 17 + NB; onde NC é o número de campos e NB é o número de bytes dos campos.

Visto que os arquivos de dados podem estar sendo compartilhados com outros microterminais, ou mesmo, com aplicações do PC, as alterações de conteúdo de registros devem ser feitas com auxilio das operações FLOCK, RLOCK e UNLOCK.

4. Variáveis Globais

Todas as variáveis são globais, ou seja, válidas ao longo de todo o programa, mesmo que tenham sido declaradas dentro de rotinas ou funções. Isto significa que é impossível o uso de duas variáveis distintas com o mesmo nome. A passagem de parâmetros entre rotinas e funções se dá exclusivamente através de variáveis.

5. Operações Múltiplas

Na versão atual do UACLIP não são permitidas operações múltiplas em uma única linha de instrução. Ou seja, cada operação deve ser feita em uma linha própria. Isto engloba as instruções matemáticas, todas as demais instruções e funções.

 ERRADO 	CERTO

Ex. 1 : A=B*10-1 	A=B*10

A=A-1

Ex. 2 : IF A>=B*3 	X=B*3

IF A>=X

6. Operações Matemáticas

O microterminal pode realizar as quatro operações matemáticas, uma instrução por linha de programa.

Ex. a=a+1

b=b*3

c=a+b

d=a/2

O resultado obedecerá as configurações definidas em SET FIXED e SET DECIMALS. Caso não sejam configuradas o resultado da operação apresentará o mesmo número de casas decimais do operando com maior número de casas decimais.

Ex. 3/2=1

3.0/2=1.5

1*2=2

3*3.3=9.9


variáveis
Tipos de Variáveis

O UACLIP apresenta os seguintes tipos de variáveis internas: numéricas, lógicas, data e caracter (string).

1. Tipo Numérica

Podem assumir valores de no máximo 10 dígitos na parte inteira e 3 dígitos na parte fracionária. O total de dígitos não poderá ultrapassar a 13, incluído o ponto decimal, e poderão assumir valores positivos e negativos. Recomendamos a leitura das instruções SET DECIMALS e SET FIXED.

EXEMPLOS:

max = -123456789.123

a = 1

2. Tipo Lógica

São variáveis que podem assumir os seguintes estados lógicos:

.Y.(YES=SIM) ou .T.(TRUE=VERDADEIRO) e .N.(NO=NÃO) ou .F.(FALSE=FALSO).

EXEMPLOS:

logica =.N.

teste =.T.

3. Tipo Data

Podem assumir constantes do tipo datas, no seguinte formato:

AAAAMMDD.

Onde AAAA indica o ano, MM o mês e DD o dia. Para visualização de uma data no formato DD/MM/AAAA deverá ser utilizada a instrução DTOC.

4. Tipo Caracter ou String

São variáveis que podem apresentar até 254 caracteres genéricos. Podem ser definidos vetores de strings através da instrução DECLARE.