| HOME | NEWS | AWARDS | ABOUT ME | TEXTE | REFERATE | PROJEKTE |
| MUSIK
| CHAT
| SPECIAL | LINKS |
PROGRAM DOS_tool; {INITIALISIERUNG der Variablen, Units, Foward-Prozeduren und Compilerdirektiven} {$r-,s-} {$M 8000,0,0} USES DOS,crt,maus; VAR intvec8,intvec9,intvec28:pointer; idstring:^byte; active,mouseon:boolean; turbosp,turboss,oldss,oldsp :word; i:integer; a,b,taste:byte; FUNCTION vecs_changed: boolean;forward; {PROZEDUREN UND FUNKTIONEN} PROCEDURE totalexec(s:string); VAR t_a,z,l:byte; BEGIN l:=length(s); t_a:=mem[$0040:$0080]; mem[$0040:$001a]:=t_a; mem[$0040:$001c]:=t_a; z:=0; WHILE z0 THEN BEGIN mem[$0040:t_a+(2*z)]:=13; mem[$0040:$001c]:=t_a+(2*z)+2; END; END; PROCEDURE setcursor(x, y: Byte); VAR r: registers; BEGIN r.ah := 2; r.dh := y; r.dl := x; r.bh := 0; intr($10,r); END; PROCEDURE getcursor(VAR x, y:byte); VAR r: registers; BEGIN r.ah := 3; r.bh := 0; Intr($10,R); y:=r.dh; x:=r.dl; END; FUNCTION getstringatmouse:string; VAR ad:integer; s :string; b1,b2:boolean; BEGIN ad:=mousey div 8*160+mousex div 8*2; s:=''; WHILE mem[$b800:ad]<>32 DO BEGIN s:=s+chr(mem[$b800:ad]); inc(ad,2); END; ad:=mousey div 8*160+mousex div 8*2-2; WHILE (ad mod 160<157) and>=0) and (mem[$b800:ad]<>32) DO BEGIN s:=chr(mem[$b800:ad])+s; dec(ad,2); END; ad:=1; b1:=false; b2:=false; WHILE ad<=length(s) DO IF s[ad] in ['[','<'] then begin if s>'] THEN BEGIN IF (s[ad]=']') and b1 THEN delete(s,ad,1); IF (s[ad]='>') and b2 THEN delete(s,ad,1); IF ((s[ad]=']') and not b1) or ((s[ad]='>') and not b2) THEN BEGIN delete(s,1,ad); ad:=1; END; b1:=false; b2:=false; END ELSE inc(ad); getstringatmouse:=s; END; PROCEDURE reset_vecs; BEGIN setintvec($08,intvec8); setintvec($09,intvec9); setintvec($28,intvec28); END; PROCEDURE re_alloc_mem; VAR r: registers; BEGIN with r DO BEGIN ax:=$4900; es:=word(ptr(prefixseg,$2c)^); intr($21,r); ax:=$4900; es:=prefixseg; intr($21,r); END; END; PROCEDURE action; VAR command:string[15]; BEGIN if mouseon then mousehide; mouseon:=true; command:=getstringatmouse; IF (button=2) and (command<>'') THEN command:='cd '+command; IF command='UNLOAD' THEN BEGIN IF vecs_changed THEN BEGIN writeln('Ein Entfernen des Programms ist unmöglich, da einer oder mehrere'); writeln('Vektoren nicht mehr direkt auf das Programm zeigen !'); writeln('Andere TSRs entfernen und erneut probieren !'); END ELSE BEGIN reset_vecs; re_alloc_mem; END; END ELSE IF command<>'' THEN totalexec(command); mousestatus; getmousestatus; i:=0; delay(150); mouseon:=false; END; PROCEDURE screenwork; BEGIN IF mouseon THEN mousehide; getcursor(a,b); setcursor(65,0); write('-----------'); setcursor(65,1); write('| DIR |'); setcursor(65,2); write('| DIR/w |'); setcursor(65,3); write('| DIR/p |'); setcursor(65,4); write('| DIR/p/w |'); setcursor(65,5); write('| CD.. |'); setcursor(65,6); write('| UNLOAD |'); setcursor(65,7); write('-----------'); setcursor(a,b); mouseshow; mousestatus; mouseon:=true; END; PROCEDURE int8;interrupt; BEGIN INLINE($9c/$ff/$1e/intvec8); IF (not active) THEN BEGIN getmousestatus; IF i mod 15=0 THEN screenwork; inc(i); IF button<>0 THEN BEGIN ASM cli mov oldss,ss mov oldsp,sp mov ss,turboss mov sp,turbosp sti END; active:=true; action; ASM cli mov ss,oldss mov sp,oldsp END; END; END; END; PROCEDURE int9;interrupt; BEGIN ASM in al,60h mov taste,al END; IF taste=$1C THEN BEGIN IF mouseon THEN mousehide; mouseon:=false; active:=true; END; INLINE($9c/$ff/$1e/intvec9); END; PROCEDURE int28;interrupt; BEGIN IF active and not mouseon THEN BEGIN getcursor(a,b); i:=b*160+a*2-2; WHILE (i mod 160<157) and>=0) and (active=true) DO IF mem[$b800:i]=62 THEN active:=false ELSE dec(i,2); END; INLINE($9c/$ff/$1e/intvec28); END; FUNCTION vecs_changed: boolean; CONST ints: array[1..3] of byte=($08,$09,$28); VAR akt_seg: word; int_no: byte; newints_feld: array[1..3] of word; BEGIN vecs_changed:=false; newints_feld[1]:=seg(int8); newints_feld[2]:=seg(int9); newints_feld[3]:=seg(int28); for i:=1 to 3 DO BEGIN int_no:=ints[i]; ASM mov al,int_no mov ah,35h int 21h mov akt_seg,es END; IF akt_seg<>newints_feld[i] THEN vecs_changed:=true; END; END; PROCEDURE instid(n:string); BEGIN getmem(idstring,length(n)+1); WHILE ofs(idstring^) mod 16<>0 DO getmem(idstring,1); move(n[0], idstring^, length(n)+1); END; FUNCTION findit(n:string):boolean; VAR sptr:^string; BEGIN sptr:=ptr(0,0); WHILE (sptr^<>n) and (seg(sptr^) Zurück
| HOME | NEWS | AWARDS | ABOUT ME | TEXTE | REFERATE | PROJEKTE |
| MUSIK
| CHAT
| SPECIAL | LINKS |