Page 4 of 10
Posted: Thu Jul 11, 2013 8:11 pm
by punk_joker
Пишу просто графический интерфейс для редактирования конфигурационного файла программы.
Re: ряд вопросов по FASM
Posted: Thu Jul 11, 2013 8:36 pm
by Asper
Ну общий смысл, думаю понятен.
1. Считал данные из файла и сохранил их в удобном виде в памяти.
2. Далее можно брать эти данные по известному адресу в памяти, и либо копировать сами данные, либо указатель на них в соответствующие элементы интерфейса.
3. После редактирования данных, все сохраняем в памяти.
4. После того как пользователь пожелал сохранить данные, пишем их обратно в файл.
Можешь посмотреть ещё
MyKey, он тоже позволяет редактировать данные своего
ini-файла.
Posted: Thu Jul 11, 2013 9:58 pm
by punk_joker
Немог бы показать на примере обращение к данным через jobs?
Re: ряд вопросов по FASM
Posted: Fri Jul 12, 2013 5:36 pm
by Asper
Так?
FASM
Spoiler:
Code: Select all
PATH_MAX_CHARS equ 255
struc JOB
{
.done db 0
.timeH db 0
.timeM db 0
.app_path db PATH_MAX_CHARS dup(0)
.app_param db PATH_MAX_CHARS dup(0)
.sizeof:
}
virtual at 0
JOB JOB
end virtual
StartJob:
mcall 3 ; get time
xor ebx, ebx
mov bl, al
push eax
stdcall BCDToInt, ebx
mov dh, al
pop eax
mov bl, ah
stdcall BCDToInt, ebx
mov dl, al
movzx ecx, byte [jobs_num]
mov esi, [Jobs]
.try_next_job:
cmp [esi+JOB.done], 0
jne .skip
cmp dh, [esi+JOB.timeH]
jne .skip
cmp dl, [esi+JOB.timeM]
jne .skip
lea eax, [esi+JOB.app_path]
lea ebx, [esi+JOB.app_param]
stdcall RunProgram, eax, ebx
stdcall RunProgram, aNotify, eax
mov [esi+JOB.done], 1
inc [done_jobs_num]
mov al, [jobs_num]
cmp al, [done_jobs_num]
jle close_app
.skip:
add esi, JOB.sizeof
dec ecx
jnz .try_next_job
ret
; in: eax = job index
GetJob:
cmp eax, [jobs_num]
jg .ret0
cmp eax, 0
jl .ret0
imul eax, JOB.sizeof
mov eax, [Jobs+eax]
ret
.ret0:
xor eax, eax
ret
;data
jobs_num db 0 ; maximum 256 jobs
done_jobs_num db 0 ; maximum 256 jobs
Jobs dd 0 ; Pointer to memory location of jobs list
aNotify db '/rd/1/@notify',0
I_END: ; End of application code and data marker
app_path rb PATH_MAX_CHARS
ini_path rb PATH_MAX_CHARS
C++
Spoiler:
Code: Select all
#define PATH_MAX_CHARS 255
typedef struct job
{
unsigned char done;
unsigned char timeH;
unsigned char timeM;
unsigned char app_path[PATH_MAX_CHARS];
unsigned char app_param[PATH_MAX_CHARS];
} JOB;
//data
int jobs_num = 255;
int done_jobs_num = 0;
JOB *Jobs = new JOB[jobs_num];
char *aNotify = new char[14];
strcpy(aNotify, "/rd/1/@notify\0");
void StartJob()
{
Time dx = BCDToInt(getBCDTime());
for (int i=0; i<jobs_num; i++){
if (Jobs[i].done == 0)
continue;
if (Jobs[i].timeH !== dx.h)
continue;
if (Jobs[i].timeM !== dx.m)
continue;
char *app_path = Jobs[i].app_path;
char *app_param = Jobs[i].app_param;
RunProgram(app_path, app_param);
RunProgram(aNotify, app_path);
Jobs[i].done = 1;
done_jobs_num++;
if (jobs_num <= done_jobs_num)
CloseApp();
}
}
JOB GetJob(int i){
if (i > jobs_num || i < 0)
return NULL;
return Jobs[i];
}
StartJob - обработка всего массива
GetJob - получение i-того элемента
Posted: Fri Jul 12, 2013 9:05 pm
by punk_joker
Я с этим куском и пытаюсь разобраться, да ток не выходит ничего. Попробую еще, если снова ничего не выйдет, представлю свои попытки на обозрение.
Re: ряд вопросов по FASM
Posted: Sun Jul 14, 2013 6:51 pm
by Asper
Не понятно что делает код или как работает?
Re: ряд вопросов по FASM
Posted: Sun Jul 14, 2013 8:16 pm
by punk_joker
Выводит какой-то мусор. Скорее всего я где-то ошибся. Исходник "своей программы" прилагаю.
Re: ряд вопросов по FASM
Posted: Sun Jul 14, 2013 9:58 pm
by Asper
В заголовке поменяй это
на это
Posted: Tue Jul 16, 2013 9:20 pm
by punk_joker
Совсем уж тупой вопрос. Как изменять координату выводимого ф. 4 текста? Например мне необходимо каждую следующую строку выводить на 10 пикселей ниже.
Re: ряд вопросов по FASM
Posted: Tue Jul 16, 2013 9:48 pm
by Wildwest
исходники PCIDEV глянь
Posted: Tue Jul 16, 2013 10:35 pm
by punk_joker
Спасибо, помогло.
Re: ряд вопросов по FASM
Posted: Wed Jul 17, 2013 7:24 am
by Mario_r4
punk_joker
Рекомендую все же смотреть документацию. Если у тебя есть скачанный репозиторий SVN, то в
Kolibri_SVN\kernel\trunk\docs есть файлы
sysfuncs.txt (английский) и
sysfuncr.txt (русский). В них содержится самая актуальная версия документации API ядра, если конечно авторы правок ядра почесались над внесением изменений в документацию, а не забили болт (такое редко, но все же бывает).
Также на wiki есть
http://wiki.kolibrios.org/wiki/Ru/api/kernel однако там актуальность ниже чем в репозитории SVN. В частности ф.4 про которую ты спрашивал все еще содержит старую версию.
З.Ы. Чтобы на меня вдруг не погнали сторонники wiki, сразу поясню - я не буду вносить в нее изменения, пока не будет сделана синхронизация аккаунтов с SVN. Очень знаете ли "приятно" узнавать что что-то ты можешь, например, править статьи, а что-то могут не все, например, добавлять новые страницы и картинки. Так что пока не будет этот вопрос, никаких телодвижений не будет.
Posted: Wed Jul 17, 2013 11:27 pm
by punk_joker
Снова вопрос, на сей раз по поводу адресации. Ине небходимо ввводить массив строк
mov esi, [Jobs]
add esi, JOB.sizeof*0
В место нуля должен быть номер элемента массивп. Номер хранится в переменной element. Если написать add esi, JOB.sizeof*element программа компилируется но не запускается.
Re: ряд вопросов по FASM
Posted: Wed Jul 17, 2013 11:37 pm
by Mario_r4
А размерность ячейки массива какая? Вообще такая конструкция подходит только для одинаковых по длине строк, поскольку в процессе работы не пересчитывается размер.
Posted: Wed Jul 17, 2013 11:44 pm
by punk_joker
В JOB.sizeof хранится размер ячейки. Если я пишу add esi, JOB.sizeof*2 например, то все прекрасно работает.