Пример #1
0
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;
}
Пример #2
0
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";
}
Пример #3
0
/*
 * 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>");
}
Пример #4
0
    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;
    }
Пример #5
0
	/*
	 * 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;
}
Пример #6
0
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 */
  }
}
Пример #7
0
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;
}
Пример #8
0
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";
}
Пример #9
0
	/*
	 * 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;
}
Пример #10
0
/*
 * 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);
}
Пример #11
0
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
  }
}
Пример #12
0
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);
	}