summary refs log tree commit diff stats
path: root/lib
Commit message (Collapse)AuthorAgeFilesLines
* Fix net module on Linux.Dominik Picheta2014-08-311-1/+1
|
* more tests greenAraq2014-08-313-32/+32
|
* more stdlib modules workAraq2014-08-313-204/+204
|
* Merge branch 'bigbreak' of https://github.com/Araq/Nimrod into bigbreakAraq2014-08-317-145/+409
|\
| * Added async implementation for smtp module.Dominik Picheta2014-08-311-18/+106
| |
| * Async SSL support.Dominik Picheta2014-08-315-63/+239
| |
| * Case sensitivity fixes for httpclient and sockets module.Dominik Picheta2014-08-312-62/+62
| |
| * s/storeFile/store/Dominik Picheta2014-08-311-2/+2
| |
* | make tests greenAraq2014-08-3111-132/+148
| |
* | prettified re.nim; make some tests greenAraq2014-08-312-77/+81
|/
* prettified some async modulesAraq2014-08-312-83/+83
|
* made some tests greenAraq2014-08-312-20/+20
|
* ENDB compiles againAraq2014-08-313-38/+38
|
* minor improvement for nim prettyAraq2014-08-311-0/+1
|
* Merge branch 'bigbreak' of https://github.com/Araq/Nimrod into bigbreakAraq2014-08-313-59/+59
|\
| * Fixes SSL case sensitive issues.Dominik Picheta2014-08-302-38/+38
| |
| * Case sensitivity fixes for Posix.Dominik Picheta2014-08-302-21/+21
| |
* | fixes #1444Araq2014-08-313-5/+5
|/
* Merge branch 'bigbreak' of https://github.com/Araq/Nimrod into bigbreakAraq2014-08-3013-261/+572
|\
| * Fixed issue with os module in non-unicode mode on Windows.Dominik Picheta2014-08-301-1/+4
| |
| * Ftpclient backwards compatibility fixes.Dominik Picheta2014-08-301-23/+20
| |
| * Winlean and threads case sensitivity fixes.Dominik Picheta2014-08-304-31/+31
| |
| * Case fixes for network modules.Dominik Picheta2014-08-305-126/+129
| |
| * Merge branch 'devel' into bigbreakDominik Picheta2014-08-305-128/+436
| |\ | | | | | | | | | | | | Conflicts: lib/pure/ftpclient.nim
| | * Add asyncftpclient module.Dominik Picheta2014-08-293-14/+315
| | |
| | * Async macro fixes. Added waitFor.Dominik Picheta2014-08-291-7/+17
| | |
| | * Ftpclient module now uses generics.Dominik Picheta2014-08-241-93/+89
| | |
| | * Fixed gcsafe in asynchttpserver module.Dominik Picheta2014-08-211-2/+3
| | |
* | | VM supports math and a few os procsAraq2014-08-301-1/+1
| | |
* | | fixed posix.nimAraq2014-08-301-1/+2
|/ /
* | renamed babelcmd to nimblecmd; config files are now nim.cfg; other renamingsAraq2014-08-291-0/+0
| |
* | posix.nim compiles againAraq2014-08-291-34/+34
| |
* | updated terminal.nimAraq2014-08-291-6/+6
| |
* | made windows.nim compatible with --cs:partialAraq2014-08-291-228/+228
| |
* | renamed Byte to byteAraq2014-08-292-2/+2
| |
* | updated db_sqlite.nimAraq2014-08-292-23/+23
| |
* | updated the compiler to use the new symbol namesAraq2014-08-283-16/+16
| |
* | updated sockets.nimAraq2014-08-281-121/+121
| |
* | udpated osproc.nimAraq2014-08-281-66/+66
| |
* | Nimrod renamed to NimAraq2014-08-2823-90/+90
| |
* | Nimrod renamed to NimAraq2014-08-2856-116/+116
| |
* | updated poly.nimAraq2014-08-282-39/+47
| |
* | updated pegs moduleAraq2014-08-281-38/+38
| |
* | several modules changedAraq2014-08-287-81/+80
| |
* | more modules updatedAraq2014-08-281-3/+3
| |
* | more modules updatedAraq2014-08-282-7/+7
| |
* | more modules updatedAraq2014-08-284-426/+426
| |
* | more modules updatedAraq2014-08-283-62/+62
| |
* | more modules updatedAraq2014-08-282-59/+59
| |
* | more modules updatedAraq2014-08-286-71/+71
| |
n> index-address b:board-address/deref col:integer) (file:file-address-address/deref curr:list-address <- read-file curr:list-address) (col:integer <- add col:integer 1:literal) (loop) } (reply b:board-address) ]) (function read-file [ (default-space:space-address <- new space:literal 30:literal) (cursor:list-address <- next-input) (result:file-address <- new file:literal 8:literal) (row:integer <- copy 0:literal) { begin (done?:boolean <- equal row:integer 8:literal) (break-if done?:boolean) (src:tagged-value-address <- list-value-address cursor:list-address) (dest:square-address <- index-address result:file-address/deref row:integer) (dest:square-address/deref <- get src:tagged-value-address/deref payload:offset) ; unsafe typecast (cursor:list-address <- list-next cursor:list-address) (row:integer <- add row:integer 1:literal) (loop) } (reply result:file-address cursor:list-address) ]) (function print-board [ (default-space:space-address <- new space:literal 30:literal) (b:board-address <- next-input) (row:integer <- copy 7:literal) ; print each row { begin (done?:boolean <- less-than row:integer 0:literal) (break-if done?:boolean) ; print rank number as a legend (rank:integer <- add row:integer 1:literal) (print-primitive rank:integer) (print-primitive ((" | " literal))) ; print each square in the row (col:integer <- copy 0:literal) { begin (done?:boolean <- equal col:integer 8:literal) (break-if done?:boolean) (f:file-address <- index b:board-address/deref col:integer) (s:square <- index f:file-address/deref row:integer) (print-primitive s:square) (print-primitive ((" " literal))) (col:integer <- add col:integer 1:literal) (loop) } (row:integer <- subtract row:integer 1:literal) (cursor-to-next-line) (loop) } ; print file letters as legend (print-primitive ((" +----------------" literal))) (cursor-to-next-line) (print-primitive ((" a b c d e f g h" literal))) (cursor-to-next-line) ]) ;; data structure: move (and-record move [ from:integer-integer-pair to:integer-integer-pair ]) (address move-address (move)) ; todo: assumes stdout is always at raw address 2 (function print [ (default-space:space-address <- new space:literal 30:literal) { begin ; stdout not initialized? skip all prints. (break-if 2:channel-address/raw) (reply) } ; base case prints characters (c:character <- next-input) (x:tagged-value <- save-type c:character) (2:channel-address/raw/deref <- write 2:channel-address/raw x:tagged-value) ]) (function read-move [ (default-space:space-address <- new space:literal 30:literal) (from-file:integer <- read-file) { begin (break-if from-file:integer) (reply nil:literal) } (from-rank:integer <- read-rank) (expect-stdin ((#\- literal))) (to-file:integer <- read-file) (to-rank:integer <- read-rank) ; construct the move object (result:move-address <- new move:literal) (f:integer-integer-pair-address <- get-address result:move-address/deref from:offset) (dest:integer-address <- get-address f:integer-integer-pair-address/deref 0:offset) (dest:integer-address/deref <- copy from-file:integer) (dest:integer-address <- get-address f:integer-integer-pair-address/deref 1:offset) (dest:integer-address/deref <- copy from-rank:integer) (t0:integer-integer-pair-address <- get-address result:move-address/deref to:offset) (dest:integer-address <- get-address t0:integer-integer-pair-address/deref 0:offset) (dest:integer-address/deref <- copy to-file:integer) (dest:integer-address <- get-address t0:integer-integer-pair-address/deref 1:offset) (dest:integer-address/deref <- copy to-rank:integer) (reply result:move-address) ]) ; todo: assumes stdin is always at raw address 1 (function read-file [ (default-space:space-address <- new space:literal 30:literal) (x:tagged-value 1:channel-address/raw/deref <- read 1:channel-address/raw) (a:character <- copy ((#\a literal))) (file-base:integer <- character-to-integer a:character) (c:character <- maybe-coerce x:tagged-value character:literal) (print c:character) { begin (quit:boolean <- equal c:character ((#\q literal))) (break-unless quit:boolean) (reply nil:literal) } (file:integer <- character-to-integer c:character) (file:integer <- subtract file:integer file-base:integer) ; assert('a' <= from-file <= 'h') (above-min:boolean <- greater-or-equal file:integer 0:literal) (assert above-min:boolean (("file too low" literal))) (below-max:boolean <- lesser-or-equal file:integer 7:literal) (assert below-max:boolean (("file too high" literal))) (reply file:integer) ]) (function read-rank [ (default-space:space-address <- new space:literal 30:literal) (x:tagged-value 1:channel-address/raw/deref <- read 1:channel-address/raw) (c:character <- maybe-coerce x:tagged-value character:literal) (print c:character) { begin (quit:boolean <- equal c:character ((#\q literal))) (break-unless quit:boolean) (reply nil:literal) } (rank:integer <- character-to-integer c:character) (one:character <- copy ((#\1 literal))) (rank-base:integer <- character-to-integer one:character) (rank:integer <- subtract rank:integer rank-base:integer) ; assert('1' <= rank <= '8') (above-min:boolean <- greater-or-equal rank:integer 0:literal) (assert above-min:boolean (("rank too low" literal))) (below-max:boolean <- lesser-or-equal rank:integer 7:literal) (assert below-max:boolean (("rank too high" literal))) (reply rank:integer) ]) (function expect-stdin [ (default-space:space-address <- new space:literal 30:literal) ; slurp hyphen (x:tagged-value 1:channel-address/raw/deref <- read 1:channel-address/raw) (c:character <- maybe-coerce x:tagged-value character:literal) (print c:character) (expected:character <- next-input) (match?:boolean <- equal c:character expected:character) (assert match?:boolean (("expected character not found" literal))) ]) (function make-move [ (default-space:space-address <- new space:literal 30:literal) (b:board-address <- next-input) (m:move-address <- next-input) (x:integer-integer-pair <- get m:move-address/deref from:offset) (from-file:integer <- get x:integer-integer-pair 0:offset) (from-rank:integer <- get x:integer-integer-pair 1:offset) (f:file-address <- index b:board-address/deref from-file:integer) (src:square-address <- index-address f:file-address/deref from-rank:integer) (x:integer-integer-pair <- get m:move-address/deref to:offset) (to-file:integer <- get x:integer-integer-pair 0:offset) (to-rank:integer <- get x:integer-integer-pair 1:offset) (f:file-address <- index b:board-address/deref to-file:integer) (dest:square-address <- index-address f:file-address/deref to-rank:integer) (dest:square-address/deref <- copy src:square-address/deref) (src:square-address/deref <- copy _:literal) (reply b:board-address) ]) (function main [ (default-space:space-address <- new space:literal 30:literal) (b:board-address <- read-board) (cursor-mode) ; hook up stdin (1:channel-address/raw <- init-channel 1:literal) (fork-helper send-keys-to-stdin:fn nil:literal/globals nil:literal/limit 1:channel-address/raw) ; hook up stdout (2:channel-address/raw <- init-channel 1:literal) (fork-helper send-prints-to-stdout:fn nil:literal/globals nil:literal/limit 2:channel-address/raw) { begin ; print any stray characters from keyboard *before* clearing screen (flush-stdout) (clear-screen) (print-primitive (("Stupid text-mode chessboard. White pieces in uppercase; black pieces in lowercase. No checking for legal moves." literal))) (cursor-to-next-line) (cursor-to-next-line) (print-board b:board-address) (cursor-to-next-line) (print-primitive (("Type in your move as <from square>-<to square>. For example: 'a2-a4'. Currently very unforgiving of typos; exactly five letters, no <Enter>, no uppercase." literal))) (cursor-to-next-line) (print-primitive (("Hit 'q' to exit." literal))) (cursor-to-next-line) (print-primitive (("move: " literal))) (m:move-address <- read-move) (break-unless m:move-address) (b:board-address <- make-move b:board-address m:move-address) (loop) } (cursor-to-next-line) ]) ; tests todo: ; print board ; accept move ; print move ; board updates on move ; die on invalid move ; 'q' exits ; 'q' exits anywhere in move ; 'q' exits on second move ; flush stdout after printing out move and before clearing screen ; ; backspace, ctrl-u