[Back to CHARS SWAG index] [Back to Main SWAG index] [Original]

    {
    Following is the solution to my problem derived from responses on the
    pascal newsgroups.

    All SWAG snippets that dealt with grabbing screen chars and attributes
    would crash under DPMI.

    The following is the solution, thanks to everybody for politely pointing
    out my misunderstanding of how DPMI works!!
    }

    function GetCharAttrib(x, y: byte; var a: byte): char;
    VAR
       UseSeg, VModeSeg, Ofs :WORD;
       MonoSystem: boolean;
    BEGIN
    { NOTE: Change the Segment from $B800 }
    {       to $B000 for MonoChrome.      }

        VModeSeg := seg0040;
        MonoSystem := (MEM[VModeSeg:$0049] = 7);

        if MonoSystem then UseSeg := segB000 else UseSeg := SegB800;

        Ofs := ((Y-1) * 160) + ((X SHL 1) - 1);
        A := MEM[UseSeg:Ofs];
        GetCharAttrib := CHR( MEM[UseSeg:Ofs-1] );
    END;

[Back to CHARS SWAG index] [Back to Main SWAG index] [Original]