home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 14 / tools / crsr.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-10-07  |  2.4 KB  |  80 lines

  1. (* ------------------------------------------------------ *)
  2. (*                      CRSR.PAS                          *)
  3. (*  Setzen der Cursorgröße auf einen beliebigen Wert und  *)
  4. (*  Abschalten des Bildschirms.                           *)
  5. (*  Die Implementation unter Turbo Pascal 4.0 ist aus-    *)
  6. (*  kommentiert.                                          *)
  7. (*       (c) 1988 by Hubert Brentano & TOOLBOX            *)
  8. (* ------------------------------------------------------ *)
  9. PROGRAM CRSR;
  10.  
  11. (* USES Crt, Dos; *)
  12.  
  13. VAR  Fflag             : BYTE;
  14. VAR  Anfang, Ende, Code: INTEGER;
  15. VAR  VideoMode         : BYTE ABSOLUTE $40:$65;
  16.  
  17. (* ---------- Deklarationen nur für Turbo 3.0 ----------- *)
  18. TYPE Registers = RECORD CASE INTEGER OF
  19.                    1 : (ax, bx, cx, dx, bp, si,di, ds, es,
  20.                         flags: INTEGER);
  21.                    2 : (al, ah, bl, bh, cl, ch, dl,
  22.                         dh: BYTE);
  23.                  END;
  24. (* ------------------------------------------------------ *)
  25.  
  26. PROCEDURE Fehler;
  27. BEGIN
  28.   WriteLn('Aufruf mit:     CRSR [Anfangswert ',
  29.           '(0-31)][Endwert (0-31)]');
  30.   WriteLn('Aufruf mit:     [off] = Bildschirm ',
  31.           'abschalten (Ein: Taste)');
  32.   WriteLn('ohne Parameter: Cursor Standardgröße (11 12)');
  33. END;
  34.  
  35. PROCEDURE Cursor(Anfang, Ende : INTEGER);
  36. VAR Regs : Registers;
  37. BEGIN
  38.   WITH Regs DO BEGIN
  39.     ah := 1;
  40.     ch := Anfang;
  41.     cl := Ende;
  42.     Intr($10, Regs);
  43.     (* Turbo 4.0: intr($10,Dos.Registers(Regs)); *)
  44.   END;
  45. END;
  46.  
  47. PROCEDURE Command;
  48. BEGIN
  49.   IF ParamCount <> 0 THEN BEGIN
  50.     IF ParamCount > 2 THEN Fflag := 1;        (* Fehler ! *)
  51.     Val(ParamStr(1), Anfang, Code);
  52.     IF Code <> 0 THEN Fflag := 1;
  53.     IF (Anfang < 0) OR (Anfang > 31) THEN Fflag := 1;
  54.     Val(ParamStr(2), Ende, Code);
  55.     IF Code <> 0 THEN Fflag := 1;
  56.     IF (Ende < 0) OR (Ende > 31) THEN Fflag:= 1;
  57.   END;
  58. END;
  59.  
  60. PROCEDURE ScreenOff;
  61. BEGIN
  62.   Port[$3b8] := VideoMode AND $f7;         (* ausschalten *)
  63.   REPEAT UNTIL KeyPressed;
  64.   Port[$3b8] := VideoMode OR $08;          (* einschalten *)
  65. END;
  66.  
  67. BEGIN
  68.   Fflag  := 0;
  69.   Anfang := 11;
  70.   Ende   := 12;
  71.   IF ParamStr(1) = 'off' THEN ScreenOff
  72.   ELSE BEGIN
  73.     Command;                    (* Befehlszeile auswerten *)
  74.     IF Fflag = 1 THEN Fehler
  75.     ELSE Cursor(Anfang, Ende );
  76.   END;
  77. END.
  78. (* ------------------------------------------------------ *)
  79. (*                  Ende von CRSR.PAS                     *)
  80.