kolibrios/programs/games/sudoku/trunk/sudoku.asm

1163 lines
18 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

; 4.11.2009 staper@inbox.ru
; 2.06.2010 fixed a little bug in check
;based on http://sources.codenet.ru/download/1599/Sudoku.html
; ¯à ¢®¬ ­¨¦­¥¬ 㣫ã à á¯®« £ ¥âáï á¥à ï ª­®¯ª ,
;¯à¨ ­ ¦ â¨î ­  ª®â®àãî ®ª­® 㢥«¨ç¨¢ ¥âáï ¢ à §¬¥à¥.
; <20>ணࠬ¬  ¯à®¢¥àï¥â áâப㠯 à ¬¥â஢; ¯à®áâ® ¯¥à¥¤ ©â¥
;¯ãâì ª ä ©«ã á § ¤ ç¥©.
; ‘®ç¥â ­¨ï ª« ¢¨è:
; n - ᣥ­¥à¨à®¢ âì â ¡«¨æã
; c - ¯à®¢¥à¨âì à¥è¥­¨¥
; ¯à®¡¥« - ¯®ª § âì à¥è¥­¨¥
; +- - ¨§¬¥­¨âì ã஢¥­ì á«®¦­®áâ¨
; t - ¯à¨®áâ ­®¢¨âì/§ ¯ãáâ¨âì ᥪ㭤®¬¥à
; i - ¢¢¥á⨠᢮© ¯à¨¬¥à
; r - à¥è¨âì
; l - § £à㧨âì § ¤ çã ¨§ ä ©« 
; s - á®åà ­¨âì § ¤ çã ¢ ä ©«
; a - á®åà ­¨âì à¥è¥­¨¥ ¢ ä ©«
use32
org 0x0
db 'MENUET01'
dd 0x1, START, I_END, (D_END+10000) and not 3, (D_END+10000) and not 3, buf_cmd_lin, cur_dir_path
Difficult db 0 ;á«®¦­®áâì [0..9]
Difficult_array db 80,75,68,59,50,45,40,36,32,25
;–¢¥â :
Bckgrd_clr equ 0xffffff ;ä®­
Brdr_line_clr equ 0x780000 ;«¨­¨¨ ¯® £à ­¨æ ¬
Inter_line_clr equ 0xb0b0b0 ;¢­ãâ७­¨¥ «¨­¨¨
Square_clr equ 0xdddddd ;梥⠪ãàá®à 
Fix_nmb_clr equ 0x335533;0 ;áâ â¨ç­®¥ §­ ç¥­¨¥
Chg_nmb_clr equ 0;x008d8d ;¯¥à¥¬¥­­®¥ §­ ç¥­¨¥
Text_clr equ 0x000000 ;⥪áâ
Message_clr equ 0x0000ff ;á®®¡é¥­¨ï
DEBUG equ 0
macro dbg_dec num
{pushad
newline
debug_print_dec num
popad
}
include '../../../macros.inc'
;include 'debug.inc'
include 'editbox_ex.mac'
include 'lang.inc'
include 'SudokuSolve.pas'
START:
mcall 40,7
mcall 3
mov [rsx1],ax
ror eax,16
mov [rsx2],ax
rol eax,7
mov [rsx3],ax
rol eax,7
mov [rsx4],ax
; call LOAD_LIB ;loading Box_Lib library
; This is the part of the macros for load any library/libraries by <Lrz>
LOAD_LIB:
mcall 68,19,system_path ; load of sys directory
test eax,eax
jnz .end_steep
bts [flags],7
; ret
jmp .end
.end_steep:
; initialize import
mov edx, eax
mov esi,myimport
.import_loop:
lodsd
test eax, eax
jz .import_done
push edx
.import_find:
mov ebx, [ds:edx]
test ebx, ebx
jz .exit ;import_not_found
push eax
.lp:
mov cl, [ds:eax]
cmp cl, [ds:ebx]
jnz .import_find_next
test cl, cl
jz .import_found
inc eax
inc ebx
jmp .lp
.import_find_next:
pop eax
add edx, 8
jmp .import_find
.import_found:
pop eax
mov eax, [ds:edx+4]
mov [esi-4], eax
pop edx
jmp .import_loop
.exit:
add esp,4
bts [flags],7
;ret
jmp .end
.import_done:
btr [flags],7
;®¯à¥¤¥«ï¥¬ ¤«¨­ã áâப¨ á ¯ à ¬¥âà ¬¨
mov esi,buf_cmd_lin
xor eax,eax
@@: cmp byte [esi+eax],0
je @f
inc eax
jmp @b
@@: mov dword [edit1.size],eax
mov dword [edit1.pos],eax
;ret
.end:
bt [flags],7
jc @f
mcall 68,11
cmp dword [edit1.pos],0
je @f
call load_sudoku
jnc redraw_all
@@: jmp key.new_game
redraw_all:
mcall 12,1
mcall 48,4
add eax,100*65536+(24*9+67)
mov ecx,eax
mcall 0,100*65536+(24*9+12),,(0x34000000+Bckgrd_clr),,title
mcall 38,1*65536+(24*9+1),21*65536+21,Brdr_line_clr
mov edx,Inter_line_clr
mov edi,3
mov esi,3
@@: add ecx,24*65536+24
mcall
dec esi
jnz @b
mov esi,3
push edx
mcall ,,,Brdr_line_clr
pop edx
dec edi
jnz @b
mcall ,1*65536+1,22*65536+236,Inter_line_clr;0xe7e6a0
mov edx,Inter_line_clr
mov edi,3
mov esi,3
push edx
mcall ,,,Brdr_line_clr
pop edx
@@: add ebx,24*65536+24
mcall
dec esi
jnz @b
mov esi,3
push edx
mcall ,,,Brdr_line_clr
pop edx
dec edi
jnz @b
mcall 8,<208,8>,<257,8>,2,0xbbbbbb
mcall 4,<5,5>,(0x80000000+Text_clr),txt.new
mcall ,<105,5>,,txt.dif
mcall ,<5,258>,,txt.space
mcall ,<5,246>,,txt.check
mcall ,<129,246>,,txt.time
mcall ,<5,285>,,txt.own_map
mcall ,<5,296>,,txt.solve
mcall ,<90,296>,,txt.load
mcall ,<5,306>,,txt.save
mcall ,<90,306>,,txt.save_solve
bts [flags],5
call Timer.0
call show_level
push dword Map;esi; mov esi,Map
mcall 12,2
draw_pole:
if DEBUG
call SysMsgBoardNum ;show esp
endf
movzx eax,[Y]
dec al
mov ebx,9
mul bl
mov bl,[X]
add al,bl
pop esi ; mov esi,Map
push eax ;ªãàá®à稪
mov edi,81-9
mov ebp,9
mov ebx,1*65536+21
mov ecx,21*65536+41
call out_numbers
pop eax
bt [flags],2
jc key.0
still:
mcall 23,10
test eax,eax
jz Timer
dec al
jz redraw_all
dec al
jz key
dec al
jnz still
;button:
mcall 17
cmp ah,1
jne @f
mcall -1
@@: cmp ah,2
jne still
btc [flags],9
mcall 48,4
add eax,(24*9+67)
mov esi,eax
bt [flags],9
jnc @f
add esi,40
@@: mcall 67,-1,-1,(24*9+12),
jmp still
key:
mcall 2
cmp ah,32 ;¯à®¡¥«
jne @f
btc [flags],3
jc .todraw
push dword SolveMap
jmp draw_pole
.todraw:
push dword Map
jmp draw_pole
@@:
bt [flags],3
jnc @f
bts [flags],2
push eax
push dword Map
jmp draw_pole
.0: pop eax
btr [flags],2
btr [flags],3
@@: cmp ah,108 ;l
jne @f
bt [flags],7
jc still
bt [flags],6
jc still
bts [flags],8
call window_load_save
jmp still
@@: cmp ah,115 ;s
jne @f
btr [flags],10
.sresh: bt [flags],7
jc still
bt [flags],6
jc still
btr [flags],8
call window_load_save
jmp still
@@: cmp ah,97 ;a
jne @f
bts [flags],10
jmp .sresh
@@: cmp ah,116 ;t
jne @f
btc [flags],1
jnc still
mcall 26,9
sub eax,[Ticks_new]
push eax
mov eax,[Ticks]
mov ebx,100
mul ebx
pop ecx
sub ecx,eax
add [Ticks_new],ecx
jmp still
@@: cmp ah,105 ;i
jne @f
xor ecx,ecx
.105_0:
mov byte [SolveMap+ecx],0
mov byte [Map+ecx],0
inc ecx
cmp ecx,9*9
jb .105_0
jmp .todraw
@@: cmp ah,114 ;r
jne .43
xor ecx,ecx
.114_0:
mov al,[Map+ecx]
cmp al,9
jbe @f
sub al,10
@@:
mov [SolveMap+ecx],al
inc ecx
cmp ecx,9*9
jb .114_0
mov esi,SolveMap
call Solve
cmp [_iRet],1
jne @f
mov edx,txt.check_yes
call Show_message
jmp still
@@: ;­¥â à¥è¥­¨©
xor ecx,ecx
@@:
mov byte [SolveMap+ecx],0
inc ecx
cmp ecx,9*9
jb @b
mov edx,txt.nosolve
call Show_message
jmp still
.43: cmp ah,43 ;+
jne .45
cmp [Difficult],9
je still
inc [Difficult]
call show_level
jmp still
.45: ;-
cmp ah,45
jne .99
cmp [Difficult],0
je still
dec [Difficult]
call show_level
jmp still
.99: ;Check
cmp ah,99
jne .39
bts [flags],15
xor ecx,ecx
mov edx,txt.check_no
; @@: mov al,byte [Map+ecx]
; cmp byte [SolveMap+ecx],al
; jne @f
; inc ecx
; cmp ecx,9*9
; jb @b
@@: mov al,byte [Map+ecx] ;¯¥à¥­®á¨¬ §­ ç¥­¨ï ¢® ¢à¥¬¥­­ë© ¬ áᨢ
cmp al,9
jbe .991
sub al,10
.991:
mov [TempMap+ecx],al
inc ecx
cmp ecx,9*9
jb @b
mov esi,TempMap
call CheckSudoku
jc @f
mov edx,txt.check_yes
@@: btr [flags],15
call Show_message
jmp .todraw
.39: cmp ah,0x39
ja .110
cmp ah,0x30
jb still
sub ah,0x30
mov cl,ah
movzx eax,[Y]
dec al
mov ebx,9
mul bl
mov bl,[X]
dec bl
add al,bl
mov esi,Map
cmp byte [esi+eax],9
jg still
mov [esi+eax],cl
jmp .onedraw
.110: cmp ah,110 ;n
jne .176
.new_game:
call GeneratePlayBoard
mov [Ticks],0
mcall 26,9
mov [Ticks_new],eax
jmp redraw_all
.176: cmp ah,176 ;ªãàá®àë
jne .177
call draw_one_symbol
dec [X]
cmp [X],1
jge @f
mov [X],9
@@: jmp .onedraw
.177: cmp ah,177
jne .178
call draw_one_symbol
inc [Y]
cmp [Y],9
jbe @f
mov [Y],1
@@: jmp .onedraw
.178: cmp ah,178
jne .179
call draw_one_symbol
dec [Y]
cmp [Y],1
jge @f
mov [Y],9
@@: jmp .onedraw
.179: cmp ah,179
jne still
call draw_one_symbol
inc [X]
cmp [X],9
jbe @f
mov [X],1
@@:
.onedraw:
bts [flags],4
call draw_one_symbol
jmp still ;.todraw
show_level:
movzx ecx,[Difficult]
mcall 47,0x10000,,<205,5>,(0x50000000+Text_clr),Bckgrd_clr
ret
Show_message:
mcall 4,<5,269>,(0xd0000000+Message_clr),,,Bckgrd_clr
ret
Timer:
bt [flags],1
jc still
mcall 26,9
sub eax,[Ticks_new]
mov ebx,100
xor edx,edx
div ebx
cmp eax,[Ticks]
je still
mov [Ticks],eax
.1: mov ebx,60
xor edx,edx
div ebx
push eax
mov ecx,edx
mcall 47,0x00020000,,<206,246>,(0x40000000+Text_clr),Bckgrd_clr
pop ecx
mov edx,189*65536+246
mcall
bt [flags],5
jnc @f
btr [flags],5
ret
@@: jmp still
.0: mov eax,[Ticks]
jmp .1
draw_one_symbol:
movzx eax,[X]
mov ebx,24*65536+24
mul ebx
xchg eax,ebx
add ebx,(1*65536+21-24*65536+24)
movzx eax,[Y]
mov ecx,24*65536+24
mul ecx
xchg eax,ecx
add ecx,(21*65536+41-24*65536+24)
movzx eax,[Y]
dec al
push ebx
mov ebx,9
mul bl
mov bl,[X]
add al,bl
dec al
pop ebx
mov esi,Map
add esi,eax
push dword 0 ;­¥ ªãàá®à
bt [flags],4
jnc @f
mov dword [esp],1 ;ªãàá®à
btr [flags],4
@@: mov edi,0
mov ebp,1
call out_numbers
pop eax
ret
out_numbers:
push ebx ecx esi
shr ebx,16
inc bx
shl ebx,16
add ebx,23
shr ecx,16
inc cx
shl ecx,16
add ecx,23
mov edx,Bckgrd_clr
push ebp
dec dword [esp+4*5]
jnz @f
mov edx,Square_clr
@@: mcall 13
pop ebp
pop esi
cmp byte [esi],0
je .null
cmp byte [esi],9
jbe .changeable_number
cmp byte [esi],19
jbe .fixed_number
jmp .null
.end:
inc esi
dec ebp
jnz out_numbers
test edi,edi
jz @f
sub edi,9
mov ebp,9
add ebx,-9*24*65536-9*24
add ecx,24*65536+24
jmp out_numbers
@@:
ret
.fixed_number:
push esi
shr ebx,16
shr ecx,16
mov dx,bx
shl edx,16
mov dx,cx
add edx,8*65536+4
movzx ebx,byte [esi]
sub ebx,10
dec ebx
shl ebx,4
add ebx,FONT
mov ecx,8*65536+16
push esi ebp edi
mov edi,Pltr.fx
cmp dword [esp+4*7],0
jne @f
mov edi,Pltr.fxk
@@: mov esi,1
mov ebp,0
mcall 65
pop edi ebp esi
.1: pop esi ecx ebx
add ebx,24*65536+24
jmp .end
.null:
pop ecx ebx
add ebx,24*65536+24
jmp .end
.changeable_number:
push esi
shr ebx,16
shr ecx,16
mov dx,bx
shl edx,16
mov dx,cx
add edx,8*65536+4
movzx ebx,byte [esi]
dec ebx
shl ebx,4
add ebx,FONT
mov ecx,8*65536+16
push esi ebp edi
mov edi,Pltr.ch
cmp dword [esp+4*7],0
jne @f
mov edi,Pltr.chk
@@: mov esi,1
mov ebp,0
mcall 65
pop edi ebp esi
jmp .1
GeneratePlayBoard:
;i db 0
;j db 0
;RandI db 0
;RandJ db 0
;iRet db 0
;//£¥­¥à¨à㥬 à¥è¥­­ãî ¬ âà¨æã
;m:
;for i:=0 to 8 do
; for j:=0 to 8 do
; begin
; Map[i,j]:=0;
; SolveMap[i,j]:=0;
; RealMap[i,j]:=0;
; end;
mov edi,Map
mov esi,SolveMap
mov edx,RealMap
xor ecx,ecx
@@:
mov byte [edi+ecx],0
mov byte [esi+ecx],0
mov byte [edx+ecx],0
inc ecx
cmp ecx,9*9
jb @b
;//áâ ¢¨¬ à ­¤®¬­® ­¥áª®«ìª® ç¨á¥« ­  ¯®«¥
;for i:=1 to 21 do
; begin
; RandI:=random(9);
; RandJ:=random(9);
; if SolveMap[RandI,RandJ]=0 then
; begin
; SolveMap[RandI,RandJ]:=random(9)+1;
; if not CheckSudoku(SolveMap) then
; begin
; SolveMap[RandI,RandJ]:=0;
; Continue;
; end;
; end else Continue;
; end;
mov ecx,21
.1: mov eax,9
call random
mov ebx,eax
mov eax,9
call random
mov ah,9
mul ah
add eax,ebx ;RandI,RandJ
cmp byte [esi+eax],0
jne .loop
mov ebx,eax
mov eax,9
call random
mov byte [esi+ebx],al
call CheckSudoku
jnc .loop
mov byte [esi+ebx],0
.loop:
loop .1
;//à¥è ¥¬ ‘㤮ªã
;iRet:=Solve(SolveMap);
;if iRet<>1 then goto m;
;i:=1;
mov esi,SolveMap
call Solve
cmp [_iRet],1
jne GeneratePlayBoard
movzx ecx,[Difficult]
movzx ecx,byte [Difficult_array+ecx]
;case Difficult of
;1:
; while i<=42 do
; begin
; RandI:=random(9);
; RandJ:=random(9);
; if RealMap[RandI,RandJ]<>0 then Continue else
; RealMap[RandI,RandJ]:=SolveMap[RandI,RandJ];
; inc(i);
; end;
;2:
; while i<=32 do
; begin
; RandI:=random(9);
; RandJ:=random(9);
; if RealMap[RandI,RandJ]<>0 then Continue else
; RealMap[RandI,RandJ]:=SolveMap[RandI,RandJ];
; inc(i);
; end;
;3:
; while i<=25 do
; begin
; RandI:=random(9);
; RandJ:=random(9);
; if RealMap[RandI,RandJ]<>0 then Continue else
; RealMap[RandI,RandJ]:=SolveMap[RandI,RandJ];
; inc(i);
; end;
;end;
.2:
mov eax,9
call random
mov ebx,eax
mov eax,9
call random
mov ah,9
mul ah
cmp al,81
jb @f
dec al
@@:
add eax,ebx ;RandI,RandJ
cmp byte [RealMap+eax],0
jne .loop2
add byte [SolveMap+eax],10
mov bl,[SolveMap+eax]
mov byte [RealMap+eax],bl
.loop2:
loop .2
;for i:=0 to 8 do
; for j:=0 to 8 do
; Map[i,j]:=RealMap[i,j];
;end;
xor ecx,ecx
@@: mov al,[RealMap+ecx]
mov [Map+ecx],al
inc ecx
cmp ecx,9*9
jb @b
ret
align 4
rsx1 dw ?;0x4321
rsx2 dw ?;0x1234
rsx3 dw ?;0x62e9
rsx4 dw ?;0x3619
random: ; ¨§ ASCL
push ecx ebx esi edx
mov cx,ax
mov ax,[rsx1]
mov bx,[rsx2]
mov si,ax
mov di,bx
mov dl,ah
mov ah,al
mov al,bh
mov bh,bl
xor bl,bl
rcr dl,1
rcr ax,1
rcr bx,1
add bx,di
adc ax,si
add bx,[rsx3]
adc ax,[rsx4]
sub [rsx3],di
adc [rsx4],si
mov [rsx1],bx
mov [rsx2],ax
xor dx,dx
cmp ax,0
je nodiv
cmp cx,0
je nodiv
div cx
nodiv:
mov ax,dx
pop edx esi ebx ecx
and eax,0000ffffh
ret
if DEBUG
SysMsgBoardNum: ;warning: destroys eax,ebx,ecx,esi
mov ebx,esp
mov ecx,8
mov esi,(number_to_out+1)
.1:
mov eax,ebx
and eax,0xF
add al,'0'
cmp al,(10+'0')
jb @f
add al,('A'-'0'-10)
@@:
mov [esi+ecx],al
shr ebx,4
loop .1
dec esi
mcall 71,1,number_to_out
ret
number_to_out db '0x00000000',13,10,0
endf
window_load_save:
popad
mcall 51,1,.thread,(threat_stack+32*4)
pushad
ret
.thread:
bts [flags],6
.red:
mcall 12,1
mov edi,txt.load
bt [flags],8
jc @f
mov edi,txt.save
bt [flags],10
jnc @f
mov edi,txt.save_solve
@@: mcall 0,50*65536+300,0x70*65536+60,(0x34000000+Bckgrd_clr),,
mcall 8,<245,43>,<2,14>,100,0xaaaaaa
mcall 4,<252,5>,(0x80000000+Text_clr),txt.enter
push dword edit1
call [edit_box_draw]
mcall 12,2
.still:
mcall 10
dec al
jz .red
dec al
jz .key
dec al
jz .button
jmp .still
.button:
mcall 17,1
cmp ah,1
jne @f
.end: btr [flags],6
mcall -1
@@: cmp ah,100
jne .still
bt [flags],8
jc .ld
.sv: call save_sudoku
jnc .end
jmp .err
.ld: call load_sudoku
jnc .end
.err: mcall 4,<5,19>,(0x80000000+Text_clr),txt.error
jmp .still
.key:
mcall 2
cmp ah,13
jne @f
bt [flags],8
jc .ld
jmp .sv
@@: cmp ah,27
je .end
push dword edit1
call [edit_box_key]
jmp .still
save_sudoku:
mov [_size],9*(9+2)
mcall 68,12,[_size]
test eax,eax
jnz @f
stc
ret
@@: mov [_buffer],eax
mov edx,Map
bt [flags],10
jnc @f
mov edx,SolveMap
@@: mov esi,eax;[_buffer]
mov ecx,[_size]
xor edi,edi
dec edi
mov ebx,9
.1: test ecx,ecx
jz .end
test ebx,ebx
jz .2
inc edi
dec ebx
mov al,[edx+edi]
test al,al
jnz @f
mov byte [esi+edi],0x23
loop .1
jmp .end
@@: cmp al,9
jbe @f
sub al,10
@@: add al,48
mov byte [esi+edi],al
loop .1
jmp .end
.2: mov ebx,9
mov byte [esi+edi+1],13
mov byte [esi+edi+2],10
add esi,2
sub ecx,2
jmp .1
.end: mov [func_70.func_n],2
push [_size]
pop [func_70.param3]
push [_buffer]
pop [func_70.param4]
mov [func_70.name],buf_cmd_lin
mcall 70,func_70
cmp al,0 ;á®åà ­ñ­ 㤠筮?
je @f
mcall 68,13,[_buffer]
stc
ret
@@: mcall 68,13,[_buffer]
clc
ret
load_sudoku:
mov [func_70.func_n],5
mov [func_70.param3],0
mov [func_70.param4],bufferfinfo
mov [func_70.name],buf_cmd_lin
mcall 70,func_70
test al,al ;ä ©« ­ ©¤¥­?
jz @f
stc
ret
@@: mov eax, dword [bufferfinfo+32] ;ª®¯¨à㥬 à §¬¥à ä ©« 
cmp eax,81
jge @f
stc
ret
@@: cmp eax,100
jb @f
stc
ret
_size dd 0
_buffer dd 0
@@: mov [_size],eax
mcall 68,12,[_size]
test eax,eax
jnz @f
stc
ret ;®è¨¡ª  ­  ¢ë¤¥«¥­¨¥ ¡«®ª 
@@:
mov [_buffer],eax
mov [func_70.func_n],0
mov [func_70.name],buf_cmd_lin
push dword [_size]
pop dword [func_70.param3]
push dword [_buffer]
pop dword [func_70.param4]
mcall 70,func_70
test eax,eax
jz @f
stc
ret ;®è¨¡ª  ç⥭¨ï
@@:
mov edx,Map
mov esi,[_buffer]
mov ecx,[_size]
xor edi,edi
dec edi
.1: test ecx,ecx
jz .end
inc edi
mov al,[esi+edi]
cmp al,0x23
jne @f
mov byte [edx+edi],0
loop .1
jmp .end
@@: cmp al,13
jne @f
add esi,2
dec edi
sub ecx,2
jmp .1
@@: sub al,48
mov byte [edx+edi],al
loop .1
.end: mcall 68,13,[_buffer]
xor ecx,ecx
@@: mov byte [SolveMap+ecx],0
inc ecx
cmp ecx,9*9
jb @b
mov [Ticks],0
mcall 26,9
mov [Ticks_new],eax
clc
ret
align 4
myimport:
edit_box_draw dd aEdit_box_draw
edit_box_key dd aEdit_box_key
edit_box_mouse dd aEdit_box_mouse
version_ed dd aVersion_ed
dd 0
dd 0
aEdit_box_draw db 'edit_box_draw',0
aEdit_box_key db 'edit_box_key',0
aEdit_box_mouse db 'edit_box_mouse',0
aVersion_ed db 'version_ed',0
edit1 edit_box 240,2,2,Bckgrd_clr,0x6a9480,0,0xAABBCC,0,4096,buf_cmd_lin,ed_focus,2,0,0
func_70:
.func_n dd ?
.param1 dd 0
.param2 dd 0
.param3 dd ?
.param4 dd ?
.rezerv db 0
.name dd ?
if lang eq ru_RU
title db '‘㤮ªã',0
txt:
.dif db "‘«®¦­®áâì (+/-):",0
.new db '<27>®¢ ï (N)',0
.space db '<27>¥è¥­¨¥ (<28>஡¥«)',0
.check db '<27>஢¥à¨âì (C)',0
.check_yes db '<27>¥è¥­¨¥ ­ ©¤¥­®',0
.check_no = .nosolve
.time db "∴• (T) :",0
.own_map db '‚¢¥áâ¨ á¢®î ‘ã¤®ªã ¤«ï à¥è¥­¨ï (I)',0
.nosolve db '<27>¥ à¥è¥­® ',0
.solve db '<27>¥è¨âì (R)',0
.save db '‘®åà ­¨âì (S)',0
.save_solve db '‘®åà ­¨âì à¥è¥­¨¥ (A)',0
.error db 'Žè¨¡ª ',0
.load db '‡ £à㧨âì (L)',0
.enter db 'Enter',0
else
title db 'Sudoku',0
txt:
.dif db "Difficult (+/-)",0
.new db 'New (N)',0
.space db 'Solution (Space)',0
.check db 'Check (C)',0
.check_yes db 'Right ',0
.check_no db 'Not right ',0
.time db " Time (T) :",0
.own_map db 'Input your own Sudoku (I)',0
.nosolve db 'It is not solved',0
.solve db 'Solve (R)',0
.save db 'Save (S)',0
.save_solve db 'Save solution (A)',0
.error db 'Error';,0
.load db 'Load (L)',0
.enter db 'Enter',0
endf
system_path db '/sys/lib/'
boxlib_name db 'box_lib.obj',0
X db 1
Y db 1
Pltr:
.ch dd Bckgrd_clr,Chg_nmb_clr
.chk dd Square_clr,Chg_nmb_clr
.fx dd Bckgrd_clr,Fix_nmb_clr
.fxk dd Square_clr,Fix_nmb_clr
align 4
FONT file "sudoku.fnt"
;<3B> «¨âàë:
I_END:
align 16
Map rb 9*9
SolveMap rb 9*9
RealMap rb 9*9
TempMap rb 9*9
cur_dir_path rb 4096
buf_cmd_lin rb 4096
bufferfinfo rb 40
Ticks_new rd 1 ;dd 0
Ticks rd 1 ;dd 0
flags rw 1
threat_stack rd 32 ;: times 32 dd 0
D_END:
;¡¨â 0: á¬. ¯¥à¥¤ draw_pole
;1: 1-â ©¬¥à ¢ª«îçñ­
;2: ¢ draw_pole ¨ key
;3: 1-¯®ª § âì à¥èñ­­ãî ª àâã
;4: in draw_one_symbol
;5: in Timer
;6: 1 ­  íªà ­¥ ®ª­® ‘®åà ­¥­¨ï/‡ £à㧪¨
;7: box_lib is not loaded
;8: 0 - á®åà ­¨âì 1 - § £à㧨âì
;9: 1 - 㢥«¨ç¨âì ¢ëá®âã ®ª­ 
;10: 1 - á®åà ­¨âì à¥è¥­¨¥
;15 1 - ¯à®¢¥àª  ¯à¨ ­ ¦ â¨¨ ª« ¢¨è¨ (¤«ï CheckSudoku)