ZINES — underground e-zine archive source
text size: CRT glow:
~/BRAZILIAN/WTC Zine/WTC Zine #02




  .^~`^',~`^'-_~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,

                        TEMPLO DA ZINE WU TANG CLAN...

                   TIRE SUAS DUVIDAS E MANDE SUGESTOES!

           OS EDITORES DA REVISTA ESTARAO PRONTOS PARA ATENDE - LO

   OBS: DIVULGUEM NOSSA ZINE EM TODOS CANTOS. []'pX_LARVA E CORPORACAO...

  .^~`^',~`^'-_~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,




          

	 ~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,

		      wU tAnG cLaN Z|N3 Corporation

	 ~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,


















                ** - CONTATOS IMEDIATOS.
                00 - DEDICATORIA
                01 - BATE PAPO INICIAL.
                02 - CONCEITOS BASICOS EM LINGUAGEM ASSEMBLY
                03 - CONCEITOS BASICOS EM LINGUAGEM "C"
                04 - CONCEITOS BASICOS EM LINGUAGEM "C++"
                05 - CONCEITOS BASICOS EM LINGUAGEM CLIPPER
                06 - CONCEITOS BASICOS EM LINGUAGEM DELPHI
                07 - CONCEITOS BASICOS EM LINGUAGEM TURBO PASCAL
                08 - CONCEITOS BASICOS EM VISUAL BASIC
                09 - PIADAS... HAHAshhahehe
                10 - RADIO AMADOR!!!
                11 - MUSICA! :))
                12 - DESAFIO
                13 - RECLAMACOES ;((
                14 - AGRADECIMENTOS...Tks ALL
                15 - ERRATAS... :))
                16 - ESPECIAL
                17 - PROCURA - SE
                18 - PROPAGANDAS :))


                           *CONTATOS IMEDIATOS*

Lembrando que para quem quiser entrar em contato com os membros da coorporacao
ou quiserem reclamar ou dar sugestoes ou qquer outra coisa do Zine mande um
e-mail para:
                         zinewutangclan@geocities.com

Agora, para quem quiser pegar o zine por meio das redes de msgs de um FREQ
pela RBT no node:
                       12:1211/56 do magic name WTCZINE

E soh mais uma coisa... lembrando q. a Zine estah hospedada em:
                    www.geocities.com/SiliconValley/Lab/4568/

sendo assim... vamos aas msgs!

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        From: CARLOS E C PIRES           To: WU TANG CLAN CORPORATION

 ->   Legal a idéia de fazer um zine, realmente faltam coisas desse tipo.
 ->  Mas gostaria de dar algumas sugestöes e fazer críticas construtivas:
   certo, isso eh bom! :))
    
->    1) Mais cuidado com a linguagem - se a idéia é passar informaçöes 
-> com alguma seriedade, o respeito ao português deve ser, na medida do 
-> possível, observado. Näo que um erro ou outro façam diferença, mas näo 
-> custa nada dar uma relida no texto para verificar a ortografia. Senäo, 
-> parece que foi escrito em alguns segundos e imediatamente mandado pros 
-> leitores, sem cuidado. E tenho certeza que vcs passaram um bom tempo 
-> fazendo o zine!
  hehehe eh bem por ai... demoramos um pouquinho... mas tudo bem. valeu
  a chamada de atencao.. vamos tentar ser mais rigorosos na questao do
  portugues porem quanto aos acentos, nao podemos fazer nada. a internet
  aceita acento porem na forma TEXTO o usuario que estiver com o linux ou
  o win 3.11 ou outra plataforma qualquer poderah se defrontar com o monstro
  ACENTO este poderah engoli - lo e deixa - lo embaracado! :))

->     2) Na parte de assembler, as informaçöes estäo corretas, mas achei
-> que os iniciantes, sem qualquer noçäo de programaçäo, teräo dificuldades 
-> em acompanhar. Sugiro que, no próximo "capítulo", vc coloque um 
-> programinha pra escrever "Olá mundo!" e daí explique as diretivas do 
-> assembler (com explicaçöes simples sobre a segmentaçäo da memória e 
-> pilha), os registradores, a instruçäo mov, a instruçäo int e pronto.
  Bom, eu tentei fazer isso ao maximo possivel, porem o zine nao eh apenas
  para iniciantes, eh para pessoas avancadas, e tudo mais... por isso tenho
  q. jogar um pouco para os dois lados, porem valeu o tok. tentei ser o mais
  explicativo possivel! :))

->     3) A seçäo de piadas rulez :)
 heheh vamos tentar melhora - la cada vez mais!

->     4) Que tal fazer uma interface pro zine, ao invés de lançar o texto
-> puro. Com os conhecimentos que vcs têm, dá pra fazer em Pascal, C/C++ ou 
-> até VB, bem simples. Dá um ar profissional ao zine.
  certo.. bom, esta ideia jah foi dada por outros leitores e estah em
  andamento, porem nao sei se vai ser tao rapidamente, mas algum dia o zine
  vai ter isso! :))

->     5) Faltou dizer qual é a periodicidade.
      hmmm. ai jah eh um graaande problema! pois todos ou trabalham, ou estu-
      dam, etc. ai fica complicado, mas aos poucos a gente vai tentando
      melhorar o tempo de lancamento, mas data exata serah dificil decidir
      alguma..! :((

->     Apenas algumas opiniöes, mas foi vc quem pediu... :) Continue com o 
-> zine, é inacreditável o número de pessoas que lêem e permanecem caladas, 
-> mas esperando ansiosamente os próximos números.
        bom, pedi mesmo!!! hehehe qto maior as criticas, vamos cada vez
        melhorando mais e mais o zine. Eu ia dizer q. era ateh melhor vcs.
        dando dicas pois o zine eh pra vcs. e tal! mas parei e refleti!
        pra vcs. nada... o zine eh NOSSO! ou seja, de vcs. e nosso, pois
        assim como voces aprendem, nohs tbm aprendemos pelo motivo da
        pesquisa ou entao resgatando algo q. nao lembravamos mais, sempre que
        "ensinamos", estamos aprendendo! por isso que nao desanimamos muito
        ao escrever o zine! :))
        Agora quanto ao pessoal q. fica calado. isso eh q. me irrita, po
        a gente faz moh sacrificio e tal, e o pessoal nem fala nada! poxa
        podia mandar uma msg... parabens! ou entao outra ahhh vai se danar
        esse zine eh um lixo! hehehe qquer coisa! :)) mas diga algo! ;))

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
         From: Cleber                     To: WU TANG CLAN CORPORATION

-> Caros caras!
   opa...

-> Eu nem sei aonde, consegui o zine de voces.
   O q. importa eh q. estah com ele! ;))

-> Era algo assim que eu tava precisando! Eu cansei de so ler esses zines
-> hackers que nada explicam de programacao!
   eh.. agora alguns zines comecaram a falar de programacao... porem ainda eh
   pouco precisamos de algo mais dedicado a isso! :))

-> Eu nao sou programador, muito pelo contrario!! Eu a um mes atras
-> comecei a me interessar por programacao. So sei um pouco de Basic, to
-> pegando as manhas com algoritmos e logica com um livro que eu descolei,
   hmmm. legal.. Basic eh digamos que a linguagem mais facil de ser entendida
   e que da origem a diversas outras linguages origem digo no sentido de
   programacao.. quer dizer.. a maioria das linguagens usam de alguma forma
   a estruturacao do Basic!

-> e to aprendendo legal Cobol. Alias, vcs nem citaram o Cobol no e-zine de
-> vcs. Pq? heheh eh realmente cobol eh extremamente velho.
   Bom.. nao foi bem isso... apesar de velho.. nao conseguimos ninguem que
   programasse nessa linguagem e que estivesse afim de escrever no zine,
   porem como disse o zine eh um livro aberto e todos podem fazer parte, 
   basta para isso vontade de participar e escrever akilo que sabe! :)
   se tiver interessado em ajudar na parte de cobol serah bem vindo aa
   corporacao... :))

-> Eu tambem comecei a ver um pouco de Pascal, Clipper e Assembler.
   Isso eh bom...

-> Mas assembler eu desisti, pois eh extremamente complexo aquela merda.
-> baixo nivel sucks.
   Bom.. nao eh bem por ai.. eu adoro assembly.. claro q. ele eh mais
   complexo.. talvez por isso eu gosto dele! ;)) hehe mas tipo eh bom
   saber +/- como ele trabalha, pois sem ele as outras linguagens nao sao
   nada.. tipo mesmo C e bom e tudo mais.. mas se vc. quiser uma melhoria
   em seus programas vc. precisa saber um pouco de ASM pelo menos o basico
   o que nao eh muito complicado e estou tentando mostrar o melhor caminho
   pela zine.. digo melhor, pois foi como aprendi.. claro q. corri atras,
   mas...

-> Pascal e clipper eu dei uma parada, mas vou voltar agora!
   Certo... volte sim... tipo jah q. vc. conhece um pouco das duas...
   experimente o delphi tbm... ele usa uma estruturacao como a do pascal
   com algumas diferencas, mas lembra muito o clipper.. e tem uma ventagem,
   voce pode usar graficos.. por exemplo pode criar um programa que alem de
   cadastrar os clientes, mostre a foto dele por meio de scanners ou cameras.

->  Eu gostaria de pedir pra voces, na parte de radio-amador comecarem
-> desde uma parte mais basica e coisa e tal! Eu nem entendo desses lances,
-> embora eu estude eletronica e meu professor curtia isso.
   certo... bom a parte de radio amador sao mais dicas de modulacao e tal
   o que vc. deve fazer para entrar em uma conversa, como fazer.. etc.
   nao eh nada radical na parte eletronica... quem sabe mais pra frente
   usaremos algo assim....

-> Vou dar um pulo na BBS de vcs! Eu me amarro em bbs. To ate pra montar
-> a minha; so ta faltando tempo e dedicacao. heheh RA eh manero e bacana; mas
-> PCboard da muito trampo!
   eh isso eh realmente... porem eu confesso PCB eh bem melhor q. RA e tipo
   nosso bbs acho q. deu uma parada estamos com falta de tempo($$) heheh
   assim q. conseguirmos um zip-drive o bbs volta.. eh q. as vezes da pane
   nos micros e tal.. e sem o backup do bbs nao dah... cancei de criar
   varias vezes o bbs,ai assim com o zip teremos o backup e tudo voltara
   ao normal! :))

-> Enfim caras, parabens pelo zine  de vcs e continuem fazendo esse
-> trabalho que ta animal! Tomara que vcs consigam fazer rapido o proximo
-> numero, que eu to loco pra aprender mais algumas coisas!
   hehe valeu... mas sei lah.. talvez demore um pouco pois envolve tempo
   e nao o tempo de um soh.. porem o tempo de todos! :)) mas faremos
   o possivel para tentar lancar o mais rapido possivel! :))

->         Falow
->      Obrigado pela atencao
   ok... T+


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    From: Paulo Sergio                     To: WU TANG CLAN CORPORATION

-> valeu !
-> este site me eh util !
 beleza... precisando de algo eh soh avisar!

-> um abraco
  pra vc. tbm!


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
   From: Joao Gilberto Magalhaes               To: WU TANG CLAN CORPORATION

-> Achei legal a publicacao de voces. Muito interessante. Quando fizer uma
-> proxima atualizacao colocarei um link para vcs...
   certo.. obrigado pela forca!

-> Agora uma sugestao:
   vamos nessa...

-> 1. Voces precisam divulgar mais o seu trabalho :)
   certo... isso eh verdade.. entramos na rede com pouca potencia, porem ela
   foi ateh q. bem divulgada em bbss de Sao Paulo e espero que o pessoal
   tenha espalhado pelas bbss do Brasil inteiro! :))

-> 2. A internet eh bastante dinamica. Que tal se vcs dividissem a edicao em
-> topicos com HyperLinks? Dessa forma o Leitor poderia ler o assunto
-> especifico do seu interesse. ao inves de um super texto para ser lido de
-> uma vez? Cansa... Apesar de bom...
   certo... bom estamos pretendendo lancar ou nessa ou na numero 3
   um programa q. lerah os textos e mostrah por partes, com isso iremos
   acrescentar alguns caracteres no texto, porem ficarah muito melhor sua
   leitura pois aparecerah menus de escolha e tal... agora qto a internet
   e a divisao ai jah foi feito. Valeu pela dica!

-> 3. Deixem o texto integral apenas na opcao de DownLoad.
   certo, isso tbm. jah foi feito. 

-> Espero que possa ter contribuido com alguma coisa...
   Ok.. valeu pelas dicas! :)) 

-> []s e ate mais em minha home.
   t+...


                  Px_LARVA ESPOLETA
                           EAGLE'S POWER
                                   LaSt^WaRRioR


.~`^'-_!+=/.,~`^'-_!.~`@$^ 01 - BATE PAPO INICIAL .~.~`^'-_!+=/.,~`^'-_!`^'-_!


Bom, Estamos pronto para lancar o segundo numero da nossa Zine que me parece
estar ganhando alguns fans... heheh quer dizer.. alguns leitores! :)) Bom
Algumas pessoas reclamaram de algumas falhas na escrita nao no conteudo mais
nos acentos, nas expressoes... etc... bom... muita coisa.. nao tem acento
mesmo.. pois nao sao todos os leitores que usam Windows ou Dos... cada um tem
sua plataforma... e como em todas as letras(nao os acentos) sao iguais intaum
resolvemos optar por uma leitura melhor da zine! :)) mas tudo bem... isso sao
coisas simples.. :))

                                                          [Eagle's Power]'s

Entao eh isso ai malucada..ehehe como o Eagle jah disse, vamos jogar mais um
pouco de lenha na fogueira pra festa nao acabar... eh dessa maneira eh dessa
forma..eheh tah dodio tha danado mas aI bando de doido, recebemos bastante
incentivos e muitas criticas construtivas tipo: AH SE MATA!!! ehheh brinca-
deira mas recebemos bastante conselhos, e estamos observando que o povo tah
gostando da baguncera...eheh entao beleza que pura danado, vamos queimando
tudo e cada vez mais escrevendo, ou escrevendo tudo e cada vez queimando mais.
eheheheheh.
Estamos muito contente de que tenham lido o Z|N3 e gostado, se nao gostou eu
tenho uma solucao logica..ehehe, vai lendo que voce se acostuma. Malucada
entao vamos arregacar tudo mais tudo por cah BELEZAAAAA!!!
De inicio vou dizendo que vaum ocorrer algumas inovacoes .... com o Z|NE,
vamos dar um aspecto mais profissional pra revista do tipo de um programa
feito para leitura da revista, do tipo tecle ak. para Linguagem 'C' , ak. pra
'sair' ...... etc! e seria bem melhor, pois as materias ficariam separadas e
assim tmb. podemos facilitar a sua leitura..ehhehehhihaihaiiahihaih, entao
deixa eu ver se tem mais alguma coisa pra escrever.. hmmmmmmmmmmmmmmmm ah jah
sei, tem outra coisera q. eu tava esquecendo, tipo eu mais o Fabio Freire,
estamos montando uma parte da Z|N3, na qual seria dedicada aos magrelos....
ehheehehhehe e o que vou adiantando eh o titulo da bagaca..ehehhehehe seria
"OS MAGRELOS II A REVOLTA DA CHIBATADA." (Os dois is(II), nao siguinifica que
eh a segunda versao, eh uma foto minha e do Fabio Freire..ehehehehe, e a parte
da chibatada eu nao sei pq. ohhhh, mas achei que ficaria legal..ehehahihiahha
...mas entao beleza, seria bem assim:
 
                                          "\Ì/"   "\Ì/"
  OS MAGRELOS II A REVOLTA DA CHIBATADA   ./\.     ./\.
 
Hmmmmmm, fugindo do assunto dos magrelos, eu queria dizer que se tiver algum
malucao ai afim de dar uma forca..eeheheh soh dah um toque falora? mas beleza
tudo legal entao, vamos agitar as bagacera agora........comece a ler, mas nao
PARRRRRRRRREEEEEEEEEEEEE !!!!!!!!!!!!! morreu!
 
▒00þ╩ÚÚÚÚڣثë§
§╩tæ▒00þ╩ÚÚÚÚÚ£        Obs.: sua copia eh PIRATA!
Ø«ë£Ø«ë§╩tæ▒00þ        ou ocorreu um erro na
                       descompactacao.

                                                        []'pX


                                                       \  os mesmos malucos
                                                       /  da primeira formacao
                                                       \  continuam a bitolar
                  Px_LARVA ESPOLETA                    /  a sua mente, mas uma
                           EAGLE'S POWER               \  coisa eh certa,
                                    LaSt^WaRRioR       /  nenhum de nos ak
                                                       \  tem certeza de nada
                                                       /  entao......
                                                       \  apenas LEIA!
                                                      

.~`^'-_!=+,~`^! 02 - CONCEITOS BASICOS EM LINGUAGEM ASSEMBLY ~`^'-_!+=/.,~`^'*

Operadores Basicos/Avancados

Sintaxe: MOV Destino,Fonte
exemplo: MOV AX,3
Descricao: Move um valor para um registrador ou variavel definida pelo
           programador
Explicacao: AX seria o registrador, e 3 o valor que voce iria colocar em AX
            porem voce pode mover valores entre dois registradores e outras
            coisas, veja alguns exemplos:
            MOV AX,BX
            MOV TESTE,AX
            onde teste eh uma variavel definida por voce(programador)
Simplificacao: O MOV seria a mesma coisa que usar AX=3,TESTE=3, etc...
              

ADD Destino,Fonte     - O comando seria usado na seguinte forma:
                        "ADD ax,bx" ax iria conter na forma mais
                        groceira de se dizer a fonte e o destino..
                        mas como assim!? bom, esse funcao faz o seguinte:
                        Pega o valor de ax e soma com o valor do outro
                        registrador ou numero... ai coloca o resultado
                        no proprio ax. seria o mesmo que:
                        ax = 10, bx = 5, sendo assim, ax=15 pelo simples
                        motivo de (10+5)=15 :))
                        ax=ax+bx
                        ax=10+5
                        ax=15

SUB Destino,Fonte     - O comando seria usado na seguinte forma:
                        "SUB ax,bx" ax sera subtraido com o valor
                        contido em bx, eh o mesmo caso do ADD explicado
                        acima. porem ao inves de somar subtrai....
                        Seria o mesmo que:
                        Digamos que ax = 10, e que bx = 5, sendo assim,
                        ax no final seria igual a 5, pois:
                        ax=ax-bx
                        ax=10-5
                        ax=5

INC destino           - O comando seria usado na seguinte forma:
                        "INC AX"
                        este eh mais simples, apenas soma o registrador
                        com +1, seria o mesmo que:
                        AX=AX+1

DEC destino           - O comando seria usado na seguinte forma:
                        "DEC AX"
                        este eh mais simples, apenas subtrai o registrador
                        com -1, seria o mesmo que:
                        AX=AX-1
                        
AND destino,Fonte     - Conjuncao de operadores Bit a Bit
                        Veja a tabela:

                      ┌───────────┬───────────┬─────────────┐
                      │   Fonte   │  Destino  │  » Saida «  │
                      ├───────────┼───────────┼─────────────┤
                      │     1     │     1     │      1      │
                      ├───────────┼───────────┼─────────────┤
                      │     1     │     0     │      0      │
                      ├───────────┼───────────┼─────────────┤
                      │     0     │     1     │      0      │
                      ├───────────┼───────────┼─────────────┤
                      │     0     │     0     │      0      │
                      └───────────┴───────────┴─────────────┘

                        O operador AND funciona desta forma,
                        sempre que o valor fonte e o valor
                        destino forem 1 o resultado sera 1
                        caso contrario o resultado sera 0.
                        Atencao, ele checa numero por numero
                        mas como!? bom, pelo que sabemos, o
                        assembly trabalha com numeros bina-
                        rios por isso eh complexo, mas para
                        nos ajudar inventaram os numeros de-
                        cimais e hexa.... Bom, mas meso que
                        usamos decimal ou hexa, o assembly
                        trabalha com binario, para isso o
                        compilador converte esse numero que
                        voce usou(caso jah nao esteja) para
                        binario, com isso ele pode trabalhar
                        com os numeros de 1 em 1, veja o exem-
                        plo BINARIO que tambem pode ser usado
                        e eu considero mais simples que os
                        decimais.....
                        MOV AL,01010101b ;lembrando que AL tem 8 bits
                        AND AL,10001011b ;agora vamos ao resultado
                              -----------
                               00000001b ;pronto em al ficaria isso!

OR  Destino,Fonte     - Logico Incluso OR 
                        Veja a tabela:

                      ┌───────────┬───────────┬─────────────┐
                      │   Fonte   │  Destino  │  » Saida «  │
                      ├───────────┼───────────┼─────────────┤
                      │     1     │     1     │      1      │
                      ├───────────┼───────────┼─────────────┤
                      │     1     │     0     │      1      │
                      ├───────────┼───────────┼─────────────┤
                      │     0     │     1     │      1      │
                      ├───────────┼───────────┼─────────────┤
                      │     0     │     0     │      0      │
                      └───────────┴───────────┴─────────────┘

                        O operador OR funciona desta forma,
                        sempre que o valor fonte e o valor
                        destino forem 0 o resultado sera 0
                        caso contrario o resultado sera 1.
                        MOV AL,01010101b ;lembrando que AL tem 8 bits
                        OR  AL,10001011b ;agora vamos ao resultado
                              -----------
                               11011111  ;pronto em al ficaria isso!

XOR                   - OR Exclusivo
                        Veja a tabela:

                      ┌───────────┬───────────┬─────────────┐
                      │   Fonte   │  Destino  │  » Saida «  │
                      ├───────────┼───────────┼─────────────┤
                      │     1     │     1     │      0      │
                      ├───────────┼───────────┼─────────────┤
                      │     1     │     0     │      1      │
                      ├───────────┼───────────┼─────────────┤
                      │     0     │     1     │      1      │
                      ├───────────┼───────────┼─────────────┤
                      │     0     │     0     │      0      │
                      └───────────┴───────────┴─────────────┘

                        O operador XOR funciona desta forma,
                        sempre que o valor fonte e o valor
                        destino forem 0 ou 1 o resultado sera
                        0 caso contrario o resultado sera 1.
                        MOV AL,01010101b ;lembrando que AL tem 8 bits
                        XOR AL,10001011b ;agora vamos ao resultado
                              -----------
                               11011110  ;pronto em al ficaria isso!


NOT                   - Inverte todos os BITS de um BYTE ou WORD
                        exemplo: MOV AL,00001111b
                                 NOT AL
                        a entrada foi 00001111b, logo apos o NOT
                        ficarah: 11110000b
                        simples nao!? mas muito util!

TEST Destino,Fonte     - O comando seria usado na seguinte forma:
                        "TEST ax,10" os dois valores serao testados
                        bit a bit e ao contrario de AND que salva o valor
                        na variavel de destino, ele apenas altera o estado
                        dos FLAGS. Sendo Assim, vc. podera usar os comandos
                        de salto como JMP, JE , etc.. q. veremos mais adiante.

SHR destino,Fonte     - Mudanca aritimetica da direita,
                        divide o numero por Fonte^2, sintaxe:
                        "SHR ax,2" ira dividir ax por 4, pois (2^2=4)

SHL destino,Fonte     - Mudanca aritimetica da esquerda,
                        multiplica o numero por Fonte^2, sintaxe:
                        "SHL ax,2" ira multiplicar ax por 4, pois (2^2=4)

    Í───────────À
    ║ SAL e SAR ║
    Ë───────────¢

    SAL funciona da mesma maneira que SHL.

        SAR: ┌─────┐
             │    ┌┴─────────────────┐      ┌─────┐
             └───>│                  │─────>│Carry│
                  └──────────────────┘      └─────┘
                 msb                lsb

    SAL desloca todos os bits para a direita (o ultimo bit vai para o flag
    carry) e repete o conteudo do antigo ultimo bit (que foi deslocado).

    SAR eh a abreviacao de SHift Arithmetic Right. Sendo um deslocamento
    aritimético, näo poderia se desconsiderar o sinal do dado deslocado
    (dai o motivo de repetir o bit mais significativo!).


    Í───────────À
    ║ RCL e RCR ║
    Ë───────────¢

        RCL:
           ┌────────────────────────────────────────┐
           │                                        │
           │    ┌─────┐     ┌──────────────────┐    │
           └────┤Carry│<────│                  │<───┘
                └─────┘     └──────────────────┘
                           msb                lsb


        RCR:
            ┌──────────────────────────────────────┐
            │                                      │
            │   ┌──────────────────┐      ┌─────┐  │
            └──>│                  │─────>│Carry├──┘
                └──────────────────┘      └─────┘
               msb                lsb

    RCR  e  RCL  rotacionam  o  dado  "passando  pelo  carry".  Isto
significa que o bit  menos  significativo  (no  caso  de  ROR)  será
colocado  no  flag  de carry e que o conteúdo antigo deste flag será
colocado no bit mais significativo do dado.


    Í───────────À
    ║ ROL e ROR ║
    Ë───────────¢

        ROL:
                          ┌─────────────────────────┐
                          │                         │
                ┌─────┐   │ ┌──────────────────┐    │
                │Carry│<──┴─│                  │<───┘
                └─────┘     └──────────────────┘
                           msb                lsb


        ROR:
            ┌─────────────────────────┐
            │                         │
            │   ┌──────────────────┐  │   ┌─────┐
            └──>│                  │──┴──>│Carry│
                └──────────────────┘      └─────┘
               msb                lsb

    Aqui a rotaçao e' feita  da  maneira correta...  o flag de carry
apenas indica o ultimo bit que "saiu" e foi para o outro lado...

    A sintaxe dessas instruçöes é a seguinte:

 ┌─────────────────────────────────────────────────────────────────┐
 │  SHL AX,1                                                       │
 │  SHR BL,1                                                       │
 │  RCL DX,CL                                                      │
 │  ROL ES:[DI],CL                                                 │
 └─────────────────────────────────────────────────────────────────┘

    Note que o segundo operando é  um contador do número de rotaçöes
ou shifts seräo efetuadas.  Nos microprocessadores 80286  em  diante
pode-se usar um valor diferente de 1, no 8088/8086 näo pode!

    Repare  também  que  podemos  usar  APENAS o registrador CL como
operando da direita se quisermos usar algum registrador!


 ■ Multiplicaçäo:

    Os  processadores  da   família   80x86  possuem  instruçöes  de
multiplicaçäo e divisäo  inteiras  (ponto  flutuante fica pro 8087).
Alguns cuidados devem ser tomados quando usarmos  uma  instruçäo  de
divisäo (que será vista mais adiante!).

    Uma   coisa   interessante   com   a   multiplicaçäo  é  que  se
multiplicarmos dois registradores de  16  bits obteremos o resultado
necessariamente em 32 bits.   O  par  de  registradores  DX e AX säo
usados para armazenar esse número de 32 bits da seguinte  forma:  DX
será a word mais significativa e AX a menos significativa.

    Por exemplo, se  multiplicarmos  0FFFFh  por  0FFFFh  obteremos:
0FFFE0001h (DX = 0FFFEh e AX = 0001h).

    Eis  a  regra  para  descobrir  o  tamanho  do restultado de uma
operaçäo de multiplicaçäo:

                ┌─────────────────────────────────┐
                │             A * B = M           │
                ├──────────┬───────────┬──────────┤
                │    A     │     B     │     M    │
                ├──────────┼───────────┼──────────┤
                │  8 bits  │   8 bits  │  16 bits │
                │          │           │          │
                │ 16 bits  │  16 bits  │  32 bits │
                └──────────┴───────────┴──────────┘

    A multiplicaçäo sempre ocorrerá entre  o acumulador (AL ou AX) e
um outro operando. Eis a sintaxe das instruçöes:

 ┌────────────────────────────────────────────────────────────────┐
 │  MUL BL      ; AX = AL * BL                                    │
 │  IMUL CX     ; DX:AX = AX * CX                                 │
 └────────────────────────────────────────────────────────────────┘

    A primeira instruçäo (MUL) näo considera o sinal dos  operandos.
Neste  caso, como BL é de 8 bits, a multiplicaçäo se dará entre BL e
AL e o resultado será armazenado em AX.

    A segunda instruçäo leva  em  consideraçäo o sinal dos operandos
e, como CX é de 16 bits, a multiplicaçäo se dará entre CX e AX  e  o
restultado  será armazenado em DX e AX.  Lembrando que o sinal de um
número inteiro depende do seu bit mais significativo!


 ■ Divisäo:

    Precisamos tomar cuidado com a  divisäo pelo seguinte motivo: Se
o resultado näo couber no  registrador destino, um erro de "Division
by zero" ocorrerá  (isto  näo  está  perfeitamente  documentado  nos
diversos  manuais  que li enquanto estudava assembly 80x86...  Vim a
descobrir este 'macete' numa  antiga  ediçäo  da revista PC MAGAZINE
americana).  Outro cuidado é com o divisor...  se for 0 o mesmo erro
ocorrerá!

    A  divisäo  pode ser feita entre um número de 32 bits e um de 16
ou entre um de 16 e um de 8, veja a tabela:

                ┌────────────────────────────────┐
                │        A / B = Q e resto       │
                ├──────────┬───────────┬─────────┤
                │    A     │     B     │Q e resto│
                ├──────────┼───────────┼─────────┤
                │ 32 bits  │  16 bits  │ 16 bits │
                │          │           │         │
                │ 16 bits  │   8 bits  │  8 bits │
                └──────────┴───────────┴─────────┘

    Assim como na multiplicaçäo  o  número  (dividendo) de 32 bits é
armazenado em DX e AX.

    Depois da divisäo o quociente é armazenado em AL e o resto em AH
(no caso de divisäo 16/8 bits) ou o quociente fica em AX e  o  resto
em DX (no caso de divisäo 32/8 bits).

    Exemplo da sintaxe:

 ┌─────────────────────────────────────────────────────────────────┐
 │  DIV CX      ; AX=DX:AX / CX, DX=resto                          │
 │  IDIV BL     ; AL=AX / BL, AH=resto                             │
 └─────────────────────────────────────────────────────────────────┘

    O  primeiro  caso é uma divisäo sem sinal e o segundo com sinal.
Note os divisores (CX e BL no nosso exemplo).

    Na divisäo 16/8 bits o dividendo é armazenado  em  AX  antes  da
divisäo... No caso de 32/8 bits DX e AX säo usados...

    Mais  um  detalhe:  Os  flags,  depois  de  uma multiplicaçäo ou
divisäo näo devem ser considerados.


obs: o AX eh apenas exemplo vc. pode usar outros registradores inclusive os
     definidos e criados por voce.. seria mais uma ilustracao no caso! :)
     note tambem que AX eh substituido apenas uma vez, como no exemplo:
     AX=AX+BX
     AX=1+2
     ai voce me pergunta.. por que isso!? sendo que quando aprendi a
     substituir valores na escola a gente sempre trocava todos os valores
     identicos!? bom.. a resposta eh simples, pois o computador precisa
     guardar em algum lugar o valor do resultado e o valor sera guardado
     no registrador de destino, no caso o AX :))

nota: as explicacoes sobre os comandos DIV,IDIV,MUL,IMUL,SAL,SAR,ROL,ROR,RCL
      e RCR. foram retirados do tutorial da RBT,o autor eh Frederico Pissarra,
      sendo assim,todos os creditos para esses 10 comandos sao dados a ele! :)

aqui vai um programinha simples em duas versoes para imprimir na tela uma msg!
jah o segundo eh mais complexo e usa o segmento de video e tal...

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..corte aqui..<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

Oi      Segment                  ; Inicia o segmento oi! :))
        assume cs:oi,ds:oi       ; Assume cs e ds como sendo do segmento oi
        org  100h                ; Gera um .COM
comeco: jmp  inicio              ; o Controle Comeca Aqui
msg     db   'Olha Nao eh que escreve mesmo!$'; Msg a ser impressa
inicio: Lea dx,msg               ; Coloca a offset(deslocamento) da msg em
                                 ; DS:DX ou seja, no segmento DS e desloca-
                                 ; mento DX
        mov ah,09h               ; Funcao para imprimir msgs no DOS
        int 21h                  ; INT do DOS
        mov ax,4c00h             ; Retorna ao DOS
        int 21h                  ; INT do DOS
oi ENDS                          ; Final da segmento oi
      END  comeco                ; eh necessario para a conclusao do programa

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..corte aqui..<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
bom, no primeiro programa eu usei a funcao 09h da int 21, essa funcao serve
para imprimir uma msg via DOS eh bem simples veja:

LEA DX,MSG ;neste caso eh necessario colokar em DX o deslocamento de onde se
           ;encontra a msg q. serah impressa, isso eh obrigatorio nesta funcao
MOV AH,09h ;esta eh a funcao
INT 21h ;esta eh a INT
msg  db  'Olha Nao eh que escreve mesmo!$'
         ; no caso estah eh a MSG eu usei
         ; DB pois significa Define Byte, ou seja, isso irah definir o BYTE
         ; q. serah impresso na tela, no caso essa msg inteira entre
         ; 'aspas simples' bom, notem tbm um $ no final da msg isso indica a
         ; funcao 09h q. ela deve interromper a leitura ali, intaum o DX
         ; indica onde comeca a frase e o $ onde termina!

bom, do primeiro exemplo eh soh!

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..corte aqui..<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<


codigo segment
       assume cs:codigo,ds:codigo
       org 100h     ; ateh ak. vc. jah conhece!

comeco:
        mov   ax,0B800h ; coloca em ES o segmento de VIDEO no modo colorido!
        mov   es,ax     ; usa - se ES pelo motivo q. este eh o segmento extra
                        ; vc. poderia usar outro como DS, porem DS eh o seg-
                        ; mento de dados e iria dar problema no programa e
                        ; outra a instrucao q. serah usada ira precisar de ES
                        ; entao eh melhor usa - lo!

        mov   di,1004   ; local onde serah impressa a msg
        lea   si,msg    ; indica onde a msg inicia! e coloca em SI
        mov   cx,tam    ; tamanho da msg para nao dar erro, obs: isso serah
                        ; usado com o LOOP pois CX indica qtos loops serao
                        ; feitos!
        mov   ah,0ch    ; estah eh a cor, se quiser ver outra cor, mude ak.
                        ; para outro numero, e vera outra cor, soh nao coloke
                        ; 0(zero) senao nao vera nada! :))
        cld             ; limpa o flag de DIRECAO, ou seja, irah na ordem
                        ; crescente, do comeco ao fim...!

volta:  lodsb           ; le o q. estah no endereco DS:SI e coloka em AL
        stosw           ; le o q. estah em AX e coloka em ES:DI,no caso foi
                        ; usado STOSW pra ler o registrador AX pois colocamos
                        ; em AL o caracter para imprimir em AH a cor para
                        ; ser impressa, por isso STOSW.
        loop  volta     ; faz o loop CX vezes!

        mov   ax,4c00h  ; termina o programa pelo DOS
        int   21h       ; int do DOS

msg     db    'Ola, Este eh o meu teste de Velocidade!'
tam     equ   $-msg ; isto indica o tamanho(LENght para programadores!) da MSG 
              
codigo ends
        end comeco

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..corte aqui..<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
bom, este exemplo eh mais complexo pois mexe com o segmento de video, porem
eh muuito mais rapido e podemos usar cores o q. no exemplo anterior na dava!


ahhhh para compilar estes programas eu sugiro o uso do Turbo Assembly, use:
TASM PROG.ASM
isso irah gerar o .OBJ
TLINK /X/T PROG.OBJ
esse irah gerar o .COM o /X indica q. nao eh para gerar os arquivos .MAP
isso soh enche o HD.... jah a opcao /T indica para gerar o .COM caso voce
queira gerar o .EXE nao use o /T porem nesses exemplos vc. tem q. gerar o
.COM o .EXE usa outras coisas q. nao tem nesses programas!


                                              |EAGLE'S POWER|

.~`^'-_!+=/.,~`^'-_ 03 - CONCEITOS BASICOS EM LINGUAGEM "C" ~`^'-_!+=/.,~`^'-_

Opa, e la vamos nois novamente....eh dessa manera, mas ai malucada, serah q.
oceis intenderam arguma coisa na primeira zina...heheeh espero q. sim oka?
Entao vamos dar continuidade a essa doidera e maravilhosa linguagem.
Pelo que eu percebi ak eu parei na parte de exemplos e tudo mais, e lembro de
ter dito q. eu passaria pra voceis uma tabelinha com os codigos com a barra
invertida do tipo (\n)... pois bem, entao se liga soh nessa tabela ai velho!
 
┌─────────────────────────────────────────────────────────────┐
│    CODIGO                       SIGNIFICADO                 │
│─────────────────────────────────────────────────────────────│
│                                                             │
│     \b                       Retrocesso(BS)                 │
│     \f                       Alimentacao de Formulario(FF)  │
│     \n                       Nova Linha(LF)                 │
│     \r                       Retorno do Carro(CR)           │
│     \t                       Tabulacao Horizontal           │
│     \"                       "                              │
│     \'                       '                              │
│     \0                       Nulo                           │
│     \\                       Barra Invertida                │
│     \v                       Tabulacao Vertical             │
│     \a                       Alerta(BEEP)                   │
│     \N                       Constante Octal=(n)            │
│     \xN                      Constante Hexadecimal=(n)      │
└─────────────────────────────────────────────────────────────┘
 
Beleza pura entao....ai foram os codigos de barra invertida, entao agora
espero q. voce comece a prestar atencoes redobradas apartir de agora, pois
comecaremos a ver os operadores.

                        ───── OPERADORES ─────

Nessa rica linguagem, existem 4 classes de operadores:

      .  ARITIMETICOS
      .  RELACIONAIS
      .  LOGICOS
      .  BIT a BIT
 

           ─────────── Operadores Aritimeticos ────────────


 

					 |Px_LARVA ESPOLETA|



.~`^'-_!+=/.,!~`^ 04 - CONCEITOS BASICOS EM LINGUAGEM "C++" -_!+=/.,~+`^'-_!*_


.~`^'-_!+=/.,~^'- 05 - CONCEITOS BASICOS EM LINGUAGEM CLIPPER _!+=/.,~`^'-_!.~

  hmmm. como dito na outra edicao nao vou ficar escrevendo novamente o que
  jah foi feito pela CA, os criadores do clipper.. eh o seguinte.. todas
  as funcoes estao perfeitamente explicadas porem... algumas podem causar
  duvidas como muitas q. eu tive... entao... quem quiser alguma funcao do
  clipper 5.2 explicada mais detalhadamente, por favor.. mande msgs. com
  o nome da funcao que deseja explicacao que terei o maior prazer em expli-
  ca - la! :))

  Bom, mas voltando ao clipper em si... tenho algumas dicas sobre como criar
  a sua propria PLL ou se preferir a sua LIB e tudo mais... :))

  1 - Criando sua Propria PLL! :))
      obs: o [ENTER] significa que voce deve apertar a tecla ENTER :))

      no prompt do dos digite:
      RTLINK [ENTER]
      ai ira entrar no RTLINK depois disso digite:
      PRELINK [ENTER]
      ira dar inicio ao script do rtlink onde voce podera criar suas proprias
      PLLs....
      bom apos a inicializacao do script digite:
      OUTPUT MINHAPLL [ENTER]
      esse serah o nome do arquivo que voce criara.
      depois eh necessario indicar ao link-editor(RTLINK) as livrarias(.LIB).
      ex:
      LIB CLIPPER,EXTEND,TERMINAL,DBFNTX [ENTER]
      bom, essas sao as basicas, mas voce pode acrescentar outras que use no
      programa.
      apos isso voce tera que mostrar uma referencia dos comandos/funcoes que
      ira querer em seu programa, como por exemplo:

      obs: REFER significa q. vc. irah associar a PLL aas funcoes usando como
      REFERencia as chamadas basicas das funcoes, como por exemplo _VPOS que
      guarda funcoes como ? ou @10,20 SAY entre outras.... cada uma serve pra
      ua coisa! :)) ahh nao se eskessa do _ no inicio das referencias....

      REFER _VOPS,_VMACRO,_VDB,_DBFNTX [ENTER]
      REFER _VTERM,_VPICT,_GETSYS [ENTER]
      REFER _VDBG [ENTER]

      EXCLUDE ERRORSYS
    o exclude tem a funcao de retirar no caso o ERRORSYS da funcao pois este
    como DEFAULT seria compilado!

    agora uma descricao simples de cada comando:

    PRELINK: Indica ao RTLINK que serah iniciada a Pre-Linkagem de modulos.

    OUTPUT: Indica o nome da biblioteca pre-linkada(PLL)

    LIB: Nome Das livrarias(.LIB) que serao usadas na pre-linkagem.

    REFER: Extrai os modulos e coloca no arquivo PLL

    EXCLUDE: Retira os modulos mencionados da pre-linkagem, no caso foi
             dado como exemplo o errorsys que pode ter vindo com algum
             outro modulo e seja desnecessario!

    agora o exemplo dado acima de um modo mais correto, ou seja, como deveria
    ficar em seu computador!


      RTLINK [ENTER]
      PRELINK [ENTER]
      OUTPUT MINHAPLL [ENTER]
      LIB CLIPPER,EXTEND,TERMINAL,DBFNTX [ENTER]
      REFER _VOPS,_VMACRO,_VDB,_DBFNTX [ENTER]
      REFER _VTERM,_VPICT,_GETSYS [ENTER]
      REFER _VDBG [ENTER]
      EXCLUDE ERRORSYS [ENTER]
      ; [ENTER]

    Bom.. isso seria o que voce escreveria a partir do dos em diante.....
    agora voce pode montar um arquivo .LNK q. tenha tudo isso menos a linha
    RTLINK
    com isso o arquivo poderia ser automaticamente pre-linkado
    por exemplo... crie um arquivo chamado MINHAPLL.LNK e coloke o seguinte:

      PRELINK
      OUTPUT MINHAPLL
      LIB CLIPPER,EXTEND,TERMINAL,DBFNTX
      REFER _VOPS,_VMACRO,_VDB,_DBFNTX
      REFER _VTERM,_VPICT,_GETSYS
      REFER _VDBG
      EXCLUDE ERRORSYS
    pronto agora salve e digite o seguinte:
    RTLINK @MINHAPLL
    pronto ira fazer todos os passos descrito acima de uma unica vez! :))

    ahhh lembrando que o ; eh necessario para se dizer ao link-editor que
    ali acaba sua tarefa e retornar ao DOS! :))

    agora com a PLL pronta, podemos usa - la em nossos programas, com a
    seguinte sintaxe: RTLINK FILE Prog.PRG PLL MINHAPLL.PLL
    pronto. assim irah criar um .EXE muito menor e muito mais veloz...
    porem para a execucao perfeita do programa, eh necessario que o arquivo
    MINHAPLL.PLL esteja no mesmo diretorio do programa, ou pelo - no path!

    
  1 - Criando sua Propria LIB! :))
      Bom.. neste caso eh beeem mais complicado... nos precisamos criar a LIB
      em um outro programa como por exemplo o assembly ou mesmo no clipper
      porem isso nos obrigara a um maior conhecimento... mas eh o seguinte,
      voce cria um arquivo .OBJ com ele vc. compila o seu fonte, por exemplo

      crie um programa com a funcao IMPRIME ex:

      Programa: IMPRIME.PRG
      ? "ISTO EH UM TESTE! :))"

      ai compile o programa com:
      CLIPPER IMPRIME.PRG

      e crie um outro pra executar essa funcao, como
      por exemplo:

      Programa: TESTA.PRG
      IMPRIME()

      ai compile o programa com:
      CLIPPER TESTA

      agora voce estah com dois programas, o primeiro mostra uma frase na
      tela, jah o segundo nao faz absolutamente nada sem o primeiro, entao
      vem a pergunta, certo e agora como eu faco para o segundo funcionar!?
      eh simples... voce usa o rtlink da seguinte forma:
      RTLINK FI TESTA,IMPRIME
      com isso voce terah o arquivo TESTA.EXE porem serah criado a partir
      do IMPRIME.OBJ que na verdade estah fazendo o papel de uma .LIB
      bom... eh isso... :))

      qquer duvida estamos ai! :))


						 |EAGLE'S POWER|


~`^'-_!+=/.,~`^. 06 - CONCEITOS BASICOS EM LINGUAGEM DELPHI ^'-_!+=.~`^'-_!+=/

  Hi there!
  Bom, quero primeiro agradecer a todos q nos escreveram, e pedir para
  que continuem a escrever... Eh disso q precisamos para continuar o Zine.

  Em nossa ultima edicao, vimos um pouco de como trabalhar com o "Ambiente"
  do Delphi, como responder a eventos e mudar propriedades.
  Mas naum vimos muuuito codigo ainda, e bem, a melhor forma de aprender
  a programar eh programando :)
  Intaum tente isto no evento OnCreate de um Formulario em um novo projeto:

    Form1.Caption := 'Wu TanG ClAn ZiN3 eh d+ :)';

  Entendeu? NAO!? Intaum eh o seguinte:
  Isso ai altera a propriedade Caption (o titulo) do Formulario.

  Para alterar qualquer propriedade (desde q nao seja readonly), de qualquer
  objeto (componente, formulario, etc.), vc deve usar o nome do objeto +
  o operador ponto (.) + o nome da propriedade := Um valor qualquer.
  Confuso? Olha soh:

    Form1.Caption := 'Estou aprendendo alguma coisa!'
      |      |                   |
      |      |                    \__ Valor a ser atribuido.
      |       \__ Nome da propriedade.
       \__ Nome do objeto.

  Espero q tenha ficado + claro assim.
  Agora eh soh rodar (F9 - RUN) o programa que voce acabou de gerar.
  Qndo voce roda seu programa dentro do Ambiente Delphi, ele faz o seguinte:
    1. Compila o codigo-fonte Pascal descrevendo o formulario
    2. Compila o arquivo do projeto.
    3. Cria um arquivo executavel (.EXE) vinculando as bibliotecas adequadas
       (Qndo especificado).
    4. Executa o arquivo .EXE, usualmete no modo de depuracao.
  Como vc pode ver, o simples fato do Delphi compilar seu programa ao inves
  de interpreta-lo como a maioria das linguagens, o torna muito + rapido.


  "Tudo vai para algum lugar!"
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-

  Eh isso ai, tudo vai para algum lugar, nada desaparece no Delphi. Toda
  alteracao feita no ambiente visual termina em algum codigo. Nada permanece
  oculto e inacessivel. Embora parte dele possa ser razoavelmente complexa,
  voce pode editar tudo!

  Sabe, uma vez, ao explicar sobre redes a alguns alunos de um curso de
  Hardware, eles me perguntaram: "E pra que eu vou precissar disso?"
  Bom, isso me desanimou totalmente! Odeio explicar as coisas a quem naum
  estah interessado. Lembrei disso porque, bom existe coisas que eu vou
  escrever aki q vc naum vai morrer se naum souber, mas naum custa nada saber,
  alem do +, um dia vc pode precisar saber disso como eu precisei :)

  Vou pedir aos leitores q por favor naum fiquem soh no que aparece aki no
  zine, mas que tambem tentem bolar seus proprios programas, mesmo que nao
  seja mencionado aki. Use os comandos que sao expostos. Se vc for fazer
  1 ou 2 programinhas por mes no Delphi, qndo sair a outra edicao vc jah
  eskeceu tudo!

  Vamos ver o q o Delphi faz pra gente
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

  Mesmo que voce naum entenda tudo isso que se segue, nos precisamos ver o
  que o Delphi criou pra gente quando abrimos um novo projeto/formulario.
  Quando vc inicia um projeto novo, em branco, o formulario vazio tem algum
  codigo associado a ele, com vc pode ver aki:

  unit Unit1;

  interface

  uses
    SysUtils, Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs;

  type
    TForm1 = class(TForm)
    private
       { Private declarations }
    public
       { Public declarations }
    end;

  var
    Form1 : TForm1;

  implementation

  {$R *.DFM

  end.

  O arquivo, nomeado Unit1, usa uma serie de unidades e define um novo tipo
  de dados (uma classe) e uma nova variavel (um objeto daquela nova classe).
  A classe recebe o nome de TForm1 e eh derivada de TForm. A variavel global
  eh Form1, do novo tipo TForm1.

  Pega ai:
   -------------------------------------------------------------------------
   Units sao os modulos em que um programa Pascal eh dividido. Quando inicia
   um novo projeto, voce tem um programa e uma unit. As units sao entao
   compiladas separadamente e vinculadas ao programa principal. Em outras
   palavras, units sao os arquivos de codigo-fonte Pascal indicados pela
   extensao .PAS
   --------------------------------------------------------------------------

  Se vc der um novo nome aos arquivos, o codigo mudara ligeiramente, uma vez
  que o nome da unit deve refletir o nome do arquivo. Se vc der o nome WTC.PAS
  ao arquivo, o codigo iniciara com:

     unit WTC;

  Assim que vc comeca a adicionar componentes, o codigo tambem sera alterado,
  conforme o componente q vc adicione. Por ex. se vc adicionar um botao, o
  codigo tera o segunte trecho alterado:

    type
      TForm1 = class(TForm)
         Button1: TButton;
      private
         { Private declarations }
      public
         { Public declarations }
      end;

  Agora se vc mudar a propriedade Name do botao (usando o Object Inspector)
  para Push_Me, o codigo mudara + uma vez:

    type
      TForm1 = class(TForm)
         Push_Me: TButton;
      private
         { Private declarations }
      public
         { Public declarations }
      end;
    
  Estabelecer outras propriedades que naum sejam o nome naum exerce nenhum
  efeito no codigo-fonte. As propriedades do formulario e seus componentes
  sao armazenados num arquivo de descricao do formulario em separado (com
  uma extensao .DFM).
  Adicionar novos manipuladores de eventos causam maior impacto sobre o
  codigo. Cada vez q vc adiciona um novo manipulador para um evento, uma
  linha eh adicionada a definicao do tipo de dados do formulario, um
  conjunto de metodos vazio eh adicionado a parte de implementacao e algumas
  informacoes sao armazenadas no arquivo de descricao do formulario (.DFM).

  Arquivos de um sistema em Delphi
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

  O delphi, diferentemente de outras linguagens populares para DOS, possui,
  para cada Projeto uma serie de arquivos distintos. Vc deve tomar cuidado
  ao nomear determinados arquivos, pois em alguns deles, o nome do arquivo
  deve refletir um trecho de codigo, como no caso das units e arquivos de
  projeto.

  As extensoes de arquivos Delphi
 --------------------------------------------------------------------------
 Extensao              Tipo de Arquivo      Descricao
 --------------------------------------------------------------------------
 DCU                   Unidade (Unit)       Estes arquivos de objetos sao o
                       compilada            resultado da compilacao de um
                                            arquivo .PAS (e o seu formulario)

 ~DF                   Backup (.DFM)        Backup do arquivo de mesmo nome
                                            .DFM (Descricao do formulario)

 DFM                   Desenvolvimento      Arquivo de descricao do form.
                                            (Em formato binario)

 DOF                   Desenvolvimento      Arquivo c/ as configuracoes
                                            atuais para as opcoes do
                                            projeto. A estensao era .OPT no
                                            Delphi 1.

 ~DP                   Backup (.DPR)        Backup do arquivo do projeto
                                            (veja .DPR abaixo)               

 DPR                   Desenvolvimento      Arquivo do projeto, lista todos
                                            os elementos do projeto e oferece
                                            alguma inicializacao.

 DSK                   Desenvolvimento      Este arquivo contem informacoes
                                            sobre o desktop, como posicao das
                                            janelas e arquivos abertos no
                                            editor, inclusive algumas opcoes
                                            de ambiente

 DSM                   Dados do Object      Armazena inf. do Browser e pode
                       Browser              ser usado para acessar inf. sem  
                                            ter de recompilar o projeto (ou
                                            qndo vc naum puder recompila-lo
                                            por causa de algum erro).

 EXE                   Arquivo executavel   Hummm... Precisa explicar???

 ~PA                   Backup (.PAS)        Backup de arquivos de Units (PAS)
                                            (Veja ref. abaixo)

 PAS                   Codigo fonte da      Codigo fonte de uma Unit Pascal,
                       Unit                 que pode ser o codigo-fonte de um
                                            formulario, ou um arquivo fonte
                                            independente.

 RES                   Recursos compilado   O arquivo binario associado ao
                                            projeto e que contem por padrao,
                                            seu icone. Vc pode adicionar
                                            outros recursos ou outros arq.
                                            deste tipo ao projeto
 ----------------------------------------------------------------------------



  Uma Base muuuuuuuuuuuuuito importante MESMO!
  -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

  Se vc jah programou em Pascal ou outra linguagem tipada, vc jah sabe o que
  eu vou falar, mas se nao, LEIA, RELEIA ate entender tudo, ateh o ultimo
  detalhe! hehehe Isso aki vc vai usar pro resto da vida.

  Nesta parte, vou falar um pouco dos tipos de dados. Olha soh:

  Dado   | Tipo    | Algoritmo
  -------+---------+----------
  'A'    | Char    | Caracter  \ Alguns livros e professores discordam,
  'AA'   | String  | String    / acho q por nao preverem dados de 1 caracter!
  '1234' | String  | String
  1234   | Integer | Inteiro
  1234.5 | Real    | Real

  Esses ai sao os tipos basicos de dados, todos eles possuem uma faixa, que
  sera mostrada + pra frente.
  Explicando, isso ai, em "Dado" eh soh um exemplo e note as '' nos dados do
  tipo Char e String, eles sao REALMENTE necessarios! Sem os '', o compilador
  "pensa" que isso eh um inteiro ou nome de comando/funcao e vai acusar erro.
  Pra quem naum faz PD, Algoritmo eh:
  "Um conjunto de comandos organizados de maneira logica de forma a garantir
  a sua repetibilidade". Em outras palavras, uma representacao em determinada
  linguagem com suas regras e sintaxes proprias que expressao a logica que
  vc criou para solucionar o problema que o levou a escrever o codigo!
  Esses nomes sao como um "padrao" aki no Brasil. Jah os "Tipos" sao os nomes
  desse "tipo" de dado pro Delphi. Por ex, se vc quiser criar uma variavel,
  que vai "guardar" valores inteiros, vc usa:

  Var
    I : Integer;
        ^^^^^^^ Percebe???

 Agora, anota ai a tabela com as faixas de dados:

 Tipo       |  Faixa                   | Tamanho
 -----------+--------------------------+-------------------------------------
 ShortInt   |  -128..127               | 8-bit Sinalizado
 Integer    |  -32768.. 32767          | 16-bit Sinalizado
 LongInt    |  -2147483648..2147483647 | 32-bit Sinalizado
 Byte       |  0..255                  | 8-bit Nao-sinalizado
 Word       |  0..65535                | 16-bit Nao-sinalizado
 String     |  0..255 Caracteres       | 255 Bytes
 ANSIString |  0..XXX Caracteres       | XXX Bytes <<Versao 2.0 ou superior>>
 Char       |  1 Caracter              | 1 Byte
 -----------'--------------------------'-------------------------------------

 Dica:
  --------------------------------------------------------------------------
  Naum deixe de ler sobre Pascal aki na Zine. Maioria dos comandos do Pascal,
  que nao utilizam a CRT funcionam no Delphi. Por exemplo o FOR no Delphi e
  no Pascal sao identicos, porem o Write no Delphi nao funciona tao simples
  quanto no Pascal ;)
  Assim como o Delay (Use o TTimer!) e outros...
  --------------------------------------------------------------------------

  Wow! Vetores :))
  -=-=-=-=-=-=-=-=-

  Matrizes = Vetores ! :)) Intaum qndo eu escrever vetor/matriz, eh a mesma
  coisa. Se vc jah faz PD e conhece o conceito, pula essa parte e vai
  lah ver como q usa no Delphi :P
  Agora, o q sao matrizes?
  Resposta: Sao uma especie de tabela que vc pode montar na MEMORIA do
  computador.

  Matrizes Unidimencionais
  ------------------------
  Unidimencionais por q so tem uma dimensao (Obvio nao?), ou seja, sao como
  tabelas de apenas uma linha :)

  Olha aki:
  -------------------------------------------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
  -------------------------------------------------------
   01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18

  Imagina q isso ai eh uma variavel, um vetor de hummm... 18 posicoes :)
  Entaum vamo declarar isso:
    Var Matriz : array[1..18] of char;

  O Numero de posicoes pode ser qq coisa ordinal. Agora, digamos q vc queira
  fazer uma matriz de inteiros. Entao eh soh mudar o "char" pra integer oras!
  Mas pra nos aki vamos ficar c/ a de char pra naum conplicar muuuuuuito.
  Agora, veja o q acontece qndo o computador chega a esta linha de codigo:

  Codigo:
    Matriz[5] := 'W';

  Resultado:
    -------------------------------------------------------
    |  |  |  |  | W|  |  |  |  |  |  |  |  |  |  |  |  |  |
    -------------------------------------------------------
     01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18

  O que acontece aki eh q o caracter 'W' vai ser armazenado na posicao 5 da
  matriz. A diferenca entre usar matriz e outras variaves eh o acrescimo do
  [] para indicar as posicoes. Cada posicao eh independente da outra qnto
  ao seu conteudo, como se fossem variaveis diferentes.

  O q vc jah deve ter percebido eh q, se eu usar:
  var Nomes : array[1..2] of string;
  ou criar duas variaves (Nome1 e Nome2) do tipo String vc obtem +/- o mesmo
  resultado.
  Porem existe uma vantagem muuuuito grande em utilizar a matriz :)
  Vc pode, ao inves de utilizar uma constante no indice (ex. Nomes[1]),
  utilizar uma variavel (ex. Nomes[X]) desde q esta variavel seja ordinal,
  e seja controlada para nao ultrapassar a faixa de posicoes da matriz.
  Ex.
    Var Nomes : Array[1..500] of String;
        I : Integer;
 Se eu utilizar I para controlar as posicoes (com: Nomes[I]), o valor de I
 deve: I >= 1 e I <= 500. Ou seja I esta entre 1..500 :))

 Matrizes Multidimensionais
 -=-=-=-=-=-=-=-=-=-=-=-=-=-

 O q eh isso ai??? O eskema eh o seguinte:

 Eh a mesma coisa das matrizes (vetores) normais, soh q tem + de uma dimensao
 e consequentemente + de um indice :))
 hehehe parece confuso??? Eh moh facil (depois de pegar o jeito ;)
 Ex.
    Var Nomes : Array[1..10,5..15] of String;
 Begin
    Nomes[1, 6] := 'Wu TanG ClAn Z|N3';
    ....
    ....
 End.

 Percebe??? Vc simplesmente acrescentou uma dimensao (podem ter muito +).
 Uma coisa deve estar clara eh q Nomes[1,5] e Nomes[1,6] sao distintos e
 podem ter valores diferentes!
 Assim como Nomes[1,5] e Nomes[2,5] podem ter valores diferentes, ou seja,
 sao posicoes diferentes da matriz. Em matrizes de duas dimensoes, vc pode
 trabalhar, pensando em uma tabela normal (linha e coluna), enquanto a de
 3 dimensoes um cubo (linha, coluna e profundidade), jah a de 4 dimensoes eh
 melhor naum tenta imaginar nada fisico pra num fundir a cuca ;))
 Para acrescentar uma dimensao, vc simplesmente poe uma virgula ao final da
 faixa da ultima dimensao e insere uma nova faixa q ira determinar a nova
 dimensao... Olha o ex. que fica + facil de entender:

 {codigo de matriz de uma dimensao}
    Var Nomes : Array[1..5] of String;

 {codigo de matriz de duas dimensoes}
    Var Nomes : Array[1..5,1..9] of String;

 {codigo de matriz de 3 dimensoes}
    Var Nomes : Array[1..5,1..3,1..2] of String;

 E assim por diante...

 Dica:
  ---------------------------------------------------------------------------
  Vc sabia q pode utilizar qq coisa q seja ORDINAL como "range" e indice da
  matriz? Por ex. vc pode declarar uma matriz do tipo:
    Var Msg : Array[False..True] of String;
  Legal neh?? ;) bom, isso eh soh um ex., + pode ter outros tipos ordinais
  dentro dos [] por ex: shortint, longint, integer...
  P.S. Nunca testei c/ char + talvez funcione :) nem q seja [ord(ch)] hehehe
  Hummm se vc num sabe o q eh ord() fica frio q agente vai reservar uma ed.
  soh pra falar de funcoes ;))
  ---------------------------------------------------------------------------

 
 Ops... Tava eskecendo, Eu sou Thiago Correa! + apartir de agora vou assinar
 c/ meu handle (LaSt^WaRRioR). Qq coisa vc pode me encontrar em:

 e-1/2: last.warrior@lords.com
 ICQ..: 5391667
 BBS..: Sercom, Kemek, UnReal e outras ai :)
 ou ainda nas redes de msg como Fido sob o nome de Thiago Correa :))
  
 e naum esquece de dar uma passada na pagina do zine, agora na geocities:
 www.geocities.com/SiliconValley/Lab/4568/
 Se vc quiser mandar um e-1/2 pra zine: zinewutangclan@geocities.com

                                                         |LaSt^WaRRioR|

Bom teoricamente teriamos apenas LaSt^WaRRioR para escrever delphi, porem
notem no texto a seguir uma participacao de uma mina, talvez entrando na
coorporacao.. isso eh questao de conversarmos... porem ai estah sua
contribuicao...
                 ___________________________________________

                           Trabalhando com datas

 Originalmente, na linguagem Turbo Pascal não tínhamos uma variável própria
 para guardar uma data. A solução, no caso do Delphi, foi criar um "tipo"
 chamado TDateTime que conterá data e também hora. Este tipo de variável
 ocupará 8 bytes de memória e gravará o ano com 4 algarismos. Para que estas
 informações (de data e hora) caibam em apenas 8 bytes o sistema grava de uma
 forma codificada. Isto nos obriga a utilizar funções de conversão, como
 veremos a seguir. Tecnicamente os dados são gravados no formato ponto
 flutuante, em uma variável Double. É importante saber que no uso de campos
 data e hora em banco de dados, tanto um campo data, como um campo hora,
 quando acessados pelo Delphi, serão transformados para o formato TDateTime.
 Em outras palavras, se voce tiver em seu banco de dados um campo tipo data
 e outro tipo hora, no Delphi você terá duas variáveis teoricamente do mesmo
 tipo:TDateTime. Note, porém, que apenas o começo ou o fim da variável será
 utilizado pelo sistema em cada caso.

 Funções de Conversão para String:

 function DateToStr(Data:TDateTime):String;
  - Converte um TDateTime em uma String
    (pegando apenas a parte da Data desta variável).
 
 Ex.:Label1.Caption:=DateToStr(Table1Data.Value);
 
 
 function TimeToStr(Hora:TDateTime):String;
  - Converte um TDateTime em uma String
   (pegando apenas a parte da Hora desta variável).
 
 Ex.: Label1.Caption:=TimeToStr(Table1Time.Value);
 
 function DateTimeToStr(DataAndHora:TDateTime):String;
  - Converte um TDateTime em uma String.
    (pegando a Data e Hora desta variável).
 Ex.: Label1.Caption:=DateTimeToStr(Now);
 
 
 Funções de Conversão para TDateTime:
 
 function StrToDate(Data:String):TDateTime;
  - Converte uma String em um TDateTime.
   (setando apenas a parte da Data desta variável).
 Ex.: Table1Data.Value:=StrToDate(EditMask1.Text)

 function StrToTime(Hora:String):TDateTime;
  - Coverte uma String em um TDateTime.
    (setando apenas a parte da Hora desta variável).
 Ex.: Table1Time.Value:=StrToTime(EditMask2.Text0;
 
 function StrToDateTime (DateAndHora:String):TDateTime
  - Converte uma String em um TDateTime.
    (setando Data e Hora desta variável).
 Ex.:
    var DateAndTime:TDateTime;
    begin
         DateAndTime:=StrToDateTime(Edit1.Text);
         Label1.Caption:=DateTimeToStr(DateAndTime);
 
 
 Retorna o Dia e a Hora Atual:
 
 function DayOfWeek(Data:TDataTime):Integer;
 Ex.:Label1.Caption:=Data e Hora Atual+DateTimeToStr(Now0;
  - Retorna o dia da semana em um inteiro de 1 a 7.
  Sendo:
                ***************
                * 1 - Domingo *
                * 2 - Segunda *
                * 3 - Terça   *
                * 4 - Quarta  *
                * 5 - Quinta  *
                * 6 - Sexta   *
                * 7 - Sábado  *
                ***************

  Ex.:
  Const
         Semana:Array[1..7] of String[3]=(`Dom`, `Seg`, `Ter`, `Qua`, `Qui`, `Sex`, `Sab`);
         { Veremos vetores e constantes logo mais}
         Begin
            Label1.Caption:=`Hoje é um: `+Semana[DayOfWeek(Now)];
         End;

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

                        Trabalhando com Vetores

A definição de um vetor deve seguir o seguinte formato:

Variável: Array[NºIni..NºFin] of TipoDoVetor;
Ex.:
Var
        DiaDaSemana:[1..7]of String;
        ou
        DiaDaSemana:[0..6]of String;
Uso:
Begin
        DiaDaSemana[2]:=`Terça`;
        I:=4;
        Label1.Caption:=DiaDaSemana[I];
End;

Analise o exemplo abaixo que demonstra o uso de vetores:

Var
 Vet:Array[1..12]of String;
Procedure TForm1.FormCreate(Sender:TObject);
begin
  Vet[1]:=`Janeiro`;
  Vet[2]:=`Fevereiro`;
  Vet[3]:\`Marco`;
end;

procedure TForm1.Button1Click(Sender:TObject);
begin
  Edit2.Text:=Vet[StrToInt(Edit1.Text)];
end;

                                                   |Ana Paula|



.~`^'-_!+=/., 07 - CONCEITOS BASICOS EM LINGUAGEM TURBO PASCAL '-_!+=/.,~`^'-.

    De  acordo  com  observaçöes feitas por diversos professores, inclusive
    por mim, a maior parte das pessoas ficam ligadas para sempre à primeira
    linguagem que aprenderam, e quando aprendem uma nova linguagem, têm uma
    certa  tendência  em  desenvolver os algoritmos segundo o vocabulário e
    regras sintáticas da primeira linguagem, so que escritas na nova.

    Este Texto foi extraido de um tutorial de Pascal, Nao sei o porque, mas
    ainda nao consegui identificar o autor, peco desculpas caso ele leia
    um texto dele publicado em outro zine, mas nao pude evitar....
    Bom, soh pra nao perder akeles negocios de autenticidade e tal.., ai vai
    a unica coisa que encontrei sobre o autor no tutorial......
				[]s ·¨■ ¯lCa ■¨·
    Bom, isso ai acima, foi a unica assinatura que encontrei sobre o cara..

    Tipo, agora comentando sobre o fato que foi exposto por ele... tai mais
    um objetivo da zine, proporcionar a novatos uma visao geral sobre as
    linguagens, facilitando assim sua escolha. E outra, como voce tera opor-
    tunidade de conhecer diversas linguagens, quem sabe, nao quebramos essa
    barreira de "a primeira ser a unica" :)))

    Bem.. tudo legal, mas vamos comecar com Pascal "o nao eh que rimo!!!" :))

    Ak. Continua a Aula dois desse belo texto criado pelo cara q. deixou essa
    assinatura ai em cima! :))

III.2.3 - A declaraçäo type

    Além dos tipos de dados pré-definidos no Turbo Pascal,  podemos  também
    definir novos tipos através da declaraçäo Type. A sua sintaxe geral é:

    Type identificador = (valor1,valor2,valor3,valor4, ... ,valorN);

    O identificador deve seguir as regras  dadas  anteriormente  e entre os
    parentêses estäo os valores que podem ser assumidos. Exemplos:

    Type
        cor        = (azul,vermelho,branco,verde,amarelo);
        dia_útil   = (segunda,terça,quarta,quinta,sexta);
        linha      = string[80];
        idade      = 1..99;

    (* a partir deste instante, além dos tipos de dados pré-definidos,
       podemos  também utilizar os novos tipos definidos cor,dia_útil,
       linha e idade *)

    Var
        i       : integer;
        d       : idade;
        nome    : linha;
        dia     : dia_útil;
        cores   : cor;

                (* etc. *)

    Observaçäo: Quando damos os valores que os dados podem assumir  através
                da declaraçäo type, o Turbo Pascal assume,  automaticamente,
                que o valor da direita vale mais que  o da esquerda e  assim
                por diante. Por exemplo: no caso da definiçäo de cor,amarelo
                vale mais que verde, que por sua vez  vale mais que branco e
                assim por diante.


III.3 - Constantes
        ----------

III.3.1 - A declaraçäo const

    Nesta subárea, podemos definir  tantas  constantes  quantas  quisermos.
    Sintaxe:

    Const
            Meu_nome = 'Thelmo';
            cor_preferida = 'verde';
            número_máximo = 24345;

        (* e assim por diante *)

    Toda  vez  que  nos  referirmos   às  constantes  acima, o Turbo Pascal
    substitui-las-á pelos seus respectivos valores.


III.3.2 - Constantes pré-definidas

    Existem  algumas constantes pré-definidas e que podemos utilizá-las sem
    ter que declará-las. Säo elas:

    PI = 3.1415926536E + 00
    FALSE
    TRUE
    NIL                      Pointer nulo, veremos mais adiante.
    MAXINT = 32767


III.3.3 - Constantes tipadas

    A declaraçäo  de   variáveis  na  subárea Var, apenas reserva espaço de
    memória  para  elas, mas nåo as inicializa, ou seja, até que se atribua
    valores   a  elas,   seus  valores   seräo   desconhecidos.  Sob certas
    circunstâncias, seria interessante que pudéssemos ao mesmo tempo em que
    declaramos  a  variável,  dar  seu valor inicial. Isto é possível com o
    conceito de constante tipada cuja sintaxe é:

    Const variável : tipo = valor;

    Exemplos:

    const Contador : integer = 100;
          c : char = 'A';

    Estamos  definindo  duas  variáveis, uma chamada contador que é inteira
    e  vale  inicialmente  100, e outra chamada c que é do tipo char e cujo
    valor inicial é 'A'.


III.4 Operadores
      ----------

III.4.1 - Operadores aritméticos

    +   adiçäo
    -   subtraçäo
    *   multiplicaçäo
    /   divisäo entre números reais
    DIV divisäo entre números inteiros
    MOD resto da divisäo

    (*******************************************************)
       PROGRAMA EXEMPLO : Mostra como utilizar operadores
                           aritmeticos
    ********************************************************)

    Program Operadores_aritimeticos;
    Uses CRT;

    Var    x,y,z : integer;
           r1,r2 : real;

    Begin
       ClrScr;       (* limpa a tela *)
       x:=10;
       y:=20;
       z:=x+y;
       writeln(z);   (* escreve o valor de z na tela de
                        video *)
       x:= 20 DIV 3;
       y:= 20 MOD 3;
       writeln(x);   (* escreve 6 na tela *)
       writeln(y);   (* escreve 2 na tela *)
       r1:=3.24;
       r2:=r1/2.3;
       writeln(r2);
    end.


III.4.2 - Operadores lógicos

    AND     E lógico
    OR      OU lógico
    XOR     OU EXCLUSIVO lógico

    Estes operadores só aceitam como operandos, valores lógicos, ou  seja :
    TRUE e FALSE .

    A operaçäo AND resulta em TRUE se e somente se todos os operandos forem
    TRUE, se um deles ou mais de um for FALSE entäo o resultado será FALSE.

    A operaçäo OR resulta TRUE quando pelo menos um dos operandos for TRUE.

    A operaçäo XOR resulta TRUE quando os operandos forem diferentes  entre
    si, isto é, quando um for TRUE o outro deverá ser FALSE.

    Exemplo:
    (*******************************************************)
      PROGRAMA UTILIZANDO OS OPERADORES LOGICOS
    (*******************************************************)

    Program operadores_logicos;
    Uses CRT;

    Var x,y : boolean;

    Begin
       x:=TRUE;
       y:=FALSE;
       Writeln( x OR y );         (* escreve TRUE *)
       Writeln( x AND y );        (* escreve FALSE *)
       Weiteln( x XOR y );        (* escreve TRUE *);
    End.

III.4.3 - Operadores relacionais

    O Turbo Pascal possui ao todo 7 operadores relacionais que  säo   muito
    utilizados nas tomadas de decisöes, säo eles:

    =       igual
    <>      diferente
    >       maior que
    <       menor que
    >=      maior ou igual que
    <=      menor ou igual que
    IN      testa se um elemento está incluso em um conjunto

    Exemplos:

    1-) Se A=30  e B=50     entäo

     ( A = B )      FALSE
     ( A < B )      TRUE

    2-) Se A=TRUE e B=FALSE

     ( A <> B )     TRUE
     ( A = B  )     FALSE

    3-) Se A=50 , B=35, C='A' , D='B'

     ( ( A < B ) OR ( C < D ) )          TRUE

        A  avaliaçäo  será  verdadeira se   uma  ou  outra  expressäo   for
        verdadeira, no caso, como C < D entäo a resposta é TRUE


III.4.4 - Operadores entre bits

    Os operadores entre bits só podem ser aplicados em dados dos tipos byte
    ou integer e o resultado é do tipo integer. Eles agem bit a bit e podem
    ser aplicados na notaçäo hexadecimal ou decimal. Säo eles:

    SHL - SHift Left

    Desloca  n  bits à esquerda. Durante o deslocamento, os bits à esquerda
    säo perdidos e dígitos zeros preenchem a posiçäo direita. Exemplos:

    1-) Se X = 00010101 entäo

        X shl 2 = 01010100
        X shl 5 = 10100000

    2-) 55 shl 3 = 184

        55 = 00110111  deslocando 3 à esquerda ficaria:
        10111000 que é igual a 184

    3-) $F0 shl 2 = $C0

        $F0 = 11110000 deslocando 2 à esquerda ficaria:
        11000000 que é igual a $C0

    SHR - SHift Right

    Desloca n bits à direita. Durante o deslocamento,os bits à esquerda säo
    preenchidos com zeros e os da direita säo perdidos. Exemplos:

    1-) Se X = 10101100 entäo

        X shr 3 = 00010101
        X shr 6 = 00000010

    2-) 55 shr 3 = 6

        55 = 00110111 deslocando 3 à direita ficaria:
        00000110 que é igual a 6

    3-) $F0 shr 2 = $3C

        $F0 = 11110000 deslocando 2 à direita ficaria:
        00111100 que é igual a $3C

    OBS: Já sei, vc näo manja de base 2, eh eh eh, entonces  complica,  bem
         vou tentar em poucas palavras explicar a base 2. Nós   operamos na
         base 10, porque trabalhamos com 10 algarismos, 0..9, certo? Bem na
         base 2 operamos  somente com 2 algarismos, o 0 e o 1. Dessa forma,
         temos que  representar  todos  os   números  da base 10 utilizando
         somente o 0 e 1.  Parece complicado ? Nem  tanto,  veja  abaixo  a
         correspondência:

        BASE 10      BASE 2
           0            0
           1            1
           2           10
           3           11
           4          100
           5          101
           6          110
           7          111
           8         1000
           9         1001
          10         1010
          11         1011
         e assim por diante

    Para converter um número da base 10 para a  base  2,  basta  dividir  o
    número, o qual queremos converter, por dois sucessivamente  até  que  o
    resto seja 0, depois pegamos  os  restos  de  baixo para cima, exemplo:

        (23)    --> (    )
            10            2

    23 / 2 dá 11 e sobra 1
    11 / 2 dá 5  e sobra 1
     5 / 2 dá 2  e sobra 1
     2 / 2 dá 1  e sobra 0
     1 / 2 dá 0  e sobra 1

    Portanto (23) --> (10111)
                 10          2

    Para coverter da base 2 para a base 10, devemos fazer ao contrário:

    (10111)  -->  (  )
           2          10


           4  3  2  1  0
        (  1  0  1  1  1 )

               4        3        2        1        0
          1 x 2  + 0 x 2  + 1 x 2  + 1 x 2  + 1 x 2 =
           16    +   0    +   4    +   2    +   1   = 23


    NOT

    O operador NOT nega os bits, isto é os bits iguais a 1 se tornam 0 e os
    bits zero se tornam 1. Devemos lembrar,  no  entanto,   que os inteiros
    possuem 2 bytes, portanto,ao se trabalhar com números decimais inteiros
    será afetado o byte de mais alta ordem e também o sinal. Exemplo:

    NOT (255) = -256

    Para suprimir este problema, você deve trabalhar com bytes:

    Program Exemplo;
    Uses CRT;

    Var i,j : Byte;

    Begin
       ClrScr;
       i:=255;
       j:=NOT(i);
       Writeln(j);     (* será escrito 0 *)
    End.


    AND

    Este  operador  realiza  a operaçäo E lógico bit a bit. Relembrando,  a
    operaçäo  E resulta em 1 se e somente se os dois operandos forem iguais
    a 1, caso contrário, o resultado será igual a 0. Exemplos:

    1-) $0F AND $F0 = $0 pois
        $0F = 00001111
        $F0 = 11110000
            00001111 AND 11110000 = 00000000

    2-) 255 AND 55 = 55 pois
        255 = 11111111
        55  = 00110111
            11111111 AND 00110111 = 00110111

    3-) 34 AND 76 = 0 pois
        34 = 00100010
        76 = 01001100
            00100010 AND 01001100 = 00000000

    OR

    Este  operador  realiza  a operaçäo OU lógico bit a bit. Relembrando, a
    operaçäo  OU  resulta  em 1 se um ou os dois operandos forem iguais a 1.
    Exemplos:

    1-) $0F OR $F0 = $FF pois
        $0F = 00001111
        $F0 = 11110000
            00001111 OR 11110000 = 11111111

    2-) 255 OR 55 = 255 pois
        255 = 11111111
        55  = 00110111
            11111111 OR 00110111 = 11111111

    3-) 34 OR 76 = 110 pois
        34 = 00100010
        76 = 01001100
            00100010 OR 01001100 = 01101110

    XOR

    Este   operador  realiza  a  operaçäo   OU  EXCLUSIVO lógico bit a bit.
    Relembrando, a operaçäo OU EXCLUSIVO resulta em 1 se os operandos forem
    diferentes entre si . Exemplos:

    1-) $0F XOR $F0 = $FF pois
        $0F = 00001111
        $F0 = 11110000
            00001111 XOR 11110000 = 11111111

    2-) 255 XOR 55 = 200 pois
        255 = 11111111
        55  = 00110111
            11111111 XOR 00110111 = 11001000

    3-) 34 XOR 76 = 110 pois
        34 = 00100010
        76 = 01001100
            00100010 XOR 01001100 = 01101110


III.4.5 - Concatenaçäo

    Esta  operaçäo é  representada   pelo  sinal de adiçäo, ou seja, +.  Os
    operandos devem ser do tipo string ou char. Exemplo:

    'Isto é uma ' + 'string' = 'Isto é uma string'

┌─────────────────────────────┐
│IV - Entrada e saída de dados│
└─────────────────────────────┘

IV.1 - Write e Writeln
       ---------------
    Estas  säo  as principais procedures destinadas a exibir todos os tipos
    de dados no vídeo. A diferença entre write  e writeln reside no fato de
    que  a  procedure  write escreve o parâmetro, e mantém o cursor do lado
    daquilo   que  foi  escrito, enquanto que writeln passa o cursor para a
    próxima linha. Estas procedures possuem 3 formas de sintaxes, a saber:

    Primeira forma:

    Write(parâmetro_1,Parâmetro_2, ...);

    Exemplo:

    Program Exemplo;
    Uses CRT;
    Var  i : integer;
         r : real;
         c : char;
         s : string[20];

    Begin
       ClrScr;         (* apaga a tela e coloca o cursor em 1,1 *)
       Writeln('Exemplos de aplicacao de writeln e write');
       writeln;   (* apenas pula uma linha *)
       i:=100;
       r:=3.14;
       c:='A';
       s:='interessante';
       writeln('Valor de i e igual a ',i);
       write('valor de r = ');
       writeln(r);
       writeln(c,'   ',s);
    end.

    Este programa resultaria na seguinte tela:

    ---------------------------------------------------------
    Exemplos de aplicacao de writeln e write

    Valor de i e igual a 100
    valor de r =   3.1400000000E+00
    A interessante
    ---------------------------------------------------------

    Segunda forma:

    Write(parâmetro : n);

    onde n é um número inteiro que determina quantas colunas o cursor  deve
    ser  deslocado à direita, antes do parâmetro ser escrito. Além disso, o
    parâmetro é escrito da direita para a esquerda, exemplo:

    Program Exemplo;
    Uses CRT;
    Begin
       Writeln('A');
       Writeln('A':5);
    end.

    Resultaria a seguinte tela:
    ---------------------------------------------------------
    A
    .....A
    ---------------------------------------------------------
    Os pontos representam espaços em branco

    Terceira forma:

    Write(parâmetro : n : d);

    Neste   caso,  n   tem  a  mesma funçäo que o caso anterior sendo que d
    representa o número de casas decimais. Obviamente, parâmetro  terá  que
    ser do tipo Real. Exemplo:

    Program Exemplo;
    Uses CRT;
    Var r : real;

    Begin
        ClrScr;
        r:=3.14156;
        Writeln(r);
        Writeln(r:10:2);
    End.

    resultaria a seguinte tela:
    ---------------------------------------------------------
    3.1415600000E+00
           3.14
    ---------------------------------------------------------


IV.2 - Read e Readln
       -------------

    Estas   procedures   säo   utilizadas  para  fazer leitura de dados via
    teclado. A procedure Read lê  um dado do teclado até que se pressione a
    tecla ENTER, sendo que cada tecla digitada é ecoada para o vídeo.  Após
    pressionarmos   ENTER,  o  cursor   permanecerá  no  mesmo lugar. Já, a
    procedure Readln faz a mesma coisa só que o cursor passa para a próxima
    linha. A sintaxe geral para estas procedures é:

    Read (Var_1,Var_2,Var_3,...);

    Ao  se digitar os valores das variáveis pedidas, deve-se separá-los por
    espaços.

    Exemplo 1:

    Program teste;
    Uses CRT;

    Var a,b,c:integer;

    Begin
       clrscr;
       readln(a,b,c);
       writeln (a,' ',b,' ',c);
    end.

    Exemplo 2:

    Program teste;
    Uses CRT;

    Var i : integer;
        r : real;
        c : char;
        s : string[10];

    Begin
       ClrScr;
       Write('Digite um numero inteiro ------> ');
       Readln(i);
       Write('Digite um numero real ---------> ');
       Readln(r);
       Write('Digite um caractere -----------> ');
       Readln(c);
       Write('Digite uma string -------------> ');
       Readln(s);
       Writeln;Writeln;  (* pula duas linhas *)
       Writeln(i);
       Writeln(r);
       Writeln(c);
       Writeln(s);
    End.

    Exemplo 3:

    (*******************************************************)
     PROGRAMA AREA_DE_TRIANGULOS : calcula area de triangulos
    (*******************************************************)

    Program Area_de_Triangulos;
    Uses CRT;

    Var Base,        (* base do triangulo   *)
        altura:      (* altura do triangulo *)
                Real;

    Begin
       ClrScr;
       Writeln('CALCULO DA AREA DE TRIANGULOS':55);
       Writeln;
       Write('Valor da base ------> ');
       Readln(base);
       Writeln;
       Write('Valor da altura ----> ');
       Readln(altura);
       Writeln;
       Writeln;
       Writeln('Area do triangulo = ',base*altura/2 : 10 : 2);
    End.

    ReadKey: Lê uma tecla do teclado, sem que seja necessário pressionar  a
             tecla ENTER

    Program Exemplo;
    Uses CRT;
    Var tecla:char;
    Begin
        Write('digite uma tecla ->');
        Tecla:=readkey;
        Writeln;
        writeln('vc digitou ',tecla);
    end.

IV.3 - Impressora
       ----------

    Podemos  enviar  dados para a impressora através das procedures Write e
    Writeln.  Para tanto,   devemos  colocar,  antes dos parâmetros a serem
    enviados à impressora, o nome lógico LST. Exemplo:

    Writeln('isto vai para o vídeo');
    Writeln(lst,'isto vai para a impressora',' e isto também');


IV.4 - Funçöes e procedures para controle de vídeo
       -------------------------------------------

IV.4.1 - ClrScr

    Esta  procedure tem a finalidade de limpar a tela de vídeo e colocar  o
    cursor na primeira coluna da primeira linha. A tela de vídeo é dividida
    em  80  colunas  e 25 linhas. O canto superior esquerdo tem coordenadas
    (1,1) e o inferior direito (80,25).

IV.4.2 - Gotoxy(x,y)

    Move o cursor para a coluna x e linha y.

    Exemplo:

    Program Exemplo;
    Uses CRT;

    Var x,y : Byte;

    Begin
        ClrScr;
        Gotoxy(10,2);
        Write('Coluna 10 da linha 2');
        x:=40;
        y:=10;
        Gotoxy(x,y);
        Write('Coluna 40 da linha 10');
    End.


IV.4.3 - ClrEol

    Esta  procedure   limpa  desde a posiçäo atual do cursor até o final da
    linha.


IV.4.4 - CrtExit

    Envia   para  a  tela  de   vídeo  a  string de finalizaçäo definida na
    instalaçäo


IV.4.5 - CrtInit

    Envia para  a   tela  de  vídeo  a  string de inicializaçäo definida na
    instalaçäo.


IV.4.6 - Delline

    Procedure   que  elimina   a  linha   em  que  está o cursor. As linhas
    posteriores sobem, ocupando a que foi eliminada.

    Exemplo:

    Program exemplo;
    Uses CRT;
    Begin
        ClrScr;
        Writeln('linha 1');
        Writeln('linha 2');
        Writeln('linha 3');
        Writeln('linha 4');
        Gotoxy(1,2);        (* posicionei o cursor no início da linha 2 *)
        Delline;
    End.

    O programa anterior irá provocar a seguinte tela:
    ---------------------------------------------------------
    linha 1
    linha 3
    linha 4
    ---------------------------------------------------------
    Repare que a string 'linha 2' foi eliminada.


IV.4.7 - HighVideo

    Coloca o   vídeo   no  modo  normal.   Esta  procedure é equivalente  a
    NormVídeo.


IV.4.8 - InsLine

    Esta procedure faz examente o contrário de Delline, ou seja, insere uma
    linha na posiçäo atual do cursor.

    Exemplo

    Program Exemplo;

    Begin
        ClrScr;
        Writeln('linha 1');
        Writeln('linha 2');
        Writeln('linha 3');
        Writeln('linha 4');
        Gotoxy(1,3);        (* cursor na 1a. coluna da 3a. linha *)
        InsLine;
        Write('teste');
        Gotoxy(1,20);
    End.

    Este Programa provocará a seguinte tela
    ---------------------------------------------------------
    linha 1
    linha 2
    teste
    linha 3
    linha 4
    ---------------------------------------------------------


IV.4.9 - LowVideo

    Coloca   o  vídeo  em  baixa intensidade até que se execute a procedure
    NormVideo ou HighVideo.


IV.4.10 - NormVideo

    O mesmo que HighVideo


IV.4.11 - TextBackGround

    Esta   procedure   seleciona  a  cor do fundo sobre o qual o texto será
    escrito. Sua sintaxe geral é:

    TextBackGround(cor);

    Tabela de cores

    0   Black   Preto
    1   Blue    Azul
    2   Green   Verde
    3   Cyan    Ciano
    4   Red Vermelho
    5   Magenta Magenta
    6   LightGray   Cinza-claro

    Nós podemos entrar com o número ou o nome da cor em inglês

    Exemplo:

    Program Exemplo;
    Uses CRT;

    Begin
        ClrScr;
        WriteLn('teste');
        TextBackGround(7);
        Writeln('teste');
        TextBackGround(Brown);
        Writeln('teste');
    End.


IV.4.12 - TextColor

    Esta procedure permite selecionar a cor com que o texto será imprimido.

        Tabela de cores

    0   Black   Preto
    1   Blue    Azul
    2   Green   Verde
    3   Cyan    Ciano
    4   Red Vermelho
    5   Magenta Magenta
    6   Brown   Marrom
    7   LightGray   Cinza-claro
    8   DarkGray    Cinza-escuro
    9   LightBlue   Azul-claro
    10  LightGreen  Verde-claro
    11  LightCyan   Ciano-claro
    12  LightRed    Vermelho-claro
    13  LightMagenta    Magenta-claro
    14  Yellow  Amarelo
    15  White   Branco
    16  Blink   Piscante

    Exemplo:

    Program Exemplo;
    Uses CRT;

    Begin
       Clrscr;
       TextBackGround(7);
       TextColor(black);
       writeln('teste');
       TextColor(black+blink);
       write('teste');
    End.


IV.4.13 - Window

    Sintaxe:  Window(x1,y1,x2,y2);

    Esta  procedure  tem o poder de definir uma janela de texto cujo  canto
    esquerdo  superior é x1,y1  e canto inferior direito é x2,y2. Após esta
    instruçäo,  as  instruçöes ClrScr, Write Writeln agem somente dentro da
    janela    recém   definida.  A  instruçäo  Gotoxy passa a utilizar como
    referencial o ponto x1,y1 que passa a ser considerado 1,1.

    Exemplo:

    Program Exemplo;
    Uses CRT;
    Begin
        Window(10,10,70,20);
        ClrScr;               (* limpa somente a janela *);
        Writeln('teste');     (* escreve 'teste' em 10,10 *)
    End.


IV.4.14 - WhereX

    Funçäo que retorna o número da coluna onde está o cursor.


IV.4.15 - WhereY

    Funçäo que retorna o número da linha onde está o cursor.


IV.5 - Controle do teclado
       -------------------

IV.5.1 - Kbd

    Quando  quisermos  ler dados do teclado e que näo sejam ecoados para  o
    monitor   de  vídeo  até  que  sejam processados e aceitos, nós podemos
    utilizar a seguinte sintaxe:

    Read(Kbd,Variável);

    No  caso  de  números inteiros ou reais, o número só será aceito quando
    pressionarmos  a  tecla <enter>, no  caso  de variáveis do tipo char, o
    caractere  será   aceito  sem  que   seja necessário pressionar a tecla
    <enter>, idem para o tipo string.

    Exemplo:

    Program Exemplo;
    Uses CRT;
    Var i:integer;

    Begin
        ClrScr;
        Write('Entre com um inteiro --> ');
        Readln(Kbd,i);
        Writeln(i);
    End.


IV.5.2 - BufLen

    Buflen é   uma variável interna pré-definida em Turbo Pascal cujo valor
    inicial é 126.Ela contém o número máximo de caracteres aceitos por Read.

    Exemplo:

    Program Exemplo;
    Uses CRT;

    Var i : Integer;

    Begin
        ClrScr;
        Writeln(Buflen);    (* escreve 126 *)
        Buflen:=2;
        Write('Digite um inteiro --> ');
        Readln(i);          (* se você tentar digitar inteiros com
                               mais de dois dígitos,  readln   näo
                               permitirá *)
    End.


IV.5.3 - Keypressed

    O  identificador  Keypressed é  uma funçäo especial do Turbo Pascal que
    retorna um valor booleano - TRUE se uma tecla foi pressionada, ou FALSE
    caso contrário. Ela é muito utilizada para detectar teclas pressionadas
    no teclado.

    Exemplo

    Program Exemplo;
    Uses CRT;
    Begin
        ClrScr;
        Write('Pressione uma tecla -> ');
        Repeat until Keypressed; (* repita até que   uma  tecla
                                    seja pressionada. O comando
                                    Repeat Until  será estudado
                                    mais adiante *)
    End.



.~`^'-_!+=/.,~`^'- 08 - CONCEITOS BASICOS EM VISUAL BASIC -_!+=/.,~.~`^'-_!+=/

 Microsoft Visual Basic 4.0 for Windows 95

 "O Arquivo de Projeto"

 O arquivo de projeto, como default, sempre terá a extensão "*.VBP"
 Um arquivo VBP (Visual Basic Project) é um indice (ou catalogo)
 que armazena as especificacões dos demais componentes (arquivos)
 necessários para o perfeito funcionamento da aplicacão.
 Os arquivos VBP são sempre armazenados no formato ASCII, permitin-
 do que você os customize manualmente por meio de um editor padrão
 ASCII ou até mesmo crie aplicacões que funcionem como utilitários
 para gerenciamento dos arquivos de projetos.


 "Componentes de um Projeto"

 'Arquivos de Formulários (.FRM)'

 Estes arquivos possuem a extensão FRM e, como seu próprio nome já
 diz, armazenam os textos (códigos e referências) dos formulários e
 seus controles, incluindo todos os valores iniciais das proprieda-
 des estabelecidas em tempo de desenho. O arquivo FRM também armaze-
 na todas as declaracoes de variáveis, constantes, procedures exter-
 nas (do desenvolvedor) ou de enventos.
 
 'Arquivos de Módulos'
 
 Um arquivo de módulo possui como padrão a extensão BAS. Este compo-
 nente de um projeto devera ser utilizado para a criacão de rotinas
 genéricas, declaracoes globais e atributos globais para o ambiente
 do desenvolvimento. Uma rotina, quando declarada dentro de um arqui-
 vo de módulo, poderá ser chamada por qualquer formulário de projeto.
 No caso de variáveis, constantes ou tipos de dados, estes devem ser
 explicitamentes declarados como públicos por meio da declaracão
 "PUBLIC", caso contrario sua abrangência será apenas para o módulo
 em questão.
 
 'Arquivos de Controles 16 Bits (.VBX)'
 
 Algumas classes de objetos disponíveis no Visual Basic 4.0 já estão
 embutidos em sua biblioteca, no entanto não seria possível desenvol-
 ver algumas tarefas, como por exemplo a programação de uma aplicação
 para comunicacao via modem, utilizando-se apenas os controles inter-
 nos do Visual Basic 4.0. Os arquivos VBX são arquivos de controles
 customizados que permitem aumentar os recursos de diversas classes
 de objetos ou criar novas classes. Sempre que você utilizar um ou
 mais arquivos de controles, deverá adicioná-los ao projeto, fazendo
 com que estejam disponíveis na caixa de controles e na janela de pro-
 jetos. Dessa forma sempre que voce compilar sua aplicação, eles não
 serão acoplados ao arquivo EXE gerado, obrigando-o a entregar uma có-
 pia dos mesmos ao seu usuário, do contrário sua aplicação não funcio-
 nará. Esses arquivos estão disponíveis somente na versão 16 Bits do
 Microsoft Visual Basic 4.0; para a versao 32 bits você deverá utili-
 zar os arquivos OCX.
 
 'Arquivos de Controles Customizados OLE (.OCX)'
 
 Esta é uma novidade da versão 4.0 do VB. Os arquivos de controles
 customizados OLE possuem a extensão .OCX. Quando você instala o VB
 4.0, esses arquivos sao copiados para o diretorio \WINDOWS\SYSTEM
 e alguns deles já são embutidos na caixa de controles. Os arquivos
 OCX permitem uma maior flexibilidade no desenvolvimento, já que fun-
 cionam para as versões 16 e 32 Bits. Para cada VBX das versoes ante-
 riores do VB, esta versão traz um OCX compatível. Este é um padrão
 de indústria para controles costumizados, que já estão sendo utiliza-
 dos pelas empresas que desenvolvem produtos auxiliares (Add-Ins)
 para programadores VB.
 
 'Arquivos de Classes (.CLS)'
 
 Os arquivos de classes são semelhantes aos formulários, só que não
 possuem uma interface visível. Nos arquivos .CLS, você poderá definir
 seus próprios objetos, cada um com suas propriedades e métodos. Os
 objetos criados em arquivos .CLS não possuem eventos.
 
 'Arquivos de Recursos (.RES)'
 
 Os arquivos de recursos permitem armazenar diversos dados (textos,
 bitmaps, sons etc.) os quais podem ser alterados sem a necessidade
 de alteração do seu código VB. Para criar arquivo .RES, você neces-
 sitara utilizar um ambiente de desenvolvimento que possua editor e
 compilador de recursos como o "AppStudio", que está disponível no
 MS C++.
 
 'Arquivos Externos (Insetable Objects)'
 
 Os arquivos externos geralmente possuem a extensão .EXE e fazem par-
 te de produtos externos ao VB. Esses arquivos permitem criar soluções
 integradas com aplicações.
 
 
 
 "Propriedades"
 
 As propriedades definem as caracteristicas de determinado controle ou
 formulario. Aqui vou mencionar as propriedades mais importantes:
 
 BorderStyle - Esta propriedade permite especificar o estilo da borda.
               Cada controle tem um estilo de borda diferente.
 
 Caption - A maioria dos objetos possui textos de apresentação. No caso
           de formulários, o texto de apresentação é o título da janela.
           A propriedade Caption permite especificar um texto de apresen-
           tação para o(s) objeto(s) selecionado(s).
 
 Left - Esta propriedade podera ser manipulada movendo-se o formulário
        horizontemente na tela ou alterando-se o seu valor na janela de
        propriedades. Por meio dela você poderá especificar a posição
        relativa da margem esquerda do formulário em relação à margem
        esquerda do desktop. Os valores expressos aqui, são especificados
        em TWIPS. Cada polegada tem 1440 TWIPS.
 
 Top - Esta propriedade permite estabelecer a posição vertical do formu-
       lário na tela. Você poderá alterá-la movendo o formulário vertical-
       mente na tela ou alterando o seu conteúdo na janela de propriedades.
 
 Height - Permite especificar a altura do formulário. Sempre que aumenta
          ou diminui a altura do formulário (manualmente), você estará
          atribuindo, automaticamente, um novo valor para esta proprie-
          dade.
 
 Width - Igual a propriedade anterior, so que referente a largura de um
         objeto.
 
 Name - Esta propriedade é uma das mais importantes e está disponível
        para todos os objetos do VB. Por meio dela você poderá atribuir
        um nome para identificar um objeto selecionado dentro do código.
        Como default, cada objeto possui um nome, geralmente o mesmo da
        propriedade Caption.
        Para colocar um nome em um objeto, recomendo que coloque o seguin-
        te prefixo para poder identificar.
        OBJETO                   PREFIXO DO NOME
        Directory List Box       Dir
        Drive List Box           Drv
        File List Box            Fil
        Form                     Frm
        Frame                    Fra
        Grid                     Grd
        Horizontal Scroll Bar    Hsb
        Label                    Lbl
        Line                     Lin
        List Box                 Lst
        Menu                     Mnu
        OLE Client               Ole
        Option Button            Opt
        Picture Box              Pic
        Shape                    Shp
        Text Box                 Txt
        Timer                    Tmr
        Verical Scroll Bar       Vsb
 
 Autosize - Esta propriedade, quando ativada, faz com que o tamanho
            do label seja ajustado conforme o texto de apresentação
            nele inserido.
 
 Sorted - Esta propriedade permite ativar ou desativar a classifica-
          ção ascendente automática dos itens existentes dentro de
          um Combo Box.
 
 ForeColor - Esta propriedade permite especificar a cor a ser utili-
             zada para o texto existente dentro do objeto em questão.
 
 MaxLength - O Texto Box permite a entrada de 65.535 caracteres. Por
             meio dele, podemos especificar um valor máximo de carac-
             teres a serem digitados.
 
 Text - A propriedade Text permite especificar um texto a ser inserido
        dentro do Text Box.
 
 Font - Esta propriedade permite alterar as características de letras
        que devem ser utilizadas para o texto a ser inserido na caixa
        de texto em questão.
 
 Multiline - Através da propriedade Multiline, podemos ativar ou desa-
             tivar o tratamento de múltiplas linhas de textos dentro
             de um Text Box.
 
 ScrollBars - Sempre que trabalharmos com Text Box de forma multili-
              nhas, devemos ativar algum tipo de barras de rolagem,
              permitindo que o usuário percorra rapidamente o texto
              digitado.
 
 
 
 "Sintaxe para Programacao das Propriedades"
 
 Form.Controle.Propriedade = valor
 
 
 
 "Tipos de Dados no VB4"
 
 TIPO            TAMANHO                 PRECISAO/ABRANGENCIA
 Integer         2 bytes                 -32,768 ate 32,767
 Long            4 bytes                 -2,147,483,648 ate 2,147,483,647
 Single          4 bytes                 -3.402823E38 ate -1.401298E-45
                                         1.401298E-45 ate 3.402823E38
 Double          8 bytes                 -1.79769313486231E08 ate
                                         -4.94065645841247E 324
                                         -4.94065645841247E 324 ate
                                         1.79769313486231E308
 Currency        8 bytes                 -922337203685477.5808 ate
                                         922337203685477.5807
 String          1 byte p/caractere      0 ate 65.535 caracteres
                                         0 to 2E32 no sistema 32 bits
 Byte            1 byte                  0 ate 255
 Boolean         2 bytes                 True ou False
 Date            8 bytes
 Object          4 bytes                 Qualquer distância de um objeto
 Variant         16 bytes+ 1 por carac.  Aceita qualquer um dos acima.
 
 
 Qualquer elemento declarado como Variant poderá armazenar qualquer
 um dos tipos de dados apresentados, incluindo objetos e arrays.
 
 
 "Declarando Variaveis"
 
 Existem dois tipos de declaração: as implícitas e as explícitas. Vamos
 estudar as duas, as suas diferenças, etc.
 
 Veja o exemplo a seguir:
 
 ----------------------------------------------------------------------
 Private Sub Command1_Click()
 
   VarTemp1 = 10
   VarTemp2 = 55
   VarTemp3 = 12
 
   Print VarTemp1 + VarTemq2 + VarTemp3
 
 End Sub
 ----------------------------------------------------------------------
 
 Analisando o resultado, vemos que nao corresponde ao real, pois a soma
 deveria resultar em 77 e não em 22 como ocorreu. No entanto, não foi
 emitida nenhuma mensagem de erro de execução ou sintaxe dificultando
 assim o reconhecimento e correção do código. O que ocorreu é que o
 nome da segunda variável declarada é VarTemp2 e não VarTemq2, como foi
 digitado na linha de somatória. Para evitar esses problemas, você deverá
 usar as declarações explícitas. Para você por uma declaração explícita,
 basta ir no General Declarations, e digitar a seguinte linha: OPTION
 EXPLICIT, ou podera ir no menu Tools, selecionar a opção Options, e na
 caixa de diálogo que estiver escrito "Require Variable Declaration",
 marque com um X. Se você fizer isso, o exemplo acima não irá funcionar,
 pois o VB irá enviar uma mensagem de erro, como VARIABLE NOT DEFINED.
 
 
 Para voce declarar explicitamente uma variável, deverá utilizar o
 comando Dim. Veja a sintaxe básica:
 
 DIM nomevariavel AS tipo
 
 'nomevariavel' - Especifica o nome a ser atribuido à variável
 'tipo' - Especifica o tipo da variável. Caso não seja especificado, será
          atribuido a default, que é a Variant.
 
 Uma outra forma de declarar variáveis é utilizando os sufixos:
 
 TIPO            SUFIXO
 Integer         %
 Long            &
 Single          !
 Double          #
 Currency        @
 String          $
 
 
 
 Caso você necessite declarar variáveis com o mesmo nome, faça o seguinte:
 
 modulo.NomeVar
 
 'modulo' - Nome do módulo no qual a variável está armazenada
 'NomeVar' - Especifica o nome da variável a ser utilizada.
 
 
 Para você declarar uma constante, você deverá utilizar o seguinte comando:
 
 Const nomeconst [As tipo] = valor
 
 'nomeconst' - Especifica o nome da constante
 'tipo' - Especifica o tipo de conteúdo da constante
 'valor' - Especifica o valor armazenado na constante
 
 
 Constantes Públicas: Devem ser declaradas dentro da área de declaração dos
 módulos por meio da sintaxe:
 
 Public Const nomeconst = valor
 
 
 "Arrays de Dados no Microsoft Visual Basic 4.0"
 
 Conceitos
 
 Arrays são coleções de variáveis que compartilham o mesmo nome e possuem um
 número, chamado Índice, o qual permite identificar o elemento que desejamos
 manipular.
 Obrigatoriamente, todos os elementos de um array deverão possuir o mesmo
 tipo de dado. Para permitir armazenar diferentes conteúdos para elementos
 do mesmo array, você deverá criá-lo com o tipo Variant.
 Basicamente, existem dois tipos de arrays: arrays fixos e arrays dinâmicos.
 Os arrays fixos terão um tamanho preestabelecido na sua declaração e não
 poderão ser alterados no decorrer da execução do aplicativo. No caso dos
 arrays dinâmicos, estes deverão ser declarados apenas com o número de
 dimensões (colunas) que possuem e o seu tamanho será definido no decorrer
 da execução do aplicativo, podendo ser aumentado ou diminuído.
 
 Declarando Arrays Unidimensionais Fixos
 
 A sintaxe utilizada deverá ser a seguinte:
 DIM/PUBLIC/PRIVATE nomearray(nelementos) [sufixo] As tipo
 
 nomearray - Especifica o nome que será utilizado para identificação do
             array.
             A nomenclatura dos arrays segue as regras para nomenclatura das
             variáveis
 nelemento - Indica o número de elementos que o array deverá possuir.
 sufixo - Opcionalmente poderá ser utilizado para especificar o tipo do
          array.
 tipo - Dado que será utilizado para armazenamento dentro dos elementos do
        array. Caso não seja especificado, será assumido o tipo Variant.
 
 Declarando Arrays Multidimensionais Fixos
 
 Chamamos de arrays multidimensionais os que são declarados com mais de uma
 dimensão, isto e, mais de uma coluna.
 Sintaxe:
 DIM/PUBLIC/PRIVATE nomearray(X1, Y1, X2, Y2, ...) [sufixo] As tipo
 Xn - Indica o número de elementos da dimensão (número de linhas)
 Yn - Indica o número de dimensões (número de colunas)
 
 
 Entendendo Procedimentos
 
 Sempre que o usuário efetua uma ação válida sobre um objeto, este dispara
 uma rotina denominada "procedimento de evento", a qual poderá ter várias
 instruções para serem executadas. Este é um tipo de procedimento, mas
 existem vários outros:
 -procedimentos da linguagem
 -funções da linguagem
 -procedimentos do usuário
 -funções do usuário
 
 Existem diversos pontos que diferenciam um procedimento de uma função a
 saber:
 1. Na Chamada:
    A) Quando você chama um procedimento dentro do seu código, este deverá
       obrigatoriamente iniciar a linha de código.
 
       Exemplos válidos:
       END   'Procedimento da Linguagem
       COMMAND1_CLICK    'Procedimento de Evento
       MEU_PROCEDIMENTO  'Procedimento do Usuario
 
       Exemplos não válidos:
       DIM VARMEM
       VARMEM = END
       VARMEM = COMMAND1_CLICK
       VARMEM = MEU_PROCEDIMENTO
 
    B) Uma função sempre deverá ser atribuida a uma expressão, isto é, nunca
       poderá iniciar uma linha de código e sempre deverá ser seguida de
       parênteses ("()").
 
       Exemplos válidos: DIM VARMEM
       VARMEM = STR(10000)   'Funcao da Linguagem
       VARMEM = MINHA_FUNCAO()    'Funcao do Usuario
       IF MINHA_FUNCAO() = 10 THEN ...  'Funcao do Usuario
 
       Exemplos não válidos:
       STR(10000)MINHA_FUNCAO()MINHA_FUNCAO
 
 2. Na criação:
    A) Um procedimento é sempre criado dentro de um bloco definido pelos co-
       mandos SUB...END SUB, conforme os gabaritos a seguir.
 
       Gabarito para Procedimentos de Eventos:
       SUB OBJETO_EVENTO (lista de argumentos)
          comandos
       END SUB
 
       Gabarito para Procedimentos do Usuário:
       SUB MEU_PROCEDIMENTO (lista de argumentos)
         comandos
       END SUB
 
    B) Uma função é sempre criada dentro de um bloco definido pelos comandos
       FUNCTION...END FUNCTION, conforme o gabarito a seguir:
       Gabarito para Funções do Usuário:
       FUNCTION MINHA_FUNCAO (lista de argumentos)
         comandos
       END FUNCTION
 
 Uma outra diferenca entre os procedimentos e as funções é que as funções
 sempre retornam valores a sua chamada original.
 
 
 
 "Estruturas Condicionais"
 
 Por meio das Estruturas Condicionais, podemos testar condições e tomar
 decisões. Nela podemos usar If, Else, ElseIf, End If, >, <, =, AND, OR.
 If - Se
 Else - Se nao
 ElseIf - Se nao, Se
 >  maior que
 <  menor que
 =  igual a
 AND - e
 OR - ou
 Exemplo:
 ----------------------------------------------------------------------------
 Private Sub Command1_Click()
   Dim Nota As Integer
   Nota = Text1.Text
   If Nota > 10 Then
     MsgBox "Esta Nota é Invalida", 16, "Erro"
   ElseIf Nota = 10 Then
     MsgBox "Parabens! Nota maxima!', 16, "CDF"
   ElseIf Nota < 6 Then
     Msgbox "Nota Horrivel!", 16, "Burro"
   EndIf
 End Sub
 ----------------------------------------------------------------------------
 Traduzindo:
 Ele cria uma variável chamada "Nota", no qual será o Text1.Text. Dai a
 pessoa tem que digitar a nota. Quando a pessoa clicar no Command1, e se a
 Nota for maior que 10, aparece uma mensagem como nota inválida, se for 10 a
 nota, aparecerá uma mensagem de Parabéns. Se for menor que 6, exibirá uma
 mensagem que a pessoa foi mal.
 
 Opcionalmente, você poderá usar a estrutura SELECT CASE...END SELECT para
 testar condições. A sintaxe é a seguinte:
 
 Select Case condicao
 [Case expressao -n
    [commandos]]
 [Case Else
    [comandos1]]
 End Select
 
 condicao: Especifica a condição a ser avaliada
 expressao -n: Expressão a ser avaliada e comparada com a condição estabele-
 cida.
 comandos: Grupo de comandos a serem executados se a condição for verdadeira.
 
 
 "Estruturas de Controles de Loopings (Lacos)"
 
 Em alguns trechos de códigos, você poderá necessitar repetir um bloco de
 comandos um certo numero de vezes ou a partir de condições preestabelecidas.
 Veja a sintaxe:
 
 Do [{While | Until} condicao]
   [comandos]
   [Exit Do]
   [comandos]
 Loop
 
 While: Enquanto
 Until: Ate que
 
 Exemplo:
 
 Private Sub Command1_Click()
   Dim Contador%
   'Fazer Enquanto o Contador for menor ou igual a 2000
   Do While Contador% <= 2000
     Contador% = Contador% + 1
     List1.AddItem "Item" & Str(Contador%)
   Loop
 End Sub
  
 
 Veja o mesmo programa usando o Until
 
 Private Sub Command1_Click()
   Dim Contador%
   Do Until Contador% >= 2000
     Contador% = Contador% + 1
     List1.AddItem "Item" & Str(Contador%)
   Loop
 End Sub
 
 
 A segunda estrutura de looping é o WHILE...WEND que é a mesma coisa que
 DO WHILE...LOOP
 
 A terceira estrutura de looping é um contador acumulador. Veja a sintaxe:
 
 For contador = valor_inicio To valor_final [Step incremento]
   [comandos]
   [Exit For]
   [comandos]
 Next [contador]
 
 Exemplo:
 Dim Contador%
 For Contador% = 0 To 10
   Combo1.AddItem Contador%
 Next 
 Note que o Combo1 irá ter números de 1 a 10.

 ............................................................................
 
 Bom, esta parte de VB foi enviada por um amigo nosso e especialmente coloca-
 do na ZINE, especialmente, pois VB iria ficar sem apoio este mes, porem com
 o envio desse texto, poderemos colocar coisas para este e para o proximo
 numero, ai ateh lah esperamos poder ter alguem jah com a funcao de escrever
 ensinando VB. Entao eh isso ai, a unica coisa que nao sei eh de quem real-
 mente eh esse texto, mas ai... ao autor, parabens pelo texto que estah
 otimo.


                                            T+ [Eagle's Power]'s


.~`^'-_!+=/.,~`^'-_! 09 - PIADAS... Hahahahahahah .~`^'-_!+=/.,~`^'-_!.~`^'-#$


YEH YEH YEHHHH!!!! AHAHAHAHAHHAHA Vamos malucao, sorria, vc. pode nao saber
mas voce esta sendo FILMADO...hihiihihihihhhi nada ve, mas entao beleza q.
pura oh bicho, vamo q. vamo, o zine nao pode para..eeheheheheh bicho vamos
continuar a nos divertir com as piadas ok? tem uns doido por ai oh q. disse
q. as piada ele jah conhecia todas, entao eu respondo: Beleza pura vei, ai
se nao perde tempo lendo ohhh, vai lendo o resto ok?!?!?!
Tipo eh o seguinte malucada espero q. todos colaborem, pois eu nao tenho um
estoque de piada ohhh, mas beleza "DROGAS, CRIMES, TRINTA E OITO NA MAO, PRO-
FISSAO LADRAAAAAAOOOO!!!! viajei, eh q. eu to ouvindo um som ak oh vei, mas
tah dodio tah danado tah pitimbado, vamos da rizada vai....
 
Entao pessoal, vamos nos divertir numa boa certo?
Beleza... Vamos nessa que eh bom a bessa...:)    <-_
                                                    I
     Ueh, isso ak jah tinha na zine anterior...eheh I
 
                                                []'pX_LARVA ESPOLETA

01. O Garoto chega em casa e logo quer saber o por que sua familia morre de
    repente, entao, assim que entra em sua casa corre para sua mae e pergunta:
    Mamae.... Por que eh que todos em nossa familia morrem de repente!?
    ..... Mamae!? ..... Mamae!? ..... Mamaaaaaaaeeeeee..... Xi.... :))

02. Voltando do recreio, Marcelo pede ao professor para ir beber agua, este
    diz que nao, que ele deveria ter ido durente o intervalo.
    apos cinco minutos ele insiste:
    - professor eu preciso muito beber agua, posso?
      o professor diz novamente que nao!
      mais cinco minutos e....
    - mas professor eu estou morrendo de sede... posso ir!?
    - NAO!
      passados outros cinco minutos.
    - professor nao estou aguentando, posso beber agua!?
    - jah disse q. nao. olhe.. pense q. estah com frio q. a sede passa.
      apos cinco minutos Marcelo retorna:
    - professor, o senhor tem um cobertor!? :))

03. Sabe por que o cerebro da mulher fica deste tamanho (.) quando ela morre!?
    porque Dilata! :))

04. Sabe pq. uma loira ficou contente ao montar um quebra cabeca depois de
    2 anos!?, pois na caixa infromava: De 4 a 6 anos! :))

05. Se nao fosse pelas mulheres, ficariamos na Mao! ;))

06. Num asilo de velhos, um ancião se dirigiu a uma colega:
    Não podemos ter sexo, mas gostaria de ter alguém para segurar o meu pênis,
    não creio que isso faça mal.
    A coleginha aquiesceu e durante dois meses se encontravam para tomar sol
    no terraço, ele tirava a estrovenga e ela pegava.
    Um belo dia ele desapareceu. Ela procurou por toda parte no asilo, e foi
    finalmente encontrá-lo no quintal, sentado ao lado de
    outra velhinha, que segurava o seu membro viril. A antiga companheira
    ficou indignada:
    Durante dois meses eu segurei seu pênis sem problema, e agora você me
    deixa por uma outra. O que ela tem que eu não tenho?
    O velhinho retrucou sorrindo:
    Doença de Parkinson!

07. O pneu do carro do Manuel fura diante de um hospicio. Ele desce e tira as
    porcas da roda, mas elas escorregam para dentro de um bueiro. Um dos in-
    ternos assiste a cena do lado de dentro das grades do manicomio e acon-
    selha ao Manuel:
    Tire uma porca de cada uma das tres rodas para segurar a que ficou solta,
    ate chegar a um posto.
    Fenomenal! Muito boa ideia. Obrigado! Olhe, eu nem sei por que tu estas ai
    dentro.
    Eu estou aqui porque sou doido, nao porque sou burro!

08. Ao vir para o Brasil, o Manuel fica fascinado com a caixa de fosforos e
    resolve mandar uma de presente para a Maria, em Portugar, junto com uma
    carta explicando o seu uso. Dias depois, recebe um telegrama de Maria:
    "Nao funciona". Incredulo, o Manuel comenta:
    - Mas como? Eu testei um por um...

09. O Portugues chegou ao Brasil e veio visitar um amigo seu. Logo apos o
    pouso do aviao, saiu procurando pelo amigo que jah o esperava com sua
    mercedes,logo ao entrar no carro, avistou um negocio na parte da frente
    do carro e perguntou ao amigo o que era akilo!?
    e o amigo respondeu:
  - eh o seguinte... sempre que eu quero acertar alguem, eu miro ali e vou
    em cima da pessoa, ai buUUUUmmm!
  - hmmmm. legal....
    nisso vinha passando uma senhora pela rua... ai o cara acelerou e seguiu
    em direcao a senhora na maior velocidade e dizendo ao Portugues:
  - Veja como funciona...
    e tirando o maior sarro continuou acelerando, ao chegar perto da senhora,
    ele desviou pois sua intencao era de brincar com o amigo, foi quando
    ouviu:
    PLAFT! Parou para olhar e viu a senhora caida, foi quando ia falar e foi
    interrompido pelo portugues:
  - Tu precisas concertar esta mira.... se eu nao abro a porta, tu nunca
    iria acerta - la! :))

10. Por que portugues usam caneta atras da orelha?
    - Pra fazer conta de cabeca.

11. - Por favor! O senhor viu alguem dobrando esta esquina, agora ha pouco? -
      Nao, senhoire. Quando aqui cheguei, ela ja estava dobrada... 

12. Em Lisboa, apos um incendio no pequeno predio, os bombeiros, verificando
    os destrocos, encontram apenas um morto.E justamente o avo do Manuel, que
    estava de cabeca para baixo, com o dedo indicador apontando para um dos
    cantos do ambiente.Ao seu lado, um extintor de incendio, com a seguinte
    instrucao: " Em caso de incendio, vire de cabeca para baixo e aponte
    para a chama".

13. E o Manuel entra com tudo numa contramao. Da azar e eh parado por um
    guarda, no ato:
    - Onde o senhor pensa que vai? - Bem, seu guarda, eu estava a ire ao
      cinema, mas parece que me atrasei. Esta todo mundo a voltaire!

14. No elevador, estao o Manuel e um casal desconhecido. De repente, nosso
    amigo d'alem-mar solta um estrondoso pum. O outro, claro, chia:
    - O senhor nao tem vergonha? Fazer isso na frente de minha mulher?
    - Oh! Desculpe! Eu nao sabia que era a vez dela.

15. O Manuel presenteia a filha moca com um casaco de pele de raposa prateada.
    Satisfeitissima, ela afaga o presente com as maos comentando:
    - Como pode uma coisa tao maravilhosa vir de um animal tao pequeno, sem
      aparencia, totalmente insignificante...
    - Alto la! Se tu nao queres me agradeceire, va la. Mas tambem nao precisa
      ofendeire!...

16. O Manuel vai visitar um velho navio de guerra. Em um dos compartimentos,
    tropeca numa placa de bronze, onde esta escrito: " Aqui tombou o Almirante
    Barroso". E comenta:
    - Nao eh de admiraire. Eu tambem quase cai aqui!

17. - Comandante Joaquim! Estou a avistaire uma tropa que se encaminha
      diretamente ao nosso forte!
    - Sao amigos ou inimigos, sentinela Manuel?
    - Olha, eu acho que sao amigos. Vem todos juntos... 

18. - Voce sabe porque portugues usa bigode?
    - Nao.
    - Pra ficar parecido com a mae. 

19. - Sabes Joaquim, o doutoire me disse para bebeire um pouco de suco de
      limao depois de um banho quente.
    - E tu bebeste o suco de limao, Manuel?
    - Que nada! Nao consegui nem acabar de bebeire toda aquela agua quente
      do banho!

20. O Manuel e a Maria vao ao jogo de futebol. Chegam superatrasados porque a
    Maria demorou seculos se arrumando. Quando entram no estadio, esta para
    comecar o segundo tempo. O Manuel pergunta a um dos torcedores:
    - Como esta o jogo?
    - Zero a zero.
    - E a Maria:
    - Estas a veire? Chegamos a tempo!

21. O Manuel vai ao Rio de Janeiro. Os amigos o advertem que la os motoristas
     de onibus e taxi costumam voar com seus veiculos. Chegando na Cidade
     Maravilhosa, Manuel pega um taxi:
     - Avenida Brasil, por favoire.
     - Que altura?
     - Se tu fores a mais de dois metros, eu pulo desse troco, o raios! 

22. - O, Maria, estou a morrer de cansaco... Vim correndo atras do onibus e,
      sem nunca o alcancaire, acabei chegando ate aqui... meu consolo e que
      economizei vinte cruzados...
      - Mas tu es burro mesmo, hein, Manuel? Por que nao correste atras de um
        taxi? Terias economizado muito mais!

23. O carro do Manuel enguica e ele vai com o filho ao mecanico. Apos verifi-
    car o motor do velho carro, o mecanico diz:
    - O problema esta no freio. Vou ter que mexer no burrinho.
    O Manuel puxa o garoto para tras e se altera:
    - Nao, senhoire! No garoto ninguem mexe! 

24. O Manuel chega em casa, numa tarde, e da com um pinguim em seu jardim. Sem
    nunca ter visto um antes, ele fica todo atrapalhado, sem saber o que fazer,
    e pede ajuda para um vizinho, que o aconselha:
    - Olha, Manuel, o melhor que voce tem a fazer e leva-lo ao Zoologico.
      No dia seguinte, o vizinho encontra com o Manuel passeando com o pinguim
      levando-o rua abaixo por uma cordinha amarrada no pescoco e se surpreen-
      de:
    - O, Manuel! Aonde voce vai com o bicho! Voce nao o levou ao zoologico
      ontem? - Levei sim e ele adorou. Hoje, estou a leva-lo ao Plycenter.

25. O Manuel se emprega como ajudante numa oficina mecanica. O dono o chama
    para a primeira tarefa:
    - To consertando o pisca-pisca deste carro. Vai la atras e me diz se ta
    funcionando. E o Manuel, olhando com atencao para a lanterna traseira:
    - Ta funcionando, nao ta funcionando, ta funcionando, nao ta funcionando.. 

26. Chega o assaltante, apontando uma arma por debaixo da roupa, e grita pro
    Manuel:
    - Pare!
    - Impare!
    E o assaltante, sem entender nada:
    - Mas eu estou te roubando...
    - Ah! Entao nao brinco mais!

27. - Ora, Manuel! Ate que enfim o quilo do arroz baixou!
    - Afe, Maria? E quantos gramas pesa agora? 

28. O Manuel vai trabalhar de mordomo:
    - Acorda, patrao! Acorda!
    - O que foi? O que foi?
    - Esta na hora do senhoire tomar o remedio para durmire...

29. O Manuel vem dirigindo pela estrada. Uma viatura da policia rodoviaria o
    faz parar e o guarda lhe pede a carta.
    - Carta?
    Ora, mas eu fiquei de lhe escreveire? 

30. A Maria vai ao medico:
    - Ai doutoire! Eu nao consigo dormire. Se durmo virada pra cima, sou
    atacada por forte doire de cabeca. Se viro para um lado, atacam-me os
    rins. Se viro para o outro ataca-me uma doire no baco.
    O que e que eu faco, o doutoire?
    - Porque a senhora nao experimenta dormir de brucos?
    - Porque, ai , me ataca o Manuel!

31. O Manuel faz uma ligacao telefonica:
    - Alo? E da Varig? Por favoire, senhorita, eu queria sabeire o tempo de
      voo Sao Paulo-Lisboa.
      - Um minutinho...
      - Ah! Esta bem, muito obrigado! E desliga o telefone. 

32. - Entao, Manuel, como se tem se sentido com os banhos que lhe receitei?
    - Muito bem, doutoire. So que sinto o corpo um pouco pegajoso.
    - Pegajoso?
    - E, eu acho que e por causa do assucar...
    - Assucar?
    - O senhoire nao mandou tomaire banhos de agua douce? Ora, pois... 

33. O executivo ja esta atrasado para pegar o aviao e toma um taxi que o
    Manuel dirige nas horas de folga. A certa altura, se impacienta:
    - Nao sei por que foram construir o aeroporto tao longe da cidade.
    - E que queriam que ele ficasse bem perto dos avioes, doutoire.

34. O Manuel e a Maria resolvem ir ao Teatro Municipal. Percebendo estarem
    atrasados, o marido pede a mulher que se apresse. Apos muitos retoques,
    a Maria termina de se arrumar e eles se dirigem as pressas para o teatro.
    Ao entrarem, o apresentador esta anunciando:
    - Ouviremos a Quinta Sinfonia de Beethoven.
    Irritado, o Manuel ralha com a Maria:
    - Estas vendo, mulher? Por tua causa perdemos as outras quatro!

35. O Manuel chega no chaveiro e pede:
    - Seria possivel o senhoire abrir a porta do meu carro, pois travou-se
      com as chaves dentro?
    - Pois nao, senhor. Se puder aguardar um instante...
    - Mas seja breve, por favoire. Parece que vai choveire e o meu carro tem
      capota, ora pois!

36. A Maria trabalha como enfermeira, num hospital:
    - Doutoire, o senhor pediu anestesia local, mas ca na caixinha esta
      escrito que ela foi fabricada na Alemanha... 

37. Voce sabe que computador, em qualquer lugar do mundo, tem memoria. Menos
    em Portugal. La, computador tem... uma vaga lembranca. 

38. Pouca gente sabe, mas na epoca da Segunda Guerra os portugueses tambem
    construiram seus campos de concentracao. Num desses campos, um homem eh
    condenado aa morte, por intermedio de gas. O condenado eh levado a um
    quarto, com portas e janelas abertas.
    - Como poderei morrer por intermedio de gas, se aqui tem tanta ventilacao?
    - Cale a boca e fique de pe em cima desse xis, marcado no chao. O cara
      fica. Manuel, o algoz, corta uma corda, e um enorme botijao de gas
      se precipita do teto, em cima da cabeca do condenado. 

39. - Voce sabe quantos portugueses sao necessarios para trocar uma lampada?
    - Nao.
    - Cinco.
    Um sobe na mesa e segura a lampada, os outros quatro rodam a mesa.

40. O amigo do Manuel vai a sua casa e o encontra empurrando uma velha
    geladeira por toda a cozinha. Estranha e pergunta:
    - O Manuel! Que diabo estas a fazeire?
    - E que a danada esta enguicou e eu estou a veire se ela pega no tranco.

41. - Comandante Manuel, o inimigo mandou um aviao de reconhecimento.
    - Entao, mande uma carta de agradecimento.

42. - Voce eh cego de nascenca?
    - Nao, senhoire. So da vista mesmo.

43. O portugues nao aguenta mais ver o ingles contar tanta prosa a respeito
    das grandes invencoes de seus compatriotas. Sr. fulano inventou isso,
    Lord sicrano inventou aquilo. Ate que o ingles mencionou o limpador de
    para-brisa.
    - Alto la! O limpadoire de para-brisa quem inventou foi um portugues!
    E antes que o outro pudesse dizer qualquer coisa:
    - O ingles apenas aperfeicoou a invencao do patricio, botando o limpadoire
      pro lado de fora do vidro!

44. O Manuel compra um assougue. Um dia, chegam gritando em sua casa:
    - Seu Manuel, Seu Manuel! O seu acougue pegou fogo!
    - Ora, nao tem importancia. A carne esta na geladeira... 

45. Ai o Manuel vai no mecanico, de novo:
    - O, gajo! Eu queria consertaire a buzina do meu carro...
    - Tudo bem.
    - ... porque o freio nao esta bom.

46. O Manuel vai a uma festa gran-fina. Ressabiado, com medo de dar algum
    fora, fica observando como os demais convidados se comportam. O jeito
    correto de beber, de comer. Observa alguem ja satisfeito, palitando os
    dentes, com discricao... Mais tarde, o anfitriao, vem cumprimenta-lo:
    - E ai, Manuel? Esta sendo bem servido?
    - Olhe, pa.. Eu nunca comi tao bem! So daqueles palitinhos, que as pessoas
      comem escondido, tapando a boca com as maos, eu ja comi uns quinze... 

47. - Por que piscina de portugues tem agua azul?
    - Porque ele mergulha com a caneta.

48. O Manuel vai ao cinema, a tarde. Entra e nao enxerga um palmo naquele
    escuro. Fica parado, de pe, esperando acostumar a vista. O lanterninha
    vem ajuda-lo. O Manuel ve aquela luz se aproximando, se aproximando...
    e pimba! Pula com tudo no colo de um casalzinho que comia pipocas. Maior
    fuzue, voa pipoca, todo mundo reclama aos berros.
    - Me desculpe, gente! E que se eu nao saio da frente, aquela bicicleta ia
      me atropelaire!

49. - Joaquim! Quando eu tiver pegado no sono, faca o favor de vir apagar a
      luz.
    - Pois nao, patrao! E so o senhoire tocaire a campainha e eu virei
      correndo.

50. O fregues entra no bar do Manuel e le o cartaz afixado na parade: " Pao
    simples: 5 cuzados. Pao com manteiga: 8 cruzados. Pao sem manteiga: 10
    cruzados. Estranha e pergunta:
    - O Manuel, por que o pao sem manteiga nao custa o mesmo q. o pao simples?
    - Porque da mais trabalho, ora! A gente tem que colocaire a manteiga
      depois tiraire!

51. Ha 27 anos o Manuel so frquentava aquele restaurante. De repente, comeca a
    ir ao concorrente, do outro lado da rua. O dono do primeiro estranha e o
    aborda na rua:
    - O Manuel, que foi que houve? Nossas refeicoes nao lhe agradam mais?
    - Nao. Nao ha nada de errado com elas. Estou apenas a obedeceire as
      ordens do meu dentista.
    - Dentista?
    - Exatamente. Quando lhe mostrei os dentes que doiam, ele me mandou passar
      a comeire so do outro lado!

52. Naquele dia ensolarado, Manuel esquece as chaves dentro do carro, apos
    travar a porta. Com um pedaco de arame, atraves do vao de uma das janelas,
    e com o auxilio de Maria, inicia a delicada operacao. E a Maria vai dando
    as indicacoes:
    - Mais a direita, Manuel.. Um poquinho mais para a frente... Falta pouco..
    Isso! Apos retirar as chaves finalmente o Manuel abre a porta do carro.
    E quando a Maria comenta:
    - Ainda bem Manuel! Eu ja nao aguentava mais de caloire aqui dentro! 

53. O Manuel vai pela primeira vez ao cinema. Chega na bilheteria e compra uma
    entrada. Dai a poquinho, volta e pede mais uma. Nao passam mais dois
    minutos, vem comprar outra. A bilheteira chia:
    - Po, meu! Por que voce nao compra todas de uma vez?
    - Nao me culpe, senhorita! E que tem um gajo ali na porta que, toda vez,
      me toma o bilhete e rasga!

bom pessoal eh isso ai... acho q. jah deu para se divertir bastante... entao
eh o seguinte... estas piadas foram enviadas por um novo amigo... quem sabe
ele nao se integre aa coorporacao, porem pediu q. desse seu nome e e-mail,
satizfazendo sua vontade, ai vai....

    Meu E-Mail é Fabrizi@Base.com.br Meu nome é Fabrício Passos da Costa

beleza!? intaum... eh isso ai....


                  Px_LARVA ESPOLETA
                           EAGLE'S POWER
                                   LaSt^WaRRioR


.~`^'-_!+=/.,~`^'-_!.~`^'-_ 10 - RADIO AMADOR .~`^'-_!+=/.,~`^'-_!.~`^'-_.~`^'


.+~`^'-_!+=/.,~`^'-_!.~`^'-_!.  11 - MUSICA ~`^'-_!+=/.,~`^'-_!-_!+=/.,~`^'-!.

   Bom, como a zine eh livre pra eu escrever o que quiser... vamos nessa!
   Quero falar um pouco sobre "Nenhum de Nos"... eh uma banda senssacional...
   tipo eu nao curtia quer dizer.. nao conhecia a banda..
   conhecia as musicas pois faziam muito sucesso, mas nao sabia q. era deles,
   foi qdo assistindo ao programa H de inverno em Campos de Jordao, vi os
   caras cantando e adivinha qual musica!? isso mesmo... Camila, Camila....
   putz.. essa musica eh animal... ai resolvi comprar um Cd dos caras, nao
   eh q. eles detonam mesmo! :))

             intaum de lambuja vai a letra da Camila, Camila....

                        Depois da ultima noite de festa
                        chorando e esperando amanhecer,
                        amanhecer.
                        As coisas aconteciam
                        com alguma explicacao.
                        com alguma explicacao.
                        Depois da ultima noite de chuva,
                        chorando e esperando amanhecer,
                        amanhecer.
                        As vezes peco a ele que va embora
                        que va embora.
                        Camila, Camila.
                        E eu que tenho medo ateh de suas maos,
                        Mas o odio cega e voce nao percebe.
                        Mas o odio cega.
                        E eu que tenho medo ateh do seu olhar,
                        mas o odio cega e voce nao percebe,
                        mas o odio cega.
                        A lembranca do silencio daquelas tardes.
                        daquelas tardes....
                        Da vergonha do espelho naquelas marcas.
                        naquelas marcas.
                        Havia algo de insano naqueles olhos.
                        Olhos insanos.
                        Os olhos que passavam o dia a me vigiar.
                        a me vigiar.
                        Camila, Camila.
                        E eu que tinha apenas 17 anos,
                        baixava minha cabeca pra tudo.
                        Era assim que as coisas aconteciam.
                        Era assim que eu via tudo acontecer.
                        E eu que tinha apenas 17 anos,
                        baixava minha cabeca pra tudo.
                        Era assim que as coisas aconteciam.
                        Era assim que eu via tudo acontecer.
                        Camila, Camila.
                      

   agora mundando um pouquinho o estilo, vamos ver um pouco de Hip-Hop! :))
   ou se preferir RAP para quem nao sabe o que significa, vamos lah:
   R(Rhythm) - Ritimo
   A(And) - e
   P(Poetry) - Poesia
   uma mistura de Batidas com vocalizacao em forma poetica, ou seja, uso
   de palavras com rima que regem essa composicao musical...

                                                        |EAGLE'S POWER|

                                 HIP - HOP                                    
 
 ────────────────────-  BREAK DANCE NA VEIA!  ──────────────────────
 
 Ao contrario do que muita gente imagina, a Break Dance permanece viva,
 evoluindo sempre e tornando-se cada vez mais interessante. Nos EUA, o
 Break vem sendo apresentado em concorridissimos espetaculos de teatro
 e em seminarios universitarios. Por aqui, para nao deixar a peteca cair,
 essa cultura de rua em forma de arte eh apresentada em eventos, em que o
 publico pode tomar conhecimento de tudo da melhor maneira: dancando hip-hop!
 Se existe uma festa que merece o carimbo de "aprovado" nesse estilo, certa-
 mente eh a que acontece no ESPACO SKEMA 1, na avenida Rio Branco, 86, bem
 no centro de Sao Paulo. Imperdivel.
                                        Som Black ano 1  No 1
 
 Comentario: Atencao, caso vc. curta o movimento Break e nao saiba onde
             encontrar, eu vou lhe informar, apareca na estacao Sao Bento
             do metro ou mesmo na estacao Conceicao do metro, eu digo isso,
             pois quando estou livre eu do um pulo por essas quebradas pra
             curtir o movimento... isso eh Hip - Hop na veia VEIO!

 
 ────────────────────── 2PAC, o IMORTAL ──────────────────────
 
Jah virou rotina. Tupac Shakur continua escandalosamente vivo no mundo da
midia. Em mais um episodio das infindaveis repercussoes da morte do rapper/
ator/ativista/gangsta, apareceu o (ateh entao declarado morto) pai de Shakur,
ou ao menos alguem que se intitula como tal. O nome do distinto cavalheiro eh
Bill Garland, um ex-presidiario nova-iorquino. Mais que depressa ele esta
entrando com um recurso na justica para abocanhar nada mais nada menos do que
a metade da fortuna de 2Pac. Segundo declaracoes de Afeni Shakur(mae de Tupac)
ela nunca soube ao certo quem seria o verdadeiro pai do rapaz, mas quando
ofereceu a Garland a oportunidade de assumir a paternidade, ele se recusou.
Por conta desses e outros motivos, a rede HBO americana esta preparando um
filme sobre o rapper e a atriz Jasmine Guy, amiga do falecido, que esta
fechando patrocinios para fazer um filme sobre Afeni Shakur. Aguardem as
invevitaveis cenas dos proximos capitulos...

                                        Som Black ano 1  No 1

 Comentario: Eu nao poderia deixar vc. na mao e nao lhe passar mais um pouco
             de Hip - Hop, e esta vai pra vc. q. curte um filme Gangsta.
             Eu jah assisti e recomendo a todos vcs. do movimento, bicho o
             filme eh o seguinte: JUICE
             Se nao viu, assista, se jah viu, assista denovo, e dessa vez faca
             uma copia, o q. se ta esperando...eheheh vai fundo malandro...
 
 
 
────────────────────── RAP NACIONAL (RACIONAIS MC'S) ─────────────────────
 
Aqui vai um pequeno trecho da entrevista q. a revista RACA fez com os manos
da pesada Racionais MC'S...

RACA: Por que Racioanis?

EDY     - Vem de raciocinio neh? Um nome que tem a ver com as letras, que tem
          a ver com a gente. Voce pensa pra falar.
BROWN   - Naquela epoca o rap era muito bobo. Rap de enganar, liga mano? Nao
          forcava a pensar.
BLUE    - Era musica facil.

RACA:  Ja sao oito anos e sao quatro discos, eh isso?

EDY    - Nao, foram dois LP e um mix, agora sai o quarto, Sobrevivendo no
         Inferno.

RACA:  Mas tem um CD coletanea tambem.

EDY    - Isso ai eh coisa da gravadora.
BROWN  - A gente nao lancaria um CD com todas as  musicas junto, sao tres
         fazes diferentes. A gravadora ve o lado comercial da parada.

RACA:  Em uma faze e outra, qual seria a diferenca?

EDY    - Tem diferenca de idade neh mano, se vai crescendo vai mudando o
         pensamento.....

                                                  Px_LARVA ESPOLETA

~`^'-_!+=/.,~`^'-_!.~`^'-_! 12 - DESAFIO(!?) ~`^'-_!+=/.,~`^'-_!-_!+=/.,~`^'-


Bom, este eh o nosso espaco para divulgarmos novos trabalhos e os bons
programadores q. temos pelo Brasil :)))
Iremos lancar dois desafios, o primeiro serah para os programadores em C jah
o segundo eh para aqueles que se identificaram melhor com o assembly......
Na verdade o que queremos eh que nossos caros leitores retribuam o aprendi-
zado, e so assim veremos se vossa senhoria :-) (Hmmmm.falei bonito, hehe)
esta mesmo acompanhando o nosso curso, pois estes desafio serao para benefi-
cio proprio de voces, entao pesso para todos participarem, e o premio para o
ganhador sera...ah sei lah bixo, sera que voce se contentaria apenas com o
seu nome ou seu nick publicado ?
Ai voce me diz:
- Mas que tal uma graninha extra!?!?
- Ta louco mano, se fosse pra ganhar dinheiro se acha que nossa corporacao es-
  taria fazendo esse Z|N3 ? Pra comeco de conversa, gostamos do que fazemos,
  e na verdade queremos ensinar e ao mesmo tempo aprender com voces leitores,
  e se isso nao serviu como consolo, que tal..

  [ESSA ZINE TEM FINS BENEFICIENTES PARA COM O CRIANCA ESPERANCA, PARTICIPE]
       |TA LOCO TA DANADO MEU, VOCE NAO VAI ACREDITAR NISSO VAI? :) |

  Ou poderiamos dizer tambem:

- Ei psit, o da potrona mande sua colaboracao via e-mail(HAHAHA QUE HORRIVEL)

  Para doar 30 conto mande o e-mail para [30@conto.com.br]
  Para doar 60 conto mande o e-mail para [60@conto.com.br]
  Para doar 90 conto mande o e-mail para [90@conto.com.br]
  Para nao doar, noa leia a revista :))))


Percebeu agora porque nao podemos dar um premio para o vencedor do dEsAfIo?
Se nao entendeu eu vou resumir...NAO GANHAMOS NADA EM DINHEIRO FAZENDO A ZINE,
APENAS FAZEMOS PORQUE GOSTAMOS E QUEREMOS ENSINAR AOS OUTROS O QUE SABEMOS, E
AO MESMO TEMPO APRENDER COM VOCES LEITORES... Resumidamente, eh isso! :)))))



					      |Px_LARVA ESPOLETA|


 1 - Desafio Em "C"

  Bicho, eu espero q. nao me decepcionem, entao o desafio eh o seguinte:
  escreva um program em TC, no qual imprima na tela a mensagem:

                   WU TANG CLAN ZIN3 CORPORATION

  Pronto eh soh isso, ahahahahahahahah se vc. conseguir, nao fique muito
  contente, mas se vc. nao conseguir, SE MATEEEEE! BAHHHH
  Mas tipo ai entra a criatividade, se pode pensar, beleza, vou usar soh o
  printf e jah era, mas ai, derrepente vei, se vc. for criativo e fizer um
  baguiu descente malucao do tipo sei lah faca piscar, faca com cores, faca
  ate falar, entao, melhor dizendo, use a cabeca....affffeeee ferro!

  Dica: printf("WU TANG CLAN ZIN3 CORPORATION")

  Se que mais??????...pruuuuuuuuuuu....hahahahahahaah falora bicho...PENSE!
  Ah nao esqueca, manda a fonte e "documentacao" ;))

 2 - Desafio Em Assembly
     Crie um programa que imprima algo na tela em diversas cores e diversas
     vezes....
     isso eh baba tendo em vista as explicacoes e os exemplos do curso...
     agora uma dica... use o comando LOOP para isso, como assim? vou explicar:
     em um programa assembly, se vc. quiser fazer um loop vai precisar saber
     o local do salto ou entao o label(rotulo)!
     tipo... um exemplo disso

              MOV CX,10
     IMPRIME:              ; este eh o LABEL ou se preferir ROTULO
              XOR AH,AH    ; espera uma tecla ser digitada
                           ; o xor eh um truque usado para zerar o registrador
                           ; de uma forma mais simples.. poderia ser
                           ; MOV AH,0
              INT 16h      ; Int da BIOS
              MOV AH,2     ; imprime caracter em DL via DOS
              MOV DL,AL    ; caracter a ser impresso, veja q. coloquei o valor
                           ; de AL pois este serah retornado pela funcao 0 da
                           ; int 16 veja a instrucao acima
              INT 21h      ; Int do DOS
              LOOP IMPRIME ; ak. estah o que queremos fara o LOOP CX vezes
                           ; como assim!? veja q. acima usei o MOV CX,10
                           ; sendo assim ele farah o loop 10 vezes

     obs: os rotulos soh nao podem ser iniciados por numeros e podem conter
          ateh 32 caracteres

 3 - Desafio em Clipper

    Crie um programa que cadastre clientes, altere, e apague, use para isso
    uma ".PLL" criada por voce e use o artificio RTLINK FI prog1,prog2....
    criando assim uma digamos q. livraria(.LIB)

    nao venha me dizer q. nao sabe as funcoes do clipper que eh soh olhar o
    NG.. porem se tiver alguma duvida.. mande msgs! :)) estaremos ajundando
    voce na criacao do seu programa! :))

                                                       |EAGLE'S POWER|
                                                       []'Px_LARVA ESPOLETA


.~`^'-_!+=/.,~`^'-_!.~`^'-_! 13 - RECLAMACOES ;(( .~`^'-_!+=/.,~`^'-_.~`^'-_!~

 Bom as reclamacoes nao foram muitas ainda bem! :)) heheh eh brincadeira
 quem tiver que reclamar.. pode soltar o verbo.. estamos aqui para ouvi - los!
 heheh mas tudo bem... intaum.. agora vao as duas reclamacoes q. recebemos...
 a primeira eh sobre a escrita... bom.. nao sei se poderah ser melhorada..
 porem revisaremos a zine algumas vezes.. mas alguns erros podem passar desa-
 percebidos por nos! :)) jah a outra reclamacao foi sobre alguns exemplos nao
 funcionarem em compiladores para Linux... Bom... sinto muito.. nao temos
 como testar os exemplos em todas plataformas ai vai de cada um para poder
 adapta - la de algum modo.... bom... mas a reclamacao eh valida... e sempre
 que alguma funcao nao funcionar em alguma plataforma que nao seje DOS nem
 WINDOWS, por favor.. nos avisem... soh assim podemos tentar cada vez mais
 melhorarmos a compatibilidade! :))
 Eh isso ai, como o Eagle vem falando ai em cima, vou continuar sobre essa
 parada de RECLAMACAO, jah to de saco cheio...ehehehhhe o povo nao reclama
 de nada pra gente sair no pau....tah doidio tha danado (tDTd), eu tava loco
 pra malucada reclamar, mas ninguem chutou o pau....beleza q. pura, ou ninguem
 ta lendo..ehhehehehahahahahah ou tipo e tal, tal e tipo ....sei lah malucao
 to achando esse pessoal mais loco q. nois ohhh, eh foda....mas hmmmmmmmm
 ........mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
 ...mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
 ..mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
 tava so pensando e aproveitando pra aumentar as linhas da zine....
 ah entao, onde eu parei mesmo....eh o seguinte povo,,,vamu recramar se nao
 agente acha q. ta tudo legar, mas tipo se vc. fala puta maluco esse pX_LARVA
 eh moh imbecil....hihihhihihi nao vai adiantar mutio nao, vo ficar mais
 imbecil ainda.. era soh isso, e se nao gostar...hummmm, se nao, se nao,
 se nao,,,, se nao nao....


                  Px_LARVA ESPOLETA
                           EAGLE'S POWER
                                   LaSt^WaRRioR


..`^'-_!+=^-_!.^-_!@ 14 - AGRADECIMENTOS...Tks ALL~`^'-_!.~`^'-_!+=/.,~`^'-_!.

Como sempre, estarei agradecendo a Deus, bom, muitos nao sao religiosos,
ou cristao ou sei lah, pois eu tbm. nao sou muito fanatico nisso porem esse
Deus que uso eh num sentido superior... akele q. olha por nos! q. nos guia e
tal, nao akele desenhado pela igreja catolica ou outra q. o pessoal sempre
usa, digo Deus num sentido amplo simplificando um ser superior a nos, meros
seres - humanos....
e tbm. quero agradecer a familia, apesar de xiar, estao sempre apoiando! ;))
e agradecer aos leitores, pela forca e tudo mais... estou sentindo q. com essa
zine, estamos conseguindo alcancar nosso objetivo de unir os programadores e
mostrar a forca Brasileira... tipo jah tem uma galera legal participando da
edicao do zine, e queremos ver muuito mais nessa edicao... entao pesso a
todos para espalharem o zine por ai a fora... tipo muitos nao acessam a inet,
porem acessam os bbss, entao quem for de fora de Sao Paulo, favor enviar o
zine pelas bbss por ai a fora, soh assim conseguiremos um maior numero de
leitores e um fortalecimento cada vez maior do zine....
Bom, quero agradecer muito aos leitores que participaram da zine, mandando
correcoes, e-mail, exemplos, e tudo o mais... e agradecimentos especiais
ao Guilherme Manika pela explicacao de como achar o IP de um programa, e
ao Eduardo Carvalho, por alem de ajudar a achar o IP em ASM, tem me dado a
maior forca nessa linguagem, sempre q. nao entendo algo, recorro aa ele! :))
na verdade estamos aprendendo junto, com uma pequena diferenca, ele sabe beem
mais q. eu! :)) heheh mas tudo bem.. estamos ai... e tipo, queria mandar
um agradecimento para uma pessoa muito especial, o nome dela eh Leticia, soh
queria agradecer por ela existir! :))

          hmmm. como sempre.. uma msg especial para reflexao!

 " Eh melhor a lagrima de uma derrota, do que a vergonha de nao ter lutado."

 bom, acho q. eh soh... e tipo, tah faltando mulheres tanto para escrever o
 zine, qto para le - lo! cade as programadoras!?!?!?!??

                                                 t+ [Eagle's Power]'s


..`^'-_!+=^-_!.^-_!^.-_+^-_. 15 - ERRATAS -_.+^-_.~`^'-_!.~`^'-_!+=/.,~`^'-_!.

                opa... correcoes feitas por leitores! :))

         Essa Errata foi feita e enviada por Rafael Caetano......

Qdo vc escreve:

void main() {
	comando;
	...
	comando;
}

Esta definindo a funcao. Prototipos sao as declaracoes que vc escreve
no comeco do programa (geralmente atraves dos headers que vc inclui).
Por exemplo, se vc usa getchar() e potencia() na funcao main(), o
compilador precisa saber antecipadamente que tipo (int, double, etc)
essas funcoes retornam e quais os tipos dos argumentos que ela espera:

int getchar(void);
double potencia(double, double);

void main() {
	int c = getchar();
	...
	double x=2,y=3, z;
	z = potencia(x, y);
}

double potencia(double a, double b) {
	...
}


..`^'-_!+=^-_!.^-_!^.-_+^-_. 16 - ESPECIAL -_.+^-_.~`^'-_!.~`^'-_!+=/.,~`^'-_!

        Ueh... Especial!? sim... especial... aqui estah a participacao do
        leitor para duvidas deixadas pelos escritores do zine ou complemento
        sei lah.. qquer coisa q. tenha como fonte o leitor! isso mesmo, aqui
        estah a participacao do leitor, e neste zine veio uma coisa que me
        deixou contente, dois leitores me chamaram atencao qto ao ponto de
        sabermos qual o IP(instruction Pointer) ou se preferir Proxima
        instrucao! isso em assembly, dois leitores fizeram mandaram fontes
        e explicaram sobre o ponto q. deixei em aberto no zine! entao
        credito a eles! :))


                  Px_LARVA ESPOLETA
                           EAGLE'S POWER
                                   LaSt^WaRRioR


>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..corte aqui..<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

.model small
.code
org 100h      ; gera .COM, lembra? :)
 
main:
    jmp     p                 ; pula o DB
    db      111 dup (0)       ; so para aumentar IP
p:
    even
    call    i1                ; guarda o valor de IP na pilha
                    
i1:
    pop     ax                ; poem o valor de IP em AX
    add     ax,4              ; + 4 p/ apontar p/ a prox. instrucao
    call    exibe_reg         ; o endereco exibido sera
                              ;  desta instrucao
    ret                       ; termina o programa e retorna ao 'dos'
 
exibe_reg:      ; rotina para exibir valor de registrador

    mov     dl,ah             ; coloca o valor de ah em DL para usar a funcao
                              ; 02 da int 21h!  
    and     dl,0f0h           ; faz um AND(e logico) de DL com 0f0h! 
    mov     cl,4              ; coloca 4 em CL geralmente usado como contador
    ror     dl,cl             ; faz uma rotacao de BITS com o valor de CL
    call    soma              ; funcao para somar!
    push    ax                ; salva o valor de AX
    mov     ah,2              ; funcao 02-imprime o q. estiver em DL na tela!
    int     21h               ; int do DOS
    pop     ax                ; restaura AX

    mov     dl,ah             ; coloca ah em DL
    and     dl,0fh            ; faz um e logic(AND) de DL com 0fh
    call    soma              ; soma
    push    ax                ; salva AX
    mov     ah,2              ; funcao 02...
    int     21h               ; int 21h do DOS
    pop     ax                ; restaura AX

    mov     dl,al             ; coloca al em dl
    and     dl,0f0h           ; faz um and com 0f0h
    ror     dl,cl             ; rotaciona DL com CL
    call    soma              ; soma
    push    ax                ; salva AX
    mov     ah,2              ; funcao 02....
    int     21h               ; int do DOS
    pop     ax                ; restaura AX

    mov     dl,al             ; coloca AL em DL
    and     dl,0fh            ; faz um and com 0fh
    call    soma              ; soma
    mov     ah,2              ; funcao 02...
    int     21h               ; int do DOS

    mov     dl,'h'            ; imprime h na tela usando a funcao 2 da int 21h
    int     21h               ; int do DOS

    ret                       ; retorna para a funcao q. chamou!
soma:
    cmp     dl,0ah            ; compara dl com 0ah
    jae     soma_l            ; se for igual ou maior pula para soma_l
    add     dl,'0'            ; adiciona 0
    ret                       ; retorna para a funcao q. chamou!
soma_l:
    add     dl,'A'-10         ; adiciona dl a 'A'(65)-10
    ret                       ; retorna para a funcao q. chamou!

end     main

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>..corte aqui..<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

com esse programa, voce conseguirah ver o IP da proxima instrucao, ela serah
impressa na tela!
programa cedido por Eduardo Carvalho, qquer coisa mande msgs q. entro em
contato com ele....

Eduardo... Valeu pelo fonte! :))



.~`^'-_!+=/.,~`^'-_!.~`@$^-. 17 - PROCURA - SE ^,.~.~`^'-_!+=/.,~`^'-_!`^'-_!.

    HAHAahheheh Procura - se, ate parece propaganda oh! :)) mas tipo nao
    eh bem isso... eh o seguinte:
    Estamos precisando de alguem que programa em Java para poder dar auxilio
    no zine, tipo Java, Html, Visual Basic e C++, bom, se nao conseguirmos
    ninguem essas linguagens, vao ficar sem apoio, por isso, se alguem se
    interessar por uma dessas e estiver afim de participar, dah um tok ok!?
    valeu entao...

                  Px_LARVA ESPOLETA
                           EAGLE'S POWER
                                   LaSt^WaRRioR


.~`^'-_!+=_/.,~`^'-_!.~`@$^-. 18 - PROPAGANDAS ^,.~.~`^'-_!+=/.,~`^'-_!`^'-_!.

     Bom, este espaco eh reservado para propagandas, nao temos muita ateh
     agora, mas quem sabe!? ;))

     Eh o seguinte, a zine nao tem patriocinio nenhum, porem se alguem
     estiver afim de patricionar, ou alguma coisa do genero, basta entrar
     em contato conosco para conversarmos ok.!? bom, aos leitores nao se
     assustem, tipo isso ak. eh soh para no caso de alguem querer a propa-
     ganda da empresa, ou algo do genero, porem o zine, nao irah acabar
     por falta disto ok!? isso eh soh no caso de o zine crescer e quem
     sabe o pessoal querer fazer propagandas nele! :)) mas eh isso ai.
     se nao tiver tbm. sem problemas! :))

     Bom, entao vamos aas propagandas:

   * KEMEK BBS   :  (011) 861-4358 24hs. operando com 3 nodes!
   
    Uma BBS bem interessante e muito boa por sinal, nao perca e ligue lah 
    o mais rapido possivel eh muito legal mesmo... entao pessoal lah voce
    encontra arquivos variados, chat entre nodes e muito mais...! Liguem!
    Aos leitores do Zine, o sysop estarah liberando um tempo extra... tipo
    avisem - no que vc. eh leitor da zine WU TANG CLAN e pronto! :)) com
    isso estarah ganhando um(1) mes de assinatura gratuita com acesso full
    e 30(trinta) minutos diarios....



                  Px_LARVA ESPOLETA
                           EAGLE'S POWER
                                   LaSt^WaRRioR



	 ~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,

                                  FIM DA ZIN3

	 ~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,