.po12
.op







KK    KK    EEEEEEEE  RRRRRRRR   MM     MM  IIII  TTTTTTTTTT
KK   KK     EE        RR     RR  MMM   MMM   II       TT
KK  KK      EE        RR     RR  MMMM MMMM   II       TT
KK KKKK     EEEEEE    RRRRRRRR   MM MMM MM   II       TT
KKKK  KK    EE        RR   RR    MM  M  MM   II       TT
KK     KK   EE        RR    RR   MM     MM   II       TT
KK      KK  EEEEEEEE  RR     RR  MM     MM  IIII      TT

____________________________________________________________
____________________________________________________________


          GGGGGGG  UU      UU  IIII   AAAAAAAA 
         GG        UU      UU   II   AA      AA
         GG        UU      UU   II   AA      AA
         GG  GGGG  UU      UU   II   AA      AA
         GG    GG  UU      UU   II   AAAAAAAAAA
         GG    GG  UU      UU   II   AA      AA
          GGGGGGG   UUUUUUUU   IIII  AA      AA


                   DDDDDDDD     OOOOOOO
                   DD     DD   OO     OO
                   DD     DD   OO     OO
                   DD     DD   OO     OO
                   DD     DD   OO     OO
                   DD     DD   OO     OO
                   DDDDDDDD     OOOOOOO

                                   '
 UU    UU  SSSSSS  UU    UU  AAAAAA  RRRRRRR  IIII  OOOOOO
 UU    UU SS       UU    UU AA    AA RR    RR  II  OO    OO
 UU    UU SS       UU    UU AA    AA RR    RR  II  OO    OO
 UU    UU  SSSSSS  UU    UU AA    AA RRRRRRR   II  OO    OO
 UU    UU       SS UU    UU AAAAAAAA RR  RR    II  OO    OO
 UU    UU SS    SS UU    UU AA    AA RR   RR   II  OO    OO
  UUUUUU   SSSSSS   UUUUUU  AA    AA RR    RR IIII  OOOOOO 

____________________________________________________________
____________________________________________________________

Quinta Edic,a~o                     Brasi'lia, setembro de 1986
.pa


















                  KERMIT - Guia do Usua'rio

                       Quinta Edic,a~o

                       Frank da Cruz
    Columbia University Center for Computing Activities
                    New York, NY, 10027

            Copyright (C) 1981, 1982, 1983, 1984
  Trustees of Columbia University in the City of New York

            Traduc,a~o de J. Ricardo B. Ghirlanda
       Telecomunicac,o~es Brasileiras S. A. - TELEBRAS
                    Brasi`lia - DF, 1986




















     E' permitida e, mesmo, incentivada, a co'pia e divulgac,a~o 
de  qualquer  parte deste manual,  desde que para  fins  na~o 
comerciais.
.foKERMIT - Guia do Usua'rio                                   i



                          SUMA'RIO


   Prefa'cio .............................................iii
   Um Pouco de Histo'ria..................................iii
   Pedidos de Informac,a~o..................................iv

1. Introduc,a~o..............................................1


2. Como usar o KERMIT......................................4

   2.1. O programa KERMIT..................................4
   2.2. Falando com dois computadores de uma vez...........5
   2.3. Transferindo um arquivo............................6
   2.4. Comandos ba'sicos...................................7
   2.5. Exemplos reais.....................................9
        2.5.1. MICRO  ---  HOST............................9
        2.5.2. HOST   ---  HOST...........................11
        2.5.3. MICRO  ---  MICRO..........................13
   2.6. Outra maneira: o SERVIDOR.........................14


3. Quando as coisas va~o mal...............................17

   3.1. Problemas com a linha de comunicac,a~o..............17
   3.2. A transfere^ncia ficou presa.......................18
   3.3. O micro se enganchou..............................19
   3.4. O host sumiu......................................19
   3.5. O disco esta' cheio................................19
   3.6. Interfere^ncia de mensagens........................20
   3.7. Erros no host.....................................20
   3.8. O arquivo e' lixo..................................20
   3.9. Veio lixo depois do fim do arquivo................20


4. Comandos KERMIT........................................22

   4.1.  Operac,a~o remota e local..........................22
   4.2.  Interface de comandos............................23
   4.3.  Notac,a~o..........................................24
   4.4.  Suma'rio dos comandos KERMIT......................25
   4.5.  SEND.............................................26
   4.6.  RECEIVE..........................................28
   4.7.  GET..............................................29
   4.8.  SERVER...........................................30
   4.9.  BYE..............................................30
   4.10. FINISH...........................................30
   4.11. REMOTE...........................................30
   4.12. LOCAL............................................32
   4.13. CONNECT..........................................32
   4.14. HELP.............................................33
.foKERMIT: Guia do Usua'rio                                   ii
   4.15. TAKE.............................................33
   4.16. EXIT, QUIT.......................................33
   4.17. O comando SET....................................33
   4.18. DEFINE...........................................43
   4.19. SHOW.............................................43
   4.20. STATISTICS.......................................44
   4.21. LOG..............................................44
   4.22. TRANSMIT.........................................44


5. Implementac,o~es do KERMIT...............................45

6. KERMIT para IBM VM/CMS.................................47

   6.1.  SEND.............................................48
   6.2.  RECEIVE FN FT FM.................................48
   6.3.  SET..............................................48
   6.4.  SHOW.............................................49
   6.5.  STATUS...........................................49
   6.6.  CMS..............................................49
   6.7.  CP...............................................49
   6.8.  HELP.............................................49
   6.9.  Fatos Relevantes.................................49
   6.10. Mensagens do sistema.............................51


7. KERMIT para CP/M-80....................................53

   7.1 Suma'rio do CP/M....................................53
   7.2 Descric,a~o do KERMIT-80.............................54
   7.3 Comandos do KERMIT-80..............................55
   7.4 O KERMIT gene'rico..................................59
   7.5 Instalac,a~o.........................................60

       7.5.1. Baixando o KERMIT-80........................61
       7.5.2. Construindo um KERMIT.......................63
       7.5.3. O KERMIT-80 gene'rico........................64


Ape^ndice A:

     O Conjunto de Caracteres ASCII (ANSI X3.4/1968)......66
.pa
                          PREFA'CIO
.foKERMIT: Guia do Usua'rio                                  iii


     Desde que foi produzida  a quarta edic,a~o deste  manual, 
em  julho   de 1983,   os KERMITs  tem voado  mais  e   mais 
ra'pidos   do  que  algue'm possa acompanhar.  Velhas  verso~es 
foram  melhoradas e apareceram  implementac,o~es para   outros  
sistemas.   Deixou  de ser pra'tico  tentar  cobrir  todas as 
implementac,o~es num u'nico manual.  Assim este manual  tentara' 
descrever um tipo  "ideal" de  programa KERMIT, que  tenha a  
maioria das facilidades especificadas no Manual do Protocolo  
KERMIT.  A  maior  parte  dos  KERMITs se  enquadrara'  nessa 
descric,a~o, de alguma forma.

     Depois da  parte  principal deste manual,  independente  
de  sistema,   do manual,  existem sec,o~es para diversos pro
gramas KERMIT particulares,   enfatizando suas diferenc,as do 
ideal, neste momento.

     As partes deste manual que dependem de sistema ficara~o, 
rapidamente,  obsoletas.  Informac,o~es  correntes acerca   de 
qualquer programa KERMIT  em particular  podem ser encontra
das  nos  arquivos  de documentac,a~o ou nos  textos  de  HELP 
internos ao pro'prio programa.



                    UM POUCO DE HISTO'RIA

     O  protocolo KERMIT para transfere^ncia  de arquivos foi 
projetado  no  Columbia  University  Center  for   Computing 
Activities  (CUCCA) em  1981-82 por Bill Catchings,  princi
palmente,  e  por  Frank da Cruz.  O Bill escreveu  os  dois 
primeiros  programas, um  para o  DECSYSTEM-20 e  outro para  
um microcomputador sob CP/M.

     O   objetivo inicial era dar aos usua'rios dos  sistemas 
de timesharing da Columbia University,  composto de um  DEC-
20  e um IBM-4341,  uma  forma de  guardar seus arquivos  em 
disquetes.  O  projeto deve muito aos modelos ANSI e  ISO  e 
algumas   ide'ias  foram tomadas  de projetos  similares  das 
universidades  de Stanford  e Utah.  O protocolo  foi proje
tado   para  se ajustar a`s  "sensi'veis"  comunicac,o~es  full-
-duplex do front-end do  sistema DEC-20 e as  peculiaridades 
half-duplex  do sistema de comunicac,a~o do IBM.  O  protocolo 
foi logo implementado com sucesso no IBM-4341 do CUCCA,  sob 
VM/CMS, por Daphne Tzoar.

     Entretanto  a IBM  lanc,ou o  PCS,  que  comec,ou a  apa
recer em nossos escrito'rios  e,   com  ele,   a  necessidade  
de   uma   forma  gene'rica  de transfere^ncia   de   arquivos  
entre   as   diversas  ma'quinas.   Logo Daphne preparou  uma 
implementac,a~o para o IBM/PC.

     Apo's o sucesso inicial do KERMIT,   na CUCCA,  ele  foi 
apresentado   em  confere^ncias  a grupos de usua'rios   (como 
DECUS e SHARE)  e passou a ser pedido  por  outras  instala
c,o~es.   Uma   vez   publicada  a  descric,a~o   do  protocolo,   
algumas   dessas  instalac,o~es   escreveram   suas   pro'prias 
implementac,o~es  ou adaptaram as existentes para que rodassem 
em   sistemas adicionais  e mandaram  de volta  essas  novas  
verso~es  para   o CUCCA,  de forma a   serem   distribui'das, 
novamente,   para   outros.  Assim  o  KERMIT  cresceu   ate' 
suportar  cerca de 50 sistemas diferentes.  Tem sido enviado 
em  fita magne'tica  do CUCCA para  centenas  de  instalac,o~es  
em  du'zias  de pai'ses,  alcanc,ando centenas ou milhares mais 
atrave's de va'rios grupos de usua'rios e redes de  teleproces
samento.

.foKERMIT: Guia do Usua'rio                                   iv
     Ate'  agora  as contribuic,o~es ao esforc,o do  KERMIT  tem 
sido  feitas por indivi'duos   nas  seguintes   instituic,o~es:  
Stevens     Institute,     Cornell    University,    Rutgers  
University,  Cerritos College,  The  University  of Toronto,  
The  University of  Tennesse at  Knoxville,  The  University 
of California at  Berkeley,  The  University of  Toledo, The  
University   os  Texas   at  Austin,    The  University   of 
Michigan,   Oakland University, The University of Wisconsin,  
University  College Dublin,   The University  of Washington, 
ABC-Klubben   Stockholm,    The   Helsinki   University   of 
Technology,   The    US  National   Institutes   of  Health,  
Digital  Equipment Corporation,  The  Source  Telecomputing,  
Hewlett-Packard  Laboratories,   Litton  Data  Systems,  RCA 
Laboratories,  ATARI Computer,  Telecomunicac,o~es Brasileiras 
S.  A.  em Brasi'lia e em Campinas-SP,  Empresa Brasileira de 
Agropecua'ria,  assim  como muitos  outros.  A  lista  cresce 
constantemente.


                   PEDIDOS DE INFORMAC,A~O

     O software do  KERMIT e'  gra'tis e  disponi'vel a  todos. 
A  Columbia University,  no  entanto,  na~o consegue  distri
buir  software  na escala requerida  pelo  KERMIT.  De  for
ma  a  baixar  seus  custos  de  mi'dia,  impressa~o,   envio, 
materiais,   trabalho e  recursos computacionais,  pede  uma 
moderada   taxa  de distribuic,a~o  das  instalac,o~es que   re
quisitem  o KERMIT diretamente de la'. A distribuic,a~o e' feita 
nos seguintes termos:

        Distribuic,a~o completa:                $100.00
        (fita, manual do usua'rio e manual do protocolo)

        Documentac,a~o impressa:                  $5.00 (cada)
               (manuais ou listagem de programas-fonte)


     Outras  instalac,o~es  podem  redistribuir o   KERMIT  em  
seus  pro'prios  termos  e  sa~o  encorajadas a  fazer   isso,  
com  as seguintes condic,o~es:  o  KERMIT  na~o pode  ser  ven
dido visando  lucro;   devem  ser prestados  os  cre'ditos de  
autoria quando  de direito;  novos materiais devem ser reme
tidos   para a  Columbia University no  endere^c,o abaixo   de 
forma    a  ser  mantido  um   conjunto  definitivo  e  com
preensivo  das implementac,o~es do KERMIT para futuras distri
buic,o~es.
.foKERMIT: Guia do Usua'rio                                    v

.cp10
     Para  pedir o envio do KERMIT da  Columbia  University, 
escreva para

        KERMIT DISTRIBUTION
        COLUMBIA UNIVERSITY CENTER FOR COMPUTING ACTIVITIES
        7th floor, Watson Laboratory
        612 West 115th Street
        New York, N.Y.  10025,

pedindo:

a) manuais ou listagens que voce^ quiser (especifique-as) ou

b) fita magne'tica em um dos seguintes formatos:

   SISTEMA        FORMATO                         DENSIDADES

   TOPS-10        BACKUP/INTERCHANGE, sem label    800, 1600
   TOPS-20        DUMPER, sem label                800, 1600
   IBM VM/CMS     EBCDIC, formato CMS             1600, 6250
                          ou standard label       1600, 6250
   outros         ASCII, label ANSI                800, 1600

(especifique SISTEMA, FORMATO e DENSIDADE).

     Os  cheques  devera~o ser  pagos  ao Columbia  Universi
ty  Center for Computing Activities.

     Uma co'pia  de cada  manual sera'  inclui'da com  a  fita.  
A  Columbia University fornecera' a fita, embalagem e envio.

     A    Columbia   University   na~o   produz    disquetes;  
sa~o   fornecidos  "bootstrapping"   que  permitem   que   as  
verso~es  para microcomputadores  sejam "baixadas" do  compu
tador para o  qual as fitas forem preparadas.  A fita inclui 
todos os fontes,  documentac,a~o e,  quando pra'tico,  arquivos 
com  os mo'dulos  de execuc,a~o.  Infelizmente os  recursos  do  
CUCCA  sa~o  limitados  e   na~o  permitem  manter uma   forma 
automatizada   de atualizac,o~es ou  de novas  implementac,o~es, 
documentac,o~es ou correc,o~es que aparecem.

     Caso  voce^ escreva para a Columbia University,  informe 
as ma'quinas  e sistemas  operacionais onde pretende  rodar o 
KERMIT  ou se voce^ estaria interessado em  tentar  fazer sua  
pro'pria  implementac,a~o para  um  novo sistema.

     O   KERMIT esta' disponi'vel aos usua'rios  da BINET  NET
WORK  via SERVER no host CUVMA.  Deve-se teclar

     @@SMSG  RSCS  MSG CUVMA  KERMSRV HELP

para maiores  informac,o~es.  O KERMIT  tambe'm esta' disponi'vel  
aos usua'rios da ARPANET, via ANONYMOUS FTP do host COLUMBIA-
20, na a'rea PS:<KERMIT>.

.foKERMIT: Guia do Usua'rio                                   vi
     O  KERMIT tambe'm  e' distribui'do  regularmente por   va'
rios grupos  de usua'rios de computadores como DECUS e SHARE.

     No Brasil,  a Rede de Comunicac,a~o de Dados da TELEBRAS, 
apesar  de ainda na~o adotar o protocolo KERMIT  e,  sim,  um 
pro'prio,  oferece o KERMIT para seus usua'rios. Inclusive uma 
versa~o "abrasileirada" pela TELEMIG,  o Transtexto (TRNTXT), 
que inclui a capacidade de controlar a portadora de um modem 
de 1200 bps half-duplex,  muito difundido.  A RCD/TB emprega 
tal  tipo de modem.  Para maiores informac,o~es,  ao receber o 
"Menu Principal" dos servic,os da RCD/TB, entre em "B" (Banco 
de  Arquivos)  e  consulte,   no  banco  2  (validados),   o 
KERMIT.DOC, assim:

     COMANDO ARQUIVO>c kermit.doc

     O servic,o perguntara' se deseja receber o arquivo.  Res
ponda "S".  Desta forma voce^ tera',  em seu micro,  todas  as 
informac,o~es  necessa'rias para conseguir a versa~o  apropriada 
do KERMIT para o seu equipamento.

     La' esta~o,  tambe'm,  os manuais do Usua'rio (este) e o do 
Protocolo  (caso voce^ se interesse em saber mais do que esta' 
explicado  neste  guia,  melhorar uma versa~o  existente  ou, 
ainda, escrever uma versa~o nova). 

     Uma   vez  que novos  programas KERMIT (ou  melhoramen
tos  em antigas verso~es) aparecem  com  freque^ncia, as  ins
talac,o~es  que usam  o  KERMIT pesadamente  sa~o encorajadas a  
contactar a Columbia  duas ou tres vezes por ano, para saber 
das novidades.

     Nenhuma  garantia  do software  nem da  documentac,a~o  a  
seu  respeito esta' expli'cita ou implicitamente colocada; nem 
os autores sa~o obrigados a informar a todos qualquer defeito 
em programas ou suas documentac,o~es.
.pa
.pn1
.foKERMIT: Guia do Usua'rio                                    #
.he                                                  Introduc,a~o

1. Introduc,a~o

     Todo  mundo quer que seus computadores falem entre  si. 
Existem  va'rias  formas de se fazer isso,  a  maioria  delas 
muito  cara.  Mas existe uma  que e'  barata e  relativamente 
fa'cil:   conectar os dois computadores atrave's de suas  por
tas TTY  (terminal  assi'ncrono) e  engana'-los de  forma  que 
acreditem  que o outro  seja um dos seus  terminais. Podemos 
esperar  que isso funcione,  ja' que o padra~o  de  conexa~o  e' 
quase  que  universalmente obedecido,   tanto  em   hardware 
(plug   e  sinal:  EIA  RS-232)  quanto em software  (carac
teres   ASCII).   Uma  vez  conectados  dessa   forma,    os 
computadores podem rodar,  cada um,  programas que se enten
dam,  de maneira a permitir a comunicac,a~o desejada por  meio 
de um protocolo.

     Por que um protocolo e'  necessa'rio,  afinal?  Tre^s pro
blemas   maiores ocorrem quando se tenta ligar dois computa
dores via uma linha TTY:

     1. Rui'do
                    E'  temeroso  garantir que  na~o  existira' 
                    interfere^ncia  ele'trica  numa  linha  de 
                    comunicac,a~o. Qualquer linha apresentara', 
                    ocasionalmente, interfere^ncia, ou rui'do, 
                    principalmente se for uma linha  discada 
                    ou chaveada,  que resulta,  tipicamente, 
                    em   lixo  ou   caracteres   extras.   O  
                    rui'do  adultera  os dados  e, quando  se 
                    percebe, normalmente ja' e' muito tarde.

     2. Sincronismo
                    Os  dados na~o podem chegar mais  rapida
                    mente  do  que a  ma'quina receptora con
                    segue manusea'-los.  Mesmo que a  veloci
                    dade  da  linha seja a mesma  nas   duas 
                    pontas,  a  ma'quina receptora  pode  na~o  
                    ser capaz  de processar um  fluxo conti'
                    nuo  de  entrada a tal  velocidade.  Seu  
                    processador   central   pode ser   muito  
                    lento  ou carregado  demais,   seus buf
                    fers   muito  cheios ou   pequenos...  O 
                    sintoma ti'pico de um problema de sincro
                    nismo e' a perda de dados. Muitos  siste
                    mas operacionais simplesmente  descartam 
                    os  dados  que  chegam quando  eles  na~o 
                    esta~o preparados para recebe^-los.

     3. Quedas de linha
                    Uma   linha pode parar de trabalhar  por  
                    curtos peri'odos por causa de um conector 
                    defeituoso, queda de energia ou qualquer 
                    raza~o similar.  Em conexo~es discadas  ou 
                    chaveadas   tais defeitos  intermitentes 
                    fara~o com que a portadora  caia,  encer
                    rando a conexa~o; mas qualquer conexa~o em 
                    que na~o seja usada a  portadora de sinal 
                    o sintoma sera' a perda dos dados.

     De   forma  a  prevenir  a  adulterac,a~o  dos  dados   e  
sincronizar  a comunicac,a~o,  computadores que   se  entendam 
podem   trocar informac,o~es  de controle,   ao mesmo tempo em 
que  esta~o transferindo dados.  Tal insersa~o de  informac,o~es 
de  controle  entre os  dados e as ac,o~es decorrentes   disso 
constitui um PROTOCOLO.

     O   KERMIT  e'  um desses  protocolos.   Foi  projetado, 
especificamente,   para  transferir   arquivos   sequenciais  
atrave's  das  linhas  comuns  de telecomunicac,o~es.   Na~o   e' 
necessariamente   melhor  que os muitos outros protocolos de 
transfere^ncia   de arquivo orientados  para este ou   aquele 
terminal   mas   e' gratis,   bem  documentado e   tem   tido 
compatibilidade implementada em va'rios microcomputadores bem 
como em ma'quinas de pequeno e grande porte.

     O  KERMIT transfere dados  encapsulados em pacotes   de 
informac,a~o de controle. Tais  informac,o~es  incluem  marca de  
sincronismo,   nu'mero   do pacote  para permitir a  detecc,a~o  
de  perda   de pacotes,   um indicador de comprimento  e  um  
"checksum" para  uma verificac,a~o  dos dados  (paridade hori
zontal).  Os  pacotes perdidos  ou  adulterados sa~o detecta
dos   e  as devidas  retransmisso~es   sa~o    automaticamente  
pedidas.    Os   pacotes duplicados  sa~o descartados.   Adi
cionalmente  va'rios  pacotes de controle especiais  permitem 
que  KERMITs se  conectem e desconectem para  trocar  diver
sos  tipos de informac,a~o.  Pouca  coisa  e' assumida   acerca 
das  capacidades  de cada computador.  Por isso o  protocolo 
KERMIT  pode  funcionar bem entre va'rios sistemas  de  tipos 
diferentes.

     A Sec,a~o 2 (Como usar o KERMIT) lhe diz tudo o que  voce^ 
precisa  saber para transferir arquivos de texto na  maioria 
dos casos e mostra  alguns exemplos especi'ficos.

     Se  voce^ seguir os exemplos  da Sec,a~o 2 mas  na~o conse
guir  fazer  uma conexa~o de terminal ou  na~o  transferir  um 
arquivo  com sucesso,  consulte a Sec,a~o 3 (Quando as  coisas 
va~o mal).

     Se  voce^ pretende ser um forte usua'rio do KERMIT,  deve 
ler a Sec,a~o 4 (Comandos KERMIT), que  descreve, em detalhes,  
todas  as facilidades  do KERMIT.   Uma certa  familiaridade 
com o material dessa Sec,a~o lhe ajudara' em possi'veis dificul
dades  quando quizer fazer novos tipos de conexa~o  ou quando  
estiver  tentando   transferir arquivos  na~o   usuais.  Voce 
achara', tambe'm, descric,o~es de facilidades avanc,adas de manu
seio  de arquivos  que foram omitidas de edic,o~es  anteriores 
deste manual.

     A  Sec,a~o 5 (Implementac,o~es do KERMIT)  resume  sistemas 
para  os quais o KERMIT estava disponi'vel quando da prepara
c,a~o desta edic,a~o.

     Os  capi'tulos  subsequentes  descrevem   implementac,o~es  
particulares  selecionadas.   Leia  a sec,a~o apropriada  para 
cada  sistema  em que voce^ for usar  o  KERMIT;  cada  sec,a~o 
descreve a convenc,a~o para nomes de arquivos  e outras  faci
lidades importantes para usua'rios  KERMIT. Lista, tambe'm, os 
comandos  KERMIT  para aqueles sistemas,  principalmente  em 
termos  de   suas diferenc,as do KERMIT "ideal"  descrito  na 
Sec,a~o 4.
.pa
.he                                          Como usar o KERMIT
2. Como usar o KERMIT

     O  KERMIT e' um protocolo para transfere^ncias confia'veis 
de arquivos entre computadores atrave's das linhas comuns  de 
telecomunicac,o~es   usadas para  conectar  os  terminais  aos  
computadores.   A meca^nica  de  uso do KERMIT para se trans
ferir  um arquivo pode parecer  confusa ate' que  se pegue  a 
ide'ia  da  coisa.   Um  pouco de embasamento pode  tornar  o 
processo mais inteligi'vel.

     O KERMIT e',  provavelmente,  a maneira mais barata para 
se  fazer   uma  comunicac,a~o   entre  dois  computadores.  O 
hardware exigido normalmente ja' esta' disponi'vel,  o software 
e'  gra'tis e todos os seus componentes rodam  como  programas 
normais  de aplicac,a~o,  sem modificac,o~es de sistema.  O que, 
alia's,  contrasta terrivelmente  com uma  rede de  comunica
c,a~o de  dados, onde  existem  canais  e  "drivers" de  comu
nicac,a~o  de  alta velocidade dedicados, softwares cari'ssimos 
e  outros "ingredientes".  Uma rede  prove^ mais servic,os  do 
que  o KERMIT,  usualmente a maiores velocidades,  ja' que  a 
rede  e' normalmente parte do sistema.  Quando uma  rede  na~o 
existe (ou na~o  esta' disponi'vel),  o KERMIT pode preencher o 
espac,o.  Mas  uma  vez  que o KERMIT na~o  fica  integrado  a  
qualquer sistema em  particular e,   sim,  apoiado  nos  re
cursos  que  muitos sistemas  tem,  requer   algum  trabalho 
adicional para aqueles que quiserem usa'-lo.


.cp3
2.1. O programa KERMIT

     O  KERMIT embute um conjunto de regras para  transferir 
confiavelmente arquivos entre  computadores.  Geralmente  um  
dos   computadores   e'  um sistema  de grande  porte  (host)  
em  regime  de time-sharing  com va'rios terminais ligados  a 
ele e o outro e' um microcomputador pessoal.

     Para que se estabelec,a um protocolo KERMIT, um programa 
KERMIT  deve estar  rodando em cada ponta da linha de  comu
nicac,a~o (uma ponta no host, outra no micro).

     Dois programas KERMIT  trocam mensagens numa  linguagem 
deles,   toda especial:    o  protocolo  KERMIT.  O  dia'logo  
e'  qualquer  coisa  como:

A  -- Ola'!    Vou  comec,ar   a mandar arquivos   para  voce^.  
      Quando  voce^ for comec,ar a mandar mensagens para  mim,  
      por  favor na~o as fac,a maiores  que 80  caracteres  e, 
      se voce^ na~o ouvir nada de mim por mais de 15 segundos, 
      acorde-me, sim?

B --  Certo!

A --  Agora, la' vai um arquivo chamado ARQUIVO.TXT, certo?

B --  Certo.

A --  La' vai o primeiro pedac,o...

B --  Peguei!

A --  Muito bem! La' vai o segundo pedac,o...

B --  O segundo pedac,o era lixo.

A --  Bem, la' vai ele de novo...

      etc.

     Voce^   na~o ve^ isso acontecer:  tudo  esta' embutido  num 
co'digo conciso que os dois KERMIT  podem entender.  Eles  se 
preocupam com  transmissa~o, checagem  de erros, traduc,a~o dos 
caracteres  e  tudo  o  mais.  Cada mensagem  e'  chamada  de  
"pacote"  e   cada pacote  esta' num  formato  especial   que 
qualquer KERMIT pode entender.


.cp3
2.2. Falando com dois computadores de uma vez

     Seu trabalho e'  fazer os dois  KERMITs entrarem no  ar. 
A   confusa~o  aparece   porque voce^ tem que  usar  um  u'nico 
teclado e uma u'nica tela para se comunicar com dois computa
dores diferentes,  dois programas distintos. Vamos  falar de  
um caso  comum:  voce^ esta'  sentado diante  de um micro  que 
tem  uma  porta   serial de comunicac,a~o.  Esta   porta  esta' 
ligada a  um host usando, digamos, um MODEM.

     Normalmente,  quando voce^  usa o micro,  esta' "falando" 
diretamente  com ele.  Seus comandos sa~o interpretados  pelo 
sistema operacional do seu micro  (CP/M, MS-DOS, UNIX, o que 
for)  ou por algum programa que estiver rodando  no  momento 
(um editor de textos,  um jogo...).  O KERMIT e'  um programa 
como  qualquer outro mas que tem a  habilidade  especial  de 
tanto interpretar  seus  comandos diretamente,  como  outros  
programas,  quanto  de passar tudo  o que voce^  digitar para 
que  o host interprete. Quando mandamos  o KERMIT se  conec
tar,  ele  envia   cada caracter que  se tecla   atrave's  da 
porta   serial e cada  caracter que chegar  por ela vai para 
a  tela.  Isto  e' chamado SERVIC,O DE  TERMINAL  VIRTUAL  (um  
computador  aje  "virtualmente" como se fosse o terminal  de 
outro.  Nesse  momento voce^ estaria falando com o host  e  o 
micro "ignorando" voce^.

     O  KERMIT,   como  muitos  outros  programas,   tem  um 
"prompt".  O prompt e' um  si'mbolo que o  programa coloca  no  
canto  esquerdo de  uma linha para indicar que esta'   pronto 
para  receber um comando de voce^.   O prompt  do  KERMIT  e',  
normalmente,     KERMIT-xx>.     O   "xx"   identifica     a 
implementac,a~o  do  KERMIT.  O  KERMIT  que roda  no   DEC-20 
usa  o  prompt KERMIT-20>;  o que roda em micros baseados em 
8080  ou  Z80 usa KERMIT-80>;  o que roda  num  IBM/PC   usa 
KERMIT-86  e por  ai' vai...   Se voce^  ficar confuso  acerca  
de  qual   KERMIT  esta'  falando com  voce^,  o   prompt  vai 
ajudar.  Ale'm  disso  alguns KERMITs imprimem  uma  mensagem 
informativa (normalmente em ingles^) como

     [Conectado ao host; tecle <CTRL-@> para retornar.]

quando voce^ se conecta e outra mensagem como

     [Conexa~o encerrada; de volta ao micro.]

quando voce^ volta.

     Uma vez conectado  ao host,  deve  existir uma  maneira  
de  voltar  ao micro.  Isto e' conseguido atrave's de uma  se
que^ncia  de escape.  Conforme o KERMIT passa seus caracteres 
para  o  host,   testa cada um para ver se  e'  um   caracter  
especial   previamente definido  como  caracter  de  escape. 
Quando  ele  ve^ tal caracter,  deixa de ignorar  voce^  (voce^ 
novamente   passa a  conversar  com  o  micro,   na~o com   o  
host).  O  caracter  de escape normalmente e'  escolhido como  
um   que  voce^  na~o precisara'  teclar  ao conversar   com  o 
host   e  que   seja difi'cil de  ser  teclado  por  acidente 
(usualmente um caracter de  controle, como CONTROL-@)  e que 
e'   entrado segurando-se  a  tecla CTRL  enquanto se  aperta 
a   tecla com  o si'mbolo indicado (nesse caso  SHIFT-P).  Os 
caracteres de controle esta~o  escritos aqui  como CTRL-X  ou 
^X,  onde X e'  o caracter a ser teclado enquanto se aperta a 
tecla CONTROL.


.cp3
2.3. Transferindo um arquivo

     Para  transferir um arquivo,  tenha, primeiro, a  aten
c,a~o do sistema operacional de seu micro.   Uma vez em  ni'vel  
de comando,  rode o  KERMIT.  Diga  ao KERMIT,  enta~o, que o 
conecte  ao host.  Ai' voce^ estara' falando com o host.  Neste 
ponto voce^  tem que se  identificar para, so'  enta~o, rodar o 
KERMIT do host.

     Agora   voce^  tem um  KERMIT de cada  lado do  fio.   O 
pro'ximo passo e' dizer a cada um o que fazer.   Suponha que o 
que  voce^  quer e'  transferir um  arquivo do  host   para  o 
micro.   Primeiro diga ao  KERMIT do host que mande o arqui
vo;   enta~o "escape" dele  de volta ao  do micro e  diga-lhe 
que   receba o  tal arquivo.  A  transfere^ncia comec,a.  Pode  
se  recostar  e observar ou ir fazer um  bom   sandui'che.  O 
KERMIT  do micro  continuamente mostrara'  os  contadores  de  
pacotes  e de  retransmisso~es e lhe avisara' quando a  trans
fere^ncia houver terminado.

     O arquivo desejado esta' agora no disquete do seu micro. 
O  protocolo KERMIT se assegurou da chegada certa e completa 
do arquivo.  Agora e' por sua conta:  conecte-se de volta  ao 
host,  saia do KERMIT de la', encerre a sua  sessa~o de termi
nal,  "escape"  de volta para o KERMIT do micro e saia dele. 
Fac,a,   enta~o,  o   que  voce^ havia  planejado  para o   seu  
arquivo: edite-o, liste-o, o que quiser.

     O  protocolo KERMIT (e a maioria  dos programas KERMIT) 
permitem que se mande,  confiavelmente,  um arquivo do  host 
para o micro,  do micro para o  host, de um  host para outro  
ou de um  micro para outro,   sem que se tenha, normalmente, 
cuidados com a natureza das ma'quinas particularmente  envol
vidas.   Muitas implementac,o~es permitem tambe'm que os arqui
vos sejam mandados em grupos,   com um  u'nico comando,  como 
"mande  todos os  meus arquivos  FORTRAN!".  O cena'rio  para 
isso   e'  o mesmo  descrito acima,  somente os detalhes   de 
como  estabelecer a  conexa~o real  e' que  podem diferir.

     O   KERMIT  trabalha  melhor  com  arquivos   "imprimi'
veis"  (compostos apenas de letras,   di'gitos,  si'mbolos  de  
pontuac,a~o,  controles de  carro, tabulac,a~o etc.) uma vez que 
eles  podem ser representados em praticamente todos os tipos  
de  computador.   Tambe'm  e' capaz  de  transferir   arquivos 
"bina'rios"    (como   programas    executa'veis),    composto   
por  padro~es arbitra'rios de bits.  Mas os  arquivos bina'rios 
normalmente  so' tem  real significado  para computadores  do 
mesmo tipo  daquele que o gerou.  Mesmo assim o KERMIT  pode 
transferir  tais  arquivos de um  sistema A para   um  outro 
sistema  B (onde na~o sera' usado) e,  dele,  para um terceiro 
sistema  C,  similar  ao A,  em sua  configurac,a~o  original, 
embora,  em  alguns  casos, devamos ter cuidados especiais.

     Ja'  temos uma  compreensa~o ba'sica daquilo que o  KERMIT 
faz   e  como o faz.  Oportunamente veremos alguns  exemplos 
mais concretos. Antes voce^ deve conhecer os comandos ba'sicos 
do KERMIT.


.cp3
2.4. Comandos ba'sicos

     Estas   sa~o   descric,o~es  gene'ricas  da   maioria   dos  
comandos KERMIT.  Descric,o~es detalhadas vira~o depois. Nestas 
descric,o~es  "local"  se  refere ao  sistema que   voce^  esta'  
usando diretamente;   "remoto" se  refere ao sistema ao qual 
voce^  esta'  conectado  via KERMIT.  Os comandos  podem   ser 
compostos  de  mais de uma palavra e sa~o terminados  por  um 
RETURN.

.cp3
SEND especificac,a~o-de-arquivo(s)

          Manda  o  arquivo ou o grupo de arquivos  conforme 
     especificado,  deste  KERMIT para o outro.  O nome   de 
     cada  arquivo e' passado para o outro KERMIT num  pacote 
     de  controle especial,  de forma  a poder  ser guardado  
     com  o mesmo nome.  Um grupo de arquivos  e'  usualmente 
     especificado   pelo   fato de  se   incluir  caracteres  
     "coringa", como o  "*" na especificac,a~o do arquivo.

          Exemplos:

     SEND ARQUIVO.TXT  (Mande o arquivo ARQUIVO.TXT)
     SEND ARQ*.ASM     (Mande os ASM comec,ados por ARQ)

          Algumas  implementac,o~es  do KERMIT podem  na~o  dar 
     suporte  a  comandos  de transfere^ncia  de  grupos   de 
     arquivos.   Tais  verso~es  exigem um comando SEND  para 
     cada arquivo a ser transferido.

.cp2
RECEIVE
             Recebe um arquivo ou um grupo deles  de   outro 
     KERMIT.   Caso  o  nome  de um arquivo  que chega  seja 
     ilegal,  tenta   transforma'-lo  num nome   legal,   por 
     exemplo,   abandonando  caracteres na~o-alfanume'ricos ou  
     excessivos.  O  nome  assim  formado  na~o   e', garanti
     damente,   u'nico.  Nesses casos  arquivos ja' existentes 
     podem  se  perder.  Algumas  verso~es  de KERMIT  tentam 
     previnir que isso acontec,a,  avisando a voce^ a  colisa~o 
     dos   nomes  e tomando (ou  deixando que voce^  o  fac,a) 
     ac,o~es evasivas.

.cp2
CONNECT
             Forma  um "terminal virtual" do sistema remoto. 
     Num micro, isto usualmente significa mandar tudo  o que  
     vem  do teclado atrave's da porta serial e o que  aquilo 
     que chegar pela porta serial mostrar na tela do  micro. 
     Para  escapar  de  uma conexa~o como  terminal  virtual, 
     tecle  o  caracter  de escape do KERMIT   (um  ^@,  por 
     exemplo).

.cp2
SET
          Altera  o  posicionamento  das   opc,o~es   standard 
     (como  o  caracter  de   escape,   caracteri'sticas   do 
     arquivo,   nu'mero da linha  de comunicac,a~o, paridade ou 
     controle de fluxo).

.cp2
SHOW
          Mostra   os   valores  do  conjunto   de   opc,o~es, 
     modificados pelo comando SET.


.cp2
EXIT
           Sai  do  KERMIT para o sistema operacional sob  o 
     qual ele esta' rodando.

 
.cp2
HELP ou ?
          Teclado  em  qualquer lugar dentro de  um  comando                              
     KERMIT:  lista  os comandos,  opc,o~es ou operadores  que                              
     se   fazem possi'veis em tal ponto.  Este  comando  pode                              
     ou  na~o   exigir  um RETURN,   dependendo  do   sistema                              
     operacional.


.cp3
2.5. Exemplos reais

     O  KERMIT pode ser usado em diversas situac,o~es:  em  um 
computador  pessoal que esteja conectado a um maior,  em  um 
host  que esteja ligado em um outro ou em um micro ligado  a 
outro.

.cp3
2.5.1. MICRO <---> HOST

     Neste  exemplo,  o   usua'rio  esta'   sentado  num   IBM 
Personal  Computer (PC),  que esta' conectado, atrave's de sua 
porta serial,  a um computador host DECSYSTEM-20. O IBM/PC e' 
o local; o DEC-20 e' remoto. Este exemplo tambe'm  se  aplica
ra'  literalmente   a  quase   todas  as   implementac,o~es  do 
KERMIT.

     Voce^  ligou  seu  PC e tem o  programa  KERMIT  em  seu 
disco.  Comece   por rodar  o KERMIT no PC.  Use o   comando 
CONNECT para se tornar um terminal do DEC-20.  Na realidade, 
o PC  simula o popular terminal HEATH-19 (ou  o  VT52),  por 
isso  e' uma boa medida dizer ao DEC-20 que seu terminal e' um 
desses.  Entre  com  o procedimento de  LOGIN no  DEC-20   e 
chame  o  KERMIT nele.   Aqui esta' um exemplo desse procedi
mento com os comandos que voce^ daria em minu'sculas:

A>kermit              (chamando o KERMIT no PC)
KERMIT V1.20

KERMIT-86>            (este e' o prompt do KERMIT do IBM/PC)
KERMIT-86>connect     (conectando-se ao DEC-20)

[Connecting to host; type ConTRol-]c to return to PC.
 Baud rate is 9600, connecting over COM1.]

                      (voce^ esta', agora, ligado ao DEC-20)

CU20B                 (o DEC-20 da' mensagens de saudac,a~o)

@terminal heath-19    (diga seu tipo de terminal - opcional)
@login eu co'digo      (identifique-se normalmente)

                      (neste  ponto  o  DEC-20  manda  va'rias 
                       mensagens)

@kermit               (chamando o KERMIT do DEC-20)
KERMIT-20>            (prompt do KERMIT do DEC-20)

                      (voce esta' pronto para transferir 
                       arquivos)

     Os  exemplos  seguintes ilustram  a  maneira de  mandar  
arquivos  do  DEC-20 para o PC.   Note o  uso   do  caracter 
coringa  "*" para denotar  um grupo de arquivos.


.foKERMIT: Guia do Usua'rio                                   #
KERMIT-20>send *.for  (mande todos os arquivos FORTRAN)
^]c                   (volta  para o PC,  usando a seque^ncia 
                       de escape, neste caso CNTRL-] seguido 
                       de "c")
[Back at PC.]
KERMIT-86>receive     (mandando  o KERMIT do PC  preparar-se 
                       para receber os arquivos)

    Se  voce^  levar mais  de 5  segundos para  voltar ao  PC 
e  emitir  o comando   RECEIVE,   os  primeiros  pacotes  do  
KERMIT-20  podem  chegar prematuramente e aparecerem em  sua 
tela.   Mas  na~o se preocupe:  o  pacote sera'  retransmitido 
pelo  KERMIT-20 ate' que o KERMIT-86,  no PC,  confirme a sua 
recepc,a~o.

    Uma vez estabelecida a conexa~o,  o  PC vai lhe mostrar o 
que  estiver acontecendo:  depois de  limpar a  tela, espera  
os  pacotes  que chegam;  conforme forem  chegando,  o  nome 
corrente   de cada arquivo e o nu'mero  do pacote  va~o  sendo  
mostrados   em   sua   tela.   Quando   o   prompt   do   PC 
("KERMIT-86>")  aparecer  na  sua  tela,  e'  sinal   que   a  
transfere^ncia terminou.  Durante a transfere^ncia,  a tela do 
micro mostrara' algo assim:

IBM PC KERMIT-86 V1.20

NUMBER OF PACKETS:  294                         RECEIVING...
NUMBER OF RETRIES:    2
FILE NAME:   PROGRAMA.FOR



     Os  contadores de pacotes (PACKETS) e de retransmisso~es 
(RETRIES)  sa~o  continuamente  atualizados e  a  palavra  na 
parte   superior  direita  da  tela   (RECEIVING,   SENDING, 
COMPLETE,  INTERRUPTED  ou FAILED) mostra o status da trans
fere^ncia.

    Quando   a  transfere^ncia terminar (muitas   verso~es  do 
programa  KERMIT soam um bip),  voce^ deve se re-conectar  ao 
host (DEC-20),  sair do  KERMIT de  la',  avisar  ao   DEC-20  
que voce^ vai  encerrar a  sessa~o (LOGOUT) e escapar de volta 
ao PC, como voce^ ja' havia feito antes.

KERMIT-86>connect         (de volta ao DEC-20)
[CONNECTING TO HOST; TYPE CONTROL-] C TO RETURN TO PC.

KERMIT-20>                (ca' estamos no's!)
KERMIT-20>exit            (saindo do KERMIT-20)
@logout                   (despedindo-nos do DEC-20)


LOGGED OUT JOB 55, USER EU, ACCOUNT MINHA-CONTA, TTY 146,
AT 12-JUL-84 16:59:55,  USED 0:00:17 IN 0:21:55

^]c                       (escapando de volta para o PC...)

KERMIT-86>exit            (... e saindo do KERMIT do PC)


     Os  arquivos  que voce^ transferiu devem estar agora  no 
disco do PC.

     Para   mandar arquivos do PC para   o  DEC-20,  proceda 
similarmente.  Em  primeiro  lugar siga  as  instruc,o~es   de 
LOGIN  no DEC-20  atrave's do  PC.  Depois,   em resposta  ao 
prompt   do host  "KERMIT-20>",  tecle  RECEIVE ao inve's  de 
SEND.   Escape  de  volta para  o PC e  use o  comando  SEND  
para enviar  os arquivos do PC  para o DEC-20. O  PC vai lhe 
mostrar, sempre, como vai indo a transmissa~o.

     Quando  o prompt "KERMIT-86" indicar que a  transmissa~o 
terminou,  siga  o  procedimento ja' descrito  de  voltar  ao 
DEC-20,   sair do KERMIT-20 e,  depois,  do host (LOGOUT). A 
menos   que voce^ queira fazer qualquer  outro servic,o la'  no 
DEC-20 como, por exemplo, compilar um dos programas que voce^ 
acabou de enviar.


.cp3
2.5.2. HOST <---> HOST

     Esta  sec,a~o descreve o uso do KERMIT  entre dois hosts. 
Um "host" e' um computador de grande  porte e uma das  carac
teri'sticas  que o  colocam nesta  classe e'  o fato   de  que  
ele  tem   diversos terminais.   O uso do KERMIT  em  trans
fere^ncias  host-host  difere  do caso PC-host na medida   em 
que  a linha que conecta um terminal a um host na~o e' a mesma 
atrave's da qual os dados sera~o transferidos  de um host para  
o outro e que  alguns comandos  especiais tem que ser   emi
tidos  para  permitir cumprir comandos na~o usuais  do  outro 
host.

     Neste exemplo,  voce^ ja' esta' "logado" num DEC-20 e usou 
um  discador  automa'tico  para  se  conectar  a um   sistema  
IBM/370,  rodando VM/CMS, atrave's da porta TTY 12 do DEC-20. 
O discador automa'tico,  neste exemplo,  e'   invocado  de  um   
programa chamado DISQUE (imaginado aqui,  por simplicidade), 
ao qual basta que se fornec,a o nu'mero do telefone.

@disque 765-4321/baud:1200
Confirme: 765-4321, BAUD 1200.     (Voce^ tecla RETURN)
Discando. Favor aguardar...
Portadora detectada atrave's da TTY12:
@

     Existem   outros   me'todos  para  conectar dois   hosts  
com   uma  linha serial.   As   conexo~es   entre    ma'quinas  
pro'ximas    podem   ser   feitas simplesmente  passando   um  
cabo  EIA entre  suas  portas  TTY.  Conexo~es manuais tambe'm 
podem   ser feitas  mas sa~o  trabalhosas.  Se  voce^ tem   um 
micro  que suporte KERMIT,  talvez ache  mais fa'cil transfe
rir um arquivo do host A para ele e, dele, para o host B.

     O  procedimento abaixo deve servir  em  qualquer  caso, 
uma vez feita a conexa~o.  Note que  o KERMIT-20  executa uma  
conexa~o  a   terminal  remoto rodando  um  programa  chamado 
TTLINK num "fork" inferior. 

@
@kermit                   (chamando o KERMIT no DEC-20)
KERMIT-20>set ibm         (aciona handshaking especial,  pa
                           ridade e eco local)
KERMIT-20>set line (to tty) 12     (indica que linha usar)
KERMIT-20>connect         (conectando-se)
[TTLINK: CONNECTING TO REMOTE HOST OVER TTY12;
         TYPE <CTRL-Y>C TO RETURN]

VM/370 ONLINE  (o sistema da' suas mensagens de saudac,a~o)
login eu co'digo           (identificando-se ao sistema IBM)

LOGON AT 20:49:21 EST THURSDAY 07/12/84
CUVMB SP/CMS PUT 8210 01/19/84

kermit
KERMIT-CMS>send profile exec
^Yc                       (seque^ncia de escape do TTLINK)
[TTLINK: CONNECTION CLOSED. BACK AT DEC-20.]
KERMIT-20>receive (informa ao KERMIT-20 que la' vem arquivos)

     A  transfere^ncia  comec,a nesse  momento.   O  KERMIT-20  
imprimira'  os nomes  dos arquivos que  chegarem, seguidos de  
pontos  ou porcentos para indicar o tra'fego dos pacotes  (um 
ponto  para  cada 5 pacotes transferidos com   sucesso,   um  
porcento  para  cada  time-out  ou  retransmissa~o). A trans
missa~o estara' completa quando voce^ vir um "[OK]",  ouvir  um 
bip  soar e  o prompt "KERMIT-20" aparecer.  Neste ponto nos 
reconectamos  ao IBM remoto,  saimos do KERMIT-CMS (EXIT)  e 
encerramos a sessa~o (LOGOUT). 

profile exec 1 ..%%.[OK]

KERMIT-20>connect  (de volta ao IBM para encerrar o servic,o)

[TTLINK: CONNECTING TO REMOTE HOST OVER TTY12:
         TYPE <CTRL-Y>C TO RETURN

KERMIT-CMS>exit
R;
logout

CONNECT= 00:03:01 VIRTCPU= 000:00.12 TOTCPU= 000:00.60
LOGOFF AT 20:52:24 EST THURSDAY 12/07/84

^Yc                       (seque^ncia de escape do KERMIT-20)
[TTLINK: CONNECTION CLOSED. BACK AT DEC-20.]
KERMIT-20>exit            (acabado o servic,o do KERMIT)

     Este   e' todo  o procedimento.  O  arquivo esta' no  seu 
direto'rio   (no  DEC-20)   completamente    legi'vel,    como  
PROFILE.EXEC   --   note   que   o KERMIT-CMS   traduziu  da 
codificac,a~o  EBCDIC usada pela  IBM para ASCII e converteu o 
espac,o entre o nome e o tipo em um ponto. 

     Para mandar um  arquivo do  host local para  o  remoto,  
simplesmente  precisamos inverter os comandos SEND e RECEIVE 
que aparecem no exemplo acima.


.cp3
2.5.3. MICRO <---> MICRO

     O  KERMIT  tambe'm  funciona  entre  computadores   pes
soais   (micro, estac,o~es de trabalho). A diferenca aqui esta' 
no  fato  de que os comandos sa~o entrados em dois  teclados,  
ao  inve's de num  so'.  Isto porque  um  computador   pessoal  
normalmente   so'  aceita  comandos  atrave's  de seu  pro'prio 
teclado.   Se um  KERMIT de  um  micro se  conecta a  outro,  
na~o existira' normalmente programa algum, do outro lado, para 
ouvi'-lo. 

     Fazer   a  conexa~o fi'sica entre os  dois  micros  exige 
certa atenc,a~o.  Se as duas ma'quinas  estiverem bem pro'ximas,  
podera' ser  usado um cabo "null-modem".  No entanto,  micros  
diferentes tem diferentes requisitos (uns exigem um conector 
fe^mea  em sua porta serial,  outros macho;  uns precisam que 
certos  sinais RS-232 sejam mantidos altos  ou  baixos).  De 
qualquer  modo  voce^  sempre tem que  se  assegurar  que  as  
velocidades das portas sa~o  as mesmas nas duas ma'quinas. 

     As   conexo~es  a longa dista^ncia podem  ser feitas  via 
discagem,  desde que MODEMs compati'veis estejam  disponi'veis 
(pode  ser  interessante  que um dos lados  tenha   resposta 
automa'tica) ou usando qualquer tipo de circuito dedicado  ou 
chaveado  que  possa estar disponi'vel  (PaBX,  centrador  de 
portas  ou  outra  coisa que se possa ligar em  um  conector 
EIA).

     Neste  exemplo um  DEC VT180  (ROBIN),  sob  CP/M, esta'  
ligado a um SUPERBRAIN da INTERTEC,  tambe'm sob CP/M,  usan
do-se  um cabo  null-modem fe^mea-macho.   Conseguir um  cabo 
certo e' a parte difi'cil.  A conexa~o pode ser testada rodando  
o pro'prio  KERMIT nas  duas ma'quinas  e emitindo  o  comando  
CONNECT   em   ambas:  o  que  se  teclar num   dos   micros 
devera' tambe'm aparecer na tela do outro.

     Suponha  que voce^ quer enviar o  arquivo ARQUIVO.HEX do 
ROBIN  para   o SUPERBRAIN.  Proceda da maneira  descrita  a 
seguir. 

1. Rode o KERMIT no SUPERBRAIN e de^ o comando de recepc,a~o:

    A>kermit
    INTERTEC SUPERBRAIN KERMIT-80 - V3.7

    KERMIT-80>receive


2.  Rode  o  KERMIT no ROBIN e comande-o para  transmitir  o 
    ARQUIVO.HEX

    A>kermit
    DEC VT18X KERMIT-80 - V3.7
    KERMIT-80>send arquivo.hex

     Observe  os pacotes voando.  Quando aparecer  o  prompt 
"KERMIT-80>",  a transfere^ncia terminou e voce^ pode sair dos 
dois KERMITs. 

     O   ponto   chave e'  preparar a  recepc,a~o  em  primeiro  
lugar (muitos KERMITs de micro na~o  incluem a facilidade  de  
time-out  e  se o  receptor na~o estiver pronto para  receber 
quando o transmissor comec,a a trabalhar, acontecera' um dead
lock de protocolo. 


.cp3
2.6. Outra maneira: o SERVIDOR

     Ate' agora estivemos descrevendo as verso~es  elementares 
do protocolo KERMIT.  Uma  extensa~o  opcional deste protoco
lo inclui  o  conceito  de SERVIDOR.   Um SERVIDOR  KERMIT e'  
um  programa   KERMIT  que  na~o interage diretamente  com  o 
usua'rio   mas,  sim,  com outro  programa  KERMIT.  Na~o   se 
entram  comandos para  um servidor: ele simplesmente e'  cha
mado  em uma ma'quina e os comandos para ele sa~o  dados  pela 
ma'quina na outra ponta da conexa~o. 

     Nem todas as  implementac,o~es do  KERMIT podem ser  ser
vidores e  nem todas  sabem falar com  servidores (ainda). O 
servidor  deve rodar em um computador remoto, normalmente de 
grande  porte,  como  um DEC-20.  Ainda se tem  que fazer  a 
conexa~o com  ele,  identificar-se e disparar o servidor. Mas 
na~o  se   tem mais que  comandar um lado  para enviar  e   o 
outro   para  receber,   nem se reconectar  ao  remoto  para 
encerrar  a sessa~o. Usando o servidor, podemos  fazer  todas  
as   operac,o~es   que  quisermos,   falando somente   com   o 
KERMIT   do computador  local.  Alguns   servidores  preveem 
servic,os adicionais,  como listagens de direto'rios,  delec,a~o 
de arquivos e consulta aos controles de uso de disco.
 
     Um  servidor KERMIT e'  um mero programa KERMIT,  rodan
do  em um modo especial.  Age como se fosse um KERMIT  comum 
depois  que se da' o  comando RECEIVE  (espera  por uma  men
sagem  do   outro KERMIT)  mas neste  caso a mensagem  e'  um 
comando   que lhe diz o  que fazer,  normalmente enviar   ou 
receber  um arquivo ou um grupo deles.  Depois de escapar de 
volta para o sistema local,  podemos  dar quantos   comandos 
de enviar  ou receber  que quisermos e,  quando terminarmos, 
podemos  emitir o comando BYE,  que envia ao servidor KERMIT  
remoto  a   ordem de encerrar  a sessa~o   por  no's.   Na~o  e'  
necessa'rio  que   voltemos a nos  conectar ao  remoto   para 
fazer  isto.  Podemos,  tambe'm,  usar o  comando FINISH,  ao 
inve's  do BYE,  para tirar  o servidor do ar mas nos  manter 
em sessa~o com o host. 

     Este   e' um exemplo  do uso de  um servidor KERMIT.   O 
usua'rio  esta' usando um micro sob CP/M,  ligado a um  DEC-20 
como host remoto. 

    A>kermit              (chamando o KERMIT do micro)
    KERMIT V3.7

    KERMIT-80>connect
                    (pedindo conexa~o, apo's prompt do micro)

     [CONNECTING TO REMOTE HOST.
          TYPE CTRL-]C TO RETURN TO MICRO.]

    CU20E                 (o DEC-20 o atende)

    @login eu codigo      (identifique-se, como sempre)


    ( o DEC-20 imprime va'rias mensagens...)

@kermit                (chamando o KERMIT, normalmente)
KERMIT-20>server       (mandando-o trabalhar como servidor)
KERMIT SERVER RUNNING ON DEC-20 HOST.
                    PLEASE TYPE YOUR ESCAPE SEQUENCE
                    TO RETURN TO YOUR LOCAL MACHINE.
                    SHUT DOWN THE SERVER BY TYPING THE
                    KERMIT COMMAND ON YOUR LOCAL MACHINE.

^]C                    (escapando, agora, para o micro)
     [CONNECTION CLOSED, BACK AT MICRO.]
KERMIT-80>get *.pas    (pegando todos meus programas PASCAL)
KERMIT-80>send arq*.*  (enviando todos os arquivos
                                   comec,ados por "ARQ")
KERMIT-80>exit      (saindo do KERMIT; voltando para o CP/M)
A>


(Aqui podemos fazer algum trabalho no micro,  como editar um 
arquivo.)


A>kermit         (rodando mais um pouco o KERMIT)
KERMIT-80>send oficio.txt (mando mais um arquivo)
KERMIT-80>bye    (So' isto. Derrubo o servidor)
A>               (de volta ao CP/M, automaticamente)

     Assim  e'  mais simples.  Note que  uma vez  iniciado  o 
servidor   KERMIT na ponta remota,  podemos rodar  o  KERMIT 
quantas  vezes quisermos,  sem ter que ficar,  mais,  indo e 
voltando  ao host remoto.  So' devemos ter  cuidado para  na~o 
nos  esquecermos  de encerrar o servidor atrave's do  comando 
BYE. 

     Seguem  os comandos ba'sicos disponi'veis para  se  falar 
com servidores. 

SEND especificac,a~o-de-arquivo
               Envia  um  arquivo ou grupo  de  arquivos  do 
               local para o remoto, da forma normal.

GET especificac,a~o-de-arquivo
               Pede  ao  remoto que envie um arquivo  ou  um 
               grupo de arquivos para o local.

               Este  comando e' equivalente ao SEND num remo
               to,  seguido  por   um   RECEIVE   no  local.  
               Repare  que  o KERMIT  local na~o faz  valida
               c,a~o  das especificac,o~es dos  arquivos.  Se  o  
               servidor  na~o  puder  obedecer   ao  comando,  
               mandara'   de  volta   uma mensagem   de  erro 
               apropriada.

.cp3
BYE
               Derruba  o servidor  e sai  do  KERMIT,   bem  
               como  vale um encerramento de sessa~o do  host 
               (LOGOUT).

.cp5
FINISH
               Derruba  o  servidor  sem  sair  do   KERMIT.   
               Um subsequente comando  CONNECT  nos  devolve  
               ao   seu servic,o no host remoto,  a ni'vel  de 
               comando CMS. 


.pa
.he                                    Quando as coisas va~o mal
3. Quando as coisas va~o mal

     Conectar dois computadores pode ser um servic,o  engano
samente fa'cil e muitas coisas  podem  sair  erradas.   Antes  
que  possamos  efetivamente transferir arquivos,  precisamos 
estabelecer  comunicac,a~o  de terminal.  Mas um sucesso  numa 
conexa~o de terminal na~o significa que uma  transfere^ncia  de  
arquivos   funcionara' e  mesmo quando  a transfere^ncia   pa
rece estar funcionando,  podem acontecer coisas que a arrui
nem. 


.cp3
3.1. Problemas com a linha de comunicac,a~o

     Se   voce^  tem uma versa~o do KERMIT em seu micro mas  o 
comando  CONNECT parece na~o funcionar,  assegure-se  de  que 
todas as conexo~es fi'sicas exigidas foram feitas,  sem folgas  
meca^nicas;  se  estiver usando  um modem  full-duplex,  veja  
se a la^mpada que indica a presenc,a da portadora esta' ligada; 
se seu micro tem mais de um conector,  veja se esta' usando o 
certo;  observe se o port esta' preparado corretamente para a 
velocidade  (ou baud-rate) empregados no host;  algumas ver
so~es do KERMIT tem, internamente, o comando SET BAUD, outros 
precisam que  se prepare o baud rate usando  as  facilidades  
do seu  sistema operacional,   antes que  o KERMIT  comece a 
rodar;  use  o comando SHOW para verificar qual o baud  rate 
corrente; veja se os outros para^metros da linha de comunica
c,a~o (como paridade,  bits por caracter, handshake e controle 
de fluxo) esta~o propriamente setados. 

     Consulte,  sempre,  os manuais de sistemas e de equipa
mentos.

     Se   todas  as conexo~es  e preparac,o~es  parecem   estar 
corretas  e ainda assim na~o conseguir estabelecer  comunica
c,a~o, o defeito pode estar no seu modem.  Os modems  internos 
(aqueles   que  sa~o   colocados num  dos  slots,  dentro  do 
chassi  do  micro)  na~o  sa~o recomendados  para  o  uso  com  
KERMIT. Muitos  dos programas  KERMIT para micro  sa~o escri
tos   para controlar o hardware de  comunicac,a~o   explicita
mente   e   os  modems  internos  podem interferir  com  tal 
controle.


     O    KERMIT  normalmente  espera  ter  controle   total  
da  porta  de comunicac,a~o.  Entretanto,  alguns equipamentos 
de  comunicac,a~o   controlam a linha entre os  dois  computa
dores, em  ambas as pontas. Exemplos de  onde isto  acontece  
sa~o os  modems  "inteligentes",  as  unidades  de selec,a~o ou 
contenc,a~o   de  portas,   multiplexadores,  redes  locais  e  
redes   que abranjem  grandes   a'reas.   Tais   equipamentos  
podem   interferir   com  o protocolo de  transfere^ncia   de 
arquivos  do KERMIT de diversas formas:  pode ser imposto um 
regime  de  paridade  sobre a linha;  isto significa  que  o  
oitavo bit de cada  caracter e' usado pelo  equipamento  para 
checar a transmissa~o; o uso de paridade...

    ... faz  com que  o checksum dos pacotes  se  apresentem 
        incorretos   ao  receptor e frustam qualquer  trans
        fere^ncia  de arquivos;  na maioria dos casos  nem  o 
        primeiro pacote passara';  

    ... impede  o  uso do oitavo  bit,  impresci'ndivel  para 
        dados bina'rios; 

se  a conexa~o como terminal funciona mas a transfere^ncia  de  
arquivos  na~o,   a  paridade geralmente e'  a  culpada;  para 
passar  por cima deste inconveniente,  descubra que paridade 
esta'  sendo  usada  e informe  ao  KERMIT   de   cada  ponta  
(atrave's do  comando SET)  de modo  que eles possam:

     a) compor e interpretar corretamente os checksums

     b) empregar uma codificac,a~o especial que permita passar 
        o  oitavo  bit atrave's do canal de comunicac,a~o de  7 
        bits (muitas redes de comutac,a~o de pacotes,  como  a 
        GTE TELENET,  exigem que se prepare a  paridade); os 
        equipamentos de  comunicac,a~o podem interpretar  cer
        tos  caracteres   no fluxo de dados  como  comandos;  
        por  exemplo:   de  repente voce^  ve^  o  seu   modem 
        "inteligente"  se  desconectando e comec,ando  a dis
        car uma  ligac,a~o para  a Tasma^nia.  O u'nico modo  de 
        se  contornar tais problemas e' colocar tais  equipa
        mentos  em   modo "transparente"  ou  "bina'rio".   A 
        maioria   dos equipamentos  de comunicac,a~o  tem  uma  
        forma de  se fazer  isto (veja no manual).  Em   al
        guns  casos  o  modo  transparente  tambe'm  cancela
        ra'  o processamento da paridade, permitindo o uso do 
        oitavo bit para dados. 


.cp3
3.2. A transfere^ncia ficou presa

     Exitem  va'rias  situac,o~es nas  quais transfere^ncias  de 
arquivos   podem ficar  presas  mas,   uma  vez  que  muitos  
hosts   sa~o   capazes   de gerar  interrupc,o~es  de   timeout  
quando   os  dados  na~o   chegam   suficientemente  ra'pidos,  
eles podem usualmente retransmitir ou  negar a recepc,a~o (NAK 
- negatively   acknowledge) de pacotes   perdidos.     Ainda  
assim,    se   uma transfere^ncia  parecer  presa, voce^  pode 
teclar   RETURN  na   maioria dos micros   para  simular  um 
timeout. 

     Uma  excessa~o  interessante  e' o  KERMIT que   fica  no  
host  IBM  (sob VM/CMS):   ele na~o consegue detetar  timeout  
em  sua "console virtual" (ou seja,  o terminal do usua'rio). 
Dai',   quando se esta' usando o KERMIT  de um  micro ligado a 
um  host   IBM,  e'  eventualmente necessario  se  "reavivar" 
manualmente o host. 

     As  sec,o~es  seguintes  discutem   varias  razo~es  pelas 
quais    uma transfere^ncia   em   atividade    fica   presa.   
Antes  de  examina'-las,  assegure-se de ter,  realmente,  um 
KERMIT na outra extremidade da linha e de  que voce^ emitiu o 
comando  apropriado  (SEND,  RECEIVE ou SERVER).  Se o  lado 
remoto  na~o for  um servidor,   lembre-se  de que  voce^  tem  
que   se  re-conectar  a  cada  transfere^ncia e  emitir   um 
novo  comando  SEND ou RECEIVE. 


.cp3
3.3. O micro se enganchou

     O   pro'prio   micro  eventualmente   se  engancha   por  
razo~es   acima  do  controle do KERMIT  como,  por  exemplo,  
flutuac,o~es de energia.  Se a  tela do  micro na~o foi atuali
zada  por um longo peri'odo,  o micro pode ter se enganchado. 
Tente os passos a seguir (na ordem dada). 

     - Cheque  a conexa~o.  Veja se algum conector na~o  ficou 
       frouxo.  Se  voce^ estiver usando um  modem,  veja  se 
       ainda  existe o sinal da portadora e reestabelec,a   a 
       sua conexa~o, se for o caso. 

     - Tecle  RETURN  para acordar  seu  micro.  Isto   deve 
       limpar   qualquer  deadlock  no  protocolo.  Diversos 
       RETURNs podem ser necessa'rios. 

     - Se  o   problema na~o  for de  deadlock,   reinicie  o  
       micro e,  enta~o,  reinicie o KERMIT,  reconecte-se ao 
       host, retorne ao seu servic,o ou recomece  a partir do 
       processo  de  identificac,a~o ao sistema  (LOGIN)  para 
       reiniciar   a transfere^ncia.   Talvez voce^  tenha que  
       parar  e reiniciar o KERMIT no host. 

.cp3
3.4. O host sumiu

     Se  o  seu  sistema local  estiver  funcionando mas   a  
transfere^ncia estiver  enganchada, talvez  o host remoto  ou 
o KERMIT  dele esteja com defeito. Volte a ni'vel  de comando 
no   KERMIT  local (nas  implementac,o~es  para  microcomputa
dores, voce^ pode estar apto a fazer isso teclando cerca de 5 
RETURNs  ou   um  ou mais  CONTROL-C's).   Emita  o  comando 
CONNECT   para que  voce^ possa ver o  que  aconteceu.  Se  o  
sistema  remoto  quebrou,  voce^ tera' que esperar ate'  que  o 
consertem  e  recomec,ar a transfere^ncia  do arquivo  em  que 
voce^ estava trabalhando no momento do pane. 

.cp3
3.5. O disco esta' cheio.

     Se seu disquete local ou se o  direto'rio do host lotou, 
o  KERMIT   da  ma'quina   onde  aconteceu  o   problema    o  
informara'  e  encerrara'  a transfere^ncia.   Pode-se   reini
ciar  a  transfere^ncia  repetindo  todo  o procedimento  com 
um novo  disquete ou apo's uma "limpeza" do direto'rio. Alguns 
programas  KERMIT   permitem que  se continue  a   seque^ncia 
onde  se havia  parado.  Por  exemplo,  no  DEC-20,  usando-
se  o comando  SEND  e incluindo o nome do arquivo no  campo 
"(INITIAL)": 

     KERMIT-20>send *.for (initial) arquivo4.for


.cp3
3.6. Interfere^ncia de mensagens

     Voce^   pode   descobrir   que  ocasional   e   imprevi
sivelmente   as transmisso~es  de arquivos  falham.  Uma  das 
explicac,o~es   poderia ser que mensagens de  terminais  esta~o  
se  misturando com  seus pacotes de  dados.  Isto  pode  in
cluir  mensagens de broadcasting do sistema (como "O sistema 
vai  sair do  ar em  30 minutos."),   mensagens  de   outros 
usua'rios  ("Ei,  Ricardo!   Que programa e' esse, KERMIT, que 
voce^ vive rodando?"), avisos que voce^ possa ter pedido ("Sao  
19:30.  Va' pra casa!" ou "Voce  recebeu uma  corresponde^ncia 
de...").  Muitos programas KERMIT tentam desabilitar automa
ticamente  mensagens  intrusas mas nem todos podem  garantir 
que   va~o  funcionar  quando as coisas va~o  mal.  Por   isso 
talvez  seja bom se cuidar manualmente para que essas mensa
gens na~o aparec,am.  A maioria dos sistemas operacionais  dos 
hosts  aceita  comandos  que inibem mensagens deles  para  o 
terminal.

.cp3
3.7. Erros no host

     Va'rias    condic,o~es  de  erro  podem  ocorrer  no  host  
e  afetar  a transmissa~o de  um arquivo.   Sempre  que ocor
rem  tais erros,  o  KERMIT remoto  normalmente tenta trans
mitir  uma mensagem informativa a respeito ao KERMIT  local, 
parando  a transmissa~o  e nos colocando em ni'vel  KERMIT  de 
comando no micro. 

.cp3
3.8. O arquivo e' lixo

     Existem   condic,o~es  sob as quais   o  KERMIT  acredita 
haver transmitido bem um arquivo quando, na realidade, na~o o 
fez.  Geralmente  e' devido  a` tarefa  enganosamente  simples  
de  especificar   as caracteri'sticas  de  um  arquivo,  como  
texto   versus  bina'rio,   sete  X  oito  bits,   blocado  X 
desblocado  ou  varia'vel e  por ai'  a  fora.  Cada   sistema 
tem   as suas pro'prias  peculiaridades  e  cada  KERMIT  tem  
comandos  especiais  que permitem especificar como um arqui
vo  deve  ser armazenado ou  transmitido.  Normalmente  tais 
dificuldades   so' aparecem quando  da transfere^ncia  de  ar
quivos  bina'rios. Arquivos de texto  na~o costumam apresentar 
problemas entre dois  programas  KERMIT   quaisquer,   mesmo  
rodando  em  ambientes distintos. 


.cp3
3.9. Veio lixo depois do fim do arquivo

     Quando se transfere arquivos de texto  de um micro para 
um host,  a`s vezes  aparecem  caracteres  estranhos  no fim,  
depois   dele   chegar ao sistema  alvo.

     Isto  e'  porque  muitos  micros  na~o  possuem  um  modo 
consistente  de  indicar fim de arquivo.  O CP/M  e'  um  bom 
exemplo.  A  menor unidade de armazenamento  em um  disquete  
de  CP/M  e'  um "bloco" de  128 bytes.   Arquivos   bina'rios  
sempre   consistem  em  um  nu'mero  de blocos completos  mas 
um  arquivo de texto pode terminar em qualquer parte de   um 
bloco.   Ja'  que o CP/M na~o grava um contador de  bytes  num 
arquivo,  usa a convenc,a~o de marcar o seu fim com o caracter 
CONTROL-Z.

     Se a sua  versa~o de  KERMIT na~o esta' interessada  nesta  
convenc,a~o,  vai  transmitir  todo o bloco  final,  que  pode 
conter   (e  provavelmente  contera')  lixo  depois   do  fim  
"real"  do  arquivo.

     Para  contornar  este  inconveniente,   a  maioria  dos 
KERMITs  para micro  tem comandos como  SET FILE  ASCII   ou 
SET  FILE   TEXT  para   instruir o  KERMIT  a  obedecer   a 
convenc,a~o  do CONTROL-Z.  Outros ja' trabalham em modo  texto 
por default,  outros ainda em  modo bina'rio  ou bloco.
.pa
.he                                             Comandos KERMIT
4. Comandos KERMIT

     A   descric,a~o  feita  aqui e'  de  um   programa  KERMIT 
"ideal",  que  tem a maioria das  facilidades  especificadas  
no  Manual   do Protocolo  KERMIT.  Programa  KERMIT   algum  
tera'   todos   os  comandos  aqui  descritos  nem  suportara' 
todas estas opc,o~es. A forma exata de alguns comandos  podera' 
diferir   de versa~o para  versa~o.  Alguns programas   KERMIT 
podem suportar opc,o~es dependentes  de  sistema na~o   descri
tas   aqui.  A  intenc,a~o  desta descric,a~o  e' dar uma base na  
qual  programas KERMIT especi'ficos podera~o ser descritos  em 
termos de suas pro'prias diferenc,as do "ideal".


.cp3
4.1. Operac,a~o remota e local

     Alguns  programas  KERMIT podem  rodar  de duas  manei
ras:   remota e local.  Um  KERMIT  remoto normalmente  roda  
em  um host,  ao  qual  nos ligamos atrave's de um micro. 

     Quando  um KERMIT roda remotamente,  toda transfere^ncia 
de  arquivo e' feita pela linha do  terminal de  controle  de  
servic,o  (a  mesma  que  voce^ usou  para se  identificar  ao 
sistema operacional do host e usar comandos interativos).  O 
sistema operacional pensa que voce^ tem um terminal comum, ao 
inve's de um microcomputador. 

     Quando   o  KERMIT  esta' operando em   modo  local,   a 
transfere^ncia de arquivos e' feita  atrave's de um  dispositi
vo  externo,  como  a porta  de comunicac,a~o  serial do micro 
ou como  uma linha de terminal associada do host.

     O  KERMIT local e' ligado de alguma forma (um  mecanismo 
de  discagem) a outro computador, rodando sua pro'pria versa~o 
do  KERMIT.  O KERMIT local dete'm o controle   da  tela;   o 
remoto  na~o tem  acesso direto  a ela.   Os KERMIT  de micro 
geralmente rodam em modo  local, enquanto os de host em modo 
remoto,  precisando comandos especiais para entrarem em modo  
local.  Alguns  comandos so' fazem sentido para KERMITs remo
tos,  outros so' para locais e outros ainda podem ser  usados 
em ambos.  As operac,o~es remota  e local sa~o, esquematicamen
te, o seguinte. 

.cp20

               linha de comunicac,a~o
            +-------------/ /------(pacotes)---+  outras
            |                                  |  linhas
MICRO LOCAL |                                  |  | | |
+-----------+-----------+                      |  | | |
|   porta serial        |                   +--+--+-+-+----+
|-----------------------|                   |  |           |
|                       |                   |  |           |
|   Pacotes: 724        |                   |  sua         |
|   Retries: 1          |                   |  linha       |
|   File: PROGRAMA.C    |                   |  de          |
|                       |                   |  servic,o     |
|                (tela) |                   |  de          |
+-+---------------------+                   |  terminal    |
  |(comandos)                               |              |
  |   +---------+                           +--------------+
  +---+ teclado | (Voce^)                       HOST REMOTO
      +---------+          
                                     

     O  programa KERMIT  no micro  e' um  KERMIT LOCAL.  Pode 
controlar a tela, o teclado e a porta separadamente, podendo 
assim atualizar a  tela com informac,o~es de status,  observar  
atividade no e transferir pacotes de dados atrave's da  porta 
serial, ao mesmo tempo. 

     O programa  KERMIT  no  host  e'  o  KERMIT  REMOTO.   O  
usua'rio   se  identifica   ao host atrave's de uma  porta  de 
terminal.  O host na~o sabe se o usua'rio esta' entrando via um 
micro.  As  func,o~es do teclado,  da tela  e da  porta  esta~o 
todas  combinadas   na linha para terminal  do host  onde  o 
usua'rio se liga.  Em vista disto,  o KERMIT remoto e' cortado 
da  sua  tela e do seu teclado durante uma transfere^ncia  de 
arquivo. 

     Um   servidor KERMIT e' sempre remoto e tem que  receber 
seus comandos de um KERMIT local.  As descric,o~es que  seguem 
indicara~o quando um comando tem que ser remoto ou local.


.cp3
4.2. Interface de comandos

     A  maioria das implementac,o~es (a versa~o UNIX e' a  maior 
excec,a~o)  tem uma  interface de comandos tipo palavras-chave  
ativa,  cujo  modelo  foi  o DECSYSTEM-20:  em  resposta  ao  
prompt  "KERMIT-XX>",  tecla-se  uma  palavra  chave   (como 
SEND,  RECEIVE ou  EXIT), possivelmente seguida por palavras 
chave adicionais  ou  para^metros,   cada um  deles   chamado  
"campo".   As  palavras   chave  podem ser  abreviadas  para  
qualquer  tamanho  desde que se mantenha a  distinc,a~o  entre 
aquelas  possi'veis para cada campo. Um  ponto de  interroga
c,a~o,   a  qualquer  momento pode  ser  usado  para  se obter 
informac,o~es acerca de  o que e'  esperado ou va'lido   naquele 
momento.   A facilidade  ESC-?  funciona  melhor  em  siste
mas   full-duplex   (ate'  o presente,  todos  menos  o  host  
IBM),   onde  o  programa  pode  "acordar"  imediatamente  e 
executar  a  func,a~o requerida.  Em sistemas orientados  para 
registros  ou  half-duplex,  a facilidade de  ESC  na~o  esta' 
disponi'vel e  o "?" requer um RETURN.

     Neste   exemplo  o usua'rio tecla "SET" e  um  ponto  de 
interrogac,a~o  para  descobrir quais sa~o  as opc,o~es  do  SET.  
Continua,  enta~o,   o  comando  no lugar  onde o  ponto   de 
interrogac,a~o  estava,  adicionando  um "D" e outro ponto  de 
interrogac,a~o  para  ver  quais das opc,o~es  comec,am  com  tal 
letra.  O usua'rio  escolhe duplex: tecla "U" (a u'nica  opc,a~o 
do  SET que comec,a com "DU"),  seguido por um  ESC (mostrado 
aqui por  um "$") para completar  o campo corrente e emite a 
palavra  guia "(TO)" para a pro'xima,  enta~o outro  ponto  de 
interrogac,a~o para ver as  possibilidades e assim por diante.  
O comando e' finalmente terminado por um RETURN.  Antes de se 
teclar  RETURN o comando pode ser editado  usando RUBOUT  ou 
outras teclas  apropriadas. Finalmente  o  mesmo  comando  e' 
entrado   novamente  com  um  mi'nimo de digitac,a~o,  com cada 
campo abreviado a seu u'nico comprimento mais   curto.  Neste 
exemplo,  as  partes tecladas pelo usua'rio estara~o em minu's
culas. 

KERMIT-20>set ?
 DEBUGGING        DELAY             DUPLEX            ESCAPE
 FILE             HANDSHAKE         IBM               LINE
 PARITY           RECEIVE           SEN
KERMIT-20>set d?
 DEBUGGING        DELAY             DUPLEX
KERMIT-20>set du$plex (to) ?
 FULL             HALF
KERMIT-20>set duplex (to) h$ALF
KERMIT-20>set du h


.cp3
4.3. Notac,a~o

     Nas descric,o~es de comando, a seguinte notac,a~o e' usada: 

.cp4
qualquer
          um  para^metro - o si'mbolo em minu'sculas e'  trocado 
          por  um argumento do  tipo especificado   (nu'mero, 
          nome  do arquivo etc.)

.cp3
[qualquer]
          um   campo   opcional;   se   omitido   um   valor  
          default apropriado o substituira'

.cp3
nu'mero
          um nu'mero inteiro, entrado segundo  notac,a~o pre'via 
          do sistema

.cp4
caracter
          um  u'nico  caracter,  entrado literalmente ou como 
          um nu'mero (talvez octal ou hexadecimal)  represen
          tando  o valor ASCII do caracter

.cp3
nu'mero de ponto flutuante
          um  nu'mero   "real",   contendo possivelmente   um  
          ponto decimal e uma parte fraciona'ria

.cp7
especarq
          uma especificac,a~o de um arquivo,   isto e':  o nome 
          de  um   arquivo,   possivelmente  incluindo   uma  
          rota  de busca,   nome  de  dispositivo ou   dire
          to'rio   ou  outra  informac,a~o   de   qualificac,a~o,  
          inclusive    caracteres coringa,   ou de   ma'scara 
          para definic,a~o  de grupos de arquivos

.cp5
^X
          um  caracter de controle pode ser escrito  usando-
          se a notac,a~o  "seta-para-cima"  ou  "circunflexo",  
          ja'  que muitos sistemas mostram seus caracteres de 
          controle desta forma.

     Os comandos sera~o mostrados em caixa-alta  (maiu'sculas) 
mas  podem ser entrados em qualquer combinac,a~o de maiu'sculas 
e minu'sculas. 


.cp3
4.4. Suma'rio dos comandos KERMIT

     Esta   e'  uma lista  resumida dos comandos  KERMIT   da 
forma como eles devem ser encontrados na maioria dos progra
mas KERMIT.  As pro'ximas sec,o~es descrevera~o tais comandos em 
detalhe. 

.cp2
Para trocar arquivos:
    SEND, RECEIVE, GET

.cp4
Para se conectar a um host remoto:
    CONNECT, SET LINE, SET PRIORITY, SET DUPLEX,
    SET HANDSHAKE,
    SET ESCAPE, SET FLOW-CONTROL

.cp2
Para agir como um servidor:
    SERVER

.cp2
Para falar com um servidor:
    BYE, FINISH, GET, SEND, REMOTE

.cp8
Preparando  transmisso~es  e  para^metros  de  arquivos   na~o-
standard:
    SET BLOCK-CHECK, SET DEBUG, SET DELAY, SET FILE,
    SET INCOMPLETE,
    SET PARITY, SET RETRY;
    SET SEND (ou RECEIVE) END-OF-LINE, START-OF-PACKET,
    PACKET-LENGTH,
    PAUSE, TIMEOUT, PADDING

.cp2
Para definir "macros" de comandos SET:
    DEFINE

.cp2
Para interromper a transmissa~o:
    CONTROL-X, CONTROL-Z, CONTROL-C

.cp2
Para conseguir informac,o~es:
    HELP, STATISTICS, SHOW

.cp2
Para executar arquivos de comandos:
    TAKE

.cp2
Para gravar um arquivo com o histo'rico de uma transmissa~o:
    LOG TRANSACTIONS

.cp3
Para  captura ou transmissa~o de arquivos sem-protocolo (na~o-
formais):
    LOG SECTION, TRANSMIT

.cp2
Para abandonar o programa:
    EXIT, QUIT

     Se  sua versa~o do KERMIT reconhece o comando TAKE e  se  
voce^  tem  um   arquivo chamado  KERMIT.INI  no   seu  disco 
default,  o KERMIT executara',   automaticamente, um  comando 
TAKE  sobre ele durante  sua  inicializac,a~o.   Este  arquivo  
pode conter  qualquer comando  KERMIT (por exemplo, comandos  
SET ou  DEFINE para  chamar macros  que configurem  o KERMIT 
para os va'rios sistemas ou meios de comunicac,a~o). 


.cp3
4.5. SEND

Sintaxe: SEND especarq1 [especarq2]

     O comando  SEND faz  com que  um  arquivo ou  um  grupo  
deles  seja enviados  para outro sistema.  Existem duas for
mas  do  comando,  dependendo  do fato  de   haver  ou   na~o  
caracteres  coringa   em  especarq.  O  uso   de  caracteres  
coringa  e'  o me'todo  mais comum de  se indicar  um grupo de 
arquivos numa u'nica especificac,a~o de arquivo.  Por  exemplo, 
se FULANO.TXT e'  um arquivo de texto, enta~o *.TXT  se refere 
ao grupo dos arquivos de texto.

     Se  especarq1  conte'm  caracteres  coringa,   todos  os  
arquivos   que coincidirem  sera~o  enviados,  na   ordem  do  
direto'rio,   por nome.  Se um arquivo na~o  puder  ser aberto  
para leitura,  sera'  pulado.

     O  arquivo inicial  para um grupo pode ser indicado  em 
especarq2.  Isto  possibilita uma transfere^ncia de um  grupo 
ser continuada do ponto em que foi abandonada, bem como para 
pular alguns arquivos que na~o se interessa transmitir. 

     Se   especarq1  na~o conte'm  caracter coringa  algum,  o  
u'nico arquivo especificado sera'  transmitido.  Opcionalmente  
especarq2  podera'  ser usado  para especificar o nome sob  o  
qual  o  arquivo chegara' no sistema alvo.  Especarq2  na~o  e' 
validado; se na~o especificado, o arquivo mantera' seu nome.

     Os   arquivos sera~o transmitidos com seus nomes e tipos 
(por exemplo,  ARQ.TXT, sem campos de direto'rio  ou disposi
tivo,  sem  nu'mero de  gerac,a~o ou  atributos).  Ao  se  usar 
paridade   na  linha de  comunicac,a~o (veja  SET  PARITY),  o  
KERMIT transmissor  exigira' que  o outro  KERMIT aceite   um 
tipo  especial de notac,a~o de prefixo para arquivos bina'rios. 
Isto e' uma facilidade avanc,ada e nem todos os KERMITs a tem; 
se  o  outro  KERMIT  na~o concordar   em   usa'-la,  arquivos  
bina'rios  na~o podera~o  ser transmitidos corretamente. 

     Outra  coisa  que o KERMIT  transmissor  perguntara'  ao 
receptor  e'  se ele  e'  capaz de  manusear uma   codificac,a~o  
especial de  prefixos para caracteres repetidos. Caso receba 
uma resposta afirmativa,  arquivos  com longas   cadeias  de   
caracteres  repetidos   sera~o  transmitidos  mais eficiente
mente. Textos com tabelas ou altamente identados e  arquivos 
bina'rios sa~o os maiores beneficiados com esta te'cnica. 

                  Operac,a~o remota de SEND

     Se voce^ esta' rodando o KERMIT remotamente,  deve "esca
par"  de   volta  para  o seu  KERMIT local  dentro   de  um  
tempo razoa'vel e  dar o comando RECEIVE. Na~o leve mais  de 1 
ou  2  minutos para completar o  chaveamento sena~o  o KERMIT 
remoto podera' "desistir"  por time-out (neste caso voce^ tera' 
que  se  reconectar ao remoto e emitir novamente  o  comando 
SEND). 

                   Operac,a~o local de SEND

     Se   voce^   esta' operando  localmente  um   KERMIT,  ja'  
deve  ter inicializado um KERMIT remoto e emitido um comando 
RECEIVE ou SERVER. 

     Uma vez dado o  comando SEND,  o nome  de cada  arquivo 
aparecera'   na sua  tela  conforme comec,ar  a  transfere^ncia  
e  informac,o~es   sera~o dadas para informar  o  tra'fego   dos 
pacotes.   Quando  a   operac,a~o  especificada  terminar,   o 
programa   fara' soar  um BIP e  o status  da  operac,a~o  sera' 
indicada por uma mensagem como OK,  COMPLETE, INTERRUPTED ou 
FAILED. 

     Se voce^  perceber muitas  indicac,o~es de  retransmisso~es 
de   pacotes,  provavelmente  voce^ esta' sofrendo de  um  mal 
chamado  "conexa~o  ruidosa".  Uma forma para se  diminuir  o 
nu'mero  de  retransmisso~es  e'  usar  o   comando  SET   SEND  
PACKET-LENGTH  para   diminuir o  comprimento dos   pacotes; 
tal medida diminuira' a probabilidade de  um dado pacote  ser 
adulterado  por  rui'do  e  reduzira' o  tempo  gasto  com  as 
retransmisso~es dos pacotes adulterados.

     Se  voce^  notar  que  esta'  sendo  transmitido  um  ar
quivo  que  na realidade na~o era para o ser,   podera' cance
lar a operac,a~o imediatamente teclando CONTROL-X  ou CONTROL-
Z.   Se voce^  estiver trabalhando  com  um grupo  de  arqui
vos,  o  CONTROL-X causa  o "pulo" do arquivo  correntemente 
sendo transmitido e  o KERMIT  procurara' o  pro'ximo arquivo;  
CONTROL-Z  cancelara' a transmissa~o de todo o grupo de arqui
vos e devolvera' voce^ a ni'vel de comando do KERMIT-20.


.cp5
4.6. RECEIVE

Sintaxe: RECEIVE [especarq]

     O  comando RECEIVE informa ao KERMIT  que deve passar a 
esperar pela chegada de um arquivo ou por um grupo de arqui
vos  enviado por um comando SEND  dado  ao  outro   sistema.  
Se  somente  um  arquivo  estiver sendo recebido,  voce^ pode 
incluir  a  especarq  opcional para informar o nome   a  ser  
dado  para   gravar o  arquivo que  chegar  (sena~o   o  nome 
transmitido sera' mantido).  Se o nome que vier no header na~o 
for  um nome va'lido para o sistema local,  o KERMIT  tentara' 
transforma'-lo  num nome bom.  Se o nome sob o qual o arquivo 
sera' gravado ja' existir, o KERMIT tanto  tentara' sobrepor  o 
arquivo  existente  com o  novo quanto tentara'  inventar  um 
novo nome,  dependendo da preparac,a~o para manuseio de arqui
vos. 

     Se voce^ ligou paridade, a prefixac,a~o do oitavo bit sera' 
exigida.  Se o  outro lado  na~o puder fazer  isto,  arquivos 
bina'rios   na~o  podera~o  ser  corretamente  transmitidos.  O 
KERMIT  transmissor podera',  tambe'm,  pedir autorizac,a~o para 
comprimir caracteres repetidos. 

     Se um arquivo na~o chegar integralmente, sera' descartado 
pelo  KERMIT e na~o aparecera' no seu direto'rio.  Voce^  podera' 
mudar  este comportamento atrave's do comando SET  INCOMPLETE 
KEEP. 


                 Operac,a~o remota de RECEIVE

     Se  voce^  estiver  rodando  KERMIT  remotamente,   deve 
escapar de  volta para o local e emitir o comando SEND. Isto 
dentro  de 2 minutos no ma'ximo ou  o  KERMIT  remoto  desis
tira'  por  time-out.   Se  isto   acontecer,  conecte-se  de 
volta ao remoto e re-emita o comando RECEIVE. 


                 Operac,a~o local de RECEIVE

     Se voce^ esta' rodando  o KERMIT localmente, ja'  deve ter 
emitido   o  comando  SEND no remoto  e escapado  de   volta 
para  o  local.  Conforme os arquivos forem  chegando,  seus 
nomes  aparecera~o na tela,  juntamente  com informac,o~es sem
pre atualizadas do tra'fego dos pacotes. 

     Se  comec,ar  a chegar  um  arquivo que  voce^  na~o quer,  
cancele sua transmissa~o teclando  CONTROL-X;  isto  manda um  
pedido  de  cancelamento para  o KERMIT remoto.  Se o KERMIT 
remoto  entender seu pedido (nem todas as implementac,o~es  do 
KERMIT suportam  isto), ele obedecera'; se na~o  ele continua
ra'   a  transmitir.   Se  um  grupo  de   arquivos   estiver  
sendo transmitido,  voce^ pode cancelar a transmissa~o de todo 
o grupo,  teclando CONTROL-Z. 


.cp5
4.7. GET

Sintaxe: GET especarq-remoto          (SOMENTE LOCAL)

     O  comando  GET pede a um servidor KERMIT  remoto  para 
mandar  o  arquivo ou o  grupo  de   arquivos  especificados  
pela  especarq-remoto.  Note  a distinc,a~o  entre os comandos 
RECEIVE   e GET:  o RECEIVE  po~e o KERMIT num estado passivo 
de  espera,   enquanto o GET manda  um comando SEND para   o 
servidor. 

     O   comando GET so' pode  ser usado quando o   KERMIT  e' 
local, com um servidor na outra ponta  da linha. Isto signi
fica   que  voce^  ja' tem  que ter se  conectado a  um  outro  
sistema, se identificado, chamado o KERMIT de la',  emitido o  
comando SERVER  e escapado  de volta  para o  KERMIT local. 

     A   especarq remota e' qualquer conjunto  de  caracteres 
que possa ser vista como uma especificac,a~o  va'lida de arqui
vo   para  o sistema  remoto.  Na~o  e'  validada  localmente. 
Conforme os arquivos chegam, seus nomes va~o  sendo mostrados 
na  tela,  junto  com conti'nuas indicac,o~es do  tra'fego   dos 
pacotes.   Como no comando RECEIVE, voce^ pode teclar ^X para 
pedir  que  o arquivo que estiver chegando  seja  cancelado, 
^Z para pedir que todo o conjunto o seja. 

     Se  o KERMIT remoto  na~o for capaz de  executar func,o~es 
de servidor, voce^ provavelmente recebera'  de volta uma  men
sagem  dele  como  "ILLEGAL PACKET  TYPE"  (tipo  de  pacote 
inva'lido). Neste caso voce^  tem que se conectar  com o outro 
KERMIT,  emitir  o  comando SEND,  escapar de volta e dar  o 
comando RECEIVE. 


.cp5
4.8. SERVER

Sintaxe:  SERVER      (SOMENTE REMOTO)

     O  comando SERVER faz com  que o KERMIT pare  de  rece
ber comandos do teclado e passe  a receber todas  as futuras 
instruc,o~es   sob a forma  de pacotes  KERMIT de outro siste
ma.  Um servidor KERMIT tem que ser remoto.  Isto implica em 
dizer  que voce^ tem  que estar dentro de  um  sistema,   por 
meio   de  um  outro computador (um   micro,  por  exemplo).  
Ale'm  disto,  seu  KERMIT local deve ter  comandos  para  se  
comunicar com servidores  (isto inclui GET, FINISH e BYE).

     Depois  de emitir este  comando,  escape de volta  para 
o seu sistema local e emita SEND,  GET, BYE, FINISH ou outro 
comando  de  servidor.  Se  o seu  KERMIT local  na~o tem   o 
comando  BYE,  enta~o  ele na~o  tem completa habilidade  para 
se  comunicar  com um  servidor e voce^ na~o deve  colocar   o 
KERMIT  remoto  em modo  servidor  mas, se  tem,  use-o para  
derrubar o servidor KERMIT e encerrar a sessa~o quando termi
nar o servic,o. 

     Quaisquer  para^metros  na~o  standard  devem ser   sele
cionados   com   o comando  SET antes de deixar o KERMIT  em 
modo servidor, em particular os de BLOCK-CHECK e FILE. 


.cp5
4.9. BYE

Sintaxe: BYE     (SOMENTE LOCAL)

     Quando   rodando   como KERMIT  local falando   com  um  
servidor  KERMIT remoto,  use o comando BYE para derrubar  o 
servidor e encerrar a  sessa~o.  Seu uso tambe'm fechara' qual
quer arquivo log de depurac,a~o e encerrara' o KERMIT local. 


.cp5
4.10. FINISH

Sintaxe: FINISH               (SOMENTE LOCAL)

     Rodando   como um KERMIT local falando com um  servidor 
KERMIT  remoto,  use o FINISH para encerrar o KERMIT  remoto 
sem fechar a sessa~o no  host,  de  forma  a poder  se  reco
nectar a  ele  conforme precisar.   Inclui um fechamento  de 
algum arquivo log local. 


.cp5
4.11. REMOTE

Sintaxe: REMOTE comando       (SOMENTE LOCAL)

     Rodando  em modo local,  falando com um servidor KERMIT 
remoto, manda o comando especificado  para o servidor.  Se o 
servidor   na~o  entender  o comando  (todos esses   comandos 
sa~o  facilidades opcionais  do protocolo KERMIT), respondera'  
com  uma  mensagem  como  "UNKNOWN  KERMIT  SERVER COMMAND".  
Se entender,  mandara' os  resultados de  volta e  eles sera~o 
mostrados na tela. Os comandos remotos sa~o:

.cp7
CWD [direto'rio]
               Troca o direto'rio em uso.  Se na~o for dado um 
               nome,   o servidor  usara' o nome default.  De 
               outra forma voce^ sera' inquirido por um co'digo 
               de  acesso  e  o  servidor tentara'  mudar   a 
               especificac,a~o   do direto'rio.   Se  o  acesso  
               lhe  for  negado,   o  servidor  mandara'  uma 
               mensagem a respeito.

.cp3
DELETE especarq
               Apaga  o arquivo ou grupo de arquivos especi
               ficado.   O nome de cada um aparecera' na  sua 
               tela.

.cp5
DIRECTORY [especarq]
               Os    nomes   de   arquivo  que   coincidirem   
               com   a  especificac,a~o  dada  aparecera~o   na 
               tela.   Na falta  de uma  especificac,a~o,  to
               dos  os  nomes  de  arquivo do presente dire
               to'rio sera~o listados. 

.cp4
DISK [direto'rio]
               Prove^  informac,a~o acerca de uso de disco   no  
               presente direto'rio  como a quota,   o armaze
               namento corrente, o total de espac,o livre. 

.cp2
HELP
               Fornece uma lista das func,o~es disponi'veis.

.cp4
HOST [comando]
               Passa o dado comando para o sistema  do  host  
               sob   o qual   o  servidor  esta'  rodando   e  
               manda   a   tela resultante para  a  tela  do 
               local.

.cp5
KERMIT [comando]
               Passa o comando dado, que e' expresso na  sin
               taxe  de comandos pro'pria do servidor KERMIT, 
               para o servidor, para execuc,a~o. Isto e'  muito 
               u'til  para  alterac,a~o  de opc,o~es  do  comando 
               SET, LOG e outras. 

.cp4
RUN nome-do-programa [argumentos]
               Faz  com que o KERMIT remoto rode o  programa 
               indicado,   com   os   argumentos   passados. 
               Manda  o  resultado de volta para a sua tela.

.cp5
PROGRAM [comando]
               Manda  o comando ao programa previamente dis
               parado por um comando RUN. Mostra os resulta
               dos  na sua tela.   Se na~o  for fornecido  um 
               comando, entrega um caracter de RETURN para o 
               programa.

.cp3
TYPE especarq
               Lista  o conteu'do do arquivo especificado  na 
               sua tela.


.cp5
4.12. LOCAL

Sintaxe: LOCAL comando

     Executa   o comando especificado no sistema  local  (no 
sistema onde o KERMIT que esta' recebendo este comando  esti
ver rodando). Tais  comandos proveem  certa facilidade local 
de manuseio de arquivos sem ter que sair do KERMIT,  o que e' 
particularmente u'til em um microcomputador.

CWD [direto'rio] (muda o direto'rio em uso)

DELETE especarq (apaga o arquivo ou grupo de arquivos
                                             especificado)

DIRECTORY [especarq] (prove^ uma listagem de direto'rio)

     Alguns  programas  KERMIT  podem prover comandos   para 
estas e  outras func,o~es  na sintaxe  de seus pro'prios   sis
temas,  quando   isto na~o causar confuso~es.  Por exemplo,  o 
KERMIT  de  CP/M pode usar ERA em vez  de  DELETE,  sem  ser 
precedido pela palavra "LOCAL". 


.cp5
4.13. CONNECT

Sintaxe: CONNECT [designac,a~o-de-terminal]

     Estabelece   uma conexa~o de terminal com  o sistema  na 
outra ponta da linha de comunicac,a~o. Num  micro, normalmente 
e'  uma porta serial.  Num computador  de grande  porte, voce^  
tera'  que   especificar um  nu'mero de linha de  terminal  ou 
outro identificador,  ou no pro'prio comando  CONNECT ou  num 
comando  SET.  Volte ao KERMIT local atrave's da seque^ncia de 
escape teclando o  <ESC> seguido  por um  comando de  carac
ter u'nico.   Diversos comandos de caracter u'nico sa~o  possi'
veis:

C   encerra a conexa~o e volta ao KERMIT local
S   mostra o status da conexa~o
B   manda um sinal de BREAK
0   (zero) manda um caracter nulo.
P   cai no sistema local sem encerrar a conexa~o
Q   encerra a transcric,a~o da sessa~o para o log
R   reinicia a transcric,a~o da sessa~o para o log
?   lista todos os argumentos de caracter u'nico possi'veis
^]  (ou qualquer caracter de escape combinado)
    Teclar  o caracter  de escape 2  vezes manda uma   co'pia 
    dele ao host conectado.

     Podemos  usar  o  comando SET ESCAPE  para  definir  um 
caracter de escape diferente e acertar a paridade,  DUPLEX e 
HANDSHAKE, para estabelecer  ou mudar estes para^metros.


.cp5
4.14. HELP

Sintaxe: HELP

     Teclar   "HELP"  sozinho   da' um  resumo do   KERMIT  e  
seus  comandos e possivelmente   instruc,o~es    para    obter   
detalhamento em to'picos particulares.   A maioria das imple
mentac,o~es  do KERMIT tambe'm permite  o uso do "?" dentro  de 
um comando para  produzir uma pequena mensagem  de ajuda.


.cp5
4.15. TAKE

Sintaxe: TAKE especarq

     Executa comandos KERMIT presentes no arquivo  especifi
cado.  O arquivo pode conter qualquer comando KERMIT va'lido, 
inclusive outros TAKE's.


.cp5
4.16. EXIT, QUIT

EXIT  sai do KERMIT

QUIT  sino^nimo de EXIT


.cp5
4.17. SET

Sintaxe: SET [opc,a~o] [valor]

     Estabelece  ou   modifica  va'rios  para^metros  para   a 
transfere^ncia  de arquivos ou para uma conexa~o.

     Quando   uma   operac,a~o de  transfere^ncia  de   arquivo 
comec,a,   os  dois KERMITs automaticamente trocam  mensagens 
especiais de inicializac,a~o,  nas quais  cada programa  prove^ 
certas  informac,o~es  sobre si ao outro.   Essas  informac,o~es 
incluem o tamanho ma'ximo de  um pacote que ele recebera',   o 
tempo  de timeout que quer que o outro use,  o nu'mero e tipo 
de caracteres de enchimento que precisa,   o caracter de fim  
de  arquivo que  necessita para  terminar  cada pacote   (se 
precisar),   o  tipo de  BLOCK-CHECK,  os prefixos desejados 
para  os caracteres de controle,  caracteres com o   bit  de  
mais alta  ordem ligados  e caracteres  de repetic,a~o.   Cada 
programa  KERMIT  tem seu  pro'prio conjunto  desses  valores  
default  e  normalmente voce^  na~o  precisa se  importar  com  
isso.   Nada  impede  que voce^  use o comando SHOW para   se 
informar   acerca  desses valores;   o comando   SET  existe  
para  permitir  a  voce^ altera'-los  de  forma  a  adapta'-los 
a condic,o~es incomuns.

    Os seguintes para^metros podem ser modificados:

BAUD-RATE          prepara a velocidade da porta de  comuni
                   cac,a~o

BLOCK-CHECK        me'todo  de detec,a~o de erro de transmissa~o 
                   de um pacote

DEBUGGING          arquivo de log ou de modo

DELAY              quanto  esperar  antes  de  iniciar   uma 
                   transmissa~o

DUPLEX             para conexa~o de terminal, FULL (eco remo
                   to)  ou  HALF (eco local)

ESCAPE             caracter para conexa~o de terminal

FILE               para para^metros de arquivo,  como conver
                   sa~o de nomes e tamanho do byte

FLOW-CONTROL       selec,a~o  do me'todo de controle de  fluxo, 
                   como XON/XOFF

HANDSHAKE          para  permitir  inversa~o de  linhas  HALF 
                   DUPLEX

IBM                prepara o ambiente local para conexa~o com 
                   um host IBM (eco local, paridade marca)

INCOMPLETE         o que fazer com um arquivo incompleto

LINE               linha  de terminal para uso em conexa~o de 
                   terminal  ou transfere^ncia de arquivos

PARITY             bit de paridade a ser empregado

PORT               para chaveamento de portas de comunicac,a~o

RECEIVE            va'rios  para^metros para uma  recepc,a~o  de 
                   arquivos

RETRY              quantas   tentativas   de   retransmissa~o  
                   de  um pacote devera~o ser feitas antes de 
                   desistir

SEND               va'rios para^metros para uma transmissa~o de 
                   arquivos

     O   comando DEFINE  pode ser  usado para   compor  "ma
cros"   atrave's  da combinac,a~o de comandos SET.  Passamos  a 
descrever, em detalhes, o comando SET:


.cp3
SET BAUD-RATE

     Prepara  ou   muda o  BAUD-RATE  (traduc,a~o  aproximada:  
velocidade   de transmissa~o   em  bits  por   segundo)    no  
dispositivo  selecionado  de comunicac,a~o.  A forma de  espe
cificar  o  baud rate  varia de sistema   para  sistema;  na 
maioria dos casos o pro'prio nu'mero (1200,  9600) e' digitado. 
Os  sistemas  sem este comando  geralmente  esperam  que   a 
velocidade  da  linha ja'  esteja preparada,  antes do KERMIT 
entrar.


.cp3
SET BLOCK-CHECK

     O  KERMIT  normalmente  usa  um  cheque  de  bloco   de  
um   caracter (CHECKSUM) em cada  pacote.  O  transmissor do 
pacote   calcula este  byte baseado  nos outros   caracteres 
do   pacote e  o receptor  o recalcula da mesma  forma.   Se  
esses  valores  empatarem, o  pacote  e'  aceito  e  a trans
missa~o  continua;   em  caso  contra'rio,   o  pacote  e'  re
jeitado e retransmitido.

     O checksum  na~o  e',  no  entanto,  um  me'todo de  dete
c,a~o  de  erros infali'vel.  O cheque de bloco de  um caracter 
do KERMIT e',  normalmente, uma quantidade de  6  bits (os  8  
bits  de mais  baixa  ordem  da  soma aritme'tica,   dobrados 
sobre si pro'prio).  Com somente 6 bits de precisa~o, as chan
ces sa~o de uma em cada  2 elevado a` sexta potencia (1/64) de  
um erro  ocorrer e na~o ser detectado  pelo  checksum,  assu
mindo-se que todos os erros sa~o distribui'dos igualmente.

     Podemos  diminuir  a  probabilidade de um  erro  passar 
inco'lume,  a  custa  de  uma diminuic,a~o   da  eficie^ncia  da  
transmissa~o,  usando  o comando SET BLOCK-CHECK  para  sele
cionar  me'todos   de  checagem  de  blocos   mais rigorosos.  
Note que todos os tre^s me'todos detetara~o qualquer erro de um 
bit  ou qualquer erro de um nu'mero impar de bits.  As opc,o~es 
sa~o:

1-CHARACTER-CHECKSUM  Um checksum normal de um caracter de 6 
                      bits

2-CHARACTER-CHECKSUM  Um  checksum  de  2   caracteres,   12  
                      bits.   Reduz  a probabilidade  de  um  
                      erro  passar  para 1/4096 mas  aumenta 
                      de um caracter o pacote

3-CHARACTER-CRC       Um  cheque de redunda^ncia ci'clica de 3  
                      caracteres,  16  bits,  formato CCITT. 
                      Ale'm de erros em qualquer nu'mero i'mpar 
                      de bits,  este me'todo detecta erros de 
                      bit  duplo,  todas rajadas de erro com 
                      16 ou menos e mais de 99.99% das raja
                      das maiores que isso.

     Checksums de um u'nico caracter tem provado ser  adequa
dos  na pra'tica,  muito mais efetivos do que  possa  parecer 
numa primeira ana'lise,  ja' que a  distribuic,a~o de probabili
dade na~o e' a mesma para todos os erros e um checksum simples 
serve  para  pegar  os tipos de erros ti'picos em  linhas  de 
telecomunicac,a~o.   Outros  me'todos  so' devem   ser  exigidos  
quando existe muito rui'do na conexa~o.

     Observe  que   os cheques  de bloco  de  2 e  3  carac
teres   na~o   esta~o  disponi'veis  em todas  as   verso~es  de 
KERMIT;   se  o outro  KERMIT na~o for capaz de  executar  os 
cheques de bloco de maior precisa~o,  a transfere^ncia automa
ticamente usara' o me'todo padra~o de caracter u'nico.


.cp5
SET DEBUG

Sintaxe: SET DEBUG [opc,o~es]

     Registra o tra'fego dos pacotes, no  seu terminal ou num 
arquivo.  As opc,o~es sa~o:

.cp2
STATES   Mostra  as transic,o~es de estado do KERMIT e nu'meros 
         de pacotes.

.cp2
PACKETS  Mostra cada pacote que chega e que sai  (comprimen
         tos).

.cp4
LOG-FILE Grava no arquivo de log especificado as informac,o~es  
         selecionadas  (estados  ou  pacotes).  Se o arquivo  
         de  log na~o foi especificado,  usa o  terminal,  se 
         local.

.cp3
OFF      Na~o  mostra  informac,o~es  de depurac,a~o  (este  e'  o 
         default).   Se  a depurac,a~o estava ativa, encerra-a  
         e fecha qualquer arquivo  de log.


.cp5
SET DELAY

Sintaxe: SET DELAY nu'mero

     Especifica  quantos  segundos  deve  esperar antes   de  
transmitir   o  primeiro  pacote depois de um comando  SEND. 
Use quando remoto e mandando arquivos para seu KERMIT local. 
Isto lhe da' tempo para escapar de volta e  emitir o  comando 
RECEIVE.  O atraso normal e'  de 5 segundos. Em modo local ou 
em  modo servidor,  o KERMIT na~o espera antes de  comec,ar  a 
mandar o primeiro pacote.


.cp5
SET DUPLEX

Sintaxe: SET DUPLEX palavra-chave

     Para  uso quando  conectado a  um sistema   remoto.  As  
palavras-chave  possi'veis  sa~o FULL e HALF.  FULL  significa  
que  o  sistema  remoto ecoa os caracteres que  voce^  tecla; 
HALF,  o local.   O default e' FULL e e'  usado pela   maioria 
dos   hosts.  HALF e'  necessa'rio ao se  conectar a  sistemas 
IBM. "Half duplex" tambe'm e' chamado "eco local".


.cp5
SET ESCAPE

Sintaxe: SET ESCAPE caracter

     Especifica  ou  muda o caracter que se quer  usar  para 
"escapar"  de  uma  conexa~o remota de volta  para  o  KERMIT 
local.  Normalmente e' um  caracter que na~o se espera usar no 
sistema remoto,  talvez um caracter de controle como ^\, ^], 
^^ ou  ^_.  A maioria das verso~es  de KERMIT usa uma  dessas 
como   default.  Depois que se tecla  o caracter de  escape, 
deve-se  teclar  um argumento  de  uma  letra,   como   "C",  
para encerrar  a  conexa~o.  Os argumentos  sa~o  os  relacio
nados  acima,  sob  a  descric,a~o  do comando CONNECT.


.cp5
SET FILE

Sintaxe: SET FILE palavras-chave/para^metros

     Estabelece   os para^metros relacionados  com  arquivos. 
Dependendo das caracteri'sticas do sistema,  pode ser  neces
sa'rio  dizer  ao KERMIT  como acessar  arquivos do  disco ou 
como   armazenar arquivos  que cheguem.  Os  para^metros  que 
realmente se  especificam atrave's deste comando  variara~o de    
sistema   para   sistema   e    sempre   se   deve   consul
tar    a documentac,a~o  correspondente  ao  seu   KERMIT   em  
particular.   Alguns exemplos  seriam tamanho  do byte  (ar
quitetura PDP-10),   comprimento do registro ou  tamanho  do  
bloco  (sistemas  orientados  para  registros),  me'todos  de 
detec,a~o de fim de arquivo (microcomputadores).

     Este   pode  ser  um comando  importanti'ssimo  se  voce^ 
tentar  transferir arquivos bina'rios mas   e'  desnecessa'rio, 
normalmente,  para arquivos  de texto.


.cp5
SET FLOW-CONTROL

Sintaxe: SET FLOW-CONTROL opc,a~o

     Para a  comunicac,a~o  com  sistemas Full  Duplex.   Para  
o  protocolo KERMIT,   na~o e' necessa'rio controle de fluxo  a 
ni'vel  de sistema mas seu uso pode ser de alguma valia se  o 
mesmo  me'todo for disponi'vel nos  dois sistemas.  O tipo  de 
controle  de  fluxo mais comum em sistemas full duplex  e'  o 
XON/XOFF.


.cp5
SET HANDSHAKE

Sintaxe: SET HANDSHAKE opc,a~o

     Para comunicac,a~o com sistemas half duplex,   deixa  que 
se especifique o caracter de inversa~o  de linha enviado pelo  
host  em  half  duplex  para indicar  que  ele  terminou  de 
transmitir e garantir que esta' pronto para receber. Quando o 
handshake  e' ativado,  o KERMIT so' enviara' um  pacote quando  
o host em half duplex houver mandado o caracter especificado 
(ou acontecer um timeout). As opc,o~es sa~o:

NONE     Sem handshake;
          (desfaz o efeito de qualquer SET precedente)

XOFF     CONTROL-S
XON      CONTROL-Q
BELL     CONTROL-G
CR       CONTROL-M (retorno de carro)
LF       CONTROL-J (line feed)
ESC      CONTROL-[ (escape)


.cp5
SET INCOMPLETE

Sintaxe: SET INCOMPLETE opc,a~o

     Especifica  o que  fazer quando  uma transfere^ncia   de 
arquivo  falhar antes de terminar.   As opc,o~es sa~o   DISCARD 
(default)  e  KEEP.  Quando  se escolhe  KEEP  e  a   trans
fere^ncia na~o  se  completar, pode-se  guardar a parte que se 
chegou a receber.


.cp5
SET LINE

Sintaxe: SET LINE [designac,a~o de terminal]

     Especifica   a  linha  de terminal a  ser  usada   para 
transfere^ncia  ou  conexa~o.  Este comando e' encontrado   nos 
KERMIT's  de sistemas de  grande  porte,   que   normalmente  
rodam  em modo  remoto,  usando  seus pro'prios controladores 
de   terminal  para  a transfere^ncia  de  arquivos.   Ao  se 
especificar   uma linha separada  coloca-se o  programa   em 
modo  local.  Se linha alguma  for especificada,   volta  ao  
controlador  de   terminais   do sistema (de volta  ao  modo 
remoto).


.cp5
SET PORT

Sintaxe: SET PORT designador-de-terminal

     Especifica a porta de comunicac,a~o para transfere^ncia de 
arquivos  ou conexa~o.  Este comando e' encontrado em KERMIT's 
de microcomputadores que rodam em modo  local.  Na~o  muda  o 
status   remoto/local mas  simplesmente seleciona uma  porta 
diferente para operac,a~o local.


.cp5
SET PARITY

Sintaxe: SET PARITY palavra-chave

     Paridade  e' uma te'cnica empregada pelos equipamentos de  
comunicac,a~o para detetar erros numa base caracter-por-carac
ter; o oitavo bit de cada caracter age  como um  cheque para  
os  outros  sete bits.   O KERMIT  usa cheque de bloco  para 
detetar erros numa base pacote-por-pacote e na~o usa paridade 
para  caracteres.  Entretanto,  em  alguns sistemas  onde  o  
KERMIT tambe'm  roda  ou  em equipamentos  atrave's  dos quais  
esses sistemas se comunicam, a paridade de caracter pode ser 
usada.  Se o KERMIT na~o souber disso,  os dados que chegarem 
tera~o  seus   bits modificados e o cheque de bloco  parecera' 
errado e os pacotes sera~o rejeitados.

     Se a paridade estiver sendo utilizada numa linha, ambos 
KERMIT's tem que  ser informados,  de forma que  a  paridade 
desejada  seja acrescentada aos caracteres que saiam e reti
radas dos que cheguem.  Este comando  (SET PARITY)  deve ser 
usado  na  comunicac,a~o   com hosts que  exigem  paridade  de 
caracteres   (sistemas   IBM  sa~o   exemplos  ti'picos)    ou  
atrave's   de equipamentos  ou redes  (como a  GTE TELENET, a 
RCD/TB,  ou   o CIRANDA~O)  que incluem  paridade aos  carac
teres que passam por eles.   A paridade especificada e' usada  
tanto para conexa~o de terminal (CONNECT) quanto para  trans
fere^ncia de arquivos (SEND, RECEIVE, GET).

     As alternativas para a escolha da paridade sa~o:

NONE    oito bits de dados, sem paridade (default)
MARK    sete bits de dados, com bit de paridade ligado
SPACE   sete bits de dados, com bit de paridade desligado
EVEN    sete  bits de dados,  com bit de paridade ligado  de 
        forma a deixar a soma de todos eles um nu'mero par
ODD     sete  bits de dados,  com bit de paridade ligado  de 
        forma a deixar a soma de todos eles um nu'mero i'mpar

     NONE  significa  que nenhum processamento  de  paridade 
sera'  feito  e o oitavo bit de cada caracter pode  ser usado 
para dados na  transfere^ncia de arquivos bina'rios.

     Se informarmos ODD,  EVEN, MARK ou SPACE, verso~es avan
c,adas do KERMIT exigira~o que arquivos bina'rios  sejam trans
feridos usando prefixac,a~o  do oitavo  bit.  Se  o KERMIT  do  
outro  lado sabe  como se faz  isto (e' uma facilidade opcio
nal  do  protocolo KERMIT e nem todas as  implementac,o~es  de 
KERMIT  a tem),  arquivos bina'rios  podera~o ser transferidos 
com sucesso. Se for especificado NONE, a prefixac,a~o na~o sera' 
exigida.


.cp5
SET SEND

Sintaxe: SET SEND para^metro

CARACTER DE FIM DE LINHA

     O  caracter ASCII a ser usado  como terminador de linha 
nos  pacotes,  se  algum  for exigido,   sendo o   RETURN  o 
default.  Este  comando so'  e' necessa'rio  para sistemas  que 
requeiram um terminador de linha diferente do RETURN.


NU'MERO COM O COMPRIMENTO DO PACOTE

     Comprimento   ma'ximo  a ser  transmitido;   entre 10  e  
94 (decimal). Encurtar os pacotes pode facilitar suas passa
gens atrave's de linhas  com muito rui'do. Aumenta'-los diminui 
o  tempo de transmissa~o necessa'rio para uma  transmissa~o  de 
arquivos numa linha limpa.


NU'MERO PARA TIMEOUT

     Quantos  segundos o KERMIT esperara' por um pacote antes 
de tentar de novo.


NU'MERO (DECIMAL FRACIONA'RIO) DE PAUSA

     Quantos  segundos o  KERMIT esperara'  antes de   enviar 
cada  pacote.  Sendo  um  valor diferente  de  zero,  alguns 
sistemas particularmente lentos tera~o  tempo suficiente para 
consolidar  seus pro'prios pacotes antes que um pro'ximo  che
gue. Normalmente na~o existe pausa entre pacotes.


NU'MERO DE PREENCHIMENTO, CARACTER DE PREENCHIMENTO

     Quantos   caracteres de preenchimento devem  ser envia
dos  antes de um pacote,  se o outro lado necessita disto  e 
qual caracter usar. O  default e' sem preenchimento e 0 (NUL) 
como caracter de preenchimento.


CARACTER DE CITAC,A~O

     Qual sera'  o  caracter  imprimi'vel  a  ser  usado  para  
simbolizar  caracteres   de  controle.  O   default   e'  "#"  
(43).  Na~o ha'  raza~o para alterar isto.


CARACTER DE INI'CIO DE PACOTE

     O  caracter  de ini'cio de pacote e' o u'nico caracter  de 
controle usado "nu"  pelo  protocolo  KERMIT.   Por  default  
e'  um  CONTROL-A.   Se   o aparecimento  de um CONTROL-A  nu 
causar problemas para o seu hardware ou software em particu
lar,  use  este comando para selecionar outro  caracter para  
indicar  o ini'cio de  um pacote.  O comando  reci'proco  deve 
ser dado para o KERMIT na outra  ponta (SET RECEIVE  inicio-
de-pacote), desde  que ele tenha tal comando.


.cp5
SET RECEIVE

Sintaxe: SET RECEIVE para^metro

     Para^metros  para requisitar ou esperar por pacotes  que 
chegam:

CARACTER DE FIM DE LINHA

     Retorno-de-carro (13) e' o default.


NU'MERO COM O COMPRIMENTO DO PACOTE

    Comprimento   ma'ximo   do  pacote  que   o  outro   lado  
transmitira', em nu'mero decimal inteiro, entre 10 e 94.


NU'MERO PARA TIMEOUT

     Quantos   segundos  o outro KERMIT deve esperar por  um 
pacote.

NU'MERO (DECIMAL FRACIONA'RIO) DE PAUSA

     Quantos  segundos   a esperar  antes de   reconhecer  o  
recebimento  do pacote.  Um valor diferente de zero diminui
ra'  a taxa em que os pacotes chegam, o  que pode  ser neces
sa'rio  para sistemas  "sensi'veis" que  na~o conseguem aceitar 
entrada a altas taxas.

NU'MERO DE PREENCHIMENTO, CARACTER DE PREENCHIMENTO

     Quantos  caracteres de  preenchimento exigir  antes  de  
receber cada pacote, e qual caracter e'. Na~o se sabe de algum 
KERMIT  que necessite  o preenchimento e se algum  assim  e', 
pedira'   isto no caso  de voce^ na~o o fizer.  Este comando so' 
seria necessa'rio sob condic,o~es muito incomuns.


CARACTER DE CITAC,A~O

     Qual sera'  o  caracter  imprimi'vel  a  ser  usado  para  
simbolizar  caracteres   de  controle.  O   default   e'  "#"  
(43).  Na~o ha'  raza~o para alterar isto.


CARACTER DE INI'CIO DE PACOTE

     O caracter de controle para marcar o ini'cio dos pacotes 
que  chegam.  Normalmente  SOH (CONTROL-A,   ASCII 1).  Veja 
SET  SEND START-OF-PACKET, acima.


.cp5
SET RETRY

Sintaxe: SET RETRY opc,a~o nu'mero

     Informa o nu'mero ma'ximo de tentativas permitido para:

INITIAL-CONNECTION
     Quantas  vezes  tentar  a conexa~o antes   de  desistir,  
normalmente algo em torno de 15.

PACKETS
     Quantas vezes tentar transmitir um pacote em particular 
antes  de  desistir.  Se uma  linha contiver  muito   rui'do, 
podemos  aumentar este nu'mero.


.cp5
4.18. DEFINE

Sintaxe: DEFINE nome-da-macro [para^metros]

     Define  um  "macro-SET"  para permitir  uma  associac,a~o 
conveniente  de  um ou  mais  para^metros  do  SET   com  uma  
palavra  chave mnemo^nica  de sua escolha.  Os para^metros  do 
SET  sa~o   uma lista contendo  uma ou mais   das  opc,o~es  do 
comando  SET,  separadas por vi'rgulas.  Se voce^ usa o KERMIT 
para  se comunicar com diferentes  tipos de  sistema,   pode 
preparar uma  macro para cada um, por exemplo:

DEFINE IBM PARITY MARK, DUPLEX HALF, HANDSHAKE XON,
                                       SEND PACKET LENGTH 80


DEFINE UNIX PARITY NONE, DUPLEX FULL, HANDSHAKE NONE

DEFINE TELENET PARITY MARK, RECEIVE TIMEOUT 20


     Voce^ pode,  enta~o, teclar "SET IBM", "SET UNIT" ou "SET 
TELENET" para preparar  todos  os  para^metros  com um  u'nico  
comando.   E'  conveniente incluir estas definic,o~es  no  seu 
arquivo KERMIT.INI.

     Outro  emprego u'til  desta facilidade  e' no sentido  de 
se   preparar adaptac,o~es ra'pidas a diferentes  condic,o~es  de 
rui'do de linha:

DEFINE LIMPA BLOCK-CHECK 1, SEND PACKET-LENGTH 94
DEFINE SUJA  BLOCK-CHECK 2, SEND PACKET-LENGTH 60,
                                             RETRY PACKET 10
DEFINE SUJONA BLOCK 3, SEND PACKET 40, RETRY PACKET 20

     Voce^   pode  redefinir  uma  macro existente  da  mesma  
forma  que a definiu.  Pode,   tambe'm,   "des-definir"   uma 
macro   teclando   um  comando DEFINE vazio  para  ela,  por 
exemplo:

     DEFINE IBM

     Voce^   tambe'm  pode listar  todas suas macros  e   suas 
definic,o~es com o comando SHOW MACROS.


.cp5
4.19. SHOW

Sintaxe: SHOW [opc,a~o]

     O   comando   SHOW mostra  os valores   dos  para^metros  
aciona'veis  pelo comando SET.  Se  uma opc,a~o  em  particular  
na~o for  pedida, uma  relac,a~o completa sera' dada.


.cp3
4.20. STATISTICS

     Da'  estati'sticas acerca da mais recente  transfere^ncia, 
como o  total de caracteres transmitidos, o baud rate efeti
vo etc.


.cp5
4.21. LOG

Sintaxe: LOG [opc,a~o] [especarq]

     Grava  a  entidade escolhida (opc,a~o) ao arquivo de  log 
especificado.

.cp6
TRANSACTIONS       Direciona  o KERMIT no sentido de  gravar 
                   transac,o~es,  como   arquivos bem transmi
                   tidos  ou  recebidos ou aqueles  que  na~o 
                   foram  ou  chegaram bem.  Muito  u'til  em 
                   transac,o~es longas,  com transfere^ncias de 
                   mu'ltiplos arquivos

SESSION            Cria  uma  transcric,a~o de uma  sessa~o  de 
                   conexa~o,  quando  rodando um KERMIT local 
                   conectado a um sistema remoto num arquivo 
                   especificado,   que sera'  automaticamente 
                   fechado  se  a  conexa~o  for   encerrada.  
                   Em  algumas implementac,o~es  este  servic,o  
                   pode ser desativado ou ativado teclando o 
                   caracter  de escape seguido por "Q" (QUIT 
                   LOGGING)  ou   "R" (RESUME   LOGGING)  ou  
                   comandos  similares  de um  u'nico  carac
                   ter.  E'  muito u'til para registrar o dia'
                   logo  com um sistema interativo  e   para 
                   "capturar"  arquivos de sistemas  que na~o 
                   tem  KERMIT.  Na~o  se pode  garantir  que 
                   arquivos  capturados  chegara~o  completos  
                   ou  certos,  uma  vez  que  na~o  e'  feita 
                   qualquer checagem de erros.


.cp5
4.22. TRANSMIT

Sintaxe: TRANSMIT [especarq]

     Manda o conteu'do do arquivo  especificado para o  outro 
sistema,   sem protocolo,  pacote, checksum  nem retransmis
so~es.   Este  comando   e'  u'til para mandar   seque^ncia   de 
conexa~o   e/ou   identificac,a~o padro~es  e   para  transmitir 
arquivos para sistemas que na~o tem KERMIT,  como se estive's
semos teclando, na hora, tais textos.


.pa
.he                                    Implementac,o~es do KERMIT
5. Implementac,o~es do KERMIT

     O  KERMIT tem  sido escrito para  uma grande  variedade 
de sistemas, independentemente de seu porte. Na~o foi escrito 
numa linguagem porta'vel: cada implementac,a~o foi desenvolvida 
na linguagem que mais conviesse para cada ma'quina em  parti
cular.  A especificac,a~o, dada no Manual do Protocolo KERMIT, 
e' bem geral e permite implementac,a~o em qualquer ma'quina.

     A   seguir  temos uma  pequena  tabela,  resumindo   as 
implementac,o~es de KERMIT conhecidas,  no momento desta  edi
c,a~o.  Esta lista cresce sempre  e podera' estar completamente 
desatualizada no momento em que voce^ a ler.


MA'QUINA               SIST.OPERACIONAL LINGUAGEM

DECSYSTEM-10          TOPS-10          MACRO-10
DECSYSTEM-20          TOPS-10          MACRO-20
Se'rie IBM/370         VM/CMS, MTS      ASSEMBLER/370, Pascal
CDC CYBER 170         NOS              FORTRAN-77
UNIVAC-1100           EXEC             EXEC ASSEMBLER
HONEYWELL             MULTICS          PL/I
PRIME                 PRIMOS           PL/I
VAX-11                VMS              BLISS-32, MACRO-32
PDP-11                RT-11            OMSI Pascal
PDP-11                RSX-11, RSTS/E   MACRO-11
VAX, PDP-11, SUN etc. UNIX             C
DATA GENERAL          AOS              RATFOR
HP3000, UNIVAC etc.   SOFTWARE TOOLS   RATFOR
TERAK, HP-98XX        UCSD P-SYSTEM    UCSD Pascal, MACRO-11
8080, 8085 ou Z80     CP/M-80          DR ASM
8086, 8088            PC DOS, MS DOS   MS MASM-86
8086, 8088            CP/M-86          CR ASM86
Apple II 6502         Apple DOS        DEC-10/20 Cross
Atari Home Computer   DOS              ACTION!


     Mesmo   esta  e'  uma lista  parcial.   Alguns  sistemas  
maiores  (como o VAX/VMS) tem mu'ltiplas implementac,o~es;  ou
tros, menores, foram omitidos.

     A  versa~o  8080  roda no DEC   VT180,  no  DECMATE   II 
(CP/M),  no   HEATH/ZENITH-89   &  100,  no  SUPERBRAIN   da 
INTERTEC,  no  Apple   II com carta~o de Z80  (SOFTCARD),  no  
TRS-80  II  (CP/M),   no  Osborne,  no   KAYPRO,  no   VETOR 
GRAPHICS,   no ZORBA  da TELCON e  outros. A  versa~o 8086 MS  
DOS  roda  no  IBM-PC e assemelhados  (como  o  porta'til  da 
COMPAC), no HEATH/ZENITH-100, no  HP-150, no TANDY  2000, no 
Chameleon  da SEEQUA e  no Victor-9000.  A versa~o 8086 CP/M-
86 roda no Rainbow-100 da DEC e no APC da NEC.

     O  resto   deste  Manual e'  voltado  a  descric,o~es   de  
implementac,o~es selecionadas  de  KERMIT. Se  a descric,a~o  da 
sua   versa~o  de   KERMIT na~o aparece,  procure ver   se  em  
algum C.P.D. ao  qual voce^  tenha acesso  e tenha  o  KERMIT  
implementado, existe  alguma  documentac,a~o disponi'vel. Mesmo 
que  sua versa~o esteja descrita aqui,  informe-se acerca  de  
verso~es mais recentes (do programa e da documentac,a~o).



.pa
.he                                   KERMIT para IBM VM/CMS
6. KERMIT para IBM VM/CMS

Autor:        Daphne Tzoar, Columbia University
Versa~o:       (na~o numerada)
Data:         fevereiro de 1983

     Escrito   em  linguagem  ASSEMBLY/370  para  rodar  sob 
VM/CMS em sistemas IBM, se'ries /370 (SYSTEM/370, 303X, 43XX, 
308X,...).   Estes  sa~o sistemas half  duplex:  a  linha  de 
comunicac,a~o   tem que "virar" antes que qualquer dado  possa  
ser transmitido  para ela.  O  fato de  um pacote  ter  sido 
recebido  de  um  sistema IBM na~o e' garantia  que  ele  esta' 
pronto  para uma resposta.  Assim  qualquer  KERMIT  falando 
com   tais   sistemas  tem  que esperar  pelo  caracter   de 
virada de  linha (XON) antes  de transmitir o pro'ximo carac
ter.

     Os sistemas IBM  falam com  seus terminais atrave's   de 
um   front-end (IBM  3704/5,   3725,   COMTEN  3670   etc.).  
Estes  front-end  geralmente insistem em  usar o  oitavo bit  
de  cada  caracter para  paridade.   Isto significa  que ar
quivos  bina'rios   (arquivos que conte'm   mais  que  somente 
letras, di'gitos,  pontuac,a~o e  controles de  impressora) na~o  
podem   ser transmitidos  ou recebidos corretamente por  es
ses sistemas com o KERMIT (versa~o 1 do protocolo).

     O  sistema  IBM sob VM/CMS e' inapto a  interromper  uma 
leitura de  seu console.   Isto significa que  a versa~o  IBM  
do KERMIT na~o  pode sair por tempo (timeout). A u'nica  forma 
de  "timeout" no  KERMIT-CMS e' do  outro  lado:  teclando-se 
return  para  o  micro faz-se com que  ele  retransmita  seu 
u'ltimo pacote ou usando-se o KERMIT-20, no DEC-20, que prove 
um   timeout  automa'tico.   Porisso o KERMIT-CMS  espera  30 
segundos antes de mandar seu primeiro pacote,  ao transmitir 
arquivos   do VM/CMS.  Isto da' ao  usua'rio tempo  suficiente 
para  voltar ao KERMIT local e emitir o comando RECEIVE.  De  
outra   maneira   um   deadlock  de   protocolo   aparecera',   
exigindo intervenc,a~o manual do usua'rio.

     Mas  na~o e' so':  o VM/CMS armazena arquivos como  regis
tros, ao inve's de uma cadeia de bytes. O KERMIT-CMS  tem que 
se preocupar em montar  as linhas  que chegam em  registros, 
tirando  os  returns  e os line-feeds  e,  para   transmitir  
cada  registro,   tem   que  tirar  os  caracteres   de pre
enchimento  e inserir os returns e line-feeds,  formando li
nhas. 

     A especificac,a~o de arquivos no VM/CMS e' na forma

FILENAME FILETYPE FILEMODE         (abreviadamente FN FT FM)

     FM  e' equivalente  a` especificac,a~o de  dispositivo  num  
DEC  ou num micro (FN FT FM seria FM:FN.FT na sintaxe  CP/M, 
por  exemplo).  FILENAME e FILEMODE podem ter,  cada um,  no 
ma'ximo, 8 caracteres e FILEMODE 2.  Quando FM e'  omitido  de  
uma  especificac,a~o de arquivo,   e' assumido o disco  do pro'
prio  usua'rio.  O  KERMIT-CMS transmite  somente FILENAME  e 
FILETYPE,  convertendo o espac,o entre eles em um ponto, para 
compatibilidade com  a maioria  dos  outros sistemas  opera
cionais.  A seguir,  os  comandos do KERMIT-CMS.

.cp3

6.1. SEND FN FT [FM]

     Transmite  o(s) arquivo(s)  especificado(s), usando "*"  
ou "%" como caracteres coringa ("*" vale qualquer nu'mero  de 
caracteres  e "%" somente um).   O KERMIT-CMS assume que   o 
arquivo  esta' no  disco "A" e prepara o FILEMODE como  "A1". 
Se,  todavia,  o  arquivo estiver em outro disco,  o  FM tem  
que  ser  explicitado.  Repare que se voce^ usar "*"  para  o 
FILEMODE, o KERMIT-CMS transmitira' somente o primeiro arqui
vo que servir.  Exemplos: o  comando SEND  CEN SPSS transmi
tira'   CEN  SPSS A1;   para transmitir um arquivo  com  este 
mesmo nome que esteja no disco "B", voce^ tem que mandar SEND  
CEN  SPSS  B;  SEND  * FORTRAN mandara'  todos   os  arquivos 
FORTRAN de seu disco "A";   SEND ABC% EXEC  enviara' todos os  
arquivos  EXEC de  seu disco  "A" cujos FILENAME's tenham  4 
caracteres  e que comecem com "ABC";  se voce^ tem o  arquivo  
PLOT SAS no disco "A"  e no disco "B",  o  comando SEND PLOT 
SAS * transmitira' SEND PLOT SAS A1.

.cp3

6.2. RECEIVE [FN FT [FM]]

     Recebe   o(s)  arquivo(s)  transmitido(s)  pelo   outro 
KERMIT.  Se na~o  for inclui'da  uma especificac,a~o de arquivo, 
o  KERMIT-CMS  usara'  o(s) nome(s) fornecido(s)  pelo  outro 
KERMIT.  Use  a  especificac,a~o de arquivo para  indicar   um 
FILENAME diferente  ou um disco  que na~o o  "A" (neste caso, 
FILENAME  e FILETYPE tem que ser informados,  mesmo  que  da 
forma  = = FM).  Exemplos:   para receber  arquivos aprovei
tando os  nomes informados pelo KERMIT do outro  lado,   use 
RECEIVE;  para  salvar   um arquivo sob um  nome  diferente,  
especifique RECEIVE ABC FORTRAN; para salvar o arquivo com o 
mesmo nome mas em outro disco,  entre RECEIVE ABC FORTRAN  B 
ou RECEIVE  = = B.


.cp3
6.3. SET para^metro valor

     Arma o para^metro no valor especificado. Os comandos SET 
va'lidos sa~o:

    RECFM opc,a~o
        Denota  o formato de  registro a ser usado  ao criar 
        um  arquivo.  So'  sa~o permitidos registros  Fixos  e 
        Varia'veis (default).  Basta a inicial de cada um.

    LRECL nu'mero-decimal
        Indica o tamanho lo'gico do registro.  O default e' 80 
        e o  ma'ximo permitido e' 256.

    QUOTE nu'mero-decimal
        E'  o  valor  ASCII do caracter  de prefixo de   con
        trole que  voce^ quer  usar no lugar do default  "#".  
        Deve ser um u'nico caracter,  imprimi'vel,  cujo valor 
        decimal esteja compreendido no  seguinte:  32-62, 96 
        ou 123-126.

    END nu'mero-decimal
        Diz  o  valor ASCII do caracter de fim de linha  que 
        voce^  escolheu para transmitir.  O default e' CR (13) 
        mas pode ser de 00 a 31.

    PAC nu'mero-decimal
        Permite  ao usua'rio especificar o  tamanho do pacote 
        que  o   micro deve  usar para  transmissa~o  para  o 
        KERMIT-CMS. A faixa e' 26-94, onde 94 e' o default.


.cp3
6.4. SHOW [para^metro]

        Mostra  o  valor corrente de qualquer  varia'vel  que 
        possa ser  alterada atrave's de um comando SET.


.cp3
6.5. STATUS

        Devolve   o  status do u'ltimo comando do KERMIT-CMS.  
        Aparecera'  "KERMIT   COMPLETED SUCCESSFULLY"   ou  o  
        u'ltimo erro encontrado.


.cp3
6.6. CMS

        Emite um comando CMS de dentro do KERMIT-CMS.


.cp3
6.7. CP

        Emite um comando CP de dentro do KERMIT-CMS.


.cp3
6.8. HELP ou ?

        Lista todos os comandos legais para o KERMIT-CMS.


.cp3
6.9. Fatos Relevantes

     Esta  e' uma lista de outros fatos relevantes acerca  do 
KERMIT-CMS:

     1.   Os  comandos sa~o fornecidos com uma  opc,a~o de  au
          xi'lio  ou seja:  um ponto de interrogac,a~o pode ser  
          teclado  para se conseguir o   formato  apropriado  
          ou  uma lista de opc,o~es.  O ponto de  interrogac,a~o 
          deve  ser  seguido de  um  return.  O   KERMIT-CMS  
          respondera' e  recolocara'  o prompt.

     2.   Ao receber um  arquivo,   se  o  formato  do   re
          gistro   for  fixo,  qualquer registro maior que o 
          LRECL  sera' truncado.  Se o formato   do  registro  
          for  varia'vel,   cada  um   podera'  ter   ate'  256  
          bytes.  Para transmitir arquivos, o tamanho ma'ximo 
          de cada registro e' 256.

     3.   Antes  de  se conectar ao IBM de  outros  sistemas  
          (como   os  va'rios micros,   DEC-20  etc.),   voce^ 
          deve  SET IBM ON  de forma  a ativar os para^metros 
          "paridade", "eco" e "handshake" da forma que o IBM 
          gosta.

     4.   Note que "(" e ")" agem como separadores de  pala
          vras na linha  de entrada.   Assim, se voce^ tentar 
          armar   o  caracter  de aspas para "(*"  ou  "*(", 
          somente o primeiro caracter sera' usado. 

      5.  Uma  vez que alguns KERMIT's na~o mandam um  pacote 
          de   erro  quando abortam,   nem sempre  o KERMIT-
          CMS pode  saber que o  micro parou de mandar  suas 
          informac,o~es.  Assim,  quando voce^ se reconectar ao 
          IBM,  o KERMIT-CMS  podera', ainda, estar  mandando 
          pacotes  (eles  aparecera~o na  tela).   O  usua'rio  
          devera' teclar  return ate'  que o  KERMIT-CMS tenha  
          mandado  o nu'mero  ma'ximo permitido  de  pacotes e  
          aborte.  A mensagem de erro, no entanto, na~o indi
          cara'  que  a  comunicac,a~o  parou porque   o  micro  
          abortou  mas por  na~o ter encontrado  um  caracter 
          de ini'cio de header.

      6.  O  menor  tamanho de pacote de transmissa~o  que  o 
          KERMIT-CMS permite e' de 26 bytes.  Isto e' necessa'
          rio  para evitar um erro ao transmitir o  nome  do 
          arquivo  ou um pacote  de erro.  Se o micro  tenta 
          armar  tal valor para menos de 26, o KERMIT-CMS se 
          auto-abortara'  imediatamente com um erro  de  "BAD 
          SEND-PACKET SIZE".


      7.  Enquanto  o  front-end  de  comunicac,a~o   do   IBM  
          traduz  todos  os caracteres  que chegam de termi
          nais   ASCII para EBCDIC,  o KERMIT-CMS traduz  os  
          dados  que  ele le^  de volta  para ASCII   (carac
          teres   na~o representa'veis em ASCII  sa~o  trocados 
          por um nulo). Na~o so' porque e' mais fa'cil trabalhar 
          com   caracteres  ASCII,   como porque  mante'm   a 
          consiste^ncia  com as diversas  verso~es de  KERMIT.  
          Quando os pacotes sa~o transmitidos para o micro, O 
          KERMIT-CMS converte todos os  dados de  volta para 
          EBCDIC.   A tabela de  conversa~o ASCII/EBCDIC pode 
          ser encontrada no Ape^ndice A.

      8.  Se uma comunicac,a~o fica maluca,  voce^ pode se  co
          nectar   de   volta  com o sistema  CMS  e  teclar 
          return  va'rias vezes (cada um obrigara' ao  KERMIT-
          CMS  a retransmitir o pacote corrente,  ate' estou
          rar  o limite de retransmisso~es) e voltar ao ni'vel 
          de comando "KERMIT-CMS".


.cp3
6.10. Mensagens do Sistema

     O KERMIT-CMS da',  tanto ao  usua'rio  quanto  ao  micro,  
diversas  mensagens  de  erro.  Se a execuc,a~o  precisar  ser 
terminada anormalmente transmite um pacote  de erro  para  o  
micro antes  de terminar.  Tal mensagem  pode  ser recupera
da   atrave's do  comando STATUS  quando o KERMIT-CMS retorna 
e  da'  seu prompt.  Se o KERMIT-CMS se  abortou   por  haver  
excedido  o  nu'mero ma'ximo de  tentativas (20  para  pacotes 
de  inicializac,a~o e 5 para  os outros),  a mensagem  de erro 
mostrara'  o erro  mais recente (isto e':  o u'ltimo NAK que  o 
KERMIT-CMS  recebeu).  Se a execuc,a~o  parou porque  o  micro  
desistiu,  a  mensagem de  erro informara'  isto  ao  usua'rio 
mas   sera'  responsabilidade  do micro apontar o   problema.  
As mensagens  de  erro do  KERMIT-CMS  sa~o  as seguintes:

          "BAD SEND-PACKET SIZE"
              Mandada  quando o micro tenta estabelecer  que 
              seu  buffer  de recepc,a~o  tem  um  comprimento 
              menor  que 26 ou maior que 94.  Tambe'm aparece 
              quando  o KERMIT-CMS tenta mandar  um   pacote 
              maior que o ma'ximo especificado.

          "BAD MESSAGE NUMBER" (nu'mero de mensagem inva'lido)
              Esta  e as mensagens  a seguir mostram  incon
              siste^ncias  num pacote KERMIT:

          "ILLEGAL  PACKET TYPE" (tipo inva'lido de pacote)
              pode ser causada por comandos de servidor.

          "UNRECOGNIZED STATE" (estado desconhecido)
          "NO SOH ENCOUNTERED" (na~o veio SOH)
          "BAD CHECKSUM"  (caracter de  paridade  horizontal 
              na~o bate)
          "BAD CHARACTER   COUNT"  (contador  de  caracteres 
              errado)
          "MICRO SENT A NACK" (o micro transmitiu um NACK)
          "LOST A PACKET" (perdi um pacote)
          "MICRO  ABORTED" (o micro saiu do ar)  - quando  o 
              micro pa'ra no meio de uma transfere^ncia.
          "ILLEGAL FILE NAME" (nome inva'lido para arquivo) - 
              ao  receber  um nome  de arquivo do  micro,  o 
              KERMIT-CMS espera que seja no formato "FN.FT". 
              Se  FN,  "."  ou FT  faltarem,  o   KERMIT-CMS 
              rejeitara'  (NAK) o pacote.  Se FN  ou FT tive
              rem  mais de 8 caracteres cada,  sera~o trunca
              dos.
    "INVALID LRECL"
              O  KERMIT-CMS  abortara' se  aparecer  qualquer 
              erro ao tentar ler  um  arquivo a  ser  envia
              do.   Ele  so'   pode transmitir  arquivos  com  
              formatos  de registros  fixos  ou   varia'veis; 
              porisso  os arquivos compactados ou  do WILBUR 
              EDIT causam erros.
    "PERMANENT I/O ERROR"
              Esta mensagem indica que houve  um erro perma
              nente  de  I/O ao   tentar   ler   um  arquivo   
              existente.   A  execuc,a~o imediatamente e' abor
              tada.
    "DISK IS READ-ONLY"
              Tentativa de gravac,a~o em um disco onde isto  e' 
              proibido.
    "RECFM CONFLICT"
              Se  surge um  conflito de  FN,  o   KERMIT-CMS 
              adicionara'  o arquivo  recebido  ao existente,  
              desde  que  seus formatos sejam iguais;   caso 
              contra'rio este erro implicara' numa parada. 
    "DISK IS FULL"
              Refere-se  a   qualquer   erro   relativo   a`s  
              limitac,o~es   de  espac,o  de  armazenamento  no  
              disco do usua'rio. Normalmente quer dizer que o 
              disco esta' cheio mas o erro tambe'm  pode  sig
              nificar   que  o nu'mero ma'ximo   permitido  de 
              arquivos  foi alcanc,ado ou que a memo'ria  vir
              tual foi excedida.
    "ERR ALLOCATING SPACE"
              O  KERMIT-CMS mante'm  uma tabela de  todos  os 
              arquivos  que foram transmitidos para o micro, 
              alocando  espac,o extra se mais de 10  arquivos 
              sa~o mandados de uma vez.  Se houver um erro ao 
              tentar  alocar esse espac,o,  o  KERMIT-CMS  se 
              abortara' com esta mensagem.


    O trabalho no KERMIT para VM/CMS continua.  As melhorias 
preveem o seguinte:

    1) Transpare^ncia  de 8 bits para permitir  que  arquivos 
       bina'rios passem atrave's de front-ends que insistem em 
       usar o oitavo bit para paridade.

    2) Capacidade de atuar como um servidor.

    3) Capacidade de preparar outra linha e,  com isto,  ser 
       usado em modo local, conectado a outro host, remoto.


.pa
.he                                         KERMIT para CP/M-80
7. KERMIT para CP/M-80

Autor:        Bill  Catchings,   Columbia  University,   com 
              contribuic,o~es   de  Eiben  (DEC),   Nick  Bush 
              (Stevens),    John    Bray   (University    of 
              Tennessee),  Bruce Tanner  (Cerritos College),  
              Greg  Small  (University  of   California   at  
              Berkeley),    Kimmo     Laaksonen    (Helskini 
              University of Technology) e muitos outros.

Linguagem:    8080 ASseMbler ou MAC80

Versa~o:       3.8

Data:         fevereiro de 1984

Documentac,a~o: Frank da Cruz, Columbia University



7.1. Suma'rio do CP/M

    O   CP/M-80 (versa~o  2.2) tem  somente 5  comandos embu
tidos  e todos com arquivos;   as outras  func,o~es sa~o  leva
das a  cabo atrave's  de chamados para rodar sob o CP/M.

    As  especificac,o~es  de  arquivo no  CP/M  sa~o  da  forma 
D:NNN.TTT, onde

D:     e' o dispositivo,  normalmente disquetes (A:, B:,...). 
       Se omitido, o default e' o disquete conectado;

NNN    e' o nome do arquivo, com, no ma'ximo, 8 caracteres;

 .TTT   e' o tipo de arquivo, com, no ma'ximo, 3 caracteres.

     Nomes e  tipos de  arquivos podem  conter letras,   di'
gitos  e   alguns  especiais,  incluindo   hi'fen,  cifra~o  e  
sublinhado, na~o sendo o uso de espac,os.

     O  uso  de  caracteres coringa nas   especificac,o~es  de 
nome   e  tipo   de arquivo e' permitido  (na~o  em  nome   de 
dispositivos),   dentro de uma especificac,a~o de arquivo,  um 
"*" substitui todo um campo,  um "?" substitui um  caracter. 
Exemplos disso  podem   ser:

     "*.F??"  especifica  todos   os  arquivos  cujos  tipos 
              comecem  com "F" e tenham  1,  2 ou  3  carac
              teres;

     "F?.*"   especifica  os  arquivos cujos  nomes  comecem 
              com   "F"  e na~o  tenham mais de 2  caracteres 
              mas qualquer tipo serve.


     Os cinco comandos CP/M sa~o:

          DIR [especificac,a~o]
               Lista os nomes dos arquivos especificados.  O 
               default e' "*.*".

               Exemplo: "DIR B:*.FOR".

          ERA especificac,a~o
               Apaga os arquivos especificados.

          REN novo=velho
               Troca  o  nome de um arquivo de "velho"  para 
               "novo".

          SAVE nu'mero nome
               Salva  o nu'mero de blocos de  memo'ria  pedido 
               num arquivo especificado.

          TYPE arquivo
               Lista o arquivo especificado.


     Os programas mais importantes sa~o:

          STAT
               Da' estati'sticas sobre uso de disco.

          PIP
               Programa  de  Interca^mbio entre  Perife'ricos. 
               Copia arquivos.

     Para  maiores informac,o~es a respeito do  CP/M e de seus 
utilita'rios,  consulte os manuais de seu micro ou um  Manual 
de CP/M.



.cp3
7.2. Descric,a~o do KERMIT-80

     Existem  atualmente  implementac,o~es do  KERMIT-80  para 
o   DEC   VT180  DECMATE  II,   SUPERBRAIN  (da   INTERTEC), 
HEATH/ZENITH  89 e Z100,  Apple II  com  o carta~o  de   Z80, 
Osborne,   TRS-80  II com  CP/M,   Zorba (TELCOM),   KAYPRO, 
VECTOR  GRAPHICS  CP/M SYSTEM e  outros.  Existe tambe'm  uma 
versa~o  "gene'rica"  que deve rodar na maioria  dos  sistemas 
compati'veis com o CP/M mas que tem menor performance.

     Uma   vez  que  o KERMIT-80  roda  sozinho  num  micro,  
tem  sempre o controle da  tela  -  e'  sempre local.  Assim,  
sempre  mante'm  a  tela atualizada  com o nome do arquivo  e  
o nu'mero do pacote,  transmitindo ou recebendo. O  KERMIT-80 
e'   capaz  de trabalhar  com time-out  sobre  um pedido   de 
entrada   (apesar  de um  pouco imprecisamente)  e de  "que
brar" deadlocks automaticamente.  Na maioria dos casos  isto 
na~o e'  importante,  porque  o KERMIT do outro lado provavel
mente  sera' melhor do que ele em tratar time-outs.  O trata
mento  de time-out feito  pelo KERMIT-80 e'  um pouco  "nebu
loso" porque depende  da velocidade do  processador Z80 e de 
outros fatores que podem variar de um sistema para outro.

     Apesar da  capacidade de  time-out, se  uma transmissa~o  
se   prender (pode-se  notar o fato quando se  percebe  que, 
de  repente,  a atualizac,a~o das informac,o~es na tela deixaram  
de ser feitas),  pode-se teclar  RETURN para  forc,ar o micro 
a  fazer o que ele  faria numa condic,a~o de time-out  (trans
mitir um NAK  do pacote esperado,   causando uma retransmis
sa~o   por parte  do host na outra ponta da linha (ou,  se  o 
micro estiver mandando,  retransmitir  o   u'ltimo   pacote).  
Transfere^ncias   micro-a-micro   ou micro-a-IBM podem exigir 
este tipo de intervenc,a~o manual.

     Transfere^ncias  de arquivos podem ser interrompidas  de 
va'rias formas:

CONTROL-C     Devolvera'   voce^  de  volta  para o  ni'vel  de 
              comando  do KERMIT-80 imediatamente;

CONTROL-X     Se enviando,  encerra a transmissa~o e avisa ao 
              outro  KERMIT  para  desprezar o   que  estava  
              recebendo; se houverem mais arquivos  a  serem  
              enviados,   reinicia  no  pro'ximo.    Se rece
              bendo,   pede  ao outro KERMIT  para parar  de 
              transmitir este arquivo;  se o outro  entender 
              este pedido (nem  todas as   implementac,o~es de  
              KERMIT  sa~o  capazes  disto),   ele obedecera', 
              caso contra'rio o arquivo continuara'  chegando; 
              de qualquer maneira o KERMIT remoto transmiti
              ra' o pro'ximo arquivo, se houver.

CONTROL-Z     Como  o anterior,   com a diferenc,a de abortar 
              completamente  a transfere^ncia,  mesmo  de  um 
              grupo.

RETURN's      Se   voce^  teclar  RETURN   repetidamente,   o 
              KERMIT-80 tentara' retransmitir o  pacote  cor
              rente   ate' atingir  seu  nu'mero limite  (algo 
              em torno de 16) e,  enta~o, se nenhuma resposta 
              valida aparecer, entrar em ni'vel de comando.


.cp4
7.3. Comandos do KERMIT-80

     O  KERMIT-80 usa uma linguagem de comandos no estilo do 
DECSYSTEM-20.  palavra chave pode  ser abreviada a seu   mi'
nimo u'nico. Um "?"  pode ser teclado para pedir um menu  das 
opc,o~es disponi'veis a qualquer ponto um comando.  Um ESC pode 
ser  teclado  a  qualquer ponto num comando para  a  palavra 
chave corrente ou o nome de um arquivo.  Se ainda na~o tecla
dos  caracteres suficientes para identificar o  campo   cor
rente  forma   u'nica,  o   KERMIT-80 fara'  soar  um  BIP   e 
permitira'  que se continue daquele ponto.

CONNECT
     Estabelece   uma  conexa~o   de  "terminal   virtual"  a  
     qualquer  host  que  possa ser conectado  a  sua  porta  
     serial,  isto  e':   passar o que  for teclado  para   a 
     porta   serial  e  mostrar  na tela  tudo o   que  vier 
     atrave's dela.  Emula,  tambe'm, um VT52 da DEC em termos 
     de  controle de cursor,    apagamento  de  tela   etc.,  
     se  "VT52-EMULATION"  estiver acionada (ver abaixo), em 
     cujo  caso tambe'm se deve avisar a seu host remoto  que 
     se e' um VT52 (outras verso~es simulam outros terminais). 
     O  caracter  de  escape difere de   micro  para  micro; 
     quando se emite  o comando  CONNECT,  o micro dara'  uma 
     mensagem informando como voltar. Geralmente a seque^ncia 
     de escape e' um caracter dificilmente  usado,  como, por 
     exemplo,   CONTROL-\,  ou  CONTROL-],  seguido  por  um 
     "comando" de uma u'nica letra:

     C  encerra  (close)  a conexa~o,  voltando  a  ni'vel  de 
        comando;
     S mostra o status da conexa~o, mantendo-a;
     ? mostra esta lista;
     0 (zero) envia um NUL pela linha;
     B  manda um sinal de break;  poucos sistemas tem esta 
        func,a~o;
    ^] (ou o que for) manda o pro'prio escape para o host.

SEND especarq
     Transmite  o(s)  arquivo(s)   especificado(s)  para   o  
     KERMIT  remoto.   A  especarq  pode  conter  caracteres 
     coringa.

RECEIVE
     Recebe   arquivo(s)  do  KERMIT   remoto.   Armazena-os  
     com   os   nomes fornecidos  nos headers mandados  pelo 
     KERMIT remoto.  Se os nomes na~o sa~o legais,  usa tantos 
     caracteres  do  nome fornecido  quanto   possi'vel  (ver 
     abaixo  descric,a~o  de "SET  FILE-WARNING").  Se  houver 
     conflito  e  o  FILE-WARNING estiver  armado,  avisa  o  
     usua'rio e tenta criar um  nome u'nico para o arquivo.

GET especarq
     Quando  o  KERMIT-80  esta' falando   com  um   servidor 
     KERMIT,  podemos incluir  uma especificac,a~o  de arquivo  
     para pedir  ao servidor para mandar arquivos, por exem
     plo, "GET HLP:K*.HLP".

LOG especarq
     Quando conectado a um host remoto,  simulando um termi
     nal  dele,  grava a  sessa~o  de  terminal  no   arquivo  
     de   disquete  especificado.   A funcionalidade   disto 
     depende  de  algumas  extenso~es na capacidade  do  host 
     remoto  em  controlar   seu fluxo com XON/XOFF   e  na~o 
     garante   uma transcric,a~o  completa.  Este  arquivo   e' 
     fechado  quando   a conexa~o e' desfeita ao se  teclar  a  
     seque^ncia de escape  seguida pelo  comando de  caracter 
     u'nico "C".

TRANSMIT especarq
     Transmite  o  arquivo  especificado para  o sistema  do  
     outro lado  da conexa~o  como se estivesse  sendo tecla
     do  no  terminal,  uma linha de cada vez.  O  protocolo 
     KERMIT na~o e' envolvido nisto.  E' necessa'ria a confirma
     c,a~o   manual de  cada linha.  Isto  e' muito  u'til  para 
     mandar  arquivos para  sistemas  que na~o   tem   KERMIT 
     instalado.   Durante  a transmissa~o  e' permitido que se 
     tecle o caracter de escape,  seguido de um dos comandos 
     de um u'nico caracter descritos abaixo.

     C  cessa a transmissa~o.
     R  retransmite a linha anterior.

BYE
     Quando  se esta' falando com um servidor KERMIT  remoto, 
     este   comando derruba  o  servidor,  emite  um log-out  
     para  o   host,  volta  para o KERMIT-80  e  sai  dele, 
     deixando-nos em ni'vel de comando CP/M.

LOGOUT
     Similar ao comando BYE mas nos deixa a ni'vel de comando 
     KERMIT-80.

FINISH
     Como  o comando LOGOUT mas na~o emite um log-out para  o 
     host,  deixando-nos,  no entanto, a ni'vel de comando do 
     KERMIT-80. Comandos subsequentes de CONNECT nos coloca
     ra~o de volta ao host, a ni'vel de comando do sistema.

SET para^metro [valor]
     Arma  o   para^metro  especificado  com o  valor   dado.  
     Os  para^metros possi'veis sa~o:

     WARNING ON/OFF
          descobrir  um conflito entre o nome de um  arquivo 
          que chega e um que ja' exista no disquete.

     VT52-EMULATION ON/OFF
          Quando  ligado a um host  remoto,  controla  se  o 
          micro   deve  simular  um VT52  ou rodar  em  modo  
          "nativo". Isto porque algumas implementac,o~es tem a  
          possibilidade  de simular  um outro terminal  (VT-
          100, VT180 ou ADM3A etc.)

     LOCAL ECHO ON/OFF
          Se o host remoto e' half-duplex,  mude este para^me
          tro  para ON, de forma a ter ecoados, em sua tela, 
          os caracteres que voce^ digitar.

     ESCAPE
          Muda o caracter que sera' reconhecido,  durante uma 
          conexa~o como terminal virtual.   O  KERMIT-80  pe
          dira',   enta~o,   o  novo caracter,  que devera' ser 
          teclado literalmente.

     BAUD
          Muda  o  baud-rate da porta de  comunicac,a~o.  Este 
          comando  so' funciona  em  certos  sistemas e   sua  
          operac,a~o  real pode variar de um para outro. Tecle 
          "SET BAUD ?" e obedec,a.

     PARITY
          Arma a paridade dos  caracteres saintes para NONE,  
          SPACE,  MARK,   EVEN  ou  ODD.   Para   caracteres  
          chegantes,  se  a paridade for NONE,  o oitavo bit  
          e' mantido (como  dado); caso   contra'rio  e'  igno
          rado   e  retirado.  A  paridade especificada vale  
          tanto   para  comunicac,a~o  como   terminal  quanto 
          para transfere^ncia de arquivos.

     IBM ON/OFF
          Permite  a  transfere^ncia de  arquivos  DE e  PARA  
          sistemas  IBM.   Faz  com que  o  KERMIT-80 espere  
          pelo  caracter de "virada" (turnaround) da  linha, 
          XON,  ignore  a  paridade  de entrada,   inclua  a 
          paridade  de   sai'da apropriada e  use  eco  local 
          durante a conexa~o.

     BLOCK-CHECK-TYPE
          As opc,o~es sa~o:

              1-CHARACTER-CHECKSUM
                    Normal, default, checksum de 6 bits.

              2-CHARACTER-CHECKSUM
                    Checksum de 16 bits.

              3-CHARACTER-CHECKSUM
                    Cheque   de redunda'ncia ci'clica  no for
                    mato de 16  bits  do  CCITT,  codificado  
                    como tre^s caracteres.

               As  opc,o~es 2 e 3 somente devem ser usadas sob 
          extremas condic,o~es de  rui'do  na   linha.   Muitas 
          implementac,o~es  de KERMIT nem as suportam.

     FILE-MODE
          Diz   ao  KERMIT  o  tipo   de  arquivo  que  esta'   
          sendo transmitido,   de   forma   que   ele   pos
          sa    determinar  corretamente o fim  de  arquivo. 
          "SET  FILE  BINARY" significa transmitir   todo  o 
          u'ltimo bloco; "SET FILE ASCII" e' usado para arqui
          vos  de texto  (a transmissa~o termina quando   for 
          encontrado  o primeiro CONTROL-Z).  Se  um arquivo 
          de  texto  for transferido  como  bina'rio,  alguns 
          caracteres  estranhos (ate'  127 deles) podem  apa
          recer  depois do fim de arquivo no sistema alvo.

     DEFAULT-DISK
          Permite  que se mude o disco default como fonte ou 
          destino  para transfere^ncias de arquivos.   Emitir 
          este comando  nos da'  a chance  de trocar  o disco  
          especificado e torna'-lo disponi'vel para  gravac,a~o. 
          O  disco selecionado aparece  no prompt do KERMIT-
          80, por exemplo: "KERMIT-80 A:>".

     PORT
          Permite a troca entre diversas portas de comunica
          c,a~o. Este comando na~o esta' em todos os sistemas.

     PRINTER ON/OFF

          Liga  ou  desliga a impressora como  copiadora  da 
          sessa~o.  Na~o  bufferiza nem cuida de prova'veis ca
          racteres de controle.

DIR [especarq]
     Prove^  a listagem do direto'rio dos arquivos especifica
     dos.  Se  nenhum arquivo  for especificado,  todas   as 
     entradas  de  direto'rio do disco default sera~o   lista
     das.   Os  tamanhos dos  arquivos,   em  K's,   sa~o in
     clui'dos.   Como o comando DIR do  CP/M,  permite que se 
     interrompa  a  listagem a qualquer   momento,  teclando 
     qualquer  coisa.  A  listagem,  mesmo se  interrompida, 
     termina  com  uma informac,a~o do total de  espac,o  ainda 
     disponi'vel no disco.

ERA [especarq]
     Funciona exatamente como o comando homo^nimo do CP/M.


7.4. O KERMIT-80 gene'rico

     O    "KERMIT-80  gene'rico"  e'  uma   implementac,a~o   do  
KERMIT  que,  teoricamente,  deve rodar  em qualquer sistema  
compati'vel  com o  CP/M-80 sem modificac,o~es ou,  no  ma'ximo, 
pequenas modificac,o~es.  Diferentemente de outras implementa
c,o~es  de  KERMIT,  na~o  tem manipulac,o~es de porta  ou   tela 
dependente de sistema.  Todo I/O e' feito com chamadas padra~o 
do BIOS e redirecionamento de  I/O usando o  IOBYTE que,  de  
acordo  com o  "CP/M SYSTEM MANUAL" da Digital  Research,  e' 
facilidade  opcional de qualquer implementac,a~o  de CP/M   em  
particular.  Se  o seu  sistema  na~o trabalha com IOBYTE,  o 
KERMIT gene'rico  na~o vai  funcionar;  alia's, nem os sistemas 
que usam o IOBYTE, o fazem de forma padronizada.

     A  raza~o  pela  qual nem  todas as  implementac,o~es   do 
KERMIT-80   serem gene'ricas e' que boa  parte da velocidade e'  
sacrificada  ao fazer tudo atrave's do  sistema  operacional. 
Enquanto  uma implementac,a~o especi'fica do KERMIT-80 pode ser 
capaz de  operar a 300,  120,  2400,  4800,  9600  ou  mesmo 
19200 baud,  o KERMIT gene'rico na~o  conseguira' trabalhar, em  
certos sistemas, em  taxas que excedam 1200 baud.

     O  KERMIT gene'rico tambe'm difere das outras implementa
c,o~es  de KERMIT na medida em que na~o consegue fazer um  con
trole bonito da tela durante  uma transfere^ncia de arquivos. 
Simplesmente  vai  dando os nomes de  arquivos,  nu'meros  de  
pacotes  e  mensagens  tela  abaixo.  Na~o  faz  emulac,a~o  de 
terminal  age como um terminal "burro",  dependendo das fun
c,o~es embutidas para fazer controle de cursor,  independente
mente do programa KERMIT.

     Note que os KERMIT para VT180 e DECMATE-II sa~o  simples 
adaptac,o~es  do KERMIT gene'rico  que fazem  controle de  tela 
do   tipo  do   VT100 (ANSI) durante  uma  transfere^ncia  de 
arquivo.


.cp3
7.5. Instalac,a~o

     O KERMIT-80 foi originalmente escrito para o SUPERBRAIN 
da  INTERTEC,  em  assembly standard (ASM),  sem  macros  ou 
instruc,o~es  avanc,adas,  de  modo a poder  ser   montado   em  
qualquer  sistema  CP/M.  Foi,  desde enta~o, modificado para 
rodar  em outros sistemas.  O KERMIT-80 deve ser  capaz   de 
rodar em qualquer micro baseado nos 8080,  8085 ou Z80,  sob 
CP/M, com um mi'nimo de alterac,o~es (ver abaixo).

     Todas  as verso~es do KERMIT-80 sa~o montadas a partir do 
mesmo  fonte,  com as depende^ncias  de sistema tratadas  por 
condicionais   em tempo de montagem.  As depende^ncias   mais 
importantes sa~o  a emulac,a~o de  terminal (quando conectado a  
um  host  remoto)  e o manuseio  da  tela,  facilmente  para 
outros sistemas por estarem em tabelas. As rotinas  de porta 
sa~o melhor feitas,  somente com chamadas ao BDOS mas  alguns 
sistemas na~o permitem isto, principalmente porque as rotinas 
do  BDOS tiram o  bit de paridade  durante o  I/O na   porta 
(ele   e' usado  como dados  ao se transferir arquivos  bina'
rios). Ale'm disso, usando chamadas ao BDOS,  na~o ha' jeito de  
se fazer poll na porta serial:  fica-se preso ate' que chegue 
algum caracter.

     As  rotinas de I/O do KERMIT-80 devem  checar o  status 
da  porta  e ir fazer outra coisa se na~o for  necessario  um 
manuseio imediato da porta.  Isto permite conexa~o  de termi
nal  virtual,   interrupc,a~o pelo teclado   das  transmisso~es 
trancadas etc.  Em sistemas onde existe total  implementac,a~o 
de redirecionamento  de  I/O atrave's  do  IOBYTE, isto  pode  
ser   feito ligando a  definic,a~o  do  IOBYTE.   Em   outros,  
no  entanto,  instruc,o~es de IN e OUT referenciando os regis
tradores da porta devem ser usados.

     O  KERMIT-80,  versa~o  3.8  e  superiores,  incluem  um 
"relo'gio  nebuloso" que torna disponi'vel um time-out a  cada 
intervalo entre 5 e 20  segundos (dependendo da   velocidade  
do   processador  e  das  rotinas  do  sistema  operacional) 
durante  a espera das entradas esperadas que na~o aparecem na 
porta. Neste  caso,  automaticamente,  ocorre  uma  retrans
missa~o.   De  qualquer modo pode-se teclar  RETURN   durante  
uma  transmissa~o  para simular um time-out,  quando a trans
fere^ncia parecer parada.


.cp3
7.5.1. Baixando o KERMIT-80

     Se  voce^  ja' tem uma  versa~o do KERMIT no  seu micro  e 
quer  instalar uma nova, use a velha para conseguir a  nova. 
Se for um arquivo do tipo .COM, pode usa'-lo;  se for do tipo  
 .HEX, use o comando LOAD para produzir um arquivo .COM.

     Se  voce^ ainda na~o tem uma co'pia do KERMIT no seu micro 
nem  consegue  uma  emprestada  e  sua   u'nica   maneira  de  
conseguir  uma  e' se conectando ao host  de  um  C.P.D.  que 
distribua o  KERMIT, deve ler esta sec,a~o.

     Existem  va'rias  formas   de se  pegar   uma  co'pia  do  
KERMIT  de um  host o seu micro.  A mais fa'cil  e' "baixar" o 
arquivo .HEX pre'-compilado para a memo'ria de seu micro para, 
depois,  salva'-lo em disco. O  procedimento a seguir, embora 
longe de  ser a` prova de  erro humano,  deve permitir a voce^ 
conseguir uma co'pia do KERMIT  para o seu micro.  Depende do  
prompt  seu host ou,  pelo menos,  do  primeiro caracter  do 
prompt  dele,  sendo caracter que na~o aparec,a   num  arquivo 
 .HEX  (os  caracteres   va'lidos em um arquivo  .HEX  sa~o  os 
di'gitos de 0 a 9,  as letras maiu'sculas de A Z,  ":", RETURN  
e  line-feed's). Assim  que qualquer  outro  caracter apare
cer,  a  transfere^ncia termina.  Se o seu host na~o manda  um 
prompt que se enquadre neste esquema,  voce^ pode conseguir o 
mesmo efeito  incluindo "@" depois do fim  do seu arquivo no  
host,  antes de transmiti'-lo.  O programa abaixo procura por 
um  "@" (o prompt normal  do DEC-20,  hex 40).  O DEC-10 usa 
um ".", hex 2E.

     Procure   o arquivo .HEX apropriado  na a'rea  onde,  no 
host que voce^ tem acesso,  eata~o os mo'dulos do KERMIT. O que 
voce^ procura sera' algo do tipo  CPMROBIN.HEX,  CPMHEATH.HEX, 
CPMOSBOR.HEX etc.  Se na~o encontra'-lo,  procure  um do  tipo 
 .ASM ou  .M80 e  construa um .HEX usando um  cross-assembler 
(abaixo uma explicac,a~o de como fazer isto num IBM ou DEC-20) 
ou  enta~o traga o pro'prio fonte para o seu micro e  trabalhe 
nele.

     Conecte-se  ao  seu host  usando  um terminal   ou  uma  
facilidade   de emulac,a~o  de terminal.  Assegure-se que  seu  
host  na~o tem seu terminal em "page mode".  Por exemplo:  no 
DEC-20, de^ o comando

          EXEC TERMINAL NO PAUSE END-OF-PAGE

     Diga  ao host para mostrar o arquivo em hexadecimal  no 
seu terminal. Por exemplo, no DEC, de^ o comando

          TYPE KERMIT.HEX             (sem um RETURN  final)

     Volte  ao  seu micro.   Conecte-se  a um  disquete  com  
muito  espac,o.  Assegure-se que seu IOBYTE esta' com  RDR:  e 
PUN:  correspondendo   a  porta de I/O conectada  ao  DEC-20 
(normalmente  este  sera'  o caso).  Rode o DDT  e  entre   o 
seguinte  (os comenta'rios  na~o devem  ser  teclados;   esta~o 
aqui somente para explicar a voce^ o que esta' acontecendo):

-IKERMIT.HEX        ;arma o FCB para o arquivo KERMIT.HEX.
-A100               ;comec,a a entrar Assembly a partir de 100.
0100  LXI     H,FFE ;onde colocar o arquivo hexa.
0103  SHLD    300   ;salva o enderec,o.
0106  MVI     E,D   ;pega um RETURN.
0108  MVI     C,4   ;func,a~o de sai'da.
010A  CALL    5
010D  MVI     C,3   ;func,a~o de entrada.
010F  CALL    5
0112  ANI     7F    ;desliga a paridade.
0114  CPI     40    ;e' o prompt do DEC-20?
0116  JZ      124   ;sim: temos todo o arquivo.
0119  LHLD    300   ;pega o pointer.
011C  MOV     M,A   ;na~o: guarda o caracter.
011D  INX     H     ;incrementa o pointer.
011E  SHLD    300   ;salva o pointer.
0121  JMP     10D   ;volta.
0124  MVI     A,1A  ;pega um CONTROL-Z.
0126  LHLD    300   ;pega o pointer.
0129  MOV     M,A   ;guarda o caracter.
012A  SHLD    300   ;salva o pointer.
012D  LXI     H,1000;pointer no arquivo.
0130  SHLD    310   ;salva o pointer.
0133  MVI     C,16  ;max file.
0135  LXI     D,5C
0138  CALL    5
013B  LHLD    310   ;pega o pointer do arquivo.
013E  XCHG          ;poe em DE.
013F  MVI     C,1A  ;arma DMA.
0141  CALL    5
0144  MVI     C,15  ;grava DMA no arquivo.
0146  LXI     D,5C
0149  CALL    5
014C  LHLD    310   ;pega pointer do arquivo.
014F  LXI     D,80  ;tamanho do DMA.
0152  DAD     D     ;ajusta o pointer do arquivo.
0153  SHLD    310   ;salva-o.
0156  LDA     301   ;pega o byte de mais alta ordem.
0159  CMP     H     ;passamos do fim?
015A  JM      170   ;sim.
015D  JZ      163   ;talvez...
0160  JMP     13B   ;na~o.
0163  LDA     300   ;pega o byte de mais baixa ordem.
0166  CMP     L     ;passamos do fim??
0167  JM      170   ;sim!
016A  JZ      170   ;sim!
016D  JMP     13B   ;ainda na~o.
0170  MVI     C,10  ;close.
0172  LXI     D,5C
0175  CALL    5
0178  RET
0179
-G100,179           ;executando o programa...
-                   ;                       ... re-boot.

     Agora  deve  haver um arquivo  KERMIT.HEX no  seu  dis
quete.   Carregue-o  usando  o comando LOAD para produzir  o 
arquivo  KERMIT.COM,  que deve ser uma versa~o executa'vel  do  
KERMIT.   Observe  que  os   arquivos  .HEX  do   CP/M   tem  
checksums   em  cada  linha.  Se  houve  qualquer  erro   de 
transmissa~o  durante o processo  de baixa'-lo,  o  loader  do 
CP/M   notara'  um   checksum inva'lido  e dara'  uma  mensagem  
tipo  "ILLEGAL FORMAT".  Se  for este o seu caso,  repita  o 
processo ou ajeite as coisas localmente.

     VOCE^ DEVE TER, AGORA, UMA VERSA~O FUNCIONANDO DO KERMIT. 

     PARABE'NS!
     ---------



.cp3
7.5.2. Construindo um KERMIT

     O   fonte para  o KERMIT-80  deve estar  disponi'vel  no  
seu host.  Foi escrito usando-se  mneumo^nicos de   Assembler 
8080,   porisso  podera'  ser montado na maioria dos 8080's e 
Z80's  usando-se o montador fornecido com o sistema   opera
cional,  armando   as chaves  de montagem   desejadas   como 
explicado  abaixo.  Se voce^ na~o o tem,  tente pega'-lo de seu 
host atrave's do procedimento explicado acima.

     Um  cross-assembler fornecido roda no DEC-10 e  DEC-20, 
chamado MAC80, de  Bruce  Tanner (Cerritos  College)  e pode  
ser   usado  para   montar o KERMIT-80 como  mostrado  neste 
exemplo (para TOPS-10):

     Copie  o fonte  do KERMIT para  o seu  direto'rio   como 
KERMIT.M80.   As regras  para atribuic,a~o  de nomes do  TOPS-
10  tem  que  ser obedecidas.  O fonte tem um nome  do  tipo 
CPMK38.M80 (KERMIT para CP/M, versa~o 3.8).

     Edite  o  KERMIT.M80  para armar a  chave  de  montagem 
condicional para a sua  ma'quina. Elas esta~o bem no princi'pio  
do  arquivo.  A que se refere a sua ma'quina deve ser  armada 
para TRUE e todas as outras para FALSE. As chaves atualmente 
disponi'veis sa~o:

BRAIN  SUPERBRAIN (INTERTEC)
HEATH  H89 (HEATH/ZENITH)
Z100   Z100 (ZENITH), rodando sob CP/M
OSI    OHIO SCIENTIFIC
ROBIN  "ROBIN" (VT18X, da DEC)
DMII   DECMATE II WORD PROCESSOR, sob CP/M
VECTOR VECTOR GRAPHICS
GENER  qualquer sistema CP/M que implemente o IOBYTE
APPLE  Apple II, com Z80-SOFTCARD e MICROMODEM II, da HAYES
TRS80  TRS-80 II, sob o CP/M 2.25 da LIFEBOAT
OSBRN1 OSBORNE-1
TELCON ZORBA (TELCON)
KPII   KAYPRO-II
CPM3   CP/M Plus (3.0)

     Leia  o fonte.  Podem  haver novas  chaves,   inclui'das 
depois que  este manual ficou pronto.

     A armac,a~o do "IBM-FLAG" depende da instalac,a~o.  Na ver
sa~o  distribui'da  pela  CUCCA,  arma  "half  duplex",  "line 
handshaking"  (usando CONTROL-Q  como caracter de virada  da 
linha) liga o eco local e a paridade em MARK.  Fac,a as alte
rac,o~es adequadas para o seu uso.

     O default  para os arquivos  e'  ASCII.  Isto  significa  
que   quando  arquivos   de  texto   sa~o   transmitidos   de  
sistemas   CP/M,   na~o  sera~o transmitidos caracteres extras 
depois da marca de fim de arquivo mas  os arquivos  bina'rios 
podem  ser truncados erroneamente  se o usua'rio na~o se  lem
brar  de armar (com o  comando SET FILE) para   bina'rio,  de 
modo a  na~o perder  dados ao transmitir  este tipo de arqui
vo  (mas arquivos de texto normalmente tera~o lixo depois  do 
fim, ainda no u'ltimo bloco).

     Rode o MAC80:

     @MAC80
     *KERMIT,=KERMIT
     *^Z

     Como resultado, voce^ tera' KERMIT.HEX no seu direto'rio.

     Use   o  KERMIT  para  transferir KERMIT.HEX   para   o  
seu  micro (ou baixe-o, usando o programa listado acima.

     No micro,  de^ o  comando CP/M: "A>LOAD KERMIT"  e tera', 
pronto  para ser executado, o KERMIT.COM.


.cp3
7.5.3 O KERMIT-80 gene'rico

     Se  o  seu sistema CP/M implementa redirecionamento  de 
I/O atrave's  do mecanismo  (opcional)  de  IOBYTE, provavel
mente   voce^   podera'  rodar o  KERMIT  gene'rico  nele,  com 
poucas  ou  nenhuma alterac,a~o.  O IOBYTE standard do CP/M  e' 
armado como descrito abaixo.


.cp9
Associac,o~es feitas atrave's do I/O Byte
(4 campos de 2 bits, enderec,o 3)

bits 6 e 7    (LIST)
----------
         0    TTY:
         1    CRT:
         2    LPT:
         3    UL1:

.cp6
bits 4 e 5    (PUNCH)
----------
         0    TTY:
         1    PUN:
         2    UP1:
         3    UP2:

.cp6
bits 2 e 3    (READER)
----------
         0    TTY:
         1    RDR:
         2    UR1:
         3    UR2:

.cp6
bits 0 e 1    (CONSOLE)
----------
         0    TTY:
         1    CRT:
         2    BAT: (use reader=input, list=output)
         3    UC1:

(Aqui, o bit 0 e' o menos significativo, "direita".)

     O  redirecionamento  de  I/O e'  conseguido  trocando  o 
IOBYTE entre dois valores:  "BATCH I/O"  e "NORMAL  I/O". No  
modo  "normal",   o teclado e' definido como sendo o console; 
no  modo  "batch",  o console sera' a   porta  serial.   Este  
chaveamento  e'   necessa'rio porque  o  console  e'   o  u'nico 
dispositivo  que pode  ser testado  para se  saber se  algum 
input  esta' disponi'vel  mas o KERMIT  deve mudar de  um para 
outro  (teclado e porta serial) para procurar inputs.   Aqui 
esta~o as definic,o~es  de modo de  I/O default e batch  usadas 
no KERMIT-80 gene'rico "padra~o":

DEFIO   EQU    095H  ;I/O BYTE CON=CRT, LIST=LPT, READER=RDR
BATIO   EQU    056   ;I/O BYTE CON=BAT, LIST=CRT, READER=RDR

     Outros sistemas podem  ter outros dispositivos  lo'gicos 
que   apontem para  a  porta  serial.  Em  tais  casos  voce^  
precisara'   redefinir tais si'mbolos para  que apontem   para 
os   dispositivos  certos  e re-montar  o programa   (com  a 
chave  de montagem GENER armada em TRUE,  todas as outras em 
FALSE).
.pa
.he                              O conjunto de caracteres ASCII
Ape^ndice A: O conjunto de caracteres ASCII (ANSI X3.4-1968)

     Existem   128 caracteres no ASCII   (American  national 
Standard  Code for Information Interchange).  Os  caracteres 
esta~o  listados  em  ordem  dos valores  ASCII;  as  colunas 
aparecem indicando:

   ASCII (DEC/OCT/HEX) com as representac,o~es decimal,  octal 
              e hexadecimal;
   EBCDIC HEX equivalente EBCDIC para a conversa~o do KERMIT
   CHAR       nome ou representac,a~o gra'fica do caracter
   OBS.       descric,a~o do caracter

     O    primeiro   grupo  consiste   de    caracteres   de  
controle,  na~o imprimi'veis:

.....ASCII.....   EBCDIC
DEC   OCT   HEX    HEX     CHAR   OBS.

000   000    00     00     NUL    ^@, NULL, IDLE
001   001    01     01     SOH    ^A, START OF HEADING
002   002    02     02     STX    ^B, START OF TEXT
003   003    03     03     ETX    ^C, END OF TEXT
004   004    04     37     EDT    ^D, END OF TRANSM.
005   005    05     2D     ENQ    ^E, ENQUIRY
006   006    06     2E     ACK    ^F, ACKNOWLEDGE
007   007    07     2F     BEL    ^G, BELL
008   010    08     16     BS     ^H, BACK-SPACE
009   011    09     05     HT     ^I, HORIZONTAL TAB
010   012    0A     25     LF     ^J, LINE-FEED
011   013    0B     0B     VT     ^K, VERTICAL TAB
012   014    0C     0C     FF     ^L, FORM-FEED
013   015    0D     0D     CR     ^M, CARRIAGE RETURN
014   016    0E     0E     SO     ^N, SHIFT-OUT
015   017    0F     0F     SI     ^O, SHIFT-IN
016   020    10     10     DLE    ^P, DATA LINK ESCAPE
017   021    11     11     DC1    ^Q, DEV. CNTRL 1,XON
018   022    12     12     DC2    ^R, DEV. CNTRL 2
019   023    13     13     DC3    ^S, DEV. CNTRL 3,XOF
020   024    14     3C     DC4    ^T, DEV. CNTRL 4
021   025    15     3D     NAK    ^U, NEGATIVE ACK.
022   026    16     32     SYN    ^V, SYNCHRONOUS IDLE
023   027    17     26     ETB    ^W, END OF TX BLOCK
024   030    18     18     CAN    ^X, CANCEL
025   031    19     19     EM     ^Y, END OF MEDIUM
026   032    1A     3F     SUB    ^Z, SUBSTITUTE
027   033    1B     27     ESC    ^[, ESCAPE, PREFIX
028   034    1C     1C     FS     ^\, FILE SEPARATOR
029   035    1D     1D     GS     ^], GROUP SEPARATOR
030   036    1E     1E     RS     ^^, RECORD SEPARATOR
031   037    1F     1F     US     ^_, UNIT SEPARATOR
 
      Os quatro u'ltimos  sa~o normalmente  associados com  as 
verso~es   de  controle  de   barra-inversa,  fecha-colchete,  
circunflexo  e sublinhado, respectivamente mas alguns termi
nais  na~o transmitem tais caracteres  de controle.
      Os caracteres a seguir sa~o imprimi'veis:


em primeiro lugar, alguns caracteres de pontuac,a~o:

.....ASCII.....   EBCDIC
DEC   OCT   HEX    HEX     CHAR   OBS.

032   040    20     40     SP     espac,o
033   041    21     5A     !
034   042    22     7F     "
035   043    23     7B     #
036   044    24     5B     $
037   045    25     6C     %
038   046    26     50     &
039   047    27     7D     '
040   050    28     4D     (
041   051    29     5D     )
042   052    2A     5C     *
043   053    2B     4E     +
044   054    2C     6B     ,
045   055    2D     60     -
046   056    2E     4B     .
047   057    2F     61     /


e, agora, os caracteres nume'ricos:

.....ASCII.....   EBCDIC
DEC   OCT   HEX    HEX     CHAR   OBS.

048   060    30     F0     0
049   061    31     F1     1
050   062    32     F2     2
051   063    33     F3     3
052   064    34     F4     4
053   065    35     F5     5
054   066    36     F6     6
055   067    37     F7     7
056   070    38     F8     8
057   071    39     F9     9


mais caracteres de pontuac,a~o:

.....ASCII.....   EBCDIC
DEC   OCT   HEX    HEX     CHAR   OBS.

058   072    3A     7A     :
059   073    3B     5E     ;
060   074    3C     4C     <
061   075    3D     7E     =
062   076    3E     6E     >
063   077    3F     6F     ?
064   100    40     7C     @



caracteres alfabe'ticos maiu'sculos:

.....ASCII.....   EBCDIC
DEC   OCT   HEX    HEX     CHAR   OBS.

065   101    41     C1     A
066   102    42     C2     B
067   103    43     C3     C
068   104    44     C4     D
069   105    45     C5     E
070   106    46     C6     F
071   107    47     C7     G
072   110    48     C8     H
073   111    49     C9     I
074   112    4A     D1     J
075   113    4B     D2     K
076   114    4C     D3     L
077   115    4D     D4     M
078   116    4E     D5     N
079   117    4F     D6     O
080   120    50     D7     P
081   121    51     D8     Q
082   122    52     D9     R
083   123    53     E2     S
084   124    54     E3     Q
085   125    55     E4     U
086   126    56     E5     V
087   127    57     E6     W
088   130    58     E7     X
089   131    59     E8     Y
090   132    5A     E9     Z


mais caracteres de pontuac,a~o:

.....ASCII.....   EBCDIC
DEC   OCT   HEX    HEX     CHAR   OBS.

091   133    5B     AD     [      abre-colchete
092   134    5C     E0     \      barra-invertida
093   135    5D     BD     ]      fecha-colchete
094   136    5E     5F     ^      circunflexo
095   137    5F     6D     _      sublinhado
096   140    60     79     `      acento grave
.pa
caracteres alfabe'ticos minu'sculos:

.....ASCII.....   EBCDIC
DEC   OCT   HEX    HEX     CHAR   OBS.

097   141    61     81     a
098   142    62     82     b
099   143    63     83     c
100   144    64     84     d
101   145    65     85     e
102   146    66     86     f
103   147    67     87     g
104   150    68     88     h
105   151    69     89     i
106   152    6A     91     j
107   153    6B     92     k
108   154    6C     93     l
109   155    6D     94     m
110   156    6E     95     n
111   157    6F     96     o
112   160    70     97     p
113   161    71     98     q
114   162    72     99     r
115   163    73     A2     s
116   164    74     A3     t
117   165    75     A4     u
118   166    76     A5     v
119   167    77     A6     w
120   170    78     A7     x
121   171    79     A8     y
122   172    7A     A9     z


mais pontuac,a~o:

.....ASCII.....   EBCDIC
DEC   OCT   HEX    HEX     CHAR   OBS.

123   173    7B     C0     {      abre-chave
124   174    7C     4F     |      barra vertical
125   175    7D     D0     }      fecha-chave
126   176    7E     7E     ~      til


e, finalmente, mais um caracter na~o imprimi'vel

.....ASCII.....   EBCDIC
DEC   OCT   HEX    HEX     CHAR   OBS.

127   177    7F     07     DEL    delete, rubout

