Thanks for the challenge! This was fun.
Here is C code (MPE/iX not posix)
#pragma list off
#define _SOCKET_SOURCE 1
#define _MPEXL_SOURCE 1
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <types.h>
#include <socket.h>
#include <in.h>
typedef short i16;
typedef unsigned short u16;
typedef long i32;
typedef unsigned long u32;
typedef unsigned char uchar;
/*
:setvar ccopts "-Aa -C +e +w1 -D_SOCKET_SOURCE -D_MPEXL_SOURCE"
:ccxl fakelp.c
:setvar hpc "libcshr.lib.sys,libcansi.lib.sys,&
libmansi.lib.sys,libcrand.lib.sys,socketrl.net.sys"
:LINKEDIT "LINK FROM=$OLDPASS;RL=!hpc;TO=FAKELP.PUB;SHARE
*/
/*----------------------------------------------------------------*/
int startserv ( int port ) {
int err;
i32 sockc;
struct sockaddr_in sockadr;
err = 0;
memset ( (char*) &sockadr, 0, sizeof ( sockadr ));
sockadr.sin_family = AF_INET;
sockadr.sin_addr.s_addr = INADDR_ANY;
sockadr.sin_port = htons ( port );
sockc = socket ( AF_INET, SOCK_STREAM, 0 );
if ( sockc < 0 ) {
err = errno;
perror ( "serv-socket" );
} else if ( bind ( sockc, &sockadr, sizeof ( sockadr ) ) < 0 ) {
err = errno;
perror ( "serv-bind" );
} else if ( listen ( sockc, 20 ) < 0 ) {
err = errno;
perror ( "serv-listen" );
}
if ( err && sockc >= 0 ) {
if ( shutdown ( sockc, 2 ) < 0 )
perror ( "serv-shutdown" );
if ( sclose ( sockc ) < 0 )
perror ( "serv-sclose" );
sockc = -1;
}
return sockc;
}
/*----------------------------------------------------------------*/
int main ( int argc, char* argv [] ){
i32 port, next, sockc, socki, err, rlen;
char *cp, data [4096];
FILE *fo;
struct sockaddr_in sockadr;
port = 9100;
next = 1;
if ( argc > 1 ) port = atoi ( argv [1] );
if ( argc > 2 ) next = atol ( argv [2] );
sockc = startserv ( port );
if ( sockc < 0 )
exit (1);
cp = strchr ( argv [0], '.' );
if ( cp ) *cp = 0;
fprintf ( stderr, "%s ready on port %d\n", argv [0], port );
/* Accept loop */
while (1) {
rlen = sizeof (sockadr);
socki = accept ( sockc, &sockadr, &rlen );
if ( socki < 0 ) {
perror ( "serv-accept" );
break;
}
do {
sprintf ( data, "F%d", next++ );
fprintf ( stderr, "Capturing spoolfile to %s ... ", data );
err = 0;
fo = fopen ( data, "w" );
if ( !fo ) {
err = errno;
perror ( data );
break;
}
while (1) {
rlen = recv ( socki, data, sizeof (data), 0 );
if ( rlen <= 0 ) {
if ( rlen < 0 )
perror ( "conn-recv" );
break;
}
if ( rlen != fwrite ( data, 1, rlen, fo )) {
err = errno;
perror ( "fwrite" );
break;
}
}
if ( fclose ( fo )) {
err = errno;
perror ( "fclose" );
}
if ( !err )
fprintf ( stderr, "Done\n" );
} while (0);
if ( shutdown ( socki, 2 ) < 0 )
perror ( "conn-shutdown" );
if ( sclose ( socki ) < 0 )
perror ( "conn-sclose" );
}
if ( shutdown ( sockc, 2 ) < 0 )
perror ( "serv-shutdown" );
if ( sclose ( sockc ) < 0 )
perror ( "serv-sclose" );
fprintf ( stderr, "%s Complete\n", argv [0] );
}
/*----------------------------------------------------------------*/
Here is NPCONFIG with dev 205 back to HP.
#==========================================================================
# File: NPCONFIG
#==========================================================================
global (
message_interval = 60 # Repeat msgs every >= 60 secs
banner_trailer = FALSE # Only need a header page.
pjl_supported = FALSE # LJ4Si is a full PJL device.
jam_recovery = TRUE # Reprints jammed pages
)
200 (
network_address = 192.168.20.18 # IP
pjl_supported = TRUE # LJ4Si is a full PJL device.
setup_file = PCLELITE.HPENV.SYS # Portrait
)
201 (
network_address = 192.168.20.18 # IP
pjl_supported = TRUE # LJ4Si is a full PJL device.
setup_file = PCLELITD.HPENV.SYS # Duplex Portrait
)
202 (
network_address = 192.168.20.18 # IP
pjl_supported = TRUE # LJ4Si is a full PJL device.
setup_file = PCLLP.HPENV.SYS # Landscape
)
203 (
network_address = 192.168.20.18 # IP
pjl_supported = TRUE
setup_file = PCLLPD.HPENV.SYS # Duplex Landscape
)
204 (
network_address = 192.168.20.18 # IP
pjl_supported = TRUE
setup_file = PCLLPD.HPENV.SYS # Postscript
)
205 (
network_address = 192.168.20.54 # IP to FAKELP
snmp_enabled = false
jam_recovery = false
banner_header = false
)
Now I see the spooler problem. So far, I cannot find a setting that will
turn off all PCL initialization.
Here is FCOPY CHAR;HEX dump of 1st 2 records in captured file. Rest of file
is good capture.
F1 RECORD 0 (%0, #0)
0000: 1B25 2D31 3233 3435 581B 5A1B 451B 266C .%-12345X.Z.E.&l
0008: 3056 1B5A 1B45 1B26 6C31 581B 266C 2D32 0V.Z.E.&l1X.&l-2
0010: 322E 3530 752D 3333 2E37 355A 1B26 6C31 2.50u-33.75Z.&l1
0018: 4F1B 266C 3241 1B26 6C36 2E31 3843 1B26 O.&l2A.&l6.18C.&
0020: 6C33 451B 266C 3630 461B 2661 324C 1B26 l3E.&l60F.&a2L.&
0028: 6C31 4C1B 266B 3247 1B28 3855 1B28 7330 l1L.&k2G.(8U.(s0
0030: 501B 2873 3133 481B 2873 3053 1B28 7330 P.(s13H.(s0S.(s0
0038: 421B 2873 3430 3939 541B 2664 4046 414B B.(s4099T.&d@FAK
0040: 454C 502E 582E 4B45 5645 4E4D 2028 5465 ELP.X.KEVENM (Te
0048: 7874 2920 2020 2020 2020 2020 2020 2020 xt)
0050: 2020 2054 4855 2C20 4A55 4C20 2036 2C20 THU, JUL 6,
0058: 3230 3030 2C20 3131 3A35 3520 414D 2020 2000, 11:55 AM
0060: 2020 2020 2020 2020 2020 310D 2020 2020 1.
0068: SAME: TO 0080-1
F1 RECORD 1 (%1, #1)
0000: 200D 2020 2020 2020 2020 2020 2020 2020 .
0008: SAME: TO 0080-1
> _____________________________________________________________
> Keven Miller mailto:[log in to unmask] http://www.exegesys.com
>
>
|