Перейти к содержанию

Pragma Case для SourceMod


ryancoolround

Рекомендуемые сообщения

  • Администратор

Pragma это переменные (Да, смейтесь, я не силен в терминологии SourceMod), которые обычно при написании плагина мы указываем в самом верху исходника. Обычно это что то вроде:

#pragma semicolon 1
#pragma tabsize 0
#pragma newdecls optional
#pragma newdecls required

Так вот, чисто для себя, оставлю здесь полный Pragma Case. Возможно мне пригодится в будущем.

case tpPRAGMA:
            if (!SKIPPING) {
                if (lex(&val, &str) == tSYMBOL) {
                    if (strcmp(str, "ctrlchar") == 0) {
                        while (*lptr <= ' ' && *lptr != '\0')
                            lptr++;
                        if (*lptr == '\0') {
                            sc_ctrlchar = sc_ctrlchar_org;
                        } else {
                            if (lex(&val, &str) != tNUMBER)
                                error(27); /* invalid character constant */
                            sc_ctrlchar = (char)val;
                        }
                    } else if (strcmp(str, "deprecated") == 0) {
                        while (*lptr <= ' ' && *lptr != '\0')
                            lptr++;
                        pc_deprecate = (char*)lptr;
                        lptr = (unsigned char*)strchr(
                            (char*)lptr,
                            '\0'); /* skip to end (ignore "extra characters on line") */
                    } else if (strcmp(str, "dynamic") == 0) {
                        preproc_expr(&pc_stksize, NULL);
                    } else if (strcmp(str, "rational") == 0) {
                        while (*lptr != '\0')
                            lptr++;
                    } else if (strcmp(str, "semicolon") == 0) {
                        cell val;
                        preproc_expr(&val, NULL);
                        sc_needsemicolon = (int)val;
                    } else if (strcmp(str, "newdecls") == 0) {
                        while (*lptr <= ' ' && *lptr != '\0')
                            lptr++;
                        if (strncmp((char*)lptr, "required", 8) == 0)
                            sc_require_newdecls = 1;
                        else if (strncmp((char*)lptr, "optional", 8) == 0)
                            sc_require_newdecls = 0;
                        else
                            error(146);
                        lptr = (unsigned char*)strchr(
                            (char*)lptr,
                            '\0'); /* skip to end (ignore "extra characters on line") */
                    } else if (strcmp(str, "tabsize") == 0) {
                        cell val;
                        preproc_expr(&val, NULL);
                        sc_tabsize = (int)val;
                    } else if (strcmp(str, "unused") == 0) {
                        char name[sNAMEMAX + 1];
                        size_t i;
                        int comma;
                        symbol* sym;
                        do {
                            /* get the name */
                            while (*lptr <= ' ' && *lptr != '\0')
                                lptr++;
                            for (i = 0; i < sizeof name && alphanum(*lptr); i++, lptr++)
                                name[i] = *lptr;
                            name[i] = '\0';
                            /* get the symbol */
                            sym = findloc(name);
                            if (sym == NULL)
                                sym = findglb(name);
                            if (sym != NULL) {
                                sym->usage |= uREAD;
                                if (sym->ident == iVARIABLE || sym->ident == iREFERENCE ||
                                    sym->ident == iARRAY || sym->ident == iREFARRAY)
                                    sym->usage |= uWRITTEN;
                            } else {
                                error(17, name); /* undefined symbol */
                            }
                            /* see if a comma follows the name */
                            while (*lptr <= ' ' && *lptr != '\0')
                                lptr++;
                            comma = (*lptr == ',');
                            if (comma)
                                lptr++;
                        } while (comma);
                    } else {
                        error(207); /* unknown #pragma */
                    }
                } else {
                    error(207); /* unknown #pragma */
                }
                check_empty(lptr);
            }
            break;

 

Мир изменился, он стал другим!

Ссылка на комментарий
Поделиться на другие сайты

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Лучшие авторы

    На этой неделе никто репутацию не получал

  • Последние достижения

    • GAMADA повысил звание
      Lvl 1
    • Darya повысил звание
      Lvl 14
    • Mad.Eagle повысил звание
      Lvl 5
    • Mad.Eagle повысил звание
      Lvl 4
    • Plamen474 получил значок
      Бета
×
×
  • Создать...