|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T r
Length: 6730 (0x1a4a)
Types: TextFile
Names: »record.c«
└─⟦276d19d6e⟧ Bits:30007243 EUUGD5_I: X11R5
└─⟦af7d3f39a⟧ »./mit-2/mit-2.00«
└─⟦0abaffd9e⟧
└─⟦this⟧ »mit/demos/xgc/record.c«
/*
** xgc
**
** record.c
*/
#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <X11/Xaw/Label.h>
#include <X11/Xaw/Command.h>
#include <X11/Xaw/Form.h>
#include <X11/Shell.h>
#include <X11/Xaw/AsciiText.h>
#include <stdio.h>
#include "xgc.h"
static void start_recording();
static void stop_recording();
static void print_out_gc_values();
static void chose_playback_filename();
static void cancel_playback();
extern void get_filename();
extern XgcStuff TestStuff;
extern XgcStuff FunctionStuff;
extern XgcStuff LinestyleStuff;
extern XgcStuff CapstyleStuff;
extern XgcStuff JoinstyleStuff;
extern XgcStuff FillstyleStuff;
extern XgcStuff FillruleStuff;
extern XgcStuff ArcmodeStuff;
extern XStuff X;
extern Boolean recording;
extern Widget filename_text_widget, recordbutton;
static void cancel_record();
static void done_choosing_filename();
FILE *recordfile; /* the file we're recording to */
FILE *playbackfile; /* the file we're playing back from */
extern FILE *yyin; /* for yyparse */
/* toggle_recordbutton(w,closure,call_data)
** ----------------------------------------
** This function is called when the user presses the "Record"
** command button. If we're not recording, we start; if we are,
** we stop. Also change the label to reflect the change in the
** function of the button.
*/
/*ARGSUSED*/
void
toggle_recordbutton(w,closure,call_data)
Widget w;
caddr_t closure;
caddr_t call_data;
{
/* ArgList for changing the label */
static Arg recordargs[] = {
{XtNlabel, (XtArgVal) NULL}
};
char tmp[20]; /* new label */
if (!recording) {
start_recording();
}
else {
recording = FALSE;
stop_recording();
sprintf(tmp,"Record");
recordargs[0].value = (XtArgVal) tmp;
}
XtSetValues(recordbutton,recordargs,XtNumber(recordargs));
}
/* start_recording()
** -----------------
** Get the name of the file the user wants to record into, and
** start recording into it if he doesn't cancel.
*/
static void
start_recording()
{
get_filename(done_choosing_filename,cancel_record);
}
/* stop_recording()
** ----------------
** Close the output file.
*/
static void
stop_recording()
{
fclose(recordfile);
}
/* cancel_record()
** ---------------
** What to do if the if the user canceled recording, i.e. nothing.
*/
static void
cancel_record()
{
}
/* done_choosing_filename()
** ------------------------
** What to do after the user's chosen a file. Change the label on the
** command button, open the file, and dump the current contents of the
** GC into it.
*/
static void
done_choosing_filename()
{
static Arg recordargs[] = {
{XtNlabel, (XtArgVal) NULL},
{XtNresize, (XtArgVal) True}
};
Arg args[1];
char tmp[20], *filename;
XtSetArg(args[0], XtNstring, &filename);
XtGetValues(filename_text_widget, args, (Cardinal) 1);
if (recordfile = fopen(filename,"w")) {
recording = TRUE;
sprintf(tmp,"End Record");
recordargs[0].value = (XtArgVal) tmp;
XtSetValues(recordbutton,recordargs,XtNumber(recordargs));
print_out_gc_values();
}
}
/* print_if_recording(str)
** -----------------------
** If we're recording to a file, put str in it.
*/
void
print_if_recording(str)
char *str;
{
if (recording)
fprintf(recordfile,"%s",str);
}
/* close_file_if_recording()
** -------------------------
** If we're recording, stop.
*/
void
close_file_if_recording()
{
if (recording)
fclose(recordfile);
}
/* print_out_gc_values()
** ---------------------
** Dump the contents of the GC to the file, so that when the file gets
** played back, it will be correctly initialized.
*/
static void
print_out_gc_values()
{
int i;
for (i=0;i<NUM_TESTS;++i) {
if ((TestStuff.data)[i].code == X.test) {
fprintf(recordfile,"%s %s\n",
TestStuff.choice.text,(TestStuff.data)[i].text);
break;
}
}
for (i=0;i<NUM_FUNCTIONS;++i) {
if ((FunctionStuff.data)[i].code == X.gcv.function) {
fprintf(recordfile,"%s %s\n",
FunctionStuff.choice.text,(FunctionStuff.data)[i].text);
break;
}
}
for (i=0;i<NUM_LINESTYLES;++i) {
if ((LinestyleStuff.data)[i].code == X.gcv.line_style) {
fprintf(recordfile,"%s %s\n",
LinestyleStuff.choice.text,(LinestyleStuff.data)[i].text);
break;
}
}
for (i=0;i<NUM_CAPSTYLES;++i) {
if ((CapstyleStuff.data)[i].code == X.gcv.cap_style) {
fprintf(recordfile,"%s %s\n",
CapstyleStuff.choice.text,(CapstyleStuff.data)[i].text);
break;
}
}
for (i=0;i<NUM_JOINSTYLES;++i) {
if ((JoinstyleStuff.data)[i].code == X.gcv.join_style) {
fprintf(recordfile,"%s %s\n",
JoinstyleStuff.choice.text,(JoinstyleStuff.data)[i].text);
break;
}
}
for (i=0;i<NUM_FILLSTYLES;++i) {
if ((FillstyleStuff.data)[i].code == X.gcv.fill_style) {
fprintf(recordfile,"%s %s\n",
FillstyleStuff.choice.text,(FillstyleStuff.data)[i].text);
break;
}
}
for (i=0;i<NUM_FILLRULES;++i) {
if ((FillruleStuff.data)[i].code == X.gcv.fill_rule) {
fprintf(recordfile,"%s %s\n",
FillruleStuff.choice.text,(FillruleStuff.data)[i].text);
break;
}
}
for (i=0;i<NUM_ARCMODES;++i) {
if ((ArcmodeStuff.data)[i].code == X.gcv.arc_mode) {
fprintf(recordfile,"%s %s\n",
ArcmodeStuff.choice.text,(ArcmodeStuff.data)[i].text);
break;
}
}
fprintf(recordfile,"linewidth %d\n",X.gcv.line_width);
fprintf(recordfile,"foreground %d\n",X.gcv.foreground);
fprintf(recordfile,"background %d\n",X.gcv.background);
fprintf(recordfile,"planemask %d\n",X.gcv.plane_mask);
fprintf(recordfile,"dashlist %d\n",X.gcv.dashes);
fprintf(recordfile,"font %s\n",X.fontname);
}
/********************************************/
/* start_playback()
** ----------------
** This gets called if the user wants to playback from a file.
** Get the file name and do the appropriate thing.
*/
void
start_playback()
{
get_filename(chose_playback_filename,cancel_playback);
}
/* cancel_playback()
** -----------------
** What to do if the user canceled the playback request.
*/
static void
cancel_playback()
{
}
/* chose_playback_filename()
** -------------------------
** What to do once the user's selected a filename to playback.
** Play it back.
*/
static void
chose_playback_filename()
{
Arg args[1];
char *filename;
XtSetArg(args[0], XtNstring, &filename);
XtGetValues(filename_text_widget, args, (Cardinal) 1);
if (playbackfile = fopen(filename,"r")) {
yyin = playbackfile;
yyparse();
}
}
/* read_from_keyboard()
** --------------------
** Do a playback from the keyboard.
*/
void
read_from_keyboard()
{
yyin = stdin;
yyparse();
}