#include #include #ifndef UNIX #include #endif #include "aplinks.h" #include "disp_ctr.h" int init_sector(unsigned char *fat_buffer[], unsigned char *dir_buffer[], unsigned char *data_buffer[], FAT_RANGE fat_range, DIR_RANGE dir_range, DATA_RANGE data_range, int m_column) { int i, j; int x; int y; int alloc_chk; alloc_chk = 0; for(i = 0; i <= FAT_SIZE_512; i++){ fat_buffer[i] = NULL; } xyc_printf(1, FAT_MAP_Y, 7, "FAT:"); for(i = 0; i <= fat_range.end; i++){ if((fat_buffer[i] = malloc(sizeof(unsigned char) * SECTOR_SIZE)) == NULL){ c_printf(BAD_COLOR, "x"); } else{ for(j = 0; j < SECTOR_SIZE; j++){ *(fat_buffer[i] + j) = 0; } c_printf(ALLOC_COLOR, "."); alloc_chk++; } } *(fat_buffer[0]) = MEDIA_DESC; for(i = 0; i <= DIR_SIZE_512; i++){ dir_buffer[i] = NULL; } xyc_printf(1, DIR_MAP_Y, 7, "DIR:"); for(i = dir_range.start; i <= dir_range.end; i++){ if((dir_buffer[i - dir_range.start] = malloc(sizeof(unsigned char) * SECTOR_SIZE)) == NULL){ c_printf(BAD_COLOR, "x"); } else{ for(j = 0; j < SECTOR_SIZE; j++){ *(dir_buffer[i - dir_range.start] + j) = 0; } c_printf(ALLOC_COLOR, "."); alloc_chk++; } } for(i = 0; i <= DATA_SIZE_512; i++){ data_buffer[i] = NULL; } xyc_printf(1, DATA_MAP_Y, 7, "DATA:(. = %d sector)", SEC_PER_P); for(i = data_range.start; i <= data_range.end; i++){ x = ((i - data_range.start)/ SEC_PER_P) + 1; y = (x - 1) / m_column; x = ((x - 1) % m_column) + 1; if((data_buffer[i - data_range.start] = malloc(sizeof(unsigned char) * SECTOR_SIZE)) == NULL){ xyc_printf(x, DATA_MAP_Y + 1 + y, BAD_COLOR, "x"); } else{ for(j = 0; j < SECTOR_SIZE; j++){ *(data_buffer[i - data_range.start] + j) = 0; } xyc_printf(x, DATA_MAP_Y + 1 + y, ALLOC_COLOR, "."); alloc_chk++; } } puts(""); /* PJ 1990, 6 の P. 17 の近さんの報告により、IOCS が 1 セクタの領域を越えて データにアクセスすることがわかっている。(先人の情報はありがたい) これに、対応するため、Plink system は、1 セクタの内容とその次のセクタの 先頭 1 byte を要求する。 この要求に応えるために、バッファを接続することにした。 DATA セクタ用バッファの最後のセクタの次は、先頭 1 byte だけ領域を確保し、 内容を 0x00 にした。 */ fat_buffer[fat_range.end + 1] = dir_buffer[0]; dir_buffer[dir_range.end - dir_range.start + 1] = data_buffer[0]; /* data_buffer[data_range.end - data_range.start + 1]) */ return alloc_chk; }