/********************************************************************* * a terminal program that has ascii and xmodem transfer capability * * 860823 DBW - Integrated and rewrote lots of code * v2.0 860809 DBW - Major release.. LOTS of changes * v1.1 860720 DBW - Switches, 80 cols, colors, bug fixes * v1.0 860712 DBW - First version released * * use esc to abort xmodem transfer * * written by Michael Mounier * new version by Dave Wecker 860621 ************************************************************************/ /* define the compiler type here */ #define LATTICE 0 #define MANX 1 /* compiler directives to fetch the necessary header files */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if MANX #include #undef NULL #define NULL ((void *)0) #endif #define INTUITION_REV 1L #define GRAPHICS_REV 1L /* things for xmodem send and recieve */ #define GOODREAD 0 #define TIMEOUT 1 #define USERABORT 2 #define SECSIZ 0x80 #define TTIME_SHORT 5 /* number of seconds for short timeout */ #define TTIME_LONG 50 /* number of seconds for long timeout */ #define BufSize 0x1000 /* Text buffer */ #define ERRORMAX 10 /* Max errors before abort */ #define RETRYMAX 10 /* Maximum retrys before abort */ #define SOH 1 /* Start of sector char */ #define EOT 4 /* end of transmission char */ #define ACK 6 /* acknowledge sector transmission */ #define NAK 21 /* error in transmission detected */ #define FILEMAX 8 /* number of file menu items */ #define RSMAX 5 /* speed menu items */ #define XFMAX 2 /* transfer mode items */ #define SCRIPTMAX 2 /* script menu items */ #define MAXMENU 4 /* total number of menu entries */ #define BOLD 1 /* modes in curmode and savmode */ #define UNDERLINE 2 #define REVERSE 4 #define BLINK 8 /* things for script support */ #define GOTOLABEL 1 #define NEXTCOMMAND 0 #define ONCOMMAND 2 #define WAIT_TIMER 2 #define WAIT_STRING 1 extern struct MsgPort *CreatePort(); #ifdef MODULE_MAIN char bufr[BufSize]; int fd, timeout = FALSE, ttime; int multi = FALSE, server; long bytes_xferred; struct IntuitionBase *IntuitionBase; struct GfxBase *GfxBase; struct NewScreen NewScreen = { 0L,197L,640L,205L,1L, /* left, top, width, height, depth */ 0,1,HIRES, /* DetailPen, BlockPen, ViewModes */ CUSTOMSCREEN,NULL, /* Type, Font */ (UBYTE *)"VT100 Terminal Screen", /* Title */ NULL,NULL }; /* Gadgets, Bitmap */ struct NewWindow NewWindow = { 0,3L,640L,200L, /* left, top, width, height */ 0,1, /* detailpen, blockpen */ MENUPICK | CLOSEWINDOW | RAWKEY | NEWSIZE, SMART_REFRESH | REPORTMOUSE | ACTIVATE | BORDERLESS | WINDOWCLOSE | WINDOWDEPTH | WINDOWDRAG, /* Flags */ NULL,NULL, /* FirstGadget, CheckMark */ (UBYTE *) "VT100 Terminal Window ", NULL, /* set screen after open screen */ NULL, /* bitmap */ 640L, 200L, 640L, 200L,/* minw, minh, maxw, maxh */ CUSTOMSCREEN /* Type */ }; struct Screen *myscreen; /* ptr to applications screen */ struct Window *mywindow; /* ptr to applications window */ struct ViewPort *myviewport; struct IntuiMessage *NewMessage; /* msg structure for GetMsg() */ struct Preferences *Prefs; /* preferences from GetPrefs() */ struct MenuItem FileItem[FILEMAX]; struct IntuiText FileText[FILEMAX]; struct MenuItem RSItem[RSMAX]; struct IntuiText RSText[RSMAX]; struct MenuItem XFItem[XFMAX]; struct IntuiText XFText[XFMAX]; struct MenuItem ScriptItem[SCRIPTMAX]; struct IntuiText ScriptText[SCRIPTMAX]; struct Menu menu[MAXMENU]; struct IOExtSer *Read_Request; char rs_in[2048]; struct IOExtSer *Write_Request; char rs_out[2]; struct timerequest Timer; struct MsgPort *Timer_Port = NULL; struct timerequest Script_Timer; struct MsgPort *Script_Timer_Port = NULL; int want_message; int x,y,curmode; int MINX = 0; int MAXX = 632; int MINY = 14; int MAXY = 198; int top = 14; int bot = 198; int savx = 0; int savy = 14; int savmode = 0; int nlmode = 0; int alt = 0; int savalt = 0; int a[2] = { 0, 0 }; int sa[2] = { 0, 0 }; int inesc = -1; int inctrl = -1; int private = 0; int badseq = 0; char *blanks = " "; int maxcol = 79; /*************************** defaults ***********************************/ int p_baud = 2400; /* baud rate */ int p_screen = 0; /* 0 = WORKBENCH, 1 = CUSTOM */ int p_interlace = 0; /* 0 = no interlace, 1 = interlace */ int p_depth = 2; /* number of bit planes (1 or 2) */ int p_foreground = 0x840; /* default foreground RGB color */ int p_background = 0x000; /* default background RGB color */ int p_bold = 0xa00; /* default BOLD RGB color */ int p_cursor = 0x00d; /* default Cursor RGB color */ int p_lines = 24; /* number of lines on the screen */ int p_mode = 0; /* 0 = image, 1 = CRLF (for kermit) */ int p_xon = 0; /* 0 = disabled, 1 = enabled */ char *p_f[10] = { /* function key defaults */ "\033OP","\033OQ","\033OR","\033OS", "f5","f6","f7","f8","f9","f10" }; char *p_F[10] = { /* shifted function key defaults */ "F1","F2","F3","F4","F5", "F6","F7","F8","F9","F10"}; /* for script file */ int script_on; int script_wait; #else /* not MODULE_MAIN */ extern int multi; /* flags multi file transfers */ extern int server; extern int want_message; extern char bufr[BufSize]; extern int fd, timeout, ttime; extern long bytes_xferred; extern struct IntuitionBase *IntuitionBase; extern struct GfxBase *GfxBase; extern struct NewScreen NewScreen; extern struct NewWindow NewWindow; extern struct Screen *myscreen; extern struct Window *mywindow; extern struct ViewPort *myviewport; extern struct IntuiMessage *NewMessage; extern struct Preferences *Prefs; extern struct MenuItem FileItem[FILEMAX]; extern struct IntuiText FileText[FILEMAX]; extern struct MenuItem RSItem[RSMAX]; extern struct IntuiText RSText[RSMAX]; extern struct MenuItem XFItem[XFMAX]; extern struct IntuiText XFText[XFMAX]; extern struct MenuItem ScriptItem[SCRIPTMAX]; extern struct IntuiText ScriptText[SCRIPTMAX]; extern struct Menu menu[MAXMENU]; extern struct timerequest Timer, Script_Timer; extern struct MsgPort *Timer_Port, *Script_Timer_Port; extern struct IOExtSer *Read_Request; extern char rs_in[2048]; extern struct IOExtSer *Write_Request; extern char rs_out[2]; extern int x,y,curmode; extern int MINX,MAXX,MINY,MAXY,top,bot,savx,savy; extern int savmode,nlmode,alt,savalt,a[2],sa[2]; extern int inesc,inctrl,private,badseq,maxcol; extern char *blanks; extern int p_baud,p_screen,p_interlace,p_depth; extern int p_foreground,p_background,p_bold,p_cursor,p_lines,p_mode,p_xon; extern char *p_f[10],*p_F[10]; extern int script_on; extern int script_wait; extern int do_send(),do_capture(); #endif /* not MODULE_MAIN */ #ifndef MODULE_INIT extern void InitDefaults(),InitDevs(),InitFileItems(),InitRSItems(), InitXFItems(),InitScriptItems(),InitMenu(); #endif #ifndef MODULE_WINDOW extern void filename(),emits(),emit(),emitbatch(),cursoroff(),cursoron(); extern int toasc(); #endif #ifndef MODULE_XMODEM extern void sendchar(),sendstring(); extern int readchar(),XMODEM_Read_File(),XMODEM_Send_File(); #endif #ifndef MODULE_REMOTE extern void doremote(),doindex(); #endif #ifndef MODULE_KERMIT extern int doksend(),dokreceive(), multi_xfer(), saybye(); #endif #ifndef MODULE_SCRIPT extern int script_start(), chk_script(), exit_script(), do_script_cmd(); #endif