LINUX.ORG.RU
ФорумTalks

Вышел radix50conv 0.1 для кодировки Radix-50 (в варианте PDP-11/VAX)

 , , pdp-11, radix-50


0

1

Сабж. radix50conv умеет конвертировать из ASCII/KOI8-R в Radix-50 PDP-11/VAX и обратно:

> echo "Привет всему ЛОРу!" | wc -c
19
> echo "Привет всему ЛОРу!" | radix50conv > tmp0
> hexdump -C tmp0
00000000  66 d9 90 9c b2 ab 21 5d  b0 ef 73 e4 b3 7c        |fы░°╡╚!]╟ОsДЁ||
0000000e
> cat tmp0 | radix50conv d
PRIWET.WSEMU.LORU....>
> du -b tmp0
14      tmp0
>
> du -b tomsawyer.*
279228  tomsawyer.radix50
418842  tomsawyer.txt
>
Radix-50, напоминаю, - это кодировка из 40-ка символов (включая пробел) (40 в десятичной системе счисления равно 50 в восьмеричной системе счисления - отсюда и название), которая в каждые 2 байта (одно слово) помещает очередные 3 символа.
https://en.wikipedia.org/wiki/DEC_Radix-50

Скачать: http://saahriktu.org/downloads/radix50conv-0.1.tar.lzma

★★★★★

Последнее исправление: saahriktu (всего исправлений: 1)

Код трёхсимвольной последовательности рассчитывается по следующей формуле:
A = 1600 × код_левого_символа + 40 × код_среднего_символа + код_правого_символа

tcler
()
Ответ на: комментарий от tcler

И? Руками считать что-ли? Нужна автоматизация. Конвертер (и в обратную сторону тоже). Ну и вот.

saahriktu ★★★★★
() автор топика
Последнее исправление: saahriktu (всего исправлений: 1)

Вспоминаю, в DESS был режим RAD50...

Shadow ★★★★★
()

на пересдачу

очень расточительная программа. аскишный символец аж в целый int пихает!

формула конвертации с умножением. туда же LUT просится. или тебе 1024 байт жалко стало?

умножение и деление на хардкорные сдвиги переделай

и нормальный --help и парсинг аргументов через getopt

makefile тоже говно хардкоженное, переделай, что б нормально было.

все переделай, чтоб летало

n_play
()
Ответ на: на пересдачу от n_play

аскишный символец аж в целый int пихает!

Для совместимости с ARM'ами, где char беззнаковый, а потому нет возможности отслеживать отрицательный EOF. Чтобы отрицательный EOF присвоился отрицательным числом его нужно присвоить знаковому типу.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от n_play

А я бы мог сказать, что «позорище» - это громоздкий код с разными getopt'ами и прочим хламом. Двойки умеет ставить не только тот преподаватель, который был у Вас в ВУЗе.

Если нужны конкретные опции, то надо делать так:

        for (argvp = 1; argvp < argc; argvp++) {
                if (!strcmp(argv[argvp], "-a"))
                        MODE_KOIE = 0;
                if (!strcmp(argv[argvp], "-1"))
                        MODE_OCPL = 1;
                if (!strcmp(argv[argvp], "-h")) {
                        printf
                            ("Options:\n-a - off KOI8-R wrapper (ASCII only)");
                        printf("\n-1 - one char per line mode\n-h - help\n");
                        return 0;
                }
        }
Ну и вообще, красивый код - это компактный код без лишних строк и библиотек.

saahriktu ★★★★★
() автор топика
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от saahriktu

красивый код - это компактный код без лишних строк и библиотек.

просто скажи сколько десятков тыщ строк кода из под твоих ручищ вышло

n_play
()
Ответ на: комментарий от n_play

Какая разница? Переходы на личности начинаются тогда, когда сказать по сути нечего. У разных людей разные школы, которые определяют подход к коду. Поэтому если Ваша школа говорит, что код плохой, то это не значит, что он плохой для всех школ. Я же не ругаюсь на код последних десятилетий. А с точки зрения моей школы код начал портиться ещё во времена появления BSD 4. Тогда, по ходу, было внедрено много всего нового и появились новые школы с новым подходом к коду. Ну так и пусть. Пусть этот код плохой, всё в любом случае сам не напишешь и не перепишешь. Пусть оно будет хотя бы таким, какое оно есть. И не надо устраивать холиваров между разными школами. Что уж поделать если школы разные.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от vasya_pupkin

1) Исторические тексты в Radix-50 можно конвертировать в ASCII;
2) Можно компактнее хранить те тексты, которые можно записать в Radix-50;
3) Можно портировать старый софт, который работает с Radix-50, и ему будет с чем работать;
4) Можно писать новый софт, который знает заодно и Radix-50;
...
И т.д.

saahriktu ★★★★★
() автор топика
Последнее исправление: saahriktu (всего исправлений: 1)

[Трололо моде он] Любителям KOI8-R есть куда стремиться, применив данную кодировку, можно сделать бинарник еще на 0.005% меньше, так вам проклятые юникодщики! И то, что 1 байт не равен одному символу — тоже не беда, главное чтобы не как на Украине юникод.

Rupricht ★★
()
Ответ на: комментарий от kirk_johnson

Если Вы не видите смысл в Radix-50, то это ещё не значит, что его нет. Идею конвертера, кстати, я подчерпнул из Perl'ового модуля Encode-RAD50, который написал Tom Wyant из США (свежая версия вышла на днях). Реализация модуля на мой взгляд странная, а потому я сделал свой конвертер на Си.

saahriktu ★★★★★
() автор топика
Последнее исправление: saahriktu (всего исправлений: 2)

radix50conv умеет конвертировать из ASCII/KOI8-R в Radix-50 PDP-11/VAX и обратно

Лучше бы умел конвертировать микенское линейное письмо А в письмо Б и обратно. Это тоже мёртвые формы записи, но хоть науке менее известные, тем самым программа обрела бы научную ценность.

redgremlin ★★★★★
()
Ответ на: комментарий от saahriktu

Если Вы не видите смысл в Radix-50, то это ещё не значит, что его нет.

Конечно нет, потому что:

Идею конвертера, кстати, я подчерпнул из Perl'ового модуля Encode-RAD50

То есть уже есть конвертер, но ты зачем-то накостылял своего говнокода без getopt и нормального man. Браво.

kirk_johnson ★☆
()
Ответ на: комментарий от saahriktu

А когда я дам ему опцию, о который он не знает, что он мне скажет? А если я забуду дать ему необходимый аргумент к опции, что он мне скажет? Серьезно, за такое даже в школе двойки ставили. Сдай диплом в РОНО. Тем более, что getopt — unix-way и в POSIX с самого начала.

P.S. Установка cp — это вообще бомба. Я же говорил, что ты ламер.

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 2)
Ответ на: комментарий от redgremlin

Лучше бы умел конвертировать микенское линейное письмо А в письмо Б и обратно. Это тоже мёртвые формы записи, но хоть науке менее известные, тем самым программа обрела бы научную ценность.

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

petrosyan ★★★★★
()
Ответ на: комментарий от kirk_johnson

То есть уже есть конвертер

Нет, там не конвертер, а именно модуль кодировки, который могут прикрутить и заюзать только продвинутые Perl'овики. Пример самого автора бесполезен и не работает:

        use Encode;
        use Encode::RAD50; # Sorry about this.
        $rad50 = encode ('RAD50', 'FOO');
        $ascii = decode ('rad50', pack 'n', 10215);
        binmode STDOUT, ':encoding(rad50)'; # Perverse, but it works.
        print 'A#C'; # Gives a warning, since '#' isn't valid.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Фраза из README оригинального проекта, объясняющая всю суть происходящего:

I have no idea what anyone would want to use this for.

Алсо УМВР:

$ cat test.pl 
#!/usr/bin/perl

use 5.016;

use strict;
use warnings;

use Encode;
use Encode::RAD50;

my $rad50 = encode('RAD50', 'FOO');
my $ascii = decode('rad50', pack 'n', 10215);

say("RAD50: $rad50");
say("ASCII: $ascii");
$./test.pl 
RAD50: 'ç
ASCII: FOO
kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 1)
Ответ на: комментарий от kirk_johnson

iconv? У него даже гуй на Qt есть. И не один :)

Не, я не про кодировки, а задачи типа кириллица <=> глаголица. Типа транслит.ру, только офлайн и с возможностью легкой кастомизации под конкретные задачи. Я как-то себе костылил с помощью sed, но иметь что-то более универсальное и с кнопкой «сделать хорошо» было бы реально круто.

petrosyan ★★★★★
()
Последнее исправление: petrosyan (всего исправлений: 1)
Ответ на: комментарий от kirk_johnson

А когда я дам ему опцию, о который он не знает

Такого быть не может. По исходнику (меньше чем сотня строк) ясно видно, что у программы всего 2 режима: дефолтный режим кодирования и режим декодирования, который включается любым количеством любых дополнительных опций. Соответственно, любые аргументы программа трактует как то, что юзеру нужно декодирование. Вот и всё. Не меньше и не больше. В общем, не надо усложнять то, что может быть проще. Вот для 3-4 режимов и больше уже нужны конкретные опции.

А если я забуду дать ему необходимый аргумент к опции

См. предыдущий абзац. Нет опций - юзер говорит, что ему нужно кодирование.

Установка cp — это вообще бомба

Нет, это классика. Не везде и не всегда нужен именно install.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Такого быть не может.

В твоих флажных фантазиях. Где документация, ламерюга?

Нет, это классика. Не везде и не всегда нужен именно install.

Это классика быдлокодеров, да.

kirk_johnson ★☆
()
Ответ на: комментарий от kirk_johnson

Документация? Юзер должен понимать из исходников же. Не везде и не всегда (с) нужна документация.

StReLoK ☆☆
()
Ответ на: комментарий от petrosyan

А... можешь основать стартап, прикрутить ML и заработать кучу денег :)

kirk_johnson ★☆
()
Ответ на: комментарий от saahriktu

По исходнику (меньше чем сотня строк) ясно видно

Что автора этого исходника нельзя подпускать к программированию.

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin

Меня больше позабавило, что чувак не осилил запустить перловый скрипт. Что в очередной раз доказывает, что пердолинг с LFS знаний не добавляет.

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 1)
Ответ на: на пересдачу от n_play

makefile тоже говно хардкоженное, переделай, что б нормально было.

project('rad50', 'c')
executable('radix50conv', 'radix50conv.c')


Done :)

redgremlin ★★★★★
()
Ответ на: комментарий от kirk_johnson

не осилил запустить перловый скрипт

Какой скрипт? Тот, что в мане, в любом случае не работает:

> cat rad50test.pl
#!/usr/bin/perl
use Encode;
use Encode::RAD50; # Sorry about this.
$rad50 = encode ('RAD50', 'FOO');
$ascii = decode ('rad50', pack 'n', 10215);
binmode STDOUT, ':encoding(rad50)'; # Perverse, but it works.
print 'A#C'; # Gives a warning, since '#' isn't valid.
> ./rad50test.pl
'#' is an invalid character at ./rad50test.pl line 0.

к>
Ругается на '#' в последней строке, да:
> cat rad50test.pl
#!/usr/bin/perl
use Encode;
use Encode::RAD50; # Sorry about this.
$rad50 = encode ('RAD50', 'FOO');
$ascii = decode ('rad50', pack 'n', 10215);
binmode STDOUT, ':encoding(rad50)'; # Perverse, but it works.
print 'ABC'; # Gives a warning, since '#' isn't valid.
> ./rad50test.pl
⌠>

saahriktu ★★★★★
() автор топика
Последнее исправление: saahriktu (всего исправлений: 1)
Ответ на: комментарий от kirk_johnson

Где документация

Зачем она текстовому 2-х режимному фильтру?

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Какой скрипт?

Перловый, я же сказал.

Тот, что в мане, в любом случае не работает

В мане не скрипт, там несколько разных usage example.

Ругается на '#' в последней строке, да

О чем сказано в комментарии. А знаешь, почему ругается? Потому что такого символа в кодировке нет :)

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 1)
Ответ на: комментарий от saahriktu

Я только ман и смотрел.

В котором описан сценарий кодирования, декодирования и установки кодировки stdout. И показан пример вывода некорректного символа, да. Но поскольку ты ламер, то не осилил и накостылил своего говнокода.

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 2)

PDP-11/VAX
Radix-50

На старом кладбище, вечернею порою...

IPR ★★★★★
()
Ответ на: комментарий от kirk_johnson

Тем не менее, мой конвертер получился более универсальным. Этот модуль кодировки, смотрю, кодирует только описанные для кодировки символы. Даже если скормить ему символ в другом регистре он уже его не поймёт. Я уж не готоворю про транслитерацию из KOI8-R. Так что, у моего конвертера больше практического смысла.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Тем не менее, мой конвертер получился более универсальным.

Нет, просто ты конвертируешь во что-то, что не является RAD50. Короче, ты решил в очередной раз повыпендриваться на лоре, но в итоге перданул с подливой. Впрочем, как и всегда.

kirk_johnson ★☆
()
Ответ на: комментарий от kirk_johnson

просто ты конвертируешь во что-то, что не является RAD50

Нет, наоборот. Суть в том, что мой конвертер может конвертировать в Radix-50 в т.ч. и из тех символов, которых в Radix-50 нет. А вот преобразование Radix-50 -> ASCII выполняется точно также.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Забавно, что каждый твой тред заканчивается твоей попыткой рассказать окружающим, что растекающаяся под тобой лужа — шоколад.

kirk_johnson ★☆
()
Ответ на: комментарий от kirk_johnson

Нет, это лично Вы всем всегда недовольны. И даже в теме про свежий релиз nano, который написан не мной, Вы наехали на этот самый nano.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от kirk_johnson

Школы программистской мысли бывают разные. Кто-то считает код убогим пока он не доведён до уровня кода проекта GNU. Я же, наоборот, считаю убогими хелловорлды на 304 файла общим весом под 3,7 Мб. Вот в BSD 3 был правильный код.

saahriktu ★★★★★
() автор топика
Ответ на: комментарий от saahriktu

Школы программистской мысли бывают разные.

Какие школы, ты даже Makefile по-человечески написать не можешь. И прочитать написанное в хелпе к перловому модулю, лол.

kirk_johnson ★☆
()
Последнее исправление: kirk_johnson (всего исправлений: 2)
Ответ на: комментарий от kirk_johnson

Секция install, между прочим, есть далеко не в каждом Makefile. Так что, это вообще бонус. Причём рабочий бонус. Как и всё остальное. Да, без выставления соответствующих прав через install. Но, это юзер может делать и сам, если ему очень нужно.

И прочитать написанное в хелпе

Автор мана неправильно сделал, что не отделил явным образом строчки

        use Encode;
        use Encode::RAD50; # Sorry about this.
от остального.

Ещё можно понять, когда перечисляются отдельные методы сами по себе:

        $rad50 = encode ('RAD50', 'FOO');
        $ascii = decode ('rad50', pack 'n', 10215);
        binmode STDOUT, ':encoding(rad50)'; # Perverse, but it works.
        print 'A#C'; # Gives a warning, since '#' isn't valid.
Но, строчками
           use Encode;
           use Encode::RAD50; # Sorry about this.
определённо начинается скрипт.

saahriktu ★★★★★
() автор топика
Последнее исправление: saahriktu (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.