home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1988 / 04 / comedit / comedit.pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-01-12  |  2.6 KB  |  57 lines

  1. (* ----------------------------------------------------------------------- *)
  2. (*                               COMEDIT.PAS  (v1.0)                       *)
  3. (*    Komfortabler Kommandozeilen-Editor für MS-DOS in Turbo Pascal 3.0    *)
  4. (*           (c) 1987  Karsten Gieselmann  &  PASCAL International         *)
  5. (* ----------------------------------------------------------------------- *)
  6. {$K-,U-,R-,V-,I-,C-}               (* alle Compiler-Optionen deaktivieren! *)
  7.  
  8. CONST BufSize   = 1024;                  (* Größe des Befehlszeilenpuffers *)
  9.       StackSize = 2048;                      (* Größe des Laufzeit-Stapels *)
  10.  
  11. {$I REGS8088.INC}                      (* CPU-Register-Typ aus PASCAL 6/87 *)
  12. {$I CRITICAL.INC}                      (* Interrupt-Handling,  PASCAL 6/87 *)
  13. {$I MAKEINT.INC}                       (*     "        "          "    "   *)
  14. {$I COMEDIT.UTL}                       (* Utility-Routinen für den Editor  *)
  15. {$I COMEDIT.INC}                       (* Implementation des Zeileneditors *)
  16. {$I STACK.INC}                         (* Datenpuffer für Laufzeitstapel   *)
  17.  
  18. CONST FunctionRequest = $21;
  19.       DosOldInterrupt : IntEntry_ = (Offset:0; Segment:0);
  20.  
  21. VAR   MaxLen   : BYTE;
  22.       StrPtr   : ^Byte;
  23.       s        : StringType;
  24.       Len      : BYTE ABSOLUTE s;                       (* die Länge von s *)
  25.  
  26.  
  27. PROCEDURE DosInterrupt;
  28.  
  29. {$I BEGININT.INC}
  30.   WITH PgmRegs DO
  31.     IF PgmAH <> $0A THEN                       (* Buffered Keyboard Input? *)
  32.       {$I EXITINT.INC}                (* nein: weiter mit Original Int 21h *)
  33.             DosOldInterrupt)
  34.     ELSE BEGIN                            (* ja, umlenken auf Zeileneditor *)
  35.       MaxLen := Mem [PgmDS:PgmDX];               (* maximale Editier-Länge *)
  36.       StrPtr := Ptr (PgmDS,PgmDX+1) ;         (* Zeiger auf Übergabepuffer *)
  37.       {$I NewStack.INC}                     (* auf eigenen Stapel schalten *)
  38.       EditString (s, Pred(MaxLen));        (* jetzt Unterprogramm aufrufen *)
  39.       {$I OldStack.INC}                         (* zurück zum alten Stapel *)
  40.       s[Len+1] := ^M;                 (* CR anfügen, aber nicht mitzählen! *)
  41.       Move (s, StrPtr^, Len+2);               (* String in Puffer kopieren *)
  42.     {$I ENDINT.INC}
  43. END;
  44.  
  45. BEGIN
  46.   ClearBuffer;                             (* Befehlszeilen-Puffer löschen *)
  47.   WITH DosOldInterrupt DO
  48.     IntGet (FunctionRequest, Segment, Offset);
  49.   IntSet (FunctionRequest, CSeg, Ofs(DosInterrupt));  (* Interrupt umlegen *)
  50.   LowVideo;
  51.   WriteLn;
  52.   WriteLn ('COMEDIT v1.0 installiert.',
  53.            '        (C) 1988  Karsten Gieselmann & PASCAL INT.');
  54.   WriteLn;
  55.   MakeResident;
  56. END.
  57.