home *** CD-ROM | disk | FTP | other *** search
- UNIT BackUnit;
- Interface
- Uses Crt, Dos;
- PROCEDURE Backward_On;
- PROCEDURE Backward_Off;
- (*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*)
- Implementation
- VAR
- SaveExit : Pointer;
- HoldOutput, HoldFlush : pointer;
-
- PROCEDURE ConOut(C : Char);
- CONST
- CR = #$0D; {carriage return}
- LF = #$0A; {line feed}
- BEL = #7; {bell character}
- BKS = #8; {backspace}
- VAR
- regs : Registers;
- X,Y : Byte;
- BEGIN
- WITH regs DO
- BEGIN
- CASE C OF
- CR : GotoXY(80,WhereY);
- LF : BEGIN
- Y := succ(WhereY);
- IF Y > 25 THEN
- BEGIN
- GotoXY(1,1);
- DelLine;
- Y := 25;
- END;
- GotoXY(WhereX,Y);
- END;
- BEL: BEGIN Sound(750); Delay(300); NoSound; END;
- BKS: BEGIN
- X := WhereX;
- IF X < 80 THEN
- GotoXY(succ(X),WhereY);
- END;
- ELSE {just write the character }
- AH := 9;
- AL := Ord(C);
- BH := 0;
- BL := TextAttr;
- CX := 1;
- Intr($10, regs);
-
- {now reposition the cursor}
- X := WhereX; Y := WhereY;
- IF X > 1 THEN Dec(X)
- ELSE
- BEGIN
- X := 80;
- Inc(Y);
- END;
- IF Y > 25 THEN
- BEGIN
- GotoXY(1,1);
- DelLine;
- Y := 25;
- X := 80;
- END;
- GotoXY(X,Y);
- END; {CASE}
- END;
- END; {PROCEDURE ConOut(C : Char);}
-
- {$F+} FUNCTION UsrOutput(VAR F : TextRec) : Integer;{$F-}
- VAR N : Byte;
- BEGIN
- WITH F DO
- BEGIN
- FOR N := 0 TO Pred(BufPos) DO ConOut(BufPtr^[N]);
- BufPos := 0;
- END;
- UsrOutput := 0;
- END;
-
- PROCEDURE Backward_On;
- BEGIN
- TextRec(Output).InOutFunc := @UsrOutput;
- TextRec(Output).FlushFunc := @UsrOutput;
- END;
-
- PROCEDURE Backward_Off;
- BEGIN
- TextRec(Output).InOutFunc := HoldOutput;
- TextRec(Output).FlushFunc := HoldFlush;
- END;
-
-
- {$F+}PROCEDURE MyExitProc;{$F-}
- BEGIN
- Backward_Off;
- ExitProc := SaveExit;
- END;
- (*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*)
- {Initialization section}
- BEGIN
- SaveExit := ExitProc;
- ExitProc := @MyExitProc;
- HoldOutput := TextRec(Output).InOutFunc;
- HoldFlush := TextRec(Output).FlushFunc;
- END.
-