(**************************************************************** **************************************************************** *** *** *** Copyright (c) 2001 by -=Assarbad [GoP]=- *** *** ____________ ___________ *** *** /\ ________\ /\ _____ \ *** *** / \ \ / __________/ \ \ \ \ *** *** \ \ \ __/___ /\ _____ \ \ \____\ \ *** *** \ \ \ /\___ \ \ \ \ \ \ _______\ *** *** \ \ \ / \ \ \ \ \ \ \ \ / *** *** \ \ \_____\ \ \ \____\ \ \ \____/ *** *** \ \___________\ \__________\ \__\ *** *** \ / / / / / / *** *** \/___________/ \/__________/ \/__/ *** *** *** *** May the source be with you, stranger ... :-) *** *** *** *** Greets from -=Assarbad [GoP]=- ... *** *** Special greets go 2 Nico, Casper, SA, Pizza, Navarion...*** ***[for questions/proposals drop a mail to Assarbad@ePost.de]*** *****************************************ASCII by Assa [GoP]**** ****************************************************************) //include file for console management var SoundFrequency: Integer; function textattribute: word; var csbi: _CONSOLE_SCREEN_BUFFER_INFO; begin if getconsolescreenbufferinfo(getstdhandle(STD_OUTPUT_HANDLE), csbi) then result := csbi.wAttributes else result := 0; end; procedure settextattribute(attr: word); begin setconsoletextattribute(getstdhandle(STD_OUTPUT_HANDLE), attr); end; procedure ClrEol; var tC: tCoord; Len, Nw: Cardinal; Cbi: TConsoleScreenBufferInfo; begin GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), cbi); len := cbi.dwsize.x - cbi.dwcursorposition.x; tc.x := cbi.dwcursorposition.x; tc.y := cbi.dwcursorposition.y; FillConsoleOutputAttribute(GetStdHandle(STD_OUTPUT_HANDLE), textattribute, len, tc, nw); FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), #32, len, tc, nw); end; procedure ClrScr; var tc: tcoord; nw: Cardinal; cbi: TConsoleScreenBufferInfo; begin getConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), cbi); tc.x := 0; tc.y := 0; FillConsoleOutputAttribute(GetStdHandle(STD_OUTPUT_HANDLE), textattribute, cbi.dwsize.x * cbi.dwsize.y, tc, nw); FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), #32, cbi.dwsize.x * cbi.dwsize.y, tc, nw); setConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), tc); end; function WhereX: integer; var cbi: TConsoleScreenBufferInfo; begin getConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), cbi); result := tcoord(cbi.dwCursorPosition).x + 1 end; function WhereY: integer; var cbi: TConsoleScreenBufferInfo; begin getConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), cbi); result := tcoord(cbi.dwCursorPosition).y + 1 end; procedure GotoXY(const x, y: integer); var coord: tcoord; begin coord.x := x - 1; coord.y := y - 1; setConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord); end; procedure FlushInputBuffer; begin FlushConsoleInputBuffer(GetStdHandle(STD_INPUT_HANDLE)) end; function keypressed: boolean; var NumberOfEvents: Cardinal; begin GetNumberOfConsoleInputEvents(GetStdHandle(STD_INPUT_HANDLE), NumberOfEvents); result := NumberOfEvents > 0; end; function ReadKey: Char; var NumRead: Cardinal; InputRec: TInputRecord; begin while ((not ReadConsoleInput(GetStdHandle(STD_INPUT_HANDLE), InputRec, 1, NumRead)) or (InputRec.EventType <> KEY_EVENT)) do ; Result := InputRec.Event.KeyEvent.AsciiChar; end; procedure Sound(Freq, duration: Cardinal); begin soundfrequency := freq; windows.beep(Freq, duration); end; procedure NoSound; begin windows.beep(SoundFrequency, 0); end; procedure ConsoleEnd; begin if isconsole then begin if wherex > 1 then writeln; settextattribute(FOREGROUND_GREEN or FOREGROUND_INTENSITY); setfocus(GetCurrentProcess); write('Press any key to continue.'); FlushInputBuffer; ReadKey; FlushInputBuffer; end; end;