12.01.2011, 20:11
13.01.2011, 05:03
А графика - это GUI в смысле?
Хотя все равно меня больше интересует система.
А что именно подразумевается под "системой": только само ядро или также модули и пользовательские команды?
Хотя все равно меня больше интересует система.
А что именно подразумевается под "системой": только само ядро или также модули и пользовательские команды?
13.01.2011, 09:30
Ну да. Вообще я бы разделил на 4 основных направления разработки DreamShell вот так:
1) GUI и видео рендеринг
2) Системные функции ядра, драйвера и файловые системы, сеть и в общем все остальное что не вошло в остальные пункты.
3) Консольные команды и модули
4) Разработка приложений
Часто бывает так, что какая нибудь функция в приложении это просто обертка для команды или модуля.
Допустим, ставшая так сказать популярной фишкой SDISO, является командой для консоли, просто назначена на кнопку в приложении файлового менеджера.
Я был бы очень рад, если бы кто то помогал хотя бы с командами/модулями и приложениями. В ядро лезть сразу тяжеловато, у меня там комментов нет вообще для командной разработки его, нужно все привести сначала в порядок.
А вот начать с SDK самое оно (с помощью него можно сделать почти что угодно), можешь хоть сейчас скачать и попробовать написать модуль или команду (это проще всего сделать и проверить). Приложения же немного другая тема, там желательно знание lua, но, можно всю логигу по сути написать и в модуль, который приложение будет загружать через свой xml, а в lua сделать только вызов нужной функции, хотя даже и этого можно не делать В общем я бы помог если что.
Вообще я сделаю конкретно поддержку приложений без lua, а то проблемы там с памятью есть, пока не знаю как решить, но для тех кто хочет попробовать что то написать, вполне хватит возможностей. Это я так, для себя и других желающих писать логику на Си. Сам я уже не буду наверное на lua приложения писать, то что я писал до этого, является просто примером для тех, кто хочет писать приложения без компиляции и прочих заморочек, а просто открыть текстовый редактор и что то сотворить.
1) GUI и видео рендеринг
2) Системные функции ядра, драйвера и файловые системы, сеть и в общем все остальное что не вошло в остальные пункты.
3) Консольные команды и модули
4) Разработка приложений
Часто бывает так, что какая нибудь функция в приложении это просто обертка для команды или модуля.
Допустим, ставшая так сказать популярной фишкой SDISO, является командой для консоли, просто назначена на кнопку в приложении файлового менеджера.
Я был бы очень рад, если бы кто то помогал хотя бы с командами/модулями и приложениями. В ядро лезть сразу тяжеловато, у меня там комментов нет вообще для командной разработки его, нужно все привести сначала в порядок.
А вот начать с SDK самое оно (с помощью него можно сделать почти что угодно), можешь хоть сейчас скачать и попробовать написать модуль или команду (это проще всего сделать и проверить). Приложения же немного другая тема, там желательно знание lua, но, можно всю логигу по сути написать и в модуль, который приложение будет загружать через свой xml, а в lua сделать только вызов нужной функции, хотя даже и этого можно не делать В общем я бы помог если что.
Вообще я сделаю конкретно поддержку приложений без lua, а то проблемы там с памятью есть, пока не знаю как решить, но для тех кто хочет попробовать что то написать, вполне хватит возможностей. Это я так, для себя и других желающих писать логику на Си. Сам я уже не буду наверное на lua приложения писать, то что я писал до этого, является просто примером для тех, кто хочет писать приложения без компиляции и прочих заморочек, а просто открыть текстовый редактор и что то сотворить.
14.01.2011, 15:51
(12.01.2011 20:11)SWAT писал(а): [ -> ]И в каком направлении хочешь работать? Графика, система или драйвера?
Эм, я бы хотел работать в направление разработки драйверов, самого кода ядра в-общем.
Сват, тут такое дело, я пишу что хочу помогать, но...
На самом деле я Си знаю если не в совершенстве то очень хорошо (ну как я считаю), по крайней мере ООП так точно...
Проблема в том что я совершенно не представляю как програмить что-то под Дримкаст.
У меня есть такая интересная особенность я все время вдаюсь в фундаментальную науку, т.е. прикладные объяснения меня никогда не устраивают, всегда хочу все знать по максимуму, т.е. докопаться до самой основы...
И да, кстати, я ж пытался разобраться во всех тех утилитах что ты ме говорил... Качал себе gcc компайлер (это было примерно пол-года назад), пытался настроить его, но все тщетно... Я там ничего не понял почти... ему нужны какие-то пакеты я так в этом и не разобрался.
Просто смотри, как я понимаю сам процесс компиляции:
1. Пишется код в каком-нибудь текстовом редакторе или интегрированной студии разработки (IDE)
2. Запускается из консоли (командного интерпретатора) файл ccompile.exe (к примеру), ему в качестве параметра передаётся имя фала с кодом (example.c) ну и задаются кастомные параметры
3. Получившийся объектный код загоняем в линкер, clinker.exe -example.obj и на выходе получаем example.com (/exe, /bin, /elf).
И вот скачал я этот gcc и так и не понял ни где там находится ни ccompile, ни сlinker...
И буду весьма рад если ты мне объяснишь где же их все-таки искать.
ЗЫ. Очень хочу помогать тебе с разработкой Dreamshell. Для меня это будут бесценные знания и опыт. Так что это выгодно мне самому, в первую очередь.
Заранее спасибо за ответ.
ЗЫ. Сёдня с утреца пытался написать простенький командный интерпретатор... гы... не заработал, падла))
14.01.2011, 21:06
(14.01.2011 15:51)Rio писал(а): [ -> ]На самом деле я Си знаю если не в совершенстве то очень хорошо (ну как я считаю), по крайней мере ООП так точно...
Это предложение меня конечно убило В Си нет ООП.
Ладно давай проверим. Напиши функцию которая пакует RGBA из строки типа #AABBCC в одну переменную uint32.
Я как нибудь напишу на сайте инструкцию по установке и настройке окружения.
14.01.2011, 21:20
Но в Си++ есть...
Строка в буквальном смысле строка?
Или уже готовая hex-константа.
Строка в буквальном смысле строка?
Или уже готовая hex-константа.
15.01.2011, 00:05
Через недельку, как только сдам сессию надо будет что-то для начала простенькое наваять.
И один вопрос: какой эмуль ты используешь чтобы проверять проги.
И можно я свой вариант упаковки цвета покажу ?
И один вопрос: какой эмуль ты используешь чтобы проверять проги.
И можно я свой вариант упаковки цвета покажу ?
15.01.2011, 02:10
Ну вот, отбирают работу)) А я сегодня весь вечер над алгоритмом корпел))
15.01.2011, 07:09
sc_maxim
Я использую nullDC для проверок, когда можно обойтись без дрима, жаль там SD не эмулится )
Показывай свой вариант.
Rio
Да, строка прям строка
Не волнуйся работы всем хватит
Я использую nullDC для проверок, когда можно обойтись без дрима, жаль там SD не эмулится )
Показывай свой вариант.
Rio
Да, строка прям строка
Не волнуйся работы всем хватит
15.01.2011, 17:50
Может и не самый оптимальный вариант но это первое что в голову пришло
PHP код:
#include <stdio.h>
#include <stdlib.h>
typedef unsigned __int32 uint32;
////////////////////////////////////////////////////////////////////////////////
// Convert char representation of number to integer
// If char is not a number then return 0x10.
inline uint32 CharToInt( char inChar )
{
uint32 Res;
if( inChar >= 0x30 && inChar <= 0x39 )
{
Res = inChar - 0x30;
}
else
{
switch( inChar )
{
case 'a' : case 'A':
Res = 0x0A;
break;
case 'b' : case 'B':
Res = 0x0B;
break;
case 'c' : case 'C':
Res = 0x0C;
break;
case 'd' : case 'D':
Res = 0x0D;
break;
case 'e': case 'E':
Res = 0x0E;
break;
case 'f': case 'F':
Res = 0x0F;
break;
default:
Res = 0x10;
}
}
return Res;
}
////////////////////////////////////////////////////////////////////////////////
#define CONV_ERR 0x01
#define CONV_OK 0x02
uint32 StrToRGBA( char *inStr,
uint32 *outColor )
{
uint32 shift;
uint32 t1, t2;
uint32 Res = CONV_OK;
char *p = inStr+1;
if( *inStr == '#' && strlen( inStr ) > 8 )
{
*outColor = 0;
shift = 24;
do
{
t1 = CharToInt(*p++);
t2 = CharToInt(*p);
if( t1 == 0x10 || t2 == 0x10 )
{
Res = CONV_ERR;
break;
}
else
{
*outColor |= (t1*0x10 + t2) << shift;
shift -= 8;
}
}
while( ++p < inStr+9 );
}
else
{
Res = CONV_ERR;
}
return Res;
}
////////////////////////////////////////////////////////////////////////////////
int main( int argc, char *argv[] )
{
uint32 color;
char str[10];
printf( "Enter color: " );
scanf( "%s", &str );
if( StrToRGBA( str, &color ) == CONV_ERR )
{
printf( "Conversion error!\n" );
}
else
{
printf( "Converted num: 0x%.8X\n", color );
}
system("PAUSE");
return 0;
}
15.01.2011, 18:38
Упс - Conversion error!
15.01.2011, 18:56
Что не работает? Я просто делал на строку вида #AABBCCDD а не #AABBCC. Так как строка #AABBCC это RGB, а не RGBA.
Вот код для #AABBCC.
Вот код для #AABBCC.
PHP код:
#include <stdio.h>
#include <stdlib.h>
typedef unsigned __int32 uint32;
////////////////////////////////////////////////////////////////////////////////
// Convert char representation of number to integer
// If char is not a number then return 0x10.
inline uint32 CharToInt( char inChar )
{
uint32 Res;
if( inChar >= 0x30 && inChar <= 0x39 )
{
Res = inChar - 0x30;
}
else
{
switch( inChar )
{
case 'a' : case 'A':
Res = 0x0A;
break;
case 'b' : case 'B':
Res = 0x0B;
break;
case 'c' : case 'C':
Res = 0x0C;
break;
case 'd' : case 'D':
Res = 0x0D;
break;
case 'e': case 'E':
Res = 0x0E;
break;
case 'f': case 'F':
Res = 0x0F;
break;
default:
Res = 0x10;
}
}
return Res;
}
////////////////////////////////////////////////////////////////////////////////
#define CONV_ERR 0x01
#define CONV_OK 0x02
uint32 StrToRGBA( char *inStr,
uint32 *outColor )
{
uint32 shift;
uint32 t1, t2;
uint32 Res = CONV_OK;
char *p = inStr+1;
if( *inStr == '#' && strlen( inStr ) > 6 )
{
*outColor = 0;
shift = 16;
do
{
t1 = CharToInt(*p++);
t2 = CharToInt(*p);
if( t1 == 0x10 || t2 == 0x10 )
{
Res = CONV_ERR;
break;
}
else
{
*outColor |= (t1*0x10 + t2) << shift;
shift -= 8;
}
}
while( ++p < inStr+7 );
}
else
{
Res = CONV_ERR;
}
return Res;
}
////////////////////////////////////////////////////////////////////////////////
int main( int argc, char *argv[] )
{
uint32 color;
char str[10];
printf( "Enter color: " );
scanf( "%s", &str );
if( StrToRGBA( str, &color ) == CONV_ERR )
{
printf( "Conversion error!\n" );
}
else
{
printf( "Converted num: 0x%.6X\n", color );
}
system("PAUSE");
return 0;
}
15.01.2011, 21:51
Да я понял. Просто это так сказать проверка на гибкость
При отсутствии альфа канала при вводе, можно было бы его автоматом подставить как 100% непрозрачность
При отсутствии альфа канала при вводе, можно было бы его автоматом подставить как 100% непрозрачность
15.01.2011, 22:03
Да, можно было универсальней сделать, все зависит от того где это применять придется. А так просто быстро накатал, лишь бы работало
Хотелось бы увидеть как сделал Rio, но он что-то не хочет показывать свой вариант.
Хотелось бы увидеть как сделал Rio, но он что-то не хочет показывать свой вариант.
15.01.2011, 22:51
Хочет, но не может
Он никогда до этого прежде не паковал байты в 32х разрядные слова и очень тужится вспомнить побитовые операции))
Он никогда до этого прежде не паковал байты в 32х разрядные слова и очень тужится вспомнить побитовые операции))
16.01.2011, 10:35
Вот Rio, если бы ты в реальноти "Си знаю если не в совершенстве то очень хорошо" то тебя ночью разбуди, ты бы запаковал туда все за 2 минуты
Я вот не рискну про свои знания так сказать, потому как учится есть чему всегда, знание синтаксиса это мелочи, его можно познать за неделю. А вот опыт, разные техники и трюки програмирования приходят со временем. Так же не мало важно знать фундаментальное устройство рабочего кода для железа и ассемблер.
Я вот как не возьмусь на Си что то пописать, так обязательно что то новое узнаю и думаю что врятли я вообще когда ни будь все познаю, потому как довольно редко пишу на Си
Давай выкладывай как есть, главное чтобы работало.
Я вот не рискну про свои знания так сказать, потому как учится есть чему всегда, знание синтаксиса это мелочи, его можно познать за неделю. А вот опыт, разные техники и трюки програмирования приходят со временем. Так же не мало важно знать фундаментальное устройство рабочего кода для железа и ассемблер.
Я вот как не возьмусь на Си что то пописать, так обязательно что то новое узнаю и думаю что врятли я вообще когда ни будь все познаю, потому как довольно редко пишу на Си
Давай выкладывай как есть, главное чтобы работало.
16.01.2011, 17:30
PHP код:
#include "stdafx.h"
#include <string.h>
#define ERR_CODE 0x00B
int CharToInt(const char inputChar)
{
char Seed=0;
if(inputChar>=0x30&&inputChar<=0x39)
{
return(inputChar-0x30);
}
else
if(inputChar>=0x41&&inputChar<=0x46||inputChar>=0x61&&inputChar<=0x66)
{
switch(inputChar)
{
case 'A': case 'a':
Seed = 0x0A;
break;
case 'B': case 'b':
Seed = 0x0B;
break;
case 'C': case 'c':
Seed = 0x0C;
break;
case 'D': case 'd':
Seed = 0x0D;
break;
case 'E': case 'e':
Seed = 0x0E;
break;
case 'F': case 'f':
Seed = 0x0F;
break;
}
return Seed;
}
else
{
return 0x01;
// throw "Not a hex value string\n";
}
}
unsigned int packint(const char *str)
{
unsigned int st = 0;
if(strlen(str)!=7&&strlen(str)!=9||*(str)!='#')
{
return strlen(str);
}
else
{
int i = 1;
int k = 0;
int s = 0;
int storage = 0;
switch(strlen(str))
{
case 7:
//string is an RGB string, not an RGBA
//so make the Alpha channel = 0;
k = CharToInt(*(str+i));
k<<=28; //Shift k for 28 digits
s = CharToInt(*(str+i+1)); //get the second byte from the string
s<<=24; //Shift it for 28-4 digits;
k|=s; //k = k or s;
storage|=k; //save the first lower left byte
i = 3;
k = CharToInt(*(str+i));
s = CharToInt(*(str+i+1));
k<<=20;
s<<=16;
k|= s; // k = k or s;
storage|=k; // store = store or k;
i = 5;
k=CharToInt(*(str+i));
s=CharToInt(*(str+i+1));
k<<=12;
s<<=8;
k|=s;
storage|=k;
//FF-fill the last two tetrads
k = 0xFF;
storage|=k;
return storage;
break;
case 9: //nine symbols, ok
k = CharToInt(*(str+i));
k<<=28; //Shift k for 28 digits
s = CharToInt(*(str+i+1)); //get the second byte from the string
s<<=24; //Shift it for 28-4 digits;
k |= s; //k = k or s;
storage|= k; //save the first lower left byte
i = 3;
k = CharToInt(*(str+i));
s = CharToInt(*(str+i+1));
k<<=20;
s<<=16;
k|= s; // k = k or s;
storage|=k; // store = store or k;
i = 5;
k=CharToInt(*(str+i));
s=CharToInt(*(str+i+1));
k<<=12;
s<<=8;
k|=s;
storage|=k;
i=7;
k=CharToInt(*(str+i));
s=CharToInt(*(str+i+1));
k<<=4;
k|=s;
storage|=k;
return storage;
break;
}
}
void main()
{
unsigned int s = packint("#FFAABB");
printf("%X \n",s);
s = packint("#FFAACCDD");
printf("%X \n",s);
getchar();
}
16.01.2011, 19:33
Сват, все тебя ждём))
16.01.2011, 19:44
Rio у тебя функция CharToInt() возвращает при ошибке 0x01, а если ты ей передаш '1', то она вернет также 0x01. так как ты поймеш, что это была не ошибка?
16.01.2011, 19:59
Да никак. Целью не было заставить ее обрабатывать ошибки. А просто работать.