@database "gurubook-blurb.guide"

@author Ralph Babel
@(c) 1996 Ralph Babel
@$VER: gurubook-blurb.guide (22.3.96)

@node main "The Amiga Guru Book - Information"
@smartwrap
@{code}@{jcenter}                       @{b}THE AMIGA GURU BOOK@{ub}                       
                        @{b}a reference manual@{ub}                        
                          @{b}by Ralph Babel@{ub}                          

@{body}@{jleft}If you're an Amiga programmer, then by now you've probably heard
of the Amiga Guru Book, or - more likely - you already own a copy.
For the few still left in the dark, :-) here's a brief overview:@{par}

@{code}    @{" Blurb "        link blurb}
    @{" Contents "     link contents}
    @{" Reviews "      link reviews}
    @{" Distributors " link distributors}

@{body}Copyright © 1996 by Ralph Babel. Permission granted
to redistribute this file in unmodified form.
All other rights reserved.@{par}
@endnode

@node blurb "The Amiga Guru Book - Blurb"
@smartwrap
    The Amiga Guru Book is both an indispensable reference manual
and a text book. Containing many concise examples, ready-to-use
listings, and comprehensive tables, it presents fundamental
knowledge of the system that all Amiga programmers - regardless of
the programming language used - must have at their disposal and be
able to apply if they wish to create reliable and compatible
software. This includes: information about the data types
supported by the processor, the operating system, and the
compiler; guidelines for proper multitasking programming; the
meaning of Guru messages; and an introduction to the peculiarities
of C and assembly-language programming on the Amiga.@{par}

    Experienced C programmers will find information about ANSI C,
memory models, compiler specifics, and how to employ the special
features supported exclusively by Amiga C compilers so as to
create more efficient programs, as well as an overview of all
compiler and linker options, libraries, and much more for both
Aztec C and SAS/C.@{par}

    Included for advanced programmers are explanations of
amiga.lib, debugging techniques, and ROM-Wack, along with
overviews of the hard- and software memory map, the real-time
clock, and start-up diagnostics, as well as an in-depth look at
the programming of boot blocks and reset-protected programs.@{par}

    For AmigaDOS pros, this book reveals everything about the
dos.library, its error codes, the CLI and user shells, handlers
and packets, BCPL, the Global Vector, processes and their
creation, and the data structures employed by AmigaDOS. Special
features of this book include: the documentation of the structure
of executable files as well as the extended object module format,
and a thorough and easily understandable explanation of the
on-disk block layout of the Fast Filesystem (FFS).@{par}

    The book takes the recent developments in the Amiga's system
software into account and also pays attention to the peculiarities
of the MC68020/030/040 processors and of the MC68881/882
floating-point units. It is concluded by a glossary, a list of
recommended readings, and an extensive index.@{par}
@endnode

@node contents "Table of Contents"
    Preface                                                3
    Conventions                                            5
    Table of Contents                                      7
    Part I - @{b}Programming@{ub}
 1 @{" Data Types " link toc1}                                           27
 2 @{" Programming Guidelines " link toc2}                               39
 3 @{" Assembly-Language Programming " link toc3}                        89
 4 @{" Programming in C " link toc4}                                    109
 5 @{" SAS/C " link toc5}                                               127
 6 @{" Reference Charts for SAS/C and Aztec C " link toc6}              159
 7 @{" amiga.lib " link toc7}                                           177
 8 @{" Terminal Debugging " link toc8}                                  193
    Part II - @{b}System Internals@{ub}
 9 @{" Low-Level Hard- and Software Architecture " link toc9}           201
10 @{" Hooking in at Boot Time " link toc10}                             211
11 @{" Alerts, Gurus, and Traps " link toc11}                            243
    Part III - @{b}AmigaDOS@{ub}
12 @{" Legal Alien: AmigaDOS, the Englishman in the System " link toc12} 263
13 @{" The Console Handler " link toc13}                                 271
14 @{" The Command Line Interface " link toc14}                          297
15 @{" The AmigaDOS Filesystem " link toc15}                             353
16 @{" BCPL and the Global Vector " link toc16}                          377
17 @{" DOS Functions " link toc17}                                       385
18 @{" AmigaDOS Error Codes " link toc18}                                515
19 @{" AmigaDOS Data Structures " link toc19}                            535
20 @{" Forms of Program Execution " link toc20}                          563
21 @{" Packets and Handlers " link toc21}                                595
22 @{" The Format of Load and Object Modules " link toc22}               657
    Appendices
   @{" About Listings " link toc-listings}                                      685
    Glossary                                             697
    Bibliography                                         703
    Index                                                705
@endnode

@node toc1 "Chapter 1: Data Types"
1.1      Data types of the M68000 family           27
1.1.1    Internal representation of data           27
1.1.1.1  MC68000 and MC68010                       27
1.1.1.2  MC68020, MC68030, and MC68040             28
1.1.1.3  MC6888x and MC68040                       29
1.1.2    Arrangement of data in memory             31
1.2      Data types of the Amiga C compilers       32
1.2.1    Integer data types and pointers           32
1.2.2    Floating-point data types                 32
1.3      Data types of the Amiga operating system  33
1.3.1    Boolean data types and error tests        34
1.3.2    Floating-point calculations               35
1.3.2.1  Fast Floating-Point                       36
1.3.2.2  Amiga IEEE libraries                      36
1.3.2.3  IEEE compiler libraries                   36
1.3.2.4  MC6888x in-line code                      37
1.3.2.5  MC68040 floating-point in-line code       37
@endnode

@node toc2 "Chapter 2: Programming Guidelines"
2.1      General remarks                                        40
2.1.1    Public data structures                                 40
2.1.2    The stack                                              40
2.1.2.1  Determining the stack size                             41
2.1.2.2  Switching to a bigger stack                            42
2.1.3    System addresses, jumps into ROM,
         private data structures                                44
2.1.4    SetFunction()                                          45
2.2      Conventions for calling system functions               46
2.2.1    Register A6                                            46
2.2.2    Registers A0, A1, D0, and D1                           47
2.2.3    Results and status flags                               47
2.3      Resources and protective protocols                     48
2.3.1    Resources: claiming and relinquishing                  48
2.3.2    Common resource pairs                                  49
2.3.3    OpenLibrary()                                          53
2.3.4    The blitter                                            53
2.3.5    The audio hardware                                     54
2.3.6    The audio cut-off filter                               55
2.3.7    The battery-backed real-time clock                     55
2.3.8    The gameport.device                                    55
2.3.9    The disk.resource                                      56
2.3.10   The CIA timers                                         57
2.4      Types of memory                                        57
2.4.1    MEMF_CHIP                                              59
2.4.2    MEMF_FAST                                              60
2.4.3    MEMF_PUBLIC                                            60
2.4.4    MEMF_24BITDMA++                                        61
2.4.5    MEMF_LOCAL++                                           61
2.4.6    KickTag memory                                         62
2.5      System "constants"                                     62
2.5.1    NTSC and PAL                                           62
2.5.2    Screen and window dimensions                           63
2.5.3    Keymaps                                                64
2.5.4    Fonts                                                  64
2.6      Who may do what and when?                              64
2.6.1    Exec tasks                                             64
2.6.2    AmigaDOS processes                                     66
2.6.3    Task exceptions                                        67
2.6.4    Supervisor mode                                        67
2.6.5    Interrupts                                             68
2.6.6    Priority levels and the operating system               69
2.6.7    Traps and processor exceptions                         70
2.6.8    Forbid()/Permit(), Disable()/Enable(), and semaphores  70
2.7      Compatibility with other processors                    73
2.7.1    Delays and processor speed                             74
2.7.2    MOVE from SR and MOVE from CCR                         75
2.7.3    32-bit addresses                                       75
2.7.4    Exception vectors and the VBR                          77
2.7.5    The CLR instruction                                    78
2.7.6    Caching                                                78
2.7.6.1  Self-modifying code and the code cache                 78
2.7.6.2  Data caching, copyback, and DMA                        80
2.7.6.3  MC68030 and write-allocation                           81
2.7.7    CALLM and RTM                                          82
2.7.8    Memory management units                                82
2.7.9    Transparent translation                                83
2.7.10   Multiprocessor systems                                 83

Listing MoveVBRc.c                                              84
Listing MoveVBRa.a                                              86
Listing Makefiles (MoveVBR)                                     87
@endnode

@node toc3 "Chapter 3: Assembly-Language Programming"
3.1      FD files                           90
3.1.1    System modules                     90
3.1.2    The structure of FD files          91
3.1.2.1  ##base <base>                      91
3.1.2.2  ##bias <bias>                      91
3.1.2.3  ##private, ##public                92
3.1.2.4  ##end                              92
3.1.2.5  Function descriptors               92
3.2      Calling system functions           93
3.2.1    The structure of a library         93
3.3      Libraries and header files         94
3.3.1    Macros from "exec/types.i"         95
3.3.2    Macros for libraries and devices   98
3.3.3    Macros for initialization tables  100
3.3.4    Macros from "exec/lists.i"        100
3.3.5    Macros from "exec/string.i"       101
3.3.6    Macros from "exec/ables.i"        101
3.3.7    Other peculiarities               101

Listing QPrintF.h                          103
Listing QPrintF.a                          103
Listing Makefiles (QPrintF.o)              107
@endnode

@node toc4 "Chapter 4: Programming in C"
4.1    Requirements                                110
4.2    Programming                                 110
4.2.1  Standard C vs. Amiga C                      110
4.2.2  Accessing system libraries                  111
4.2.3  Devices with library-like function entries  113
4.3    Start-up code and compiler libraries        114
4.4    Header files                                116
4.5    Parameters from Workbench and CLI           122

Listing ArgsEcho.c                                 124
Listing Makefiles (ArgsEcho)                       126
@endnode

@node toc5 "Chapter 5: SAS/C"
5.1      ANSI C                                                127
5.1.1    The preprocessor                                      127
5.1.2    The keywords const and volatile                       130
5.1.3    Other changes                                         133
5.2      Internals of the SAS/C compiler                       135
5.2.1    Preprocessor symbols                                  135
5.2.2    Compiler-generated symbol references                  136
5.2.3    Memory models                                         136
5.2.3.1  Code models                                           138
5.2.3.2  Data models                                           138
5.2.4    The keywords __near, __far, and __huge                139
5.2.5    Other new keywords                                    140
5.2.6    In-line code                                          142
5.3      Parameters and results in C                           143
5.3.1    Results                                               143
5.3.2    __stdargs - passing parameters on the stack           143
5.3.3    __regargs - passing parameters in D0, D1, A0, and A1  144
5.3.4    __asm - passing parameters in specific registers      144
5.3.5    <stdarg.h> - passing a variable number of parameters  145
5.3.6    Combining C and assembly language                     146
5.4      Compilation                                           147
5.4.1    LC1 - from source code to the quads                   147
5.4.1.1  Preprocessor                                          147
5.4.1.2  Lexical analysis                                      148
5.4.1.3  Parsing (syntactical analysis)                        149
5.4.1.4  Checking (semantic analysis)                          149
5.4.1.5  Translation                                           149
5.4.2    Optimizing the code                                   150
5.4.3    LC2 - from the quads to the object module             150
5.4.4    BLink - tying up the loose ends                       150
5.4.5    Further optimizations                                 151
5.5      Two examples                                          151

Listing dalloc.c                                               153
Listing Makefiles (dalloc.o)                                   154
Listing HelloWorld.c                                           155
Listing HelloAmiga.c                                           155
Listing Makefiles (HelloWorld, HelloAmiga)                     156
Listing AmigaSieve.c                                           156
Listing Makefiles (AmigaSieve)                                 158
@endnode

@node toc6 "Chapter 6: Reference Charts for SAS/C and Aztec C"
6.1      Compiler and linker options            159
6.1.1    SAS/C 5.10b                            159
6.1.1.1  LC1 and LC1B - first phase (compiler)  160
6.1.1.2  LC2 - second phase (compiler)          163
6.1.1.3  LC - compiler driver                   164
6.1.1.4  BLink - linker                         166
6.1.2    Aztec C 5.2b                           168
6.1.2.1  CC 5.2b - first phase (compiler)       168
6.1.2.2  CC-3.6a-style options (deprecated)     171
6.1.2.3  AS - second phase (assembler)          172
6.1.2.4  LN - linker                            173
6.2      Predefined symbols                     174
6.2.1    SAS/C 5.10b                            174
6.2.2    BLink 5.10b                            174
6.2.3    Aztec C 5.2b                           175
6.3      Environment variables                  175
6.3.1    SAS/C 5.10b                            175
6.3.2    Aztec C 5.2b                           175
6.4      Libraries and such                     175
6.4.1    SAS/C 5.10b                            175
6.4.2    Aztec C 5.2b                           176
@endnode

@node toc7 "Chapter 7: amiga.lib"
7.1       Interface stubs                         177
7.2       ... the Universe and Everything         180
7.2.1     Exec support                            180
7.2.1.1   BeginIO()                               181
7.2.1.2   NewList()                               181
7.2.1.3   CreatePort()                            181
7.2.1.4   DeletePort()                            181
7.2.1.5   CreateStdIO()                           182
7.2.1.6   DeleteStdIO()                           182
7.2.1.7   CreateExtIO()                           182
7.2.1.8   DeleteExtIO()                           182
7.2.1.9   CreateTask()                            183
7.2.1.10  DeleteTask()                            183
7.2.2     I/O support                             184
7.2.2.1   fgetc()                                 184
7.2.2.2   getchar()                               184
7.2.2.3   fputc()                                 184
7.2.2.4   putchar()                               185
7.2.2.5   fputs()                                 185
7.2.2.6   puts()                                  185
7.2.2.7   fclose()                                185
7.2.2.8   sprintf(), fprintf(), printf()          185
7.2.3     Graphics support                        186
7.2.3.1   AddTOF()                                186
7.2.3.2   RemTOF()                                187
7.2.3.3   waitbeam()                              187
7.2.4     Integer support                         187
7.2.4.1   FastRand()                              188
7.2.4.2   RangeRand()                             188
7.2.5     FFP support                             188
7.2.6     Timer support                           188
7.2.6.1   TimeDelay()                             188
7.2.7     Symbols of the CIA registers            189
7.2.8     Symbols of the custom-chip registers    189
7.2.9     And for the assembly-language fans ...  191
@endnode

@node toc8 "Chapter 8: Terminal Debugging"
8.1    debug.lib and ddebug.lib                  194
8.1.1  KCmpStr()                                 194
8.1.2  KGetChar()                                195
8.1.3  KGetNum()                                 195
8.1.4  KMayGetChar()                             195
8.1.5  KPutFmt()/DPutFmt(), kprintf()/dprintf()  195
8.1.6  KPutChar()/DPutChar()                     196
8.1.7  KPutStr()/DPutStr()                       196
8.2    ROM-Wack                                  196
8.2.1  Single-key commands                       197
8.2.2  Command words                             197
@endnode

@node toc9 "Chapter 9: Low-Level Hard- and Software Architecture"
9.1    Hardware memory map                         203
9.2    Software memory map                         204
9.2.1  Absolute addresses of the operating system  204
9.2.2  Exception vectors                           204
9.2.3  Kickstart ROM                               205
9.3    The real-time clock                         207
9.4    Start-up diagnostics                        208
9.4.1  Boot ROM and Kickstart                      208
9.4.2  The keyboard                                210
@endnode

@node toc10 "Chapter 10: Hooking in at Boot Time"
10.1    Boot vectors (captures)        212
10.1.1  ColdCapture                    213
10.1.2  CoolCapture                    214
10.1.3  WarmCapture+                   214
10.2    KickTags and resident modules  214
10.2.1  The Resident structure         215
10.2.2  The Kickstart ROM              217
10.2.3  The cartridge ROM area         217
10.2.4  KickTags                       218
10.3    The boot block                 220

Listing KickList.c                     223
Listing Makefiles (KickList)           225
Listing AddKickMem.c                   226
Listing KickTags.h                     229
Listing KickTags.c                     230
Listing Makefiles (AddKickMem)         235
Listing Install2C.c                    235
Listing Install2A.a                    238
Listing Makefiles (Install2)           241
@endnode

@node toc11 "Chapter 11: Alerts, Gurus, and Traps"
11.1  Alerts                                  243
11.2  Gurus                                   245
11.3  Exception vectors of the M68000 family  251

Listing TrapTestC.c                           255
Listing TrapTestA.a                           257
Listing Makefiles (TrapTest)                  259
@endnode

@node toc12 "Chapter 12: Legal Alien: AmigaDOS, the Englishman in the System"
12.1  Components of Classic AmigaDOS  263
12.2  Origin of AmigaDOS              264
12.3  The legacy of BCPL              265
12.4  Object names                    266
@endnode

@node toc13 "Chapter 13: The Console Handler"
13.1    Stream names                               271
13.2    RAW, CON, and NEWCON                       272
13.2.1  CON and NEWCON                             272
13.2.2  RAW                                        275
13.2.3  ConMan                                     275
13.2.4  The current window                         276
13.3    Internals and programming techniques       276
13.3.1  Aborting a CLI program                     276
13.3.2  Line separators and the end of file (EOF)  277
13.3.3  Raw or cooked                              277
13.3.4  Console windows as you like them           278
13.4    Control codes in the input stream          280
13.4.1  Key codes                                  280
13.4.2  Raw RAW events                             281
13.5    Control codes in the output stream         285
13.5.1  Single-character control codes             287
13.5.2  Multi-character control codes              287

Listing ConWindowC.c                               288
Listing ConWindowA.a                               292
Listing Makefiles (ConWindow)                      294
@endnode

@node toc14 "Chapter 14: The Command Line Interface"
14.1      Starting a CLI                                  297
14.2      Characteristics of CLI and AmigaShell           298
14.3      Internal commands and CLI variables             300
14.4      Script files and environment variables          301
14.5      User shells                                     305
14.5.1    ShellInit.c: initialization and termination     305
14.5.2    Shell I/O streams                               307
14.5.3    UserShell.c                                     308
14.5.3.1  Processing the command line                     308
14.5.3.2  Finding and loading the command                 308
14.5.3.3  System1.c and System0.a: executing the command  309
14.5.3.4  EOF and Ctrl-D: input termination               310
14.5.4    Installation                                    311

Listing ShellInit.c                                       312
Listing UserShell.h                                       315
Listing UserShell.c                                       316
Listing Compat13.h                                        330
Listing Compat13.c                                        332
Listing TriposIO.a                                        338
Listing System1.c                                         340
Listing System0.a                                         342
Listing OverlayCLI.c                                      344
Listing System2.h                                         345
Listing System2.c                                         346
Listing Makefiles (UserShell, OverlayCLI)                 350
@endnode

@node toc15 "Chapter 15: The AmigaDOS Filesystem"
15.1      DOS-internals and programming aspects         353
15.2      History of the AmigaDOS filesystem            354
15.3      Block types used in the filesystem hierarchy  355
15.3.1    General remarks on the block structure        355
15.3.2    Strings in names and comments                 355
15.3.3    The root block                                356
15.3.3.1  Block types, T_SHORT, ST_ROOT                 356
15.3.3.2  Size of the hash table                        356
15.3.3.3  Checksum                                      356
15.3.3.4  Bitmap status                                 358
15.3.3.5  Pointers, bitmap, and the MountList           358
15.3.3.6  Pointer to the bitmap extension               358
15.3.3.7  Different types of dates                      358
15.3.3.8  Volume name                                   359
15.3.4    Directories and common attributes             359
15.3.4.1  ST_USERDIR block                              360
15.3.4.2  Pointer to own T_SHORT block                  360
15.3.4.3  Arrangement of the contents of directories    360
15.3.4.4  Flags                                         363
15.3.4.5  Comment                                       364
15.3.4.6  Name                                          364
15.3.4.7  Link chain                                    364
15.3.4.8  Hash chain                                    364
15.3.4.9  Parent directory                              364
15.3.5    Files and their components                    364
15.3.5.1  File headers                                  364
15.3.5.2  The supplement: extension blocks              366
15.3.5.3  Data blocks of the old filesystem             367
15.3.5.4  Data blocks of the FastFileSystem             368
15.3.6    Turning a tree into a graph: links            369
15.3.6.1  Hard links                                    369
15.3.6.2  Soft links                                    369
15.3.7    The bitmap                                    369
15.3.7.1  Checksum                                      369
15.3.7.2  Bit by bit                                    369
15.3.8    The bitmap extension                          373
15.3.9    Reserved blocks and boot blocks               373
15.4      An overview of all block types                374
@endnode

@node toc16 "Chapter 16: BCPL and the Global Vector"
16.1  »Strong typing is for people with weak memories«  377
16.2  Global Vector                                     379
16.3  Why the 1.3 Ed fails under 2.0                    380
16.4  The rest of the family tree                       380
16.5  A BCPL example: the CLI command MakeDir           381

Listing MakeDir.b                                       382
@endnode

@node toc17 "Chapter 17: DOS Functions"
17.1      The dos.library                     385
17.1.1    AbortPkt()++                        386
17.1.2    AddBuffers()++                      387
17.1.3    AddDosEntry()++                     387
17.1.4    AddPart()++                         388
17.1.5    AddSegment()++                      388
17.1.6    AllocDosObject()++                  389
17.1.7    AssignAdd()++                       391
17.1.8    AssignLate()++                      391
17.1.9    AssignLock()++                      392
17.1.10   AssignPath()++                      392
17.1.11   AttemptLockDosList()++              392
17.1.12   ChangeMode()++                      393
17.1.13   CheckSignal()++                     394
17.1.14   Cli()++                             394
17.1.15   CliInitNewcli()++                   395
17.1.16   CliInitRun()++                      395
17.1.17   Close()                             396
17.1.18   CompareDates()++                    396
17.1.19   CreateDir()                         397
17.1.20   CreateNewProc()++                   397
17.1.21   CreateProc()                        401
17.1.22   CurrentDir()                        404
17.1.23   DateStamp()                         406
17.1.24   DateToStr()++                       407
17.1.25   Delay()                             408
17.1.26   DeleteFile()                        408
17.1.27   DeleteVar()++                       409
17.1.28   DeviceProc()                        409
17.1.29   DoPkt()++                           411
17.1.30   DupLock()                           411
17.1.31   DupLockFromFH()++                   412
17.1.32   EndNotify()++                       412
17.1.33   ErrorReport()++                     412
17.1.34   ExAll()++                           414
17.1.35   Examine()                           417
17.1.36   ExamineFH()++                       420
17.1.37   Execute()                           420
17.1.38   Exit()                              422
17.1.39   ExNext()                            422
17.1.40   Fault()++                           423
17.1.41   FGetC()++                           424
17.1.42   FGets()++                           425
17.1.43   FilePart()++                        426
17.1.44   FindArg()++                         426
17.1.45   FindCliProc()++                     427
17.1.46   FindDosEntry()++                    428
17.1.47   FindSegment()++                     428
17.1.48   FindVar()++                         429
17.1.49   Flush()++                           430
17.1.50   Format()++                          431
17.1.51   FPutC()++                           432
17.1.52   FPuts()++                           432
17.1.53   FRead()++                           432
17.1.54   FreeArgs()++                        433
17.1.55   FreeDeviceProc()++                  433
17.1.56   FreeDosEntry()++                    434
17.1.57   FreeDosObject()++                   434
17.1.58   FWrite()++                          434
17.1.59   GetArgStr()++                       435
17.1.60   GetConsoleTask()++                  435
17.1.61   GetCurrentDirName()++               435
17.1.62   GetDeviceProc()++                   436
17.1.63   GetFileSysTask()++                  438
17.1.64   GetProgramDir()++                   438
17.1.65   GetProgramName()++                  439
17.1.66   GetPrompt()++                       439
17.1.67   GetVar()++                          440
17.1.68   Info()                              440
17.1.69   Inhibit()++                         444
17.1.70   Input()                             445
17.1.71   InternalLoadSeg()++                 445
17.1.72   InternalUnLoadSeg()++               446
17.1.73   IoErr()                             447
17.1.74   IsFileSystem()++                    447
17.1.75   IsInteractive()                     448
17.1.76   LoadSeg()                           448
17.1.77   Lock()                              449
17.1.78   LockDosList()++                     450
17.1.79   LockRecord()++                      451
17.1.80   LockRecords()++                     452
17.1.81   MakeDosEntry()++                    453
17.1.82   MakeLink()++                        453
17.1.83   MatchEnd()++                        454
17.1.84   MatchFirst()++                      454
17.1.85   MatchNext()++                       456
17.1.86   MatchPattern()++                    458
17.1.87   MatchPatternNoCase()++              458
17.1.88   MaxCli()++                          458
17.1.89   NameFromFH()++                      459
17.1.90   NameFromLock()++                    459
17.1.91   NewLoadSeg()++                      460
17.1.92   NextDosEntry()++                    460
17.1.93   Open()                              461
17.1.94   OpenFromLock()++                    463
17.1.95   Output()                            464
17.1.96   ParentDir()                         464
17.1.97   ParentOfFH()++                      465
17.1.98   ParsePattern()++                    465
17.1.99   ParsePatternNoCase()++              467
17.1.100  PathPart()++                        467
17.1.101  PrintFault()++                      468
17.1.102  PutStr()++                          468
17.1.103  Read()                              468
17.1.104  ReadArgs()++                        469
17.1.105  ReadItem()++                        473
17.1.106  ReadLink()++                        475
17.1.107  Relabel()++                         478
17.1.108  RemAssignList()++                   478
17.1.109  RemDosEntry()++                     479
17.1.110  RemSegment()++                      479
17.1.111  Rename()                            479
17.1.112  ReplyPkt()++                        480
17.1.113  RunCommand()++                      480
17.1.114  SameDevice()++                      481
17.1.115  SameLock()++                        481
17.1.116  Seek()                              482
17.1.117  SelectInput()++                     483
17.1.118  SelectOutput()++                    484
17.1.119  SendPkt()++                         484
17.1.120  SetArgStr()++                       484
17.1.121  SetComment()                        485
17.1.122  SetConsoleTask()++                  485
17.1.123  SetCurrentDirName()++               486
17.1.124  SetFileDate()++                     486
17.1.125  SetFileSize()++                     486
17.1.126  SetFileSysTask()++                  487
17.1.127  SetIoErr()++                        487
17.1.128  SetMode()++                         488
17.1.129  SetProgramDir()++                   489
17.1.130  SetProgramName()++                  489
17.1.131  SetPrompt()++                       489
17.1.132  SetProtection()                     490
17.1.133  SetVar()++                          493
17.1.134  SetVBuf()++                         493
17.1.135  SplitName()++                       494
17.1.136  StartNotify()++                     496
17.1.137  StrToDate()++                       499
17.1.138  StrToLong()++                       500
17.1.139  SystemTagList()++                   500
17.1.140  UnGetC()++                          503
17.1.141  UnLoadSeg()                         503
17.1.142  UnLock()                            504
17.1.143  UnLockDosList()++                   504
17.1.144  UnLockRecord()++                    504
17.1.145  UnLockRecords()++                   505
17.1.146  VFPrintf()++                        505
17.1.147  VFWritef()++                        506
17.1.148  VPrintf()++                         506
17.1.149  WaitForChar()                       507
17.1.150  WaitPkt()++                         508
17.1.151  Write()                             508
17.1.152  WriteChars()++                      509
17.1.153  Undocumented dos.library functions  509
17.2      The expansion.library               510
17.2.1    AddBootNode()++                     510
17.2.2    AddDosNode()                        512
17.2.3    MakeDosNode()                       512
@endnode

@node toc18 "Chapter 18: AmigaDOS Error Codes"
18.1     Official error codes                  515
18.1.1   ERROR_NO_FREE_STORE (103)             515
18.1.2   ERROR_TASK_TABLE_FULL (105)           516
18.1.3   ERROR_BAD_TEMPLATE (114)++            516
18.1.4   ERROR_BAD_NUMBER (115)++              516
18.1.5   ERROR_REQUIRED_ARG_MISSING (116)++    516
18.1.6   ERROR_KEY_NEEDS_ARG (117)++           516
18.1.7   ERROR_TOO_MANY_ARGS (118)++           516
18.1.8   ERROR_UNMATCHED_QUOTES (119)++        516
18.1.9   ERROR_LINE_TOO_LONG (120)             517
18.1.10  ERROR_FILE_NOT_OBJECT (121)           517
18.1.11  ERROR_INVALID_RESIDENT_LIBRARY (122)  517
18.1.12  ERROR_NO_DEFAULT_DIR (201)            517
18.1.13  ERROR_OBJECT_IN_USE (202)             517
18.1.14  ERROR_OBJECT_EXISTS (203)             517
18.1.15  ERROR_DIR_NOT_FOUND (204)             518
18.1.16  ERROR_OBJECT_NOT_FOUND (205)          518
18.1.17  ERROR_BAD_STREAM_NAME (206)           518
18.1.18  ERROR_OBJECT_TOO_LARGE (207)          518
18.1.19  ERROR_ACTION_NOT_KNOWN (209)          518
18.1.20  ERROR_INVALID_COMPONENT_NAME (210)    518
18.1.21  ERROR_INVALID_LOCK (211)              519
18.1.22  ERROR_OBJECT_WRONG_TYPE (212)         519
18.1.23  ERROR_DISK_NOT_VALIDATED (213)        519
18.1.24  ERROR_DISK_WRITE_PROTECTED (214)      519
18.1.25  ERROR_RENAME_ACROSS_DEVICES (215)     519
18.1.26  ERROR_DIRECTORY_NOT_EMPTY (216)       520
18.1.27  ERROR_TOO_MANY_LEVELS (217)           520
18.1.28  ERROR_DEVICE_NOT_MOUNTED (218)        520
18.1.29  ERROR_SEEK_ERROR (219)                520
18.1.30  ERROR_COMMENT_TOO_BIG (220)           520
18.1.31  ERROR_DISK_FULL (221)                 521
18.1.32  ERROR_DELETE_PROTECTED (222)          521
18.1.33  ERROR_WRITE_PROTECTED (223)           521
18.1.34  ERROR_READ_PROTECTED (224)            521
18.1.35  ERROR_NOT_A_DOS_DISK (225)            521
18.1.36  ERROR_NO_DISK (226)                   521
18.1.37  ERROR_NO_MORE_ENTRIES (232)           522
18.1.38  ERROR_IS_SOFT_LINK (233)++            522
18.1.39  ERROR_OBJECT_LINKED (234)++           522
18.1.40  ERROR_BAD_HUNK (235)++                522
18.1.41  ERROR_NOT_IMPLEMENTED (236)++         522
18.1.42  ERROR_RECORD_NOT_LOCKED (240)++       522
18.1.43  ERROR_LOCK_COLLISION (241)++          522
18.1.44  ERROR_LOCK_TIMEOUT (242)++            523
18.1.45  ERROR_UNLOCK_ERROR (243)++            523
18.1.46  ABORT_BUSY (288)                      523
18.1.47  ABORT_DISK_ERROR (296)                523
18.1.48  ERROR_BUFFER_OVERFLOW (303)++         523
18.1.49  ERROR_BREAK (304)++                   523
18.1.50  ERROR_NOT_EXECUTABLE (305)++          524
18.2     Other error codes                     524

Listing PathName.c                             525
Listing Makefiles (PathName)                   528
Listing SimpleDir.c                            529
Listing Makefiles (SimpleDir)                  533
@endnode

@node toc19 "Chapter 19: AmigaDOS Data Structures"
19.1      Basic information                             536
19.1.1    The BCPL pointer (BPTR)                       536
19.1.2    The BCPL string (BSTR)                        536
19.1.3    DOS boolean                                   537
19.1.4    Odds and ends                                 537
19.1.5    Getting access to AmigaDOS                    537
19.2      For advanced programmers                      537
19.3      Local data structures                         538
19.3.1    DOS memory segments                           538
19.3.2    SegLists                                      538
19.3.2.1  SegLists with resident libraries+             539
19.3.2.2  SegLists with overlays                        539
19.3.3    FileLocks                                     540
19.3.3.1  What is a lock?                               540
19.3.3.2  Why is a lock called a lock?                  540
19.3.3.3  Structure of a lock                           541
19.3.3.4  Comparing two locks                           542
19.3.3.5  The three internal types of locks             542
19.3.4    FileHandles                                   544
19.4      Global data structures                        545
19.4.1    The DosLibrary structure                      545
19.4.2    The RootNode structure                        547
19.4.3    The DosInfo structure                         549
19.4.4    The DOS resident list                         550
19.4.5    Brief summary                                 551
19.4.6    The DosList structure                         551
19.4.7    The jump table of the dos.library             557
19.5      expansion.library, filesystems, and AmigaDOS  558
19.5.1    The FileSysStartupMsg structure               558
19.5.2    The environment vector                        559
@endnode

@node toc20 "Chapter 20: Forms of Program Execution"
20.1      Processes                              563
20.1.1    The process ID                         570
20.1.2    The CommandLineInterface structure     571
20.2      Program start-up and termination       573
20.2.1    CLI programs                           573
20.2.1.1  CLI assembly-language interface        573
20.2.1.2  CLI C interface                        575
20.2.1.3  CLI BCPL interface                     576
20.2.2    Workbench programs                     576
20.2.2.1  Workbench assembly-language interface  576
20.2.2.2  Workbench C interface                  577
20.3      A sample start-up code: GuruStartup.a  577

Listing GuruStartup.a                            580
Listing Makefiles (GuruStartup.o)                588
Listing WbRun.c                                  589
Listing Makefiles (WbRun)                        594
@endnode

@node toc21 "Chapter 21: Packets and Handlers"
21.1       Packets                                  595
21.2       Standard packet types                    597
21.2.1     FileHandle  packets                      597
21.2.1.1   ACTION_FIND#?                            598
21.2.1.2   ACTION_END                               600
21.2.1.3   ACTION_READ                              601
21.2.1.4   ACTION_WRITE                             601
21.2.1.5   ACTION_SEEK                              601
21.2.1.6   ACTION_CURRENT_VOLUME                    602
21.2.1.7   ACTION_SET_FILE_SIZE++                   603
21.2.1.8   ACTION_LOCK_RECORD++                     603
21.2.1.9   ACTION_FREE_RECORD++                     604
21.2.2     Filesystem and FileLock packets          604
21.2.2.1   ACTION_LOCATE_OBJECT                     604
21.2.2.2   ACTION_FREE_LOCK                         605
21.2.2.3   ACTION_COPY_DIR                          605
21.2.2.4   ACTION_PARENT                            606
21.2.2.5   ACTION_SAME_LOCK++                       606
21.2.2.6   ACTION_CREATE_DIR                        607
21.2.2.7   ACTION_CHANGE_MODE++                     607
21.2.2.8   ACTION_FH_FROM_LOCK++                    607
21.2.2.9   ACTION_COPY_DIR_FH++                     608
21.2.2.10  ACTION_PARENT_FH++                       608
21.2.2.11  ACTION_EXAMINE_OBJECT                    608
21.2.2.12  ACTION_EXAMINE_NEXT                      609
21.2.2.13  ACTION_EXAMINE_FH++                      610
21.2.2.14  ACTION_EXAMINE_ALL++                     611
21.2.3     Other filesystem packets                 611
21.2.3.1   ACTION_DELETE_OBJECT                     611
21.2.3.2   ACTION_RENAME_OBJECT                     612
21.2.3.3   ACTION_MAKE_LINK++                       612
21.2.3.4   ACTION_READ_LINK++                       613
21.2.3.5   ACTION_SET_COMMENT                       614
21.2.3.6   ACTION_SET_DATE                          614
21.2.3.7   ACTION_SET_PROTECT                       615
21.2.3.8   ACTION_INFO                              615
21.2.3.9   ACTION_RENAME_DISK                       615
21.2.3.10  ACTION_INHIBIT                           616
21.2.3.11  ACTION_FORMAT++                          617
21.2.3.12  ACTION_SERIALIZE_DISK++                  618
21.2.3.13  ACTION_GET_DISK_FSSM                     618
21.2.3.14  ACTION_FREE_DISK_FSSM                    619
21.2.3.15  ACTION_MORE_CACHE                        620
21.2.3.16  ACTION_WRITE_PROTECT                     620
21.2.3.17  ACTION_IS_FILESYSTEM++                   621
21.2.3.18  ACTION_ADD_NOTIFY++                      621
21.2.3.19  ACTION_REMOVE_NOTIFY++                   623
21.2.4     Console packets                          623
21.2.4.1   ACTION_WAIT_CHAR                         623
21.2.4.2   ACTION_SCREEN_MODE                       624
21.2.4.3   ACTION_CHANGE_SIGNAL++                   624
21.2.4.4   ACTION_DOUBLE                            625
21.2.4.5   ACTION_FORCE                             626
21.2.4.6   ACTION_STACK                             626
21.2.4.7   ACTION_QUEUE                             627
21.2.4.8   ACTION_DROP                              627
21.2.5     Other external packets                   627
21.2.5.1   ACTION_NIL                               627
21.2.5.2   ACTION_DIE                               628
21.2.5.3   ACTION_FLUSH                             628
21.2.5.4   ACTION_DISK_INFO                         629
21.2.6     Private, internal, and obsolete packets  629
21.2.7     All packets in numerical order           630
21.3       Asynchronous packets                     630
21.4       Handlers                                 632
21.4.1     Mount                                    633
21.4.2     Handler structure and start-up message   633
21.4.3     Handler port, DOS calls, and locking     635
21.4.4     Volume nodes and Workbench               636
21.4.5     Object names and locks                   637

Listing ASynCopy.c                                  639
Listing Makefiles (ASynCopy)                        643
Listing ComHandler.c                                643
Listing Makefiles (ComHandler)                      649
Listing UnMount.c                                   650
Listing Makefiles (UnMount)                         655
@endnode

@node toc22 "Chapter 22: The Format of Load and Object Modules"
22.1       Hunks and blocks                              658
22.2       Load modules and executables                  659
22.2.1     HUNK_HEADER                                   659
22.2.2     HUNK_CODE                                     660
22.2.3     HUNK_DATA                                     661
22.2.4     HUNK_BSS                                      661
22.2.5     HUNK_RELOC32                                  661
22.2.6     HUNK_RELOC32SHORT++                           662
22.2.7     HUNK_END                                      663
22.2.8     Other block types used in load modules        663
22.2.9     Resident libraries+                           663
22.2.10    Overlays                                      664
22.2.10.1  Nodes                                         664
22.2.10.2  HUNK_HEADER revisited                         665
22.2.10.3  HUNK_OVERLAY                                  666
22.2.10.4  Layout of the overlay table                   666
22.2.10.5  HUNK_BREAK                                    667
22.2.10.6  LoadSeg()  for overlays                       667
22.2.10.7  The overlay supervisor                        668
22.3       Object modules and linked libraries           671
22.3.1     HUNK_UNIT                                     672
22.3.2     HUNK_CODE, HUNK_DATA, and HUNK_BSS revisited  672
22.3.3     HUNK_NAME                                     673
22.3.4     HUNK_RELOC16 and HUNK_RELOC8                  674
22.3.5     HUNK_EXT                                      674
22.3.6     HUNK_SYMBOL                                   677
22.3.7     HUNK_DEBUG                                    677
22.4       BLink extensions                              678
22.4.1     Base-relative addressing (small data model)   678
22.4.2     Pure executables                              679
22.4.3     Library indexing                              679
22.4.3.1   HUNK_LIB                                      680
22.4.3.2   HUNK_INDEX                                    680
@endnode

@node toc-listings "Appendix: About Listings"
Listing checklib.h            687
Listing checklib.c            688
Listing checksum.c            693
Listing Makefiles (checksum)  695
@endnode

@node reviews "The Amiga Guru Book - Reviews"
@smartwrap
What the critics said about the Amiga Guru Book:@{par}

@{code}    @{" Heiko Rath, comp.sys.amiga.reviews " link us-csar1}
    @{" Thomas Bätzler & Markus Illenseer, comp.sys.amiga.reviews " link us-csar2}
    @{" Amiga-Magazin (Germany) " link us-amigamagazin}
    @{" JAM - Just Amiga Monthly (UK) " link us-jam40}
    @{" Amiga Magazine (Italy) " link us-amigamagazine}
    @{" Michael B. Smith, comp.sys.amiga.misc " link us-mbs}
    @{" Franz-Josef Reichert, Amiga-Plus (Germany) " link us-amigaplus}
    @{" Eddy Carroll, JAM (UK) " link us-jam43}
    @{" Amiga Special (Germany) " link us-amigaspecial}
    @{" Cédric Beust, AmigaNews (France) " link us-amiganews}
    @{" Boyd Edmondson, BIX " link us-edmondson}
    @{" Andreas M. Kirchwitz, de.comp.sys.amiga.tech " link us-kirchwitz}
    @{" Arno Eigenwillig, comp.sys.amiga.programmer " link us-eigenwillig}
    @{" Heinz Wrobel, comp.sys.amiga.programmer " link us-wrobel}
    @{" c't (Germany) " link us-ct}
    @{" Dan E. Babcock, comp.sys.amiga.programmer " link us-babcock}
    @{" Ingo Wilken, comp.sys.amiga.programmer " link us-wilken}
    @{" James Cooper, comp.sys.amiga.programmer " link us-cooper}
    @{" Doug Walker, comp.sys.amiga.programmer " link us-walker}
    @{" Oliver Kastl, de.comp.sys.amiga.misc " link us-kastl}
    @{" John Hendrikx, comp.sys.amiga.programmer " link us-hendrikx}
    @{" Bernhard Möllemann, de.comp.sys.amiga.tech " link us-moellemann}
    @{" Bernhard Fastenrath, comp.sys.amiga.programmer " link us-fastenrath}
    @{" Avi Lev, comp.sys.amiga.programmer " link us-lev}

@{body}The following reviews refer to "Das Amiga-Guru-Buch",
the German-language predecessor published in 1989:@{par}

@{code}    @{" Amiga Special " link de-amigaspecial}
    @{" Kickstart " link de-kickstart}
    @{" Amiga-Magazin " link de-amigamagazin}
    @{" c't " link de-ct}
    @{" Amiga-DOS " link de-amigados}
@endnode

@node us-csar1 "Heiko Rath, comp.sys.amiga.reviews"
@smartwrap
@{lindent 1}@{pari -1}»There are many useful bits and pieces about the OS that you'd
have a hard time finding anywhere else. [...] It comes with a
31-page index, so it's very easy to find a particular subject.
Obviously, the TeX typesetting system was used in preparing the
book and it really shows. There's just one description of the
quality: excellent. [...] It is more fun than the Amiga ROM Kernel
and Hardware Reference manuals and has a better form factor.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Heiko Rath, @{" comp.sys.amiga.reviews " link ftp-csar1}, 3 December 1993@{par}
@endnode

@node ftp-csar1 "Heiko Rath, comp.sys.amiga.reviews, FTP"
@smartwrap
Full review available via ftp:@{par}

@{code}  Host name: math.uh.edu [129.7.128.1]
  Directory: /pub/Amiga/comp.sys.amiga.reviews/other-reviews/books
  File name: GuruBook (10294 bytes)

@{body}Or send mail to <amiga-reviews-requests\@math.uh.edu>.@{par}

It is also included on the latest Fish CD in the directory
»FreshFish-Vol10:Useful/reviews/other-reviews/books«.@{par}

The review was reprinted in Amiga-Report 2.04, which can be found
on Aminet and its mirrors, e.g.:@{par}

@{code}  Host name: ftp.wustl.edu [128.252.135.4]
  Directory: /pub/aminet/text/mags
  File name: ar204.lha (61464 bytes)
@endnode

@node us-csar2 "Thomas Bätzler & Markus Illenseer, comp.sys.amiga.reviews"
@smartwrap
@{lindent 1}@{pari -1}»The Amiga Guru Book is probably the ultimate programming
reference for the Amiga. [...] The level of accuracy and detail
maintained throughout the book is amazing. [...] There have been
many other attempts to write reference books for the Amiga, but
not a single one matches the Amiga Guru Book in the richness of
detail and depth of background. [...] Along with the ROM Kernel
Manuals, The Amiga Guru Book is one of the essential reference
works every serious Amiga programmer should own. [...] if you need
in-depth information on the workings and usage of the OS and
especially AmigaDOS, this book is a must. With more than 700
pages, it sets the new standard for quality in Amiga references.
[...] 5 stars out of 5.«@{pard}@{par}

@{code}
--- Thomas Bätzler & Markus Illenseer,
    @{" comp.sys.amiga.reviews " link ftp-csar2}, 3 December 1993
@endnode

@node ftp-csar2 "Thomas Bätzler & Markus Illenseer, comp.sys.amiga.reviews, FTP"
@smartwrap
Full review available via ftp:@{par}

@{code}  Host name: math.uh.edu [129.7.128.1]
  Directory: /pub/Amiga/comp.sys.amiga.reviews/other-reviews/books
  File name: GuruBook_2 (13243 bytes)

@{body}Or send mail to <amiga-reviews-requests\@math.uh.edu>.@{par}

It is also included on the latest Fish CD in the directory
»FreshFish-Vol10:Useful/reviews/other-reviews/books«.@{par}
@endnode

@node us-amigamagazin "Amiga-Magazin (Germany)"
@smartwrap
@{lindent 1}@{pari -1}»Kein gewissenhafter Programmierer kommt an diesem Buch vorbei:
als Lehr- und Referenzwerk von unschlagbarem Nutzen in der
täglichen Praxis, übersichtlich, kompakt und optimal gegliedert.
Insgesamt eine rundum empfehlenswerte Anschaffung ohne Reue.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Amiga-Magazin 12/1993, page 130@{par}
@endnode

@node us-jam40 "Just Amiga Monthly (UK)"
@smartwrap
@{lindent 1}@{pari -1}»Ralph is one of the most knowledgable Amiga experts there is and
his book has long been compulsory reading for all serious German
programmers. This revision has been rewritten from the ground up,
and because of the massive demand from non-German programmers it
has been translated into English.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Just Amiga Monthly #40 (January 1994), page 6 f.@{par}
@endnode

@node us-amigamagazine "Amiga Magazine (Italy)"
@smartwrap
@{lindent 1}@{pari -1}»La seconda sorpresa è l'Amiga Guru Book: uno splendido libro
scritto da Ralph Babel - un famoso programmatore Amiga che ha
collaborato anche con la GVP - che sviscera in più di 700 pagine
gli aspetti più oscuri (e peggio documentati) di Amiga. Il libro
è scritto in un elegantissimo inglese "europeo" e traboccante di
citazione di personaggi collegati ad Amiga e non.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Amiga Magazine 12/1993, page 22@{par}
@endnode

@node us-mbs "Michael B. Smith, comp.sys.amiga.misc"
@smartwrap
@{lindent 1}@{pari -1}»It's what the Bantam manual should have been.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Michael B. Smith, comp.sys.amiga.misc, 7 March 1994@{par}
@endnode

@node us-amigaplus "Franz-Josef Reichert, Amiga-Plus (Germany)"
@smartwrap
@{lindent 1}@{pari -1}»Wer sich diesem Thema bisher nur über Commodores hauseigene
Dokumentation "The AmigaDOS Manual" genähert hat, stellt
spätestens beim vergleichenden Studium der entsprechenden
Abschnitte im Guru-Buch fest, welchem Informationsdefizit er
bislang ausgesetzt war. Zu diesem leider schon traditionell
hoffnungslos unterdokumentierten Thema trägt das Guru-Buch nämlich
einiges bei: umfassende und korrekte Information, präzise Fakten
sowie Konzentration auf das Wesentliche. Mit gleichbleibender
Genauigkeit behandelt das Guru-Buch alles Wissenswerte zu den
Themen DOS-Handler und Packet-Interface, Programmausführung und
-umgebungen, Filesystem, Disk- und Binärfileformate, alle
Funktionen der DOS-Library sowie Fehlermeldungen und
Datenstrukturen.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Franz-Josef Reichert, Amiga-Plus 1/1994, page 72@{par}
@endnode

@node us-jam43 "Eddy Carroll, JAM (UK)"
@smartwrap
@{lindent 1}@{pari -1}»How refreshing to come across a new technical reference that is
not only detailed, accurate and comprehensive, but well-written
and entertaining as well. [...] In essence, this is a reference
guide which takes up where Commodore's ROM Kernel Manuals leave
off. [...] Although it weighs in at a hefty 736 pages, including
a comprehensive 30-page index, there is very little waffle, just
solid information on a range of topics hitherto confined to the
realm of black magic. [...] If you're serious about programming
your Amiga at the system level, or simply curious about how things
operate under the hood, you need this book.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Eddy Carroll, JAM #43 (April 1994), page 35 f.@{par}
@endnode

@node us-amigaspecial "Amiga Special (Germany)"
@smartwrap
@{lindent 1}@{pari -1}»Bei der mittlerweile großen Anzahl der Veröffentlichungen
zum Amiga sucht man vergeblich ein Werk, das es mit dem "Guru
Book" in Bezug auf Detailkenntnisse und Hintergrundwissen des
Autors aufnehmen kann. Es läßt sich nicht verkennen, daß der
Verfasser sein Fachgebiet voll und ganz beherrscht.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Amiga Special 4/1994, page 54 f.@{par}
@endnode

@node us-amiganews "Cédric Beust, AmigaNews (France)"
»J'ai aimé:
  - les citations humoristiques qui émaillent la lecture
  - les listings numérotés
  - les anecdotes sur l'histoire de l'Amiga
  - l'éventail impressionnant des connaissances
    de l'auteur sur l'Amiga
 Je regrette:
  - qu'il y ait si peu de pages :-)«

--- Cédric Beust, AmigaNews #67 (Avril 1994), page 16 f.
@endnode

@node us-edmondson "Boyd Edmondson, BIX"
@smartwrap
@{lindent 1}@{pari -1}»I just got through reading The Amiga Guru Book by Ralph Babel.
It is great. I highly recommend it!«@{pard}@{par}

@{lindent 4}@{pari -4}--- Boyd Edmondson, BIX, 20 May 1994@{par}
@endnode

@node us-kirchwitz "Andreas M. Kirchwitz, de.comp.sys.amiga.tech"
@smartwrap
@{lindent 1}@{pari -1}»Sobald man Amiga-DOS (ggf. noch etwas Exec) programmiert, kommt
man um das Guru-Book nicht herum. Ich behaupte mal ganz frech,
der Amiga ist auf diesem Level ohne Guru-Book nicht sinnvoll
nutzbar.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Andreas M. Kirchwitz, de.comp.sys.amiga.tech, 1 June 1994@{par}
@endnode

@node us-eigenwillig "Arno Eigenwillig, comp.sys.amiga.programmer"
@smartwrap
@{lindent 1}@{pari -1}»A book has been written with the intent to replace the DOS
Manual: Ralph Babel's Amiga Guru Book. It does not just surpass
the DOS Manual in all respects, it also addresses several other
shortcomings in the official documentation. GET IT!«@{pard}@{par}

@{lindent 4}@{pari -4}--- Arno Eigenwillig, comp.sys.amiga.programmer, 15 June 1994@{par}
@endnode

@node us-wrobel "Heinz Wrobel, comp.sys.amiga.programmer"
@smartwrap
@{lindent 1}@{pari -1}»Get Ralph Babel's 'The Amiga Guru Book'. It'll solve
pretty much all your DOS problems ever.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Heinz Wrobel, comp.sys.amiga.programmer, 31 July 1994@{par}
@endnode

@node us-ct "c't (Germany)"
@smartwrap
@{lindent 1}@{pari -1}»Mit Ralph Babels "The Amiga Guru Book" liegt den Neugierigen
nun eine regelrechte "Bibel" vor. Sie handelt indes nicht von
Glaubensfragen - sie vermittelt wertvolle Weisheiten bis in
die tiefsten Interna des Amiga-Betriebssystems hinein, wobei
der Schwerpunkt auf dem in anderen Publikationen eher schlecht
dokumentierten AmigaDOS liegt. In keiner anderen Literatur
werden die Themen mit ähnlicher Gründlichkeit behandelt. [...]
Der engagierte Amiga-Programmierer findet ein hervorragendes
Nachschlagewerk vor, dessen detaillierte Informationen ansprechend
präsentiert sind. Mein Urteil lautet: "Sehr empfehlenswert".«@{pard}@{par}

@{lindent 4}@{pari -4}--- c't 9/1994, page 266@{par}
@endnode

@node us-babcock "Dan E. Babcock, comp.sys.amiga.programmer"
@smartwrap
@{lindent 1}@{pari -1}»I love your _Guru Book_! It's wonderful.
If anyone is into the Amiga, buy it - period.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Dan E. Babcock, comp.sys.amiga.programmer, 1 December 1994@{par}
@endnode

@node us-wilken "Ingo Wilken, comp.sys.amiga.programmer"
@smartwrap
@{lindent 1}@{pari -1}»Get "The Amiga Guru Book" by Ralph Babel. It explains
devices/handlers and packets (and DOS stuff in general)
in great detail.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Ingo Wilken, comp.sys.amiga.programmer, 11 January 1995@{par}
@endnode

@node us-cooper "James Cooper, comp.sys.amiga.programmer"
@smartwrap
@{lindent 1}@{pari -1}»You shouldn't buy the Bantam book anyway. You should buy
Ralph Babel's "Amiga Guru Book" instead. Much more/better info.
Well worth the price.«@{pard}@{par}

@{lindent 4}@{pari -4}--- James Cooper, comp.sys.amiga.programmer, 13 January 1995@{par}
@endnode

@node us-walker "Doug Walker, comp.sys.amiga.programmer"
@smartwrap
@{lindent 1}@{pari -1}»Get Ralph Babel's Amiga Guru Book; it's the best, most current
documentation available on this sort of thing.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Doug Walker, comp.sys.amiga.programmer, 27 February 1995@{par}
@endnode

@node us-kastl "Oliver Kastl, de.comp.sys.amiga.misc"
@smartwrap
@{lindent 1}@{pari -1}»Das Bantam-DOS-Manual ist im Vergleich dazu ein Witz.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Oliver Kastl, de.comp.sys.amiga.misc, 8 July 1995@{par}
@endnode

@node us-hendrikx "John Hendrikx, comp.sys.amiga.programmer"
@smartwrap
@{lindent 1}@{pari -1}»I'd rather buy a book with some real info,
like the "Amiga Guru Book".«@{pard}@{par}

@{lindent 4}@{pari -4}--- John Hendrikx, comp.sys.amiga.programmer, 31 July 1995@{par}
@endnode

@node us-moellemann "Bernhard Möllemann, de.comp.sys.amiga.tech"
@smartwrap
@{lindent 1}@{pari -1}»Das Guru-Book von Ralph Babel ist die einzige öffentlich
verfügbare Quelle der Informationen, die nötig sind, um ein
komplettes FileSystem für den Amiga zu implementieren.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Bernhard Möllemann, de.comp.sys.amiga.tech, 10 August 1995@{par}
@endnode

@node us-fastenrath "Bernhard Fastenrath, comp.sys.amiga.programmer"
@smartwrap
@{lindent 1}@{pari -1}»The Guru Book was THE source of information for my
generic filesystem library, don't start without one.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Bernhard Fastenrath, comp.sys.amiga.programmer, 27 Dec 1995@{par}
@endnode

@node us-lev "Avi Lev, comp.sys.amiga.programmer"
@smartwrap
@{lindent 1}@{pari -1}»A better choice is to buy a very good book called "The Amiga Guru
Book", which won't only give you the knowledge you need to work on
the Amiga to do WHATEVER you want with it, but it'll show you
efficient ways to do it correctly, and it covers EVERYTHING about
the Amiga 2.04+ OS, so it's highly recommended. I have it, and
believe me: it's worth every dime.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Avi Lev, comp.sys.amiga.programmer, 26 February 1996@{par}
@endnode

@node de-amigaspecial "Das Amiga-Guru-Buch - Amiga Special"
@smartwrap
@{lindent 1}@{pari -1}»Endlich gibt es ein für jedermann zugängliches und preiswertes
Nachschlage- und Lehrwerk, in dem man sich über die richtige
Art, den Amiga "legal" zu programmieren, informieren kann: Das
Amiga-Guru-Buch. [...] Für den ernsthaften Programmierer ist
das Amiga-Guru-Buch ein unentbehrliches Nachschlagewerk und
eine ideale Ergänzung zur Neuausgabe der Reference Manuals
von Addison-Wesley. Lassen Sie es sich nicht entgehen.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Amiga Special 10/1989, pages 54-56@{par}
@endnode

@node de-kickstart "Das Amiga-Guru-Buch - Kickstart"
@smartwrap
@{lindent 1}@{pari -1}»Durch das ausführliche Inhaltsverzeichnis und
den großen Index eignet sich dies Werk wahrlich
als Nachschlagebuch für Extremsituationen.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Kickstart 10/1989, page 34@{par}
@endnode

@node de-amigamagazin "Das Amiga-Guru-Buch - Amiga-Magazin"
@smartwrap
@{lindent 1}@{pari -1}»Das Buch verfügt über eine Fülle von Informationen, die
man bislang vergeblich suchte. [...] Das Guru-Buch ist
für jeden Programmierer uneingeschränkt empfehlenswert.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Amiga-Magazin 11/1989, page 120@{par}
@endnode

@node de-ct "Das Amiga-Guru-Buch - c't"
@smartwrap
@{lindent 1}@{pari -1}»Na endlich! Dieses Buch ist der Hit für jeden
Amiga-Programmierer, der bisher über das rätselhafte DOS
des Amiga den Mut verlor, das Kochbuch-Deutsch der Werke
bekannter Verlage nicht mehr lesen will und obendrein Witz
und Ironie zu schätzen weiß. [...] Jedem, der ernsthaft
programmiert, sei dieses Werk wärmstens empfohlen.«@{pard}@{par}

@{lindent 4}@{pari -4}--- c't 11/1989, page 374 f.@{par}
@endnode

@node de-amigados "Das Amiga-Guru-Buch - Amiga-DOS"
@smartwrap
@{lindent 1}@{pari -1}»Insgesamt ist das Amiga-Guru-Buch ein echtes
Nachschlagewerk für den erfahrenen Programmierer.«@{pard}@{par}

@{lindent 4}@{pari -4}--- Amiga-DOS 1/1990, page 83@{par}
@endnode

@node distributors "The Amiga Guru Book - Distributors"
@smartwrap
Interested? The Amiga Guru Book is available from:@{par}

@{code}    @{" Ossowski " link ossowski}
    @{" Hirsch & Wolf " link hirsch}

@{body}If you have further questions regarding the Amiga Guru
Book, feel free to contact me directly. My preferred
e-mail address is <rbabel\@babylon.pfm-mainz.de>.
@endnode

@node ossowski "Stefan Ossowskis Schatztruhe"
Stefan Ossowskis Schatztruhe
Gesellschaft für Software mbH
Veronikastraße 33
D-45131 Essen
Germany
Voice: +49 (201) 788778
Fax:   +49 (201) 798447
E-Mail: <stefano\@tchest.e.eunet.de>
@endnode

@node hirsch "Hirsch & Wolf OHG"
@smartwrap
@{code}Hirsch & Wolf OHG
Mittelstraße 33
D-56564 Neuwied
Germany
Voice: +49 (2631) 8399-0
Fax:   +49 (2631) 8399-31

@{body}Hirsch & Wolf will also accept international orders.
Yes, they _do_ speak English. :-)@{par}
@endnode
