#include <stdint.h> #include <stdio.h> int8_t a,b; int8_t x,y; // номер текущего хода, последний (текущий) вектор, координаты текущей клетки uint32_t buf_size=0x80000; // размер кэширующего буфера в памяти для последующей записи лога на диск uint32_t n; uint8_t res; int main(int argc, char *argv[]) { unsigned char ibuf[buf_size]; FILE *f_in; f_in=fopen("Z:\\TEMP\\ChessKnight.log","rb"); if(f_in==NULL) { printf("No ChessKnight.log\n"); return 1; // exit } uint32_t j=0; // начальная позиция - конь вне доски printf("\nHelp: first - start, last - finish square, other - changing the finish square / ret off\n"); for(;;) { n=fread(ibuf,1,sizeof(ibuf),f_in); if(n==0){break;} for(uint32_t i=0; i<n; i++) { x = ibuf[i]>>4; y = ibuf[i]%16; res = a!=0 && b!=0 && ((x==a+2 && y==b+1) || (x==a+2 && y==b-1) || (x==a-2 && y==b+1) || (x==a-2 && y==b-1) || (x==a+1 && y==b+2) || (x==a+1 && y==b-2) || (x==a-1 && y==b+2) || (x==a-1 && y==b-2)); if(res==0) { printf("\nMove: "); printf(a==0 && b==0 ? " " : "%d%d", a, b); printf(" %d%d Offset: %08xh", x, y, j==0 && i==0 ? 0 : buf_size*j+i-1); } a=x; b=y; } j++; } printf("\nMove: %d%d Finish: last byte\n", a, b); fclose(f_in); return 0; // exit } |