home *** CD-ROM | disk | FTP | other *** search
/ Nibble Magazine / nib29a.dsk / SEPTEMBER.1986 / UNIV.DEMO.bas < prev   
BASIC Source File  |  2023-02-26  |  5KB  |  107 lines

  1. 10  REM  **********************
  2. 20  REM  * UNIV.DEMO          *
  3. 30  REM  * BY DOUGLAS C.      *
  4. 40  REM  * PETERSON           *
  5. 50  REM  * COPYRIGHT 1986 BY  *
  6. 60  REM  * MICROSPARC, INC.   *
  7. 70  REM  * CONCORD, MA  01742 *
  8. 80  REM  **********************
  9. 90  ONERR  GOTO 1040
  10. 100  & : IF (( PEEK(1014) = 3)  AND ( PEEK(1015) = 190))  OR (( PEEK(1014) = 88)  AND ( PEEK(1015) = 255))  THEN  PRINT : PRINT  CHR$(4);"BRUN UNIV.APSFT"
  11. 110  POKE 216,0: GOSUB 880: REM  DO INITIALIZATIONS
  12. 120  GOSUB 200: REM  SET UP MAIN MENU
  13. 130  GOSUB 390: REM  DISPLAY MENU AND GET A SELECTION
  14. 140  IF ESC%  THEN  END 
  15. 150  VTAB 7: PRINT "SELECTION WAS #"AN
  16. 160  IF OA%  THEN  PRINT "HELP WAS REQUESTED"
  17. 170  PRINT "PRESS RETURN TO CONTINUE": &  RETURN 
  18. 180  GOTO 130
  19. 190  END 
  20. 200  REM  **********************
  21. 210  REM  * SET UP MENUS       *
  22. 220  REM  **********************
  23. 230 TITLE$ = "TEST MENU PROGRAM":SUBTITLE$ = "MAIN MENU":FROM$ = "APPLESOFT"
  24. 240 MENU$(1) = "This is the first choice on our menu.  It doesn't do much, but it serves as an example of how to use the Universal Applesoft routines to create professional-looking menus."
  25. 250 MENU$(2) = "This is the second choice."
  26. 260 MENU$(3) = "This is the third choice."
  27. 270 MENU$(4) = "This is the fourth choice."
  28. 280 MENU$(5) = "END"
  29. 290 HELP = 1:FROM$ = "APPLESOFT"
  30. 300  RETURN 
  31. 310  REM 
  32. 320  REM  * Menu maker routines
  33. 330  REM  * Enter with menu items in MENU$(x)
  34. 340  REM  * and "END" in MENU$(x) at end of
  35. 350  REM  * list. Returns selected menu in AN
  36. 360  REM  * OA%<>0 if HELP selected and ok
  37. 370  REM  * ESC%<>0 if ESCAPE pressed and ok
  38. 380  REM 
  39. 390  HOME 
  40. 400 I% = 0:XC% = 0
  41. 410 I% = I% +1: & U(MENU$(I%),TE$): IF TE$ = "END"  THEN 430
  42. 420 XC% = XC% + LEN(MENU$(I%))/(27 +35 *USE80): GOTO 410
  43. 430 NITEMS% = I% -1:SPACING% = (I% +XC%) <10:MARGIN% = 3 +USE80 *6:BLOCK% = MARGIN% +3 +(NITEMS% >9)
  44. 440  REM  **DISPLAY MENU**
  45. 450  &  TEXT (TITLE$): &  AT ( PEEK(33) - LEN(SUBTITLE$) -3,0): &  TEXT (SUBTITLE$): &  AT (0,1): GOSUB 740
  46. 460  PRINT : FOR II = 1 TO NITEMS%
  47. 470 :: &  POS(XC%,YC%): &  AT (MARGIN%,YC%): PRINT II".";: &  SCRN( BLOCK%,( PEEK(33) -BLOCK%),0,24): PRINT 
  48. 480  &  POS(XC%,YC%): &  AT (MARGIN% -3 +(6 *HAS80%),YC% -1): &  TEXT (MENU$(II)): GOSUB 730: PRINT : IF SPACING%  THEN  PRINT 
  49. 490  NEXT 
  50. 500  &  POS(XC%,YC%): IF YC% >16  THEN  PRINT "SCREEN FULL": STOP 
  51. 510  &  AT (0,16):TE$ = "Select Option>": &  TEXT (TE$): PRINT : GOSUB 740
  52. 520  IF  LEN(FROM$)  THEN TE$ = "To quit:   Press <ESC>": &  AT (0,23): &  TEXT (TE$)
  53. 530 TE$ = " To erase: ": IF AIIE%  THEN TE$ = TE$ +" use the DELETE key"
  54. 540  IF   NOT AIIE%  THEN TE$ = TE$ +" use the <-- key"
  55. 550  &  AT (0,21): &  TEXT (TE$)
  56. 560 TE$ = "To select: type a number from 1 to " + STR$(NITEMS%): &  AT (0,19): &  TEXT (TE$):TE$ = " and press <RETURN>": &  AT (10,20): &  TEXT (TE$)
  57. 570 TE$ = " For HELP: ": IF HELP  AND AIIE%  THEN TE$ = TE$ +" follow with OPEN-APPLE ?"
  58. 580  IF HELP  AND   NOT AIIE%  THEN TE$ = TE$ +"follow selection with ?"
  59. 590  IF   NOT HELP  THEN TE$ = "There is no HELP available"
  60. 600  &  AT (0,22): &  TEXT (TE$)
  61. 610  &  AT (16,16): CALL  -868:TE$ = "": &  INPUT (3,TE$,AN$): &  LOAD (OA%,SA%,ESC%): GOSUB 760: IF ESC%  THEN EC% = 0: GOTO 640
  62. 620  IF AN <1  AND EC% < >2  THEN EC% = 3
  63. 630  IF AN >NITEMS%  THEN EC% = 4
  64. 640  IF ESC%  AND   NOT  LEN(FROM$)  THEN EC% = 5
  65. 650  IF SA%  THEN EC% = 6
  66. 660  IF OA%  AND   NOT HELP  THEN EC% = 7
  67. 670  IF OA%  AND HELP  AND (( CHR$(OA%) < >"?")  AND ( CHR$(OA%) < >"/"))  THEN EC% = 8
  68. 680  IF   NOT EC%  THEN  HOME : RETURN 
  69. 690 TE$ = ERR$(EC%): IF EC% = 3  OR EC% = 4  THEN TE$ =  STR$(AN) +TE$
  70. 700  &  AT (0,18): CALL  -868
  71. 710 TE$ = "--> " +TE$ +" <--": &  AT (( PEEK(33) - LEN(TE$))/2,18): &  TEXT (TE$): GOTO 610
  72. 720  RETURN 
  73. 730  &  SCRN( 0,(40 +40 *(USE80 >0)),0,24): RETURN : REM  FULL WINDOW
  74. 740  FOR II = 1 TO  PEEK(33): PRINT "_";: NEXT : RETURN : REM  HORIZONTAL LINE
  75. 750  REM  **CONVERT STRING AN$ TO DIGITS AND FLAG ERRORS IN EC%**
  76. 760 AN = 0:EC% = 0: IF   NOT  LEN(AN$)  THEN EC% = 1: RETURN 
  77. 770  IF  LEN(AN$) >1  AND ( RIGHT$(AN$,1) = "/"  OR  RIGHT$(AN$,1) = "?")  THEN OA% =  ASC("?"):AN$ =  LEFT$(AN$, LEN(AN$) -1)
  78. 780  FOR II = 1 TO  LEN(AN$):TD% =  ASC( MID$ (AN$,II,1)) - ASC("0")
  79. 790  IF TD% <0  OR TD% >9  THEN EC% = 2: RETURN 
  80. 800 AN = 10 *AN +TD%: NEXT : RETURN 
  81. 810  REM 
  82. 820  REM  * Initialization routines
  83. 830  REM  * GOSUB here after installing the
  84. 840  REM  * UNIV.APSFT routines to set up the
  85. 850  REM  * Computer ID variables and turn on the
  86. 860  REM  * 80 column card if desired.
  87. 870  REM 
  88. 880  &  RESTORE : PRINT : &  DATA (AIIE%,HAS80%,VIDEO%,XMEM%)
  89. 890  IF HAS80%  THEN  PRINT : PRINT  CHR$(4)"PR#3":VIDEO% = 1
  90. 900 USE80 = VIDEO%
  91. 910  DIM MENU$(12): DIM ERR$(8)
  92. 920 ERR$(0) = ""
  93. 930 ERR$(1) = ""
  94. 940 ERR$(2) = "Please use digits"
  95. 950 ERR$(3) = " is too small"
  96. 960 ERR$(4) = " is too large"
  97. 970 ERR$(5) = "Nowhere to ESCAPE to"
  98. 980 ERR$(6) = "Don't use SOLID-APPLE"
  99. 990 ERR$(7) = "No HELP is available"
  100. 1000 ERR$(8) = "Please use ? after digits"
  101. 1010  RETURN 
  102. 1020  PRINT  CHR$(21): PRINT  CHR$(13); CHR$(4)"PR#1"
  103. 1030  PRINT  CHR$(9)"80N" CHR$(9)"60P": LIST 0,63699: PRINT  CHR$(13); CHR$(4)"PR#0": END 
  104. 1040 EE =  PEEK(222): POKE 216,0
  105. 1050  HOME : VTAB 7
  106. 1060  IF EE = 6  THEN  PRINT "THIS PROGRAM REQUIRES THAT THE FILE": INVERSE : PRINT "UNIV.APSFT";: NORMAL : PRINT " BE ON THE SAME DISK": END 
  107. 1070  PRINT "I/O ERROR": END