/************************************************************************* ** File: ascii.c ** contains ascii capture and send routines ** ** Functions: ** do_send() - send ascii text file to remote ** add_cap(char) - add char to capture buffer ** open_cap() - open capture file and buffer ** clos_cap() - close capture file ** flush_cap() - write out contents of capture buffer to file ** fix_menu() - adjust menu to reflect current capture file status ** *************************************************************************/ #include "term.h" extern char *getmem(); extern int capture, cap_open, fd, bufr_ptr; extern char name[], *bufr; extern LONG bytes_xferred; extern FILE *tranr, *trans; extern struct Window *mywindow; extern struct Menu menu[]; extern struct MenuItem FileItem[]; extern struct IntuiText FileText[]; extern struct MenuItem X_Sub_Item[]; extern struct IOExtSer *Read_Request; extern char rs_in[2]; extern struct IOExtSer *Write_Request; extern char rs_out[2]; /************************************************* * locally defined variables *************************************************/ extern unsigned char readchar(); /********************************************* ** function to send file (ascii) *********************************************/ do_send() { char c, ch, name[64]; if (cap_open) flush_cap(); emits("\nAscii Send:"); filename(name); if ((trans = fopen(name,"r")) == 0) { emits("\nError Opening File\n"); return(FALSE); } while ((c = getc(trans)) != EOF) { if (c == '\n') sendchar('\r'); else if (c != '\r') sendchar(c); if (CheckIO(Read_Request)) { WaitIO(Read_Request); ch = rs_in[0] & 0x7f; BeginIO(Read_Request); emit(ch); } if (test_kbd_abort()) { emits("\n\nUser Cancelled Transfer\n"); break; } } fclose(trans); emits("\nFile Sent\n"); return(TRUE); } /* capture file processes */ add_cap(c) char c; { /* trash them mangy ctl chars */ if ((c > 31 && c < 127) || c == 10) bufr[bufr_ptr++] = c; if (bufr_ptr >= BufSize) { flush_cap(); } return(0); } open_cap() { char nam[32]; emits("\nAscii Capture:"); filename(nam); if ((tranr=fopen(nam,"w")) == 0) { cap_open = capture = FALSE; fix_menu(); emits("\nError Opening File\n"); return(0); } cap_open = TRUE; if (bufr == NULL) { if ((bufr = getmem(BufSize)) == NULL) { emits("Unable to Allocate Buffer\n"); fclose(tranr); cap_open = capture = FALSE; fix_menu(); } } return(0); } clos_cap() { flush_cap(); if (cap_open) fclose(tranr); cap_open = capture = FALSE; emits("Capture File closed\n"); fix_menu(); return(0); } flush_cap() { if (bufr_ptr > 0) { rs_out[0] = '\x13'; /* ctrl-s */ DoIO(Write_Request); if (fwrite(bufr,1,bufr_ptr,tranr) != bufr_ptr) { emits("Capture File Truncated\n"); fclose(tranr); capture = cap_open = FALSE; fix_menu(); } bufr_ptr = 0; rs_out[0] = '\x11'; /* ctrl-q */ DoIO(Write_Request); } return(0); } fix_menu() { ClearMenuStrip(mywindow); if (capture) { FileItem[0].ItemFill = (APTR)&FileText[6]; } else { FileItem[0].ItemFill = (APTR)&FileText[0]; } if (cap_open) { FileItem[1].Flags |= ITEMENABLED; } else { FileItem[1].Flags &= (0xffff - ITEMENABLED); } SetMenuStrip(mywindow,&menu[0]); return(0); }