/dev/lp0

2007-01-22 Пенетрантность 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;
}

и вот что-то не работает как ожидается (мигать раз в сек должен)

для меня темный момент с базовым адресом остался я так и не понял 0x378
тудыть надо или 0, что-то невнятно как-то написано, но пробовал и так и
этак - фиг.

пробовал так же заменять print на syswrite, seek на sysseek итп
думал мож с буфферизацией что - хез.

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

не подскажет кто в чем дело или же ткнет во внятную хаутушку по
программингу парпорта в линукс?


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: /dev/lp0

2007-01-22 Пенетрантность Victor Wagner
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]



/dev/lp0

2007-01-22 Пенетрантность Dmitry E. Oboukhov
  кто работал с параллельным портом в смысле программирования?
  тут понадобилось временный девайс сделать нули/единички с компа выдать.
  чтобы схему не собирать подумалось с парпорта выдать...
 
  ну и сунулся я в хаутушки, а что-то невнятно
 
  пишут что
  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

2007-01-22 Пенетрантность Yauhen Kharuzhy
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

2007-01-22 Пенетрантность Roman Cheplyaka
* 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

2007-01-22 Пенетрантность Nizamov Shawkat
В Пнд, 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

2007-01-22 Пенетрантность DamirX
On Tuesday 23 January 2007 07:08, Nizamov Shawkat wrote:
  кто работал с параллельным портом в смысле программирования?
  тут понадобилось временный девайс сделать нули/единички с компа выдать.
  чтобы схему не собирать подумалось с парпорта выдать...
 делаю то же самое на питоне

 но используется там не /dev/lp0 (как тут заметили это более высокий
 уровень), а /dev/port (только от рута, иначе не получается)

для python-а есть специальная (крассплатформенная) либа, для работы с 
последовательными и паралельными портами

http://pyserial.sf.net

я крутил через этот модуль шаговый двигатель   :))
-- 

DamirX


Re: echo string /dev/lp0 vs cups

2006-03-01 Пенетрантность Иван Лох
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

2006-02-28 Пенетрантность Иван Лох
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 cups/cups.h

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

2006-02-28 Пенетрантность Иван Лох
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

2006-02-28 Пенетрантность Andrey Melnikoff
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

2006-02-28 Пенетрантность Alexander

Иван Лох 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

2006-02-28 Пенетрантность Mikhail Gusarov

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

2006-02-28 Пенетрантность Alexander



А почему две? Так сложно построить триггер? При возникновении третьего
стотояния - пусть вахтер допрашивает, какого фига вы пытаетесь войти на
работу второй раз?


Этот вопрос был в свое время активно провентелирован с руководством и 
сотрудниками ИТ отдела, и решили что капиталовложение на еще один 
считыватель оправдывает упрощение системы и защиту от дурака.


Хмм. что-то я наверное непонимаю, как усложнение системы ( а точнее
дуплицирование) может её упростить и защитить от дурака? 
Наличие двух карточек - это уже усложнение, т.к. прийдеться вспоминать,

какую карточку надо совать в этот терминал.
Карточка одна на на нос, считывателя два. На одном считывателе большими 
буквами написанно ВХОД на другом ВЫХОД.
В качестве альтернатывы - один считываетель а рядом переключатель с 
положениями ВХОД и ВЫХОД. В случае с переключателем еще надо 
изворачиватся как-то связывать его с программой (напоминаю, паралальный 
порт занят), да и тумблер не забывать перекидывать. Вот и усложнение.


Хотелось бы ответить цитатой из классики: 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

2006-02-28 Пенетрантность Alexander

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

2006-02-28 Пенетрантность Mikhail Gusarov

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

2006-02-28 Пенетрантность Иван Лох
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

2006-02-28 Пенетрантность Иван Лох
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

2006-02-28 Пенетрантность Alexander

Иван Лох 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 - resolved

2006-02-28 Пенетрантность Alexander



Скажите, я хочу странного? Как можно загнать не файл а 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]



Re: echo string /dev/lp0 vs cups

2006-02-27 Пенетрантность Иван Лох
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

2006-02-27 Пенетрантность Victor Wagner
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

2006-02-27 Пенетрантность Andrey Melnikoff
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

2006-02-27 Пенетрантность Alexander

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

2006-02-27 Пенетрантность Alexander

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

2006-02-27 Пенетрантность Victor Wagner
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

2006-02-27 Пенетрантность Yauhen Kharuzhy
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

2006-02-27 Пенетрантность Alexander



Беда в том что любой спулер работает на уровне страниц, а не строк.


Исходя из того что я накопал, предполагаю, что спулер занимается 
исключительно фильтрованием документа и передачей его на принтер, а что 
и как там напечатается зависит всецело от формата (т.е. исходных данных 
и конкретного фильтра, в случае 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]



echo string /dev/lp0 vs cups

2006-02-26 Пенетрантность Alexander

День добрый.

Пишу прогу (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

2006-02-26 Пенетрантность Victor Wagner
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]