亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? lpr.c

?? dos 下 網絡協議 dos 下 網絡協議
?? C
字號:
/*
 * LPR - dump job to printer
 *
 *
 *   Copyright (C) 1991 Erick Engelke
 *
 *   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
 *
 *
 * The following notes on control and data files were obtained from Clarkson's
 * CUTE project.
 *
 *
 * Control File: format is the first character in the line is a command,
 * the rest of the line is the argument.  Also note lowercase letters
 * denote the data file names (of various types).
 *
 * currently valid commands are:
 *
 *     J -- "job name" on banner page
 *     C -- "class name" on banner page
 *     L -- "literal" user's name to print on banner
 *     T -- "title" for pr
 *     H -- "host name" of machine where lpr was done
 *     P -- "person" user's login name
 *     I -- "indent" amount to indent output
 *     f -- "file name" name of text file to print
 *     l -- "file name" text file with control chars
 *     p -- "file name" text file to print with pr(1)
 *     t -- "file name" troff(1) file to print
 *     n -- "file name" ditroff(1) file to print
 *     d -- "file name" dvi file to print
 *     g -- "file name" plot(1G) file to print
 *     v -- "file name" plain raster file to print (impress)
 *     c -- "file name" cifplot file to print
 *     1 -- "R font file" for troff
 *     2 -- "I font file" for troff
 *     3 -- "B font file" for troff
 *     4 -- "S font file" for troff
 *     N -- "name" of file (used by lpq)
 *     U -- "unlink" name of file to remove
 *           (after we print it. (Pass 2 only)).
 *     M -- "mail" to user when done printing
 *
 * Currently it looks like only a lowercase filename and U command are
 * necessary.  However one should also include J, L, H, and P.
 *
 * In general the lpd program doesn't care what the data file looks like.
 * It should however be of the type specified in the control file
 * otherwise it will probably print incorrectly.
 *
 * The format is ?fA<number><hostname>.  ? is either c for control or d
 * for data files.  Number is a 3 digit number (0 padded) used for job
 * number information.  Hostname is the name of the originating host and
 * had best be equal to whatever shows up in the from field when a
 * connection is opened (ie probably should be the "real" hostname).
 * Currently all of these must be used as the program has them compiled in
 * (by stupid use of pointers).  I may change this in time but currently
 * it is the law if you want everything to work (some things will work
 * just fine without it, queueing a file just wants names, showing the
 * queue expects a number to start in the fourth position, deleting a file
 * expects the hostname to start in the 7th position and go to the end of
 * the filename.
 *
 * default userid = server = "UNKNOWN";
 *
 * get's sequence file from getenv( "SEQUENCE" )
 * else "SEQUENCE.LPR"
 *
 * if ( ( title = getenv( "TITLE" )) ==  NULL )
 *      title = "stdprn";
 * if ( ( jobname = getenv( "JOBNAME" )) == NULL )
 *       jobname = "job_name";
 * if ( (  class = getenv("CLASS")) == NULL )
 *       class = server
 */


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <io.h>
#include <tcp.h>

#define SHORT_LIST 3
#define LONG_LIST  4
#define MFCF_COUNT 5
char *mfcf[MFCF_COUNT];


#define LPQ_PORT 515
#define LOCAL_PORT 722

#define SEQFILE "SEQUENCE.LPR"
char *seqwhere;

word getsequence( void )
{
    static word oldseq = 0;
    FILE *f;

    if ( ! oldseq ) {
        /* must look to disk for an old sequence number */
        if ( (f = fopen( seqwhere, "rt" )) != NULL ) {
            fscanf( f, "%u", &oldseq );
            fclose( f );
        }
    }

    oldseq = ( oldseq + 1 ) % 1000;

    if ( (f = fopen( seqwhere, "wt" )) != NULL ) {
        fprintf( f, "%u", oldseq );
        fclose( f );
    }
    return( oldseq );
}

int lpr( char *localhostname, char *printer, char *rhostname, char *filename,
    char *title, char *jobname, char *class, char *username, char *servername )
{
    static tcp_Socket socketdata;
    tcp_Socket *s;
    longword filesize;
    longword host;
    int status = 0;
    int connected = 0;
    int completed = 0;
    int localport;
    word seqnum, i;

    static char buffer[ 1024 ];
    char *b2;
    char remotename[ 80 ];
    static char cmdfile[ 1024 ];
    longword remaining;
    word found;
    FILE *f;

    if (( *class == 0 ) || (*class == ' ')) class = NULL;

    for ( i = 0; i < MFCF_COUNT ; ++i ) {
        if ( mfcf[ i ] )
            printf("Extra option: %s\n", mfcf[i] );
    }

    if ( (f = fopen( filename, "rb")) == NULL ) {
	printf("Unable to open file '%s'\n", filename );
	return( 3 );
    }

    sock_init();
    s = &socketdata;
    if (!(host = resolve( rhostname ))) {
        printf( "lpq: unknown host %s\n",rhostname);
        return(1);
    }

    localport = 255 + (MsecClock() & 255);
    if ( !tcp_open( s, localport, host, LPQ_PORT, NULL)) {
      printf("Unable to open socket.");
      tcp_shutdown();
      return(1);
   }

   printf( "connecting...\r");
   sock_wait_established( s, sock_delay, NULL, &status );
   connected = 1;
   printf("connection established\n");

   /* is there an opening message - non-standard but possible */

   if (sock_dataready( s )) {
       sock_fastread( s, buffer, sizeof( buffer ));
       sock_tick( s, &status );	/* in case above message closed port */
   }

   /* use ipnumber/time  */
   seqnum = getsequence();
   sprintf(remotename,"fA%03u%s", seqnum, localhostname );
   
   /* we are connected */
   sprintf( buffer, "\2%s\n", printer );	/* select a printer */
   sock_puts( s, buffer );

   /* state #2 */

   sock_wait_input( s, sock_delay, NULL, &status );

   sock_fastread( s, buffer, sizeof( buffer ));

   switch (*buffer) {
       case 0 : break;
       case 1 : printf("Printer '%s' is not available\n", printer);
		goto close_it;
       default: rip( buffer );
                printf("ERROR: %s\n", buffer);
		goto close_it;
   }

   /* printer is accepted, printing file */
   filesize = filelength( fileno( f ));


   sprintf( buffer, "\3%ld d%s\n", filesize, remotename );
   sock_puts( s , buffer );
   sock_wait_input( s, sock_delay, NULL, &status );

   /* state 3, reply from filename */
   sock_fastread( s, buffer, sizeof( buffer ));

   switch (*buffer) {
	case 0: break;
        case 1: printf("remote host complains of bad connection");
		goto close_it;
	case 2: puts("remote host out of storage space");
		goto close_it;
    }

    /* dump file */

    remaining = filesize;
    do {
        cprintf("Transferred: %lu %c  \r",
            ((filesize - remaining + 1L)*100L)/(filesize+1), 37 );
        backgroundon();
        if ( (found = fread( buffer, 1, sizeof(buffer), f)) == 0 )
	    break;
        backgroundoff();

        sock_write( s, buffer, found );
	sock_tick( s , &status );
	if (sock_dataready( s )) {
	    puts("LPR: interrupted on transfer...");
	    goto close_it;
	}
    } while ( (remaining -= (longword)found) > 0 );

    sock_putc( s, 0 );

    /* check on status of this file */

    sock_wait_input( s, sock_delay, NULL, &status );
    sock_fastread( s, buffer, sizeof(buffer));

    switch (*buffer) {
	case 0: break;
	default:puts("file was rejected");
		goto close_it;		/* could retry */
    }

    sprintf( cmdfile,   "H%s\n"  "P%s\n" "C%s\n" "L%s\n",
        servername,     /* eg "development" */
	username,	/* eg "erick", */
        class ? class : servername, /* eg "NDSW or development", */

        username );     /* eg  "erick"       for on banner */

    for ( i = 0 ; i < MFCF_COUNT ; ++i ) {
        if ( mfcf[i] ) {
            strcat( cmdfile, mfcf[i] );
            strcat( cmdfile, "\n" );
        }
    }
    b2 = strchr( cmdfile, 0 );
    sprintf( b2, "T%s\n" "fd%s\n" "N%s\n" "Ud%s\n" "J%s\n",
        title,          /* title */
	remotename,	/* file processor */
        title,          /* name */
	remotename,
        jobname
    );
    printf("\nOptions:\n%s\n", cmdfile );

    sprintf( buffer, "\2%d c%s\n", strlen( cmdfile ), remotename );

    sock_puts( s , buffer );
    sock_flush( s );

    sock_wait_input( s, sock_delay, NULL, &status );
    sock_fastread( s, buffer, sizeof( buffer ));

    switch (*buffer) {
	case 0: break;
        case 1: puts("Bad connection");
		goto close_it;
        case 2: puts("Out of space on host");
                goto close_it;
        default:puts("Unknown error");
                goto close_it;
    }

    sock_puts( s, cmdfile );
    sock_putc( s, 0 );
    sock_flush( s );

    sock_wait_input( s, sock_delay, NULL, &status );
    sock_fastread( s, buffer, sizeof( buffer ));

    switch (*buffer) {
        case 0: puts("Completed - job accepted");
                completed = 1;
		sock_putc( s, 0 );
		sock_flush( s );
		break;
        default:puts("Control file rejected");
                status = 3;
                break;
    }

    /* all roads come here */
close_it:
    sock_tick( s, &status);	/* in case they sent reset */
    sock_close( s );
    sock_wait_closed( s, sock_delay, NULL, &status );

sock_err:
    switch( status ) {
	case 1: break;
        case-1: printf("Remote host reset connection\n\r");
		status = 3;
		break;
    }
    if (!connected)
       printf( "\n\rCould not get connected.  Perhaps you were not in the /etc/hosts.lpd file!\n\r");

    return( !completed );
}


int main( int argc, char **argv )
{
    char remotename[128];
    char *hostname;
    char *filename;
    char *printer;
    char *userid, *server;
    char *title, *jobname;
    char *rhostname;
    char *class;
    int status, i;

    for ( i = 0 ; i < MFCF_COUNT ; ++i ) {
        sprintf( remotename, "MFCF%u", i );
        mfcf[i] = getenv( remotename );
        if ( *mfcf[i] == 0 ) mfcf[i] = NULL;
    }


    userid = server = "UNKNOWN";
    if ((seqwhere = getenv( "SEQUENCE" )) == NULL )
        seqwhere = SEQFILE;
    if ( ( title = getenv( "TITLE" )) ==  NULL )
        title = "stdprn";
    if ( ( jobname = getenv( "JOBNAME" )) == NULL )
        jobname = "job_name";
    class = getenv("CLASS");

    puts("LPR using Waterloo TCP");
    switch (argc) {
	case 3:
	    /* no printername */
	    rhostname = argv[1];
	    filename = argv[2];
	    printer = "lp";
	    break;
	case 6:
	    /* whole thing */
	    userid = argv[4];
	    server = argv[5];		/* and continue on below */
	case 4:
	    /* Hostname and printer */
	    printer = argv[1];
	    rhostname = argv[2];
	    filename = argv[3];
	    break;
	default:
              printf( "Usage: LPR [printer] host filename [userid server]");
	      exit(1);
   }
    hostname = gethostname( NULL, 0 );
    if ( !hostname || !*hostname ) {
        puts("You must define your hostname in the WATTCP.CFG file!");
        exit( 3 );
    }

    strlwr( hostname );
    strlwr( userid );
    strlwr( server );
/* 94.11.19 -- removed extra parms */
    status = lpr( hostname, printer, rhostname, filename, title, jobname,
        class, userid, server /*, MFCF_COUNT, mfcf*/ );

    return( status ? 3 : 0 );
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线精品免费av| 国产精品成人一区二区艾草 | 欧美午夜理伦三级在线观看| 粉嫩久久99精品久久久久久夜 | 99re这里只有精品视频首页| 成人理论电影网| 岛国精品在线观看| 成人免费看片app下载| 亚洲成人7777| 麻豆国产精品视频| 国产成人啪免费观看软件| 青青草国产精品97视觉盛宴| 国产乱对白刺激视频不卡| 国产不卡视频在线播放| 一本久久精品一区二区| 欧美丝袜丝交足nylons图片| 欧美一区二区三区公司| 久久精品视频一区二区三区| 亚洲视频精选在线| 午夜激情久久久| 免费久久精品视频| 成人美女视频在线观看18| 色www精品视频在线观看| 欧美日韩成人在线一区| 久久这里只有精品6| 自拍视频在线观看一区二区| 日韩激情一二三区| 国内精品第一页| 色综合色综合色综合色综合色综合| 欧美三级日本三级少妇99| 精品盗摄一区二区三区| 18欧美乱大交hd1984| 奇米精品一区二区三区四区 | 国产在线日韩欧美| www.综合网.com| 欧美精品xxxxbbbb| 亚洲国产电影在线观看| 污片在线观看一区二区| 国产精品一区专区| 欧美综合一区二区| 国产欧美日韩在线| 青青青爽久久午夜综合久久午夜| www.av亚洲| 精品国产人成亚洲区| 亚洲情趣在线观看| 精品一区二区三区影院在线午夜| 色999日韩国产欧美一区二区| 欧美精品一区在线观看| 又紧又大又爽精品一区二区| 国产老女人精品毛片久久| 欧美视频精品在线| 亚洲丝袜自拍清纯另类| 国产一区二区视频在线| 欧美一级午夜免费电影| 一区二区三区四区不卡在线| 国产精品亚洲一区二区三区在线| 欧美一区二区三区系列电影| 一区二区三区四区亚洲| 成人av在线影院| 国产婷婷色一区二区三区| 开心九九激情九九欧美日韩精美视频电影| 日本韩国欧美国产| 国产精品久久久久aaaa| 国产99一区视频免费| 精品乱人伦小说| 亚洲国产精品精华液网站| 欧美一区三区二区| 国产精品丝袜一区| 成人蜜臀av电影| 中文字幕一区二区在线播放| 成人中文字幕合集| 国产日产亚洲精品系列| 成人综合婷婷国产精品久久| 国产欧美日韩另类一区| 国产美女主播视频一区| 久久精品免视看| 国产999精品久久久久久| 国产偷国产偷精品高清尤物 | 午夜视黄欧洲亚洲| 欧美无乱码久久久免费午夜一区| 亚洲综合免费观看高清完整版| 91福利资源站| 日韩精品成人一区二区在线| 日韩欧美一级片| 国产一二三精品| 国产精品女主播在线观看| 99国产欧美另类久久久精品| 亚洲自拍另类综合| 欧美日韩在线三级| 青青草97国产精品免费观看| 精品国产一区二区三区av性色| 国内精品伊人久久久久av影院 | 日韩av在线发布| 69久久夜色精品国产69蝌蚪网| 美女高潮久久久| 欧美国产精品中文字幕| 欧美系列一区二区| 日韩成人伦理电影在线观看| 欧美一二三四在线| 国产成人亚洲综合色影视| 中文字幕一区二区三中文字幕| 欧美日韩视频专区在线播放| 久久97超碰国产精品超碰| 国产精品私房写真福利视频| 欧美午夜不卡视频| 精品一区二区在线播放| 日韩理论片在线| 欧美一区二区三区的| 99re8在线精品视频免费播放| 午夜成人在线视频| 国产精品视频第一区| 欧美日韩美少妇 | 亚洲国产精华液网站w| 欧美网站大全在线观看| 国产一区二区三区最好精华液| 亚洲男人天堂av网| 精品成人一区二区三区| 91久久国产综合久久| 国产一区欧美一区| 婷婷中文字幕一区三区| 国产精品久线在线观看| 日韩美女在线视频| 欧美日韩视频在线观看一区二区三区| 国产在线观看免费一区| 午夜伦欧美伦电影理论片| 综合亚洲深深色噜噜狠狠网站| 日韩欧美一区二区久久婷婷| 91精品1区2区| 波多野结衣精品在线| 免费观看在线色综合| 日韩视频一区二区三区在线播放| 一本一道久久a久久精品| 粉嫩aⅴ一区二区三区四区五区| 蜜臀av一区二区在线免费观看| 亚洲一二三区在线观看| 亚洲视频一区二区在线| 国产精品嫩草影院com| 亚洲精品在线观看视频| 日韩精品影音先锋| 欧美一区二区三区精品| 欧美巨大另类极品videosbest | 国产精品久久毛片| 欧美电影免费观看高清完整版在线观看 | 在线视频综合导航| 国产成人精品免费| 国产成人啪免费观看软件 | 亚洲免费成人av| 亚洲免费观看在线视频| 亚洲乱码中文字幕| 中文字幕日韩av资源站| 亚洲婷婷在线视频| 亚洲天堂久久久久久久| 国产日韩av一区| 久久一日本道色综合| 久久综合九色综合97_久久久| 欧美成va人片在线观看| 日韩女优av电影| 26uuu久久天堂性欧美| 日韩精品资源二区在线| 91精品久久久久久蜜臀| 日韩久久久精品| 久久久久久免费毛片精品| 国产日韩在线不卡| 中文字幕在线免费不卡| 亚洲激情综合网| 亚洲h在线观看| 蜜臀av性久久久久蜜臀aⅴ流畅| 看电影不卡的网站| 成人一区二区三区视频| 成人黄色电影在线| 欧美亚洲愉拍一区二区| 91麻豆精品国产91久久久资源速度| 欧美一级在线观看| 中文字幕va一区二区三区| 樱桃视频在线观看一区| 奇米色一区二区三区四区| 精品制服美女久久| 高清视频一区二区| 在线免费观看日本一区| 精品免费99久久| 国产亚洲欧洲997久久综合| 久久久久久9999| 亚洲综合男人的天堂| 免费看黄色91| 91视频一区二区三区| 正在播放一区二区| 国产精品剧情在线亚洲| 首页国产丝袜综合| 成人h动漫精品| 欧美一级欧美三级在线观看| 国产精品久久久久久一区二区三区| 亚洲香肠在线观看| 国产1区2区3区精品美女| 欧美高清视频一二三区| 中文在线一区二区| 日韩国产欧美三级| 99精品视频一区| 精品国产免费一区二区三区四区| 亚洲欧美激情插| 丁香一区二区三区|