예제 #1
0
static void
recv_request( const messenger_context_handle *handle,
              uint16_t tag, void *data, size_t len ) {
  UNUSED( tag );
  UNUSED( data );
  UNUSED( len );

  buffer *reply = get_switches();
  send_reply_message( handle, 0, reply->data, reply->length );
  free_buffer( reply );
}
예제 #2
0
파일: rtf-field.c 프로젝트: ptomato/osxcart
static void field_instruction_end(ParserContext *ctx)
{
	FieldInstructionState *state = get_state(ctx);
	gchar *field_type, *buffer;
	GSList *switches = NULL, *formatswitches = NULL, *iter;
	const FieldInfo *field_info = fields;
	GScanner *tokenizer = g_scanner_new(&field_parser);
	
	g_scanner_input_text(tokenizer, state->scanbuffer->str, strlen(state->scanbuffer->str));
	
	/* Get field type */
	if(!(field_type = get_string_token(tokenizer)))
		return;

	/* Determine if field type is supported and get switches and arguments */
	while(field_info->name != NULL)
	{
	    if(g_ascii_strcasecmp(field_type, field_info->name) == 0)
	    {
	        state->type = field_info->type;
	        switches = get_switches(tokenizer, switches, field_info->switches, field_info->argswitches, field_info->wideswitches, field_info->wideargswitches);
	        if(field_info->has_argument)
	        {
	            if(!(buffer = get_string_token(tokenizer)))
	                return;
	            state->argument = g_strdup(buffer);
	            switches = get_switches(tokenizer, switches, field_info->switches, field_info->argswitches, field_info->wideswitches, field_info->wideargswitches);
	        }
	        break;
	    }
	    field_info++;
	}
	if(field_info->name == NULL) /* Field name wasn't found in list */
	{
		g_warning(_("'%s' field not supported"), field_type);
		g_scanner_destroy(tokenizer);
		return;
	}

	formatswitches = get_switches(tokenizer, formatswitches, "", "@#*", "", "");
	for(iter = formatswitches; iter; iter = g_slist_next(iter))
	{
		SwitchInfo *info = (SwitchInfo *)iter->data;
		/* Parse a date format consisting of \@ and a string */
		if(strcmp(info->switchname, "@") == 0)
			state->date_format = g_strdup(info->switcharg);
		/* Parse a numeric format consisting of \# and a string */
		else if(strcmp(info->switchname, "#") == 0)
			state->numeric_format = g_strdup(info->switcharg);
		/* Parse a general format consisting of \* and a keyword */
		else if(strcmp(info->switchname, "*") == 0)
		{
			if(strcmp(info->switcharg, "ALPHABETIC") == 0)
				state->general_number_format = NUMBER_ALPHABETIC;
			else if(strcmp(info->switcharg, "alphabetic") == 0)
				state->general_number_format = NUMBER_alphabetic;
			else if(strcmp(info->switcharg, "Arabic") == 0)
				state->general_number_format = NUMBER_ARABIC;
			else if(strcmp(info->switcharg, "ArabicDash") == 0)
				state->general_number_format = NUMBER_ARABIC_DASH;
			else if(strcmp(info->switcharg, "CIRCLENUM") == 0)
				state->general_number_format = NUMBER_CIRCLENUM;
			else if(strcmp(info->switcharg, "GB1") == 0)
				state->general_number_format = NUMBER_DECIMAL_ENCLOSED_PERIOD;
			else if(strcmp(info->switcharg, "GB2") == 0)
				state->general_number_format = NUMBER_DECIMAL_ENCLOSED_PARENTHESES;
			else if(strcmp(info->switcharg, "Hex") == 0)
				state->general_number_format = NUMBER_HEX;
			else if(strcmp(info->switcharg, "MERGEFORMATINET") == 0)
				; /* ignore */
			else if(strcmp(info->switcharg, "Ordinal") == 0)
				state->general_number_format = NUMBER_ORDINAL;
			else if(strcmp(info->switcharg, "Roman") == 0)
				state->general_number_format = NUMBER_ROMAN;
			else if(strcmp(info->switcharg, "roman") == 0)
				state->general_number_format = NUMBER_roman;
			else
				g_warning(_("Format '%s' not supported"), info->switcharg);
				/* Just continue */
		}
	}

    Destination *fielddest = g_queue_peek_nth(ctx->destination_stack, 1);
    FieldState *fieldstate = g_queue_peek_tail(fielddest->state_stack);

	switch(state->type)
	{
		case FIELD_TYPE_HYPERLINK:
		    /* Actually inserting hyperlinks into the text buffer is a whole 
		    security can of worms I don't want to open! Just use field result */
		    fieldstate->ignore_field_result = FALSE;
			break;

		case FIELD_TYPE_INCLUDEPICTURE:
		{
			GError *error = NULL;
			gchar **pathcomponents = g_strsplit(state->argument, "\\", 0);
			gchar *realfilename = g_build_filenamev(pathcomponents);
			
			g_strfreev(pathcomponents);
			GdkPixbuf *picture = gdk_pixbuf_new_from_file(realfilename, &error);
			if(!picture)
				g_warning(_("Error loading picture from file '%s': %s"), realfilename, error->message);
			else
			{
				/* Insert picture into text buffer */
				GtkTextIter iter;
				gtk_text_buffer_get_iter_at_mark(ctx->textbuffer, &iter, ctx->endmark);
				gtk_text_buffer_insert_pixbuf(ctx->textbuffer, &iter, picture);
				g_object_unref(picture);
			}
			g_free(realfilename);
		}
		    /* Don't use calculated field result */
		    fieldstate->ignore_field_result = TRUE;
			break;

		case FIELD_TYPE_PAGE:
		{
			gchar *output = format_integer(1, state->general_number_format);
			GtkTextIter iter;
			gtk_text_buffer_get_iter_at_mark(ctx->textbuffer, &iter, ctx->endmark);
			gtk_text_buffer_insert(ctx->textbuffer, &iter, output, -1);
			g_free(output);
		}
		    /* Don't use calculated field result */
		    fieldstate->ignore_field_result = TRUE;
			break;
			
		default:
			g_assert_not_reached();
	}
	
	g_free(state->argument);
	g_free(state->date_format);
	g_free(state->numeric_format);
	g_slist_foreach(switches, (GFunc)free_switch_info, NULL);
	g_slist_foreach(formatswitches, (GFunc)free_switch_info, NULL);
	g_scanner_destroy(tokenizer);
}
예제 #3
0
파일: ibmgr.cpp 프로젝트: dand-oss/firebird
static SSHORT parse_cmd_line( int argc, TEXT** argv, bool zapPasswd)
{
    /**************************************
     *
     *	p a r s e _ c m d _ l i n e
     *
     **************************************
     *
     * Functional description
     *	Parses the command line. After it was parsed
     *	executes commands that do require server access
     *	(help, show, etc.) and checks some conditions
     *	for other command.
     *
     *	returns:
     *
     *	    FB_SUCCESS   on normal completion,
     *	    ACT_QUIT  if user chooses to quit
     *	    ACT_PROMT used by main() to switch into
     *	              the prompt mode
     *	    ACT_NONE  on error or
     *	              if no further actions necessary
     *	              (like help, version, etc.)
     *
     **************************************/
    TEXT msg[MSG_LEN];
    bool quitflag = false;

    ibmgr_data.operation = OP_NONE;
    ibmgr_data.suboperation = SOP_NONE;
    ibmgr_data.par_entered = 0;

    SSHORT ret = get_switches(argc, argv, ibmgr_in_sw_table, &ibmgr_data, &quitflag, zapPasswd);
    if (ret != FB_SUCCESS)
    {
        if (ret == ERR_SYNTAX)
        {
            SRVRMGR_msg_get(MSG_SYNTAX, msg);
            fprintf(OUTFILE, "%s\n", msg);
        }
        return ACT_NONE;
    }
    switch (ibmgr_data.operation)
    {
    case OP_SHUT:
        if (strcmp(ibmgr_data.user, SYSDBA_USER_NAME))
        {
            SRVRMGR_msg_get(MSG_NOPERM, msg);
            fprintf(OUTFILE, "%s\n", msg);
            ret = ACT_NONE;
            break;
        }
        // The only allowed suboperation when shutdown
        // has been started is to IGNORE it.
        if (ibmgr_data.shutdown && ibmgr_data.suboperation != SOP_SHUT_IGN)
        {
            SRVRMGR_msg_get(MSG_SHUTDOWN, msg);
            fprintf(OUTFILE, "%s\n", msg);
            SRVRMGR_msg_get(MSG_CANTSHUT, msg);
            fprintf(OUTFILE, "%s\n", msg);
            ret = ACT_NONE;
        }
        break;

    case OP_START:
        if ((strcmp(ibmgr_data.real_user, "root") &&
                strcmp(ibmgr_data.real_user, FIREBIRD_USER_NAME) &&
                strcmp(ibmgr_data.real_user, INTERBASE_USER_NAME) &&
                strcmp(ibmgr_data.real_user, INTERBASE_USER_SHORT)) ||
                strcmp(ibmgr_data.user, SYSDBA_USER_NAME))
        {
            SRVRMGR_msg_get(MSG_NOPERM, msg);
            fprintf(OUTFILE, "%s\n", msg);
            ret = ACT_NONE;
            break;
        }
        break;

    case OP_HELP:
        print_help();
        ret = ACT_NONE;
        break;

    case OP_SHOW:
        print_config();
        ret = ACT_NONE;
        break;

    case OP_VERSION:
        ret = ACT_NONE;
        break;

    case OP_SET:
        ret = ACT_PROMPT;
        break;
    }

    if (quitflag)
        if (ibmgr_data.shutdown)
        {
            SRVRMGR_msg_get(MSG_SHUTDOWN, msg);
            fprintf(OUTFILE, "%s\n", msg);
            SRVRMGR_msg_get(MSG_CANTQUIT, msg);
            fprintf(OUTFILE, "%s\n", msg);
            ret = ACT_NONE;
        }
        else
            ret = ACT_QUIT;

    return ret;
}