#include "wand_head.h"

extern int inform_me();

extern int edit_mode;
extern char *edit_screen;
extern char screen[NOOFROWS][ROWLEN+1];
extern char screen_name[61];

char buffer[80];

int rscreen(num, maxmoves)
int *maxmoves, num;
{
    int  y, numr;
    FILE *fp;
    char name[100];
    char (*row_ptr)[ROWLEN+1] = screen;
    if (!edit_mode)
	sprintf(name,"%s/screen.%d",SCREENPATH,num);
    else {
	if (!edit_screen)
	    sprintf(name,"./screen");
	else
	    sprintf(name,"%s",edit_screen);
    }
    fp = fopen(name,"r");
    if (fp == NULL) {
	if (edit_mode)
	    sprintf(buffer,"Cannot find file %s.",name);
	else
	    sprintf(buffer,"File for screen %d unavailable.",num);
	inform_me(buffer,0);
    } else {
	for (y = 0; y < NOOFROWS; y++) {
	    fgets(*row_ptr,ROWLEN + 2,fp);
	    numr = strlen( *row_ptr ) - 1;
	    while (numr < ROWLEN) (*row_ptr)[numr++] = ' ';
	    row_ptr++;
	}
	fgets(screen_name,61,fp);
	if (fscanf(fp,"%d",maxmoves) != 1)
	    *maxmoves=0;
	fclose(fp);
    }
    return (fp == NULL);
}

int wscreen(num, maxmoves)
int maxmoves, num;
{
    int  x, y;
    FILE *fp;
    char name[100];
    char (*row_ptr)[ROWLEN+1] = screen;

    if (!edit_screen)
	sprintf(name,"./screen");
    else
	sprintf(name,"%s",edit_screen);
    fp = fopen(name,"w");
    if (fp == NULL) {
	sprintf(name,"/tmp/screen.%d",getpid());
	fp = fopen(name,"w");
	sprintf(buffer,"Written file is %s",name);
	inform_me(buffer,0);
    }
    if (fp == NULL) {
	inform_me("File for screen cannot be written.",0) ;
    } else {
	for (y = 0; y < NOOFROWS; y++) {
	    for(x = 0; x < ROWLEN; x++)
		fputc(row_ptr[y][x],fp);
	    fputc('\n',fp);
	}
	if (*screen_name == '\0')
	    fputc('#',fp);
	else
	    fputs(screen_name,fp);
	fputc('\n',fp);
	if (maxmoves != 0)
	    fprintf(fp,"%d\n",maxmoves);
	fclose(fp);
    }
    return (fp == NULL);
}
