Example #1
0
File: main.c Project: eviebrock/git
int main()
{
  char filename[]="data.txt";
  char letter;
  FILE *fp = NULL;
  struct letter_obj *string = NULL;

  fp = fopen(filename, "r");
  
  if(fp == NULL)
    {
      printf("Error: Unable to open input file\n");
      return 1;
    }

  // Read in the input file one character at a time
  letter = fgetc(fp);
  while(letter != EOF)
    {
      // Add each character to a string in linked-list format
      // "string" will always stay pointing to the first character.
      string = string_append(string, letter);

      // Get another character
      letter = fgetc(fp);
    }

  // Close the file - done with input
  fclose(fp);

  // Print out the original string
  printf("Original string read from file: \n");
  string_print(string);
  printf("\n");

  // Modify the string, dropping all vowels from it
  string = string_drop_vowels(string);
  
  // Print out the modified string
  printf("Modified string with vowels dropped: \n");
  string_print(string);
  printf("\n");

  // Delete the string (calls free() for each letter in string)
  string_delete(string);

  // Free dynamically allocated memory
  free(object); // invalid code, not sure why :(
  return 0;
}
Example #2
0
void words_print(char ** string, int count)
{
    if (string == NULL)
    {
        return;
    }
    for (int i = 0; i < count; ++i)
    {
        string_print(string[i]);
    }
    std::cout << std::endl;
}
Example #3
0
int main()
{
	string *s = string_init();
	string *o;
	string *subs;
	string *q = string_init_cstring("quit");
	
	string_read_line(s);
	
	while(string_cmp(s, q))
	{
		string_print(s);
		
		string_reset(s);
		string_read_line(s);
	}

	string_append(s, q);
	o = string_cat(s, q);
	string_print(s);
	string_print(o);
	string_append_cstring(o, "hello");
	string_append_char(o, 'J');
	string_print(o);
	subs = string_substring(o, 5, 6);

	printf("--\n");
	printf("%c\n", string_get(s, 5));
	printf("%d\n", string_index(o, 'o'));
	string_print(subs);
	printf("--\n");

	o = string_free(o);
	s = string_free(s);
	q = string_free(q);
	subs = string_free(subs);

	return 0;
}
Example #4
0
/**
Print a value to standard output
*/
void value_print(value_t value)
{
    switch (value.tag)
    {
        case TAG_FALSE:
        printf("false");
        break;

        case TAG_TRUE:
        printf("true");
        break;

        case TAG_INT64:
        printf("%ld", value.word.int64);
        break;

        case TAG_FLOAT64:
        printf("%lf", value.word.float64);
        break;

        case TAG_STRING:
        {
            putchar('"');
            string_print((string_t*)value.word.heapptr);
            putchar('"');
        }
        break;

        case TAG_ARRAY:
        {
            array_t* array = (array_t*)value.word.heapptr;

            putchar('[');
            for (size_t i = 0; i < array->len; ++i)
            {
                value_print(array_get(array, i));
                if (i + 1 < array->len)
                    printf(", ");
            }
            putchar(']');
        }
        break;

        default:
        printf("unknown value tag");
        break;
    }
}
Example #5
0
int main()
{
	map *m;
	string *k;
	string *v;
	string *q;
	map_iterator *n;
	pair *t;

	m = map_init(stcmp);
	q = string_init_cstring("");
	k = string_init();
	string_read_line(k);

	while(string_cmp(k, q))
	{
		v = string_init();
		string_read_line(v);
		map_add(m, k, v);

		k = string_init();
		string_read_line(k);
	}

	k = string_free(k);

	/* Iterate through map. */
	for(n = map_begin(m); n; n = map_next(n))
	{
		t = n->data;
		string_print(t->first);
		printf(" => ");
		string_println(t->second);
	}

	/* Free map. */
	for(n = map_begin(m); n; n = map_next(n))
	{
		t = n->data;
		string_free(t->first);
		string_free(t->second);
	}

	string_free(q);
	m = map_free(m);

	return 0;
}
Example #6
0
int main()
{
   /// Ввод данных
   std::cout << "Your text: ";
   char * text = new char[STRING_LENGTH];
   memset(text, 0, STRING_LENGTH * sizeof(char));
   gets(text);


   /// Обработка данных
   int words_count = word_counter(text);
   char ** words = string_to_words(text);
   char ** bricks = new char * [words_count];
   memset(bricks, 0, words_count * sizeof(char *));
   for (int index = 0; index < words_count; ++index)
   {
       bricks[index] = string_bricking(words[index]);
   }


   /// Вывод результатов
   std::cout << "String length: " << string_length(text) << std::endl;
   std::cout << "String: " << std::endl;
   string_print(text);
   std::cout << std::endl;
   std::cout << "String to words: " << std::endl;
   words_print(words, words_count);
   std::cout << "Bricked string: " << std::endl;
   words_print(bricks, words_count);


   /// Освобаждение оесурсов
   words_free(&bricks, words_count);
   words_free(&words, words_count);
   delete [] text;
   return 0;
}
Example #7
0
void process_stddev(void)
{
    struct stddev_cmd stddev_msg;
    struct stddev_res res;
    struct stddev_devtype_res *type_res = NULL;
    struct stddev_ver_res *ver_res = NULL;
    struct stddev_ioctl_cmd *ioctl = NULL;
    struct key_suscription *s = NULL;
    int i = 0, sender_id;  

    while(get_msg_count(CSL_STDDEV_PORT) > 0)
    {
            get_msg(CSL_STDDEV_PORT, &stddev_msg, &sender_id);

            res.logic_deviceid = -1;
            res.command = stddev_msg.command;
            res.msg_id = stddev_msg.msg_id;

            switch(stddev_msg.command)
            {
                    case STDDEV_GET_DEVICETYPE:
                            type_res = (struct stddev_devtype_res*)&res;
                            type_res->dev_type = STDDEV_CHAR;
                            type_res->ret = STDDEV_OK;
                            type_res->msg_id = stddev_msg.msg_id;
                            break;
                    case STDDEV_VER:
                            ver_res = (struct stddev_ver_res*)&res;
                            ver_res->ret = STDDEV_OK;
                            ver_res->ver = STDDEV_VERSION;
                            ver_res->msg_id = stddev_msg.msg_id;
                            break;
                    case STDDEV_GET_DEVICE:
                    case STDDEV_GET_DEVICEX:
                            res.logic_deviceid = stddev_msg.padding0;
                            res.msg_id = stddev_msg.msg_id;
                            res.ret = STDDEV_OK;
                            break;
                    case STDDEV_FREE_DEVICE:
                            res.logic_deviceid = stddev_msg.padding0;
                            res.msg_id = stddev_msg.msg_id;
                            res.ret = STDDEV_OK;
                            break;
                    case STDDEV_IOCTL:
                            ioctl = (struct stddev_ioctl_cmd*)&stddev_msg;
                            res.ret = STDDEV_ERR;
                            res.logic_deviceid = ioctl->logic_deviceid;
               
                            //if(!check_ownership(ioctl->logic_deviceid, sender_id)) break;
                            if(res.logic_deviceid >= NUM_VIRTUAL)
                                    string_print("CONS: ASSERT 1",0,7);

                            ((struct stddev_ioctrl_res *)&res)->dev_error = -1;
                            switch(ioctl->request)
                            {
                                    case CSL_IO_DISABLE_ECHO:
                                            i = 0;
                                            while(i < t[res.logic_deviceid].owners)
                                            {
                                                    if(t[res.logic_deviceid].ownerid[i] == sender_id)
                                                    {
                                                            t[res.logic_deviceid].force_echo[i] = CSL_FORCE_NOECHO;
                                                            break;
                                                    }
                                                    i++;
                                            }
                                            res.ret = STDDEV_OK;
                                            break;
                                    case CSL_IO_COMMAND_ECHO:
                                            i = 0;
                                            while(i < t[res.logic_deviceid].owners)
                                            {
                                                    if(t[res.logic_deviceid].ownerid[i] == sender_id)
                                                    {
                                                            t[res.logic_deviceid].force_echo[i] = CSL_FORCE_NONE;
                                                            break;
                                                    }
                                                    i++;
                                            }
                                            res.ret = STDDEV_OK;
                                            break;
                                    case CSL_IO_ENABLE_ECHO:
                                            i = 0;
                                            while(i < t[res.logic_deviceid].owners)
                                            {
                                                    if(t[res.logic_deviceid].ownerid[i] == sender_id)
                                                    {
                                                            t[res.logic_deviceid].force_echo[i] = CSL_FORCE_ECHO;
                                                            break;
                                                    }
                                                    i++;
                                            }
                                            res.ret = STDDEV_OK;
                                            break;
                                    case CSL_IO_SWITCH:
                                            vt_switch(ioctl->logic_deviceid);
                                            res.ret = STDDEV_OK;
                                            break;
                                    case CSL_IO_SETATT:
                                            t[ioctl->logic_deviceid].attribute = (char)ioctl->param;
                                            res.ret = STDDEV_OK;
                                            break;
                                    case CSL_IO_SETSIGNALPORT:
                                            s = get_suscription(sender_id, ioctl->logic_deviceid);
                    if(s)
                    {
                                                s->port = ioctl->param;
                                                res.ret = STDDEV_OK;
                    }
                    else
                    {
                            res.ret = STDDEV_ERR;
                    }
                                            break;
                case CSL_IO_SIGNAL:
                                            s = get_suscription(sender_id, ioctl->logic_deviceid);
                                            if(s == NULL || s->susc != MAX_SUSCRIPTIONS)
                                            {
                                                    res.ret = STDDEV_OK;
                                                    s->keycodes[s->susc] = (char)ioctl->param;
                                                    s->susc++;
                                            }
                    else
                    {
                            res.ret = STDDEV_ERR;
                    }
                                            break;
                                    case CSL_IO_USIGNAL:
                                            if(remove_suscription(sender_id, ioctl->logic_deviceid))
                                                    res.ret = STDDEV_ERR;
                                            else
                                                    res.ret = STDDEV_OK;
                                            break;
                case CSL_IO_MSIGNAL:
                    {
                        for(i = 0; i < MAX_MOUSE_SUSCRIPTIONS; i++)
                        {
                            if(mouse_suscriptions[i] == -1)
                                break;
                        }
                        if(i == MAX_MOUSE_SUSCRIPTIONS)
                        {
                            res.ret = STDDEV_ERR;
                        }
                        else
                        {
                            mouse_suscriptions[i] = sender_id;
                            mouse_suscriptions_ports[i] = 0;
                            msuscs++;
                            res.ret = STDDEV_OK;
                        }
                    }
                                            break;
                case CSL_IO_UMSIGNAL:
                    {
                        for(i = 0; i < MAX_MOUSE_SUSCRIPTIONS; i++)
                        {
                            if(mouse_suscriptions[i] == sender_id)
                                break;
                        }
                        if(i == MAX_MOUSE_SUSCRIPTIONS)
                        {
                            res.ret = STDDEV_ERR;
                        }
                        else
                        {
                            mouse_suscriptions[i] = -1;
                            msuscs--;
                            res.ret = STDDEV_OK;
                        }
                    }
                                            break;
                case CSL_IO_SETMSIGNALPORT:
                                            {
                        for(i = 0; i < MAX_MOUSE_SUSCRIPTIONS; i++)
                        {
                            if(mouse_suscriptions[i] == sender_id)
                                break;
                        }
                        if(i == MAX_MOUSE_SUSCRIPTIONS)
                        {
                            res.ret = STDDEV_ERR;
                        }
                        else
                        {
                            mouse_suscriptions_ports[i] = ioctl->param;
                            res.ret = STDDEV_OK;
                        }
                    }
                                            break;
                case CSL_MOUSE_ENABLE:
                    mouse_enable(ioctl->param);
                                            res.ret = STDDEV_OK;
                    break;
                            }
                    break;
            }
            send_msg(sender_id, stddev_msg.ret_port, &res);
    }
}
Example #8
0
PmReturn_t
obj_print(pPmObj_t pobj, uint8_t is_expr_repr, uint8_t is_nested)
{
    PmReturn_t retval = PM_RET_OK;

    C_ASSERT(pobj != C_NULL);

    /* Something gets printed unless it's None in an unnested expression */
    if (!((OBJ_GET_TYPE(pobj) == OBJ_TYPE_NON) && is_expr_repr && !is_nested))
    {
        gVmGlobal.somethingPrinted = C_TRUE;
    }

    switch (OBJ_GET_TYPE(pobj))
    {
        case OBJ_TYPE_NON:
            if (!is_expr_repr || is_nested)
            {
                plat_putByte('N');
                plat_putByte('o');
                plat_putByte('n');
                retval = plat_putByte('e');
            }
            break;
        case OBJ_TYPE_INT:
            retval = int_print(pobj);
            break;
#ifdef HAVE_FLOAT
        case OBJ_TYPE_FLT:
            retval = float_print(pobj);
            break;
#endif /* HAVE_FLOAT */
        case OBJ_TYPE_STR:
            retval = string_print(pobj, (is_expr_repr || is_nested));
            break;
        case OBJ_TYPE_TUP:
            retval = tuple_print(pobj);
            break;
        case OBJ_TYPE_LST:
            retval = list_print(pobj);
            break;
        case OBJ_TYPE_DIC:
            retval = dict_print(pobj);
            break;
        case OBJ_TYPE_BOOL:
            if (((pPmBoolean_t) pobj)->val == C_TRUE)
            {
                plat_putByte('T');
                plat_putByte('r');
                plat_putByte('u');
            }
            else
            {
                plat_putByte('F');
                plat_putByte('a');
                plat_putByte('l');
                plat_putByte('s');
            }
            retval = plat_putByte('e');
            break;

        case OBJ_TYPE_CLI:
#ifdef HAVE_BYTEARRAY
            {
                pPmObj_t pobj2;

                retval = dict_getItem((pPmObj_t)((pPmInstance_t)pobj)->cli_attrs,
                                      PM_NONE,
                                      (pPmObj_t *)&pobj2);
                if ((retval == PM_RET_OK)
                    && (OBJ_GET_TYPE(pobj2) == OBJ_TYPE_BYA))
                {
                    retval = bytearray_print(pobj2);
                    break;
                }
            }
#endif /* HAVE_BYTEARRAY */

        case OBJ_TYPE_COB:
        case OBJ_TYPE_MOD:
        case OBJ_TYPE_CLO:
        case OBJ_TYPE_FXN:
        case OBJ_TYPE_CIM:
        case OBJ_TYPE_NIM:
        case OBJ_TYPE_NOB:
        case OBJ_TYPE_THR:
        case OBJ_TYPE_CIO:
        case OBJ_TYPE_MTH:
        case OBJ_TYPE_SQI:
            plat_putByte('<');
            plat_putByte('o');
            plat_putByte('b');
            plat_putByte('j');
            plat_putByte(' ');
            plat_putByte('t');
            plat_putByte('y');
            plat_putByte('p');
            plat_putByte('e');
            plat_putByte(' ');
            plat_putByte('0');
            plat_putByte('x');
            int_printHexByte(OBJ_GET_TYPE(pobj));
            plat_putByte(' ');
            plat_putByte('@');
            plat_putByte(' ');
            plat_putByte('0');
            plat_putByte('x');
            _int_printHex((intptr_t)pobj);
            retval = plat_putByte('>');
            break;

        default:
            /* Otherwise raise a TypeError */
            PM_RAISE(retval, PM_RET_EX_TYPE);
            break;
    }
    return retval;
}
Example #9
0
PmReturn_t
obj_print(pPmObj_t pobj, uint8_t is_expr_repr, uint8_t is_nested)
{
    PmReturn_t retval = PM_RET_OK;

    C_ASSERT(pobj != C_NULL);

    /* Something gets printed unless it's None in an unnested expression */
    if (!((OBJ_GET_TYPE(pobj) == OBJ_TYPE_NON) && is_expr_repr && !is_nested))
    {
        gVmGlobal.somethingPrinted = C_TRUE;
    }

    switch (OBJ_GET_TYPE(pobj))
    {
    case OBJ_TYPE_NON:
        if (!is_expr_repr || is_nested)
        {
            sli_puts((uint8_t *)"None");
        }
        break;
    case OBJ_TYPE_INT:
        retval = int_print(pobj);
        break;
#ifdef HAVE_FLOAT
    case OBJ_TYPE_FLT:
        retval = float_print(pobj);
        break;
#endif /* HAVE_FLOAT */
    case OBJ_TYPE_STR:
        retval = string_print(pobj, (is_expr_repr || is_nested));
        break;
    case OBJ_TYPE_TUP:
        retval = tuple_print(pobj);
        break;
    case OBJ_TYPE_LST:
        retval = list_print(pobj);
        break;
    case OBJ_TYPE_DIC:
        retval = dict_print(pobj);
        break;
    case OBJ_TYPE_BOOL:
        sli_puts(
            (((pPmBoolean_t) pobj)->val == C_TRUE)
            ? (uint8_t *)"True"
            : (uint8_t *)"False");
        break;

    case OBJ_TYPE_CLI:
#ifdef HAVE_BYTEARRAY
    {
        pPmObj_t pobj2;

        retval = dict_getItem((pPmObj_t)((pPmInstance_t)pobj)->cli_attrs,
                              PM_NONE,
                              (pPmObj_t *)&pobj2);
        if ((retval == PM_RET_OK)
                && (OBJ_GET_TYPE(pobj2) == OBJ_TYPE_BYA))
        {
            retval = bytearray_print(pobj2);
            break;
        }
    }
#endif /* HAVE_BYTEARRAY */

    case OBJ_TYPE_COB:
    case OBJ_TYPE_MOD:
    case OBJ_TYPE_CLO:
    case OBJ_TYPE_FXN:
    case OBJ_TYPE_CIM:
    case OBJ_TYPE_NIM:
    case OBJ_TYPE_NOB:
    case OBJ_TYPE_THR:
    case OBJ_TYPE_CIO:
    case OBJ_TYPE_MTH:
    case OBJ_TYPE_SQI:
    {
        uint8_t buf[17];
        sli_puts((uint8_t *)"<obj type 0x");
        sli_btoa16(OBJ_GET_TYPE(pobj), buf, sizeof(buf), C_TRUE);
        sli_puts(buf);
        sli_puts((uint8_t *)" @ 0x");
        sli_ptoa16((intptr_t)pobj, buf, sizeof(buf), C_TRUE);
        sli_puts(buf);
        retval = plat_putByte('>');
        break;
    }

    default:
        /* Otherwise raise a TypeError */
        PM_RAISE(retval, PM_RET_EX_TYPE);
        break;
    }
    return retval;
}
/*******************************************************************
 * Reduced snprintf to be used for Trusted firmware.
 * The following type specifiers are supported:
 *
 * %d or %i - signed decimal format
 * %s - string format
 * %u - unsigned decimal format
 *
 * The function panics on all other formats specifiers.
 *
 * It returns the number of characters that would be written if the
 * buffer was big enough. If it returns a value lower than n, the
 * whole string has been written.
 *******************************************************************/
int snprintf(char *s, size_t n, const char *fmt, ...)
{
	va_list args;
	int num;
	unsigned int unum;
	char *str;
	size_t chars_printed = 0U;

	if (n == 0U) {
		/* There isn't space for anything. */
	} else if (n == 1U) {
		/* Buffer is too small to actually write anything else. */
		*s = '\0';
		n = 0U;
	} else {
		/* Reserve space for the terminator character. */
		n--;
	}

	va_start(args, fmt);
	while (*fmt != '\0') {

		if (*fmt == '%') {
			fmt++;
			/* Check the format specifier. */
			switch (*fmt) {
			case 'i':
			case 'd':
				num = va_arg(args, int);

				if (num < 0) {
					if (chars_printed < n) {
						*s = '-';
						s++;
					}
					chars_printed++;

					unum = (unsigned int)-num;
				} else {
					unum = (unsigned int)num;
				}

				unsigned_dec_print(&s, n, &chars_printed, unum);
				break;
			case 's':
				str = va_arg(args, char *);
				string_print(&s, n, &chars_printed, str);
				break;
			case 'u':
				unum = va_arg(args, unsigned int);
				unsigned_dec_print(&s, n, &chars_printed, unum);
				break;
			default:
				/* Panic on any other format specifier. */
				ERROR("snprintf: specifier with ASCII code '%d' not supported.",
				      *fmt);
				plat_panic_handler();
				assert(0); /* Unreachable */
			}
			fmt++;
			continue;
		}

		if (chars_printed < n) {
			*s = *fmt;
			s++;
		}

		fmt++;
		chars_printed++;
	}
Example #11
0
int main(int argc, char **argv)
{
    vector *v;
    string *s;
    string **tmp;
    string *sup;
    int i;

    v = vector_init(stcmp);
    sup = string_init_cstring("6");

    while(--argc)
    {
        s = string_init_cstring(argv[argc]);
        vector_append(v, s);
    }

    printf("size: %d\n", v->len);

    printf("---\n");

    /* Print. */
    for(i = 0; i < v->len; ++i)
        string_println(vector_get(v, i));

    printf("---\n");

    /* Sort and print again. */
    vector_sort(v);
    for(i = 0; i < v->len; ++i)
        string_println(vector_get(v, i));

    printf("---\n");

    /* Search for sup. */
    if(vector_index(v, sup) != -1)
        string_print(sup), printf(" found.\n");
    else
        string_print(sup), printf(" not found.\n");

    printf("---\n");

    /* Using bsearch. */
    tmp = vector_search(v, sup);

    if(tmp)
    {
        string_print(*tmp);
        printf(" found using bsearch.\n");
    }
    else
    {
        string_print(sup);
        printf(" bsearch failed.\n");
    }

    printf("---\n");

    /* Shuffle and print again. */
    vector_shuffle(v);

    for(i = 0; i < v->len; ++i)
        string_println(vector_get(v, i));

    printf("---\n");

    for(i = 0; i < v->len; ++i)
        string_free(vector_get(v, i));

    string_free(sup);
    vector_free(v);

    return 0;
}