int cq_font_list(int port, struct Mypapfile *in,struct papfile *out)
{
	char		*start, *stop, *p;
	struct comment	*comment = compeek(port);
	struct ppd_font	*pfo;

	ppd_init(port);

	for (;;) {
		switch ( markline( &start, &stop, in )) {
			case 0 :
//				return( 0 );  //8/4/99
			case -1 :
				return( CH_MORE );
		}

		if(comgetflags(port) == 0) {
			comsetflags(port, 1 );
			for ( pfo = ppd_fonts; pfo; pfo = pfo->pd_next ) {
				APPEND( out, "/", 1 );
				APPEND( out, pfo->pd_font, strlen(pfo->pd_font));
				APPEND( out, "\n", 1 );
			}
		} else {
			if ( comcmp( start, stop, comment->c_end, 0 ) == 0 ) {
				APPEND( out, "*\n", 2 );
				compop(port);
				consumetomark( in );
				return( CH_DONE );
			}
		}
		consumetomark( in );
	}
}
int cq_font(int port, struct Mypapfile *in,struct papfile *out)
{
	char		*start, *stop, *p;
	struct comment	*comment = compeek(port);

	for (;;) {
		switch ( markline( &start, &stop, in )) {
			case 0 :
//				return( 0 );  //8/4/99 marked
				return(CH_ERROR );//In normal case cann't into this statement
			case -1 :
				return( CH_MORE );
		}

		if(comgetflags(port) == 0) {
			comsetflags(port, 1 );

			for ( p = start; p < stop; p++ ) {
				if (*p == ':' ) break;
			}
			p++;
			cq_font_answer(port, p, stop, out );
		} else {
			if ( comgetflags(port) == 1 &&
				comcmp( start, stop, COMM_CONT, 0 ) == 0 ) {
				// continuation
				for ( p = start; p < stop; p++ ) {
					if ( *p == ' ' ) break;
				}
				p++;
				cq_font_answer(port, p, stop, out );
			} else {
				comsetflags(port, 2 );
				if ( comcmp( start, stop, comment->c_end, 0 ) == 0 ) {
					APPEND( out, "*\n", 2 );
					compop(port);
					consumetomark( in );
					return( CH_DONE );
				}
			}
		}
		consumetomark( in );
	}
}
int cq_query(int port, struct Mypapfile	*in,struct papfile *out)
{
	char		*start, *stop, *p;
	struct comment	*c, *comment = compeek(port);
	struct ppd_feature	*pfe;

	for (;;) {
		switch ( markline( &start, &stop, in )) {
			case 0 :
//				return( 0 );  //8/4/99
				return(CH_MORE ); //In normal case cann't into this statement
			case -1 :
				return( CH_MORE );
		}

		if ( comgetflags(port) == 0 ) {
			comsetflags(port, 1 );

			// parse for query
			for ( p = start; p < stop; p++ ) {
				if ( *p == ':' ) {
					break;
				}
			}
			p++;
			while ( *p == ' ' ) {
				p++;
			}
			if(memcmp(p,"ADOSpooler",10) != NULL || (p[10] != '\r' && p[10] != '\n'))
			{
				if ( comswitch(port, queries, cq_default ) < 0 ) {
#ifdef PC_OUTPUT
				    printf("cq_feature: can't find default!\n" );
#endif PC_OUTPUT
				}
				return( CH_DONE );
			}

			APPEND( out, "0\n", 2 );
		} else {
	    	if ( comcmp( start, stop, comment->c_end, 0 ) == 0 ) {
				compop(port);
				consumetomark( in );
				return( CH_DONE );
			}
		}
		consumetomark( in );
	}//for (;;).....
}
Esempio n. 4
0
int find_ini_field(TSTR_LIST ls,const char *name)
  {
  const char *a;
  char *b;
  int i,cnt=str_count(ls);

  for (i=0;i<cnt;i++) if (ls[i]!=NULL)
     {
     a=name;
     b=ls[i];
     while (*b==32) b++;
     if (*b==';') continue;
     if (comcmp(b,a)) return i;
     }
  return -1;
  }
int cq_default(int port, struct Mypapfile *in,struct papfile *out)
{
	char		*start, *stop, *p;
	struct comment	*comment = compeek(port);

	for (;;) {
		switch ( markline( &start, &stop, in )) {
			case 0 :
//				return( 0 );  //8/4/99 marked
				return(CH_MORE ); //In normal case cann't into this statement
			case -1 :
				return( CH_MORE );
		}

		if ( comgetflags(port) == 0 ) {	// started
			if ( comment->c_end ) {
				comsetflags(port, 1 );
			} else {
				compop(port);

				consumetomark( in );
				return( CH_DONE );
			}
		} else {
			// return default
			if (comcmp( start, stop, comment->c_end, 0 ) == 0 ) {
				for ( p = start; p < stop; p++ ) {
					if ( *p == ':' ) break;
				}
				p++;
				while ( *p == ' ' ) {
					p++;
				}
				*stop = '\n';
				APPEND( out, p, stop - p + 1 );
				compop(port);
				consumetomark( in );
				return( CH_DONE );
			}
		}
		consumetomark( in );
	}
}