.^~`^',~`^'-_~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,
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
~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,~`^'-_!+=/.,