Esempio n. 1
0
void create()
{
    if(file_exists(ACCOUNT_DATA)) {
        restore_object(ACCOUNT_DATA);
    }
    save_object(ACCOUNT_DATA);
}
Esempio n. 2
0
SetUser(name,what)
{
  if (!ok()) return;
  if (!mappingp(what)) return;
  data[name]=what;
  save_object(SAVEFILE);
}
Esempio n. 3
0
gboolean
mu_msg_part_save (MuMsg *msg, MuMsgOptions opts,
		  const char *fullpath, guint partidx, GError **err)
{
	GMimeObject *part;

	g_return_val_if_fail (msg, FALSE);
	g_return_val_if_fail (fullpath, FALSE);
	g_return_val_if_fail (!((opts & MU_MSG_OPTION_OVERWRITE) &&
			        (opts & MU_MSG_OPTION_USE_EXISTING)), FALSE);

	if (!mu_msg_load_msg_file (msg, err))
		return FALSE;

	part = get_mime_object_at_index (msg, opts, partidx);
	if (!GMIME_IS_PART(part) || GMIME_IS_MESSAGE_PART(part)) {
		g_set_error (err, MU_ERROR_DOMAIN, MU_ERROR_GMIME,
			     "unexpected type %s for part %u",
			     G_OBJECT_TYPE_NAME((GObject*)part),
			     partidx);
		return FALSE;
	}

	return save_object (part, opts, fullpath, err);
}
Esempio n. 4
0
int cmd_tstats(string str) {
    string *users;
    int i;

    if(!players) players = ([]);

    if(!str) {
	users = keys(players);
	i = sizeof(users);
	while(i--) {
	    write ( capitalize(users[i] + " : " + players[users[i]] + "") );
	}
    }

    else {
	if(!find_player(str)) 
	    return notify_fail("player not found\n");
	else if(!players[str]) 
	    players[str] = 1;
	else
	    players[str]++;
	write("+1 ("+str+")\n");
    }
    seteuid(UID_CRESAVE);
    save_object("/wizards/daos/save/trivia");
    seteuid(geteuid());
    return 1;
}
Esempio n. 5
0
int
main() {
	asn_TYPE_descriptor_t *td = &asn_DEF_UserIdentifier;
	UserIdentifier_t user;
	UserIdentifier_t user_new;
	int ret;

	memset(&user, 0, sizeof user);
	memset(&user_new, 0, sizeof user_new);

	user.present = UserIdentifier_PR_phoneNumber;
	OCTET_STRING_fromBuf(
		&user.choice.phoneNumber,
		"0123456789", -1);

	/* Save->Load must succeed */
	save_object(&user, td);
	ret = load_object(&user_new, td);

	assert(user_new.present == UserIdentifier_PR_phoneNumber);

	assert(ret == 0);

	printf("OK\n");

	return ret;
}
Esempio n. 6
0
int save_data_conn() {
	if (!name || name == "logon" || !password) return 0;

      // A fix from Dm, after an idea from Robo, added by Leto
  // if(file_size(PDATA_DIR+name+".o") < 1) return 0;
	assure_user_save_dir(this_object());
	save_object(user_data_file(this_object())+__SAVE_EXTENSION__);
	return 1;
}
Esempio n. 7
0
File: save.c Progetto: mudchina/fy4
 // save.c
// Copyright (C) 1995 - 2001, by FengYun Workshop. All rights reserved.
// This software can not be used, copied, or modified in any form without
// the written permission from authors.
//  
int save() {
        string file;
        
        if(stringp(file = this_object()->query_save_file())) {
                assure_file(file+ __SAVE_EXTENSION__);
                return save_object(file);
        }
        return 0;
} 
Esempio n. 8
0
int remove_high_lord(string str) {
  if (high_programmer(geteuid(previous_object())) &&
    positions[str] == HIGH_LORD) {
    map_delete(positions, str);
    save_object("/secure/master");
    return 1;
  }
  return 0;
} /* remove_high_lord() */
Esempio n. 9
0
int add_high_lord(string str) {
  if ("/secure/login"->test_user(str) &&
    high_programmer(geteuid(previous_object()))) {
    positions[str] = HIGH_LORD;
    save_object("/secure/master");
    return 1;
  }
  return 0;
} /* add_high_lord() */
Esempio n. 10
0
void save_students() {
   string err;

   err = catch( save_object(SAVE_FILE) );

   if(err)  log_file(ERROR_LOG, "[" + extract(ctime(time()),4,15) +
		     "]  Error in save_students()\n  " + err + "\n");

}
Esempio n. 11
0
/*
 * write one list of objects
 */
void save_inventory(inv_t *i, FILE *f)
{
        int j;

        fwrite("INVENTORY", sizeof(char), 9, f);
        fwrite(&i->num_used, sizeof(short), 1, f);
        fwrite(&i->gold, sizeof(int), 1, f);

        for(j = 0; j < 52; j++)
                save_object(i->object[j], f);
}
Esempio n. 12
0
int vote(string str) {
    string me;

    me=(string)this_player()->query_name();
    if(str!="a" && str!="b") {
        notify_fail("You may only vote for a or b.\n");
        return 0;
    }
    if(this_player()->query_level() < 5 && !wizardp(this_player())) {
        write("You are too small of an adventurer to partake in such events.");
        return 1;
    }
    if(MULTI_D->non_voter(me)) {
        write("You are listed as a second character.  You may not vote.");
        return 1;
    }
    if(vote[me]) {
        write("You have already voted.");
        return 1;
    }
    if(str=="a") {
        vote[me]="a";
        a++;
        write("Vote counted.  Thank you.");
        seteuid(UID_VOTESAVE);
        save_object(DIR_VOTES+"/question");
        seteuid(geteuid());
        return 1;
    }
    if(str=="b") {
        vote[me]="b";
        b++;
        write("Vote counted.  Thank you.");
        seteuid(UID_VOTESAVE);
        save_object(DIR_VOTES+"/question");
        seteuid(geteuid());
        return 1;
    }

}
Esempio n. 13
0
int do_messages() {
  int i;
  if(sizeof(messages) < 1) {
    write("Your notepad is empty.\n");
    return 1;
  }
  write("Your messages:\n");
  for(i = 0; i < sizeof(messages); i++) {
    write("  "+(i+1)+". "+messages[i]+"\n");
  }
  save_object("/wiz/b/bart/save/notepad");
  return 1;
}
load_player() {
    loaded = 1;
    if (!restore_object(NAME + this_player()->query_real_name()) ||
      messages == "" || messages == 0) {
	arr_messages = 0;
	messages = "";
	return;
    }
    if (new_mail) {
	new_mail = 0;
	save_object(NAME + this_player()->query_real_name());
    }
    arr_messages = explode(messages, "\n**\n");
}
Esempio n. 15
0
int clear() {
    if(!tmp_clear) {
        write("Type clear again to clear the votes.");
        tmp_clear=1;
        return 1;
    }
    vote=([]);
    a=0;
    b=0;
    write("Vote counted.  Thank you.");
    seteuid(UID_VOTESAVE);
    save_object(DIR_VOTES+"/question");
    seteuid(geteuid());
    write("Vote system cleared.");
    return 1;
}
Esempio n. 16
0
/*****************************************************************************
 Name:		save_objects
 Purpose:	Save #OBJECTS section of an area file.
 Called by:	save_area(olc_save.c).
 Notes:         Changed for ROM OLC.
 ****************************************************************************/
void save_objects( FILE *fp, AREA_DATA *pArea )
{
    int i;
    OBJ_INDEX_DATA *pObj;

    fprintf( fp, "#OBJECTS\n" );

    for( i = pArea->min_vnum; i <= pArea->max_vnum; i++ )
    {
	if ( (pObj = get_obj_index( i )) )
	    save_object( fp, pObj );
    }

    fprintf( fp, "#0\n\n\n\n" );
    return;
}
Esempio n. 17
0
bool Model::Save3DO (const char *fn, IProgressCtl& progctl)
{
	FILE *f = fopen(fn, "wb");

	if (!f)
		return false;

	MdlObject *cl = root->Clone();
	IterateObjects (cl, ApplyOrientationAndScaling);
	
	vector<MdlObject*> tmp;
	tmp.push_back (cl);
	save_object (f, 0, tmp.begin());
	fclose (f);

	delete cl;
	return true;
}
Esempio n. 18
0
//#################### SAVING METHODS ####################
void ObjectsSection::save(std::ostream& os, const ObjectManager_Ptr& objectManager)
{
	objectManager->consolidate_object_ids();

	os << "Objects\n";
	os << "{\n";

	os << '\t';
	int objectCount = objectManager->object_count();
	FieldIO::write_typed_field(os, "Count", objectCount);

	// Note:	The objects with the specified IDs are guaranteed to exist because we called consolidate_object_ids() above.
	//			This would not necessarily be the case otherwise, as the IDs of the objects may not form a contiguous series.
	for(int i=0; i<objectCount; ++i)
	{
		std::vector<IObjectComponent_Ptr> components = objectManager->get_components(ObjectID(i));
		save_object(os, components, objectManager->component_property_types());
	}

	os << "}\n";
}
Esempio n. 19
0
int pop_mud( string mudname ) {
  init_queue();
  
  if( !file_exists( SAVE_FILE( mudname ) + SAVE_EXTENSION ) )
    return 0;
  
  if( !restore_object( SAVE_FILE( mudname ) ) ) {
    log_file( "mail_q", "Could not restore " + SAVE_FILE( mudname ) +
      SAVE_EXTENSION + "\n" );
    return 0;
  }
  
  if( !out_queue )
    init_queue();
  
  out_queue = exclude_array( out_queue, 0 );

  if( !sizeof( out_queue ) ) 
     rm( SAVE_FILE( mudname ) + SAVE_EXTENSION );
  else
     save_object( SAVE_FILE( mudname ) );
  return 1;
}
Esempio n. 20
0
int pop_mud( string mudname ) {
  init_queue();
  
  if( !file_exists( SAVE_FILE( mudname ) + SAVE_EXTENSION ) )
    return 0;
  
  if( !restore_object( SAVE_FILE( mudname ) ) ) {
    rm( SAVE_FILE( mudname ) + SAVE_EXTENSION );
    return 0;
  }
  
  if( !out_queue )
    init_queue();
  
TELL( sizeof(out_queue) );
  out_queue = out_queue[1..<1];
TELL(sizeof(out_queue ) );
  
  if( !sizeof( out_queue ) )
    rm( SAVE_FILE( mudname ) + SAVE_EXTENSION );
  else
    save_object( SAVE_FILE( mudname ) );
  return 1;
}
Esempio n. 21
0
static void save_object(FILE *f, MdlObject *parent, std::vector<MdlObject*>::iterator cur)
{
	TA_Object n;
	MdlObject *obj = *cur++;

	memset (&n, 0, sizeof(TA_Object));

	int header = ftell(f);
	fseek (f, sizeof(TA_Object), SEEK_CUR);
	
	n.VersionSignature = 1;
	n.NumberOfPrimitives = obj->poly.size();
	n.XFromParent = TO_TA(obj->position.v[0]);
	n.YFromParent = TO_TA(obj->position.v[1]);
	n.ZFromParent = TO_TA(obj->position.v[2]);
	n.NumberOfVertexes = obj->verts.size();

	n.OffsetToObjectName = ftell(f);
	WriteZStr (f, obj->name);

	n.OffsetToVertexArray = ftell(f);
	for (int a=0;a<obj->verts.size();a++)
	{
		long v[3];
		Vector3 *p = &obj->verts[a].pos;
		for (int i=0;i<3;i++) v[i] = TO_TA(p->v[i]);
		fwrite (v, sizeof(long), 3, f);
	}

	n.OffsetToPrimitiveArray = ftell(f);
	TA_Polygon *tapl = new TA_Polygon [obj->poly.size()];
	fseek (f, sizeof(TA_Polygon) * obj->poly.size(), SEEK_CUR);
	memset (tapl,0,sizeof(TA_Polygon)*obj->poly.size());

	for (int a=0;a<obj->poly.size();a++)
	{
		Poly *pl = obj->poly [a];

		if (pl->taColor >= 0)
			tapl[a].PaletteIndex = pl->taColor;
		else
			tapl[a].PaletteIndex = palette.FindIndex(pl->color);

		tapl[a].TexnameOfs = ftell(f);
		WriteZStr (f,pl->texname);
		tapl[a].VertOfs = ftell(f);
		for (int b=0;b<pl->verts.size();b++)
		{
			unsigned short v;
			v = pl->verts[b];
			fwrite (&v, sizeof(short), 1, f);
		}
		tapl[a].VertNum = pl->verts.size();
		tapl[a].Unknown_1 = 0;
		tapl[a].Unknown_2 = 0;
		tapl[a].Unknown_3 = 0;
	}
	
	int old = ftell(f);
	fseek (f, n.OffsetToPrimitiveArray, SEEK_SET);
	fwrite (tapl, sizeof(TA_Polygon), obj->poly.size(),f);
	fseek (f, old, SEEK_SET);

	if (parent) {
		if (cur != parent->childs.end()) {
			n.OffsetToSiblingObject = ftell(f);
			save_object (f, parent, cur);
		}
	}

	if (obj->childs.size()) {
		n.OffsetToChildObject = ftell(f);
		save_object (f, obj, obj->childs.begin());
	}

	old=ftell(f);
	fseek (f, header, SEEK_SET);
	fwrite (&n, sizeof(TA_Object), 1, f);
	fseek (f,old, SEEK_SET);
}
Esempio n. 22
0
void save_quests() {
  seteuid((string)"secure/master"->get_root_uid());
  save_object(SAVE_FILE);
  seteuid("Room");
}
Esempio n. 23
0
void do_save() {
    save_object(SAVE_FILE);
}
Esempio n. 24
0
/** Used to backup the file security data to disk. All modifications of the
 * file security information call this immediately, so you don't have people
 * "undoing" changes by calling load_self().
 */
void save_self() {
   save_object( FILE_SECURITY_DATA );
}
int
main() {
	asn_TYPE_descriptor_t *td1 = &asn_DEF_T1;
	asn_TYPE_descriptor_t *td2 = &asn_DEF_T2;
	T1_t t1, t1_new;
	T2_t t2, t2_new;
	int ret;

	/*
	 * Test the T1 with constructed indefinite length ANY encoding.
	 */
	memset(&t1, 0, sizeof(t1));
	memset(&t1_new, 0, sizeof(t1_new));

	t1.i = 112233;
	t1.any.buf = test_any_buf1;
	t1.any.size = sizeof(test_any_buf1);

	/* Save->Load must succeed */
	save_object(&t1, td1);
	ret = load_object(&t1_new, td1);

	assert(ret == 0);
	assert(t1_new.i == 112233);
	assert(t1_new.any.size == sizeof(test_any_buf1));
	assert(memcmp(t1_new.any.buf, test_any_buf1, sizeof(test_any_buf1)) == 0);

	/*
	 * Test the T1 with primitive encoding.
	 */
	memset(&t1, 0, sizeof(t1));
	memset(&t1_new, 0, sizeof(t1_new));

	t1.i = -112233;
	t1.any.buf = test_any_buf2;
	t1.any.size = sizeof(test_any_buf2);

	/* Save->Load must succeed */
	save_object(&t1, td1);
	ret = load_object(&t1_new, td1);

	assert(ret == 0);
	assert(t1_new.i == -112233);
	assert(t1_new.any.size == sizeof(test_any_buf2));
	assert(memcmp(t1_new.any.buf, test_any_buf2, sizeof(test_any_buf2)) == 0);

	/*
	 * Test the T2 empty sequence.
	 */
	memset(&t2, 0, sizeof(t2));
	memset(&t2_new, 0, sizeof(t2_new));

	t2.i = 332211;
	t2.any = calloc(1, sizeof(*t2.any));
	t2.any->buf = 0;
	t2.any->size = 0;

	/* Save->Load must succeed */
	save_object(&t2, td2);
	ret = load_object(&t2_new, td2);

	assert(ret == 0);
	assert(t2_new.i == 332211);
	assert(t2_new.any->size == 0);

	/*
	 * Test the T2 sequence.
	 */
	memset(&t2, 0, sizeof(t2));
	memset(&t2_new, 0, sizeof(t2_new));

	t2.i = 332211;
	t2.any = calloc(1, sizeof(*t2.any));
	t2.any->buf = test_any_buf1;
	t2.any->size = sizeof(test_any_buf1);

	/* Save->Load must succeed */
	save_object(&t2, td2);
	ret = load_object(&t2_new, td2);

	assert(ret == 0);
	assert(t2_new.i == 332211);
	assert(t2_new.any->size == sizeof(test_any_buf1));
	assert(memcmp(t2_new.any->buf, test_any_buf1, sizeof(test_any_buf1)) == 0);

	/*
	 * Test the T2 sequence with primitive encoding.
	 */
	memset(&t2, 0, sizeof(t2));
	memset(&t2_new, 0, sizeof(t2_new));

	t2.i = 0;
	t2.any = calloc(1, sizeof(*t2.any));
	t2.any->buf = test_any_buf2;
	t2.any->size = sizeof(test_any_buf2);

	/* Save->Load must succeed */
	save_object(&t2, td2);
	ret = load_object(&t2_new, td2);

	assert(ret == 0);
	assert(t2_new.i == 0);
	assert(t2_new.any->size == sizeof(test_any_buf2));
	assert(memcmp(t2_new.any->buf, test_any_buf2, sizeof(test_any_buf2)) == 0);

	/*
	 * Test T2 with ANY element omitted.
	 */
	free(t2.any);
	t2.any = 0;
	memset(&t2_new, 0, sizeof(t2_new));

	save_object(&t2, td2);
	ret = load_object(&t2_new, td2);

	assert(ret == 0);
	assert(t2_new.i == 0);
	assert(t2_new.any == 0);

	printf("OK\n");

	return ret;
}
Esempio n. 26
0
static void save() {
   seteuid(UID_DAEMONSAVE);
   save_object(SAVE_FILE);
   seteuid(getuid());
}
Esempio n. 27
0
int cmd_pay(string str)
{
    int year;
    int mo;
    string month;
    string guild;
    int error;
    
    if( !this_player()->query_guild() )
        return 0;
    
    if( this_player()->query_guild_position() != "leader" &&
        this_player()->query_guild_position() != "main" )
    {
        return 0;
    }
    
    if( !str || str != "dues" )
        return notify_fail("Pay what?\n");
    
    seteuid(UID_DAEMONSAVE);
    restore_object(SAVE_FILE);
    seteuid(getuid());
    
    year = EVENTS_D->query_year(time());
    mo = EVENTS_D->query_month(time()) - 1;
    month = MONTHS[mo];
    guild = (string)(environment(this_player())->query_guild());
    
    if( !sizeof(guild) )
        return notify_fail("You must be in your treasury to do that.\n");
    
    if( !payments )
        payments = ([]);
    
    if( !payments[guild] )
        payments[guild] = ([]);
    
    if( !payments[guild][year] )
        payments[guild][year] = ([]);
    
    if( !payments[guild][year][mo] )
    {
        error = TREASURY_D->withdraw(this_player()->query_name(), guild,
                DUES_AMOUNT, "gold");
        switch( error )
        {
            case INSF:
                return notify_fail("You need at least " + DUES_AMOUNT
                    + " gold in your treasury.\n");
                break;
            case NO_ACCOUNT:
                return notify_fail("Your guild doesn't have a treasury!\n");
                break;
            case BAD_ACCESS:
                return notify_fail("You don't have access to the guild's " +
                        "treasury!\n");
                break;
            case TRANSACTION_OK:
                payments[guild][year][mo] = DUES_AMOUNT;
                message("info", "You have paid your dues for " +
                        capitalize(month) + ".", this_player());
                seteuid(UID_DAEMONSAVE);
                save_object(SAVE_FILE);
                seteuid(getuid());
                TREASURY_D->update_summary(
                        this_player()->query_original_guild(),
                        "Guild dues", "gold", DUES_AMOUNT);
                environment(this_player())->do_scroll_write(
                        capitalize(this_player()->query_name()) + " (dues)",
                        WITHDRAW, DUES_AMOUNT, "gold");
                return 1;
                break;                
            default:
                /* Edit eventually to log the error */
                return notify_fail("An error occured; please contact an " +
                        "Admin.\n");
                break;
        }
    }
    else
    {
        return notify_fail("Your dues have already been paid for this month.\n");
    }
    
    // Should never get here, but just in case
    return 0;
}
Esempio n. 28
0
static void
save_set_all(FILE *fp)
{
    struct text_label *this_label;
    struct arrow_def *this_arrow;
    struct linestyle_def *this_linestyle;
    struct arrowstyle_def *this_arrowstyle;
    legend_key *key = &keyT;
    int axis;

    /* opinions are split as to whether we save term and outfile
     * as a compromise, we output them as comments !
     */
    if (term)
	fprintf(fp, "# set terminal %s %s\n", term->name, term_options);
    else
	fputs("# set terminal unknown\n", fp);

    if (outstr)
	fprintf(fp, "# set output '%s'\n", outstr);
    else
	fputs("# set output\n", fp);

    fprintf(fp, "\
%sset clip points\n\
%sset clip one\n\
%sset clip two\n\
set bar %f %s\n",
	    (clip_points) ? "" : "un",
	    (clip_lines1) ? "" : "un",
	    (clip_lines2) ? "" : "un",
	    bar_size, (bar_layer == LAYER_BACK) ? "back" : "front");

    if (draw_border) {
	fprintf(fp, "set border %d %s", draw_border, border_layer == 0 ? "back" : "front");
	save_linetype(fp, &border_lp, FALSE);
	fprintf(fp, "\n");
    } else
	fputs("unset border\n", fp);

    for (axis = FIRST_AXES; axis < LAST_REAL_AXIS; axis++) {
	if (axis == SECOND_Z_AXIS) continue;
	if (strlen(axis_array[axis].timefmt))
	    fprintf(fp, "set timefmt %s \"%s\"\n", axis_defaults[axis].name,
		conv_text(axis_array[axis].timefmt));
	if (axis == COLOR_AXIS) continue;
	fprintf(fp, "set %sdata %s\n", axis_defaults[axis].name,
		axis_array[axis].datatype == DT_TIMEDATE ? "time" :
		"");
    }

    if (boxwidth < 0.0)
	fputs("set boxwidth\n", fp);
    else
	fprintf(fp, "set boxwidth %g %s\n", boxwidth,
		(boxwidth_is_absolute) ? "absolute" : "relative");

    fprintf(fp, "set style fill ");
    save_fillstyle(fp, &default_fillstyle);

#ifdef EAM_OBJECTS
    /* Default rectangle style */
    fprintf(fp, "set style rectangle %s fc ",
	    default_rectangle.layer > 0 ? "front" : 
	    default_rectangle.layer < 0 ? "behind" : "back");
    if (default_rectangle.lp_properties.use_palette)
	save_pm3dcolor(fp, &default_rectangle.lp_properties.pm3d_color);
    else
	fprintf(fp, "lt %d",default_rectangle.lp_properties.l_type+1);
    fprintf(fp, " fillstyle ");
    save_fillstyle(fp, &default_rectangle.fillstyle);

    /* Default circle properties */
    fprintf(fp, "set style circle radius ");
    save_position(fp, &default_circle.o.circle.extent, FALSE);
    fputs(" \n", fp);

    /* Default ellipse properties */
    fprintf(fp, "set style ellipse size ");
    save_position(fp, &default_ellipse.o.ellipse.extent, FALSE);
    fprintf(fp, " angle %g ", default_ellipse.o.ellipse.orientation);
    fputs("units ", fp);
    switch (default_ellipse.o.ellipse.type) {
        case ELLIPSEAXES_XY:
            fputs("xy\n", fp);
	    break;
	case ELLIPSEAXES_XX:
	    fputs("xx\n", fp);
	    break;
	case ELLIPSEAXES_YY:
	    fputs("yy\n", fp);
	    break;
    }
#endif

    if (dgrid3d) {
      if( dgrid3d_mode == DGRID3D_QNORM ) {
	fprintf(fp, "set dgrid3d %d,%d, %d\n",
          	dgrid3d_row_fineness,
          	dgrid3d_col_fineness,
          	dgrid3d_norm_value);
      } else if( dgrid3d_mode == DGRID3D_SPLINES ) {
	fprintf(fp, "set dgrid3d %d,%d splines\n",
          	dgrid3d_row_fineness, dgrid3d_col_fineness );
      } else {
	fprintf(fp, "set dgrid3d %d,%d %s%s %f,%f\n",
          	dgrid3d_row_fineness,
          	dgrid3d_col_fineness,
		reverse_table_lookup(dgrid3d_mode_tbl, dgrid3d_mode),
		dgrid3d_kdensity ? " kdensity2d" : "",
          	dgrid3d_x_scale,
          	dgrid3d_y_scale );
      }
    }

    fprintf(fp, "set dummy %s,%s\n", set_dummy_var[0], set_dummy_var[1]);

#define SAVE_FORMAT(axis)						\
    fprintf(fp, "set format %s \"%s\"\n", axis_defaults[axis].name,	\
	    conv_text(axis_array[axis].formatstring));
    SAVE_FORMAT(FIRST_X_AXIS );
    SAVE_FORMAT(FIRST_Y_AXIS );
    SAVE_FORMAT(SECOND_X_AXIS);
    SAVE_FORMAT(SECOND_Y_AXIS);
    SAVE_FORMAT(FIRST_Z_AXIS );
    SAVE_FORMAT(COLOR_AXIS );
    SAVE_FORMAT(POLAR_AXIS );
#undef SAVE_FORMAT

    fprintf(fp, "set angles %s\n",
	    (ang2rad == 1.0) ? "radians" : "degrees");

    /* Grid back/front controls tics also. Make sure it is saved */
    if (grid_layer >= 0)
	fprintf(fp,"set tics %s\n", grid_layer == 0 ? "back" : "front");
    
    if (! some_grid_selected())
	fputs("unset grid\n", fp);
    else {
	if (polar_grid_angle) 	/* set angle already output */
	    fprintf(fp, "set grid polar %f\n", polar_grid_angle / ang2rad);
        else
	    fputs("set grid nopolar\n", fp);

#define SAVE_GRID(axis)					\
	fprintf(fp, " %s%stics %sm%stics",		\
		axis_array[axis].gridmajor ? "" : "no",	\
		axis_defaults[axis].name,		\
		axis_array[axis].gridminor ? "" : "no",	\
		axis_defaults[axis].name);
	fputs("set grid", fp);
	SAVE_GRID(FIRST_X_AXIS);
	SAVE_GRID(FIRST_Y_AXIS);
	SAVE_GRID(FIRST_Z_AXIS);
	fputs(" \\\n", fp);
	SAVE_GRID(SECOND_X_AXIS);
	SAVE_GRID(SECOND_Y_AXIS);
	SAVE_GRID(COLOR_AXIS);
	fputs("\n", fp);
#undef SAVE_GRID

	fprintf(fp, "set grid %s  ", (grid_layer==-1) ? "layerdefault" : ((grid_layer==0) ? "back" : "front"));
	save_linetype(fp, &grid_lp, FALSE);
	fprintf(fp, ", ");
	save_linetype(fp, &mgrid_lp, FALSE);
	fputc('\n', fp);
    }
    fprintf(fp, "%sset raxis\n", raxis ? "" : "un");

    fprintf(fp, "set key title \"%s\"", conv_text(key->title));
    if (key->font)
	fprintf(fp, " font \"%s\"", key->font);
    if (key->textcolor.type != TC_LT || key->textcolor.lt != LT_BLACK)
	save_textcolor(fp, &key->textcolor);
    fputs("\n", fp);

    fputs("set key ", fp);
    switch (key->region) {
	case GPKEY_AUTO_INTERIOR_LRTBC:
	    fputs("inside", fp);
	    break;
	case GPKEY_AUTO_EXTERIOR_LRTBC:
	    fputs("outside", fp);
	    break;
	case GPKEY_AUTO_EXTERIOR_MARGIN:
	    switch (key->margin) {
	    case GPKEY_TMARGIN:
		fputs("tmargin", fp);
		break;
	    case GPKEY_BMARGIN:
		fputs("bmargin", fp);
		break;
	    case GPKEY_LMARGIN:
		fputs("lmargin", fp);
		break;
	    case GPKEY_RMARGIN:
		fputs("rmargin", fp);
		break;
	    }
	    break;
	case GPKEY_USER_PLACEMENT:
	    fputs("at ", fp);
	    save_position(fp, &key->user_pos, FALSE);
	    break;
    }
    if (!(key->region == GPKEY_AUTO_EXTERIOR_MARGIN
	      && (key->margin == GPKEY_LMARGIN || key->margin == GPKEY_RMARGIN))) {
	switch (key->hpos) {
	    case RIGHT:
		fputs(" right", fp);
		break;
	    case LEFT:
		fputs(" left", fp);
		break;
	    case CENTRE:
		fputs(" center", fp);
		break;
	}
    }
    if (!(key->region == GPKEY_AUTO_EXTERIOR_MARGIN
	      && (key->margin == GPKEY_TMARGIN || key->margin == GPKEY_BMARGIN))) {
	switch (key->vpos) {
	    case JUST_TOP:
		fputs(" top", fp);
		break;
	    case JUST_BOT:
		fputs(" bottom", fp);
		break;
	    case JUST_CENTRE:
		fputs(" center", fp);
		break;
	}
    }
    fprintf(fp, " %s %s %sreverse %senhanced %s ",
		key->stack_dir == GPKEY_VERTICAL ? "vertical" : "horizontal",
		key->just == GPKEY_LEFT ? "Left" : "Right",
		key->reverse ? "" : "no",
		key->enhanced ? "" : "no",
		key->auto_titles == COLUMNHEAD_KEYTITLES ? "autotitles columnhead"
		: key->auto_titles == FILENAME_KEYTITLES ? "autotitles"
		: "noautotitles" );
    if (key->box.l_type > LT_NODRAW) {
	fputs("box", fp);
	save_linetype(fp, &(key->box), FALSE);
    } else
	fputs("nobox", fp);

    /* Put less common options on separate lines */
    fprintf(fp, "\nset key %sinvert samplen %g spacing %g width %g height %g ",
		key->invert ? "" : "no",
		key->swidth, key->vert_factor, key->width_fix, key->height_fix);
    fprintf(fp, "\nset key maxcolumns %d maxrows %d",key->maxcols,key->maxrows);
    fputc('\n', fp);
    fprintf(fp, "set key %sopaque\n", key->front ? "" : "no");

    if (!(key->visible))
	fputs("unset key\n", fp);

    fputs("unset label\n", fp);
    for (this_label = first_label; this_label != NULL;
	 this_label = this_label->next) {
	fprintf(fp, "set label %d \"%s\" at ",
		this_label->tag,
		conv_text(this_label->text));
	save_position(fp, &this_label->place, FALSE);

	switch (this_label->pos) {
	case LEFT:
	    fputs(" left", fp);
	    break;
	case CENTRE:
	    fputs(" centre", fp);
	    break;
	case RIGHT:
	    fputs(" right", fp);
	    break;
	}
	if (this_label->rotate)
	    fprintf(fp, " rotate by %d", this_label->rotate);
	else
	    fprintf(fp, " norotate");
	if (this_label->font != NULL)
	    fprintf(fp, " font \"%s\"", this_label->font);
	fprintf(fp, " %s", (this_label->layer==0) ? "back" : "front");
	if (this_label->noenhanced)
	    fprintf(fp, " noenhanced");
	save_textcolor(fp, &(this_label->textcolor));
	if (this_label->lp_properties.pointflag == 0)
	    fprintf(fp, " nopoint");
	else {
	    fprintf(fp, " point");
	    save_linetype(fp, &(this_label->lp_properties), TRUE);
	}
	save_position(fp, &this_label->offset, TRUE);
	fputc('\n', fp);
    }
    fputs("unset arrow\n", fp);
    for (this_arrow = first_arrow; this_arrow != NULL;
	 this_arrow = this_arrow->next) {
	fprintf(fp, "set arrow %d from ", this_arrow->tag);
	save_position(fp, &this_arrow->start, FALSE);
	fputs(this_arrow->relative ? " rto " : " to ", fp);
	save_position(fp, &this_arrow->end, FALSE);
	fprintf(fp, " %s %s %s",
		arrow_head_names[this_arrow->arrow_properties.head],
		(this_arrow->arrow_properties.layer==0) ? "back" : "front",
		( (this_arrow->arrow_properties.head_filled==2) ? "filled" :
		  ( (this_arrow->arrow_properties.head_filled==1) ? "empty" :
		    "nofilled" )) );
	save_linetype(fp, &(this_arrow->arrow_properties.lp_properties), FALSE);
	if (this_arrow->arrow_properties.head_length > 0) {
	    static char *msg[] = {"first", "second", "graph", "screen",
				  "character"};
	    fprintf(fp, " size %s %.3f,%.3f,%.3f",
		    msg[this_arrow->arrow_properties.head_lengthunit],
		    this_arrow->arrow_properties.head_length,
		    this_arrow->arrow_properties.head_angle,
		    this_arrow->arrow_properties.head_backangle);
	}
	fprintf(fp, "\n");
    }
    fprintf(fp, "set style increment %s\n", prefer_line_styles ? "userstyles" : "default");
    fputs("unset style line\n", fp);
    for (this_linestyle = first_linestyle; this_linestyle != NULL;
	 this_linestyle = this_linestyle->next) {
	fprintf(fp, "set style line %d ", this_linestyle->tag);
	save_linetype(fp, &(this_linestyle->lp_properties), TRUE);
	fprintf(fp, "\n");
    }
    fputs("unset style arrow\n", fp);
    for (this_arrowstyle = first_arrowstyle; this_arrowstyle != NULL;
	 this_arrowstyle = this_arrowstyle->next) {
	fprintf(fp, "set style arrow %d", this_arrowstyle->tag);
	fprintf(fp, " %s %s %s",
		arrow_head_names[this_arrowstyle->arrow_properties.head],
		(this_arrowstyle->arrow_properties.layer==0)?"back":"front",
		( (this_arrowstyle->arrow_properties.head_filled==2)?"filled":
		  ( (this_arrowstyle->arrow_properties.head_filled==1)?"empty":
		    "nofilled" )) );
	save_linetype(fp, &(this_arrowstyle->arrow_properties.lp_properties), FALSE);
	if (this_arrowstyle->arrow_properties.head_length > 0) {
	    static char *msg[] = {"first", "second", "graph", "screen",
				  "character"};
	    fprintf(fp, " size %s %.3f,%.3f,%.3f",
		    msg[this_arrowstyle->arrow_properties.head_lengthunit],
		    this_arrowstyle->arrow_properties.head_length,
		    this_arrowstyle->arrow_properties.head_angle,
		    this_arrowstyle->arrow_properties.head_backangle);
	}
	fprintf(fp, "\n");
    }

    fprintf(fp, "set style histogram ");
    switch (histogram_opts.type) {
	default:
	case HT_CLUSTERED:
	    fprintf(fp,"clustered gap %d ",histogram_opts.gap); break;
	case HT_ERRORBARS:
	    fprintf(fp,"errorbars gap %d lw %g",histogram_opts.gap,histogram_opts.bar_lw); break;
	case HT_STACKED_IN_LAYERS:
	    fprintf(fp,"rowstacked "); break;
	case HT_STACKED_IN_TOWERS:
	    fprintf(fp,"columnstacked "); break;
    }
    fprintf(fp,"title ");
    save_position(fp, &histogram_opts.title.offset, TRUE);
    fprintf(fp, "\n");

#ifdef EAM_OBJECTS
    save_object(fp, 0);
#endif

    fputs("unset logscale\n", fp);
#define SAVE_LOG(axis)							\
    if (axis_array[axis].log)						\
	fprintf(fp, "set logscale %s %g\n", axis_defaults[axis].name,	\
		axis_array[axis].base);
    SAVE_LOG(FIRST_X_AXIS );
    SAVE_LOG(FIRST_Y_AXIS );
    SAVE_LOG(SECOND_X_AXIS);
    SAVE_LOG(SECOND_Y_AXIS);
    SAVE_LOG(FIRST_Z_AXIS );
    SAVE_LOG(COLOR_AXIS );
    SAVE_LOG(POLAR_AXIS );
#undef SAVE_LOG

    save_offsets(fp, "set offsets");

    /* FIXME */
    fprintf(fp, "\
set pointsize %g\n\
set pointintervalbox %g\n\
set encoding %s\n\
%sset polar\n\
%sset parametric\n",
	    pointsize, pointintervalbox,
	    encoding_names[encoding],
	    (polar) ? "" : "un",
	    (parametric) ? "" : "un");

    if (numeric_locale)
	fprintf(fp, "set decimalsign locale \"%s\"\n", numeric_locale);
    if (decimalsign != NULL)
	fprintf(fp, "set decimalsign '%s'\n", decimalsign);
    if (!numeric_locale && !decimalsign)
        fprintf(fp, "unset decimalsign\n");

    fputs("set view ", fp);
    if (splot_map == TRUE)
	fputs("map", fp);
    else {
	fprintf(fp, "%g, %g, %g, %g",
	    surface_rot_x, surface_rot_z, surface_scale, surface_zscale);
    }
    if (aspect_ratio_3D)
	fprintf(fp, "\nset view  %s", aspect_ratio_3D == 2 ? "equal xy" :
			aspect_ratio_3D == 3 ? "equal xyz": "");

    fprintf(fp, "\n\
set samples %d, %d\n\
set isosamples %d, %d\n\
%sset surface\n\
%sset contour",
	    samples_1, samples_2,
	    iso_samples_1, iso_samples_2,
	    (draw_surface) ? "" : "un",
	    (draw_contour) ? "" : "un");

    switch (draw_contour) {
    case CONTOUR_NONE:
	fputc('\n', fp);
	break;
    case CONTOUR_BASE:
	fputs(" base\n", fp);
	break;
    case CONTOUR_SRF:
	fputs(" surface\n", fp);
	break;
    case CONTOUR_BOTH:
	fputs(" both\n", fp);
	break;
    }
    if (label_contours)
	fprintf(fp, "set clabel '%s'\n", contour_format);
    else
	fputs("unset clabel\n", fp);

#ifdef GP_MACROS
    if (expand_macros)
	fputs("set macros\n", fp);
#endif

    fputs("set mapping ", fp);
    switch (mapping3d) {
    case MAP3D_SPHERICAL:
	fputs("spherical\n", fp);
	break;
    case MAP3D_CYLINDRICAL:
	fputs("cylindrical\n", fp);
	break;
    case MAP3D_CARTESIAN:
    default:
	fputs("cartesian\n", fp);
	break;
    }

    if (missing_val != NULL)
	fprintf(fp, "set datafile missing '%s'\n", missing_val);
    if (df_separator != '\0')
	fprintf(fp, "set datafile separator \"%c\"\n",df_separator);
    else
	fprintf(fp, "set datafile separator whitespace\n");
    if (strcmp(df_commentschars, DEFAULT_COMMENTS_CHARS))
	fprintf(fp, "set datafile commentschars '%s'\n", df_commentschars);
    if (df_fortran_constants)
	fprintf(fp, "set datafile fortran\n");
    if (df_nofpe_trap)
	fprintf(fp, "set datafile nofpe_trap\n");

    save_hidden3doptions(fp);
    fprintf(fp, "set cntrparam order %d\n", contour_order);
    fputs("set cntrparam ", fp);
    switch (contour_kind) {
    case CONTOUR_KIND_LINEAR:
	fputs("linear\n", fp);
	break;
    case CONTOUR_KIND_CUBIC_SPL:
	fputs("cubicspline\n", fp);
	break;
    case CONTOUR_KIND_BSPLINE:
	fputs("bspline\n", fp);
	break;
    }
    fputs("set cntrparam levels ", fp);
    switch (contour_levels_kind) {
    case LEVELS_AUTO:
	fprintf(fp, "auto %d\n", contour_levels);
	break;
    case LEVELS_INCREMENTAL:
	fprintf(fp, "incremental %g,%g,%g\n",
		contour_levels_list[0], contour_levels_list[1],
		contour_levels_list[0] + contour_levels_list[1] * contour_levels);
	break;
    case LEVELS_DISCRETE:
	{
	    int i;
	    fprintf(fp, "discrete %g", contour_levels_list[0]);
	    for (i = 1; i < contour_levels; i++)
		fprintf(fp, ",%g ", contour_levels_list[i]);
	    fputc('\n', fp);
	}
    }
    fprintf(fp, "\
set cntrparam points %d\n\
set size ratio %g %g,%g\n\
set origin %g,%g\n",
	    contour_pts,
	    aspect_ratio, xsize, ysize,
	    xoffset, yoffset);

    fprintf(fp, "set style data ");
    save_data_func_style(fp,"data",data_style);
    fprintf(fp, "set style function ");
    save_data_func_style(fp,"function",func_style);

    save_zeroaxis(fp, FIRST_X_AXIS);
    save_zeroaxis(fp, FIRST_Y_AXIS);
    save_zeroaxis(fp, FIRST_Z_AXIS);
    save_zeroaxis(fp, SECOND_X_AXIS);
    save_zeroaxis(fp, SECOND_Y_AXIS);

    if (xyplane.absolute)
	fprintf(fp, "set xyplane at %g\n", xyplane.z);
    else
	fprintf(fp, "set ticslevel %g\n", xyplane.z);

#define SAVE_MINI(axis)							\
    switch(axis_array[axis].minitics & TICS_MASK) {			\
    case 0:								\
	fprintf(fp, "set nom%stics\n", axis_defaults[axis].name);	\
	break;								\
    case MINI_AUTO:							\
	fprintf(fp, "set m%stics\n", axis_defaults[axis].name);		\
	break;								\
    case MINI_DEFAULT:							\
	fprintf(fp, "set m%stics default\n", axis_defaults[axis].name);	\
	break;								\
    case MINI_USER:							\
	fprintf(fp, "set m%stics %f\n", axis_defaults[axis].name,	\
		axis_array[axis].mtic_freq);				\
	break;								\
    }

    SAVE_MINI(FIRST_X_AXIS);
    SAVE_MINI(FIRST_Y_AXIS);
    SAVE_MINI(FIRST_Z_AXIS);	/* HBB 20000506: noticed mztics were not saved! */
    SAVE_MINI(SECOND_X_AXIS);
    SAVE_MINI(SECOND_Y_AXIS);
    SAVE_MINI(COLOR_AXIS);
#undef SAVE_MINI

    save_tics(fp, FIRST_X_AXIS);
    save_tics(fp, FIRST_Y_AXIS);
    save_tics(fp, FIRST_Z_AXIS);
    save_tics(fp, SECOND_X_AXIS);
    save_tics(fp, SECOND_Y_AXIS);
    save_tics(fp, COLOR_AXIS);
    save_tics(fp, POLAR_AXIS);

#define SAVE_AXISLABEL_OR_TITLE(name,suffix,lab)			 \
    {									 \
	fprintf(fp, "set %s%s \"%s\" ",					 \
		name, suffix, lab.text ? conv_text(lab.text) : "");	 \
	fprintf(fp, "\nset %s%s ", name, suffix);			 \
        save_position(fp, &(lab.offset), TRUE);				 \
	fprintf(fp, " font \"%s\"", lab.font ? conv_text(lab.font) : "");\
	save_textcolor(fp, &(lab.textcolor));				 \
	if (lab.tag == ROTATE_IN_3D_LABEL_TAG)				 \
	    fprintf(fp, " rotate parallel");				 \
	if (lab.rotate)							 \
	    fprintf(fp, " rotate by %d", lab.rotate);			 \
	else								 \
	    fprintf(fp, " norotate");					 \
	fprintf(fp, "%s\n", (lab.noenhanced) ? " noenhanced" : "");	 \
    }

    SAVE_AXISLABEL_OR_TITLE("", "title", title);

    /* FIXME */
    fprintf(fp, "set timestamp %s \n", timelabel_bottom ? "bottom" : "top");
    SAVE_AXISLABEL_OR_TITLE("", "timestamp", timelabel);

    save_range(fp, POLAR_AXIS);
    save_range(fp, T_AXIS);
    save_range(fp, U_AXIS);
    save_range(fp, V_AXIS);

#define SAVE_AXISLABEL(axis)					\
    SAVE_AXISLABEL_OR_TITLE(axis_defaults[axis].name,"label",	\
			    axis_array[axis].label)

    SAVE_AXISLABEL(FIRST_X_AXIS);
    SAVE_AXISLABEL(SECOND_X_AXIS);
    save_range(fp, FIRST_X_AXIS);
    save_range(fp, SECOND_X_AXIS);

    SAVE_AXISLABEL(FIRST_Y_AXIS);
    SAVE_AXISLABEL(SECOND_Y_AXIS);
    if (splot_map == FALSE) {
	save_range(fp, FIRST_Y_AXIS);
	save_range(fp, SECOND_Y_AXIS);
    } else { /* 'set view map' uses flipped y-axes */
	splot_map_deactivate();
	save_range(fp, FIRST_Y_AXIS);
	save_range(fp, SECOND_Y_AXIS);
	splot_map_activate();
    }

    SAVE_AXISLABEL(FIRST_Z_AXIS);
    save_range(fp, FIRST_Z_AXIS);

    SAVE_AXISLABEL(COLOR_AXIS);
    save_range(fp, COLOR_AXIS);
#undef SAVE_AXISLABEL
#undef SAVE_AXISLABEL_OR_TITLE

    fprintf(fp, "set zero %g\n", zero);

    fprintf(fp, "set lmargin %s %g\n",
	    lmargin.scalex == screen ? "at screen" : "", lmargin.x);
    fprintf(fp, "set bmargin %s %g\n",
	    bmargin.scalex == screen ? "at screen" : "", bmargin.x);
    fprintf(fp, "set rmargin %s %g\n",
	    rmargin.scalex == screen ? "at screen" : "", rmargin.x);
    fprintf(fp, "set tmargin %s %g\n",
	    tmargin.scalex == screen ? "at screen" : "", tmargin.x);

    fprintf(fp, "set locale \"%s\"\n", get_time_locale());

    fputs("set pm3d ", fp);
    fputs((PM3D_IMPLICIT == pm3d.implicit ? "implicit" : "explicit"), fp);
    fprintf(fp, " at %s\n", pm3d.where);
    fputs("set pm3d ", fp);
    switch (pm3d.direction) {
    case PM3D_SCANS_AUTOMATIC: fputs("scansautomatic\n", fp); break;
    case PM3D_SCANS_FORWARD: fputs("scansforward\n", fp); break;
    case PM3D_SCANS_BACKWARD: fputs("scansbackward\n", fp); break;
    case PM3D_DEPTH: fputs("depthorder\n", fp); break;
    }
    fprintf(fp, "set pm3d interpolate %d,%d", pm3d.interp_i, pm3d.interp_j);
    fputs(" flush ", fp);
    switch (pm3d.flush) {
    case PM3D_FLUSH_CENTER: fputs("center", fp); break;
    case PM3D_FLUSH_BEGIN: fputs("begin", fp); break;
    case PM3D_FLUSH_END: fputs("end", fp); break;
    }
    fputs((pm3d.ftriangles ? " " : " no"), fp);
    fputs("ftriangles", fp);
    if (pm3d.hidden3d_tag > 0) fprintf(fp," hidden3d %d", pm3d.hidden3d_tag);
	else fputs(pm3d.hidden3d_tag ? " hidden3d" : " nohidden3d", fp);
    fputs(" corners2color ", fp);
    switch (pm3d.which_corner_color) {
	case PM3D_WHICHCORNER_MEAN:    fputs("mean", fp); break;
	case PM3D_WHICHCORNER_GEOMEAN: fputs("geomean", fp); break;
	case PM3D_WHICHCORNER_MEDIAN:  fputs("median", fp); break;
	case PM3D_WHICHCORNER_MIN:     fputs("min", fp); break;
	case PM3D_WHICHCORNER_MAX:     fputs("max", fp); break;
	default: /* PM3D_WHICHCORNER_C1 ... _C4 */
	     fprintf(fp, "c%i", pm3d.which_corner_color - PM3D_WHICHCORNER_C1 + 1);
    }
    fputs("\n", fp);

    /*
     *  Save palette information
     */

    fprintf( fp, "set palette %s %s maxcolors %d ",
	     sm_palette.positive==SMPAL_POSITIVE ? "positive" : "negative",
	     sm_palette.ps_allcF ? "ps_allcF" : "nops_allcF",
	sm_palette.use_maxcolors);
    fprintf( fp, "gamma %g ", sm_palette.gamma );
    if (sm_palette.colorMode == SMPAL_COLOR_MODE_GRAY) {
      fputs( "gray\n", fp );
    }
    else {
      fputs( "color model ", fp );
      switch( sm_palette.cmodel ) {
        case C_MODEL_RGB: fputs( "RGB ", fp ); break;
        case C_MODEL_HSV: fputs( "HSV ", fp ); break;
        case C_MODEL_CMY: fputs( "CMY ", fp ); break;
        case C_MODEL_YIQ: fputs( "YIQ ", fp ); break;
        case C_MODEL_XYZ: fputs( "XYZ ", fp ); break;
        default:
	  fprintf( stderr, "%s:%d ooops: Unknown color model '%c'.\n",
		   __FILE__, __LINE__, (char)(sm_palette.cmodel) );
      }
      fputs( "\nset palette ", fp );
      switch( sm_palette.colorMode ) {
      case SMPAL_COLOR_MODE_RGB:
	fprintf( fp, "rgbformulae %d, %d, %d\n", sm_palette.formulaR,
		 sm_palette.formulaG, sm_palette.formulaB );
	break;
      case SMPAL_COLOR_MODE_GRADIENT: {
	int i=0;
	fprintf( fp, "defined (" );
	for( i=0; i<sm_palette.gradient_num; ++i ) {
	  fprintf( fp, " %.4g %.4g %.4g %.4g", sm_palette.gradient[i].pos,
		   sm_palette.gradient[i].col.r, sm_palette.gradient[i].col.g,
		   sm_palette.gradient[i].col.b );
	  if (i<sm_palette.gradient_num-1)  {
	      fputs( ",", fp);
	      if (i==2 || i%4==2)  fputs( "\\\n    ", fp );
	  }
	}
	fputs( " )\n", fp );
	break;
      }
      case SMPAL_COLOR_MODE_FUNCTIONS:
	fprintf( fp, "functions %s, %s, %s\n", sm_palette.Afunc.definition,
		 sm_palette.Bfunc.definition, sm_palette.Cfunc.definition );
	break;
      case SMPAL_COLOR_MODE_CUBEHELIX:
	fprintf( fp, "cubehelix start %.2g cycles %.2g saturation %.2g\n",
		sm_palette.cubehelix_start, sm_palette.cubehelix_cycles,
		sm_palette.cubehelix_saturation);
	break;
      default:
	fprintf( stderr, "%s:%d ooops: Unknown color mode '%c'.\n",
		 __FILE__, __LINE__, (char)(sm_palette.colorMode) );
      }
    }

    /*
     *  Save colorbox info
     */
    if (color_box.where != SMCOLOR_BOX_NO)
	fprintf(fp,"set colorbox %s\n", color_box.where==SMCOLOR_BOX_DEFAULT ? "default" : "user");
    fprintf(fp, "set colorbox %sal origin ", color_box.rotation ==  'v' ? "vertic" : "horizont");
    save_position(fp, &color_box.origin, FALSE);
    fputs(" size ", fp);
    save_position(fp, &color_box.size, FALSE);
    fprintf(fp, " %s ", color_box.layer ==  LAYER_FRONT ? "front" : "back");
    if (color_box.border == 0) fputs("noborder", fp);
	else if (color_box.border_lt_tag < 0) fputs("bdefault", fp);
		 else fprintf(fp, "border %d", color_box.border_lt_tag);
    if (color_box.where == SMCOLOR_BOX_NO) fputs("\nunset colorbox\n", fp);
	else fputs("\n", fp);

    fprintf(fp, "set style boxplot %s %s %5.2f %soutliers pt %d separation %g labels %s %ssorted\n",
		boxplot_opts.plotstyle == FINANCEBARS ? "financebars" : "candles",
		boxplot_opts.limit_type == 1 ? "fraction" : "range",
		boxplot_opts.limit_value, 
		boxplot_opts.outliers ? "" : "no",
		boxplot_opts.pointtype+1,
		boxplot_opts.separation,
		(boxplot_opts.labels == BOXPLOT_FACTOR_LABELS_X)  ? "x"  :
		(boxplot_opts.labels == BOXPLOT_FACTOR_LABELS_X2) ? "x2" :
		(boxplot_opts.labels == BOXPLOT_FACTOR_LABELS_AUTO) ? "auto" :"off",
		boxplot_opts.sort_factors ? "" : "un");

    fputs("set loadpath ", fp);
    {
	char *s;
	while ((s = save_loadpath()) != NULL)
	    fprintf(fp, "\"%s\" ", s);
	fputc('\n', fp);
    }

    fputs("set fontpath ", fp);
    {
	char *s;
	while ((s = save_fontpath()) != NULL)
	    fprintf(fp, "\"%s\" ", s);
	fputc('\n', fp);
    }

    if (PS_psdir)
	fprintf(fp, "set psdir \"%s\"\n", PS_psdir);
    else
	fprintf(fp, "set psdir\n");

    fprintf(fp, "set fit");
    if (fitlogfile)
	fprintf(fp, " logfile \'%s\'", fitlogfile);
    fprintf(fp, " %serrorvariables",
	fit_errorvariables ? "" : "no");
    fprintf(fp, " %sprescale", fit_prescale ? "" : "no");
    fputc('\n', fp);

}
Esempio n. 29
0
int save_char_objs(Character *ch)
{
    char buf[400];
    sql_stmt *stmt;
    int len;
    Object *obj;

    for (obj = ch->carrying; obj; obj = obj->next_content)
    {
        len =
            sprintf(buf,
                    "select objectId from char_objects where carriedById=%"
                    PRId64 " and objectId=%" PRId64, ch->id, obj->id);

        if (sql_query(buf, len, &stmt) != SQL_OK)
        {
            log_data("could not prepare statement");
            return 0;
        }
        bool update = sql_step(stmt) != SQL_DONE;

        if (sql_finalize(stmt) != SQL_OK)
        {
            log_data("unable to finalize sql statement");
            return 0;
        }

        if (!update)
        {
            obj->id = 0;
        }

        if (!save_object(obj)) {
            return 0;
        }
    }
    // try and cleanup old objects
    len =
        sprintf(buf,
                "select * from char_objects where carriedById=%" PRId64,
                ch->id);

    if (sql_query(buf, len, &stmt) != SQL_OK)
    {
        log_data("could not prepare statement");
        return 0;
    }

    while (sql_step(stmt) != SQL_DONE)
    {
        obj = ch->carrying;
        identifier_t id = sql_column_int64(stmt, 0);

        while (obj)
        {

            if (obj->id == id) {
                break;
            }
            obj = obj->next;
        }

        if (!obj)
        {
            sprintf(buf,
                    "delete from object where carriedById=%" PRId64
                    " and objectId=%" PRId64, ch->id, id);

            if (sql_exec(buf) != SQL_OK)
            {
                log_data("could not delete character object %"
                         PRId64, id);
                return 0;
            }
        }
    }

    if (sql_finalize(stmt) != SQL_OK)
    {
        log_data("could not finalize statement");
        return 0;
    }
    return 1;
}
Esempio n. 30
0
int save_me() {
  save_object("/wiz/b/bart/save/notepad");
  return 1;
}