home *** CD-ROM | disk | FTP | other *** search
- (* ----------------------------------------------------------------------- *)
- (* COMEDIT.PAS (v1.0) *)
- (* Komfortabler Kommandozeilen-Editor für MS-DOS in Turbo Pascal 3.0 *)
- (* (c) 1987 Karsten Gieselmann & PASCAL International *)
- (* ----------------------------------------------------------------------- *)
- {$K-,U-,R-,V-,I-,C-} (* alle Compiler-Optionen deaktivieren! *)
-
- CONST BufSize = 1024; (* Größe des Befehlszeilenpuffers *)
- StackSize = 2048; (* Größe des Laufzeit-Stapels *)
-
- {$I REGS8088.INC} (* CPU-Register-Typ aus PASCAL 6/87 *)
- {$I CRITICAL.INC} (* Interrupt-Handling, PASCAL 6/87 *)
- {$I MAKEINT.INC} (* " " " " *)
- {$I COMEDIT.UTL} (* Utility-Routinen für den Editor *)
- {$I COMEDIT.INC} (* Implementation des Zeileneditors *)
- {$I STACK.INC} (* Datenpuffer für Laufzeitstapel *)
-
- CONST FunctionRequest = $21;
- DosOldInterrupt : IntEntry_ = (Offset:0; Segment:0);
-
- VAR MaxLen : BYTE;
- StrPtr : ^Byte;
- s : StringType;
- Len : BYTE ABSOLUTE s; (* die Länge von s *)
-
-
- PROCEDURE DosInterrupt;
-
- {$I BEGININT.INC}
- WITH PgmRegs DO
- IF PgmAH <> $0A THEN (* Buffered Keyboard Input? *)
- {$I EXITINT.INC} (* nein: weiter mit Original Int 21h *)
- DosOldInterrupt)
- ELSE BEGIN (* ja, umlenken auf Zeileneditor *)
- MaxLen := Mem [PgmDS:PgmDX]; (* maximale Editier-Länge *)
- StrPtr := Ptr (PgmDS,PgmDX+1) ; (* Zeiger auf Übergabepuffer *)
- {$I NewStack.INC} (* auf eigenen Stapel schalten *)
- EditString (s, Pred(MaxLen)); (* jetzt Unterprogramm aufrufen *)
- {$I OldStack.INC} (* zurück zum alten Stapel *)
- s[Len+1] := ^M; (* CR anfügen, aber nicht mitzählen! *)
- Move (s, StrPtr^, Len+2); (* String in Puffer kopieren *)
- {$I ENDINT.INC}
- END;
-
- BEGIN
- ClearBuffer; (* Befehlszeilen-Puffer löschen *)
- WITH DosOldInterrupt DO
- IntGet (FunctionRequest, Segment, Offset);
- IntSet (FunctionRequest, CSeg, Ofs(DosInterrupt)); (* Interrupt umlegen *)
- LowVideo;
- WriteLn;
- WriteLn ('COMEDIT v1.0 installiert.',
- ' (C) 1988 Karsten Gieselmann & PASCAL INT.');
- WriteLn;
- MakeResident;
- END.
-