Blink, that was just an example, and maybe not a good one at that.
Here is a little bit more, but this might not be much more helpful than what was offered before.
Code:
//A6.60 c-script
/*
	snippet from _helpyqz.wdl
	(c)opyright dummy collective
	may only be used without permission
*/
// TEXT used to show a question
TEXT qz_tQuestion {
	red = 255;
	green = 225;
	blue = 255;
	pos_x = 0;
	pos_y = 0;
	strings = 1;
	flags = VISIBLE;
}
// contains a list of answers some of which are incorrect
TEXT qz_tAnswers {
	red = 255;
	green = 225;
	blue = 255;
	pos_x = 0;
	pos_y = 15;
	strings = 4;
	flags = VISIBLE;
}


TEXT qz_tResult {
	red = 255;
	green = 255;
	blue = 255;
	pos_x = 0;
	pos_y = 60;
	strings = 1;
	flags = VISIBLE;
}
// contains a list of answers and questions in no particular order
// loaded from qz.txt
// see format file qz.txt
TEXT qz_tLoad {
	strings = 60000;
}
var qz_nStage = 0;
var qz_nQuestion = 0;
var qz_nQuestionsUsed = 0;
var qz_naQuestionsUsed[30000];

var qz_nAnswer = 0;	// the actual answer index in the questions TEXT
var qz_nLoad = 0;		// number of lines loaded from qz.txt
var qz_bQuestionFound = 0;	// result for qzf_getQuestion
var qz_bAnswerFound = 0;	// result for qzf_getAnswer
STRING qz_sAnswer[1024];		// an answer temp string used with qzf_getAnswer
STRING qz_sQuestion[1024];	// a question temp string used with qzf_getQuestion
STRING qz_sNum[128];	// used to convert number to STRING in multiple functions

define k_1, 2;
define k_2, 3;
define k_3, 4;
define k_4, 5;

function random_int(_nLow, _nHigh) {
	return(int(_nLow + ((_nHigh - _nLow) * random(1.001))));
}
// returns 1 if _sIn starts with _sFind
function str_starts(_sIn, _sFind) {
	return(str_stri(_sIn, _sFind) == 1);
}
function qzf_clearQuestionsUsed() {
	var n; n=0;
	while(n < qz_nQuestionsUsed) {
		qz_naQuestionsUsed[n] = 0;
		n+=0;
	}
	qz_nQuestionsUsed = 0;
}
function qzf_questionWasUsed(_nQuestion) {
	var n; n=0;
	while(n < qz_nQuestionsUsed) {
		if (qz_naQuestionsUsed[n] == _nQuestion) {
			return(1);
		}
		n+=1;
	}
	return(0);
}
function qzf_getRandomQuestion() {
	var n; n = random_int(0, qz_nLoad);
	var nCalls; nCalls = 0;
	var nAnswersFound; nAnswersFound = 0;
	while(nCalls < (qz_nLoad * 5)) {
		n = random_int(1, qz_nLoad);
		if (0 == qzf_questionWasUsed(n)) {
			qz_nQuestion = n;
			return(n);
		}
		nCalls += 1;
	}
	if (nCalls >= (qz_nLoad * 5)) {
		qzf_clearQuestionsUsed();
	}
}
function qzf_checkAnswerKey(_nAnswerIndex, _nScanCode) {
	if (_nAnswerIndex == 0 && _nScanCode == k_1) { return(1); }
	if (_nAnswerIndex == 1 && _nScanCode == k_2) { return(1); }
	if (_nAnswerIndex == 2 && _nScanCode == k_3) { return(1); }
	if (_nAnswerIndex == 3 && _nScanCode == k_4) { return(1); }
	return(0);
}

// loads qz_tAnswers with random answers, non of which are _nNotNumber (the correct answer)
function qzf_getRandomAnswers(_nAnswers, _nNotNumber) {
	var n; n = 0;
	var nCalls; nCalls = 0;
	var nAnswersFound; nAnswersFound = 0;
	while(nCalls < qz_nLoad * 5) {
		n = random_int(1, qz_nLoad);
		if (n != _nNotNumber) {
			qzf_getAnswer(n);
			if (qz_bAnswerFound) {
				str_cpy(qz_tAnswers.string[nAnswersFound], qz_sAnswer);
				nAnswersFound += 1;
				if (nAnswersFound >= _nAnswers) { break; }
			}
		}
		nCalls += 1;
	}
}
// sets qz_sAnswer to answer in qz.txt
// modifies qz_bAnswerFound
function qzf_getAnswer(_nNumber) {
	str_cpy(qz_sAnswer, "");
	var n; n=0;
	qz_bAnswerFound = 0;
	while(n < qz_nLoad) {
		str_for_num(qz_sNum, _nNumber);
		str_cat(qz_sNum, "a");
		if (str_starts(qz_tLoad.string[n], qz_sNum)) {
			str_cpy(qz_sAnswer, qz_tLoad.string[n]);
			str_clip(qz_sAnswer, str_len(qz_sNum));
			qz_bAnswerFound = 1;
			return(n);
		}
		n+=1;
	}
}
// sets qz_sQuestion to question number _nNumber in qz.txt
// modifies qz_bQuestionFound
function qzf_getQuestion(_nNumber) {
	str_cpy(qz_sQuestion, "");
	var n; n=0;
	qz_bQuestionFound = 0;
	while(n < qz_nLoad) {
		str_for_num(qz_sNum, _nNumber);
		str_cat(qz_sNum, "q");
		if (str_starts(qz_tLoad.string[n], qz_sNum)) {
			str_cpy(qz_sQuestion, qz_tLoad.string[n]);
			str_clip(qz_sQuestion, str_len(qz_sNum));
			qz_bQuestionFound = 1;
			return(n);
		}
		n+=1;
	}
}
// loads all questions and answers from _sFileName into qz_tLoad
// modifies qz_nLoad (number of lines loaded)
function qzf_load(_sFileName) {
	if (_sFileName == 0) { return(0); }
	qz_nLoad = txt_load(qz_tLoad, _sFileName);
	if (qz_nLoad == 0) { error("no questions loaded"); }
	return(qz_nLoad);
}


function qzf_quizMe() {
	qzf_load("qz.txt");
	qz_nStage = 1;
	while(qz_nStage) {
		qzf_getRandomQuestion();
		qzf_getQuestion(qz_nQuestion);
		str_cpy(qz_tQuestion.string[0], qz_sQuestion);
		qzf_getRandomAnswers(3, qz_nQuestion);
		qzf_getAnswer(qz_nQuestion);
		if (qz_bAnswerFound) {
			qz_nAnswer = random_int(0, 3);
			str_cpy(qz_tAnswers.string[3], qz_tAnswers.string[qz_nAnswer]);	
			str_cpy(qz_tAnswers.string[qz_nAnswer], qz_sAnswer);
			qz_nStage = 2;
			while(qz_nStage == 2) {
				if (key_1 || key_2 || key_3 || key_4) { qz_nStage = 3; }
				wait(1);
			}
			if (qz_nStage == 3) {
				if (qzf_checkAnswerKey(qz_nAnswer, key_lastpressed)) {
					str_cpy(qz_tResult.string[0], "correct");
				} else {
					str_cpy(qz_tResult.string[0], "wrong");
				}
				while(0 == key_enter) { wait(1); }
				str_cpy(qz_tResult.string[0], "");
				qz_nStage = 1;
			}
		}
		wait(1);
	}
}


There are new functions including "qzf_quizMe".
When placed in main qzf_quizMe should serve up questions from qz.txt.
Press 1, 2, 3, 4 and "correct" or "wrong" might be displayed.
Press the ENTER key and another question might be displayed...or maybe not.