diff options
| author | Georg Brandl <georg@python.org> | 2021-01-18 21:24:00 +0100 |
|---|---|---|
| committer | Georg Brandl <georg@python.org> | 2021-01-18 22:08:36 +0100 |
| commit | 2a3d3a7d5b9c60dedf6638d876161d9563faebcf (patch) | |
| tree | 809c0b4a686db98f5954afa1944404cd9652c6b2 /tests/lexers/tasm | |
| parent | f0445be718da83541ea3401aad882f3937147263 (diff) | |
| download | pygments-git-examplefiles.tar.gz | |
Move test_examplefiles to new tests/lexers scheme.examplefiles
Diffstat (limited to 'tests/lexers/tasm')
| -rw-r--r-- | tests/lexers/tasm/example.txt | 4007 |
1 files changed, 4007 insertions, 0 deletions
diff --git a/tests/lexers/tasm/example.txt b/tests/lexers/tasm/example.txt new file mode 100644 index 00000000..0e7c9d87 --- /dev/null +++ b/tests/lexers/tasm/example.txt @@ -0,0 +1,4007 @@ +---input--- +;----------------------------------------------------------------------------; +; Does A* pathfinding for rockraiders and vehicles +; +; Copyright 2015 Ruben De Smet +; +; Redistribution and use in source and binary forms, with or without +; modification, are permitted provided that the following conditions are +; met: +; +; (1) Redistributions of source code must retain the above copyright +; notice, this list of conditions and the following disclaimer. +; +; (2) Redistributions in binary form must reproduce the above copyright +; notice, this list of conditions and the following disclaimer in +; the documentation and/or other materials provided with the +; distribution. +; +; (3) The name of the author may not be used to +; endorse or promote products derived from this software without +; specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +; DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, +; INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, +; STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +; IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +; POSSIBILITY OF SUCH DAMAGE. +; +;----------------------------------------------------------------------------; + +IDEAL +P386 +MODEL FLAT, C +ASSUME cs:_TEXT,ds:FLAT,es:FLAT,fs:FLAT,gs:FLAT + +INCLUDE "ASTAR.INC" +INCLUDE "READLVL.INC" +INCLUDE "DEBUG.INC" + +STRUC TPriorityField + heuristic dd ? + distance dd ? + x db ? + y db ? + fromx db ? + fromy db ? +ENDS + +STRUC TField + distance dd ? + x db ? + y db ? +ENDS + +CODESEG + +PROC getPath + USES ecx + ARG @@tgtx:dword, \ + @@tgty:dword \ + RETURNS eax, ebx ; eax contains x, ebx contains y + + call getLevelWidth + imul eax, [@@tgty] + add eax, [@@tgtx] + imul eax, SIZE TField + add eax, offset backtraceGraph + mov ecx, eax + + xor eax, eax + xor ebx, ebx + + mov al, [(TField ptr ecx).x] + mov bl, [(TField ptr ecx).y] + + ret +ENDP getPath + +PROC findPath + ; eax will contain a 1 when a path has been found + ; 0 otherwise. + ARG @@srcx:dword, \ + @@srcy:dword, \ + @@tgtx:dword, \ + @@tgty:dword, \ + @@type:dword \ + RETURNS eax + + ; Check whether the target field is "allowed" for + ; the selected vehicle or rock raider + call getField, [@@tgtx], [@@tgty] + mov al, [byte ptr eax] + and eax, 0FFh + + add eax, offset actionTable + mov eax, [eax] + and eax, [@@type] ; TODO: for now, rock raider is hard coded + jnz @canGoToTarget + + mov eax, 0 + ret +@canGoToTarget: + + call cleanData + mov eax, [@@type] + mov [currentType], eax + + mov eax, [@@srcx] + mov [currentOpen.x], al + mov eax, [@@srcy] + mov [currentOpen.y], al + + call distance, [@@srcx], [@@srcy], [@@tgtx], [@@tgty] + ; eax <- distance + call addOpen, [@@srcx], [@@srcy], eax, 0 + +@openListNotEmpty: + call popOpen + cmp eax, 0 + je @openListEmpty + + call addToMap + + call addClosed + + mov eax, [@@tgtx] + cmp [currentOpen.x], al + jne @nextOpen + mov eax, [@@tgty] + cmp [currentOpen.y], al + jne @nextOpen + + jmp @routeFound + + @nextOpen: + call addNeighbours, [@@tgtx], [@@tgty] + + jmp @openListNotEmpty + +@openListEmpty: + mov eax, 0 + ret + +@routeFound: + mov eax, 1 + ret +ENDP findPath + +PROC addToMap + USES eax, ecx + + call getLevelWidth + xor ecx, ecx + mov cl, [currentOpen.y] + imul eax, ecx + mov cl, [currentOpen.x] + add eax, ecx + imul eax, SIZE TField + add eax, offset backtraceGraph + + mov ecx, [currentOpen.distance] + cmp [(TField ptr eax).distance], ecx + jbe @dontAdd + + mov [(TField ptr eax).distance], ecx + mov cl, [currentOpen.fromx] + mov [(TField ptr eax).x], cl + mov cl, [currentOpen.fromy] + mov [(TField ptr eax).y], cl + +@dontAdd: + ret +ENDP addToMap + +; Is closed checks whether the field considered is "closed" for being added to the open list. +; So, it also checks whether we can go on the selected field. +PROC isClosed + USES ebx, ecx, edx + ARG @@x:dword, \ + @@y:dword RETURNS eax + + ; Check bounds first: + + call getLevelWidth + cmp [@@x], eax + ja notWithinBounds ; ja considers -1 > 10 + + call getLevelHeight + cmp [@@y], eax + ja notWithinBounds + + ; Check whether this field is "allowed" for + ; the selected vehicle or rock raider + call getField, [@@x], [@@y] + mov al, [byte ptr eax] + and eax, 0FFh + + add eax, offset actionTable + mov eax, [eax] + and eax, [currentType] ; TODO: for now, rock raider is hard coded + jnz @canGoHere + + + inc eax ; mov eax, 1 + ret + +@canGoHere: + + ; Getting here means the field is okay to walk/fly/whatever on + + xor ecx, ecx + mov cx, [closedlistSize] + cmp cx, 0 ; If empty, return 0 + jne @closedNotEmpty + + mov eax, 0 + ret + +@closedNotEmpty: + mov ebx, offset closedlist + +@loopClosed: + mov edx, [@@x] + cmp [(TField ptr ebx).x], dl + jne @nextClosed + mov edx, [@@y] + cmp [(TField ptr ebx).y], dl + jne @nextClosed + + ; If reached here, yep, contained in closed list + mov eax, 1 + ret + + @nextClosed: + add ebx, SIZE TField + dec ecx + jnz @loopClosed + + mov eax, 0 + ret + +notWithinBounds: + mov eax, 1 + ret +ENDP isClosed + +PROC addNeighbours + USES eax, ebx, ecx, edx + ARG @@tgtx:dword, \ + @@tgty:dword + ; Push all neighbours of currentOpen on openList + + xor ebx, ebx + xor ecx, ecx + + mov bl, [currentOpen.x] + mov cl, [currentOpen.y] + mov edx, [currentOpen.distance] + inc edx ; Next distance is one more. + + ; Up + dec ecx + call isClosed, ebx, ecx + cmp eax, 0 + jne @noUp + call distance, ebx, ecx, [@@tgtx], [@@tgty] + add eax, edx + call addOpen, ebx, ecx, eax, edx + @noUp: + inc ecx + + ; Right + inc ebx + call isClosed, ebx, ecx + cmp eax, 0 + jne @noRight + call distance, ebx, ecx, [@@tgtx], [@@tgty] + add eax, edx + call addOpen, ebx, ecx, eax, edx + @noRight: + dec ebx + + ; Left + dec ebx + call isClosed, ebx, ecx + cmp eax, 0 + jne @noLeft + call distance, ebx, ecx, [@@tgtx], [@@tgty] + add eax, edx + call addOpen, ebx, ecx, eax, edx + @noLeft: + inc ebx + + ; Down + inc ecx + call isClosed, ebx, ecx + cmp eax, 0 + jne @noDown + call distance, ebx, ecx, [@@tgtx], [@@tgty] + add eax, edx + call addOpen, ebx, ecx, eax, edx + @noDown: + dec ecx + + ret +ENDP addNeighbours + +PROC popOpen + ARG RETURNS eax + USES ebx, ecx, edx, esi, edi + ; eax contains the smallest current heuristic + ; ebx contains the index of that field + + cmp [openlistSize], 0 ; If empty, return 0 + jne @goForth + + mov eax, 0 + ret + +@goForth: + + mov eax, 0FFFFFFFFh ; Longest distance possible in 32 bits. + xor ebx, ebx + xor ecx, ecx ; ecx contains the current index + +@searchFurther: + mov edx, ecx + imul edx, SIZE TPriorityField + cmp [(TPriorityField ptr (openlist + edx)).heuristic], eax + ja @notBetter + ; Better guess found, put right values in eax and ebx + mov eax, [(TPriorityField ptr (openlist + edx)).heuristic] + mov ebx, ecx + +@notBetter: + + inc ecx + cmp cx, [openlistSize] + jne @searchFurther + + ; By now, we have found the right item to pop from the priorityqueue. + + ; Move the correct item in currentOpen + mov ecx, SIZE TPriorityField + mov esi, ebx + imul esi, ecx + add esi, offset openlist + + mov edi, offset currentOpen + rep movsb + + ; Now make the remove the thing from the vector + + xor ecx, ecx + mov cx, [openlistSize] + sub ecx, ebx + dec ecx + imul ecx, SIZE TPriorityField + mov edi, esi + sub edi, SIZE TPriorityField + rep movsb + + dec [openlistSize] + mov eax, 1 + ret +ENDP popOpen + +PROC addClosed + USES eax, ebx + + xor ebx, ebx + xor eax, eax + + mov bx, [closedlistSize] + imul ebx, SIZE TField + add ebx, offset closedlist ; ebx contains the target TField + + mov al, [currentOpen.x] + mov [(TField ptr ebx).x], al + mov al, [currentOpen.y] + mov [(TField ptr ebx).y], al + mov eax, [currentOpen.distance] + mov [(TField ptr ebx).distance], eax + + inc [closedlistSize] + cmp [closedlistSize], CLOSED_LIST_SIZE_MAX + jne @noProblemWithClosedVector + + xor eax, eax + mov ax, [closedlistSize] + call crash, offset closedOutOfMemory, eax + +@noProblemWithClosedVector: + ret +ENDP addClosed + +PROC addOpen + USES eax, ebx + ARG @@x:dword, \ + @@y:dword, \ + @@priority:dword, \ + @@distance:dword + + xor eax, eax + mov ax, [openlistSize] + imul eax, SIZE TPriorityField + add eax, offset openlist + + mov ebx, [@@x] + mov [(TPriorityField ptr eax).x], bl + mov ebx, [@@y] + mov [(TPriorityField ptr eax).y], bl + + mov bl, [currentOpen.x] + mov [(TPriorityField ptr eax).fromx], bl + mov bl, [currentOpen.y] + mov [(TPriorityField ptr eax).fromy], bl + + mov ebx, [@@priority] + mov [(TPriorityField ptr eax).heuristic], ebx + mov ebx, [@@distance] + mov [(TPriorityField ptr eax).distance], ebx + + inc [openlistSize] + cmp [openlistSize], OPEN_LIST_SIZE_MAX + jne @noProblem + + xor eax, eax + mov ax, [openlistSize] + call crash, offset openOutOfMemory, eax + +@noProblem: + ret +ENDP + +PROC distance + USES ebx + ARG @@srcx:dword, \ + @@srcy:dword, \ + @@tgtx:dword, \ + @@tgty:dword \ + RETURNS eax + + mov eax, [@@srcx] + sub eax, [@@tgtx] + + jns @noSignChangex + neg eax + + @noSignChangex: + + mov ebx, [@@srcy] + sub ebx, [@@tgty] + + jns @noSignChangey + neg ebx + + @noSignChangey: + add eax, ebx + ret +ENDP distance + +PROC cleanData + USES eax, ecx + mov [openlistSize], 0 + mov [closedlistSize], 0 + + mov [currentOpen.x], -1 + mov [currentOpen.y], -1 + mov [currentOpen.distance], 0 + + call getLevelWidth + mov ecx, eax + call getLevelHeight + imul ecx, eax + + mov eax, offset backtraceGraph +@fieldIter: + mov [(TField ptr eax).distance], 0ffffffffh ; Set to approximately +inf + mov [(TField ptr eax).x], 0 + mov [(TField ptr eax).y], 0 + add eax, SIZE TField + dec ecx + jnz @fieldIter + + ret +ENDP cleanData + +DATASEG + +openOutOfMemory db "Out of openlistSize memory. Hi dev: Please increase$" +closedOutOfMemory db "Out of closedlistSize memory. Hi dev: Please increase$" + +; power | discover | walking | sailing | flying +actionTable db 00001101b, \ ;EMPTY + 00001101b, \ ;RUBBLE + 00000000b, \ ;GRAVEL + 00000000b, \ ;LOOSE ROCK + 00000000b, \ ;HARD ROCK + 00000000b, \ ;MASSIVE ROCK + 00000000b, \ ;KRISTAL SOURCE + 00000000b, \ ;OREROCK + 00001011b, \ ;WATER + 00001001b, \ ;LAVA + 00001101b, \ ;SNAIL HOLE + 00001101b, \ ;EROSION + 00011101b, \ ;POWER PATH + 00011101b, \ ;BUILDING POWER PATH + 00011000b \ ;BUILDING + +UDATASEG + +currentType dd ? +currentOpen TPriorityField ? + +openlist TPriorityField OPEN_LIST_SIZE_MAX dup(?) +openlistSize dw ? +closedlist TField CLOSED_LIST_SIZE_MAX dup(?) +closedlistSize dw ? +backtraceGraph TField MAX_LEVEL_SIZE dup(?) + +END + +---tokens--- +';----------------------------------------------------------------------------;' Comment.Single +'\n' Text + +'; Does A* pathfinding for rockraiders and vehicles' Comment.Single +'\n' Text + +';' Comment.Single +'\n' Text + +'; Copyright 2015 Ruben De Smet' Comment.Single +'\n' Text + +';' Comment.Single +'\n' Text + +'; Redistribution and use in source and binary forms, with or without' Comment.Single +'\n' Text + +'; modification, are permitted provided that the following conditions are' Comment.Single +'\n' Text + +'; met:' Comment.Single +'\n' Text + +'; ' Comment.Single +'\n' Text + +'; (1) Redistributions of source code must retain the above copyright' Comment.Single +'\n' Text + +'; notice, this list of conditions and the following disclaimer. ' Comment.Single +'\n' Text + +'; ' Comment.Single +'\n' Text + +'; (2) Redistributions in binary form must reproduce the above copyright' Comment.Single +'\n' Text + +'; notice, this list of conditions and the following disclaimer in' Comment.Single +'\n' Text + +'; the documentation and/or other materials provided with the' Comment.Single +'\n' Text + +'; distribution. ' Comment.Single +'\n' Text + +'; ' Comment.Single +'\n' Text + +'; (3) The name of the author may not be used to' Comment.Single +'\n' Text + +'; endorse or promote products derived from this software without' Comment.Single +'\n' Text + +'; specific prior written permission.' Comment.Single +'\n' Text + +'; ' Comment.Single +'\n' Text + +"; THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR" Comment.Single +'\n' Text + +'; IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED' Comment.Single +'\n' Text + +'; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE' Comment.Single +'\n' Text + +'; DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,' Comment.Single +'\n' Text + +'; INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES' Comment.Single +'\n' Text + +'; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR' Comment.Single +'\n' Text + +'; SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)' Comment.Single +'\n' Text + +'; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,' Comment.Single +'\n' Text + +'; STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING' Comment.Single +'\n' Text + +'; IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE' Comment.Single +'\n' Text + +'; POSSIBILITY OF SUCH DAMAGE.' Comment.Single +'\n' Text + +';' Comment.Single +'\n' Text + +';----------------------------------------------------------------------------;' Comment.Single +'\n' Text + +'\n' Text + +'IDEAL' Keyword +'\n' Text + +'P386' Keyword +'\n' Text + +'MODEL' Keyword +' ' Text +'FLAT' Name.Variable +',' Punctuation +' ' Text +'C' Name.Variable +'\n' Text + +'ASSUME' Keyword +' ' Text +'cs' Name.Builtin +':' Punctuation +'_TEXT' Name.Variable +',' Punctuation +'ds' Name.Builtin +':' Punctuation +'FLAT' Name.Variable +',' Punctuation +'es' Name.Builtin +':' Punctuation +'FLAT' Name.Variable +',' Punctuation +'fs' Name.Builtin +':' Punctuation +'FLAT' Name.Variable +',' Punctuation +'gs' Name.Builtin +':' Punctuation +'FLAT' Name.Variable +'\n\n' Text + +'INCLUDE' Keyword +' ' Text +'"ASTAR.INC"' Literal.String +'\n' Text + +'INCLUDE' Keyword +' ' Text +'"READLVL.INC"' Literal.String +'\n' Text + +'INCLUDE' Keyword +' ' Text +'"DEBUG.INC"' Literal.String +'\n\n' Text + +'STRUC' Keyword +' ' Text +'TPriorityField' Name.Variable +'\n' Text + +' ' Text +'heuristic' Name.Constant +' ' Keyword.Declaration +'dd' Keyword.Declaration +' ' Text +'?' Name.Variable +'\n' Text + +' ' Text +'distance' Name.Constant +' ' Keyword.Declaration +'dd' Keyword.Declaration +' ' Text +'?' Name.Variable +'\n' Text + +' ' Text +'x' Name.Constant +' ' Keyword.Declaration +'db' Keyword.Declaration +' ' Text +'?' Name.Variable +'\n' Text + +' ' Text +'y' Name.Constant +' ' Keyword.Declaration +'db' Keyword.Declaration +' ' Text +'?' Name.Variable +'\n' Text + +' ' Text +'fromx' Name.Constant +' ' Keyword.Declaration +'db' Keyword.Declaration +' ' Text +'?' Name.Variable +'\n' Text + +' ' Text +'fromy' Name.Constant +' ' Keyword.Declaration +'db' Keyword.Declaration +' ' Text +'?' Name.Variable +'\n' Text + +'ENDS' Keyword +'\n\n' Text + +'STRUC' Keyword +' ' Text +'TField' Name.Variable +'\n' Text + +' ' Text +'distance' Name.Constant +' ' Keyword.Declaration +'dd' Keyword.Declaration +' ' Text +'?' Name.Variable +'\n' Text + +' ' Text +'x' Name.Constant +' ' Keyword.Declaration +'db' Keyword.Declaration +' ' Text +'?' Name.Variable +'\n' Text + +' ' Text +'y' Name.Constant +' ' Keyword.Declaration +'db' Keyword.Declaration +' ' Text +'?' Name.Variable +'\n' Text + +'ENDS' Keyword +'\n\n' Text + +'CODESEG' Keyword +' ' Text +'\n\n' Text + +'PROC' Keyword +' ' Text +'getPath' Name.Variable +'\n' Text + +' ' Text +'USES' Keyword +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'ARG' Keyword +' ' Text +'@@tgtx' Name.Variable +':' Punctuation +'dword' Keyword.Type +',' Punctuation +' ' Text +'\\\n' Text + +' ' Text +'@@tgty' Name.Variable +':' Punctuation +'dword' Keyword.Type +' ' Text +'\\\n' Text + +' ' Text +'RETURNS' Name.Variable +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'ebx' Name.Builtin +' ' Text +'; eax contains x, ebx contains y' Comment.Single +'\n\n' Text + +' ' Text +'call' Name.Function +' ' Text +'getLevelWidth' Name.Variable +'\n' Text + +' ' Text +'imul' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@tgty' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'add' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@tgtx' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'imul' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'SI' Name.Builtin +'ZE' Name.Variable +' ' Text +'TField' Name.Variable +'\n' Text + +' ' Text +'add' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'offset' Name.Variable +' ' Text +'backtraceGraph' Name.Variable +' ' Text +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'eax' Name.Builtin +'\n\n' Text + +' ' Text +'xor' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'eax' Name.Builtin +'\n' Text + +' ' Text +'xor' Name.Function +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ebx' Name.Builtin +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'al' Name.Builtin +',' Punctuation +' ' Text +'[(' Punctuation +'TField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'ecx' Name.Builtin +')' Punctuation +'.x' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'bl' Name.Builtin +',' Punctuation +' ' Text +'[(' Punctuation +'TField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'ecx' Name.Builtin +')' Punctuation +'.y' Name.Variable +']' Punctuation +'\n\n' Text + +' ' Text +'ret' Name.Function +'\n' Text + +'ENDP' Keyword +' ' Text +'getPath' Name.Variable +'\n\n' Text + +'PROC' Keyword +' ' Text +'findPath' Name.Variable +'\n' Text + +' ' Text +'; eax will contain a 1 when a path has been found' Comment.Single +'\n' Text + +' ' Text +'; 0 otherwise.' Comment.Single +'\n' Text + +' ' Text +'ARG' Keyword +' ' Text +'@@srcx' Name.Variable +':' Punctuation +'dword' Keyword.Type +',' Punctuation +' ' Text +'\\\n' Text + +' ' Text +'@@srcy' Name.Variable +':' Punctuation +'dword' Keyword.Type +',' Punctuation +' ' Text +'\\\n' Text + +' ' Text +'@@tgtx' Name.Variable +':' Punctuation +'dword' Keyword.Type +',' Punctuation +' ' Text +'\\\n' Text + +' ' Text +'@@tgty' Name.Variable +':' Punctuation +'dword' Keyword.Type +',' Punctuation +' ' Text +'\\\n' Text + +' ' Text +'@@type' Name.Variable +':' Punctuation +'dword' Keyword.Type +' ' Text +'\\\n' Text + +' ' Text +'RETURNS' Name.Variable +' ' Text +'eax' Name.Builtin +'\n\n' Text + +' ' Text +'; Check whether the target field is "allowed" for' Comment.Single +'\n' Text + +' ' Text +'; the selected vehicle or rock raider' Comment.Single +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'getField' Name.Variable +',' Punctuation +' ' Text +'[' Punctuation +'@@tgtx' Name.Variable +'],' Punctuation +' ' Text +'[' Punctuation +'@@tgty' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'al' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'byte' Keyword.Type +' ' Text +'ptr' Name.Variable +' ' Text +'eax' Name.Builtin +']' Punctuation +'\n' Text + +' ' Text +'and' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'0FFh' Literal.Number.Hex +'\n\n' Text + +' ' Text +'add' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'offset' Name.Variable +' ' Text +'actionTable' Name.Variable +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'eax' Name.Builtin +']' Punctuation +'\n' Text + +' ' Text +'and' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@type' Name.Variable +']' Punctuation +' ' Text +'; TODO: for now, rock raider is hard coded' Comment.Single +'\n' Text + +' ' Text +'jnz' Name.Function +' ' Text +'@canGoToTarget' Name.Variable +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'0' Literal.Number.Integer +'\n' Text + +' ' Text +'ret' Name.Function +'\n' Text + +'@canGoToTarget:' Name.Label +'\n' Text + +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'cl' Name.Builtin +'eanData' Name.Variable +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@type' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[' Punctuation +'currentType' Name.Variable +'],' Punctuation +' ' Text +'eax' Name.Builtin +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@srcx' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[' Punctuation +'currentOpen.x' Name.Variable +'],' Punctuation +' ' Text +'al' Name.Builtin +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@srcy' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[' Punctuation +'currentOpen.y' Name.Variable +'],' Punctuation +' ' Text +'al' Name.Builtin +'\n\n' Text + +' ' Text +'call' Name.Function +' ' Text +'di' Name.Builtin +'stance' Name.Variable +',' Punctuation +' ' Text +'[' Punctuation +'@@srcx' Name.Variable +'],' Punctuation +' ' Text +'[' Punctuation +'@@srcy' Name.Variable +'],' Punctuation +' ' Text +'[' Punctuation +'@@tgtx' Name.Variable +'],' Punctuation +' ' Text +'[' Punctuation +'@@tgty' Name.Variable +']' Punctuation +' ' Text +'\n' Text + +' ' Text +'; eax <- distance' Comment.Single +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'addOpen' Name.Variable +',' Punctuation +' ' Text +'[' Punctuation +'@@srcx' Name.Variable +'],' Punctuation +' ' Text +'[' Punctuation +'@@srcy' Name.Variable +'],' Punctuation +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'0' Literal.Number.Integer +'\n\n' Text + +'@openListNotEmpty:' Name.Label +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'popOpen' Name.Variable +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'0' Literal.Number.Integer +'\n' Text + +' ' Text +'je' Name.Function +' ' Text +'@openListEmpty' Name.Variable +'\n\n' Text + +' ' Text +'call' Name.Function +' ' Text +'addToMap' Name.Variable +'\n\n' Text + +' ' Text +'call' Name.Function +' ' Text +'addClosed' Name.Variable +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@tgtx' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'[' Punctuation +'currentOpen.x' Name.Variable +'],' Punctuation +' ' Text +'al' Name.Builtin +'\n' Text + +' ' Text +'jne' Name.Function +' ' Text +'@nextOpen' Name.Variable +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@tgty' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'[' Punctuation +'currentOpen.y' Name.Variable +'],' Punctuation +' ' Text +'al' Name.Builtin +'\n' Text + +' ' Text +'jne' Name.Function +' ' Text +'@nextOpen' Name.Variable +'\n\n' Text + +' ' Text +'jmp' Name.Function +' ' Text +'@routeFound' Name.Variable +'\n\n' Text + +' ' Text +'@nextOpen:' Name.Label +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'addNeighbours' Name.Variable +',' Punctuation +' ' Text +'[' Punctuation +'@@tgtx' Name.Variable +'],' Punctuation +' ' Text +'[' Punctuation +'@@tgty' Name.Variable +']' Punctuation +'\n\n' Text + +' ' Text +'jmp' Name.Function +' ' Text +'@openListNotEmpty' Name.Variable +'\n\n' Text + +'@openListEmpty:' Name.Label +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'0' Literal.Number.Integer +'\n' Text + +' ' Text +'ret' Name.Function +'\n\n' Text + +'@routeFound:' Name.Label +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'1' Literal.Number.Integer +'\n' Text + +' ' Text +'ret' Name.Function +'\n' Text + +'ENDP' Keyword +' ' Text +'findPath' Name.Variable +'\n\n' Text + +'PROC' Keyword +' ' Text +'addToMap' Name.Variable +'\n' Text + +' ' Text +'USES' Keyword +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +'\n\n' Text + +' ' Text +'call' Name.Function +' ' Text +'getLevelWidth' Name.Variable +'\n' Text + +' ' Text +'xor' Name.Function +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'cl' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'currentOpen.y' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'imul' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'cl' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'currentOpen.x' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'add' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'imul' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'SI' Name.Builtin +'ZE' Name.Variable +' ' Text +'TField' Name.Variable +'\n' Text + +' ' Text +'add' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'offset' Name.Variable +' ' Text +'backtraceGraph' Name.Variable +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'currentOpen.distance' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'[(' Punctuation +'TField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'eax' Name.Builtin +')' Punctuation +'.distance' Name.Variable +'],' Punctuation +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'jbe' Name.Function +' ' Text +'@dontAdd' Name.Variable +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[(' Punctuation +'TField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'eax' Name.Builtin +')' Punctuation +'.distance' Name.Variable +'],' Punctuation +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'cl' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'currentOpen.fromx' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[(' Punctuation +'TField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'eax' Name.Builtin +')' Punctuation +'.x' Name.Variable +'],' Punctuation +' ' Text +'cl' Name.Builtin +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'cl' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'currentOpen.fromy' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[(' Punctuation +'TField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'eax' Name.Builtin +')' Punctuation +'.y' Name.Variable +'],' Punctuation +' ' Text +'cl' Name.Builtin +'\n\n' Text + +'@dontAdd:' Name.Label +'\n' Text + +' ' Text +'ret' Name.Function +'\n' Text + +'ENDP' Keyword +' ' Text +'addToMap' Name.Variable +'\n\n' Text + +'; Is closed checks whether the field considered is "closed" for being added to the open list.' Comment.Single +'\n' Text + +'; So, it also checks whether we can go on the selected field.' Comment.Single +'\n' Text + +'PROC' Keyword +' ' Text +'isClosed' Name.Variable +'\n' Text + +' ' Text +'USES' Keyword +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'edx' Name.Builtin +'\n' Text + +' ' Text +'ARG' Keyword +' ' Text +'@@x' Name.Variable +':' Punctuation +'dword' Keyword.Type +',' Punctuation +' ' Text +'\\\n' Text + +' ' Text +'@@y' Name.Variable +':' Punctuation +'dword' Keyword.Type +' ' Text +'RETURNS' Name.Variable +' ' Text +'eax' Name.Builtin +'\n\n' Text + +' ' Text +'; Check bounds first:' Comment.Single +'\n' Text + +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'getLevelWidth' Name.Variable +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'[' Punctuation +'@@x' Name.Variable +'],' Punctuation +' ' Text +'eax' Name.Builtin +'\n' Text + +' ' Text +'ja' Name.Function +' ' Text +'notWithinBounds' Name.Variable +' ' Text +'; ja considers -1 > 10' Comment.Single +'\n\n' Text + +' ' Text +'call' Name.Function +' ' Text +'getLevelHeight' Name.Variable +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'[' Punctuation +'@@y' Name.Variable +'],' Punctuation +' ' Text +'eax' Name.Builtin +'\n' Text + +' ' Text +'ja' Name.Function +' ' Text +'notWithinBounds' Name.Variable +'\n\n' Text + +' ' Text +'; Check whether this field is "allowed" for' Comment.Single +'\n' Text + +' ' Text +'; the selected vehicle or rock raider' Comment.Single +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'getField' Name.Variable +',' Punctuation +' ' Text +'[' Punctuation +'@@x' Name.Variable +'],' Punctuation +' ' Text +'[' Punctuation +'@@y' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'al' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'byte' Keyword.Type +' ' Text +'ptr' Name.Variable +' ' Text +'eax' Name.Builtin +']' Punctuation +'\n' Text + +' ' Text +'and' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'0FFh' Literal.Number.Hex +'\n\n' Text + +' ' Text +'add' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'offset' Name.Variable +' ' Text +'actionTable' Name.Variable +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'eax' Name.Builtin +']' Punctuation +'\n' Text + +' ' Text +'and' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'currentType' Name.Variable +']' Punctuation +' ' Text +'; TODO: for now, rock raider is hard coded' Comment.Single +'\n' Text + +' ' Text +'jnz' Name.Function +' ' Text +'@canGoHere' Name.Variable +'\n\n\n' Text + +' ' Text +'inc' Name.Function +' ' Text +'eax' Name.Builtin +' ' Text +'; mov eax, 1' Comment.Single +'\n' Text + +' ' Text +'ret' Name.Function +'\n\n' Text + +'@canGoHere:' Name.Label +'\n' Text + +' ' Text +'\n' Text + +' ' Text +'; Getting here means the field is okay to walk/fly/whatever on' Comment.Single +'\n' Text + +'\n' Text + +' ' Text +'xor' Name.Function +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'cx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'cl' Name.Builtin +'osedlistSize' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'cx' Name.Builtin +',' Punctuation +' ' Text +'0' Literal.Number.Integer +' ' Text +'; If empty, return 0' Comment.Single +'\n' Text + +' ' Text +'jne' Name.Function +' ' Text +'@closedNotEmpty' Name.Variable +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'0' Literal.Number.Integer +'\n' Text + +' ' Text +'ret' Name.Function +'\n\n' Text + +'@closedNotEmpty:' Name.Label +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'offset' Name.Variable +' ' Text +'cl' Name.Builtin +'osedlist' Name.Variable +'\n\n' Text + +'@loopClosed:' Name.Label +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'edx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@x' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'[(' Punctuation +'TField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'ebx' Name.Builtin +')' Punctuation +'.x' Name.Variable +'],' Punctuation +' ' Text +'dl' Name.Builtin +'\n' Text + +' ' Text +'jne' Name.Function +' ' Text +'@nextClosed' Name.Variable +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'edx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@y' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'[(' Punctuation +'TField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'ebx' Name.Builtin +')' Punctuation +'.y' Name.Variable +'],' Punctuation +' ' Text +'dl' Name.Builtin +'\n' Text + +' ' Text +'jne' Name.Function +' ' Text +'@nextClosed' Name.Variable +'\n\n' Text + +' ' Text +'; If reached here, yep, contained in closed list' Comment.Single +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'1' Literal.Number.Integer +'\n' Text + +' ' Text +'ret' Name.Function +'\n\n' Text + +' ' Text +'@nextClosed:' Name.Label +'\n' Text + +' ' Text +'add' Name.Function +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'SI' Name.Builtin +'ZE' Name.Variable +' ' Text +'TField' Name.Variable +'\n' Text + +' ' Text +'dec' Name.Function +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'jnz' Name.Function +' ' Text +'@loopClosed' Name.Variable +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'0' Literal.Number.Integer +'\n' Text + +' ' Text +'ret' Name.Function +'\n\n' Text + +'notWithinBounds:' Name.Label +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'1' Literal.Number.Integer +'\n' Text + +' ' Text +'ret' Name.Function +'\n' Text + +'ENDP' Keyword +' ' Text +'isClosed' Name.Variable +'\n\n' Text + +'PROC' Keyword +' ' Text +'addNeighbours' Name.Variable +'\n' Text + +' ' Text +'USES' Keyword +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'edx' Name.Builtin +'\n' Text + +' ' Text +'ARG' Keyword +' ' Text +'@@tgtx' Name.Variable +':' Punctuation +'dword' Keyword.Type +',' Punctuation +' ' Text +'\\\n' Text + +' ' Text +'@@tgty' Name.Variable +':' Punctuation +'dword' Keyword.Type +'\n' Text + +' ' Text +'; Push all neighbours of currentOpen on openList' Comment.Single +'\n' Text + +'\n' Text + +' ' Text +'xor' Name.Function +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ebx' Name.Builtin +'\n' Text + +' ' Text +'xor' Name.Function +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'bl' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'currentOpen.x' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'cl' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'currentOpen.y' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'edx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'currentOpen.distance' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'inc' Name.Function +' ' Text +'edx' Name.Builtin +' ' Text +'; Next distance is one more.' Comment.Single +'\n\n' Text + +' ' Text +'; Up' Comment.Single +'\n' Text + +' ' Text +'dec' Name.Function +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'isClosed' Name.Variable +',' Punctuation +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'0' Literal.Number.Integer +'\n' Text + +' ' Text +'jne' Name.Function +' ' Text +'@noUp' Name.Variable +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'di' Name.Builtin +'stance' Name.Variable +',' Punctuation +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@tgtx' Name.Variable +'],' Punctuation +' ' Text +'[' Punctuation +'@@tgty' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'add' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'edx' Name.Builtin +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'addOpen' Name.Variable +',' Punctuation +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'edx' Name.Builtin +'\n' Text + +' ' Text +'@noUp:' Name.Label +'\n' Text + +' ' Text +'inc' Name.Function +' ' Text +'ecx' Name.Builtin +'\n\n' Text + +' ' Text +'; Right' Comment.Single +'\n' Text + +' ' Text +'inc' Name.Function +' ' Text +'ebx' Name.Builtin +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'isClosed' Name.Variable +',' Punctuation +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'0' Literal.Number.Integer +'\n' Text + +' ' Text +'jne' Name.Function +' ' Text +'@noRight' Name.Variable +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'di' Name.Builtin +'stance' Name.Variable +',' Punctuation +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@tgtx' Name.Variable +'],' Punctuation +' ' Text +'[' Punctuation +'@@tgty' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'add' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'edx' Name.Builtin +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'addOpen' Name.Variable +',' Punctuation +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'edx' Name.Builtin +'\n' Text + +' ' Text +'@noRight:' Name.Label +'\n' Text + +' ' Text +'dec' Name.Function +' ' Text +'ebx' Name.Builtin +'\n\n' Text + +' ' Text +'; Left' Comment.Single +'\n' Text + +' ' Text +'dec' Name.Function +' ' Text +'ebx' Name.Builtin +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'isClosed' Name.Variable +',' Punctuation +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'0' Literal.Number.Integer +'\n' Text + +' ' Text +'jne' Name.Function +' ' Text +'@noLeft' Name.Variable +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'di' Name.Builtin +'stance' Name.Variable +',' Punctuation +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@tgtx' Name.Variable +'],' Punctuation +' ' Text +'[' Punctuation +'@@tgty' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'add' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'edx' Name.Builtin +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'addOpen' Name.Variable +',' Punctuation +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'edx' Name.Builtin +'\n' Text + +' ' Text +'@noLeft:' Name.Label +'\n' Text + +' ' Text +'inc' Name.Function +' ' Text +'ebx' Name.Builtin +'\n\n' Text + +' ' Text +'; Down' Comment.Single +'\n' Text + +' ' Text +'inc' Name.Function +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'isClosed' Name.Variable +',' Punctuation +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'0' Literal.Number.Integer +'\n' Text + +' ' Text +'jne' Name.Function +' ' Text +'@noDown' Name.Variable +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'di' Name.Builtin +'stance' Name.Variable +',' Punctuation +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@tgtx' Name.Variable +'],' Punctuation +' ' Text +'[' Punctuation +'@@tgty' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'add' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'edx' Name.Builtin +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'addOpen' Name.Variable +',' Punctuation +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'edx' Name.Builtin +'\n' Text + +' ' Text +'@noDown:' Name.Label +'\n' Text + +' ' Text +'dec' Name.Function +' ' Text +'ecx' Name.Builtin +'\n\n' Text + +' ' Text +'ret' Name.Function +'\n' Text + +'ENDP' Keyword +' ' Text +'addNeighbours' Name.Variable +'\n\n' Text + +'PROC' Keyword +' ' Text +'popOpen' Name.Variable +'\n' Text + +' ' Text +'ARG' Keyword +' ' Text +'RETURNS' Name.Variable +' ' Text +'eax' Name.Builtin +'\n' Text + +' ' Text +'USES' Keyword +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'edx' Name.Builtin +',' Punctuation +' ' Text +'esi' Name.Builtin +',' Punctuation +' ' Text +'edi' Name.Builtin +'\n' Text + +' ' Text +'; eax contains the smallest current heuristic' Comment.Single +'\n' Text + +' ' Text +'; ebx contains the index of that field' Comment.Single +'\n' Text + +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'[' Punctuation +'openlistSize' Name.Variable +'],' Punctuation +' ' Text +'0' Literal.Number.Integer +' ' Text +'; If empty, return 0' Comment.Single +'\n' Text + +' ' Text +'jne' Name.Function +' ' Text +'@goForth' Name.Variable +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'0' Literal.Number.Integer +'\n' Text + +' ' Text +'ret' Name.Function +'\n\n' Text + +'@goForth:' Name.Label +'\n' Text + +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'0FFFFFFFFh' Literal.Number.Hex +' ' Text +'; Longest distance possible in 32 bits.' Comment.Single +'\n' Text + +' ' Text +'xor' Name.Function +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ebx' Name.Builtin +'\n' Text + +' ' Text +'xor' Name.Function +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +' ' Text +'; ecx contains the current index' Comment.Single +'\n\n' Text + +'@searchFurther:' Name.Label +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'edx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'imul' Name.Function +' ' Text +'edx' Name.Builtin +',' Punctuation +' ' Text +'SI' Name.Builtin +'ZE' Name.Variable +' ' Text +'TPriorityField' Name.Variable +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'[(' Punctuation +'TPriorityField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'(' Punctuation +'openlist' Name.Variable +' ' Text +'+' Operator +' ' Text +'edx' Name.Builtin +'))' Punctuation +'.heuristic' Name.Variable +'],' Punctuation +' ' Text +'eax' Name.Builtin +'\n' Text + +' ' Text +'ja' Name.Function +' ' Text +'@notBetter' Name.Variable +'\n' Text + +' ' Text +'; Better guess found, put right values in eax and ebx' Comment.Single +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'[(' Punctuation +'TPriorityField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'(' Punctuation +'openlist' Name.Variable +' ' Text +'+' Operator +' ' Text +'edx' Name.Builtin +'))' Punctuation +'.heuristic' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +'\n\n' Text + +'@notBetter:' Name.Label +'\n' Text + +'\n' Text + +' ' Text +'inc' Name.Function +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'cx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'openlistSize' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'jne' Name.Function +' ' Text +'@searchFurther' Name.Variable +'\n\n' Text + +' ' Text +'; By now, we have found the right item to pop from the priorityqueue.' Comment.Single +'\n' Text + +'\n' Text + +' ' Text +'; Move the correct item in currentOpen' Comment.Single +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'SI' Name.Builtin +'ZE' Name.Variable +' ' Text +'TPriorityField' Name.Variable +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'esi' Name.Builtin +',' Punctuation +' ' Text +'ebx' Name.Builtin +'\n' Text + +' ' Text +'imul' Name.Function +' ' Text +'esi' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'add' Name.Function +' ' Text +'esi' Name.Builtin +',' Punctuation +' ' Text +'offset' Name.Variable +' ' Text +'openlist' Name.Variable +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'edi' Name.Builtin +',' Punctuation +' ' Text +'offset' Name.Variable +' ' Text +'currentOpen' Name.Variable +'\n' Text + +' ' Text +'rep' Name.Function +' ' Text +'movsb' Name.Variable +'\n\n' Text + +' ' Text +'; Now make the remove the thing from the vector' Comment.Single +'\n' Text + +'\n' Text + +' ' Text +'xor' Name.Function +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'cx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'openlistSize' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'sub' Name.Function +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'ebx' Name.Builtin +'\n' Text + +' ' Text +'dec' Name.Function +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'imul' Name.Function +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'SI' Name.Builtin +'ZE' Name.Variable +' ' Text +'TPriorityField' Name.Variable +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'edi' Name.Builtin +',' Punctuation +' ' Text +'esi' Name.Builtin +'\n' Text + +' ' Text +'sub' Name.Function +' ' Text +'edi' Name.Builtin +',' Punctuation +' ' Text +'SI' Name.Builtin +'ZE' Name.Variable +' ' Text +'TPriorityField' Name.Variable +'\n' Text + +' ' Text +'rep' Name.Function +' ' Text +'movsb' Name.Variable +'\n\n' Text + +' ' Text +'dec' Name.Function +' ' Text +'[' Punctuation +'openlistSize' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'1' Literal.Number.Integer +'\n' Text + +' ' Text +'ret' Name.Function +'\n' Text + +'ENDP' Keyword +' ' Text +'popOpen' Name.Variable +'\n\n' Text + +'PROC' Keyword +' ' Text +'addClosed' Name.Variable +'\n' Text + +' ' Text +'USES' Keyword +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'ebx' Name.Builtin +'\n\n' Text + +' ' Text +'xor' Name.Function +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'ebx' Name.Builtin +'\n' Text + +' ' Text +'xor' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'eax' Name.Builtin +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'bx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'cl' Name.Builtin +'osedlistSize' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'imul' Name.Function +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'SI' Name.Builtin +'ZE' Name.Variable +' ' Text +'TField' Name.Variable +' ' Text +'\n' Text + +' ' Text +'add' Name.Function +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'offset' Name.Variable +' ' Text +'cl' Name.Builtin +'osedlist' Name.Variable +' ' Text +'; ebx contains the target TField' Comment.Single +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'al' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'currentOpen.x' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[(' Punctuation +'TField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'ebx' Name.Builtin +')' Punctuation +'.x' Name.Variable +'],' Punctuation +' ' Text +'al' Name.Builtin +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'al' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'currentOpen.y' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[(' Punctuation +'TField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'ebx' Name.Builtin +')' Punctuation +'.y' Name.Variable +'],' Punctuation +' ' Text +'al' Name.Builtin +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'currentOpen.distance' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[(' Punctuation +'TField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'ebx' Name.Builtin +')' Punctuation +'.distance' Name.Variable +'],' Punctuation +' ' Text +'eax' Name.Builtin +'\n\n' Text + +' ' Text +'inc' Name.Function +' ' Text +'[' Punctuation +'cl' Name.Builtin +'osedlistSize' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'[' Punctuation +'cl' Name.Builtin +'osedlistSize' Name.Variable +'],' Punctuation +' ' Text +'CL' Name.Builtin +'OSED_LIST_SIZE_MAX' Name.Variable +'\n' Text + +' ' Text +'jne' Name.Function +' ' Text +'@noProblemWithClosedVector' Name.Variable +'\n\n' Text + +' ' Text +'xor' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'eax' Name.Builtin +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'ax' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'cl' Name.Builtin +'osedlistSize' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'crash' Name.Variable +',' Punctuation +' ' Text +'offset' Name.Variable +' ' Text +'cl' Name.Builtin +'osedOutOfMemory' Name.Variable +',' Punctuation +' ' Text +'eax' Name.Builtin +'\n\n' Text + +'@noProblemWithClosedVector:' Name.Label +'\n' Text + +' ' Text +'ret' Name.Function +'\n' Text + +'ENDP' Keyword +' ' Text +'addClosed' Name.Variable +'\n\n' Text + +'PROC' Keyword +' ' Text +'addOpen' Name.Variable +'\n' Text + +' ' Text +'USES' Keyword +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'ebx' Name.Builtin +'\n' Text + +' ' Text +'ARG' Keyword +' ' Text +'@@x' Name.Variable +':' Punctuation +'dword' Keyword.Type +',' Punctuation +' ' Text +'\\\n' Text + +' ' Text +'@@y' Name.Variable +':' Punctuation +'dword' Keyword.Type +',' Punctuation +' ' Text +'\\\n' Text + +' ' Text +'@@priority' Name.Variable +':' Punctuation +'dword' Keyword.Type +',' Punctuation +' ' Text +'\\\n' Text + +' ' Text +'@@distance' Name.Variable +':' Punctuation +'dword' Keyword.Type +'\n\n' Text + +' ' Text +'xor' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'eax' Name.Builtin +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'ax' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'openlistSize' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'imul' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'SI' Name.Builtin +'ZE' Name.Variable +' ' Text +'TPriorityField' Name.Variable +'\n' Text + +' ' Text +'add' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'offset' Name.Variable +' ' Text +'openlist' Name.Variable +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@x' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[(' Punctuation +'TPriorityField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'eax' Name.Builtin +')' Punctuation +'.x' Name.Variable +'],' Punctuation +' ' Text +'bl' Name.Builtin +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@y' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[(' Punctuation +'TPriorityField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'eax' Name.Builtin +')' Punctuation +'.y' Name.Variable +'],' Punctuation +' ' Text +'bl' Name.Builtin +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'bl' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'currentOpen.x' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[(' Punctuation +'TPriorityField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'eax' Name.Builtin +')' Punctuation +'.fromx' Name.Variable +'],' Punctuation +' ' Text +'bl' Name.Builtin +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'bl' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'currentOpen.y' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[(' Punctuation +'TPriorityField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'eax' Name.Builtin +')' Punctuation +'.fromy' Name.Variable +'],' Punctuation +' ' Text +'bl' Name.Builtin +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@priority' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[(' Punctuation +'TPriorityField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'eax' Name.Builtin +')' Punctuation +'.heuristic' Name.Variable +'],' Punctuation +' ' Text +'ebx' Name.Builtin +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@distance' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[(' Punctuation +'TPriorityField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'eax' Name.Builtin +')' Punctuation +'.distance' Name.Variable +'],' Punctuation +' ' Text +'ebx' Name.Builtin +'\n\n' Text + +' ' Text +'inc' Name.Function +' ' Text +'[' Punctuation +'openlistSize' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'cmp' Name.Function +' ' Text +'[' Punctuation +'openlistSize' Name.Variable +'],' Punctuation +' ' Text +'OPEN_LIST_SIZE_MAX' Name.Variable +'\n' Text + +' ' Text +'jne' Name.Function +' ' Text +'@noProblem' Name.Variable +'\n\n' Text + +' ' Text +'xor' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'eax' Name.Builtin +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'ax' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'openlistSize' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'crash' Name.Variable +',' Punctuation +' ' Text +'offset' Name.Variable +' ' Text +'openOutOfMemory' Name.Variable +',' Punctuation +' ' Text +'eax' Name.Builtin +'\n\n' Text + +'@noProblem:' Name.Label +'\n' Text + +' ' Text +'ret' Name.Function +'\n' Text + +'ENDP' Keyword +'\n\n' Text + +'PROC' Keyword +' ' Text +'di' Name.Builtin +'stance' Name.Variable +'\n' Text + +' ' Text +'USES' Keyword +' ' Text +'ebx' Name.Builtin +'\n' Text + +' ' Text +'ARG' Keyword +' ' Text +'@@srcx' Name.Variable +':' Punctuation +'dword' Keyword.Type +',' Punctuation +' ' Text +'\\\n' Text + +' ' Text +'@@srcy' Name.Variable +':' Punctuation +'dword' Keyword.Type +',' Punctuation +' ' Text +'\\\n' Text + +' ' Text +'@@tgtx' Name.Variable +':' Punctuation +'dword' Keyword.Type +',' Punctuation +' ' Text +'\\\n' Text + +' ' Text +'@@tgty' Name.Variable +':' Punctuation +'dword' Keyword.Type +' ' Text +'\\\n' Text + +' ' Text +'RETURNS' Name.Variable +' ' Text +'eax' Name.Builtin +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@srcx' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'sub' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@tgtx' Name.Variable +']' Punctuation +'\n\n' Text + +' ' Text +'jns' Name.Function +' ' Text +'@noSignChangex' Name.Variable +'\n' Text + +' ' Text +'neg' Name.Function +' ' Text +'eax' Name.Builtin +'\n\n' Text + +' ' Text +'@noSignChangex:' Name.Label +'\n' Text + +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@srcy' Name.Variable +']' Punctuation +'\n' Text + +' ' Text +'sub' Name.Function +' ' Text +'ebx' Name.Builtin +',' Punctuation +' ' Text +'[' Punctuation +'@@tgty' Name.Variable +']' Punctuation +'\n\n' Text + +' ' Text +'jns' Name.Function +' ' Text +'@noSignChangey' Name.Variable +'\n' Text + +' ' Text +'neg' Name.Function +' ' Text +'ebx' Name.Builtin +'\n\n' Text + +' ' Text +'@noSignChangey:' Name.Label +'\n' Text + +' ' Text +'add' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'ebx' Name.Builtin +'\n' Text + +' ' Text +'ret' Name.Function +'\n' Text + +'ENDP' Keyword +' ' Text +'di' Name.Builtin +'stance' Name.Variable +'\n\n' Text + +'PROC' Keyword +' ' Text +'cl' Name.Builtin +'eanData' Name.Variable +'\n' Text + +' ' Text +'USES' Keyword +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[' Punctuation +'openlistSize' Name.Variable +'],' Punctuation +' ' Text +'0' Literal.Number.Integer +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[' Punctuation +'cl' Name.Builtin +'osedlistSize' Name.Variable +'],' Punctuation +' ' Text +'0' Literal.Number.Integer +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[' Punctuation +'currentOpen.x' Name.Variable +'],' Punctuation +' ' Text +'-' Operator +'1' Literal.Number.Integer +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[' Punctuation +'currentOpen.y' Name.Variable +'],' Punctuation +' ' Text +'-' Operator +'1' Literal.Number.Integer +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[' Punctuation +'currentOpen.distance' Name.Variable +'],' Punctuation +' ' Text +'0' Literal.Number.Integer +'\n\n' Text + +' ' Text +'call' Name.Function +' ' Text +'getLevelWidth' Name.Variable +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'eax' Name.Builtin +'\n' Text + +' ' Text +'call' Name.Function +' ' Text +'getLevelHeight' Name.Variable +'\n' Text + +' ' Text +'imul' Name.Function +' ' Text +'ecx' Name.Builtin +',' Punctuation +' ' Text +'eax' Name.Builtin +'\n\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'offset' Name.Variable +' ' Text +'backtraceGraph' Name.Variable +'\n' Text + +'@fieldIter:' Name.Label +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[(' Punctuation +'TField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'eax' Name.Builtin +')' Punctuation +'.distance' Name.Variable +'],' Punctuation +' ' Text +'0ffffffffh' Literal.Number.Hex +' ' Text +'; Set to approximately +inf' Comment.Single +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[(' Punctuation +'TField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'eax' Name.Builtin +')' Punctuation +'.x' Name.Variable +'],' Punctuation +' ' Text +'0' Literal.Number.Integer +'\n' Text + +' ' Text +'mov' Name.Function +' ' Text +'[(' Punctuation +'TField' Name.Variable +' ' Text +'ptr' Name.Variable +' ' Text +'eax' Name.Builtin +')' Punctuation +'.y' Name.Variable +'],' Punctuation +' ' Text +'0' Literal.Number.Integer +'\n' Text + +' ' Text +'add' Name.Function +' ' Text +'eax' Name.Builtin +',' Punctuation +' ' Text +'SI' Name.Builtin +'ZE' Name.Variable +' ' Text +'TField' Name.Variable +'\n' Text + +' ' Text +'dec' Name.Function +' ' Text +'ecx' Name.Builtin +'\n' Text + +' ' Text +'jnz' Name.Function +' ' Text +'@fieldIter' Name.Variable +'\n\n' Text + +' ' Text +'ret' Name.Function +'\n' Text + +'ENDP' Keyword +' ' Text +'cl' Name.Builtin +'eanData' Name.Variable +'\n\n' Text + +'DATASEG' Keyword +'\n\n' Text + +'openOutOfMemory' Name.Constant +' ' Keyword.Declaration +'db' Keyword.Declaration +' ' Text +'"Out of openlistSize memory. Hi dev: Please increase$"' Literal.String +'\n' Text + +'closedOutOfMemory' Name.Constant +' ' Keyword.Declaration +'db' Keyword.Declaration +' ' Text +'"Out of closedlistSize memory. Hi dev: Please increase$"' Literal.String +'\n\n' Text + +'; power | discover | walking | sailing | flying' Comment.Single +'\n' Text + +'actionTable' Name.Constant +' ' Keyword.Declaration +'db' Keyword.Declaration +' ' Text +'00001101b' Literal.Number.Bin +',' Punctuation +' ' Text +'\\ ' Text +';EMPTY' Comment.Single +'\n' Text + +' ' Text +'00001101b' Literal.Number.Bin +',' Punctuation +' ' Text +'\\ ' Text +';RUBBLE' Comment.Single +'\n' Text + +' ' Text +'00000000b' Literal.Number.Bin +',' Punctuation +' ' Text +'\\ ' Text +';GRAVEL' Comment.Single +'\n' Text + +' ' Text +'00000000b' Literal.Number.Bin +',' Punctuation +' ' Text +'\\ ' Text +';LOOSE ROCK' Comment.Single +'\n' Text + +' ' Text +'00000000b' Literal.Number.Bin +',' Punctuation +' ' Text +'\\ ' Text +';HARD ROCK' Comment.Single +'\n' Text + +' ' Text +'00000000b' Literal.Number.Bin +',' Punctuation +' ' Text +'\\ ' Text +';MASSIVE ROCK' Comment.Single +'\n' Text + +' ' Text +'00000000b' Literal.Number.Bin +',' Punctuation +' ' Text +'\\ ' Text +';KRISTAL SOURCE' Comment.Single +'\n' Text + +' ' Text +'00000000b' Literal.Number.Bin +',' Punctuation +' ' Text +'\\ ' Text +';OREROCK' Comment.Single +'\n' Text + +' ' Text +'00001011b' Literal.Number.Bin +',' Punctuation +' ' Text +'\\ ' Text +';WATER' Comment.Single +'\n' Text + +' ' Text +'00001001b' Literal.Number.Bin +',' Punctuation +' ' Text +'\\ ' Text +';LAVA' Comment.Single +'\n' Text + +' ' Text +'00001101b' Literal.Number.Bin +',' Punctuation +' ' Text +'\\ ' Text +';SNAIL HOLE' Comment.Single +'\n' Text + +' ' Text +'00001101b' Literal.Number.Bin +',' Punctuation +' ' Text +'\\ ' Text +';EROSION' Comment.Single +'\n' Text + +' ' Text +'00011101b' Literal.Number.Bin +',' Punctuation +' ' Text +'\\ ' Text +';POWER PATH' Comment.Single +'\n' Text + +' ' Text +'00011101b' Literal.Number.Bin +',' Punctuation +' ' Text +'\\ ' Text +';BUILDING POWER PATH' Comment.Single +'\n' Text + +' ' Text +'00011000b' Literal.Number.Bin +' ' Text +'\\ ' Text +';BUILDING' Comment.Single +'\n' Text + +'\n' Text + +'UDATASEG' Keyword +'\n\n' Text + +'currentType' Name.Constant +' ' Keyword.Declaration +'dd' Keyword.Declaration +' ' Text +'?' Name.Variable +'\n' Text + +'currentOpen' Name.Constant +' ' Keyword.Declaration +'TPriorityField' Keyword.Declaration +' ' Text +'?' Name.Variable +'\n\n' Text + +'openlist' Name.Constant +' ' Keyword.Declaration +'TPriorityField' Keyword.Declaration +' ' Text +'OPEN_LIST_SIZE_MAX' Name.Variable +' ' Text +'dup' Name.Variable +'(' Punctuation +'?' Name.Variable +')' Punctuation +'\n' Text + +'openlistSize' Name.Constant +' ' Keyword.Declaration +'dw' Keyword.Declaration +' ' Text +'?' Name.Variable +'\n' Text + +'closedlist' Name.Constant +' ' Keyword.Declaration +'TField' Keyword.Declaration +' ' Text +'CL' Name.Builtin +'OSED_LIST_SIZE_MAX' Name.Variable +' ' Text +'dup' Name.Variable +'(' Punctuation +'?' Name.Variable +')' Punctuation +'\n' Text + +'closedlistSize' Name.Constant +' ' Keyword.Declaration +'dw' Keyword.Declaration +' ' Text +'?' Name.Variable +'\n' Text + +'backtraceGraph' Name.Constant +' ' Keyword.Declaration +'TField' Keyword.Declaration +' ' Text +'MAX_LEVEL_SIZE' Name.Variable +' ' Text +'dup' Name.Variable +'(' Punctuation +'?' Name.Variable +')' Punctuation +'\n\n' Text + +'END' Keyword +'\n' Text |
