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: