Category : Science and Education
Archive   : EKGPOWER.ZIP
Filename : EKG.PAS

 
Output of file : EKG.PAS contained in archive : EKGPOWER.ZIP
PROGRAM EKG (INPUT, OUTPUT);

{*** EKG TRAINER WRITTEN BY ***}
{*** (C) STEPHEN D. PEACOCK RN ***}
{*** 5647 GRAYWOOD RD. ***}
{*** JACKSONVILLE, FL 32207 ***}
{*** (904) 737-2859 ***}
{*** THIS PROGRAM MAY BE COPIED FREELY AND GIVEN TO ANYONE ***}
{*** THAT WOULD LIKE IT. PLEASE DISTRIBUTE ALL FILES, ***}
{*** INCLUDING THIS ONE. IF YOU LIKE THIS PROGRAM PLEASE ***}
{*** WRITE ME A LETTER TELLING ME SO. A DONATION OF 5 TO 10 ***}
{*** DOLLARS WOULD BE APPRECIATED. THIS PROGRAM WAS WRITTEN ***}
{*** USING TURBO PASCAL VER 4.0. THE CODE WAS STARTED ***}
{*** JUNE 25, 1988. THANKS TO MY WIFE JACKIE FOR HER HELP. ***}
{*** THANKS TO LARRY SCHOTT AND RALPH GLATTLI FOR THEIR HELP. ***}

USES
CRT, GRAPH;

VAR
A, B, ANS, L, COLOR, I : INTEGER;
CUR, GD, GM, IOCODE : INTEGER;
T, CHANGE, FUNCKEY : BOOLEAN;
CH : CHAR;
DFILE : TEXT;
SIZE, SIZE2 : WORD;
P, P2 : POINTER;
LL : LONGINT;

{$M 65520, 0, 655360}


PROCEDURE CLEAR; FORWARD;
PROCEDURE SETTHEGMODE; FORWARD;
PROCEDURE NSR; FORWARD;
PROCEDURE ST; FORWARD;
PROCEDURE NSRPVC; FORWARD;
PROCEDURE VT; FORWARD;
PROCEDURE SB; FORWARD;
PROCEDURE JUNCT; FORWARD;
PROCEDURE VBGEM; FORWARD;
PROCEDURE NSRPAC; FORWARD;
PROCEDURE NSRPJC; FORWARD;
PROCEDURE AFLUT; FORWARD;
PROCEDURE AFIB; FORWARD;
PROCEDURE VPACE; FORWARD;
PROCEDURE AVB1; FORWARD;
PROCEDURE VSTL; FORWARD;
PROCEDURE VFIB; FORWARD;
PROCEDURE AVB2; FORWARD;
PROCEDURE AVB3; FORWARD;
PROCEDURE WINKB; FORWARD;
PROCEDURE ASYST; FORWARD;
PROCEDURE VESCAPE; FORWARD;
PROCEDURE SBLOC; FORWARD;
PROCEDURE APACE; FORWARD;
PROCEDURE SIXSEC; FORWARD;
PROCEDURE UPDOWN; FORWARD;
PROCEDURE SHOWOFF; FORWARD;
PROCEDURE PICKONE; FORWARD;
PROCEDURE INTRO; FORWARD;
PROCEDURE PQRS; FORWARD;
PROCEDURE ANSWER; FORWARD;
PROCEDURE GOODBY; FORWARD;


{*************************************************************************}

PROCEDURE SETTHEGMODE;

{*** AUTO DETECT THE GRAPHIC CARD IN THE SYSTEM AND ADJUST TO IT. ***}
{*** SET THE COLOR TO 2 IF IN EGA ELSE SET COLOR 1. ***}


BEGIN
GD := DETECT;
INITGRAPH(GD, GM, ' ');
IF GRAPHRESULT <> GROK THEN HALT(1);
IF GM = 1 THEN COLOR := 2 ELSE
COLOR := 1;
END;

{*************************************************************************}

PROCEDURE CLEAR;

{*** CLEAR THE SCREEN ***}

BEGIN
SETVIEWPORT(0, 0, GETMAXX, GETMAXY, TRUE);
CLEARVIEWPORT;
END;

{*************************************************************************}

PROCEDURE NSR;

{*** NORMAL SINUS RHYTHM ***}
{*** THIS IS THE FIRST OF 22 PROCEDURES THAT DRAW A RHYTHM ON THE ***}
{*** SCREEN. IT WILL BE COMMENTED. THE OTHER PROCEDURES ARE VERY ***}
{*** SIMILAR. ***}

BEGIN
ANS := 1; {*** THE ANSWER USED IN TEST MODE ***}
CLEAR; {*** CLEAR AND RESET THE SCREEN ***}
ASSIGN(DFILE, 'EKGNSR.DTA'); {*** SELECT THE DATA FILE TO USE ***}
RESET(DFILE); {*** MOVE TO START OF THE FILE ***}
FOR L := 1 TO 70 DO {*** THERE ARE 70 SETS OF DATA ***}
BEGIN
READ(DFILE, A, B); {*** READ THE DATA IN THE FILE ***}
PUTPIXEL(A, B, COLOR); {*** TURN ON THE PIXEL ***}
END;
CLOSE(DFILE); {*** CLOSE THE DATA FILE ***}
SIZE := IMAGESIZE(1, 1, 40, 23); {*** DEFINE THE SIZE OF THE IMAGE ***}
GETMEM(P, SIZE); {*** RESERVE MEMORY TO HOLD IMAGE ***}
GETIMAGE(1, 1, 40, 23, P^); {*** SAVE IMAGE USING POINTER P ***}
FOR L := 2 TO 15 DO
BEGIN
PUTIMAGE((((L-1)*40)+1), 1, P^, NORMALPUT); {*** DRAW IMAGE 14 TIMES ***}
END;
FREEMEM(P, SIZE);
IF NOT T THEN {*** IF "T" IS NOT TRUE THEN PRINT ***}
BEGIN {*** THE NAME AND DESCRIPTION ***}
SETTEXTSTYLE(3, 0, 1); {*** TEXT STYLE 3, WRITE HORIZ, SIZE 1 ***}
OUTTEXTXY(0, 50, 'NORMAL SINUS RHYTHM');
SETTEXTSTYLE(0, 0, 1); {*** TEXT STYLE 0, WRITE HORIZ, SIZE 1 ***}
OUTTEXTXY(0, 70, 'Normal sinus rhythm has one "P" wave for every "QRS" wave. The rhythm is');
OUTTEXTXY(0, 80, 'regular with an overall rate of more than 60 beats per minute, but less');
OUTTEXTXY(0, 90, 'than 100 beats per minute. The SA node controls the rhythm.');
SIXSEC; {*** CALL THE PROCEDURE SIXSEC ***}
UPDOWN; {*** CALL THE PROCEDURE UPDOWN ***}
SHOWOFF; {*** CALL THE PROCEDURE SHOWOFF ***}
END;
IF T THEN ANSWER; {*** IF "T" IS TRUE THEN ***}
END; {*** CALL THE PROCEDURE ANSWER ***}

{*************************************************************************}

PROCEDURE ST;

{*** SINUS TACHYCARDIA ***}

BEGIN
ANS := 3;
CLEAR;
ASSIGN(DFILE, 'EKGST.DTA');
RESET(DFILE);
FOR L := 1 TO 53 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 24, 23);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 24, 23, P^);
FOR L := 1 TO 26 DO
BEGIN
PUTIMAGE((((L-1)*24)+1), 1, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY(0, 50, 'SINUS TACHYCARDIA');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'There is one "P" wave for each "QRS" wave. The rhythm is regular with a');
OUTTEXTXY(0, 80, 'rate of more than 100. The SA node controls the rhythm.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE NSRPVC;

{*** SINUS RHYTHM WITH PVC ***}

BEGIN
ANS := 6;
CLEAR;
ASSIGN(DFILE, 'EKGNSR.DTA');
RESET(DFILE);
FOR L := 1 TO 70 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
ASSIGN(DFILE, 'EKGPVC.DTA');
RESET(DFILE);
FOR L := 1 TO 65 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 40, 23);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 40, 23, P^);
SIZE2 := IMAGESIZE(41, 15, 80, 35);
GETMEM(P2, SIZE2);
GETIMAGE(41, 15, 80, 35, P2^);
FOR L := 3 TO 9 DO
BEGIN
PUTIMAGE((((L-1)*40)+1), 1, P^, NORMALPUT);
END;
L := 10;
PUTIMAGE((((L-1)*40)+1), 15, P2^, NORMALPUT);
FOR L := 11 TO 15 DO
BEGIN
PUTIMAGE((((L-1)*40)+1), 1, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
FREEMEM(P2, SIZE2);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY(0, 50, 'NORMAL SINUS RHYTHM WITH PVC');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'A premature ventricular contraction is caused by an irritable focus in');
OUTTEXTXY(0, 80, 'the ventricle. It is recognized by the following characteristics:');
OUTTEXTXY(0, 90, 'premature, wide and bizarre, usually opposite in deflection, and a');
OUTTEXTXY(0, 100, 'compensatory pause.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE VT;

{*** VENTRICULAR TACHYCARDIA ***}

BEGIN
ANS := 19;
CLEAR;
ASSIGN(DFILE, 'EKGVT.DTA');
RESET(DFILE);
FOR L := 1 TO 41 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 15, 16, 35);
GETMEM(P,SIZE);
GETIMAGE(1, 15, 16, 35, P^);
FOR L := 2 TO 40 DO
BEGIN
PUTIMAGE((((L-1)*16)+1), 15, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY(0, 50, 'VENTRICULAR TACHYCARDIA');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'The rate is about 180 beats per minute, they look like a PVC.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE SB;

{*** SINUS BRADYCARDIA ***}

BEGIN
ANS := 2;
CLEAR;
ASSIGN(DFILE, 'EKGSB.DTA');
RESET(DFILE);
FOR L := 1 TO 90 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 60, 23);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 60, 23, P^);
FOR L := 2 TO 10 DO
BEGIN
PUTIMAGE((((L-1)*60)+1), 1, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3,0,1);
OUTTEXTXY(0, 50, 'SINUS BRADYCARDIA');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'Sinus bradycardia has one "P" wave for each "QRS" wave. The rhythm is');
OUTTEXTXY(0, 80, 'regular with a rate of less than 60. The SA node controls the rhythm.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE JUNCT;

{*** JUNCTIONAL RHYTHM ***}

BEGIN
ANS := 8;
CLEAR;
ASSIGN(DFILE, 'EKGJUNCT.DTA');
RESET(DFILE);
FOR L := 1 TO 90 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 60, 23);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 60, 23, P^);
FOR L := 2 TO 10 DO
BEGIN
PUTIMAGE((((L-1)*60)+1), 1, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY(0, 50, 'JUNCTIONAL RHYTHM');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'The "QRS" is normal at a rate of 45 to 60. There is no "P" wave. The');
OUTTEXTXY(0, 80, 'AV node controls the rhythm.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE VBGEM;

{*** VENTRICULAR BIGEMINY ***}

BEGIN
ANS := 7;
CLEAR;
ASSIGN(DFILE, 'EKGVBGEM.DTA');
RESET(DFILE);
FOR L := 1 TO 135 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 80, 35);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 80, 35, P^);
FOR L := 2 TO 7 DO
BEGIN
PUTIMAGE((((L-1)*80)+1), 1, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY(0, 50, 'VENTRICULAR BIGEMINY');
SETTEXTSTYLE(0 ,0, 1);
OUTTEXTXY(0, 70, 'Each normal "PQRS" is followed by a PVC.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE NSRPAC;

{*** NORMAL SINUS RHYTHM WITH PAC ***}

BEGIN
ANS := 4;
CLEAR;
ASSIGN(DFILE, 'EKGNSR.DTA');
RESET(DFILE);
FOR L := 1 TO 70 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
ASSIGN(DFILE, 'EKGNSPA1.DTA');
RESET(DFILE);

FOR L := 1 TO 70 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A+40, B, COLOR);
END;
CLOSE(DFILE);
ASSIGN(DFILE, 'EKGNSPA2.DTA');
RESET(DFILE);
FOR L := 1 TO 67 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A+75, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 40, 23);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 40, 23, P^);
FOR L := 1 TO 18 DO
BEGIN
PUTIMAGE((((L-1)*40)+1)+118, 1, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY(0, 50, 'NORMAL SINUS RHYTHM WITH PAC');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'A premature atrial contraction is noted by the following attributes:');
OUTTEXTXY(0, 80, 'Looks like a normal "PQRS" beat but is early, there is a pause but it');
OUTTEXTXY(0, 90, 'is not compensatory.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE NSRPJC;

{*** NORMAL SINUS RHYTHM WITH PJC ***}

BEGIN
ANS := 5;
CLEAR;
ASSIGN(DFILE, 'EKGNSR.DTA');
RESET(DFILE);
FOR L := 1 TO 70 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
ASSIGN(DFILE, 'EKGNSPJ1.DTA');
RESET(DFILE);
FOR L := 1 TO 70 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A+40, B, COLOR);
END;
CLOSE(DFILE);
ASSIGN(DFILE, 'EKGNSPJ2.DTA');
RESET(DFILE);
FOR L := 1 TO 67 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A+75, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 40, 23);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 40, 23, P^);
FOR L := 1 TO 18 DO
BEGIN
PUTIMAGE((((L-1)*40)+1)+118, 1, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY(0, 50, 'NORMAL SINUS RHYTHM WITH PJC');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'A premature junctional contraction is noted by the following ');
OUTTEXTXY(0, 80, 'attributes: A normal "QRS" without a "P" wave, premature,');
OUTTEXTXY(0, 90, 'a noncompensatory pause.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE AFLUT;

{*** ATRIAL FLUTTER ***}

BEGIN
ANS := 10;
CLEAR;
ASSIGN(DFILE, 'EKGAFLUT.DTA');
RESET(DFILE);
FOR L := 1 TO 66 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 18, 22);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 18, 22, P^);
SIZE2 := IMAGESIZE(19, 1, 36, 22);
GETMEM(P2, SIZE2);
GETIMAGE(19, 1, 36, 22, P2^);
FOR L := 3 TO 40 DO
BEGIN
I := RANDOM(3);
IF I = 1 THEN
PUTIMAGE((((L-2)*18)+1), 1, P^, NORMALPUT)
ELSE
PUTIMAGE((((L-2)*18)+1), 1, P2^, NORMALPUT);
END;
FREEMEM(P, SIZE);
FREEMEM(P2, SIZE2);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY (0, 50, 'ATRIAL FLUTTER');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'The "P" waves looks somewhat like the teeth on a saw at a rate of 250 to');
OUTTEXTXY(0, 80, '350 per minute. The "QRS" is normal but the rhythm is irregular.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE AFIB;

{*** ATRIAL FIBRILLATIONN ***}

BEGIN
ANS := 9;
CLEAR;
ASSIGN(DFILE, 'EKGAFIB.DTA');
RESET(DFILE);
FOR L := 1 TO 63 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 18, 22);
GETMEM(P,SIZE);
GETIMAGE(1, 1, 18, 22, P^);
SIZE2 := IMAGESIZE(19, 1, 36, 22);
GETMEM(P2, SIZE2);
GETIMAGE(19, 1, 36, 22, P2^);
FOR L := 3 TO 40 DO
BEGIN
I := RANDOM(3);
IF I = 1 THEN
PUTIMAGE((((L-2)*18)+1), 1, P^, NORMALPUT)
ELSE
PUTIMAGE((((L-2)*18)+1), 1, P2^, NORMALPUT);
END;
FREEMEM(P, SIZE);
FREEMEM(P2, SIZE2);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY (0, 50, 'ATRIAL FIBRILLATION');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'The "P" waves are absent and the base line is erratically undulating');
OUTTEXTXY(0, 80, 'at a rate of 350 to 600. The "QRS is normal but the rhythm is irregular.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE VPACE;

{*** VENTRICULAR PACEMAKER ***}

BEGIN
ANS := 17;
CLEAR;
ASSIGN(DFILE, 'EKGVPACE.DTA');
RESET(DFILE);
FOR L := 1 TO 71 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 40, 35);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 40, 35, P^);
FOR L := 2 TO 15 DO
BEGIN
PUTIMAGE((((L-1)*40)+1), 1, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY(0, 50, 'VENTRICULAR PACED');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'A pacemaker lead is in the ventricle and functioning well. As the');
OUTTEXTXY(0, 80, 'ventricle is stimulated it produces a wide and bizarre complex. This');
OUTTEXTXY(0, 90, 'beat is not a PVC.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE AVB1;

{*** FIRST DEGREE BLOCK ***}

BEGIN
ANS := 11;
CLEAR;
ASSIGN(DFILE, 'EKG1AVB.DTA');
RESET(DFILE);
FOR L := 1 TO 70 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 40, 23);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 40, 23, P^);
FOR L := 2 TO 15 DO
BEGIN
PUTIMAGE((((L-1)*40)+1), 1, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY(0, 50, 'FIRST DEGREE BLOCK');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'First degree AV block looks like a normal complex except that the "P-R"');
OUTTEXTXY(0, 80, 'interval is prolonged to more than 0.2 sec.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE VSTL;

{*** VENTRICULAR STANDSTILL ***}

BEGIN
ANS := 21;
CLEAR;
ASSIGN(DFILE, 'EKGVSTL.DTA');
RESET(DFILE);
FOR L := 1 TO 40 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 40, 23);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 40, 23, P^);
FOR L := 2 TO 15 DO
BEGIN
PUTIMAGE((((L-1)*40)+1), 1, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY(0, 50, 'VENTRICULAR STANDSTILL');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'There are "P" waves noted but no "QRS" waves are present.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE VFIB;

{*** VENTRICULAR FIBRILLATION ***}

BEGIN
ANS := 20;
CLEAR;
ASSIGN(DFILE, 'EKGVFIB.DTA');
RESET(DFILE);
FOR L := 1 TO 20 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 20, 22);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 20, 22, P^);
FOR L := 2 TO 29 DO
BEGIN
PUTIMAGE((((L-1)*20)+1), 1, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY(0, 50, 'VENTRICULAR FIBRILLATION');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'The "P" and the "QRS" waves are not present. The base line is undulating');
OUTTEXTXY(0, 80, 'very irregular and fast.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE AVB2;

{*** SECOND DEGREE BLOCK ***}

BEGIN
ANS := 12;
CLEAR;
ASSIGN(DFILE, 'EKGNSR.DTA');
RESET(DFILE);
FOR L := 1 TO 70 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
ASSIGN(DFILE, 'EKGVSTL.DTA');
RESET(DFILE);
FOR L := 1 TO 40 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A + 40, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 80, 23);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 80, 23, P^);
FOR L := 2 TO 10 DO
BEGIN
PUTIMAGE((((L-1)*80)+1), 1, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY(0, 50, 'SECOND DEGREE BLOCK');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'Some "P" waves will cause a "QRS" while other "P" waves are not');
OUTTEXTXY(0, 80, 'conducted. The ratio of "P" to "QRS" waves may be 2:1, 3:1, etc.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE AVB3;

{*** THIRD DEGREE BLOCK ***}

BEGIN
ANS := 14;
CLEAR;
ASSIGN(DFILE, 'EKGNSR.DTA');
RESET(DFILE);
FOR L := 1 TO 70 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
ASSIGN(DFILE, 'EKGVSTL.DTA');
RESET(DFILE);
FOR L := 1 TO 40 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A + 40, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(7, 1, 35, 23);
GETMEM(P, SIZE);
GETIMAGE(7, 1, 35, 23, P^);
SIZE2 := IMAGESIZE(41, 1, 80, 23);
GETMEM(P2, SIZE2);
GETIMAGE(41, 1, 80, 23, P2^);
FOR L := 3 TO 15 DO
BEGIN
PUTIMAGE((((L-1)*40)+1), 1, P2^, NORMALPUT);
END;
FOR L := 2 TO 11 DO
BEGIN
PUTIMAGE((((L-1)*93)+1), 1, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
FREEMEM(P2, SIZE2);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY(0, 50, 'THIRD DEGREE BLOCK');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'The "P" waves and the "QRS" waves are independent of each other. None');
OUTTEXTXY(0, 80, 'of the "P" waves cause a "QRS" wave');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE WINKB;

{*** WENKEBACH ***}

BEGIN
ANS := 13;
CLEAR;
ASSIGN(DFILE, 'EKGNSR.DTA');
RESET(DFILE);
FOR L := 1 TO 70 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
ASSIGN(DFILE, 'EKGWINK.DTA');
RESET(DFILE);
FOR L := 1 TO 70 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A + 41, B, COLOR);
END;
CLOSE(DFILE);
ASSIGN(DFILE, 'EKGVSTL.DTA');
RESET(DFILE);
FOR L := 1 TO 40 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A + 81, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 120, 23);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 120, 23, P^);
FOR L := 2 TO 5 DO
BEGIN
PUTIMAGE((((L-1)*120)+1), 1, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY(0, 50, 'WENKEBACH');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'The "P-R" interval increases until a "QRS" complex is dropped. The cycle');
OUTTEXTXY(0, 80, 'will then repeat. This is a type of second degree block. The ratio of "P"');
OUTTEXTXY(0, 90, 'to "QRS" may be 2:3, 3:4, 4:5, etc.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE ASYST;

{*** ASYSTOLE ***}

BEGIN
ANS := 22;
CLEAR;
ASSIGN(DFILE, 'EKGASYST.DTA');
RESET(DFILE);
FOR L := 1 TO 5 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 5, 23);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 5, 23, P^);
FOR L := 2 TO 125 DO
BEGIN
PUTIMAGE((((L-1)*5)+1), 1, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY(0, 50, 'ASYSTOLE');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'There is no "P" or "QRS" wave noted. The base line is flat.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE VESCAPE;

{*** VENT ESCAPE BEAT ***}

BEGIN
ANS := 15;
CLEAR;
ASSIGN(DFILE, 'EKGNSR.DTA');
RESET(DFILE);
FOR L := 1 TO 70 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 40, 23);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 40, 23, P^);
FOR L := 2 TO 3 DO
BEGIN
PUTIMAGE((((L-1)*40)+1), 1, P^, NORMALPUT);
END;
ASSIGN(DFILE, 'EKGASYST.DTA');
RESET(DFILE);
FOR L := 1 TO 5 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A+120, B, COLOR);
END;
CLOSE(DFILE);
SIZE2 := IMAGESIZE(121, 1, 126, 23);
GETMEM(P2, SIZE2);
GETIMAGE(121, 1, 126, 23, P2^);
FOR L := 2 TO 30 DO
BEGIN
PUTIMAGE((((L-1)*5)+121), 1, P2^, NORMALPUT);
END;
ASSIGN(DFILE, 'EKGPVC.DTA');
RESET(DFILE);
FOR L := 1 TO 65 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A+230, B, COLOR);
END;
CLOSE(DFILE);
FOR L := 1 TO 8 DO
BEGIN
PUTIMAGE((((L)*40)+270), 1, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
FREEMEM(P2, SIZE2);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY(0, 50, 'VENTRICULAR ESCAPE BEAT');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'If no complex occurs for a period of time an escape beat may happen.');
OUTTEXTXY(0, 80, 'This beat will usually be ventricular in nature but may be junctional.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE SBLOC;

{*** SINUSBRADY WITH LOSS OF CAPTURE ***}

BEGIN
ANS := 18;
CLEAR;
ASSIGN(DFILE, 'EKGSBLOC.DTA');
RESET(DFILE);
FOR L := 1 TO 110 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 80, 23);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 80, 23, P^);
FOR L := 2 TO 7 DO
BEGIN
PUTIMAGE((((L-1)*80)+1), 1, P^, NORMALPUT);
END;
FOR L := 10 TO 22 DO
BEGIN
PUTPIXEL(40, L, COLOR);
END;
SIZE := IMAGESIZE(40, 10, 40, 22);
GETMEM(P, SIZE);
GETIMAGE(40, 10, 40, 22, P^);
FOR L := 3 TO 18 DO
BEGIN
PUTIMAGE((((L-1)*33)+1), 10, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);

OUTTEXTXY(0, 50, 'SINUS BRADYCARDIA WITH LOSS OF CAPTURE');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'A pacemaker is out of place and can not stimulate the heart. The');
OUTTEXTXY(0, 80, 'pacer spikes occur at a regular rate, irregardless of the natural');
OUTTEXTXY(0, 90, 'heart beats. This pacemaker has lost capture and is failing to');
OUTTEXTXY(0, 100, 'sense properly.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE APACE;

{*** ATRIAL PACER ***}

BEGIN
ANS := 16;
CLEAR;
ASSIGN(DFILE, 'EKGAPACE.DTA');
RESET(DFILE);
FOR L := 1 TO 78 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(1, 1, 40, 23);
GETMEM(P, SIZE);
GETIMAGE(1, 1, 40, 23, P^);
FOR L := 2 TO 15 DO
BEGIN
PUTIMAGE((((L-1)*40)+1), 1, P^, NORMALPUT);
END;
FREEMEM(P, SIZE);
IF NOT T THEN
BEGIN
SETTEXTSTYLE(3, 0, 1);
OUTTEXTXY(0, 50, 'ATRIAL PACER');
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, 70, 'A pacemaker lead is in the atrium and functioning well. It stimulates');
OUTTEXTXY(0, 80, 'the atrium which then leads to normal conduction in the heart.');
SIXSEC;
UPDOWN;
SHOWOFF;
END;
IF T THEN ANSWER;
END;

{*************************************************************************}

PROCEDURE SIXSEC;

{*** DRAW A SIX SECOND MARK UNDER RHYTHM STRIP ***}

BEGIN
SETCOLOR(9);
SETTEXTSTYLE(2, 0, 4);
OUTTEXTXY(0, 37, '|___________________SIX SECONDS___________________|');
OUTTEXTXY(300, 37, '___________________SIX SECONDS___________________|');
END;

{*************************************************************************}

PROCEDURE UPDOWN;

{*** PRINT PAGEUP AND PAGEDOWN EXIT AND TEST AT BOTTOM OF SCREEN ***}

BEGIN
SETCOLOR(5);
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, GETMAXY-10, 'PAGE UP FOR PREVIOUS, PAGE DOWN FOR NEXT, eXit, Test');
SETCOLOR(15);
END;

{*************************************************************************}

PROCEDURE SHOWOFF;

{*** CALL EACH OF THE RHYTHMS FROM USERS PAGE UP OR PAGE DOWN. START ***}
{*** THE TEST. EXIT TO OPERATING SYSTEM. READ THE KEYBOARD TESTING ***}
{*** FOR: , , AND . IF THE CURRENT ***}
{*** NUMBER IS ABOVE 22 THEN RESET TO 1, IF LESS THAN 1 THEN RESET ***}
{*** TO 22. THIS ALLOWS A LOOP OF ALL RHYTHMS ***}


BEGIN
REPEAT
CH := READKEY;
IF CH<>#0 THEN FUNCKEY := FALSE ELSE
BEGIN
FUNCKEY := TRUE;
CH := READKEY;
END;
UNTIL (CH = 'I') OR (CH = 'Q') OR (CH = 'X') OR (CH = 'x') OR (CH = 'T') OR (CH = 't');
IF CH = 'I' THEN
BEGIN
CUR := CUR - 1;
CHANGE := TRUE;
END;
IF CH = 'Q' THEN
BEGIN
CUR := CUR + 1;
CHANGE := TRUE;
END;
IF CUR > 22 THEN CUR := 1;
IF CUR < 1 THEN CUR := 22;
IF CH = 'X' THEN CUR := 0;
IF CH = 'x' THEN CUR := 0;
IF CH = 'T' THEN CUR := 23;
IF CH = 't' THEN CUR := 23;
IF (CHANGE) OR (CH = 'X') OR (CH = 'x') OR (CH = 'T') OR (CH = 't') THEN
BEGIN
CASE CUR OF
0 : GOODBY;
1 : NSR;
2 : SB;
3 : ST;
4 : NSRPAC; {*** USER ***}
5 : NSRPJC; {*** SELECT ***}
6 : NSRPVC; {*** A ***}
7 : VBGEM; {*** RHYTHM ***}
8 : JUNCT;
9 : AFIB;
10 : AFLUT;
11 : AVB1;
12 : AVB2;
13 : WINKB;
14 : AVB3;
15 : VESCAPE;
16 : APACE;
17 : VPACE;
18 : SBLOC;
19 : VT;
20 : VFIB;
21 : VSTL;
22 : ASYST;
23 : PICKONE;
END; {*** CASE ***}
END
ELSE SHOWOFF;
END;

{*************************************************************************}

PROCEDURE PICKONE;

{*** IF TEST IS TRUE AND L <> 23 THEN RANDOMLY PICK A RHYTHM FOR ***}
{*** THE TEST. IF L = 23 THEN BREAK OUT OF TEST MODE AND GO TO ***}
{*** TUTOR MODE ***}

BEGIN
T := TRUE;
IF L = 23 THEN T := FALSE;
RANDOMIZE;
CUR := RANDOM(22) + 1;
IF L = 23 THEN CUR := ANS;
CASE CUR OF
1 : NSR;
2 : SB;
3 : ST; {*** RANDOMLY ***}
4 : NSRPAC; {*** PICK ***}
5 : NSRPJC; {*** A ***}
6 : NSRPVC; {*** RHYTHM ***}
7 : VBGEM;
8 : JUNCT;
9 : AFIB;
10 : AFLUT;
11 : AVB1;
12 : AVB2;
13 : WINKB;
14 : AVB3;
15 : VESCAPE;
16 : APACE;
17 : VPACE;
18 : SBLOC;
19 : VT;
20 : VFIB;
21 : VSTL;
22 : ASYST;
23 : PICKONE;
END; {*** CASE ***}
END;

{*************************************************************************}

PROCEDURE INTRO;

{*** TITLE SCREEN AND INTRODUCTION TO EKG POWER ***}

BEGIN
SETTEXTSTYLE(4, 0, 9);
SETCOLOR(3);
OUTTEXTXY(0, 0, 'EKG POWER!');
SETTEXTSTYLE(1, 0, 1);
SETCOLOR(9);
OUTTEXTXY(140, 115, 'Learn to read EKG rhythm strips.');
SETTEXTSTYLE(0, 0, 1);
SETCOLOR(5);
OUTTEXTXY(160, 140, 'Presenting twenty-two of the most');
OUTTEXTXY(100, 150, 'common EKG rhythm strips a nurse might incounter.');
SETTEXTSTYLE(2, 0, 4);
SETCOLOR(7);
OUTTEXTXY(0, 170, 'Written by Stephen D. Peacock RN [Ver 1.01]');
SETTEXTSTYLE(0, 0, 1);
SETCOLOR(1);
OUTTEXTXY(0, GETMAXY-10, 'PRESS RETURN');
READLN;
RESTORECRTMODE;
FOR L := 1 TO 3 DO
BEGIN
WRITELN;
END;
WRITELN('This program will allow you to study twenty-two of the most common EKG');
WRITELN('rhythms that you might see. You will be able to see what each looks');
WRITELN('like and read a short description of how you recognize it. By using the');
WRITELN('"PageUp" and "PageDown" keys you can scroll through the list at your own');
WRITELN('pace. After you have studied each of the rhythms you can test your recog-');
WRITELN('nition of the different rhythms. You will only have one chance to name each');
WRITELN('rhythm. If you are wrong you are told and a new rhythm is chosen. There is no');
WRITELN('time limit and no score is kept. When you are in the tutor mode you may exit');
WRITELN('by selecting "X" or start the test by selecting "T". These rhythm strips');
WRITELN('simulate lead II placement. Please note that in the "real world" rhythms');
WRITELN('may not appear as neat and orderly as in this simulation.');
FOR L := 1 TO 3 DO
BEGIN
WRITELN;
END;
WRITELN('PRESS RETURN');
READLN;
PQRS;
END;

{*************************************************************************}

PROCEDURE PQRS;

{*** DESCRIBE A NORMAL PQRS, PR, R-R AND USE OF SIX SECOND SECTION ***}


BEGIN
SETTHEGMODE;
ASSIGN(DFILE, 'EKGPQRS.DTA');
RESET(DFILE);
FOR L := 1 TO 149 DO
BEGIN
READ(DFILE, A, B);
PUTPIXEL(A + 160, B, COLOR);
END;
CLOSE(DFILE);
SIZE := IMAGESIZE(161, 1, 320, 46);
GETMEM(P, SIZE);
GETIMAGE(161, 1, 320, 46, P^);
PUTIMAGE(241, 1, P^, NORMALPUT);
PUTIMAGE(321, 1, P^, NORMALPUT);
FREEMEM(P, SIZE);
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(167, 55, 'P');
OUTTEXTXY(261, 55, 'QRS');
OUTTEXTXY(375, 55, 'T');
SETTEXTSTYLE(1, 0, 1);
OUTTEXTXY(0, 65, 'A normal complex consists of a "P" wave then a "QRS" wave');
OUTTEXTXY(0, 80, 'followed by a "T" wave. From the start of the "P" to the');
OUTTEXTXY(0, 95, 'start ot the "QRS" is the "P-R" interval. From the start');
OUTTEXTXY(0, 110, 'of one "QRS" to the start of the next "QRS" is the "R-R"');
OUTTEXTXY(0, 125, 'interval. By counting the number of waves in a six second');
OUTTEXTXY(0, 140, 'section and multiplying by ten, you can get an approximate');
OUTTEXTXY(0, 155, 'rate per minute.');
SETCOLOR(7);
SETTEXTSTYLE(0, 0, 1);
OUTTEXTXY(0, GETMAXY-10, 'PRESS RETURN');
READLN;
END;

{*************************************************************************}

PROCEDURE ANSWER;

{*** IN THE TEST MODE ASK FOR THE ANSWER ***}


BEGIN
SIXSEC;
SETCOLOR(11);
OUTTEXTXY(0, 50, 'WHAT IS THIS RHYTHM');
OUTTEXTXY(0, 70, ' 1 NORMAL SINUS RHYTHM');
OUTTEXTXY(200, 70, ' 2 SINUS BRADYCARDIA');
OUTTEXTXY(400, 70, ' 3 SINUS TACHYCARDIA');
OUTTEXTXY(0, 80, ' 4 SINUS WITH PAC');
OUTTEXTXY(200, 80, ' 5 SINUS WITH PJC');
OUTTEXTXY(400, 80, ' 6 SINUS WITH PVC');
OUTTEXTXY(0, 90, ' 7 BIGEMINY');
OUTTEXTXY(200, 90, ' 8 JUNCTIONAL');
OUTTEXTXY(400, 90, ' 9 ATRIAL FIB');
OUTTEXTXY(0, 100, '10 ATRIAL FLUTTER');
OUTTEXTXY(200, 100, '11 FIRST DEG AVB');
OUTTEXTXY(400, 100, '12 SECOND DEG AVB');
OUTTEXTXY(0, 110, '13 WENKEBACH');
OUTTEXTXY(200, 110, '14 THIRD DEG AVB');
OUTTEXTXY(400, 110, '15 VENTRICULAR ESCAPE');
OUTTEXTXY(0, 120, '16 ATRIAL PACE');
OUTTEXTXY(200, 120, '17 VENTRICULAR PACE');
OUTTEXTXY(400, 120, '18 LOSS OF CAPTURE');
OUTTEXTXY(0, 130, '19 VENTRICULAR TACK');
OUTTEXTXY(200, 130, '20 VENTRICULAR FIB');
OUTTEXTXY(400, 130, '21 VENTRICULAR STAND STILL');
OUTTEXTXY(0, 140, '22 ASYSTOLE');
SETCOLOR(15);
OUTTEXTXY(0, 170, 'ENTER NUMBER FOR ANSWER or 23 FOR EKG TUTOR');
REPEAT
{$I-}
GOTOXY(2, 24);
READ(L);
SETVIEWPORT(0, GETMAXY-50, GETMAXX, GETMAXY, TRUE);
CLEARVIEWPORT;
{$I+}
IOCODE := IORESULT;
IF (IOCODE <> 0) AND (L<1) OR (L >23) THEN
BEGIN
SETVIEWPORT(0, 170, 500, 185, TRUE);
CLEARVIEWPORT;
OUTTEXTXY(0, 0, '*** PLEASE ENTER A NUMBER FROM 1 TO 23 ONLY. ***');
END;
UNTIL (IOCODE = 0) AND (L>0) AND (L<24);
SETLINESTYLE(0, 0, 3);
SETVIEWPORT(0, 50, 300, 100, TRUE);
IF (L = ANS) THEN
BEGIN
CLEARVIEWPORT;
RECTANGLE(0, 0, 296, 46);
OUTTEXTXY(10, 10, 'YES THAT IS CORRECT');
END
ELSE IF L <> 23 THEN
BEGIN
CLEARVIEWPORT;
RECTANGLE(0, 0, 296, 46);
OUTTEXTXY(10, 10, 'NO THAT IS NOT CORRECT');
CASE ANS OF
1 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS NORMAL SINUS RHYTHM.');
2 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS SINUS BRADYCARDIA.');
3 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS SINUS TACHYCARDIA.');
4 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS SINUS WITH PAC.');
5 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS SINUS WITH PJC.');
6 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS SINUS WITH PVC.');
7 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS VENTRICULAR BIGEMINY.');
8 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS JUNCTIONAL.');
9 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS ATRIAL FIB.');
10 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS ATRIAL FLUTTER.');
11 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS FIRST DEG AVB.');
12 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS SECOND DEG AVB.');
13 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS WENKEBACH.');
14 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS THIRD DEG AVB.');
15 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS VENTRICULAR ESCAPE.');
16 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS ATRIAL PACE.');
17 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS VENTRICULAR PACE.');
18 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS LOSS OF CAPTURE.');
19 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS VENTRICULAR TACK.');
20 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS VENTRICULAR FIB.');
21 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS VENTRICULAR STAND STILL.');
22 : OUTTEXTXY(10, 20, 'THE CORRECT ANSWER IS ASYSTOLE.');
END; {*** CASE ***}
END;
IF L <> 23 THEN
BEGIN
FOR LL := 1 TO 300000 DO
BEGIN
END;
END;
PICKONE;
END;

{*************************************************************************}

PROCEDURE GOODBY;

{*** CLEAR THE SCREEN AND PRINT A GOODBY MESSAGE ***}

BEGIN
RESTORECRTMODE;
GOTOXY(3, 10);
WRITELN('SOLONG AND MAY ALL OF YOUR HEARTBEATS BE TALL SKINNEY AND REGULAR.');
END;

{*************************************************************************}

BEGIN {*** MAIN ***}
SETTHEGMODE;
INTRO;
CHANGE := FALSE;
T := FALSE;
CUR := 1;
NSR;
END. {*** MAIN ***}

  3 Responses to “Category : Science and Education
Archive   : EKGPOWER.ZIP
Filename : EKG.PAS

  1. Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!

  2. This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.

  3. But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/