Embed
Email

portfolio

Document Sample
portfolio
Shared by: HC1111251166
Categories
Tags
Stats
views:
6
posted:
11/25/2011
language:
pages:
78
HPNEWS 05



=========================================================================

=======



____HP3000





BRW: Dicas para Iniciantes







Sergio Weiser

Analista de Suporte







O Business Report Writer (BRW) esta tornando-se uma ferramenta de

geracao de relatorios muito popular gracas a sua facilidade na

visualizacao do layout e uso de telas para confeccao de relatorios.



Este artigo cobre os seguintes topicos:



1. Itens do tipo Data (Date)



2. Acesso aos arquivos RDIC/BRWDIC



3. Adaptacao do BRW Standard Report Job



4. Tunning Access no BRW



5. Column Calculation Source e Reset Levels e uso do "CALC" para

calculo de colunas





Estes topicos sao uma colecao das perguntas mais comuns de clientes

que estao iniciando o uso do BRW. Cada secao apresenta uma explicacao

da caracteristica e a demonstracao com exemplos. Para maiores

informacoes, use o Business Report Writer/V Reference Manual (Part No.

36070-90001) ou o Business Report Writer/XL Reference Manual (Part No.

35360-60002).



Este artigo esta direcionado a usuarios que tenham um conhecimento

basico do BRW e um destes dicionarios: Dictionary/V, System Dictionary

ou Application Dictionary. O artigo aplica-se as versoes A.00.30 do

BRW/V e A.00.04 do BRW/XL, e versoes mais recentes.





1. ITENS DO TIPO DATA (DATE)



O BRW possui poderosas funcoes de data tais como:



* Funcoes de duracao de data para calculo da diferenca entre 2

datas

* Funcoes de adicao/subtracao para calcular uma data

adicionando/subtraindo dias, semanas ou meses a uma data inicial



* Funcoes de extracao de datas para extrair o ano, mes, dia, dia

da semana e assim por diante, de uma data informada.



Para que o BRW reconheca um item como sendo do tipo data, a definicao

no dicionario do elemento deve ser modificada e um novo dicionario do

BRW (RDIC/BRWDIC) deve ser gerado.



Para o Dictionary, o comando "MODIFY ELEMENT" e' usado para adicionar

um "Long Name", descrevendo o formato do item data. O Capitulo 11 do

manual do BRW traz os valores de Long Name para o Dictionary/V.



Para o System Dictionary, o comando "MODIFY ENTITY;ET=ELEMENT" e' usado

para adicionar um "Element-Subtype", descrevendo o formato do item

data. A secao de System Dictionary do Capitulo 11 do manual do BRW

apresenta os valores do Element-Subtype.



O Element-Subtype e' um atributo que permite ao BRW distinguir entre

diferentes formatos de data e horario. Antes que o valor do

Element-Subtype possa ser adicionado, o System Dictionary deve ser

adaptado para uso com o BRW. O atributo Element-Subtype e' uma extensao

do coreset do System Dictionary. O administrador do dicionario deve

adicionar esta extensao ao System Dictionary, usando os procedimentos

descritos no manual do BRW. Em poucas palavras, o procedimento e' o

seguinte:



a. Certifique-se que ninguem esta usando o System Dictionary



b. Atraves do EDITOR, modifique o BRWSDEXT.PUB.SYS para incluir o

nome do DA scope.



c. :FILE SDIN=BRWSDEXT.PUB.SYS

:RUN SDMAIN.PUB.SYS



O BRWSDEXT.PUB.SYS e' um arquivo de comando de input que executa a

adaptacao necessaria pelo BRW. Ele adiciona o atributo "UNIQUE" a

relationship class "CONTAINS"; cria o latributo "ELEMENT-SUBTYPE"; e

adiciona o atributo "ELEMENT- SUBTYPE" a entity type "ELEMENT",

relationship type "RECORD CONTAINS ELEMENT" e relationship type

"ELEMENT CONTAINS ELEMENT".





EXEMPLO DE MODIFICACAO DO LONG NAME NO DICTIONARY



A secao de Dictionary do manual do BRW lista os Long Names que estao

associados a um determinado tipo de item, tamanho, e tipo do dado

arquivado. Por exemplo:



Item: Long Name Usado:

---- ---------------

Tipo: X Long Name: !DATE-YMD

Tamanho: 6 bytes

Formato de arquivamento: YYMMDD



Para itens do tipo X6 que arquivam datas no formato "YYMMDD", use o

Long Name "!DATE-YMD".



Passos para Modificar o Dictionary:



a. :RUN DICTDBM.PUB.SYS



b. >MODIFY ELEMENT

[RESERV-DATE ]



c. Pressione para TYPE, SIZE, STORAGE LENGTH, COUNT,

RESPONSABILITY



d. Digite "!DATE-YMD" para o LONG NAME:

LONG NAME [!DATE-YMD ]



e. Pressione para HEADING TEXT, ENTRY TEXT, EDIT MASK,

MEASUREMENT UNITS, RIGHT JUSTIFY.



f. >EXIT



g. :RUN RDIC3000.PUB.SYS (BRW/V)

ou

:RUN BRWD3000.PUB.SYS (BRW/XL)



Isto gera um novo arquivo RDIC a partir do dicionario modificado para

o BRW/V ou um novo BRWDIC para o BRWXL.





EXEMPLO DE MODIFICACAO DO LONG NAME NO DICTIONARY



A secao de System Dictionary do manual do BRW lista os valores de

Element-Subtype associados ao tipo do item, tamanho e exemplo dos

dados arquivados. Por exemplo:



Item: Element-Subtype Usado:

---- ---------------------



Tipo: X Element-Subtype: YMD

Tamanho: 6 Bytes

Formato de Arquivamento: YYMMDD



Para itens do tipo X6 que arquivam datas no formato "YYMMDD", use

o Element-Subtype "YMD".



Passos para Modificar o System Dictionary:



a. :RUN SDMAIN.PUB.SYS



b. >DEF SCOPE=da;PASSWORD=dapass;

>>OPEN-MODE=su;D=;STAT=teste.



c. >MODIFY ENTIRY RESERV-DATE;ET=ELEMENT.



d. Selecione o Element-Subtype como sendo o atributo a ser

modificado.



e. Digite "YMD" como sendo o valor do Element-Subtype.



f. >EXIT



g. :RUN RSYSDIC.PUB.SYS (BRW/V)

ou

:RUN BRWSD.PUB.SYS (BRW/XL)



Isto gera um novo arquivo RDIC a partir do dicionario modificado para

o BRW/V ou um novo BRWDIC para o BRWXL.





OPCAO PARA ITENS NUMERICOS SEM LONG NAME OU ELEMENT-SUBTYPE



Pode acontecer de nao existir Long Name do Dictionary ou

Element-Subtype do System Dictionary para o seu item que guarda os

valores de data. Por exemplo, NAO existe Long Name nem Element-Subtype

para itens do tipo P8 que guardem datas.



Se o item for numerico, deve ser usado um contorno para que o BRW

possa reconhecer este item como sendo uma data. O contorno envolve a

criacao de um item calculado (calculated item) do tipo data.



Abaixo e' apresentado um exemplo onde um campo P8 guarda datas no

formato "YYMMDD". Funcoes do BRW sao usadas para criar um table

calcitem ou layout calcitem do tipo DATE. A formula do calcitem usa a

funcao DIGIT_OF, as funcoes de adicao de datas e assume como data base

01/01/1900.



A funcao DIGIT_OF extrai o digito especificado pela posicao do

indexador. A posicao do indexador e' o expoente de 10.



Exemplo: YYMMDD guardado em um campo P8



881225

||||||

543210 (expoente de 10)



DIGIT_OF (data,0) retorna 5

DIGIT_OF (data,1) retorna 2

DIGIT_OF (data,2) retorna 2

DIGIT_OF (data,3) retorna 1

DIGIT_OF (data,4) retorna 8

DIGIT_OF (data,5) retorna 8





Se o seu tipo de item for numerico e nao existir Long Name ou

Element-Subtype disponivel, entao, a formula a seguir pode ser usada

para criar um table calcitem ou layout calcitem com tipo de resultado

igual a DATE. A formula do calcitem e' (assumindo-se um formato

YYMMDD):



ADD_MONTHS(

ADD_DAYS(

ADD_YEARS('01/01/1900' ,

(10 * DIGIT_OF (ITEM, 5) + DIGIT_OF (ITEM, 4))),

(10 * DIGIT_OF (ITEM, 1) + DIGIT_OF (ITEM, 0) - 1)),

(10 * DIGIT_OF (ITEM, 3) + DIGIT_OF (ITEM, 2) - 1))



A vantagem de fazer com que o BRW reconheca o item como uma data e' a

possibilidade de se usar as funcoes de data.





EXEMPLO COM O APPLICATION DICTIONARY



Com o Application Dictionary, APPDIC, todos os itens ja estao

definidos. O dicionario nao precisa ser modificado para especificar um

item como do tipo data. O arquivo dicionario do BRW precisa,

entretanto, ser criado a partir do Application Dictionary.



Para o BRW/V, use o RAPPDIC.PUB.SYS para criar o RDIC. Para o BRW/XL,

use o BRWAPPD para criar o BRWDIC.



O manual do BRW apresenta instrucoes detalhadas para rodar estes

programas.





2. ACESSO AOS ARQUIVOS RDIC



Esta secao discute ambientes de uso do dicionario. O arquivo RDIC e

acessado como dicionario no BRW/V e o arquivo BRWDIC e' acessado como

dicionario no BRW/XL. Para efeito de simplificacao, esta secao usa

RDIC como referencia tanto para o RDIC como para o BRWDIC.



O BRW permite acesso a multiplos arquivos RDIC residentes em

diferentes grupos e contas, assim como bancos de dados em diferentes

grupos e contas. A chave para criacao de ambientes complexos e' o

entendimento de como o BRW acessa o RDIC nos momentos de especificacao

e compilacao.



O RDIC e' usado no momento de compilacao e durante a especificacao,

quando sao usados como tabela fonte arquivos IMAGE, KSAM ou MPE. Uma

vez compilado o relatorio, o RDIC nao e' mais necessario durante a

execucao.



Primeiramente, sao apresentadas informacoes sobre como o BRW acessa o

RDIC. Em seguida, varios exemplos demonstrando os principios

apresentados.





PRINCIPIOS-CHAVE

A. O primeiro principio a ser entendido e' que o BRW procura por um

arquivo RDIC no grupo PUB da conta onde o banco de dados reside. A

tabela abaixo demonstra este principio. A primeira coluna mosta o

nome do "LOCATION" como especificado na tela DEFINE TABLE do BRW. A

segunda coluna mosta o nome do arquivo que o BRW procura como sendo

RDIC:



LOCATION especificado BRW procura o RDIC

na tela DEFINE TABLE com este nome

--------------------- ------------------



PEDIDOS.DADOS.TOYDB RDIC.PUB.TOYDB



CPAGAR.CPDADOS.FINANCAS RDIC.PUB.FINANCAS



COMISSAO.VENDAS RDIC.PUB



CONTABIL.BANCOS RDIC.PUB



PESSOAL RDIC.PUB



KSAMDATA RDIC.PUB





B. O segundo principio a entender pode ser desenhado a partir do

exemplo acima. Se o Location Name for qualificado ate o nivel da

conta, o BRW procura pelo RDIC.PUB.{conta}. Senao, e' assumido que o

banco de dados e o RDIC.PUB residem na conta de logon. Isto pode

ser usado para criar ambientes complexos com multiplos dicionarios

para bancos de dados residentes dentro de uma mesma conta.



C. O terceiro principio e' que file equations podem ser usadas para

redirecionar o Location Name (Banco de dados, KSAM, arquivo MPE) e

o RDIC.





EXEMPLOS DE ACESSO AO RDIC



Os exemplos aplicam os tres principios citados acima. Inicialmente sao

apresentados dois exemplos simples, seguidos de exemplos mais

complexos.



Caso 1: Um unico banco de dados e RDIC residentes na mesma conta



O BRW procura no grupo PUB da conta onde o banco reside. Logo,

o BRW procura pelo arquivo RDIC.PUB.{conta}.



Se o RDIC estiver em outro grupo que nao o PUB, uma file

equation pode ser usada para redirecionar o RDIC.PUB para o

RDIC verdadeiro.





Caso 2: Um relatorio acessa varios bancos de dados em diferentes

contas e os RDICs residem nas contas onde estao os bancos.



Este caso e' uma extensao do Caso 1. O banco de dados reside na

mesma conta que o RDIC, mas varios bancos sao acessados.



Por exemplo: Se os bancos PESSOAL.DADOS.PESSOAL e

VENDAS.BANCOS.PEDIDOS sao especificados como

location, entao, o BRW procura pelos arquivos

RDIC.PUB.PESSOAL e RDIC.PUB.PEDIDOS

respectivamente.



Caso 3: As definicoes de multiplos bancos de dados residentes em

contas diferentes sao carregadas em um unico dicionario

central (RDIC).



Outra situacao muito comum e' ter bancos de dados em varias

contas e um unico dicionario. A aplicacao dos tres principios

resolve o problema.



Por exemplo: Os bancos de dados definidos para um unico

relatorio sao PEDIDOS.DADOS.PEDIDOS e

ITENS.DADOS.PRODUCAO. O arquivo que contem as

definicoes destes bancos e' o RDIC.PUB.DICION.



O BRW procura as definicoes dos bancos nos arquivos

RDIC.PUB.PEDIDOS e RDIC.PUB.PRODUCAO, que nao existem. Por

isto, antes de rodar o BRW, redirecione o RDIC com file

equation para o RDIC central:



:FILE RDIC.PUB.PEDIDOS=RDIC.PUB.DICION

:FILE RDIC.PUB.PRODUCAO=RDIC.PUB.DICION



Caso 4: Existe um dicionario (RDIC) diferente para cada banco de

dados, e todos os dicionarios e bancos residem na mesma conta.



Finalmente, outro caso e' ter dicionarios diferentes para cada

banco, e todos os dicionarios e bancos residem na mesma conta.

Varias razoes para que isto possa ocorrer:



* Voce pode ter um RDIC gerado a partir do APPDIC para acessar

os bancos do aplicativo e um RDIC para acessar seus proprios

bancos.



* Voce pode ter dicionarios separados ou logicamente separados

via uso de domains do System Dictionary.



* Voce pode ter dicionarios separados para cada banco para

evitar conflito de datasets. Atualmente, o BRW exige que

seja usado o nome real do dataset usado. Por isto, caso

exista conflito na definicao de datasets, o BRW exige que o

banco seja carregado em dicionarios separados.



Por exemplo:

Os bancos listados abaixo sao necessarios em seu relatorio BRW, mas os

RDICs de cada banco residem em grupos diferentes.



Banco acessado RDIC relacionado

-------------- ----------------

VENDAS.DADOS RDIC.VENDAS

CLIENTES.DADOS RDIC.CLIENTES

PEDIDOS.DADOS RDIC.PEDIDOS





A solucao resume-se em qualificar cada banco de dados com uma conta

"burra" como location name. Isto faz com que o BRW procure o RDIC no

grupo PUB da conta "burra". Antes da compilacao e execucao do

relatorio, file equations sao usadas para redirecionar os arquivos

RDIC para a conta e grupo corretos.



A implementacao segue os seguintes passos:



a) Crie as file equations antes de definir e compilar o relatorio.

Estas file equations podem ser colocadas na UDC de logon da conta:



:FILE VENDAS.DADOS.BURRA1=VENDAS.DADOS

:FILE CLIENTES.DADOS.BURRA2=CLIENTES.DADOS

:FILE PEDIDOS.DADOS.BURRA3=PEDIDOS.DADOS

:FILE RDIC.PUB.BURRA1=RDIC.VENDAS

:FILE RDIC.PUB.BURRA2=RDIC.CLIENTES

:FILE RDIC.PUB.BURRA3=RDIC.PEDIDOS





b) Na tela DEFINE TABLE, use o nome inteiro do banco, incluindo o nome

da conta "burra":



VENDAS.DADOS.BURRA1

CLIENTES.DADOS.BURRA1

PEDIDOS.DADOS.BURRA1



O BRW procura por RDIC.PUB.BURRA1, RDIC.PUB.BURRA2 e RDIC.PUB.BURRA3

que estao equacionados para os respectivos arquivos RDIC. Durante a

execucao, as file equations tambem redirecionam os bancos usados.





3. ADAPTACAO DO BRW STANDARD REPORT JOB



Quando do pedido de um relatorio, pode ser especificado um BRW Report

Execution File (Arquivo de Execucao de Relatorio BRW) ou um User

Report Job. Algumas das perguntas mais comuns sao: "como posso

modificar o BRW Standard Report Job?" ou "como posso criar um User

Report Job?". Esta secao informa sobre os jobs de BRW e como

adapta-los.

Report Job sao templates usados para criar um job. Para o BRW/V, RJOB

e RJOB000 sao os templates default. Para o BRW/XL, BRWJOB e BRWJ000

sao os templates default. Esta secao esta baseada no BRW/V. Todas as

ideias apresentadas podem ser usadas para o BRW/XL, substituindo-se

RJOB por BRWJOB e RJOB000 por BRWJ000.

Um resumo sobre o standard report job do BRW/XL e' apresentado apos a

secao do BRW/V.



Report jobs sao genericamente chamados de RJOB. Existem dois tipos de

RJOB:



1) um RJOB padrao do BRW (BRW standard report job) e

2) um RJOB criado pelo usuario.





INFORMACéES SOBRE O RJOB DO BRW



Quando um Arquivo de Execucao de Relatorio BRW (BRW Report Execution

File) e' requisitado para execucao, o BRW usa o template do arquivo

para criar o job. Voce pode ter versoes adaptadas do RJOB a nivel de

grupo, conta ou sistema. O BRW procura pelo RJOB nesta ordem.





a. RJOB.{grupo de logon}.{conta de logon}



b. RJOB.PUB.{conta de logon}



c. RJOB.PUB.SYS



d. RJOBxxx.PUB.SYS (onde "xxx" e' o numero do Native Language

Support)



e. RJOB000.PUB.SYS



O arquivo RJOB000.PUB.SYS faz parte da FOS (Fundamental Operating

System).



Note que sao permitidas file equations para direcionamento do arquivo

RJOB.





RAZéES PARA ADAPTAR O RJOB



Existem duas razoes para criar um RJOB adaptado.



Primeiro, voce pode querer fazer pequenas modificacoes do RJOB padrao

para um determinado grupo ou conta. As mais comuns sao a exclusao do

$STDLIST apos a execucao do job e o uso de file equations. Uma vez

feita a modificacao, o arquivo deve ser chamado de RJOB para que o BRW

o encontre. Apesar de modificado, sua versao de RJOB e' considerada

como o RJOB padrao. Assim, quando o arquivo de execucao do BRW e

chamado, o BRW procura na ordem descrita acima pelo arquivo RJOB.



Segundo, voce pode criar um arquivo de job de relatorio para rodar um

programa de aplicativo ou multiplos BRW dentro do mesmo job. O arquivo

usado para rodar uma sequencia de programas e' chamado de User RJOB

(RJOB do Usuario). Na tela REQUEST REPORT, o nome do RJOB do Usuario e

usado como REPORT NAME. O BRW identifica este como um RJOB do Usuario

e nao procura pelo arquivo RJOB padrao.





COMO LOCALIZAR O JOB PADRAO DO BRW



Como apresentado acima, voce pode querer fazer modificacoes no RJOB

padrao do BRW para afetar usuarios de certa conta ou grupo.



O exemplo a seguir mostra como excluir o $STDLIST apos a execucao do

job.



Passos:





a. :HELLO MGR.PEDIDOS



b. Se o codigo do arquivo RJOB000.PUB.SYS for "RJOB" e for usado o

EDITOR/3000 para editar o arquivo, entao, o codigo deve ser

removido antes que o EDITOR possa chamar o arquivo:



:FILE RJOB;CODE=0

:FCOPY FROM=RJOB000.PUB.SYS;TO=*RJOB;NEW



Senao, use o FCOPY diretamente:



:FCOPY FROM=RJOB000.PUB.SYS;TO=RJOB;NEW



c. :EDITOR

/T RJOB



d. Faca as modificacoes desejadas. Uma vez que queremos excluir o

$STDLIST, a penultima linha deve conter:



!SET STDLIST=DELETE



e. /KEEP RJOB.PUB,UNN



f. /EXIT





No passo e, foi especificado RJOB.PUB como o nome do RJOB padrao.

Assumindo que nao existam outros RJOB em outros grupos de logon, todos

os usuarios da conta PEDIDOS que executarem um BRW, estarao usando o

RJOB.PUB.PEDIDOS.

STANDARD REPORT JOB DO BRW/XL



O job padrao de relatorio BRW/XL e' o BRWJOB. Quando um relatorio de

BRW/XL e' pedido, o BRW/XL usa o template para criar o job. O BRW/XL

procura pelo BRWJOB padrao na seguinte ordem:



a. BRWJOB.{grupo de logon}.{conta de logon}



b. BRWJOB.PUB.{conta de logon}

c. BRWJOB.PUB.SYS



d. BRWJxxx.PUB.SYS (onde 'xxx' e' o numero do Native Language

Support)



e. BRWJ000.PUB.SYS





Como o RJOB, o BRWJOB tambem e' adaptavel. Os passos para adaptar o

BRWJOB sao similares. Eis um exemplo de como excluir o $STDLIST de um

job de relatorio.



Passos:





a. :HELLO MGR.PEDIDOS



b. :FCOPY FROM=BRWJ000.PUB.SYS;TO=BRWJOB;NEW



c. :EDITOR

/T BRWJOB



d. Faca as modificacoes desejadas. Uma vez que queremos excluir o

$STDLIST, a penultima linha deve conter:



!SET STDLIST=DELETE



e. /KEEP.PUB,UNN



f. /EXIT



Assumindo que nao existam BRWJOB em outros grupos, todos os usuarios

da conta PEDIDOS que rodem um relatorio BRW estarao usando

BRWJOB.PUB.PEDIDOS.



Assim como no BRW/V, file equations tambem podem ser usadas como

BRWJOB.



COMO CRIAR UM RJOB DO USUARIO



Se voce quiser criar um job de relatorio para rodar programas de seus

aplicativos e multiplos BRWs, entao, voce precisa definir um RJOB de

usuario.



O capitulo 9 do manual do BRW apresenta em detalhes o formato destes

arquivos. Este documento aponta as diferentes secoes do RJOB e alguns

pontos de interesse.



A seguir, um exemplo de um RJOB de usuario que roda primeiramente um

programa COBOLII para extracao de dados e em seguida dois relatorios

de BRW.





|

BEGINPARMS |

| C

DATEPARM (S,D,R) 01/01/89 | parÀmetros do usuario

| A

ENDPARMS |

| B



| E

$USER |

| C

$USERPASS | parÀmetros

| A

$GROUP | do BRW

| L

$GROUPPASS |

| H

$PRINTFILE SOBRW2R;DEV=PP,10,2;ENV=ELITE.HPENV.SYS |

| O

$INPRI 10 |

|

SCHEDULED AT = 18:00 |

|



!JOB ^$REPORT,^$USER/^$USERPASS.PEDIDOS,^$GROUP/^$GROUPPASS& | linha um

|

INPRI=^$INPRI | do corpo

|



|

!RUN SOEXTRCT,PGM.PEDIDOS;LIB=G | exemplo de

|

^DATEPARM | programa de aplicacao

|



| C

!FILE SOBRW2R=$NULL |

| O

!RUN REXEC.PUB.SYS | relatorio

| R

SOBRW1E.BRWPGM | do BRW

| P

INPUT-DATE ^DATEPARM |

| O

!EOD |

|



|

^$PRINTFILE | segundo

|



SOBRW2E.BRWPGM | do BRW

|

!EOD

|

|

!EOJ | ultima linha

|





O RJOB do usuario consiste em duas secoes: cabecalho e corpo.



A primeira linha do RJOB do Usuario deve conter:

DEFINE JOB TEMPLATE



Como parte do cabecalho. Seguem, entao, os parÀmetros do usuario e os

parÀmetros padrao do BRW. Qualquer um destes pode ser especificado

primeiro, MAS os parÀmetros padrao do BRW devem ser definidos fora da

area BEGINPARMS/ENDPARMS.



O Tipo do parÀmetro do usuario (Single Value, List of Values,

Comparison Predicate), tipo do resultado (String, Integer, Date,

etc.), modo (valor congelado ou obrigatorio), e valor default sao

definidos no cabecalho. Quando usado no corpo, o nome do parÀmetro e

precedido pelo sinal "^". O valor entrado e' substituido no job no

momento de execucao. No exemplo acima, o valor de DATEPARM e' usado no

programa COBOL e no primeiro relatorio BRW.



Os parÀmetros padrao do BRW comecam com "$", com excecao do parÀmetro

SCHEDULED. Quando estes parÀmetros sao usados dentro do corpo, o sinal

"^" indica a substituicao.



Note que os parÀmetros $ACCT e $ACCTPASS nao estao definidos no

exemplo acima uma vez que estes nomes estao escritos na propria linha

do job.



O corpo do job de relatorio comeca com:



!JOB ...



e termina com:



!EOJ



O resto do corpo do job de relatorio contem comandos MPE para rodar

multiplos relatorios BRW e opcionalmente programas de aplicativos.



Esta secao trata do RJOB do usuario, que e' um termo do BRW/V. As

mesmas ideias se aplicam na criacao de um BRWJOB do usuario para o

BRW/XL. A principal diferenca entre o RJOB e o BRWJOB e' o nome do

programa de execucao do relatorio.



O RJOB do BRW/V inclui: !RUN REXEC.PUB.SYS

enquanto que o BRWJOB do BRWXL inclui: !RUN BRWEXEC.PUB.SYS





4. TUNNING ACCESS NO BRW

O BRW oferece grande flexibilidade na definicao de acesso para

datasets e arquivos KSAM.



Dois fatores que influem na performance de seu relatorio sao:



1. reducao da quantidade de dados lida e

2. otimizacao do acesso aos arquivos.



Algumas dicas para melhorar a performance, reduzindo a quantidade de

dados lida sao:



a. Descobrir qual o seu "arquivo piloto" ou "master logico". Leia

este arquivo antes que outros sejam acessados ou casados (join).

Isto deve reduzir a quantidade de dados lida.



b. Definir uma DEFINE RELATION em vez de RELATION CONDITION para

testar se dois itens sao iguais.



Quando testar se o "ITEMA do dataset PEDIDOS = ITEMA do dataset

CLIENTES", uma DEFINE RELATION e' mais eficiente que uma RELATION

CONDITION. O DEFINE RELATION usa tabelas classificadas, exigindo

apenas uma leitura do segundo arquivo. Por outro lado, uma RELATION

CONDITION le todos os registros do segundo arquivo para todo registro

lido do primeiro.



c. Usar criterios de selecao o mais cedo possivel para filtrar o

maior numero possivel de registros passados para as tabelas

subsequentes.





Otimizar o metodo de acesso aos arquivos e' outra maneira de melhorar a

performance de seu relatorio BRW.



a. Usar o TUNE ACCESS para especificar leitura chaveada para leitura

de bancos de dados e arquivos KSAM. A regra para o IMAGE e' usar

leitura chaveada se forem selecionados menos do que 30% dos

registros lidos.



b. Leituras chaveadas ao primeiro arquivo sao possiveis atraves de

"gophers" ou "relation items". Isto envolve o uso de um parÀmetro

comum na tela DEFINE RELATION. O exemplo a seguir demostra isto:





EXEMPLO: GOPHERS E TUNE ACCESS



Neste exemplo, sao desejados os enderecos de determinados clientes que

puseram pedidos a companhia. PEDIDOS (dataset detail) e' casado via

join ao CLIENTES (dataset master) pelo item COD-CLIENTE. Leitura

chaveada ao primeiro arquivo e' possivel atraves do uso de "gopher" ou

"relation item". Neste exemplo, um parÀmetro LISTA contem os numeros

dos clientes que podem ser usados para chavear o primeiro arquivo.



1. Defina uma tabela, fazendo um join entre PEDIDOS e CLIENTES. Note

que PEDIDOS e o "master logico" uma vez que clientes que colocaram

pedidos formam e' o criterio principal.



2. Defina a relacao entre as duas tabelas. Na tela DEFINE RELATION:



Common Item in Source Tables



COD-CLIENTE PEDIDOS

COD-CLIENTE CLIENTES

?LISTA





COD-CLIENTE e' o item em comum entre os datasets CLIENTES e PEDIDOS.



Um parÀmetro (?LISTA) tambem e' usado como elemente comum. Quando o

parÀmetro e' usado na tela DEFINE RELATION, ele e' conhecido como sendo

um "gopher" ou "relation item". O uso do parÀmetro na tela DEFINE

RELATION diminui a quantidade de dados selecionados. Somente

parÀmetros do tipo Valor Simples (Single Value) ou Lista de Valores

(List of Values) podem ser usados como "gophers".



3. Especifique acesso chaveado ao segundo arquivo pelo elemento em

comum. A chave deve ter sido especificada na tela DEFINE RELATION.



A leitura do primeiro arquivo tambem pode ser chaveada ja que o

parÀmetro foi usado na tela DEFINE RELATION como sendo elemento comum.







5. COLUMN CALCULATION SOURCE E RESET LEVEL / USO DO CALC





SOURCE E RESET LEVELS: (NIVEIS DE FONTE E RESET)



Quando da definicao de quebras de pe (footing break), podem ser usados

varios calculos para sumarizacao de dados: TOTAL, AVG, MIN, MAX,

COUNT. Estas funcoes sao usadas no campo ColCalc da tela DEFINE LINES.



A fonte de dados default para cada uma destas funcoes e' o registro

detalhe. Por default, os "contadores" sao zerados quando o valor de

sort daquele nivel mudar. Para o BRW isto quer dizer que o Source

Level e' o DETAIL e o Reset Level e' o nivel de sort atual.



Se TOTAL for especificado no ColCalc do Footing Break 2, o BRW usa os

registros do detalhe para acumular os subtotais do nivel 2 e limpa

este subtotal quando ocorrer uma quebra do nivel 2.



A sintaxe para o Column Calculation e:



function{reset level},{source level}



onde function pode ser TOTAL, AVG, MIN, MAX ou COUNT.



HIERARQUIA DOS NIVEIS DE LINESET

Nivel mais ------------------------------------------------- |

alto \ R / |

RESET level

(numeros \---------------------------------------------/ | pode

ser

menores) \ P * / | 2, 1

ou R

\-----------------------------------------/ |

\ 1 / |

\-------------------------------------/ |

EXEMPLO: ---> \ 2 / |

se ColCal definido \---------------------------------/ |

para o 2F \ 3 / |

\-----------------------------/ |

\ 4 / |

\-------------------------/ |

\ 5 / |

SOURCE level

\---------------------/ | pode

ser

\ 6 / | 3-9

ou D

\-----------------/ |

\ 7 / |

\-------------/ |

\ 8 / |

\---------/ | * "P"

como

\ 9 / | reset

level

\-----/ | e'

usado so

Nivel mais baixo (numeros maiores) \ D / | no

page

\./ |

footing



RESET LEVEL 40.0 THEN

(40.0 * TAXA-HORA) + ((HORAS-TRABALHADAS - 40.0) * 1.5 * TAXA-

HORA)

ELSE

(40.0 * TAXA-HORA)



O ColCalc especificado na DEFINE LINES para o item PGTO-TOTAL deve ser

CALC!



Uma vez que a formula do PGTO-TOTAL se baseia em HORAS-TRABALHADAS

total, em vez do valor do ultimo registro do detalhe, o CALC deve ser

especificado para o ColCalc do PGTO-TOTAL.





=========================================================================

=======



____HP3000





HP 3000 Application Note #88







Sergio Weiser

Analista de Suporte





Perguntas e Respostas sobre Native Mode Spooler





Introducao



Este Application Note apresenta algumas das perguntas e respostas mais

comuns a respeito do Native Mode Spooler.



O Native Mode Spooler foi introduzido no MPE/XL G.40.00 (2.1).



1. Tenho percebido um problema com os cabecalhos de minhas impressoras

que continuam ligados apos um startup do sistema. Tenho o comando

HEADOFF para cada uma de minhas impressoras no arquivo SYSSTART.



O que ha de errado? Por que os cabecalhos nao sao desligados? Como

posso desliga-los?



R. Com o Native Mode Spooler pode haver um problema de tempo entre o

momento em que o STARTSPOOL tem efeito e o momento em que o HEADOFF

e' executado. O processo de spool deve ter rodado completamente

antes que o HEADOFF possa ser executado.



Se o comando HEADOFF e' executado antes do processo de spool, ele

nao tera qualquer efeito. A inclusao do HEADOFF no SYSSTART pode

causar este problema de tempo e executar o comando muito cedo.



E' recomendado que o comando HEADOFF seja colocado em um JOB que o

SYSSTART possa disparar. Isto assegura que o processo do spool ja

tenha terminado por completo antes da execucao do HEADOFF.



* * * * * * * * * *



2. Qual a ordem de impressao dos arquivos de spool no Native Mode

Spooler?



R. Veja a pagina 4-39 do Native Mode Spooler Reference Manual (HP part

number 32650-90166).



O dispositivo de saida dos arquivos de spool processa primeiramente

em ordem de prioridade e em seguida na ordem em que o arquivo

entrou no estado READY.



* * * * * * * * * *



3. Antes do Native Mode Spooler, se eu tivesse multiplas copias de

dois arquivos de spool, eles eram impressos intercalados (uma copia

do primeiro arquivo, uma copia do segundo, uma copia do primeiro,

etc.). Com a nova versao do MPE/XL, os arquivos nao saem mais

intercalados e todas as copias do primeiro arquivo sao impressas

antes de imprimir qualquer copia do segundo arquivo. Eu tenho dois

arquivos de spool que juntos formam um relatorio. A funcao de

intercalacao e' necessaria para evitar desperdicio de tempo na

separacao das listagens. Existe maneira de se fazer a intercalacao?



R. Para conseguir a intercalacao voce deve fazer um merge dos dois

arquivos de spool em um so e em seguida imprimir este arquivo

gerado varoas vezes. Os comandos para tal sao:



:BUILD MYFILE;REC=-132,1,F,ASCII;CCTL

:FCOPY FROM=O###.OUT.HPSPOOL;TO=MYFILE;CCTL (primeiro arquivo)

:FILE MYFILE=MYFILE;ACC=APPEND

:FCOPY FROM=O###.OUT.HPSPOOL;TO=*MYFILE;CCTL (segundo arquivo)

:FILE LP;DEV=LP,1

:FCOPY FROM=MYFILE;TO*LP;CCTL

:LISTSPF

:SPOOLF O###.OUT.HPSPOOL;COPIES=## (novo arquivo)

:SPOOLF O###.OUT.HPSPOOL;PRINT



* * * * * * * * * *

4. Como faco para "apendar" um arquivo de spool em um arquivo

environment?



R. Para "apendar" um arquivo Native Mode Spooler, siga os seguintes

passos:



:FILE X;DEV=DISC;REC=-132,,F,ASCII;DISC=###;CCTL;STD

:FCOPY FROM=O###.OUT.HPSPOOL;TO=*X;CCTL;NEW

:EDITOR ---|

/A .1 |

.1 A |-----> modificacao de pos para pre-espacamento

.2 // |

/K X,UNN |

/E ---|

:FILE Y;DEV=LP;ENV=LP2.HPENV.SYS

(remova ;ENV caso ENV nao seja desejado)

:FCOPY FROM=X;TO=*T;CCTL

caso deseje copiar somente certo numero de linhas,

o primeiro FCOPY e:

:FCOPY FROM=O###.OUT.HPPSOOL;TO=*X;SUBSET=(faixa);CCTL;NEW



* * * * * * * * * *



5. Como posso "apendar" arquivos de spool no Native Mode Spooler?



R. Para "apendar" arquivos de spool no Native Mode Spooler, use o

EDITOR. Quando estiver no EDITOR, de os seguintes comandos:



/TEXT O1.OUT.HPSPOOL

/JOIN O2.OUT.HPSPOOL

/KEEP arquivo

/EXIT



O procedimento acima cria um novo arquivo. O nome do arquivo e:



arquivo.grupo.conta



Para enviar o novo arquivo para o spooler, faca o seguinte:



:FILE LP;DEV=LP;CCTL

:FCOPY FROM=arquivo.grupo.conta;CCTL;TO=*LP;CCTL



E' criado um novo arquivo de spool que e' uma copia do O1.OUT.HPSPOOL

com uma copia do O2.OUT.HPSPOOL "apendado".



* * * * * * * * * *



6. Estou tentando olhar meu arquivo de impressao, usando o Native Mode

Spooler. As instrucoes do NM Spooler Reference Manual (32650-90166)

sao:



:EDITOR

/SET VARIABLE

/T O###.OUT.HPSPOOL



Quando faco isto, somente as colunas de 1 a 72 sao apresentadas.

Como posso ver os registros inteiros?



R. Existem duas maneiras de se visualizar o arquivo inteiro via

EDITOR:



1. Nao use o comando SET VARIABLE e ignore a mensagem que aparece

quando voce especifica o arquivo atraves do comando TEXT.



***WARNING*** RECORD SIZE TRUNCATED TO 255 BYTES.



(Voce pode ignorar o aviso porque raramente os registros de um

arquivo de impressao tem mais do que 255 bytes.)



ou



2. Apos o comando SET VARIABLE, execute SET LENGTH=nn SET RIGHT=nn

onde nn e' igual ao tamanho dos registros do arquivo.



Ambos os metodos resultam na apresentacao do registro inteiro.



* * * * * * * * * *



7. Como zerar o numero de DFID no Native Mode Spooler?



R. Existem duas maneiras:



1. Execute :SPOOLF @;DELETE, que limpa todos os seus arquivos de

spool. Em seguida execute um START NORECOVERY.



Se voce necessita destes arquivos de spool, certifique-se de

salva-los em fita atraves de um STORE/RESTORE antes da limpeza,

para que voce possa traze-los de volta quando o sistema ja

estiver levantado.



Com a introducao do Native Mode Spooler, o numero maximo para o

DFID foi aumentado de 32.767 para 9.999.999. Isto foi possivel

com o aumento do campo DFID de 16 para 32 bits.



2. Execute um INSTALL.



* * * * * * * * * *

8. Quando eu executo o comando LISTFTEMP @.@.@,2 em um job no meu MPE

XL 2.2, eu obtenho o seguinte:



TEMPORARY FILES FOR USER.ACCOUNT,PUB



ACCOUNT= 3000DEVS GROUP= DEVICES



FILENAME CODE ------------LOGICAL RECORD------------ ----SPACE----

SIZE TYP EOF LIMIT R/B SECTORS #X MX

00016384* 1516 1008B VACS 0 2097151 1 2048 1 *

00016385* 1515 1008B VAS 2 1 1 16 1 *



Qual o proposito destes arquivos?



R. A partir da versao 2.1, o STDIN e' 00016384.DEVICES.3000DEVS e o

STDLIST e' 00016385.DEVICE.3000DEVS. Estes sao arquivos de

dispositivos virtuais e representam um numero maior que o maior

ldev configuravel no sistema. A intrinseca WHO tambem retorna

00016385 como numero do terminal.



* * * * * * * * * *



9. Estou tentando chamar um arquivo de Native Mode Spooler no EDITOR.

Estou tendo um problema quando o arquivo tem mais do que 99.999

registros. O EDITOR deve ser melhorado para conseguir trabalhar com

arquivos de spool com mais do que 99.999 registros.



R. O EDITOR consegue numerar os registros de 00000.001 ate 99999.999,

incrementando cada linha em .001.



O esquema de numeracao default do EDITOR inicia, entretanto, a

linha com o numero 1 e e' incrementado de 1. Isto permite apenas

99.999 registros.



Para modificar o default, use o comando SET do EDITOR. Por exemplo:



:EDITOR

/SET DELTA=.001

/SET FROM=.001

/TEXT O###.OUT.HPSPOOL



* * * * * * * * * *



10. Acabou o espaco permanente em disco de minha maquina. Agora quando

tento rodar um job, obtenho a seguinte mensagem na console:



CAN'T FOPEN $STDLIST FOR "user.acct,group", ON LDEV #10 (js 76)



e os jobs param em um estado de WAIT. Apos a liberacao de espaco

permanente em disco, os jobs continuam em estado de WAIT. Tentei

executar o comando OPENQ ldev para cada impressora, mas obtenho a

seguinte mensagem:



SPOOLING QUEUE OPENED FOR DEVICE 00000006, BUT NOT IN EFFECT SINCE

SPOOLING QUEUES ARE GLOBALLY DISABLED. (CIWARN 4625)



Como fazer para que os jobs rodem?



R. Quando o Native Mode Spooler nao consegue fazer um FOPEN $STDLIST

por qualquer razao, no caso por falta de espaco em disco, ele

derruba todos os queues do spool, similar ao comando :SHUTQ @.



Para liberar todos os queues de spool, execute :OPENQ @.

* * * * * * * * * *



11. Geralmente tenho que interromper jobs e colocar pre-impressos na

impressora para permitir uma impressao de emergencia. Qual o

procedimento para suspender o spool e recomecar a impressao adiante

do comeco de meu arquivo de spool?



R. Execute o comando abaixo para suspender o spool e marcar o arquivo

para que seja reimpresso do comeco:



:SPOOLER LP;SUSPEND;OFFSET=1



Usando o 'OFFSET=1' se garante que o arquivo de spool seja

reimpresso do comeco. O default e' que a impressao continue

exatamente a partir da ultima pagina completamente impressa. Se

voce suspender o spooler e usar o default de KEEP, o OFFSET=1 pode

ser especificado no momento em que o spool e' resumido.



:SPOOLER LP;RESUME;OFFSET=1



Se voce usar o default KEEP e nao especificar OFFSET=1 no momento

da suspensao do spool e decide imprimir um arquivo de maior

prioridade, voce pode usar OFFSET=1 quando der o RELEASE no arquivo

de spool.



:SPOOLER LP;RELEASE;OFFSET=1



Se voce especificar NOKEEP quando suspender o spooler, sempre use

OFFSET=1 se voce quer o arquivo de spool impresso do comeco.



Se voce quer verificar se o spooler foi suspenso com a opcao KEEP

ou NOKEEP, execute o comando SHOW:



:SPOOLER LP;SHOW

LDEV DEV SPSTATE QSTATE OWNERSHIP SPOOLID



6 00000006 SUSPEND OPENED OUT SPOOLER #O321



Se o SPOOLID existir, entao, foi usada a opcao KEEP e o spooler

reativa este arquivo de spool quando executado um RELEASE, a nao

ser que o arquivo seja liberado ou excluido.



Para maiores informacoes, execute :HELP SPOOLER ALL ou veja o

capitulo 3 do Native Mode Spooler Reference Manual (32650-90166).



* * * * * * * * * *



12. Como posso modificar o conteudo de um arquivo de impressao?



R. Para modificar o conteudo de um arquivo de impressao faca o

seguinte:



1) Copie o arquivo de spool do OUT.HPSPOOL para um arquivo MPE

(flat).



(Vamos assumir que o arquivo seja o O10.OUT.HPSPOOL)



:COPY O10.OUT.HPSPOOL,arquivo



(onde arquivo e' um nome de sua escolha)



2) Usando o EDITOR, faca as modificacoes necessarias.



:EDITOR

/T arquivo

(Faca as modificacoes)

/KEEP;EXIT

*** WARNING *** NEW SERIAL FILE WILL REPLACE OLD SPOOL FILE.

arquivo ALREADY EXISTS - RESPOND YES TO PURGE OLD AND KEEP NEW

PURGE OLD? Y



3) Crie um novo arquivo que sera usado como arquivo de spool.



(O parÀmetro SPOOL e' usado para associar os atributos de spool

para o novo arquivo)



:BUILD arquivo2;DISC=#registros;SPOOL



4) Faca um FCOPY do arquivo para o arquivo2.



:FCOPY FROM=arquivo;TO=arquivo2



HP32212A.03.30 FILE COPIER (C) HEWLETT-PACKARD CO. 1990

*200*WARNING: FROM FILE RECSIZE IS 1276 BYTES,

TOFILE RECSIZE IS 1008 BYTES.

CONTINUE OPERATION (Y OR N) ? Y



(use o comando FCOPY em vez do COPY para que o novo arquivo de

spool mantenha seus atributos de arquivo de impressao)



5) Use o comando SPOOLF para enviar o arquivo de impressao para a

impressora.



:SPOOLF arquivo2;PRINT;DEV=LP



* * * * * * * * * *



13. Como e' usado o parÀmetro SELEQ= do comando LISTSPF?



R. Para usar SELEQ= com o comando LISTSPF, veja a sintaxe:



:LISTSPF spoolid;SELEQ= ^indirect_file

[select_eq]

^ ^

| |

| |

Voce deve incluir colchetes

Exemplos:



1) Listar todos os arquivos de spool enviados para LP para todos os

usuarios



:LISTSPF O@;SELEQ=[DEV=LP AND OWNER=@.@]



2) Listar todos os arquivos de spool que estao no estado PRINT



:LISTSPF O@;SELEQ=[STATE=PRINT]



3) Listar todos os arquivos de spool $stdlist



:LISTSPF O@;SELEQ=[FILEDES=$STDLIST]



4) Listar todos os arquivos de spool com prioridade 8



:LISTSPF O@;SELEQ=[PRI=8]



5) Listar todos os arquivos de spool no estado SPSAVE e criados dia

20/11



:LISTSPF O@;SELEQ=[(STATE=SPSAVE AND DATE=11/20/93)]



A sintaxe completa do comando LISTSPF e' apresentada abaixo:



LISTSPF [[IDNAME=] { spoolid )}

{(spoolid [,spoolid ]...)}

[[;SELEQ=] {[select-eq] }]

{^indirect_file }

[{;DETAIL}]

{;STATUS}



* * * * * * * * * *



14. Como posso direcionar a saida de um comando, como LISTSPF, para

um arquivo?



R. Execute o seguinte comando:



:LISTSPF(ou outro comando) >arquivo



Isto cria um arquivo temporario. Voce pode visualiza-lo, usando:



:LISTFTEMP arquivo



Voce pode salva-lo como arquivo permanente, executando:



:SAVE arquivo



* * * * * * * * * *



15. Como posso imprimir um arquivo que esta no estado SPSAVE?

R. Para imprimir um arquivo no estado SPSAVE voce precisa executar:



:SPOOLF arquivo.OUT.HPSPOOL;PRINT



Note que o nome do arquivo deve estar completo.



* * * * * * * * * *



16. O que e' a conta 3000DEVS?



R. A conta 3000DEVS e' usada para guardar informacoes de configuracao

para o Native Mode Spooler. Esta conta existe somente para versoes

MPE XL 2.1 ou superior.



Esta conta e' usada pelo Native Mode Spooler e nao e' acessivel ao

usuario.



Esta conta nao e' guardada na SLT ou em fita STORE, mas e' criada

toda vez que a maquina e' levantada.



* * * * * * * * * *



17. Na parte de MISC do SYSGEN existe um novo comando IO. O que e' isto

e o que aconteceu com o comando SPOOL?



R. O comando MISC SPOOL foi obsoletado quando o Native Mode Spooler

foi introduzido. O comando IO e' listado como substituto do comando

SPOOL. Existem tres parÀmetros para o comando IO, apresentados

abaixo:



io (io) [maxdyninput = dynamic input devs]

[maxdynoutput = dynamic output devs]

[maxdynio = dynamic I/O devs]



O Communicator da 2.2 diz INCORRETAMENTE que estes sao equivalentes

a IDD, ODD e XDD respectivamente.



O maxdyninput e maxdynoutput NAO sao usados pelo MPE XL. O maxdynio

e' o numero maximo possivel de sessoes virtuais. Nao deve ser mudado

a nao ser que a EDISA/HP assim o instrua.



Logo o comando IO nao e' como o comando SPOOL.



O comando SHOW apresenta a configuracao. O valor CURRENT (ATUAL) e

o valor configurado atualmente.



misc> show io



IO command parameter MAX MIN

CURRENT

------------------- ------------ ---------- ---------- ---

------

DYNAMIC INPUT DEVS maxdyninput 999 0

2

DYNAMIC OUTPUT DEVS maxdynoutput 999 0

4

DYNAMIC IO DEVS maxdynio 999 0

332



* * * * * * * * * *



18. Como posso imprimir parte de um arquivo de spool?



R. Existe um utilitario chamado PRINTSPF.PUB.SYS que imprime um

arquivo de spool em um $STDLIST. Abaixo, e' apresentado como enviar

a saida deste utilitario para a impressora:



:FILE LP;DEV=LP (use a impressora que voce desejar)

:RUN PRINTSPF.PUB.SYS;INFO="FILE=O###.OUT.HPSPOOL;START=###;&

END=###";STDLIST=*LP



O### e' o nome do arquivo. O ### apos START e' o numero do primeiro

registro a ser impresso. ### apos END e' o numero do ultimo registro

a ser impresso.



* * * * * * * * * *



19. Eu tenho um HP 3000 960 com MPE/XL 2.1. Tenho um usuario no

sistema com as seguintes capabilities: AM, AL, GL, ND, SF, IA, BA,

OP. Atualmente este usuario consegue ler os arquivos de spool

criados em outras contas. Eu pensava que usuarios com AM, Account

Manager, so poderiam ler os arquivos de spool criados dentro de sua

conta. Por que este usuario pode acessar arquivos de spool de

outras contas?



R. O usuario que tem OP, System Supervisor, pode acessar todos os

arquivos de spool da maquina. Nao de capability OP para os usuarios

que nao podem ver arquivos de spool de outras contas. Para maiores

informacoes, veja o Communicator 3000/XL for XL Release 2.1

part-numer (5957-7024).



* * * * * * * * * *



20. Apos upgrade para 2.2, notei que todos os arquivos de spool sao

sempre criados no LDEV 1. Eu verifiquei a configuracao de classes

no SYSGEN e todos os disc drives tem device class SPOOL, mas mesmo

assim, todos os arquivos de spool vao sempre para o LDEV 1. O que

esta causando isto e como posso fazer com que os arquivos de spool

possam ir para os outros discos tambem?



R. O problema esta relacionado com a maneira que o Volume Class SPOOL

esta definido no Volutil.



O problema e' que se o volume class 'SPOOL' existe em qualquer

lugar, todos os arquivos de spool irao somente para os dispositivos

desta classe. Entretanto se SPOOL nao for colocado como um volume

class, os arquivos de spool serao espalhados por todos os

dispositivos DISC.



Em outras palavras, o volume class SPOOL deve incluir TODOS os

discos que serao usados para SPOOL, ou NENHUM deles.



O VOLUME CLASS definido no VOLUTIL e' diferente do DEVICE CLASS

definido no SYSGEN e e' ai que aparece a maioria dos problemas.



Para verificar se o problema e' este, pode ser facilmente

diagnosticado atraves do VOLUTIL com os seguintes comandos:



:VOLUTIL

Mirvutil: A.00.01, (C) Hewlett-Packard Co. 1989. All Rights

Reserved.

volutil: SHOWCLASS SPOOL;INFO=VOLUMES



Volume name: Index:

------------ ------



MEMBER 1 1





Como no exemplo acima, se somente o ldev1 tiver volume class

'spool', entao, todos os arquivos de spool sao criados somente no

ldev 1.



Esta situacao pode ser corrigida expandindo o volume class 'spool'

para incluir todos os discos que voce quer que contenham arquivos

de spool.



Por exemplo, para adicionar MEMBER2 ao Volume Class Spool, execute:



volutil: EXPANDCLASS MPEXL_SYSTEM_VOLUME_SET:SPOOL (MEMBER2)



Note que apesar do MPEXL usar o Volume Class para determinar aonde

colocar os arquivos de spool, o Device Class 'spool' tambem deve

existir no SYSGEN em pelo menos um disco (nao importa qual). Isto

acontece porque o MPE XL verifica que o 'SPOOL' e' um Device Class

valido antes de verificar quais os dispositivos no Volume Class.



* * * * * * * * * *



21. O que sao os valores P1 e P2 apresentados pelo comando PRINTSPF?



R. Sao parÀmetros provenientes do MPE/V e eram usados originalmente

para chamadas de ATTACHIO. P1 e' para o controle do carro (da

impressora) e tem os seguintes significados:



Valor de P1 Significado

------------- -----------

Igual a 1 O primeiro byte do registro de saida e' o

byte de controle.

Diferente de 1 O proprio P1 contem o byte de controle.

P2 e' usado para controle da impressora. Tem os seguintes

significados:



Valor de P2 Significado

----------- -----------

Se impar Registro a ser impresso com pre-espacamento.

Se par Registro a ser impresso com pos-espacamento.

Bit 14 ligado Sem salto de perfuracao.

Bit 14 desligado Salto de perfuracao se necessario.



Para maiores informacoes, veja o Native Mode Spooler Reference

Manual (32650-90166).



* * * * * * * * * *



22. Tenho agora duas maquinas, uma com MPE/V e outra com MPE/XL versao

2.2. Eu utilizava o comando OUTPUT do SPOOK para enviar arquivos

para fita e transferi-los entre maquinas. Como eu faco isto com o

Native Mode Spooler?



R. Como o utilitario SPOOK nao existe mais a partir da 2.1, existe um

novo utilitario SPFXFER que tem compatibilidade com o spooler do

MPE/V. O SPFXFER tem quatro comandos. Sao eles HELP, EXIT, INPUT e

OUTPUT. Os comandos INPUT e OUTPUT tem a mesma sintaxe do

utilitario SPOOK.



=========================================================================

=======



____HP3000





HP 3000 Stack Operation





Sergio Weiser

Analista de Suporte





Os Centros de Suporte a Clientes recebem varias perguntas sobre a

arquitetura de stack (pilha) do HP3000 e os parÀmetros que controlam o

stack. Este Application Note foi escrito para sanar estas duvidas e

descreve a operacao de stack do HP3000.





INTRODUCAO





O HP3000 e' referenciado como uma "stack machine" porque seu desenho

esta centralizado no conceito de stack (pilha). O stack e' uma area de

armazenamento linear para dados, e' chamada assim porque os dados podem

ser colocados no "topo", "empurrando para baixo" os dados ja

presentes. Quando estes dados nao sao mais uteis, eles sao removidos

do "topo", "puxando para cima" aqueles que sobraram. Se voce ja

trabalhou com uma calculadora HP que tenha a tecla ENTER, entao voce

trabalhou com um stack.



Os beneficios da arquitetura stack sao varios:



* A alocacao de armazenamento e' dinÀmica. O armazenamento local e

alocado somente quando um procedimento comeca e e' liberado quando

este termina, permitindo que este seja usado por outros

procedimentos.



* O codigo e' mais compacto porque muitas instrucoes podem assumir

que seus parÀmetros existem no topo do stack. Registros extras

nao sao necessarios para parÀmetros de procedimentos e variaveis

temporarias.



* Recursao - habilidade de um procedimento para chamar a si mesmo

- e' possivel porque cada chamada aloca uma nova area no topo do

stack.





LAYOUT DO STACK





A Figura 1 apresenta o layout de uma area de stack e a maneira

com a qual os registros de stack na CPU delimitam as varias

partes. Cada processo tem seu stack proprio (privado), mas os

registros de stack, para o qual existe somente um grupo, apontam

para o processo de stack ativo no momento.



REGISTROS



A area de stack e' na parte de baixo por um registro DL e na parte de

cima por um registro Z. (O sistema reserva uma area antes da DL e

outra apos Z; serao mencionadas adiante. Sao inacessiveis no modo

usuario). Uma divisao principal em duas partes e' delimitada pelo

registro DB, que aponta para a locacao "base" do stack. A area entre

DL e DB providencia uma area dinÀmica para aplicacoes do tipo

informacoes de telas VPLUS e Pascal "heap.", mas nao e' acessada pelo

MPE.



Assim como o registro DB aponta para a locacao base do stack, o

registro S aponta para o atual topo do stack. A convencao de desenho

de um diagrama de stack corresponde a maneira pela qual o codigo e

escrito (ou qualquer linguagem escrita), comecando no topo da pagina e

procedendo ate o final. Assim o stack parece invertido, com a ultima

entrada (topo do stack) em sentido ao final do diagrama. Os enderecos

sao aumentados de cima para baixo.



Inicio da regiao |--------------------------------------|

| area PCBX |

Registro DL ---> |--------------------------------------| | |

| Area DL (gerenciada pelo usuario) | | DL = |

Registro DB ---> |--------------------------------------| | |

| Area DB (globals, PARM, INFO) | |

MAXDATA=

Registro Q ---> |--------------------------------------| | |

| Armazenamento local dos | | |

| procedimentos atuais | | |

Registro S ---> |--------------------------------------| | STACK= |

| Disponivel para novos dados | | |

| (nao usado) | | |

Registro Z ---> |--------------------------------------| |

| Area de stack overflow |

Fim da regiao |--------------------------------------|



Figura 1. Stack de processo atual





Considerando que os conteudos dos registros DB e Z sao estaticos, o

conteudo do registro S esta constantemente mudando com o progresso do

programa, movendo-se para cima e para baixo dentro da area de stack.

Durante todo o tempo, a area entre DB e S fica preenchida com dados

validos, enquanto que a area entre S e Z fica disponivel para dados

adicionais. Se a quantidade exceder o espaco disponivel, a tentativa

de mover S alem de Z causara uma interrupcao no sistema operacional,

que podera alocar espaco adicional (novo valor para Z) uma ou mais

vezes -- dentro de certos limites.

Ao contrario do movimento de fluir celula-a-celula do registro S, o

registro Q move-se esporadicamente em "pulos". O proposito deste

registro e' reter o ponto de inicio dos dados relacionados com o

procedimento atual. Entao, quando um novo procedimento comeca, Q

"pula" adiante para estabelecer um novo ponto de inicio no atual topo

do stack. Por outro lado, quando um procedimento termina, Q "pula" de

volta para o lugar marcado antes pelo procedimento anterior.



No que diz respeito ao procedimento atual, seus dados consistem em

posicoes da base de Q ate o atual topo do stack, mais os parÀmetros

passados a este (localizados exatamente antes do Q atual), mais as

posicoes na area (global) DB-ate-inicio-de-Q.





AREAS DE STACK



Uma vez que ja foram apresentados os registros que o sistema usa para

delimitar as areas de stack, podemos prosseguir na descricao destas

areas. Durante esta secao, voce pode querer referenciar a Figura 1.





PCBX



A area Process Control Block Extension (PCBX) (Extensao da Blocagem de

Controle de Processo) contem informacoes necessarias para controlar a

atividade de processos eficientemente, "setando" registros e

"pointers" de arquivos. Inicialmente esta area tem %650 (424 decimal)

words de extensao, mas pode ser expandida pelo MPE de acordo com a

quantidade de arquivos abertos.

Area DL-DB (DL-DB Area)



A area entre DL e DB e' uma area de arquivamento global gerenciada pelo

usuario e nao acessada pelo MPE. Certos subsistemas usam 10 words da

DB-10 ate DB-1. O VPLUS tambem usa esta area para guardar seus buffers

de tela e informacoes de controle. O BASIC usa a area DL para alocacao

de buffer de arquivo e passagem de parÀmetros. O Pascal/3000 tambem

usa esta area para seu "heap".



O tamanho desta area pode ser modificado dinamicamente chamando-se a

intrinseca DLSIZE.



Area Global (Global Area)



Esta area e' usada para variaveis globais, declaradas dentro do grupo

de dados do programa principal e usada por qualquer procedimento

dentro deste programa. Contem tambem arrays globais e ponteiros destes

arrays. O tamanho desta area e' calculado pelo "segmenter" durante o

momento de preparacao do programa e e' guardado no arquivo de programa.

O tamanho e o conteudo da area global sao determinados pelo numero de

variaveis globais e suas iniciacoes como especificadas pelo

programador. Esta area e' delimitada pelo registro DB e pelo registro

(inicial) do registro Q.



No momento de execucao, o "loader" guarda o parÀmetro PARM, a string

INFO e o tamanho na area global, aumentando seu tamanho como

determinado pelo tamanho da string INFO.





Stack de Trabalho (Working Stack)



Do ponto de vista do usuario do programa, esta e' a area mais ativa

dentro do stack -- e' a area onde os dados temporarios dos usuarios sao

guardados e manipulados. Ela e' limitada pelos enderecos contidos em Q

(inicial) e Z. Seu tamanho (stacksize) e' especificado com o comando

:RUN, comando :PREP, ou de um valor calculado pelo "Segmenter", nesta

ordem. O valor e, entao, comparado ao valor configurado para o

STANDARD STACK SIZE, e o maior valor e' escolhido.





Area Local de Procedimento (Procedure Local Area)



Dentro do Stack de trabalho, esta area contem dados relacionados

somente com o procedimento que esta sendo executado. A marca atual de

Q especifica o comeco desta area e S indica o final, apontando para o

ultimo item de dados valido dentro do stack.





Area Disponivel



Ainda dentro do stack de trabalho, esta area e' o espaco que fica

disponivel para novos dados. E' delimitada pelos enderecos do registro

S e registro Z. Z indica a ultima posicao de memoria principal que

pode ser usada pelos dados do usuario dentro do stack.



O tamanho desta area pode ser modificado dinamicamente com a

intrinseca ZSIZE.



Area de Stack Overflow



Esta area e' disponivel para stack overflow, uma condicao que ocorre

quando S deve ser movida alem de Z e espaco deve ser providenciado

para certas informacoes de fim-de-stack (end-of-stack). Esta area de

buffer fica entre Z e o final do segmento de dados e atualmente tem a

extensao de 128 words.









PROCEDIMENTOS PARA UTILIZAR O STACK





O conceito do procedimento esta centralizado na ideia de programacao

estruturada e modular. Esta secao descreve como o stack e' afetado

pelas chamadas e saidas de procedimento.





Inicializacao do Processo



A Figura 2A mostra como o stack e' marcado no inicio da execucao de um

processo. O espaco e' primeiramente reservado para dados globais,

comecando no endereco DB e terminando no endereco Q, que denota o

comeco da area de stack de trabalho. Entretanto, com a continuacao da

execucao do processo, dados sao adicionados ao topo do stack e o

registro S move-se para longe da posicao apontada por Q. Veja Figura

2B.





Chamada de Procedimento



Se o processo executar uma chamada de procedimento (instrucao PCAL),

uma nova area para dados locais deste procedimento deve ser definida.

Por isso, o hardware coloca um grupo de quatro palavras chamadas de

"marcador do stack" (stack marker) no topo do stack; esta informacao

define o ambiente atual e sera usada mais adiante para restabelece-lo,

quando o procedimento chamado terminar. Os registros Q e S sao, entao,

apontados para a palavra mais acima deste marcador de stack para entao

delimitar o comeco de uma nova, fresca e unica area de arquivamento

local para o procedimento chamado (Figura 2C). Quando dados sao

adicionados ao stack durante a execucao de um novo procedimento, S

move-se para longe do (novo) Q, refletindo os ultimos dados

adicionados (Figura 2D).



Saida para o Chamador



Quando este procedimento volta ao seu chamador, a nova area de dados

locais e' excluida do stack, e o marcador do stack e' usado para voltar

o ambiente anterior, incluindo as marcacoes de S e Q. Isto resulta em

um stack "limpo" do qual o local de armazenamento do procedimento

chamado e' eliminado porque nao e' mais necessario. Esta area sera usada

novamente para chamadas de outros procedimentos. Veja Figura 2E.



DL _______________ DL _______________ DL

_______________

| | | | |

|

| Area | | Area | | Area

|

| DL | | DL | | DL

|

DB |_______________| DB |_______________| DB

|_______________|

| | | | |

|

| Area Global | | Area Global | | Area

Global |

Q,S |_______________| Q |_______________| Q |------------

---|

| | | | (velho) |

|

| | | Area Local do | | Area Local

do |

| | | Programa | | Programa

|

| | | Principal | | Principal

|

| | S |_______________| S

|_______________|

| | | | | (velho)

|_______________|

| | | | | |__Marcador

de__|

| | | | | Q , S

|____Stack______|

| | | | (novos)

|_______________|

| | | | |

|

| | | | |

|

| | | | |

|

| | | | |

|

| | | | |

|

| | | | |

|

Z |_______________| Z |_______________| Z

|_______________|

Figura 2A Figura 2B Figura

2C



DL _______________ DL _______________

| | | |

| Area | | Area |

| DL | | DL |

DB |_______________| DB |_______________|

| | | |

| Area Global | | Area Global |

Q |---------------| Q |---------------|

(velho) | | | |

| Area Local do | | Area Local do |

| Programa | | Programa |

| Principal | | Principal |

S |_______________| |_______________|

(velho) |_______________| | |

|__Marcador de__| | Novos Dados |

|____Stack______| S |_______________|

Q |_______________| | |

(novo) | | | |

| Dados Locais | | |

| Procedimentos | | |

S |_______________| | |

(novo) | | | | |

| | | | |

Z |_______________| Z |_______________|

Figura 2D Figura 2E



Sumario



Toda vez que um procedimento e' chamado, os registros Q e S sao

manipulados como descrito acima. Q muda com cada chamada ou saida de

procedimento, e S pode mudar quando uma instrucao referencia dados.

Entao, quando um processo executa um programa principal que chama tres

procedimentos (principal chama A que chama B que chama C), havera um

maximo de quatro areas locais (uma para o principal e uma para cada

procedimento) no stack. Cada area local de procedimento e' delimitada

em sua base pelo marcador de stack apontando para o chamador do

procedimento. Estes marcadores servem para formar uma cadeia logica,

do mais recente para o mais antigo, que liga o registro Q atual,

marcando-o de volta ao seu valor inicial.





Stack Overflow



Se um procedimento aloca espaco de armazenamento suficiente, ou

ocorrem varias chamadas ligadas, S pode mover-se alem de Z. Esta

condicao e' conhecida como stack overflow e pode, ou nao, abortar o

programa. O sistema operacional tenta aumentar Z, mas so pode faze-lo

enquanto o numero de words entre DL e (novo) Z for menor ou igual ao

MAXDATA (veja abaixo). Se MAXDATA for excedido, o MPE aborta o

programa com mensagem de erro de STACK OVERFLOW.

Uma vez que a expansao de Z pode requerer que a ida do stack para

disco, o MPE tenta expandi-lo mais do que o necessario para retificar

o overflow. Isto reduz o numero de vezes que o processamento deste

overflow e' executado. O MPE nunca diminui Z; entao se um programa

chamar um procedimento que aloque uma grande parte de area de

armazenamento local e este procedimento termina, havera um grande

espaco nao usado entre S e Z. Se o espaco nao for reutilizado por

outros procedimentos, entao Z pode ser diminuido chamando-se ZSIZE,

podendo acarretar em uma pequena melhora de performance.





PAR¢METROS DO STACK



Esta secao apresenta como o sistema determina o tamanho do stack e

quais parÀmetros sao disponiveis para que voce modifique este valor.



O valor total do segmento de dados ocupado por um stack pode ser

mostrado pela seguinte expressao:



tamanho total = pcbx + dl + global + stack + armazenamento



Em outras palavras, o tamanho do segmento de stack e' simplesmente a

soma dos tamanhos de seus componentes. O MPE assegura que o valor

total e' menor do que 32.764 words.



O tamanho inicial do PCBX e' fixado em %650 (424) words. O tamanho do

DL e' calculado como descrito acima e arredondado para que a soma deste

com o PCBX seja um multiplo de 128 words.



O tamanho do global e' simplesmente o tamanho do segmento calculado da

area inicial de DB. No momento de execucao, as tres words para PARM,

tamanho da string INFO e o apontador INFO, mais a propria string INFO

sao adicionados ao global para chegar no valor final.



O tamanho do stack e' o numero de words entre o Q (inicial) e Z

(inicial). Note que este nao inclui a area DB; ao contrario, este e' o

armazenamento para o stack de trabalho.



O tamanho do armazenamento e' a area reservada para o processamento de

stack overflow. Este e' um valor fixo para o MPE e esta fixado em 128

words.





DL



Este parÀmetro especifica o tamanho inicial para area DL. Pode ser

usado com o :RUN e :PREP; o valor dado para o :RUN (se informado) tem

precedencia. Se nenhum valor for especificado para o tamanho do DL, o

sistema associa um valor zero. Em alguns casos, o sistema concede uma

area suficiente de DL (arredondando acima) para assegurar que o

tamanho da area do comeco do PCBX ate que DB seja um multiplo de 128

words.



Este parÀmetro NAO deve ser usado para tentar alocar espaco de DL para

o VPLUS porque o VPLUS sempre aloca espaco de DL alem daquele ja em

uso.





STACK



Este parÀmetro e' usado para controlar o tamanho inicial do stack. Pode

ser usado com o :RUN e :PREP (:RUN tem precedencia); se nao

especificado, sera o valor calculado pelo segmento quando o programa

esta sendo usado. Este valor (do :RUN :PREP ou segmenter) e' entao

comparado ao STANDARD STACK SIZE do sistema (configurado no :SYSDUMP)

e o maior valor e' o usado.



Tipicamente, o tamanho do stack calculado pelo segmenter e' suficiente

e o parÀmetro nao precisa ser usado. Se, entretanto, seu programa

alocar muita area de armazenamento local logo no comeco, voce pode

evitar o overhead causado pelo processamento do stack overflow (veja

acima), usando este parÀmetro.





MAXDATA



Este parÀmetro, ao contrario do STACK=, nao afeta a quantidade de

memoria ocupada pelo stack. E' usado para limitar o tamanho da porcao

do segmento de stack entre DL e Z e, como resultado, controla a

quantidade de memoria virtual reservada para o stack.



MAXDATA DEVE ser especificado se seu programa, ou qualquer coisa

chamada pelo programa, usar as intrinsecas DLSIZE ou ZSIZE. Por

exemplo, VPLUS usa DLSIZE para alocar espaco DL para a "Comarea

Extension", e o SORT programatico usa ZSIZE para alocar espaco de

buffer. MAXDATA pode ser obrigatorio se o "guesstimate" do segmenter

nao for suficiente para um programa em particular; isto geralmente nao

e coberto durante testes, quando o programa aborta com STACK OVERFLOW

nao atribuivel para um erro de programa. De qualquer maneira, MAXDATA

deve ser especificado grande suficiente para acomodar a maior

diferenca entre DL e Z.



Por que nao colocar MAXDATA no maximo para todos os programas? Por uma

serie de razoes:



1) Isto gasta memoria virtual, que pode necessitar um RELOAD (pelo

menos um COOLSTART) para reconfigurar;



2) Dependendo das circunstÀncias, o sistema de arquivos pode nao

conseguir obter espaco para o PCBX, que causara a falha de FOPEN

com NO MORE ROOM LEFT IN STACK SEGMENT FOR ANOTHER FILE ENTRY

(FSERR 74). Isto acontece porque dentro de certas condicoes, o

tamanho maximo do PCBX e' funcao do MAXDATA: quanto maior o MAXDATA,

menor o PCBX.





NOCB



Este parÀmetro, especificado com o :RUN (somente), diz ao MPE para

minimizar seu uso de PCBX para informacoes do arquivo. Isto pode

permitir que a porcao entre DL e Z do stack seja um pouco maior, e

podendo talvez evitar o FSERR 74 mencionado acima. A desvantagem e' que

o File System pode precisar usar mais segmentos de dados; isto pode

atrapalhar um pouco a performance.





=========================================================================

=======



____HP9000





Procedimentos de Instalacao





Alessandra Tronquini

Analista de Suporte





Esse artigo fornece dicas sobre a instalacao do HP-UX, tomando-se como

base equipamentos da linha 8x7, com a seguinte configuracao de

Hardware:



1 disco de boot no endereco 52.6.0

1 unidade de fita Dat no endereco 52.0.0

versao do Sistema Operacional 8.02





Nota: Se voce tiver equipamentos HP de outra linha, verifique no

manual de instalacao que voce recebeu junto com a maquina para saber

os enderecos especificos. Se seu equipamento nao esta com uma

configuracao padrao, e voce nao conseguir identifica-la, entre em

contato com a assistencia tecnica de Hardware.





Em primeiro lugar, voce so deve instalar o sistema se ele ainda nao

estiver instalado, se ocorrer perda do sistema operacional ou se voce

desejar reconfigurar os sistemas de arquivos, envolvendo a raiz.





OBS.: Se voce esta reinstalando o sistema e tiver mais do que um

disco, verifique, antes de tudo, o endereco do disco de boot. Para

tanto, execute:



# mount



/ on /dev/dsk/c0d0s13 read/write on Thu Mar 11 08:51:23 1993

.

.

.



Esse comando vai trazer o dispositivo onde esta montada a raiz do

sistema, como no exemplo anterior (/dev/dsk/c0d0s13). Depois voce deve

executar:



# lssf /dev/dsk/c0d0s13



disc3 lu 0 section 13 address 52.6.0 /dev/dsk/c0d0s13

^

|

Esse endereco voce vai utilizar para instalar a maquina (veja

adiante).



Certifique-se que as fitas "HP-UX Install" e "1-8 User Series 800"

estao com voce.







I- INSTALACAO DO HP-UX





1) Ligue todos os perifericos (console, impressoras, etc) e por ultimo

a CPU.



2) Carregue na unidade a fita HP-UX Install (verifique se ela esta

protegida contra gravacao).



3) Pressione qualquer tecla, assim que aparecer na console a mensagem:



Autoboot from primary boot path enabled.

To override, press any key within 10 seconds.



4) O sistema apresenta as seguintes perguntas, uma a uma. Conforme

voce vai respondendo (o que esta em negrito), o sistema fornece a

proxima pergunta.



Boot from primary boot path (Y ou N)?> n

Boot from alternate boot path (Y or N)?> n

Enter boot path, command, or ?> 52.0.0



5) O sistema ira bootar e entrar no prompt ISL>



6) No prompt digite:



ISL> hpux install





OBS.: se estiver reinstalando em um sistema com mais de 2 discos, veja

a observacao no inicio do artigo. Nesse caso, e' melhor voce digitar no

prompt do ISL:



ISL> hpux -a (52.6.0) (52.0.0;0xa0000,1)



7) Quando aparecer a mensagem



PRESS RETURN to bring up the interactive screen

tecle . Aparece uma tela chamada "Root Disk Partitioning":

+------------------------------------------------------------------------

+

| +-------------------------------------------------------+

|

| | Root Disk Partitioning |

|

| +-------------------------------------------------------+

|

|

|

| Filename Type (long or short): s Disk Type: 7935

|

|

|

| Section Size Section Names Section

|

| (Mb) (eg.swap,/,/tmp,/usr,/mnt,/extra) Layout

|

| +---------------------------------+ +-----------------+

|

| 6 2 | boot (required on root disk) | | 6 (boot) |

|

| 0 24 | | | 0 |

|

| 14 24 | | | 15 |

|

| 10 129 | | | 1 |

|

| 3 29 | | | 14 ^ |

|

| 4 107 | | | | |

|

| 5 53 |_________________________________| | 10 ^ | |

|

| | | | |

|

| 15 48 | swap | | 3 ^ | 13 |

|

| 1 48 | | | | 11 | |

|

| 9 161 | | | 4 ^ 8 | | |

|

| 8 190 | | | 9 | | | |

|

| 11 319 | | | | | | | |

|

| 13 344 | / | | 5 | | | | |

|

|

|

|

|

| _____ _____ _____ _____ _____ _____ _____ ____

|

| 1|Perf.| 2|Def. | 3|Refr.| 4|Help | 5| | 6| | 7| | 8| |

|

| |Task | |Val. | | | | | | | | | | | | |

|

| ----- ----- ----- ----- ----- ----- ----- ----

|

+------------------------------------------------------------------------

+



Essa tela mostra a configuracao default para o disco de boot. Note que

ela pode variar de disco para disco. Se voce desejar modificar essas

areas, basta movimentar o cursor com as setas de direcao, apagar a

area a ser modificada com a barra de espaco e digitar na "section"

desejada.



8) Apos a configuracao desejada, pressione a tecla F1 para que o

sistema comece a particionar o disco, dando continuidade a instalacao.



9) O sistema pede confirmacao com a mensagem:



Ok to begin installation



Responda y. A tela e' limpa e o sistema vai montar a estrutura do

disco e baixar alguns arquivos da fita de instalacao.

10) Depois que alguns arquivos sao baixados no disco, a seguinte

mensagem e' apresentada:



User ACTION TO BE TAKEN:

Please unload the install media and load the update

media.





11) Tire a fita de instalacao da unidade e carregue a "1-8 User Series

800".



NAO PRESSIONE NENHUMA TECLA ATE O SISTEMA EXECUTAR ALGUNS

PROCEDIMENTOS E REBOOTAR O SISTEMA! (o reboot sera automatico)



12) O sistema apresenta a mensagem:



--Press "Return" to continue--



Agora sim, voce pode teclar .



13) O seguinte menu e' apresentado:



+------------------------------------------------------------------------

+

| INSTALL Main Menu

|

|

|

| Highlight an item and press "Return" or "Select Item".

|

| To refresh the screen press CTRL-L.

|

|

|

| Source: Tape Device Destination: Local System

|

| /dev/src_device /

|

|

|

|

|

| Select All Filesets on the Source Media ->

|

| Select Filesets for a Minimum System ->

|

| Select/View Partitions and Filesets ->

|

|

|

|

|

| How to Use Install

|

|

|

| ----- ------ ------ ------ ------ ------ ------ -----

|

| |Help | |Shell | |Select| | | | | | | | Exit | | |

|

| | | | | | | | | | | | | |Update| | |

|

| ----- ------ ------ ------ ------ ------ ------ -----

|

+------------------------------------------------------------------------

+



14) Como a fita nao vem com alguns filesets completos (como, por

exemplo, NetWork, que e' um pacote a parte) voce deve entrar na opcao

"Select/View Partitions and Filesets ->" para selecionar apenas o

necessario para a instalacao.

15) Um outro menu e' aberto, contendo os pacotes que voce deve baixar:



+------------------------------------------------------------------------

+

| View/Select Individual Partitions

|

|

|

| Mark "y" or "n" to make a selection.

|

| Press "Partit'n Screen" to return to the partition selection screen

|

|

|

| Select Partition Partition Description Size in Kbytes

|

|

|

| p DIAGNOSTICS Hardware Disgnostic Programs 37663

|

| y NETWORKING Networking Products 8919

|

| y NLS Native Language Support 472

|

| y OS-ADMIN Recommended Administration Cmds 2292

|

| y OS-CORE Recommended System Core 5517

|

| y OS-FEATURES Selectable OS Features 8176

|

| y PROG-LANGUAGES Programming Languages 8542

|

| y REFERENCE-DOC Reference Manual Pages 348

|

| y SHARED-LIBS Runtime Shared Libraries 2757

|

| y WINDOWS Windowing Products 102

|

|

|

| ----- ------ ------ ------ ------ ------ ------ -----

|

| |Help | | | |Shell | |Start | |Disk | |View | |Global| |Main |

|

| | | | | | | |Load. | |Space | |Select| |Select| |Menu |

|

| ----- ------ ------ ------ ------ ------ ------ -----

|

+------------------------------------------------------------------------

+



16) Digite n para os pacotes que voce nao comprou, pois eles podem

ocupar espaco em disco sem necessidade, como por exemplo, NETWORKING e

WINDOWS. (Basta voce se posicionar na linha desejada com as setas de

direcao e digitar o valor correto).



17) Tecle F4 (Start Loading). Nesse momento o sistema vai baixar todo

o sistema operacional. Quando terminar de baixar ele customiza cada

pacote e gera um novo kernel. Note que o sistema pode "rebootar" duas

vezes durante a instalacao.



18) Finalmente o sistema pede para voce especificar uma "Time Zone"

para setar a data do seu sistema. Opcionalmente voce pode especificar

o endereco da maquina caso voce queira configurar a maquina para

instalar rede local nesse momento, como veremos a seguir:

________________________________________________________________



Welcome to HP-UX!



Before using your system, you will need to answer a few

questions.



The first question is whether you plan to use this system on a

network.



Answer "yes" if you have connected the system to a network and

are ready to link with a network.



Answer "no" if you:



* Plan to set up this system as a standalone (no networking).



* Want to use the system now as a standalone and connect to

a network later.

_________________________________________________________________



Are you ready to link this system to a network?



Press [y] for yes or [n] for no, then press [Return] n









_________________________________________________________________





Before you begin using this system, you need to provide the

following information:



* A name for your system (host name).



* Your time zone.



NOTE: If you plan to eventually connect your system to a

network, you may want to check with your network administrator

to obtain a valid system name now, so you won't have to change

it later.

_________________________________________________________________



Do you wish to continue?



Press [y] for yes or [n] for no, then press [Return] y

_________________________________________________________________



For the system to operate correctly , you must assign it a unique

system name. The system name, or host name, must:



* Contain no more than 8 characters.



* Contain only letters, numbers, underscore (_), or dash (-).



* Start with a letter.



NOTE: Uppercase letters are not recommended.



If you do not yet have a system name, you may select the default

name of 'unknown' by pressing [Return].



_________________________________________________________________



Enter the system name, then press [Return]

You have chosen unknown as the name for this system.

Is this correct?



Press [y] for yes or [n] for no, then press [Return] y









_________________________________________________________________



The following procedure enables you to set the time zone.



Select your location from the following list:



1) North America or Hawaii



2) Central America



3) South America



4) Europe



5) Africa



6) Asia



7) Australia, New Zealand



_________________________________________________________________





Enter the number for your location (1-7), then press [Return] 3



_________________________________________________________________

Select your time zone from the following list:



1) Argentina, Eastern Brazil



2) Western Brazil, Bolivia, Chile



3) Venezuela, Guyana, Surinam



4) Peru, Ecuador, Columbia



5) Unlisted time zone



6) Previous menu

_________________________________________________________________



Enter the number for your time zone (1-6), then press [Return] 1

The time zone entered is Argentina, Eastern Brazil.

Is this correct?



Press [y] for yes or [n] for no, then press [Return] y









_________________________________________________________________



This section enables you to set the system clock.

_________________________________________________________________



The current system time is Mon Mar 8 15:18:50 SAT 1993



OBS.: Responda n somente se a data que o sistema fornecer estiver

incorreta. Assumiremos, nesse exemplo, que esta incorreta.



Is this correct?



Press [y] for yes or [n] for no, then press [Return] n









_________________________________________________________________

You will be prompted for the date and time. Please enter all

values numerically, for example January is 1. The values in the

parenthesis give the acceptable range of responses.

_________________________________________________________________





Please enter the month (1-12), then press [Return] 7

Please enter the day of the month (1-31), then press [Return] 1

Please enter the last two digits of the year (70-99), then press

[Return] 93

Please enter the hour (using 24 hour time) (0-23)

For example: For 10 in the morning enter 10, for 3 in the

afternoon enter 15. Then press [Return] 15

Please enter the minute (0-59), then press [Return] 30

You have entered: July 1 15:30:00 SAT3 1993.

This time will be used to reset the system clock.



Is this value correct?



Press [y] for yes or [n] for no, then press [Return] y

The date and time have been set to: Thu Jul 1 15:30:00 SAT 1993



Press [Return] to continue...







_________________________________________________________________



Congratulations! Your system is now configured as a standalone

system with the system name unknown!



After you have obtained a network system name and network IP

address from your network administrator, and connected this

system to a network, type this command (you may want to note this

for later reference):



/etc/set_parms hostname [Return]



To fully utilize the capabilities of your system, you may have to

perform some additional system configuration tasks using the

HP-UX "sam" (System Administration Manager) command. Consult your

local administrator or the "HP-UX System Administration Tasks"

manual for more information.



The system will now complete its boot process, and allow you to

login as 'root'.



_________________________________________________________________





Press [Return] to continue...

19) Enfim, quando o prompt de login aparecer, significa que a

instalacao esta completa!!!

II- APOS A INSTALACAO





Depois de instalado o Sistem Operacional, voce deve configura-lo:

criar terminais, impressoras, usuarios, scripts para facilitar a vida

dos operadores, comandos automaticos para serem disparados pelo

sistema em determinada hora, baixar seus aplicativos, etc.



Feito isso, voce deve fazer um backup total da maquina para eventuais

perdas de arquivos e mante-lo em lugar seguro. Alem disso, sera uma

boa ideia se voce comprar uma pasta para guardar todas as tabelas de

configuracao do sistema. Isso serve para que, se algum dia voce tiver

algum problema mais grave, e precisar reinstalar a maquina, ou se por

qualquer motivo voce perder uma das tabelas, sera muito facil deixa-la

novamente com a configuracao correta, sem precisar perder fios de

cabelo. As principais tabelas sao as seguintes:



/.profile

/etc/profile

/etc/passwd

/etc/group

/etc/checklist

/etc/inittab

/etc/hosts

/etc/rc

/usr/spool/cron/crontabs/root

/etc/super_blocks

/etc/conf/gen/S800



Ah, nao se esqueca tambem de guardar os modelos de seus perifericos

(disco, impressoras, terminais) e suas respectivas configuracoes

(velocidade e paridade, em que porta estao ligados, etc). Isso

diminuira o tempo de solucao quando voce precisar acessar a Central de

Suporte.

Obs.: Para verificar o modelo do disco imprima o conteudo do seguinte

comando:



# diskinfo -v /dev/rdsk/c0d0s6

SCSI describe of /dev/rdsk/c0d0s6:

vendor: HP

product id: C2473S

type: direct access

size: 677191168 bytes

bytes per sector: 512

rev level: 0B02

blocks per disk: 1322639

ISO version: 0

ECMA version: 0

ANSI version: 2

removable media: no

response format: 2

=========================================================================

=======



____HP9000





Cadastramento de Impressoras





Sandra Carolinski

Analista de Suporte







Este artigo fornece dicas de como configurar impressoras no sistema,

usando ou nao o spooler. Sao enfocados equipamentos modelo HP 9000 8X7

e 835.



Existem tres maneiras de se cadastrar uma impressora serial. A

primeira utilizando os comandos do sistema (manualmente), a segunda

via SAM e a terceira utilizando apenas direcionamento de arquivos. As

duas primeiras opcoes cadastram a impressora para ser utilizada

atraves do spooler (fila de impressao).



Ja as impressoras paralelas sao cadastradas de duas maneiras,

manualmente ou via SAM.



A seguir detalhamos os procedimentos para cadastrar impressoras

seriais, ligadas diretamente na mux do 8X7 e impressoras paralelas.





Leia atentamente todo o procedimento antes de executa-lo.







I- CADASTRAMENTO DE IMPRESSORAS SERIAIS





Configuracao do cabo: Mux 2 3 7 4-20

| | | |

Imp. 2 3 7 4-5 6-8-20





Todos os exemplos a seguir tem como base a porta tty0p2







A. Cadastramento de impressoras seriais manualmente





1. Verifique a tabela /etc/inittab. Nao e' necessario existir uma

entrada para a porta onde sera conectada a impressora. Caso exista,

deixe a porta em "off", conforme exemplo abaixo:

Lembramos que e' de extrema importÀncia fazer uma copia dos arquivos de

tabelas do sistema, exemplo /etc/inittab, antes de executar qualquer

alteracao no arquivo.



Exemplo: porta tty0p2



ttp2:2:off:/etc/getty -h tty0p2 9600



Para validar esta alteracao, execute o comando:



# telinit q



2. Configure impressora no spooler:



# /usr/lib/lpshut (para cancelar o spooler)

scheduler stopped

# /usr/lib/lpadmin -p -v/dev/tty0p2 -mdumb

onde -p: define o nome logico da impressora

-v: define o device name onde esta conectada

a impressora

-m: define o modelo que e' utilizado pela impressora





3. Apos cadastrar a impressora, o sistema cria um arquivo com o nome

da impressora no diretorio /usr/spool/lp/interface, que e' composto do

arquivo dumb.



Altere o arquivo criado no /usr/spool/lp/interface com o nome da

impressora, conforme as caracteristicas de sua impressora. Exemplos:





3.1- Configuracao para impressoras com 8 bits, sem paridade e

velocidade 9600:



a) inclua a modificacao a seguir logo apos a linha:



# Print the standard header



# Modificacao para utilizacao de impressoras seriais

if tty -s



onde: e' o nome logico designado para a impressora

no passo 2 acima

5. Para ativar a impressora:



# /usr/lib/accept

destination "" now accepting requests

# /usr/bin/enable

printer "" now enabled



6. Para ativar o spooler:



# /usr/lib/lpsched

scheduler is running



7. Para imprimir, caso a impressora seja default:



# lp nome_arquivo



8. Para imprimir, caso a impressora nao seja default:



# lp -d nome_arquivo







B. Cadastramento de impressoras seriais via SAM





1. Verifique a tabela /etc/inittab. Nao e' necessario existir uma

entrada para a porta onde sera conectada a impressora. Caso exista,

deixe a porta em "off", conforme exemplo abaixo:



Lembramos que e' de extrema importÀncia fazer uma copia dos arquivos de

tabelas do sistema, exemplo /etc/inittab, antes de executar qualquer

alteracao no arquivo.



Exemplo: porta tty0p2



ttp2:2:off:/etc/getty -h tty0p2 9600



Para validar esta alteracao, execute o comando:



# telinit q



2. Entre no menu do SAM



# sam



3. Selecione a opcao "Peripheral Devices"

tecle (F4) Select Item



4. Selecione a opcao "Printers and Plotters"

tecle (F4) Select Item



5. Selecione a opcao "Add a Local Printer"

tecle (F4) Select Item

6. Selecione a opcao "Add a Serial Printer"

tecle (F4) Select Item



O sistema pergunta a voce em qual endereco quer conectar a impressora.

Se houver mais de um, selecione o endereco desejado e tecle (F4) -

Select Item.



Logo em seguida o sistema pergunta qual o numero da porta do ADP/DDP

que sera conectada a impressora. Digite o numero e tecle (F4) - Done.



7. Apos digitado o numero da porta, aparece a seguinte tela:



Printer name (digite o nome logico para a impressora)

Printer model/interface (digite dumb)

Printer device file name (digite /dev/tty0p2)

* Printer Priority (0 -lowest, 7 -highest)

* Make this the system default printer? (y or n)

* Printer class (digite o nome da classe, se houver)

* opcional - nao e' necessario preencher estas opcoes, basta teclar

"return"





Apos digitar os dados acima, tecle (F4) - Perform Task. O sistema

pergunta se quer testar a impressora, responda n.



Tecle (F8) ate sair do SAM.



8. Siga o mesmo procedimento do passo 3 do Cadastramento de

Impressoras Seriais Manualmente (acima).



9. Para imprimir, caso a impressora seja default:



# lp nome_arquivo



10. Para imprimir, caso a impressora nao seja default:



# lp -d nome_arquivo



onde: e' o nome logico designado para a impressora

no passo 7 acima.

C. Cadastramento de Impressoras Seriais via Direcionamento





1. Crie um arquivo chamado impsrl no diretorio /etc, com as

informacoes abaixo, de acordo com as caracteristicas de sua

impressora:



a) Configuracao para impressoras 8 bits, sem paridade, velocidade 9600



stty 9600 opost onlcr -parenb cs8 ixon -ixoff -ixany -istrip clocal

tab3

sleep 100000000

b) Configuracao para impressoras 7 bits, paridade par, velocidade 9600



stty 9600 opost onlcr parenb -parodd cs7 ixon -ixoff -ixany -istrip

clocal tab3

sleep 100000000



c) Configuracao para impressoras 7 bits, paridade impar, velocidade 9600



stty 9600 opost onlcr parenb parodd cs7 ixon -ixoff -ixany -istrip

clocal tab3

sleep 100000000



Alterar as permissoes do arquivo impsrl:



# chmod 755 /etc/impsrl



2. Altere a tabela /etc/inittab, com a seguinte informacao para a

linha da impressora:





Lembramos que e' de extrema importÀncia fazer uma copia dos arquivos de

tabelas do sistema, exemplo /etc/inittab, antes de executar qualquer

alteracao no arquivo.



ttp2:2:respawn:/etc/impsrl /dev/tty0p2 2>&1



Para validar esta alteracao, execute o comando:



# telinit q



3. Verifique atraves do comando "stty" se as caracteristicas enviadas

para a porta tty0p2 no passo 1 acima estao corretas:



# stty -a /dev/tty0p2







II- CADASTRAMENTO DE IMPRESSORAS PARALELAS





O sistema PA9000 8X7 (o 835 nao aceita impressora paralela) so

trabalha com impressoras paralelas com interface Centronics.



Configuracao do cabo:



CPU

123456789 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

||||||||| | | | | | | | | | | | | | | | |

123456789 10 11 12 13 14 32 31 36 19 21 23 25 27 33 29 30

Impressora | | | | |

20 22 24 26 28







A. Cadastramento de Impressora Paralela manualmente





1. Execute os seguintes comandos:



# lpshut (desativa spooler)

scheduler stopped

# lpadmin -p -v/dev/lp0 -mdumb (cadastra a impressora)



(onde: e' o nome logico a ser designado para a

impressora)



# accept (aceita pedidos)

destination "" now accepting requests

# enable (habilita a impressora)

printer "" now enabled

# lpsched (ativa o spooler)

scheduler is running



2. Para tornar a impressora default do sistema (opcional):



# lpadmin -d



3. Para imprimir, caso a impressora seja default:



# lp nome_arquivo



4. Para imprimir, caso a impressora nao seja default:



# lp -d nome_arquivo



5. Apos cadastrar a impressora, o sistema cria um arquivo com o nome

da impressora no diretorio /usr/spool/lp/interface, que e' composto do

arquivo dumb.





Uma opcao importante para impressoras paralelas refere-se ao numero de

colunas e linhas que se pode imprimir por pagina. Usamos o comando

slp para "setar" as variaveis. Exemplo:



5.1- Comando para imprimir da coluna 0 ate 132, com 66 linhas por

pagina:



Alterar o arquivo criado no /usr/spool/lp/interface com o nome

da impressora da seguinte maneira:



# cd /usr/spool/lp/interface

# ls (para ver o arquivo que foi criado)

Inclua a linha de comando a seguir acima da linha

banner="yes";



/usr/bin/slp -c132 -i0 -l66 2>/dev/null



onde -c132 : define o numero de colunas

-i0 : para iniciar da coluna 0

-l66 : define o numero de linhas



Outras alteracoes podem ser efetuadas neste arquivo criado no

/usr/spool/lp/interface, conforme exemplificaremos no item

III, a seguir.







B. Cadastramento de impressora paralela via SAM





1. Entre no SAM



# sam



2. Selecione a opcao "Peripheral Devices"

tecle (F4) Select Item



3. Selecione a opcao "Printers and Plotters"

tecle (F4) Select Item



4. Selecione a opcao "Add a Local Printer"

tecle (F4) Select Item



5. Selecione a opcao "Add HP-PB Parallel (lpr2) Printer"

tecle (F4) Select Item



O sistema verifica quais enderecos disponiveis e pergunta onde se

quer instalar a impressora. Escolha a opcao (53 para a Multi I/O) e

tecle (F4) - Select Item.

O sistema traz a tela abaixo que deve ser preenchida:



Printer name (nome logico para a impressora)

Printer model/interface (digite dumb)

Printer Device file name (/dev/lp0)

* Printer Priority (0 -lowest, 7 -highest)

* Make this the system default printer? (y or n)

* Printer class (digite o nome da classe, se houver)

* opcional - nao e' necessario preencher essas opcoes, basta teclar

"return"



Apos preencher os campos acima, tecle (F4) - Perform Task



6. O sistema pergunta se voce quer testar o device, digite "n" (nao) e

tecle (F8).

7. Nesta tela selecione a opcao "Enable a Local Printer" e tecle (F4)

- Select Item. O sistema pergunta o nome da impressora - digite o nome

logico designado para a impressora no passo 5 acima e tecle (F4) done.



8. Se optar por deixar esta impressora como default do sistema,

selecione a opcao "Set the System Default Printer" e tecle (F4) -

Select Item. (Caso nao tenha escolhido a opcao "y" no passo 5 acima).



9. Para ativar o spooler, selecione a opcao "Start up the LP Spooler"

(caso ele ja esteja ativado a opcao estara como "Shutdown the LP

Spooler - digite (F8) ate sair do SAM)



Se foi selecionada a opcao "Start up the LP Spooler" o sistema faz a

seguinte pergunta:



Would you like to create a log file of all print request? (y or n)



Responda n e saia do SAM, teclando (F8) ate voltar ao prompt (#).



10. Para imprimir, caso seja a impressora default:



# lp nome_arquivo



11. Para imprimir, caso nao seja a impressora default:



# lp -d nome_arquivo



12. Apos cadastrar a impressora, o sistema cria um arquivo com o nome

da impressora no diretorio /usr/spool/lp/interface, que e' composto do

arquivo dumb.



Uma opcao importante para impressoras paralelas refere-se ao numero de

colunas e linhas que se pode imprimir por pagina. Usamos o comando

slp para "setar" as variaveis. Exemplo:

12.1- Comando para imprimir da coluna 0 ate 132, com 66 linhas por

pagina:



Altere o arquivo criado no /usr/spool/lp/interface com o nome

da impressora da seguinte maneira:



# cd /usr/spool/lp/interface

# ls (para ver o arquivo criado)



Inclua a linha de comando a seguir logo acima da linha

banner="yes";



/usr/bin/slp -c132 -i0 -l66 2>/dev/null



onde -c132 : define o numero de colunas

-i0 : para iniciar da coluna 0

-l66 : define o numero de linhas



Outras alteracoes podem ser efetuadas neste arquivo criado no

/usr/spool/lp/interface, conforme exemplificaremos no item

III, a seguir.

III- Descrevemos abaixo o arquivo "dumb", com algumas explicacoes:





1 #!/bin/sh

2 # $source: /hpux/shared/supp/usr/src/cmd/lp/model/dumb,v $

3 # $revision: 66.2 $

4

5 # lp interface for dumb line printer

6 #

7 #====================================================================#

8 # OPTIONS RECOGNIZED: ( all may be preceded with a "-" ) #

9 #nbdo not output banner page (to save paper) #

10 #====================================================================#

11

12 banner="yes";

13 copies=$4

14

15 for i in $5

16 do

17 case "$i" in

18 -nb | nb) # do not output banner page

19 banner="";;

20 esac

21 done

22

23 #Print the standard header

24

25 if [ -n "$banner" ]

26 then

27

x="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

XXXXXXXXXX"

28 echo "\014\c"

29 echo "$x\n$x\n$x\n$x\n"

30 banner "$2"

31 echo "\n"

32 user=`pwget -n $2 | line | cut -d: -f5`

33 if [ -n "$user" ]

34 then

35 echo "user: $user\n"

36 else

37 echo "\n"

38 fi

39 echo "Request id: $1 Printer:`basename $0`\n"

40 date

41 echo "\n"

42 if [ -n "$3" ]

43 then

44 banner $3

45 fi

46 echo "\014\c"

47 fi

48

49 # The remaining arguments are files

50

51 shift; shift; shift; shift; shift

52 files="$*"

53

54 # Print the spooled files

55

56 i=1

57 while [ $i -le $copies ]

58 do

59 for file in $files

60 do

61 cat "$file" 2>&1

62 echo "\014\c"

63 done

64 i=`expr + 1`

65 done

66

67 # Print the standard trailer

68

69 #echo

"$x\n$x\n$x\n$x\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"

70 #echo

"\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$x\n$x\n$x\n$x"

71 #echo

"$x\n$x\n$x\n$x\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"

72 #echo "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"

73 #echo "$x\n$x\n$x\n$x\n$x\n$x\n$x\n$x\n"

74 exit0









Explicacoes:



a) Para nao imprimir o banner (uma pagina antes do arquivo):



Altere a linha 12 para: banner="";





b) Para nao saltar pagina antes de imprimir o banner:



Comente a linha 28 (coloque "#" no inicio da linha)





c) Para nao saltar pagina apos o banner



Comente a linha 46 (coloque "#" no inicio da linha)





d) Para nao saltar pagina apos impressao do arquivo

Comente a linha 62 (coloque "#" no inicio da linha)

e) Para incluir as modificacoes para conexao de impressoras seriais,

conforme explicado anteriormente no item I.A.3. e I.B.8:



Inclua a modificacao apos a linha 23 (Print the standard header) e

antes da linha 74 (exit 0) do arquivo dumb.





f) Para incluir a modificacao da linha do comando slp para impressoras

paralelas, conforme explicado no item II.A.5 e II.B.12:



Inclua a modificacao na linha 11.









IV- Remover Impressoras do Sistema





Removendo impressoras do sistema atraves do SAM.



1. Entre no menu do SAM



# sam



2. Selecione a opcao "Peripheral Devices"

tecle (F4) Select Item



3. Selecione a opcao "Printers and Plotters"

tecle (F4) Select Item



4. Selecione a opcao "Remove a Printer"

tecle (F4) Select Item



O sistema pergunta qual o nome da impressora a ser removida. Digite

o nome logico da impressora e tecle (F4) - Done.



5. Tecle (F8) ate sair do SAM.



=========================================================================

=======



-----ED/600





Recuperacao e alteracao do nucleo do sistema operacional (/edix)





Christiane Barbosa

Analista de Suporte





Neste artigo mostraremos como resolver determinados problemas ligados

ao nucleo do sistema operacional, ou seja, o "/edix".

O arquivo "/edix" e' o nucleo do sistema operacional, portanto, um

arquivo com informacoes referentes a drivers configurados, area de

swap e tabelas de sistema. A falta deste ou o corrompimento do mesmo,

podem gerar varias situacoes de erro que podem ser corrigidas.



Existem utilitarios do sistema operacional que usam o "/edix" para

colher determinadas informacoes; quando executados, estes devem estar

com as permissoes de acesso, dono e grupo como mostramos abaixo:



-r-xr-xr-x 1 bin bin 43904 Fev 5 1992 /bin/adb

---x--s--x 1 root sys 20768 Jan 6 1992 /etc/fuser

---x--s--x 1 bin sys 23924 Jan 6 1992 /etc/whodo

-r-xr-sr-x 1 adm sys 9632 Jan 6 1992 /usr/lib/sa/sadc

-r-sr-sr-x 1 bin sys 30636 Fev 19 08:53 /bin/ps



O arquivo "/edix" nunca deve ser removido do sistema e deve estar com

as seguintes permissoes de acesso, dono e grupo:



-r--r----- 1 root sys 344678 Dez 31 10:09 /edix



OBS: O tamanho difere de sistema para sistema; tome somente como

exemplo as permissoes de acesso, dono e grupo.





Abaixo mostraremos situacoes onde a falta ou corrupcao do "/edix"

podem trazer problemas de operacao.



Ao executar os comandos "/bin/ps" ou "/bin/whodo", comandos normais de

administracao, podera se deparar com as seguintes mensagens:



"whodo: nao pode achar tabela de processos",



"ps: arquivo /edix nao existe ou nao possui tabela de simbolos"

Para que estas mensagens ocorram podem existir algumas possibilidades:



A) a permissao de grupo esta errada;



# ls -l /edix

-r--r----- 1 root root 344678 Dez 31 10:09 /edix

# file /edix

/edix: executavel com tabela de simbolos (Versao: 03.215)

# chgrp sys /edix

# ls -l /edix

-r--r----- 1 root sys 344678 Dez 31 10:09 /edix

# ps

PROC TTY EXEC CMDO

135 tty14 0:06 sh

1370 tty14 0:01 ps





B) o arquivo "/edix" existe, mas esta corrompido;



# ls -l /edix

-r--r----- 1 root sys 344678 Dez 31 10:09 /edix

# file /edix

/edix: texto em ascii





C) o arquivo "/edix" foi removido indevidamente.



# ls -l /edix

/edix nao encontrado







I- Recuperacao do edix, alt e gboot



Para resolver os casos B e C, antes de mais nada, devemos recuperar o

arquivo "/edix" da midia de instalacao. Adiante mostraremos os

comandos necessarios para fazer tal recuperacao. Verifique qual e' o

tipo de midia que possui, para nao executar o comando errado, e com

isto gerar mensagens de erro indesejaveis.



Coloque o equipamento em monousuario.



1- Para fita streamer de 26MB:



# cd /

# cpio -ivdumB alt gboot /dev/null 2>&1

# for i in 1 2 3 4 5

>do

>dd if=/dev/rsts8 ibs=127k > /dev/null 2>&1

>done

# cpio -ivdumB alt gboot /dev/null 2>&1

# for i in 1 2 3 4 5 6

>do

>dd if=/dev/rsts8 ibs=127k > /dev/null 2>&1

>done

# cpio -ivdumB usr/tmp/edix* diretorio onde se encontra o

arquivo de dados.

campo-2 --> se declarado, o diretorio onde

se encontra o arquivo de

indices.



rotulo W: campo-1 --> comando que recebe a saida do

WRITE do cobol. Efeito pipe.

campo-2 --> opcoes validas do campo-1.



rotulo R: campo-1 --> comando que envia os dados p/

READ do cobol. Efeito pipe.

campo-2 --> opcoes validas do campo-1.



NOTA: os comandos para W e R devem ser tal que aceitem um

pipe, como por exemplo o comando cat, pr, lp . Nao

adianta colocar comandos que nao tenham este

comportamento.



4.3. Exemplo:



SELECT ENTRADA ASSIGN TO "CADASTRO"

...



$ env

COBCAP=/usr/desenv/alex/teste/descfiles



$ pwd

/usr/desenv/alex/teste



$ cat descfiles

CADASTRO:I:/usr/prod/estoque:

REL1:W:/bin/imp:-iserial2:

REL2:W:/bin/imp:-iserial2:

REL3:W:/bin/imp:

senhas:R:/bin/cat:/etc/passwd





4.4. Possiveis erros:



P- Criou no proprio diretorio, parecendo nao ter reconhecido

os dados do COBCAP.



S- Variavel COBCAP pode nao estar exportada, chechar com env,

ou valor atribuido parece certo, mas tem sujeira. Deve ser

refeita a criacao do COBCAP.



Percurso indicado por COBCAP nao esta acessivel.



O arquivo de dados do COBCAP tem sujeira, conferir com ed,

opcao "l". Deve ser refeito. Prefira utilizar editores ed

ou vi, que dificilmente introduzem caracteres espurios.



Faca testes simples de verificacao, se o COBCAP esta sendo

reconhecido, p.e. testando um programa que le e da DISPLAY

dos dados e, claro, utiliza o COBCAP.



P- Para alguns usuarios funciona e para outros, nao.



S- Variavel COBCAP nao deve estar presente para ele. Prefira

adotar uma politica unica por usuario de sistema.



P- Funcionamento diferenciado de saidas de relatorio, para

alguns estao saindo numa impressora e, para outros em

outra.

S- Deve ser a variavel COBCAP, pois esta faltando, existe uma

rotina default de pesquisa e esta procura no local

correspondente ao COBDIR, encontrando, e' executado.





NOTA FINAL:



1. O uso do COBCAP implica em flexibilidade de acesso, mas tambem

pode causar confusoes, por isso deve ser analisada

minunciosamente cada situacao de erro. Nao assuma que o recurso

nao funciona. Existe uma explicacao para o que esta acontecendo

em cada situacao.



2. O COBCAP nao possui um sistema muito farto de mensagens de erro,

assim sendo, erros nao sao sinalizados, simplesmente ocorrem !



3. Em caso de problemas, revise todos os passos, localizando o

ponto onde esta funcionando e prossiga deste ponto na analise do

problema.





5. Utilizacao do DD_





Este recurso oferece diversas possibilidades, tais como sao oferecidas

pelo COBCAP. Sua diferenca basica e' que so existe variaveis de

ambiente.





Regras gerais de utilizacao:

---------------------------



1. Deve existir uma variavel DD_ para cada arquivo que estiver sendo

referenciado externamente no cobol;



2. Esta variaveis sao validas por sessao, assim sendo devem ser

inicializadas para cada rodada, p.e. no .profile ou /etc/profile ou

ainda, disparado por um script shell, com o cuidado de disparar com

".", exemplo: $ . disparadd.sh



3. No cobol, deve existir a palavra reservada EXTERNAL, exemplo:



SELECT ENTRADA ASSIGN TO EXTERNAL DESENVTEST

...



4. Deve existir uma variavel DD_ para cada EXTERNAL, p.e. para o caso

"3", teriamos:



DD_DESENVTEST=/usr/prod/estoque/cadastro



5. Adote nome de variaveis em maiuscula.



6. O relacionamento do arquivo indicado pelo cobol e' estabelecido pela

variavel indicada por EXTERNAL, e esta variavel aponta para o

arquivo.



7. Exemplo



-Dentro do programa cobol:



SELECT CADASTRO ASSIGN TO EXTERNAL DESENVTEST

...



SELECT RELATORIO ASSIGN TO EXTERNAL CADREL

...



SELECT MOVIMENTO ASSIGN TO EXTERNAL MOVTEST

...





-SCRIPT SHELL, para criar as variaveis de ambiente:



$ cat liga-dd.sh

DD_DESENVTEST=/usr/prod/estoque/cadastro

DD_CADREL=/usr/desenv/joao/relatorio

DD_MOVTEST=/usr/prod/estoque/movimento



export DD_DESENVTEST

export DD_CADREL

export DD_MOVTEST



$ . liga-dd.sh

^

|__ O ponto "." e' para nao criar um subnivel shell, pois

senao estas variaveis seriam criadas neste subnivel



=========================================================================

=======



_____DICAS GERAIS



Caracteristicas do terminal 700/60





Jaime Lucas

Analista de Suporte





Este informativo e' apenas para clarear um pouco o tao obscuro terminal

HP700/60.



Esse terminal foi lancado mundialmente para atender as necessidades de

um mercado que exigia cada vez mais equipamentos com terminais

compativeis, devido as necessidades de algumas aplicacoes. Um exemplo

sao os terminais VTs existentes.



Esse padrao de mercado nao e' suportado pelos terminais EDISA/HP e

ED-36xx, mas era por alguns terminais HP, sendo que hoje o atual

terminal da EDISA/HP e' o HP700/60, devido ao seu baixo custo e a boa

compatibilidade com o mercado.



Esse terminal HP700/60 nao possui firmware para emulacao de terminal

HP, ou seja, "TERM=hp" nao funciona. Mas ele possui outros tipos de

emulacao, como o VT52, VT100, VT320 e WYSE60, que permitem o seu

funcionamento em alguns bons equipamentos do mercado.



Esse terminal nao deve ser instalado como console do sistema, pois

para os equipamentos PA9000 e' melhor que a console permaneca com um

terminal HP700/92 ou equivalente, devido a emulacao de terminal HP,

sendo que dessa maneira conseguiremos utilizar o "sam" sem problemas.



Deixando um pouco de historia de lado, vamos agora dar uma repassada

em alguns pontos sobre a conexao desse terminal HP700/60 em algumas

plataformas tais como: PA9000, ED600, ED800 e VIX.



A configuracao dos cabos para a conexao do terminal HP700/60 nos

equipamentos acima e:



8x7 Demais equipamentos

MUX TERMINAL COM/COM2/ TERMINAL

MULTISERIAL

2-------2 2--------------------3

3-------3 3--------------------2

7-------7 7--------------------7

4-5 4-5 4-5

6-8-20 6-8-20 6-8-20



Para conexao de impressora escrava nesse terminal vale lembrar que o

cabo paralelo a ser utilizado, precisa ser padrao Centronics igual ao

que usamos no PC, pois o cabo paralelo que utilizamos nos terminais

ED36xx sao padrao Centronics Edisa (M80), que e' diferente do utilizado

pelo HP700/60.



Em todas as plataformas podemos utilizar esse terminal como 7/8 bits,

paridade impar/par ou sem paridade e com a velocidade suportada pelo

mesmo. Basta configurar o terminal e utilizar uma entrada da tabela

"/etc/gettydefs" equivalente a configuracao desejada, para compor a

linha de comando no arquivo "/etc/inittab".



Para entrar no modo de configuracao do terminal, basta teclar "Setup"

que esta a direita no teclado do terminal. Agora para navegar entre as

telas dos Menus, utilize as teclas de "Pgup" e "PgDown" e para alterar

os valores configurados, utilize as teclas de movimentacao do cursor,

ou seja, as tao chamadas "setinhas" que permitem voce mudar de um

campo para outro, como tambem alterar os valores pelos outros que

estao disponiveis neste campo.



Quando for configurar o terminal, recomendamos utiliza-lo como VT320,

pois para as nossas plataformas de equipamentos, ja possuimos as

tabelas de terminais (terminfo) desenvolvidas e liberadas. Apenas

lembramos que e' necessario acrescentar as seguintes configuracoes:

- alteracao no menu USER:

Auto Wrap ON



- alteracoes no menu PORT1:

Data Lenght 7/8 bits

Parity Odd/Even/None

Recv Pace None



- alteracao no menu KEYBRD:

/dev/null

if [ $? -ne 0 ]; then

echo "\07$0: Nao pode criar diretorio .Removed"

exit 1

fi

fi



if [ $# -gt 0 ]

then |

case "$1" in

-r)

find $2 -print | cpio -pdl $_dir 2>/dev/null

/bin/rm -r $2

exit 0 ;;

-*)

sintaxe

exit 0 ;;

esac

fi



for fname

do

if [ ! -f $fname ]

then

echo "\07$0: $fname nao encontrado"

else

mv $fname $_dir

fi

done







Apos sua criacao, executar:





1- Mudar sua permissao para:



# chmod 555 nrm



2- Criar um diretorio no $HOME de cada usuario com o nome:



# mkdir .Removed



3- Acrescentar no .profile do usuario a seguinte rotina:



rm() {

/usr/bin/nrm $*

}



4- Criar um arquivo chamado erase no /usr/bin que fara a consistencia

da quantidade de dias que os arquivos estao parados naquele diretorio.



:

# @(#) erase remove os arquivo movidos para .Removed

#

if [ $# -eq 0 ]; then

dias=2

else

dias=$1

fi

find / -name .Removed -print |

while read dir

do

find $dir -mtime +$dias -exec /bin/rm {} \;

done





5- Acrescentar na crontab do root uma linha de comando que ira

executar um script que faz a consistencia da quantidade de dias em que

os arquivos ja estejam parados no diretorio .Removed.

0 18 * * 1-5 /usr/bin/erase > /dev/null 2>&1



======================================FIM================================

=======





a alteracao feita teclando (F1) que armazenara a configuracao em cmos.



Problemas/Situacoes conhecidas:



- quando as teclas de movimentacao de cursor nao funcionarem no "vi".



se os capnames "kcuu1=\E[A", "kcud1=\E[B", "kcuf1=\E[C" e

"kcub1=\E[D" estiverem com esses valores, que estao errados, devem

ser alterados para "\EOA \EOB \EOC \EOD" respectivamente.



OBS: Os valores desses capnames estao relacionados a configuracao do

terminal em seu modo "Cursor Keys", que pode ser configurado

como "Application Mode" ou "Normal", ou seja, os valores que

estavam setados na verdade nao estao errados, mas algumas

aplicacoes configuram o terminal para "Application Mode" e as

setas somente funcionarao com os valores acima.

- existe uma configuracao do "Break Duration" que interfere no

funcionamento de alguns editores de textos no que se refere ao

caracter "^Q" (controle de fluxo XON/XOFF). Essa configuracao pode

passar de 170ms para 250ms e notamos que para o "iw" e' melhor 250ms.



- quando conectar o HP700/60 no ED600/ED800, e' necessario alterar o

arquivo "/etc/profile" deixando-o da seguinte maneira:



if tty -s

then

case $TERM in

ED-3636|ED3636|ed-3636|ed3636|ED-3630|ED3630|ed-3630|ed3630)

pf -h /dev/null

if [ $? -ne 0 ]; then

echo "\07$0: Nao pode criar diretorio .Removed"

exit 1

fi

fi



if [ $# -gt 0 ]

then |

case "$1" in

-r)

find $2 -print | cpio -pdl $_dir 2>/dev/null

/bin/rm -r $2

exit 0 ;;

-*)

sintaxe

exit 0 ;;

esac

fi



for fname

do

if [ ! -f $fname ]

then

echo "\07$0: $fname nao encontrado"

else

mv $fname $_dir

fi

done







Apos sua criacao, executar:





1- Mudar sua permissao para:



# chmod 555 nrm



2- Criar um diretorio no $HOME de cada usuario com o nome:


Related docs
Other docs by HC1111251166
Blad1
Views: 1  |  Downloads: 0
Improving Technical Writing
Views: 0  |  Downloads: 0
dfd
Views: 5  |  Downloads: 0
Clan 1
Views: 7  |  Downloads: 0
STANDARD PORTION SIZES
Views: 7  |  Downloads: 0
chapter_03a
Views: 0  |  Downloads: 0
Backtracking
Views: 1  |  Downloads: 0
PERATURAN KEMUDAHAN PERUBATAN
Views: 7  |  Downloads: 0
By registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!