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

    Unit Cursor;  { Cursor.Pas }

    interface

    const
    CursorOn  = True;
    CursorOff = False;

    { Cursor shapes }

    ThinCursor    = $0707; { Thin cursor }
    OvrCursor     = $0307; { Overwrite cursor }
    InsCursor     = $0607; { Insert cursor (default) }
    BarCursor     = $000D; { Bar cursor }

    procedure SetCursor(CursorFlag : boolean);
    function GetCursorType : word;
    function SetCursorType(Shape : word) : word;

    implementation

    uses Crt;

    var
    CursorShape : word;

    Procedure SetCursor; assembler;

    { Sets the cursor on/off using the current value of the global
    CursorShape variable. Monochrome monitors supported }
    Asm
    CMP CursorFlag,True
    JNE @@2
    CMP BYTE PTR [LastMode],Mono
    JE  @@1
    MOV CX,CursorShape  { Switch on cursor using the default shape }
    JMP @@4
    @@1:
    MOV CX,0B0Ch  { Switch on mono cursor }
    JMP @@4
    @@2:
    CMP BYTE PTR [LastMode],Mono
    JE  @@3
    MOV CX,2000h  { Switch off cursor }
    JMP @@4
    @@3:
    XOR CX,CX     { Switch off mono cursor }
    @@4:
    MOV AH,01h
    XOR BH,BH
    INT 10h
    End; { SetCursor }

    Function GetCursorType;

    { Returns the current cursor shape/type in word }

    Begin
    GetCursorType := MemW[Seg0040:$0060]
    End; { GetCursorType }

    Function SetCursorType; assembler;

    { Sets new cursor type/shape. Old cursor shape is returned }

    Asm
    MOV AX,CursorShape { save old value }
    MOV BX,Shape
    CMP BYTE PTR [LastMode],Mono
    JNE @@1
    XOR BX,BX { Switch off mono cursor }
    @@1:
    MOV CursorShape,BX
    End; { SetCursorType }

    Begin
    CursorShape := GetCursorType
    End. { Cursor.Pas }

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