home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1988 / 04 / comedit / readstr.inc < prev    next >
Encoding:
Text File  |  1988-01-12  |  3.4 KB  |  72 lines

  1. (* ----------------------------------------------------------------------- *)
  2. (*                              READSTR.INC  (v1.0)                        *)
  3. (*      Bequeme String-Eingabe durch Ansprechen des DOS-Zeileneditors      *)
  4. (*          (c) 1987  Karsten Gieselmann  &  PASCAL International          *)
  5. (* ----------------------------------------------------------------------- *)
  6. TYPE StringType = STRING[255];
  7.      Registers  = RECORD
  8.                      CASE INTEGER OF
  9.                         1: (AX,BX,CX,DX,BP,SI,DI,DS,ES,Flags : INTEGER);
  10.                         2: (AL,AH,BL,BH,CL,CH,DL,DH          : BYTE)
  11.                      END;
  12. (* ----------------------------------------------------------------------- *)
  13. PROCEDURE ReadString (VAR s :StringType; MaxLen :BYTE);
  14.    CONST DosBackColor = Black;       (* hier müssen die DOS-Farben stehen! *)
  15.          DosForeColor = LightGray;
  16.    VAR   Regs       : Registers;
  17.          TextAttr   : BYTE ABSOLUTE DSeg:$0008;   (* Turbo's Videoattribut *)
  18.          Strg       : StringType;
  19.          Max        : BYTE;
  20.    (* -------------------------------------------------------------------- *)
  21.    (*    Ausgabe eines Strings über DOS (notwendig für ANSI-Sequenzen)     *)
  22.    PROCEDURE Display (s : StringType);
  23.       VAR Regs : Registers;
  24.    BEGIN
  25.      s := s + '$';                                    (* Delimiter anfügen *)
  26.      WITH Regs DO BEGIN
  27.        AH := $09;                      (* Funktion Nr.09h:  DISPLAY STRING *)
  28.        DS := Seg (s);
  29.        DX := Succ (Ofs(s));            (* Längenbyte ist unwichtig für DOS *)
  30.      END;
  31.      MsDos (Regs);
  32.    END;
  33.    (* -------------------------------------------------------------------- *)
  34.    (*          Umwandlung einer ganzen Zahl in eine Zeichenkette           *)
  35.    FUNCTION NumStr (Num : INTEGER) : StringType;
  36.       VAR s : StringType;
  37.    BEGIN
  38.      Str (Num, s);  NumStr := s
  39.    END;
  40.    (* -------------------------------------------------------------------- *)
  41.    (* übergibt die im Attributbyte "Attr" enthaltenen Information an ANSI  *)
  42.    PROCEDURE SetANSIAttr (Attr : BYTE);
  43.       VAR   ForeColor,
  44.             BackColor  : BYTE;
  45.             Blink,
  46.             Bold       : BOOLEAN;
  47.    BEGIN
  48.      ForeColor := Attr MOD 16;      BackColor := Attr DIV 16;
  49.      Blink := (BackColor > 7);      Bold := (ForeColor > 7);
  50.      BackColor := BackColor MOD 8;  ForeColor := ForeColor MOD 8;
  51.      Display (^['[0;' + NumStr(ForeColor+30) + ';' + NumStr(BackColor+40));
  52.      IF Blink THEN  Display (';5');
  53.      IF Bold THEN  Display (';1');
  54.      Display ('m');                           (* Abschluß der ANSI-Sequenz *)
  55.    END;
  56.    (* -------------------------------------------------------------------- *)
  57. BEGIN
  58.   IF MaxLen < 255 THEN  Max := Succ (MaxLen) (* abschließendes CR berücks. *)
  59.   ELSE  Max := MaxLen;
  60.   SetANSIAttr (TextAttr);      (* DOS auf aktuelle Turbo-Farben einstellen *)
  61.   WITH Regs DO BEGIN
  62.     AH := $0A;                 (* Funktion Nr.0Ah: BUFFERED KEYBOARD INPUT *)
  63.     DS := Seg (Max);
  64.     DX := Ofs (Max);          (* DS:DX zeigt jetzt auf den Stack (auf Max) *)
  65.   END;
  66.   MsDos (Regs);
  67.   SetANSIAttr (DosBackColor SHL 4 + DosForeColor);      (* alte DOS-Farben *)
  68.   s := Strg;
  69. END;
  70. (* ----------------------------------------------------------------------- *)
  71. (*                              READSTR.INC  (v1.0)                        *)
  72.