forked from KolibriOS/kolibrios
optimize pipes.raw
menu: new menu component git-svn-id: svn://kolibrios.org@7773 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
14f3457eb8
commit
2289d86d71
@ -227,6 +227,14 @@
|
||||
DrawPopupShadow(x,y,w,h-1,skinned);
|
||||
}
|
||||
|
||||
:void Draw3DPopup(dword x,y,w,h)
|
||||
{
|
||||
DrawRectangle3D(x,y,w,h, system.color.work_dark, system.color.work_graph);
|
||||
DrawBar(x+1,y+1,w-1,1,system.color.work_light);
|
||||
DrawBar(x+1,y+2,1,h-2,system.color.work_light);
|
||||
DrawPopupShadow(x,y,w,h-1,0);
|
||||
}
|
||||
|
||||
:void DrawPopupShadow(dword x,y,w,h,skinned)
|
||||
{
|
||||
PutShadow(w+x+1,y,1,h+2,skinned,2);
|
||||
@ -291,6 +299,16 @@
|
||||
PutPixel(x+w+1, y+h, dark);
|
||||
}
|
||||
|
||||
:bool is_the_skin_dark()
|
||||
{
|
||||
dword bg_col = system.color.work;
|
||||
if (GrayScaleImage(#bg_col,1,1)<65) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
//this function increase falue and return it
|
||||
//useful for list of controls which goes one after one
|
||||
:struct incn
|
||||
|
@ -216,6 +216,28 @@
|
||||
return NULL;
|
||||
}
|
||||
|
||||
:void get_path_name(dword BUF,PATH)
|
||||
{
|
||||
dword beg = PATH;
|
||||
dword pos = PATH;
|
||||
dword sav = PATH;
|
||||
dword i;
|
||||
while(DSBYTE[pos])
|
||||
{
|
||||
if(DSBYTE[pos]=='/')sav = pos;
|
||||
pos++;
|
||||
}
|
||||
i = sav-beg;
|
||||
while(i)
|
||||
{
|
||||
DSBYTE[BUF] = DSBYTE[beg];
|
||||
beg++;
|
||||
BUF++;
|
||||
i--;
|
||||
}
|
||||
DSBYTE[BUF] = 0;
|
||||
}
|
||||
|
||||
:struct __PATH
|
||||
{
|
||||
dword file(...);
|
||||
@ -225,14 +247,18 @@
|
||||
:char __PATH_NEW[4096];
|
||||
:dword __PATH::path(dword PATH)
|
||||
{
|
||||
char self_dir[4096];
|
||||
dword pos;
|
||||
if(!PATH) return self.dir;
|
||||
|
||||
get_path_name(#self_dir,I_Path);
|
||||
|
||||
if(!PATH) return #self_dir;
|
||||
pos = PATH;
|
||||
if(DSBYTE[pos]=='/') || (!strncmp(PATH,"./",2))
|
||||
{
|
||||
return PATH;
|
||||
}
|
||||
strcpy(#__PATH_NEW, self.dir);
|
||||
strcpy(#__PATH_NEW, #self_dir);
|
||||
chrcat(#__PATH_NEW, '/');
|
||||
strcpy(#__PATH_NEW, PATH);
|
||||
return #__PATH_NEW;
|
||||
|
91
programs/cmm/lib/ipc.h
Normal file
91
programs/cmm/lib/ipc.h
Normal file
@ -0,0 +1,91 @@
|
||||
#ifndef INCLUDE_IPC_H
|
||||
#define INCLUDE_IPC_H
|
||||
|
||||
/*
|
||||
|
||||
======================================================================
|
||||
=========== Функция 60 - Inter Process Communication (IPC). ==========
|
||||
======================================================================
|
||||
IPC применяется для посылок сообщений от одного процесса/потока
|
||||
другому. При этом следует предварительно договориться о том, как
|
||||
интерпретировать конкретное сообщение.
|
||||
|
||||
-------- Подфункция 1 - установить область для получения IPC ---------
|
||||
Вызывается процессом-приёмником.
|
||||
Параметры:
|
||||
* eax = 60 - номер функции
|
||||
* ebx = 1 - номер подфункции
|
||||
* ecx = указатель на буфер
|
||||
* edx = размер буфера
|
||||
Возвращаемое значение:
|
||||
* eax = 0 - всегда успешно
|
||||
Формат IPC-буфера:
|
||||
* +0: dword: если здесь не 0, то буфер считается заблокированным;
|
||||
блокируйте/разблокируйте буфер, когда вы с ним активно работаете
|
||||
и вам надо, чтобы извне не изменялись данные буфера
|
||||
(не поступали новые сообщения)
|
||||
* +4: dword: занято места в буфере (в байтах)
|
||||
* +8: первое сообщение
|
||||
* +8+n: второе сообщение
|
||||
* ...
|
||||
Формат сообщения:
|
||||
* +0: dword: PID процесса/потока, пославшего сообщение
|
||||
* +4: dword: длина сообщения (не считая этот заголовок)
|
||||
* +8: n*byte: данные сообщения
|
||||
|
||||
--------------- Подфункция 2 - послать сообщение IPC. ----------------
|
||||
Вызывается процессом-инициатором.
|
||||
Параметры:
|
||||
* eax = 60 - номер функции
|
||||
* ebx = 2 - номер подфункции
|
||||
* ecx = PID приёмника
|
||||
* edx = указатель на данные сообщения
|
||||
* esi = длина сообщения (в байтах)
|
||||
Возвращаемое значение:
|
||||
* eax = 0 - успешно
|
||||
* eax = 1 - приёмник не определил буфер для IPC-сообщений
|
||||
(может быть, ещё не успел, а может быть, это не тот поток,
|
||||
который нужен)
|
||||
* eax = 2 - приёмник заблокировал IPC-буфер;
|
||||
попробуйте немного подождать
|
||||
* eax = 3 - переполнение IPC-буфера приёмника
|
||||
* eax = 4 - процесса/потока с таким PID не существует
|
||||
Замечания:
|
||||
* Система сразу после записи IPC-сообщения в буфер посылает
|
||||
потоку-приёмнику событие с кодом 7 (см. коды событий).
|
||||
|
||||
---------------------- Константы для регистров: ----------------------
|
||||
eax - SF_IPC (60)
|
||||
ebx - SSF_SET_AREA (1), SSF_SEND_MESSAGE (2)
|
||||
|
||||
*/
|
||||
|
||||
inline fastcall void IpcSetArea(ECX, EDX)
|
||||
{
|
||||
$eax, 60
|
||||
$ebx, 1
|
||||
// ecx = указатель на буфер
|
||||
// edx = размер буфера
|
||||
$int 64
|
||||
// eax = 0 - всегда успешно
|
||||
}
|
||||
|
||||
inline fastcall int SendIpcMessage(ECX, EDX, ESI)
|
||||
{
|
||||
$eax, 60
|
||||
$ebx, 2
|
||||
// ecx = PID приёмника
|
||||
// edx = указатель на данные сообщения
|
||||
// esi = длина сообщения (в байтах)
|
||||
$int 64
|
||||
// eax = 0 - успешно
|
||||
// eax = 1 - приёмник не определил буфер для IPC-сообщений
|
||||
// (может быть, ещё не успел, а может быть, это
|
||||
// не тот поток, который нужен)
|
||||
// eax = 2 - приёмник заблокировал IPC-буфер;
|
||||
// попробуйте немного подождать
|
||||
// eax = 3 - переполнение IPC-буфера приёмника
|
||||
// eax = 4 - процесса/потока с таким PID не существует
|
||||
}
|
||||
|
||||
#endif
|
@ -661,67 +661,17 @@ inline fastcall dword GetStartTime()
|
||||
DrawBar(x+37,y+10,2,2,color);
|
||||
}
|
||||
|
||||
:void __path_name__(dword BUF,PATH)
|
||||
{
|
||||
dword beg = PATH;
|
||||
dword pos = PATH;
|
||||
dword sav = PATH;
|
||||
dword i;
|
||||
while(DSBYTE[pos])
|
||||
{
|
||||
if(DSBYTE[pos]=='/')sav = pos;
|
||||
pos++;
|
||||
}
|
||||
i = sav-beg;
|
||||
while(i)
|
||||
{
|
||||
DSBYTE[BUF] = DSBYTE[beg];
|
||||
beg++;
|
||||
BUF++;
|
||||
i--;
|
||||
}
|
||||
/*while(DSBYTE[beg])
|
||||
{
|
||||
DSBYTE[BUF1] = DSBYTE[beg];
|
||||
beg++;
|
||||
BUF1++;
|
||||
}*/
|
||||
//DSBYTE[BUF1] = 0;
|
||||
DSBYTE[BUF] = 0;
|
||||
}
|
||||
char __BUF_DIR__[4096];
|
||||
:struct SELF
|
||||
{
|
||||
dword dir;
|
||||
dword file;
|
||||
dword path;
|
||||
} self;
|
||||
|
||||
dword __generator; // random number generator - äëÿ ãåíåðàöèè ñëó÷àéíûõ ÷èñåë
|
||||
|
||||
:dword program_path_length;
|
||||
dword __generator; // random number generator init
|
||||
|
||||
//The initialization of the initial data before running
|
||||
void ______INIT______()
|
||||
{
|
||||
//if (program_path[0]!='/') I_Path++;
|
||||
|
||||
self.dir = #__BUF_DIR__;
|
||||
self.file = 0;
|
||||
self.path = I_Path;
|
||||
__path_name__(#__BUF_DIR__,I_Path);
|
||||
|
||||
skin_height = GetSkinHeight();
|
||||
screen.width = GetScreenWidth()+1;
|
||||
screen.height = GetScreenHeight()+1;
|
||||
|
||||
__generator = GetStartTime();
|
||||
|
||||
__generator = GetStartTime();
|
||||
mem_init();
|
||||
|
||||
|
||||
main();
|
||||
ExitProcess();
|
||||
}
|
||||
______STOP______:
|
||||
#endif
|
||||
@ -732,4 +682,8 @@ ______STOP______:
|
||||
|
||||
#ifndef INCLUDE_DEBUG_H
|
||||
#include "../lib/debug.h"
|
||||
#endif
|
||||
|
||||
#ifndef INCLUDE_IPC_H
|
||||
#include "../lib/ipc.h"
|
||||
#endif
|
@ -98,7 +98,33 @@ L2:
|
||||
}
|
||||
}
|
||||
|
||||
inline fastcall dword memopen(ECX, EDX, ESI)
|
||||
{
|
||||
$push ebx
|
||||
$mov eax, 68
|
||||
$mov ebx, 22
|
||||
// ecx = area name, 31 symbols max
|
||||
// edx = area size for SHM_CREATE SHM_OPEN_ALWAYS
|
||||
// esi = flags, see the list below:
|
||||
#define SHM_OPEN 0x00
|
||||
#define SHM_OPEN_ALWAYS 0x04
|
||||
#define SHM_CREATE 0x08
|
||||
#define SHM_READ 0x00
|
||||
#define SHM_WRITE 0x01
|
||||
$int 0x40
|
||||
$pop ebx
|
||||
// eax, edx - please check system documentation
|
||||
}
|
||||
|
||||
inline fastcall dword memclose(ECX)
|
||||
{
|
||||
$push ebx
|
||||
$mov eax, 68
|
||||
$mov ebx, 23
|
||||
$int 0x40
|
||||
$pop ebx
|
||||
// eax destroyed
|
||||
}
|
||||
|
||||
#define mem_Alloc malloc
|
||||
#define mem_ReAlloc realloc
|
||||
|
6
programs/cmm/menu/Tupfile.lua
Normal file
6
programs/cmm/menu/Tupfile.lua
Normal file
@ -0,0 +1,6 @@
|
||||
if tup.getconfig("NO_CMM") ~= "" then return end
|
||||
if tup.getconfig("LANG") == "ru"
|
||||
then C_LANG = "LANG_RUS"
|
||||
else C_LANG = "LANG_ENG" -- this includes default case without config
|
||||
end
|
||||
tup.rule("menu.c", "c-- /D=AUTOBUILD /D=$(C_LANG) %f" .. tup.getconfig("KPACK_CMD"), "menu.com")
|
5
programs/cmm/menu/build.bat
Normal file
5
programs/cmm/menu/build.bat
Normal file
@ -0,0 +1,5 @@
|
||||
@del menu
|
||||
@c-- menu.c
|
||||
@rename menu.com menu
|
||||
@del warning.txt
|
||||
@pause
|
180
programs/cmm/menu/menu.c
Normal file
180
programs/cmm/menu/menu.c
Normal file
@ -0,0 +1,180 @@
|
||||
#define MEMSIZE 4096*40
|
||||
|
||||
#include "../lib/io.h"
|
||||
#include "../lib/gui.h"
|
||||
#include "../lib/collection.h"
|
||||
#include "../lib/list_box.h"
|
||||
#include "../lib/fs.h"
|
||||
|
||||
#define ITEM_H 19
|
||||
|
||||
llist menu1;
|
||||
collection names;
|
||||
collection hotkeys;
|
||||
dword shared_mem;
|
||||
|
||||
int win_x, win_y;
|
||||
|
||||
int max_name_len;
|
||||
int max_hotkey_len;
|
||||
|
||||
int selected = 0;
|
||||
|
||||
dword cur_param = #param;
|
||||
int GetNextParam()
|
||||
{
|
||||
int result;
|
||||
dword next_param = strchr(cur_param, ' ');
|
||||
ESBYTE[next_param] = '\0';
|
||||
result = atoi(cur_param);
|
||||
cur_param = next_param+1;
|
||||
return result;
|
||||
}
|
||||
|
||||
void GetWindowPosition()
|
||||
{
|
||||
int position;
|
||||
shared_mem = GetNextParam();
|
||||
debugval("shared_mem", ESDWORD[shared_mem]);
|
||||
win_x = GetNextParam();
|
||||
win_y = GetNextParam();
|
||||
selected = GetNextParam();
|
||||
position = GetNextParam();
|
||||
if (position==2) win_x -= menu1.w;
|
||||
if (position==3) {
|
||||
win_x -= menu1.w;
|
||||
win_y -= menu1.h;
|
||||
}
|
||||
if (position==4) win_y -= menu1.h;
|
||||
}
|
||||
|
||||
void GetMenuItems(dword current_name)
|
||||
{
|
||||
dword next_name = strchr(current_name, '\n');
|
||||
dword hotkey = strchr(current_name, '|');
|
||||
|
||||
ESBYTE[next_name] = '\0';
|
||||
|
||||
if (hotkey) && (hotkey < next_name) {
|
||||
ESBYTE[hotkey] = '\0';
|
||||
} else {
|
||||
if (hotkey) && (!next_name) {
|
||||
ESBYTE[hotkey] = '\0';
|
||||
} else {
|
||||
hotkey = " ";
|
||||
}
|
||||
}
|
||||
|
||||
hotkeys.add(hotkey+1);
|
||||
names.add(current_name);
|
||||
|
||||
if (next_name) GetMenuItems(next_name+2);
|
||||
}
|
||||
|
||||
void main()
|
||||
{
|
||||
proc_info Form;
|
||||
|
||||
GetMenuItems(strchr(#param, '\n') + 2);
|
||||
max_name_len = strlen(names.get(0)) * 6;
|
||||
max_hotkey_len = strlen(hotkeys.get(0)) * 6;
|
||||
|
||||
//selected = ESDWORD[shared_mem];
|
||||
|
||||
menu1.count = names.count;
|
||||
menu1.SetFont(6, 9, 0x80);
|
||||
menu1.SetSizes(2,2, max_name_len + max_hotkey_len + 23, menu1.count*ITEM_H, ITEM_H);
|
||||
menu1.cur_y = -1;
|
||||
|
||||
GetWindowPosition();
|
||||
|
||||
SetEventMask(EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE);
|
||||
loop() switch(WaitEvent())
|
||||
{
|
||||
case evMouse:
|
||||
GetProcessInfo(#Form, SelfInfo);
|
||||
if (!CheckActiveProcess(Form.ID)) exit();
|
||||
mouse.get();
|
||||
if (menu1.ProcessMouse(mouse.x, mouse.y)) draw_list();
|
||||
if (mouse.lkm)&&(mouse.up) click();
|
||||
break;
|
||||
|
||||
case evKey:
|
||||
GetKeys();
|
||||
ProcessKeys();
|
||||
break;
|
||||
|
||||
case evReDraw:
|
||||
DefineAndDrawWindow(win_x, win_y, menu1.w+4, menu1.h+3, 0x01, 0, 0, 0x01fffFFF);
|
||||
system.color.get();
|
||||
Draw3DPopup(0,0,menu1.w+2,menu1.h+2);
|
||||
draw_list();
|
||||
}
|
||||
}
|
||||
|
||||
void ProcessKeys()
|
||||
{
|
||||
switch(key_scancode)
|
||||
{
|
||||
case SCAN_CODE_ESC:
|
||||
exit();
|
||||
|
||||
case SCAN_CODE_ENTER:
|
||||
click();
|
||||
|
||||
case SCAN_CODE_DOWN:
|
||||
if (!menu1.KeyDown()) menu1.KeyHome();
|
||||
draw_list();
|
||||
break;
|
||||
|
||||
case SCAN_CODE_UP:
|
||||
if (!menu1.KeyUp()) menu1.KeyEnd();
|
||||
draw_list();
|
||||
break;
|
||||
|
||||
default:
|
||||
if (menu1.ProcessKey(key_scancode)) draw_list();
|
||||
}
|
||||
}
|
||||
|
||||
void draw_list()
|
||||
{
|
||||
int i, item_y;
|
||||
|
||||
dword active_background_color = MixColors(system.color.work_button, system.color.work,230);
|
||||
dword active_top_border_color = MixColors(system.color.work_graph, system.color.work_button,240);
|
||||
dword inactive_text_shadow_color = MixColors(system.color.work,0xFFFfff,150);
|
||||
dword text_color;
|
||||
bool skin_dark = is_the_skin_dark();
|
||||
|
||||
for (i=0; i<menu1.count; i++;)
|
||||
{
|
||||
item_y = i*ITEM_H+menu1.y;
|
||||
if (i==menu1.cur_y) {
|
||||
text_color = system.color.work_button_text;
|
||||
DrawBar(menu1.x, item_y+1, menu1.w, ITEM_H-2, active_background_color);
|
||||
DrawBar(menu1.x, item_y, menu1.w, 1, active_top_border_color);
|
||||
DrawBar(menu1.x, item_y+ITEM_H-1, menu1.w, 1, system.color.work_light);
|
||||
WriteText(13 + max_name_len, item_y + menu1.text_y, 0x80, text_color, hotkeys.get(i));
|
||||
} else {
|
||||
text_color = system.color.work_text;
|
||||
DrawBar(menu1.x, item_y, menu1.w, ITEM_H, system.color.work);
|
||||
if (!skin_dark) WriteText(13+1, item_y + menu1.text_y +1, 0x80, inactive_text_shadow_color, names.get(i));
|
||||
WriteText(13 + max_name_len, item_y + menu1.text_y, 0x80, system.color.work_graph, hotkeys.get(i));
|
||||
}
|
||||
WriteText(13, item_y + menu1.text_y, 0x80, text_color, names.get(i));
|
||||
}
|
||||
if (selected) WriteText(5, selected*ITEM_H + menu1.y + menu1.text_y, 0x80, 0xEE0000, "\x10");
|
||||
}
|
||||
|
||||
void click()
|
||||
{
|
||||
ESDWORD[shared_mem] = menu1.cur_y + 1;
|
||||
ExitProcess();
|
||||
}
|
||||
|
||||
void exit()
|
||||
{
|
||||
ESDWORD[shared_mem] = 0;
|
||||
ExitProcess();
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
;
|
||||
; pipes kolibri
|
||||
; v1.41
|
||||
; v1.42
|
||||
; 2006 by Mario Birkner
|
||||
;
|
||||
; l.mod. 29.01.19
|
||||
@ -274,11 +274,8 @@ pusha
|
||||
mov ecx,dword [speed]
|
||||
add byte [esi],10
|
||||
.down:
|
||||
mov eax,5
|
||||
mov ebx,2
|
||||
mcall
|
||||
mov eax,11
|
||||
mcall
|
||||
mcall 5, 2
|
||||
mcall 11
|
||||
cmp eax,1
|
||||
jne .nored
|
||||
call draw_window
|
||||
@ -299,9 +296,7 @@ pusha
|
||||
cmp [stat],1
|
||||
jne .loose
|
||||
call draw_message
|
||||
mov eax,5
|
||||
mov ebx,500
|
||||
mcall
|
||||
mcall 5, 500
|
||||
mov [stat],0
|
||||
inc [level]
|
||||
cmp [speed],6 ;waterflowdelay < 6 ?
|
||||
@ -321,14 +316,10 @@ ret
|
||||
|
||||
show_score:
|
||||
pusha
|
||||
mov eax,47
|
||||
mov ebx,0x20000
|
||||
mov ecx,[time]
|
||||
mov edx,60*65536+395
|
||||
mov esi,fg2color
|
||||
mov edi,bgcolor
|
||||
or esi,0x50000000
|
||||
mcall
|
||||
mcall 47, 0x20000, [time], <60,395>
|
||||
mov ebx,0x50000
|
||||
mov ecx,[score]
|
||||
if lang eq et
|
||||
@ -407,23 +398,23 @@ pusha
|
||||
cmp ebx,0
|
||||
jz .nowcolor
|
||||
mov ebx,eax
|
||||
cmp ebx,0x00B0B5B0
|
||||
cmp ebx,0x00B0B4B0
|
||||
jne .nog1
|
||||
jmp .wcolor
|
||||
.nog1:
|
||||
cmp ebx,0x00A0A5A0
|
||||
cmp ebx,0x00A0A4A0
|
||||
jne .nog2
|
||||
jmp .wcolor
|
||||
.nog2:
|
||||
cmp ebx,0x00909590
|
||||
cmp ebx,0x00909490
|
||||
jne .nog3
|
||||
jmp .wcolor
|
||||
.nog3:
|
||||
cmp ebx,0x00808580
|
||||
cmp ebx,0x00808480
|
||||
jne .nog4
|
||||
jmp .wcolor
|
||||
.nog4:
|
||||
cmp ebx,0x00707570
|
||||
cmp ebx,0x00707470
|
||||
jne .nowcolor
|
||||
jmp .wcolor
|
||||
.wcolor:
|
||||
@ -453,22 +444,17 @@ pusha
|
||||
|
||||
cmp [stat],3
|
||||
jne .stat1
|
||||
mov eax,4
|
||||
mov ebx,159 shl 16 +202
|
||||
mov edx,lbl_new_game
|
||||
|
||||
mov ecx,btcolor
|
||||
or ecx,0xB0000000
|
||||
mcall
|
||||
mcall 4, <159,202>,,lbl_new_game
|
||||
jmp .nomessage
|
||||
|
||||
.stat1:
|
||||
cmp [stat],1
|
||||
je .winmessage
|
||||
mov eax,4
|
||||
mov ebx,170 shl 16 +196
|
||||
mov edx,lbl_gameover
|
||||
mov ecx,btcolor OR 0xB0000000
|
||||
mcall
|
||||
mcall 4, <170,196>, , lbl_gameover
|
||||
add ebx,8 shl 16 +17
|
||||
mov edx,lbl_yscore
|
||||
mcall
|
||||
@ -481,12 +467,9 @@ pusha
|
||||
mcall
|
||||
jmp .nomessage
|
||||
.winmessage:
|
||||
mov eax,4
|
||||
mov ebx,124 shl 16 +194
|
||||
mov edx,lbl_win
|
||||
mov ecx,btcolor
|
||||
or ecx,0xB0000000
|
||||
mcall
|
||||
mcall 4, <124,194>, , lbl_win
|
||||
add ebx,17
|
||||
add edx,lbl_win2-lbl_win
|
||||
mcall
|
||||
@ -515,10 +498,7 @@ pusha
|
||||
pop edx
|
||||
push ebx
|
||||
push ecx
|
||||
mov eax,7
|
||||
mov ebx,0x10000
|
||||
mov ecx,32 shl 16 +32
|
||||
mcall
|
||||
mcall 7, 0x10000, <32,32>
|
||||
pop ecx
|
||||
pop ebx
|
||||
add edx,33 shl 16
|
||||
@ -563,7 +543,7 @@ pusha
|
||||
mov ebx,18 shl 16 +395
|
||||
mov edx,lbl_score
|
||||
mcall
|
||||
mov ebx,340 shl 16 +405
|
||||
mov ebx,360 shl 16 +405
|
||||
mov ecx,fg3color
|
||||
mov edx,lbl_copy
|
||||
mcall
|
||||
@ -584,7 +564,6 @@ lbl_win db ' T u b l i ! ',0
|
||||
lbl_win2 db ' Lähme edasi! ',0
|
||||
lbl_yscore db 'Sinu tulemus:',0
|
||||
lbl_toolbar db 'Uus mäng: Lihtne Keskmine Raske',0
|
||||
lbl_copy db 'v1.41 2006,Mario Birkner',0
|
||||
lbl_score db ' Aeg: Tulemus: Tase:',0
|
||||
else
|
||||
lbl_title db 'Pipes',0
|
||||
@ -594,10 +573,11 @@ lbl_win db ' G r e a t ! ',0
|
||||
lbl_win2 db " Let's keep going! ",0
|
||||
lbl_yscore db 'Your Score:',0
|
||||
lbl_toolbar db 'New Game: Easy Normal Hard',0
|
||||
lbl_copy db 'v1.41 2006,Mario Birkner',0
|
||||
lbl_score db 'Time: Score: Level:',0
|
||||
end if
|
||||
|
||||
lbl_copy db '2006, Mario Birkner',0
|
||||
|
||||
;=================================================
|
||||
; DATA - VARS
|
||||
;=================================================
|
||||
|
BIN
programs/games/pipes/pipes.png
Normal file
BIN
programs/games/pipes/pipes.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 4.5 KiB |
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user