home *** CD-ROM | disk | FTP | other *** search
- {$R-,S-,I+,D+,T+,F-,V-,B-,N-,L+ }
- UNIT KTOOLS;{ver 3.0}
-
- INTERFACE
- USES
- Dos,
- Crt;
-
- TYPE
- Colors = 0..15;
- MenuItemType = String[30];
- MenuDescType = String[80];
- ScrType = Array[1..4004] OF Byte;
- SaveScrType = ^ScrType;
- BorderType = Record
- TL,TR,BL,BR,FH,FV : Char;
- End;
- AllFiles=ARRAY[1..500] of String[12];
-
- CONST
- Border1 : BorderType = (TL:'╔';TR:'╗';BL:'╚';BR:'╝';FH:'═';FV:'║');
- Border2 : BorderType = (TL:'╒';TR:'╕';BL:'╘';BR:'╛';FH:'═';FV:'│');
- Border3 : BorderType = (TL:'┌';TR:'┐';BL:'└';BR:'┘';FH:'─';FV:'│');
- Border4 : BorderType = (TL:'░';TR:'░';BL:'░';BR:'░';FH:'░';FV:'░');
- Border5 : BorderType = (TL:'▓';TR:'▓';BL:'▓';BR:'▓';FH:'▓';FV:'▓');
-
- VAR
- ActiveDP : Byte; (* Aktivni stranka displeje *)
- LineWidth : Integer; (* Sirka cary aktualniho video modu *)
- VideoMode : Byte; (* Aktualni video mod t.j. 0,1,2,3,7 *)
- ErrorCode : Integer; (* Globalni promenna typu integer pro
- osetreni chyb *)
-
- FUNCTION CurrentVideoMode : Byte;
- (*
- Tato funkce vraci aktualni video mod ... 0..3 = barva, 7 = mono.
- Globalni promenne LineWidth & ActiveDP jsou nastaveny pokazde,
- kdyz je tato funkce volana.
- *)
-
- PROCEDURE CursorOn;
- (*
- Tato procedura detekuje aktualni video mod a obnovuje normalni kurzor.
- *)
-
- PROCEDURE CursorOff;
- (*
- Tato procedura nastavuje paty bit ridiciho bytu pro kurzor, pricemz
- kurzor zmizi.
- *)
-
- FUNCTION KUCase(S:String):String;
- (*
- Tato funkce pouziva proceduru upcase ke zkonvertovani celeho retezce
- nebo radku z textoveho souboru na velka pismena.
- *)
-
- FUNCTION KLCase(S:String):String;
- (*
- Tato funkce pouziva CHR & ORD a ma opacnou funkci jako KUCase.
- *)
-
- FUNCTION Color(FG,BG:Colors):Byte;
- (*
- Tato funkce vraci atribut barvy (popredi na pozadi).
- Bit pro blikani je odstranen.
- *)
-
- PROCEDURE KAttr(Row,Col,Rows,Cols:Integer;Attr:Byte);
- (*
- Tato procedura zapise specifikovany atribut od Row/Col do Cols/Rows.
- *)
-
- PROCEDURE KFill(Row,Col,Rows,Cols:Integer;Ch:Char;Attr:Byte);
- (*
- Tato procedura zapise specifikovany znak od Row/Col do Cols/Rows.
- *)
-
- PROCEDURE KTrim(VAR S:String);
- (*
- Tato procedura odstrani vsechny nevyznamne mezery z retezce.
- (Na zacatku a na konci retezce.)
- *)
-
- PROCEDURE KWrite(Row,Col:Integer;Attr:Byte;S:String);
- (*
- Tato procedura zapise retezec na pozici Row/Col s text Attr.
- Pouziva aktualni param ze zasobniku.
- *)
-
- PROCEDURE KWriteV(Row,Col:Integer;Attr:Byte;VAR S:String);
- (*
- Tato procedura zapise retezec na pozici Row/Col s text Attr.
- Pouziva param adress ze zasobniku.
- *)
-
- PROCEDURE KWriteC(Row:Integer;Attr:Byte;S:String);
- (*
- Tato procedura zapise retezec na pozici Row/Col s text Attr.
- Vystup je centovan na obrazovce mezi radky 1 a 80.
- *)
-
- PROCEDURE KWriteCV(Row:Integer;Attr:Byte;VAR S:String);
- (*
- Tato procedura zapise retezec na pozici Row/Col s text Attr.
- Vystup je centovan na obrazovce mezi radky 1 a 80.
- Pouziva param adress ze zasobniku.
- *)
-
-
- FUNCTION ReadPen:Integer;
- (*
- Tato funkce cte aktualni pozici svetelneho pera pokud bylo aktivovano
- a hodnotu jako integer.
- *)
-
- FUNCTION PenPosition(Row,Col:Byte):Integer;
- (*
- Tato funkce vraci integer z radku/sloupce (Row/Col) ktera koresponduje
- s hodnotou, kterou vraci ReadPen.
- *)
-
- FUNCTION PenRow(Pen_Position:Integer):Byte;
- (*
- Tato funkce vraci radek z integerove hodnoty Pen_Position.
- *)
-
- FUNCTION PenCol(Pen_Position:Integer):Byte;
- (*
- Tato funkce vraci sloupec z integerove hodnoty Pen_Position.
- *)
-
- (*
- POZNAMKA: Uziti rutin pro svetelne pero;
-
- ReadPen :
- Vraci pozici vybranou svetelnym perem, jeslize bylo s.pero
- aktivovano. Jinak ReadPen vraci 0. Integerova hodnota obsahuje
- prislusny radek v vyssim bytu a prislusny sloupec v nizsím bytu.
-
- PenPosition :
- Tato rutina je pouzitelna pro vypocet integerove hodnoty
- ze zadaneho radku a sloupce. Vypoctena hodnota muze byt
- porovnavana s hodnotou vracenou funkci ReadPen a pouzita
- k dalsimu rizeni behu programu.
-
- PenRow : Vraci akt. radek z integerove hodnoty Pen_Position.
-
- PenCol : Vraci akt. sloupec z integerove hodnoty Pen_Position.
-
- *)
-
-
- PROCEDURE KSaveScr(ULRow,ULCol,Rows,Cols : Byte;
- VAR Dest_Variable : SaveScrType);
- (*
- Tato procedura uschova obsah oblasti obrazovky mezi ULRow/ULCol a
- Rows/Cols do promenne Dest_Variable. Prvni ctyri byty promenne
- Dest_Variable obsahuji 1)ULRow 2)ULCol 3)Rows 4)Cols, takze obrazovka
- je jednoduse obnovena volanim KRestoreScr(Source_Variable);
- *)
-
- PROCEDURE KRestoreScr(Source_Variable : SaveScrType);
- (*
- Tato procedura obnovuje obrazovku, k cemuz pouziva obsah promenne
- Source_Variable. Prvni ctyri byty obsahuji popis oblasti obrazovky, kam
- ma byt Source_Variable ulozena.
- *)
-
-
- PROCEDURE KBox (ULRow,ULCol,Rows,Cols: Integer;
- FrameAttr,WindowAttr : Byte;
- Border : BorderType;
- ClearWindow : Boolean);
- (*
- Tato procedura namaluje ramecek pouzivajici jeden z peti typu okraje.
- Barvy popredi a pozadi musi byt zadany stejne jako barva aktualniho
- okna. ClearWindow je vlajka pro vymazani okna pouzitim WindowAttr
- s mezerami nebo pro ponechani vnitrku okna. Jestlize okno neni vymazano,
- je text. atribut okna nezmenen.
- *)
-
- FUNCTION KVertMenu(Selection_Start : INTEGER; {vyber v menu pri jeho vyvolani }
- VAR MenuList; {seznam polozek menu }
- MenuItemTotal, {celkovy pocet polozek menu }
- XStart, {pocatecni pozice - sloupec }
- YStart, {poc. pozice - radek }
- XHiliteStart, {zvyrazneny pocet sloupcu }
- LengthOfHilite, {pocet sloupcu pro zvyrazneni }
- NormalAttr, {normalni text atribut pro menu }
- HiliteAttr : {atribut zvyraznene polozky }
- INTEGER):INTEGER; {funkce vraci integerovou hodnotu}
- (*
- Tato procedura pouziva pole polozek type menuitemtype a vygeneruje vertikalni
- menu slozene z techto polozek. Vraci zvolenou polozku jako hodnotu integer.
- MenuList je promena bez uvedeni typu, ktera je pristupna procedure pomoci
- prikazu Absolute.
- *)
-
- FUNCTION KHorizMenu(Selection_Start:INTEGER; {vyber v menu pri jeho vyvolani }
- VAR MenuList, {seznam polozek menu }
- MenuDesc; {popis kazde polozky }
- MenuItemTotal, {celkovy pocet polozek menu }
- MenuWindowWidth, {pocet sloupcu pro menu }
- XStart, {pocatecni pozice - sloupec }
- YStart, {poc. pozice - radek }
- NormalAttr, {normalni text atribut pro menu }
- HiliteAttr, {atribut zvyraznene polozky }
- DescAttr: {barva pro popis }
- INTEGER):INTEGER; {funkce vraci hodnotu integer }
-
- (*
- Tako procedura pouziva pole polozek typu menuitemtype a generuje horizontalni
- menu z techto polozek spolu se zvolenym popisem kazde polozky. Funkce vraci
- cislo volby - integerovou hodnotu. MenuList je promenna bez uvedeni typu,
- ktera je procedure pristupna prikazem Absolute.
- *)
-
- PROCEDURE CopyFile(Input_File, {filename.ext souboru pro kopirovani}
- Output_File {filename.ext vytvareneho souboru }
- :String;
- VAR Return_Code {DOS error - kod chyby DOSu }
- :Integer;
- EraseInputFile:Boolean);
- (*
- Tato procedura zkopiruje Input_File do souboru vytvoreneho jako OutPut_File.
- Toto je "aktualni kopie", proto jmena souboru nemohou byt stejna. Funkce
- prejmenovani je podporovana primo DOSem, ktera prejmenuje soubor a soucasne
- odstrani stary soubor. Proto, kdyz je "EraseInputFile" = true, pouzijeme
- DOSovou funkci ke zkopirovani souboru "do" jeho noveho jmena. Jestlize
- je "EraseInputFile" = false, pak je DOSova funkce vynechana a my muzeme
- jednoduse provest zkopirovani.
- *)
-
-
- FUNCTION IntToHex(IntNum:Integer):String;
- (*
- Tato funkce konvertuje integerovou hodnotu na hexadecimalni, ktera je
- reprezentovana typem string.
- *)
-
-
- FUNCTION Space(Number:Integer):String;
- (*
- Tato funkce vraci promennou typu String, ve ktere je zadany
- pocet {Number} mezer.
- *)
-
-
- PROCEDURE DirFill(VAR Path:String; {deklarovana cesta pro hledani}
- VAR Files:AllFiles; {pole vsech souboru v direktorari}
- VAR Counter:Integer; {celkovy pocet souboru v direktorari}
- IncludeDirListings:Boolean);
- (*
- Dana cesta pro prohledavani v Path je pole polozek typu Allfiles je
- vlozena do promenne FILES. V COUNTER je pocet platnych vstupu - celkovy
- pocet souboru obsazenych ve FILES. Jestlize INCLUDEDIRLISTLINGS = true,
- pak vsechny adresare v predane ceste budou vlozeny do pole a mohou byt
- vybrany.
- *)
-
- PROCEDURE SortDir(VAR Files:AllFiles; {pole vsech souboru v adresari}
- VAR Counter:Integer); {pocet souboru, ktere chcete tridit}
- {do celk. poctu souboru}
- (*
- Tato procedura setridi podle jmena soubory, jejichz pocet je uveden
- v Counter. Muzete tridit max. 500 souboru - pole ALLFILES ma max. pocet
- polozek 500.
- *)
-
-
- FUNCTION PIKDIR(Path:String;IncludeDir:Boolean):String;
- (*
- Funkce vraci cestu/soubor v PIKDIR. Cesta je specifikovana v PATH.
- Jestlize INCLUDEDIR = true, pak je mozno vybrat soubor ze vsech pristupnych
- adresaru. Jestlize INCLUDEDIR=false. pak lze vybrat pouze ze souboru
- nachazejicich se v PATH.
-
- POZN. : PIKDIR vraci kompletni cestu+soubor. Nevrati cestu bez uvedeni
- souboru.
- *)
-
-
- IMPLEMENTATION
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- FUNCTION CurrentVideoMode:Byte;
- VAR
- Regs:Registers; {Registry definovane v jednotce DOS}
- BEGIN
- Regs.AH := $F;
- Intr($10,Regs);
- CurrentVideoMode:=Regs.AL; {Prirazeni video modu ke jmenu funkce}
- ActiveDP:=Regs.BH; {Aktivni stranka}
- LineWidth:=Regs.AH; {Pocet znaku na radek}
- END;
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- PROCEDURE CursorOn;
- VAR
- Regs:Registers; {Registry definovane v jednotce DOS}
- Mode:Byte;
- BEGIN
- Mode := CurrentVideoMode; {aktualni video mod}
- IF Mode IN[0..3] THEN
- BEGIN
- Regs.AH := $01; { Obnoveni barevneho kurzoru }
- Regs.CH := $06;
- Regs.CL := $07;
- Intr($10,Regs);
- END
- ELSE
- IF Mode = 7 THEN
- BEGIN
- Regs.AH := $01; { Obnoveni monochrom. kurzoru }
- Regs.CH := $C;
- Regs.CL := $D;
- Intr($10,Regs);
- END
- ELSE
- BEGIN
- Regs.AH := $01; { Zobrazeni kurzoru ve tvaru }
- Regs.CH := $1; { bloku,jestlize }
- Regs.CL := $D; { vsechno selhalo }
- Intr($10,Regs);
- END;
-
- END;
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- PROCEDURE CursorOff;
- VAR
- Regs:Registers;
- BEGIN { Nastaveni bitu 5 ridiciho bytu kurzoru }
- Regs.AH := $01; { coz zhasne kurzor }
- Regs.CH := $20;
- Intr($10,Regs);
- END;
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- FUNCTION KUCase(S:String):String;
- VAR
- I: integer;
- BEGIN
- FOR I := 1 TO Length(S) DO S[I] := UpCase(S[I]);
- KUCase := S;
- END;
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- FUNCTION KLCase(S:String):String;
- VAR
- I: integer;
- BEGIN
- FOR I := 1 TO Length(S) DO
- IF S[I] IN['A'..'Z'] THEN {If character is A-Z }
- S[I]:=CHR(ORD(S[I])+$20);{Pridani HEX 20 pro mala pismena}
- KLCase := S;
- END;
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- FUNCTION Color(FG,BG:Colors):Byte;
- BEGIN
- Color := (FG+(BG SHL 4)) MOD 128;{posunuti pozadi o ctyri bity doleva}
- { a pridani popredi MOD 128}
- END; {MOD 128 odstrani blikani}
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- PROCEDURE KAttr(Row,Col,Rows,Cols:Integer;Attr:Byte);
- VAR
- Ch,X,Y,R,C:Integer;
- Regs:Registers;
- BEGIN
- R:=(Row+(Rows-1));
- C:=(Col+(Cols-1));
- REPEAT
- X:=Col;
- REPEAT
- GOTOxy(x,Row); {volani BIOSu - precteni znaku}
- Regs.AH:=$08; {a attributu }
- Regs.BH:=ActiveDP; {Specifikace aktivni stranky }
- Intr($10,Regs);
-
- { Regs.AL obsahuje znak precteny sluzbou 8}
-
- Regs.AH:=$09; {volaniBIOS pro zapsani znaku}
- {a tributu na obrazovku}
- Regs.BH:=ActiveDP; {specifikace aktivni stranky}
- Regs.BL:=Attr; {specifikace atributu }
- Regs.CX:=$01; {zapis jednou}
- Intr($10,Regs);
- X:=X+1; {INC X t.j. pozice sloupce}
- UNTIL X>C;
- Row:=Row+1; {INC Row t.j. pozice radku}
- UNTIL Row > R;
- END;
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- PROCEDURE KFill(Row,Col,Rows,Cols:Integer;Ch:Char;Attr:Byte);
- VAR
- R:Integer;
- Regs:Registers;
-
- (**)
-
- BEGIN
- R:=(Row+(Rows-1));
- REPEAT
- GOTOxy(col,Row);
- Regs.AH:=$09;
- Regs.AL:=ORD(Ch);
- Regs.BH:=ActiveDP;
- Regs.BL:=Attr;
- Regs.CX:=cols;
- Intr($10,Regs);
- Row:=Row+1;
- UNTIL Row > R;
- END;
-
- (*
-
- { Jestlize nechcete pouzivat volani BIOSu, odstrante komentarove zavorky
- a znovu zkompilujte. }
-
- S : String;
- SavedTextAttr:Integer;
-
- BEGIN
- S:='';
- FOR X := 1 to Cols DO
- S:=S+Ch;
- R:=(Row+(Rows-1));
- SavedTextAttr:=CRT.TextAttr;
- CRT.TextAttr:=Attr;
- REPEAT
- GOTOxy(Col,Row);
- Write(s);
- Row:=Row+1;
- UNTIL Row > R;
- CRT.TextAttr:=SavedTextAttr
- END;
- *)
-
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- PROCEDURE KTrim(VAR s : string);
- VAR
- x,b,e : Integer;
- BEGIN
- For X := 1 to LENGTH(s) DO
- IF s[1]=' ' THEN DELETE(S,1,1); {odstraneni nevyznamnych mezer}
- b:=1;
- e:=ORD(s[0]);
- REPEAT
- IF s[e] = ' ' THEN DELETE(S,e,1);
- DEC(e);
- UNTIL s[e] <> ' ';
-
- END;
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- (*
- Nasledujici procedury nepouzivaji volani BIOSu. TEXTATTR je v jednotce
- CRT a obsahuje atribut aktualni video stranky a potrebnou pozici znaku.
- Proto ho uschovame pred nasim zapisem na obrazovku. Centrovani textu
- je provedeno odectenim delky retezce od LineWidth a vydelenim 2.
- Timto zpusobem ziskame pocatecni sloupec.
- *)
-
- PROCEDURE KWrite(Row,Col:Integer;Attr:Byte;S:String);
- VAR
- SavedTextAttr:Integer;
- BEGIN
- SavedTextAttr:=CRT.TextAttr;
- CRT.TextAttr:=Attr;
- GotoXY(Col,Row);
- Write(s);
- CRT.TextAttr:=SavedTextAttr
- END;
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- PROCEDURE KWriteV(Row,Col:Integer;Attr:Byte;VAR S:String);
- VAR
- SavedTextAttr:Integer;
- BEGIN
- SavedTextAttr:=CRT.TextAttr; {Zapis aktualni textattr}
- CRT.TextAttr:=Attr; {Prirad noovy atribut}
- GotoXY(Col,Row); {Presun kurzor na pocatecni pozici}
- Write(s); {Zapiz retezec a atribut}
- CRT.TextAttr:=SavedTextAttr; {Obnov puvodni textattr}
-
- END;
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- PROCEDURE KWriteC(Row:Integer;Attr:Byte;S:String);
- VAR
- X,SavedTextAttr:Integer;
- BEGIN
- SavedTextAttr:=CRT.TextAttr;
- CRT.TextAttr:=Attr;
- X:=(LineWidth-Length(S)) DIV 2; {centrovani}
- GotoXY(X,Row);
- Write(s);
- CRT.TextAttr:=SavedTextAttr
- END;
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- PROCEDURE KWriteCV(Row:Integer;Attr:Byte;VAR S:String);
- VAR
- X,SavedTextAttr:Integer;
- BEGIN
- SavedTextAttr:=CRT.TextAttr;
- CRT.TextAttr:=Attr;
- X:=(LineWidth-Length(S)) DIV 2;
- GotoXY(X,Row);
- Write(s);
- CRT.TextAttr:=SavedTextAttr
- END;
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- FUNCTION ReadPen:Integer;
- VAR Regs : Registers;
- BEGIN
- Regs.AH := 4;
- Intr($10,Regs);
- IF Regs.AH = 1 THEN ReadPen := Regs.DX;
- END;
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- FUNCTION PenPosition(Row,Col:Byte):Integer;
- BEGIN
- PenPosition := (Row SHL 8)+Col;
- END;
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- FUNCTION PenRow(Pen_Position:Integer):Byte;
- BEGIN
- PenRow := Hi(Pen_Position);
- END;
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- FUNCTION PenCol(Pen_Position:Integer):Byte;
- BEGIN
- PenCol := Lo(Pen_Position);
- END;
- (*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- PROCEDURE KSaveScr(ULRow,ULCol,Rows,Cols : Byte;
- VAR Dest_Variable : SaveScrType);
- VAR
- Ch,X,Y,R,C,Counter:Integer;
- Regs:Registers;
- BEGIN
- R:=(ULRow+(Rows-1));
- C:=(ULCol+(Cols-1));
- Dest_Variable^[1]:=ULRow; {Zapis Ystart,Xstart, pocet radku}
- Dest_Variable^[2]:=ULCol; {a pocet sloupcu do prvych ctyrech bytu}
- Dest_Variable^[3]:=Rows; {promenne}
- Dest_Variable^[4]:=Cols;
- Counter := 5; {Nastav pocitadlo(counter) na prvni byte
- informace o obrazovce}
- REPEAT
- X:=ULCol;
- REPEAT
- GOTOxy(x,ULRow);
- Regs.AH:=$08; {cislo sluzby BIOSu}
- Regs.BH:=ActiveDP;{aktivni stranka displeje}
- Intr($10,Regs); {preruseni}
- Dest_Variable^[Counter]:=Regs.AL; {pecteni znaku}
- INC(Counter);
- Dest_Variable^[Counter]:=Regs.AH; {precteni atributu}
- INC(Counter);
- INC(X); {INC X t.j. pozice sloupce}
- UNTIL X>C;
- INC(ULRow); {INC Row t.j. pozice radku}
- UNTIL ULRow > R;
- END;
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- PROCEDURE KRestoreScr(Source_Variable : SaveScrType);
- VAR
- Ch,X,Y,R,C,
- Row,Col,Counter:Integer;
- Regs:Registers;
- BEGIN
- R:=(Source_Variable^[1]+(Source_Variable^[3]-1));
- C:=(Source_Variable^[2]+(Source_Variable^[4]-1));
- Row := Source_Variable^[1];
- Col := Source_Variable^[2];
- Counter := 5;
- REPEAT
- X:=Col;
- REPEAT
- GOTOxy(x,Row); {volani BIOSu pro cteni znaku z obraz.}
- Regs.AH:=$09;
- Regs.AL:=Source_Variable^[Counter]; {Specifikace znaku}
- INC(Counter);
- Regs.BL:=Source_Variable^[Counter]; {Specifikace atributu}
- INC(Counter);
- Regs.BH:=ActiveDP; {Specifikace aktivni stranky}
- Regs.CX:=$01; {zapis jednou}
- Intr($10,Regs);
- INC(X); {INC X t.j. pozice sloupce}
- UNTIL X>C;
- INC(Row); {INC Row t.j. pozice radku}
- UNTIL Row > R;
- END;
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- PROCEDURE KBox (ULRow,ULCol,Rows,Cols: Integer;
- FrameAttr,WindowAttr : Byte;
- Border : BorderType;
- ClearWindow : Boolean);
- VAR
- Y,Wh,Wl,H,L : Integer;
- BEGIN
- IF (Rows>=2) AND (Cols>=2) THEN {box nemuze byt mensi nez 2x2}
- BEGIN
- L:=Lo(WindMin);H:=Hi(WindMin);
- Wl:=Lo(WindMax);Wh:=Hi(WindMax);
- WindMax:=(25 SHL 8)+Wl; {can go past last row by 1 row }
- WITH Border DO
- BEGIN
- KWrite(ULRow,ULCol,FrameAttr,TL); {levy horni roh}
- KFill(ULRow,ULCol+1,1,Cols-2,FH,FrameAttr); {horiz. cara}
- KWrite(ULRow,ULCol+Cols-1,FrameAttr,TR); {pravy horni roh}
- FOR Y := ULRow+1 TO ULRow+Rows-2 DO
- BEGIN
- KWrite(Y,ULCol,FrameAttr,FV); {vertikalni cara}
- KWrite(Y,ULCol+Cols-1,FrameAttr,FV); {na obou stranach}
- END;
- KWrite(ULRow+Rows-1,ULCol,FrameAttr,BL); {levy dolni roh}
- KFill(ULRow+Rows-1,ULCol+1,1,Cols-2,FH,FrameAttr); {horiz. cara}
- KWrite(ULRow+Rows-1,ULCol+Cols-1,FrameAttr,BR); {pravy dolni roh}
-
- IF ClearWindow THEN {vymaz okno}
- KFill (ULRow+1,ULCol+1,Rows-2,Cols-2,' ',WindowAttr);
-
- WindMax:=(Wh SHL 8)+Wl; {obnov dolni roh okna}
- Window(L,H,Wl,Wh); {obnov puvodni obraz. okna}
- GOTOxy(1,1);
- END
- END
- END;
-
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
-
- FUNCTION KVertMenu(Selection_Start : INTEGER; {pocatecni vyber pri volani
- funkce}
- VAR MenuList; {seznam polozek menu }
- MenuItemTotal, {celkovy pocet polozek menu }
- XStart, {poc.pozice - sloupec }
- YStart, {poc.pozice - radek }
- XHiliteStart, {zvyrazneny poc. pocet sloupcu}
- LengthOfHilite, {pocet sloupce pro zvyrazneni }
- NormalAttr, {text atribut pro menu }
- HiliteAttr : {atribut zvyraznene polozky }
- INTEGER):INTEGER; {funkce vraci hodnotu integer}
-
-
- VAR
- Menu : Array[1..2] OF MenuItemType absolute MenuList;
- SelectionMade : Boolean;
- X,Y : INTEGER;
- Row,Col,Rows,Cols,
- Choice : INTEGER;
- Ch : Char;
-
- BEGIN
- Col := XHiliteStart;
- Rows := 1;
- Cols := LengthOfHilite;
- Choice := Selection_Start;
- FOR y := 0 to MenuItemTotal-1 DO {zapis seznam polozek menu}
- KWrite(YStart+y,XStart,NormalAttr,Menu[y+1]);
- Row := YStart+Selection_Start-1; {pozice radku pro prvni zvyrazneni}
- KAttr(Row,Col,Rows,Cols,HiliteAttr);
- SelectionMade := False; {nebyl jeste proveden vyber}
-
- REPEAT
- Ch := ReadKey;
- IF Ch = #13 THEN { stlacen ENTER }
- BEGIN
- KVertMenu := Choice; {prirazeni vasi volby do KVertmenu }
- SelectionMade := True; {byl proveden vyber}
- END
- ELSE
- IF Ch = #27 THEN { stlacena klavesa ESCAPE }
- BEGIN
- KVertMenu := 0; { prirad KVertMenu 0 protoze neni nulta polozka}
- EXIT;
- END
- ELSE
- IF Ch = #0 Then { pokud ch = 0 pak se jedna o "rozsirenou"
- klavesu }
- Ch := ReadKey;
- CASE Ch OF
-
- #72 : BEGIN {sipka nahoru}
- KAttr(Row,Col,Rows,Cols,NormalAttr);
- IF Choice = 1 THEN BEGIN
- Choice := MenuItemTotal;
- Row := Ystart+MenuItemTotal-1;
- END
- ELSE
- BEGIN
- Choice := Choice-1;
- Row := Row-1;
- END;
- KAttr(Row,Col,Rows,Cols,HiliteAttr);
- END;
- #80 : BEGIN {DOWN arrow}
- KAttr(Row,Col,Rows,Cols,NormalAttr);
- IF Choice = MenuItemTotal THEN BEGIN
- Choice := 1;
- Row := Ystart;
- END
- ELSE
- BEGIN
- Choice := Choice+1;
- Row := Row+1;
- END;
- KAttr(Row,Col,Rows,Cols,HiliteAttr);
- END;
- END;
- UNTIL SelectionMade;
- END;
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
- FUNCTION KHorizMenu(Selection_Start:INTEGER; {zvyraznena polozka pri volani }
- VAR MenuList, {seznam polozek menu }
- MenuDesc; {popis kazde polozky }
- MenuItemTotal, {celkovy pocet polzek }
- MenuWindowWidth, {pocet sloupcu pro menu }
- XStart, {pocatecni pozice - sloupec }
- YStart, {pocatecni pozice - radek }
- NormalAttr, {normalni text atribut pro menu }
- HiliteAttr, {atribut zvyraznene polozky }
- DescAttr: {barva pro popis }
- INTEGER):INTEGER; {funkce vraci hodnotu integer }
-
- VAR
- Menu : Array[1..2] OF MenuItemType absolute MenuList;
- Desc : Array[1..2] OF MenuDescType absolute MenuDesc;
-
- (*
- MenuDescType je definovano jako String[80], jelikoz vase poznamka muze
- byt 80 znaku dlouha. Je ve vasem zajmu, zda-li se poznamka vejde do vami
- specifikovaneho MenuWindowWidth(sirka okna pro menu).
- *)
-
- MPos : Array[1..25] OF Integer; {pozice pro kazdou polozku}
- PageBreak : Array[1..10,0..1] OF Integer; {pocatecni a konecny pocet
- polozek na strance}
-
- SelectionMade : Boolean;
- X,Y,Space,Page,
- Row,Col,
- Choice,TotalX,
- Position,MaxPage : INTEGER;
- Ch : Char;
-
-
- FUNCTION MenuItemLength(A:Integer):Integer; { delka polozky }
- BEGIN
- MenuItemLength := ORD(Menu[A][0]);
- END;
-
- FUNCTION MenuDescLength(A:Integer):Integer; { delka poznamky }
- BEGIN
- MenuDescLength := ORD(Desc[A][0]);
- END;
-
- BEGIN (* KHorizMenu *)
- Row := YStart;
- Col := XStart;
- Space := 3; { roztec mezi polozkami }
- Page := 1; { definice prvni stranky a Max Page ackolli }
- MaxPage := 1; { je lze zmenit na kratsi }
- TotalX := XStart; { TotalX je stradac }
- Position := Selection_Start; { preddef. pozice polozky }
- SelectionMade := False; { zatim zadna nevybrana }
- PageBreak[MaxPage][0] := 1; { zaciname s polozkou 1 na strance 1 }
-
- FOR X := 1 TO MenuItemTotal DO
- BEGIN
- IF ( (TotalX-XStart)+MenuItemLength(X) > MenuWindowWidth ) THEN
- BEGIN { Jestlize prekrocime nasi
- sirku okna }
- PageBreak[MaxPage][1] := X-1; {nastav aktualni konec stranky}
- INC(MaxPage); {zvys stranku o 1}
- PageBreak[MaxPage][0] := X; {nastav novy zacatek stranky}
- TotalX := XStart; {znovu nastav akumulator }
- MPos[X] := TotalX; {prirad pozici na obrazovce }
- END
- ELSE
- MPos[X] := TotalX; { jinak prirad aktualni totalx do MPos[x]}
-
- IF X = MenuItemTotal THEN { zajisti posledni page break a }
- PageBreak[MaxPage][1] := X; { uchovej pocet polozek menu }
-
- IF X = Selection_Start THEN { srovnej spravnou stranku }
- Page := MaxPage; { s preddefinovanou volbou }
-
- TotalX := TotalX+Space+MenuItemLength(X);
- END;
-
- WHILE NOT SelectionMade DO
- BEGIN
-
- KFIll(Row,XStart,1,MenuWindowWidth,' ',NormalAttr);{vymaz cast polozky
- z okna}
-
- FOR X := PageBreak[Page][0] TO PageBreak[Page][1] DO {skoc pres stranku a}
- BEGIN {zapis polozky }
- KWrite(Row,MPos[x],NormalAttr,Menu[X]);
- END;
-
- KAttr(Row,MPos[Position],1,MenuItemLength(Position),HiLiteAttr);
- {zvyraznena pozice}
- KWrite(Row+1,XStart,DescAttr,Desc[Position]); {zapis popis polozek}
-
- Choice := Position; {neuzitecna vymena, ale vypada to hezky a ciste}
- Ch := ReadKey; {cekej na stisk klavesy}
- IF Ch = #13 THEN { jestlize ENTER, pak }
- BEGIN
- KHorizMenu := Choice; {prirad vasi volbu k KHorizMenu}
- SelectionMade := True; {vyber byl proveden}
- END
- ELSE
- IF Ch = #27 THEN { jestlize ESCAPE, pak }
- BEGIN
- KHorizMenu := 0; { prirazeni 0 pro KHorizMenu jelikoz
- neexistuje nulta polozka}
- EXIT; { ve vasem programu testujte 0= zadna akce }
- END
- ELSE
- IF Ch = #0 Then { pokud ch = 0 mame rozsirenou klavesu }
- Ch := ReadKey; { druhe cteni pro rozsirenou klavesu }
-
- CASE Ch OF
- #75 : BEGIN {left arrow key}
- KAttr(Row,MPos[Position],1,MenuItemLength(Position),NormalAttr);
- KFIll(Row+1,XStart,1,MenuDescLength(Position),' ',DescAttr);
-
- IF (Position = 1) AND (Page = 1) THEN
- BEGIN
- Position := MenuItemTotal;
- Page := MaxPage;
- END
- ELSE
- IF Position = PageBreak[Page][0] THEN
- BEGIN
- DEC(Position);
- DEC(Page);
- END
- ELSE
- DEC(Position);
- END;
-
- #77 : BEGIN {prava sipka}
- KAttr(Row,MPos[Position],1,MenuItemLength(Position),NormalAttr);
- KFIll(Row+1,XStart,1,MenuDescLength(Position),' ',DescAttr);
-
- IF Position = MenuItemTotal THEN
- BEGIN
- Position := 1;
- Page := 1;
- END
- ELSE
- IF Position = PageBreak[Page][1] THEN
- BEGIN
- INC(Position);
- INC(Page);
- END
- ELSE
- INC(Position);
- END;
- END;
- END; {while do}
- END;
-
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
- PROCEDURE SortDir(VAR Files:AllFiles;VAR Counter:Integer);
- VAR
- Flag:Boolean;
- X:Integer;
- Temp:String[12];
-
- BEGIN
- Flag:=False;
- REPEAT
- Flag:=False;
- FOR X:=2 TO Counter DO {zaciname u dvojky protoze se pouziva vyraz "-1"}
- IF (Files[X][1]='<') AND (Files[X-1][1]<>'<') THEN
- BEGIN
- Flag:=True;
- {swap things} Temp:=Files[X-1];
- {around here} Files[X-1]:=Files[X];
- Files[X]:=Temp;
- END
- UNTIL NOT Flag;
- REPEAT
- Flag:=False;
- FOR X:=2 TO Counter DO
- IF (Files[X][1]='<') AND (Files[X-1][1]='<') THEN
- IF Files[X]<Files[X-1] THEN
- BEGIN
- Flag:=True;
- {ditto} Temp:=Files[X-1];
- Files[X-1]:=Files[X];
- Files[X]:=Temp;
- END
- ELSE
- ELSE
- IF (Files[X]<Files[X-1]) AND (Files[X-1][1]<>'<') THEN
- BEGIN
- Flag:=True;
- Temp:=Files[X-1];
- {ditto} Files[X-1]:=Files[X];
- Files[X]:=Temp;
- END;
- UNTIL NOT Flag;
- END;
-
-
- (*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
- PROCEDURE DirFill(VAR Path:String;VAR Files:AllFiles;
- VAR Counter:Integer;IncludeDirListings:Boolean);
- VAR
- Attri:Byte;
- SRec:SearchRec; { searchrec je definovan v jednotce DOS }
-
- BEGIN
- Attri:=$3F; { atributy nejakeho souboru vseobecne }
- Counter:=0; { nastav stradac na 0 }
- FindFirst(Path,Attri,SRec); { funkce TP, ktera najde prvni soubor}
- IF DosError=0 THEN {operace bez chyby}
- REPEAT
- IF SRec.Name<>'.' THEN {ignoruj tecku v adresari}
- BEGIN
-
- IF IncludeDirListings THEN
- BEGIN
- INC(Counter); {platny soubor - inkrementace stradace}
- IF SRec.Attr=Directory THEN
- Files[Counter]:='<'+SRec.Name+'>' {zapis vstupni bod adresare}
- ELSE
- Files[Counter]:=SRec.Name; {pridej to jako vstup souboru}
- END;
-
- IF NOT IncludeDirListings THEN
- IF SRec.Attr<>Directory THEN
- BEGIN
- INC(Counter); {platny soubor - inkrementace 1}
- Files[Counter]:=SRec.Name; {pridej to jako vstup souboru}
- END;
-
- END;
- Attri:=$3F; {reset searchrec atributu}
- FindNext(SRec); {funkce TP - nejde dalsi soubor}
- UNTIL DosError<>0; {cyklus dokud jsou nejake dalsi soubory}
- END;
-
-
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
- FUNCTION Space(Number:Integer):String;
-
- VAR
- X:Integer;
- TempSpace:String;
-
- BEGIN
- TempSpace:='';
- FOR X:=1 TO Number DO {vytvor retezec z mezer}
- TempSpace:=TempSpace+' '; {od 1 do Number}
- Space:=TempSpace;
- END;
-
-
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
- PROCEDURE CopyFile (Input_File,Output_File:String;
- VAR Return_Code:integer;EraseInputFile:Boolean);
- CONST
- RecordSize = 128;
- RecordNum = 128;
- TYPE
- CopyBuffer = array[1..RecordSize,1..RecordNum] of byte;
-
- VAR
- DOS_Return_Code : Boolean;
- Regs : Registers;
- FileIn,FileOut : File; {promena je bez uvedeni typu polozek}
- CopyBufrPtr : ^CopyBuffer;
- RecordCount : Integer;
-
- BEGIN
- KTrim(Input_File);
- KTrim(OutPut_File);
- IF Input_File=OutPut_File THEN {jestlize jmena jsou stejna, }
- BEGIN {nastanou problemy}
- Return_Code := 5; {pristup neumoznen - soubor jiz existuje}
- ErrorCode := Return_Code;
- EXIT; {odchod}
- END;
- DOS_Return_Code := False;
- Assign(FileIn,Input_File); {prirazeni vstupniho souboru}
- Assign(FileOut,Output_File); {prirazeni vystupniho souboru}
- {$I-}
- Reset(FileIn); {existuje opravdu takovy soubor?}
- {$I+}
- Return_Code := IOresult;
- IF (Return_Code = 0) THEN {ano, muzeme provest}
- BEGIN
- IF EraseInputFile THEN { jestlize chceme vymazat vstupni soubor }
- BEGIN
- Input_File:=Input_File+Chr(0); { pak zkusime jako prvni funkci DOS }
- OutPut_File:=OutPut_File+Chr(0);{ rename. To provede zmenu souboru }
- Regs.Ah:=$56; { a nezabere zbytecne cas samotnym }
- Regs.DS:=seg(Input_File); { kopirovanim }
- Regs.Dx:=ofs(Input_File[1]);
- Regs.ES:=seg(OutPut_File);
- Regs.DI:=ofs(OutPut_File[1]);
- MsDos(Regs);
- IF Regs.AX = 0 THEN DOS_Return_Code := True
- ELSE DOS_Return_Code := False;{neni stejny drive}
- END;
-
- IF NOT DOS_Return_Code THEN {DOSem to nelze, takze chceme provest}
- BEGIN {kopirovani}
- ReWrite(FileOut); {vytvor vystupni soubor}
- New(CopyBufrPtr); {inicializace bufferu pro kopirovani}
- REPEAT
- Blockread(FileIn,CopyBufrPtr^,RecordNum,RecordCount);
- {read data in}
- Blockwrite(FileOut,CopyBufrPtr^,RecordCount);
- {write data out}
- UNTIL RecordCount = 0;
- Dispose(CopyBufrPtr); {uvolni pamet bufferu pro DOS}
- Close(FileIn);
- Close(FileOut);
- IF EraseInputFile THEN {$I-}Erase(filein){$I+};
- ErrorCode := IOresult;
- Return_Code := ErrorCode;
- END;
- END;
- END;
-
-
- (*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
- FUNCTION IntToHex;
- CONST
- HexChars: ARRAY[0..15] of char ='0123456789ABCDEF';
- VAR
- Temp:Byte;
- TempStr:String[2];
- BEGIN
- Temp:=Hi(IntNum); {konvertuj vyssi byte na hexadec.hodnotu}
- TempStr:=HexChars[Temp shr 4]+HexChars[Temp and $0F];
- Temp:=lo(IntNum); {konvertuj nizsi byte na haxadec.hodnotu}
- IntToHex:=TempStr+HexChars[Temp shr 4]+HexChars[Temp and $0F];
- END;
-
-
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
- FUNCTION PIKDIR(Path:String;IncludeDir:Boolean):String;
-
- PROCEDURE Hilite(X:Integer);
- VAR
- Xcord,Row:Integer;
- BEGIN
- Xcord:=(Trunc((X-1)/17)*15)+5; {nastav pozici sloupce pro zvyrazneni}
- Row:=(X-(17*Trunc((X-1)/17)))+4; {nastav pozici radku pro zvyrazneni}
- KAttr(Row,Xcord,1,12,79); {zvyrazneni pozice}
- END;
-
- PROCEDURE LoLite(X:Integer);
- VAR
- Xcord,Row:Integer;
- BEGIN
- Xcord:=(Trunc((X-1)/17)*15)+5; {nastav pozici sloupce pro "znevyrazneni"}
- Row:=(X-(17*Trunc((X-1)/17)))+4; {nastav pozici radku pro "znevyrazneni"}
- KAttr(Row,Xcord,1,12,14);
- END;
-
- VAR
- One:AllFiles;
- X,Y,N:Integer;
- TempCounter,Start,Counter,Counter2,Total:Integer;
- More,Temp:String;
- MoreD,Done:Boolean;
- Position,OldPosition,Old2Position,Old3Position,
- Old4Position,Old5Position,ULRBox,ULCBox,LRRBox,LRCBox:Integer;
- C:Char;
- Near,Far:Byte;
- SavedTxtAttr:Byte;
- MainScr,BoxScr: SaveScrType;
-
-
- PROCEDURE MakeBox;
- VAR
- X,Y,N:Integer;
- BEGIN
- SavedTxtAttr := TextAttr; {je nutno zachovat puvodni }
- TextAttr := 14; {TextAttr}
- IF Counter>17 THEN Y:=Trunc(Counter/17)+1
- ELSE Y:=1;
- Start:=10;
- N:=Y;
- IF Y>5 THEN Y:=5;
- IF Counter>17 THEN Far:=22
- ELSE Far:=Counter+5;
- Near:=(Y*15)+3;
- ULRBox := 4;
- ULCBox := 3;
- LRRBox := Far-3;
- LRCBox := Near-2;
- KSaveScr(ULRBox,ULCBox,LRRBox,LRCBox,BoxScr);
- KBox(ULRBox,ULCBox,LRRBox,LRCBox,29,14,Border2,True);
- Y:=N;
- CursorOff;
- FOR N:=1 TO Y DO
- FOR X:=1 TO 17 DO
- BEGIN
- Total:=Total+1;
- GotoXy(5+((N-1)*15),X+4);
- IF (Total<=Counter) AND (Total<86) THEN Write(One[Total]);
- IF (MoreD) AND ((Counter+85)>=Total) THEN Write(One[Total]);
- END;
- Done:=False;
- TextAttr := SavedTxtAttr;
- Hilite(Position);
- END;
-
-
- BEGIN
- DirFill(Path,One,Counter,IncludeDIR);
- {fill array ONE with listings in PATH}
- SortDir(One,Counter); {trideni pole}
- Total:=0;
- MoreD:=False;
- NEW(MainScr);
- KSaveScr(1,1,25,80,MainScr);
- Position:=1;
- OldPosition:=1;
- NEW(BoxScr);
- MakeBox;
- REPEAT
- IF KeyPressed THEN
- BEGIN
- C:=ReadKey;
- IF C=#13 THEN
- BEGIN
- IF MoreD THEN Position:=Position+85;
- IF One[Position][1]<>'<' THEN
- BEGIN
- Temp:='';
- FOR X:=1 TO Length(Path)-3 DO
- Temp:=Temp+Path[X];
- Path:=Temp+One[Position];
- PikDir := Path;
- DONE := True;
- END
- ELSE
- BEGIN
- Temp:='';
- FOR X:=1 TO Length(Path)-4 DO
- Temp:=Temp+Path[X];
- Path:=Temp;
- Temp:='';
- FOR X:=1 TO Length(One[Position]) DO
- IF (One[Position][X]<>'<') AND (One[Position][X]<>'>') THEN Temp:=Temp+One[Position][X];
- IF Temp<>'..' THEN
- BEGIN
- Path:=Path+'\'+Temp+'\*.*';
- Old5Position:=Old4Position;
- Old4Position:=Old3Position;
- Old3Position:=Old2Position;
- Old2Position:=OldPosition;
- OldPosition:=Position;
- Position:=1;
- END
- ELSE
- BEGIN
- X:=Length(Path)+1;
- REPEAT
- X:=X-1;
- UNTIL Path[X]='\';
- Path:=Copy(Path,1,X);
- Path:=Path+'*.*';
- Position:=OldPosition;
- OldPosition:=Old2Position;
- Old2Position:=Old3Position;
- Old3Position:=Old4Position;
- Old4Position:=Old5Position;
- END;
- KRestoreScr(BoxScr);
- DirFill(Path,One,Counter,IncludeDIR);
- SortDir(One,Counter);
- Total:=0;
- MoreD:=False;
- MakeBox;
- END;
- END;
- IF C=#0 THEN
- BEGIN
- Lolite(Position);
- C:=ReadKey;
- IF C=#68 THEN Done:=True;
- IF C=#80 THEN Position:=Position+1;
- IF C=#72 THEN Position:=Position-1;
- IF C=#75 THEN Position:=Position-17;
- IF C=#77 THEN Position:=Position+17;
- IF C=#73 THEN
- BEGIN
- IF MoreD THEN
- BEGIN
- Counter:=TempCounter;
- Total:=0;
- KRestoreScr(BoxScr);
- MoreD:=False;
- Position:=1;
- MakeBox;
- END;
- END;
- IF C=#81 THEN
- BEGIN
- IF Counter>85 THEN
- BEGIN
- TempCounter:=Counter;
- Counter:=Counter-85;
- KRestoreScr(BoxScr);
- Total:=85;
- MoreD:=True;
- Position:=1;
- MakeBox;
- END;
- END;
- IF Position<1 THEN Position:=1;
- IF Position>Counter THEN Position:=Counter;
- IF Position>85 THEN Position:=85;
- HiLite(Position);
- END;
-
- END;
- UNTIL Done;
- KRestoreScr(MainScr); {obnov hlavni obrazovku}
- DISPOSE(BoxScr); {uvolni pamet pro DOS}
- DISPOSE(MainScr);
- END;
-
- (*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*)
- (*
- Tato cast programu inicializuje promenne ActiveDp a LineWidth pri
- prvnim behu programu. Promenna VideoMode muze byt pouzita spolu s
- ActiveDP a LineWidth.
- *)
-
- BEGIN
- DirectVideo := TRUE;
- VideoMode := CurrentVideoMode;
- END.
-
- (******************************************************************************
-