home *** CD-ROM | disk | FTP | other *** search
/ DP Tool Club 15 / CD_ASCQ_15_070894.iso / vrac / dnalib7a.zip / QUESTION.BAS < prev    next >
BASIC Source File  |  1994-05-14  |  8KB  |  221 lines

  1. DECLARE SUB PopWind(Title$,TopRow%,LeftColumn%,BottomRow%,RightColumn%,Attr%,Shadow%,Border%)
  2. DECLARE SUB SaveScreen(ScreenID$,TopRow%,LeftColumn%,BottomRow%,RightColumn%,Shadow%)
  3. DECLARE SUB RestoreScreen(ScreenID$,TopRow%,LeftColumn%)
  4. DECLARE SUB CalcByte(Attr%,LowByte%,HiByte%)
  5. DECLARE SUB Clicked(Rgt%,Lft%,Row%,Col%)
  6. DECLARE SUB HideCursor()
  7. DECLARE SUB ShowCursor()
  8. DECLARE FUNCTION LeftButtonReleased%()
  9.  
  10. FUNCTION Question%(QuestionText$(),CorrectAnswer$,Mouse%,ButtonAttr%,Attr%,TxtColor%,Shadow%,Border%) PUBLIC
  11.  
  12. $CODE SEG "DNASEG2"
  13.  
  14. CalcByte Attr%,FGround%,BGround%
  15. CalcByte ButtonAttr%,BtFG%,BtBG%
  16.  
  17. IF Mouse% THEN HideCursor
  18.  
  19. SELECT CASE CorrectAnswer$        'set up the minimium width of window
  20.   CASE "Y","y","N","n"  'Yes/No   'so that button fit, set QuestionType%
  21.     QuestionType% = 1             'so we dont end up in an endless loop
  22.     MinWidth% = 17
  23.   CASE "T","t","F","f"  'True/False
  24.     QuestionType% = 2
  25.     MinWidth% = 21
  26.   CASE "A","a","B","b","C","c","D","d"  'A/B/C/D
  27.     QuestionType% = 3
  28.     MinWidth% = 28
  29. END SELECT
  30.  
  31. i% = 0: j% = 0: Maxlength% = 0
  32.  
  33. DO
  34.  
  35. INCR i%
  36. INCR j%                                 'first find out how many
  37.                                                                                         'strings there are and the
  38. IF LEN (QuestionText$(i%)) = 0 THEN     'length of the longest one
  39.   DECR i%
  40. ELSE
  41.   IF LEN(QuestionText$(i%)) > Maxlength% THEN Maxlength% = LEN(QuestionText$(i%))
  42. END IF
  43.  
  44. LOOP WHILE i% = j%
  45.  
  46. Count% = i% + 3      'add three rows for the buttons
  47.  
  48. INCR Maxlength%      'add a space
  49.  
  50. IF Maxlength% < MinWidth% THEN Maxlength% = MinWidth%
  51.  
  52. LeftColumn% = 40 - ((Maxlength% + 2) / 2)
  53. RightColumn% = LeftColumn% + (Maxlength% + 2)
  54. TopRow% = (25 - Count%) \ 2
  55. BottomRow% = TopRow% + (Count% + 1)
  56.  
  57. SaveScreen Ques$,TopRow%,LeftColumn%,BottomRow%,RightColumn%,Shadow%
  58.  
  59. PopWind Title$,TopRow%,LeftColumn%,BottomRow%,RightColumn%,Attr%,Shadow%,Border%
  60.  
  61.  
  62. Row% = TopRow% + 1
  63. Col% = LeftColumn% + 1
  64.  
  65. FOR a% = 1 TO Count% - 3
  66.   COLOR TxtColor%,BGround%
  67.   LOCATE Row%,Col%,0
  68.   PRINT SPACE$(1) + QuestionText$(a%) + SPACE$(Maxlength% - LEN(QuestionText$(a%)))
  69.   INCR Row%
  70. NEXT a%
  71.  
  72. Col% = LeftColumn% + 3
  73. Row% = BottomRow% - 2
  74.  
  75. SELECT CASE QuestionType%      'only print the buttons we need
  76.   CASE 1  'Yes/No
  77.     COLOR BtFG%,BtBG%: LOCATE Row%, Col%,0: PRINT " YES ";
  78.     COLOR 0,BGround%: LOCATE Row%, Col% + 5,0: PRINT "▄";
  79.     COLOR 0,BGround%: LOCATE Row% + 1,Col% + 1,0: PRINT "▀▀▀▀▀";
  80.  
  81.     COLOR BtFG%,BtBG%: LOCATE Row%,Col% + 9,0: PRINT " NO ";
  82.     COLOR 0,BGround%: LOCATE Row%,Col% + 13,0: PRINT "▄";
  83.     COLOR 0,BGround%: LOCATE Row% + 1,Col% + 10,0: PRINT "▀▀▀▀"
  84.   CASE 2  'True/False
  85.     COLOR BtFG%,BtBG%: LOCATE Row%, Col%,0: PRINT " TRUE ";
  86.     COLOR 0,BGround%: LOCATE Row%, Col% + 6,0: PRINT "▄";
  87.     COLOR 0,BGround%: LOCATE Row% + 1,Col% + 1,0: PRINT "▀▀▀▀▀▀";
  88.  
  89.     COLOR BtFG%,BtBG%: LOCATE Row%,Col% + 10,0: PRINT " FALSE ";
  90.     COLOR 0,BGround%: LOCATE Row%,Col% + 17,0: PRINT "▄";
  91.     COLOR 0,BGround%: LOCATE Row% + 1,Col% + 11,0: PRINT "▀▀▀▀▀▀▀"
  92.   CASE 3  'A/B/C/D
  93.     COLOR BtFG%,BtBG%: LOCATE Row%, Col%,0: PRINT " A ";
  94.     COLOR 0,BGround%: LOCATE Row%, Col% + 3,0: PRINT "▄";
  95.     COLOR 0,BGround%: LOCATE Row% + 1,Col% + 1,0: PRINT "▀▀▀";
  96.  
  97.     COLOR BtFG%,BtBG%: LOCATE Row%,Col% + 7,0: PRINT " B ";
  98.     COLOR 0,BGround%: LOCATE Row%,Col% + 10,0: PRINT "▄";
  99.     COLOR 0,BGround%: LOCATE Row% + 1,Col% + 8,0: PRINT "▀▀▀"
  100.  
  101.     COLOR BtFG%,BtBG%: LOCATE Row%, Col% + 14,0: PRINT " C ";
  102.     COLOR 0,BGround%: LOCATE Row%, Col% + 17,0: PRINT "▄";
  103.     COLOR 0,BGround%: LOCATE Row% + 1,Col% + 15,0: PRINT "▀▀▀";
  104.  
  105.     COLOR BtFG%,BtBG%: LOCATE Row%,Col% + 21,0: PRINT " D ";
  106.     COLOR 0,BGround%: LOCATE Row%,Col% + 24,0: PRINT "▄";
  107.     COLOR 0,BGround%: LOCATE Row% + 1,Col% + 22,0: PRINT "▀▀▀"
  108. END SELECT
  109.  
  110. DO
  111.  
  112. WHILE NOT INSTAT
  113.   IF Mouse% THEN
  114.     ShowCursor
  115.     Clicked Rgt%,Lft%,MRow%,MCol%
  116.     IF LeftButtonReleased% THEN
  117.       SELECT CASE MRow%
  118.         CASE Row%
  119.           SELECT CASE QuestionType%
  120.             CASE 1  'Yes/No
  121.               SELECT CASE MCol%
  122.                 CASE Col% TO Col% + 4
  123.                   Ky$ = "Y": GOTO KeyBoard
  124.                 CASE Col% + 9 TO Col% + 12
  125.                   Ky$ = "N": GOTO KeyBoard
  126.               END SELECT
  127.             CASE 2  'True/False
  128.               SELECT CASE MCol%
  129.                 CASE Col% TO Col% + 5
  130.                   Ky$ = "T": GOTO KeyBoard
  131.                 CASE Col% + 10 TO Col% + 16
  132.                   Ky$ = "F": GOTO KeyBoard
  133.               END SELECT
  134.             CASE 3  'A/B/C/D
  135.               SELECT CASE MCol%
  136.                 CASE Col% TO Col% + 2
  137.                   Ky$ = "A": GOTO KeyBoard
  138.                 CASE Col% + 7 TO Col% + 9
  139.                   Ky$ = "B": GOTO KeyBoard
  140.                 CASE Col% + 14 TO Col% + 16
  141.                   Ky$ = "C": GOTO KeyBoard
  142.                 CASE Col% + 21 TO Col% + 23
  143.                   Ky$ = "D": GOTO KeyBoard
  144.               END SELECT
  145.           END SELECT
  146.       END SELECT
  147.     END IF
  148.   END IF
  149. WEND
  150.  
  151. Ky$ = INKEY$
  152.  
  153. KeyBoard:
  154.  
  155. IF Mouse% THEN HideCursor
  156.  
  157. SELECT CASE QuestionType%
  158.   CASE 1  'Yes/No
  159.     SELECT CASE Ky$
  160.       CASE "N","n"
  161.         COLOR BtFG%,BtBG%: LOCATE Row%,Col% + 10,0: PRINT " NO ";
  162.         COLOR 0,BGround%: LOCATE Row%,Col% + 9,0: PRINT " ";
  163.         COLOR 0,BGround%: LOCATE Row% + 1,Col% + 10,0: PRINT "    "
  164.         QuestionAnswered% = 1
  165.       CASE "Y","y"
  166.         COLOR BtFG%,BtBG%: LOCATE Row%, Col% + 1,0: PRINT " YES ";
  167.         COLOR 0,BGround%: LOCATE Row%, Col%,0: PRINT " ";
  168.         COLOR 0,BGround%: LOCATE Row% + 1,Col% + 1,0: PRINT "     ";
  169.         QuestionAnswered% = 1
  170.     END SELECT
  171.   CASE 2  'True/False
  172.     SELECT CASE Ky$
  173.       CASE "F","f"
  174.         COLOR BtFG%,BtBG%: LOCATE Row%,Col% + 11,0: PRINT " FALSE ";
  175.         COLOR 0,BGround%: LOCATE Row%,Col% + 10,0: PRINT " ";
  176.         COLOR 0,BGround%: LOCATE Row% + 1,Col% + 11,0: PRINT "       "
  177.         QuestionAnswered% = 1
  178.       CASE "T","t"
  179.         COLOR BtFG%,BtBG%: LOCATE Row%, Col% + 1,0: PRINT " TRUE ";
  180.         COLOR 0,BGround%: LOCATE Row%, Col%,0: PRINT " ";
  181.         COLOR 0,BGround%: LOCATE Row% + 1,Col% + 1,0: PRINT "      ";
  182.         QuestionAnswered% = 1
  183.     END SELECT
  184.   CASE 3  'A/B/C/D
  185.     SELECT CASE Ky$
  186.       CASE "A","a"
  187.         COLOR BtFG%,BtBG%: LOCATE Row%, Col% + 1,0: PRINT " A ";
  188.         COLOR 0,BGround%: LOCATE Row%, Col%,0: PRINT " ";
  189.         COLOR 0,BGround%: LOCATE Row% + 1,Col% + 1,0: PRINT "   ";
  190.         QuestionAnswered% = 1
  191.       CASE "B","b"
  192.         COLOR BtFG%,BtBG%: LOCATE Row%,Col% + 8,0: PRINT " B ";
  193.         COLOR 0,BGround%: LOCATE Row%,Col% + 7,0: PRINT " ";
  194.         COLOR 0,BGround%: LOCATE Row% + 1,Col% + 8,0: PRINT "   "
  195.         QuestionAnswered% = 1
  196.       CASE "C","c"
  197.         COLOR BtFG%,BtBG%: LOCATE Row%, Col% + 15,0: PRINT " C ";
  198.         COLOR 0,BGround%: LOCATE Row%, Col% + 14,0: PRINT " ";
  199.         COLOR 0,BGround%: LOCATE Row% + 1,Col% + 15,0: PRINT "   ";
  200.         QuestionAnswered% = 1
  201.       CASE "D","d"
  202.         COLOR BtFG%,BtBG%: LOCATE Row%,Col% + 22,0: PRINT " D ";
  203.         COLOR 0,BGround%: LOCATE Row%,Col% + 21,0: PRINT " ";
  204.         COLOR 0,BGround%: LOCATE Row% + 1,Col% + 22,0: PRINT "   "
  205.         QuestionAnswered% = 1
  206.     END SELECT
  207. END SELECT
  208.  
  209. LOOP UNTIL QuestionAnswered%
  210.  
  211. IF UCASE$(Ky$) = UCASE$(CorrectAnswer$) THEN
  212.   Question% = 1
  213. ELSE
  214.   Question% = 0
  215. END IF
  216.  
  217. DELAY .5
  218.  
  219. RestoreScreen Ques$,TopRow%,LeftColumn%
  220.  
  221. END FUNCTION