Прикладная графика 1992 г.

Приложение 1 - генератор нестандартных синволов.


ПРИЛОЖЕНИЕ 1
Генератор нестандартных синволов.

случаи, когда Вам могут потребоваться собственные шрифты - >
очень нередки, во-первых, самый типичный случай, когда Вас не
устраивает встроенный в ПЗУ шрифт - это когда вы создаете .про-
грамму на своем национальном языке. Но. кроме национальных шри-
фтов. Вам могут потребоваться еше и тенатические шрифты. Так,
в зависимости от жанра разрабатываемой Вани программы, вы мо-
жете разрабатывать шрифт с соответствующим ей стилем.

Самый простой способ для приготовления собственного шрифта
- использовать соответствующий режим програмны artstudio. но.
во-первых, не у всех есть этот графический редактор, а ны ко-
нечно же создаем наши книги не для тех. у кого и так все есть,
а во-вторых, он не позволяет напрямую создавать символы udg-
графики.

. Ниже предлагается несложная БЕЙСИК-программа, которая по-
зволяет сгенерировать собственный символьный набор, включая и
символы UDG. Программа сделана так. чтобы по-возможности ис-
ключить возможные варианты сбоя, хотя без сомнения дотошный
пользователь сможет найти способ "завалить" ее. Если такое про-
изойдет. не пугайтесь, а смело давайте команду RUN для повтор-
ного запуска. То. что Вы уже создали, не будет утрачено. Един-
ственно только в этом случае не нажимайте клавишу "1" в главном
меню программы, поскольку этим могут быть "вытерты" все создан-
нные Вами собственные шрифты.

Программа исполнена на БЕИСИКе. поскольку от нее не требу-
ется скорости в работе. Скорость ножет потребоваться только
если вы захотите вернуться к стандартному символьному набору,
"зашитому" в ПЗУ. на этот случай переброска шрифта из ПЗУ в
область Вашего символьного набора в ОЗУ выполняется с помошью
маленькой процедуры в машинных кодах.

Программные переменные.

г.ч - адрес начала Вапего символьного набора в ОЗУ;
в» - символьная переменная для проверки IHPUT;
ts - пункты меню:

а» - символьная переменная для проверки IHPUT;
х. т. z - переменные, используемые up изображении

символов увеличенного размера,
а - промежуточные данные, например результат ввода
no IHPUT:

w.с - данные для изображения символов;
£. b. v - переменные циклов FOR... НЕХТ.

10 LET q=PEEK 23675 ♦ 256» PEEK 23676: LET q=q-801
20 POKE 23609.20
40 CLEAR q

50 LET q=PEEK 23730 ♦ 256«PEEK 23731: LET 4=q+31
60 GO SUB 9000: GO SUB 9200

70 GO SUB 140: IF PEEK 23681 <> 1 THEH LET 8* = "1":

GO TO 520
80 GO TO 400
90 STOP

100 POKE 23606.0: POKE 23607.60
110 KETURH

140 LET r=q/256: POKE 23606. (Г-IHT Г)"256:

POKE 23607. IHT Г-1
150 KETURH

390 REH «■«■ НЕНЮ «■■■

oT Э л

400 BORDER 7: PAPER 7: IHK 2: CLS: GO SUB 100
410 PRIST BRIGHT 1; IHVERSE 1: IHK 1; TAB 7:

"CHARGEH"
420 PRIHT ' ' TAB 14; IHK 1; "HEHU"
430 PRIHT * TAB 10; IHK 3: "CHARACTER SET"

440 PRIST ' "1 Сброс символьного набора. " '
■2 посмотреть символ из ПЗУ. " *
"3 Посмотреть символ из ОЗУ. "
450 PRIST "4 Изменить символ. " '

•5 Сбросить один символ. "
460 PRIST ' IRK 3; TAB 5; "СИМВОЛЫ ГРАФИКИ UDG"
470 PRIST * "6 Просмотр символов UDG" '
"7 Изменение символов UDG"
480 PRIST INK 3: * "8 Просмотр всея символов* '

"9 LOAD / SAVE"
490 INK О: PRIHTWO; BRIGHT 1; INK 7: PAPER 4; TAB 5;

"Нажните нужную клавишу". TAB 31: " "
500 LET et-IHKEY$: IF 8*<CHR* 49 OR 8* > CHR» 57

THEH GO TO 500
520 BEEP . 1. CODE 8* -64

530 IF 8«="1" THEH LET a=USR (4-30): POKE 23681.1:
GO TO 400

540 IF Bt'Z- OR 8»>"5" THEH GO SUB lOO: GO TO 560
550 GO SUB 140

560 CLS: LET t»=("СИНВОЛЬНЫИ НАБОР" AND g*<"6")+

("ГРАФИКА ПОЛЬЗОВАТЕЛЯ* AND (8* = "6" OR 8» ="7">>
♦ ("ПОЛНЫЙ ПРОСМОТР" AHD 8» = "8"» ♦
("ЗАГРУЗКА/ВЫГРУЗКА- AHD 8» r "9"»
570 PRIST INK 3; AT 0. 15-(I.EH t»/2): t* ' *
580 GO SUB (VAL 8»)«200 ♦ 600
600 PRIHT #0; INK l; "ENTER - вход в неню"
620 IF IHKEY» = "" THEH GO TO 620
630 IF IHKEY* г CHR* 13 THEH BEEP . 1.12: GO TO 400
650 GO TO 520
690 STOP

700 REH ««» ИЗОБРАЖЕНИЕ ПЛАНШЕТА »•«
710 PLOT 128.128

720 IHK 1: DRAW 64.0: DRAW 0.-64: DRAW -64.0: DRAW 0.64
740 IHK 0: RETURH

800 REH •»» УВЕЛИЧЕНИЕ СИМВОЛА •»«
810 LET г-V. LET T= 128

820 ihk l: priht tab 16;

830 LET IВТ (z/Y): PRIHT CHR» 164;:

IF Я=1 THEH PRIHT CHR» 8; "■"; :LET z=z-y
850 LET y=y/2: IF y<1 THEH IHK 0: BRIGHT 0: RETORH
860 GO TO 830

1000 REM »■« Просмотр символа ПЗУ «»»
1010 IHPUT 'Какой символ ПЗУ показать?'; а»:

let а = code а»: if а<32 or а>127 or leh a»<>l
theh go to 1010
1020 let a=(a-32)«8»15616
1030 go sub 700

1040 FOR f=l to 16: priht a*:" -;: HEXT f
1060 priht ' ' "Код:"

1070 FOR f-a TO a+7: LET v=PEEK f: PRIHT * f;

■-":*;: go sub 800: hext f
1080 priht ' ': for £-1 to 16: priht a»; " ";: hext £
1090 returh

1200 REH »■■ Просмотр символа из ОЗУ »»»
1210 IHPUT "Какой символ из ОЗУ показать?"; а»:

LET а = CODE а»: IF а<32 OR а>127 OR LEH a* <> 1
theh GO to 1210
1220 LET a-ia-32>«8»q
1230 GO TO 1030

1400 REH •»» Изменение символа •»»

1420 IHPUT "Какой символ изменить?"; a*

1430 LET a-CODE a*: IF a>127 OR a<32 OR LEH a*>i

THEH GO. TO 1420
1440 PLOT 128.152: GO SUB 720: LET C=(a-32)»8*9
1460 FOR f=C TO C+7: LET W^PEEK f: PRIHT ' w;:
PRIHT TAB 10; " " AHD f/2 = IHT (£/2);a»;:
GO SUB 800: HEXT f
1480 PLOT 128.80: GO SUB 720

1500 PRIHT IHK 3; ' "Новый код:";: FOR f=0 TO 7
1510 INK 2: IHPUT w: IF w<0 OR w>255 OR WOIHT W
THEH GO TO 1510

1520 POKE C+f.fc: PRIST ' w; TAB 10; " ■ AHD

f/2 = lHT(f/2);a»;: GO SUB 800
1530 HEXT f

1540 PRIST ' * : FOR f=l TO 16: PFIHT CHR* a: " ";:

HEXT f
1550 RETURH

1600 KEH »»» Сброс сипвода »»«

1620 INPUT "Какой символ сбросить?": а*

1630 LET а= CODE a*: IF a>127 OR а<32 OR LEH а*>1

THEH GO TO 1620
1640 PLOT 128.152: GO SUB 720: LET C=(a-32)«8+4:

LET a=(a-32)«8+15616
1650 FOR b=l TO 2

1660 FOR f=0 TO 7: PRIHT ';: LET W PEEK(C+f>:

IF f=0 OR f-7 THEN PRIHT TAB 0;: FOR V- TO 5:
PRIHT a*: " ":: HEXT v
1670 GO SUB 800: HEXT f

1680 IF Ъ=1 THEH FOR V=0 TO 7: POKE (V»C).PEEK (V»a):
HEXT w: PRIHT AT 7. 2: "Было:"; AT 10.0:
PLOT 128.80: GO SUB 720
1690 HEXT b: PRIHT AT 16.2:"Стало:"
1700 RETURH

1800 REH »»» просмотр символов udg »»»

1810 INPUT "Какой символ просмотреть?"; a*: LET a=CODE а»:
LET a=a»(79 AHD a>64 AHD a<91)+(47 AND a>96
AHD a<123): IF a<144 OR a>164 OR LEH a* <> 1
THEH GO TO 1810
1820 GO SUB 700: FOR f-1 TO 16 PRIHT CHR* a: " ":: HEXT f
1830 PRINT * ' "КОД UDG:"
1840 LET C=USR a*

1850 FOR f=0 TO 7: LET W=PEEK (f+C): PRIHT ' W;: GO SUB 800
I860 HEXT f: PRIHT ' '

1870 FOR TO 16: PRIST CHR* a; " "; : HEXT f
1880 RETURH

2000 REH »«» Изменение символа UDG ■■>■

2010 IHPUT "Какой символ изменить?": а»: LET а=CODE а»:
LET а=а*(79 AMD а>64 AHD а<91>»(47 AHD а>96
AND a<123>: IF а<144 OF а>163 THEH GO ТО 2010
2020 LET C=USR a*(ll: PLOT 128.152: GO SUB 720:
FOR f=0 TO 7

2030 LET tr-PEEK (f+C): PRIHT ' w; TAB 10:" " AHD

f/2-int(f/2>: chr* a:: go sub eoo: next f
2040 print ink 2: "Новый код символа:":
2050 plot 128.80: go sub 720

2060 FOR f=0 TO 7: INK 2: IHPUT W: IF W<0 OR w>255

OR W <> IHT V THEH GO TO 2060
2070 POKE (f+C).w: PRINT * w: TAB 10: " "

AHD f/2 = IHT(£/2): CHR* a:: GO SUB 800: HEXT f

2080 priht ' *: for f=i то 16: priht chr» a:" ":: next f

2090 RETURN

2200 REH ■»» Просмотр всего набора ???
2210 PRIHT "Символьный набор ПЗУ:":
2220 INK о: FOR 8=1 ТО 2

2240 FOR Ь=1 ТО 6: PRIHT: FOR f=0 ТО 14: PRIHT " "

AHD (b/2 = IHT (b/2) AHD f=0): CHR* С(b«15)+f+17):
- ":: HEXT f: NEXT ъ
2250 PRIHT TAB 10: : FOR i-122 TO 127: PRIHT CHR* f;

" ":: next f

2260 IF 8=1 THEH INK 2: PRIHT ' "Символьный набор ОЗУ:"::

GO SUB 140
2270 HEXT В
2280 GO SUB 100

2290 INK 3: PRIHT ' "синволы UDG:": FOR f=144 TO 164
2300 PRINT CHR* f; " ": CHR* 23 ♦ CHR* 11 ♦ CHR* О AHD f=159:
2310 NEXT f
2330 RETURH

2400 reh ■»» Процедуры загрузки-выгрузки ■■»
2410 priht ink 1: ' "a.. сохранить символьный набор." ' '
"В.. сохранить символы UDG. " * ' "С.. сохранить эту
программу. "

2430 priht ihk 2: *. * "d.. Загрузить символьный набор. * ' *
"e.. Загрузить синволы udg. " * * "f.. Загрузить любую
программу. "
2450 let а*=]hkey» let а = code а»:
let а=а-(32 ahd а>96 ahd a<103>:
if a<65 or a>70 theh go to 2450
2460 let b=3* (1 ahd a>67) ♦ ((a-65>»2>: priht at b. 0:

IHK 8; FLASH 1: OVER 1; TAB 7
2470 GO SUB (3000+Ua-65> «100))

2480 IF IHKEY* = "П" OR IHKEY* = "H" THEH GO TO 2480
2490 RETURH

3000 SAVE -Charset" CODE q. 768

3020 PRIHT AT 20. 10; "VERIFY ? (Y/H)": LET at- HKEY*
3030 IF a* = -П- THEH GO TO 3080
3040 IF a* <> -Y" THEH GO TO 3020

3050 priht at 20.2; "Отмотайте ленту и включите магнитофон"

AT 19.0: IF а<> 67 THEH VERIFY "" CODE
3060 IF a=67 THEH VERIFY ""
3080 RETURH

3100 SAVE "U. D. G. " CODE (q+769). 168
3120 GO TO 3020

3200 LET a*="y": SAVE "Chareen" LINK 1
3220 GO TO 3020

3300 PRIHT AT 18.1;"Включите магнитофон";
3310 LOAD -■ CODE 4
3330 RETURH

3400 PRINT AT 18. l; "Включите магнитофон":
3410 LOAD "" CODE (q+769>
3430 RETURH

3500 PRIHT AT 18.12: FLASH 1: "GOOD BYE"
3510 PRIHT #1;"Press any Key a start tape"
3520 LOAD "•: RUH
8999 STOP
9000 REM »■« настройка графического символа 'U' «■■
9010 RESTORE 9000: FOR f-0 TO 7: READ a:

POKE USR "u"+ f. a
9020 HEXT f: RETURN

9030 DATA 128, 128. 128. 128. 128. 128. 128. 255
9200 RESTORE 9200: LET г-ч/256

9210 FOR f=(4-30> TO (4-30)*11: READ a: POKE f. a:
HEXT f: RETURN

9220 DATA 17. (г-IHT r)«256. IHT Г. 33.0,61.1.0.3.237.176.

201
9990 STOP

9999 GO SUB 100: POKE 23609.0




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
О разном - О компрессии информации на магнитных носителях.
WANTED - Розыск программ...
Тема - идея полиграфического издания для спектрума от Станислава Юдина.

В этот день...   26 июня