/************************************************************************ * vt100 terminal emulator with xmodem transfer capability * * v1.0 DBW 860710 Dave Wecker - major rewrite of AmigaTerm * * use to abort xmodem or kermit transfers * * written by Michael Mounier * new version by Dave Wecker ************************************************************************/ /* all includes defines and globals */ #define MODULE_MAIN 1 #include "vt100.h" /******************************************************/ /* Main Program */ /* */ /* This is the main body of the program. */ /******************************************************/ main() { ULONG class; USHORT code,menunum,itemnum; int KeepGoing,capture,send,maxwait; char c,name[32]; FILE *tranr,*trans; InitDevs(); InitFileItems(); InitRSItems(); InitXFItems(); InitMenu(); SetMenuStrip(mywindow,&menu[0]); KeepGoing = TRUE; capture=FALSE; send=FALSE; x = MINX ; y = MINY; curmode = 0; SetAPen(mywindow->RPort,1L); cursoron(); cursoroff(); emit(12); BeginIO(Read_Request); while( KeepGoing ) { /* wait for window message or serial port message */ cursoron(); Wait((1L << Read_Request->IOSer.io_Message.mn_ReplyPort->mp_SigBit) | (1L << mywindow->UserPort->mp_SigBit)); cursoroff(); if (send) { if ((c=getc(trans)) != EOF) { if (c == '\n') c = '\r'; sendchar(c); } else { fclose(trans); emits("\nFile Sent\n"); send=FALSE; } } maxwait = 0; while (CheckIO(Read_Request) && maxwait++ < 20) { WaitIO(Read_Request); c=rs_in[0] & 0x7f; BeginIO(Read_Request); doremote(c); if (capture && c != 10) { if (c == 13) c = 10; putc(c , tranr); } } while( NewMessage=(struct IntuiMessage *)GetMsg(mywindow->UserPort) ) { class = NewMessage->Class; code = NewMessage->Code; ReplyMsg( NewMessage ); switch( class ) { case CLOSEWINDOW: KeepGoing = FALSE; break; case RAWKEY: c = toasc(code); break; case NEWSIZE: emit(12); break; case MENUPICK: if ( code != MENUNULL ) { menunum = MENUNUM( code ); itemnum = ITEMNUM( code ); switch( menunum ) { case 0: switch( itemnum ) { case 0: if (capture == TRUE) { capture=FALSE; fclose(tranr); emits("\nEnd File Capture\n"); } else { emits("\nAscii Capture:"); filename(name); if ((tranr=fopen(name,"w")) == 0) { capture=FALSE; emits("\nError Opening File\n"); break; } capture=TRUE; } break; case 1: if (send == TRUE) { send=FALSE; fclose(trans); emits("\nFile Send Cancelled\n"); } else { emits("\nAscii Send:"); filename(name); if ((trans=fopen(name,"r")) == 0) { send=FALSE; emits("\nError Opening File\n"); break; } send=TRUE; } break; case 2: emits("\nXmodem Receive:"); filename(name); if (XMODEM_Read_File(name)) { emits("\nRecieved File\n"); emit(8); } else { close(fd); emits("Xmodem Receive Failed\n"); emit(8); } break; case 3: emits("\nXmodem Send:"); filename(name); if (XMODEM_Send_File(name)) { emits("\nSent File\n"); emit(8); } else { close(fd); emits("\nXmodem Send Failed\n"); emit(8); } break; case 4: emits("\nKermit Receive local name:"); filename(name); if (dokreceive(name)) { emits("\nRecieved File\n"); emit(8); } else { close(fd); emits("Kermit Receive Failed\n"); emit(8); } break; case 5: emits("\nKermit Send local name:"); filename(name); if (doksend(name)) { emits("\nSent File\n"); emit(8); } else { close(fd); emits("\nKermit Send Failed\n"); emit(8); } break; } break; case 1: AbortIO(Read_Request); switch( itemnum ) { case 0: Read_Request->io_Baud = 300; break; case 1: Read_Request->io_Baud = 1200; break; case 2: Read_Request->io_Baud = 2400; break; case 3: Read_Request->io_Baud = 4800; break; case 4: Read_Request->io_Baud = 9600; break; } Read_Request->IOSer.io_Command = SDCMD_SETPARAMS; DoIO(Read_Request); Read_Request->IOSer.io_Command = CMD_READ; BeginIO(Read_Request); break; case 2: switch( itemnum ) { case 0: imagemode = 0; break; case 1: imagemode = 1; break; } break; } /* end of switch ( menunum ) */ } /* end of if ( not null ) */ } /* end of switch (class) */ } /* end of while ( newmessage )*/ } /* end while ( keepgoing ) */ /* It must be time to quit, so we have to clean * up and exit. */ CloseDevice(Read_Request); DeletePort(Read_Request->IOSer.io_Message.mn_ReplyPort); FreeMem(Read_Request,(long)sizeof(*Read_Request)); CloseDevice(Write_Request); DeletePort(Write_Request->IOSer.io_Message.mn_ReplyPort); FreeMem(Write_Request,(long)sizeof(*Write_Request)); ClearMenuStrip( mywindow ); FreeColorMap( mycolormap ); CloseWindow( mywindow ); CloseScreen( myscreen ); exit(FALSE); } /* end of main */