home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / microcrn / issue_43.arc / DBMENU.ARC / PICTBOX.PRG < prev    next >
Text File  |  1988-05-23  |  3KB  |  184 lines

  1. ******************************************************
  2. *** NAME:  PICTBOX.PRG
  3. ***
  4. *** AUTHOR: BRETT FISHBURNE
  5. ***
  6. *** PURPOSE: ALLOW GRAPHIC DRAWING OF MENU BOXES
  7. ***
  8. *****************************************************
  9. PARAMETERS XPOS, YPOS, TILENO
  10.  
  11. *** ESTABLISH ENVIRONMENT
  12. SET ECHO OFF
  13. SET TALK OFF
  14. SET STATUS OFF
  15. SET SCOREBOARD OFF
  16.  
  17. *** INITIALIZE CONSTRAINTS
  18. CLEAR
  19. GoodVals = 'QWEADZXC '+CHR(13)
  20. XINIT = XPOS
  21. YINIT = YPOS
  22. XCORN = 0
  23. YCORN = 0
  24. i = ' '
  25.  
  26. *** DRAW INITIAL BORDER
  27. @ 2,0 TO 2,79 DOUBLE
  28. @ 0,0 TO 21,79 DOUBLE
  29. @ 1,55 SAY TIME()
  30. @ 1,70 SAY DATE()
  31.  
  32. *** SET UP LOOP TO GET THE BOX
  33. DO WHILE (i # CHR(13))
  34.   
  35.   *** WAIT FOR USER RESPONSE
  36.   i = 0
  37.   DO WHILE AT(UPPER(CHR(i)),GoodVals) = 0
  38.     
  39.     *** UPDATE MENU DATA WHILE WAITING
  40.     @ XPOS,YPOS SAY '0'
  41.     i = INKEY()
  42.     @ XPOS,YPOS SAY ' '
  43.     IF XCORN > 0
  44.       @ XCORN,YCORN SAY '+'
  45.     ENDIF
  46.     @ 1,55 SAY TIME()
  47.  
  48.   ENDDO
  49.  
  50.   *** PROCESS KEYSTROKE
  51.   i = UPPER(CHR(i))
  52.   DO CASE
  53.  
  54.     *** MOVE UP-LEFT
  55.     CASE i = 'Q'
  56.       XPOS = XPOS - 1
  57.       YPOS = YPOS - 1
  58.  
  59.     *** MOVE LEFT
  60.     CASE i = 'A'
  61.       YPOS = YPOS - 1
  62.  
  63.     *** MOVE UP-RIGHT
  64.     CASE i = 'E'
  65.       XPOS = XPOS - 1
  66.       YPOS = YPOS + 1
  67.  
  68.     *** MOVE UP
  69.     CASE i = 'W'
  70.       XPOS = XPOS - 1
  71.  
  72.     *** MOVE RIGHT
  73.     CASE i = 'D'      
  74.       YPOS = YPOS + 1
  75.  
  76.     *** MOVE DOWN-LEFT
  77.     CASE i = 'Z'
  78.       XPOS = XPOS + 1
  79.       YPOS = YPOS - 1
  80.  
  81.     *** MOVE DOWN
  82.     CASE i = 'X'
  83.       XPOS = XPOS + 1
  84.  
  85.     *** MOVE DOWN-RIGHT
  86.     CASE i = 'C'
  87.       XPOS = XPOS + 1
  88.       YPOS = YPOS + 1
  89.  
  90.     *** MARK THE SECOND BOX CORNER
  91.     CASE XCORN > 0
  92.  
  93.       *** CHECK IF 2ND IS ABOVE 1ST    
  94.       IF YCORN < YPOS
  95.  
  96.         *** CHECK IF 2ND IS LEFT OF 1ST
  97.         IF XCORN < XPOS
  98.  
  99.           *** DRAW BOX AND SAVE
  100.           @ XCORN,YCORN TO XPOS,YPOS DOUBLE
  101.           REPLACE TILE&TILENO WITH STR(XCORN,2) + ', ' + STR(YCORN,2) +;
  102.                                    ' TO ' + STR(XPOS,2) + ',' + STR(YPOS,2)
  103.  
  104.         ELSE
  105.  
  106.           *** DRAW BOX AND SAVE
  107.           @ XPOS,YCORN TO XCORN,YPOS DOUBLE
  108.           REPLACE TILE&TILENO WITH STR(XPOS,2) + ',' + STR(YCORN,2) +;
  109.                                    ' TO ' + STR(XCORN,2) + ',' + STR(YPOS,2)
  110.  
  111.         ENDIF
  112.  
  113.       ELSE 
  114.  
  115.         *** CHECK IF 2ND IS LEFT OF 1ST        
  116.         IF XCORN < XPOS
  117.  
  118.           *** DRAW BOX AND SAVE
  119.           @ XCORN,YPOS TO XPOS,YCORN DOUBLE
  120.           REPLACE TILE&TILENO WITH STR(XCORN,2) + ',' + STR(YPOS,2) +;
  121.                                    ' TO ' + STR(XPOS,2) + ',' + STR(YCORN,2)
  122.  
  123.         ELSE
  124.  
  125.           *** DRAW BOX AND SAVE
  126.           @ XPOS,YPOS TO XCORN,YCORN DOUBLE
  127.           REPLACE TILE&TILENO WITH STR(XPOS,2) + ',' + STR(YPOS,2) +;
  128.                                    ' TO ' + STR(XCORN,2) + ',' + STR(YCORN,2)
  129.  
  130.         ENDIF
  131.  
  132.       ENDIF
  133.  
  134.       *** REINITIALIZE CORNERS
  135.       XCORN = 0
  136.       YCORN = 0
  137.       XPOS = XINIT
  138.       YPOS = YINIT
  139.  
  140.     OTHERWISE
  141.  
  142.       *** MARK THE FIRST CORNER
  143.       XCORN = XPOS
  144.       YCORN = YPOS
  145.  
  146.   ENDCASE
  147.  
  148.   *** KEEP CURSOR ON SCREEN
  149.   IF XPOS > 20
  150.  
  151.     XPOS = 20
  152.  
  153.   ELSE
  154.  
  155.     IF XPOS < 3
  156.  
  157.       XPOS = 3
  158.  
  159.     ENDIF
  160.  
  161.   ENDIF
  162.  
  163.   IF YPOS > 78
  164.  
  165.     YPOS = 78
  166.  
  167.   ELSE
  168.  
  169.     IF YPOS < 1
  170.  
  171.       YPOS = 1
  172.  
  173.     ENDIF
  174.  
  175.   ENDIF 
  176.  
  177. ENDDO
  178.  
  179. *** RESET ORIGIONAL POSITION
  180. XPOS = XINIT
  181. YPOS = YINIT
  182.  
  183. *** RETURN TO THE CALLING PROGRAM
  184. RETURN