DC-SWAT Forum
DreamShell 4.0 Beta 4 - Версия для печати

+- DC-SWAT Forum (http://www.dc-swat.ru/forum)
+-- Форум: DreamShell (/forum-3.html)
+--- Форум: General Discussion (/forum-27.html)
+--- Тема: DreamShell 4.0 Beta 4 (/thread-1370.html)

Страниц: 1 2 3 4 5 6 7 8 9


RE: DreamShell 4.0 Beta 4 - SWAT - 12.01.2011 20:11

И в каком направлении хочешь работать? Графика, система или драйвера?


RE: DreamShell 4.0 Beta 4 - sc_maxim - 13.01.2011 05:03

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


RE: DreamShell 4.0 Beta 4 - SWAT - 13.01.2011 09:30

Ну да. Вообще я бы разделил на 4 основных направления разработки DreamShell вот так:

1) GUI и видео рендеринг
2) Системные функции ядра, драйвера и файловые системы, сеть и в общем все остальное что не вошло в остальные пункты.
3) Консольные команды и модули
4) Разработка приложений

Часто бывает так, что какая нибудь функция в приложении это просто обертка для команды или модуля.
Допустим, ставшая так сказать популярной фишкой SDISO, является командой для консоли, просто назначена на кнопку в приложении файлового менеджера.

Я был бы очень рад, если бы кто то помогал хотя бы с командами/модулями и приложениями. В ядро лезть сразу тяжеловато, у меня там комментов нет вообще Smile для командной разработки его, нужно все привести сначала в порядок.
А вот начать с SDK самое оно (с помощью него можно сделать почти что угодно), можешь хоть сейчас скачать и попробовать написать модуль или команду (это проще всего сделать и проверить). Приложения же немного другая тема, там желательно знание lua, но, можно всю логигу по сути написать и в модуль, который приложение будет загружать через свой xml, а в lua сделать только вызов нужной функции, хотя даже и этого можно не делать Smile В общем я бы помог если что.
Вообще я сделаю конкретно поддержку приложений без lua, а то проблемы там с памятью есть, пока не знаю как решить, но для тех кто хочет попробовать что то написать, вполне хватит возможностей. Это я так, для себя и других желающих писать логику на Си. Сам я уже не буду наверное на lua приложения писать, то что я писал до этого, является просто примером для тех, кто хочет писать приложения без компиляции и прочих заморочек, а просто открыть текстовый редактор и что то сотворить.


RE: DreamShell 4.0 Beta 4 - Rio - 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. Для меня это будут бесценные знания и опыт. Так что это выгодно мне самому, в первую очередь.

Заранее спасибо за ответ.

ЗЫ. Сёдня с утреца пытался написать простенький командный интерпретатор... гы... не заработал, падла))


RE: DreamShell 4.0 Beta 4 - SWAT - 14.01.2011 21:06

(14.01.2011 15:51)Rio писал(а):  На самом деле я Си знаю если не в совершенстве то очень хорошо (ну как я считаю), по крайней мере ООП так точно...

Это предложение меня конечно убило Big Grin В Си нет ООП.

Ладно давай проверим. Напиши функцию которая пакует RGBA из строки типа #AABBCC в одну переменную uint32.

Я как нибудь напишу на сайте инструкцию по установке и настройке окружения.


RE: DreamShell 4.0 Beta 4 - Rio - 14.01.2011 21:20

Но в Си++ есть...
Строка в буквальном смысле строка?
Или уже готовая hex-константа.


RE: DreamShell 4.0 Beta 4 - sc_maxim - 15.01.2011 00:05

Через недельку, как только сдам сессию Smile надо будет что-то для начала простенькое наваять.

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

И можно я свой вариант упаковки цвета покажу ?Smile


RE: DreamShell 4.0 Beta 4 - Rio - 15.01.2011 02:10

Ну вот, отбирают работу)) А я сегодня весь вечер над алгоритмом корпел))


RE: DreamShell 4.0 Beta 4 - SWAT - 15.01.2011 07:09

sc_maxim
Я использую nullDC для проверок, когда можно обойтись без дрима, жаль там SD не эмулится Smile)
Показывай свой вариант.

Rio
Да, строка прям строка Smile
Не волнуйся работы всем хватит Smile


RE: DreamShell 4.0 Beta 4 - sc_maxim - 15.01.2011 17:50

Может и не самый оптимальный вариант но это первое что в голову пришло Smile
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 CharToIntchar 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 t1t2;
    
uint32  Res CONV_OK;
    
char    *inStr+1;
    if( *
inStr == '#' && strleninStr ) > )
    {
        *
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( ++
inStr+);               
    }
    else
    {
        
Res CONV_ERR;
    }
    return  
Res;
}
////////////////////////////////////////////////////////////////////////////////


int mainint argcchar *argv[] )
{
  
uint32 color;
  
char str[10];
  
printf"Enter color: " );
  
scanf"%s", &str );
  if( 
StrToRGBAstr, &color ) == CONV_ERR )
  {
        
printf"Conversion error!\n" );
  }
  else
  {  
        
printf"Converted num: 0x%.8X\n"color ); 
  }
  
system("PAUSE");    
  return 
0;




RE: DreamShell 4.0 Beta 4 - SWAT - 15.01.2011 18:38

Упс - Conversion error! Smile


RE: DreamShell 4.0 Beta 4 - sc_maxim - 15.01.2011 18:56

Что не работает?Sad Я просто делал на строку вида #AABBCCDD а не #AABBCC. Так как строка #AABBCC это RGB, а не RGBA.
Вот код для #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 CharToIntchar 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 t1t2;
    
uint32  Res CONV_OK;
    
char    *inStr+1;
    if( *
inStr == '#' && strleninStr ) > )
    {
        *
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( ++
inStr+);               
    }
    else
    {
        
Res CONV_ERR;
    }
    return  
Res;
}
////////////////////////////////////////////////////////////////////////////////


int mainint argcchar *argv[] )
{
  
uint32 color;
  
char str[10];
  
printf"Enter color: " );
  
scanf"%s", &str );
  if( 
StrToRGBAstr, &color ) == CONV_ERR )
  {
        
printf"Conversion error!\n" );
  }
  else
  {  
        
printf"Converted num: 0x%.6X\n"color ); 
  }
  
system("PAUSE");    
  return 
0;




RE: DreamShell 4.0 Beta 4 - SWAT - 15.01.2011 21:51

Да я понял. Просто это так сказать проверка на гибкость Smile
При отсутствии альфа канала при вводе, можно было бы его автоматом подставить как 100% непрозрачность Wink


RE: DreamShell 4.0 Beta 4 - sc_maxim - 15.01.2011 22:03

Да, можно было универсальней сделать, все зависит от того где это применять придется. А так просто быстро накатал, лишь бы работало Smile

Хотелось бы увидеть как сделал Rio, но он что-то не хочет показывать свой вариант.


RE: DreamShell 4.0 Beta 4 - Rio - 15.01.2011 22:51

Хочет, но не может Wink
Он никогда до этого прежде не паковал байты в 32х разрядные слова и очень тужится вспомнить побитовые операции))


RE: DreamShell 4.0 Beta 4 - SWAT - 16.01.2011 10:35

Вот Rio, если бы ты в реальноти "Си знаю если не в совершенстве то очень хорошо" то тебя ночью разбуди, ты бы запаковал туда все за 2 минуты Smile
Я вот не рискну про свои знания так сказать, потому как учится есть чему всегда, знание синтаксиса это мелочи, его можно познать за неделю. А вот опыт, разные техники и трюки програмирования приходят со временем. Так же не мало важно знать фундаментальное устройство рабочего кода для железа и ассемблер.
Я вот как не возьмусь на Си что то пописать, так обязательно что то новое узнаю и думаю что врятли я вообще когда ни будь все познаю, потому как довольно редко пишу на Си Sad

Давай выкладывай как есть, главное чтобы работало.


RE: DreamShell 4.0 Beta 4 - Rio - 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;
            
CharToInt(*(str+i));
            
k<<=28//Shift k for 28 digits
            
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
            
3;
            
CharToInt(*(str+i));
            
CharToInt(*(str+i+1));
            
k<<=20;
            
s<<=16;
            
k|= s// k = k or s;
            
storage|=k// store = store or k;
            
5;
            
k=CharToInt(*(str+i));
            
s=CharToInt(*(str+i+1));
            
k<<=12;
            
s<<=8;
            
k|=s;
            
storage|=k;
            
//FF-fill the last two tetrads
            
0xFF;
            
storage|=k;
            return 
storage;
            break;
        case 
9//nine symbols, ok
            
CharToInt(*(str+i));
            
k<<=28//Shift k for 28 digits
            
CharToInt(*(str+i+1)); //get the second byte from the string
            
s<<=24;   //Shift it for 28-4 digits;
            
|= s;   //k = k or s;
            
storage|= k//save the first lower left byte
            
3;
            
CharToInt(*(str+i));
            
CharToInt(*(str+i+1));
            
k<<=20;
            
s<<=16;
            
k|= s// k = k or s;
            
storage|=k// store = store or k;
            
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);
    
packint("#FFAACCDD");
    
printf("%X \n",s);
    
getchar();




RE: DreamShell 4.0 Beta 4 - Rio - 16.01.2011 19:33

Сват, все тебя ждём))


RE: DreamShell 4.0 Beta 4 - sc_maxim - 16.01.2011 19:44

Rio у тебя функция CharToInt() возвращает при ошибке 0x01, а если ты ей передаш '1', то она вернет также 0x01. так как ты поймеш, что это была не ошибка?


RE: DreamShell 4.0 Beta 4 - Rio - 16.01.2011 19:59

Да никак. Целью не было заставить ее обрабатывать ошибки. А просто работать.