Автор Тема: Какая кодировка у BB документов?  (Прочитано 44767 раз)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Какая кодировка у BB документов?
« Ответ #120 : Декабрь 25, 2012, 03:20:13 pm »
Кстати, а почему тут не используют SET'ы для манипулирования битиками?
С SET'ами наверно сложнее будет. IF'ы понадобятся...

trurl

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Какая кодировка у BB документов?
« Ответ #121 : Декабрь 25, 2012, 03:25:36 pm »
Однако минус не помог. Не работает.
Угу. Я для >127 придумывал. :-\

trurl

  • Full Member
  • ***
  • Сообщений: 133
    • Просмотр профиля
Re: Какая кодировка у BB документов?
« Ответ #122 : Декабрь 25, 2012, 03:56:21 pm »
По моему, тогда и ucs-2 была не более распространенной чем utf8.
Тогда  ucs-2 называлась просто Unicode. :) А utf-8 была просто хитрой системой кодирования, придуманной для совместимости со старым софтом. 

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Какая кодировка у BB документов?
« Ответ #123 : Декабрь 25, 2012, 04:10:06 pm »
По моему, тогда и ucs-2 была не более распространенной чем utf8.
Тогда  ucs-2 называлась просто Unicode. :) А utf-8 была просто хитрой системой кодирования, придуманной для совместимости со старым софтом.
Ну, это смотря какое "тогда" :-) Если с 1991 по 1995 год, то да.  А вот если после 1995 года, то уже нет, ибо Unicode 2.0. В 1996 году был кстати придуман концептуальный костыль для обратной совместимости с подсевшими на ucs-2 -- зовется тот костыль UTF-16.
Y = λf.(λx.f (x x)) (λx.f (x x))

albobin

  • Full Member
  • ***
  • Сообщений: 198
    • Просмотр профиля
Re: Какая кодировка у BB документов?
« Ответ #124 : Декабрь 25, 2012, 05:32:06 pm »
facepalm...
С такой аватаркой жест опасен для зрения :)

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Какая кодировка у BB документов?
« Ответ #125 : Декабрь 25, 2012, 05:42:25 pm »
 ;D

albobin

  • Full Member
  • ***
  • Сообщений: 198
    • Просмотр профиля
Re: Какая кодировка у BB документов?
« Ответ #126 : Декабрь 25, 2012, 07:09:36 pm »
Конечно надо согласиться с т. igorем. (лучше поздно, чем никогда :)
http://oberspace.dyndns.org/index.php/topic,408.msg11903.html#msg11903


ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Какая кодировка у BB документов?
« Ответ #127 : Декабрь 25, 2012, 07:14:29 pm »
Вот в связи с этой темой любопытно стало, а чем плоха арифметика на CHAR'ах?
Почему бы не разрешить работать с ними как с uint16?

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Какая кодировка у BB документов?
« Ответ #128 : Декабрь 25, 2012, 07:19:11 pm »
Хотя в этом случае придется пересматривать синтаксис конкатенации... или усложнять компилятор.

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Какая кодировка у BB документов?
« Ответ #129 : Январь 13, 2013, 09:41:38 am »
Только наткнулся случайно на odcread
Цитировать
odcread - read ".odc" oberon compound documents

This is a library to read the "Oberon compound document" binary format used by the Black Box Component Builder, WinBUGS, and OpenBUGS.

A basic program is provided to convert the textual parts of these documents to plain text.
Насколько я понял, код написан на Objective C.
Пока внутрь не заглядывал.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Какая кодировка у BB документов?
« Ответ #130 : Январь 13, 2013, 09:46:32 am »
Только наткнулся случайно на odcread
Цитировать
odcread - read ".odc" oberon compound documents

This is a library to read the "Oberon compound document" binary format used by the Black Box Component Builder, WinBUGS, and OpenBUGS.

A basic program is provided to convert the textual parts of these documents to plain text.
Насколько я понял, код написан на Objective C.
Пока внутрь не заглядывал.
Написано на чистом C++, следов Objective-C не обнаружил.
Y = λf.(λx.f (x x)) (λx.f (x x))

Romiras

  • Sr. Member
  • ****
  • Сообщений: 264
    • Просмотр профиля
    • Romiras Dev Lab
Re: Какая кодировка у BB документов?
« Ответ #131 : Январь 13, 2013, 10:17:41 am »
Написано на чистом C++, следов Objective-C не обнаружил.
Ошибся по невежеству. Виноват. :-\

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Какая кодировка у BB документов?
« Ответ #132 : Январь 13, 2013, 10:19:17 am »
Написано на чистом C++, следов Objective-C не обнаружил.
Ошибся по невежеству. Виноват. :-\
Но штука действительно интересная и полезная. Буду щупать.
Y = λf.(λx.f (x x)) (λx.f (x x))

X512

  • Newbie
  • *
  • Сообщений: 45
    • Просмотр профиля
Re: Какая кодировка у BB документов?
« Ответ #133 : Январь 13, 2013, 12:58:15 pm »
Только наткнулся случайно на odcread
Как-то сложно. Много классов, которые ничего ни делают. В BlackBox есть упрощённый читатель текстовых odc файлов в модуле Dialog. Он используется при чтении ресурсов. Исходный код довольно короткий:
PROCEDURE ReadStringFile (subsys: Files.Name; f: Files.File; VAR tab: StringTab);
VAR i, j, h, n, s, x, len, next, down, end: INTEGER; in, in1: Files.Reader;
ch: CHAR; b: BYTE; p, q: StringPtr;

PROCEDURE ReadInt (OUT x: INTEGER);
VAR b: BYTE;
BEGIN
in.ReadByte(b); x := b MOD 256;
in.ReadByte(b); x := x + (b MOD 256) * 100H;
in.ReadByte(b); x := x + (b MOD 256) * 10000H;
in.ReadByte(b); x := x + b * 1000000H
END ReadInt;

PROCEDURE ReadHead (OUT next, down, end: INTEGER);
VAR b, t: BYTE; n: INTEGER;
BEGIN
in.ReadByte(b);
REPEAT
in.ReadByte(t);
IF t = -14 THEN ReadInt(n)
ELSE
REPEAT in.ReadByte(b) UNTIL b = 0
END
UNTIL t # -15;
ReadInt(n);
ReadInt(next); next := next + in.Pos();
ReadInt(down); down := down + in.Pos();
ReadInt(end); end := end + in.Pos()
END ReadHead;

BEGIN
tab := NIL;
IF f # NIL THEN (* read text file *)
in := f.NewReader(NIL); in1 :=  f.NewReader(NIL);
IF (in # NIL) & (in1 # NIL) THEN
in.SetPos(8); ReadHead(next, down, end); (* document view *)
in.SetPos(down); ReadHead(next, down, end); (* document model *)
in.SetPos(down); ReadHead(next, down, end); (* text view *)
in.SetPos(down); ReadHead(next, down, end); (* text model *)
in.ReadByte(b); in.ReadByte(b); in.ReadByte(b); (* versions *)
in.ReadByte(b); in.ReadByte(b); in.ReadByte(b);
ReadInt(x); in1.SetPos(in.Pos() + x); (* text offset *)
next := down;
NEW(tab); tab.name := subsys$;
NEW(tab.data, f.Length());
n := 0; i := 0; s := 0; in.ReadByte(b);
WHILE b # -1 DO
IF next = in.Pos() THEN ReadHead(next, down, end); in.SetPos(end) END; (* skip attributes *)
ReadInt(len);
IF len > 0 THEN (* shortchar run *)
WHILE len > 0 DO
in1.ReadByte(b); ch := CHR(b MOD 256);
IF ch >= " " THEN
IF s = 0 THEN j := i; s := 1 END; (* start of left part *)
tab.data[j] := ch; INC(j)
ELSIF (s = 1) & (ch = TAB) THEN
tab.data[j] := 0X; INC(j);
s := 2 (* start of right part *)
ELSIF (s = 2) & (ch = CR) THEN
tab.data[j] := 0X; INC(j);
INC(n); i := j; s := 0 (* end of line *)
ELSE
s := 0 (* reset *)
END;
DEC(len)
END
ELSIF len < 0 THEN (* longchar run *)
WHILE len < 0 DO
in1.ReadByte(b); x := b MOD 256; in1.ReadByte(b); ch := CHR(x + 256 * (b + 128));
IF s = 0 THEN j := i; s := 1 END; (* start of left part *)
tab.data[j] := ch; INC(j);
INC(len, 2)
END
ELSE (* view *)
ReadInt(x); ReadInt(x); in1.ReadByte(b); (* ignore *)
END;
IF next = in.Pos() THEN ReadHead(next, down, end); in.SetPos(end) END; (* skip view data *)
in.ReadByte(b);
END;
IF n > 0 THEN
NEW(tab.key, n); NEW(tab.str, n); i := 0; j := 0;
WHILE j < n DO
tab.key[j] := SYSTEM.VAL(StringPtr, SYSTEM.ADR(tab.data[i]));
WHILE tab.data[i] >= " " DO INC(i) END;
INC(i);
tab.str[j] := SYSTEM.VAL(StringPtr, SYSTEM.ADR(tab.data[i]));
WHILE tab.data[i] >= " " DO INC(i) END;
INC(i); INC(j)
END;
(* sort keys (shellsort) *)
h := 1; REPEAT h := h*3 + 1 UNTIL h > n;
REPEAT h := h DIV 3; i := h;
WHILE i < n DO p := tab.key[i]; q := tab.str[i]; j := i;
WHILE (j >= h) & (tab.key[j-h]^ > p^) DO
tab.key[j] := tab.key[j-h]; tab.str[j] := tab.str[j-h]; j := j-h
END;
tab.key[j] := p; tab.str[j] := q; INC(i)
END
UNTIL h = 1
END
END
END
END ReadStringFile;
Помимо чтения odc там ешё чтение и сортировка строковых ресурсов.