/********************************************************************* * a terminal program that has ascii and xmodem transfer capability * :ts=8 * * v2.9 ACS - See change summary. * v2.8a 880331 ACS - Update title to 2.8A. * v2.7 870825 ACS - See README. * v2.6 870227 DBW - bug fixes for all the stuff in v2.5 * v2.5 870214 DBW - more additions (see readme file) * 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 ********************************************************************/ /********* major version (used for title of terminal window) *********/ #define VERSION "VT100 (V2.9 ACS 891003) Terminal Window" /*********** ######## 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 /* for Lattice you may have to change these with: */ #include /* #include and */ #include /* #include */ #include #include #include #if LATTICE #include #include #include #include #include #include #include #endif #if AREXX #include #include #endif /* AREXX */ #if MANX #include #undef NULL #define NULL ((void *)0) #endif /* MANX */ #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 MAXLONGPKS 1000 /* Maximum long msgpkt size */ #define BufSize 0x1080 /* 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 6 /* number of file menu items */ #define MODEMAX 4 /* number of mode menu items */ #define EXTMAX 10 /* number of external xfer pgms allowed */ #define COMMAX 4 /* number of communication sub menus */ #define RSMAX 5 /* speed menu items */ #define PARMAX 5 /* parity items */ #define XFMAX 4 /* transfer mode items */ #define SCRIPTMAX 3 /* script menu items */ #define UTILMAX 12 /* utility menu */ #define MAXMENU 4 /* total number of menu entries */ #define MAXGADSTR 80 /* Max size of prompts and inputs */ #define FSF_REVERSE 256 /* fake font style to flag INVERSVID mode */ #define FONTNAMESIZE 40 #define FONTSUFFIX ".font" #define MAXFONTVARLEN 34 /* 40 minus sizeof(".font") */ extern char myfontname[]; #define SERNAMESIZE 80 extern char mysername[]; /* Structure to hold the external xfer program names and command strings */ struct ExternalXfer { char *dispname; /* Display name - shown on menu */ char *downname; /* downcased name for cmd_short() */ char *send; /* Command string to use for send */ char *receive; /* Command string to use for receive */ char cmdkey; /* Command key equivalent */ }; extern struct ExternalXfer *(ExtXfer[EXTMAX]); /* Defined in vt100.c */ extern int NumExts; /* Number of ExtXfers */ /* things for script support */ #define GOTOLABEL 1 #define NEXTCOMMAND 0 #define ONCOMMAND 2 #define WAIT_TIMER 2 #define WAIT_STRING 1 /* exe_cmd return values */ #define CMDOK 0 /* Command OK */ #define CMDWARN 5 /* Command issued WARNING msg */ #define CMDNF 10 /* Command Not Found */ #define CMDBS 11 /* Bad State (e.g. INIT only) */ #define CMDFAIL 13 /* Command failed */ /* things for 'beep' support */ #define BEEPSIZE 10L #define BEEPFREQ 1000L #define COLORCLOCK 3579545L /* things for MENUPICK support */ #define REDOFILE 1 #define REDOCOMM 2 #define REDOUTIL 4 extern struct MsgPort *CreatePort(); extern int CmdFromRexx; /* Command came from the AREXX port */ #if AREXX extern struct RexxMsg *CreateRexxMsg(); extern STRPTR *CreateArgstring(); extern struct MsgPort *FromRexxPort; /* Port we receive AREXX msgs on */ #define HOSTNAMEROOT "VT100-" /* Indices into rexxerrmsgs[] in init.c */ #define NORXLIB 1 /* No AREXX library */ #define NORXPORT 2 /* No AREXX port */ #define NORXMSG 3 /* Can't create AREXX message */ #define NOHOSTMEM 4 /* Can't get memory for HostName*/ #define HAVEVT100PORT 5 /* VT100 port already exists */ #define NOPORTMEM 6 /* Can't get mem for a port */ extern char *rexxerrmsgs[]; /* in init.c */ extern int makerexxport(); /* in init.c */ extern char *HostName; /* Our host port name for AREXX */ extern char *ForwardPortName; /* Port to which to forward data */ extern int forwarding; /* Flag to indicate if we should fwd */ #endif /* AREXX */ #if MANX extern char *malloc(),*strcpy(),*fgets(); #endif /* MANX */ extern long ftell(); extern int multi; /* flags multi file transfers */ extern int server; extern char *bufr; /* Buffer that XMODEM uses */ extern int fd, timeout, ttime; extern long bytes_xferred; extern char MyDir[60]; extern BPTR StartLock; extern struct IntuitionBase *IntuitionBase; extern struct GfxBase *GfxBase; extern struct Library *DiskfontBase; #if AREXX extern struct RxsLib *RexxSysBase; #endif /* AREXX */ extern struct TextAttr myattr; extern struct TextFont *myfont; extern struct NewScreen NewScreen; extern struct NewWindow NewWindow; extern struct NewWindow NewReqWindow; extern struct Screen *myscreen; extern struct Window *mywindow; extern struct Window *reqwindow; extern struct ViewPort *myviewport; extern struct RastPort *myrastport; extern struct IntuiMessage *NewMessage; extern struct Preferences *Prefs; extern char InpBuf[80],UndoBuf[80],Prompt[80]; extern struct StringInfo mystrinfo; extern struct Gadget mystrgad; extern struct IntuiText donetxt; extern struct Gadget mydonegad; extern struct IntuiText mystrtxt; extern struct Requester myrequest; extern int numreqs; extern int reqwinup; extern struct MenuItem FileItem[FILEMAX]; extern struct IntuiText FileText[FILEMAX]; extern struct MenuItem ModeItem[MODEMAX+EXTMAX]; extern struct IntuiText ModeText[MODEMAX+EXTMAX]; 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; extern int Xsize, MINX,MAXX,Ysize,MINY,MAXY,BaseLine,top,bot,savx,savy; extern int savmode,nlmode,alt,savalt,a[2],sa[2]; extern int inesc,inctrl,private,badseq,maxcol; 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_echo,p_keyapp,p_curapp,p_bs_del; extern int p_xbeep, p_xproto, p_convert,p_autochop, p_kmaxpack, p_unit; extern int p_fontsize, p_shared, p_mouse_up, p_mouse_down; extern char p_keyscript; extern long p_break; extern char *p_font, *p_device, *p_f[11],*p_F[10]; extern int script_on; extern int script_wait; extern int doing_init; /* vt100.c */ extern int do_send(),do_capture(); extern void cleanup(); extern ULONG handle_menupick(); extern void setserpar(), setserbaud(), setparams(), redoutil(), redofile(), redocomm(); /* init.c */ extern void InitDevs(),InitFileItems(),InitCommItems(), InitScriptItems(),InitUtilItems(),InitMenu(); extern char *InitDefaults(); extern int maxrows; /* number of scan lines available */ /* window.c */ extern void swap_bs_del(),req(),emits(),emit(),emitbatch(),cursorflip(); extern int toasc(); extern void ScrollInfoMsg(), InfoMsgNoScroll(), InfoMsg1Line(), InfoMsg2Line(); /* xmodem.c */ extern void sendchar(),sendstring(),sendbreak(),multi_xfer(), No_XON(),Do_XON(); extern int readchar(),XMODEM_Read_File(),XMODEM_Send_File(); /* remote.c */ extern void doremote(),doindex(),doctrl(),doesc(),doerase(); /* kermit.c */ extern int doksend(), dokreceive(); extern void encode(), decode(), rpar(), spar(), saybye(); /* script.c */ extern int script_start(), chk_script(), do_script_cmd(); extern char *next_wrd(), *tostring(); extern int exit_script(), do_ext(); /* init commands */ extern int cmd_bkg(), cmd_bold(), cmd_buf(), cmd_cursor(), cmd_depth(), cmd_device(), cmd_display(), cmd_fore(), cmd_font(), cmd_fonts(), cmd_inter(), cmd_lines(), cmd_screen(), cmd_unit(), cmd_volume(), cmd_wb(), cmd_null(), /* script commands */ cmd_as(), cmd_beep(), cmd_cap(), cmd_cd(), cmd_delay(), cmd_goto(), cmd_goto(), cmd_kb(), cmd_kg(), cmd_kr(), cmd_ks(), cmd_msg(), cmd_on(), cmd_recf(), cmd_sb(), cmd_send(), cmd_sendf(), cmd_wait(), cmd_xr(), cmd_xs(), /* init and script commands */ cmd_ac(), cmd_appcur(), cmd_baud(), cmd_bt(), cmd_conv(), cmd_echo(), cmd_exit(), cmd_ext(), cmd_fnc(), cmd_key(), cmd_kmode(), cmd_kmaxpk(), cmd_mode(), cmd_mouse(), cmd_numkey(), cmd_parity(), cmd_share(), cmd_short(), cmd_swap(), cmd_wrap(), cmd_xbeep(), cmd_xproto(); /* rexx-only commands */ extern int cmd_rx(), cmd_fwd(); /* expand.c */ extern char **expand(); extern void set_dir(), free_expand();