The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20, opennews (??), 14-Сен-11, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


111. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от pavlinux (ok), 18-Сен-11, 03:15 
>> По заявка слушателей:
> По просьбе автора переименовался.
> Долго не думая стал xks - X Keyboard Switcher
> http://github.com/pavlinux/xks

Два дня я его тут трахал, так них...я и не понял, нахрена оно нужно.

1. Для доступа к /dev/input/event* юзер должен быть root или
  создать отдельную группу и туда добавить всех юзеров кому можно,
  а устройству присваивать RW-RW-R

2. Эта шняга работает через расширение XKB, а все знают, что переключалки XKB
настраиваются в xorg.conf

3. Есть утиль xinput
  

Ответить | Правка | Наверх | Cообщить модератору

116. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от anonymous (??), 18-Сен-11, 03:40 
на тебе, кстати, более вменяемый parse.c:


#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

#include "parse.h"


// Функция удаляет пробелы в начале и конце принятой строки
void alltrim (char *parseline) {
  char *st = parseline;
  //
  if (st == NULL) return;
  while (*st && isspace(*st)) ++st;
  if (!st[0]) { parseline[0] = 0; return; }
  memmove(parseline, st, strlen(st)+1);
  st = parseline+strlen(parseline)-1;
  while (st >= parseline && isspace(*st)) --st;
  if (st < parseline) { st[0] = 0; return; }
  st[1] = 0;
}


// Функция взятия значения параметра из строки вида
// параметр=значение
// значение возвращается как строка
void getparamvalue (char *parseline) {
  const char *vpos = strchr(parseline, '=');
  if (vpos++) {
    memmove(parseline, vpos, strlen(vpos)+1);
  } else {
    parseline[0] = '\0';
  }
}


// Функция взятия имени параметра из строки вида
// параметр=значение
// значение возвращается как строка
void getparamname (char *parseline) {
  char *vpos = strchr(parseline, '=');
  if (vpos) {
    *vpos = 0;
  } else {
    parseline[0] = '\0';
  }
}


Ответить | Правка | Наверх | Cообщить модератору

124. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от pavlinux (ok), 19-Сен-11, 06:49 
> на тебе, кстати, более вменяемый parse.c:

Добавил.

Ответить | Правка | Наверх | Cообщить модератору

129. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от xintreaemail (ok), 19-Сен-11, 13:45 
> на тебе, кстати, более вменяемый parse.c:

 const char *vpos = strchr(parseline, '='); 
  if (vpos++) {
    memmove(parseline, vpos, strlen(vpos)+1);
  } else {
    parseline[0] = '\0';
  }

Вот скажи мне, горе-программист. Зачем ты так код шифруешь? Ведь можно же написать в явном виде:

 const char *vpos = strchr(parseline, '='); 
  if(vpos==NULL)
   parseline[0] = '\0';
  else
   memmove(parseline, vpos, strlen(vpos)+1);

и сразу видна логика действий.

Ответить | Правка | К родителю #116 | Наверх | Cообщить модератору

130. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от Andrey Mitrofanov (?), 19-Сен-11, 14:56 
>   if (vpos++) {
>     memmove(parseline, vpos, strlen(vpos)+1);
> Вот скажи мне, горе-программист. Зачем ты так код шифруешь? Ведь можно же
> написать в явном виде:

Вот скажи мне, горе-программист№2, зачем ты инкремент потерял? %)

>   if(vpos==NULL)
>    memmove(parseline, vpos, strlen(vpos)+1);

Ответить | Правка | Наверх | Cообщить модератору

131. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от xintreaemail (ok), 19-Сен-11, 15:10 
> Вот скажи мне, горе-программист№2, зачем ты инкремент потерял? %)
>>   if(vpos==NULL)
>>    memmove(parseline, vpos, strlen(vpos)+1);

Затем, что исходный код зашифрован. В одном месте происходит и инкремент, и срабатывание условия. Это нарушение всех гайдов, какие только существуют на свете. Вы же пишите программы для людей, а не для компьютеров. Вот и пишите по-человечески, чтоб человек не ошибался. Компьютеру всеравно как вы зашифруете код. Человеку - нет.

Ответить | Правка | Наверх | Cообщить модератору

133. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  –1 +/
Сообщение от anonymous (??), 19-Сен-11, 20:26 
> Затем, что исходный код зашифрован.

плачу. стенаю просто от плача. такие же, как ты, жалуются потом в интернетах:
"obfuscated c programming, где используются трюки навроде «while (*d++ = *s++);»"

конечно, для вас это — «трюки». а для любого *программиста* вполне нормальный код, который пишется на автомате и читается точно так же.

но для тебя операции инкремента — Магия, я понимаю.

Ответить | Правка | Наверх | Cообщить модератору

140. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от xintreaemail (ok), 20-Сен-11, 13:53 
>> Затем, что исходный код зашифрован.
> плачу. стенаю просто от плача. такие же, как ты, жалуются потом в
> интернетах:
> "obfuscated c programming, где используются трюки навроде «while (*d++ = *s++);»"
> конечно, для вас это — «трюки». а для любого *программиста* вполне нормальный
> код, который пишется на автомате и читается точно так же.
> но для тебя операции инкремента — Магия, я понимаю.

Я тоже понимаю, что использование трюков - это для тебя радость жизни.

Строго говоря, трюк *d++ = *s++ по науке называется "устойчивое выражение". Использование ограниченного числа общепринятных устойчивых выражаний даже приветсвуется. Почему? Потому что устойчивое выражение рассматривается как абстракция, которая делает что-то известное. И даже если программист не понимает как оно работает, или не хочет проверять действительно ли оно работает так как нужно при разных граничных условиях, он может положиться на опыт использования выражения другими и сказать: пусть будет так, оно работает.

Во всем остальном, советую тебе начать читать книги по проектированию. Ты к сожалению этого не умеешь делать. Начать можно с банальных постулатов:


Выражайтесь как можно понятнее
http://piccy.info/view3/2001061/afad5e7a875b71e23ea36189ac95.../

Разбивайте сложные выражения на части
http://piccy.info/view3/2001069/c54d22bd426646ae92e9e37db9de.../

И специально для любителей инкрементов:

Учитывайте возможные побочные эффекты
http://piccy.info/view3/2001072/256ee2c58d3852526a04764bd1e3.../


Распечатай себе, и повесь на стенку. Читать три раза в сутки перед едой.

Ответить | Правка | Наверх | Cообщить модератору

163. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от AHAHAC (ok), 21-Сен-11, 03:39 
> Ты к сожалению этого не умеешь делать. Начать можно с банальных постулатов
>Выражайтесь как можно понятнее
> Разбивайте сложные выражения на части
> Учитывайте возможные побочные эффекты

ты K&R читал? От тамошних примеров у тя моск наверно раком встанет.

вот так выглядит функция простейшая strcpy()


char *strcpy(char *dest, const char *src)
{
        char *tmp = dest;

          while ((*dest++ = *src++) != '\0')

        return tmp;
}

а вот так уже strncpy()


char *strncpy(char *dest, const char *src, size_t count)
{
        char *tmp = dest;

        while (count) {
                if ((*tmp = *src) != 0)
                        src++;
                tmp++;
                count--;
        }
        return dest;
}

и чтоб совсем раком встало - strncat() и memmove()


char *strncat(char *dest, const char *src, size_t count)
{
        char *tmp = dest;

        if (count) {
                while (*dest)
                        dest++;
                while ((*dest++ = *src++) != 0) {
                        if (--count == 0) {
                                *dest = '\0';
                                break;
                        }
                }
        }
        return tmp;
}

void *memmove(void *dest, const void *src, size_t count)
{
        char *tmp;
        const char *s;

        if (dest <= src) {
                tmp = dest;
                s = src;
                while (count--)
                        *tmp++ = *s++;
        } else {
                tmp = dest;
                tmp += count;
                s = src;
                s += count;
                while (count--)
                        *--tmp = *--s;
        }
        return dest;
}

Уже чую запах разлагающегося трупа... :)

Ответить | Правка | Наверх | Cообщить модератору

164. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от anonymous (??), 21-Сен-11, 03:49 
во-первых, чукча не читатель.

а во-вторых, щаз тебе задвинут про «устойчивые выражения, которые не обязательно понимать, потому что все редакторы умеют копипасту».

Ответить | Правка | Наверх | Cообщить модератору

175. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от xintreaemail (ok), 21-Сен-11, 12:30 
>> Выражайтесь как можно понятнее
>> Разбивайте сложные выражения на части
>> Учитывайте возможные побочные эффекты
> ты K&R читал? От тамошних примеров у тя моск наверно раком встанет.
> вот так выглядит функция простейшая strcpy()

Хароший вопрос.

Идем на StackOverflow сюды: http://stackoverflow.com/questions/810129/how-does-whiles-t-... и видим, что не только читал, но и указал главу и параграф, как выводится это шаманство шаг за шагом. Сделал я это раньше, чем ты задал вопрос, как раз смотрел интернет, и решил человеку помочь.

И да, как меня просят, я еще раз задвину про устойчивые выражения. K&R в своей книге пишут последовательно, как появляется то или иное решение. Оно же не на пустом месте появилось. Но это у K&R. А у тебя - на пустом. Ты вываливаешь куски кода, и наяриваешь на них как мартышка, думая что немногим доступен дзен кода с побочными эффектами.

Ответить | Правка | К родителю #163 | Наверх | Cообщить модератору

180. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от anonymous (??), 21-Сен-11, 14:34 
(ржот) ты думаешь, что твои комментарии в коде, по полезности равные «// прибавляем единицу к i» что-то поясняют?

подобный стиль комментирования, кстати, свойственен или совсем новичку, который ещё не способен читать код, и потому пересказывает его сам себе словами обычного языка, или склеротику, который также не способен читать код, как новичок, и потому…

слушай, ну ты же доиграешься до того, что я не поленюсь, возьму полный исходник и устрою разбор полётов. с цитатами из тебя же и последующим избиением младенцев. тебе так охота публичного позорища? и да, я возьму именно оригинал на C++. на котором удобно продемонстрировать, что С++ ты тоже не знаешь.

Ответить | Правка | Наверх | Cообщить модератору

181. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от xintreaemail (ok), 21-Сен-11, 15:11 
> слушай, ну ты же доиграешься до того, что я не поленюсь, возьму
> полный исходник и устрою разбор полётов. с цитатами из тебя же
> и последующим избиением младенцев. тебе так охота публичного позорища?

Ты и так уже неделю только этим и занимаешься. Можешь продолжать, разрешаю.

Единственная просьба - чтобы быть объективным, перед разбором полётов продемонстрируй, пожалуста, рабочий пример своего собственного кода. Желательно, какой-нибудь опенсорчный проект, ведь негоже, чтоб такой талантище пропадал втуне. Это необходимо для того, чтобы объективно оценить качество работы твоего кода. Выполняет ли он свои функции? Не вызывает ли проблем у пользователя? Решает ли код задачу, на него возложенную, и если да, то наколько хорошо?

Вот когда ты это сделаешь, мы посмотрим на тебя и на твой код, и скажем: этот парень действительно разбирается в том, что решил критиковать. После этого имеет смысл продолжать наш увлекательный разговор.

Ну а пока ты этого не сделал, все твои потуги - это просто банальная газификация в лужи.

Ответить | Правка | Наверх | Cообщить модератору

182. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  –1 +/
Сообщение от anonymous (??), 21-Сен-11, 16:03 
ты великолепен, да. до тебя даже не доходит, что разбор твоего гуано и будет такой «демонстрацией» — именно в силу публичности разбора и возможности выпороть меня, в свою очередь, если я в разборе накосячу. помедитируй над этим.

а код я тебе, натурально, показывать не стану: у тебя мозг взорвётся. ну много ты поймёшь в реализациях Scheme и Smalltalk, а? вряд ли. зато всенепременно будешь вопить, что «goto низя!», «реализация VM непонятна среднему идиоту» и прочую ерунду.

Ответить | Правка | К родителю #181 | Наверх | Cообщить модератору

134. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от anonymous (??), 19-Сен-11, 20:28 
> Вот скажи мне, горе-программист№2, зачем ты инкремент потерял? %)

а он не понял, что там за загадочные плюсики, и на всякий случай решил их выкинуть. то ли дело его код, чистый, красивый, незашифрованый, понятный. я не удержусь, процитирую:


void getparamvalue(char *parseline)
{
  char returnline[255];
  char tmpline[255];
  int pos,startpos,i;

  sprintf(tmpline,"%s",parseline);

  startpos=0;
  for(i=0;i<=strlen(tmpline);i++)if(tmpline[i]=='=')startpos=i+1;

  if(startpos!=0)
   {
    pos=0;
    for(i=startpos;i<=strlen(tmpline);i++)
     {
      returnline[pos]=tmpline[i];
      pos=pos+1;
     }
    returnline[pos]='\0';

    // Копирование результата в принятый массив
    for(i=0;i<=strlen(returnline);i++)parseline[i]=returnline[i];
    parseline[i]='\0';

    return;
   }

  parseline[0]='\0';
  return;
}


образец стиля, понятности и безошибочности.
Ответить | Правка | К родителю #130 | Наверх | Cообщить модератору

138. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от xintreaemail (ok), 20-Сен-11, 11:55 
> а он не понял, что там за загадочные плюсики, и на всякий случай решил их выкинуть. то ли дело его код

Но в нем тоже есть плюсики! Как такое могло случиться???

Ответить | Правка | Наверх | Cообщить модератору

139. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от Okruzhor (ok), 20-Сен-11, 13:24 
>> а он не понял, что там за загадочные плюсики, и на всякий случай решил их выкинуть. то ли дело его код
> Но в нем тоже есть плюсики! Как такое могло случиться???
> pos=pos+1;

То есть двойной плюсик считается синтаксисом завершения заголовка цикла со счётчиком ; и больше ничем . Понимания работы цикла нет , понимания инкремента нет . Интересно , где так учат Си

Ответить | Правка | Наверх | Cообщить модератору

142. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от anonymous (??), 20-Сен-11, 14:33 
> Интересно , где так учат Си

глядя на код, хочется спросить более глобально: где так учат?!

Ответить | Правка | Наверх | Cообщить модератору

145. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от xintreaemail (ok), 20-Сен-11, 14:48 
> То есть двойной плюсик считается синтаксисом завершения заголовка цикла со счётчиком ;
> и больше ничем . Понимания работы цикла нет , понимания инкремента нет .
> Интересно , где так учат Си

Какие далеко идущие выводы. Вам следует почитать тему с начала, зайти на сайт автора и увидеть там раздел Demo Design. В нем вы с удивлением обнаружите шесть интро, сделанных на Ассемблере. Вы случайно не знаете, в ассемблере есть инкремент и циклы?

Ответить | Правка | К родителю #139 | Наверх | Cообщить модератору

148. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от anonymous (??), 20-Сен-11, 15:06 
> сайт автора и увидеть там раздел Demo Design. В нем вы
> с удивлением обнаружите шесть интро, сделанных на Ассемблере.

что не значит совершенно ничего. «одарённых вьюношей», писавших на асме, я видел далеко не одного. потом они пытались использовать ЯВУ… и у них получались такие же портянки, как и на асме.

вопреки мнению людей, которые почёсывают ЧСВ, считая, что на ассемблере писать очень сложно, язык ассемблера — очень простой язык. особенно уровня 286/386. и писать на этом не сложно, а нудно. единственное, что может показать программа на асме — что у автора было много свободного времени и дурной молодецкой силы. гвозди бы делать из этих людей! я лет в 20 тоже таким баловался. потом прошло.

Ответить | Правка | Наверх | Cообщить модератору

152. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от xintreaemail (ok), 20-Сен-11, 15:31 
> вопреки мнению людей, которые почёсывают ЧСВ, считая, что на ассемблере писать очень
> сложно, язык ассемблера — очень простой язык

Хорошо что хоть это ты понимаешь. Но вопрос был в другом - являются ли циклы и инкремент чем-то экзотическим в ассемблере? Пишутся ли программы на ассемблере без циклов и без инкремента?

Ответить | Правка | Наверх | Cообщить модератору

159. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от Okruzhor (ok), 20-Сен-11, 16:12 
>> Интересно , где так учат Си
> Какие далеко идущие выводы.

Это элементарно , Ватсон . Во-1-х из 'pos=pos+1' следует , что инкремент не усвоен . Во-2-х из п.1 и наличия инкремента в заголовке цикла (что как бы противоречит п.1) следует , что данный приём применения инкремента вызубрен без понимания цикла со счётчиком в Си

Упоминание языка ассемблера -- мимо темы : речь идёт о Си , а не о других языках

Серьёзно , разберитесь с инкрементом и декрементом в префиксной и постфиксной форме . Если сочтёте постфикс "обфусцирующим" , не используйте его даже в заголовках циклов . Если сочтёте обе формы обфусцирующими , применяйте 'pos=pos+1' даже в заголовке цикла или хотя бы разберитесь , которой из 2 форм соответствует паскальский стиль

Ну и конечно избегайте вычисления длины строки заново на каждом шаге сканирования строки

P.S: Я не упоминал про грузчиков и прочее . Просто жаль видеть новичковый стиль в полезной программе . И да , боязно её ставить из-за этого подозрительного стиля

Ответить | Правка | К родителю #145 | Наверх | Cообщить модератору

161. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от xintreaemail (ok), 20-Сен-11, 17:22 
> Ну и конечно избегайте вычисления длины строки заново на каждом шаге сканирования
> строки

Я кстати подизассемблировал варианты с вычислением strlen() на каждом шаге цикла. Действительно, вызов strlen() исчезает (при опитмизации O0) только при описании строки как const char *, на обычных чарах он остается. Честноговоря считал, что уже давно как анализаторы умеют оптимизировать циклы так, что если в них не происходит запись в область памяти строки, то вызов strlen() соптимизируется. Ну хотя бы в случаях, когда нет вызова подпрограмм, в которых возможна модификация. А оказывается оптимизация ориентируется просто на тип данных. Если const -> модифицирование невоможно -> оптимизируем.

Ответить | Правка | Наверх | Cообщить модератору

162. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от anonymous (??), 20-Сен-11, 17:30 
стандарт не читай @ удивляй!
Ответить | Правка | Наверх | Cообщить модератору

173. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от Аноним (-), 21-Сен-11, 07:19 
> с удивлением обнаружите шесть интро, сделанных на Ассемблере. Вы случайно не
> знаете, в ассемблере есть инкремент и циклы?

В ассемблере это есть, но в си это сделано немного иначе. У некоторых RISC процессоров кстати такие вещи как предекремент/постинкремент регистра в паре с некоей операцией и/или условием - реализовано аппаратно, как раз специально чтобы компилерам было удобно подобные конструкции в машинный код транслировать :)


Ответить | Правка | К родителю #145 | Наверх | Cообщить модератору

136. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от pavlinux (ok), 20-Сен-11, 06:05 
Выносим моск дальше, но с пользой - теперь в конфиге можно ставить пробелы и табы после '='

#define likely(x) __builtin_expect(!!(x), 1) // Вместо JNZ будет JE (асм.) :)
#define prefetch(x) __builtin_prefetch(x) // Нириальный разгон

void getparamvalue(char *parseline) {

    const char *vpos = rawmemchr(parseline, '=');
    
    if (likely(vpos++)) {
        while (*++vpos == ' ' || *vpos == '\t') {;}
        prefetch(parseline); // Чтоб в кэше валялось
        memmove(parseline, vpos, strlen(vpos) + 1);
    } else
        parseline[0] = '\0';
}

И нипёт :)


403b5d:       3c 09                   cmp    $0x9,%al
403b5f:       74 e5                   je     403b46 <getparamvalue+0x36>
403b61:       48 8b 45 e8             mov    -0x18(%rbp),%rax
403b65:       0f 18 08                prefetcht0 (%rax)
403b68:       48 8b 45 f8             mov    -0x8(%rbp),%rax
403b6c:       48 c7 45 e0 ff ff ff    movq   $0xffffffffffffffff,-0x20(%rbp)

YES!!! je и prefetch - есть!!! :)
Ответить | Правка | К родителю #129 | Наверх | Cообщить модератору

143. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от anonymous (??), 20-Сен-11, 14:34 
будешь выпендриваться — мне придётся тогда выступить с универсальным парзером конфигов, а не тем страшилищем, что там сейчас. поимей совесть!
Ответить | Правка | Наверх | Cообщить модератору

117. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от anonymous (??), 18-Сен-11, 03:41 
йопт.
 if (st < parseline) { st[0] = 0; return; }

можно убрать нафиг, конечно.
Ответить | Правка | К родителю #111 | Наверх | Cообщить модератору

118. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от anonymous (??), 18-Сен-11, 03:44 
нужно таки затем, что xkb не умеет переключать по отжатию, например. или по простому tap-у того же шифта, при этом не теряя «нормальных» функций шифта.

другое дело, что хорошая идея сделана кривовато. но сама идея ничо так.

кстати: есть какой-нибудь простой способ определить, какой из event'ов — клава? вот у меня он вообще третий, нарыл методом перебора.

Ответить | Правка | К родителю #111 | Наверх | Cообщить модератору

122. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от anonymous (??), 18-Сен-11, 19:07 
> кстати: есть какой-нибудь простой способ определить, какой из event'ов — клава? вот
> у меня он вообще третий, нарыл методом перебора.

есть. вот такой, тупой, но часто работает:


// don't forget to free() result!
// returns NULL or device file name
static char *findKeyboardDevice (void) {
  int f;
  //
  for (f = 0; f <= 31; ++f) { // the Elder says there canst be no other numbers
    char dev[32];
    int fd;
    //
    sprintf(dev, "/dev/input/event%d", f);
    fd = open(dev, O_RDONLY);
    if (fd >= 0) {
      char name[128];
      int len = ioctl(fd, EVIOCGNAME(sizeof(name)-1), name);
      close(fd);
      if (len > 0) {
        name[len] = 0;
        if (strcasestr(name, "keyboard")) return strdup(dev);
      }
    }
  }
  return NULL;
}

чо, сам спрашиваю, сам отвечаю. самоудовлетворение-с.

Ответить | Правка | Наверх | Cообщить модератору

125. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от pavlinux (ok), 19-Сен-11, 07:02 
>> кстати: есть какой-нибудь простой способ определить, какой из event'ов — клава? вот
>> у меня он вообще третий, нарыл методом перебора.
> есть. вот такой, тупой, но часто работает:

Добавил :)

Ответить | Правка | Наверх | Cообщить модератору

126. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от anonymous (??), 19-Сен-11, 07:20 
> Добавил :)

интересно, а автор оригинала добавит? ну, то есть, понятно, что весь мой гениальный код — сплошное PD и его можно смело тащить в оригинал.

кстати, судя по main у меня закралось подозрение, что с системами контроля версий автор оригинала дружит примерно так же, как и с c/c++.

(умильно) эх… напоминает мне меня же лет в 18. я тогда тоже считал, что «придираются к частностям» (ну, типа strlen() в цикле, незнания про strcpy() — хотя в одном месте я её видел, — незнакомством с strchr() и ты пы) только унылые старпёры. которые способны лишь на цитирование зазубреных библиотек и никак не умеют into свободный полёт фантазии. а вместо системы контроля версий у меня была утилита, которая архивирует рабочий каталог и складывает архивы в специальное место.

(задумчиво) рудименты таки остались: до сих пор не доверяю реализации strtok() и пишу свои токенизаторы.

Ответить | Правка | Наверх | Cообщить модератору

127. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от pavlinux (ok), 19-Сен-11, 07:27 
> (задумчиво) рудименты таки остались: до сих пор не доверяю реализации strtok() и
> пишу свои токенизаторы.

А я вот думаю как от strdup избавиться, нихачу free сувать :/


Ответить | Правка | Наверх | Cообщить модератору

128. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от anonymous (??), 19-Сен-11, 07:44 
> А я вот думаю как от strdup избавиться, нихачу free сувать :/

понаделай статиков да и выкидывай наверх. ну, или привинчивай полноценный сборщик мусора (хихикает).

Ответить | Правка | Наверх | Cообщить модератору

123. "Низкоуровневый переключатель клавиатуры LoLo Switcher 0.20"  +/
Сообщение от anonymous (??), 18-Сен-11, 19:11 
> Два дня я его тут трахал, так них...я и не понял, нахрена
> оно нужно.

после выкидывания 90% кода и забивания сочетаний молотковой хардкодовой магией получилась няшная переключалка по правому ctrl, не сжирающая этот самый ctrl и не реагирующая на ужержание оного более полусекунды. НЯ!

Ответить | Правка | К родителю #111 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру