Re: конкретные выходы из положения



Posted by Аркадий Водяник (195.58.229.60) on March 22, 2002 at 08:23:14:

In Reply to: Re: Смотрите страницу Примеры приложений posted by a3491 on March 22, 2002 at 06:45:39:

Здравствуйте, господин а3491.

1. Вы правильно заметили, что код FF (12) игнорируется clw при графической печати.

2. Но не заметили, что этот же код правильно воспринимается ultraH для Windows.
Выход 1:
а) получить в clw результат выполнения требуемой формы;
б) из раздела меню Edit сделайте Copy oem->win;
в) в ultraH заведите новую форму и через меню Edit пригласите туда
содержимое clipboard (Paste win->oem);
г) печатайте.Украинские буквы будут печататься правильно - потому что
в графике, и переводы строк тоже будут работать.

Но это так, выход на первое время.

Выход 2 (радикальный):
Продолжаем печатать "Как в DOS". Oчевидно, Вы заметили, что
коды украинских букв в ФБП не соответствуют кодам в шрифтовом кэртридже.
И Вы не имеете подходящего font loader'a, который управлялся бы каким-либо
файлом конфигурации.

Так сделайте нужное перекодирование самостоятельно - средствами ФБП же.
Получаем в clw результат выполнения требуемой формы. Записываем этот
файл в файл report.txt (клавишей F2). Вам потребуется иметь на клиентской
стороне форму-перекодировщик, который будет читать этот report.txt и
переделывать его в результат, где украинские буквы будут соответствовать
Вашему кэртриджу. И этот результат будет печататься правильно.

Как написать такую форму? Ниже приведен макет:


*наведение порядка с украинскими буквами
loadtxt 'report.txt' здесь, возможно, потребуется указание имени каталога,
* на котором работает Ваш клиент;
* оператор loadtxt загрузит строки файла report.txt в
* записи в extrd.dat. Далее читаем эти записи и выполняем
* перекодировку.
N=[ged 'lt.N']
for i=1 to N
S=[ged 'lt.'+[intsn i]]
* здесь должен идти фрагмент, отвечающий за перекодировку
* строки s;
* его можно написать разными способами:
* можно устроить цикл по пересборке строки с нужными
* заменами; например, так:
* T=' '
* for j=1 to [length S]
* c=[hc S,i]
* if c=... c=...
* elseif c=... c=...
* ....
* endif
* T=T+c
* endfor
* printstr T
*
* Это прозрачный, но не оптимальный путь - далеко не самый быстрый.
* Вместо этого можно использовать функцию [ps..], ищущую
* символы, нуждающиеся в перекодировке, запоминать положения
* этих символов в массиве, а затем делать переборку строки
* функциями [cp..] и сложениями (конкатенациями).
endfor





Пpишедшие ответы: