Ejemplo n.º 1
0
void
addface(Face *f)	/* always adds at 0 */
{
	Face **ofaces;
	Rectangle r0, r1, r;
	int y, nx, ny;

	if(f == nil)
		return;
	if(first != 0){
		first = 0;
		eresized(0);
	}
	findbit(f);

	nx = nacross;
	ny = (nfaces+(nx-1)) / nx;

	lockdisplay(display);
	for(y=ny; y>=0; y--){
		/* move them along */
		r0 = facerect(y*nx+0);
		r1 = facerect(y*nx+1);
		r = r1;
		r.max.x = r.min.x + (nx - 1)*(Facesize+Facesep);
		draw(screen, r, screen, nil, r0.min);
		/* copy one down from row above */
		if(y != 0){
			r = facerect((y-1)*nx+nx-1);
			draw(screen, r0, screen, nil, r.min);
		}
	}

	ofaces = faces;
	faces = emalloc((nfaces+1)*sizeof(Face*));
	memmove(faces+1, ofaces, nfaces*(sizeof(Face*)));
	free(ofaces);
	nfaces++;
	setlast();
	drawarrows();
	faces[0] = f;
	drawface(f, 0);
	flushimage(display, 1);
	unlockdisplay(display);
}
Ejemplo n.º 2
0
void
delface(int j)
{
	Rectangle r0, r1, r;
	int nx, ny, x, y;

	if(j < first)
		first--;
	else if(j < last){
		nx = nacross;
		ny = (nfaces+(nx-1)) / nx;
		x = (j-first)%nx;
		for(y=(j-first)/nx; y<ny; y++){
			if(x != nx-1){
				/* move them along */
				r0 = facerect(y*nx+x);
				r1 = facerect(y*nx+x+1);
				r = r0;
				r.max.x = r.min.x + (nx - x - 1)*(Facesize+Facesep);
				draw(screen, r, screen, nil, r1.min);
			}
			if(y != ny-1){
				/* copy one up from row below */
				r = facerect((y+1)*nx);
				draw(screen, facerect(y*nx+nx-1), screen, nil, r.min);
			}
			x = 0;
		}
		if(last < nfaces)	/* first off-screen becomes visible */
			drawface(faces[last], last-1);
		else{
			/* clear final spot */
			r = facerect(last-first-1);
			draw(screen, r, bgrnd, nil, r.min);
		}
	}
	freeface(faces[j]);
	memmove(faces+j, faces+j+1, (nfaces-(j+1))*sizeof(Face*));
	nfaces--;
	setlast();
	drawarrows();
}
Ejemplo n.º 3
0
//-------------------------------------------
//destructor
derlist::~derlist ( ) 
{
	setfirst ( NULL ); 
	setlast ( NULL ); 
}
Ejemplo n.º 4
0
Archivo: DF.C Proyecto: FDOS/defrag
int main(int argc, char **argv)
{
int fd,i;
char *buffer;
size_t bufsz;
int tracks,sectors,heads;

#if defined __WATCOMC__ || defined __GNUC__
    setvbuf(stdout,NULL,_IONBF,0);      /* flush stdout every printf */
#endif

    Reset = 0;
    Zero = 0;
    Keep = 0;
    Last = 0;
    Verify = 0;
    MaxTrack = MaxHead = -1;
    Bytes = 0;
    Disk = File = ToDisk = -1;
    SysOnly = 0;
    NoAsk = 0;

    options(argc,argv);

    if ((i = disk_get_physical(Disk,&tracks,&sectors,&heads)) != DISK_OK)
        die("BIOS error: ",disk_error(i),0);

    if ((buffer = malloc(bufsz = sectors * 512)) == NULL)
        die("Not enough memory found!"," (%u)",bufsz);

    printf("\n");

    if (Reset)
    {
        printf("Reseting controller...");
        disk_reset(Disk);
        printf(" Homing disk...");
        if ((i = disk_read_p(Disk,0,1,0,buffer,1)) != DISK_OK)
            die("BIOS error: ",disk_error(i),0);
        printf(" OK.\n");
    }

    printf("Drive %c: has %u tracks and %u sides.\n",Disk+'A',tracks+1,heads+1);

    if (Last)
        setlast(Disk,&MaxTrack,&MaxHead,0);

    if (SysOnly)
        setlast(Disk,&MaxTrack,&MaxHead,1);

    if (ToDisk == 1)
        printf("\nWrite file \"%s\" to disk in %c:",argv[File],Disk+'A');
    else
        printf("\nWrite disk in %c: to file \"%s\"",Disk+'A',argv[File]);

    if (!NoAsk && ask(NULL) == 0)
        return 1;

    if (ToDisk == 2)                                     /* writing file */
    {
        if ((fd = _open(argv[File],_O_RDONLY)) != -1)
        {
            _close(fd);
            printf("File \"%s\" exists",argv[File]);
            if (ask("; overwrite?") == 0)
                return 1;
        }
        fd = _open(argv[File],O_CREAT|O_RDWR|O_BINARY|O_TRUNC,S_IREAD|S_IWRITE);
    }
    else
    {
        fd = _open(argv[File],O_RDWR|O_BINARY);
    }

    if (fd == -1)
        die("file error: ",strerror(errno),errno);

    errno = 0;

    putchar('\n');

    /* on error we get back here with setjmp() returning non-zero */

    if (setjmp(Jmpbuf) == 0)
    {
        /* now that everything is verified and prepared, this is the meat */

        if (ToDisk == 1)
            i = file2disk(fd,Disk,tracks,heads,sectors,bufsz,buffer);
        else
            i = disk2file(fd,Disk,tracks,heads,sectors,bufsz,buffer);

        if (i == DISK_OK)
            printf("\nDone.            \n");

        /* that's not hard is it... */
    }
    else
    {
        puts("\n\nStopped.             \n");
        getch();    /* eat key from kbhit() */
    }

    _close(fd);

#ifdef _WIN32
    if (i)
#else
    if ((i = disk_status(Disk)) != 0)
#endif
        die("BIOS error: ",disk_error(i),0);

    if (errno)
        die("File error: ",strerror(errno),errno);

    if (Reset)
    {
        printf("\nReseting controller...");
        disk_reset(Disk);
        printf(" Homing disk...\n");
        disk_read_p(Disk,0,1,0,buffer,1);
    }

    printf("\n%ld bytes written\n",Bytes);

    return 0;

}