home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d1xx / d158 / memboardtest.lha / MemBoardTest / mtest.mod < prev    next >
Text File  |  1988-10-02  |  21KB  |  679 lines

  1. IMPLEMENTATION MODULE mtest;
  2.  
  3.  
  4. FROM RandomNumbers IMPORT Seed,Random;
  5. FROM InOut IMPORT WriteLn,WriteString,ReadString,WriteInt,WriteCard;
  6. FROM Strings IMPORT String,Length,Concat;
  7. FROM SYSTEM IMPORT ADDRESS,WORD,NULL,ADR;
  8. IMPORT Terminal; (* conflict with DOSFiles.Write *)
  9. FROM Pens IMPORT SetAPen,SetDrMd,Move;
  10. FROM Text IMPORT Text;
  11. FROM myscreen IMPORT RP, ourwindow;
  12. FROM mdraw IMPORT drawpixel,drawstats,addressbits,databits;   
  13. FROM Rasters IMPORT ScrollRaster;
  14. FROM Intuition IMPORT IntuiMessagePtr, IDCMPFlags, IDCMPFlagSet, 
  15.                       SelectDown, MenuDown;
  16. FROM Ports IMPORT GetMsg, ReplyMsg, MessagePtr, WaitPort;
  17. FROM DOSFiles IMPORT Open,Close,Write,FileHandle,ModeNewFile;
  18. FROM Tasks IMPORT Wait, SIGNAL, SignalSet;
  19.  
  20.  
  21. TYPE CharSet = SET OF CHAR;
  22. VAR  j,maxvalue,redcard,valuecard:CARDINAL;
  23.      addresscard : LONGCARD;
  24.      response, stringA, stringB, endofline:String;
  25.      i,errorlimit:INTEGER;
  26.      start,end:ADDRESS;
  27.      startmessage,endmessage : String;
  28.      mesg : IntuiMessagePtr;
  29.      actual : LONGINT;
  30.      myfile : FileHandle;
  31.      bitarray : ARRAY[0..15] OF WORD;
  32.      class : IDCMPFlagSet;
  33.      code : CARDINAL;
  34.      ourwindowsignal : SIGNAL;
  35.      ourwindowsignalset,receivedsig : SignalSet;
  36.  
  37.  
  38.    PROCEDURE ConvertChar(ch:CHAR):INTEGER;
  39.    VAR value:INTEGER;
  40.    BEGIN
  41.       IF ch IN CharSet{'0'..'9'} THEN
  42.          value:=ORD(ch)-ORD('0')
  43.       ELSIF ch IN CharSet{'A'..'F'} THEN
  44.          value:=ORD(ch)-ORD('A')+10
  45.       ELSIF ch IN CharSet{'a'..'f'} THEN
  46.          value:=ORD(ch)-ORD('a')+10;
  47.       END;
  48.       RETURN value;
  49.    END ConvertChar;
  50.    
  51.    
  52.    PROCEDURE Convert(s:String):ADDRESS;
  53.    CONST base=16;
  54.    VAR total:ADDRESS;
  55.           
  56.  
  57.    BEGIN
  58.       total:=0;
  59.       FOR i:=0 TO Length(s)-1 DO
  60.          total:=total*base;
  61.          INC(total,ConvertChar(s[i]));
  62.          END;
  63.       RETURN total;
  64.    END Convert;
  65.  
  66.  
  67.    PROCEDURE HexChar(i:INTEGER):CHAR;
  68.    VAR ch:CHAR;
  69.    BEGIN
  70.       IF (i>=0) AND (i<=9) THEN
  71.          ch:=CHR(i+INTEGER(ORD('0')))
  72.       ELSE
  73.          ch:=CHR(i-10+INTEGER(ORD('A')));
  74.       END;
  75.       RETURN(ch);
  76.    END HexChar;
  77.    
  78.  
  79.    PROCEDURE WriteHex(c:CARDINAL;VAR string1,string2:String);
  80.    VAR ch:CHAR;
  81.        constr:String;
  82.    BEGIN
  83.       constr[1]:=CHR(0);
  84.  
  85.       ch:=HexChar(c DIV 4096);
  86.       constr[0]:=ch;
  87.       Concat(string1,constr,string2);
  88.       c:=c MOD 4096;
  89.  
  90.       ch:=HexChar(c DIV 256);
  91.       constr[0]:=ch;
  92.       Concat(string2,constr,string1);
  93.       c:=c MOD 256;
  94.  
  95.       ch:=HexChar(c DIV 16);
  96.       constr[0]:=ch;
  97.       Concat(string1,constr,string2);
  98.       c:=c MOD 16;
  99.  
  100.       ch:=HexChar(c);
  101.       constr[0]:=ch;
  102.       Concat(string2,constr,string1);
  103.       string2:=string1;
  104.    END WriteHex;
  105.             
  106.  
  107.  
  108.    PROCEDURE DoRandom(start,end:ADDRESS;
  109.                       errorlimit:INTEGER;
  110.                       save,dowrite,message:BOOLEAN);
  111.    TYPE SCALAR=LONGCARD;
  112.         WORDPTR=POINTER TO WORD;
  113.    VAR i         : ADDRESS;
  114.        value,red : WORD;
  115.        errors    : INTEGER;
  116.        quit      : BOOLEAN;
  117.        j         : CARDINAL;
  118.        jj        : LONGCARD;
  119.  
  120.    BEGIN
  121.       SetAPen(RP,4);
  122.       Move(RP,30,280);
  123.       Text(RP,startmessage,16);
  124.       
  125.       FOR j := 0 TO 23 DO
  126.          addressbits[j] := 0;
  127.          END; (* for *)
  128.  
  129.       FOR j := 0 TO 15 DO
  130.          databits[j] := 0;
  131.          END; (* for *)
  132.  
  133.       IF save THEN
  134.          myfile := Open('ramerr',ModeNewFile);
  135.          END; (* if *);
  136.  
  137.       mesg:=IntuiMessagePtr(GetMsg(ourwindow^.UserPort));
  138.       WHILE mesg#NULL DO 
  139.          mesg:=IntuiMessagePtr(GetMsg(ourwindow^.UserPort));
  140.          END; (* while *)
  141.  
  142.       SetAPen(RP,2); (* blue *)
  143.       ScrollRaster(RP,0,10,0,300,639,399);
  144.       ScrollRaster(RP,0,10,0,300,639,399);
  145.       ScrollRaster(RP,0,10,0,300,639,399);
  146.       ScrollRaster(RP,0,10,0,300,639,399);
  147.       ScrollRaster(RP,0,10,0,300,639,399);
  148.       Move(RP,20,370);
  149.       Text(RP,
  150.            '     --------- CLICK LEFT MOUSE BUTTON TO STOP ---------   ',
  151.            50);
  152.       Move(RP,20,380);
  153.       Text(RP,
  154.            '     --------- HOLD RIGHT MOUSE BUTTON TO PAUSE --------   ',
  155.            50);
  156.  
  157.       IF dowrite THEN
  158.          Seed(10);
  159.          i:=start;
  160.          jj:=LONGCARD(i MOD 65536);
  161.          quit := FALSE;
  162.          WHILE (i<=end) AND NOT quit DO
  163.          drawpixel(i,6);
  164.          WHILE (jj>1) AND (i<=end) DO
  165.                i^:=WORD(Random(65535));
  166.                INC(i,2);
  167.                DEC(jj,2);
  168.                END; (* while *)
  169.             jj:=65536;              
  170.             mesg:=IntuiMessagePtr(GetMsg(ourwindow^.UserPort));
  171.             IF mesg#NULL THEN (* user wants to quit *)
  172.                ReplyMsg(MessagePtr(mesg));
  173.                quit := TRUE;
  174.                END; (* if *)
  175.             END; (* while *)
  176.          END; (* if *)
  177.  
  178.       Seed(10);
  179.       i:=start;
  180.       drawpixel(i,2);
  181.       errors:=0;
  182.       SetAPen(RP,3); (* red *)
  183.       WHILE (i<=end) AND (errors<errorlimit) AND NOT quit DO
  184.          value:=WORD(Random(65535));
  185.          red:=WORD(i^);
  186.          IF CARDINAL(red) # CARDINAL(value) THEN (* have found and error *)
  187.             IF save OR message THEN
  188.                stringA := 'BAD Location, address - ';
  189.    
  190.                WriteHex(CARDINAL(i DIV 65536),stringA,stringB);
  191.                WriteHex(CARDINAL(i MOD 65536),stringB,stringA);
  192.  
  193.                Concat(stringA,'H  Written - ',stringB);
  194.  
  195.                WriteHex(CARDINAL(value),stringB,stringA);
  196.  
  197.                Concat(stringA,'H  Read - ',stringB);
  198.  
  199.                WriteHex(CARDINAL(red),stringB,stringA);
  200.  
  201.                Concat(stringA,'H',stringB);
  202.                END; (* if *)
  203.  
  204.  
  205.             IF message THEN
  206.                   ScrollRaster(RP,0,10,0,300,639,399);
  207.                Move(RP,20,380);
  208.                Text(RP,stringB,Length(stringB));
  209.                END; (* if *)
  210.                
  211.             IF save AND (myfile<>LONGCARD(0)) THEN
  212.                Concat(stringB,endofline,stringA);
  213.                actual := Write(myfile,ADR(stringA),LONGCARD(Length(stringA)));
  214.                END; (* if *)
  215.  
  216.             INC(errors);
  217.             
  218.             drawpixel(i,3);
  219.  
  220.             addresscard := LONGCARD(i);
  221.             FOR j:= 0 TO 23 DO
  222.                IF addresscard MOD 2 > 0 THEN
  223.                   INC(addressbits[j]);
  224.                   END; (* if *)
  225.                addresscard := addresscard DIV 2;
  226.                END; (* for *)
  227.               
  228.             valuecard := CARDINAL(value);
  229.             redcard   := CARDINAL(red);
  230.             
  231.             FOR j:= 0 TO 15 DO
  232.                IF (valuecard MOD 2) # (redcard MOD 2) THEN
  233.                   INC(databits[j]);
  234.                   END; (* if *)
  235.                valuecard := valuecard DIV 2;
  236.                redcard   := redcard   DIV 2;
  237.                END; (* for *)
  238.  
  239.             mesg:=IntuiMessagePtr(GetMsg(ourwindow^.UserPort));
  240.             IF mesg # NULL THEN (* user wants to quit *)
  241.                class:=mesg^.Class;
  242.                code :=mesg^.Code;
  243.                IF IDCMPFlags(MouseButtons) IN class THEN
  244.                   IF SelectDown = code THEN
  245. (*                     WriteString('Selectdown detected and replied');
  246.                      WriteLn;*)
  247.                      ReplyMsg(MessagePtr(mesg));
  248.                      quit:=TRUE;
  249.                      SetAPen(RP,2); (* blue *)
  250.                      ScrollRaster(RP,0,10,0,300,639,399);
  251.                      Move(RP,20,380);
  252.                      Text(RP,
  253.                           '     -------- OPERATION ABORTED BY USER --------   ',
  254.                           50);
  255.                   ELSIF MenuDown = code THEN
  256. (*                     WriteString('MenuDown detected and replied');
  257.                      WriteLn;*)
  258.                      ReplyMsg(MessagePtr(mesg));
  259.                      mesg:=IntuiMessagePtr(WaitPort(ourwindow^.UserPort));
  260.                      WHILE mesg # NULL DO
  261.                         mesg:=IntuiMessagePtr(GetMsg(ourwindow^.UserPort));
  262.                         END; (* while *)
  263.                      END; (* elsif *)
  264.                ELSE
  265.                   ReplyMsg(MessagePtr(mesg));
  266. (*                  WriteString('Non mouse message recieved and replied');
  267.                   WriteLn;*)
  268.                   END; (* else *)
  269.  
  270.                END; (* if received intuimessage *)
  271.  
  272.             END; (* if not same *)
  273.  
  274.          INC(i,2);
  275.          IF i MOD 65536 = 0 THEN
  276.             drawpixel(i,2);
  277.             END;
  278.          END;
  279.  
  280.      IF save AND (myfile<>LONGCARD(0)) THEN
  281.         Close(myfile);
  282.         END; (* if *)
  283.  
  284.      drawstats;
  285.  
  286.      SetAPen(RP,4);
  287.      Move(RP,30,280);
  288.      Text(RP,endmessage,16);
  289.    END DoRandom;         
  290.  
  291.  
  292.  
  293.    PROCEDURE DoLinear(start,end:ADDRESS;
  294.                       errorlimit:INTEGER;
  295.                       save,dowrite,message:BOOLEAN);
  296.    VAR i:ADDRESS;
  297.        value:WORD;
  298.        errors:INTEGER;
  299.        quit:BOOLEAN;
  300.        j:CARDINAL;
  301.        jj:LONGCARD;
  302.  
  303.    BEGIN
  304.       SetAPen(RP,4);
  305.       Move(RP,30,280);
  306.       Text(RP,startmessage,16);
  307.  
  308.       FOR j := 0 TO 23 DO
  309.          addressbits[j] := 0;
  310.          END; (* for *)
  311.          
  312.       FOR j := 0 TO 15 DO
  313.          databits[j] := 0;
  314.          END; (* for *)
  315.  
  316.       IF save THEN
  317.          myfile := Open('ramerr',ModeNewFile);
  318.          END; (* if *);
  319.  
  320.       mesg:=IntuiMessagePtr(GetMsg(ourwindow^.UserPort));
  321.       WHILE mesg#NULL DO 
  322.          mesg:=IntuiMessagePtr(GetMsg(ourwindow^.UserPort));
  323.          END; (* while *)
  324.  
  325.       SetAPen(RP,2); (* blue *)
  326.       ScrollRaster(RP,0,10,0,300,639,399);
  327.       ScrollRaster(RP,0,10,0,300,639,399);
  328.       ScrollRaster(RP,0,10,0,300,639,399);
  329.       ScrollRaster(RP,0,10,0,300,639,399);
  330.       ScrollRaster(RP,0,10,0,300,639,399);
  331.       Move(RP,20,370);
  332.       Text(RP,
  333.            '     --------- CLICK LEFT MOUSE BUTTON TO STOP ---------   ',
  334.            50);
  335.       Move(RP,20,380);
  336.       Text(RP,
  337.            '     --------- HOLD RIGHT MOUSE BUTTON TO PAUSE --------   ',
  338.            50);
  339.  
  340.       IF dowrite THEN
  341.           Seed(10);
  342.          i:=start;
  343.          jj:=LONGCARD(i MOD 65536);
  344.          quit := FALSE;
  345.          WHILE (i<=end) AND NOT quit DO
  346.             drawpixel(i,6);
  347.             WHILE (jj>1) AND (i<=end) DO
  348.                i^:=WORD(i DIV 2);
  349.                   INC(i,2);
  350.                DEC(jj,2);
  351.                   END; (* while *)
  352.             jj:=65536;
  353.             mesg:=IntuiMessagePtr(GetMsg(ourwindow^.UserPort));
  354.             IF mesg#NULL THEN (* user wants to quit *)
  355.                ReplyMsg(MessagePtr(mesg));
  356.                quit := TRUE;
  357.                END; (* if *)
  358.             END; (* while *)
  359.          END; (* if *)
  360.  
  361.          
  362.       i:=start;
  363.       drawpixel(i,2);
  364.       errors:=0;
  365.       SetAPen(RP,3);
  366.       WHILE (i<=end) AND (errors<errorlimit) AND NOT quit DO
  367.          value:=WORD(i^);
  368.          IF CARDINAL(value) # CARDINAL(i DIV 2) THEN
  369.             IF save OR message THEN
  370.                stringA := 'BAD Location, address - ';
  371.  
  372.                WriteHex(CARDINAL(i DIV 65536),stringA,stringB);
  373.                WriteHex(CARDINAL(i MOD 65536),stringB,stringA);
  374.  
  375.                Concat(stringA,'H  Written - ',stringB);
  376.  
  377.                WriteHex(CARDINAL(i DIV 2),stringB,stringA);
  378.  
  379.                Concat(stringA,'H  Read - ',stringB);
  380.  
  381.                WriteHex(CARDINAL(value),stringB,stringA);
  382.  
  383.                Concat(stringA,'H',stringB);
  384.                END; (* if *)
  385.  
  386.  
  387.             IF message THEN
  388.                ScrollRaster(RP,0,10,0,300,639,399);
  389.                Move(RP,20,380);
  390.                Text(RP,stringB,Length(stringB));
  391.                END; (* if *)
  392.  
  393.             IF save AND (myfile<>LONGCARD(0)) THEN
  394.                Concat(stringB,endofline,stringA);
  395.                actual := Write(myfile,ADR(stringA),LONGCARD(Length(stringA)));
  396.                END; (* if *)
  397.  
  398.             INC(errors);
  399.  
  400.             drawpixel(i,3);
  401.  
  402.             addresscard := LONGCARD(i);
  403.             FOR j:= 0 TO 23 DO
  404.                IF addresscard MOD 2 > 0 THEN
  405.                   INC(addressbits[j]);
  406.                   END; (* if *)
  407.                addresscard := addresscard DIV 2;
  408.                END; (* for *)
  409.               
  410.             valuecard := CARDINAL(i DIV 2);
  411.             redcard   := CARDINAL(value);
  412.                         
  413.             FOR j:= 0 TO 15 DO
  414.                IF (valuecard MOD 2) # (redcard MOD 2) THEN
  415.                   INC(databits[j]);
  416.                   END; (* if *)
  417.                valuecard := valuecard DIV 2;
  418.                redcard   := redcard   DIV 2;
  419.                END; (* for *)
  420.  
  421.             mesg:=IntuiMessagePtr(GetMsg(ourwindow^.UserPort));
  422.             IF mesg # NULL THEN (* user wants to quit *)
  423.                class:=mesg^.Class;
  424.                code :=mesg^.Code;
  425.                IF IDCMPFlags(MouseButtons) IN class THEN
  426.                   IF SelectDown = code THEN
  427. (*                     WriteString('Selectdown detected and replied');
  428.                      WriteLn;*)
  429.                      ReplyMsg(MessagePtr(mesg));
  430.                      quit:=TRUE;
  431.                      SetAPen(RP,2); (* blue *)
  432.                      ScrollRaster(RP,0,10,0,300,639,399);
  433.                      Move(RP,20,380);
  434.                      Text(RP,
  435.                           '     -------- OPERATION ABORTED BY USER --------   ',
  436.                           50);
  437.                   ELSIF MenuDown = code THEN
  438. (*                     WriteString('MenuDown detected and replied');
  439.                      WriteLn;*)
  440.                      ReplyMsg(MessagePtr(mesg));
  441.                      mesg:=IntuiMessagePtr(WaitPort(ourwindow^.UserPort));
  442.                      WHILE mesg # NULL DO
  443.                         mesg:=IntuiMessagePtr(GetMsg(ourwindow^.UserPort));
  444.                         END; (* while *)
  445.                      END; (* elsif *)
  446.                ELSE
  447.                   ReplyMsg(MessagePtr(mesg));
  448. (*                  WriteString('Non mouse message recieved and replied');
  449.                   WriteLn;*)
  450.                   END; (* else *)
  451.  
  452.                END; (* if received intuimessage *)                   
  453.  
  454.             END; (* if not same *)
  455.  
  456.          INC(i,2);
  457.          IF i MOD 65536 = 0 THEN
  458.             drawpixel(i,2);
  459.             END;
  460.          END;
  461.  
  462.      IF save AND (myfile<>LONGCARD(0)) THEN
  463.         Close(myfile);
  464.         END; (* if *)
  465.  
  466.      drawstats;
  467.  
  468.      SetAPen(RP,4);
  469.      Move(RP,30,280);
  470.      Text(RP,endmessage,16);
  471.   END DoLinear;         
  472.  
  473.  
  474.  
  475.    PROCEDURE DoBits(start,end:ADDRESS;
  476.                     errorlimit:INTEGER; 
  477.                     save,dowrite,message:BOOLEAN);
  478.    VAR i:ADDRESS;
  479.        value:WORD;
  480.        errors:INTEGER;
  481.        quit:BOOLEAN;
  482.        j:CARDINAL;
  483.        jj:LONGCARD;
  484.  
  485.    BEGIN
  486.       SetAPen(RP,4);
  487.       Move(RP,30,280);
  488.       Text(RP,startmessage,16);
  489.  
  490.       FOR j := 0 TO 23 DO
  491.          addressbits[j] := 0;
  492.          END; (* for *)
  493.          
  494.       FOR j := 0 TO 15 DO
  495.          databits[j] := 0;
  496.          END; (* for *)
  497.  
  498.       IF save THEN
  499.          myfile := Open('ramerr',ModeNewFile);
  500.          END; (* if *);
  501.  
  502.       mesg:=IntuiMessagePtr(GetMsg(ourwindow^.UserPort));
  503.       WHILE mesg#NULL DO 
  504.          mesg:=IntuiMessagePtr(GetMsg(ourwindow^.UserPort));
  505.          END; (* while *)
  506.  
  507.       SetAPen(RP,2); (* blue *)
  508.       ScrollRaster(RP,0,10,0,300,639,399);
  509.       ScrollRaster(RP,0,10,0,300,639,399);
  510.       ScrollRaster(RP,0,10,0,300,639,399);
  511.       ScrollRaster(RP,0,10,0,300,639,399);
  512.       ScrollRaster(RP,0,10,0,300,639,399);
  513.       Move(RP,20,370);
  514.       Text(RP,
  515.            '     --------- CLICK LEFT MOUSE BUTTON TO STOP ---------   ',
  516.            50);
  517.       Move(RP,20,380);
  518.       Text(RP,
  519.            '     --------- HOLD RIGHT MOUSE BUTTON TO PAUSE --------   ',
  520.            50);
  521.  
  522.       IF dowrite THEN
  523.           Seed(10);
  524.          i:=start;
  525.          jj:=LONGCARD(i MOD 65536);
  526.          quit := FALSE;
  527.          WHILE (i<=end) AND NOT quit DO
  528.             drawpixel(i,6);
  529.             WHILE (jj>1) AND (i<=end) DO
  530.                i^:=bitarray[CARDINAL((i DIV 2) MOD 16)];
  531.                   INC(i,2);
  532.                DEC(jj,2);
  533.                   END; (* while *)
  534.             jj:=65536;
  535.             mesg:=IntuiMessagePtr(GetMsg(ourwindow^.UserPort));
  536.             IF mesg#NULL THEN (* user wants to quit *)
  537.                ReplyMsg(MessagePtr(mesg));
  538.                quit := TRUE;
  539.                END; (* if *)
  540.             END; (* while *)
  541.          END; (* if *)
  542.  
  543.       i:=start;
  544.       drawpixel(i,2);
  545.       errors:=0;
  546.       SetAPen(RP,3);
  547.       WHILE (i<=end) AND (errors<errorlimit) AND NOT quit DO
  548.          value:=WORD(i^);
  549.          IF CARDINAL(value) # CARDINAL(bitarray[CARDINAL((i DIV 2) MOD 16)]) THEN
  550.             IF save OR message THEN
  551.                stringA := 'BAD Location, address - ';
  552.   
  553.                WriteHex(CARDINAL(i DIV 65536),stringA,stringB);
  554.                WriteHex(CARDINAL(i MOD 65536),stringB,stringA);
  555.  
  556.                Concat(stringA,'H  Written - ',stringB);
  557.  
  558.                WriteHex(CARDINAL(bitarray[CARDINAL((i DIV 2) MOD 16)]),stringB,stringA);
  559.  
  560.                Concat(stringA,'H  Read - ',stringB);
  561.  
  562.                WriteHex(CARDINAL(value),stringB,stringA);
  563.  
  564.                Concat(stringA,'H',stringB);
  565.                END; (* if *)
  566.  
  567.  
  568.             IF message THEN
  569.                ScrollRaster(RP,0,10,0,300,639,399);
  570.                Move(RP,20,380);
  571.                Text(RP,stringB,Length(stringB));
  572.                END; (* if *)
  573.  
  574.             IF save AND (myfile<>LONGCARD(0)) THEN
  575.                Concat(stringB,endofline,stringA);
  576.                actual := Write(myfile,ADR(stringA),LONGCARD(Length(stringA)));
  577.                END; (* if *)
  578.  
  579.             INC(errors);
  580.  
  581.             drawpixel(i,3);
  582.  
  583.             addresscard := LONGCARD(i);
  584.             FOR j:= 0 TO 23 DO
  585.                IF addresscard MOD 2 > 0 THEN
  586.                   INC(addressbits[j]);
  587.                   END; (* if *)
  588.                addresscard := addresscard DIV 2;
  589.                END; (* for *)
  590.               
  591.             valuecard := CARDINAL(i DIV 2);
  592.             redcard   := CARDINAL(value);
  593.                         
  594.             FOR j:= 0 TO 15 DO
  595.                IF (valuecard MOD 2) # (redcard MOD 2) THEN
  596.                   INC(databits[j]);
  597.                   END; (* if *)
  598.                valuecard := valuecard DIV 2;
  599.                redcard   := redcard   DIV 2;
  600.                END; (* for *)
  601.  
  602.             mesg:=IntuiMessagePtr(GetMsg(ourwindow^.UserPort));
  603.             IF mesg # NULL THEN (* user wants to quit *)
  604.                class:=mesg^.Class;
  605.                code :=mesg^.Code;
  606.                IF IDCMPFlags(MouseButtons) IN class THEN
  607.                   IF SelectDown = code THEN
  608. (*                     WriteString('Selectdown detected and replied');
  609.                      WriteLn;*)
  610.                      ReplyMsg(MessagePtr(mesg));
  611.                      quit:=TRUE;
  612.                      SetAPen(RP,2); (* blue *)
  613.                      ScrollRaster(RP,0,10,0,300,639,399);
  614.                      Move(RP,20,380);
  615.                      Text(RP,
  616.                           '     -------- OPERATION ABORTED BY USER --------   ',
  617.                           50);
  618.                   ELSIF MenuDown = code THEN
  619. (*                     WriteString('MenuDown detected and replied');
  620.                      WriteLn;*)
  621.                      ReplyMsg(MessagePtr(mesg));
  622.                      mesg:=IntuiMessagePtr(WaitPort(ourwindow^.UserPort));
  623.                      WHILE mesg # NULL DO
  624.                         mesg:=IntuiMessagePtr(GetMsg(ourwindow^.UserPort));
  625.                         END; (* while *)
  626.                      END; (* elsif *)
  627.                ELSE
  628.                   ReplyMsg(MessagePtr(mesg));
  629. (*                  WriteString('Non mouse message recieved and replied');
  630.                   WriteLn;*)
  631.                   END; (* else *)
  632.  
  633.                END; (* if received intuimessage *)                   
  634.                    
  635.             END; (* if not same then *)
  636.  
  637.          INC(i,2);
  638.          IF i MOD 65536 = 0 THEN
  639.             drawpixel(i,2);
  640.             END; (* if *)
  641.  
  642.          END;
  643.  
  644.      IF save AND (myfile<>LONGCARD(0)) THEN
  645.         Close(myfile);
  646.         END; (* if *)
  647.  
  648.      drawstats;
  649.  
  650.      SetAPen(RP,4);
  651.      Move(RP,30,280);
  652.      Text(RP,endmessage,16);
  653.   END DoBits;         
  654.  
  655.  
  656.  
  657.  
  658. BEGIN (* memorytest *)
  659.    startmessage := 'Doing Test Now...';
  660.    endmessage   := 'Test Completed.  ';
  661.    endofline[0] := CHR(10);
  662.    endofline[1] := CHR(0);
  663.  
  664.    bitarray[0] := WORD(1);
  665.    FOR j:=1 TO 15 DO
  666.       bitarray[j]:=WORD(CARDINAL(bitarray[j-1])*2);
  667.       END; (* for *);
  668.  
  669.    ourwindowsignal:=1;
  670.    FOR j:= 1 TO CARDINAL(ourwindow^.UserPort^.mpSigBit) DO
  671.       ourwindowsignal := ourwindowsignal * 2;
  672.       END; (* for *)
  673.    ourwindowsignalset := SignalSet{};
  674.    INCL(ourwindowsignalset,ourwindowsignal);
  675.   
  676. END mtest.
  677.  
  678. (*                     receivedsig := Wait(ourwindowsignalset);  *)
  679.