/********************************************************************* * a terminal program that has ascii and xmodem transfer capability * * v2.4 861214 DBW - lots of fixes/additions (see readme file) * v2.3 861101 DBW - minor bug fixes * v2.2 861012 DBW - more of the same * v2.1 860915 DBW - new features (see README) * 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 diretives to fetch the necessary header files */ #include #include #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 TTIME_KERMIT 10 /* number of seconds for KERMIT timeout*/ #define BufSize 0x200 /* Text buffer for XMODEM */ #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 COMMAX 3 /* number of communication sub menus */ #define RSMAX 5 /* speed menu items */ #define PARMAX 5 /* parity items */ #define XFMAX 2 /* transfer mode items */ #define SCRIPTMAX 2 /* script menu items */ #define UTILMAX 3 /* utility menu */ #define MAXMENU 4 /* total number of menu entries */ #define FSF_REVERSE 256 /* fake font style to flag INVERSVID mode */ /* things for script support */ #define GOTOLABEL 1 #define NEXTCOMMAND 0 #define ONCOMMAND 2 #define WAIT_TIMER 2 #define WAIT_STRING 1 /* things for 'beep' support */ #define BEEPSIZE 10L #define BEEPFREQ 1000L #define COLORCLOCK 3579545L extern struct MsgPort *CreatePort(); extern char *malloc(),*strcpy(),*fgets(); extern long ftell(); #ifdef MODULE_MAIN char bufr[BufSize]; int fd, timeout = FALSE, ttime; int multi = FALSE, server; long bytes_xferred; char MyDir[60]; struct IntuitionBase *IntuitionBase; struct GfxBase *GfxBase; struct NewScreen NewScreen = { 0L,0L,640L,200L,1L, /* left, top, width, height, depth */ 0,1,HIRES, /* DetailPen, BlockPen, ViewModes */ CUSTOMSCREEN,NULL, /* Type, Font */ (UBYTE *)"VT100", /* Title */ NULL,NULL }; /* Gadgets, Bitmap */ struct NewWindow NewWindow = { 0,0L,640L,200L, /* left, top, width, height */ 0,1, /* detailpen, blockpen */ MENUPICK | CLOSEWINDOW | RAWKEY | NEWSIZE, SMART_REFRESH | ACTIVATE | BORDERLESS | WINDOWCLOSE | WINDOWDEPTH | WINDOWDRAG, /* Flags */ NULL,NULL, /* FirstGadget, CheckMark */ (UBYTE *)"VT100 (v2.4 861214 DBW) 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 CommItem[COMMAX]; struct IntuiText CommText[COMMAX]; struct MenuItem RSItem[RSMAX]; struct IntuiText RSText[RSMAX]; struct MenuItem ParItem[PARMAX]; struct IntuiText ParText[PARMAX]; struct MenuItem XFItem[XFMAX]; struct IntuiText XFText[XFMAX]; struct MenuItem ScriptItem[SCRIPTMAX]; struct IntuiText ScriptText[SCRIPTMAX]; struct MenuItem UtilItem[UTILMAX]; struct IntuiText UtilText[UTILMAX]; struct Menu menu[MAXMENU]; struct IOExtSer *Read_Request; char *rs_in; 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; struct IOAudio Audio_Request; struct MsgPort *Audio_Port = NULL; UBYTE *BeepWave; UBYTE Audio_AllocMap[4] = { 1, 8, 2, 4 }; int want_message; int x,y,curmode,keyapp,curapp; 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 = 1; /* 0 = WORKBENCH, 1 = CUSTOM */ int p_wbcolors = 1; /* 0 = Custom, 1 = Workbench colors */ int p_interlace = 1; /* 0 = no interlace, 1 = interlace */ int p_depth = 1; /* number of bit planes (1 or 2) */ int p_foreground = 0x950; /* default foreground RGB color */ int p_background = 0x000; /* default background RGB color */ int p_bold = 0x900; /* default BOLD RGB color */ int p_cursor = 0x009; /* default Cursor RGB color */ int p_lines = 48; /* number of lines on the screen */ int p_mode = 1; /* 0 = image, 1 = CRLF (for kermit) */ int p_buffer = 512; /* read buffer size (>= 512 bytes) */ int p_parity = 0; /* 0=none,1=mark,2=space,3=even,4=odd */ long p_break = 750000; /* break time (in micro seconds) */ int p_volume = 64; /* beep volume (0 = DisplayBeep) */ int p_wrap = 0; /* 0 = truncate, 1 = wrap long lines */ char p_keyscript = 0x7E; /* function key script introducer = ~ */ 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; void setserbaud(), setparams(), handle_menupick(); #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 char MyDir[60]; 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 CommItem[COMMAX]; extern struct IntuiText CommText[COMMAX]; extern struct MenuItem RSItem[RSMAX]; extern struct IntuiText RSText[RSMAX]; extern struct MenuItem ParItem[PARMAX]; extern struct IntuiText ParText[PARMAX]; extern struct MenuItem XFItem[XFMAX]; extern struct IntuiText XFText[XFMAX]; extern struct MenuItem ScriptItem[SCRIPTMAX]; extern struct IntuiText ScriptText[SCRIPTMAX]; extern struct MenuItem UtilItem[UTILMAX]; extern struct IntuiText UtilText[UTILMAX]; 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; extern struct IOExtSer *Write_Request; extern char rs_out[2]; extern int x,y,curmode,keyapp,curapp; 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 struct IOAudio Audio_Request; extern struct MsgPort *Audio_Port; extern UBYTE *BeepWave; extern UBYTE Audio_AllocMap[4]; extern int p_baud,p_screen,p_interlace,p_depth,p_buffer,p_wbcolors; extern int p_foreground,p_background,p_bold,p_cursor,p_lines,p_mode; extern int p_parity,p_volume,p_wrap,p_keyscript; extern long p_break; extern char *p_f[10],*p_F[10]; extern int script_on; extern int script_wait; extern int do_send(),do_capture(),cleanup(); extern void setserpar(), setserbaud(), setparams(), handle_menupick(); #endif /* not MODULE_MAIN */ #ifndef MODULE_INIT extern void InitDevs(),InitFileItems(),InitCommItems(), InitScriptItems(),InitUtilItems(),InitMenu(); extern char *InitDefaults(); #endif #ifndef MODULE_WINDOW extern void filename(),emits(),emit(),emitbatch(),cursorflip(); extern int toasc(); #endif #ifndef MODULE_XMODEM extern void sendchar(),sendstring(),sendbreak(); 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(), saybye(); extern void multi_xfer(); #endif #ifndef MODULE_SCRIPT extern int script_start(), chk_script(), exit_script(), do_script_cmd(); #endif #ifndef MODULE_EXPAND extern char **expand(); extern int set_dir(), free_expand(); #endif