@database PatchWork.guide
@author "Richard Körber"
@(c) "1997 Richard Körber - all rights reserved"
@$VER: PatchWork.guide V0.6 (29.5.97)
@wordwrap

@Node Main "PatchWork: Table Of Contents"

           ####         #          #     #   #             #
           #   #        #          #     #   #             #
           #   #  ###  ####   ###  # ##  # # #  ###  # ##  #  #
           ####      #  #    #   # ##  # # # # #   # ##  # # #
           #      ####  #    #     #   # # # # #   # #     ##
           #     #   #  #  # #     #   # ## ## #   # #     # #
           #      ####   ##   #### #   # #   #  ###  #     #  #

                                                            V0.6


                             P R E R E L E A S E

                        ANYTHING IS SUBJECT TO CHANGE

__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

                          @{B}-- TABLE OF CONTENTS --@{UB}


        1.   @{" Introduction       " link Einleitung}  how it all started
        2.   @{" Features           " link Features}  of the program
        3.   @{" Copyright          " link Copyright}  distribution

        4.   @{" Usage              " link Usage}  important information!
        5.   @{" Output example     " link Output}  how to read a hit

        6    @{" How it works       " link Work}  technical details
        6.1. @{" exec.library       " link exec}  all patches
        6.2. @{" dos.library        " link dos}  all patches

        A.   @{" Address            " link Adresse}  of the author
        B.   @{" Known Bugs         " link Bugs}  and their workaround
        C.   @{" History            " link History}  all changes
        D.   @{" Future             " link Future}  my plans
        E.   @{" Credits            " link Credits}  Thank you!

__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

   PatchWork (C) 1997 Richard Körber -- All Rights Reserved -- FreeWare

@EndNode
@Node Einleitung "PatchWork: Introduction"

@{B} I N T R O D U C T I O N @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

PatchWork is another system debugging tool like Enforcer, Mungwall,
Poolwatch and so on. It also makes it's output to the debug port, so
you should use Sushi to read it, in case you haven't got a second
Amiga available...

Now, what does PatchWork do?

It all began when I read the exec.library autodocs and started to
wonder if all the warnings and restrictions mentioned in there are
really observed. There was no such tool available (at least I hope
so ;-), so I sat down and wrote a first test version of PatchWork.

I expected to see no single PatchWork hit, but I was wrong. There
are a lot of programs throwing PatchWork hits. Even modern programs!
So there really seemed to be a demand for that tool...

Well, then I constructed a real tool out of PatchWork. I added
better outputs (as known from e.g. Enforcer) and checked even more
restrictions. The result is what you have on your harddisk now.


Please note that this is only a pre-release. It is by far from
being complete, and I expect several bugs. But I want to know if
this tool is also useful for other programmers. If you like it,
please send me a small e-mail.


Remember: the future of PatchWork depends on @{B}YOU@{UB}!


                                                Richard Körber

@EndNode
@Node Features "PatchWork: Features"

@{B} F E A T U R E S @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

This are the features of PatchWork:

· Catches bad function calls from
        - exec.library
        - dos.library

· Full debug output, including registers, stack, PC and SegTracker.
  As you are used from Enforcer!

· Four different 'badness levels', minimum badness adjustable

@EndNode
@Node Copyright "PatchWork: Copyright"

@{B} C O P Y R I G H T @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

Please read the following parts carefully.

If you do not agree to these Copyright notes, you must delete this
archive and all related files.

__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B} COPYRIGHT @{UB}
@{B}===========@{UB}

   @{I}NOTE:@{UI} You accept the following terms by starting the software,
even for a test drive only.

   PatchWork is İ 1997 Richard Körber. All rights reserved.

   You only have the right to use the software, but no rights on
the software itself. Disassembling, resourcing and all other ways
of reverse engineering is forbidden.

   Place of court is Cologne/Germany.


@{B} FREEWARE @{UB}
@{B}----------@{UB}

   PatchWork is FreeWare. You are allowed to use the packet without
paying a fee or similar to the author. Of course I would appreciate
a small donor! ;-)


@{B} COPYING @{UB}
@{B}---------@{UB}

   You can copy the packet as long as it remains entire and unchanged.

   You are allowed to compress the packet using a customary compression
software (as lha, lzh, lzx, dms). You must not compress single files of
the packet (e.g. PowerPacker or Imploder).


@{B} DISTRIBUTION @{UB}
@{B}--------------@{UB}

   You must not exceed an usual price on the market for your working
and material. This means a maximum of 5 DM (or the equivalent amount
in other currencies) for disks and 35 DM for CD-ROMs containing a PD
software collection.

   I explicitly permit the distribution via AmiNet, Meeting Pearls,
Fred Fish and other well-known PD series.


@{B} LIABILITY @{UB}
@{B}-----------@{UB}

   You are using the program as it is, with all flaws, and on your
own risk! I grant no warranty for the software meeting a special
purpose. This software may cause financial damage or harm people.


@{B} LIMITATIONS @{UB}
@{B}-------------@{UB}

   You are not allowed to use this software and its results

     · for fascism or military purposes
     · if you do not agree to the copyright note

   In this case you must delete the software and all related and
generated files immediately!


@{B} CONTENTS OF THE PACKAGE @{UB}
@{B}-------------------------@{UB}

   The package is only entire with these files:

PatchWork/PatchWork             (Main program)
PatchWork/PatchWork.guide       (This documentation)
PatchWork.info
FILE_ID.DIZ

@EndNode
@Node Adresse "PatchWork: Address"

@{B} A D D R E S S @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

You can reach me through one of the following ways:

@{B} E MAIL @{UB}
@{B}--------@{UB}

   Use e-mails if ever possible. My address is:

        shred@chessy.aworld.de

   Please do not send mails larger than 40KB without prior permission.
If you should have serious trouble reaching me, check my web page for
other e-mail addresses.


@{B} SNAIL MAIL @{UB}
@{B}------------@{UB}

   If you do not have an e-mail account, you may also write a snail mail.
Include a preformatted floppy disk and sufficient stamps if you want to
get an update this way!

        Richard Körber
        Hornstraße 20
        51465 Bergisch Gladbach
        Germany


@{B} WORLD WIDE WEB @{UB}
@{B}----------------@{UB}

   Updates are available through my web page. URL:

        http://www.is-koeln.de/einwohner/shred


@{B} PRETTY GOOD PRIVACY @{UB}
@{B}---------------------@{UB}

   If you feel that way, you may also use PGP (note that the use of
PGP is restricted in some countries). My PGP public key is attached
below.

__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

Type Bits/KeyID    Date       User ID
pub  1024/3D5D331D 1997/01/08 Richard Koerber <shred@chessy.aworld.de>

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: 2.6.3i

mQCNAjLTMucAAAEEAOMY/3jzWBFV2Annpc6/VPhZQqF81btsqjyRR670uOELH+iO
PXkrXX7IEo1vtNbKAc/MKDkcn2p4g5159yK2OoZkoqFsCs1JXzFLVfAM41tvaNG0
RTibFJAYCZ03umli5q4EtCj1DCMMeZGzmyAO9mpfuyIC+k6qu/NEvrU9XTMdAAUR
tChSaWNoYXJkIEtvZXJiZXIgPHNocmVkQGNoZXNzeS5hd29ybGQuZGU+iQCVAwUQ
M0R4IfNEvrU9XTMdAQGe5gQAizTK/KmKymt5GtQQL1PW7m7tmZYBqglwtbSf7RBF
fnntdkyeTQvRlbfjSAKjMYD0ZV34JtjMPJrRifIF6J6abSMQ1xT8IrEpyV8JrRcW
Tjb4YEz+qEqo0Pj+l/87fqez1vUpTz19C5R5KNqHBk7/icCBGKuoLGtAmR6oifj4
PKc=
=GI6y
-----END PGP PUBLIC KEY BLOCK-----

@EndNode
@Node Bugs "PatchWork: Bugs"

@{B} B U G S @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B} KNOWN BUGS @{UB}
@{B}------------@{UB}

  · There will for sure be some bugs inside. Please help me find them
    to make PatchWork a reliable tool.


@{B} KNOWN ENFORCER/MUNGWALL/PATCHWORK HITS @{UB}
@{B}----------------------------------------@{UB}

  · none known yet...  :-)


@{B} BUGGY SOFTWARE WORKAROUNDS @{UB}
@{B}----------------------------@{UB}

  · AllocAbs() and OpenLibrary(...,0L) are suppressed, because they
    are still used too often. But I will implement them later!

  · CheckIO() and DoIO() disabled. I'm not sure yet if I should really
    dare to add them later, too!

__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

PatchWork is written and tested on:

** HARDWARE **

System:  Amiga 4000 (CPU=68060 FPU=68060 MMU=68060 VBR=0x08066378)
Chipset: AGA (RAMSEY F, GARY Normal)
AmigaOS: 3.0 (V39.106, SetPatch V43.4)   Exec V39.47   Workbench V39.29
Support: GraphicOS: CyberGraphX, AudioOS: AHI
Clock:   Power 50 Hz, VBlank 50 Hz, E-Clock 709379 Hz

Memory:           CHIP    FAST  TOTAL   ROM = 512KB     SLOW = 0
          PLAIN    2MB    26MB    28MB
        VIRTUAL      0       0       0
          TOTAL    2MB    26MB    28MB


** EXPANSIONS **

Nr ID      Address  Size Manufacturer         Product
----------------------------------------------------------------------------
 1 2140.22 40000000  64M Phase 5              CyberVision 64 Graphics
 2 2140.19 00EA0000 128K Phase 5              CyberStorm MK-II Flash ROM
 3 082C.10 00E90000  64K BSC                  Multiface II Multi I/O
 4 4754.0C 00EC0000  64K MacroSystem Germany  Toccata Audio
 5 4754.05 00ED0000  64K MacroSystem Germany  MaestroPro Audio


@{I}(This list has been made using Identify.)@{UI}

@EndNode
@Node History "PatchWork: History"

@{B} H I S T O R Y @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

V0.6    ğ (29. 5.1997)
        · ROMHITS implemented
V0.5    ğ (29. 5.1997)
        · dos.library tests implemented
V0.4    ğ (29. 5.1997)
        · Improved output using a new structure, showing library
          name, function parameters, badness level, cause
V0.3    ğ (28. 5.1997)
        · STACKLINES,SHOWPC,STACKCHECK,AREGCHECK,DREGCHECK added
        · Bugfix: bad Forbid() state recognition, works fine now
V0.2    ğ (28. 5.1997)
        · CopyMem(), CopyMemQuick() react on size==0
        · Permit() checks tdNestCnt
        · DEADLY implemented
V0.1    ğ (26. 5.1997)
        · First internal pre-release

@EndNode
@Node Credits "PatchWork: Credits"

@{B} C R E D I T S @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

I wish to thank these people:

  @{B} Frank Wille @{UB}        for PhxAss, the best FreeWare assembler available!

  @{B} Michael Sinz @{UB}       for Enforcer, SegTracker and his help for all the
                       bugfree Amiga software.

  @{B} Dietmar Eilert @{UB}     for his great Editor GoldEd.

__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

            //
        \\\\ //   -- Amiga - Cow inside --
         \\X/

@EndNode
@Node Future "PatchWork: Future"

@{B} F U T U R E @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

This is what I plan in future releases:

  · Fixing all bugs

  · Checking even more functions and also other libraries, e.g.
    graphics.library or intuition.library.

If you have some more ideas, just write! :-)

@EndNode
@Node Usage "PatchWork: Usage"

@{B} U S A G E @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B} REQUIREMENTS @{UB}
@{B}--------------@{UB}

  · AmigaOS 2.04 (V37) or higher (V36 won't work!)
  · A terminal connected to the internal serial port, or Sushi
  · SegTracker suggested

@{B} INSTALLATION @{UB}
@{B}--------------@{UB}

   Just copy PatchWork into your CLI path and this guide file into whereever
you store good documentations. ;)

   You should start PatchWork @{I}after@{UI} SetPatch and @{I}before@{UI} any SetFunction()
enhancer (e.g. PatchControl).

@{B} START @{UB}
@{B}-------@{UB}

   You must start PatchWork from the shell.

   PatchWork won't detach, so you should use "run <>NIL: PatchWork" if you
want to start it in the startup-sequence.

   You can always remove PatchWork by pressing <CTRL>-<C> or sending a
break.

@{B} SHELL PARAMETERS @{UB}
@{B}------------------@{UB}

@{B}LEVEL/K/N@{UB}       Set the minimal 'badness level' to be output. Defaults
                to 0. More about badness levels see below.

@{B}TINY/S@{UB}          Tiny output. Just show the cause of the hit.

@{B}SMALL/S@{UB}         Small output. Shows the cause of the hit and the PC,
                TCB and Task name.

@{B}STACKLINES/K/N@{UB}  Number of stack lines to be output. Each stack line
                consists of 32 stack bytes. There is no limit here!

@{B}STACKCHECK/S@{UB}    Check also all stack entries with SegTracker

@{B}SHOWPC/S@{UB}        Show 32 bytes around the current PC

@{B}AREGCHECK/S@{UB}     Check also the contents of the address registers
                with SegTracker.

@{B}DREGCHECK/S@{UB}     Check also the contents of the data registers with
                SegTracker.

@{B}ROMHITS/S@{UB}       Usually, all hits caused by the AmigaOS ROM will be
                suppressed. With this option set, they will also be shown.

@{B}DEADLY/S@{UB}        With this option set, some functions will return a worst
                case scenario return code instead of the real return code
                under certain conditions. See patch documentation below.

@{B} BADNESS LEVELS @{UB}
@{B}----------------@{UB}

   All hits are divided into four 'badness levels'. The higher the level,
the more probable is a system crash.

   0    Hits with level 0 won't crash the system. They are legal and
        absolutely harmless. The only function of level 0 hits are
        for mental notes, e.g. that a special OS version is required
        for the function or the way it is used.

   1    Hits with level 1 also won't crash the system, but they are
        ugly, obsoleted, needless or wasted system time. It is e.g.
        an "AllocMem(0)" or "OldOpenLibrary("...")".

   2    Hits with level 2 might crash the system, especially with
        multitasking interaction. This are e.g. FindPort()s without
        a prior Forbid(). You must not rely on a result you get from
        a level 2 hit! It has most probably already changed. If not,
        it is just luck, but nothing more...

        With the DEADLY option, some of the level 2 hits will try to
        crash your program by returning worst case return codes.

   3    Hits with level 3 will crash the system sooner or later. They
        are used @{B}against@{UB} the rules of AutoDocs, and thus will have
        insecure results. Or they will result in memory loss. In any
        way, they are used @{B}wrong@{UB}.

        Two examples: CopyMem() with overlapping memory areas, or
        DeleteMsgPort() without clearing up the message queue before.

   @{B}ANY@{UB} hit starting from level 1 is a real bad hit, and should be
removed if possible, to enhance system stability and future compatibility.

@EndNode
@Node Work "PatchWork: How it works"

@{B} H O W   I T   W O R K S @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

   That is easy peasy: PatchWork just patches some library functions.
If one of them is called, PatchWork checks the passed structures and
parameters and finds out if they meet the AutoDocs specifications.

   If one test should fail, you will be notified through the debug
channel, or through the Sushi output console.

   PatchWork is not made to protect the system from crashing. It won't
correct bad structures and parameters. It just reports what you forgot
and then leaves you alone with that mess.

   In fact, you can even try to crash your program by using the DEADLY
option.

   Note: we can discuss about anything, but not about something you
explicitely MUST or MUST NOT do regarding to the AutoDocs. The AutoDocs
are law! Even if it should work, it is simply wrong to break the rules,
and it will most probably fail in future releases!

@EndNode
@Node Output "PatchWork: Output example"

@{B} O U T P U T   E X A M P L E @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

   This is how a PatchWork hit looks like:

exec.library OldOpenLibrary("dos.library")
Badness 1: obsoleted, use OpenLibrary() instead
PC=08339720 TCB=08399D58 ("Shell Process")
Data: 00000001 020CE5C5 00004000 08350BA4 00000001 00000001 020CFF85 08339714
Addr: 08350BA4 08339732 08014E0C 08339714 084F3C08 00F92D70 0800083C 084F3BFC
----> 08339732 - "pwtest"  Hunk 0000, Offset 0000001A
----> 00F92D70 - "ROM - dos 39.23 (8.9.92)"  Hunk 0000, Offset 00000314
PC-8: 00000000 00000000 0833653C 00000000 00000030 00000000 43FA0018 2C780004
PC *: 4EAEFE68 22402C78 00044EAE FE627000 4E75646F 732E6C69 62726172 79004E71
Stck: 084F3BFC 08339724 00F9359C 00004000 0839A74C 08533B40 00001970 48E7303E
Stck: 24482649 61A66730 2C6A0018 206A0014 4EAEFF94 2848204B 610000B8 661C2449
----> 08339720 - "pwtest"  Hunk 0000, Offset 00000008
----> 08339724 - "pwtest"  Hunk 0000, Offset 0000000C
----> 00F9359C - "ROM - dos 39.23 (8.9.92)"  Hunk 0000, Offset 00000B40
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

   Now for the single lines:

   The first line contains what function caused the hit:
@{FG SHINE}
exec.library OldOpenLibrary("dos.library")@{FG FILL}
                            ^^^^^^^^^^^^^--- passed parameters
             ^^^^^^^^^^^^^^----------------- function name
^^^^^^^^^^^^-------------------------------- library name
@{FG TEXT}

   The second one describes the hit itself:
@{FG SHINE}
Badness 1: obsoleted, use OpenLibrary() instead@{FG FILL}
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^--- cause
^^^^^^^^^----------------------------------------- badness level
@{FG TEXT}

   (With the TINY option set, no more lines are displayed.)

   The third line locates the hit:
@{FG SHINE}
PC=08339720 TCB=08399D58 ("Shell Process")@{FG FILL}
                          ^^^^^^^^^^^^^^^--- task name
                ^^^^^^^^-------------------- address of the task structure
   ^^^^^^^^--------------------------------- address of the JSR instruction
                                             that caused the hit.
@{FG TEXT}

   (With the SMALL option set, no more lines are displayed.)

   After that, the data and address register contents follow:
@{FG SHINE}
Data: 00000001 020CE5C5 00004000 08350BA4 00000001 00000001 020CFF85 08339714
Addr: 08350BA4 08339732 08014E0C 08339714 084F3C08 00F92D70 0800083C 084F3BFC
@{FG TEXT}

   If you enabled DREGCHECK or AREGCHECK, the contents of any register
   will be passed to SegTracker (of course SegTracker must be running):
@{FG SHINE}
----> 08339732 - "pwtest"  Hunk 0000, Offset 0000001A
----> 00F92D70 - "ROM - dos 39.23 (8.9.92)"  Hunk 0000, Offset 00000314
@{FG TEXT}

   With SHOWPC enabled, 64 bytes around the PC at hit time will be shown:
@{FG SHINE}
PC-8: 00000000 00000000 0833653C 00000000 00000030 00000000 43FA0018 2C780004
PC *: 4EAEFE68 22402C78 00044EAE FE627000 4E75646F 732E6C69 62726172 79004E71
@{FG TEXT}

   After that, all stack lines will be shown. You can change the number
   of stack lines using the STACKLINES parameter. Defaults to 2 lines.
@{FG SHINE}
Stck: 084F3BFC 08339724 00F9359C 00004000 0839A74C 08533B40 00001970 48E7303E
Stck: 24482649 61A66730 2C6A0018 206A0014 4EAEFF94 2848204B 610000B8 661C2449
@{FG TEXT}

   If SegTracker is running, it will be fed with the PC:
@{FG SHINE}
----> 08339720 - "pwtest"  Hunk 0000, Offset 00000008
@{FG TEXT}

   And last but not least, if STACKCHECK is enabled, all longwords shown
   in the stack lines above are passed to SegTracker:
@{FG SHINE}
----> 08339724 - "pwtest"  Hunk 0000, Offset 0000000C
----> 00F9359C - "ROM - dos 39.23 (8.9.92)"  Hunk 0000, Offset 00000B40
@{FG TEXT}

@EndNode
@Node exec "PatchWork: exec.library"

@{B} e x e c . l i b r a r y @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

   These exec.library patches are implemented:

                @{" AddPort " link AddPort}
                @{" AllocMem " link AllocMem}
                @{" AllocVec " link AllocVec}
                @{" CopyMem " link CopyMem}
                @{" CopyMemQuick " link CopyMemQuick}
                @{" CreateIORequest " link CreateIORequest}
                @{" DeleteMsgPort " link DeleteMsgPort}
                @{" FindPort " link FindPort}
                @{" FindSemaphore " link FindSemaphore}
                @{" FindTask " link FindTask}
                @{" FreeSignal " link FreeSignal}
                @{" InitSemaphore " link InitSemaphore}
                @{" OldOpenLibrary " link OldOpenLibrary}
                @{" Permit " link Permit}
                @{" Procure " link Procure}
                @{" Vacate " link Vacate}

@EndNode
@Node AddPort "PatchWork: exec.library / AddPort"

@{B} e x e c . l i b r a r y @{UB}                                        @{B} AddPort @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          port name not initialized

@{B}BADNESS@{UB}         Level 2

@{B}EXPLANATION@{UB}     With this function, the MsgPort will be made publically
                available. Thus, a valid ln_Name entry must be provided,
                so FindPort() can find your node without trouble.

                If ln_Name is a NULL pointer, FindPort() might cause
                Enforcer hits.

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node AllocMem "PatchWork: exec.library / AllocMem"

@{B} e x e c . l i b r a r y @{UB}                                       @{B} AllocMem @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          allocating 0 bytes

@{B}BADNESS@{UB}         Level 1

@{B}EXPLANATION@{UB}     Allocating 0 bytes is ugly, wastes time and might also
                fail. Avoid this if possible.

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node AllocVec "PatchWork: exec.library / AllocVec"

@{B} e x e c . l i b r a r y @{UB}                                       @{B} AllocVec @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          allocating 0 bytes

@{B}BADNESS@{UB}         Level 1

@{B}EXPLANATION@{UB}     Allocating 0 bytes is ugly, wastes time and might also
                fail. Avoid this if possible.

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node CopyMem "PatchWork: exec.library / CopyMem"

@{B} e x e c . l i b r a r y @{UB}                                        @{B} CopyMem @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          memory areas are overlapping

@{B}BADNESS@{UB}         Level 2

@{B}EXPLANATION@{UB}     Copying overlapping memory areas are not supported. See
                AutoDocs!

@{B}DEADLY@{UB}          has no effect.

__________________________________________________________________________


@{B}REPORT@{UB}          copying 0 bytes is wasted time

@{B}BADNESS@{UB}         Level 1

@{B}EXPLANATION@{UB}     It doesn't make any sense to copy zero bytes. Better
                you avoid this. But -- as any level 1 hit -- you may
                also ignore it, but you must live with the hit...

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node CopyMemQuick "PatchWork: exec.library / CopyMemQuick"

@{B} e x e c . l i b r a r y @{UB}                                   @{B} CopyMemQuick @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          pointer/size not longword aligned

@{B}BADNESS@{UB}         Level 3

@{B}EXPLANATION@{UB}     This is a raw violation, and will most probably cause
                a crash! In this case, you MUST use CopyMem() instead.

@{B}DEADLY@{UB}          has no effect.

__________________________________________________________________________


@{B}REPORT@{UB}          memory areas are overlapping

@{B}BADNESS@{UB}         Level 2

@{B}EXPLANATION@{UB}     Copying overlapping memory areas are not supported. See
                AutoDocs!

@{B}DEADLY@{UB}          has no effect.

__________________________________________________________________________


@{B}REPORT@{UB}          copying 0 bytes is wasted time

@{B}BADNESS@{UB}         Level 1

@{B}EXPLANATION@{UB}     It doesn't make any sense to copy zero bytes. Better
                you avoid this. But -- as any level 1 hit -- you may
                also ignore it, but you must live with the hit...

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node CreateIORequest "PatchWork: exec.library / CreateIORequest"

@{B} e x e c . l i b r a r y @{UB}                                @{B} CreateIORequest @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          size is too small

@{B}BADNESS@{UB}         Level 3

@{B}EXPLANATION@{UB}     There is something wrong with your code. Size cannot
                be smaller than the size of a minimal IORequest struc-
                ture. This will most probably cause Enforcer hits and
                Mungwall hits.

@{B}DEADLY@{UB}          has no effect.

__________________________________________________________________________


@{B}REPORT@{UB}          ioReplyPort not initialized

@{B}BADNESS@{UB}         Level 2

@{B}EXPLANATION@{UB}     CreateIORequest requires an initialized structure. See
                AutoDocs!

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node DeleteMsgPort "PatchWork: exec.library / DeleteMsgPort"

@{B} e x e c . l i b r a r y @{UB}                                  @{B} DeleteMsgPort @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          MsgPort contained unreplied Messages

@{B}BADNESS@{UB}         Level 3

@{B}EXPLANATION@{UB}     You must reply all messages you have in your MsgPort
                before deleting it. Otherwise it will cause memory loss
                and some programs might wait for the reply forever. Also
                see AutoDocs!

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node FindPort "PatchWork: exec.library / FindPort"

@{B} e x e c . l i b r a r y @{UB}                                       @{B} FindPort @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          Forbid() missing, unreliable result

@{B}BADNESS@{UB}         Level 2

@{B}EXPLANATION@{UB}     This is one of the hits that occures most. You MUST
                freeze multitasking before searching through the public
                list for a message port. Otherwise the port could be
                shut up shortly after you've got the pointer. The next
                PutMsg() will then throw Enforcer hits in best case, or
                it will just trash memory. Also see AutoDocs!

@{B}DEADLY@{UB}          In DEADLY mode, this function call will return the
                true return code only if multitasking was forbidden.
                Otherwise it will pass NULL if the Port wasn't there
                anyhow, or 0xFACEDEAD if the Port was found. So, just
                finding out if this port existed will still work, but
                accessing it will cause Enforcer hits.

@EndNode
@Node FindSemaphore "PatchWork: exec.library / FindSemaphore"

@{B} e x e c . l i b r a r y @{UB}                                  @{B} FindSemaphore @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          Forbid() missing, unreliable result

@{B}BADNESS@{UB}         Level 2

@{B}EXPLANATION@{UB}     You MUST freeze multitasking before searching a
                public Semaphore. Otherwise the semaphore could be
                removed shortly after you've got the pointer. An access
                to the structure will then throw Enforcer hits in best
                case, or it will just trash memory. Also see AutoDocs!

@{B}DEADLY@{UB}          In DEADLY mode, this function call will return the
                true return code only if multitasking was forbidden.
                Otherwise it will pass NULL if the Semaphore wasn't
                there anyhow, or 0xFACEDEAD if the Semaphore was found.
                So, just finding out if this semaphore existed will still
                work, but accessing it will cause Enforcer hits.

@EndNode
@Node FindTask "PatchWork: exec.library / FindTask"

@{B} e x e c . l i b r a r y @{UB}                                       @{B} FindTask @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          Forbid() missing, unreliable result

@{B}BADNESS@{UB}         Level 2

@{B}EXPLANATION@{UB}     If you search for a task by its name, you MUST freeze
                multitasking before searching through the public task
                list. Otherwise the task could be removed shortly after
                you've got the pointer. Any access to the TCB will then
                throw Enforcerhits in best case, or it will just trash
                memory.

                Anyhow, FindTask(NULL) will work fine even with enabled
                multitasking. If you can use the result, you'll surely
                be still alive... ;-)

@{B}DEADLY@{UB}          In DEADLY mode, this function call will return the
                true return code only if multitasking was forbidden
                or NULL has been passed as task name. Otherwise it will
                return NULL if the task really wasn't there, or
                0xFACEDEAD if the task was found. So, just finding out
                if this task existed will still work, but accessing it
                will cause Enforcer hits.

@EndNode
@Node FreeSignal "PatchWork: exec.library / FreeSignal"

@{B} e x e c . l i b r a r y @{UB}                                     @{B} FreeSignal @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          V37+ will be required

@{B}BADNESS@{UB}         Level 0

@{B}EXPLANATION@{UB}     Just a rememberance that you'll need at least AmigaOS
                V37 to call FreeSignal(-1).

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node InitSemaphore "PatchWork: exec.library / InitSemaphore"

@{B} e x e c . l i b r a r y @{UB}                                  @{B} InitSemaphore @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          structure is not cleared

@{B}BADNESS@{UB}         Level 2

@{B}EXPLANATION@{UB}     The memory space passed to be initialized as a new
                semaphore must be cleared according to the AutoDocs.
                Even if it seemingly works fine without clearing up the
                memory mess, you must do it! No further discussion...

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node OldOpenLibrary "PatchWork: exec.library / OldOpenLibrary"

@{B} e x e c . l i b r a r y @{UB}                                 @{B} OldOpenLibrary @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          obsoleted, use OpenLibrary() instead

@{B}BADNESS@{UB}         Level 1

@{B}EXPLANATION@{UB}     Not much to say. Just follow the advice! But please
                do NOT just replace it by a lazy OpenLibrary(...,0).
                This isn't much better...

@{B}DEADLY@{UB}          has no effect. Yet...

@EndNode
@Node Permit "PatchWork: exec.library / Permit"

@{B} e x e c . l i b r a r y @{UB}                                         @{B} Permit @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          Forbid() missing

@{B}BADNESS@{UB}         Level 2

@{B}EXPLANATION@{UB}     There was a Permit() call though multitasking is already
                active. Do not use Permit() to neutralize a following
                Forbid().

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node Procure "PatchWork: exec.library / Procure"

@{B} e x e c . l i b r a r y @{UB}                                        @{B} Procure @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          V39+ will be required

@{B}BADNESS@{UB}         Level 0

@{B}EXPLANATION@{UB}     Procure() is only working in V39 or higher. Don't use
                it on older AmigaOS releases!

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node Vacate "PatchWork: exec.library / Vacate"

@{B} e x e c . l i b r a r y @{UB}                                         @{B} Vacate @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          V39+ will be required

@{B}BADNESS@{UB}         Level 0

@{B}EXPLANATION@{UB}     Vacate() is only working in V39 or higher. Don't use
                it on older AmigaOS releases!

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node dos "PatchWork: dos.library"

@{B} d o s . l i b r a r y @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

   These dos.library patches are implemented:

                @{" AttemptLockDosList " link AttemptLockDosList}
                @{" CreateProc " link CreateProc}
                @{" DoPkt " link DoPkt}
                @{" Examine " link Examine}
                @{" ExamineFH " link ExamineFH}
                @{" ExAll " link ExAll}
                @{" ExAllEnd " link ExAllEnd}
                @{" ExNext " link ExNext}
                @{" GetVar " link GetVar}
                @{" Info " link Info}
                @{" MatchEnd " link MatchEnd}
                @{" MatchFirst " link MatchFirst}
                @{" MatchNext " link MatchNext}
                @{" RunCommand " link RunCommand}
                @{" SetVBuf " link SetVBuf}

@EndNode
@Node AttemptLockDosList "PatchWork: dos.library / AttemptLockDosList"

@{B} d o s . l i b r a r y @{UB}                               @{B} AttemptLockDosList @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          also returns 0x00000001 until V39.24 dos

@{B}BADNESS@{UB}         Level 0

@{B}EXPLANATION@{UB}     Due to a bug, this function could also return 1
                for success. This bug is fixed in dos.library V39.24,
                which is @{I}after@{UI} AmigaOS V39.106!

                I hope you took this into consideration when using the
                function!

@{B}DEADLY@{UB}          If successful, DEADLY returns the worst case return
                code, named 0x00000001. If your program is bad, it will
                fail even though this call succeeded.

@EndNode
@Node CreateProc "PatchWork: dos.library / CreateProc"

@{B} d o s . l i b r a r y @{UB}                                       @{B} CreateProc @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          pri is out of range (-128..127)

@{B}BADNESS@{UB}         Level 2

@{B}EXPLANATION@{UB}     Even though pri is LONG, you must keep a BYTE
                range!

@{B}DEADLY@{UB}          has no effect.

__________________________________________________________________________


@{B}REPORT@{UB}          stack size must be a multiple of 4

@{B}BADNESS@{UB}         Level 2

@{B}EXPLANATION@{UB}     No further comment required, I think...

@{B}DEADLY@{UB}          has no effect.

__________________________________________________________________________

@{B}REPORT@{UB}          obsoleted, use CreateNewProc() instead

@{B}BADNESS@{UB}         Level 1

@{B}EXPLANATION@{UB}     You surely do not need to support Kick 1.3, do you?
                So, why do you use this dusty function? CreateNewProc()
                is much better!

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node DoPkt "PatchWork: dos.library / DoPkt"

@{B} d o s . l i b r a r y @{UB}                                            @{B} DoPkt @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          DoPkt() from a task requires V37+

@{B}BADNESS@{UB}         Level 0

@{B}EXPLANATION@{UB}     You called DoPkt() from a task. This is only possible
                since AmigaOS V37. Remember that!

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node Examine "PatchWork: dos.library / Examine"

@{B} d o s . l i b r a r y @{UB}                                          @{B} Examine @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          FileInfoBlock is not longword aligned

@{B}BADNESS@{UB}         Level 3

@{B}EXPLANATION@{UB}     Longword alignment is vital for this function. Other-
                wise Enforcer and Mungwall hits will occur! Creating this
                structure on stack is not sufficient.

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node ExamineFH "PatchWork: dos.library / ExamineFH"

@{B} d o s . l i b r a r y @{UB}                                        @{B} ExamineFH @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          FileInfoBlock is not longword aligned

@{B}BADNESS@{UB}         Level 3

@{B}EXPLANATION@{UB}     Longword alignment is vital for this function. Other-
                wise Enforcer and Mungwall hits will occur! Creating this
                structure on stack is not sufficient.

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node ExAll "PatchWork: dos.library / ExAll"

@{B} d o s . l i b r a r y @{UB}                                            @{B} ExAll @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          buffer is not word aligned

@{B}BADNESS@{UB}         Level 3

@{B}EXPLANATION@{UB}     buffer must be at least word aligned. Do a longword
                alignment if ever possible!

@{B}DEADLY@{UB}          has no effect.

__________________________________________________________________________


@{B}REPORT@{UB}          buffer should be longword aligned

@{B}BADNESS@{UB}         Level 1

@{B}EXPLANATION@{UB}     It is even better if you longword align the buffer.
                And it doesn't hurt. So why don't you do it? :-)

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node ExAllEnd "PatchWork: dos.library / ExAllEnd"

@{B} d o s . l i b r a r y @{UB}                                         @{B} ExAllEnd @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          buffer is not word aligned

@{B}BADNESS@{UB}         Level 3

@{B}EXPLANATION@{UB}     buffer must be at least word aligned. Do a longword
                alignment if ever possible!

@{B}DEADLY@{UB}          has no effect.

__________________________________________________________________________


@{B}REPORT@{UB}          buffer should be longword aligned

@{B}BADNESS@{UB}         Level 1

@{B}EXPLANATION@{UB}     It is even better if you longword align the buffer.
                And it doesn't hurt. So why don't you do it? :-)

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node ExNext "PatchWork: dos.library / ExNext"

@{B} d o s . l i b r a r y @{UB}                                           @{B} ExNext @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          FileInfoBlock is not longword aligned

@{B}BADNESS@{UB}         Level 3

@{B}EXPLANATION@{UB}     Longword alignment is vital for this function. Other-
                wise Enforcer and Mungwall hits will occur! Creating this
                structure on stack is not sufficient.

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node GetVar "PatchWork: dos.library / GetVar"

@{B} d o s . l i b r a r y @{UB}                                         @{B} ExAllEnd @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          this flags will require V37+

@{B}BADNESS@{UB}         Level 0

@{B}EXPLANATION@{UB}     GVF_DONT_NULL_TERM, connected with GVF_LOCAL_ONLY, is
                only possible since AmigaOS V37.

@{B}DEADLY@{UB}          has no effect.

__________________________________________________________________________


@{B}REPORT@{UB}          this flags will require V39+

@{B}BADNESS@{UB}         Level 0

@{B}EXPLANATION@{UB}     GVF_DONT_NULL_TERM without GVF_LOCAL_ONLY is only
                available since AmigaOS V39.

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node Info "PatchWork: dos.library / Info"

@{B} d o s . l i b r a r y @{UB}                                             @{B} Info @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          parameterBlock is not longword aligned

@{B}BADNESS@{UB}         Level 3

@{B}EXPLANATION@{UB}     Longword alignment is vital for this function. Other-
                wise Enforcer and Mungwall hits will occur! Creating this
                structure on stack is not sufficient.

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node MatchEnd "PatchWork: dos.library / MatchEnd"

@{B} d o s . l i b r a r y @{UB}                                         @{B} MatchEnd @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          AnchorPath is not longword aligned

@{B}BADNESS@{UB}         Level 3

@{B}EXPLANATION@{UB}     Longword alignment is vital for this function. Other-
                wise Enforcer and Mungwall hits will occur! Creating this
                structure on stack is not sufficient.

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node MatchFirst "PatchWork: dos.library / MatchFirst"

@{B} d o s . l i b r a r y @{UB}                                       @{B} MatchFirst @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          AnchorPath is not longword aligned

@{B}BADNESS@{UB}         Level 3

@{B}EXPLANATION@{UB}     Longword alignment is vital for this function. Other-
                wise Enforcer and Mungwall hits will occur! Creating this
                structure on stack is not sufficient.

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node MatchNext "PatchWork: dos.library / MatchNext"

@{B} d o s . l i b r a r y @{UB}                                        @{B} MatchNext @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          AnchorPath is not longword aligned

@{B}BADNESS@{UB}         Level 3

@{B}EXPLANATION@{UB}     Longword alignment is vital for this function. Other-
                wise Enforcer and Mungwall hits will occur! Creating this
                structure on stack is not sufficient.

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node RunCommand "PatchWork: dos.library / RunCommand"

@{B} d o s . l i b r a r y @{UB}                                       @{B} RunCommand @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          argptr does not end with '\\n'

@{B}BADNESS@{UB}         Level 2

@{B}EXPLANATION@{UB}     The argument string must end with \\n, so even old parsers
                and old AmigaOS releases can handle it correctly.

@{B}DEADLY@{UB}          has no effect.

__________________________________________________________________________


@{B}REPORT@{UB}          strlen(argptr) does not match to argsize

@{B}BADNESS@{UB}         Level 1

@{B}EXPLANATION@{UB}     argsize does not match the real argument string length.

@{B}DEADLY@{UB}          has no effect.

@EndNode
@Node SetVBuf "PatchWork: dos.library / SetVBuf"

@{B} d o s . l i b r a r y @{UB}                                          @{B} SetVBuf @{UB}
__________________________________________________________________________
@{FG SHINE}ŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻŻ@{FG TEXT}

@{B}REPORT@{UB}          buff is not longword aligned

@{B}BADNESS@{UB}         Level 3

@{B}EXPLANATION@{UB}     You must longword align the buffer!

@{B}DEADLY@{UB}          has no effect.

__________________________________________________________________________


@{B}REPORT@{UB}          not implemented until V40+

@{B}BADNESS@{UB}         Level 0

@{B}EXPLANATION@{UB}     In fact, this function is not implemented up to AmigaOS
                V39! You can call it, but it will always succeed with
                returncode 0, even though it did nothing!

@{B}DEADLY@{UB}          has no effect.

@EndNode



