home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / PROG_BAS / PRO98SRC.ZIP / DMXMENU.BAS < prev    next >
BASIC Source File  |  1994-02-01  |  4KB  |  109 lines

  1. SUB DMXMENU (WA as integer, WB as integer, WC  as integer, WD as integer, title$, item$())
  2. IF Global$(4)="" THEN Global$(4)="^C^w^B"
  3. PROZOPRINT GLOBAL$(4)
  4. WA = WA - 1: WB = WB - 1: WC = WC + 1: WD = WD + 1
  5. IF tty THEN
  6.  
  7.     FOR zxy = 0 TO WC - WA
  8.         IF zxy = 0 THEN
  9.                 'PROZOPRINT "*" + STRING$((WD - WB) - 1, "*") + "*" + CrLf$
  10.         ELSEIF zxy = 1 THEN
  11.                 PROZOPRINT title$ + " (" + Global$(1)+")" + CrLf$
  12.         ELSEIF zxy = 2 THEN
  13.                 PROZOPRINT CrLf$
  14.         ELSE
  15.                 PROZOPRINT "  " + LEFT$(item$(zxy - 2) + SPACE$(80), (WD - WB) - 3) + "  " + CrLf$: IF LEN(item$(zxy - 2)) THEN items = items + 1
  16.         END IF
  17.     NEXT zxy
  18.         DO
  19.                 PROZOPRINT "Select (1-" + MID$(STR$(items), 2) + ") --> "
  20.                 value$=PROZOINPUT$
  21.                 if ucase$(value$)="X" then value$="0":exit do
  22.                 if value$="" then value$="0": exit do
  23.                 v = VAL(Value$)
  24.         IF v <= items AND v > 0 THEN EXIT DO
  25.         LOOP
  26.                 PUSHARG Value$
  27.     ' items = max value
  28.  
  29.  
  30. ELSE
  31.         IF LEN(Global$(4)) THEN PROZOPRINT Global$(4)
  32.     FOR zxy = 0 TO WC - WA
  33.         A$ = CHR$(27) + "[" + MID$(STR$(WA + zxy), 2) + ";" + MID$(STR$(WB), 2) + "f"
  34.         IF zxy < 3 THEN
  35.                 PROZOPRINT A$ + CHR$(186) + SPACE$((WD - WB) - 1) + CHR$(186)
  36.         ELSE
  37.         ansipos$ = CHR$(27) + "[" + MID$(STR$(WA + zxy), 2) + ";" + MID$(STR$(WB + 3), 2) + "f"
  38.                 PROZOPRINT A$ + CHR$(186) + "  " + LEFT$(item$(zxy - 2) + SPACE$(80), (WD - WB) - 3) + CHR$(186): IF LEN(item$(zxy - 2)) THEN items = items + 1: item$(zxy - 2) = ansipos$ + item$(zxy - 2)
  39.         END IF
  40.     NEXT zxy
  41.  
  42.  
  43. '***PROZOPRINT the window corners
  44. PROZOLOCATE WA, WB
  45. PROZOPRINT CHR$(201)
  46. PROZOLOCATE WA, WD
  47. PROZOPRINT CHR$(187)
  48. PROZOLOCATE WC, WB
  49. PROZOPRINT CHR$(200)
  50. PROZOLOCATE WC, WD
  51. PROZOPRINT CHR$(188)
  52. PROZOLOCATE WA, WB + 1
  53. ' PROZOPRINT the window top and bottom
  54. PROZOPRINT STRING$((WD - WB) - 1, 205)
  55. PROZOLOCATE WC, WB + 1
  56. PROZOPRINT STRING$((WD - WB) - 1, 205)
  57. PROZOLOCATE WA, WB + 1
  58. PROZOPRINT "^0^B^b[" + Global$(1) + "]^0^B" + Global$(4)
  59.  
  60. '***PROZOPRINT the menu title
  61. IF LEN(Title$) THEN
  62. PROZOLOCATE WA+1, WB + (INT((WD - WB) / 2) - INT(LEN(title$) / 2))
  63. PROZOPRINT title$
  64. END IF
  65. item = 1
  66. Redrawbox:
  67. Redrawflag%=0
  68. Ten#=TIMER+10
  69. Prick#=TIMER+50
  70. Dropout#=TIMER+300
  71. dO
  72. PROZOPRINT " ^0^I^B" + item$(item)
  73. Value$ = ""
  74. DO WHILE Value$ = ""
  75. Value$=PROZOINKEY$
  76. $IF NOT %NOTASKS
  77. CALL TASKMAN
  78. $ENDIF
  79. REM FORK WENT HERE
  80. IF Value$ = CHR$(13) OR Value$ = CHR$(3) OR UCASE$(Value$)="X" THEN EXIT DO
  81. IF Value$="G" OR Value$=CHR$(7) THEN GoFlag%=-1:EXIT DO
  82. IF INSTR("X0123456789ABCD+- "+CHR$(13), Value$) = 0 THEN Value$ = ""
  83. if comline and direct$="" then
  84.   IF Timer > Ten# THEN LET Ten# = TIMER + 10:IF OLM% AND Value$="" THEN CALL GETOLM:LET Prick# = TIMER + 50:LET DropOut#=Timer+300:Redrawflag%=-1
  85.   IF Timer > Prick# THEN LET Prick#=Timer + 50:PROZOPRINT CHR$(7)
  86.   IF TIMER > dropout# OR TIMER > UserTime# THEN PROZOPRINT CHR$(7): CALL TIMEOUT:Redrawflag%=-1
  87. end if
  88. LOOP
  89. IF Redrawflag% THEN GOTO Redrawbox
  90. IF  GoFlag% THEN EXIT DO
  91. IF Value$=CHR$(13) OR Value$ = CHR$(3) OR UCASE$(Value$)="X" THEN EXIT DO
  92. IF val(Value$)>0 and val(value$)<items+1 then CALL PROZOPRINT("^0^B" + Global$(4) + item$(item)):item=val(value$):PROZOPRINT " ^0^I^B" + item$(item):exit do
  93. CALL PROZOPRINT("^0^B" + Global$(4) + item$(item))
  94. IF VAL(Value$) THEN item = VAL(Value$): IF item > items THEN item = 1
  95. CALL PROZOPRINT("^0^B" + Global$(4) + item$(item))
  96. IF INSTR(" +B", Value$) THEN item = item + 1 ELSE IF INSTR("-A", Value$) THEN item = item - 1 ELSE xtries = xtries + 1: IF xtries > 50 THEN CALL SYSRESET
  97. IF item = 0 THEN item = items
  98. IF item > items THEN item = 1
  99. LOOP
  100. IF GoFlag% THEN CALL GETGO:IF GoFlag%=0 THEN GOTO RedrawBox
  101. IF UCASE$(Value$) = "X" THEN item = 0
  102. IF Value$ = CHR$(3) THEN CALL SYSRESET
  103. PUSHARG MID$(STR$(item), 2)
  104.  
  105. END IF
  106. FOR q = 1 TO items: LET item$(q) = "": NEXT q
  107. END SUB
  108.  
  109.