ряд вопросов по FASM
-
Пишу просто графический интерфейс для редактирования конфигурационного файла программы.to infinity and beyond
Ну общий смысл, думаю понятен.
1. Считал данные из файла и сохранил их в удобном виде в памяти.
2. Далее можно брать эти данные по известному адресу в памяти, и либо копировать сами данные, либо указатель на них в соответствующие элементы интерфейса.
3. После редактирования данных, все сохраняем в памяти.
4. После того как пользователь пожелал сохранить данные, пишем их обратно в файл.
Можешь посмотреть ещё MyKey, он тоже позволяет редактировать данные своего ini-файла.
1. Считал данные из файла и сохранил их в удобном виде в памяти.
2. Далее можно брать эти данные по известному адресу в памяти, и либо копировать сами данные, либо указатель на них в соответствующие элементы интерфейса.
3. После редактирования данных, все сохраняем в памяти.
4. После того как пользователь пожелал сохранить данные, пишем их обратно в файл.
Можешь посмотреть ещё MyKey, он тоже позволяет редактировать данные своего ini-файла.
Немог бы показать на примере обращение к данным через jobs?
to infinity and beyond
Так?
FASM
C++
StartJob - обработка всего массива
GetJob - получение i-того элемента
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
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];
}
GetJob - получение i-того элемента
Я с этим куском и пытаюсь разобраться, да ток не выходит ничего. Попробую еще, если снова ничего не выйдет, представлю свои попытки на обозрение.
to infinity and beyond
Не понятно что делает код или как работает?
Выводит какой-то мусор. Скорее всего я где-то ошибся. Исходник "своей программы" прилагаю.
- Attachments
-
-
EXAMPLE.7z (3.12 KiB)Downloaded 233 times
-
to infinity and beyond
В заголовке поменяй это
на это
Code: Select all
dd 0x0 ; зарезервировано
Code: Select all
dd app_path
Совсем уж тупой вопрос. Как изменять координату выводимого ф. 4 текста? Например мне необходимо каждую следующую строку выводить на 10 пикселей ниже.
to infinity and beyond
исходники PCIDEV глянь
Спасибо, помогло.
to infinity and beyond
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. Очень знаете ли "приятно" узнавать что что-то ты можешь, например, править статьи, а что-то могут не все, например, добавлять новые страницы и картинки. Так что пока не будет этот вопрос, никаких телодвижений не будет.
Рекомендую все же смотреть документацию. Если у тебя есть скачанный репозиторий SVN, то в Kolibri_SVN\kernel\trunk\docs есть файлы sysfuncs.txt (английский) и sysfuncr.txt (русский). В них содержится самая актуальная версия документации API ядра, если конечно авторы правок ядра почесались над внесением изменений в документацию, а не забили болт (такое редко, но все же бывает).
Также на wiki есть http://wiki.kolibrios.org/wiki/Ru/api/kernel однако там актуальность ниже чем в репозитории SVN. В частности ф.4 про которую ты спрашивал все еще содержит старую версию.
З.Ы. Чтобы на меня вдруг не погнали сторонники wiki, сразу поясню - я не буду вносить в нее изменения, пока не будет сделана синхронизация аккаунтов с SVN. Очень знаете ли "приятно" узнавать что что-то ты можешь, например, править статьи, а что-то могут не все, например, добавлять новые страницы и картинки. Так что пока не будет этот вопрос, никаких телодвижений не будет.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Снова вопрос, на сей раз по поводу адресации. Ине небходимо ввводить массив строк
mov esi, [Jobs]
add esi, JOB.sizeof*0
В место нуля должен быть номер элемента массивп. Номер хранится в переменной element. Если написать add esi, JOB.sizeof*element программа компилируется но не запускается.
mov esi, [Jobs]
add esi, JOB.sizeof*0
В место нуля должен быть номер элемента массивп. Номер хранится в переменной element. Если написать add esi, JOB.sizeof*element программа компилируется но не запускается.
to infinity and beyond
А размерность ячейки массива какая? Вообще такая конструкция подходит только для одинаковых по длине строк, поскольку в процессе работы не пересчитывается размер.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
В JOB.sizeof хранится размер ячейки. Если я пишу add esi, JOB.sizeof*2 например, то все прекрасно работает.
to infinity and beyond
Who is online
Users browsing this forum: No registered users and 4 guests