bristol-universal.cql
; bristol-universal.cql can be downloaded 
here.
; Find all Bristols orthogonal or diagonal.
; Here a front line piece ($front)
; moves to a destination.
; Later, along the same line, a back line piece ($front) follows the
; path of $front, crossing the same squares it does, and landing
; just behind it.
; 
; The results are sorted by the length of the move
; by $back (which must traverse at least 3 squares to be
; included).
cql(input heijden.pgn)
; Step 1: choose our front piece and our back piece
 piece $front in [QRB]
 piece $back in [QRB]
; Step 2: start the maneuver, which will check four positions
 next(
; Position (1) the $front moves.
     move from $front
; Position (2) verify, that after $front moves it hasn't given check
; since those are unthematic
     not check
; Position(s) (3) we just let the $front sit where it is not moving, for any
;    number of moves, giving $back time to maneuver into position
     {not move from $front} *
; Position (4) we are ready for the thematic position. We check 3 things about it:
; (4a) There must be a ray between $back and $front, with all the
; squares between the current position of $front
; and the original position of $front on that ray.
     {ray attack ($back
                  between (origin $front
		           $front)
		  $front)
; (4b) Now we check that $back moves along the ray, to within 1 square of $front
      move from $back to anydirection 1 $front		  
; (4c) Finally, we sort the result by the distance between $back and $front.
; This is done by counting the squares between them
      sort "distance"
        countsquares 3 7
	  between ($back
	           $front)
     } ; end thematic position
     ) ; end next