{$x+} {Erm”glicht das Schreiben von Editor Hooks fr den Portfolio. (c)'97 Gunnar Th”le} unit hooks; interface const movechar=1; {Fr edho_goto} moveword=2; moveline=3; seline=4; separa=5; sefile=6; procedure gotoxy(x,y:byte); {Gotoxy, wie aus crt. Die Verwendung einer crt-unit in HOO-Files funktioniert meist nicht.} function edho_goto(count:integer;direction:word):integer; {Bewegt den Cursor um count vorw„rts bzw. rckw„rts (negativ). direction: movechar zeichenweise moveword wortweise moveline zeilenweise seline Zeilenanfang/-ende separa Absatzanfang/-ende sefile Dateianfang/-ende} procedure edho_get(var column,line:word); {Liefert momentane Position des Cursors zurck} procedure edho_ref; {Stellt den Text neu dar, Cursor in der Mitte} procedure edho_loc(var segment,offset:word); {Liefert Segment und Offset der Adresse des Zeichens unter dem Cursor im RAM zurck} function edho_ins(s:pchar):word; {Setzt s in den Text ein und setzt Cursor an Stringende. Wenn Ergebnis 0, dann Fehler aufgetreten.} function edho_del(number:integer;undelete:word):word; {L”scht number Zeichen aus dem Text. Wenn undelete=0 gehen sie nicht in den Undelete-Puffer. Negative number-Werte ergeben Backspace, positive Delete. Wenn Ergebnis 0, dann Fehler aufgetreten.} implementation uses dos; var r:registers; procedure gotoxy(x,y:byte); begin r.ah:=2; r.bh:=0; r.dl:=x; r.dh:=y; intr(16,r); end; function edho_goto(count:integer;direction:word):integer; begin r.ah:=3; r.al:=0; r.cx:=count; r.dx:=direction; intr($60,r); edho_goto:=r.ax; end; procedure edho_get(var column,line:word); begin r.ah:=3; r.al:=1; intr($60,r); column:=r.bx; line:=r.dx; end; procedure edho_ref; begin r.ah:=3; r.al:=2; r.bx:=2; r.dx:=32; intr($60,r); end; procedure edho_loc(var segment,offset:word); begin r.ah:=3; r.al:=3; intr($60,r); segment:=r.es; offset:=r.bx; end; function edho_ins(s:pchar):word; begin r.ah:=3; r.al:=4; r.es:=seg(s); r.bx:=ofs(s); intr($60,r); edho_ins:=r.ax; end; function edho_del(number:integer;undelete:word):word; begin r.ah:=3; r.al:=5; r.cx:=number; r.dx:=undelete; intr($60,r); edho_del:=r.ax; end; begin {šberprft, ob in Editor. Sonst sofort Programmende} r.ah:=2; r.dl:=$FF; intr($60,r); if r.al<>3 then halt(0); end.