#include<stdio.h>
#include<stdlib.h>
#include<fcntl.h>
#include<string.h>
#include<error.h>


#include"pstack.h"

struct myrec {
	int size;
	char data[80];
} rec;

int main(int argc, char *argv[]) {
	int fd,n;
	char line[80];

	if (argc!=2)
		return(-1);
	fd=open(argv[1],O_RDWR);
	if (!fd)
		return(-2);

	while (fgets(line,80,stdin)) {
		if (strncmp(line,"pop",3)==0) {
			if ((n=read(fd,(void *)&rec,
				      sizeof(struct myrec)))>0) {
				rec.data[n-sizeof(int)]=0;
				printf("POPPED: [%s]\n", rec.data);
			} else {
				printf("EMPTY\n");
			}
		} else if (strncmp(line,"push ",5)==0) {
			n=strnlen(line+5,80);
			rec.size=n;
			strncpy(rec.data,line+5,80);
			if ((n=write(fd,(void *)&rec,
				        sizeof(struct myrec)))>0) {
				printf("PUSH successfull\n");
			} else {
				printf("PUSH failed\n");
			}
		} else if (strncmp(line,"reset",5)==0) {
			if (ioctl(fd,PSTACKDEV_IOCFREE,NULL)>=0)
				printf("success\n");
			else
				perror("ioctl:");
		} else if (strncmp(line,"init ",5)==0) {
			struct pstackinfo inf;
			sscanf(line+5,"%d %d",&inf.maxelements,
					&inf.recsize);
			if (ioctl(fd,PSTACKDEV_IOCINIT,&inf)>=0)
				printf("success\n");
			else
				perror("ioctl:");
		} else if (strncmp(line,"bye",3)==0) {
			break;
		} else {
			printf("valid commands:\n\tpop\n\tpush message\n\tbye\n\treset\n\tinit maxelements recsize\n");
		}
	}
	return 0;
}
