このページに書かれている内容やパッチの動作について一切の保証はいたしません。利用に伴う費用・損失等全てのことがらについて利用者がその責任を負うものとします。
このページに記載されているパッチの転載・再利用は自由に行ってくださってかまいません。
以下、netatalkでQDプリンタのキューを作成し使用する方法です。
netatalkは、PSプリンタしかサポートしていませんが、比較的簡単な改造で、一部のQDプリンタを使用することができます。
利用可能なプリンタの最低条件として
です。但し、これを満たしても動くかどうかはわかりません。HP社のプリンタなら多分動くと思います。
netatalk1.4b2+asun2.1.2/2.1.3で確認しています。これ以外のバージョンでも近ければ動くと思います。
以下のパッチを切り取り、papd.patchと名前を付けてセーブし、netatalkのソースディレクトリのルートへ移動する。
cd etc/papd patch -p1 < papd.patch
これでパッチは終了。後は、netatalkのドキュメントに従ってコンパイル、インストールを行う。
最後にpapd.confに以下のように使用したいプリンタの定義を記述する。lj4ljpro¥:HP LaserJet 4LJ Pro:pr=lp:op=root:pd=RAW:
一応、わかっているものを書いておきます。
| タイプ | プリンタ |
|---|---|
| HP LaserJet 4LJ Pro | HP社 LaserJet 4LJ Pro |
| DeskWriter | HP社 DeskWriter(DeskJetも含めシリーズ共通) |
----ここから----
diff -cPr papd.org/file.c papd/file.c
*** papd.org/file.c Wed May 21 02:35:42 1997
--- papd/file.c Sat Feb 17 23:04:54 2001
***************
*** 40,45 ****
--- 40,64 ----
}
}
+ markline2( start, stop, pf )
+ char **start, **stop;
+ struct papfile *pf;
+ {
+ char *p;
+
+ if ( PF_BUFSIZ( pf ) == 0 && ( pf->pf_state & PF_EOF )) {
+ return( 0 );
+ }
+
+ *start = pf->pf_cur;
+ *stop = pf->pf_end - 1;
+ if ( *stop == *start ) {
+ return( 1 ); /* don't return len 0 lines */
+ } else {
+ return( *stop - *start );
+ }
+ }
+
consumetomark( start, stop, pf )
char *start, *stop;
struct papfile *pf;
diff -cPr papd.org/magics.c papd/magics.c
*** papd.org/magics.c Fri May 30 09:28:03 1997
--- papd/magics.c Sat Feb 17 23:04:54 2001
***************
*** 8,14 ****
--- 8,23 ----
#include
#include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+ #include
+
#include "file.h"
+ #include "printer.h"
#include "comment.h"
ps( infile, outfile )
***************
*** 18,24 ****
struct comment *comment;
for (;;) {
! if ( comment = compeek()) {
switch( (*comment->c_handler)( infile, outfile )) {
case CH_DONE :
continue;
--- 27,59 ----
struct comment *comment;
for (;;) {
! if (strcmp(printer->p_ppdfile, "RAW") == 0) {
! switch ( markline2( &start, &stop, infile )) {
! case 0 :
! /* eof on infile */
! outfile->pf_state |= PF_EOF;
! lp_close();
! return( 0 );
!
! case -1 :
! return( 0 );
! }
! if ( infile->pf_state & PF_BOT ) {
! syslog( LOG_ERR, "reset PF_BOT." );
! infile->pf_state &= ‾PF_BOT;
!
! /* set up spool file */
! if ( lp_open( outfile ) < 0 ) {
! syslog( LOG_ERR, "lp_open failed" );
! spoolerror( outfile, "Ignoring job." );
! }
! }
!
! /* write to file */
! lp_write( start, stop - start + 1 );
! consumetomark( start, stop, infile );
! }
! else if ( comment = compeek()) {
switch( (*comment->c_handler)( infile, outfile )) {
case CH_DONE :
continue;
----ここまで---