#include <stdio.h>

#include <string.h>

#include <conio.h>

#include <ctype.h>

#include "menu.h"

#include "dialog.h"

#include "interact.h"

#define max 30


void setupdate();
void newscrip();
void newclient();
void checkscrip();
void checkclient();
void buyorsell();
void cleanup();
void cleanfiles();
void getclient();
void getscrip();
void getquantity();
void getrate();
void getsetno();
void getdate();
void checkwhich();
void getmouse();
void killmouse();
void showmenu();
void dataentry();
void getinfo();
void entryloop();
void checkbuying();
void writefiles();
void clientinfo();
void getclientdetail();
void displayinfo(int);
void scripinfo();
void getscripdetail();
void callexit();
void setfile();
void initialvalues();
void sidekick();
void exitchoice();
void updatestatus();
void readstatus();
void dateupdate();
void fetchdateset();
void xit();
void prompt();
void balancit(int);
void showbalance(int);
void clientscreen(int);
void printc(int,int,int);
void printb(int,int);
void scrollit(int);
void keyscroll(int);
void delarray(int);
void delet(int);
void modifi(int,int);
void makethechange();
void changechoice();
void changescrip();
void changeclient();
void changerate();
void changequantity();
void assigntemp();
void appendtemp();
void addclient();
void comeval();
void balanscreen();
void printnew(int);
void statbar(int);
int  makesure();
void printweekly();
void printdaily();
void printclients();
void printscrips();
void printbalance();
void printzoudha();
void key();
void trykey();
void newkey();
void altkey();
void setup();
void zip(char*,char*);
void unzip(char*,char*);
void zipall();
void unzipall();
void reports();
void about();
//---------------------------------------------------------------------------

  struct theeyathi
       {
	 int day;
	 int month;
	 int year;
       }date;
  struct stock
       {
	 int serno;
	 char choice;
	 char scrip[25];
	 char cname[25];                                                         int  cno;
	 int  quan;
	 int rate;
	 float comm;
	 float net;
	 int setn;
       }soudha,temp;

  struct sharenames
       {
	 char name[25];
	 int lf;
       }scrips,clients;
  int xslno[max],
      xclientlf[max],
      xday[30],
      xmonth[max],
      xyear[max],
      xquan[max],
      xrate[max],
      xsetno[max];
  float xcomm[max],
	xnet[max];
  char xchoice[max],
       xscrip[max][25],
       xclient[max][25];

  int setno,ret,l,lptn,maxlines,trialset,errorflag=0,tryflag=0;
  int scriplf,clientlf,check=0,passedvalue,passedoption;
  int flag=0,flag1=0,flag2=0,clflag=0,scflag=0,stflag=0,j1,k;
  char clname[25],scname[25],tempchoice[2];
  char client[50][25],chstr[13];
  float clienttotal[50],csetotal=0,commtotal=0,credit,debit;

  FILE *sp,*cp,*fp,*np,*statfp,*datfp,*printfp,*fpass;

//--------------------------------------------------------------------------

  void main(void)
      {
	int i,ret;

	gotoxy(1,1);
	clrscr();
	cursize(16,0);
	unzip("p5.mok","pass.wrd");
	//key();

	unzipall();
	getmouse();
	soudha.choice='b';
	showmenu();
	killmouse();
      }

//-------------------------------------------------------------------------


  void unzipall()
      {
	unzip("z1.mok","zledger");
	unzip("s2.mok","sledger");
	unzip("c3.mok","cledger");
	unzip("s4.mok","status");
      }

//--------------------------------------------------------------------------

  void zipall()
      {
	zip("zledger","z1.mok");
	zip("sledger","s2.mok");
	zip("cledger","c3.mok");
	zip("status","s4.mok");
	zip("pass.wrd","p5.mok");
	system("del zledger");
	system("del cledger");
	system("del sledger");
	system("del status");
	system("del pass.wrd");
      }

//-------------------------------------------------------------------------


  void zip(char one[12],char two[12])
      {
	FILE *fp1,*fp2;
	int ch,i=1;

	fp1=fopen(one,"rb");
	fp2=fopen(two,"wb");
	while((ch=fgetc(fp1))!=EOF)
	{
	  if(ch==32)
	  {
	    while((ch=fgetc(fp1))==32)
	    i++;
	    fputc(i+=127,fp2);
	    i=1;
	  }
	  fputc(127-ch,fp2);
	}
	fclose(fp1);
	fclose(fp2);
      }

//---------------------------------------------------------------------------


  void unzip(char one[12],char two[12])
      {
	FILE *fp1,*fp2;
	int ch,i=1;

	fp1=fopen(one,"rb");
	fp2=fopen(two,"wb");
	while((ch=fgetc(fp1))!=EOF)
	{
	  if(ch>127)
	  {
	    ch-=127;
	    for(i=1;i<=ch;i++)
	    fputc(' ',fp2);
	  }
	  else
	  fputc(127-ch,fp2);
	}
	fclose(fp1);
	fclose(fp2);
      }

//--------------------------------------------------------------------------


  void trykey()
      {
	int ch=0,i=1,j=20,kh;

	fpass=fopen("pass.wrd","r");
	do
	{
	  ch=getch();
	  if((i==1)&&(tryflag!=0))
	  {
	    textbackground(0);
	    gotoxy(35,13);
	    cprintf("               \n");
	    textbackground(7);
	  }
	  fscanf(fpass,"%d ",&kh);
	  kh=(kh+j)/i;
	  if(ch!=kh)
	  {
	    errorflag=1;
	  }
	  i++;j--;
	}while(ch!=13);
      }

//-------------------------------------------------------------------------


  void key()
      {
	textbackground(7);
	textcolor(1);
	gotoxy(35,12);
	cprintf("PASSWORD PLEASE");
	trykey();
	if(errorflag==0)
	{
	  tryflag=0;
	  fclose(fpass);
	}
	else if(tryflag<3)
	{
	  tryflag++;
	  errorflag=0;
	  gotoxy(35,13);
	  cprintf("     RETRY     \n");
	  key();
	}
	else if(tryflag>=3)
	{
	  gotoxy(35,12);
	  cprintf(" ACCESS DENIED ");
	  fclose(fpass);
	  exit(0);
	}
      }

//-------------------------------------------------------------------------


  void newkey()
      {
	textbackground(7);
	textcolor(1);
	gotoxy(33,12);
	cprintf("ENTER OLD PASSWORD");
	trykey();
	if(errorflag==1)
	{
	  gotoxy(33,12);
	  cprintf("  ACCESS  DENIED  ");
	  getch();
	  textbackground(0);
	  gotoxy(35,12);
	  cprintf("                  ");
	  errorflag=0;
	}
	else altkey();
      }

//-------------------------------------------------------------------------


  void altkey()
      {
	FILE *fpass;
	int ch=0,i=1,j=20,kh=0,newflag=0,maxi;
	int newk[20];

	gotoxy(33,12);
    cprintf("TYPE IN NEW PASSWORD");

    do
    {
      ch=getch();
      if(i<20)
      {
       newk[i]=ch;
       i++;
      }
      else if(i>=20)
	putchar(7);
    }while(ch!=13);
    maxi=i-1;
    i=1;
    gotoxy(33,12);
    cprintf("RETYPE NEW PASSWORD ");

    do
    {
      ch=getch();
      if(newk[i]!=ch)
      {
	newflag=1;
      }
      if(i<maxi) i++;
    }while(ch!=13);

    if(newflag==0)
    {
      i=1;
      fpass=fopen("pass.wrd","w");
      do
      {
	 ch=newk[i];
	 kh=(ch*i)-j;
	 fprintf(fpass,"%d ",kh);
	 i++;j--;
      } while(ch!=13);
      fclose(fpass);
      gotoxy(33,12);
      cprintf("  PASSWORD CHANGED  ");
      getch();
      textbackground(0);
      gotoxy(33,12);
      cprintf("                    ");
    }
    else
    {
      newflag=0;
      gotoxy(33,12);
      cprintf("RETYPED INCORRECTLY ");
      getch();
      textbackground(0);
      gotoxy(33,12);
      cprintf("                    ");
    }
}

//-------------------------------------------------------------------------

void prompt()
     {
     clrscr();
     printf("ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍTYPE EXIT TO GET BACK TO MOKSHAÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ");
     system("command.com");
     system("march2");
     }
//---------------------------------------------------------------------------

void showmenu()
     {
      textbackground(BLACK);
      clrscr();
      textbackground(BLACK);
      ret=tmenu(15,7,11,1,0,31,10,8,"OPTIONS",
				   "Data Entry",
				   "View-Edit",
				   "Trial Balance",
				   "Analysis",
				   "Reports",
				   "Set Up",
				   "Dos Prompt",
				   "Exit");
      switch(ret)
	   {
	    case 1:dataentry();
		    showmenu(); break;
	    case 2:getinfo();
		   showmenu();break;
	    case 3:balancit(1);
		   showmenu();
		   break;
	    case 5:reports();
		   showmenu();
		   break;
	    case 6:setup();
		   showmenu();break;
	    case 7:prompt();break;
	    case 8:zipall();
		   killmouse();
		   exit(0);break;
	    default:showmenu();break;
	   }
      }
//--------------------------------------------------------------------------

  void setup()
  {
      ret=tmenu(15,7,11,1,0,31,10,4,"SET UP",
				    "Clean All Files",
				    "Change Password",
				    "About",
				    "Exit Set up");
       switch(ret)
       {
	 case 1:cleanfiles();
		setup();
		break;
	 case 2:newkey();
		setup();
		break;
	 case 3:about();
		break;
	 default:break;
       }
   }
//---------------------------------------------------------------------------

 void about()
    {
      clrscr();
      ret=tmenu(15,7,11,1,0,31,10,6,"THE MINDZONE",
				    "kishan p thomas",
				    "rahul sekhar",
				    "shiji cherian",
				    "treesa zacharia",
				    "   the base  ",
				    "       ok      ");
      switch(ret)
      {
	case 1:dialoguebox(23,10,3,0,7,"wild rose cochin-34",0);
	       getch();
	       about();
	       break;
	case 2:dialoguebox(23,10,3,0,7,"varickolil mavelikara-4",0);
	       getch();
	       about();
	       break;
	case 3:dialoguebox(23,10,3,0,7,"kadiyamkuttiyil trivandrum-1",0);
	       getch();
	       about();
	       break;
	case 4:dialoguebox(23,10,3,0,7,"lakaparambil changanachery-4",0);
	       getch();
	       about();
	       break;
	case 5:dialoguebox(23,10,3,0,7,"uni: of kerala trivandrum-81",0);
	       getch();
	       about();
	       break;
	default:break;
      }
   }
//---------------------------------------------------------------------------

   void reports()
     {
     ret=tmenu(15,7,11,1,0,31,10,7,"SELECT REPORT",
				   "WEEKLY STATEMENT",
				   "DAILY STATEMENT",
				   "TRIAL BALANCE",
				   "CLIENT LIST",
				   "SCRIP LIST",
				   "ZOUDHA BOOK",
				   "EXIT REPORTS");
     switch(ret)
	   {
	   case 1:printweekly();
		  reports();
		  break;
	   case 2:printdaily();
		  reports();
		  break;
	   case 3:balancit(2);
		  reports();
		  break;
	   case 4:printclients();
		  reports();
		  break;
	   case 5:printscrips();
		  reports();
		  break;
	   case 6:printzoudha();
		  reports();
		  break;
	   default:break;
	   }
     }
//---------------------------------------------------------------------------

 void printweekly()
     {
     char theclient[20],printen[20];
     int serialno=0,thesetno;
     printfp=fopen("tempfile","w");
     fp=fopen("zledger","r");
     dialoguebox(23,10,3,0,7,"ENTER THE SETNO:",2);
     thesetno=atoi(getit(wherex(),wherey(),20));
     dialoguebox(23,10,3,0,7,"ENTER THE CLIENT NAME",20);
     strcpy(theclient,getit(wherex(),wherey(),20));
     fprintf(printfp,"PINNACLE STOCK & SHARES                            M.G.Road Cochin Ph:361660 \n");
     fprintf(printfp,"-----------------------------------------------------------------------------\n");
     fprintf(printfp,"TO:\n");
     fprintf(printfp,"   %s\n",theclient);
     fprintf(printfp,"   I/We have on this Settlement period done by your                Settlment# %2d \n",
												 thesetno);
     fprintf(printfp,"   order and on your account the following transactions\n");
     fprintf(printfp,"-----------------------------------------------------------------------------\n");
     fprintf(printfp,"|SLNO|LFNO|   DATE  |SET| SCRIPNAME |  | QTTY | RATE|  COMM:  |  NETAMOUNT  |\n");
     fprintf(printfp,"-----------------------------------------------------------------------------\n");
     while(!feof(fp))
	 {
	 fscanf(fp,"%d%*c %d%*c%d%*c%d %d  %[^\n]  %[^\n] %c %d %d %d %f %f\n",&soudha.serno,
		    &date.day,&date.month,&date.year,&soudha.setn,soudha.scrip,soudha.cname,
		    &soudha.choice,&clientlf,&soudha.quan,&soudha.rate,
		    &soudha.comm,&soudha.net);
	 if((strcmp(theclient,soudha.cname)==0)&&(soudha.setn==thesetno))
	 {
	 strcpy(printen,soudha.scrip);
	 printen[10]='\0';
	 serialno++;
	 fprintf(printfp,"|%3d |%3d |%2d/%2d/%2d |%2d | %-10s|%c |%5d |%4d |%8.2f |%12.2f |\n",
			 serialno,
			 soudha.serno,
			 date.day,
			 date.month,
			 date.year,
			 soudha.setn,
			 printen,
			 soudha.choice,
			 soudha.quan,
			 soudha.rate,
			 soudha.comm,
			 soudha.net);
	 }

	 }
     fprintf(printfp,"----------------------------------------------------------------------------\n\n");
     fprintf(printfp,"                                              Yours Faithfully,             \n\n");
     fprintf(printfp,"                                              For PINNACLE STOCK & SHARES.  \n");
     fclose(fp);
     fclose(printfp);
     ret=tmenu(15,1,0,10,4,24,10,2,"SETUP PRINTER.READY TO PRINT ?",
				   "OK",
				   "Cancel");
     if(ret==1) system("type >prn tempfile.");
    }
//---------------------------------------------------------------------------

  void printdaily()
     {
     char theclient[20];
     char printen[20];
     int serialno=0,thesetno,thedate;
     printfp=fopen("tempfile","w");
     fp=fopen("zledger","r");
     dialoguebox(23,10,3,0,7,"ENTER THE SETNO:",2);
     thesetno=atoi(getit(wherex(),wherey(),20));
     dialoguebox(23,10,3,0,7,"ENTER THE DATE:",2);
     thedate=atoi(getit(wherex(),wherey(),20));
     dialoguebox(23,10,3,0,7,"ENTER THE CLIENT NAME",20);
     strcpy(theclient,getit(wherex(),wherey(),20));
     fprintf(printfp,"PINNACLE STOCK & SHARES                  M.G.Road Cochin Ph:361660 \n");
     fprintf(printfp,"-------------------------------------------------------------------\n");
     fprintf(printfp,"TO:\n");
     fprintf(printfp,"   %s\n",theclient);
     fprintf(printfp,"   I/We have this day done by your order and          Dated%2d/%2d/%2d\n",
							       date.day,date.month,date.year);
     fprintf(printfp,"   on your account the following transactions\n");
     fprintf(printfp,"-------------------------------------------------------------------\n");
     fprintf(printfp,"|SLNO|LFNO| SCRIPNAME |  | QTTY | RATE| COMMISSION  |  NETAMOUNT  |\n");
     fprintf(printfp,"-------------------------------------------------------------------\n");
     while(!feof(fp))
	 {
	 fscanf(fp,"%d%*c %d%*c%d%*c%d %d  %[^\n]  %[^\n] %c %d %d %d %f %f\n",&soudha.serno,
		    &date.day,&date.month,&date.year,&soudha.setn,soudha.scrip,soudha.cname,
		    &soudha.choice,&clientlf,&soudha.quan,&soudha.rate,
		    &soudha.comm,&soudha.net);
	 if((strcmp(theclient,soudha.cname)==0)
		    &&(date.day==thedate)
		    &&(soudha.setn==thesetno))
	 {
	 strcpy(printen,soudha.scrip);
	 printen[10]='\0';
	 serialno++;
	 fprintf(printfp,"|%3d |%3d | %-10s|%c |%5d |%4d |%12.2f |%12.2f |\n",
			 serialno,
			 soudha.serno,
			 printen,
			 soudha.choice,
			 soudha.quan,
			 soudha.rate,
			 soudha.comm,
			 soudha.net);
	 }

	 }
     fprintf(printfp,"-------------------------------------------------------------------\n\n");
     fprintf(printfp,"                                     Yours Faithfully,             \n\n");
     fprintf(printfp,"                                     For PINNACLE STOCK & SHARES.  \n");
     fclose(fp);
     fclose(printfp);
     ret=tmenu(15,1,0,10,4,24,10,2,"SETUP PRINTER.READY TO PRINT ?",
				   "OK",
				   "Cancel");
     if(ret==1) system("type >prn tempfile.");
    }
//---------------------------------------------------------------------------

  void printbalance()
     {
     float printamount;
     printfp=fopen("tempfile","w");
     fprintf(printfp,"PINNACLE STOCK & SHARES  M.G.Road Cochin Ph:361660 \n");
     fprintf(printfp,"---------------------------------------------------\n");
     fprintf(printfp," TRIAL BALANCE FOR THE SETTLEMENT NO: %2d\n",trialset);
     fprintf(printfp,"---------------------------------------------------\n");
     fprintf(printfp,"|     PARTICULARS     |    DEBIT    |    CREDIT   |\n");
     fprintf(printfp,"---------------------------------------------------\n");
     for(int l=1;l<=maxlines;l++)
	{
	if(clienttotal[l]<0)
	    {
	     printamount=clienttotal[l]*(-1.0);
	     fprintf(printfp,"| %-20s|%12.2f |             |\n",client[l],printamount);
	    }
	  else
	     fprintf(printfp,"| %-20s|             |%12.2f |\n",client[l],clienttotal[l]);
	}
     fprintf(printfp,"---------------------------------------------------\n");
     fprintf(printfp,"                      |%12.2f |%12.2f |\n",debit,credit);
     fprintf(printfp,"---------------------------------------------------\n");
     fclose(printfp);
     ret=tmenu(15,1,0,10,4,24,10,2,"SETUP PRINTER.READY TO PRINT ?",
				   "OK",
				   "Cancel");
     if(ret==1) system("type >prn tempfile.");
     }
//---------------------------------------------------------------------------

  void printscrips()
     {
     printfp=fopen("tempfile","w");
     sp=fopen("sledger","r");
     fprintf(printfp,"PINNACLE STOCK & SHARES  M.G.Road Cochin Ph:361660 \n");
     fprintf(printfp,"---------------------------------------------------\n");
     fprintf(printfp,"                      SCRIPLIST \n");
     fprintf(printfp,"---------------------------------------------------\n\n");
     fprintf(printfp,"------------------------------\n");
     fprintf(printfp,"| No: |      SCRIPNAME       |\n");
     fprintf(printfp,"------------------------------\n");
     while(!feof(sp))
	 {
	 fscanf(sp,"%d  %[^\n]",&scrips.lf,scrips.name);
	 fprintf(printfp,"| %3d | %-20s |\n",scrips.lf,scrips.name);
	 }
     fprintf(printfp,"------------------------------\n");
     fclose(printfp);
     fclose(sp);
     ret=tmenu(15,1,0,10,4,24,10,2,"SETUP PRINTER.READY TO PRINT ?",
				   "OK",
				   "Cancel");
     if(ret==1) system("type >prn tempfile.");
     }
//---------------------------------------------------------------------------

  void printclients()
       {
       printfp=fopen("tempfile","w");
       cp=fopen("cledger","r");
       fprintf(printfp,"PINNACLE STOCK & SHARES  M.G.Road Cochin Ph:361660 \n");
       fprintf(printfp,"---------------------------------------------------\n");
       fprintf(printfp,"                      CLIENT LIST\n");
       fprintf(printfp,"---------------------------------------------------\n");
       fprintf(printfp,"------------------------------\n");
       fprintf(printfp,"| No: |      CLIENTNAME      |\n");
       fprintf(printfp,"------------------------------\n");
       while(!feof(cp))
	   {
	   fscanf(cp,"%d  %[^\n]",&clients.lf,clients.name);
	   fprintf(printfp,"| %3d | %-20s |\n",clients.lf,clients.name);
	   }
       fprintf(printfp,"------------------------------\n");
       fclose(printfp);
       fclose(cp);
       ret=tmenu(15,1,0,10,4,24,10,2,"SETUP PRINTER.READY TO PRINT ?",
				     "OK",
				     "Cancel");
       if(ret==1) system("type >prn tempfile.");
       }
//---------------------------------------------------------------------------

   void printzoudha()
     {
     int serialno=0,thesetno;
     char printen1[20],printen2[20];
     printfp=fopen("tempfile","w");
     fp=fopen("zledger","r");
     dialoguebox(23,10,3,0,7,"ENTER THE SETNO:",2);
     thesetno=atoi(getit(wherex(),wherey(),20));
     fprintf(printfp,"PINNACLE STOCK & SHARES                            M.G.Road Cochin Ph:361660  \n");
     fprintf(printfp,"------------------------------------------------------------------------------\n");
     fprintf(printfp,"                                ZOUDHA LEDGER                                 \n");
     fprintf(printfp,"------------------------------------------------------------------------------\n");
     fprintf(printfp,"ENTRIES FOR THE SETTLEMENT NO:%2d\n",thesetno);
     fprintf(printfp,"------------------------------------------------------------------------------\n");
     fprintf(printfp,"|SL#|  DATE  |S#|CLIENTNAME|SCRIPNAME | | QTTY|RATE| COMMISSION |  NETAMOUNT |\n");
     fprintf(printfp,"------------------------------------------------------------------------------\n");
     while(!feof(fp))
	 {
	 fscanf(fp,"%d%*c %d%*c%d%*c%d %d  %[^\n]  %[^\n] %c %d %d %d %f %f\n",&soudha.serno,
		    &date.day,&date.month,&date.year,&soudha.setn,soudha.scrip,soudha.cname,
		    &soudha.choice,&clientlf,&soudha.quan,&soudha.rate,
		    &soudha.comm,&soudha.net);
	 if(soudha.setn==thesetno)
	 {
	 strcpy(printen1,soudha.cname);
	 printen1[10]='\0';
	 strcpy(printen2,soudha.scrip);
	 printen2[10]='\0';
	 serialno++;
	 fprintf(printfp,"|%3d|%2d/%2d/%2d|%2d|%-10s|%-10s|%c|%5d|%4d|%12.2f|%12.2f|\n",
			 serialno,
			 date.day,
			 date.month,
			 date.year,
			 soudha.setn,
			 printen1,
			 printen2,
			 soudha.choice,
			 soudha.quan,
			 soudha.rate,
			 soudha.comm,
			 soudha.net);
	 }

	 }
     fprintf(printfp,"------------------------------------------------------------------------------\n");
     fclose(fp);
     fclose(printfp);
     ret=tmenu(15,1,0,10,4,24,10,2,"SETUP PRINTER.READY TO PRINT ?",
				   "OK",
				   "Cancel");
     if(ret==1) system("type >prn tempfile.");
    }
//---------------------------------------------------------------------------

   void getinfo()
     {
      gotoxy(1,1);
      ret=tmenu(15,1,0,10,4,35,10,3,"OPTIONS",
				   "Clients",
				   "Scrips",
				   "Exit");
      switch(ret)
       {
	case 1:clientinfo();getinfo();break;
	case 2:scripinfo();getinfo()