/dev/lp0
кто работал с параллельным портом в смысле программирования? тут понадобилось временный девайс сделать нули/единички с компа выдать. чтобы схему не собирать подумалось с парпорта выдать... ну и сунулся я в хаутушки, а что-то невнятно пишут что base_address+0 - егойная шина данных base_address+1 - входные линии управления base_address+2 - выходные линии управления скидал скриптик на перле, повесил пару светодиодов. один на данные, второй на один из выходов управления скрипт что-то вроде #!/usr/bin/perl my $base=0; my $out=0; open my $port, ">", "/dev/lp0"; { seek 0, $base+0, 0; print $port pack('C', $out); seek 0, $base+2, 0; print $port pack('C', $out); $out^=0xFF; sleep 1; redo; } и вот что-то не работает как ожидается (мигать раз в сек должен) для меня темный момент с базовым адресом остался я так и не понял 0x378 тудыть надо или 0, что-то невнятно как-то написано, но пробовал и так и этак - фиг. пробовал так же заменять print на syswrite, seek на sysseek итп думал мож с буфферизацией что - хез. светодиодики подключенные все время светятся, при прохождении через функцию open "промаргивают" а дальше опять действия скрипта на них не влияют. не подскажет кто в чем дело или же ткнет во внятную хаутушку по программингу парпорта в линукс? -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
/dev/lp0
>> кто работал с параллельным портом в смысле программирования? >> тут понадобилось временный девайс сделать нули/единички с компа выдать. >> чтобы схему не собирать подумалось с парпорта выдать... >> >> ну и сунулся я в хаутушки, а что-то невнятно >> >> пишут что >> base_address+0 - егойная шина данных >> base_address+1 - входные линии управления >> base_address+2 - выходные линии управления > > Это не про /dev/lp0, это про гораздо более низкий уровень. вот повсюду противоречивая информация на эту тему =cut include/linux/lp.h /* * bit defines for 8255 status port * base + 1 * accessed with LP_S(minor), which gets the byte... */ #define LP_PBUSY 0x80 /* inverted input, active high */ #define LP_PACK 0x40 /* unchanged input, active low */ #define LP_POUTPA 0x20 /* unchanged input, active high */ #define LP_PSELECD 0x10 /* unchanged input, active high */ #define LP_PERRORP 0x08 /* unchanged input, active low */ /* * defines for 8255 control port * base + 2 * accessed with LP_C(minor) */ #define LP_PINTEN 0x10 /* high to read data in or-ed with data out */ #define LP_PSELECP 0x08 /* inverted output, active low */ #define LP_PINITP 0x04 /* unchanged output, active low */ #define LP_PAUTOLF 0x02 /* inverted output, active low */ #define LP_PSTROBE 0x01 /* short high output on raising edge */ =cut а lp.c соответственно его включает вроде это совпадает с http://www.faqs.org/docs/Linux-mini/IO-Port-Programming.html только не понятно к чему относится базовые адреса vs устройства. в общем буду искать пример программы работы с этими портами :( > /dev/lp0 - это интерфейс к ядерному драйверу, а это про доступ к > железным портам ввода-вывода. Работать на таком уровне из userspace > программ в Linux не полагается (хотя если очень хочется то можно - man > ioperm). Обычно для работы на таком уровне пишется ядерный модуль. про ioperm я читал, мне охота из скриптов покрутить портом, потому я пока по этому варианту идти не хотел бы :( > В общем, рекомендую поискать информацию про устройство Covox - была в > свое время популярна такая штука - устройство для создания звука, > которое люди самостоятельно паяли из резисторов и вешали на параллельный > порт. Драйвер Covox для Linux точно существовал. ага, сейчас погуглю -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: /dev/lp0
On 2007.01.22 at 15:40:20 +0300, Dmitry E. Oboukhov wrote: > кто работал с параллельным портом в смысле программирования? > тут понадобилось временный девайс сделать нули/единички с компа выдать. > чтобы схему не собирать подумалось с парпорта выдать... > > ну и сунулся я в хаутушки, а что-то невнятно > > пишут что > base_address+0 - егойная шина данных > base_address+1 - входные линии управления > base_address+2 - выходные линии управления Это не про /dev/lp0, это про гораздо более низкий уровень. /dev/lp0 - это интерфейс к ядерному драйверу, а это про доступ к железным портам ввода-вывода. Работать на таком уровне из userspace программ в Linux не полагается (хотя если очень хочется то можно - man ioperm). Обычно для работы на таком уровне пишется ядерный модуль. Вообще между /dev/lp0 и физическим параллельным портом в Linux есть ещё один уровень абстракции - parport. Через него работают, например, с подключаемыми к параллельному порту Zip-дисководами. В общем, рекомендую поискать информацию про устройство Covox - была в свое время популярна такая штука - устройство для создания звука, которое люди самостоятельно паяли из резисторов и вешали на параллельный порт. Драйвер Covox для Linux точно существовал. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: /dev/lp0
On Mon, Jan 22, 2007 at 03:40:20PM +0300, Dmitry E. Oboukhov wrote: > кто работал с параллельным портом в смысле программирования? > тут понадобилось временный девайс сделать нули/единички с компа выдать. > чтобы схему не собирать подумалось с парпорта выдать... > > ну и сунулся я в хаутушки, а что-то невнятно > > пишут что > base_address+0 - егойная шина данных > base_address+1 - входные линии управления > base_address+2 - выходные линии управления > > скидал скриптик на перле, повесил пару светодиодов. > > один на данные, второй на один из выходов управления > > скрипт что-то вроде > > #!/usr/bin/perl > > my $base=0; > my $out=0; > open my $port, ">", "/dev/lp0"; > { > seek 0, $base+0, 0; > print $port pack('C', $out); > seek 0, $base+2, 0; > print $port pack('C', $out); > $out^=0xFF; > sleep 1; > redo; > } > > и вот что-то не работает как ожидается (мигать раз в сек должен) > > для меня темный момент с базовым адресом остался я так и не понял 0x378 > тудыть надо или 0, что-то невнятно как-то написано, но пробовал и так и > этак - фиг. > > пробовал так же заменять print на syswrite, seek на sysseek итп > думал мож с буфферизацией что - хез. > > светодиодики подключенные все время светятся, при прохождении через > функцию open "промаргивают" а дальше опять действия скрипта на них не > влияют. > > не подскажет кто в чем дело или же ткнет во внятную хаутушку по > программингу парпорта в линукс? Копать в сторону модуля ppdev и устройства parport, которое он обслуживает. Конкретнее в сторону ioctl. Там всё очень просто. -- Yauhen Kharuzhy jekhor _at_ gmail.com JID: [EMAIL PROTECTED] A: No Q: Should I quote below my post? -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: /dev/lp0
* Dmitry E. Oboukhov <[EMAIL PROTECTED]> [2007-01-22 15:40:20+0300] > повесил пару светодиодов. Для светодиодов есть библиотека libparportled (и libparportled-dev к ней). -- Roman I. Cheplyaka Если под синусом подразумевать косинус, можно обнаружить очень необычные тригонометрические тождества. (c) xaxam signature.asc Description: Digital signature
Re: /dev/lp0
В Пнд, 22/01/2007 в 15:40 +0300, Dmitry E. Oboukhov пишет: > кто работал с параллельным портом в смысле программирования? > тут понадобилось временный девайс сделать нули/единички с компа выдать. > чтобы схему не собирать подумалось с парпорта выдать... > > ну и сунулся я в хаутушки, а что-то невнятно > > пишут что > base_address+0 - егойная шина данных > base_address+1 - входные линии управления > base_address+2 - выходные линии управления > > скидал скриптик на перле, повесил пару светодиодов. > > один на данные, второй на один из выходов управления > > скрипт что-то вроде > > #!/usr/bin/perl > > my $base=0; > my $out=0; > open my $port, ">", "/dev/lp0"; > { > seek 0, $base+0, 0; > print $port pack('C', $out); > seek 0, $base+2, 0; > print $port pack('C', $out); > $out^=0xFF; > sleep 1; > redo; > } > > и вот что-то не работает как ожидается (мигать раз в сек должен) делаю то же самое на питоне но используется там не /dev/lp0 (как тут заметили это более высокий уровень), а /dev/port (только от рута, иначе не получается) судя по перловому тексту, нужен именно он - при использовании /dev/port адрес порта задается смещением от начала "файла", ну и соответсвенно чтение-запись байта транслируются в чтение-запись из порта понятно что ошибка адресом может привести к непредсказуемым последствиям :) -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: /dev/lp0
On Tuesday 23 January 2007 07:08, Nizamov Shawkat wrote: > > кто работал с параллельным портом в смысле программирования? > > тут понадобилось временный девайс сделать нули/единички с компа выдать. > > чтобы схему не собирать подумалось с парпорта выдать... > делаю то же самое на питоне > > но используется там не /dev/lp0 (как тут заметили это более высокий > уровень), а /dev/port (только от рута, иначе не получается) для python-а есть специальная (крассплатформенная) либа, для работы с последовательными и паралельными портами http://pyserial.sf.net я крутил через этот модуль шаговый двигатель :)) -- DamirX
echo "string" > /dev/lp0 vs cups
День добрый. Пишу прогу (ansi C) которая, среди всего прочего, должна печатать на матричном принтере некое подобие лога. Простая запись в /dev/lp0 "что-то там\n\r" дает приемлемый результат, за исключением одного НО. Если принтер выключен на момент запуска программы, выполнение останавливается пока что-то (в данном случае принтер) не прочтет данные с паралельного порта. Предполагаю, что данная проблема решается записью данных не прямо в порт, а в некий спулер. Писать свой спулер (для данной задачи) не интересно, поэтому я решил использовать что-то стандартное, например cups (одним махом решая пробелму распечатки на удаленном принтере). Установил, принтер завелся со второго раза, работает удовлетворительно, но я совершенно не понимаю с какой стороны к этому делу подступится на предмет распечатки не файла (как заведено) а string. Посмотрел http://www.cups.org/doc-1.1/spm.html#CUPS_API Там прямым текстом написанно: The CUPS API library provides some basic printing services for applications that need to print files. Очень не хочется писать строку в файл а потом его распечатывать, и системный вызов echo "bla bla bla" | lpr -l кажется неспортивным. Скажите, я хочу странного? Как можно загнать не файл а string в spool на распечатку, не прибегая к системному вызову, и чтобы страницу не выплевывало а переводило каретку и ждало следующей строки? Еще заметил неприятную вещь: если что-то послать на печать при выключенном принтере, а потом его включить, то съедаются первые буквы (1, 2 или 3 исходя из моих тестов), и это происходит независимо от метода печати (lp, lpr, просто эхо на /dev/lp0). Только у меня так, или у паралельного порта такая фича? Я понимаю, нефига игратся с тумблером, но все-таки хочется по возможности избавится от подобных потерь. Спасибо. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
On 2006.02.26 at 21:37:33 -0600, Alexander wrote: > День добрый. > > Пишу прогу (ansi C) которая, среди всего прочего, должна печатать на > матричном принтере некое подобие лога. > Простая запись в /dev/lp0 "что-то там\n\r" дает приемлемый результат, за > исключением одного НО. Если принтер выключен на момент запуска > программы, выполнение останавливается пока что-то (в данном случае > принтер) не прочтет данные с паралельного порта. Предполагаю, что данная > проблема решается записью данных не прямо в порт, а в некий спулер. > > Писать свой спулер (для данной задачи) не интересно, поэтому я решил > использовать что-то стандартное, например cups (одним махом решая > пробелму распечатки на удаленном принтере). Установил, принтер завелся > со второго раза, работает удовлетворительно, но я совершенно не понимаю > с какой стороны к этому делу подступится на предмет распечатки не файла > (как заведено) а string. Вроде бы само понятие SPOOL (Simulation of pereferial operations on-line) не рассчитано на то, что некоторая задача захватывает ресурс надолго и печатает в час по чайной ложке. Данная задача больше напоминает по логике своей работы вывод на консоль. Может быть в эту сторону посмотреть? В ядре есть опция Enable console on line printer. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
On Sun, Feb 26, 2006 at 09:37:33PM -0600, Alexander wrote: > День добрый. > > Пишу прогу (ansi C) которая, среди всего > прочего, должна печатать на > матричном принтере некое подобие лога. > Простая запись в /dev/lp0 "что-то там\n\r" дает > приемлемый результат, за > исключением одного НО. Если принтер > выключен на момент запуска > программы, выполнение останавливается > пока что-то (в данном случае > принтер) не прочтет данные с > паралельного порта. Предполагаю, что > данная > проблема решается записью данных не > прямо в порт, а в некий спулер. А нужен ли тут спулер? Он скорее для многозадачности... Я бы назвал необходимую вещь скорее буфером. FIFO который смотрит на состояние принтера (есть библиотеки на C на Perl и т. д.) или может быть даже на proc, а потом тупо печатает в порт. Я правда уже не помню может ли матричный принтер сообщить что у него кончилась бумага. -- Иван Лох -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
Спасибо за ответы. Программа предназначина для считывания магнитных карточек персонала с нерегулярным рабочим днем, и записи в базу данных информации о их приходе и уходе. Потом на основе этой информации расчитывается их зарплата. Рабочий день может начинаться и кончатся в любое время дня и ночи, речь идет о типографии. Читалки магнитных карточек предполагается пока использовать 2, соответственно для выхода и входа. Запись ведется в базу данных, возможно в лог файл, и на принтер. Принтер в данном случае рассматривается как дублирующий узел, для создания hardcopy в наглядной форме. Не бирюльки же считаем, а зарплату, человек должен видеть что его "посчитали". Писать свой спулер (для данной задачи) не интересно, поэтому я решил использовать что-то стандартное, например cups (одним махом решая пробелму распечатки на удаленном принтере). Установил, принтер завелся со второго раза, работает удовлетворительно, но я совершенно не понимаю с какой стороны к этому делу подступится на предмет распечатки не файла (как заведено) а string. Victor Wagner escribió: Вроде бы само понятие SPOOL (Simulation of pereferial operations on-line) не рассчитано на то, что некоторая задача захватывает ресурс надолго и печатает в час по чайной ложке. Согласен, но никто захватывать ресурс не собирается. Большую часть времени ресурс свободен, на хосте одновременно вертится несколько (по крайней мере две) копий программы, как только у какой-то копии появляется о чем сообщить миру, она подает строчку на принтер. Важно чтоб они при этом друг друга не перебивали (риск мизерный, но реальный), ничье сообщение не потерялось, и программа продолжала работать даже при отсутсвии принтера. Данная задача больше напоминает по логике своей работы вывод на консоль. Может быть в эту сторону посмотреть? В ядре есть опция Enable console on line printer. Мне приходило такое в голову, операция действительно напоминает консоль, но не то. Иван Лох escribió: > А нужен ли тут спулер? Он скорее для многозадачности... Я бы назвал > необходимую вещь скорее буфером. FIFO который смотрит на состояние > принтера (есть библиотеки на C на Perl и т. д.) или может быть > даже на proc, а потом тупо печатает в порт. Посмотреть на состояние принтера конечно можно, да толку? Придется отдельно менеджер печати писать, а это как раз то чего я пытаюсь избежать. > Я правда уже не помню > может ли матричный принтер сообщить что у него кончилась бумага. Может. Кроме того он должен потреблять не больше пары листов в день, а я туда ящик трактора заправлю :) на 10 лет хватит. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
On 2006.02.27 at 09:06:52 -0600, Alexander wrote: > Читалки магнитных карточек предполагается пока использовать 2, > соответственно для выхода и входа. Запись ведется в базу данных, > возможно в лог файл, и на принтер. Принтер в данном случае > рассматривается как дублирующий узел, для создания hardcopy в наглядной > форме. Не бирюльки же считаем, а зарплату, человек должен видеть что его > "посчитали". Беда в том что любой спулер работает на уровне страниц, а не строк. > Victor Wagner escribi??: > >Вроде бы само понятие SPOOL (Simulation of pereferial operations > >on-line) не рассчитано на то, что некоторая задача захватывает ресурс > >надолго и печатает в час по чайной ложке. > Согласен, но никто захватывать ресурс не собирается. Большую часть С точки зрения стандартного спулера - ресурс захвачен - начата печать, но страница не закончена и не выкинута из принтера. > >Данная задача больше напоминает по логике своей работы вывод на консоль. > >Может быть в эту сторону посмотреть? В ядре есть опция Enable console on > >line printer. > Мне приходило такое в голову, операция действительно напоминает консоль, > но не то. Почему не то? Вывод логов - типичная задача для консоли. Включить консоль на line printer и получить устройство по свойствам аналогичное tty, куда и писать. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
Alexander <[EMAIL PROTECTED]> wrote: > Спасибо за ответы. > Программа предназначина для считывания магнитных карточек персонала с > нерегулярным рабочим днем, и записи в базу данных информации о их > приходе и уходе. Потом на основе этой информации расчитывается их > зарплата. Рабочий день может начинаться и кончатся в любое время дня и > ночи, речь идет о типографии. > Читалки магнитных карточек предполагается пока использовать 2, А почему две? Так сложно построить триггер? При возникновении третьего стотояния - пусть вахтер допрашивает, какого фига вы пытаетесь войти на работу второй раз? > соответственно для выхода и входа. Запись ведется в базу данных, > возможно в лог файл, и на принтер. Принтер в данном случае > рассматривается как дублирующий узел, для создания hardcopy в наглядной > форме. Не бирюльки же считаем, а зарплату, человек должен видеть что его > "посчитали". А можно глупый вопрос - зачем здесь принтер? Может проще повесить монитор под стекло, на котором писать "Здравствуйте, Иван Петрович Сидиоров, желаем вам удачного рабочего дня". И человек видит - что его посчитали. А если туда прикрутить еще и базу данных с днями рождения, то можно и поздравлять :) -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
Andrey Melnikoff escribió: Программа предназначина для считывания магнитных карточек персонала с нерегулярным рабочим днем, и записи в базу данных информации о их приходе и уходе. Потом на основе этой информации расчитывается их зарплата. Рабочий день может начинаться и кончатся в любое время дня и ночи, речь идет о типографии. Читалки магнитных карточек предполагается пока использовать 2, А почему две? Так сложно построить триггер? При возникновении третьего стотояния - пусть вахтер допрашивает, какого фига вы пытаетесь войти на работу второй раз? Этот вопрос был в свое время активно провентелирован с руководством и сотрудниками ИТ отдела, и решили что капиталовложение на еще один считыватель оправдывает упрощение системы и защиту от дурака. А можно глупый вопрос - зачем здесь принтер? Может проще повесить монитор под стекло, на котором писать "Здравствуйте, Иван Петрович Сидиоров, желаем вам удачного рабочего дня". И человек видит - что его посчитали. А если туда прикрутить еще и базу данных с днями рождения, то можно и поздравлять :) Я достаточно долго общался с компьютерами, чтобы научится им не доверять. Кроме того, надеюсь, это поможет избежать неприятных ситаций, возникновение которых я легко могу себе представить. Например когда недобросовестный (или забывчивый) работник подвергнет сомнению работоспособность системы вообще и количество своих насчитанных рабочих часов в частности. Хотелось бы ответить цитатой из классики: Never Trust Anything Except Hardcopy. (вытравить эти слова каленым железом на задницах разнообразных кое-какеров) -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
Victor Wagner escribió: Читалки магнитных карточек предполагается пока использовать 2, соответственно для выхода и входа. Запись ведется в базу данных, возможно в лог файл, и на принтер. Принтер в данном случае рассматривается как дублирующий узел, для создания hardcopy в наглядной форме. Не бирюльки же считаем, а зарплату, человек должен видеть что его "посчитали". Беда в том что любой спулер работает на уровне страниц, а не строк. Исходя из того что я накопал, предполагаю, что спулер занимается исключительно фильтрованием документа и передачей его на принтер, а что и как там напечатается зависит всецело от формата (т.е. исходных данных и конкретного фильтра, в случае raw фильтр отсутствует) Если посылать ascii текст в raw (опция -l у lpr), то страница не выплевывается. Это можно сделать несколько раз подряд разными вызовами, и все напечатается на одной и той-же странице (если поместится, конечно). С точки зрения стандартного спулера - ресурс захвачен - начата печать, но страница не закончена и не выкинута из принтера. после cat textfile.txt | lpr -l купс рапортует что name: stdin, status: completed, страница не выплюнута и остается в принтере, система готова к следующей распечатке, даже если напечатана всего одна строчка. Насколько я понял, с тем же успехом можно заменить lpr на lp, только синтакс меняется. Данная задача больше напоминает по логике своей работы вывод на консоль. Может быть в эту сторону посмотреть? В ядре есть опция Enable console on line printer. Мне приходило такое в голову, операция действительно напоминает консоль, но не то. Почему не то? Вывод логов - типичная задача для консоли. Включить консоль на line printer и получить устройство по свойствам аналогичное tty, куда и писать. О записи в файл-устройство я как-то не подумал, хоти и начинал с этого (: Пока больше склоняюсь к системному вызову lpr (вкусности с изменением шрифтов, печать на удаленный принтер и т.д.)... Если не удовлетворит, буду играть с консолью. Ее можно модулем сделать? И чтоб никакого мусора туда никто не слал (syslog, stderr, dmesg и т.д.)? А у нее буффер есть? Если я посылаю что-то на консоль а принтер недоступен, это теряется или засылается в буффер пока я не включу принтер? -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
On 2006.02.27 at 11:42:20 -0600, Alexander wrote: > Victor Wagner escribi??: > >>Читалки магнитных карточек предполагается пока использовать 2, > >>соответственно для выхода и входа. Запись ведется в базу данных, > >>возможно в лог файл, и на принтер. Принтер в данном случае > >>рассматривается как дублирующий узел, для создания hardcopy в наглядной > >>форме. Не бирюльки же считаем, а зарплату, человек должен видеть что его > >>"посчитали". > >Беда в том что любой спулер работает на уровне страниц, а не строк. > Исходя из того что я накопал, предполагаю, что спулер занимается > исключительно фильтрованием документа и передачей его на принтер, а что > и как там напечатается зависит всецело от формата (т.е. исходных данных > и конкретного фильтра, в случае raw фильтр отсутствует) Спулер занимается в первую очередь выстраиванием в очередь заданий от разных пользователей/процессов. То есть его основная задача заключается в том, чтобы предотвратить перемешивание на одном листе бумаги разных текстов > Если посылать ascii текст в raw (опция -l у lpr), то страница не Это фильтры кривые. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
On Mon, Feb 27, 2006 at 09:21:15PM +0300, Victor Wagner wrote: > On 2006.02.27 at 11:42:20 -0600, Alexander wrote: > > > Victor Wagner escribi??: > > >>Читалки магнитных карточек предполагается пока использовать 2, > > >>соответственно для выхода и входа. Запись ведется в базу данных, > > >>возможно в лог файл, и на принтер. Принтер в данном случае > > >>рассматривается как дублирующий узел, для создания hardcopy в наглядной > > >>форме. Не бирюльки же считаем, а зарплату, человек должен видеть что его > > >>"посчитали". > > >Беда в том что любой спулер работает на уровне страниц, а не строк. > > Исходя из того что я накопал, предполагаю, что спулер занимается > > исключительно фильтрованием документа и передачей его на принтер, а что > > и как там напечатается зависит всецело от формата (т.е. исходных данных > > и конкретного фильтра, в случае raw фильтр отсутствует) > > Спулер занимается в первую очередь выстраиванием в очередь заданий от > разных пользователей/процессов. То есть его основная задача заключается > в том, чтобы предотвратить перемешивание на одном листе бумаги > разных текстов А если страницами обозвать строки?. Тогда не будет никакой разницы :) Подозреваю, что где-нибудь в фильтрах это можно сделать. -- Best regards, Yauhen Kharuzhy y.kharuzhy_(at)_sam-solutions.net A: No Q: Should I quote below my post? signature.asc Description: Digital signature
Re: echo "string" > /dev/lp0 vs cups
Беда в том что любой спулер работает на уровне страниц, а не строк. Исходя из того что я накопал, предполагаю, что спулер занимается исключительно фильтрованием документа и передачей его на принтер, а что и как там напечатается зависит всецело от формата (т.е. исходных данных и конкретного фильтра, в случае raw фильтр отсутствует) Спулер занимается в первую очередь выстраиванием в очередь заданий от разных пользователей/процессов. То есть его основная задача заключается в том, чтобы предотвратить перемешивание на одном листе бумаги разных текстов А если страницами обозвать строки?. Тогда не будет никакой разницы :) Подозреваю, что где-нибудь в фильтрах это можно сделать. Ээээ... тут фильтры вообще не при чем. Я же специально напрямую печатаю, без всяких фильтров, raw называется. Контрольные символы отвечающие за перенос страницы вставляет именно фильтр. Если фильтрование опустить (а именно для того и существует raw) то переносить страницу (как и строку) будет некому кроме как программе формирующей исходные данные. Кстати, у меня все довольно мило запахало через системный вызов: char* print_buff = "printing printing printing"; char* print_comm = "lpr -l"; char buf[200]; sprintf(buf, "echo \"%s\" | %s", print_buf, print_comm); system(buf); Единственное что напрягает, это потенциальное переполнение буффера, но это поправимо. Кроме того остается нерешенным, что делать с теряющимися первыми буквами первой строчким, от одного до трех символов, остальное печатается нормально (жить можно, но некрасиво получается), если распечатка запускается пока принтер выключен. Кстати, вроде бы это происходит только при печати в raw. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
On Mon, Feb 27, 2006 at 02:02:24PM -0600, Alexander wrote: > > char* print_buff = "printing printing printing"; > char* print_comm = "lpr -l"; > char buf[200]; > sprintf(buf, "echo \"%s\" | %s", print_buf, print_comm); > system(buf) file:///usr/share/cups/doc-root/spm.html#3_2_2 #include int cupsPrintFile(const char *name, const char *filename, const char *title, int num_options, cups_option_t *options);; > Кроме того остается нерешенным, что > делать с теряющимися первыми буквами > первой строчким, от одного до трех > символов, остальное печатается > нормально (жить можно, но некрасиво > получается), если распечатка запускается > пока принтер выключен. Кстати, вроде бы > это происходит только при печати в raw. Ну так в одном случае это растр, а в другом ascii. А если тупо послать на /dev/lp0 выключенного принтера, тоже съедаются? Если нет, то я бы временно заменил parallel backend на саt и посмотрел, что будет. Вообще, cups модульный весь. И parallel backend от силы 200 строчек. -- Иван Лох -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
On Mon, Feb 27, 2006 at 11:18:27AM -0600, Alexander wrote: > доверять. Кроме того, надеюсь, это > поможет избежать неприятных ситаций, > возникновение которых я легко могу себе > представить. Например когда > недобросовестный (или забывчивый) > работник подвергнет сомнению > работоспособность системы вообще и > количество своих насчитанных рабочих > часов в частности. Ну так купите железную хрень которая часы прихода-ухода прямо на карточку печатает. -- Иван Лох -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
Alexander <[EMAIL PROTECTED]> wrote: > >>Программа предназначина для считывания магнитных карточек персонала с > >>нерегулярным рабочим днем, и записи в базу данных информации о их > >>приходе и уходе. Потом на основе этой информации расчитывается их > >>зарплата. Рабочий день может начинаться и кончатся в любое время дня и > >>ночи, речь идет о типографии. > >>Читалки магнитных карточек предполагается пока использовать 2, > > > > А почему две? Так сложно построить триггер? При возникновении третьего > > стотояния - пусть вахтер допрашивает, какого фига вы пытаетесь войти на > > работу второй раз? > Этот вопрос был в свое время активно провентелирован с руководством и > сотрудниками ИТ отдела, и решили что капиталовложение на еще один > считыватель оправдывает упрощение системы и защиту от дурака. Хмм. что-то я наверное непонимаю, как усложнение системы ( а точнее дуплицирование) может её упростить и защитить от дурака? Наличие двух карточек - это уже усложнение, т.к. прийдеться вспоминать, какую карточку надо совать в этот терминал. > > А можно глупый вопрос - зачем здесь принтер? Может проще повесить монитор > > под стекло, на котором писать "Здравствуйте, Иван Петрович Сидиоров, желаем > > вам удачного рабочего дня". И человек видит - что его посчитали. А если туда > > прикрутить еще и базу данных с днями рождения, то можно и поздравлять :) > Я достаточно долго общался с компьютерами, чтобы научится им не > доверять. Кроме того, надеюсь, это поможет избежать неприятных ситаций, > возникновение которых я легко могу себе представить. Например когда > недобросовестный (или забывчивый) работник подвергнет сомнению > работоспособность системы вообще и количество своих насчитанных рабочих > часов в частности. Он может точно так-же пойти в любую бухгалтерию и подвергнуть сомнению результат работы 1С, которая работает на таком же ненадежном компьютере. > Хотелось бы ответить цитатой из классики: Never Trust Anything Except > Hardcopy. (вытравить эти слова каленым железом на задницах разнообразных > кое-какеров) Ага. А чего это все пользуются калькуляторами, вместо перекладывания ракушек/счетных палочек/чего-то там ? PS: Нет, я определнно хочу такого ягеля. мешка три, не меньше. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
Иван Лох escribió: On Mon, Feb 27, 2006 at 02:02:24PM -0600, Alexander wrote: char* print_buff = "printing printing printing"; char* print_comm = "lpr -l"; char buf[200]; sprintf(buf, "echo \"%s\" | %s", print_buf, print_comm); system(buf) file:///usr/share/cups/doc-root/spm.html#3_2_2 #include int cupsPrintFile(const char *name, const char *filename, const char *title, int num_options, cups_option_t *options);; Проезжали. Так в файл придется писать, а потом этот файл распечатывать. Кроме того остается нерешенным, что делать с теряющимися первыми буквами первой строчким, от одного до трех символов, остальное печатается нормально (жить можно, но некрасиво получается), если распечатка запускается пока принтер выключен. Кстати, вроде бы это происходит только при печати в raw. Ну так в одном случае это растр, а в другом ascii. А если тупо послать на /dev/lp0 выключенного принтера, тоже съедаются? Да. Причем к программе (или к шеллу) контроль не возвращается пока не включу. Если послать через lpr несколько раз, то съедается только начало первого послания, остальное доходит нормально. Если нет, то я бы временно заменил parallel backend на саt и посмотрел, что будет. Вообще, cups модульный весь. И parallel backend от силы 200 строчек. ??? -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
Иван Лох escribió: On Mon, Feb 27, 2006 at 11:18:27AM -0600, Alexander wrote: доверять. Кроме того, надеюсь, это поможет избежать неприятных ситаций, возникновение которых я легко могу себе представить. Например когда недобросовестный (или забывчивый) работник подвергнет сомнению работоспособность системы вообще и количество своих насчитанных рабочих часов в частности. Ну так купите железную хрень которая часы прихода-ухода прямо на карточку печатает. Такая и стоит. Бугалтеров ломает в конце каждой недели набивать данные б эксель. Собственно, из-за того и сыр-бор. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
You ([EMAIL PROTECTED]) wrote: >> Ну так купите железную хрень которая часы прихода-ухода прямо на >> карточку печатает. A> Такая и стоит. Бугалтеров ломает в конце каждой недели набивать A> данные б эксель. Собственно, из-за того и сыр-бор. Мнэ. А эту железную хрень к контуперу прикрутить нельзя? Тогда это неправильная железная хрень. -- JID: [EMAIL PROTECTED] -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
А почему две? Так сложно построить триггер? При возникновении третьего стотояния - пусть вахтер допрашивает, какого фига вы пытаетесь войти на работу второй раз? Этот вопрос был в свое время активно провентелирован с руководством и сотрудниками ИТ отдела, и решили что капиталовложение на еще один считыватель оправдывает упрощение системы и защиту от дурака. Хмм. что-то я наверное непонимаю, как усложнение системы ( а точнее дуплицирование) может её упростить и защитить от дурака? Наличие двух карточек - это уже усложнение, т.к. прийдеться вспоминать, какую карточку надо совать в этот терминал. Карточка одна на на нос, считывателя два. На одном считывателе большими буквами написанно "ВХОД" на другом "ВЫХОД". В качестве альтернатывы - один считываетель а рядом переключатель с положениями "ВХОД" и "ВЫХОД". В случае с переключателем еще надо изворачиватся как-то связывать его с программой (напоминаю, паралальный порт занят), да и тумблер не забывать перекидывать. Вот и усложнение. Хотелось бы ответить цитатой из классики: Never Trust Anything Except Hardcopy. (вытравить эти слова каленым железом на задницах разнообразных кое-какеров) Ага. А чего это все пользуются калькуляторами, вместо перекладывания ракушек/счетных палочек/чего-то там ? Це есть компромисс, жертва надежностью в пользу скорости у удобства. В случае с калькулятором жертва невелика, я всего пару раз в жизни видел глючащие калькуляторы. PS: Нет, я определнно хочу такого ягеля. мешка три, не меньше. Приезжай, угощу! -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
Mikhail Gusarov escribió: You ([EMAIL PROTECTED]) wrote: >> Ну так купите железную хрень которая часы прихода-ухода прямо на >> карточку печатает. A> Такая и стоит. Бугалтеров ломает в конце каждой недели набивать A> данные б эксель. Собственно, из-за того и сыр-бор. Мнэ. А эту железную хрень к контуперу прикрутить нельзя? Тогда это неправильная железная хрень. Нет. Хрень железная, ни грамма кремния, разработка тысяча девятсот лохматого года. Собственно, воспроизводим необходимую функциональность с привязкой к базе данных. -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
You ([EMAIL PROTECTED]) wrote: A> Нет. Хрень железная, ни грамма кремния, разработка тысяча девятсот A> лохматого года. Собственно, воспроизводим необходимую A> функциональность с привязкой к базе данных. Правильная хрень тогда уж и на карточке печатать должна и в контупер данные отдавать. -- JID: [EMAIL PROTECTED] -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
On Tue, Feb 28, 2006 at 11:54:48AM -0600, Alexander wrote: > Mikhail Gusarov escribió: > >You ([EMAIL PROTECTED]) wrote: > >Мнэ. А эту железную хрень к контуперу > >прикрутить нельзя? Тогда это > >неправильная железная хрень. > Нет. Хрень железная, ни грамма кремния, > разработка тысяча девятсот лохматого > года. Но это не означает, что нет более современных хреней с такими привязками. -- Иван Лох -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
On Tue, Feb 28, 2006 at 11:26:24AM -0600, Alexander wrote: > >int cupsPrintFile(const char *name, const char *filename, > >const char *title, int num_options, cups_option_t *options);; > Проезжали. Так в файл придется писать, а > потом этот файл распечатывать. Ну так lp тот же cupsPrintFile использует. > >>Кроме того остается нерешенным, что > >>делать с теряющимися первыми буквами > >>Кстати, вроде бы это происходит только > >>при печати в raw. > >Ну так в одном случае это растр, а в > >другом ascii. > Да. Причем к программе (или к шеллу) > контроль не возвращается пока не включу. > Если послать через lpr несколько раз, то > съедается только начало первого > послания, остальное доходит нормально. > >на саt и посмотрел, что будет. Вообще, cups > >И parallel backend от силы 200 строчек. > ??? С принтером через параллельный порт общается отдельная _очень_ небольшая программа. Отучить ее печатать на выключенный принтер (а она _не должна туда печатать_) не бог весть какая задача. Заодно пошлете bug report -- сделаете доброе дело. CUPS _в некотором смысле_ прилично документирован. -- Иван Лох -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
Иван Лох escribió: On Tue, Feb 28, 2006 at 11:26:24AM -0600, Alexander wrote: int cupsPrintFile(const char *name, const char *filename, const char *title, int num_options, cups_option_t *options);; Проезжали. Так в файл придется писать, а потом этот файл распечатывать. Ну так lp тот же cupsPrintFile использует. lp можно standard input скармливать, а как скормить char* указанному cupsPrintFile я не нашел. Кроме того остается нерешенным, что делать с теряющимися первыми буквами Кстати, вроде бы это происходит только при печати в raw. [skip] С принтером через параллельный порт общается отдельная _очень_ небольшая программа. Отучить ее печатать на выключенный принтер (а она _не должна туда печатать_) не бог весть какая задача. Заодно пошлете bug report -- сделаете доброе дело. CUPS _в некотором смысле_ прилично документирован. Посмотрел на это дело, parallel.c, 17k. Не чуствую себя компетентным для предложения поправок (: bug report запостил, кому интересно можете полюбоватся http://www.cups.org/str.php?L1452 -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups
On Tue, Feb 28, 2006 at 07:04:30PM -0600, Alexander wrote: > >Ну так lp тот же cupsPrintFile использует. > lp можно standard input скармливать, а как > скормить char* указанному cupsPrintFile я не > нашел. lp, как можно убедиться сделав ls -l /proc/`pidof lp`/fd просто открывает в таком случае файл в каталоге /var/tmp/ -- Иван Лох -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]
Re: echo "string" > /dev/lp0 vs cups - resolved
Скажите, я хочу странного? Как можно загнать не файл а string в spool на распечатку, не прибегая к системному вызову, и чтобы страницу не выплевывало а переводило каретку и ждало следующей строки? Был полностью удовлетворен таким: FILE* printer; char* string_to_print = "A!!!" printer = popen("lpr -l", "w"); fprintf(printer, "%s\n\r", string_to_print); pclose(printer); При этом команду на распечатку можно задать "снаружи", например из конфигурационного файла. Спасибо за внимание. (: -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]