#include <exec/exec.h>
#include <stdio.h>
#include <stdlib.h>
#include "work:romconf/doorheader.h"
#define ACCESS_WRITE -1

/****** AmiExpress now will return arrow key information as the following
        codes, these codes are stored as the first character in any
        getuserstring function
 ******/
#define sm sendmessage
#define cm sendchar
#define pu putuserstring
#define co ConOnly
#define fk Fhotkey

#define RIGHTARROW 3
#define LEFTARROW 2
#define UPARROW 4
#define DOWNARROW 5

#define gu getuserstring
#define pu putuserstring
void Goto(int x,int y); /* Used to position cursor at specific locations
                           on the screen
                        */
void sr(char *str); /* removes trailing ascii codes < 33 from any string */

void LastCommand(void);
void Editor(int leftedge, int topedge,int width,int height);
void LoadView(char *filename,int leftedge,int topedge,int width,int height);
void end(void);
void Record(int x,int y);
char *viewsize=NULL;
long visual=0L;
main(int argc,char *argv[])
{
  if(argc!=2)
  {
    printf("Window version 1.0, written by Joseph Hodge\n");
    printf("\n");
    exit(0);
  }
  Register(argv[1][0]-'0');
  LoadView("ram:temp",1,10,80,9);
  
  Editor(34,10,44,9);

}

void LastCommand(void)
{
  sm("",1); sm("",1);
  if(viewsize) FreeMem(viewsize,visual);
}
void end(void)
{
   exit(0);
}
void LoadView(char *filename,int leftedge,int topedge,int width,int height)
{
   
   register int i=0;
   char temp[2];
   int minwidth=0;
   int lines=0;
   FILE *fi;
   temp[1]='\0';
   viewsize=(char *)AllocMem(width*height,MEMF_CLEAR|MEMF_PUBLIC);
   visual=width*height;
   if(viewsize==NULL)
   {
     ShutDown(); end();
   }
   sm("[H[J",0);
   Goto(leftedge,topedge);
   fi=fopen(filename,"rb");
   if(fi!=NULL)
   {
      while(fread((APTR)&temp[0],sizeof(char),1,fi)!=NULL)
      {
        if(temp[0]==13 || temp[0]==12 || temp[0]==10){ 
          while(minwidth<width && i<visual) { *(viewsize+i)=' '; i++; minwidth++;} minwidth=0;
           lines++; Goto(leftedge,topedge+lines); }
        else 
        { 
          if(temp[0]!=EOF && i<visual)
          { 
            *(viewsize+i)=temp[0]; i++; minwidth++; 
            sm(temp,0); 
          }
        }
      }
      fclose(fi);

   }
   while(i<width*height) { *(viewsize+i)=' '; i++; }
}

void Editor(int leftedge,int topedge,int width,int height)
{
  char temp[10];
  int hmd;
  int x=leftedge,y=topedge;
 pu("",RAWARROW); /** Turns off arrowkey filter, allowing us to
                         intercept them and do what we wish with it
                      **/
 
  
  Goto(x,y);
 do
  {
     hotkey("",temp);hmd=temp[0];
     //hmd=Fhotkey();
     switch(hmd)
     {
       case RIGHTARROW:
             if(x+1<=leftedge+width)
             {
              x++;
              sm("[C",0);
             }   
             break;
       case LEFTARROW:
             if(x-1>=leftedge)
             { x--;
              sm("[D",0); 
             }
             break;
       case UPARROW:
            if(y-1>=topedge) 
            {
              y--;
              sm("[A",0);
            }
            break;
       case DOWNARROW:
            if(y+1<=topedge+height)
            {
              y++;
              sm("[B",0);
            }
            break;
       case 12:
       case 13:
            ShutDown();
            end();
            break;
       case '\b':
            if(x-1>=leftedge)
            {
              sm("\b \b",0);
              x--;
            } break;
       default: 
            if(x+1<=leftedge+width)
            { 
              sm(temp,0);
              x++;
              Record(x,y);
            }
     }
  }while(1);
  
}
void Goto(int x,int y)
{
  char local[20];
  sprintf(local,"[%d;%dH",y,x);
  sm(local,0);
}

void Record(int x,int y)
{
}