EnglishРусский  

   ..

   console.g

Ads

Perfect Automation tool
All-In-One: Script editor, Launcher, Scheduler, Keyboard & Mouse Recorder. Try now!

CreateInstall
Freeware and commercial installers.

Cell Phone Batteries
Batteries Plus offers batteries for laptop, camcorder, cell phone, camera.

Gentee needs your help!
How to advertise with us
 
laptop battery

source\lib\console\console.g
  1 /******************************************************************************
  2 *
  3 * Copyright (C) 2004-2008, The Gentee Group. All rights reserved. 
  4 * This file is part of the Gentee open source project - http://www.gentee.com. 
  5 * 
  6 * THIS FILE IS PROVIDED UNDER THE TERMS OF THE GENTEE LICENSE ("AGREEMENT"). 
  7 * ANY USE, REPRODUCTION OR DISTRIBUTION OF THIS FILE CONSTITUTES RECIPIENTS 
  8 * ACCEPTANCE OF THE AGREEMENT.
  9 *
 10 * ID: compiler 07.03.08 0.0.A.
 11 *
 12 * Author: Sergey Kurganov ( Pretorian )
 13 *
 14 ******************************************************************************/
 15 // Свойства:
 16 // title [R](str) - заголовок консоли
 17 // x [RW](uint) - x координата курсора		
 18 // y [RW](uint) - y координата курсора
 19 // length [RW](uint) - длинна консоли (буфера)
 20 // height [RW](uint) - высота консоли (буфера)
 21 // color [RW](uint) - текущий цвет символов
 22 // background [RW](uint) - текущий фон символов
 23 // cursoreShow [RW](uint) - видимость курсора 0/1
 24 // cursoreSize [RW](uint) - размер курсора 0%-100%
 25 // ctrlC [R](uint) - останавливать работу программы по Ctrl+C 0/1
 26 // Методы:
 27 // Print(str|ubute|byte|ushort|short|uint|int|ulong|long|float|double) - вывод на консоль
 28 // uint Char() - код символа в текущих координатах
 29 // Сhar(uint) - вывод символа по его коду на консоль
 30 // Сhar(uint,uint) - вывод символа по его коду в указанном количестве на консоль
 31 // Cls() - очистить экран
 32 // Cls(uint,uint,uint,uint) - Очистить заданное окно в консоли
 33 // Inversion() - инверсия фона и цвета
 34 // Copy(uint,uint,uint,uint,uint,uint) - скопировать участок консоли в новые координаты
 35 // ScrollUp() - скролировать всю консоль вверх
 36 // ScrollDown() - скролировать всю консоль вниз
 37 // ScrollLeft() - скролировать всю консоль влево
 38 // ScrollRight() - скролировать всю консоль вправо
 39 
 40 import "kernel32.dll"
 41 {
 42 	AllocConsole()
 43 	uint GetStdHandle(int)
 44 	FreeConsole()
 45 	SetConsoleTitleA(uint)
 46 	uint GetConsoleScreenBufferInfo(uint,uint)
 47 	SetConsoleCursorPosition(uint,uint)
 48 	SetConsoleScreenBufferSize(uint,uint)
 49 	SetConsoleWindowInfo(uint,uint,uint)
 50 	SetConsoleTextAttribute(uint,uint)
 51 	GetConsoleCursorInfo(uint,uint)
 52 	SetConsoleCursorInfo(uint,uint)
 53 	FillConsoleOutputCharacterA(uint,uint,uint,uint,uint)
 54 	FillConsoleOutputAttribute(uint,uint,uint,uint,uint)
 55 	SetConsoleCtrlHandler(uint,uint)
 56 	WriteConsoleA(uint,uint,uint,uint,uint)
 57 	ReadConsoleOutputCharacterA(uint,uint,uint,uint,uint)
 58 	ReadConsoleOutputA(uint,uint,uint,uint,uint)
 59 	WriteConsoleOutputA(uint,uint,uint,uint,uint)
 60 }
 61 
 62 //Структура для работы с окном в консоли
 63 type conrect
 64 	{
 65 	short left
 66 	short top
 67 	short right
 68 	short bottom
 69 	}
 70 
 71 //Консоль	
 72 type console <protected>
 73 {
 74 	short	column		//столбцов в экранном буфере консоли
 75 	short	rows			//рядов в экранном буфере консоли
 76 	short	xc				//координата x курсора
 77 	short	yc				//координата y курсора
 78 	uint	colorc		//атрибуты символа
 79 	short left			//левый верхний угол окна буфера консоли на экране дисплея
 80 	short	top
 81 	short	right			//правый нижний угол окна буфера консоли на экране дисплея
 82 	short	bottom
 83 	short	maxcolumn	//максимальная длинна буфера консоли с учетом шрифта и размера дисплея
 84 	short	maxrows		//максимальная высота буфера консоли с учетом шрифта и размера дисплея
 85 
 86 	uint	cursize		// размер курсора
 87 	uint	curvisible	// видимость курсора
 88 	
 89 	uint	hstdin	// дескриптор чтения с консоли
 90 	uint	hstdout	// дескриптор записи в консоль
 91 	uint	hstderr	// дескриптор вывода ошибок на консоль
 92 }
 93 
 94 //Установить название консоли
 95 property console.title(str string)
 96 {
 97 	SetConsoleTitleA(string.ptr())
 98 }
 99 
100 //Получить координату курсора x
101 property uint console.x
102 {
103 	GetConsoleScreenBufferInfo(.hstdout,&this)
104 	return uint(.xc)
105 }
106 
107 //Получить координату курсора y
108 property uint console.y
109 {
110 	GetConsoleScreenBufferInfo(.hstdout,&this)
111 	return uint(.yc)
112 }
113 
114 //Установить координату курсора в x
115 property console.x(uint x)
116 {
117 	SetConsoleCursorPosition(.hstdout,(uint(.y)<<16)+x)
118 }
119 
120 //Установить координату курсора в y
121 property console.y(uint y)
122 {
123 	SetConsoleCursorPosition(.hstdout,(uint(y)<<16)+.x)
124 }
125 
126 //Получить длину консоли
127 property uint console.length
128 {
129 	GetConsoleScreenBufferInfo(.hstdout,&this)
130 	return uint(.column)
131 }
132 
133 //Получить высоту консоли
134 property uint console.height
135 {
136 	GetConsoleScreenBufferInfo(.hstdout,&this)
137 	return uint(.rows)
138 }
139 
140 //Установить длину консоли
141 property console.length(uint length)
142 {
143 	if length>.length
144 	{
145 		SetConsoleScreenBufferSize(.hstdout,uint(.rows<<16)+length)
146 		.left=0; .top=0; .right=length-1; .bottom=.rows-1
147 		SetConsoleWindowInfo(.hstdout,1,&this.left)
148 	}
149 	else
150 	{
151 		.left=0; .top=0; .right=length-1; .bottom=.rows-1
152 		SetConsoleWindowInfo(.hstdout,1,&this.left)
153 		SetConsoleScreenBufferSize(.hstdout,uint(.rows<<16)+length)
154 	}
155 }
156 
157 //Установить высоту консоли
158 property console.height(uint height)
159 {
160 	if height>.height
161 	{
162 		SetConsoleScreenBufferSize(.hstdout,uint(height<<16)+.column)
163 		.left=0; .top=0; .right=.column-1; .bottom=height-1
164 		SetConsoleWindowInfo(.hstdout,1,&this.left)
165 	}
166 	else
167 	{
168 		.left=0; .top=0; .right=.column-1; .bottom=height-1
169 		SetConsoleWindowInfo(.hstdout,1,&this.left)
170 		SetConsoleScreenBufferSize(.hstdout,uint(height<<16)+.column)
171 	}
172 }
173 
174 //Установить цвет выводимых символов
175 property console.color(uint color)
176 {
177 	GetConsoleScreenBufferInfo(.hstdout,&this)
178 	SetConsoleTextAttribute(.hstdout,(.colorc&0xF0)+(color&0xF))
179 }
180 	
181 //Получить цвет выводимых символов
182 property uint console.color
183 {
184 	GetConsoleScreenBufferInfo(.hstdout,&this)
185 	return uint(.colorc&0xF)
186 }
187 
188 //Установить фон выводимых символов
189 property console.background(uint background)
190 {
191 	GetConsoleScreenBufferInfo(.hstdout,&this)
192 	SetConsoleTextAttribute(.hstdout,(.colorc&0xF)+(background<<4&0xF0))
193 }
194 	
195 //Получить фон выводимых символов
196 property uint console.background
197 {
198 	GetConsoleScreenBufferInfo(.hstdout,&this)
199 	return uint(.colorc>>4&0xF)
200 }
201 
202 //Возвращает видимость курсора 0/1
203 property uint console.cursoreShow
204 {
205 	GetConsoleCursorInfo(.hstdout,&.cursize)
206 	return .curvisible 
207 }	
208 
209 //Возвращает размер курсора 0-100
210 property uint console.cursoreSize
211 {
212 	GetConsoleCursorInfo(.hstdout,&.cursize)
213 	return .cursize 
214 }	
215 
216 //Установить видимость курсора 0/1
217 property console.cursoreShow(uint visible)
218 {
219 	GetConsoleCursorInfo(.hstdout,&.cursize)
220 	.curvisible=visible
221 	SetConsoleCursorInfo(.hstdout,&.cursize) 
222 }	
223 	
224 //Установить размер курсора 0-100
225 property console.cursoreSize(uint size)
226 {
227 	GetConsoleCursorInfo(.hstdout,&.cursize)
228 	.cursize=size
229 	SetConsoleCursorInfo(.hstdout,&.cursize) 
230 }	
231 
232 //Очистить консоль
233 method console.Cls()
234 {
235    FillConsoleOutputCharacterA(.hstdout,32,.length*.height,0,0)
236    FillConsoleOutputAttribute(.hstdout,(.background<<4)+.color,.length*.height, 0, 0)
237    .x=0;.y=0
238 }
239 
240 //Печать str
241 method console.Print(str string) { print(string) }	
242 
243 //Печать uint
244 method console.Print(uint string) { print(str(string)) }	
245 
246 //Печать int
247 method console.Print(int string) { print(str(string)) }	
248 
249 //Печать ubyte
250 method console.Print(ubyte string) { print(str(string)) }	
251 
252 //Печать byte
253 method console.Print(byte string) { print(str(string)) }	
254 
255 //Печать ushort
256 method console.Print(ushort string) { print(str(string)) }	
257 
258 //Печать short
259 method console.Print(short string) { print(str(string)) }	
260 
261 //Печать float
262 method console.Print(float string) { print(str(string)) }	
263 
264 //Печать ulong
265 method console.Print(ulong string) { print(str(string)) }	
266 
267 //Печать long
268 method console.Print(long string) { print(str(string)) }	
269 
270 //Печать double
271 method console.Print(double string) { print(str(string)) }	
272 
273 //Инверсия цветов
274 method console.Inversion()
275 {
276 	uint i
277 	i=.color
278 	.color=.background
279 	.background=i
280 }
281 
282 //Останавливать работу программы по Ctrl+C 0/1
283 property console.ctrlC(uint num)
284 {
285 	if num : SetConsoleCtrlHandler(0,0)
286 	else : SetConsoleCtrlHandler(0,1)
287 }  
288 	
289 //Инициализация объекта
290 method console.init()
291 {
292 	AllocConsole()
293 	.hstdin=GetStdHandle(-10)
294 	.hstdout=GetStdHandle(-11)
295 	.hstderr=GetStdHandle(-12)
296 	.length=80
297 	.height=25
298 	.Cls()
299 }
300 
301 //Удаление объекта
302 method console.delete() { FreeConsole() }
303 
304 //Вывод символа по его коду на консоль
305 method console.char(uint sym)
306 {
307 	str string=" "
308 	string[0]=byte(sym)
309 	WriteConsoleA(.hstdout,string.ptr(),*string,0,0)
310 }
311 
312 //Вывод символа по его коду в указанном количестве на консоль
313 method console.Char(uint sym, uint num)
314 {
315 	uint i
316 	byte sy=byte(sym)
317 	str string
318 	fornum i=0,num
319 	{
320 		string+=" "
321 		string[i]=sy
322 	}
323 	WriteConsoleA(.hstdout,string.ptr(),*string,0,0)
324 }
325 
326 //Определить код символа в звдвнных координатах (символ выше 128 не гарантируется)
327 method uint console.char()
328 {
329 	uint i;str i2=" "
330 	GetConsoleScreenBufferInfo(.hstdout,&this)
331    ReadConsoleOutputCharacterA(.hstdout,i2.ptr(),1,.xc,&i)
332    return uint(i2[0])
333 }
334 
335 //Очистить заданное окно в консоли (x,y,length,height)
336 method console.Cls(uint x y l h)
337 {
338 	uint i
339 	fornum i=0,h
340    {
341 		FillConsoleOutputCharacterA(.hstdout,32,l,y+i<<16|x,0)
342    	FillConsoleOutputAttribute(.hstdout,(.background<<4)+.color,l,y+i<<16|x,0)
343 	}
344 		.x=x; .y=y
345 }
346 
347 //Скопировать участок консоли xyhl в новые координаты 
348 method console.Copy(uint x y l h x1 y1)
349 {
350 	conrect rect
351 	rect.left=x
352 	rect.top=y
353 	rect.right=x+l
354 	rect.bottom=y+h
355 	buf buff[l*h*4]
356 	ReadConsoleOutputA(.hstdout,buff.ptr(),(h<<16)|l,0,&rect)
357 	rect.left=x1
358 	rect.top=y1
359 	rect.right=x1+l
360 	rect.bottom=y1+h
361 	WriteConsoleOutputA(.hstdout,buff.ptr(),(h<<16)|l,0,&rect)
362 }
363 
364 //Скролировать всю консоль вверх
365 method console.ScrollUp()
366 {
367 	uint i
368 	.Copy(0,1,.length,.rows-1,0,0)
369 	FillConsoleOutputCharacterA(.hstdout,32,.column,(.rows-1)<<16,&i)
370 	FillConsoleOutputAttribute(.hstdout,(.background<<4)+.color,.column,(.rows-1)<<16,0)
371 }
372 
373 //Скролировать всю консоль вниз
374 method console.ScrollDown()
375 {
376 	uint i
377 	.Copy(0,0,.length,.rows-1,0,1)
378 	FillConsoleOutputCharacterA(.hstdout,32,.column,0,&i)
379 	FillConsoleOutputAttribute(.hstdout,(.background<<4)+.color,.column,0,0)
380 }
381 
382 //Скролировать всю консоль влево
383 method console.ScrollLeft()
384 {
385 	uint i,j
386 	.Copy(1,0,.length,.rows,0,0)
387 	fornum j=0,.height
388 	{
389 		FillConsoleOutputCharacterA(.hstdout,32,1,(j<<16)+(.column-1),&i)
390 		FillConsoleOutputAttribute(.hstdout,(.background<<4)+.color,1,(j<<16)+(.column-1),0)
391 	}
392 }
393 
394 //Скролировать всю консоль вправо
395 method console.ScrollRight()
396 	{
397 	uint i,j
398 	.Copy(0,0,.length-1,.rows,1,0)
399 	fornum j=0,.height
400 	{
401 		FillConsoleOutputCharacterA(.hstdout,32,1,j<<16,&i)
402 		FillConsoleOutputAttribute(.hstdout,(.background<<4)+.color,1,j<<16,0)
403 	}
404 		fornum j=0,.height
405 		{
406 			FillConsoleOutputCharacterA(.hstdout,32,1,(j<<16),&i)
407 		}
408 	}
409 
410 /*
411 func main< main >
412 {
413 	console con
414 	datetime time_start, time_end, work_time
415 	time_start.gettime() //Время начала
416 
417 	con.Inversion()
418 	con.Char(0xB0,1999)
419 	con.Cls(1,1,8,4)
420 	con.Print("dfdfdf")
421 	con.Copy(1,1,3,3,20,10)
422 	//con.Inversion()
423 	con.ScrollRight()
424 	time_end.gettime() //Время конца
425 	work_time = time_end - time_start
426 	print("Время работы : \(gettimeformat(work_time , "HH:mm:ss", "")).\( work_time.msec) \n")
427 	getch()
428 }
429 */
Edit