MODULE DevComDebug;
(**

   project   = "BlackBox"
   organization   = "www.oberon.ch"
   contributors   = "Oberon microsystems"
   version   = "System/Rsrc/About"
   copyright   = "System/Rsrc/About"
   license   = "Docu/BB-License"
   changes   = ""
   issues   = ""

**)

   IMPORT

      SYSTEM, COM, WinApi, WinOle,
      Kernel, Strings,Dialog, Fonts, Ports, Stores, Models, Views, Properties, Containers,
      Documents, Windows, Sequencers,
      TextModels, TextRulers, TextViews, TextControllers, TextMappers,
      DevDebug, DevHeapSpy, StdLog, StdLinks;
   
   
   TYPE
      Block = POINTER TO RECORD [untagged]
         tag: Kernel.Type;
         size: INTEGER;      (* size of free blocks *)
         ref: INTEGER;
         unk: INTEGER
      END;
      Cluster = POINTER TO RECORD [untagged]
         size: INTEGER;   (* total size *)
         next: Cluster;
      END;
   VAR


      all: BOOLEAN;
      headerLen: INTEGER;
      
   
   PROCEDURE NewRuler (): TextRulers.Ruler;
      CONST mm = Ports.mm; pt = Ports.point;
      VAR p: TextRulers.Prop;
   BEGIN
      NEW(p);
      p.valid := {TextRulers.right, TextRulers.tabs, TextRulers.opts};
      p.opts.val := {TextRulers.rightFixed}; p.opts.mask := p.opts.val;
      p.right := 130 * mm;
      p.tabs.len := 4;
      p.tabs.tab[0].stop := 15 * mm; p.tabs.tab[1].stop := 70 * mm;
      p.tabs.tab[2].stop := 85 * mm; p.tabs.tab[3].stop := 95 * mm;
      RETURN TextRulers.dir.NewFromProp(p)
   END NewRuler;
   PROCEDURE OpenViewer (t: TextModels.Model; title: Views.Title; ruler:TextRulers.Ruler);

      VAR v: TextViews.View; c: Containers.Controller;
   BEGIN
      Dialog.MapString(title, title);
      v := TextViews.dir.New(t);
      IF ruler # NIL THEN v.SetDefaults(ruler, TextViews.dir.defAttr) END;
      c := v.ThisController();
      IF c # NIL THEN
         c.SetOpts(c.opts - {Containers.noFocus, Containers.noSelection} + {Containers.noCaret})
      END;
      Views.OpenAux(v, title)
   END OpenViewer;
   
   PROCEDURE OpenInfoViewer (t: TextModels.Model; title: Views.Title);
      VAR v: TextViews.View; c: Containers.Controller; p: Properties.BoundsPref;
   BEGIN
      Dialog.MapString(title, title);
      v := TextViews.dir.New(t);
      c := v.ThisController();
      IF c # NIL THEN
         c.SetOpts(c.opts - {Containers.noFocus, Containers.noSelection} + {Containers.noCaret})
      END;
      p.w := Views.undefined; p.h := Views.undefined; Views.HandlePropMsg(v, p);
      Views.OpenAux(Documents.dir.New(v, p.w, p.h), title)
   END OpenInfoViewer;
   
   
   PROCEDURE Next (b: Block): Block;   (* next block in same cluster *)
      VAR size: INTEGER; tag: Kernel.Type;
   BEGIN
      tag := SYSTEM.VAL(Kernel.Type, SYSTEM.VAL(INTEGER, b.tag) DIV 4 * 4);
      size := tag.size + 4;
      IF ODD(SYSTEM.VAL(INTEGER, b.tag) DIV 2) THEN size := b.size - SYSTEM.ADR(b.size) + size END;
      size := (size + 15) DIV 16 * 16;
      RETURN SYSTEM.VAL(Block, SYSTEM.VAL(INTEGER, b) + size)
   END Next;
   PROCEDURE ShowInterfaces (showHeader: BOOLEAN; VAR out: TextMappers.Formatter);

      VAR adr, end: INTEGER; name: Kernel.Name; anchor: ARRAY 256 OF CHAR;
         a0: TextModels.Attributes; cluster: Cluster; blk: Block;
   BEGIN
      IF showHeader THEN
         out.WriteSString("Referenced Interface Records:");
         out.WriteTab; out.WriteTab;
         a0 := out.rider.attr;
         out.rider.SetAttr(TextModels.NewStyle(out.rider.attr, {Fonts.underline}));
         out.rider.SetAttr(TextModels.NewColor(out.rider.attr, Ports.blue));
         out.WriteView(StdLinks.dir.NewLink("DevComDebug.ToggleAllInterfaces"));
         IF all THEN out.WriteSString("New") ELSE out.WriteSString("All") END;
         out.WriteView(StdLinks.dir.NewLink(""));
         out.WriteTab;
         out.WriteView(StdLinks.dir.NewLink("DevComDebug.UpdateInterfaceRecords"));
         out.WriteSString("Update");
         out.WriteView(StdLinks.dir.NewLink(""));
         out.rider.SetAttr(a0);
         out.WriteLn; out.WriteLn;
         headerLen := out.Pos()
      END;
      cluster := SYSTEM.VAL(Cluster, Kernel.Root());
      WHILE cluster # NIL DO
         blk := SYSTEM.VAL(Block, SYSTEM.VAL(INTEGER, cluster) + 12);
         end := SYSTEM.VAL(INTEGER, blk) + (cluster.size - 12) DIV 16 * 16;
         WHILE SYSTEM.VAL(INTEGER, blk) < end DO
            IF ~(1 IN SYSTEM.VAL(SET, blk.tag))
               & (SYSTEM.VAL(INTEGER, blk.tag) # SYSTEM.ADR(blk.size))
               & (blk.tag.base[0] = NIL)
               & (all OR (blk.tag.mod.name # "HostMechanisms")
                     & (blk.tag.mod.name # "OleServer")
                     & (blk.tag.mod.name # "OleClient")
                     & (blk.tag.mod.name # "OleStorage")
                     & (blk.tag.mod.name # "OleData")) THEN
               adr := SYSTEM.ADR(blk.size);
               out.WriteSString("ref: ");
               out.WriteInt(blk.ref); out.WriteTab;
               out.WriteSString(blk.tag.mod.name); out.WriteChar(".");
               IF (blk.tag.id DIV 256 # 0) & (blk.tag.mod.refcnt >= 0) THEN
                  Kernel.GetTypeName(blk.tag, name); out.WriteSString(name)
               ELSE
                  out.WriteSString("RECORD");
               END;
               out.WriteTab;
               out.WriteChar("["); out.WriteIntForm(adr, TextMappers.hexadecimal, 9, "0", TextMappers.showBase);
               out.WriteChar("]"); out.WriteChar(" ");
               out.WriteView(DevDebug.HeapRefView(adr, "Interface"));
               DevHeapSpy.GetAnchor(adr, anchor);
               IF anchor # "" THEN
                  out.WriteTab; out.WriteTab; out.WriteChar("(");
                  out.WriteString(anchor); out.WriteChar(")")
               END;
               out.WriteLn
            END;
            blk := Next(blk)
         END;
         cluster := cluster.next
      END
   END ShowInterfaces;
   
   PROCEDURE ShowInterfaceRecords*;
      VAR out: TextMappers.Formatter;
   BEGIN
      out.ConnectTo(TextModels.CloneOf(StdLog.buf));
      ShowInterfaces(TRUE, out);
      OpenViewer(out.rider.Base(), "Interfaces", NewRuler());
      out.ConnectTo(NIL)
   END ShowInterfaceRecords;
   
   PROCEDURE UpdateInterfaceRecords*;
      VAR t, t0: TextModels.Model; out: TextMappers.Formatter;
   BEGIN
      t0 := TextViews.FocusText();
      Models.BeginModification(Models.notUndoable, t0);
      t0.Delete(headerLen, t0.Length());   (* removes old object references from text *)
      Views.Update(TextViews.Focus(), Views.rebuildFrames);
      Windows.dir.Update(Windows.dir.First());   (* remove frame references *)
      Kernel.Collect;
      t := TextModels.CloneOf(t0); (*Stores.InitDomain(t, t0.domain);*) Stores.Join(t, t0);
      out.ConnectTo(t);
      ShowInterfaces(FALSE, out);
      t0.Insert(headerLen, t, 0, t.Length());
      Models.EndModification(Models.notUndoable, t0);
      out.ConnectTo(NIL)
   END UpdateInterfaceRecords;
   
   PROCEDURE ToggleAllInterfaces*;
   BEGIN
      all := ~all;
      UpdateInterfaceRecords
   END ToggleAllInterfaces;
   
   PROCEDURE ShowError*;
      VAR res: INTEGER; c: TextControllers.Controller; r: TextModels.Reader; f: TextMappers.Formatter;
         beg, end, i: INTEGER; str: ARRAY 1024 OF CHAR; ch: CHAR; s: ARRAY 64 OF CHAR;
   BEGIN
      c := TextControllers.Focus();
      IF (c # NIL) & c.HasSelection() THEN
         c.GetSelection(beg, end);
         r := c.text.NewReader(NIL);
         r.SetPos(beg); i := 0; r.ReadChar(ch);
         WHILE (beg + i < end) & (i < LEN(s) - 1) & (ch >= " ") DO s[i] := ch; INC(i); r.ReadChar(ch) END;
         s[i] := 0X;
         Strings.StringToInt(s, i, res);
         IF res = 0 THEN
            f.ConnectTo(TextModels.CloneOf(StdLog.buf));
            f.WriteSString("Error Code: ");
            f.WriteIntForm(i, TextMappers.hexadecimal, 9, "0", TRUE);
            f.WriteLn;
            f.WriteSString("(Facility: ");
            CASE i DIV 10000H MOD 2000H OF
            | 0: f.WriteSString("NULL, ")
            | 1: f.WriteSString("RPC, ")
            | 2: f.WriteSString("DISPATCH, ")
            | 3: f.WriteSString("STORAGE, ")
            | 4: f.WriteSString("ITF, ")
            | 7: f.WriteSString("WIN32, ")
            | 8: f.WriteSString("WINDOWS, ")
            | 10: f.WriteSString("CONTROL, ")
            ELSE f.WriteSString("unknown, ")
            END;
            f.WriteSString("Severity: ");
            IF i < 0 THEN f.WriteSString("Error, ") ELSE f.WriteSString("Success, ") END;
            f.WriteSString("Code: ");
            f.WriteInt(i MOD 10000H);
            f.WriteChar(")"); f.WriteLn;
            f.WriteSString("Description:");
            f.WriteLn;
            i := WinApi.FormatMessageW({12}, 0, i, 0, str, LEN(str), NIL);
            IF i > 0 THEN
               REPEAT DEC(i) UNTIL (i < 0) OR (str[i] >= " ");
               str[i + 1] := 0X;
            ELSE str := ""
            END;
            f.WriteString(str);
            f.WriteLn;
            OpenInfoViewer(f.rider.Base(), "Show Error");
            f.ConnectTo(NIL)
         END
      END
   END ShowError;
   
   PROCEDURE Hex (VAR f: TextMappers.Formatter; x, n: INTEGER);
   BEGIN
      IF n > 1 THEN Hex(f, x DIV 16, n - 1) END;
      x := x MOD 16;
      IF x >= 10 THEN f.WriteChar(CHR(x + ORD("A") - 10))
      ELSE f.WriteChar(CHR(x + ORD("0")))
      END
   END Hex;
   PROCEDURE NewGuid*;

      VAR f: TextMappers.Formatter; g: COM.GUID; res: COM.RESULT; n: INTEGER;
   BEGIN
      f.ConnectTo(TextModels.CloneOf(StdLog.buf)); n := 10;
      WHILE n > 0 DO
         res := WinOle.CoCreateGuid(g);
         f.WriteChar("{");
         Hex(f, g[2] MOD 256 + 256 * g[3] MOD 256, 4);
         Hex(f, g[0] MOD 256 + 256 * g[1] MOD 256, 4);
         f.WriteChar("-");
         Hex(f, g[4] MOD 256 + 256 * g[5] MOD 256, 4);
         f.WriteChar("-");
         Hex(f, g[6] MOD 256 + 256 * g[7] MOD 256, 4);
         f.WriteChar("-");
         Hex(f, g[8] MOD 256, 2);
         Hex(f, g[9] MOD 256, 2);
         f.WriteChar("-");
         Hex(f, g[10] MOD 256, 2);
         Hex(f, g[11] MOD 256, 2);
         Hex(f, g[12] MOD 256, 2);
         Hex(f, g[13] MOD 256, 2);
         Hex(f, g[14] MOD 256, 2);
         Hex(f, g[15] MOD 256, 2);
         f.WriteChar("}");
         f.WriteLn; DEC(n)
      END;
      OpenInfoViewer(f.rider.Base(), "Guids");
      f.ConnectTo(NIL)
   END NewGuid;
END DevComDebug.

      S_OK* = 0;

      S_FALSE* = 1;
      E_UNEXPECTED* = 8000FFFFH;
      E_NOTIMPL* = 80004001H;
      E_OUTOFMEMORY* = 8007000EH;
      E_INVALIDARG* = 80070057H;
      E_NOINTERFACE* = 80004002H;
      E_POINTER* = 80004003H;
      E_HANDLE* = 80070006H;
      E_ABORT* = 80004004H;
      E_FAIL* = 80004005H;
      E_ACCESSDENIED* = 80070005H;
      CO_E_INIT_TLS* = 80004006H;
      CO_E_INIT_SHARED_ALLOCATOR* = 80004007H;
      CO_E_INIT_MEMORY_ALLOCATOR* = 80004008H;
      CO_E_INIT_CLASS_CACHE* = 80004009H;
      CO_E_INIT_RPC_CHANNEL* = 8000400AH;
      CO_E_INIT_TLS_SET_CHANNEL_CONTROL* = 8000400BH;
      CO_E_INIT_TLS_CHANNEL_CONTROL* = 8000400CH;
      CO_E_INIT_UNACCEPTED_USER_ALLOCATOR* = 8000400DH;
      CO_E_INIT_SCM_MUTEX_EXISTS* = 8000400EH;
      CO_E_INIT_SCM_FILE_MAPPING_EXISTS* = 8000400FH;
      CO_E_INIT_SCM_MAP_VIEW_OF_FILE* = 80004010H;
      CO_E_INIT_SCM_EXEC_FAILURE* = 80004011H;
      CO_E_INIT_ONLY_SINGLE_THREADED* = 80004012H;
      OLE_E_OLEVERB* = 80040000H;
      OLE_E_ADVF* = 80040001H;
      OLE_E_ENUM_NOMORE* = 80040002H;
      OLE_E_ADVISENOTSUPPORTED* = 80040003H;
      OLE_E_NOCONNECTION* = 80040004H;
      OLE_E_NOTRUNNING* = 80040005H;
      OLE_E_NOCACHE* = 80040006H;
      OLE_E_BLANK* = 80040007H;
      OLE_E_CLASSDIFF* = 80040008H;
      OLE_E_CANT_GETMONIKER* = 80040009H;
      OLE_E_CANT_BINDTOSOURCE* = 8004000AH;
      OLE_E_STATIC* = 8004000BH;
      OLE_E_PROMPTSAVECANCELLED* = 8004000CH;
      OLE_E_INVALIDRECT* = 8004000DH;
      OLE_E_WRONGCOMPOBJ* = 8004000EH;
      OLE_E_INVALIDHWND* = 8004000FH;
      OLE_E_NOT_INPLACEACTIVE* = 80040010H;
      OLE_E_CANTCONVERT* = 80040011H;
      OLE_E_NOSTORAGE* = 80040012H;
      DV_E_FORMATETC* = 80040064H;
      DV_E_DVTARGETDEVICE* = 80040065H;
      DV_E_STGMEDIUM* = 80040066H;
      DV_E_STATDATA* = 80040067H;
      DV_E_LINDEX* = 80040068H;
      DV_E_TYMED* = 80040069H;
      DV_E_CLIPFORMAT* = 8004006AH;
      DV_E_DVASPECT* = 8004006BH;
      DV_E_DVTARGETDEVICE_SIZE* = 8004006CH;
      DV_E_NOIVIEWOBJECT* = 8004006DH;
      DRAGDROP_E_NOTREGISTERED* = 80040100H;
      DRAGDROP_E_ALREADYREGISTERED* = 80040101H;
      DRAGDROP_E_INVALIDHWND* = 80040102H;
      CLASS_E_NOAGGREGATION* = 80040110H;
      CLASS_E_CLASSNOTAVAILABLE* = 80040111H;
      VIEW_E_DRAW* = 80040140H;
      REGDB_E_READREGDB* = 80040150H;
      REGDB_E_WRITEREGDB* = 80040151H;
      REGDB_E_KEYMISSING* = 80040152H;
      REGDB_E_INVALIDVALUE* = 80040153H;
      REGDB_E_CLASSNOTREG* = 80040154H;
      REGDB_E_IIDNOTREG* = 80040155H;
      CACHE_E_NOCACHE_UPDATED* = 80040170H;
      OLEOBJ_E_NOVERBS* = 80040180H;
      OLEOBJ_E_INVALIDVERB* = 80040181H;
      INPLACE_E_NOTUNDOABLE* = 800401A0H;
      INPLACE_E_NOTOOLSPACE* = 800401A1H;
      CONVERT10_E_OLESTREAM_GET* = 800401C0H;
      CONVERT10_E_OLESTREAM_PUT* = 800401C1H;
      CONVERT10_E_OLESTREAM_FMT* = 800401C2H;
      CONVERT10_E_OLESTREAM_BITMAP_TO_DIB* = 800401C3H;
      CONVERT10_E_STG_FMT* = 800401C4H;
      CONVERT10_E_STG_NO_STD_STREAM* = 800401C5H;
      CONVERT10_E_STG_DIB_TO_BITMAP* = 800401C6H;
      CLIPBRD_E_CANT_OPEN* = 800401D0H;
      CLIPBRD_E_CANT_EMPTY* = 800401D1H;
      CLIPBRD_E_CANT_SET* = 800401D2H;
      CLIPBRD_E_BAD_DATA* = 800401D3H;
      CLIPBRD_E_CANT_CLOSE* = 800401D4H;
      MK_E_CONNECTMANUALLY* = 800401E0H;
      MK_E_EXCEEDEDDEADLINE* = 800401E1H;
      MK_E_NEEDGENERIC* = 800401E2H;
      MK_E_UNAVAILABLE* = 800401E3H;
      MK_E_SYNTAX* = 800401E4H;
      MK_E_NOOBJECT* = 800401E5H;
      MK_E_INVALIDEXTENSION* = 800401E6H;
      MK_E_INTERMEDIATEINTERFACENOTSUPPORTED* = 800401E7H;
      MK_E_NOTBINDABLE* = 800401E8H;
      MK_E_NOTBOUND* = 800401E9H;
      MK_E_CANTOPENFILE* = 800401EAH;
      MK_E_MUSTBOTHERUSER* = 800401EBH;
      MK_E_NOINVERSE* = 800401ECH;
      MK_E_NOSTORAGE* = 800401EDH;
      MK_E_NOPREFIX* = 800401EEH;
      MK_E_ENUMERATION_FAILED* = 800401EFH;
      CO_E_NOTINITIALIZED* = 800401F0H;
      CO_E_ALREADYINITIALIZED* = 800401F1H;
      CO_E_CANTDETERMINECLASS* = 800401F2H;
      CO_E_CLASSSTRING* = 800401F3H;
      CO_E_IIDSTRING* = 800401F4H;
      CO_E_APPNOTFOUND* = 800401F5H;
      CO_E_APPSINGLEUSE* = 800401F6H;
      CO_E_ERRORINAPP* = 800401F7H;
      CO_E_DLLNOTFOUND* = 800401F8H;
      CO_E_ERRORINDLL* = 800401F9H;
      CO_E_WRONGOSFORAPP* = 800401FAH;
      CO_E_OBJNOTREG* = 800401FBH;
      CO_E_OBJISREG* = 800401FCH;
      CO_E_OBJNOTCONNECTED* = 800401FDH;
      CO_E_APPDIDNTREG* = 800401FEH;
      CO_E_RELEASED* = 800401FFH;
      OLE_S_USEREG* = 00040000H;
      OLE_S_STATIC* = 00040001H;
      OLE_S_MAC_CLIPFORMAT* = 00040002H;
      DRAGDROP_S_DROP* = 00040100H;
      DRAGDROP_S_CANCEL* = 00040101H;
      DRAGDROP_S_USEDEFAULTCURSORS* = 00040102H;
      DATA_S_SAMEFORMATETC* = 00040130H;
      VIEW_S_ALREADY_FROZEN* = 00040140H;
      CACHE_S_FORMATETC_NOTSUPPORTED* = 00040170H;
      CACHE_S_SAMECACHE* = 00040171H;
      CACHE_S_SOMECACHES_NOTUPDATED* = 00040172H;
      OLEOBJ_S_INVALIDVERB* = 00040180H;
      OLEOBJ_S_CANNOT_DOVERB_NOW* = 00040181H;
      OLEOBJ_S_INVALIDHWND* = 00040182H;
      INPLACE_S_TRUNCATED* = 000401A0H;
      CONVERT10_S_NO_PRESENTATION* = 000401C0H;
      MK_S_REDUCED_TO_SELF* = 000401E2H;
      MK_S_ME* = 000401E4H;
      MK_S_HIM* = 000401E5H;
      MK_S_US* = 000401E6H;
      MK_S_MONIKERALREADYREGISTERED* = 000401E7H;
      CO_E_CLASS_CREATE_FAILED* = 80080001H;
      CO_E_SCM_ERROR* = 80080002H;
      CO_E_SCM_RPC_FAILURE* = 80080003H;
      CO_E_BAD_PATH* = 80080004H;
      CO_E_SERVER_EXEC_FAILURE* = 80080005H;
      CO_E_OBJSRV_RPC_FAILURE* = 80080006H;
      MK_E_NO_NORMALIZED* = 80080007H;
      CO_E_SERVER_STOPPING* = 80080008H;
      MEM_E_INVALID_ROOT* = 80080009H;
      MEM_E_INVALID_LINK* = 80080010H;
      MEM_E_INVALID_SIZE* = 80080011H;
      DISP_E_UNKNOWNINTERFACE* = 80020001H;
      DISP_E_MEMBERNOTFOUND* = 80020003H;
      DISP_E_PARAMNOTFOUND* = 80020004H;
      DISP_E_TYPEMISMATCH* = 80020005H;
      DISP_E_UNKNOWNNAME* = 80020006H;
      DISP_E_NONAMEDARGS* = 80020007H;
      DISP_E_BADVARTYPE* = 80020008H;
      DISP_E_EXCEPTION* = 80020009H;
      DISP_E_OVERFLOW* = 8002000AH;
      DISP_E_BADINDEX* = 8002000BH;
      DISP_E_UNKNOWNLCID* = 8002000CH;
      DISP_E_ARRAYISLOCKED* = 8002000DH;
      DISP_E_BADPARAMCOUNT* = 8002000EH;
      DISP_E_PARAMNOTOPTIONAL* = 8002000FH;
      DISP_E_BADCALLEE* = 80020010H;
      DISP_E_NOTACOLLECTION* = 80020011H;
      TYPE_E_BUFFERTOOSMALL* = 80028016H;
      TYPE_E_INVDATAREAD* = 80028018H;
      TYPE_E_UNSUPFORMAT* = 80028019H;
      TYPE_E_REGISTRYACCESS* = 8002801CH;
      TYPE_E_LIBNOTREGISTERED* = 8002801DH;
      TYPE_E_UNDEFINEDTYPE* = 80028027H;
      TYPE_E_QUALIFIEDNAMEDISALLOWED* = 80028028H;
      TYPE_E_INVALIDSTATE* = 80028029H;
      TYPE_E_WRONGTYPEKIND* = 8002802AH;
      TYPE_E_ELEMENTNOTFOUND* = 8002802BH;
      TYPE_E_AMBIGUOUSNAME* = 8002802CH;
      TYPE_E_NAMECONFLICT* = 8002802DH;
      TYPE_E_UNKNOWNLCID* = 8002802EH;
      TYPE_E_DLLFUNCTIONNOTFOUND* = 8002802FH;
      TYPE_E_BADMODULEKIND* = 800288BDH;
      TYPE_E_SIZETOOBIG* = 800288C5H;
      TYPE_E_DUPLICATEID* = 800288C6H;
      TYPE_E_INVALIDID* = 800288CFH;
      TYPE_E_TYPEMISMATCH* = 80028CA0H;
      TYPE_E_OUTOFBOUNDS* = 80028CA1H;
      TYPE_E_IOERROR* = 80028CA2H;
      TYPE_E_CANTCREATETMPFILE* = 80028CA3H;
      TYPE_E_CANTLOADLIBRARY* = 80029C4AH;
      TYPE_E_INCONSISTENTPROPFUNCS* = 80029C83H;
      TYPE_E_CIRCULARTYPE* = 80029C84H;
      STG_E_INVALIDFUNCTION* = 80030001H;
      STG_E_FILENOTFOUND* = 80030002H;
      STG_E_PATHNOTFOUND* = 80030003H;
      STG_E_TOOMANYOPENFILES* = 80030004H;
      STG_E_ACCESSDENIED* = 80030005H;
      STG_E_INVALIDHANDLE* = 80030006H;
      STG_E_INSUFFICIENTMEMORY* = 80030008H;
      STG_E_INVALIDPOINTER* = 80030009H;
      STG_E_NOMOREFILES* = 80030012H;
      STG_E_DISKISWRITEPROTECTED* = 80030013H;
      STG_E_SEEKERROR* = 80030019H;
      STG_E_WRITEFAULT* = 8003001DH;
      STG_E_READFAULT* = 8003001EH;
      STG_E_SHAREVIOLATION* = 80030020H;
      STG_E_LOCKVIOLATION* = 80030021H;
      STG_E_FILEALREADYEXISTS* = 80030050H;
      STG_E_INVALIDPARAMETER* = 80030057H;
      STG_E_MEDIUMFULL* = 80030070H;
      STG_E_ABNORMALAPIEXIT* = 800300FAH;
      STG_E_INVALIDHEADER* = 800300FBH;
      STG_E_INVALIDNAME* = 800300FCH;
      STG_E_UNKNOWN* = 800300FDH;
      STG_E_UNIMPLEMENTEDFUNCTION* = 800300FEH;
      STG_E_INVALIDFLAG* = 800300FFH;
      STG_E_INUSE* = 80030100H;
      STG_E_NOTCURRENT* = 80030101H;
      STG_E_REVERTED* = 80030102H;
      STG_E_CANTSAVE* = 80030103H;
      STG_E_OLDFORMAT* = 80030104H;
      STG_E_OLDDLL* = 80030105H;
      STG_E_SHAREREQUIRED* = 80030106H;
      STG_E_NOTFILEBASEDSTORAGE* = 80030107H;
      STG_E_EXTANTMARSHALLINGS* = 80030108H;
      STG_S_CONVERTED* = 00030200H;
      RPC_E_CALL_REJECTED* = 80010001H;
      RPC_E_CALL_CANCELED* = 80010002H;
      RPC_E_CANTPOST_INSENDCALL* = 80010003H;
      RPC_E_CANTCALLOUT_INASYNCCALL* = 80010004H;
      RPC_E_CANTCALLOUT_INEXTERNALCALL* = 80010005H;
      RPC_E_CONNECTION_TERMINATED* = 80010006H;
      RPC_E_SERVER_DIED* = 80010007H;
      RPC_E_CLIENT_DIED* = 80010008H;
      RPC_E_INVALID_DATAPACKET* = 80010009H;
      RPC_E_CANTTRANSMIT_CALL* = 8001000AH;
      RPC_E_CLIENT_CANTMARSHAL_DATA* = 8001000BH;
      RPC_E_CLIENT_CANTUNMARSHAL_DATA* = 8001000CH;
      RPC_E_SERVER_CANTMARSHAL_DATA* = 8001000DH;
      RPC_E_SERVER_CANTUNMARSHAL_DATA* = 8001000EH;
      RPC_E_INVALID_DATA* = 8001000FH;
      RPC_E_INVALID_PARAMETER* = 80010010H;
      RPC_E_CANTCALLOUT_AGAIN* = 80010011H;
      RPC_E_SERVER_DIED_DNE* = 80010012H;
      RPC_E_SYS_CALL_FAILED* = 80010100H;
      RPC_E_OUT_OF_RESOURCES* = 80010101H;
      RPC_E_ATTEMPTED_MULTITHREAD* = 80010102H;
      RPC_E_NOT_REGISTERED* = 80010103H;
      RPC_E_FAULT* = 80010104H;
      RPC_E_SERVERFAULT* = 80010105H;
      RPC_E_CHANGED_MODE* = 80010106H;
      RPC_E_INVALIDMETHOD* = 80010107H;
      RPC_E_DISCONNECTED* = 80010108H;
      RPC_E_RETRY* = 80010109H;
      RPC_E_SERVERCALL_RETRYLATER* = 8001010AH;
      RPC_E_SERVERCALL_REJECTED* = 8001010BH;
      RPC_E_INVALID_CALLDATA* = 8001010CH;
      RPC_E_CANTCALLOUT_ININPUTSYNCCALL* = 8001010DH;
      RPC_E_WRONG_THREAD* = 8001010EH;
      RPC_E_THREAD_NOT_INIT* = 8001010FH;
      RPC_E_UNEXPECTED* = 8001FFFFH;