/****************************************************************/
/*                                                              */
/*                           lol.h                              */
/*                                                              */
/*              DOS List of Lists structure                     */
/*                                                              */
/*                      Copyright (c) 2003                      */
/*                         Bart Oldeman                         */
/*                      All Rights Reserved                     */
/*                                                              */
/* This file is part of DOS-C.                                  */
/*                                                              */
/* DOS-C is free software; you can redistribute it and/or       */
/* modify it under the terms of the GNU General Public License  */
/* as published by the Free Software Foundation; either version */
/* 2, or (at your option) any later version.                    */
/*                                                              */
/* DOS-C is distributed in the hope that it will be useful, but */
/* WITHOUT ANY WARRANTY; without even the implied warranty of   */
/* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See    */
/* the GNU General Public License for more details.             */
/*                                                              */
/* You should have received a copy of the GNU General Public    */
/* License along with DOS-C; if not, write to the Free Software */
/* Foundation, Inc., 59 Temple Place, Suite 330,                */
/* Boston, MA  02111-1307  USA.                                 */
/****************************************************************/

enum {LOC_CONV=0, LOC_HMA=1};

/* note: we start at DOSDS:0, but the "official" list of lists starts a
   little later at DOSDS:26 (this is what is returned by int21/ah=52) */

struct lol {
  char filler[0x22];
  char *inputptr;              /* -4 Pointer to unread CON input          */
  unsigned short first_mcb;    /* -2 Start of user memory                 */
  struct dpb far *DPBp;        /*  0 First drive Parameter Block          */
  struct sfttbl far *sfthead;  /*  4 System File Table head               */
  struct dhdr far *clock;      /*  8 CLOCK$ device                        */
  struct dhdr far *syscon;     /*  c console device                       */
  unsigned short maxsecsize;   /* 10 max bytes per sector for any blkdev  */
  void far *inforecptr;        /* 12 pointer to disk buffer info record   */
  struct cds far *CDSp;        /* 16 Current Directory Structure          */
  struct sfttbl far *FCBp;     /* 1a FCB table pointer                    */
  unsigned short nprotfcb;     /* 1e number of protected fcbs             */
  unsigned char nblkdev;       /* 20 number of block devices              */
  unsigned char lastdrive;     /* 21 value of last drive                  */
  struct dhdr nul_dev;         /* 22 NUL device driver header(no pointer!)*/
  unsigned char njoined;       /* 34 number of joined devices             */
  unsigned short specialptr;   /* 35 pointer to list of spec. prog(unused)*/
  void far *setverPtr;         /* 37 pointer to SETVER list               */
  void (*a20ptr)(void);        /* 3b pointer to fix A20 ctrl              */
  unsigned short recentpsp;    /* 3d PSP of most recently exec'ed prog    */
  unsigned short nbuffers;     /* 3f Number of buffers                    */
  unsigned short nlookahead;   /* 41 Number of lookahead buffers          */
  unsigned char BootDrive;     /* 43 bootdrive (1=A:)                     */
  unsigned char cpu;           /* 44 CPU family [was unused dword moves]  */
  unsigned short xmssize;      /* 45 extended memory size in KB           */ 
  struct buffer far *firstbuf; /* 47 head of buffers linked list          */
  unsigned short dirtybuf;     /* 4b number of dirty buffers              */
  struct buffer far *lookahead;/* 4d pointer to lookahead buffer          */
  unsigned short slookahead;   /* 51 number of lookahead sectors          */
  unsigned char bufloc;        /* 53 BUFFERS loc (1=HMA)                  */
  char far *deblock_buf;       /* 54 pointer to workspace buffer          */
  char filler2[5];             /* 58 ???/unused                           */
  unsigned char int24fail;     /* 5d int24 fail while making i/o stat call*/
  unsigned char memstrat;      /* 5e memory allocation strat during exec  */
  unsigned char a20count;      /* 5f nr. of int21 calls for which a20 off */
  unsigned char VgaSet;        /* 60 bitflags switches=/w, int21/4b05     */
  unsigned short unpack;       /* 61 offset of unpack code start          */
  unsigned char uppermem_link; /* 63 UMB Link flag                        */
  unsigned short min_pars;     /* 64 minimum para req by program execed   */
  unsigned short uppermem_root;/* 66 Start of umb chain (usually 9fff)    */
  unsigned short last_para;    /* 68 para: start scanning during memalloc */
  /* ANY ITEM BELOW THIS POINT MAY CHANGE */
  /* FreeDOS specific entries */
  unsigned char os_setver_minor;/*6a settable minor DOS version           */
  unsigned char os_setver_major;/*6b settable major DOS version           */
  unsigned char os_minor;      /* 6c minor DOS version                    */
  unsigned char os_major;      /* 6d major DOS version                    */
  unsigned char rev_number;    /* 6e DOS revision#, only 3 bits           */
  unsigned char version_flags; /* 6f DOS version flags                    */
  char *os_release;            /* 70 near pointer to os_release string    */
#ifdef WIN31SUPPORT
  unsigned short winInstanced; /* WinInit called                          */
  unsigned long  winStartupInfo[4];
  unsigned short instanceTable[5];
#endif
};

