ANJUTA – Um breve tutorial
1
Sumário Anjuta um breve tutorial.................................................................................................. tutorial..................................................................................................................2 ................2 Definição............................... Definição............................................................... ............................................................................ ......................................................................2 ..........................2 Recursos do Anjuta..................................................................... Anjuta.....................................................................................................................3 ................................................3 Antes de começar............................................... começar........................................................................................ .........................................................................4 ................................4 O primeiro projeto...........................................................................................................................5 projeto...........................................................................................................................5 ncrementando ncrementando o projeto....................................... projeto.............................................................. .............................................. ..............................................12 .......................12 nvocando nvocando os poderes do !lade................................................................................................12 O es"ueleto b#sico do pro$rama...............................................................................................14 pro$rama...............................................................................................14 %ual comando usar para compilar&........................................ compilar&................................................................................ ...................................................1' ...........1' (ompilando e rodando o projeto................................................................................ projeto...................................................................................................1) ...................1) Dividir para con"uistar*............................................................................................................1) con"uistar*............................................................................................................1) (riando os novos ar"uivos...................................................................................................1+ ar"uivos...................................................................................................1+ ncluindo ar"uivos de c,di$o no projeto..............................................................................1!erando os novos ar"uivos a/efile......................................................... a/efile...................................................................................20 ..........................20 Dividir dividir e dividir.......................................................................................................20 dividir.......................................................................................................20 Onde eu errei&.......................................... errei&............................................................................. ........................................................................... ...................................................21 ...........21 arcando os pontos de interrupção..........................................................................................21 nformaçes nformaçes disponveis durante a depuração..................... depuração............................................ .............................................. ...............................22 ........22 (ontrolando seu elefantino............................................... elefantino....................................................................................... .....................................................24 .............24 (onclusão........................... (onclusão.................................................. .............................................. .............................................. .............................................. .......................................25 ................25 6icença de Documentação Documentação 6ivre !78................................................................ !78..........................................................................................2' ..........................2' !78 9ree Documentation 6icense.................................................................. 6icense...........................................................................................2' .........................2'
ANJUTA – Um breve tutorial
2
Créditos Copyright (c) 2005 - Welington Rodrigues Braga ( http://gtk-brc!bnet ) " dada per#iss$o para copiar% distribuir e/ou #odi&icar este docu#ento sob os ter#os da 'icena de ocu#enta$o 'i*re +,% .ers$o ou ualuer *ers$o posterior publicada pela 1ree o&t3are 1oundation4 se# ees 6n*ariantes% se# Capa da 1rente% e se# 7e8tos da 9uarta-Capa #a cpia da licena e# est; inclusa na se$o entitulada <'icena de ocu#enta$o 'i*re +,=
Anjuta um breve tutorial :ste te;to não visa ser um substituto para o manual ou tutorial oficial "ue encontra
(?? com com !@ e !lade com base nos conecimentos do autor deste te;to BeuC e "ue apesar de serem poucos serão de $rande valia para os iniciantes em !lade !@ e (>(??. Definição Anjuta uma D: Bnte$rated Development Development :nvironment E Ambiente de desenvolvimento inte$radoC para desenvolvimento desenvolvimento de aplicaçes em (>(??. :le foi concebido pelo Fr. 7aba umar e escrito inteiramente com !@?>!7O:. Fendo distribudo sob a licença !G6 uma das ferramentas para desenvolvimento mais conecidas conecidas dos pro$ramadores pro$ramadores de aplicaçes para !@? e !7O: em estaçes com !78>6inu;. De forma $rosseira o Anjuta uma interface $r#fica para diversas ferramentas ferramentas "ue deveriam ser usadas via lina de comando pelo pro$ramador tais como o ma/e $cc $db cvs entre outros. A vanta$em de us#>III.anjuta.or$ ttpK>>III.anjuta.or$.. NotaK 7o momento em "ue este te;to est# sendo finaliLado Bjuno>2005C j# # uma nova versão saindo do forno Bversão 2.0C e "ue trar# muitas melorias em relação a atual mas como ela ainda est#vel o suficiente para uso em ambiente de produção todo este te;to foi escrito com base na atual versão 1.2.3
ANJUTA – Um breve tutorial
3
Ilustração 1 - Tela Principal do Anjuta exibindo seus principais recursos
Recursos do Anjuta O Anjuta possui ,timos recursos r ecursos "ue possibilitam o desenvolvimento de forma bem cMmoda para o pro$ramador. :ntre estes recursos eu faço "uestão de citar os se$uintesK ● Realce de sintaxe E :ste recurso simplesmente fant#stico* (laro "ue ele e;iste em nove a cada deL editores de te;to e;istente no !78>6inu; mas não custa nada frisar "ue este recurso tambm se faL presente no nosso Anjuta. Gara "uem não conece este recurso este o "ue permite "ue as palavras reservadas reservadas de uma lin$ua$em lin$ua$em sejam apresentadas apresentadas com com cores diferentes para facilitar a leitura do c,di$o. ● Autocompletar e Exibição de Sintaxe E Assim como acontece no OpenOffice icrosoft Nord e at mesmo em al$umas D:s comerciais para desenvolvimento desenvolvimento durante a di$itação do c,di$o o Anjuta apresenta uma lista de funçes vari#veis vari#veis etc "ue iniciam com as letras j# di$itadas e ap,s a di$itação de todo nome da função ele apresenta numa cai;inaP a sua sinta;e. sso reduL enormemente o risco do pro$ramador obter um erro de compilação simplesmente por "ue es"ueceu uma letra ao di$itar o $i$antesco $i$antesco no nome da"uela função gtk_alguma_coisa_em_algum_lugar() um_lugar() P* gtk_alguma_coisa_em_alg ● Navegador de projeto E %uem desenvolve pro$ramas or$aniLados em v#rios ar"uivos e nunca teve esse recurso no seu editor de te;tos vai se sentir feliL ao saber "ue a$ora ter# todos os ar"uivos de fontes do seu projeto ao alcance de um cli"ue. :ste não um recurso e;clusivo do Anjuta mas "ue em conjunto com a abertura de mHltiplos ar"uivos em abas ajuda bastante e se vocJ nunca o usou depois "ue começar a us#
ANJUTA – Um breve tutorial
4
poder# nave$ar facilmente pelo seu c,di$o escolendo o nome da função desejada em uma cai;a de combinação ou simplesmente di$itar o nHmero da lina desejada ou ainda procurar por um te;to en"uanto ele est# sendo di$itado. Apesar destes recursos funcionarem apenas no ar"uivo atualmente em foco vocJ poder# usar o nave$ador de projeto comentado anteriormente para nave$ar entre as funçes de todos os ar"uivos no seu projeto. ● Numeração de linhas E :ste um recurso simples porm indispens#vel para trabalar com pro$ramação. ma$ine por e;emplo no meio da compilação aparecer a"uela frustrante mensa$em acusando erro de sinta;e na lina 5432. Fem a numeração de linas vocJ teria "ue contar as linas uma a uma desde o incio do ar"uivo at este ponto* ● Integração com o lade E A"ui est# um recurso "ue torna o Anjuta muito poderoso para desenvolver aplicaçes para o !@? e para o !nome. (om uma simples combinação de teclas Bou usando o menuC vocJ poder# abrir o ar"uivo .$ladeP associado ao seu projeto dentro do !lade alter#>lidn.sourcefor$e.netC e bai;ar o documento apropriado para inte$rar ao Develp. ● #erminal embutido E :ste um recurso "ue apesar de não ser tão essencial traL suas vanta$ens. possvel ter um terminal aberto a todo instante dentro de uma aba no seu Anjuta para emissão de comandos "ue por ventura precisem ser e;ecutados rapidamente. ● $onstrutor de classes % Fe vocJ $osta de pro$ramar em (?? com recursos de orientação a objetos então o Anjuta pode te ajudar a construir as classes do seu projeto com este assistente "ue apesar de ser bastante rudimentar j# facilita um pouco o seu trabalo principalmente na "uestão de dividir cada classe em um ar"uivo separado. :stes recurso apresentados acima foram apenas al$uns dos muitos "ue esta poderosa ferramenta possui. Feria muito entediante tanto pra mim "uanto pra vocJ continuar escrevendo>lendo sobre todos eles por isso os demais recursos serão comentados ao lon$o deste tutorial "uando ouver necessidade. Antes de começar Da"ui pra adiante eu vou considerar "ue o Anjuta j# esteja instalado e todas as bibliotecas necess#rias estejam instaladas para desenvolvimento de aplicaçes com o !@? !lade e !7O:. Fe vocJ não tiver estes pacotes instalados dever# instal#6inu; possui um modo diferente de instalação de pacotes e resolução de dependJncias. 7ão seria muito pr#tico escrever cada um deles e nem justo com todas as e;celentes distros e;istentes por ai se e;plicasse o mtodo para uma ou outra. :u particularmente uso o !78>Debian onde posso instalar todos os pacotes de dependJncias
ANJUTA – Um breve tutorial
5
usando a ferramenta FSnaptic BttpK>>III.non$nu.or$>sSnapticC "ue tambm est# disponvel em distros como o urumin alan$o noppi; 8buntu (onectiva entre outras. (aso precise de ajuda vocJ poder# recorrer at mesmo ao f,rum do nosso site B ttpK>>III.$t/Open!6 precisar# do pacote lib$t/$lP para e;ecução das aplicaçes e do pacote libt/$l
O primeiro projeto A ttulo de primeiro projeto n,s iremos criar um tradicional ello !orld "ue apenas apresenta uma Tanela do !nome na nossa tela. Depois n,s iremos brincar com al$uns dos recursos dos Anjuta sem nos prendermos aos recursos da lin$ua$em ( e das bibliotecas "ue forem usadas j# "ue este não o objetivo deste documento. A primeira coisa a faLer iniciar o Anjuta. Fe vocJ usa o !7O: ele encontra
1 eta
ANJUTA – Um breve tutorial
'
Ilustração " - #aixa de di$logo inicial do Anjuta
7este di#lo$o vocJ poder# escoler uma dentre as opçes se$uintesK ● Assistente de Aplicação E por a"ui "ue vocJ começa uma aplicação de forma bem f#cil e a$rad#vel. 8sando o assistente de aplicação vocJ poder# escoler o tipo da aplicação definir al$umas propriedades e depois começar a pro$ramar. :sta opção e"uivale ao comando Novo 'rojeto do menu Ar(uivo portanto se vocJ deseja usar esta opção mas esta cai;a de di#lo$o não foi e;ibida então vocJ poder# usar este comando. ● Assistente de importação E :ste um recurso interessante "ue apesar de não ser 100U eficaL "uando funciona facilita bastante o trabalo de importar um projeto feito em outro ambiente para o Anjuta. :le tambm Htil para transformar a"ueles seus projetos "ue vocJ $erencia braçalmente em projetos $erenci#veis pelo Anjuta. :sta opção tambm est# disponvel pelo comando Importar 'rojeto do menu Ar(uivo. ● Abrir 'rojeto E (om esta opção vocJ poder# abrir um dos seus projetos salvos para continuar o trabalo. A ação e"uivalente a esta a e;ecutada pelo comando Abrir 'rojeto do menu Ar(uivo. ● Abrir )ltimo projeto utili*ado E O nome j# diL tudo* Gra "ue escoler a opção Abrir GrojetoP e ter "ue escoler o Hltimo projeto se vocJ pode faLer isso com um Hnico cli"ue&* :sta opção tambm est# acessvel pelo menu Ar(uivo onde e;iste uma lista com os Hltimos projetos sob a opção 'rojetos Recentes. ● Abrir Ar(uivo E muito comum criarmos al$um pro$raminaP simples em um Hnico ar"uivo s, para resolver al$um problema e não se "uer $erar um projeto no Anjuta "ue depende de al$umas deLenas de ar"uivos e bibliotecas. 7este caso vocJ poder# simplesmente
ANJUTA – Um breve tutorial
)
abrir o seu ar"uivo .cP e edit#
Ilustração % - Assistente de Aplicação (p$gina 1)
A pr,;ima tela Blustração 4C permite escoler o tipo de projeto a ser criado. Gara efeitos pr#ticos no nosso tutorial vamos usar a opção Projeto lib&lade "' "ue nos permite criar aplicaçes $r#ficas para o !nome usando esta biblioteca. 6embre
ANJUTA – Um breve tutorial
+
Ilustração - Assistente de Aplicação (p$gina ")
A terceira tela Blustração 5C destinada a informar dados do pro$rama tais como o nome do projeto B"ue não deve possuir espaçosC o nHmero de versão Bo padrão começar com 0.1C o nome do autor Ba"ui vocJ pe o seu nomeC alvo do projeto Bo nome do ar"uivo e;ecut#vel definido automaticamente de acordo com o nome do projetoC. A lin$ua$em de pro$ramação pode ser (P (??P ou ambos como n,s escolemos o projeto para a lib!lade a"ui n,s devemos escoler a lin$ua$em ( j# "ue para pro$ramarmos em (?? com a lib!lade seria necess#ria a biblioteca lib$lademm e "ue o Anjuta ainda não suporta completamente. O tipo de alvo poder# ser um alvo e;ecut#vel Bpro$rama comumC ou uma biblioteca Best#tica ou dinVmicaC. Greenca esta tela conforme desejado e cli"ue em Avançar.
Ilustração * - Assistente de Aplicação (p$gina %)
ANJUTA – Um breve tutorial A "uarta tela do assistente Blustração 'C permite "ue vocJ escreva um te;to descrevendo o seu projeto. A"ui vocJ pode escrever a vontade e "uando terminar cli"ue em Avançar.
Ilustração + - Assistente de Aplicação (p$gina )
A pr,;ima tela Blustração )C para passar al$umas opçes adicionais W sua nova aplicação tais como incluir uma c,pia resumida da licença !G6 em todos os ar"uivos Bisso recomend#vel se vocJ pretende criar uma aplicação sob esta licençaC Xabilitar o suporte a $ette;t indispens#vel se vocJ pretende faLer uma aplicação j# prevendo o sucessoP e "ue futuramente ser# internacionaliLada. A opção de $erar o c,di$o fonte usando o !lade ou $lademm est# disponvel apenas para projetos baseados diretamente na !@ o "ue permitir# o Anjuta aproveitar o c,di$o fonte $erado pelo !lade. As opçes 7ome da :ntrada (oment#rio !rupo 8sar terminal e Ycone são usadas para criar o ar"uivo seu_projeto.desktopP "ue um atalo para o seu pro$rama e "ue ser# criado dentro do $rupo especificado "uando o usu#rio der um ma/e installP na sua aplicação. Defina as opçes como desejado e cli"ue em Avançar.
-
ANJUTA – Um breve tutorial
10
Ilustração , - Assistente de Aplicação (p$gina *)
A pr,;ima tela Blustração +C apresenta um resumo das opçes "ue vocJ escoleu. Fe estiver tudo conforme vocJ desejava "ue estivesse então cli"ue no botão Aplicar para "ue o Anjuta finaliLe o projeto e $ere todos os ar"uivos necess#rios.
Ilustração - Assistente de Aplicação (p$gina +)
Fe tudo correu bem as Hltimas linas "ue se pode ver na fica ZuildP da janela de mensa$ens Bveja a na p#$ina C deve ser al$o similar ao mostrado abai;oK Agora digite 'make' para compilar o pacote Terminado ... Sucesso
ANJUTA – Um breve tutorial
11
Tempo total utilizado: 45 segs
:stas mensa$ens foram $eradas pelos pro$ramas automa/e e autoconf "ue são respons#veis por criar os ar"uivos ma/efile e outros ar"uivos au;iliares para facilitar a compilação. Dependendo da versão destes pacotes "ue estiverem instalados em sua m#"uina a mensa$em ser# um pouco diferente. 8ma veL "ue j# temos a base do projeto pronta n,s podemos compilar o nosso projeto ... ou a partir do terminal BvocJ pode clicar na fica terminal da janela de mensa$ensC ou usando o comando $ompilar #udo do menu $ompilar [FX9@<911\. Ao concluir a compilação n,s teremos um prot,tipo do nosso projeto j# funcional e para vJ
Ilustração . - Primeira execução do nosso /ello Anjuta
N+#A, Fempre "ue iniciarmos a nossa aplicação de dentro do Anjuta isto usando o comando Executar do menu $ompilar ou a tecla [93\ a janela do terminal ser# aberta atr#s de nossa
aplicação para "ue possamos ver as mensa$ens de depuração= mas fi"ue despreocupado pois se vocJ e;ecutar a aplicação de fora da D: este terminal não ser# aberto. Gara fecarmos a nossa aplicação vocJ deve fecar a janela de terminal Blembre
O b#sico isso e certamente "ue a maioria das pessoas "ue leram ou estão lendo este documento sabem ce$ar at a"ui mas não sabe como prosse$uir e por isso "ue eu pretendo me alon$ar detalando al$uns dos v#rios recursos do Anjuta.
ANJUTA – Um breve tutorial
12
Incrementando o projeto At a"ui o nosso projeto est# bastante $enrico e "ual"uer pro$rama usando a lib!lade no Anjuta começar# desta forma. Da"ui pra frente depende do "ue o pro$ramador espera desenvolver. 7o nosso caso faremos uma despreLvel calculadora com apenas as "uatro operaçes b#sicas. A mina proposta não produLir nenuma super>$t/
Ilustração 1 - 0creensot da calculadora completa
Observe "ue ela bem simples e por isso dispensa muitos coment#rios sobre a sua elaboração mas para ajudar aos marineiros de primeira via$emP ai vai al$umas dicasK 1. 8se &tk2ox B(ai;a QerticalC com 4 linas para or$aniLar melor os componentes. 2. nclua duas &tk3ntr4 B:ntrada de @e;toC uma para cada valor da nossa operação 3. Ao invs de "uatro botes use apenas uma &tk/2utton2ox B(ai;a de botes XoriLontalC com 4 botes. 4. nsira uma &tk5abel Beti"ueta ou r,tuloC As Hnicas propriedades alteradas a"ui foram as propriedades eti"uetaP de cada um botes para "ue representassem as "uatro operaçes b#sicas. Alm das propriedades foram definidos os se$uintes sinais e manipuladoresK
13
ANJUTA – Um breve tutorial Objeto
NindoI1 Zutton1 Zutton2 Zutton3 Zutton4
Sinal
destroS clic/ed clic/ed clic/ed clic/ed
Manipulador
$t/^main^"uitBC on^button1^clic/edBC on^button2^clic/edBC on^button3^clic/edBC on^button4^clic/edBC
Tabela 1 - 0inais e 6anipuladores
Resumindo a tabelaK Ao clicarmos no botão fecar da janela BNindoI1C o sinal destro4 ocorrido o "ue cama imediatamente a função gtk_main_7uit() como manipulador e "ue encerra a nossa aplicação. : ao clicarmos em "ual"uer um dos outros botes o sinal clicked P ocorre camando cada um dos seus respectivos manipuladores on^button7^clic/edBCP. (om e;ceção do manipulador $t/^main^"uitBC "ue uma função interna do !@ os demais manipuladores deverão ser pro$ramados em funçes com estes nomes a partir do Anjuta Badiante n,s veremos comoC . Gor ora apenas salve as alteraçes no !lade clicando em FalvarP e fece
Qeja "ue no nosso terminal temos "uatro avisos da lib!lade acusando a ausJncia dos manipuladores on^button_^clic/ed. Acredito "ue a partir da"ui vocJ "ue ainda estava em dHvida j# pode ver uma utilidade para o terminal "ue se abre durante a e;ecução do projeto no ambiente do Anjuta. Fempre "ue tivermos mensa$ens de erro ou aviso a serem e;ibidas em tempo de e;ecução elas serão apresentadas no terminal. Qale dei;ar a"ui uma dica "ue se vocJ
14
ANJUTA – Um breve tutorial
precisar "ue o seu pro$rama emita mensa$ens de depuração pode
*/ */ */ */
8uadro 1 - Prot9tipos
Observe "ue na primeira lina includa est# a declaração para nossa estrutura _6 o motivo disso "ue n,s vamos usar com certa fre"`Jncia o conteHdo dessa vari#vel para encontrarmos os objetos a serem manipulados então para "ue tudo funcione direitino comente a declaração dentro da função mainBC. 9eito isso a$ora n,s vamos colocar o corpo das funçes no final do nosso ar"uivo. gdou%le get_&alor (gc#ar * meu_widget) /* ' o &alor do widget */ 1 /* $ega o widget especiicado */ !tk)idget *wid 2 glade_xml_get_widget (xml, meu_widget); /* $ega o tipo do widget */ gc#ar *wid_tipo 2 g_strdup (3_456E78_89$E_:E (wid)); /*
*/
/* >eriica se o widget ? uma caixa de entrada */ i (@strncmp (wid_tipo, A3tkEntrBA, C)) 1 retorno 2 gtk_entrB_get_text (38D_E:8<9 (wid)); else
ANJUTA – Um breve tutorial
15
/* >eriica se o widget ? um r%tulo */ i (@strncmp (wid_tipo, A3tk'abelA, C)) 1 retorno 2 gtk_label_get_text (38D_'5E' (wid)); /* 8ranorma a string de retorno em um nFmero */ gdou%le saida 2 g_ascii_strtod (retorno, :=''); g_ree(wid_tipo); return saida;
7oid set_&alor (gc#ar * meu_widget, gdou%le &alor) /* eine o &alor do widget */ 1 /* $ega o widget especiicado */ !tk)idget *wid 2 glade_xml_get_widget (xml, meu_widget); /* $ega o tipo do widget */ gc#ar *wid_tipo 2 g_strdup (3_456E78_89$E_:E (wid)); /* 7on&erte o nFmero de entrada em um string de posi!"es */ gc#ar buerGH; const gc#ar *&alor_txt 2 g_ascii_dtostr (buer, , &alor); /* >eriica se o widget ? uma caixa de entrada */ i (@strncmp (wid_tipo, A3tkEntrBA, C)) 1 gtk_entrB_set_text (38D_E:8<9 (wid), &alor_txt); else /* >eriica se o widget ? um r%tulo */ i (@strncmp (wid_tipo, A3tk'abelA, C)) 1 gtk_label_set_text (38D_'5E' (wid), &alor_txt); g_ree(wid_tipo);
7oid on_button_clicked () /* +oma */ 1 g_print(A+omaInA); /* ' o texto da caixa e gdou%le e 2 get_&alor (AentrBA); retorna em nFmero */ gdou%le e 2 get_&alor (AentrBA); gdou%le r 2 e J e; /*
ANJUTA – Um breve tutorial
1'
retorna em nFmero */ gdou%le e 2 get_&alor (AentrBA); gdou%le r 2 e # e; /*
7oid on_button0_clicked () /* i&is-o */ 1 g_print(Ai&is-oInA); /* ' o texto da caixa e gdou%le e 2 get_&alor (AentrBA); retorna em nFmero */ gdou%le e 2 get_&alor (AentrBA); gdou%le r 2 e / e; /*
Fe vocJ di$itar tudo direitino ou simplesmente copiar e colar então tudo dever# funcionar direitino. A$ora n,s s, precisamos compilar o projeto para testar. Observe "ue as funçes são bem simples não possuindo "ual"uer espcie de crtica aos dados entrados. Apesar disto não ser recomend#vel para um pro$rama profissional elas atenderão bem aos nossos prop,sitos "ue de entender o funcionamento do Anjuta e como as funçes possuem coment#rios entre as linas de c,di$o tambm não irei falar sobre o funcionamento delas bastando apenas "ue o leitor de uma lida no c,di$o fonte para entender seu funcionamento. Qual comando usar para compilar Fe vocJ der uma olada no menu $ompilarP ver# "ue temos cinco comandos para compilaçãoK $ompilar /F1. $ompilar com 2a3e /S4IF#.5/F1. $ompilar /F66. $ompilar #udo /S4IF#.5/F66. e $ompilar !istribuição. as "uando n,s vamos usar um e "uando usar outro& A resposta para esta per$unta depende da situação e do tamano do projeto. Qeja s,K $omando 7$ompilar8 /F1., !era apenas o ar"uivo
ANJUTA – Um breve tutorial
1)
atualiLar o ar"uivo .oP correspondente. Abuse do uso deste comando para faLer testes de sinta;e "uando ouver necessidade j# "ue para $erar um c,di$o
Compilando e rodando o projeto Gara compilar o nosso projeto e verificar se # al$um erro de sinta;e tecle /S4IF#.?/F1. ou no menu $ompilar escola $ompilar com ma3e e em se$uida se tudo correu bem tecle /F66. para $erar o ar"uivo bin#rio e /F9. para e;ecutar e e;perimente realiLar al$uns c#lculos com as "uatro operaçes e veja se est# realmente tudo o/. Fe durante a compilação ocorreu al$um erro de sinta;e verifi"ue se nada foi di$itado errado corrija e faça o procedimento citado acima. 6embrando ainda "ue como o nosso projeto pe"ueno e s, possui um ar"uivo de c,di$o n,s podemos pular a compilação com ma/e e apenas $erar o bin#rio "ue tudo dever# funcionar sem traumas. Dividir para conquistar! ma$ine se o c,di$o fonte do OpenOffice.or$ do ernel 6inu; ou do !nome estivesse todo em um Hnico ar"uivo. Feria al$o terrvel de se manter talveL não ouvesse mem,ria suficiente para carre$ar todo o ar"uivo na maioria dos computadores para ser editado a manutenção por mHltiplos desenvolvedores acredito eu "ue seria invi#vel. Descer com o cursor at a lina 1.345.-0+.445 para retirar um simples P "ue avia sido es"uecido ali então seria uma verdadeira tortura. Gor estes e outros motivos mais o c,di$o fonte de uma aplicação dividido entre v#rios ar"uivos. As vanta$ens vão desde a manutenção de ar"uivos pe"uenos at a possibilidade de e;istir mantenedores para cada $rupo de ar"uivosP etc. A divisão de um projeto em v#rios ar"uivos depende de diversas ferramentas tais como o ma/e automa/e autoconf etc "ue entre outras coisas verificam as dependJncias de bibliotecas e entre cada ar"uivo para "ue tudo funcione corretamente no ato da compilação. Fe tudo fosse tão f#cil e simples talveL eu nem estivesse escrevendo esta sessão e acredito at
ANJUTA – Um breve tutorial
1+
"ue não averia necessidade de estar faLendo um tutorial sobre o Anjuta. as ainda bem "ue o Fr. 7aba umar foi iluminado ao desenvolver esta aplicação por isso veremos detaladamente como or$aniLar a sua aplicação a partir da"ui* Criando os novos arquivos A primeira coisa a se faLer para dividir o nosso projeto em v#rios ar"uivos ter os demais ar"uivos com as e;tenses .P e .cP para depois serem includos no c,di$o via diretivas includeP. Gara criarmos os ar"uivos usamos o comando NovoP do menu Ar(uivoP di$itamos um nome para o ar"uivo escolemos o tipo e as informaçes "ue desejamos tais como cabeçalo e licença !G6. lustração 11 mostra a janela para criar um novo ar"uivo.
Ilustração 11 - >anela para criar um no?o ar7ui?o no Anjuta
Ap,s di$itar as informaçes cli"ue em O para "ue uma nova abaP seja criada na #rea de trabalo do Anjuta. 7,s realiLamos este procedimento duas veLesK 8ma para criar o ar"uivo .cP onde ter# todo o c,di$o das nossas funçes e outra veL para criar o ar"uivo .P onde ter# os prot,tipos diretivas macros e vari#veis $lobais do nosso projeto. 7o menu #ipo de Ar(uivoP da janela Novo ar(uivoP isso e"uivaleria a escoler ( Fource 9ileP e em se$uida ( E (?? Xeader 9ileP. 8ma veL "ue j# temos os ar"uivos vaLios n,s devemos recortar o c,di$o dos prot,tipos BconteHdo do %uadro 1PC e cola
(om isso todas as funçes do !@?>!nome e !lade serão encontradas nas duas primeiras
ANJUTA – Um breve tutorial
1-
diretivas B7ão preciso ser adivino para saber o "ue colocar a"ui basta copiar o "ue est# no ar"uivo main.cPC e a terceira diretiva para "ue o $cc possa encontrar onde est# o respectivo ar"uivo .P complementar deste ar"uivo .cP. A prop,sito esta terceira diretiva dever# entrar tambm no ar"uivo main.cP pois este ar"uivo precisar# conecer as funçes e vari#veis "ue estão prototipadasP>declaradas em funcoes.P Ap,s colar o conteHdo de cada ar"uivo salvetmpC. Depois eles serão adicionados ao projeto. Qale a"ui uma nota de "ue se mantivermos tudo em um ar"uivo .P o pro$rama at ser# compilado sem muitas complicaçes mas isso acarretar# no fato de "ue não poderemos compilar cada ar"uivo .oP Bar"uivo
Ilustração 1" - >anela para adicionar Ar7ui?o de #9digo ao projeto
Assim "ue vocJ clicar o botão O a janela da lustração 13 ser# e;ibida e vocJ precisar# apenas responder F. para "ue o ar"uivo seja copiado para a pasta ade"uada.
ANJUTA – Um breve tutorial
20
Ilustração 1% - #on=irmação da inclusão do no?o ar7ui?o no projeto
9eito isso repita o mesmo procedimento descrito mas desta veL usando a opção Ar(uivo de $:digo Fonte para importar o ar"uivo .cP. !erando os novos arquivos "a#e$ile 8ma veL "ue j# temos os novos ar"uivos includos ao projeto n,s devemos $erar os novos a/efiles e demais ar"uivos para "ue a compilação seja bem sucedida. A primeira coisa a faLer limpar todo o diret,rio de projeto usando o comando -impar #udo do menu $ompilar. sso far# com "ue todos os ar"uivos tempor#rios objetos ma/efiles etc sejam removidos= em se$uida n,s vamos usar o comando Autogerar do mesmo menu $ompilar para "ue eles sejam recriados. Fe tudo foi feito corretamente então n,s poderemos compilar o projeto e testar se ele ainda funciona. 6embrando "ue podemos usar apenas a tecla /F66. "ue se encarre$ar# de compilar tudo mas como n,s precisamos testar se cada ar"uivo .cP ser# compilado independente dos demais n,s vamos selecionar primeiro o ar"uivo funcoes.cP e usar o /S4IF#.?/F1. em se$uida faremos o mesmo para o ar"uivo main.cP e s, depois vamos $erar o bin#rio com /F66.. Fe nenuma mensa$em de erro foi e;ibida ao teclarmos /F9. nossa calculadora ainda dever# estar funcionando. %ividir& dividir e dividir 8m dos maiores objetivos da divisão de um projeto como j# foi dito or$aniLar as suas funçes por cate$oria tipo de tarefa ou outros critrio a $osto do desenvolvedor. Fe n,s olarmos para o nosso ar"uivo funcoes.cP e funcoes.P vemos ai "ue # dois tipos de funçes distintasK As funçes "ue funcionam como manipuladores de sinais on^button7^clic/edBCP e as funçes de uso $eral $et^valorBCP e set^valorBCP "ue respectivamente lJem ou definem o valor das cai;as de entrada e r,tulo de resultado. Gara fi;armos o procedimento e vermos "ue esta tarefa não tão difcil como deve ter parecido ao faLermos pela primeira veL n,s faremos novamente para separar desta veL estes $rupos de funçes. 1 E A primeira coisa a faLer criar os ar"uivos funcoes^$eral.cP e funcoes^$eral.P usando para isso o menu Ar(uivo comando Novo. %uando e;ibir a janela 7ovo Ar"uivoP n,s di$itamos o nome do ar"uivo e escolemos o seu tipo conforme j# comentado no t,pico (riando os novos ar"uivosP 2 E A$ora n,s iremos recortar as funçes $et^valorBCP e set^valorBCP "ue estão no ar"uivo funcoes.cP e col#
ANJUTA – Um breve tutorial
21
ambas as funçes deste ar"uivo necessitam desta vari#vel. 7ote ainda "ue o ar"uivo funcoes^$eral.cP necessita do mesmo cabeçalo "ue est# no ar"uivo funcoes.cP isto a inclusão dos eaders $nome.P e $lade. j# "ue ele tambm usa funçes prototipadas nestes ar"uivos. : pra completar o ar"uivo main.cP necessita incluir o cabeçalo deste novo ar"uivo tambm j# "ue a vari#vel ;mlP est# ali. Fe isto não for feito na ora de compilar este ar"uivo ocorrer# um erro acusando "ue esta vari#vel não foi declarada. 3 E Ainda assim se compilarmos o projeto teremos um erro de compilação pois as funçes $et^valorBCP e set^valorBCP não serão encontradas. Gor "ue elas não serão encontradas& Fimples apesar de termos salvo os ar"uivos nos respectivos diret,rios includeP e srcP eles ainda não faLem parte do projeto ou seja ainda não estão declarados nos ar"uivos ma/efileP. Gara incluirmos no projeto temos "ue usar o comando Adicionar Ar(uivoP do menu 'rojetoP uma veL para cada ar"uivo Bo ar"uivo de c,di$o .cP e em se$uida o ar"uivo de eader .PC. Depois de feito isso ai sim poderemos compilar o projeto "ue tudo ser# compilado corretamente.
Onde eu errei' A pior tarefa durante o processo de desenvolvimento de uma aplicação a depuração. O Anjuta possui uma inte$ração muita boa com o !DZ B!78 Debu$$erC o "ue permite usar todo o poder desta ferramenta sem precisarmos sair do ambiente do Anjuta. A depuração constitui
ANJUTA – Um breve tutorial
22
simples de se faLer a mesma tarefa como por e;emplo um duplo cli"ue sobre a mar$em marcadoresP lo$o a frente da lina desejada. Qeja na lustração 14. Gara desmarcar um ponto de interrupção desativ#desativada clicando sobre o editor de te;tos com o botão direito do mouse escolendo +pç&es e em se$uida clicando em Alternar margem de marcador.
Ilustração 1 - 6argens da janela de edição
Gara esta demonstração eu mar"uei uma interrupção na primeira lina de c,di$o da função set^valorBC no ar"uivo funcoes^$eral.c ou seja a lina "ue contm o c,di$oK !tk)idget *wid 2 glade_xml_get_widget (xml, meu_widget); 8uadro : Primeira lina de c9digo da =unção set_?alor()C onde =oi marcada a interrupção
8ma veL "ue o depurador esteja ativado n,s vamos rodar o pro$rama usando a tecla /F<. ou o menu !epurar comando Execução e opção Executar=$ontinuar "ue permitem e;ecutar o nosso pro$rama com os recursos de depuração. 8ma veL "ue o nosso pro$rama esteja sendo e;ecutado n,s usaremos as abasPK DebugC 5ocalsC 0tack e Eatcs para avaliar a situação atual e controlaremos o pro$rama usando as teclas de /F<. at /F>.. Informaç#es dispon$veis durante a depuração A aba debug mostra informaçes em $eral sobre o depuração tal como o nHmero do brea/pointP camada da função e seus parVmetros ar"uivo onde a função se encontra e nHmero da lina entre outras informaçes. Gor e;emploK &reparando para iniciar a sess8o de depura98o ... Carregando Eecut;7el: " #ome"$elr%raga"&roetos"(ello)orldAnuta"src"#ello$ordanuta Using #ost li%t#read2d% li%rar< ="li%"tls"li%t#read2d%.so.>. ? depurador est; preparado.
23
ANJUTA – Um breve tutorial Eecutando o programa ... @T#read de%ugging using li%t#read2d% ena%led @e$ T#read B---BB-B +6)& 34DB @S$itc#ing to T#read B---BB-B +6)& 34DB main +argcFarg7B%1111%d4 at main.c:35 Greakpoint F set27alor+meu2$idgetBD-H-%d =la%el>F 7alorH em 1uncoes2geral.c:4D 8uadro * : 0aFda da aba @debug 7uando o depurador esti?er ati?oC logo ap9s atingir um breakpoint
A aba -ocals mostra as vari#veis locais da função atual com seus respectivos valores. :sta aba ser# bastante Htil se vocJ estiver analisando o comportamento das vari#veis locais de determinada função. A cada veL "ue uma vari#vel mudar de valor ela ser# destacada com a cor vermela. Gra completar ao clicarmos com o botão direito do mouse sobre "ual"uer uma das vari#veis locais n,s poderemos mudar o seu formato de e;ibição entre 9ormato padrão Zin#rio Octal Decimal com sinal Decimal sem sinal Xe;adecimal (aracter ou ainda inspecionar a re$ião de mem,ria onde o dado encontra
Valor
Iid
B!t/Nid$et C 0;40000000
Iid^tipo
B$car C 0;0
buffer
230a021bP
valor^t;t
Bconst $car C 0;+-4-105 9$fd$4'$fdbf$045f4012349!R:2342319!R9RS'54'SP
A aba Stac3 mostra a pila de camada de funçes desde a função mainP no seu pro$rama principal passando por todas as funçes nas bibliotecas vinculadas at a função "ue est# sendo depurada. (licando com o botão direito sobre "ual"uer uma das linas podemos ver informaçes referentes ao estado dos re$istradores e mem,ria neste instante de tempo em "ue o pro$rama parou. Fe for necess#rio ver do instante anterior Bcamada de função anteriorC basta dar um duplo cli"ue sobre ela antes. :;emploK Ativo
Contagem
g
0 1 2 ...
Frame set_&alor(meu_widget2PxQCRSCbd TlabelU, &alor2R) em uncoes_geral.cV0Q PxPCP0CbdC in on_button_clicked() at uncoes.cV0 Px0PCRbR in g_cclosure_marcNal_>4W_>4W() rom / usr/lib/libgobject#.P.so.P ...
31 32
Px0P0XbcC in gtk_main() rom /usr/lib/libgtk#x#.P.so.P PxPCP0CeeQ in main (argc2,arg&2Pxbbd0) at main.cV0C
24
ANJUTA – Um breve tutorial
A aba ?atches permite inspecionar "ual"uer vari#vel no seu pro$rama. Desde "ue ela esteja dentro do seu escopo. sso si$nifica "ue se uma vari#vel local estiver na lista de inspeção "uando vocJ sair desta função a vari#vel dei;ar# de ter seu valor visvel. Ainda assim uma ferramenta Htil e muito Htil j# "ue vocJ poder# definir a"ui apenas as vari#veis "ue realmente devem ser monitoradas sendo elas locais ou $lobais e ainda pode realiLar al$umas operaçes com elas se ouver necessidadeK (omo por e;emplo faLer atribuiçes realiLar c#lculos aritmticos com as vari#veis faLer verificaçes l,$icas etc. Gara "ue se possa adicionar novas vari#veis ou e;presses a serem inspecionadas cli"ue com o botão direito do mouse em "ual"uer local nesta aba e escola a opção Adicionar e;pressãoP. O mesmo v#lido se vocJ "uiser remover uma vari#vel da lista ou limpar toda a lista. :;.K Variável
valor valor^t;t buffer buffer[0\ buffer[1\ buffer[2\ buffer[3\ buffer[4\ buffer[1\buffer[2\
Valor
2) Bconst $car C 0;+04-105 f$ert34fdf$SutS$/U)+dfsd2345123P +01)01'bP 5' + 15 01) 14 01' + b 0 0 0
%ontrolando seu &elefantin'o& (omo j# comentado antes as teclas de função de /F<. at /F>. são usadas para controlar a sua aplicação em tempo de depuração. Fe vocJ j# ativou o depurador e e;ecutou o pro$rama com a tecla /F<. notar# "ue ele estar# funcionando "uase normalmente. :u disse "uase por "ue ao clicar em um botão de operação ele parece ter con$elado. as não parece não ele realmente foi con$elado para "ue vocJ pudesse analisar a situação. A$ora vocJ precisa conecer a função de cada uma das teclas usadas para controle da aplicação pois senão vocJ vai acabar reiniciando o computador acando "ue tudo est# perdido e o mundo acabou* @ecla /F<. E Benu !epurar (omando Execução opção Executar=$ontinuarC E :sta tecla usada para e;ecutar o pro$rama faLendo
ANJUTA – Um breve tutorial
25
novos valores. @ecla /F@. E Benu !epurar (omando Execução opção 'asso para dentroC E :sta tecla usada para avançar lina. < Benu !epurar (omando Execução opção Executar atC o cursorC E :sta tecla simplesmente e;ecuta o seu c,di$o at a posição atual do cursor. sso Htil "uando vocJ não "uer se dar ao lu;o de marcar apenas um brea/pointP. Zasta clicar na lina desejada e teclar [9+\.
Conclus(o sso apenas uma parte do tudo "ue se pode faLerP com o Anjuta. :u não abordei o uso do (QF "ue um poderoso recurso para controle de verses e interessantssimo para projetos "ue serão mantidos por uma e"uipe de desenvolvedores onde todos poderão me;er no c,di$o fonte sem no entanto perderem as alteraçes implementadas pelos demais participantes do $rupo. @alveL num futuro pr,;imo eu vena a escrever sobre este recurso e at mesmo inclu!lade criar seus pro$ramas com uma interface ami$#vel a$rad#vel e pr#tica. Obri$ado pela leitura e espero "ue tena $ostado. DHvidas su$estes elo$ios e crticas podem ser feitas a partir do site. 9elicidades e boas linas de c,di$o*
ANJUTA – Um breve tutorial
2'
)icen*a de %ocumenta*(o )ivre !NU 7otaK 8ma tradução não oficial desta licença para o portu$uJs ZrasilP pode ser lida em ttpK>>III.ead.unicamp.br>minicurso>bI>te;to>fdl.pt.tml G() *ree Documentation +icense Qersion 1.2 7ovember 2002 Copyright (C) 2000%200%2002 1ree o&t3are 1oundation% 6nc 5> 7e#ple ?lace% uite @@0% Boston% A 02-@0 D*eryone is per#itted to copy and distribute *erbati# copies o& this license docu#ent% but changing it is not allo3ed D 'REA2-E
@e purpose of tis 6icense is to ma/e a manual te;tboo/ or oter functional and useful document hfreeh in te sense of freedomK to assure everSone te effective freedom to copS and redistribute it Iit or Iitout modifSin$ it eiter commerciallS or noncommerciallS. FecondarilS tis 6icense preserves for te autor and publiser a IaS to $et credit for teir Ior/ Iile not bein$ considered responsible for modifications made bS oters. @is 6icense is a /ind of hcopSlefth Iic means tat derivative Ior/s of te document must temselves be free in te same sense. t complements te !78 !eneral Gublic 6icense Iic is a copSleft license desi$ned for free softIare. Ne ave desi$ned tis 6icense in order to use it for manuals for free softIare because free softIare needs free documentationK a free pro$ram sould come Iit manuals providin$ te same freedoms tat te softIare does. Zut tis 6icense is not limited to softIare manuals= it can be used for anS te;tual Ior/ re$ardless of subject matter or Ieter it is publised as a printed boo/. Ne recommend tis 6icense principallS for Ior/s Iose purpose is instruction or reference. 6 A''-I$AI-I#G AN! !EFINI#I+NS
@is 6icense applies to anS manual or oter Ior/ in anS medium tat contains a notice placed bS te copSri$t older saSin$ it can be distributed under te terms of tis 6icense. Fuc a notice $rants a Iorldor translated into anoter lan$ua$e. A hFecondarS Fectionh is a named appendi; or a front
ANJUTA – Um breve tutorial
2)
@e h(over @e;tsh are certain sort passa$es of te;t tat are listed as 9ront<(over @e;ts or Zac/<(over @e;ts in te notice tat saSs tat te Document is released under tis 6icense. A 9ront<(over @e;t maS be at most 5 Iords and a Zac/<(over @e;t maS be at most 25 Iords. A h@ransparenth copS of te Document means a macineor processin$ tools are not $enerallS available and te macine< $enerated X@6 GostFcript or GD9 produced bS some Iord processors for output purposes onlS. @e h@itle Ga$eh means for a printed boo/ te title pa$e itself plus suc folloIin$ pa$es as are needed to old le$iblS te material tis 6icense re"uires to appear in te title pa$e. 9or Ior/s in formats Iic do not ave anS title pa$e as suc h@itle Ga$eh means te te;t near te most prominent appearance of te Ior/s title precedin$ te be$innin$ of te bodS of te te;t. A section h:ntitled _h means a named subunit of te Document Iose title eiter is preciselS _ or contains _ in parenteses folloIin$ te;t tat translates _ in anoter lan$ua$e. BXere _ stands for a specific section name mentioned beloI suc as hAc/noIled$ementsh hDedicationsh h:ndorsementsh or hXistorSh.C @o hGreserve te @itleh of suc a section Ien Sou modifS te Document means tat it remains a section h:ntitled _h accordin$ to tis definition. @e Document maS include NarrantS Disclaimers ne;t to te notice Iic states tat tis 6icense applies to te Document. @ese NarrantS Disclaimers are considered to be included bS reference in tis 6icense but onlS as re$ards disclaimin$ IarrantiesK anS oter implication tat tese NarrantS Disclaimers maS ave is void and as no effect on te meanin$ of tis 6icense. ; HERA#I2 $+'GIN
ou maS copS and distribute te Document in anS medium eiter commerciallS or noncommerciallS provided tat tis 6icense te copSri$t notices and te license notice saSin$ tis 6icense applies to te Document are reproduced in all copies and tat Sou add no oter conditions Iatsoever to tose of tis 6icense. ou maS not use tecnical measures to obstruct or control te readin$ or furter copSin$ of te copies Sou ma/e or distribute. XoIever Sou maS accept compensation in e;can$e for copies. f Sou distribute a lar$e enou$ number of copies Sou must also folloI te conditions in section 3. ou maS also lend copies under te same conditions stated above and Sou maS publiclS displaS copies. 9 $+'GIN IN 0AN#I#G
f Sou publis printed copies Bor copies in media tat commonlS ave printed coversC of te Document numberin$ more tan 100 and te Documents license notice re"uires (over @e;ts
ANJUTA – Um breve tutorial
2+
Sou must enclose te copies in covers tat carrS clearlS and le$iblS all tese (over @e;tsK 9ront< (over @e;ts on te front cover and Zac/<(over @e;ts on te bac/ cover. Zot covers must also clearlS and le$iblS identifS Sou as te publiser of tese copies. @e front cover must present te full title Iit all Iords of te title e"uallS prominent and visible. ou maS add oter material on te covers in addition. (opSin$ Iit can$es limited to te covers as lon$ as teS preserve te title of te Document and satisfS tese conditions can be treated as verbatim copSin$ in oter respects. f te re"uired te;ts for eiter cover are too voluminous to fit le$iblS Sou sould put te first ones listed Bas manS as fit reasonablSC on te actual cover and continue te rest onto adjacent pa$es. f Sou publis or distribute Opa"ue copies of te Document numberin$ more tan 100 Sou must eiter include a macine
ou maS copS and distribute a odified Qersion of te Document under te conditions of sections 2 and 3 above provided tat Sou release te odified Qersion under preciselS tis 6icense Iit te odified Qersion fillin$ te role of te Document tus licensin$ distribution and modification of te odified Qersion to Ioever possesses a copS of it. n addition Sou must do tese tin$s in te odified QersionK • A 8se in te @itle Ga$e Band on te covers if anSC a title distinct from tat of te Document and from tose of previous versions BIic sould if tere Iere anS be listed in te XistorS section of te DocumentC. ou maS use te same title as a previous version if te ori$inal publiser of tat version $ives permission. • 6ist on te @itle Ga$e as autors one or more persons or entities responsible for autorsip of te modifications in te odified Qersion to$eter Iit at least five of te principal autors of te Document Ball of its principal autors if it as feIer tan fiveC unless teS release Sou from tis re"uirement. • $ Ftate on te @itle pa$e te name of te publiser of te odified Qersion as te publiser. • ! Greserve all te copSri$t notices of te Document. E Add an appropriate copSri$t notice for Sour modifications adjacent to te oter • copSri$t notices. • F nclude immediatelS after te copSri$t notices a license notice $ivin$ te public permission to use te odified Qersion under te terms of tis 6icense in te form soIn in te Addendum beloI. • Greserve in tat license notice te full lists of nvariant Fections and re"uired (over @e;ts $iven in te Documents license notice. • 4 nclude an unaltered copS of tis 6icense. I Greserve te section :ntitled hXistorSh Greserve its @itle and add to it an item statin$ • at least te title Sear neI autors and publiser of te odified Qersion as $iven on te
ANJUTA – Um breve tutorial
2-
@itle Ga$e. f tere is no section :ntitled hXistorSh in te Document create one statin$ te title Sear autors and publiser of te Document as $iven on its @itle Ga$e ten add an item describin$ te odified Qersion as stated in te previous sentence. • J Greserve te netIor/ location if anS $iven in te Document for public access to a @ransparent copS of te Document and li/eIise te netIor/ locations $iven in te Document for previous versions it Ias based on. @ese maS be placed in te hXistorSh section. ou maS omit a netIor/ location for a Ior/ tat Ias publised at least four Sears before te Document itself or if te ori$inal publiser of te version it refers to $ives permission. • K 9or anS section :ntitled hAc/noIled$ementsh or hDedicationsh Greserve te @itle of te section and preserve in te section all te substance and tone of eac of te contributor ac/noIled$ements and>or dedications $iven terein. - Greserve all te nvariant Fections of te Document unaltered in teir te;t and in teir • titles. Fection numbers or te e"uivalent are not considered part of te section titles. • 2 Delete anS section :ntitled h:ndorsementsh. Fuc a section maS not be included in te odified Qersion. • N Do not retitle anS e;istin$ section to be :ntitled h:ndorsementsh or to conflict in title Iit anS nvariant Fection. • + Greserve anS NarrantS Disclaimers. f te odified Qersion includes neI front
ou maS combine te Document Iit oter documents released under tis 6icense under te terms defined in section 4 above for modified versions provided tat Sou include in te combination all of te nvariant Fections of all of te ori$inal documents unmodified and list tem all as nvariant Fections of Sour combined Ior/ in its license notice and tat Sou preserve all teir NarrantS Disclaimers. @e combined Ior/ need onlS contain one copS of tis 6icense and multiple identical nvariant Fections maS be replaced Iit a sin$le copS. f tere are multiple nvariant Fections Iit te same name but different contents ma/e te title of eac suc section uni"ue bS addin$ at te end of it in parenteses te name of te ori$inal autor or publiser of tat section if /noIn or else a uni"ue number. a/e te same adjustment to te section titles in te list of nvariant Fections in te license notice of te combined Ior/.
ANJUTA – Um breve tutorial
30
n te combination Sou must combine anS sections :ntitled hXistorSh in te various ori$inal documents formin$ one section :ntitled hXistorSh= li/eIise combine anS sections :ntitled hAc/noIled$ementsh and anS sections :ntitled hDedicationsh. ou must delete all sections :ntitled h:ndorsements.h $+--E$#I+NS +F !+$02EN#S
ou maS ma/e a collection consistin$ of te Document and oter documents released under tis 6icense and replace te individual copies of tis 6icense in te various documents Iit a sin$le copS tat is included in te collection provided tat Sou folloI te rules of tis 6icense for verbatim copSin$ of eac of te documents in all oter respects. ou maS e;tract a sin$le document from suc a collection and distribute it individuallS under tis 6icense provided Sou insert a copS of tis 6icense into te e;tracted document and folloI tis 6icense in all oter respects re$ardin$ verbatim copSin$ of tat document. B AREA#I+N ?I#4 IN!E'EN!EN# ?+RKS
A compilation of te Document or its derivatives Iit oter separate and independent documents or Ior/s in or on a volume of a stora$e or distribution medium is called an ha$$re$ateh if te copSri$t resultin$ from te compilation is not used to limit te le$al ri$ts of te compilations users beSond Iat te individual Ior/s permit. Nen te Document is included in an a$$re$ate tis 6icense does not applS to te oter Ior/s in te a$$re$ate Iic are not temselves derivative Ior/s of te Document. f te (over @e;t re"uirement of section 3 is applicable to tese copies of te Document ten if te Document is less tan one alf of te entire a$$re$ate te Documents (over @e;ts maS be placed on covers tat brac/et te Document Iitin te a$$re$ate or te electronic e"uivalent of covers if te Document is in electronic form. OterIise teS must appear on printed covers tat brac/et te Iole a$$re$ate. > #RANS-A#I+N
@ranslation is considered a /ind of modification so Sou maS distribute translations of te Document under te terms of section 4. Replacin$ nvariant Fections Iit translations re"uires special permission from teir copSri$t olders but Sou maS include translations of some or all nvariant Fections in addition to te ori$inal versions of tese nvariant Fections. ou maS include a translation of tis 6icense and all te license notices in te Document and anS NarrantS Disclaimers provided tat Sou also include te ori$inal :n$lis version of tis 6icense and te ori$inal versions of tose notices and disclaimers. n case of a disa$reement betIeen te translation and te ori$inal version of tis 6icense or a notice or disclaimer te ori$inal version Iill prevail. f a section in te Document is :ntitled hAc/noIled$ementsh hDedicationsh or hXistorSh te re"uirement Bsection 4C to Greserve its @itle Bsection 1C Iill tSpicallS re"uire can$in$ te actual title. 1 #ER2INA#I+N
ou maS not copS modifS sublicense or distribute te Document e;cept as e;presslS provided for under tis 6icense. AnS oter attempt to copS modifS sublicense or distribute te Document is void and Iill automaticallS terminate Sour ri$ts under tis 6icense. XoIever parties Io ave received copies or ri$ts from Sou under tis 6icense Iill not ave teir licenses terminated so lon$ as suc parties remain in full compliance. 6D F0#0RE REHISI+NS +F #4IS -I$ENSE
@e 9ree FoftIare 9oundation maS publis neI revised versions of te !78 9ree Documentation 6icense from time to time. Fuc neI versions Iill be similar in spirit to te