Помогите новичку

Applications development, KoOS API questions
  • punk_joker wrote:Кроме как при помощи ф70.5 можно проверить существование файла? А то не хочется как то, выделять память под всю структуру.
    Если включить воображение:
    Spoiler:ф.70.1
    * +12 = +0xC: dword: сколько байт читать, 1 байт.
    З.Ы. Только для файлов, не для директорий.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Mario_r4 wrote:ф.70.1
    * +12 = +0xC: dword: сколько байт читать, 1 байт.
    З.Ы. Только для файлов, не для директорий.
    Дело в том, что мне необходимы вариант как для файлов, так и для папок.
    to infinity and beyond
  • Mario_r4 wrote:Если включить воображение:
    Это суровый метод апостола Фомы.
    punk_joker wrote:А то не хочется как то, выделять память под всю структуру
    Структура маленькая, выделяй место в стеке и не мучайся ненужными сомнениями.
  • Mario_r4 wrote:ф.70.1
    * +12 = +0xC: dword: сколько байт читать, 1 байт.
    З.Ы. Только для файлов, не для директорий.
    Для файлов ф.70.0 же.
    punk_joker wrote:не хочется как то, выделять память под всю структуру.
    Тебе жалко 40 байт?
    В зависимости от задачи можно использовать всегда один и тот же буфер, не выделяя каждый раз новый. Но в этом случае в многопоточном приложении нужно следить, чтобы с этим буфером не пытались работать одновременно несколько потоков — использовать средства синхронизации.
    punk_joker wrote:мне необходимы вариант как для файлов, так и для папок.
    Поэтому ф70.5.
  • Было в одном из файлов SHELL, поиск первого вхождения символа

    Code: Select all

    char* strchr(const char* string, int c)
    {
    	while (*string)
    	{
    		if (*string==c)
    			return (char*)string;
    		string++;
    	}	
    	return (char*)0;
    }
    Мне понадобилась похожая функция, только поиск не первого, а последнего вхождения символа. Набыдлогодил по быстрому, основываясь на предыдущем примере:

    Code: Select all

    char* strrchr(const char* string, int c)
    {
    	int last_found;
    	while (*string)
    	{
    		if (*string==c)
    		{
    			last_found = string;
    		}
    		string++;
    	}	
    	return (char*)last_found;
    }
    Рабатает, но выдаёт ворнинги:

    Code: Select all

    system/string.c: In function 'strrchr':
    system/string.c:133:15: warning: assignment makes integer from pointer without a
     cast [enabled by default]
        last_found = string;
    Почему и как исправить?
    Из хаоса в космос
  • вероятно надо:
    char* last_found;
    ...
    last_found = (char*)string;
    ...
    return last_found;
  • 0CodErr wrote:Для файлов ф.70.0 же.
    Черт побери! А ты прав! :)
    Вот что бывает, когда пытаешься и на работе работать и тут подрабатывать.
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • Serge wrote:Это суровый метод апостола Фомы.
    Ну, мы тут все в чем то монахи, блин. В то время как космические корабли бороздят просторы больших театров...
    Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
  • lev wrote:вероятно надо:
    char* last_found;
    ...
    last_found = (char*)string;
    ...
    return last_found;
    char* - это указатель? В С-- указатель я использую dword, возможно это и неправильно.
    (char*) - что значит эта конструкция?
    return last_found; - почему в конче просто last_found?
    Из хаоса в космос
  • (char*) var = преобразовать var к (char *), т.е. к указателю на char.
  • Если объявить last_found как char *, то преобразование типов не нужно будет.
    Т.е.

    char* last_found;
    ...
    last_found = string;
    ...
    return last_found;
  • Insolor wrote:Если объявить last_found как char *, то преобразование типов не нужно будет.
    Т.е.

    char* last_found;
    ...
    last_found = string;
    ...
    return last_found;
    Оказывается нужно, т.к. const char* и char*
    Из хаоса в космос
  • Leency wrote:
    Insolor wrote:Если объявить last_found как char *, то преобразование типов не нужно будет.
    Т.е.

    char* last_found;
    ...
    last_found = string;
    ...
    return last_found;
    Оказывается нужно, т.к. const char* и char*
    Ок, только не "т.к. const char* и char*" (это ни о чем мне не говорит), а "warning: assignment discards qualifiers from pointer target type". Так что да, приведение все-таки нужно.
  • Указатели на указатели - многочисленное перенаправление

    Такой вопрос. У меня, к примеру, в переменной var лежит число 5. Я сделал указатель на var, _var, а потом указатель на _var, __var. Как мне быстро узнать значение var, используя __var? Приходится использовать такой код:

    Code: Select all

    mov   eax, [__var]
    dpd    [eax]
    
    А хотелось бы что нибудь вроде

    Code: Select all

    dpd    [ [_var] ]
    
    Для чего мне это нужно? Для куч.

    Code: Select all

        use32
        org     0x0
    
    ;---------------------------------------------------------------------
    
        db	    'MENUET01'
        dd	    0x01, __START, __END, 0x1000, 0x1000, 0x0, 0x0
    
    ;---------------------------------------------------------------------
    
        include 'macros.inc'
        include 'debug.inc'
    
    ;=====================================================================
    __START:
    ;=====================================================================
    
    init_heap:
        mcall   68, 11
        cmp     eax, 0
        je	    exit
    
        mov     ecx, 4
        add     ecx, 4
        add     ecx, 1024
        mcall   68,  12
    
        mov     [buff.x], eax
        add     eax, 4
        mov     [buff.y], eax
    
    ;---------------------------------------------------------------------
    
    main:
        mov     eax, [buff.x]
        mov     [eax], 10
        add     eax, 4
        mov     [eax], 20
    
    ;   ...     ...
    
    ;---------------------------------------------------------------------
    
    exit:
        mcall   68, 13, [buff]
        mcall   -1
    
    ;---------------------------------------------------------------------
    
    buff:
    .x  rd      0
    .y  rd      0
    
    ;=====================================================================
    __END:
    ;=====================================================================
    
    Есть ли способ?
    Last edited by e-andrew on Thu Oct 10, 2013 4:31 pm, edited 1 time in total.
  • Who is online

    Users browsing this forum: No registered users and 6 guests