#include <tscope.h>
#define NTASK 2
#define NRESPMAP 2
#define NWORDS 2
#define NCOLORS 2
#define NPOS 2
#define NDUR 2
#define CELLS (NWORDS*NCOLORS*NPOS*NDUR)
#define REPS 3
#define BLOCKLEN (CELLS*REPS)
#define NBLOCK 4
#define NPRACT CELLS
#define NWARMUP CELLS
#define NEXP (BLOCKLEN*NBLOCK)
#define NTRIALS (NPRACT+NWARMUP+NEXP)
struct {
int session;
int subj;
enum { M, V } sex;
enum { COLOR, MEANING } task;
enum { RL, RR } respmap;
enum { PRACT, WARMUP, EXP } phase;
int block;
enum color { CRED, CGREEN } mword;
enum color cword;
enum pos { NORESP, LEFT, RIGHT } stimpos;
enum { SHORTD, LONGD } stimdur;
enum cong { INCONG, CONG } semcong;
enum cong spcong;
enum pos xr;
enum pos r;
enum { E, C } corr;
int rt, re;
} data[NTRIALS];
void initdata()
{
int i;
for (i = 0; i < NTRIALS; i++) {
data[i].session = -1;
data[i].subj = -1;
data[i].sex = -1;
data[i].task = -1;
data[i].respmap = -1;
data[i].phase = -1;
data[i].block = -1;
data[i].mword = -1;
data[i].cword = -1;
data[i].stimpos = -1;
data[i].stimdur = -1;
data[i].semcong = -1;
data[i].spcong = -1;
data[i].xr = -1;
data[i].r = -1;
data[i].corr = -1;
data[i].rt = -1;
data[i].re = -1;
}
}
void writedata()
{
char fname[40];
sprintf(fname, "ss%03d.dat", data[0].session);
FILE *fp;
fp = fopen(fname, "a+");
if (fp == NULL) {
printf("error opening output file %s.\n", fname);
exit(EXIT_FAILURE);
}
int i;
for (i = 0; i < NTRIALS; i++) {
fprintf(fp, "%03d ", data[i].session);
fprintf(fp, "%d ", data[i].subj);
fprintf(fp, "%d ", data[i].sex);
fprintf(fp, "%d ", data[i].task);
fprintf(fp, "%d \t", data[i].respmap);
fprintf(fp, "%03d ", i);
fprintf(fp, "%d ", data[i].phase);
fprintf(fp, "%d \t", data[i].block);
fprintf(fp, "%d ", data[i].mword);
fprintf(fp, "%d ", data[i].cword);
fprintf(fp, "%d ", data[i].stimpos);
fprintf(fp, "%d ", data[i].stimdur);
fprintf(fp, "%d ", data[i].semcong);
fprintf(fp, "%d ", data[i].spcong);
fprintf(fp, "%d \t", data[i].xr);
fprintf(fp, "%d ", data[i].r);
fprintf(fp, "%d ", data[i].corr);
fprintf(fp, "%d ", data[i].rt);
fprintf(fp, "%d ", data[i].re);
fprintf(fp, "\n");
}
fclose(fp);
}
#define RNDTEST 0
void randomize(int subj, int sex)
{
initdata();
int tmplist[NTRIALS];
if (RNDTEST) {
int i;
for (i = 0; i < NTRIALS; i++)
tmplist[i] = i % CELLS;
} else {
ts_rlist(CELLS, 1, &tmplist[0]);
ts_rlist(CELLS, 1, &tmplist[NPRACT]);
ts_rlist(CELLS, REPS, &tmplist[NPRACT + NWARMUP]);
ts_rlist(CELLS, REPS, &tmplist[NPRACT + NWARMUP + BLOCKLEN]);
ts_rlist(CELLS, REPS, &tmplist[NPRACT + NWARMUP + BLOCKLEN * 2]);
ts_rlist(CELLS, REPS, &tmplist[NPRACT + NWARMUP + BLOCKLEN * 3]);
}
int i;
for (i = 0; i < NTRIALS; i++) {
data[i].session = sex * 100 + subj;
data[i].subj = subj;
data[i].sex = sex;
data[i].task = subj % NTASK;
data[i].respmap = (subj / NTASK) % NRESPMAP;
if (i < NPRACT)
data[i].phase = PRACT;
else if (i < NPRACT + NWARMUP)
data[i].phase = WARMUP;
else
data[i].phase = EXP;
if (data[i].phase != EXP)
data[i].block = 0;
else
data[i].block = ((i - NPRACT - NWARMUP) / BLOCKLEN) + 1;
data[i].mword = tmplist[i] % NWORDS;
data[i].cword = (tmplist[i] / NWORDS) % NCOLORS;
data[i].stimpos = (tmplist[i] / NWORDS / NCOLORS) % NPOS + 1;
data[i].stimdur = (tmplist[i] / NWORDS / NCOLORS / NPOS) % NDUR;
if (data[i].task == COLOR) {
if (data[i].respmap == RL) {
if (data[i].cword == CRED)
data[i].xr = LEFT;
else
data[i].xr = RIGHT;
} else {
if (data[i].cword == CRED)
data[i].xr = RIGHT;
else
data[i].xr = LEFT;
}
} else {
if (data[i].respmap == RL) {
if (data[i].mword == CRED)
data[i].xr = LEFT;
else
data[i].xr = RIGHT;
} else {
if (data[i].mword == CRED)
data[i].xr = RIGHT;
else
data[i].xr = LEFT;
}
}
if (data[i].mword == data[i].cword)
data[i].semcong = CONG;
else
data[i].semcong = INCONG;
if (data[i].stimpos == data[i].xr)
data[i].spcong = CONG;
else
data[i].spcong = INCONG;
}
}
#ifndef SS_TRIAL_C
int main()
{
randomize(0, 0);
writedata();
return 0;
}
END_OF_MAIN();
#endif