home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
ftp.wwiv.com
/
ftp.wwiv.com.zip
/
ftp.wwiv.com
/
pub
/
PPPBCKP
/
SRC15B19.ZIP
/
WATTSRC.ZIP
/
APPS
/
LPQ.C
< prev
next >
Wrap
Text File
|
1994-12-01
|
4KB
|
183 lines
/*
* Lpq - query printer
*
* Copyright (C) 1991, University of Waterloo
*
* Portions Copyright (C) 1990, National Center for Supercomputer Applications
* and portions copyright (c) 1990, Clarkson University
*
* This program is free software; you can redistribute it and/or modify
* it, but you may not sell it.
*
* This program is distributed in the hope that it will be useful,
* but without any warranty; without even the implied warranty of
* merchantability or fitness for a particular purpose.
*
* Erick Engelke or via E-Mail
* Faculty of Engineering
* University of Waterloo Erick@development.watstar.uwaterloo.ca
* 200 University Ave.,
* Waterloo, Ont., Canada
* N2L 3G1
*
* If you want to use this, make sure you are in /etc/host.lpr or better.
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <tcp.h>
#define SHORT_LIST 3
#define LONG_LIST 4
#define LPQ_PORT 515
#define LOCAL_PORT 722
extern int errno;
void usage( void )
{
printf("usage: lpq [-Pprinter] [-Sserver] [-l]\n");
exit(1);
}
int main(int argc, char **argv)
{
char buffer[513];
char printer[35];
char host[35];
char *cptr;
static tcp_Socket socketdata;
tcp_Socket *s;
longword host_ip;
int status;
int connected = 0;
int localport;
int len;
int i;
int verbose=0;
/* */
/* Set defaults from the environment */
*host = *printer = '\0';
if( (cptr = getenv("LPRSRV")) != NULL )
strncpy(host,cptr,35);
if( (cptr = getenv("PRINTER")) != NULL )
strncpy(printer,cptr,35);
/* Parse the command line arguments */
for(i=1; i<=argc ; i++)
{
if(argv[i][0] == '-')
{
switch(argv[i][1])
{
case 'P':
if(strlen(argv[i])>2)
{
strcpy(printer,&argv[i][2]);
}
else
{
i++;
strcpy(printer,argv[i]);
}
break;
case 'S':
if(strlen(argv[i])>2)
{
strcpy(host,&argv[i][2]);
}
else
{
i++;
strcpy(host,argv[i]);
}
break;
case 'l':
verbose=1;
break;
default:
usage();
}
}
}
/* Verify that we have enough data to procede */
if(strlen(printer)==0)
{
printf("A printer must be specified! Use either the command line\n");
printf("flag, -Pprinter, or the environment variable, PRINTER.\n");
exit(1);
}
if(strlen(host)==0)
{
printf("A LPR Server must be specified! Use either the command line\n");
printf("flag, -Sserver, or the environment variable, LPRSRV.\n");
exit(1);
}
sock_init();
s = &socketdata;
if (!(host_ip = resolve( host ))) {
fprintf(stderr, "lpq: unknown host %s\n\r",host);
exit(1);
}
localport = 255 + (MsecClock() & 255);
localport = LOCAL_PORT;
if ( !tcp_open( s, localport, host_ip, LPQ_PORT, NULL)) {
fprintf(stderr,"Unable to open socket.");
exit(1);
}
sock_wait_established( s, sock_delay , NULL, &status );
connected = 1;
if (sock_dataready( s )) {
sock_fastread( s, buffer, sizeof( buffer ));
buffer[ sizeof( buffer ) - 1] = 0;
printf("Response: %s\n", buffer );
sock_tick( s, &status ); /* in case above message closed port */
}
if (verbose)
{
sprintf(buffer,"%c%s\n",LONG_LIST,printer);
}
else
{
sprintf(buffer,"%c%s\n",SHORT_LIST,printer);
}
sock_write(s, buffer, strlen(buffer));
while ( 1 ) {
sock_wait_input( s, sock_delay, NULL, &status );
len = sock_read( s, buffer, sizeof( buffer ));
printf("%*.*s",len,len,buffer);
}
sock_err:
switch ( status) {
case 1 : status = 0;
break;
case -1: fprintf( stderr, "Host closed connection.\n\r");
status = 3;
break;
}
if (!connected)
fprintf( stderr , "\n\rCould not get connected. You may not be in the /etc/hosts.lpd file!\n\r");
exit( status );
return (0); /* not reached */
}