/* * For an xtended filemark: set the fnum from the fname. * This is used for marks obtained from the .viminfo file. It's postponed * until the mark is used to avoid a long startup delay. */ static void fname2fnum(xfmark_T *fm) { char_u *p; if (fm->fname != NULL) { /* * First expand "~/" in the file name to the home directory. * Don't expand the whole name, it may contain other '~' chars. */ if (fm->fname[0] == '~' && (fm->fname[1] == '/' #ifdef BACKSLASH_IN_FILENAME || fm->fname[1] == '\\' #endif )) { int len; expand_env((char_u *)"~/", NameBuff, MAXPATHL); len = (int)STRLEN(NameBuff); vim_strncpy(NameBuff + len, fm->fname + 2, MAXPATHL - len - 1); } else vim_strncpy(NameBuff, fm->fname, MAXPATHL - 1); /* Try to shorten the file name. */ mch_dirname(IObuff, IOSIZE); p = shorten_fname(NameBuff, IObuff); /* buflist_new() will call fmarks_check_names() */ (void)buflist_new(NameBuff, p, (linenr_T)1, 0); } }
static ParamList *get_ps_params(int ifd, BufList **ps_data) { char read_buf[DATA_BUF_SIZE]; ParamList *p_list = NULL; int begin_page = 0; int read_bytes; int acro_util = 0; BufList *bl = NULL; while( (read_bytes = read_line(ifd, read_buf, DATA_BUF_SIZE - 1)) > 0 ) { int dev_len = strlen(PAGE_DEV_BEGIN); int end_len = strlen(PAGE_DEV_END); // For Acrobat Reader { if( is_acro_util(read_buf, read_bytes) ){ acro_util = 1; } else if( acro_util && is_end_resource(read_buf, read_bytes) ){ acro_util = 0; } if( acro_util ){ int line_bytes=0; while( line_bytes+29 < read_bytes ){ if(!strncmp(&read_buf[line_bytes], " ct_BadResourceImplementation?", 30)){ strcpy(&read_buf[line_bytes], " false"); line_bytes+=6; strcpy(&read_buf[line_bytes], &read_buf[line_bytes+24]); read_bytes-=24; } else{ line_bytes++; } } } } // Retain the PS data in the buffer list. bl = buflist_new(read_buf, read_bytes); if( *ps_data == NULL ) *ps_data = bl; else buflist_add_tail(*ps_data, bl); if( read_bytes > 0 ) { if( read_buf[read_bytes - 1] == '\n' ) read_buf[read_bytes - 1] = '\0'; else read_buf[read_bytes] = '\0'; } else { read_buf[0] = '\0'; } // Parse the printing option per line. if( strncmp(read_buf, "%%BeginFeature:", 15) == 0 ) { char key_buf[MAX_KEY_LEN + 1]; char value_buf[MAX_VALUE_LEN + 1]; int key_len = 0; int value_len = 0; char *p_code; p_code = read_buf + 15; while( *p_code != '\0' ) { if( *p_code++ == '*' ) break; } while( *p_code != '\0' ) { if( IS_BLANK(*p_code) || key_len >= MAX_KEY_LEN ) break; key_buf[key_len++] = *p_code++; } while( *p_code != '\0' ) { if( !IS_BLANK(*p_code) ) break; *p_code++; } while( *p_code != '\0' ) { if( IS_BLANK(*p_code) || value_len >= MAX_VALUE_LEN ) break; value_buf[value_len++] = *p_code++; } if( key_len > 0 && value_len > 0 ) { key_buf[key_len] = '\0'; value_buf[value_len] = '\0'; param_list_add_multi(&p_list, key_buf, value_buf, value_len + 1, 1); } } else if( !begin_page && strncmp(read_buf, "%%Page:", 7) == 0 ) { begin_page = 1; } else if( begin_page ) { if( strncmp(read_buf, "%%EndPageSetup", 14) == 0 ) break; else if( strncmp(read_buf, "gsave", 5) == 0 ) break; else if( read_buf[0] >= '0' && read_buf[0] <= '9' ) break; } // For InkJet <</***(...)>>setpagedevice. else if(strncmp(read_buf + (read_bytes - 1 - end_len), PAGE_DEV_END, end_len) == 0) { char key_buf[MAX_KEY_LEN + 1]; char value_buf[MAX_KEY_LEN + 1]; char *p_code; int pos = 0; p_code = read_buf + dev_len; while( !IS_RETURN(p_code[pos]) ) { int key_pos = 0; int val_pos = 0; while( p_code[pos] != '/' && !IS_RETURN(p_code[pos]) ) pos++; if( p_code[pos] == '/' ) pos++; else continue; while( isalnum(p_code[pos]) && key_pos < 255 ) key_buf[key_pos++] = p_code[pos++]; key_buf[key_pos++] = 0; if( p_code[pos] == '(' ) { pos++; while( p_code[pos] != ')' && !IS_BLANK(p_code[pos]) && !IS_RETURN(p_code[pos]) && val_pos < 255 ) value_buf[val_pos++] = p_code[pos++]; value_buf[val_pos++] = 0; if( p_code[pos] == ')' ) pos++; else continue; if( !strcmp(key_buf, "CNPageSizeName") ) strncpy(key_buf, "PageSize", MAX_KEY_LEN); } else continue; param_list_add_multi(&p_list, key_buf, value_buf, val_pos+1, 1); } } } while( (read_bytes = read_line(-1, read_buf, DATA_BUF_SIZE - 1)) > 0 ) { BufList *bl = buflist_new(read_buf, read_bytes); if( *ps_data == NULL ) *ps_data = bl; else buflist_add_tail(*ps_data, bl); if( read_bytes > 0 ) { if( read_buf[read_bytes - 1] == '\n' ) read_buf[read_bytes - 1] = '\0'; else read_buf[read_bytes] = '\0'; } else { read_buf[0] = '\0'; } } return p_list; }