/*
    File:               vpl_trial.c
    Author:             michael stevens
    Experiment:         Viewing position effect (letters in string)
                        Stevens & Grainger 2003, Xpt. 1

        Time course trial

            Fixation:   1000ms          2 vertical bars above and below target
            Blank:      0ms             (fixation bars disappear at onset stimulus)
            Stimulus:   ?               individually adjusted: 50-100ms
            Mask:                       until response
            Maxrt:                      no limit
            Iti:        500ms
*/


// include functions from vpl_data.c
#define VPL_TRIAL_C
#include "vpl_data.c"

// timing intervals
#define FIXTM   mtt(1000)
#define BLTM    mtt(0)
#define MAXTM   mtt(0)
#define ITI     mtt(500)

// temporary timing variables
struct {
    __int64 junk;
    __int64 t1, e1;
    __int64 t2, e2;
} rttmp;

// trial definition
void trial(int i)
{
    // determine font size
    int w = ts_textheight();
    int h = ts_textlength("A");

    // prepare strings
    char x[20];
    char m[20];
    int mpos;
    if (data[i].slen == 5) {
        sprintf(x, "XXXXX");
        if (data[i].mask == SMALL) {
            sprintf(m, "#######");
            mpos = data[i].sloc;
        } else {
            sprintf(m, "###########");
            mpos = 0;
        }
    } else {
        sprintf(x, "XXXXXXX");
        if (data[i].mask == SMALL) {
            sprintf(m, "#########");
            mpos = data[i].sloc;
        } else {
            sprintf(m, "###############");
            mpos = 0;
        }
    }

    // fixation
    ts_vsync(&rttmp.junk, &rttmp.junk);
    ts_printf_centre(0, h, "|");
    ts_printf_centre(0, -h, "|");
    ts_wait(FIXTM);

    // letter
    ts_vsync(&rttmp.t1, &rttmp.e1);
    ts_clrscr();
    ts_printf_centre(data[i].sloc * w, 0, x);
    ts_printf_centre(data[i].lloc * w, 0, "%c", data[i].target);

    // mask
    ts_vsyncs(&rttmp.junk, &rttmp.junk, data[i].stime);
    ts_clrscr();
    ts_printf_centre(mpos * w, 0, m);

    // respons
    data[i].r = ts_resp(&rttmp.t2, &rttmp.e2, MAXTM);
    ts_clrscr();

    // compute rt
    data[i].rt = ttm(rttmp.t2 - rttmp.t1);
    data[i].re = ttm(rttmp.e2 + rttmp.e1);

    // compute feedback
    if (data[i].r == data[i].targetno)
        data[i].corr = C;
    else
        data[i].corr = E;

    // escape?
    if (data[i].r == 17) {
        writedata();
        ts_fatal("aborted by user");
    }
    // intertrial interval
    ts_wait(ITI);
}


// test-functie that runs the trials
#ifndef VPL_EXP_C
int main()
{
    // black text background
    ts_textmode(BLACK);

    // activate response keys
    ts_defkey(KEY_B);
    ts_defkey(KEY_C);
    ts_defkey(KEY_D);
    ts_defkey(KEY_F);
    ts_defkey(KEY_H);
    ts_defkey(KEY_G);
    ts_defkey(KEY_J);
    ts_defkey(KEY_K);
    ts_defkey(KEY_L);
    ts_defkey(KEY_M);
    ts_defkey(KEY_N);
    ts_defkey(KEY_P);
    ts_defkey(KEY_R);
    ts_defkey(KEY_S);
    ts_defkey(KEY_T);
    ts_defkey(KEY_SPACE);
    ts_defkey(KEY_ESC);


    // prepare data
    randomize(0, 0);

    // determine number of trials
    int ntrials;
    if (data[0].slen == FIVE)
        ntrials = NTRIALSPRACT + NTRIALS5;
    else
        ntrials = NTRIALSPRACT + NTRIALS7;

    // run trials
    int i;
    for (i = 0; i < NTRIALSPRACT; i++) {
        if (i < NTRIALSPRACT && i != 0 && i % CELLSPRACT == 0)
            if (adjust_stime(i) == STOP)
                break;
        trial(i);
    }
    for (i = NTRIALSPRACT; i < ntrials; i++)
        trial(i);

    // write data
    writedata();
    return 0;
}

END_OF_MAIN();
#endif                          // VPL_EXP_C


top
Persoonlijke pagina Universiteit GentTscope
Allegro | Cygwin | Gcc
© See license.html for copyright information