   ________________________________________________________________________
   name: b4ginit
   desc: load a DPMI server if need, switch to pmode, create descriptors,
         allocate selectors, return to rmode...
  
   type: function
   args: none
   retn: integer           | result: B4G.ERROR.HOST (DPMI host not found),
                                     B4G.ERROR.BIT  (not a 32-bit host),
                                     B4G.ERROR.MEM  (not enough memory),
                                     B4G.ERROR.SWT  (cannot switch to pmode)
                                     or 0 if ok
  
   decl: b4ginit% ()
  
   updt: jul/00 [v1ctor]
   obs.: none

   ________________________________________________________________________
   name: b4gdone
   desc: free allocated conventional and extended memory, close opened files
  
   type: sub
   args: none
   retn: none
  
   decl: b4gdone ()
  
   updt: jul/00 [v1ctor]
   obs.: only need when using B4G in the IDE (qb.exe, qbx.exe or vbdos.exe)

   ________________________________________________________________________
   name: interrupt386, interrupt386x
   desc: invoke a 32-bit protected mode interrupt
  
   type: sub
   args:          intnum:integer, | interrupt to invoke
         [IN/OUT] regs:REGS386    | struct of registers to pass to interrupt
   retn: none
  
   decl: interrupt386  (byval intnum as integer,_
                        seg regs as REGS386)
         interrupt386x (byval intnum as integer,_
                        seg regs as REGS386)
  
   updt: jul/00 [v1ctor]
   obs.: the difference between interrupt386 and interrupt386x is that the
         last pass (and return) the DS & ES selectors to (from) the interrupt
         invoked
