The Big Book of Linux Ada Programming The Big Online Book of Linux Ada Programming An online documentation project over 27,000 lines long. Last Updated: July 20, 2001 Copyright © 1999-2001, Ken O. Burtch. All Rights Reserved. Permission given to copy (including photocopying) this document for education purposes provided this notice is kept intact. Do you want to develop Linux applications twice as fast as the C language? Read on! Latest version: [ North America/Canada ] Download files: [ .zip HTML ] [ PDF ] Unofficial mirrors: [ Europe/Spain ] [ Asia/Japan ] [ OOP Web ] Search the Big Book for a word or phrase Special Thanks To Jeff Creem (user stack and errno clarifications) Wilhelm Spickermann (CVS) Leonid A. Timochouk (Florist clarifications) Jürgen Pfeifer (Multithreading information) Bernhard Gubanka (Debugging Pools clarifications) Eric L. Schott, Warren W. Gay, Jean-Marc Bourguet (Adjust vs. C++ Copy Constructors) Jean-Marc Bourguet (C++ exceptions) Warren W. Gay (Ada Streams) Rush Kesler (PDF version) Duncan Sands (Fortran, Elaborate_All) Erik Sigra (Automake) Talk with the author at [email protected] (remove the "-nospam"). Hosted by PegaSoft Canada. Special thanks to the Ada Linux Team. file:///G|/Linux/http-www.vaxxine.com-pegasoft-people-html/book/book.html (1 of 10) [7/20/2001 11:22:56 AM] The Big Book of Linux Ada Programming Table of Contents i. Preface 1 Introduction 1.1 A Brief History of Linux 1.2 1995: The Year of Ada and Gnat 1.3 Why use Ada? 1.4 Why Ada and Linux? 1.5 Linux Ada Resources 2 Installing Gnat on Linux 2.1 Installing the ALT RPMs 2.2 Installing the ACT Binaries 2.3 Compiling Gnat from its Sources 2.4 Case Study: Installing Gnat 3.11 on over an old Linux Distribution 3 The Integrated Development Environments 3.1 TIA: The Console IDE 3.1.1 Quick Start 3.1.2 TIA Keyboard Legend 3.1.3 The File Menu 3.1.4 The Edit Menu 3.1.5 The Find Menu 3.1.6 The Misc Menu 3.1.7 The Project Menu 3.1.8 The ? Menu 3.2 GRASP-the X windows IDE 3.2.1 Installation 3.2.2 QuickStart 3.2.3 The Project Window 3.2.4 The Source File Window 3.2.5 The Button Bar 3.3 Other Tools and IDEs 3.3.1 VAD 3.3.2 Jessie 3.3.3 RAPID 3.3.3 VIDE 3.3.5 GLIDE file:///G|/Linux/http-www.vaxxine.com-pegasoft-people-html/book/book.html (2 of 10) [7/20/2001 11:22:56 AM] The Big Book of Linux Ada Programming 4 From Source Code to Executable 4.1 Gnat Filename Conventions 4.2 Writing Your First Ada Program 4.2.1 Writing a Program with an IDE 4.2.2 Writing a Program without an IDE 4.2.3 After Building 4.3 The Three Step Process 4.4 Gnat Compiling Options 4.4.1 Run-time Error Checking 4.4.2 Checking without Compiling 4.4.3 When you have Too Many Errors 4.5 Gnat Binding Options 4.6 Gnat Linking Options 4.7 Gnatmake Options 4.7.1 So you changed the comments ? 5 Building Large Projects 5.1 Make: the Traditional Project Builder 5.1.1 A Simple Ada Makefile 5.2 Cook: A Parallel Make 5.2.1 Cooking in Parallel 5.2.2 A Simple Ada Cookbook 5.3 Automake and Autoconf: UNIX Portability 6 Development Utilities 6.1 Saving Time with Gnatstub 6.2 Crossreferencing with Gnatxref 6.3 Eliminating Dead Code with Gnatelim 6.4 Execution Stack & Memory Leak Detection 6.5 Conditional Compiling with Gnatprep 6.6 Profiling with gprof 6.7 Shared Libraries Using GnatDLL 6.8 Source as Web Pages Using GnatHTML 6.9 GnatFIND file:///G|/Linux/http-www.vaxxine.com-pegasoft-people-html/book/book.html (3 of 10) [7/20/2001 11:22:56 AM] The Big Book of Linux Ada Programming 7 Optimizing Your Project 7.1 Compiler Optimization Options 7.2 Gnat Source Optimization Options 7.3 CPU Optimization Options 7.4 What Differnece Does Optimization Make? 7.5 Working with the Assmebly Source 8 Debugging Your Project 8.1 Limit and the Heap Size 8.2 The Debugging Pragmas 8.3 Identifying Files 8.4 Compiler Info with -gnatG 8.5 Floating Point Numbers 8.6 Gdb: The GNU Debugger 8.7 Code Restrictions 9 Team Development 9.1 Change Logs 9.2 RCS: Revision Control System 9.3 CVS: Concurrent Versions System 9.4 Creating Transcripts with Script 9.5 Timing Execution with Time 10 An Introduction to Ada 10.1 Your Main Program 10.2 Text_IO 10.3 Fundamental Data Types 10.4 Type Attributes 10.5 Operatiors and Expressions 10.6 Variable Declarations 10.7 New Types 10.7.1 Modular Types 10.7.2 Text_IO and New Types 10.8 Aggregate Types file:///G|/Linux/http-www.vaxxine.com-pegasoft-people-html/book/book.html (4 of 10) [7/20/2001 11:22:56 AM] The Big Book of Linux Ada Programming 10.9 Enumerated Types 10.10 Procedures and Function 10.11 Flow of Control 11 Advanced Ada Programming 11.1 Packages 11.2 Controlling Elaboration 11.2.1 First line of defense: Pure, Preelaborate and No_Elaboration_Code 11.2.2 Second line of defense: Elaborate, Elaborate_Body, Elaborate_All 11.2.3 Other Elaboration Pragmas 11.3 Objects 11.4 Objects with Automatic Initialization/Finalization 11.5 Multiple Inheritance 11.6 Private Objects 11.7 Generics 11.8 Exceptions 11.9 Dynamic Allocation 11.10 Callbacks 11.10.1 Storage Pools 11.10.2 Access Parameters 11.11 Multithreading 11.11.1 FSU vs. Native Threads 11.11.2 Tasks 11.11.3 Task Types 11.11.4 Protected Items/Types 11.12 Ada Text Streams 11.13 Pragmas 11.14 Low-Level Ada 12 Standard Gnat Packages 12.1 Standard String and Character Packages 12.2 Advanced Input/Output 12.2.1 GNAT.IO 12.2.2 GNAT.IO_Aux 12.3 Sequential_IO 12.4 Direct_IO 12.5 Formatted Output 12.6 Calendar Package file:///G|/Linux/http-www.vaxxine.com-pegasoft-people-html/book/book.html (5 of 10) [7/20/2001 11:22:56 AM] The Big Book of Linux Ada Programming 12.7 Tags Package 12.8 Tables 12.9 Hash Tables 12.10 Bubble and Heap Sorts 12.11 Regular Expressions 12.12 Advanced String Processing 12.13 GLADE Distributed Processing [not finished] 12.14 Basic Math Packages 12.15 Exception Handling and Traceback Packages 13 Linux Introduction 13.1 Introduction to Processes 13.1.1 Parents, Children and Families 13.1.2 Ownership and Permissions 13.2 Using System and OsLib.Spawn 13.3 The Linux Environment 13.4 Standard C Libraries 13.5 The Linux Kernel 13.5.1 Kernel Calls 13.5.2 Devices 13.5.3 Proc File System 13.5.4 AudioCD: An Example Program 13.6 Standard Input/Output/Error 13.8 Linux Binary Formats 13.9 Linux Libraries 13.10 Libc5, Libc6 and Upward Compatibility 13.11 Linux Basics 14 Linux Programming 14.1 Gnat OS Library 14.2 Installing Binding Packages 14.3 Catching Linux Signals 14.4 Working with the Command Line 14.4 Linux Environment Variables 14.6 GNAT.Directory_Operations Package 14.7 GNAT.Lock_Files Package file:///G|/Linux/http-www.vaxxine.com-pegasoft-people-html/book/book.html (6 of 10) [7/20/2001 11:22:56 AM] The Big Book of Linux Ada Programming 15 Free Ada Bindings 15.1 Using Florist, a POSIX binding 15.2 Using Texttools 15.2.1 Installation 15.2.2 Introduction 15.2.3 Package Overview 15.2.4 Window Overview 15.2.5 Other Useful Window Manager Subprograms 15.2.6 Alerts 15.2.7 Other Predefined Windows 15.2.8 Control Overview 15.2.9 OS Package 15.2.10 UserIO Overview 15.2.11 Appearance and Keys 15.3 Using Ncurses [not finished] 15.4 Using GTK+ Widgets [not finished] 15.5 Using Motif Widgets [not finished] 15.6 Using the TASH TCL Binding [not finished 15.7 Using the Mesa/OpenGL Binding [not finished] 15.8 Engine_3D [not finished] 16 Advanced Linux Programming 16.1 Writing Your Own Bindings 16.2 Linux Errors and Errno 16.3 The Linux Clock 16.3.1 Basic time functions 16.3.2 Timeval Calls - Microsecond Accuracy 16.3.3 Functions Using the tm Record 16.3.4 Time as a String 16.3.5 Timer Functions 16.4 Process Information 16.4.1 Ownership 16.4.2 Other Functions 16.5 Environment Variables 16.6 Multitasking 16.7 Linux File Operations 16.8 Opening and Closing Files 16.9 Directories file:///G|/Linux/http-www.vaxxine.com-pegasoft-people-html/book/book.html (7 of 10) [7/20/2001 11:22:56 AM] The Big Book of Linux Ada Programming 16.10 Stdio Files 16.11 Stdio Pipes 16.12 Memory Management 16.13 The Virtual Consoles 16.14 Making Database Queries 16.14.1 mySQL [not finished] 16.14.2 PostgreSQL [not finished] 16.15 Dynamic Loading [not finished] 16.16 A Word on Device Drivers 16.17 Linux Sound 16.17.1 Detecting a Sound Card 16.17.2 Playing Sound Samples 16.17.3 Using the Mixer 16.17.4 Recording Sound Samples [not finished] 16.18 Audio CDs 16.19 Kernel Pipes [not finished] 16.20 Shared Memory [not finished] 16.21 Message Queues [not finished] 16.22 Semaphores [not finished] 16.23 Sockets 16.24 Memory Management 16.25 Exit Procedures 17 Moving C Programs To Ada 17.1 c2ada: Translating Your Programs 17.2 Interfaces.C package 17.3 Interfaces.C.Pointers package 17.4 Interfaces.C_Streams package 17.5 Ada and C Files 17.6 A Word on Interfaces.Fortran 18 Data Structures 18.1 Using the Booch Components 18.1.1 Containers 18.1.2 Iterators 18.1.3 Single linked Lists 18.1.4 Double linked Lists 18.1.5 Bags file:///G|/Linux/http-www.vaxxine.com-pegasoft-people-html/book/book.html (8 of 10) [7/20/2001 11:22:56 AM] The Big Book of Linux Ada Programming 18.1.6 Sets 18.1.7 Collections 18.1.8 Queues 18.1.9 Stacks 18.1.10 Deques 18.1.11 Rings 18.1.12 Maps 18.1.13 Binary Trees 18.1.14 AVL Trees 18.1.15 Multiway Trees 18.1.16 Graphs 18.1.17 Smart Pointers 18.1.18 Booch Multithreading 19 Specialized Topics 19.1 Ada Meets Java 19.1.1 The Java Virtual Machine [unfinished] 19.1.2 JGNAT [unfinished] 19.2 ASIS [unfinished] 20 Developing Your Project 20.1 The Project Proposal 20.2 The Design Phase 20.3 The Development Phase 20.4 The Alpha/Beta Release 20.5 Releasing Your Software 20.5.1 A Third Party Library 20.6 Distribution Formats 20.6.1 RPM: Red Hat Package Manager [not finished] 20.6.2 TGZ Packages 20.6.3 TAR.BZ2 Packages 20.6.4 Other Formats 20.7 Man Pages 20.8 Linux Software Map Entry 20.9 Licensing Options Appendices file:///G|/Linux/http-www.vaxxine.com-pegasoft-people-html/book/book.html (9 of 10) [7/20/2001 11:22:56 AM] The Big Book of Linux Ada Programming Appendix A: The Linux Shell Appendix B: Linux Error Codes Appendix C: Linux Kernel Calls Appendix D: Signals Appendix E: Ioctl parameters Appendix F: Overview of Gnat Packages Glossary file:///G|/Linux/http-www.vaxxine.com-pegasoft-people-html/book/book.html (10 of 10) [7/20/2001 11:22:56 AM]
Description: