Skip to content

โ† Home ยท AmigaDOS

DosLibrary โ€” Structure and Global State

Overview

dos.library is opened by nearly every Amiga program. The library base DOSBase is a struct DosLibrary that extends struct Library with process-level state, the root node, and handler management.


struct DosLibrary

/* dos/dosextens.h โ€” NDK39 */
struct DosLibrary {
    struct Library  dl_lib;           /* standard Library header */
    struct RootNode *dl_Root;         /* pointer to the system root node */
    APTR            dl_GV;            /* BCPL global vector */
    LONG            dl_A2;            /* BCPL scratch */
    LONG            dl_A5;            /* BCPL scratch */
    LONG            dl_A6;            /* BCPL scratch */
    struct ErrorString *dl_Errors;    /* error string table */
    struct timerequest *dl_TimeReq;   /* timer.device request */
    struct Library  *dl_UtilityBase;  /* cached UtilityBase */
    struct Library  *dl_IntuitionBase;/* cached IntuitionBase */
};

struct RootNode

struct RootNode {
    BPTR   rn_TaskArray;   /* BPTR to CLI task array */
    BPTR   rn_ConsoleSegment; /* console handler segment */
    struct DateStamp rn_Time; /* current system time */
    LONG   rn_RestartSeg;  /* restart segment */
    BPTR   rn_Info;        /* BPTR to DosInfo */
    BPTR   rn_FileHandlerSegment;
    struct MinList rn_CliList; /* list of CLI processes */
    /* ... OS 3.x additions ... */
    ULONG  rn_BootFlags;
    APTR   rn_BootProc;
};

Opening dos.library

struct DosLibrary *DOSBase;
DOSBase = (struct DosLibrary *)OpenLibrary("dos.library", 40);
if (!DOSBase) { /* OS 3.1 or later required */ }

BCPL Heritage

AmigaDOS was originally written in BCPL. Artifacts remain: - BPTR โ€” pointers right-shifted by 2 (real = bptr << 2) - dl_GV โ€” BCPL global vector (used internally by filesystem handlers) - File handles and locks are BPTRs, not real pointers

/* Convert BPTR to C pointer: */
#define BADDR(bptr) ((APTR)((ULONG)(bptr) << 2))

References

  • NDK39: dos/dosextens.h, dos/dos.h
  • ADCD 2.1: dos.library autodocs