Metadata
Title
Untitled
Category
general
UUID
a778cdff6dd9493eafe6a135968cb5c0
Source URL
https://al.cs.msu.ru/system/files/CRT1_1.PAS
Parent URL
https://al.cs.msu.ru/classes/CRT
Crawl Time
2026-03-17T08:23:42+00:00
Rendered Raw Markdown

Untitled

Source: https://al.cs.msu.ru/system/files/CRT1_1.PAS Parent: https://al.cs.msu.ru/classes/CRT

UNIT CRT1; { ���७�� ����� CRT ��� ������� �ࠪ⨪㬠 "����䥩� �ணࠬ�� ���஢��" } INTERFACE procedure getcolors(var fc,bc:byte); {����� ⥪��� ��।���� (fc) � 䮭����� (bc) 梥⮢} procedure windcoord(var x1,y1,x2,y2:byte); {����� ���न��� ⥪�饣� ���� (�㬥��� ��᮫�⭠�, � 1): (x1,y1) - ���� ���孨� 㣮� (x1-�⮫���, y1-��ப�) (x2,y2) - �ࠢ� ������ 㣮�} function getch(x,y:byte):char; {����� ᨬ����, ��ᢥ稢������ � x-� ������� y-� ��ப� ����} function getattr(x,y:byte):byte; {����� ��ਡ�� ᨬ����, �� � x-� ������� y-� ��ப� ����} procedure putch(x,y:byte; c:char); {������ ᨬ���� � ��� (x,y) ���� ��� ��������� ��ਡ��} procedure putattr(x,y:byte; a:byte); {�������� �� a ��ਡ�� �窨 (x,y) ���� ��� ��������� ᨬ����} procedure inkey(var c:char; var spec:boolean); {���� ��� �� ᨬ���� � ���������� � ��ᢠ������ ��� ��ࠬ���� C; �᫨ �� �ࠢ���騩 ᨬ���, � spec:=true, ��� ���筮�� spec:=false (Enter, Ecs � Backspace ������� �ࠢ���騬�)} procedure wait; {����� ������ �� ������ (��� "���⠥���")} procedure crsoff; {���� ����� (ᤥ���� ��������)} procedure crson; {ᤥ���� ����� ������} procedure bell; {������} {================================================================} IMPLEMENTATION uses crt; const maxX=80; maxY=25; type pixel=record ch:char; attr:byte end; {������� ��ࠧ� ��࠭�} var screen80: {����������� 梥⭮�� ��࠭� 25x80} array[1..maxY,1..maxX] of pixel absolute $B800:$0000; procedure testcoord(prname:string; x,y:byte); {�஢�ઠ ���न���� �窨 � ����} var x1,y1,x2,y2:byte; begin windcoord(x1,y1,x2,y2); if (x<1) or (x>x2-x1+1) or (y<1) or (y>y2-y1+1) then begin window(1,1,80,25); gotoXY(1,1); writeln('Error in ',prname,': ','coord. out of window'); write('Press Enter ...'); readln; halt; end; end; procedure getcolors(var fc,bc:byte); {����� ⥪��� ��।���� (fc) � 䮭����� (bc) 梥⮢} begin fc:=TextAttr and $F; bc:=(TextAttr shr 4) and $7 end; procedure windcoord(var x1,y1,x2,y2:byte); {����� ���न��� ⥪�饣� ���� (�㬥��� ��᮫�⭠�, � 1): (x1,y1) - ���� ���孨� 㣮� (x1-�⮫���, y1-��ப�) (x2,y2) - �ࠢ� ������ 㣮�} begin x1:=Lo(WindMin)+1; y1:=Hi(WindMin)+1; x2:=Lo(WindMax)+1; y2:=Hi(WindMax)+1; end; function getch(x,y:byte):char; {����� ᨬ����, ��ᢥ稢������ � x-� ������� y-� ��ப� ����} begin testcoord('getch',x,y); getch:=screen80[Hi(WindMin)+y,Lo(WindMin)+x].ch; end; function getattr(x,y:byte):byte; {����� ��ਡ�� ᨬ����, �� � x-� ������� y-� ��ப� ����} begin testcoord('getattr',x,y); getattr:=screen80[Hi(WindMin)+y,Lo(WindMin)+x].attr end; procedure putch(x,y:byte; c:char); {������ ᨬ���� � ��� (x,y) ���� ��� ��������� ��ਡ��} begin testcoord('putch',x,y); screen80[Hi(WindMin)+y,Lo(WindMin)+x].ch:=c end; procedure putattr(x,y:byte; a:byte); {�������� �� a ��ਡ�� �窨 (x,y) ���� ��� ��������� ᨬ����} begin testcoord('putattr',x,y); screen80[Hi(WindMin)+y,Lo(WindMin)+x].attr:=a end; procedure inkey(var c:char; var spec:boolean); {���� ��� �� ᨬ���� � ���������� � ��ᢠ������ ��� ��ࠬ���� C, �᫨ �� �ࠢ���騩 ᨬ���, � spec:=true, ����� - spec:=false (Enter, Ecs � Backspace ������� �ࠢ���騬�) } begin c:=readkey; if c>=#32 then spec:=false else begin spec:=true; if c=#0 then c:=readkey end; end; procedure wait; {����� ������ �� ������ (��� "���⠥���")} var c:char; spec:boolean; begin inkey(c,spec) end; procedure crsoff; {���� ����� (ᤥ���� ��������)} begin inline( $B4/$03/ {MOV AH,3} $B7/$00/ {MOV BH,0} $CD/$10/ {INT 10h} $80/$CD/$20/ {OR CH,20h} $B4/$01/ {MOV AH,1} $CD/$10 {INT 10h} ); end; procedure crson; {ᤥ���� ����� ������} begin inline( $B4/$03/ {MOV AH,3} $B7/$00/ {MOV BH,0} $CD/$10/ {INT 10h} $80/$E5/$DF/ {AND CH,0BFh} $B4/$01/ {MOV AH,1} $CD/$10 {INT 10h} ); end; procedure bell; {������} begin write(#7) end; {=== ����� ����� CRT1 ===} end.