0,0 → 1,1162 |
; 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 |
|
; ¯à ¢®¬ ¨¦¥¬ 㣫ã à ᯮ« £ ¥âáï á¥à ï ª®¯ª , |
;¯à¨ ¦ â¨î ª®â®àãî ®ª® 㢥«¨ç¨¢ ¥âáï ¢ à §¬¥à¥. |
|
; à®£à ¬¬ ¯à®¢¥àï¥â áâப㠯 à ¬¥â஢; ¯à®áâ® ¯¥à¥¤ ©â¥ |
;¯ãâì ª ä ©«ã á § ¤ 祩. |
|
; ®ç¥â ¨ï ª« ¢¨è: |
; 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,100,100,(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',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 |
title db '㤮ªã',0 |
txt: |
.dif db "«®¦®áâì (+/-):",0 |
.new db '®¢ ï (N)',0 |
.space db '¥è¥¨¥ (஡¥«)',0 |
.check db '஢¥à¨âì (C)',0 |
.check_yes db '¥è¥¨¥ ©¤¥®',0 |
.check_no = .nosolve |
.time db "६ï (T) :",0 |
.own_map db '¢¥á⨠᢮î 㤮ªã ¤«ï à¥è¥¨ï (I)',0 |
.nosolve db '¥ à¥è¥® ',0 |
.solve db '¥è¨âì (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" |
; «¨âàë: |
|
|
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) |