▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄ ████ ████ ████ ████ ████ ████ ████ ████ ████ ████ ████ ████ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ · █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ · . █░░█ ▀▀▀▀ █░░█ █░░█ █░░█ █░░█ █░░█ ▀▀▀▀ █░░█ █░░█ ▀███ ▀▀▀▀ . : █ █ ▄▄▄▄ █ █ █ █ █ █ █ █ █ ███ █ ██ █ ▀███▄ : │ █░░█ █░░█ █░░█ █░░█ █░░█ █░░█ █░░█ ▄▄▄▄ █░░█ █░░█ ▄▄▄▄ ██▄▄ │ : █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ █▒▒█ : │ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ █▓▓█ │ │ ▀███▄███▀ ▀███▄███▀ ████▄██▀▀ ████▄███▀ ████ ▀██ ▀██████▀ │ ├─────────────────────────────────────────────────────────────┤ : ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ : · █ 1o. Zine Brasileiro sobre Programacao, Demos & Graficos █ · : ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ : └─────────────────────────────────────────────────────────────┘ CodersZine 00 - Junho/98 www.come.to/coders - coders@usa.net from the #Coders of BrasIRC ─ ── ─── ──────────════<>──────────────<>════────────── ─── ── ─ "Programar e' uma arte, e como toda arte e' bela" (BadGod) "O ministerio da saude adverte: 'Nao programar faz mal a saude'" (xCrown) "Diga-me com q programas que eu te direi o q faras!!" (xCrown) "Se so Deus pode criar a vida, entao sou Deus" (Azr) "Se vc programa, vc e' um criador, se nao, vc e' um simples e misero usuario" (X_cAmArO) CodersZine.══════════════════════════════════════════════════════¤════════════ ║ ─ ──<>─────────┤ INDICE ├─────────<>── ─ ║ ║ ║ ║ ║ ║ INTRODUCAO.....................X_cAmArO ║ ║ ║ ║ Let's coder ║ ║ 1. ALGORITIMOS..................Jac{Delpher} ║ ║ 2. ASSEMBLY........................cr4sh^0v3 ║ ║ 3. PASCAL..............................Mingo ║ ║ 4. COBOL............................X_cAmArO ║ ║ 5. C/C++..............................xCrown ║ ║ 6. DJGPP................................xROD ║ ║ 7. VISUAL C++.......................xCaption ║ ║ 8. VISUAL BASIC........................Rashi ║ ║ 9. VISUAL BASIC COM WINSOCK..........Hammett ║ ║ 10.DELPHI............................Progman ║ ║ 11.DELPHI COM ACTIVEX.................BADGod ║ ║ 12.JAVA.........................Jac{Delpher} ║ ║ 13.GRAFICOS...........................KDoskD ║ ║ 14.GRAFICOS EM 3D.........................hC ║ ║ 15.DEMOSCENE...........................Mingo ║ ║ 16.REDES NEURAIS ARTIFICIAIS.............Wiz ║ ║ ║ ║ About CodersGroup ║ ║ E-MAILS RECEBIDOS.........Coders Editors ║ ║ QUEM SOMOS??..............Coders Editors ║ ║ AGRADECIMENTOS............Coders Editors ║ ║ SOME LINKS................Coders Editors ║ ║ ║ ════════════¹══════════════════════════════════════════════════════CodersZine. ─────────────<>─═══< INTRODUCAO >═══─<>───────────── Ate' que enfim saiu. O primeiro demora mas sai! Putz, e tinha gente que estava quase desistindo. Bah, pensei que fosse bem + facil fazer um zine, mas agora que saiu, e' so' alegria... Um pouco de historia... Era uma vez um knal de IRC chamado #Programadores, onde a maioria de nos costumava se encontrar, mas que por uma serie de brigas entre founders e operadores, gerou o #Coders (se vc ainda nao entendeu, quem programa e' um coder), e e' desse novo knal que surge nosso zine. Tantos zines por ai, e nenhum sobre programacao, pronto agora existe, boa sorte. ;) Talvez, publicaremos o zine bimestralmente, pois quase todos trabalham e estudam, e alem do mais, estamos pensando na qualidade. Talvez lancaremos outras materias , tipo ultimas novidades na programacao, dicas de programacao e fluxogramas, e talvez outras coisas que nao tem relacao com programacao, mas isso e' uma outra historia. :-] Fizemos esse zine pensando no futuro de vcs. Acreditem.. Muitos paises formam muito menos programadores do que precisam. Hmm.. talvez publicaremos algumas coisas sobre como montar um curriculum. Ahh.. outra coisa.. tirei toda a acentuacao do zine, para ficar melhor visualizavel nos diferentes editores que existem, porem pode ter passado algum acento.. mas.. nosso logo fica melhor mesmo e' no edit.com. Esperamos a colaboracao de vcs, mandando mails e divulgando nosso zine. Obrigado. ┌ ── ─── ─────── ───────────────── ── ──────────────── ─────── ─── ── ┐ Lembre-se: qualquer texto ou exemplo retirado daki, podera ser publicado │ somente se indicado junto o nome do autor e de onde foi tirado. │ - Construa, nao copie! - └ ── ─── ─────── ───────────────── ── ──────────────── ─────── ─── ── ┘ Vou parar por aki, pq eu sei que ninguem le a introducao, todo mundo vai direto a pratica. :o) by X_cAmArO CodersZine.═════════════════════════════════ ─────────<>───═══════<<< LET'S CODER >>>═══════───<>───────── La' vao as materias, facam bom proveito.. ;^) Mas lembre-se: nao fiquem so' por aki, leiam livros e tutoriais, pois hj em dia esta phoda p/ se encontrar um bom programador. ──────────════< ALGORITIMOS >════────────── by Jac{Delpher} Ola pessoal, estou escrevendo a materia sobre Algoritmos (e' mesmo??). Ah, e tambem irei escrever sobre JAVA e JAVASCRIPT. Aguardem e confiem. Bom, infelizmente, eu queria que o dia tivesse mais de 24 horas, so pra eu poder escrever com mais calma essa materia. Mas tudo bem, eu so vou furar com a data de entrega da revista. Espero que o X_cAmArO compreenda e adie o dia do lancamento da revista mais uma semaninha :)). Mas vamos ao que interessa. Aos queridos leitores, que programam ou desejam programar, eu antecipo uma coisinha: vc nao aprende a mexer em uma linguagem de programacao.Nao e' como o MS WORD, onde vc sai futucando e acaba fazendo um texto lindo. Para se fazer um sistema de computador, e' necessario uma base teorica muito forte. Digo isso por experiencia propria. A maioria dos cursos de linguagens de programacao ensinam a fazer o programa hello world!, como o primeiro programa que vc faz. Francamente, eu nao consideraria isso como o meu primeiro programa, pois isso ate uma crianca de 6 anos faz. Isso e' muito facil na pratica, vamos ver em varias linguagens: Em Delphi: ShowMessage ('Hello World'); Em Visual Basic: MsgBox ("Hello World") { nao programo nessa linguagem, mas sei fazer esse programa, tah vendo? } Em C: printf ("Hello World"); Em Pascal: WriteLn ('Hello World'); Bom, como vcs podem ver, isso e' muito facil de fazer, mas certamente isso nao e' a primeira coisa a se aprender. Mas por incrivel que pareca e' isso que as escolas de informatica ensinam no inicio do aprendizado de uma linguagem. Algumas ate dao cobertura a materia de Algoritimos, mas dao um curso fajuto de 14 horas. Nao sabe eles que isso e' o primordial. Entao, e' isso que pretendo fazer nessa revista. Ah, e outra coisa, aos iniciantes, leiam primeiro a minha materia e depois o resto, ok? Essa materia e' temporaria. Acho que na proxima edicao da revista, eu jah acabo. E espero que o X_cAmArO concorde que eu passe um pouco de Estrutura de Dados. Acho que incluirei os dois juntos, nao sei. Vamos ver. Bom, mas vamos comecar. Como eu havia falado, para se escrever um programa de computador, e' necessario uma boa base teorica, principalmente sobre Algoritmos. Mas finalmente, o q e' Algoritmo? ---> Pessoal, imaginem o seguinte. Vou dar um exemplo um tanto quanto radical: para um ser humano andar (e outros animais tbm!), eles precisam das pernas, isso e' primordial, certo? Muito bem. Para se escrever um programa de computador ( ou programar, simplificando ), a LOGICA DA PROGRAMAcAO equivale as pernas da gente. Ou seja, para andar, a gente precisa das pernas, para programar, nos precisamos da Logica da Programacao!(que se resume aos Algoritmos e Estrutura de Dados!). Entendeu? Entao, outro exemplo legal e' que, quando nos aprendemos equacao de segundo grau, primeiro o Professor nos mostra a formula ax² + bx + c = 0. E depois nos substituimos os valores de a, b, e c por numeros e solucionamos a equacao, certo? Pois entao, para se construir um sistema, o mesmo passa por varias etapas. A primeira delas e' o projeto ou analise (que e' feita puramente em algoritmos, junto com alguns diagramas). Esse projeto e' justamente a parte teorica do sistema. Se voce for fazer for comecar a fazer um sistema simplesmente pensando: "poxa! vou fazer um sistema. Vou passar a noite acordado digitando codigo!". Ai e'que vc se engana, meu caro amigo. Se esse tal que pensa assim for iniciante, certamente ele tentara copiar o codigo de algum outro sistema, jah que existem milhoes de codigos espalhados pela rede. E ainda mais diz que foi ele mesmo que fez. Bom, alem disso ser uma atitude completamente Lamah, o que adianta viver de aparencia? O gosto vai ser melhor quando a coisa e'feita por vc mesmo e com muito esforco. Ai vc realmente sente o gosto da vitoria! Mas isso foi mais um desabafo e serve de conselho para vcs iniciantes. Ah, e pedir ajuda aos mais experientes nao significa que vc seja um Lamah. Os experientes sempre iram te ajudar com o maior bom gosto. Bom, isso serviu de conselho. Isso tudo e' pra explicar que para se construir um sistema, tem que se ter um projeto antes da pratica. Tah certo que a parte de codificacao e' a melhor, mas ela sera muito melhor se vc projeta-la completamente antes. A conclusao para a construcao de um sistema jah pode ser definida: Projeto ou Analise do Sistema (Algoritmos e Diagramas) --> Codificacao --> Teste, Teste e Teste. Entao, como Dr. Niklaus Wirth (criador da linguagem Pascal) menciounou: "Programas sao formulacoes concretas de algoritmos abstratos, baseados em representacoes e estruturas especificas de dados". E' incrivel como as palavras de um Cientista sao valiosas. Sempre conversem com Cientistas quando vcs puderem , eles sao a voz da experiencia :)). Depois de todo essa "baboseira", podemos definir ( formalmente! ) o que e' algoritmo: ╔═════════════════════════════════════════════════════════════════════════╗ ║ Algoritmo e' a descricao de um padrao de comportamento, expressado em ║ ║ temos de um repertorio bem definido e finito de acoes "primitivas", ║ ║ das quais damos por certo que elas podem ser executadas. ║ ╚═════════════════════════════════════════════════════════════════════════╝ Diante dessa explicacao, observe o seguinte: "Ir ao supermercado"; "Fazer as compras"; "Pagar os produtos"; "Voltar para casa"; Observe que todas as frases acima sao acoes ( finitas, por sinal ). Pode-se considerar que cada acao dessa e' um comando e que tem um fim delimitado pelo ;. Isso e'um exemplo de agoritmo, embora que abstrato. Mas por incrivel que pareca, algoritmo e' apenas a resolucao de um determinado problema. Nesse caso, o problema e' fazer as compras. Mas e se surge um incoveniente? Se, por exemplo, quando ela for pagar as compras ela nao tiver dinheiro suficiente? Logicamente ela teria que devolver todos os produtos. Escrevendo um novo algoritmo: "Ir ao supermercado"; "Fazer as compras"; Se "o dinheiro e' suficiente" entao "Pagar os produtos" se nao "Devolver os produtos" "Voltar para casa" Ai nos ja nos deparamos com uma estrutrura condicional. Isso e' essencial. Vcs vao notar, que ao escrever um programa, vcs imaginaram, na pratica, varias hipoteses. Por exemplo, se o usuario do seu programa digitar o CPF errado, certamente vc tera que dar uma aviso a ele, certo? Pois entao, e' isso! Pessoal, isso e'so um introducao mesmo, na proxima edicao eu jah vou acabar essa materia (ao menos espero que sim!), entao, aguarde e confie! Abracao! Jac{Delpher} ---> qualquer coisa, envie o e-mail p/ javanes@thepentagon.com CodersZine.═════════════════════════════════ ──────────════< ASSEMBLY >════────────── by cr4sh^0v3 /* Bom, queria comecar agradecendo o convite para participar desta talvez arrogante, porem acertada e aprovada iniciativa do pessoal do #coders da BrasIRC. Sem muito tempo, infelizmente (p/ mim, e felizmente p/ vcs) nao poderei entrar muito em detalhes, mas como sei que para a grande maioria Assembler eh um bicho de sete cabecas...eu vou fazendo aqui minha parte de cavaleiro e vou cortando as 6(seis) sobressalentes... aproveitando para introduzi-los ao mundo binario e as nocoes basicas desta linguagem. Para comecar, quero deixar claro, que me considero um iniciante nesta linguagem tb, assim como aprendiz em tudo o resto a que se diz respeito nesta vida... afinal, a cada dia aprendemos uma nova licao... Entao, deixemos o "bla bla bla" de lado, e ... COMECEMOS! */ -------------------------------cute here----------------------------------- Todos nos temos uma certa concepcao sobre o que um computador faz. No entando trataremos do computador neste artigo, como uma maquina que manipula bits. Parto desde ja, da ideia de que todos a lerem este artigo tem uma ideia ainda que vaga sobre o que seria um "BIT". Um "bit" tem dois estados: ON/OFF, ou LIGADO/DESLIGADO (ou ainda VERDADEIRO/FALSO), representados por "0"'s e "1"'s. Nao pense em "0" e "1" como numeros, sao apenas convencoes p/ nomearmos o estado de um "bit". A memoria no seu computador consiste de uma enorme colecao de "bits", cada um podendo estar em "0" ou "1" ("on" ou "off"). O centro de seu computador pode ser interpretado, como o coracao dele, e e' um microprocessador, chamado de 8088 pela Intel (claro que aqui generalizamos pela grande maioria, ainda que realmente o "batismo" do "chip" tenha sido feito por ela, o que nao cabe discutirmos aqui...). O que esse processador faz e' manipular os bits que compoem a memoria. O seu processador gosta de lidar com bits em grupos, e entao introduziremos aqui nomes especiais para os dois tamanhos de grupos de bits que satisfazem usualmente o 8088. Um "byte" refere-se a uma colecao de 8(oito) bits. Um "word" consiste de 2(dois) bytes, ou consequentemente, 16(dezesseis) bits. Uma colecao de bits tem um determinado padrao ou modelo, determinado pelo estado individual de seus bits. Aqui temos alguns modelos tipicos de bytes: 10101010 11111111 00001111 Se voce ja estudou probabilidade, e' facil deduzir que ha 256 modelos possiveis de um byte. De modo analogo, um "word" pode ter 65,536 modelos diferentes. Bem, agora vamos a ideia principal da programacao em Assembler. Voce esta sentado? :-) Estes modelos de bits podem ser usados para representar outros conjuntos de coisas, projetando-se cada modelo em um membro do outro conjunto. Nao parece muito...,mas a IBM faturou BILHOES com essa ideia. Por exemplo, associando-se os modelos de uma "word" a um conjunto de INTEIROS, voce pode representar tanto os numeros de 0 a 65535 como os numeros de -32768 a 32767 , dependendo da associacao exata que voce usar. Voce pode reconhecer esses intervalos como os intervalos possiveis de numero de linhas, e dos possiveis valores de uma variavel inteira, em BASIC; assim tambem como outras situacoes em programacao, e claro... isso nao e' por acaso. Isso explica de alguma forma esses limites arbitrarios..: BASIC usa "words" de memoria para guardar numeros de linha e variaveis inteiras. Como um outro exemplo, voce poderia associar as formas(ou modelos) que um byte pode assumir a uma serie de pequenas figuras arbitrariamente escolhidas que poderiam ser colocadas numa tela de video. Se voce olhar no Apendice G do seu manual de BASIC, voce notara que ha exatamente 256 caracteres diferentes que podem ser mostrados na sua tela. O seu computador usa um byte de memoria para informar qual caracter deve ser mostrado, em cada posicao da tela. Sem querer me adiantar muito, posso mencionar que ha cerca de 256 operacoes fundamentais que o microprocessador 8088 pode executar. Isso sugere uma outra associacao que nao cabe agora...,mas deve ser discutida em detalhes mais adiante, quem sabe na proxima edicao!?? A ideia principal desta parte e' que podemos usar modelos de bits para representar qualquer coisa que quisermos, e manipulando os modelos de diferentes formas nos podemos produzir resultados significativos em termos do que escolhemos representar. --------------------------------cute here---------------------------------- /* baboseira follows Chega de chatice,ne!? Fica p/ proxima,... assim que eu for convidado novamente... e entao posso introduzir-lhes o "Sistema de Notacao Para Modelos de Bits". Espero que possa ter tirado um pouquinho o medo de Assembler de voces, ou pelo menos que tenha deixado voces um pouco mais a vontade quando se tratar sobre os principios da programacao de baixo nivel. E antes de mais nada, peco aos que se assustaram ainda mais, que nao desistam, talvez eu nao seja o mais indicado, e alem de tudo... nao se pode compreender tudo, ainda mais, quando se explica pela metade ;-] Thanks and Thoughts: xcaRIOca,X_cAmArO,Rashi,hC,Wiz, e toda a galera do #coders... rZ! */ CodersZine.═════════════════════════════════ ──────────════< PASCAL >════────────── by Mingo PASCAL, uma linguagem das mais difundidas mundialmente. Com compiladores para as mais diversas linhas de computadores, incluindo ate mesmo MAINFRAMES. Criada para o ensino da logica e programacao. Muito utilizada para o aprendizado principalmente voltado a conceituacao de linguagem estruturada. Facil de aprender, entender e depurar. Seus comandos sao baseados em palavras da lingua inglesa. E' muito recomendado o aprendizado de PASCAL antes de se aprender C e DELPHI. PASCAL e C sao linguagens muito proximas, principalmente quanto a estrutura. O DELPHI consiste em uma evolucao do PASCAL. Os primeiros compiladores de PASCAL para computadores IBM-PC compativeis deixavam um pouco a desejar. Sendo que, com a evolucao dos mesmos, em pouco tempo se equipararam com os compiladores C. Hoje dispomos de diversos compiladores de PASCAL no mercado. O que mais se destaca e o da BORLAND, porem o mesmo foi descontinuado. Com grande destaque encontramos tambem o TMT PASCAL (SHAREWARE) com registro pela internet e o FPK-PASCAL (FREEWARE). Existem compiladores de menor destaque porem eficientes, como o STONY BROOKY PASCAL+. Vamos entao a um famoso exemplo: BEGIN WRITELN('Alo, Mundo!'); END. CodersZine.═════════════════════════════════ ──────────════< COBOL >════────────── by X_cAmArO Wala all! Olha eu aki de novo... maos a obra.. Alguns ja' devem ter pensado: - Por que aprender Cobol?? Cobol ja morreu!! Na verdade, nao e' bem assim. COBOL(COmon Business Orient Language), apesar de ser antigo eh uma linguagem usada por cerca de 80% das grandes empresas brasileiras, pois tem muita facilidade em gerenciar grande massa de dados. Ai que chato... imagine vc, desenvolvendo um simples programinha para gerar relatorios, cobrando, quem sabe, alguns milhares de reais.. hehe.. acho que exagerei :) Cobol nao e' bem o meu forte, mas acho que posso passar aguma coisa... Antes, da pratica, um pouco de historia... O Cobol apareceu em 1959, gracas ao Cap. Grace Murray Hopper, da marinha dos EUA. Na epoca queriam uma linguagem que fosse: mutavel (capaz de suportar mudancas e melhoramentos) e de ser altamente portavel (escrito para um IBM pudesse tbm rodar em um UNIVAC ou TRS-80 - acho que nao sao da epoca de vcs, e muito menos da minha ). ;o) Normalmente,todo programa em COBOL e' dividido em 4 partes, que devem seguir a seguinte ordem: IDENTIFICATION DIVISION - Contem o nome do programa, de quem o escreveu, e mais algumas informacoes opcionais. E' muito simples. So' Program-id e Author sao obrigatorios. Identification Division. Program-Id. Prog00. <-- nome do programa Author. X_cAmArO. <-- nome do autor Date-Written. 05-05-97. <-- dia escrito Date-Compiled. <-- dia compilado, o compilador coloca Installation. No trabalho. <-- lugar onde foi feito Security. Prog exemplo p/ o <-- comentario sobre o programa CodersZine00. <-- comentario sobre o programa ENVIRONMENT DIVISION - E' formada por duas secoes, a Configuration Section onde fica o Source-Computer (computador onde foi feito) e Object-Computer (onde sera usado), servem apenas p/ documentacao e formado tbm pela Input-Output Section onde sao declarados os arquivos de entrada e saida (p/ o COBOL a impressora eh um arquivo de saida). Environment Division. Configuration Section. <-- nome da sessao Source-Computer. IBM PC. Object-Computer. IBM PC. Special-Names. <-- nomes especiais Decimal-Point Is Comma. <-- define que a casa decimal e'separada por virgula DATA DIVISION - Tbm dividida em duas secoes, File Section e Working-Storage Section. Na File Section, sao definidos os campos e registros dos arquivos usados. Na Working, sao declarado as variaveis que nao sejam arquivos. Pic e' uma mascara de entrada (qtdade e numero de caracteres aceitos), Pic 9999 e' igual a Pic 9(4). Para aceitar somente numeros, coloca-se 9, pra letras e numeros coloca-se X. Ex.: Pic X(12). Nesse exemplo, nao coloquei a File Section, pois nao declarei arquivos nesse programa. Data Division. Working-Storage Section. <-- nome da sessao 77 Num1 Pic 9999. 77 Num2 Pic 9(4). 77 Resul Pic ZZZZZZZ9. PROCEDURE DIVISION - Contem toda a logica do programa, ou seja, contem a descricao das intrucoes que serao executadas pelo sistema. Pode ser divida em paragrafos (sub-rotinas). Procedure Division. Inicio. Display (01, 01) "Digite o primeiro numero: ". <-- exibe na tela Accept (, ) num1. Display (02, 01) "Digite o segundo numero: ". Accept (, ) num2. Compute <-- permite vc usar sinais aritmeticos Resul = Num1 + Num2. <-- coloca a soma na variavel resul Display (04, 03) "A soma e' : ", resul. <-- exibe a variavel Stop run. Obs. Para testar, e' so' juntar os exemplos na ordem certa. Nao se esqueca de manter as colunas e tirar os comentarios. Cole, em um arquivo com extensao .cob (tipo.. program1.cob). NUNCA SE ESQUECA!! Dos pontos nos finais das linhas... E das regras das colunas: * 1 a 6, eram usadas p/ identificar as linhas, mas agora, com as atualizacoes do compilador, elas nao sao mais necessarias, porem, tem que permanecerem em branco. * 7, utilizada p/ caracteres especiais: - (traco) separacao de literais; se a linha de comando nao couber ate' a coluna 72, na proxima linha colocar um traco e continuar. * (asterisco) = comentario; colocar asterisco, e escrever o comentario * 8 a 11 chamadas area A,onde comecam obrigatoriamente o nome das divisoes, das secoes e dos paragrafos. * 12 a 72 chamadas area B; o compilador so' reconhece ate essa coluna. Existem diversos compiladores de Cobol, aki, uso o Microsoft (argh) Cobol 2.10. Por enquanto e' so', proxima edicao tem mais.. []'s a todos do #Federal que tbm sao coders como nos. CodersZine.═════════════════════════════════ ──────────════< C/C++ >════────────── by xCrown Primeiramente eu queria agradecer a todos que me cederam um lugar para colocar minhas ideias para serem passadas para a elite de programadores do Brasil. Fico muito feliz pelo que este pessoal esta fazendo e espero que nunca acabe esta rede de fraternidade para contruir um futuro melhor para todos. Um pouco sobre a linguagem C. A linguagem C tem uma longa historia, criada nos laboratorios bell a a linguagem C teve varios nomes e mutacoes ate chegar no que e' hoje. A linguagem C surgiu a partir de uma linguagem chamada B (Criada no final dos anos 60 por Ken Thompson ). O resto desta historia voce pode encontrar em qualquer livro de linguagem C. Na verdade estou aqui para iniciar o leitor na linguagem C. Todos dizem diversas coisas sobre a linguagem C. Alguns dizem C, C++, Turbo C, etc... Na verdade nao existe um nome altamente apropriado para esta linguagem. Entre estes nomes muda pouca coisa. Mas vale voce saber o q voce esta usando. Entendendo a logica de sintaxe da linguagem C. Todos dizem q a linguagem C e' um bixo de 7 cabecas. Na verdade todos que dizem isso ou estao aprendendo ou nao tiveram uma boa orientacao sobre esta linguagem. Basicamente voce tem que entender q para escrever um programa voce tem q escrever uma serie de instrucoes para q o computador execute cada uma delas. main() <- Cabeca do programa { clrscr(); <- instrucao que limpa a tela printf("Ola mundo... pra variar"); <- Instrucao q exibe uma mensagem na tela. return 0; } Este e' um programa simples q mostra q a linguagem C nao e'um bixo de 7 cabecas. Este programa esta dividido em cabeca ( "main()" ), chaves onde as instrucoes sao escritas com "{ }" e as instrucoes q sao delimitadas pelas chaves. Ha tambem algumas coisas que voce tem que obedecer como colocar um ";" no final de cada instrucao para que o compilador entenda que a linha foi terminada. Agora eu vou explicar a utilidade de cada linha do programa para que voce entenda melhor. "main()" -> main() tambem e' uma instrucao, so' que ela funciona diferente. Ela avisa ao computador onde o programa comeca. MAIN na verdade significa PRINCIPAL. Chaves "{ }" -> Sao tambem bastante importantes por que sao elas que reunem quase todas as instrucoes escritas para o programa. O computador so consegue ler a instrucao principal ( no caso main() ) e o que esta dentro das chaves. Se alguma instrucao estiver fora das chaves e causando um erro. Sendo assim voce tera que colocar todas as suas instrucoes dentro das chaves. Quanto as outras instrucoes que ficaram dentro das chaves, sao instrucoes simples que eu vou explicar na proxima zine. Ta vendo! Este foi o aspecto mais importante q voce deveria notar na linguagem C. Nao e' uma coisa monstruosa como todos dizem. E' ate bastante simples. Bom, acho que ate aqui ja esta bom. Nao tive muito tempo para elaborar melhor esta materia e me desculpem os erros de portugues. Na proxima vou explicar sobre funcoes, comandos, compiladores q podem ser usados e entrar de cabeca no mundo da criacao de jogos e demos. Queria novamente agradecer todos os camaradas do #Coders e principalmente ao X_cAmArO que me cedeu este espaco na Zine. Aste a proxtche. E lembrem-se: "Nao programar faz mal a saude." Caso alguma duvida mande um mail para fenix@netpatos.com.br CodersZine.═════════════════════════════════ ──────────════< DJGPP >════────────── by xROD O que e' DJGPP? DJGPP e' um compilador de C/C++ para DOS, que opera em modo protegido e e' 32-bits. Esse compilador funciona em DOS e em Linux. URL: http://www.delorie.com/djgpp/ Por que obter o DJGPP? Como ja foi dito, ele opera em modo protegido e e' 32-bits. Mas esse nao e' o principal motivo para obter o DJGPP. O principal motivo e' que ele e' gratis! Isso e' bom, nao e'? E tem mais: se voce fizer um jogo com o DJGPP, voce pode vende-lo, independente de voce ter comprado o DJGPP ou pego de graca na Internet. Alem disso, a id Software usou o DJGPP para fazer o famoso jogo Quake. Oba! Onde eu pego esse DJGPP? O compilador DJGPP e' distribuido em varios FTPs ao redor do mundo (incluindo dois aqui no Brasil), atraves de varios arquivos, de modo que e' muito facil pegar os arquivos errados. Mas, para nao se enganar, va ao endereco http://www.delorie.com/djgpp/zip-picker.html . La voce pode escolher os itens que voce quer, as linguagens que vai usar, se vai querer editor (eu recomendo), bibliotecas adicionais, e ainda pode escolher entre uma grande lista de FTPs. Aperte o botao, e, dentro de instantes, voce vai ver os arquivos que precisa, com links para o FTP que voce escolheu. Beleza, ne? Agora e' so pegar os arquivos ( que totalizam aproximadamente 10 megabytes). Descompactados, sao mais ou menos 20 megabytes. E agora, o que eu faco com esses arquivos todos? Eu imagino que voce tenha ou PKUNZIP, ou WinZip, ou UNZIP,certo? Se nao tem nenhum deles, procure adquirir algum, sao muito importantes. Siga esses passos para instalar o DJGPP 1. Crie um diretorio (pasta). Por exemplo: C:\DJGPP 2. Agora descompacte todos os arquivos para essa pasta. Se voce usa PKUNZIP: PKUNZIP -d arquivo.zip C:\DJGPP Se voce usa UNZIP: UNZIP arquivo.zip C:\DJGPP Se voce usa WinZip, basta sair clicando :) Sendo que "arquivo.zip" e' o nome do arquivo a descompactar. 3. Pronto para usar? Que nada... Primeiro, e' bastante recomendavel que voce coloque o DJGPP no PATH do autoexec.bat. Para fazer isso, basta ver onde tem SET PATH=... e acrescentar C:\DJGPP\BIN. Lembrando, deve sempre haver um ponto-e-virgula (;) entre um diretorio e outro. 4. Opa, nao feche o autoexec.bat ainda... Para finalizar, voce deve incluir no autoexec.bat: SET DJGPP=C:\DJGPP\DJGPP.ENV 5. Reinicie o computador. Agora tente digitar GCC. Se apareceu a mensagem: gcc.exe: no input files. entao pode comecar a comemorar: voce instalou tudo certo. Mas, se nao deu certo, meus pesames... Como eu compilo meus programas? Por enquanto vamos compilar um simples .C: GCC arquivo.c -o arquivo.exe Sendo que "arquivo.c" e' o seu codigo-fonte e "arquivo.exe" e' o arquivo .EXE que sera gerado a partir do seu codigo-fonte. Quais as diferencas entre o DJGPP e outros compiladores de C? Vamos tomar como base o Borland C++ 3.1. Eis algumas diferencas que eu constatei entre o DJGPP e o BC++ 3.1:  Os arquivos .OBJ nao sao de fato .OBJ. Sao .O, e incompativeis com os arquivos .OBJ. Ou seja, se voce quer compilar qualquer coisa junto com um .OBJ, simplesmente nao vai dar certo, porque o DJGPP so aceita .O.  Do mesmo modo, no subdiretorio LIB voce nao vai encontrar arquivos com extensao .LIB, e sim com extensao .A. Ou seja, o DJGPP tambem nao vai aceitar as .LIBs do seu outro compilador.  No DJGPP ha algumas LIBs e comandos novos. Um exemplo de comando novo: _go32_dpmi_set_protected_mode_interrupt_vector; assustador, nao? :). Mas fique calmo, nao sao todos os comandos novos que sao assim.  Voce nao pode utilizar asm { ... }. Em vez disso, voce deve utilizar __asm__ { ... }. Parece simples, nao? Mas nao e'... Provavelmente voce esta acostumado a utilizar a sintaxe de Assembly da Intel, que e' a utilizada em programas como TASM, MASM, NASM, etc. Mas o ASM do DJGPP utiliza a sintaxe AT&T, que tem algumas grandes diferencas.  Os arquivos de C++ agora tem extensao .CC. Mas isso nao quer dizer nada, voce pode gravar como .CPP, nao tem problema... So muda mesmo o nome, o resto e' igual (formato, comandos, etc.). Divirta-se! /* * Copyright (C) 1998 - "Rodrigo Rocha Gomes e Souza" * xROD do #Coders. (BrasIRC) * Todos os direitos reservados - Nao modifique! hehehehehe */ #include void main() { printf("Alo, Mundo!\n"); } CodersZine.═════════════════════════════════ ──────────════< VISUAL C++ >════────────── by xCaption Apresentando o Visual C++ O Visual C++ 5.0 e' uma ferramenta de programacao em 32-Bit, com ambiente de desenvolvimento integrado(IDE) rodando em Windows. Seu ambiente integra praticamente todos os requisitos para a geracao de um aplicativo Windows. Em sua janela de projeto estao o ClassWiew - Manipula as classes e/ou funcoes definidas em seus projetos, como uma hierarquia; O FileView - que exibe os arquivos de projetos; O ResourceView - Manipula os recursos de seu projeto, como menus, icones e caixas de dialogos; InfoWewer - O Sumario da ajuda on-line interna do VC++. O VC++ conta com a biblioteca MFC, que prove uma aproximacao orientada a objeto para desenvolvimento de Windows que pode salvar tempo, e tambem pode fazer o desenvolvimento processar muito menos doloroso que e' quando voce usa a API no osso. Em nosso caso, iremos estudar no osso, nao MFC por enquanto. Criando o Projeto Generic A partir do IDE do VC++, no menu File clique sobre New ao aparecer a caixa de dialogo New clique na guia Project e selecione Win32 Application da lista, na caixa Project Name entre com o nome do nosso projeto: Generic, na caixa Location entre com o caminho onde o diretorio base de projeto(como mesmo nome do projeto) vai ficar e clique em OK. Neste ponto, com projeto vazio criado precisamos agora adicionar os arquivos de projeto, porem antes vamos dar uma olhada no processo de criacao de um .EXE no Windows: Todo o codigo fonte (.c/.cpp) e' compilado em .obj's e o script de recursos (.rc) e' compilado em .res. O .rc e' opcional voce pode criar um .exe somente com codigo sem recursos. Implementando o Projeto Adicionando o fonte Iniciando Voce pode ter varios arquivos de fonte em seus projetos, mas neste caso teremos apenas um. Para incluir o arquivo de codigo fonte em seu projeto no menu File clique sobre New ao aparecer a caixa de dialogo New clique na guia Files e selecione C++ Source File (tanto para c ou c++), na caixa Filename digite main.c e clique em OK. O VC++ criou o arquivo vazio e adicionou sua referencia ao projeto, como voce pode ver na janela de projeto na guia FileView, e tambem abriu o arquivo para voce, vamos entao ao codigo: Incluindo cabecalhos(Headers). Temos que incluir o windows.h, esse header e' requerido para os programas escritos para windows, nele e em outros incluidos por ele, contem todos os prototipos das funcoes, tipos de dados definidos, constantes, entre outras coisas que vamos utilizar. tambem incluimos o resource.h que e' o header que contem as constantes dos recursos. Para nos referenciarmos no codigo fonte a um recurso, este arquivo e' requerido. #include #include "resource.h" Declarando prototipos. Nesse caso temos somente um prototipo: o da funcao de janela, a qual o Windows chama quando ocorre algum evento, como veremos mais adiante. LRESULT WINAPI MainWndProc (HWND, UINT, WPARAM,LPARAM); Declarando variaveis globais. A unica variavel global que iremos declarar neste modulo e' ghInstance que contem o valor da instancia do aplicativo. Cada copia da mesma aplicacao que e' executada recebe uma instancia diferente. HANDLE ghInstance; A Funcao WinMain. Esta funcao e' o ponto de entrada do programa, e' chamada pelo sistema quando inicializada o aplicativo. Seus parametros sao: hInstance -Identifica a instancia corrente do aplicativo. hPrevInstance -Identifica a instancia anterior do aplicativo. Em um aplicativo Windows de 32-Bit esse parametro e' sempre nulo, o motivo dele estar ai e manter a compatibilidade com aplicativos escritos para outros ambientes como o Windows 3.1. lpCmdLine - Ponteiro para uma string que especifica a linha de comando para a aplicacao, excluindo o nome de programa. nCmdShow - Especifica como a janela deve ser exibida de acordo com constantes definidas em windows.h int PASCAL WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine,int nCmdShow ) { Quando nosso aplicativo iniciar ele devera mostrar uma janela simples na tela, para isso devemos primeiramente registrar a nossa janela para depois criarmos e exibi-la na tela. Declaramos aqui as variaveis locais de WinMain, sao elas: wc - Que sera preenchida para o registro da janela. msg - Usada no loop de mensagens. hWnd - Ira receber um numero que identifica a janela criada (Handle). WNDCLASS wc; MSG msg; HWND hWnd; Podemos agora preencher a estrutura da classe de janela (nao confunda classe de janela com classes de C++), destacando alguns itens como: lpszClassName - String com o nome da classe da janela, este pode ser definido por voce. Por exemplo o nome da classe da janela principal do Microsoft Word e' OpusApp. lpfnWndProc - Ponteiro para a funcao de janela hInstance - Handle da instancia do aplicativo. hIcon - Handle do icone para a janela, conseguido com uma chamada e' LoadIcon que veremos mais adiantes nos recursos. wc.lpszClassName = "GenericAppClass"; wc.lpfnWndProc = MainWndProc; wc.style = CS_OWNDC | CS_VREDRAW | CS_HREDRAW; wc.hInstance = hInstance; wc.hIcon = LoadIcon( NULL, IDI_APPLICATION ); wc.hCursor = LoadCursor( NULL, IDC_ARROW ); wc.hbrBackground = (HBRUSH)( COLOR_WINDOW+1 ); wc.lpszMenuName = ""; wc.cbClsExtra = 0; wc.cbWndExtra = 0; Com a estrutura preenchida registramos a janela: RegisterClass( &wc ); Fazemos uma copia da variavel da instancia da local para a global. ghInstance = hInstance; Criamos a janela e o seu handle e' atribuido a hWnd. hWnd = CreateWindow("GenericAppClass", "Generic", WS_OVERLAPPEDWINDOW|WS_HSCROLL|WS_VSCROLL, 0, 0, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL ); Finalmente exibimos a janela: ShowWindow( hWnd, nCmdShow ); E entramos no loop de mensagens onde os eventos serao captados e enviados a funcao de janela. while( GetMessage( &msg, NULL, 0, 0 ) ) { DispatchMessage( &msg ); } Quando o ponto de execucAo chega aqui a sua funcao de janela ou a padrao recebeu uma mensagem WM_QUIT e fez GetMessage retornar 0 e o loop de mensagens parar. Entao e' retornado ao sistema o wParam de msg, que no caso e' o codigo de saida do programa. return msg.wParam; } A Funcao De Janela (MainWndProc) Esta e'a funcao que e' chamada a cada evento ocorrido na janela que ela esta associada. E' possivel por exemplo associar uma funcao de janela a uma janela ja criada de um aplicativo fazendo com que voce intercepte os eventos antes que o aplicativo fique sabendo que ocorreu, alias e' mais ou menos assim que o XCaption trabalha. Seus parametros sao: hWnd - Handle da janela. msg - Especifica a mensagem wParam - Informacao adicional da mensagem, o valor depende da mensagem. lParam - Informacao adicional da mensagem, o valor depende da mensagem. LRESULT CALLBACK MainWndProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { Faremos com que quando a janela for exibida um texto colocado em sua area. Poderiamos simplesmente chamar a funcao da API TextOut para escrever o texto e pronto mas nao e' tao simples. Tudo o que e' desenhado na janela e' apagado quando esta se sobreposta por outra. Quando ela e' reexibida nao sobra mais nada. Porem quando isso ocorre o windows causa um evento de redesenho enviando a janela a mensagem WM_PAINT. Processando essa mensagem, podemos manter a vida do que ha dentro da janela. Declaramos duas variaveis: ps - Que contem informacoes para o desenho hdc -que contem o contexto de dispositivo: dados que define os objetos graficos, seus atributos associados, e os modos graficos que afetam producao em um dispositivo szMsg - Buffer que vai receber a string dos recursos. PAINTSTRUCT ps; HDC hDC; CHAR szMsg[255]; Das mensagens recebidas fazemos uma selecao das que nos interessa com um switch switch( msg ) { Para pegar o texto que esta nos recursos chamamos LoadString passando o identificador IDS_HELLO que e' definido no resource.h como sera visto adiante. A janela precisa ser repintada, nosso desenho e' apenas um texto, para isso chamamos TextOut com o contexto de dispositivo conseguido com BeginPaint e o liberamos com a chamada a EndPaint. case WM_PAINT: LoadString ( ghInstance , IDS_HELLO , szMsg, sizeof(szMsg)); hDC = BeginPaint( hWnd, &ps ); TextOut( hDC, 10, 10, szMsg, lstrlen(szMsg) ); EndPaint( hWnd, &ps ); break; Quando a janela for fechada nossa aplicacao termina, entao devemos chamar PostQuitMessage para terminar o loop de mensagens. case WM_DESTROY: PostQuitMessage( 0 ); break; Aqui deixamos a funcao de janela padrao cuidar das mensagens nao processadas. default: return( DefWindowProc( hWnd, msg,wParam, lParam )); } Retornamos 0 quando a mensagem for usada e nao necessitar retorno especial. return 0; } Criando os Recursos Iniciando Nossa primeira aplicacao nao vai possuir muitos recursos, mas afinal o que sao recursos? Todos os dados adicionais binarios que voce inclui para o seu executavel pode ser considerado recurso. Os recursos mais comuns do Windows sao icones, cursores, menus , caixas de dialogo , bitmaps , fontes, aceleradores, tabelas de string, dados de versao, alem de recursos definidos pelo o usuario, como por exemplo um .wav contendo som ou um .avi contendo animacao. Um dos maiores beneficios dos recursos e' o fato de que voce pode alterar muitas coisas, incluindo as strings sem mexer em seu codigo fonte. Tornando facil a producao de um aplicacao com diferentes idiomas. Para criar um recurso no menu File clique sobre New ao aparecer a caixa de dialogo New clique na guia Files e selecione Resource Script, na caixa Filename digite resource.rc e clique em OK. O VC++ criou o arquivo vazio e adicionou sua referencia ao projeto, (alem de ter criado o arquivo resource.h que vai conter todas as definicoes de constantes de recursos que serao compartilhadas pelo resource.rc e o main.c) como voce pode ver na janela de projeto na guia FileView, e tambem abriu o arquivo para voce, porem voce deve fecha-lo pois iremos trabalhar diretamente na janela de projetos no ResourceView. Inserindo uma tabela de Strings Vamos agora implementar a unica string que o aplicativo usa nos recursos: IDS_HELLO, a que nos referenciamos no codigo fonte, para isso no menu Insert clique em Resource, quando a caixa de dialogo Insert Resource aparecer, selecione String Table da lista e clique em New. O editor de strings e' exibido, clique com o botao direito na primeira linha, ao aparecer o menu clique sobre Properties, na caixa de dialogo String Properties, em ID, digite IDS_HELLO e logo depois na caixa Caption digite: "Hello Word, hello Excel!" e clique no X para fechar a janela de propriedades. Vendo realmente o que foi feito O VC++ fez quase todo o trabalho para voce nos recursos, porem voce pode ver o que ocorreu e ate modificar manualmente todo o trabalho, para isso no menu File clique sobre Open selecione os arquivos: resource.rc e resource.h e selecione Text em Open As, clique em Open(Abrir). Compilando, Ligando e Testando Talvez voce se questione porque estes tres passos sao apresentados juntos? A resposta e': sao feitos um atras do outro e voce nao precisa se preocupar, desde que o seu codigo nao tenha erros de compilacao ou de ligacao. Se isso ocorrer verifique a listagem, posteriormente veremos a depuracao de programas. Bem, pressione F5. CodersZine.═════════════════════════════════ ──────────════< VISUAL BASIC >════────────── by Rashi O Visual Basic e' um ambiente de desenvolvimento de aplicativos para Windows amigavel e facil de aprender, utilizando uma das linguagens de programacao mais conhecidas em todo o mundo. Quando foi criado, seu objetivo era permitir que programadores que nao conheciam a linguagem C pudessem desenvolver aplicativos para Windows. Desnecessario dizer que foi muito bem aceito. Hoje, em sua versao 5, este ambiente conseguiu se firmar como um dos melhores ambientes de desenvolvimento do mercado, contando com recursos que antes so eram conseguidos mediante programacao em C. Alem dos programas convencionas, o VB pode tambem criar controles e bibliotecas ActiveX, dando maior liberdade ao desenvolvedor. O Visual Basic nao e' 100% orientado a objetos, mas sua base nessa area ja e' bastante extensa. Ele possui varios objetos, tanto internos a seu ambiente quanto de outras bibliotecas e aplicativos, e tambem permite que criemos nossos proprios objetos, recurso implantado na versao 4. A versao 5 trouxe outro beneficio ao desenvolver: a criacao de controles ActiveX, que podem ser utilizados em qualquer aplicativo que suporte esta tecnologia, inclusive paginas da Web. O objeto mais utilizado no VB e' o form. E'este objeto que usamos, na maioria das vezes, para criar a interface com o usuario. Um programa em VB pode ter tanto um como varios objetos form; e, neste objeto, sao inseridos os controles que serao utilizados, tais como botoes de comando, caixas de texto, etc. A criacao de um programa basico em VB, tal como cadastro de clientes, e' facil. Os objetos possuem propriedades, metodos e eventos proprios. O VB trabalha com projetos, que nada mais sao dos que os programas em sim seus forms, modulos e demais arquivos e objetos. Na proxima edicao desse zine, veremos quais os tipos de dados com os quais o VB trabalha, o que sao propriedades, eventos e metodos e comecaremos a montar nosso primeiro programa no qual, passo a passo, serao mostrados os recursos dessa linguagem. CodersZine.═════════════════════════════════ ──────────════< VISUAL BASIC COM WINSOCK >════────────── by Hammett Hey programadores, iniciantes na area ou curiosos. Sou um novo membro e estarei enviando materias sobre programacao winsock e programacao para acesso a dados SQL Server 6.5/Access. Nao sei se o que vou mandar esta muito facil ou muito dificil, portanto, manifeste sua opniao. 8) Microsoft Winsock Control Antes de cair com a cara na API da winsock.dll, vamos primeiro utilizar o winsock control da microsoft porque sera de mais facil manuseio, alem disso, o winsock funciona muy bien com Proxy ou acesso direto, no caso da API, pra configura-la pra acessar o proxy..... cara..... melhor usar o winsock control. 8) O winsock control e' uma refinacao dos metodos mais usados para utilizacao dos sockets do windows. Conta com o metodos e propriedades mais usados como Accept, Connect, Send, RemoteHost. Para iniciarmos com essa pequena experiencia, vamos utilizar o controle para uma aplicacaozinha de check e-mail. Aqui esta o codigo do frmCheckEmail.frm, recorte e cole-o no bloco de notas e salve-o como frmCheckEmail.frm VERSION 5.00 Object = "{248DD890-BB45-11CF-9ABC-0080C7E7B78D}#1.0#0"; "MSWINSCK.OCX" Begin VB.Form frmCheckEmail BorderStyle = 3 'Fixed Dialog Caption = "Check e-mail 1" ClientHeight = 4245 ClientLeft = 3075 ClientTop = 1740 ClientWidth = 4155 BeginProperty Font Name = "Tahoma" Size = 8.25 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty LinkTopic = "Form1" MaxButton = 0 'False MinButton = 0 'False ScaleHeight = 4245 ScaleWidth = 4155 StartUpPosition = 2 'CenterScreen Begin MSWinsockLib.Winsock Winsock1 Left = 120 Top = 3660 _ExtentX = 741 _ExtentY = 741 _Version = 327681 End Begin VB.CommandButton Command2 Cancel = -1 'True Caption = "Sair" Height = 435 Left = 2160 TabIndex = 10 Top = 3720 Width = 1215 End Begin VB.CommandButton Command1 Caption = "&Aguardar" Height = 435 Left = 780 TabIndex = 9 Top = 3720 Width = 1215 End Begin VB.Frame Frame1 Caption = "Configuracoes:" Height = 3435 Left = 120 TabIndex = 0 Top = 120 Width = 3915 Begin VB.TextBox Text1 Height = 315 IMEMode = 3 'DISABLE Left = 360 TabIndex = 11 Text = "pop.sao.nutecnet.com.br" Top = 2220 Width = 3075 End Begin VB.TextBox txtTempo Height = 315 Left = 2100 MaxLength = 2 TabIndex = 7 Text = "05" Top = 2940 Width = 375 End Begin VB.Frame Frame2 Height = 75 Left = 180 TabIndex = 5 Top = 2700 Width = 3555 End Begin VB.TextBox txtPass Height = 315 IMEMode = 3 'DISABLE Left = 360 PasswordChar = "*" TabIndex = 4 Text = "naointeressa" Top = 1440 Width = 3075 End Begin VB.TextBox txtLogin Height = 315 Left = 360 TabIndex = 2 Text = "hammettwhom" Top = 660 Width = 3075 End Begin VB.Label Label5 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Pop Server:" Height = 195 Left = 240 TabIndex = 12 Top = 1980 Width = 855 End Begin VB.Label Label4 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "minutos." Height = 195 Left = 2580 TabIndex = 8 Top = 3000 Width = 615 End Begin VB.Label Label3 AutoSize = -1 'True Caption = "Verificar email a cada " Height = 195 Left = 480 TabIndex = 6 Top = 3000 Width = 1560 End Begin VB.Label Label2 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Password:" Height = 195 Left = 240 TabIndex = 3 Top = 1200 Width = 750 End Begin VB.Label Label1 AutoSize = -1 'True BackStyle = 0 'Transparent Caption = "Username:" Height = 195 Left = 240 TabIndex = 1 Top = 420 Width = 780 End End Begin VB.Timer Timer1 Left = 3600 Top = 3660 End End Attribute VB_Name = "frmCheckEmail" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit ' Geralmente a porta do servidor POP e' 110, mas se um dia mudar, mude aqui Private Const PopPorta As Byte = 110 Private Sub Command1_Click() Me.WindowState = vbMinimized Timer1.Enabled = True End Sub Private Sub Command2_Click() Unload Me End Sub Private Sub Verificar(sServer As String) On Error GoTo Manipular ' ------------------------- ' Primeiro Passo: A CONEXAO ' ------------------------- ' Inicia Winsock Winsock1.Close DoEvents Winsock1.Connect sServer, PopPorta DoEvents Problemas: Exit Sub Manipular: Select Case MsgBox("Ocorreu um erro inesperado." & vbNewLine & vbNewLine & Err.Number & vbNewLine & vbNewLine & Err.Description & vbNewLine & vbNewLine & "Deseja tentar novamente?", vbQuestion + vbAbortRetryIgnore, "Erro") Case vbAbort Resume Problemas Case vbRetry Resume Case vbIgnore Resume Next End Select End Sub Private Sub Timer1_Timer() Me.Caption = "Verificando mensagens..." Call Verificar(Text1.Text) End Sub Private Sub txtTempo_LostFocus() On Error Resume Next If Not IsNumeric(txtTempo.Text) Then MsgBox "Entre com um valor numerico.", vbInformation, "Erro" txtTempo.SetFocus Exit Sub End If ' 1 = 1000 ' 60 = 60000 Timer1.Interval = Val(txtTempo.Text) * 60000 End Sub Private Sub Winsock1_Close() Me.Caption = "Check e-mail 1" End Sub Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim sRetorno As String Dim iPos As Integer Static TotalMens As String Static BaixandoMsg As Integer Static sInco As String Winsock1.GetData sRetorno, vbString ' Esse pequeno truque e' para evitar perda da integridade ' das respostas do servidor devido ao delay da internet If Right(sRetorno, 2) <> vbNewLine Then sInco = sInco & sRetorno Exit Sub Else sRetorno = sInco & sRetorno sInco = "" End If Select Case UCase(Left(sRetorno, 3)) Case "+OK" ' Se o server respondeu um +OK, entao tudo bem, analizemos o que mais ELE ' disse, porem como nem todos respondem igualmente, vamos buscar por ' palavras chaves deles. If InStr(4, sRetorno, "starting", vbTextCompare) > 0 Then ' ----------------------------- ' Segundo Passo: ENVIO DO LOGIN ' ----------------------------- Winsock1.SendData "user " & txtLogin.Text & vbCrLf DoEvents ElseIf InStr(4, sRetorno, "password required", vbTextCompare) > 0 Then ' --------------------------- ' Terceiro Passo: A SENHA !!! ' --------------------------- Winsock1.SendData "pass " & txtPass.Text & vbCrLf DoEvents ElseIf InStr(4, sRetorno, txtLogin.Text & " has", vbTextCompare) > 0 Then ' ------------------------------- ' FINALE: Descarregue os headers ' ------------------------------- iPos = InStr(4, sRetorno, "has", vbTextCompare) iPos = iPos + 4 TotalMens = "" Do If Not IsNumeric(Mid(sRetorno, iPos, 1)) Then Exit Do TotalMens = TotalMens & Mid(sRetorno, iPos, 1) iPos = iPos + 1 Loop If Val(TotalMens) = 0 Then Winsock1.Close Me.Caption = "Check e-mail 1" DoEvents Exit Sub Else BaixandoMsg = 1 Me.Caption = "Baixando cabeþalho " & BaixandoMsg Winsock1.SendData "Top " & BaixandoMsg & " 15" & vbCrLf DoEvents End If End If Case "FRO" Load frmNews frmNews.Text1.Text = sRetorno frmNews.Parsing BaixandoMsg = BaixandoMsg + 1 If BaixandoMsg > Val(TotalMens) Then Winsock1.Close DoEvents frmNews.Show Me.Caption = "Check e-mail 1" Exit Sub Else Me.Caption = "Baixando cabeþalho " & BaixandoMsg Winsock1.SendData "Top " & BaixandoMsg & " 15" & vbCrLf DoEvents End If Me.Enabled = False Case Else ' ' Se nao respondeu +OK e' que algo esta errado ' ' Me.Caption = "Check e-mail 1" MsgBox "Resposta do servidor " & vbNewLine & vbNewLine & sRetorno & vbNewLine & vbNewLine & "Operacao Cancelada.", vbInformation, "Erro" Winsock1.Close DoEvents Exit Sub End Select End Sub Aqui esta o codigo do frmNews.frm, recorte e cole-o no bloco de notas e salve-o como frmNews.frm VERSION 5.00 Object = "{6B7E6392-850A-101B-AFC0-4210102A8DA7}#1.2#0"; "COMCTL32.OCX" Begin VB.Form frmNews AutoRedraw = -1 'True BorderStyle = 3 'Fixed Dialog Caption = "Check Email Funciona !!!" ClientHeight = 3435 ClientLeft = 1935 ClientTop = 1530 ClientWidth = 6705 BeginProperty Font Name = "Tahoma" Size = 8.25 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty LinkTopic = "Form1" MaxButton = 0 'False MinButton = 0 'False ScaleHeight = 3435 ScaleWidth = 6705 StartUpPosition = 2 'CenterScreen Begin VB.TextBox Text1 Height = 2475 Left = 120 MultiLine = -1 'True ScrollBars = 3 'Both TabIndex = 3 Top = 3480 Width = 6435 End Begin VB.CommandButton Command1 Caption = "OK" Default = -1 'True Height = 435 Left = 2640 TabIndex = 2 Top = 2940 Width = 1335 End Begin ComctlLib.ListView ListView1 Height = 2475 Left = 120 TabIndex = 0 Top = 360 Width = 6435 _ExtentX = 11351 _ExtentY = 4366 View = 3 LabelWrap = -1 'True HideSelection = 0 'False _Version = 327682 ForeColor = -2147483640 BackColor = -2147483643 BorderStyle = 1 Appearance = 1 BeginProperty Font {0BE35203-8F91-11CE-9DE3-00AA004BB851} Name = "Tahoma" Size = 8.25 Charset = 0 Weight = 400 Underline = 0 'False Italic = 0 'False Strikethrough = 0 'False EndProperty NumItems = 2 BeginProperty ColumnHeader(1) {0713E8C7-850A-101B-AFC0-4210102A8DA7} Key = "" Object.Tag = "" Text = "De:" Object.Width = 3882 EndProperty BeginProperty ColumnHeader(2) {0713E8C7-850A-101B-AFC0-4210102A8DA7} SubItemIndex = 1 Key = "" Object.Tag = "" Text = "Assunto:" Object.Width = 6174 EndProperty End Begin VB.Label Label1 AutoSize = -1 'True Caption = "Mensagens:" Height = 195 Left = 120 TabIndex = 1 Top = 120 Width = 870 End End Attribute VB_Name = "frmNews" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = True Attribute VB_Exposed = False Option Explicit Private Sub Command1_Click() Unload Me End Sub Private Sub Form_Load() ListView1.ListItems.Clear End Sub Private Sub Form_Unload(Cancel As Integer) frmCheckEmail.Enabled = True End Sub Public Sub Parsing() On Error Resume Next Dim iIni As Integer, iFim As Integer Dim lista As ListItem Dim strString As String iIni = InStr(1, Text1.Text, "From:", vbTextCompare) iFim = InStr(iIni + 1, Text1.Text, Chr(13), vbTextCompare) If iIni > 0 Then Set lista = ListView1.ListItems.Add(, , Mid(Text1.Text, iIni + 6, iFim - (iIni + 7))) iIni = InStr(1, Text1.Text, "Subject:", vbTextCompare) iFim = InStr(iIni + 1, Text1.Text, Chr(13), vbTextCompare) lista.SubItems(1) = Mid(Text1.Text, iIni + 8, iFim - (iIni + 8)) End If Text1.Text = "" End Sub Crie um novo projeto, adicione o controle Winsock e o Common Controls. Adicione estes dois formularios. O programa e' simples, apenas conecta no servidor pop, loga-se com seu username e password, verifica se ha mensagens. Se sim, puxa os headers, faz um parsing para pegar o nome de quem mandou e o assunto. Qualquer duvida, estarei respondendo na proxima edicao. []'s !!! Hammett hammett@thepentagon.com http://www.geocities.com/Hollywood/Set/2008/activemenu.html UIN 1223824 CodersZine.═════════════════════════════════ ──────────════< DELPHI >════────────── by Progman Ai galera !!!!! 1. Aprendendo 2. Dicas 1 - Aprendendo... == Para ler esta Secao... == Fiz esta secao nao pensando exclusivamente em pessoas que conhecem o delphi, mas em pessoas que estejam interessadas em programar esta maravilhosa linguagem da Borland. Nao nego que um pequena nocao em programacao ira ajudar muito a entender o que eu coloquei aqui. O exemplo e' uma boa forma de aprender sobre um comando, por isso a cada exemplo voce encontrara informacoes sobre cada comando do mesmo. == Comecando... == == PARTE I - Introducao a linguagem == == Variaveis == Talvez programadores oriundos de outras linguagens tenham certa dificuldade para se acostumar com os padroes delphi. A declaracao de variaveis e seu uso, provavelmente parecera chato para programadores Visual Basic. Vamos a algumas regras praticas: 1.Nao e'possivel declarar variaveis em qualquer lugar, apenas no inicio do procedimento. 2.Os tipos de dados Delphi nao sao compativeis (como no VB), por exemplo, voce nao pode multiplicar a string "X" pela string "Y", mas sim transforma-las em numeros inteiros e depois multiplica-los, veja: Z := StrToInt(X) * StrToInt(Y);. Nem mesmo numeros inteiros sao compativeis com reais. == Sinal de igual == Nao use o sinal de igual para atribuir valores(como em grande parte das linguagens) mas sim ":=" como na linha abaixo: i := 0; O sinal de igual e' usado apenas para comparacao como em comandos "If", veja: If i = 0 then ShowMessage('O valor de i e' 0'); else ShowMessage('O valor de i nao e' 0'; Note que nao se usa o EndIf como no caso do Visual Basic, por exemplo... Mas pode-se usar o begin e end para determinar o inicio e o fim como em: if i = 0 then begin ShowMessage('O valor de i e' 0'); ShowMessage('Foi usado Begin e End porque foram utilizadas duas linhas'); end else ShowMessage('O valor de i nao e' 0'); Quando se usa uma unica linha nao ha necessidade de usar Begin e End. - IMPORTANTE - Voce deve ter notado que em Delphi nao se usam aspas duplas ("), mas aspas simples ('), ou apostrofo, como preferir. Tambem e' usado ponto e virgula (;) no final de cada comando (mas nao nos que terminam com comandos como If. Mas lembre-se que NaO se deve usar ponto e virgula antes de else. Outro motivo pelo qual no final de cada declaracao usa-se o ponto e virgula e' para mostrar que acabou. Por esta razao pode-se continuar o comando na linha de baixo (menos partir strings ao meio), veja: Estaria CORRETO: MessageDlg ('Esta e' uma mensagem!', mtinformation, [mbok], 0); Mas estaria INCORRETO: MessageDlg ('Esta e' uma mensagem!', mtinformation, [mbok], 0); Se for necessario use: MessageDlg ('Esta e' uma' + + ' mensagem!', mtinformation, [mbok], 0); Isso e' correto. == Comentarios == Os comentarios podem estar entre chaves: {Este e' um comentario que pode estar em mais de uma linha}; entre sinais de parenteses e asterisco, como o mostrado abaixo: (* este e' um comentario que pode estar em mais de uma linha ate que seja colocado o sinal de asterisco e fecha parenteses *) Ou pode estar depois de duas barras, para comentarios rapidos de apenas uma linha, veja: // Este comentario nao pode passar de uma linha... == Operadores == Eles sao: * - Multiplicacao aritmetica. / - Divisao de numeros que obtem um numero real (exemplo: 5/2 = 2.5). div - Divisao de numeros que obtem um numero inteiro (exemplo: 5/2 = 2). + - Adicao. - - Subtracao. = - Igual. <> - Diferente. > - Maior. >= - Maior ou igual. < - Menor. <= - Menor ou igual. Exemplo: Form1.Canvas.TextOut (1, 1, IntToStr((2 * 5) div 3)); Form1: Nome do formulario; Canvas: Propriedade (nao apenas do formulario) relacionada com desenho. Neste caso ela e' usada para escrever no formulario (com o TextOut), algo como o print do Visual Basic. Sua cor de fundo padrao e' branca, mas e' possivel muda-la acessando a propriedade brush. O primeiro parametro e' o left, o segundo e' o top e o terceiro e' o texto a ser escrito. IntToStr : Transforma um inteiro em caracteres ( como ja foi dito anteriormente, o Delphi nao possui compatibilidade entre Integers e Strings, a nao ser que sejam usadas Variants). Iniciantes: Para quem ainda nao esta integrado com programacao aqui vao alguns conceitos: Parametros: Sao "valores extras", colocados entre parenteses para fornecer outras informacoes ao metodo ( function ou procedure ). No exemplo mostrado, a funcao precisa dos parametros inteiros (que foram determinado como 1 neste caso) para saber a que distancia da margem esquerda e o topo, respectivamente; Left: Valor inteiro que diz a distancia ate o canto esquerdo de um objeto; Top: Valor inteiro que diz a distancia ate o topo de um objeto; 2 - Dicas... 2.1. Usando funcoes externas (de DLLs)... Usar funcoes externas, de uma ou mais DLLs e' muito simples, basta declara-las da seguinte forma: function NomeDaFuncao(Parametros: Tipo): TipoRetorno; stdcall; external 'NomeDaDLL'; Voce pode ver o nome de uma funcao da DLL na Visualizacao Rapida do Windows (se esta estiver sido instalada), para isso encontre o arquivo DLL, clique nele com o botao direito do mouse e escolha visualizacao rapida. 2.2. Manipulando "Application"... A classe TApplication proporciona muitas manipulacoes uteis do aplicativo como um todo. Por exemplo, caso voce queira que quando um aplicativo for minimizado apareca a hora atual no titulo da barra de tarefas, e quando ele for restaurado nao apareca, use o seguinte codigo no evento OnLoad do formulario, por exemplo: Application.OnMinimize := ShowDate; Application.OnRestore := NShowDate; procedure ShowDate; begin TForm1.Timer1Timer(Sender); Timer1.Enabled := True; end; procedure NShowDate; begin Timer1.Enabled := False; Application.Title := 'Titulo do Aplicativo'; end; Este exemplo considera que o aplicativo possua um relogio que atualiza de tempos em tempos (a cada 250 milesimos de segundo por exemplo). Este e' desabilitado quando o formulario e' restaurado. 2.3. Undo na caixa de texto (Memo)... Use o seguinte codigo para Desfazer a ultima acao em uma caixa de Texto (Memo): Memo1.Perform(EM_UNDO, 0, 0); o valor retornado de Memo1.Perform(EM_CANUNDO, 0, 0) sera diferente de zero se o comando de Desfazer estiver disponivel. 2.4. Pegando a posicao do cursor... Use o seguinte codigo para ver a posicao do cursor na tela, ele e' muito util quando o evento usado nao possui como parametros "X" e "Y": procedure GetPosition (var X; var Y); var CPos: TPoint; begin GetCursorPos(CPos); X := CPos.X; Y := CPos.Y; end; Espero que este guia pratico tenha lhe servido para alguma coisa! :))) CodersZine.═════════════════════════════════ ──────────════< DELPHI COM ACTIVEX >════────────── by BADGod Nova tecnologia produzida pela Microsoft que esta no Delphi97. Vai ser muito facil para o desenvolvimento de aplicativos clientes pequenas e sem necessidade de configura-lo para ambiente distribuido web com ou sem arquitetura de banco de dados Cliente/Servidor multicamadas. Um nome bem recente na area desenvolvimento para INTERNET o ActiveX, visa empacotar as principais tecnologias de reutilizando de funcoes programadas e prestacao de servico em aplicativos OLE* e COM*. Apos examinar toda a tecnologia de controle OLE*, a Microsoft descobriu um "poco de petroleo". O OLE* tinha crescido assustadoramente, e consigo adquiriu tantas informacoes e caracteristicas de interface que os componentes OLE* nao poderiam navegar com rapidez por uma tipica conneccao a Internet. Vamos debulhar isso mais um pouco, no control e OLE* e' preciso carregar consigo mesmo informacoes que definem uma janela na tela, mesmo que esse controle jamais seja visivel. Assim a Microsoft planejou e construiu uma tecnologia mais adaptavel a situacao e muito mais agil. Vindo do mesmo Kernel do COM*, com o OLE*, mas com um conjunto menor de exigencias centrais e novas opcoes para que se possa contruir refinadas e dinamicas Home Pages. Todos os controles criados apartir do COM* e do OLE* foram chamados de Controles Activex. Agora isso quer dizer que toda a industria de controles Controles Activex/OCX estam automaticamente disponiveis para a Internet tambem o que promete facilitar muito a nossa vida. Do mesmo jeito que um Controles Activex/OCX sao usados num programa, ele podera ser usado numa pagina HTML atraves como um applet na linguagem JAVA, ou dentro de um programa. De acordo com a sua aplicacao, esses controles vao poder ser usados por leigos ou por programadores. Ex.: Tem uma possibilidade de existir um controle que o usuario sa precise escrever uma frase para ela ficar pulando pela tela, enquanto outro que trate com banco de dados precise de programacao. Esses arquivos serao executados junto com a pagina que os contem e colocados num cache permanente no computador do usuario, o que fara da navegacao um processo mais rapido, sera notificado instalacao na maquina. Devido a questao da seguranca, existe um tipo de diploma dado pela Microsoft ou por uma representante sua que certifica que este controle nao pode causar danos ao usuario, se o controle que estiver sendo executado nao possui-lo, a pessoa sera perguntada se deseja executa-lo ou nao. Agora, e principalmente na nova versao (3.0 ou 97), o Delphi usara a tecnologia ActiveX para criacao de aplicacoes Servidoras Web e aplicacoes Clientes Web. A tecnologia ActiveX tem tudo para dar certo, so depende da Microsoft cooperar. Duvidas: COM: Essa nova tecnologia dos Sistemas Operacionais 32 Bits Microsoft estara implementada no Delphi97. Tera muita utilidade no desenvolvimento cliente/servidor multiplas camadas OLE: A tecnologia OLE e' usada para a criacao de controles OCX, que pode ser 32 bits. Devido a um imenso apoio da Microsoft as empresas deste ramo, logo todas elas atualizaram seus produtos para a nova tecnologia, hoje os VBX estao ficando mais que desaparecendo, enquanto o OCX cresce a cada dia. A tecnologia OLE e' componente central dos sistemas operacionais Windows (da Microsot) do seu grupo de aplicativos, tais como Microsoft Office que monopolisa todo o mercado. (Na minha opiniao a Microsoft domina o mercado apenas por falta de conhecimento da maioria da populacao, pois alguns de seus programas sao de pessima qualidade mais no entanto sao os mais usados). CodersZine.═════════════════════════════════ ──────────════< JAVA >════────────── by Jac{Delpher} Olah, aqui vai eu novamente escrever sobre JAVA e JAVASCRIPT. Bom, espero q vcs jah tenham lido minha materia sobre Algoritmos, jah que isso e' requerido p/ qualquer linguagem. Bom, mas aqui so vai uma introducao, por enquanto, nada de codigo. Codigo so na proxima edicao. Bom, por incrivel que pareca, JAVA e JAVASCRIPT naum tem nenhuma relatividade(ao menos comercialmente). JAVA e'uma linguagem de programacao, JAVASCRIPT, tbm, se levarmos o conceito de que uma linguagem de programacao e' aquela que suporta variaveis e tudo mais, JAVASCRIPT e' uma linguagem. Mas, comercialmente falando, JAVA foi criada pela SUN e JAVASCRIPT pela NETSCAPE. A BUGSOFT naum criou nada referido a JAVA, so depois que viu que essa linguagem ele naum ia conseguir derrubar. E outra coisa, essas duas linguagens vao ser em materias diferentes, mas como e' introducao... Entao, vamos as definicoes. JAVASCRIPT, naum deixa de ser uma linguagem de programacao, mas ela constroi programas que rodem STAND ALONE, ou seja, vc naum pode criar um programa em JAVASCRIPT e chegar no prompt do DOS digitar: MEU_PRIMEIRO_PROGRAMA_JAVASCRIPT. O JAVASCRIPT e' embutido entre TAGS em uma Home Page, ou seja, vc poe o codigo entre . O JAVASCRIPT e' uma linguagem exepcional, uma vez que a linguagem de HyperTexto (HTML) naum tem capacidade de dar muita beleza a uma Home Page. Entao a NETSCAPE criou essa linguagem c/ a intencao de justamente capacitar a Home Page de se ter animacoes, etc. A linguagem JAVASCRIPT estah intimamente ligada ao HTML. O JAVASCRIPT naum funciona sem o HTML, ok? Agora , tecnicamente falando, o JAVA e o JAVASCRIPT tem muitas semelhancas. O estilo de codificacao e' um pouco semelhante, mas o JAVA e' super-parecido c/ o C++, jah o JAVASCRIPT e' uma mistura de PASCAL c/ C++. Ah e esqueci, ambas sao Orientadas a Objeto, entao eu tbm aconselho que vcs leiam sobre isso. E um livro classico (embora antigo) e' o MODELAGEM E PROJETOS BASEADOS em OBJETOS -- CAMPUS (www.campus.com.br). Entao vamos ao JAVA. Essa e' a grande revolucao pessoal. Essa linguaugem e' tao exepcional que eu naum tenho muitas palavras para descreve-la. Imagine vc poder fazer um grande trabalho, e poder executar em qualquer computador, sem ter restricoes de Sistema Operacional,etc. Isso e' espetacular. Ah, isso tbm e' valido para o JAVASCRIPT (multi-plataforma). E' isso pessoal, e' o JAVA, a linguagem do século XXI. Essa e' a unica linguagem que naum tem dependencia de WIndows, Mac, Dos, Unix, o q for. A linguagem estah tao forte que nem o BILL GAY tah conseguindo derrubar. Ele tah puto da vida e tah se aliando ao JAVA. Daqui a uns 6 ou 10 anos, vcs so vao ouvir falar em JAVA. As demais linguagens, como o Pascal, C, Assembly e outras, vao tudo sair do GIBI, uma vez que com o JAVA tudo estah ao alcance. Simplificando, o JAVA vai ser o Assembly do Século XXI. Vao existir CHIPS com JAVA, tudo, mas tudo mesmo JAVA. Acho q ate o nome do meu filho vai ser JAVANES :)). Vamos falar um pouco mais do funcionamento da linguagem. Alguns programadores estao recusando o JAVA por causa da lentidao, principalmente os que fazem aplicativos comerciais. o meu amigo TICO me disse um dia desses ai que fez uma aplicacao comercial em JAVA e ficou a maior lentidao. E', mas percebam que a linguagem estah no comeco, e logicamente que a SUN vai investir toda a sua grana para deixar JAVA mais rapido ate que o Assembly! :)). Pode ter certeza. Na Computacao vc naum pode gostar de nada. Vc tem que ser malandro. Tem que se adaptar de acordo com o que estah no momento. Se ficar nessa de "naum e' pq eu gosto dessa linguagem e naum vou abandonar..." ai vc se estrumbica. Naum tem essa de se apaixonar, tem que se adapatar de acordo com o mercado. O DOS e' passado a muito tempo, mas existe ainda tantos desenvolvedores p/ essa plataforma. Tudo bem, mas no futuro eles vao ter que tratar o desenvolvimento p/ DOS como "Masturbacao Intelectual". Admiro muito os meus amigos hC e Mingo, grande programadores DOS, que fazem lindas DEMOS, mas eles tbm vao ter que estudar um JAVA de leve, se nao pode ate ficar p/ tras. Mas acho que isso vai demorar, pq artistas na computacao estah dificil. E, para mim, a parte mais fascinanate da computacao e' justamente a mistura de computacao com arte. Isso e' legal, mas espero que eles facam uma DEMO em JAVA, so p/ esperimentar. Deve sair legal. Mas voltando ao assunto, vamos falar um pouco de como o JAVA funciona. O processo e' o seguinte (seria melhor descrever como uma figura, mas...). COMPILADOR JAVA ---> BYTECODES JAVA (o mesmo p/ todas plataformas) ---> INTERPRETADOR JAVA (um para cada sistema diferente) (WINDOWS, MAC, UNIX...) Chega de LOTUS 1 2 3 p/ DOS, WINDOWS 3.11, WINDOWS 95! E o bom e'que quando se recompila o sistema, em uma determinada plataforma, naum se precisa mudar uma linha de codigo, e' so recompilar e pronto. Isso poupa um bocado do saco do programador, pode crer! Por essa edicao e' so! Qualquer duvida, critica ou sugestao.. ----> javanes@thepentagon.com by Jac{Delpher} from #CODERS to CODERS! "So ALEGRIA O RESTO É MONOTONIA!" --> adapatado por KDosKD e eu! :)) CodersZine.═════════════════════════════════ ──────────════< GRAFICOS >════────────── by KDoskD Hi ALL Introducao: Comecamos com esse texto uma secao que trata de programacao grafica ou seja, a parte grafica de um programa. Como os graficos sao partes importantes de um programa tentaremos abordar esse assunto da melhor maneira possivel, tentando demostrar todos os modos possiveis de se fazer um grafico. Parte I : Definicoes Bem, vamos comecar dizendo ou definindo o que eh um ponto. Um ponto eh uma marca no espaco ( Um ponto eh um ponto...). Um conjunto de pontos eh uma reta. E finalmente um poligono eh um conjunto de retas. Uma imagem tambem eh um conjunto de elementos que podem ser um ponto, uma reta ou um poligono. Outra definicao para imagem ou graficos eh a representacao atravez de imagens alguma coisa, por exemplo, um botao, uma janela, etc... Os graficos no computador sao formados por pixels ( Pequenos pontos que existem na tela, que no caso, eh o monitor), sendo assim, se decompormos uma imagem de computador, a menor parte que conseguiriamos seria um pixel. Assim como as figuras sao formadas por pixels, os caracteres tambem sao formados por pixels, so que no caso de caracteres, a tela e' dividida em quadrados (80 colunas por 43 linhas, no caso do DOS), onde cada caracter ocupa um quadrado na tela, e como os graficos, os caracteres tambem sao formados por pontos. Bom, acho que para a primeira parte ja basta. Aguarde ate a Parte II onde comecamos a entrar na programacao. CodersZine.═════════════════════════════════ ──────────════< GRAFICOS EM 3D >════────────── by hC . Introducao Heya povo... Eu sou o mestre da preguica para escrever, entao preparem-se para muito codigo e pouco texto :) Eu escrevi isso aqui ha umas semanas, a pedido do xROD, que estava precisando de um toque sobre como fazer rotacoes de poligonos. O codigo eh ANSI-C puro, poden do ser facilmente portado para qualquer compilador. Eu testei no Watcom C/C++ 10.6 , no Borland C/C++ 3.1 e no DJGPP v2.alguma_coisa :) OBS: Estou partindo do principio de que voce que esta lendo isso aqui compreende o basico da linguagem C e possui nocoes de programacao para o modo VGA 320x200 (13h). . Teoria Matematica Eu sei que muitos coders odeiam matematica, especialmente algebra linear e geometria analitica. Mas ambas sao necessarias para se fazer graficos 3D de alguma precisao. Neste artigo eu vou apenas explicar a utilizacao das formulas de rotacao de vertices no espaco 3D e nao sua origem matematica. Talvez nos proximos artigo, seja necessaria a explicacao matematica das formulas, mas por enquanto voce pode ir se contentando em apenas decora-las (acredite, eu fiz isso por muito tempo, antes de ter aulas de geometria analitica e nunca me dei mal. :)) . O Ponto no Espaco 3D No espaco, a menor unidade seria um ponto. Aqui associaremos um ponto a um vertice, apenas para facilitar. Por exemplo, um cubo possui 8 vertices, entao para desenha-lo precisaremos de 8 pontos. typedef struct { float x,y,z; int color; } Vertex; Com o codigo acima eu defini a estrutura Vertex, que possui armazena as informacoes x, y e z (coordenadas do ponto no espaco) e a sua respectiva cor. O proximo passo seria definir um objeto utilizando essas informacoes. Vamos usar um cubo aqui... Vertex Cubo[8] = { -20, -20, -20, 15, // vertices: coordenadas x,y,z e cor -20, 20, -20, 15, 20, 20, -20, 15, 20, -20, -20, 15, -20, -20, 20, 15, -20, 20, 20, 15, 20, 20, 20, 15, 20, -20, 20, 15 }; O que eu fiz foi definir as coordenadas de cada vertice no espaco, partindo do principio de que o cubo possui dimensao 40, ou seja, cada vertice esta 20 unidades distante do seu centro, seja qual for a direcao. . A Rotacao em si Agora que o objeto esta definido, vira a parte principal deste artigo: Rotacionar os vertices do cubo. O que voce precisa entender antes de mais nada, e que a estrutura Cubo nao pode ser alterada. Voce vai rotaciona-la mas guardar o resultado em outras variaveis. Bem, vamos la... A rotacao e realizada em 3 etapas. Voce rotaciona o vertica em cada plano de acordo com o angulo. Como seria isso: [ Rotacao no eixo Z ] Novo X = X Original * cosseno do angulo - Y Original * seno do angulo Novo Y = X Original * seno do angulo + Y Original * cosseno do angulo Novo Z = Z Original [ Rotacao no eixo Y ] Novo X = X Original * cosseno do angulo + Z Original * seno do angulo Novo Y = Y Original Novo Z = -X Original * seno do angulo + Z Original * cosseno do angulo [ Rotacao no eixo X ] Novo X = X Original Novo Y = Y Original * cosseno do angulo - Z Original * seno do angulo Novo Z = Y Original * seno do angulo + Z Original * cosseno do angulo Voce deve ter estar se perguntando o porque de nao se rotacionar tambem a coordenada Z quando se realiza a rotacao no eixo Z e o mesmo com as demais coordenadas. Isso eh feito dessa forma porque estamos rotacionado as demais coordenadas em relacao ao eixo em questao. Nao ha logica em rotacionar o proprio eixo em relacao a ele mesmo :) Bem, com essas formulas voce ja deve estar imaginando como seria o codigo em si que utilizaria elas. Fique sabendo que nao e nem um pouco complicado. apenas aplicacao direta dessas formulas utilizando funcoes do proprio compilador C, como a sin(); para a funcao seno e cos(); para a funcao cosseno. A ultima coisa que eu gostaria de colocar eh que eu vou realizar as 3 rotacoes em sequencia no codigo exemplo e por isso eu defini algumas variaveis temporarias para armazenar os valores resultado das equacoes. [ Variaveis ] - old_x, old_y e old_z : armazenam os valores originais do objeto - new_x e new_y : armazenam os valores resultado da rotacao em Z - tmp_x e tmp_z : armazenam os valores resultado da rotacao em Y - swp_y e swp_z : armazenam os valores resultado da rotacao em X . Perspectiva, Camera FOV e etc A ultima coisa que vou mencionar aqui e' a adicao de perspectiva aos poligonos. Isso eh bastante simples mas eh muito importante na beleza do produto final. As formulas sao simples e so se aplicam as coordenadas X e Y do pologono, pois sao as unicas que podem ser representadas na tela. X Final = X * FOV da Camera / Z + FOV da camera + deslocamento X Y Final = Y * FOV da Camera / Z + FOV da camera + deslocamento Y As variaveis 'deslocamento X' e 'deslocamento Y' sao a posicao do objeto na tela, enquanto 'FOV da Camera' eh o aspecto da perspectiva. Eu costumo utilizar o valor 256 para ele, mas voce vai descobrir muita coisa interessante com os multiplos de 16 :)... Experimente 128, 64, 512, etc... . O Programa Exemplo O programina eh este aqui. A unica observacao que eu faco e'que voce deve mudar o protitipo malloc.h para alloc.h se voce utiliza o Borland C. No DJGPP e no Watcom o nome da biblioteca e' malloc.h mesmo. De resto, voce deve mudar a rotina para setar o video de acordo com o seu compilador (WCC_SetMode para Watcom, BCC_SetMode para Borland e GCC_SetMode para DJGPP). /*-------------------------------[ cut here ]------------------------------ 3Dtest.c by Hugo Cristo para CodersZine. Magazine 01 -------------------------------------------------------------------------*/ #include #include #include #include #include //ponteiro para o video char *VIDMEM = (char *)0xA0000; //buffer virtual char *vis; /* ===================================================================== */ /* Estrutura 3D e Poligono */ /* ===================================================================== */ typedef struct { float x,y,z; int color; } Vertex; Vertex Cube[8] = { -20, -20, -20, 15, // vertices: coordenadas x,y,z e cor -20, 20, -20, 15, 20, 20, -20, 15, 20, -20, -20, 15, -20, -20, 20, 15, -20, 20, 20, 15, 20, 20, 20, 15, 20, -20, 20, 15 }; /* ===================================================================== */ /* Funcoes de video */ /* ===================================================================== */ // espera retraco de video void wait_vertical(void) { while(inp(0x3DA) & 8); while((inp(0x3DA) & 8) == 0); } // seta modo de video para WATCOM C/C++ void WCC_SetMode(short mode); #pragma aux WCC_SetMode = \ "int 10h" \ parm [ax]; //seta modo de video para DJGPP C/C++ (deve funcionar com o BC4.0) void GCC_SetMode(int mode) { union REGS in; in.x.ax=mode; int86(0x10,&in,&in); } // seta modo de video para Borland C/C++ void BCC_SetMODE(int mode) { asm mov ax,mode asm int 0x10 } /* ===================================================================== */ /* Coloca Ponto na tela */ /* ===================================================================== */ void PutPixel(int x, int y, char cor, char *dest) { dest[x+(y<<6)+(y<<8)] = cor; } /* ===================================================================== */ /* Funcao Main */ /* ===================================================================== */ void main(void) { // temp float old_x, old_y, old_z; float new_x, new_y, // rotacao em Z tmp_x, tmp_z, // rotacao em Y swp_y, swp_z, // rotacao em X fin_x, fin_y; // coordenadas finais dos vertices apos perspectiva float s_x, s_y; // screenx e screeny float ang = 0; int i; //aloca off-screen buffer vis = (char *) malloc(64000); // seta modo 0x13 = VGA 320x200x256 cores WCC_SetMode(0x13); // seta deslocamento para centro do video s_x = 160; s_y = 100; while (!kbhit()) { // limpa off-screen buffer memset(vis, 0, 64000); //rotaciona vertices for (i = 0; i < 8; i++) { old_x = Cube[i].x; old_y = Cube[i].y; old_z = Cube[i].z; // rotaciona em Z new_x = old_x*cos(ang)-old_y*sin(ang); new_y = old_x*sin(ang)+old_y*cos(ang); // rotaciona em Y tmp_x = new_x*cos(ang)+old_z*sin(ang); tmp_z = -new_x*sin(ang)+old_z*cos(ang); // rotaciona em X swp_y = new_y*cos(ang)-tmp_z*sin(ang); swp_z = new_y*sin(ang)+tmp_z*cos(ang); // equacao de perspectiva // x_screen = FOV * x / z + FOV + deslocamento x // y_screen = FOV * y / z + FOV + deslocamento y fin_x = (256*tmp_x / (swp_z+256))+s_x; fin_y = (256*swp_y / (swp_z+256))+s_y; PutPixel(fin_x, fin_y, Cube[i].color, vis); } // copia para o video memcpy(VIDMEM,vis,64000); // espera retraco de video wait_vertical(); // atualiza angulo ang+=0.05; if (ang >= 6.28) ang-=6.28; } WCC_SetMode(0x3); } //-------------------------------[ cut end ]------------------------------- . Finalizando Espero que voce divirta-se com seus 3DS... Se voce quiser implementar wireframe aqui, basta desenhar linhas ligando os vertices. Se voce nao conseguir um algoritmo para desenhar linhas, e so pedir por e-mail que eu mando, ok? :) . Greetings xcaRIOca, xROD, Wiz, X_cAmArO, _TesT_, Mingo, Forg3, Evilspirit e o resto do CodersZine. Imago, theEnd, Crazy Creations, XKR e o resto da demoscene brasileira . A seguir cenas dos proximos capitulos - Poligonos Wireframe - Preenchimento de Poligonos - Algoritmos de Remocao de faces Ocultas - Sombreamento - Faca voce mesmo seu proprio leitor de arquivos .3DS Salutaciones, Hugo Cristo CodersZine.═════════════════════════════════ ──────────════< DEMOS >════────────── by Mingo UMA INTRODUCAO AS DEMONSTRACOES MULTIMIDIA As demonstracoes multimidia, que tanto fascinam os programadores do mundo inteiro, consistem em programas que procuram demonstrar ao maximo as capacidades da maquina (computador), do programador, do musico e do artista grafico envolvidos. Principalmente ressaltando a multimidia. Geralmente estao envolvidos grupos na producao de uma demo, onde sao divididas as tarefas. O que nao impede de um componente arcar com mais de uma tarefa. Costuma-se dividir as tarefas em tres partes basicas: programacao (coder), graficos (gfx) e sons (sfx). A matematica anda junto com os programadores envolvidos com as demonstracoes multimidia. Sobressai a Algebra Linear, que esta relacionada principalmente aos graficos tridimensionais. Como a arte tambem e fundamental na producao de demonstracoes multimidia, sempre os envolvidos procuram inovar, apresentando novas rotinas, com isso, sem sombra de duvida, ajudando ate mesmo na producao de utilitarios e principalmente na producao de jogos. As demos surgiram ha muito tempo, sendo que, vieram a se consolidar a partir de 1990, com os concursos, tambem conhecidos por festas/competicoes (PARTIES/COMPOS). Inicialmente se afirmaram nos computadores da linha AMIGA, mais tarde comecaram a surgir as primeiras demos nos computadores da linha IBM-PC, que nos tanto utilizamos hoje. Encontramos tambem as intros, que consistem em pequenas demos. Em concursos relacionados chegam a consolidar limites para as mesmas, como relacionado ao seu tamanho. Tambem surgem categorias, como as intros de ate 4KBytes, as demos de ate 64KBytes e as mega-demos com mais de 64KBytes. As regras variam em cada competicao. Atraves da internet , muito se pode encontrar relacionado as demonstracoes multimidia. Procure imaginar como esses programadores , verdadeiros herois, que foram os precursores das demonstracoes multimidia conseguiam criar as mesmas. Para saber mais sobre este assunto, e impressindivel a sua visita, atraves da internet, a HORNET (http://www.hornet.org), o maior agente organizador atualmente de demonstracoes multimidia no mundo. Nao deixe de visitar tambem minhas HOME-PAGES, atraves das mesmas podera obter maiores informacoes, em portugues, sobre as demonstracoes multimidia como tambem sobre diversos outros assuntos. (http://n3.com.br/~mingo) Eduardo Motta Buhrnheim (a.k.a. Mingo) mingo@n3.com.br CodersZine.═════════════════════════════════ ──────────════< REDES NEURAIS ARTIFICIAIS >════────────── by Wiz PARTE 1 "Inteligencia eh a capacidade de se adaptar a novas situacoes atraves do raciocionio". Na area de inteligencia artificial a utilizacao das redes neurais artificiais tem um papel bastante importante. No entanto, poucas pessoas tem ideia do que sao e o que fazem essas tais redes, ou o quanto elas possam ser uteis. O QUE EH UMA REDE NEURAL ARTIFICIAL? Para responder a essa pergunta vou primeiro me referir as redes neurais naturais :) O nosso cerebro eh constituido de celulas nervosas chamadas neuronios, que por sinal sao bem diferentes das demais celulas do corpo. Sao muito mais complexas. Os neuronios estao interligados de um jeito que formam uma rede, e se comunicam atraves de impulsos eletricos(algo em torno de 70mv). Cada neuronio recebe varios sinais de entrada atraves de seus dendritos e somente uma saida que eh enviada atraves de uma ramificacao chamada axonio. Fiz um grafico meio primitivo (tambem nao posso fazer milagres) mostrando como eh um neuronio: | | | | - /----------\ axonio (saida) / dendritos - | neuronio >==================== - sinapses (entradas) - \----------/ \ | | | | Os neuronios realizam sinapses, que sao conexoes com outros neuronios. Sao atraves dessas conexoes sinapticas que os sinais sao propagados pelo cerebro. E nosso cerebro tem em media 10.000.000.000 de neuronios. Cada neuronio consegue fazer ate 10.000 sinapses. Se considerarmos que cada neuronio trasmite um bit, entao concluiremos que o cerebro transmite uma densidade de 100.000.000.000.000 de bits. Da para se dizer que o cerebro recebe em torno de 100.000.000 de sensacoes por segundo. Interessante, nao? Realmente o cerebro eh a maquina mais complexa que conhecemos. Pesquisas recentes indicam que o cerebro eh muito mais complexo do que imaginavamos anteriormente, por que eh como se cada neuronio (ou conjunto deles) funcionasse de uma maneira diferente. Outro detalhe: a inteligencia de uma pessoa nao pode ser calculada atraves do tamanho de seu cerebro, mas sim pela quantidade e qualidade das suas conexoes sinapticas. O aprendizado tambem esta intimamente ligado ao numero de sinapses. Mas isso ja eh outra historia... Enfim, as redes neurais artificias tentam abstrair as caracteristicas desses neuronios para um modelo matematico, e atraves disso criar maquinas "inteligentes". HISTORIA DAS REDES NEURAIS ARTIFICIAIS Voce acha que esse negocio de redes neurais eh coisa de agora, e que foi inventada a poucos anos atras? Na verdade as pesquisas em torno disso ja sao bem antigas! Provavelmente mais antigas do que voce :) As primeiras tentativas de se criar uma rede neural artificial foram feitas na decada de 40 pelo neurofisiologista Warren McCuloch e o matematico Walter Pitts da universidade de Illinois. O conceito era diferente do que existe hoje, mas da para afirmar que a tecnica das redes neurais eh a mais antiga na area de inteligencia artificial. No ano de 1949, um tal de Donald O. Hebb descobriu como funcionava o aprendizado a nivel celular, e isso ajudou os pesquisadores a criarem algoritmos de treinamento de redes neurais. Foi em 56 que a primeira rede neural artificial foi apresentada ao publico, numa conferencia sobre inteligencia artificial. Durante toda essa epoca foram apresentados novos modelos de redes. Mas todas elas eram ainda muito simples, e suas aplicacoes praticas eram muito limitadas. Foi entao que em 69 um tal de Marvin Minsky e Seymour Papert, que eram cientistas de renome na epoca, aproveitaram esse ponto fraco para publicarem um livro criticando duramente as redes neurais artificiais. Eles bem que tinham razao (na epoca), pq todos os modelos de redes soh tinham uma camada de neuronios, e ninguem sabia como implementar uma com varias camadas. O problema eh que redes de uma soh camada nao fazem nada de realmente inteligente. Mas o pior eh que essa publicacao teve um efeito desastroso para todas as pesquisas que estavam sendo feitas nessa area, pois os investimentos que estavam sendo aplicados foram todos desviados para pesquisas em outros campos de IA. Somente 13 anos depois, em 82, o fisico e biologo John Hopfield conseguiu contestar com sucesso as teses de Minsky e Papert, criando um novo modelo de rede neural, o que deu um novo impulso a essa area. Isso significa que mesmo durante esse tempo de hibernacao aparente , as pesquisas nao pararam. Muitos cientistas continuaram trabalhando na area, mas as escondidas, talvez com medo de receber criticas dos colegas. Pessoalmente eu admiro muito essas pessoas, que trabalham pela verdadeira ciencia, ao contrario da maioria dos cientistas que soh querem aumentar sua reputacao, trocando favores diante da comunidade cientifica (que esta mais para politica do que cientifica). Me desculpem o desabafo... :P O FUTURO Felizmente hoje existem muitas pesquisas sendo realizadas neste campo, mas eh importante lembrar que ainda estamos dando os primeiros passos nessa tecnologia. Eh pura ficcao imaginar que logo vai ser inventado um computador mais inteligente que os humanos, ou ainda que criarao um ser cibernetico. Essa euforia inicial eh compreensivel, mas deve ser evitada, para nao corrermos o risco de cair no mesmo erro que os pesquisadores pioneiros. Pode ter certeza que ha sempre um Minsky esperando que isso aconteca :) A limitacao de se fazer sistemas complexos nao eh tao somente do computador, mas sim do ser humano. A complexidade de um sistema assim seria extrema. Isso sem falar da dependencia que temos de pesquisas de outras areas, principalmente da neurofisiologia. O que teremos agora nos proximos anos serao computadores com reconhecimento de voz e reconhecimento de padroes melhores que os atuais. Outra area emergente eh o da compreensao da linguagem natural, que devera ser incluida em novos sistemas operacionais. Enfim, as redes neurais artificiais trabalharao em conjunto com outros metodos (ex.: logica nebulosa) e seguindo essa evolucao sua eficiencia a tornara cada vez mais popular, a ponto de fazer parte ativa de nossas vidas. CodersZine.═════════════════════════════════ ──────────════< E-MAILS >════────────── Estamos com um e-mail temporario -=> coders@usa.net <=- assim que mudarmos, avisaremos, e' claro. So' pediremos uma coisa, nao mandem mails pedindo compiladores, turoriais, ou disassembladores, nao mandaremos nada por e-mail!! Todos nossos tutoriais, compiladores e arquivos, estarao disponivel em nosso site www.come.to/coders. Ahh.. tentaremos arrumar um bot com ircserver, para disponibilizar nosso zine tbm no IRC (no #coders da brasirc). Essa e' a resposta q mandaremos p/ todos vao mandar e-mails pedindo para ser um membro do grupo!! Resposta: O CodersGroup e' mais do que um grupo de programadores, e' um grupo de amigos, que frequentam um knal de IRC (#Coders na BrasIRC), por isso nao podemos colocar qualquer um de membro, porem vcs podem frequentar o knal, se enturmar, ai... quem sabe... CodersZine═════════════════════════════════ ──────────════< LINKS >════────────── by CodersGroup Ai estao alguns links sobre programacao, demos e graficos... http://www.come.to/coders - hehhe.. a nossa page http://www.hornet.org - um dos melhores sites dobre demoscene http://www.vix.nutecnet.com.br/~imago - page da quakeEStation http://www.geocities.com/WallStreet/6932 - site do grupo XKR http://www.gustavo.net - uma otima page sobre programacao http://dicas-l.unicamp.br - varios tutoriais sobre informatica http://phenomenon.magnet.at - #C++ da efnet http://www.info.ex.ac.uk/~PMBearne/DGC.html - the delphi game's criator http://ftp.arl.mil/ftp/historic-computers/gif - fotos de computadores MUITO velhos CodersZine.═════════════════════════════════ ──────────════< QUEM SOMOS?? >════────────── Opa.. aki vai uma breve descricao da galera que se matando para escrever esse o zine: CR4sH^0v3 Nome: Crash Override - Idade: 19 Linguagens: Clipper, Pascal, C/C++, ASM, Jscript Hammett Nome: - Idade: Linguagens: Visual Basic hC Nome: Hugo Cristo - Idade: 18 Linguagens: C/C++ Jac{Delpher} <> Nome: Breno Jacinto Duarte da Costa - Idade: 16 Linguagens: Delphi, Pascal, Java e JavaScript KdoskD Nome: Alessandro - Idade: 17 Linguagens: Variantes do Basic, C/C++ e Delphi. Mingo Nome: Eduardo Buhmheim- Idade: 27 Linguagens: Pascal e ASM Progman Nome: - Idade: Linguagens: Rashi colaboradora da revista Forum Access Nome: Larissa Redeker - Idade: 23 Linguagens: Visual Basic, Foxpro, Clipper XCaption Nome: Rodrigo Rodriguez - Idade: 18 Linguagens: C++, Java, Visual Basic e Delphi xcaRIOca Nome: Ricardo G. Soares Filho - Idade: 19 Linguagens: C/C++ xCrown Nome: Claudio - Idade: 16 Linguagens: C/C++ e Pascal xROD Nome: Rodrigo Rocha Gomes e Souza - Idade: 13 Linguagens: DJGPP, Asm, Pascal e Basic X_cAmArO Nome: Thiago M. M. Teodoro - Idade: 16 Linguagens: Um pouco de Cobol e Pascal, aprendendo C++, Clipper e Vb Wiz Nome: Harlen C. Batagelo - Idade: 20 Linguagens: C/C++ e Asm CodersZine.═════════════════════════════════ ──────────════< AGRADECIMENTOS >════────────── ThanX a todos que estao nos apoiando e divulgando esse novo zine. Muito obrigado tbm a Micro$oft, que nos motiva a programar, visto que seus softwares sao um lixo. Obrigado a todos vcs que estao lendo esse humilde, mas promissor zine. ThanX tbm a todos do #Linux que estao apoiando!! Brigado a Delorie, por ter deixado o DJGPP de graca. E um obrigado especial para todos os outros membros que nao tiveram tempo de contribuir p/ o zine!! ZeR0w, Hate-Win, Writeln, GusTyler, _TesT_, WordMacro, Kaotica, underwater, KRoNoS, EvilSpirit, Cyron, HC_, ^MAX^, _DRiKa_, CBRaMoNe, |MaLuCo| e ]Anjo[ acho que estao todos ai ;-) by Coders Editors ─ ── ─── ──────────════<>──────────────<>════────────── ─── ── ─ Jonny olha para os lados, confuso, sem saber sobre o que pensar. Ele recompoe-se e olha fixamente para a professora. "Eu quero criar demos.", ele diz. Suas palavras iam tornando-se mais fortes e confiantes a medida que ele as pronunciava. "Eu quero criar algo que mudara a percepcao de realidade das pessoas. Eu quero que elas saiam de perto do computador atordoadas, incertos de seus passos e visao. Eu quero criar algo que saia do monitor e atinja-os , fazendo batimentos cardiacos e respiracao diminuirem pela metade. Eu quero criar algo que, apas assistido, deixe as pessoas relutantes em sair, pois saberao que nada mais naquele dia podera ser tao real, tao luminoso, tao bom. Eu quero criar demos." Silencio. A classe e a professora olham para Jonny, pasmos. Agora e' a professora quem esta confusa. Jonny fica envergonhado, sentindo que algo mais precisa ser dito. "Ou isso ou eu quero ser bombeiro." - Grant Smith, 14:32, 21/11/1993 ─ ── ─── ──────────════<>──────────────<>════────────── ─── ── ─ ;!;, ;!; ;!!!!, !!!! `!!!!!; !!!!> !!!`!!! !!!!!> !!! !!!> !!!!!! !!! !!!!> !!!>!!> ;!!!,`!!!!> {!!!>!!! !!!>d'!!!!> !!!!>`!!> {!!!,$ !!!!' ;!!!! `!!! {!!!,$F,!!!> !!!!'J !!! !!!!,$$ !!!! !!!!! $>!!! !!!'J$$ !!!! !!!!!>,$>!!! ;!!!'z$P !!!! {!!!!!,$P !!! {!!!'J$P !!!! ,!!!!!',$$'{!!' {!!!!J$",!!!' ;!!!!! d$P {!!' {!!!!,$P,!!!' ,{!!!!'z$P";!!! !!!!'J$ !!!' ,{!!!'_zP",{!!'' :!!!!:$({!!' ;!!!' ,;;!!'' `!!!!,P'!!! {!!',;{!!'' {!!!> {!! { ;{>' ,,;!'' {!!!,`!! !!!!!!!!; ` `!!!!!!-`'!!!!!!;;>> {!! {!!!>!!!!!!!'{!!!, ',!',cccc,`{!!!!>,bc, ;!'J$$$$$$$c`!!!'$$$$b !! $$$$$$$$$b,!!,?$$$$$c _, !!,?$$$$$$$$$L`!!.$$$$$$b nMMMMn, !!! ?$$$??$$$$,!!> `3$$"dMMMMMMML =nMMMMMMhx.` ?$ `$$$h`!!> ,$"JMMM?MMMMM. udMMMMMMMMMMhn" $$$P !',{CC MP",nMMMMM> uMMMMMMMMMMMMMMMMMMnmnnxxnmx`{>'xP4MMMMMMMM> 3MMMMMMMMMMMTMMMMMMPP"".::`TMMMMP,MMMMMMMM" `MMMMMMMMMMMMnmnmnmMbm`:'': ccvc dP"',`MP' "MMMMMMMMMMMMMMMMMMMML`::: $$P'd",d$$b "4MMMMMMMMMMMMMMMMMMb,`::,udM'dP'$$$b `""""""""""""" "MMMMM",, "="?$$$b, ,;!!!!;,",;{!!,d$$$$$$$$b';>; ,{!!!!!!!!!!!!!!,?$$$?$$$$F{ {!> ;!!!!!!!!' !!!!!!!>,""",, ,,,;!!!` {!!!!!!!' !!!!!!!!!!!!!!L `!'` ``{!!!!!!!!,`{!!!!!!!!!!'''' ``'!!!'.;`'{!'`,xnnMMMM> ' d$ dMMMMMMMMMP 4$c"P)d$$P )MMMMMMMM" $$r $$$" { 4MMMMP" "???",;!!!> ,;- .,,uuu, ._ !!!!!!',!!' ,>,unMMMMnn, ,udMMMMMMMMMn,`!!!;;,. !!!!!';!!' ,;;!!,nMMMMMMMM,TMb, .nMMMMP"3MMMMMMMMn`!!!!!!!;;, !!!!! {!!' ,;!!!!!'nMMMMMMC"4MMMn"Mb ,MMMM",dMMMMMMMMMMML`!!!!!!!!!!!;;,!!!! {!!;;{!!!!!!!! dMMMMMMMMMb,4MMM,4L MMMP,MMMMMMP",ndMMMML`!!!!!!!!!!!!!!!! !!!!!!!!!!!!!! MMMMMMMMMMMMMh"MMM.P MMP,MMMMMP,dMMMMMMMMML{!!!''',,unnnn= =nnnnn,,,`''!!'dMMMMMMMMMMMMMMM'MM; 4M MMMMMF,MMMMMMMMMMMM,,udMMMP"" `"TTMMMMbudMMMMMMMMMMMMMMMM M" T MMMMM.MMMMMMMMMMMMMMMP"" `"TTMMMMMMMMMMMMMMMMP'' 4MMMM:MMMMMMMMMMMMP" `""TTTMMTTTT" "TMM 4MMMMMMMMP" `""" ─ ── ─── ───── ──────────────────────── E', acho que por enquanto esta bom. Foi apenas uma introducao as linguagens, aguardem as proxima edicoes, que viremos com mais codigo. ────────────────────────── ──── ─── ── ─ ──────────────────────────────────────────────────────────────