{img1} |
перевод с английского на русский |
|
Для графического режима цвет фона указывается в
регистре BL.
Из всего набора символов следующие четыре символа
непосредственно не отображаются, а выступают в роли
упрвляющих (интепретируются аппаратурой): CHR$(7) - звук,
CHRS(8) - возврат на одну позицию, CHR$(10) - перевод строки,
CHR$(13) - возврат каретки.
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 14 AL = записываемый символ ASCII
BL = цвет символа (только для
графических режимов)
BH = страница (для графических
режимов не указывается)
____________________________________________________________
Приложение 8.1. |
доктор веб |
|
|
Текст программы демонстрации
возможностей управления цветом (Бейсик).
1000 REM Listing 8.1
1010 REM
1020 REM
1030 GOSUB 2000 ' TITLE
1040 GOSUB 3000 ' GET WHICH DISPLAY TYPE, AND SET ADDRESS
1050 GOSUB 2000 ' SET THE TITLE AGAIN
1060 GOSUB 4000 ' BUILD THE SURROUNDING COMMENTS
1070 GOSUB 5000 ' BUILD THE DISPLAY ARRAY
1080 GOSUB 6000 ' FINISH UP AND RETURN TO DOS
2000 REM Title subroutine
2010 KEY OFF : CLS : WIDTH 80
2020 REM
2030 PRINT " Programs for INSIDE THE IBM PERSONAL COMPUTER"
2040 PRINT " (C) Copyright 1983 Peter Norton"
2050 PRINT
2060 PRINT Program 8-1: Demonstrate all screen attributes"
2999 RETURN
3000 REM Subroutine to inquire about display type
3010 PRINT
3020 PRINT "Before we go any further, is this a color-graphics display? ";
3030 GOTO 3060
3040 PRINT
3050 PRINT " (answer Y or N) ";
3060 ANSWER$=INKEY$
3070 IF LEN(ANSWER$)<1 THEN 3060
3080 IF LEN(ANSWER$)>1 THEN 3040
3090 SEGVAL!=0
3100 IF MID$(ANSWER$,1,1)="Y" THEN SEGVAL!=&HB800 ' Color segment
3110 IF MID$(ANSWER$,1,1)="y" THEN SEGVAL!=&HB800 ' Color segment
3120 IF MID$(ANSWER$,1,1)="N" THEN SEGVAL!=&HB000 ' Monochrome segment
3130 IF MID$(ANSWER$,1,1)="n" THEN SEGVAL!=&HB000 ' Monochrome segment
3140 IF SEGVAL!=0 THEN 3040
3150 DEF SEG=SEGVAL!
3999 RETURN
4000 REM subroutine to build the surrounding messages
4010 LOCATE 11,1 : PRINT "Normal"
4020 LOCATE 12,1 : PRINT "normal"
4030 LOCATE 19,1 : PRINT "Normal"
4040 LOCATE 20,1 : PRINT "blinking"
4050 LOCATE 11,69 : PRINT "Bright"
4060 LOCATE 12,69 : PRINT "normal"
4070 LOCATE 19,69 : PRINT "Bright"
4080 LOCATE 20,69 : PRINT "blinking"
4090 FOR HEX.DIGIT%=0 TO 15
4100 LOCATE 6,HEX.DIGIT%*3+17
4110 PRINT HEX$(HEX.DIGIT%)
4120 LOCATE HEX.DIGIT%+8,11
4130 PRINT HEX$(HEX.DIGIT%)
4140 NEXT HEX.DIGIT%
4150 LOCATE ,,0
4999 RETURN
5000 REM subroutine to set the display array
5010 FOR ROW%=0 TO 15
5020 FOR COL%=0 TO 15
5030 POKE(ROW%+7)*160+COL%*6+31,ROW%*16+COL%
5040 POKE(ROW%+7)*160+COL%*6+33,ROW%*16+COL%
5050 POKE(ROW%+7)*160+COL%*6+35,ROW%*16+COL%
5060 POKE(ROW%+7)*160+COL%*6+32,ROW%*16+COL%
5070 NEXT COL%
5080 NEXT ROW%
5999 RETURN
6000 LOCATE 25,1,1
6010 PRINT "Press any key to return to DOS... |
архиватор winrar |
|
{img3} |
Отказоустойчивые системы |
|
";
6020 IF LEN(INKEY$)=0 THEN 6020 ' wait to keystroke
6030 CLS
6999 SYSTEM
9999 REM End of program Liisting 8-1
Приложение 8.2. Текст программы генерации изображений
(Паскаль).
module Listing_8_2;
{==========================================================}
type
screen_position_pair_type=(character_byte,attribute_byte);
normal_screen_type=array[1..25,1..80,
character_byte..attribute_byte] of char;
narrow_screen_type=array[1..25,1..40,
character_byte..attribute_byte] of char;
{==========================================================}
var [static]
screen_pointer : ads of normal_screen_type;
current_attribute : char;
row,column : integer;
output_string : lstring(255);
page : word;
eighty_col_mode : boolean;
{==========================================================}
const
normal_attrib = chr (7);
reverse_video = chr (112);
bright = chr (15);
blinking = chr (135);
alert = chr (140);
{==========================================================}
procedure clear_reset;
external;
function video_mode : byte;
external;
{==========================================================}
procedure set_video_address;
begin
if video_mode=7 then
begin
screen_pointer.s:=#B000;
screen_pointer.r:=0;
end
else
begin
screen_pointer.s:=#B800;
screen_pointer.r:=0;
end;
end;
{==========================================================}
procedure clear_screen;
begin
{if you have the assembly language routines, just to this: }
clear_reset;
return;
{otherwise, we'll clear the screen the hard way: }
for row:=1 to 25 do
for column:=1 to 80 vdo
begin
screen_pointer^[row,column,character_byte]:=' ';
screen_pointer^[row,column,attribute_byte]:=normal_attrib;
end;
end;
{==========================================================}
{ НЕРАЗБОРЧИВО }
{==========================================================}
procedure set_pointer_for_page;
begin
if eight_col_mode then
screen_pointer.s:=#B800+page*4096
else
screen_pointer.s:=#B800+page*2048
end;
end.
ГЛАВА 9. |
файловый менеджер |
|