/* mkBlocks.c written march 15th by ian a. mason @ une */ /* modifed for torus multiplication may 25 */ #include #include #include #include #include #include #include #include "mmlib.h" #define PERMS 0666 int main(int argc, char *argv[]){ int fd[3]; int *a, *b, *c; char path[3][PATH_MAX]; int m, blk, row, col, i; int length; if((argc != 6) || ((fd[0] = creat(argv[1], PERMS)) == -1) || ((fd[1] = creat(argv[2], PERMS)) == -1) || ((fd[2] = creat(argv[3], PERMS)) == -1) || ((m = atoi(argv[4])) <= 0) || ((blk = atoi(argv[5])) <= 0)){ fprintf (stderr, "Usage: %s Apath Bpath Cpath m blk\n", argv[0]); for(i = 0; i < 3; i++){ close(fd[i]); unlink(argv[i+1]); } exit(1); } length = blk * blk; a = (int*)calloc(length, sizeof(int)); b = (int*)calloc(length, sizeof(int)); c = (int*)calloc(length, sizeof(int)); if ((a == NULL) || (b == NULL) || (c == NULL)) { fprintf(stderr, "%s: out of memory!\n", argv[0]); free(a); free(b); free(c); } for(row = 0; row < m; row++) for(col = 0; col < m; col++){ for(i = 0; i < 3; i++){ sprintf(path[i], "%s.%d.%d", argv[i+1], row, col); fd[i] = creat(path[i], PERMS); } init_block(a, b, c, blk, row, col); if(set_block_row(fd[0], blk, 0, 0, 0, length, a) == -1) perror("write of matrix A"); if(set_block_row(fd[1], blk, 0, 0, 0, length, b) == -1) perror("write of matrix B"); if(set_block_row(fd[2], blk, 0, 0, 0, length, c) == -1) perror("write of matrix C"); for(i = 0; i < 3; i++) close(fd[i]); } printf("Done writing files\n"); return 0; }