void tex::start_input_prepare(const std::string& fname) { if(fname!="stdin") { if(fname.size()==0) { scan_file_name(); if (cur_ext == null_str) cur_ext = str_tex; pack_file_name(cur_name, cur_area, cur_ext); } else { begin_name(); strcpy(name_of_file, fname.c_str()); name_str=name_of_file+strlen(fname.c_str()); ext_str=null_str; area_str=null_str; end_name(); pack_file_name(cur_name, cur_area, cur_ext); } loop { begin_file_reading(); if((cur_file = a_open_in())) break; end_file_reading(); if (cur_ext == str_tex) { // remove .tex and try again cur_ext = null_str; pack_file_name(cur_name, cur_area, cur_ext); begin_file_reading(); if((cur_file = a_open_in())) break; end_file_reading(); } std::cerr << "cannot open " << name_of_file << std::endl; throw std::logic_error("file not found"); } } else {
void do_extension(int immediate) { halfword p; if(cur_cmd==extension_cmd){ switch(cur_chr){ case open_code: p= tail; new_write_whatsit(open_node_size,1); scan_optional_equals(); scan_file_name(); open_name(tail)= cur_name; open_area(tail)= cur_area; open_ext(tail)= cur_ext; if(immediate){ out_what(static_pdf,tail); flush_node_list(tail); tail= p; vlink(p)= null; } break; case write_code: p= tail; new_write_whatsit(write_node_size,0); cur_cs= write_stream(tail); scan_toks(false,false); write_tokens(tail)= def_ref; if(immediate){ out_what(static_pdf,tail); flush_node_list(tail); tail= p; vlink(p)= null; } break; case close_code: p= tail; new_write_whatsit(close_node_size,1); write_tokens(tail)= null; if(immediate){ out_what(static_pdf,tail); flush_node_list(tail); tail= p; vlink(p)= null; } break; case special_code: new_whatsit(special_node); write_stream(tail)= null; p= scan_toks(false,true); write_tokens(tail)= def_ref; break; case immediate_code: get_x_token(); do_extension(1); break; case use_box_resource_code: case use_image_resource_code: case save_box_resource_code: case save_image_resource_code: switch(get_o_mode()){ case OMODE_DVI: do_resource_dvi(immediate,cur_chr); break; case OMODE_PDF: do_resource_pdf(immediate,cur_chr); break; default: break; } break; case dvi_extension_code: if(get_o_mode()==OMODE_DVI) do_extension_dvi(immediate); break; case pdf_extension_code: if(get_o_mode()==OMODE_PDF) do_extension_pdf(immediate); break; default: if(immediate){ back_input(); }else{ confusion("invalid extension"); } break; } }else{ back_input(); } }