char * input_file_give_next_buffer( char *where, /* Where to place 1st character of new buffer. */ int *give_next_size) { char * return_value; /* -> Last char of what we read, + 1. */ register int size; *give_next_size = BUFFER_SIZE; if (f_in == (FILE *)0) return 0; /* * fflush (stdin); could be done here if you want to synchronise * stdin and stdout, for the case where our input file is stdin. * Since the assembler shouldn't do any output to stdout, we * don't bother to synch output and input. */ /* size = read (file_handle, where, BUFFER_SIZE); */ if(preprocess) { char *p; int n; int ch; scrub_file=f_in; for(p=where,n=BUFFER_SIZE;n;--n) { ch=do_scrub_next_char(scrub_file); if(ch==EOF) break; *p++=ch; } size=BUFFER_SIZE-n; } else size= fread(where,sizeof(char),BUFFER_SIZE,f_in); if (size < 0) { as_perror ("Can't read source file: end-of-file faked.", file_name); size = 0; } if (size) return_value = where + size; else { #ifdef NeXT_MOD /* .include feature */ #ifdef __OPENSTEP__ if(doing_include) free (f_in->_base); #endif /* defined(__OPENSTEP__) */ #endif /* NeXT_MOD .include feature */ if (fclose (f_in)) as_perror ("Can't close source file -- continuing", file_name); f_in = (FILE *)0; return_value = 0; } return (return_value); }
char * input_file_give_next_buffer (char *where /* Where to place 1st character of new buffer. */) { char *return_value; /* -> Last char of what we read, + 1. */ register int size; if (f_in == (FILE *) 0) return 0; /* fflush (stdin); could be done here if you want to synchronise stdin and stdout, for the case where our input file is stdin. Since the assembler shouldn't do any output to stdout, we don't bother to synch output and input. */ if (preprocess) size = do_scrub_chars (input_file_get, where, BUFFER_SIZE); else size = fread (where, sizeof (char), BUFFER_SIZE, f_in); if (size < 0) { #ifdef BFD_ASSEMBLER bfd_set_error (bfd_error_system_call); #endif as_perror (_("Can't read from %s"), file_name); size = 0; } if (size) return_value = where + size; else { if (fclose (f_in)) { #ifdef BFD_ASSEMBLER bfd_set_error (bfd_error_system_call); #endif as_perror (_("Can't close %s"), file_name); } f_in = (FILE *) 0; return_value = 0; } return return_value; }
static int input_file_get (char *buf, int buflen) { int size; size = fread (buf, sizeof (char), buflen, f_in); if (size < 0) { #ifdef BFD_ASSEMBLER bfd_set_error (bfd_error_system_call); #endif as_perror (_("Can't read from %s"), file_name); size = 0; } return size; }
void input_file_open( char *filename, /* "" means use stdin. Must not be 0. */ int pre) { int c; char buf[80]; preprocess = pre; assert( filename != 0 ); /* Filename may not be NULL. */ if (filename [0]) { /* We have a file name. Suck it and see. */ f_in=fopen(filename,"r"); file_name=filename; } else { /* use stdin for the input file. */ f_in = stdin; file_name = "{standard input}"; /* For error messages. */ } if (f_in==(FILE *)0) { as_perror ("Can't open source file for input", file_name); return; } #ifdef NeXT_MOD /* .include feature */ setbuffer(f_in, xmalloc(BUFFER_SIZE), BUFFER_SIZE); #else setbuffer(f_in,in_buf,BUFFER_SIZE); #endif c=getc_unlocked(f_in); if(c=='#') { /* Begins with comment, may not want to preprocess */ c=getc_unlocked(f_in); if(c=='N') { fgets(buf,80,f_in); if(!strcmp(buf,"O_APP\n")) preprocess=0; if(!index(buf,'\n')) ungetc('#',f_in); /* It was longer */ else ungetc('\n',f_in); } else if(c=='\n') ungetc('\n',f_in); else ungetc('#',f_in); } else ungetc(c,f_in); }
void input_file_open (char *filename, /* "" means use stdin. Must not be 0. */ int pre) { int c; char buf[80]; preprocess = pre; assert (filename != 0); /* Filename may not be NULL. */ if (filename[0]) { f_in = fopen (filename, FOPEN_RT); file_name = filename; } else { /* Use stdin for the input file. */ f_in = stdin; /* For error messages. */ file_name = _("{standard input}"); } if (f_in) c = getc (f_in); if (f_in == NULL || ferror (f_in)) { #ifdef BFD_ASSEMBLER bfd_set_error (bfd_error_system_call); #endif as_perror (_("Can't open %s for reading"), file_name); if (f_in) { fclose (f_in); f_in = NULL; } return; } if (c == '#') { /* Begins with comment, may not want to preprocess. */ c = getc (f_in); if (c == 'N') { fgets (buf, 80, f_in); if (!strncmp (buf, "O_APP", 5) && ISSPACE (buf[5])) preprocess = 0; if (!strchr (buf, '\n')) ungetc ('#', f_in); /* It was longer. */ else ungetc ('\n', f_in); } else if (c == 'A') { fgets (buf, 80, f_in); if (!strncmp (buf, "PP", 2) && ISSPACE (buf[2])) preprocess = 1; if (!strchr (buf, '\n')) ungetc ('#', f_in); else ungetc ('\n', f_in); } else if (c == '\n') ungetc ('\n', f_in); else ungetc ('#', f_in); } else ungetc (c, f_in); }