
/* if you attempt to compile this, you may have to add some */
/*  more includes here, since I modified this file after I */
/*  did a  lc -ph  */

#include <intuition/intuition.h>
#include <exec/exec.h>
#include <devices/serial.h>
#include <minrexx.h>   /* from the arexx disk */
#include <xproto.h>    /* xpr library stuff */
#include <reqbase.h>   /* req.library stuff-see lib9 */

struct NewWindow wnw = {
        0,0,
        640,200,
        0,1,
        VANILLAKEY|MENUPICK,
        WINDOWSIZING|WINDOWDEPTH|WINDOWDRAG|ACTIVATE|SMART_REFRESH|NOCAREREFRESH,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        100,40,640,400,
        WBENCHSCREEN };

struct NewScreen cns = {
    0,0,640,200,1,
    0,1,
    HIRES,
    CUSTOMSCREEN,
    NULL,
    NULL,
    NULL,
    NULL };

struct NewWindow cnw = {
        0,0,
        640,200,
        0,1,
        VANILLAKEY|MENUPICK,
        BACKDROP|BORDERLESS|ACTIVATE|SMART_REFRESH|NOCAREREFRESH,
        NULL,
        NULL,
        NULL,
        NULL,
        NULL,
        0,0,0,0,
        CUSTOMSCREEN };

struct IntuiText m0txt[] = {
        {0,1,JAM1,3,1,NULL,(UBYTE *)"About   "},
        {0,1,JAM1,3,1,NULL,(UBYTE *)"Palette "},
        {0,1,JAM1,3,1,NULL,(UBYTE *)"Titlebar"},
        {0,1,JAM1,3,1,NULL,(UBYTE *)"Quit    "},};
struct IntuiText m1txt[] = {
        {0,1,JAM1,3,1,NULL,(UBYTE *)"Capture "},
        {0,1,JAM1,3,1,NULL,(UBYTE *)"Download"},
        {0,1,JAM1,3,1,NULL,(UBYTE *)"Upload  "},
        {0,1,JAM1,3,1,NULL,(UBYTE *)"Protocol"},};
struct IntuiText m2txt[] = {
        {0,1,JAM1,3,1,NULL,(UBYTE *)"Speed "},
        {0,1,JAM1,18,1,NULL,(UBYTE *)"1200 "},
        {0,1,JAM1,18,1,NULL,(UBYTE *)"2400 "},
        {0,1,JAM1,18,1,NULL,(UBYTE *)"9600 "},
        {0,1,JAM1,3,1,NULL,(UBYTE *)"Set   "},
        {0,1,JAM1,18,1,NULL,(UBYTE *)"8N1 "},
        {0,1,JAM1,18,1,NULL,(UBYTE *)"7N1 "},
        {0,1,JAM1,18,1,NULL,(UBYTE *)"7E1 "},
        {0,1,JAM1,18,1,NULL,(UBYTE *)"7O1 "},};

char words[500];    /* ugly */
char cmd[500];

struct IntuiText m3txt[] = {
        {0,1,JAM1,3,1,NULL,&words[0]},
        {0,1,JAM1,3,1,NULL,&words[50]},
        {0,1,JAM1,3,1,NULL,&words[100]},
        {0,1,JAM1,3,1,NULL,&words[150]},
        {0,1,JAM1,3,1,NULL,&words[200]},
        {0,1,JAM1,3,1,NULL,&words[250]},
        {0,1,JAM1,3,1,NULL,&words[300]},
        {0,1,JAM1,3,1,NULL,&words[350]},
        {0,1,JAM1,3,1,NULL,&words[400]},
        {0,1,JAM1,3,1,NULL,&words[450]},};

#define mflag1  (ITEMTEXT|ITEMENABLED|HIGHCOMP)
#define mflag2  (CHECKIT|ITEMTEXT|ITEMENABLED|HIGHCOMP)
struct MenuItem m0i[] = {
        {&m0i[1],0,0,117,10,mflag1,NULL,(APTR)&m0txt[0],NULL,NULL},
        {&m0i[2],0,10,117,10,mflag1,NULL,(APTR)&m0txt[1],NULL,NULL},
        {&m0i[3],0,20,117,10,mflag1,NULL,(APTR)&m0txt[2],NULL,NULL},
        {NULL,0,30,117,10,mflag1|COMMSEQ,NULL,(APTR)&m0txt[3],NULL,'Q'},};
struct MenuItem m1i[] = {
        {&m1i[1],0,0,117,10,mflag1|COMMSEQ,NULL,(APTR)&m1txt[0],NULL,'C'},
        {&m1i[2],0,10,117,10,mflag1|COMMSEQ,NULL,(APTR)&m1txt[1],NULL,'D'},
        {&m1i[3],0,20,117,10,mflag1|COMMSEQ,NULL,(APTR)&m1txt[2],NULL,'U'},
        {NULL,0,30,117,10,mflag1|COMMSEQ,NULL,(APTR)&m1txt[3],NULL,'P'},};
struct MenuItem m2i[] = {
        {&m2i[4],0,0,72,10,mflag1,NULL,(APTR)&m2txt[0],NULL,NULL,&m2i[1]},
        {&m2i[2],70,0,63,10,CHECKED|mflag2,0x6,(APTR)&m2txt[1],NULL,NULL},
        {&m2i[3],70,10,63,10,mflag2,0x5,(APTR)&m2txt[2],NULL,NULL},
        {NULL,70,20,63,10,mflag2,0x3,(APTR)&m2txt[3],NULL,NULL},
        {NULL,0,10,72,10,mflag1,NULL,(APTR)&m2txt[4],NULL,NULL,&m2i[5]},
        {&m2i[6],70,0,54,10,CHECKED|mflag2,0xe,(APTR)&m2txt[5],NULL,NULL},
        {&m2i[7],70,10,54,10,mflag2,0xd,(APTR)&m2txt[6],NULL,NULL},
        {&m2i[8],70,20,54,10,mflag2,0xb,(APTR)&m2txt[7],NULL,NULL},
        {NULL,70,30,54,10,mflag2,0x7,(APTR)&m2txt[8],NULL,NULL},};
struct MenuItem m3i[] = {
        {&m3i[1],0,0,175,10,mflag1|COMMSEQ,NULL,&m3txt[0],NULL,'1',NULL},
        {&m3i[2],0,10,175,10,mflag1|COMMSEQ,NULL,&m3txt[1],NULL,'2',NULL},
        {&m3i[3],0,20,175,10,mflag1|COMMSEQ,NULL,&m3txt[2],NULL,'3',NULL},
        {&m3i[4],0,30,175,10,mflag1|COMMSEQ,NULL,&m3txt[3],NULL,'4',NULL},
        {&m3i[5],0,40,175,10,mflag1|COMMSEQ,NULL,&m3txt[4],NULL,'5',NULL},
        {&m3i[6],0,50,175,10,mflag1|COMMSEQ,NULL,&m3txt[5],NULL,'6',NULL},
        {&m3i[7],0,60,175,10,mflag1|COMMSEQ,NULL,&m3txt[6],NULL,'7',NULL},
        {&m3i[8],0,70,175,10,mflag1|COMMSEQ,NULL,&m3txt[7],NULL,'8',NULL},
        {&m3i[9],0,80,175,10,mflag1|COMMSEQ,NULL,&m3txt[8],NULL,'9',NULL},
        {NULL,0,90,175,10,mflag1|COMMSEQ,NULL,&m3txt[9],NULL,'0',NULL},};

struct Menu mstrip[] = {
        {&mstrip[1],0,0,45,0,MENUENABLED,"File",&m0i[0]},
        {&mstrip[2],46,0,72,0,MENUENABLED,"Transfer",&m1i[0]},
        {&mstrip[3],119,0,54,0,MENUENABLED,"Serial",&m2i[0]},
        {NULL      ,174,0,45,0,MENUENABLED,"Macro",&m3i[0]},};


struct IntuiText gtxt[] = {
        {0,1,JAM1,20,1,NULL,(UBYTE *)"  program by",&gtxt[1]},
        {0,1,JAM1,20,11,NULL,(UBYTE *)"Paul DePetrillo",&gtxt[2]},
        {0,1,JAM1,20,21,NULL,(UBYTE *)" v. -1   8/90  ",NULL},};

struct Gadget gad1={
        NULL,1,1,159,30,GADGHNONE,ENDGADGET,BOOLGADGET|REQGADGET,NULL,NULL,NULL,0,NULL,0,NULL};

struct Requester myreq={
        NULL,
        1,11,160,31,
        0,0,
        &gad1,
        NULL,
        &gtxt[0],
        NULL,
        1,
        NULL,
        {NULL},
        {NULL},
        NULL,
        {NULL},
        };




struct timerequest *timerreq,*timeret;
struct FileRequester myfilereq;
struct MsgPort *console_portw,*serial_portw,*serial_portr,*timer_port;
struct IOStdReq *conwrite_req;
struct IOExtSer *serwrite_req,*serread_req,*serret;
struct Screen *screen;
struct Window *window,*oldwin;
struct IntuiMessage *message;
struct MenuItem *mitem;
struct Process *myprocess;
APTR iaddress;
USHORT mcode;
ULONG mclass,timermask,windowmask,serialmask,signals;
char key,serbuf[512],txtbuf[4096],frdir[DSIZE+1],frfile[FCHARS+1],frpath[DSIZE+FCHARS+2];
VOID opencapture(),closecapture(),cleanup(),doinit(),dowindow();
VOID doupload(),doprotocol(),doserial(),domenu(),printstr(),dodownload();
int readserial();
ULONG flags,capture,txtpos,baud,set;
FILE *fp;
struct XPR_IO io;
struct Library *IntuitionBase,*ReqBase,*XProtocolBase;
long __saveds __regargs xupdate();
long __saveds __regargs xfopen();
long __saveds __regargs xfclose();
long __saveds __regargs xfread();
long __saveds __regargs xfwrite();
long __saveds __regargs xfseek();
long __saveds __regargs xsread();
long __saveds __regargs xswrite();
long __saveds __regargs xupdate();
long __saveds __regargs xgets();
long __saveds __regargs xfinfo();
long __saveds __regargs xchkabort();
long __saveds __regargs xsflush();
VOID rexxquitcom();
VOID rexxecho();
VOID rexxdownload();
void rexxupload();
void rexxsend();
void rexxgetstr();
void rexxmacro();
void rexxproto();
void rexxserial();
void rexxpause();
void rexxcapon();
void rexxcapoff();
void rexxwaitstr();
int setserial();
long rexxbit;
int ohshit=0;
int match,matched;
char matchstr[10];
char *matchptr;
long err;
long hostmon=0;
long rxreq=1;
long sendreq=1;
long menuz=1;
int disp();
int go=1;
int replyed=0;
int custom=1;
int doup=0;
int dodwn=0;
int tit=0;


struct rexxCommandList rcl[] = {
   { "quitcom", (APTR)&rexxquitcom },
   { "send", (APTR)&rexxsend },
   { "download",(APTR)&rexxdownload },
   { "upload",(APTR)&rexxupload },
   { "echo",(APTR)&rexxecho },
   { "getstr", (APTR)&rexxgetstr },
   { "macro", (APTR)&rexxmacro },
   { "protocol", (APTR)&rexxproto},
   { "setserial", (APTR)&rexxserial},
   { "capon", (APTR)&rexxcapon},
   { "capoff", (APTR)&rexxcapoff},
   { "waitstr",(APTR)&rexxwaitstr},
   { "pause",(APTR)&rexxpause},
   { NULL, NULL } } ;

