EXPORT_DEF char* at_parse_cops (char* str) { /* * parse COPS response in the following format: * +COPS: <mode>[,<format>,<oper>,<?>] * * example * +COPS: 0,0,"TELE2",0 */ char delimiters[] = ":,,,"; char * marks[STRLEN(delimiters)]; /* parse URC only here */ if(mark_line(str, delimiters, marks) == ITEMS_OF(marks)) { marks[2]++; if(marks[2][0] == '"') marks[2]++; if(marks[3][-1] == '"') marks[3]--; marks[3][0] = 0; return marks[2]; } return NULL; }
static const char* parse_cmgr_pdu(char** str, attribute_unused size_t len, char* oa, size_t oa_len, str_encoding_t* oa_enc, char** msg, str_encoding_t* msg_enc) { /* * parse cmgr info in the following PDU format * +CMGR: message_status,[address_text],TPDU_length<CR><LF> * SMSC_number_and_TPDU<CR><LF><CR><LF> * OK<CR><LF> * * sample * +CMGR: 1,,31 * 07911234567890F3040B911234556780F20008012150220040210C041F04400438043204350442<CR><LF><CR><LF> * OK<CR><LF> */ char delimiters[] = ",,\n"; char * marks[STRLEN(delimiters)]; char * end; size_t tpdu_length; if(mark_line(*str, delimiters, marks) == ITEMS_OF(marks)) { tpdu_length = strtol(marks[1] + 1, &end, 10); if(tpdu_length <= 0 || end[0] != '\r') return "Invalid TPDU length in CMGR PDU status line"; *str = marks[2] + 1; return pdu_parse(str, tpdu_length, oa, oa_len, oa_enc, msg, msg_enc); } return "Can't parse +CMGR response"; }
/* * print the changelist */ void ex_changes(exarg_T *eap) { int i; char_u *name; /* Highlight title */ MSG_PUTS_TITLE(_("\nchange line col text")); for (i = 0; i < curbuf->b_changelistlen && !got_int; ++i) { if (curbuf->b_changelist[i].lnum != 0) { msg_putchar('\n'); if (got_int) break; sprintf((char *)IObuff, "%c %3d %5ld %4d ", i == curwin->w_changelistidx ? '>' : ' ', i > curwin->w_changelistidx ? i - curwin->w_changelistidx : curwin->w_changelistidx - i, (long)curbuf->b_changelist[i].lnum, curbuf->b_changelist[i].col); msg_outtrans(IObuff); name = mark_line(&curbuf->b_changelist[i], 17); if (name == NULL) break; msg_outtrans_attr(name, hl_attr(HLF_D)); vim_free(name); ui_breakcheck(); } out_flush(); } if (curwin->w_changelistidx == curbuf->b_changelistlen) MSG_PUTS("\n>"); }
void mark_address(Address addr, int size) { Address offset = addr - address_; int line = offset.as_int() / cLineSize; mark_line(line); // the immix paper talks about doing conservative line marking // here. We're going to do accurate for now. int line_offset = (addr & cLineMask).as_int(); int additional_lines = ((line_offset + size - 1) >> cLineBits); for(int i = 1; i <= additional_lines; i++) { mark_line(line + i); } // Also, track how many times this was called, ie, how many objects this // block contains. objects_++; // Also track how much exact space these objects take up object_bytes_ += size; }
/* * parse CSCA info in the following format: * +CSCA: <SCA>,<TOSCA> * +CSCA: "+79139131234",145 * +CSCA: "",145 */ char delimiters[] = "\"\""; char * marks[STRLEN(delimiters)]; if(mark_line(str, delimiters, marks) == ITEMS_OF(marks)) { *csca = marks[0] + 1; marks[1][0] = 0; return 0; } return -1; } #/* */ EXPORT_DEF int at_parse_clcc(char* str, unsigned * call_idx, unsigned * dir, unsigned * state, unsigned * mode, unsigned * mpty, char ** number, unsigned * toa) { /* * +CLCC:<id1>,<dir>,<stat>,<mode>,<mpty>[,<number>,<type>[,<alpha>[,<priority>]]]\r\n * ... * +CLCC:<id1>,<dir>,<stat>,<mode>,<mpty>[,<number>,<type>[,<alpha>[,<priority>]]]\r\n * examples * +CLCC: 1,1,4,0,0,"",145 * +CLCC: 1,1,4,0,0,"+79139131234",145 * +CLCC: 1,1,4,0,0,"0079139131234",145 * +CLCC: 1,1,4,0,0,"+7913913ABCA",145 */ char delimiters[] = ":,,,,,,"; char * marks[STRLEN(delimiters)]; *call_idx = 0; *dir = 0; *state = 0; *mode = 0; *mpty = 0; *number = ""; *toa = 0; if(mark_line(str, delimiters, marks) == ITEMS_OF(marks)) { if( sscanf(marks[0] + 1, "%u", call_idx) == 1 && sscanf(marks[1] + 1, "%u", dir) == 1 && sscanf(marks[2] + 1, "%u", state) == 1 && sscanf(marks[3] + 1, "%u", mode) == 1 && sscanf(marks[4] + 1, "%u", mpty) == 1 && sscanf(marks[6] + 1, "%u", toa) == 1) { marks[5]++; if(marks[5][0] == '"') marks[5]++; if(marks[6][-1] == '"') marks[6]--; *number = marks[5]; marks[6][0] = 0; return 0; } } return -1; }
static void show_one_mark( int c, char_u *arg, pos_T *p, char_u *name, int current /* in current file */ ) { static int did_title = FALSE; int mustfree = FALSE; if (c == -1) { /* finish up */ if (did_title) did_title = FALSE; else { if (arg == NULL) MSG(_("No marks set")); else EMSG2(_("E283: No marks matching \"%s\""), arg); } } /* don't output anything if 'q' typed at --more-- prompt */ else if (!got_int && (arg == NULL || vim_strchr(arg, c) != NULL) && p->lnum != 0) { if (!did_title) { /* Highlight title */ MSG_PUTS_TITLE(_("\nmark line col file/text")); did_title = TRUE; } msg_putchar('\n'); if (!got_int) { sprintf((char *)IObuff, " %c %6ld %4d ", c, p->lnum, p->col); msg_outtrans(IObuff); if (name == NULL && current) { name = mark_line(p, 15); mustfree = TRUE; } if (name != NULL) { msg_outtrans_attr(name, current ? HL_ATTR(HLF_D) : 0); if (mustfree) { xfree(name); } } } ui_flush(); /* show one line at a time */ } }
EXPORT_DEF int at_parse_cusd (char* str, int * type, char** cusd, int * dcs) { /* * parse cusd message in the following format: * +CUSD: <m>,[<str>,<dcs>] * * examples * +CUSD: 5 * +CUSD: 0,"100,00 EURO, valid till 01.01.2010, you are using tariff "Mega Tariff". More informations *111#.",15 */ char delimiters[] = ":,,"; char * marks[STRLEN(delimiters)]; unsigned count; *type = -1; *cusd = ""; *dcs = -1; count = mark_line(str, delimiters, marks); // 0, 1, 2, 3 if(count > 0) { if(sscanf(marks[0] + 1, "%u", type) == 1) { if(count > 1) { marks[1]++; if(marks[1][0] == '"') marks[1]++; *cusd = marks[1]; if(count > 2) { sscanf(marks[2] + 1, "%u", dcs); if(marks[2][-1] == '"') marks[2]--; marks[2][0] = 0; } else { int len = strlen(*cusd); if(len > 0 && (*cusd)[len - 1] == '"') (*cusd)[len-1] = 0; } } return 0; } } return -1; }
static const char * parse_cmgr_text(char ** str, size_t len, char * oa, size_t oa_len, str_encoding_t * oa_enc, char ** msg, str_encoding_t * msg_enc) { /* * parse cmgr info in the following TEXT format: * +CMGR: "<msg status>","+123456789",,timestamp<CR><LF> * <message text><CR><LF><CR><LF> * OK<CR><LF> * or * +CMGR: "<msg status>","002B....",,timestamp<CR><LF> * <message text><CR><LF><CR><LF> * OK<CR><LF> */ char delimiters[] = ",,,\n"; char * marks[STRLEN(delimiters)]; size_t length; unsigned count = mark_line(*str, delimiters, marks); if(count == ITEMS_OF(marks)) { /* unquote number */ marks[0]++; if(marks[0][0] == '"') marks[0]++; if(marks[1][-1] == '"') marks[1]--; length = marks[1] - marks[0] + 1; if(oa_len < length) return "Not enought space for store number"; *oa_enc = get_encoding(RECODE_DECODE, marks[0], length - 1); marks[1][0] = 0; memcpy(oa, marks[0], length); *msg = marks[3] + 1; length = len - (*msg - *str); *msg_enc = get_encoding(RECODE_DECODE, *msg, length); return NULL; } else if(count > 0) *str = marks[count - 1]; return "Can't parse +CMGR response text"; }
/* * parse RSSI info in the following format: * ^MODE:<mode>,<submode> */ return sscanf (str, "^MODE:%d,%d", mode, submode) == 2 ? 0 : -1; } #/* */ EXPORT_DEF int at_parse_csca(char* str, char ** csca) { /* * parse CSCA info in the following format: * +CSCA: <SCA>,<TOSCA> * +CSCA: "+79139131234",145 * +CSCA: "",145 */ char delimiters[] = "\"\""; char * marks[STRLEN(delimiters)]; if(mark_line(str, delimiters, marks) == ITEMS_OF(marks)) { *csca = marks[0] + 1; marks[1][0] = 0; return 0; } return -1; }
/* * Get name of file from a filemark. * When it's in the current buffer, return the text at the mark. * Returns an allocated string. */ char_u *fm_getname(fmark_T *fmark, int lead_len) { if (fmark->fnum == curbuf->b_fnum) /* current buffer */ return mark_line(&(fmark->mark), lead_len); return buflist_nr2name(fmark->fnum, FALSE, TRUE); }
int mainloop() { unsigned cmd; nodep myLine; extern int phys_pcode; extern int row, scol, ecol; int curserr; for (;;) { here(1); checkfar(1); printt5("mainloop, cursor %x, ocursor %x, srch_row %d, srch_real %d, look.=%x\n", cursor, ocursor, srch_row, srch_real, lookaheadchar); hist_mark(); printt0("back from hist_mark()\n"); if (lookaheadchar == AL_NOP || lookaheadchar == ' ') lookaheadchar = 0; /* * Redisplay unconditionally, not just when there's no * typeahead, because often there is typeahead of the * terminating character, like comma or right paren. * Ideally the redisplay should be done only if dirty * from the keyboard driver when we are ready for real * input. */ newrange(FALSE); display(FALSE); /* * ocursor is set by arrow keys to indicate that that's * where the arrow keys left the cursor. Only if it * was set (possibly in them middle of a token) and * hasn't moved since do we want to leave it alone. */ here(2); checkfar(2); if (cursor != ocursor) { /* don't do if moves are in type-ahead */ find_phys_cursor( curr_window, cursor,anywflag); anywflag = FALSE; phys_pcode = kcget( -1, cursor ); flusht(); } here(3); ocursor = NIL; CheckAt = NIL; CodeChanged = FALSE; if( autsave && ascount++ > autsave ) { ascount = 0; if( work_fname( curr_workspace ) ) { save(0); statusLine(); } else warning( ER(220,"autosave`Automatic Save is engaged but there is no file name.") ); } here(4); cmd = topcmd( srch_row, srch_real, srch_real+srch_width, cursnode ); printt2("mainloop: topcmd returns %s (%d)\n", tokname(cmd), cmd); mark_line( cursor, SMALL_CHANGE ); do_command(cmd); here(5); checkfar(3); /* never leave the cursor on a list or below hide */ cursor = hidebound(realcp( cursor )); mark_line( cursor, SMALL_CHANGE ); curserr = node_flag(cursor) & NF_ERROR; if( curserr && !WhereDeclsChanged ) { NodeNum cltype = ntype( t_up_to_line(cursor)); if( ntype_info(cltype) & F_DECLARE||highType( cltype ) ) { WhereDeclsChanged = my_block(cursor); printt1("mainloop: WhereDeclsChanged=%x\n", WhereDeclsChanged); } } /* * Whenever a graft, etc takes place we check to see * if changes are being made to a declaration. If they * are then we set WhereDeclsChanged. If it has been * set when we get back here we recompile its declaration * block. */ if (CheckSpeed && WhereDeclsChanged && (CheckSpeed >= 4 || CodeChanged || WhereDeclsChanged != OldDeclsChanged) ) { if( CheckSpeed < 4 && WhereDeclsChanged != OldDeclsChanged ) { nodep decswap; decswap = OldDeclsChanged; OldDeclsChanged = WhereDeclsChanged; WhereDeclsChanged = decswap; printt1("mainloop: WhereDeclsChanged=%x (2)\n", WhereDeclsChanged); } if( WhereDeclsChanged ) { clr_node_flag(WhereDeclsChanged, NF_TCHECKED); here(4); checkfar(4); c_comp_decls(my_scope(WhereDeclsChanged), WhereDeclsChanged, CheckSpeed < 6 ? TC_NOSTUBS : (TC_DESCEND | TC_FULL) ); here(5); checkfar(5); WhereDeclsChanged = NIL; } } /* * Typecheck the current line. This was added late in the * game, and isn't really the best way of doing things. * Every time we return from a command, we typecheck * the current line (or if CheckAt has already been set * by a skip down routine, we typecheck there). We * don't typecheck declarations. */ printt2("CheckAt=%x, cursor=%x\n", CheckAt, cursor); if (!CheckAt && (curserr||is_undid(cursor))) CheckAt = cursor; if( CheckAt && CheckSpeed ) { myLine = t_up_to_line(CheckAt); if (!( highType(ntype(myLine)) || (ntype_info(ntype(myLine)) & F_DECLARE)) ) { printt2("mainloop: c_typecheck(%x, 0, %x)\n", (int)myLine, TC_NOSTUBS|TC_ONERROR); c_typecheck(myLine, 0, TC_NOSTUBS|TC_ONERROR ); here(6); checkfar(6); } } /* if code was changed, clear chance at resuming */ if( CodeChanged ) clear_resume(); #ifdef CHECKSUM cscheck(); #endif } }
int view(int laddr) { int n, c; char c1; if(laddr < 0) return(ERROR5); if(laddr) curln = laddr; switch(c1 = *lp++) { case 'a': if((c = getint() - 1) < STATUS_AREA || c > TEXT_AREA) return(ERROR5); if(*lp++ != ' ') return(ERROR5); /* n = ((n = getint()) > 7) ? (n << 8) | 0x02 : n << 8; attributes[c] = (attributes[c] & 0x00fd) | n | 0x8000; */ /* n = ((n = getint()) > 7 && dev_type < 3) ? (n << 8) | 0x02 : n << 8; @@@ */ n = ((n = getint()) > 7) ? (n << 8) | 0x02 : n << 8; if(*lp++ != ' ') return(ERROR5); n = (n & 0x0fff) | ((getint() & 0x7) << 12); attributes[c] = (attributes[c] & 0x00fd) | n | 0x8000; if(c == 2) { term_fill(attributes[2]); term_color(attributes[2]); term_clear(TERM_CLS_SCR); } mark_line(0); clr_flag = 1; return(OK); case 'c': if((n = getint()) < 0 || n > screen_height-SCREEN_OFFSET) return(ERROR5); if(n) center_line = n - 1; else { screen_row = imax(1, imin(lastln - center_line, curln + 1)); clear_screen1(1); clr_flag = 1; mark_line(0); update_screen(); } return(OK); case 'f': case 'q': view_quick = !view_quick; return(OK); case 'l': n = left_margin; goto marg; case 'r': n = right_margin; marg: if((c = *lp++) == '+') n += getint(); else if(c == '-') n -= getint(); else if(c == '.') n = curcol; else { --lp; n = getint(); } if(c1 == 'l') { left_margin = imin(right_margin-1, imax(1, n)); cc_reg = (n == left_margin); } else { right_margin = imax(left_margin+1, imin(LINE_LENGTH, n)); cc_reg = (n == right_margin); } firstp->lflags |= DIRTY_FLAG; if(nmarks) mark_line(marker1); return(OK); /* case 'm': menu = !menu; return(OK); */ case 's': if(*lp == '-') { ++lp; n = -getint(); } else n = getint(); screen_row = imax(1, imin(lastln - center_line, screen_row + n)); curln = imax(1, imin(lastln, curln + n)); clear_screen1(1); clr_flag = 1; mark_line(0); update_screen(); return(OK); case 't': if((n = getint()) == 2 || n == 4 || n == 8) { tab_len = n - 1; mark_line(0); update_screen(); } return(OK); case 'z': /* if(zoom > NSCREEN_SIZES || screen_sizes[zoom] == 0) zoom = 1; set_video_size(zoom); */ clear_screen1(1); clr_flag = 1; mark_line(0); update_screen(); return(OK); } return(ERROR2); }