rendered paste body#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <linux/hdreg.h>
typedef struct hd_geometry geometry;
int main(int argc, char** argv)
{
geometry* geom = malloc(sizeof(geometry));
int dev = open(argv[1], O_RDWR|O_SYNC);
ioctl(dev, HDIO_GETGEO, geom);
printf("Cylinders: %d\nHeads: %d\nSectors: %d\n",
geom->cylinders, geom->heads, geom->sectors);
int screen = 80*24;
long long disk = geom->cylinders * geom->sectors * geom->heads;
int sectors_per_block = disk/screen;
int* blank = malloc(128 * sizeof(int));
int it;
for (it = 0; it < 128; it++)
{
blank[it] = 0;
}
int f = 255/geom->heads;
int h = 255;
int c = geom->cylinders/f;
printf("\033[2J");
int i, j, k;
for (i = 0; i < geom->sectors; i++)
{
for (j = 0; j < c; j++)
{
for (k = 0; k < h; k++)
{
unsigned long long loc = ((j * h + k) * geom->sectors) + i;
lseek(dev, loc, SEEK_SET);
write(dev, blank, 512);
unsigned int place = loc/sectors_per_block;
printf("\033[%d;%dH*", place/80, place%80);
printf("\033[24;18HS %d", i);
printf("\033[24;38HC %d", j);
printf("\033[24;58HH %d", k);
fflush(stdout);
}
}
printf("\033[2J");
}
return 0;
}