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

До Хэллоуина осталось....

 

Pragma Case для SourceMod


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

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

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;

 

sig.php?player_id=3&background=3

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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

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

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

Для комфортной работы IP-Gamers.NET требуется минимум 2000 рублей в месяц. Мы будем очень вам признательны, если вы поможете IP-Gamers.NET выстоять в наше нелегкое время.




×
×
  • Создать...