EnglishРусский  

   ..

   console.g

Реклама

Инсталлятор CreateInstall
Бесплатные и коммерческие инсталляторы

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 */
430 
Редактировать