OSDev

для всех
Текущее время: 01 май 2024, 10:33

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения: Re: ОСь с нуля. С чего начать?
СообщениеДобавлено: 27 сен 2007, 17:49 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Цитата:
Цитата:
Zidan, Зачем нужен рандомный доступ к строке???

//Zidan

уже не в контексте темы обьясню - предположим часть текстового файла утеряна - с этой кодировкой в изначальном ее виде нельзя будет его раскодировать, разве что попытаться по смыслу.
//"Dron"

А кому нужна половина текста? Повреждённый текст подлежит обязательному восстановлению из резервной копии или из первоисточника. И к тому же дело не только в буквах, но и в разметке: попробуй разрежь HTML (или WORD, EXEL) файл на половину и попробуй отобразить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОСь с нуля. С чего начать?
СообщениеДобавлено: 27 сен 2007, 20:42 
Chizh, точно... если пол файла пропало - то это в морг, однозначно.

Чтобы файлы не пропадали используются системы контроля версий.


Вернуться к началу
  
 
 Заголовок сообщения: Re: ОСь с нуля. С чего начать?
СообщениеДобавлено: 30 сен 2007, 17:47 

Зарегистрирован: 26 сен 2007, 22:48
Сообщения: 15
Цитата:
ChizhНет никакого смысла отводить для этого целый байт!
//Dron

нет такого в моей кодировки - длина байт
Длина длины тоже все время разная выходит. минимум 1 бит в первых двух символах.
Хм. вопрос еще в эту же тему кодировки - никому кроме меня не кажеться что ввод разделительного символа в кодировку не помешал бы?
А то мне все таки кажеться что например 5 мегабайтный текст (вдруг кто напишет такое) будет напряжно читать начав с 50% например - придеться ждать пока будут вычисленны длины всех предыдущих сиволов. А на машинах с ограниченными ресурсами так точно напряжно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОСь с нуля. С чего начать?
СообщениеДобавлено: 30 сен 2007, 19:33 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Zidan, ты придумываешь то, что уже есть - это кодировка UTF-8.
Вот её спецификация: http://express-os.narod.ru/docs/rfc3629.txt


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОСь с нуля. С чего начать?
СообщениеДобавлено: 02 окт 2007, 01:25 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
Может пригодится код, декодирующий UTF-8 в 16-битные символы. В спецификации будет легче разобраться :)
Код:
typedef unsigned int UINT;
typedef unsigned long ULONG;

//Параметры:
char* AnsiString = входная строка UTF-8;
wchar_t* UnicodeString = выходная строка UCS-2;
UINT BytesInAnsiString = байт во входной строке;
UINT MaxBytesInUnicodeString = максимум байт в выходной строке;

//Основной цикл
UINT MaxCharsInUnicodeString = MaxBytesInUnicodeString / sizeof(wchar_t);
for(UINT iSrc = 0, iDst = 0;
      iSrc < BytesInAnsiString && iDst < MaxCharsInUnicodeString;
    iSrc++)
{
      ULONG n1 = AnsiString[iSrc];
       if((n1 & 0x80) == 0)
       {
  UnicodeString[iDst] = n1;
  iDst++;
    }
  else if((n1 & 0xE0) == 0xC0)
   {
  if((AnsiString[iSrc + 1] & 0xC0) == 0x80)
  {
      n1 &= 0x1F;
        ULONG n2 = AnsiString[iSrc + 1] & 0x3F;
        UnicodeString[iDst] = (n1 << 6) | n2;
      iDst++;
  }
  iSrc++;
      }
  else if((n1 & 0xF0) == 0xE0)
   {
  if((AnsiString[iSrc + 1] & 0xC0) == 0x80 &&
    (AnsiString[iSrc + 2] & 0xC0) == 0x80)
  {
     n1 &= 0xF;
         ULONG n2 = AnsiString[iSrc + 1] & 0x3F;
        ULONG n3 = AnsiString[iSrc + 2] & 0x3F;
        UnicodeString[iDst] = (n1 << 12) | (n2 << 6) | n3;
         iDst++;
  }
  iSrc += 2;
   }
  else if((n1 & 0xF8) == 0xF0)
   {
  if((AnsiString[iSrc + 1] & 0xC0) == 0x80 &&
    (AnsiString[iSrc + 2] & 0xC0) == 0x80 &&
   (AnsiString[iSrc + 3] & 0xC0) == 0x80)
  {
     n1 &= 7;
   ULONG n2 = AnsiString[iSrc + 1] & 0x3F;
        ULONG n3 = AnsiString[iSrc + 2] & 0x3F;
        ULONG n4 = AnsiString[iSrc + 3] & 0x3F;
        UnicodeString[iDst] = (n1 << 18) | (n2 << 12) | (n3 << 6) | n4;
    iDst++;
  }
  iSrc += 3;
   }
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОСь с нуля. С чего начать?
СообщениеДобавлено: 04 окт 2007, 22:38 

Зарегистрирован: 04 окт 2007, 21:15
Сообщения: 2
Цитата:
Как пример по построению простейшего ядра, могу тебе предложить туториалы, которые я специально для объяснения сего процесса написал прошлым летом - OSTuts.
//legos

Спасибо за туториалы:) все таки промучавшись два дня умудрился их собрать :oops: проблемы были с компоновкой, я собирал под виндой...
заменил в setup.s: call main_function на call _main_function, и в makefile дописал objcopy kernel -O elf32-i386 ... если это неправильный подход поправьте пожалуйста :oops:
и еще одна проблема разбирался с циклом статей на лоу лвл... в 11 уроке там в handlers.c есть вот такой макрос:
Код:
#define IRQ_HANDLER(func) void func (void);
 asm#func ": pusha n call _"#func " n movb $0x20, %al n outb %al, $0x20 n popa n iret n");
 void _## func(void)


нормально компоноваться начало только после того как переписал его вот так:
Код:
#define IRQ_HANDLER(func) void func (void){
 asm#func ": pusha n call _"#func " n movb $0x20, %al n outb %al, $0x20 n popa n iret n")}
 void _## func(void)

но при запуске эмулятор выдает ошибку:(
подскажите что не так... может для сборки под виндой лучше использовать какие-нить другие инструменты:(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: ОСь с нуля. С чего начать?
СообщениеДобавлено: 08 окт 2007, 17:37 

Зарегистрирован: 04 окт 2007, 21:15
Сообщения: 2
эмулятор Bochs, MinGW вроде бы последнюю скачал, дома стоит FreeBSD, но дома нет просто-напросто времени... поэтому эксперементирую выбирая немного времени на работе, а там ХР и поставить что-то другое нет возможности... ну только если на эмулятор... ошибку не запомнил толком, что-то связанное с ldt. И спасибо большое за макрос:) завтра попробую:)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB