home *** CD-ROM | disk | FTP | other *** search
/ Frostbyte's 1980s DOS Shareware Collection / floppyshareware.zip / floppyshareware / GLEN / NRFACE.ZIP / IPDEMO.BAS < prev    next >
BASIC Source File  |  1990-05-08  |  55KB  |  2,745 lines

  1. DEFINT A-Z
  2. DIM drive$(8)
  3. '============================== Define Types ================================
  4. '======Needed for mouse, memory size, and screen print
  5.  
  6.  
  7. TYPE register              'for CALL INTERRUPT
  8.      ax    AS INTEGER
  9.      bx    AS INTEGER
  10.      cx    AS INTEGER
  11.      dx    AS INTEGER
  12.      bp    AS INTEGER
  13.      si    AS INTEGER
  14.      di    AS INTEGER
  15.      flags AS INTEGER
  16.      ds    AS INTEGER
  17.      es    AS INTEGER
  18. END TYPE
  19. DIM regs AS register
  20.  
  21.  
  22. '===================== Declare Procedures and Functions =====================
  23.  
  24. DECLARE SUB MouseBar.Menu (sel, sel$(), fg, bg, pchar, msg$, topline, submenu, mouse$)
  25. DECLARE SUB Interrupt (intnum AS INTEGER, inreg AS register, outreg AS register)
  26. DECLARE SUB MouseDriver (m0%, m1%, m2%, m3%)
  27. DECLARE SUB MouseInit (mouse$)
  28. DECLARE SUB MouseOn ()
  29. DECLARE SUB MouseOff ()
  30. DECLARE SUB MouseGetInfo (mousex, mousey, isbutton$, mouse$, a$)
  31. DECLARE SUB MakeBox (title$, uly, ulx, bwide, bhigh, linesty, fg, bg, pchar)
  32. DECLARE SUB MoveMouse (mmousey, mmousex)
  33. DECLARE SUB SetMemDta (memdta$)
  34. DECLARE SUB FirstFile (filespec$, filename$)
  35. DECLARE SUB NextFile (filename$)
  36. DECLARE SUB MakeName (fullname$)
  37. DECLARE SUB WhatKey (keypress$)
  38. DECLARE SUB WaitaBit (hold!)
  39. DECLARE SUB GetVer (version)
  40.  
  41.  
  42. '=========================== Main Control Program ===========================
  43.  
  44. 'Initialization routine -- runs only once
  45.  
  46. '====================DO NOT REMOVE THIS LINE!=============================
  47. IFaceCopyRight$ = "Interface Plus -- Copyright 1990 by George Campbell"
  48. '=====IT MUST BE IN ALL PROGRAMS USING THIS INTERFACE --NEVER DISPLAYS====
  49.  
  50.  
  51. DIM sel$(7, 10)
  52. ON ERROR GOTO GetError
  53. GOSUB ParseCommandLine
  54. GOSUB GetEnvir
  55. GOSUB GetConfig
  56. GOSUB ColorInit
  57. GOSUB GetOldDir
  58. GOSUB ScreenTest
  59. GOSUB MemSize
  60. CALL GetVer(version)
  61.  
  62. '=====SEE THE DOCS REGARDING THE DRIVETEST ROUTINE, WHICH
  63. '=====MAY LEAVE FILES BEHIND ON SOME LOGICAL DRIVES. NO
  64. '=====HARM IS DONE BY THESE FILES, BUT YOU MAY DECIDE TO
  65. '=====ELIMINATE THIS ROUTINE FROM YOUR PROGRAMS. I HAVE
  66. '=====REMMED THEM OUT.
  67. REM GOSUB InputBox
  68. REM LOCATE 16, 24
  69. REM PRINT "Setting up .... Please wait!"
  70. REM GOSUB DriveTest
  71.  
  72. CALL MouseInit(mouse$)
  73.  
  74. '=====Random Shareware Screen Displayer
  75. RANDOMIZE TIMER
  76. x = INT(RND * 4) + 1
  77. IF x = 2 THEN GOSUB ShareInfo
  78.  
  79. '=====Starts the menu presentation.  GOTOs in the SELECT CASE
  80. '=====sections return to this point.
  81.  
  82. BEGIN:
  83. WIDTH 80
  84. a$ = ""
  85. generrorflag = 0
  86. isbutton$ = ""
  87.  
  88. '====== Define the Main Menu titles
  89. '====== Should have different first letters
  90. '====== You can include more main entries, but you must change
  91. '====== the DIM sel() line above to add.
  92.  
  93. sel$(0, 0) = " F)ile  "
  94. sel$(1, 0) = " P)rinter  "
  95. sel$(2, 0) = " E)xamples  "
  96. sel$(3, 0) = " S)etup  "
  97. sel$(4, 0) = " T)ools  "
  98. sel$(5, 0) = " D)emos  "
  99. sel$(6, 0) = " H)elp  "
  100.  
  101. '===== Define Help messages for line 25
  102. '======Up to 80 characters -- truncates if longer
  103.  
  104. sel$(0, 10) = "Perform file and DOS operations"
  105. sel$(1, 10) = "Printer control tools"
  106. sel$(2, 10) = "Examples of Interface Plus Power"
  107. sel$(3, 10) = "Set Program parameters and defaults"
  108. sel$(4, 10) = "More Interface Plus demos"
  109. sel$(5, 10) = "Demonstrate Interface Plus tools"
  110. sel$(6, 10) = "Help with this program"
  111.  
  112. '===== Define Submenu titles For  "File" (0,0)
  113.  
  114. sel$(0, 1) = " Display directory of files " + "[" + UCASE$(newdir$) + "]"
  115.     IF newmask$ = "" AND version > 2 THEN mask$ = "*.*"
  116.     IF newmask$ = "" AND version < 3 THEN mask$ = "????????.???"
  117.     IF NOT newmask$ = "" THEN mask$ = newmask$
  118. sel$(0, 2) = " Select file mask " + "[" + UCASE$(mask$) + "]"
  119. sel$(0, 3) = " Change directory "
  120. sel$(0, 4) = " Select A File " + "[" + RTRIM$(filechoice$) + "]"
  121. sel$(0, 5) = " This Space Available"
  122. sel$(0, 6) = " Shell to DOS "
  123. sel$(0, 7) = " Quit program "
  124. sel$(0, 8) = ""
  125.  
  126. '===== Define Submenu titles For  "Printer" (1,0)
  127.  
  128. sel$(1, 1) = " This Space Available"
  129. sel$(1, 2) = " Send Formfeed to printer "
  130. sel$(1, 3) = " Send Reset to printer "
  131. sel$(1, 4) = " This space available "
  132. sel$(1, 5) = " This space available "
  133. sel$(1, 6) = " Print the screen "
  134. sel$(1, 7) = " This space available"
  135. sel$(1, 8) = ""
  136.  
  137. '==== Define Submenu titles for "Examples" (2,0)
  138.  
  139. sel$(2, 1) = " Demo of Menu Intelligence"
  140. sel$(2, 2) = " Demo Mouse Positioning"
  141. sel$(2, 3) = " This Space available"
  142. sel$(2, 4) = " This Space available"
  143. sel$(2, 5) = " This Space available"
  144. sel$(2, 6) = " This Space Available"
  145. sel$(2, 7) = " This Space available"
  146. sel$(2, 8) = ""
  147.  
  148. 'Define Submenu titles for "Setup" (3,0)
  149.  
  150. sel$(3, 1) = " This Space available"
  151. sel$(3, 2) = " This Space available"
  152. sel$(3, 3) = " This Space available"
  153. sel$(3, 4) = " Set screen colors"
  154. sel$(3, 5) = " This Space available"
  155. sel$(3, 6) = " Save configuration (becomes default)"
  156. sel$(3, 7) = " Delete old configuration file"
  157. sel$(3, 8) = ""
  158.  
  159. 'Define Submenu titles for "Tools" (4,0)
  160.  
  161. sel$(4, 1) = " GETFILES"
  162. sel$(4, 2) = " What Interface PLUS Knows"
  163. sel$(4, 3) = " Demo Key Identification Routine"
  164. sel$(4, 4) = " This Space available"
  165. sel$(4, 5) = " This Space available"
  166. sel$(4, 6) = " This Space available"
  167. sel$(4, 7) = " Back to Intelligent Menu Demo"
  168. sel$(4, 8) = ""
  169.  
  170. 'Define Submenu titles for "Demos" (5,0)
  171.  
  172. sel$(5, 1) = " Demo MakeBox SUB"
  173. sel$(5, 2) = " Demo ASCII File Display "
  174. sel$(5, 3) = " Registration Information "
  175. sel$(5, 4) = " Display System Memory"
  176. sel$(5, 5) = " Demo moveable Y/N button"
  177. sel$(5, 6) = " Demo fixed Y/N button"
  178. sel$(5, 7) = " Demo moveable OK button"
  179. sel$(5, 8) = ""
  180.  
  181. 'Define Submenu titles for "Help" (6,0)
  182.  
  183. sel$(6, 1) = " Command line options "
  184. sel$(6, 2) = " Read manual "
  185. sel$(6, 3) = " This Space available"
  186. sel$(6, 4) = " This Space available"
  187. sel$(6, 5) = " This Space available"
  188. sel$(6, 6) = " This Space available"
  189. sel$(6, 7) = " This Space available"
  190. sel$(6, 8) = ""
  191.  
  192. '===== Define Top Row Message
  193.  
  194. msg$ = "╡ Use Mouse/Cursor/Letter/Number Keys To Make Selections ╞"
  195.  
  196.  
  197. '===== Make Call to MouseBar.Menu and Restart Selection Routine========
  198.  
  199.  
  200. MoveMouse mmousey + 1, mmousex + 1
  201. IF mmousey = 0 THEN
  202.     MoveMouse 12, 40
  203. END IF
  204. REM KEY(1) OFF
  205. CALL MouseBar.Menu(sel, sel$(), fg, bg, pchar, msg$, topline, submenu, mouse$)
  206.  
  207. '===== Do the desired Selection
  208.  
  209.  
  210. MouseOff
  211. '===== The next set of routines are the calls to your routines,
  212. '===== based on the choice made in MouseBar.Menu.
  213.      
  214.       SELECT CASE sel
  215.  
  216.  
  217.          CASE 1
  218. GOSUB GetFiles
  219. topline = 0
  220. submenu = 1
  221. GOTO BEGIN
  222.  
  223.          CASE 2
  224. GOSUB GetMask
  225. help$ = "MASK"
  226. topline = 0
  227. submenu = 1
  228. GOTO BEGIN
  229.         
  230.          CASE 3
  231. GOSUB GetDir
  232. topline = 0
  233. submenu = 1
  234. GOTO BEGIN
  235.  
  236.  
  237.          CASE 4
  238. chooseone$ = "Y"
  239. GOSUB GetFiles
  240. topline = 0
  241. submenu = 1
  242. GOTO BEGIN
  243.  
  244.  
  245.          CASE 5
  246. topline = 0
  247. submenu = 1
  248. GOSUB OkButton
  249. GOTO BEGIN
  250.  
  251.          CASE 6
  252. GOSUB ShellOut
  253. topline = 0
  254. submenu = 1
  255. GOTO BEGIN
  256.  
  257.          CASE 7
  258. GOSUB InputBox
  259. LOCATE 16, 12
  260. PRINT "Are you sure you want to quit (Y/N)? ";
  261. LOCATE 18, 12
  262. PRINT "Press Y or N or click with mouse."
  263. GOSUB YesNoButton
  264. IF NOT response$ = "Y" THEN
  265.     topline = 0
  266.     submenu = 1
  267.     GOTO BEGIN
  268. END IF
  269. COLOR fg, bg
  270. GOSUB quit
  271. CLS
  272. END
  273.            
  274.  
  275.     CASE 11
  276. topline = 0
  277. submenu = 1
  278. GOSUB OkButton
  279. GOTO BEGIN
  280.  
  281.  
  282.     CASE 12
  283. ON ERROR GOTO noprint
  284. LPRINT CHR$(12)
  285. ON ERROR GOTO 0
  286. topline = 0
  287. submenu = 1
  288. GOTO BEGIN
  289.  
  290.     CASE 13
  291. ON ERROR GOTO noprint
  292. LPRINT reset$
  293. ON ERROR GOTO 0
  294. topline = 0
  295. submenu = 1
  296. GOSUB OkButton
  297. GOTO BEGIN
  298.  
  299.     CASE 14
  300. topline = 0
  301. submenu = 1
  302. GOSUB OkButton
  303. GOTO BEGIN
  304.  
  305.     CASE 15
  306. topline = 0
  307. submenu = 1
  308. GOSUB OkButton
  309. GOTO BEGIN
  310.  
  311.     CASE 16
  312. topline = 0
  313. submenu = 1
  314. CALL Interrupt(5, regs, regs)
  315. 'below needed only for HPLJ
  316. LPRINT CHR$(12)
  317. GOTO BEGIN
  318.  
  319.     CASE 17
  320. topline = 0
  321. submenu = 1
  322. GOSUB OkButton
  323. GOTO BEGIN
  324.  
  325.     CASE 21
  326. topline = 4
  327. submenu = 7
  328. mmousey = 11
  329. mmousex = 40
  330. GOSUB InputBox
  331. LOCATE 16, 12
  332. PRINT "This interface has intelligence. You supply"
  333. LOCATE 17, 12
  334. PRINT "jump points to the next logical menu item."
  335. LOCATE 18, 12
  336. PRINT "Click [OK] for a demo."
  337. GOSUB OkButton
  338. GOTO BEGIN
  339.  
  340.     CASE 22
  341. topline = 0
  342. submenu = 1
  343. GOSUB InputBox
  344. LOCATE 16, 12
  345. PRINT "Interface Plus can position the mouse cursor anywhere"
  346. LOCATE 17, 12
  347. PRINT "you like. You simply supply screen coordinates. WATCH!"
  348. LOCATE 18, 12
  349. PRINT "Moving mouse cursor to coordinates:"
  350. COLOR fg, bg
  351. MouseOn
  352. FOR x = 15 TO 60
  353.     MoveMouse 15, x
  354.     LOCATE 18, 48
  355.     PRINT 15, x
  356. NEXT
  357. GOSUB OkButton
  358. GOTO BEGIN
  359.  
  360.  
  361.     CASE 23
  362. topline = 0
  363. submenu = 1
  364. GOSUB OkButton
  365. GOTO BEGIN
  366.  
  367.     CASE 24
  368. topline = 0
  369. submenu = 1
  370. GOSUB OkButton
  371. GOTO BEGIN
  372.  
  373.     CASE 25
  374. topline = 0
  375. submenu = 1
  376. GOSUB OkButton
  377. GOTO BEGIN
  378.        
  379.     CASE 26
  380. topline = 0
  381. submenu = 1
  382. GOSUB OkButton
  383. GOTO BEGIN
  384.  
  385.     CASE 27
  386. topline = 0
  387. submenu = 1
  388. GOSUB OkButton
  389. GOTO BEGIN
  390.  
  391.     CASE 31
  392. topline = 0
  393. submenu = 1
  394. GOSUB OkButton
  395. GOTO BEGIN
  396.  
  397.     CASE 32
  398. topline = 0
  399. submenu = 1
  400. GOSUB OkButton
  401. GOTO BEGIN
  402.  
  403.     CASE 33
  404. topline = 0
  405. submenu = 1
  406. GOSUB OkButton
  407. GOTO BEGIN
  408.  
  409.     CASE 34
  410. GOSUB ColorSet
  411. topline = 0
  412. submenu = 1
  413. GOTO BEGIN
  414.  
  415.     CASE 35
  416. topline = 0
  417. submenu = 1
  418. GOSUB OkButton
  419. GOTO BEGIN
  420.  
  421.     CASE 36
  422.  
  423. 'It's up to you to establish the variables you want to save in a file.
  424. 'I like to keep my color data in a separate file. This command should
  425. 'be used to save other setup data.  I suggest a subroutine call here to
  426. 'go to your data saving routine.
  427.  
  428. GOSUB InputBox
  429. LOCATE 16, 12
  430. PRINT "This saves a special configuration. You should test"
  431. LOCATE 17, 12
  432. PRINT "your figures thoroughly before saving."
  433. LOCATE 18, 12
  434. PRINT "Press or click on Y to save....any other to exit"
  435. GOSUB YesNoButton
  436. saveit$ = response$
  437. IF UCASE$(saveit$) = "Y" THEN
  438.     LOCATE 18, 12
  439.     PRINT "File would be saved here"
  440. END IF
  441. topline = 0
  442. submenu = 1
  443. MouseOff
  444. GOTO BEGIN
  445.  
  446.     CASE 37
  447. 'Be sure to choose a new name for config file
  448.            
  449. GOSUB InputBox
  450. LOCATE 16, 12
  451. PRINT "Delete old configuration (Y/N)? ";
  452. LOCATE 16, 12
  453. PRINT "Press or click Y to delete -- any other aborts"
  454. GOSUB YesNoButton
  455. ON ERROR GOTO nofile
  456. IF response$ = "Y" THEN
  457.     kil$ = envpath$ + "IFACE.CFG"
  458.     KILL kil$
  459. END IF
  460.  
  461. finished:
  462. topline = 0
  463. submenu = 1
  464. ON ERROR GOTO 0
  465. MouseOff
  466. GOTO BEGIN
  467.  
  468. nofile:
  469. GOSUB InputBox
  470. LOCATE 16, 12
  471. PRINT "No configuration file found...."
  472. LOCATE 17, 12
  473. PRINT "Click OK or press a key to continue"
  474. GOSUB OkButton
  475. RESUME finished
  476.  
  477.     CASE 41
  478. topline = 0
  479. submenu = 1
  480. GOSUB GetFiles
  481. oky = 20
  482. okx = 75
  483. GOTO BEGIN
  484.  
  485.     CASE 42
  486. topline = 0
  487. submenu = 1
  488. GOSUB ShowStuff
  489. GOTO BEGIN
  490.  
  491.  
  492.     CASE 43
  493. topline = 0
  494. submenu = 1
  495. GOSUB InputBox
  496.  
  497. begincheck:
  498.  
  499. keypress$ = INKEY$
  500. WhatKey keypress$
  501. LOCATE 16, 12
  502. PRINT "This routine identifies special and Function keys"
  503. LOCATE 17, 12
  504. PRINT "You pressed: ";
  505. IF NOT keypress$ = "" THEN PRINT keypress$; "        ";
  506. LOCATE 18, 12
  507. PRINT "Press any key for demo or <Alt>-<F10> to exit"
  508. IF NOT keypress$ = "AF10" THEN GOTO begincheck
  509. GOTO BEGIN
  510.  
  511.     CASE 44
  512. topline = 0
  513. submenu = 1
  514. GOSUB OkButton
  515. GOTO BEGIN
  516.  
  517.     CASE 45
  518. topline = 0
  519. submenu = 1
  520. GOSUB OkButton
  521. GOTO BEGIN
  522.  
  523.     CASE 46
  524. topline = 0
  525. submenu = 1
  526. GOSUB OkButton
  527. GOTO BEGIN
  528.  
  529.     CASE 47
  530. topline = 2
  531. submenu = 1
  532. mmousey = 5
  533. mmousex = 19
  534. GOSUB InputBox
  535. LOCATE 16, 12
  536. PRINT "See...when you finished with one operation, the"
  537. LOCATE 17, 12
  538. PRINT "program took you to the next logical operation."
  539. LOCATE 18, 12
  540. PRINT "Now...click [OK] to go back to the original."
  541. GOSUB OkButton
  542. GOTO BEGIN
  543.  
  544.     CASE 51
  545. topline = 0
  546. submenu = 1
  547. MakeBox "BoxTest", 6, 6, 31, 10, 2, 15, 0, pchar
  548. LOCATE 8, 7
  549. PRINT "These boxes are sizable."
  550. LOCATE 9, 7
  551. PRINT "You control:"
  552. LOCATE 10, 7
  553. PRINT "Size, Position, Borders,"
  554. LOCATE 11, 7
  555. PRINT "Color, and more."
  556. LOCATE 14, 7
  557. PRINT "Click [OK] for more!"
  558. oky = 18
  559. okx = 18
  560. GOSUB MoveOkButton
  561. MakeBox "Another Box", 17, 1, 80, 6, 1, 15, 4, pchar
  562. LOCATE 19, 6
  563. PRINT "You can do just about anything you want"
  564. LOCATE 20, 6
  565. PRINT "With these boxes.  They're a valuable tool"
  566. LOCATE 21, 6
  567. PRINT "For your programs.  It's easy!"
  568. oky = 18
  569. okx = 60
  570. GOSUB MoveOkButton
  571. GOTO BEGIN
  572.  
  573.     CASE 52
  574. GOSUB InputBox
  575. LOCATE 18, 12
  576. IF filechoice$ <> "" THEN
  577. PRINT "Press <Enter> to view: "; filechoice$
  578. LOCATE 17, 12
  579. PRINT "         -or-"
  580. END IF
  581. LOCATE 16, 12
  582. INPUT "Enter a filename to view: ", ViewFile$
  583. IF ViewFile$ = "" THEN ViewFile$ = filechoice$
  584. GOSUB ViewFile
  585. GOSUB InputBox
  586. LOCATE 16, 12
  587. PRINT "The Viewfile routine is one-way, moving down"
  588. LOCATE 17, 12
  589. PRINT "Through the file -- intended for a quick look."
  590. LOCATE 18, 12
  591. PRINT "Filename is stored in viewfile$"
  592. GOSUB OkButton
  593. GOTO BEGIN
  594.  
  595.  
  596.     CASE 53
  597. 'Demo of using the MakeBox routine with text
  598. GOSUB ShareInfo
  599. topline = 0
  600. submenu = 1
  601. GOTO BEGIN
  602.  
  603.     CASE 54
  604. 'DEMO of routine to get system memory
  605.  
  606. topline = 0
  607. submenu = 1
  608. GOSUB MemSize
  609. GOSUB InputBox
  610. LOCATE 16, 12
  611. PRINT "This routine gets total system memory"
  612. LOCATE 18, 12
  613. PRINT "TOTAL MEMORY IS: "; sizeram; "K"
  614. GOSUB OkButton
  615. GOTO BEGIN
  616.  
  617.     CASE 55
  618. 'Demo of moveable Yes/No button
  619. topline = 0
  620. submenu = 1
  621. ynoy = 6
  622. ynox = 34
  623. GOSUB InputBox
  624. LOCATE 17, 12
  625. PRINT "This routine accepts a mouse click or keystroke"
  626. LOCATE 18, 12
  627. PRINT "Button may be placed anywhere on screen."
  628. GOSUB MoveYesNoButton
  629. LOCATE 16, 27
  630. PRINT "Response$ returned: ";
  631. COLOR bg, fg
  632. PRINT " "; response$; " "
  633. COLOR fg, bg
  634. GOSUB OkButton
  635. GOTO BEGIN
  636.  
  637.     CASE 56
  638. '=====Demonstrates call to fixed Y/N button
  639. MouseOff
  640. topline = 0
  641. submenu = 1
  642. GOSUB InputBox
  643. LOCATE 17, 12
  644. PRINT "GOSUB YesNoButton to get a user confirmation"
  645. LOCATE 18, 12
  646. PRINT "Y or N returned in response$ by click or keypress"
  647. GOSUB YesNoButton
  648. LOCATE 16, 30
  649. PRINT "RESPONSE WAS: ";
  650. COLOR bg, fg
  651. PRINT " "; response$; " "
  652. COLOR fg, bg
  653. GOSUB OkButton
  654.            
  655. 'INSERT ACTION HERE. RESPONSE$ CAN BE 'Y' 'N' OR NUL
  656.         GOTO BEGIN
  657.  
  658.     CASE 57
  659. topline = 0
  660. submenu = 1
  661. 'define upper left corner
  662. oky = 10
  663. okx = 20
  664. GOSUB InputBox
  665. LOCATE 16, 12
  666. PRINT "This OK button can be placed anywhere on screen,"
  667. LOCATE 17, 12
  668. PRINT "including inside moveable boxes. RETURN on keypress"
  669. LOCATE 18, 12
  670. PRINT "or mouse click on button."
  671. GOSUB MoveOkButton
  672. GOTO BEGIN
  673.  
  674.  
  675.     CASE 61
  676.  
  677. GOSUB InputBox
  678. LOCATE 16, 12
  679. PRINT "Interface PLUS has a command line parser, which can read"
  680. LOCATE 17, 12
  681. PRINT "3 parameters or you can add more.  Current parameters:"
  682. LOCATE 18, 12
  683. PRINT command1$, command2$, command3$
  684. GOSUB OkButton
  685. topline = 0
  686. submenu = 1
  687. MouseOff
  688. GOTO BEGIN
  689.  
  690.  
  691.     CASE 62
  692.  
  693. readit$ = envpath$ + "IFACE.COM"
  694. COLOR fg, bg
  695. CLS
  696. SHELL readit$
  697. topline = 0
  698. submenu = 1
  699. GOTO BEGIN
  700.  
  701.     CASE 63
  702. topline = 0
  703. submenu = 1
  704. GOSUB OkButton
  705. GOTO BEGIN
  706.  
  707.     CASE 64
  708. topline = 0
  709. submenu = 1
  710. GOSUB OkButton
  711. GOTO BEGIN
  712.  
  713.     CASE 65
  714. topline = 0
  715. submenu = 1
  716. GOSUB OkButton
  717. GOTO BEGIN
  718.  
  719.     CASE 66
  720. topline = 0
  721. submenu = 1
  722. GOSUB OkButton
  723. GOTO BEGIN
  724.  
  725.     CASE 67
  726. topline = 0
  727. submenu = 1
  728. GOSUB OkButton
  729. GOTO BEGIN
  730.         
  731.  
  732.  
  733.     CASE ELSE
  734.  
  735. topline = 0
  736. submenu = 1
  737. GOTO BEGIN
  738.  
  739. END SELECT
  740.  
  741. 'PLACE ALL GOSUB SUBROUTINES BELOW THIS LINE!
  742. '============================================================
  743.  
  744. DriveTest:
  745.  
  746. '===== Checks for available disk drives
  747. ON ERROR GOTO driverror
  748.  
  749. atest:
  750. flag = 0
  751. OPEN "A:~test~.tst" FOR OUTPUT AS #1
  752. IF flag = 1 THEN GOTO btest
  753. drive$(1) = "Y"
  754. CLOSE #1
  755. KILL "a:~test~.tst"
  756.  
  757. btest:
  758. flag = 0
  759. OPEN "B:~test~.tst" FOR OUTPUT AS #1
  760. IF flag = 1 THEN GOTO ctest
  761. drive$(2) = "Y"
  762. CLOSE #1
  763. KILL "B:~test~.tst"
  764.  
  765. ctest:
  766. flag = 0
  767. OPEN "C:~test~.tst" FOR OUTPUT AS #1
  768. IF flag = 1 THEN GOTO dtest
  769. drive$(3) = "Y"
  770. CLOSE #1
  771. KILL "C:~test~.tst"
  772.  
  773. dtest:
  774. flag = 0
  775. OPEN "D:~test~.tst" FOR OUTPUT AS #1
  776. IF flag = 1 THEN GOTO etest
  777. drive$(4) = "Y"
  778. CLOSE #1
  779. KILL "D:~test~.tst"
  780.  
  781. etest:
  782. flag = 0
  783. OPEN "E:~test~.tst" FOR OUTPUT AS #1
  784. IF flag = 1 THEN GOTO ftest
  785. drive$(5) = "Y"
  786. CLOSE #1
  787. KILL "E:~test~.tst"
  788.  
  789. ftest:
  790. flag = 0
  791. OPEN "f:~test~.tst" FOR OUTPUT AS #1
  792. IF flag = 1 THEN GOTO gtest
  793. drive$(6) = "Y"
  794. CLOSE #1
  795. KILL "f:~test~.tst"
  796.  
  797. gtest:
  798. flag = 0
  799. OPEN "g:~test~.tst" FOR OUTPUT AS #1
  800. IF flag = 1 THEN GOTO htest
  801. drive$(7) = "Y"
  802. CLOSE #1
  803. KILL "f:~test~.tst"
  804.  
  805. htest:
  806. flag = 0
  807. OPEN "h:~test~.tst" FOR OUTPUT AS #1
  808. IF NOT flag = 1 THEN
  809.     drive$(8) = "Y"
  810. END IF
  811. CLOSE #1
  812. KILL "f:~test~.tst"
  813.  
  814. RETURN
  815.  
  816. driverror:
  817. flag = 1
  818. RESUME NEXT
  819.  
  820. ParseCommandLine:
  821.  
  822. '===== You can add additional parameters by simply copying the
  823. '===== IF...END IF blocks, changing the variables.
  824.  
  825. command1$ = LEFT$(COMMAND$, INSTR(COMMAND$, " "))
  826. IF INSTR(COMMAND$, " ") = 0 THEN
  827. command1$ = COMMAND$
  828.     RETURN
  829. END IF
  830. remainder$ = MID$(COMMAND$, (INSTR(COMMAND$, " ") + 1))
  831. command2$ = LEFT$(remainder$, INSTR(remainder$, " "))
  832. IF INSTR(remainder$, " ") = 0 THEN
  833.     command2$ = remainder$
  834.     RETURN
  835. END IF
  836. remainder$ = MID$(remainder$, (INSTR(remainder$, " ") + 1))
  837. command3$ = LEFT$(remainder$, INSTR(remainder$, " "))
  838. IF INSTR(remainder$, " ") = 0 THEN
  839.     command3$ = remainder$
  840.     RETURN
  841. END IF
  842. RETURN
  843.  
  844.  
  845.  
  846. GetMask:
  847.  
  848. '=====Since the INTERRUPT call here is version specific, you must
  849. '=====keep the DOS 2.x stuff in here.
  850.            
  851. GOSUB InputBox
  852. IF version > 2 THEN
  853.     COLOR fg, bg
  854.     LOCATE 18, 12
  855.     PRINT "Use normal DOS wildcards (? and *)..."
  856.     LOCATE 17, 12
  857.     PRINT "Press <Enter> for *.* default."
  858.     LOCATE 16, 12
  859.     INPUT ; "Enter new file mask: ", newmask$
  860. END IF
  861. IF version < 3 THEN
  862.     COLOR fg, bg
  863.     LOCATE 18, 12
  864.     PRINT "Use only the '?' wildcard for DOS 2.x"
  865.     LOCATE 17, 12
  866.     PRINT "Press <Enter> for ????????.??? default"
  867.     LOCATE 16, 12
  868.     INPUT ; "Enter new file mask: ", newmask$
  869.     IF INSTR(newmask$, "*") THEN GOTO GetMask
  870. END IF
  871. RETURN
  872.  
  873.  
  874. GetDir:
  875. newdir$ = ""
  876. GOSUB InputBox
  877. ON ERROR GOTO direrr
  878. COLOR fg, bg
  879. LOCATE 18, 12
  880. PRINT "Include drive information if needed..."
  881. LOCATE 17, 12
  882. PRINT "Press <Enter> for "; originaldir$
  883. LOCATE 16, 12
  884. INPUT ; "Enter new directory: ", newdir$
  885. newdir$ = UCASE$(newdir$)
  886. IF newdir$ = "" THEN
  887.     newdir$ = olddir$
  888.     GOTO BEGIN
  889. END IF
  890. IF NOT LEN(newdir$) = 3 THEN
  891.     IF RIGHT$(newdir$, 1) = "\" THEN
  892.         newdir$ = LEFT$(newdir$, (LEN(newdir$) - 1))
  893.     END IF
  894. END IF
  895. CHDIR newdir$
  896. ON ERROR GOTO 0
  897. RETURN
  898.  
  899. direrr:
  900. LOCATE 17, 12
  901. SOUND 1000, 1
  902. PRINT "Invalid directory....press a key";
  903. a$ = INPUT$(1)
  904. newdir$ = ""
  905. RESUME GetDir
  906.  
  907. ShellOut:
  908.  
  909. COLOR fg, bg
  910. GOSUB InputBox
  911. LOCATE 17, 12
  912. PRINT "Enter a DOS command or press Enter for DOS prompt."
  913. LOCATE 18, 12
  914. PRINT "Enter EXIT to return to program."
  915. LOCATE 16, 12
  916. INPUT "Command to Execute: ", doscmd$
  917. IF UCASE$(doscmd$) = "EXIT" THEN RETURN
  918. CLS
  919. LOCATE 1, 1
  920. PRINT "Enter Exit to return to Interface Plus"
  921. SHELL doscmd$
  922. oky = 21
  923. okx = 75
  924. GOSUB MoveOkButton
  925. RETURN
  926.  
  927. YesNoButton:
  928. response$ = ""
  929. isbutton$ = ""
  930. COLOR fg, bg
  931. LOCATE 15, 69
  932. PRINT "╦═══╗";
  933. LOCATE 16, 70
  934. COLOR bg, fg
  935. PRINT "YES";
  936. COLOR fg, bg
  937. PRINT "║";
  938. LOCATE 17, 69
  939. PRINT "╠═══╣";
  940. LOCATE 18, 70
  941. COLOR bg, fg
  942. PRINT " NO";
  943. COLOR fg, bg
  944. PRINT "║";
  945. LOCATE 19, 69
  946. PRINT "╩═══╝";
  947. MoveMouse 16, 70
  948. WHILE NOT isbutton$ = "DOWN"
  949. response$ = UCASE$(INKEY$)
  950. IF response$ <> "" THEN RETURN
  951. CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  952. WEND
  953.  
  954. IF mousex = 69 OR mousex = 70 OR mousex = 71 THEN
  955.     IF mousey = 15 THEN
  956.         response$ = "Y"
  957.         CALL WaitaBit(.15)
  958.         isbutton$ = ""
  959.         RETURN
  960.     ELSEIF mousey = 17 THEN
  961.         response$ = "N"
  962.         CALL WaitaBit(.15)
  963.         isbutton$ = ""
  964.         RETURN
  965.     ELSE
  966.         response$ = ""
  967.         GOTO YesNoButton
  968.     END IF
  969.  
  970. END IF
  971. isbutton$ = ""
  972. IF response$ = "" THEN GOTO YesNoButton
  973. RETURN
  974.  
  975.  
  976. MoveYesNoButton:
  977. response$ = ""
  978. isbutton$ = ""
  979. COLOR fg, bg
  980. LOCATE ynoy, ynox
  981. PRINT "╔═══╗";
  982. LOCATE ynoy + 1, ynox
  983. PRINT "║";
  984. COLOR bg, fg
  985. PRINT "YES";
  986. COLOR fg, bg
  987. PRINT "║";
  988. LOCATE ynoy + 2, ynox
  989. PRINT "╠═══╣";
  990. LOCATE ynoy + 3, ynox
  991. PRINT "║";
  992. COLOR bg, fg
  993. PRINT " NO";
  994. COLOR fg, bg
  995. PRINT "║";
  996. LOCATE ynoy + 4, ynox
  997. PRINT "╚═══╝";
  998. MoveMouse ynoy + 1, ynox + 1
  999. REM mouseon
  1000. WHILE NOT isbutton$ = "DOWN"
  1001. response$ = UCASE$(INKEY$)
  1002. IF response$ <> "" THEN RETURN
  1003. CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  1004. WEND
  1005.  
  1006. IF mousex = ynox OR mousex = ynox + 1 OR mousex = ynox + 2 THEN
  1007.     IF mousey = ynoy THEN
  1008.         response$ = "Y"
  1009.         CALL WaitaBit(.15)
  1010.         RETURN
  1011.     ELSEIF mousey = ynoy + 2 THEN
  1012.         response$ = "N"
  1013.         CALL WaitaBit(.15)
  1014.         RETURN
  1015.     ELSE
  1016.         response$ = ""
  1017.         GOTO MoveYesNoButton
  1018.     END IF
  1019.  
  1020. END IF
  1021. isbutton$ = ""
  1022. IF response$ = "" THEN GOTO MoveYesNoButton
  1023. RETURN
  1024.  
  1025. MoveOkButton:
  1026. response$ = ""
  1027. OK$ = ""
  1028. COLOR fg, bg
  1029. LOCATE oky, okx
  1030. PRINT "╔════╗";
  1031. LOCATE oky + 1, okx
  1032. PRINT "║";
  1033. COLOR bg, fg
  1034. PRINT " OK ";
  1035. COLOR fg, bg
  1036. PRINT "║";
  1037. LOCATE oky + 2, okx
  1038. PRINT "╚════╝";
  1039. MoveMouse oky + 1, okx + 1
  1040. REM mouseon
  1041. WHILE NOT isbutton$ = "DOWN"
  1042. OK$ = INKEY$
  1043. IF OK$ <> "" THEN
  1044.     MouseOff
  1045.     CALL WaitaBit(.15)
  1046.     RETURN
  1047. END IF
  1048. CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  1049. WEND
  1050. IF mousey = oky THEN
  1051.     IF mousex = okx OR mousex = okx + 1 OR mousex = okx + 2 OR mousex = okx + 3 THEN
  1052.         MouseOff
  1053.         CALL WaitaBit(.15)
  1054.         RETURN
  1055.     END IF
  1056. END IF
  1057. isbutton$ = ""
  1058. GOTO MoveOkButton
  1059. MouseOff
  1060. CALL WaitaBit(.15)
  1061. RETURN
  1062.  
  1063. OkButton:
  1064. response$ = ""
  1065. OK$ = ""
  1066. COLOR fg, bg
  1067. LOCATE 15, 69
  1068. PRINT "╦════╗";
  1069. LOCATE 16, 70
  1070. COLOR bg, fg
  1071. PRINT "    ";
  1072. COLOR fg, bg
  1073. PRINT "║";
  1074. LOCATE 17, 69
  1075. PRINT "║";
  1076. COLOR bg, fg
  1077. PRINT " OK ";
  1078. COLOR fg, bg
  1079. PRINT "║";
  1080. LOCATE 18, 70
  1081. COLOR bg, fg
  1082. PRINT "    ";
  1083. COLOR fg, bg
  1084. PRINT "║";
  1085. LOCATE 19, 69
  1086. PRINT "╩════╝";
  1087. MoveMouse 16, 70
  1088. WHILE NOT isbutton$ = "DOWN"
  1089. OK$ = INKEY$
  1090. IF OK$ <> "" THEN
  1091.     MouseOff
  1092.     CALL WaitaBit(.15)
  1093.     RETURN
  1094. END IF
  1095. CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  1096. WEND
  1097. IF mousey = 15 OR mousey = 16 OR mousey = 17 THEN
  1098.     IF mousex = 69 OR mousex = 70 OR mousex = 71 OR mousex = 72 THEN
  1099.         MouseOff
  1100.         CALL WaitaBit(.15)
  1101.         RETURN
  1102.     END IF
  1103. END IF
  1104. isbutton$ = ""
  1105. GOTO OkButton
  1106. MouseOff
  1107. CALL WaitaBit(.15)
  1108. RETURN
  1109.  
  1110. InputBox:
  1111.  
  1112. 'Draws box on screen for input or messages
  1113.  
  1114. COLOR fg, bg
  1115. LOCATE 15, 10
  1116. PRINT "╔";
  1117. FOR topx = 1 TO 58
  1118. PRINT "═";
  1119. NEXT topx
  1120. PRINT "╗"
  1121. LOCATE 16, 10: PRINT "║"; SPACE$(58); "║"
  1122. LOCATE 17, 10: PRINT "║"; SPACE$(58); "║"
  1123. LOCATE 18, 10: PRINT "║"; SPACE$(58); "║"
  1124. LOCATE 19, 10
  1125. PRINT "╚";
  1126. FOR bottomx = 1 TO 58
  1127. PRINT "═";
  1128. NEXT bottomx
  1129. PRINT "╝";
  1130. RETURN
  1131.  
  1132.  
  1133.  
  1134. GetFiles:
  1135.  
  1136. fileflag = 0
  1137. COLOR fg, bg
  1138. memdta$ = SPACE$(43)
  1139. IF RIGHT$(newdir$, 1) <> "\" THEN filespec$ = newdir$ + "\" + mask$
  1140. IF RIGHT$(newdir$, 1) = "\" THEN filespec$ = newdir$ + mask$
  1141. CALL SetMemDta(memdta$)
  1142. CALL FirstFile(filespec$, filename$)
  1143. title$ = "File Listing for " + UCASE$(filespec$)
  1144. MakeBox title$, 4, 1, 82, 22, 4, fg, bg, pchar
  1145. VIEW PRINT 6 TO 23
  1146.  
  1147. LOCATE 6, 1
  1148. filecount = 1
  1149. IF filename$ <> "" THEN
  1150.     PRINT filename$,
  1151.     DO
  1152.         CALL NextFile(filename$)
  1153.         IF filename$ <> "" THEN
  1154.             PRINT filename$,
  1155.             filecount = filecount + 1
  1156.         END IF
  1157.         IF filecount = 75 THEN
  1158.         IF chooseone$ = "Y" THEN
  1159.             LOCATE 21, 45
  1160.             COLOR bg, fg
  1161.             PRINT "MORE -- Choose a file here?";
  1162.             COLOR fg, bg
  1163.             ynoy = 18
  1164.             ynox = 75
  1165.             GOSUB MoveYesNoButton
  1166.             IF response$ = "Y" THEN
  1167.                 MouseOff
  1168.                 FOR x = 18 TO 22
  1169.                 LOCATE x, 75
  1170.                 PRINT "     ";
  1171.                 NEXT x
  1172.                 LOCATE 21, 45
  1173.                 PRINT SPACE$(30);
  1174.                 MouseOn
  1175.                 filecount = 1
  1176.                 skipok = 1
  1177.                 GOSUB ChooseFile
  1178.             ELSE
  1179.                 MouseOff
  1180.                 FOR x = 18 TO 22
  1181.                 LOCATE x, 75
  1182.                 PRINT "     ";
  1183.                 NEXT x
  1184.                 LOCATE 21, 45
  1185.                 PRINT SPACE$(30);
  1186.                 filecount = 75
  1187.  
  1188.             END IF
  1189.         END IF
  1190.         GOSUB GetMoreFiles
  1191.             IF response$ <> "Y" THEN
  1192.             MouseOff
  1193.             filename$ = ""
  1194.             END IF
  1195.         END IF
  1196.     LOOP UNTIL filename$ = ""
  1197. ELSE
  1198.     PRINT "no files match"
  1199. END IF
  1200. IF chooseone$ = "Y" THEN
  1201.     skipok = 1
  1202.     GOSUB ChooseFile
  1203. END IF
  1204. MouseOff
  1205. IF NOT skipok = 1 THEN
  1206.     LOCATE 21, 54
  1207.     COLOR bg, fg
  1208.     oky = 20
  1209.     okx = 75
  1210.     PRINT "Return to main menu.";
  1211.     COLOR fg, bg
  1212.     MouseOn
  1213.     GOSUB MoveOkButton
  1214. END IF
  1215. MouseOff
  1216. response$ = ""
  1217. isbutton$ = ""
  1218. VIEW PRINT 1 TO 25
  1219. skipok = 0
  1220. RETURN
  1221.  
  1222. GetMoreFiles:
  1223. IF fileflag = 1 THEN RETURN
  1224. LOCATE 21, 55
  1225. COLOR bg, fg
  1226. PRINT "Look at more files?";
  1227. COLOR fg, bg
  1228. ynoy = 18
  1229. ynox = 75
  1230. GOSUB MoveYesNoButton
  1231. IF response$ = "Y" THEN
  1232.     MouseOff
  1233.     FOR x = 18 TO 22
  1234.     LOCATE x, 75
  1235.     PRINT "     ";
  1236.     NEXT x
  1237.     LOCATE 21, 55
  1238.     PRINT "                    "
  1239.     CLS
  1240.     MouseOn
  1241.     filecount = 1
  1242. ELSE
  1243.     chooseone$ = ""
  1244.     MouseOff
  1245.     FOR x = 18 TO 22
  1246.     LOCATE x, 75
  1247.     PRINT "     ";
  1248.     NEXT x
  1249.     LOCATE 21, 30
  1250.     PRINT SPACE$(48);
  1251.     filecount = 75
  1252.     response$ = ""
  1253.     MouseOn
  1254. END IF
  1255. RETURN
  1256.  
  1257. ChooseFile:
  1258. outofrange = 0
  1259. ON ERROR GOTO 0
  1260. IF mouse$ = "YES" THEN
  1261. LOCATE 23, 37
  1262. COLOR bg, fg
  1263. PRINT " CANCEL ";
  1264. LOCATE 25, 1
  1265. COLOR bg, fg
  1266. PRINT SPACE$(80);
  1267. LOCATE 25, 1
  1268. PRINT "Click on your choice...Press any key to enter file manually";
  1269. COLOR fg, bg
  1270. filechoice$ = ""
  1271. isbutton$ = ""
  1272. bldfile$ = ""
  1273. fileflag = 0
  1274. pressed = 0
  1275. WHILE isbutton$ <> "DOWN"
  1276.     IF INKEY$ <> "" THEN
  1277.         pressed = 1
  1278.         GOSUB manual
  1279.         RETURN
  1280.     END IF
  1281.     CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  1282. WEND
  1283. IF mousey < 5 OR mousey > 21 THEN outofrange = 1
  1284. mousex = mousex + 1
  1285.     IF mousex >= 1 AND mousex <= 12 AND outofrange = 0 THEN
  1286.         isbutton$ = ""
  1287.         LOCATE mousey + 1, 1
  1288.         FOR x = 1 TO 12
  1289.         partfile = SCREEN(mousey + 1, x)
  1290.         bldfile$ = bldfile$ + CHR$(partfile)
  1291.         NEXT
  1292.         LOCATE mousey + 1, 1
  1293.         COLOR bg, fg
  1294.         MouseOff
  1295.         PRINT RTRIM$(bldfile$)
  1296.         filechoice$ = RTRIM$(bldfile$)
  1297.         fileflag = 1
  1298.         oldy = mousey + 1
  1299.         oldx = 1
  1300.     ELSEIF mousex >= 15 AND mousex <= 26 AND outofrange = 0 THEN
  1301.         isbutton$ = ""
  1302.         LOCATE mousey + 1, 15
  1303.         FOR x = 15 TO 26
  1304.         partfile = SCREEN(mousey + 1, x)
  1305.         bldfile$ = bldfile$ + CHR$(partfile)
  1306.         NEXT
  1307.         LOCATE mousey + 1, 15
  1308.         COLOR bg, fg
  1309.         MouseOff
  1310.         PRINT RTRIM$(bldfile$)
  1311.         filechoice$ = RTRIM$(bldfile$)
  1312.         fileflag = 1
  1313.         oldy = mousey + 1
  1314.         oldx = 15
  1315.     ELSEIF mousex >= 29 AND mousex <= 40 AND outofrange = 0 THEN
  1316.         isbutton$ = ""
  1317.         LOCATE mousey + 1, 29
  1318.         FOR x = 29 TO 40
  1319.         partfile = SCREEN(mousey + 1, x)
  1320.         bldfile$ = bldfile$ + CHR$(partfile)
  1321.         NEXT
  1322.         LOCATE mousey + 1, 29
  1323.         COLOR bg, fg
  1324.         MouseOff
  1325.         PRINT RTRIM$(bldfile$)
  1326.         filechoice$ = RTRIM$(bldfile$)
  1327.         fileflag = 1
  1328.         oldy = mousey + 1
  1329.         oldx = 29
  1330.     ELSEIF mousex >= 43 AND mousex <= 54 AND outofrange = 0 THEN
  1331.         isbutton$ = ""
  1332.         LOCATE mousey + 1, 43
  1333.         FOR x = 43 TO 54
  1334.         partfile = SCREEN(mousey + 1, x)
  1335.         bldfile$ = bldfile$ + CHR$(partfile)
  1336.         NEXT
  1337.         LOCATE mousey + 1, 43
  1338.         COLOR bg, fg
  1339.         MouseOff
  1340.         PRINT RTRIM$(bldfile$)
  1341.         filechoice$ = RTRIM$(bldfile$)
  1342.         fileflag = 1
  1343.         oldy = mousey + 1
  1344.         oldx = 43
  1345.     ELSEIF mousex >= 57 AND mousex <= 68 AND outofrange = 0 THEN
  1346.         isbutton$ = ""
  1347.         LOCATE mousey + 1, 57
  1348.         FOR x = 57 TO 68
  1349.         partfile = SCREEN(mousey + 1, x)
  1350.         bldfile$ = bldfile$ + CHR$(partfile)
  1351.         NEXT
  1352.         LOCATE mousey + 1, 57
  1353.         COLOR bg, fg
  1354.         MouseOff
  1355.         PRINT RTRIM$(bldfile$)
  1356.         filechoice$ = RTRIM$(bldfile$)
  1357.         fileflag = 1
  1358.         oldy = mousey + 1
  1359.         oldx = 57
  1360.  
  1361.     ELSE
  1362.         filechoice$ = ""
  1363. END IF
  1364. IF RIGHT$(newdir$, 1) <> "\" THEN filechoice$ = newdir$ + "\" + filechoice$
  1365. IF RIGHT$(newdir$, 1) = "\" THEN filechoice$ = newdir$ + filechoice$
  1366. IF RTRIM$(bldfile$) = "" THEN filechoice$ = ""
  1367. END IF
  1368.  
  1369. nomouse:
  1370. IF mouse$ <> "YES" THEN
  1371. pressed = 1
  1372. manual:
  1373.     filechoice$ = ""
  1374.     ON ERROR GOTO 0
  1375.     LOCATE 22, 35
  1376.     INPUT ; "Enter the filename: ", filechoice$
  1377.     IF filechoice$ <> "" THEN
  1378.         IF RIGHT$(newdir$, 1) <> "\" THEN
  1379.             filechoice$ = newdir$ + "\" + UCASE$(filechoice$)
  1380.         END IF
  1381.         IF RIGHT$(newdir$, 1) = "\" THEN
  1382.             filechoice$ = newdir$ + filechoice$
  1383.         END IF
  1384.     
  1385.     filechoice$ = UCASE$(filechoice$)
  1386.     ON ERROR GOTO wrongfile
  1387.     OPEN filechoice$ FOR INPUT AS #7
  1388.     CLOSE #7
  1389.     LOCATE 22, 35
  1390.     PRINT SPACE$(44);
  1391.     fileflag = 1
  1392.     END IF
  1393. END IF
  1394.  
  1395. checkchoice:
  1396. chooseone$ = ""
  1397. ynoy = 18
  1398. ynox = 75
  1399. LOCATE 21, 55 - LEN(filechoice$)
  1400. IF filechoice$ = "" THEN
  1401.     PRINT " No File, Correct? "
  1402. ELSE
  1403.     PRINT " "; filechoice$; ", Correct? "
  1404. END IF
  1405. GOSUB MoveYesNoButton
  1406. IF response$ <> "N" THEN
  1407.     MouseOff
  1408.     FOR y = 18 TO 22
  1409.     LOCATE y, 75
  1410.     PRINT "     "
  1411.     NEXT y
  1412.     LOCATE 21, 30
  1413.     COLOR fg, bg
  1414.     PRINT SPACE$(48);
  1415.     response$ = ""
  1416.     RETURN
  1417. END IF
  1418. IF response$ = "N" THEN
  1419.     IF mouse$ = "YES" AND pressed = 0 THEN
  1420.         MouseOff
  1421.         FOR y = 18 TO 22
  1422.             LOCATE y, 75
  1423.             PRINT "     "
  1424.         NEXT
  1425.         LOCATE 21, 20
  1426.         COLOR fg, bg
  1427.         PRINT SPACE$(58);
  1428.         response$ = ""
  1429.         IF oldy < 6 THEN oldy = 6
  1430.         IF oldy > 23 THEN oldy = 23
  1431.         LOCATE oldy, oldx
  1432.         PRINT RTRIM$(bldfile$);
  1433.     MoveMouse oldy, oldx
  1434.     ELSE
  1435.         MouseOff
  1436.         FOR y = 18 TO 22
  1437.             LOCATE y, 75
  1438.             PRINT "     "
  1439.         NEXT
  1440.         LOCATE 21, 20
  1441.         COLOR fg, bg
  1442.         PRINT SPACE$(58);
  1443.         response$ = ""
  1444.     END IF
  1445.        GOTO ChooseFile
  1446. END IF
  1447.  
  1448. wrongfile:
  1449. SOUND 1000, 1
  1450. LOCATE 22, 35
  1451. PRINT SPACE$(40);
  1452. LOCATE 22, 35
  1453. PRINT "INVALID FILENAME -- Try again"
  1454. WaitaBit 2
  1455. LOCATE 22, 35
  1456. PRINT SPACE$(40);
  1457. RESUME ChooseFile
  1458.  
  1459.  
  1460. ViewFile:
  1461.  
  1462. IF ViewFile$ = "" THEN RETURN
  1463. LOCATE 4, 1
  1464. PRINT STRING$(80, CHR$(pchar));
  1465. viewing$ = "Viewing: " + ViewFile$
  1466. LOCATE 4, (80 - LEN(viewing$)) / 2
  1467. COLOR bg, fg
  1468. PRINT viewing$;
  1469. COLOR fg, bg
  1470. VIEW PRINT 5 TO 25
  1471. CLS
  1472. ON ERROR GOTO viewerror
  1473. IF MID$(ViewFile$, 2, 1) = ":" THEN
  1474.     ViewFile$ = ViewFile$
  1475. ELSEIF LEFT$(ViewFile$, 1) = "\" THEN
  1476.     ViewFile$ = ViewFile$
  1477. ELSE
  1478.     ViewFile$ = newdir$ + "\" + ViewFile$
  1479. END IF
  1480. viewit = FREEFILE
  1481. OPEN ViewFile$ FOR INPUT AS #viewit
  1482. moreread:
  1483. FOR lineread = 1 TO 18
  1484.     IF EOF(viewit) THEN
  1485.         LOCATE 24, 26
  1486.         SOUND 1000, 1
  1487.         COLOR bg, fg
  1488.         PRINT "END OF FILE!  Press <Esc>...";
  1489.         COLOR fg, bg
  1490.         EXIT FOR
  1491.     END IF
  1492.     LINE INPUT #viewit, view$
  1493.     PRINT view$
  1494. NEXT lineread
  1495. LOCATE 25, 1
  1496. COLOR 15, fg
  1497. PRINT SPACE$(80);
  1498. LOCATE 25, 1
  1499. PRINT "Viewing "; UCASE$(ViewFile$); ".  Any key for more or <Esc> for menu.";
  1500. COLOR fg, bg
  1501. continue$ = INPUT$(1)
  1502. CLS
  1503. IF continue$ = CHR$(27) THEN
  1504.     ON ERROR GOTO 0
  1505.     CLOSE #viewit
  1506.     VIEW PRINT 1 TO 25
  1507.     RETURN
  1508. END IF
  1509. continue$ = ""
  1510. CALL WaitaBit(.15)
  1511. GOTO moreread
  1512.  
  1513. goback:
  1514. ON ERROR GOTO 0
  1515. CLOSE #viewit
  1516. VIEW PRINT 1 TO 25
  1517. RETURN
  1518.  
  1519. viewerror:
  1520. LOCATE 25, 1
  1521. COLOR 15, fg
  1522. SOUND 1000, 1
  1523. PRINT SPACE$(80);
  1524. LOCATE 25, 20
  1525. PRINT "Invalid file name --- Press a key";
  1526. COLOR fg, bg
  1527. RESUME goback
  1528.  
  1529. GetError:
  1530. '===== Non-specific error handler. You can use this one to handle
  1531. '===== user errors by coping with the problem in the line after the
  1532. '===== potential error. IF generrorflag = 1 THEN.......
  1533. generrorflag = 1
  1534. RESUME NEXT
  1535.  
  1536.  
  1537. GetEnvir:
  1538.  
  1539. 'Get data from system environment.
  1540. 'This sample gets the variable envpath$ from the enviroment.
  1541. 'If no environment variable exists, the value is the nul string.
  1542. 'You can add other variables if you wish.
  1543.  
  1544. IF ENVIRON$("IFACE") = "" THEN
  1545.     envpath$ = ""
  1546.     RETURN
  1547. END IF
  1548. envpath$ = ENVIRON$("IFACE")
  1549. IF NOT RIGHT$(envpath$, 1) = "\" THEN
  1550.     envpath$ = envpath$ + "\"
  1551. END IF
  1552. RETURN
  1553.  
  1554.  
  1555. ColorInit:
  1556.  
  1557. 'Gets color information from data file
  1558.  
  1559. fg = 7
  1560. bg = 0
  1561. ON ERROR GOTO 433
  1562. colorfile$ = envpath$ + "MCOLOR.DAT"
  1563. OPEN colorfile$ FOR INPUT AS #4
  1564. INPUT #4, fg
  1565. INPUT #4, bg
  1566. INPUT #4, pchar
  1567. CLOSE #4
  1568. COLOR fg, bg
  1569. CLS
  1570. 434 ON ERROR GOTO 0: RETURN
  1571. 433 RESUME 434
  1572.  
  1573.  
  1574. quit:
  1575. MouseOff
  1576. GOSUB ShareInfo
  1577. CHDIR olddir$
  1578. CLS
  1579. COLOR fg, bg
  1580. END
  1581. RETURN
  1582.  
  1583.  
  1584.  
  1585. noprint:
  1586. GOSUB InputBox
  1587. LOCATE 16, 12
  1588. SOUND 1000, 1
  1589. PRINT "TURN YOUR PRINTER ON OR CORRECT OTHER PRINTER PROBLEM!";
  1590. LOCATE 18, 12
  1591. PRINT "PRESS ANY KEY TO CONTINUE."
  1592. WHILE INKEY$ = "": WEND
  1593. RESUME NEXT
  1594.  
  1595.  
  1596. ColorSet:
  1597. isbutton$ = ""
  1598. CALL WaitaBit(.15)
  1599. MouseOff
  1600. 10000 COLOR 7, 0: CLS
  1601. COLOR 7, 0: PRINT : PRINT
  1602. PRINT "    [ 0 ] "; : COLOR 0, 7: PRINT "BLACK";
  1603. COLOR 7, 0: PRINT "                  Foreground Colors"
  1604. PRINT
  1605.  
  1606. FOR c = 1 TO 5
  1607.     COLOR c, 0: PRINT "    ["; c; "] █████";
  1608. NEXT
  1609. PRINT : PRINT
  1610.  
  1611. FOR c = 6 TO 9
  1612.     COLOR c, 0: PRINT "    ["; c; "] █████";
  1613. NEXT
  1614. COLOR 10, 0: PRINT "    [10 ] █████"
  1615. PRINT
  1616.  
  1617. FOR c = 11 TO 15
  1618.     COLOR c, 0: PRINT "   ["; c; "] █████";
  1619. NEXT
  1620. PRINT : COLOR 7, 0
  1621.  
  1622. PRINT
  1623. PRINT " [ 0 ]"; : COLOR 0, 7: PRINT "BLACK";
  1624. COLOR 7, 0
  1625. PRINT "                Background Colors"
  1626. PRINT
  1627.  
  1628. FOR c = 1 TO 7
  1629.     COLOR c, 0: PRINT " ["; c; "]█████";
  1630. NEXT
  1631. PRINT : PRINT
  1632. COLOR 7, 0
  1633.  
  1634. 'routine to pick foreground color
  1635.  
  1636. IF mouse$ <> "YES" THEN
  1637.     GOSUB InputBox
  1638.     IF scrtype$ = "MONO" THEN
  1639.         LOCATE 18, 12
  1640.         PRINT "MONOCHROME -- Choose 7 or 0 only."
  1641.     END IF
  1642.     LOCATE 16, 12
  1643.     INPUT "Enter the number for the foreground color (0-15):", fg
  1644. END IF
  1645. IF mouse$ = "YES" THEN
  1646.     GOSUB InputBox
  1647.     LOCATE 16, 12
  1648.     PRINT "Click on your choice of foreground colors"
  1649.     IF scrtype$ = "MONO" THEN
  1650.         LOCATE 18, 12
  1651.         PRINT "MONOCHROME -- Choose 7 (white) or 0 (black) only."
  1652.     END IF
  1653.     DO
  1654.         CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  1655.     LOOP UNTIL isbutton$ = "DOWN"
  1656.     raw = SCREEN(mousey + 1, mousex + 1, 1)
  1657.     GOSUB figurecolor
  1658.     fg = fixed
  1659.     fixed = 0
  1660.     MouseOff
  1661.     CALL WaitaBit(.15)
  1662.     
  1663. END IF
  1664. IF fg = 0 THEN bg = 7
  1665. isbutton$ = "UP"
  1666.  
  1667. 'routine to pick background color
  1668.  
  1669. IF mouse$ <> "YES" THEN
  1670.     GOSUB InputBox
  1671.     LOCATE 18, 12
  1672.     PRINT "MONOCHROME -- Choose 7 or 0 only"
  1673.     LOCATE 16, 12
  1674.     INPUT "Enter the number for the background color (0-7):", bg
  1675. END IF
  1676. IF mouse$ = "YES" THEN
  1677.     GOSUB InputBox
  1678.     LOCATE 16, 12
  1679.     PRINT "Click on your choice of background colors"
  1680.     LOCATE 18, 12
  1681.     PRINT "MONOCHROME -- Choose 7(white) or 0(black) only."
  1682.     MouseOn
  1683.     DO
  1684.         CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  1685.     LOOP UNTIL isbutton$ = "DOWN"
  1686.     raw = SCREEN(mousey + 1, mousex + 1, 1)
  1687.     GOSUB figurecolor
  1688.     bg = fixed
  1689.     fixed = 0
  1690.     MouseOff
  1691.     CALL WaitaBit(.15)
  1692. END IF
  1693. isbutton$ = "UP"
  1694. IF fg = bg THEN
  1695.     fg = 7
  1696.     bg = 0
  1697.     GOTO ColorSet
  1698. END IF
  1699. GOSUB InputBox
  1700. LOCATE 16, 30
  1701. COLOR fg, bg
  1702. PRINT "NORMAL    ";
  1703. COLOR bg, fg
  1704. PRINT "REVERSED";
  1705. IF mouse$ <> "YES" THEN
  1706.     LOCATE 18, 24: COLOR fg, bg
  1707.     INPUT "This is your choice. OK? (Y/N): ", ans$
  1708. END IF
  1709. IF mouse$ = "YES" THEN
  1710.     LOCATE 18, 28
  1711.     COLOR fg, bg
  1712.     PRINT "This is your choice. OK?"
  1713.     GOSUB YesNoButton
  1714.     ans$ = LEFT$(response$, 1)
  1715.     response$ = ""
  1716.     MouseOff
  1717.     CALL WaitaBit(.15)
  1718. END IF
  1719. IF UCASE$(ans$) = "N" THEN
  1720.     fg = 7
  1721.     bg = 0
  1722.     GOTO ColorSet
  1723. END IF
  1724.  
  1725. 'Routine to pick background paint character
  1726.  
  1727. COLOR fg, bg
  1728. CLS
  1729. 'display background paint characters
  1730.  
  1731. LOCATE 4, 21
  1732. PRINT "BACKGROUND CHARACTERS FOR MENU SCREEN"
  1733. LOCATE 7, 1
  1734. PRINT "                0             1            2            3"
  1735. PRINT
  1736. PRINT "                           ░░░░░░░      ▒▒▒▒▒▒▒      ▓▓▓▓▓▓▓"
  1737. PRINT "                           ░░░░░░░      ▒▒▒▒▒▒▒      ▓▓▓▓▓▓▓"
  1738. PRINT "                           ░░░░░░░      ▒▒▒▒▒▒▒      ▓▓▓▓▓▓▓"
  1739. PRINT "                           ░░░░░░░      ▒▒▒▒▒▒▒      ▓▓▓▓▓▓▓"
  1740. PRINT "                           ░░░░░░░      ▒▒▒▒▒▒▒      ▓▓▓▓▓▓▓"
  1741.  
  1742. backchar:
  1743. IF mouse$ <> "YES" THEN
  1744.     GOSUB InputBox
  1745.     LOCATE 18, 12
  1746.     PRINT "Enter 0 for no background"
  1747.     LOCATE 16, 12
  1748.     INPUT "Enter the number for the background character (0-3):", paintchar
  1749.     IF paintchar = 0 THEN pchar = 32
  1750.     IF paintchar = 1 THEN pchar = 176
  1751.     IF paintchar = 2 THEN pchar = 177
  1752.     IF paintchar = 3 THEN pchar = 178
  1753. END IF
  1754. IF mouse$ = "YES" THEN
  1755.     GOSUB InputBox
  1756.     LOCATE 16, 12
  1757.     PRINT "Click on your choice of background characters"
  1758.     LOCATE 18, 12
  1759.     PRINT "Click under 0 for no background character"
  1760.     MouseOn
  1761.     DO
  1762.         CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  1763.     LOOP UNTIL isbutton$ = "DOWN"
  1764.     
  1765.     pchar = SCREEN(mousey + 1, mousex + 1)
  1766.     MouseOff
  1767.     CALL WaitaBit(.15)
  1768. END IF
  1769. isbutton$ = "UP"
  1770.  
  1771.  
  1772. GOSUB InputBox
  1773. LOCATE 16, 24
  1774. PRINT "Save this color set to disk?"
  1775. GOSUB YesNoButton
  1776. save$ = LEFT$(response$, 1)
  1777. response$ = ""
  1778. MouseOff
  1779. CALL WaitaBit(.15)
  1780.  
  1781. IF save$ = "Y" THEN
  1782.     colorfile$ = envpath$ + "MCOLOR.DAT"
  1783.     OPEN colorfile$ FOR OUTPUT AS #1
  1784.     PRINT #1, fg
  1785.     PRINT #1, bg
  1786.     PRINT #1, pchar
  1787.     CLOSE #1
  1788. END IF
  1789. MouseOff
  1790. RETURN
  1791.  
  1792. figurecolor:
  1793. IF raw = 7 THEN fixed = 0
  1794. IF raw = 118 THEN fixed = 1
  1795. IF raw = 117 THEN fixed = 2
  1796. IF raw = 116 THEN fixed = 3
  1797. IF raw = 115 THEN fixed = 4
  1798. IF raw = 114 THEN fixed = 5
  1799. IF raw = 113 THEN fixed = 6
  1800. IF raw = 112 THEN fixed = 7
  1801. IF raw = 127 THEN fixed = 8
  1802. IF raw = 126 THEN fixed = 9
  1803. IF raw = 125 THEN fixed = 10
  1804. IF raw = 124 THEN fixed = 11
  1805. IF raw = 123 THEN fixed = 12
  1806. IF raw = 122 THEN fixed = 13
  1807. IF raw = 121 THEN fixed = 14
  1808. IF raw = 120 THEN fixed = 15
  1809. RETURN
  1810.  
  1811. GetConfig:
  1812.  
  1813. 'Here you read in any variables you've saved. It's up to you.
  1814. ON ERROR GOTO configerr
  1815. confignum = FREEFILE
  1816. configa$ = envpath$ + "IFACE.CFG"
  1817. OPEN configa$ FOR INPUT AS #confignum
  1818. REM INPUT #confignum, variable1
  1819. REM INPUT #confignum, variable2
  1820. REM INPUT #confignum, variable3
  1821. REM INPUT #confignum, variable4
  1822. CLOSE #confignum
  1823.  
  1824. noerror:
  1825. CLOSE #confignum
  1826. ON ERROR GOTO 0
  1827. RETURN
  1828.  
  1829. configerr:
  1830. configflag = 1
  1831. RESUME noerror
  1832.  
  1833.  
  1834.  
  1835.  
  1836. ShareInfo:
  1837. MakeBox "SHAREWARE INFORMATION", 9, 2, 78, 15, 1, fg, bg, pchar
  1838. LOCATE 10, 3
  1839. PRINT "                         Interface PLUS Registration"
  1840. LOCATE 12, 5
  1841. PRINT "This is a shareware program. If you use it to create other programs,"
  1842. LOCATE 13, 5
  1843. PRINT "you must register your copy. Registration fees vary according to the"
  1844. LOCATE 14, 5
  1845. PRINT "way you use the program. You may use it for personal programs at no"
  1846. LOCATE 15, 5
  1847. PRINT "charge. If you use it to create a shareware program, the one-time fee"
  1848. LOCATE 16, 5
  1849. PRINT "is $60.00. If you use it to create a commercial program, the fee is"
  1850. LOCATE 17, 5
  1851. PRINT "$1000. No royalties are required in either case. You may alter the"
  1852. LOCATE 18, 5
  1853. PRINT "source code, but must not remove the copyright notice."
  1854. LOCATE 20, 33
  1855. PRINT "George Campbell"
  1856. LOCATE 21, 32
  1857. PRINT "1472 Sixth Street"
  1858. LOCATE 22, 31
  1859. PRINT "Los Osos, CA  93402"
  1860. oky = 20
  1861. okx = 60
  1862. GOSUB MoveOkButton
  1863. RETURN
  1864.  
  1865. GetOldDir:
  1866. COLOR bg, bg
  1867. CLS
  1868. SHELL "dir >direct~.txt"
  1869. OPEN "direct~.txt" FOR INPUT AS #1
  1870. DO
  1871.     LINE INPUT #1, test$
  1872. LOOP UNTIL INSTR(test$, ":")
  1873. location = INSTR(test$, ":")
  1874. originaldir$ = MID$(test$, (location - 1))
  1875. CLOSE #1
  1876. olddir$ = originaldir$
  1877. newdir$ = olddir$
  1878. KILL "direct~.txt"
  1879. RETURN
  1880.  
  1881. ScreenTest:
  1882. 'Checks for type of graphic card and monitor installed
  1883. vgatest:
  1884. scrtype$ = ""
  1885. ON ERROR GOTO novga
  1886. SCREEN 12
  1887. scrtype$ = "VGA"
  1888. GOTO goagain
  1889.  
  1890. novga:
  1891. RESUME mcgatest
  1892.  
  1893. mcgatest:
  1894.  
  1895. ON ERROR GOTO nomcga
  1896. SCREEN 13
  1897. scrtype$ = "MCGA"
  1898. GOTO goagain
  1899.  
  1900.  
  1901. nomcga:
  1902. RESUME egatest
  1903.  
  1904. egatest:
  1905. ON ERROR GOTO noega
  1906. SCREEN 9
  1907. scrtype$ = "EGA"
  1908. GOTO goagain
  1909.  
  1910.  
  1911. noega:
  1912. RESUME cgatest
  1913.  
  1914. cgatest:
  1915. ON ERROR GOTO nocga
  1916. SCREEN 2
  1917. scrtype$ = "CGA"
  1918. SCREEN 0
  1919. WIDTH 80
  1920. GOTO goagain
  1921.  
  1922.  
  1923. nocga:
  1924. scrtype$ = "MONO"
  1925. RESUME goagain
  1926.  
  1927. goagain:
  1928. SCREEN 0
  1929. WIDTH 80
  1930. ON ERROR GOTO 0
  1931. RETURN
  1932.  
  1933. ShowStuff:
  1934.  
  1935. MakeBox "What Interface PLUS Knows", 4, 1, 80, 20, 1, fg, bg, pchar
  1936.  
  1937. LOCATE 6, 3
  1938. PRINT "Video Type (scrtype$): "; scrtype$
  1939. LOCATE 7, 3
  1940. PRINT "Mouse available (mouse$): "; mouse$
  1941. LOCATE 8, 3
  1942. PRINT "Current Path (newdir$): "; newdir$
  1943. LOCATE 9, 3
  1944. PRINT "Original Path (originaldir$): "; originaldir$
  1945. LOCATE 10, 3
  1946. PRINT "Datapath (envpath$): "; envpath$
  1947. LOCATE 11, 3
  1948. PRINT "Current active drive: "; LEFT$(newdir$, 2)
  1949. LOCATE 12, 3
  1950. PRINT "File mask (mask$): "; mask$
  1951. LOCATE 13, 3
  1952. PRINT "Current foreground color: "; fg
  1953. LOCATE 14, 3
  1954. PRINT "Current background color: "; bg
  1955. LOCATE 15, 3
  1956. PRINT "File loaded (filechoice$): "; filechoice$
  1957. LOCATE 16, 3
  1958. GOSUB MemSize
  1959. PRINT "Memory size (sizeram): "; sizeram; "K"
  1960. LOCATE 17, 3
  1961. PRINT "Drives Currently Active: ";
  1962. IF drive$(1) = "Y" THEN PRINT "A: ";
  1963. IF drive$(2) = "Y" THEN PRINT "B: ";
  1964. IF drive$(3) = "Y" THEN PRINT "C: ";
  1965. IF drive$(4) = "Y" THEN PRINT "D: ";
  1966. IF drive$(5) = "Y" THEN PRINT "E: ";
  1967. IF drive$(6) = "Y" THEN PRINT "F: ";
  1968. IF drive$(7) = "Y" THEN PRINT "G: ";
  1969. IF drive$(8) = "Y" THEN PRINT "H: ";
  1970. LOCATE 18, 3
  1971. PRINT "Command line parameters(3): "; command1$, command2$, command3$
  1972. LOCATE 19, 3
  1973. PRINT "DOS version:"; version; "+"
  1974.  
  1975. oky = 20
  1976. okx = 74
  1977. GOSUB MoveOkButton
  1978.  
  1979. RETURN
  1980.  
  1981.  
  1982. MemSize:
  1983.         CALL Interrupt(18, regs, regs)
  1984.         sizeram = regs.ax
  1985. RETURN
  1986.  
  1987.  
  1988.  
  1989. '==================================================================
  1990. 'The section below contains CALLed subroutines. It's best
  1991. 'to keep only those routines here. QB will handle it automatically.
  1992. '==================================================================
  1993.  
  1994. SUB FirstFile (filespec$, filename$)
  1995.  
  1996. filespec$ = filespec$ + CHR$(0)
  1997. DIM inreg AS register, outreg AS register
  1998. inreg.ax = &H4E00
  1999. inreg.dx = SADD(filespec$)
  2000. inreg.ds = VARSEG(filespec$)
  2001. inreg.cx = 0
  2002. CALL Interrupt(&H21, inreg, outreg)
  2003. IF (outreg.flags AND 1) = 0 THEN
  2004.     CALL MakeName(filename$)
  2005. ELSE
  2006.     filename$ = ""
  2007. END IF
  2008. END SUB
  2009.  
  2010. SUB GetVer (version)
  2011.  
  2012. DIM regs AS register
  2013. regs.ax = &H3000
  2014. CALL Interrupt(&H21, regs, regs)
  2015. IF regs.ax AND &HFF = 0 THEN regs.ax = &H1
  2016. version = regs.ax AND &HFF
  2017. END SUB
  2018.  
  2019. SUB MakeBox (title$, uly, ulx, bwide, bhigh, linesty, fg, bg, pchar)
  2020.  
  2021. SELECT CASE linesty
  2022.     CASE 1
  2023.         ulc$ = "╔"
  2024.         blc$ = "╚"
  2025.         urc$ = "╗"
  2026.         brc$ = "╝"
  2027.         hc$ = "═"
  2028.         vc$ = "║"
  2029.  
  2030.     CASE 2
  2031.         ulc$ = "┌"
  2032.         blc$ = "└"
  2033.         urc$ = "┐"
  2034.         brc$ = "┘"
  2035.         hc$ = "─"
  2036.         vc$ = "│"
  2037.  
  2038.     CASE 3
  2039.         ulc$ = "╒"
  2040.         blc$ = "╘"
  2041.         urc$ = "╕"
  2042.         brc$ = "╛"
  2043.         hc$ = "═"
  2044.         vc$ = "│"
  2045.  
  2046.     CASE 4
  2047.         ulc$ = CHR$(pchar)
  2048.         urc$ = CHR$(pchar)
  2049.         blc$ = CHR$(pchar)
  2050.         brc$ = CHR$(pchar)
  2051.         hc$ = CHR$(pchar)
  2052.         vc$ = " "
  2053.  
  2054.     CASE ELSE
  2055.         ulc$ = " "
  2056.         blc$ = " "
  2057.         urc$ = " "
  2058.         brc$ = " "
  2059.         hc$ = " "
  2060.         vc$ = " "
  2061. END SELECT
  2062.  
  2063. IF (uly + bhigh) > 24 THEN bhigh = 24 - uly
  2064. IF (ulx + bwide) > 81 THEN bwide = 81 - ulx
  2065. IF (ulx + bwide) < 80 THEN shadow$ = "GC21"
  2066.  
  2067. COLOR fg, bg
  2068. LOCATE uly, ulx
  2069. PRINT ulc$; STRING$(bwide - 2, hc$); urc$
  2070. FOR x = 1 TO bhigh - 2
  2071.     LOCATE , ulx
  2072.     PRINT vc$; SPACE$(bwide - 2); vc$
  2073. NEXT
  2074. LOCATE , ulx
  2075. PRINT blc$; STRING$(bwide - 2, hc$); brc$;
  2076. IF LEN(title$) > bwide - 2 THEN title$ = ""
  2077. IF NOT title$ = "" THEN
  2078.     LOCATE uly, ulx + ((bwide - 2) / 2) - (LEN(title$)) / 2
  2079.     COLOR bg, fg
  2080.     PRINT " "; title$; " "
  2081.     COLOR fg, bg
  2082. END IF
  2083.  
  2084.  
  2085. END SUB
  2086.  
  2087. SUB MakeName (fullname$)
  2088.  
  2089. SHARED memdta$
  2090. endofstr% = INSTR(31, memdta$, CHR$(0))
  2091. fullname$ = MID$(memdta$, 31, endofstr% - 31)
  2092. END SUB
  2093.  
  2094. SUB MouseBar.Menu (sel, sel$(), fg, bg, pchar, msg$, topline, submenu, mouse$)
  2095.  
  2096. DIM a(20)
  2097.       
  2098.        s$ = ""
  2099.        a = 0
  2100.  
  2101. '===== Clear Screen
  2102.     COLOR fg, bg
  2103.       
  2104.        FOR i = 1 TO 25
  2105.      LOCATE i, 1
  2106.      PRINT STRING$(80, CHR$(pchar));
  2107.        NEXT
  2108.      
  2109. '===== Clear line 25
  2110.       
  2111.        LOCATE 25, 1
  2112.        COLOR 15, fg
  2113.        PRINT SPACE$(80);
  2114.        COLOR fg, bg
  2115.       
  2116. '====== Create Program Logo
  2117. '====== Insert your own program info here
  2118.     LOCATE 15, 10
  2119.     PRINT "╔";
  2120.     FOR topx = 1 TO 58
  2121.     PRINT "═";
  2122.     NEXT topx
  2123.     PRINT "╗"
  2124.     LOCATE 16, 10: PRINT "║"; SPACE$(58); "║"
  2125.     LOCATE 17, 10: PRINT "║"; SPACE$(58); "║"
  2126.     LOCATE 18, 10: PRINT "║"; SPACE$(58); "║"
  2127.     LOCATE 19, 10
  2128.     PRINT "╚";
  2129.     FOR bottomx = 1 TO 58
  2130.     PRINT "═";
  2131.     NEXT bottomx
  2132.     PRINT "╝";
  2133.     title$ = "Interface PLUS"
  2134.     CopyRight$ = "Copyright, 1990, by George Campbell"
  2135.     heading$ = "The Intelligent Front End for your Programs"
  2136.     LOCATE 16, (80 - LEN(title$)) / 2
  2137.     PRINT title$
  2138.     LOCATE 18, (80 - LEN(heading$)) / 2
  2139.     PRINT heading$
  2140.     LOCATE 17, (80 - LEN(CopyRight$)) / 2
  2141.     PRINT CopyRight$
  2142.  
  2143.  
  2144.  
  2145. '===== Get the length of each sel$,
  2146. '===== then get the 1st character of each sel$ and build a string of them
  2147. '===== this string is used to select based on letters.
  2148. '===== Finish when sel$=""
  2149.       
  2150.        i = -1
  2151.        DO
  2152.       i = i + 1
  2153.       a(i) = LEN(sel$(i, 0))
  2154.       z$ = LTRIM$(sel$(i, 0))
  2155.       s$ = s$ + UCASE$(LEFT$(z$, 1))
  2156.        LOOP WHILE sel$(i, 0) <> ""
  2157.     
  2158. '===== Establish the right number of menu titles
  2159.       
  2160.        sel = i - 1
  2161.    
  2162. '==== Print the top line message.
  2163.        LOCATE 1, 1
  2164.        COLOR fg, bg
  2165.        t = INT((78 - LEN(msg$)) / 2)
  2166.        IF t * 2 + LEN(msg$) < 78 THEN f$ = STRING$((78 - (t * 2 + LEN(msg$))), "═") ELSE f$ = ""
  2167.        PRINT "╔" + STRING$(t, "═") + msg$ + f$ + STRING$(t, "═") + "╗";
  2168.       
  2169. '===== Print blank line on middle row
  2170.  
  2171.        PRINT "║" + SPACE$(78) + "║";
  2172.        
  2173.      
  2174. '===== Print menu titles on middle row
  2175.  
  2176.        LOCATE 2, 2
  2177.        FOR i = 0 TO sel
  2178.      PRINT sel$(i, 0);
  2179.        NEXT
  2180.   
  2181. '===== Print bottom row  of box
  2182.       
  2183.        LOCATE 3, 1
  2184.        PRINT "╚" + STRING$(78, "═") + "╝";
  2185.  
  2186. '===== Choose the menu entry to be displayed
  2187.        subsel = 1
  2188.        IF submenu <> 0 THEN subsel = submenu
  2189.        subnum = 1
  2190.        zold = 2
  2191.        s = 0
  2192.        IF topline <> 0 THEN s = topline
  2193.        x = 2
  2194.  
  2195. '===== Display submenu
  2196.  
  2197.   GOSUB dis.sub
  2198.  
  2199.        
  2200. '
  2201. '===== Highlight menu selection
  2202. '
  2203. lp:
  2204.        oldx = x
  2205.        x = 2
  2206.  
  2207. '===== Calculate cursor position
  2208.      
  2209.        FOR i = 0 TO s
  2210.      x = x + LEN(sel$(i, 0))
  2211.        NEXT
  2212.  
  2213. '===== Set cursor position to start of selection string
  2214.      
  2215.        x = x - LEN(sel$(i - 1, 0))
  2216.    
  2217.  
  2218. '===== Put OLD selection back to original color
  2219.  
  2220.        COLOR fg, bg
  2221.        LOCATE 2, oldx
  2222.        PRINT sel$(olds, 0);
  2223.    
  2224. '===== Select NEW selection with highlite color
  2225.    
  2226.        IF mouse$ = "YES" THEN MouseOff
  2227.        COLOR 15, fg
  2228.        LOCATE 2, x
  2229.        PRINT RTRIM$(sel$(s, 0)) + " ";
  2230.    
  2231.  
  2232. '===== Print sel$(s,10) 'message string' on line 25
  2233.  
  2234.        t = INT((80 - LEN(sel$(s, 10))) / 2)
  2235.        IF t * 2 + LEN(sel$(s, 10)) < 78 THEN f$ = STRING$((78 - (t * 2 + LEN(sel$(s, 10)))), "═") ELSE f$ = ""
  2236.        LOCATE 25, 1
  2237.        COLOR 15, fg
  2238.        PRINT SPACE$(t) + sel$(s, 10) + f$ + SPACE$(t);
  2239.        COLOR fg, bg
  2240.  
  2241. '
  2242. '===== Wait for keypress or mouse click
  2243.  
  2244. get.key:
  2245.        DO
  2246.      IF UCASE$(mouse$) = "YES" THEN
  2247.         CALL MouseGetInfo(mousex, mousey, isbutton$, mouse$, a$)
  2248.         IF UCASE$(isbutton$) = "DOWN" THEN
  2249.             GOSUB checkmouse
  2250.         END IF
  2251.         
  2252.     END IF
  2253.      IF NOT UCASE$(isbutton$) = "DOWN" THEN a$ = INKEY$
  2254.      
  2255.        LOOP UNTIL a$ <> ""
  2256.  
  2257. isbutton$ = ""
  2258.  
  2259. '
  2260. '===== Check for cursor keys
  2261.  
  2262.        IF LEN(a$) > 1 THEN GOTO get.curkey
  2263.       
  2264. '===== Make the key Upper Case
  2265.       
  2266.        a$ = UCASE$(a$)
  2267.  
  2268. '===== Check for escape key
  2269.  
  2270.        IF a$ = CHR$(27) THEN sel = -1: EXIT SUB
  2271. '
  2272. '===== If key is <ENTER> then return with selection number in sel
  2273. '
  2274. ret:   IF a$ <> CHR$(13) GOTO test.num
  2275.       
  2276.        sel = (s * 10) + subnum: EXIT SUB
  2277.                      
  2278.  
  2279. '===== Test for number key
  2280. test.num:
  2281.  
  2282. q = VAL(a$)
  2283. IF q >= 1 AND q <= cv AND q <= 9 AND q > 0 THEN
  2284.     subsel = q
  2285.     GOSUB update.sub
  2286.     a$ = CHR$(13): GOTO ret
  2287. END IF
  2288.       
  2289.  
  2290. '====== Test for first letter key
  2291.      
  2292. '===== If c<>0 then add 1 to c and test for match
  2293. '===== this allows multiple selections with the same letter
  2294. '===== round-robin type
  2295. '
  2296. test.ltr:
  2297.  
  2298. IF c <> 0 THEN
  2299.     c = c + 1
  2300.     c = INSTR(c, s$, a$)
  2301.     IF c <> 0 GOTO tr
  2302. END IF
  2303. c = INSTR(s$, a$)
  2304. IF c = 0 THEN GOTO get.key
  2305.  
  2306. tr:
  2307.  
  2308. olds = s
  2309. s = c - 1
  2310. subsel = 1
  2311. subnum = 1
  2312. GOSUB dis.sub
  2313. GOTO lp
  2314.  
  2315.  
  2316.  
  2317. '===== Identify cursor keys
  2318.  
  2319. get.curkey:
  2320.    
  2321. a = ASC(RIGHT$(a$, 1))
  2322. IF a <> 77 AND a <> 75 AND a <> 72 AND a <> 80 GOTO get.key
  2323. olds = s
  2324. IF a <> 77 AND a <> 75 GOTO get.updnkey
  2325.     
  2326. IF a = 77 THEN s = s + 1
  2327. IF a = 75 THEN s = s - 1
  2328. IF s > sel THEN s = 0
  2329. IF s < 0 THEN s = sel
  2330. c = s
  2331. subsel = 1
  2332. subnum = 1
  2333.    
  2334. GOSUB dis.sub
  2335. GOTO lp
  2336.  
  2337.  
  2338. get.updnkey:
  2339.  
  2340. IF a = 80 THEN subsel = subsel + 1
  2341. IF a = 72 THEN subsel = subsel - 1
  2342. GOSUB update.sub
  2343. GOTO lp
  2344.  
  2345.  
  2346. '
  2347. '===== Display the submenu box
  2348. '
  2349. dis.sub:
  2350.  
  2351. i = 0
  2352. a = 0
  2353. xtemp = x
  2354.       
  2355. COLOR fg, bg
  2356. FOR i = 1 TO cv + 2
  2357. LOCATE 3 + i, zold - 1
  2358. PRINT STRING$(aold + 6, CHR$(pchar))
  2359. NEXT
  2360.      
  2361.       
  2362. '===== Get the length of the longest string
  2363. '===== to be displayed
  2364.       
  2365.       
  2366. i = 0
  2367.       
  2368. DO
  2369.     i = i + 1
  2370.     IF LEN(sel$(s, i)) > a THEN a = LEN(sel$(s, i))
  2371. LOOP WHILE sel$(s, i) <> "" AND i < 10
  2372.       
  2373. cv = 0
  2374.       
  2375. IF i = 1 THEN RETURN
  2376. aold = a
  2377. cvold = cv
  2378. cv = i - 1
  2379. cvold = cv
  2380.  
  2381. '===== Calculate cursor position
  2382.       
  2383. x = 2
  2384. FOR i = 0 TO s
  2385. x = x + LEN(sel$(i, 0))
  2386. NEXT
  2387.  
  2388. '===== Set cursor on start of selection string
  2389.     
  2390. x = x - LEN(sel$(i - 1, 0))
  2391.  
  2392.  
  2393.  
  2394. '===== If starting position + longest string found > 80 then adjust start pos.
  2395. '===== If starting pos. < 2 then set it to 2.
  2396.  
  2397.        
  2398. IF x + a > 78 THEN z = 76 - a ELSE z = x - 5
  2399.     
  2400. IF z < 2 THEN z = 2
  2401. zold = z
  2402. LOCATE 3, 1
  2403. PRINT "╚" + STRING$(78, "═") + "╝";
  2404. LOCATE 3, x: PRINT "╗";
  2405. PRINT SPACE$(LEN(RTRIM$(sel$(s, 0))) - 1);
  2406. PRINT "╔";
  2407. LOCATE 4, z - 1: PRINT "╔" + STRING$(x - z, "═");
  2408. LOCATE 4, x: PRINT "╝";
  2409. PRINT SPACE$(LEN(RTRIM$(sel$(s, 0))) - 1);
  2410. PRINT "╚";
  2411. b = x + LEN(sel$(s, 0)) - 1
  2412. n = z + a + 4
  2413. PRINT STRING$((n) - b, "═") + "╗";
  2414.  
  2415. FOR i = 1 TO cv
  2416.     LOCATE i + 4, z - 1: PRINT "║";
  2417.     PRINT LTRIM$(STR$(i)) + ". " + sel$(s, i) + SPACE$(a - (LEN(sel$(s, i)) - 1)) + "║";
  2418. NEXT
  2419.       
  2420. LOCATE i + 4, z - 1: PRINT "╚" + STRING$(a + 4, "═") + "╝";
  2421. x = xtemp
  2422.  
  2423.  
  2424. '===== Display the selection in the submenu
  2425.  
  2426. update.sub:
  2427.       
  2428.       
  2429. IF cv = 0 THEN RETURN
  2430. IF subsel > cv THEN subsel = 1
  2431. IF subsel < 1 THEN subsel = cv
  2432. LOCATE subnum + 4, z
  2433. PRINT LTRIM$(STR$(subnum)) + ". " + sel$(s, subnum);
  2434. LOCATE subsel + 4, z
  2435. COLOR 15, fg
  2436. PRINT LTRIM$(STR$(subsel)) + ". " + sel$(s, subsel);
  2437. subnum = subsel
  2438. RETURN
  2439.  
  2440. '===== Identify menu item chosen by mouse click
  2441.  
  2442. checkmouse:
  2443. LOCATE 24, 12
  2444. IF mousey > 3 OR mousey < 11 THEN
  2445.     IF SCREEN(mousey + 1, mousex + 1) <> pchar THEN
  2446.         a$ = LTRIM$(STR$(mousey - 3))
  2447.     END IF
  2448. END IF
  2449. IF mousey = 1 THEN
  2450.     realx = mousex + 1
  2451.     realy = 2
  2452.     IF NOT SCREEN(realy, realx) = 32 THEN
  2453.         testx = realx
  2454.         DO
  2455.             getchar = SCREEN(realy, testx - 1)
  2456.             testx = testx - 1
  2457.         LOOP WHILE getchar <> 32
  2458.         menuchar = SCREEN(realy, testx + 1)
  2459.         a$ = CHR$(menuchar)
  2460.     END IF
  2461. END IF
  2462.  
  2463. RETURN
  2464.  
  2465.  
  2466. END SUB
  2467.  
  2468. SUB MouseDriver (m0, m1, m2, m3) STATIC
  2469. '============================================================================
  2470. '  MouseDriver uses interrupt 51 to invoke mouse functions.
  2471. '============================================================================
  2472.  
  2473.    DIM regs AS register
  2474.  
  2475.    regs.ax = m0
  2476.    regs.bx = m1
  2477.    regs.cx = m2
  2478.    regs.dx = m3
  2479.  
  2480.    Interrupt 51, regs, regs
  2481.   
  2482.    m0 = regs.ax
  2483.    m1 = regs.bx
  2484.    m2 = regs.cx
  2485.    m3 = regs.dx
  2486.  
  2487. END SUB
  2488.  
  2489. SUB MouseGetInfo (mousex, mousey, isbutton$, mouse$, a$)
  2490.  
  2491. '============================================================================
  2492. '  MouseGetInfo returns the mouse coordinates and button status
  2493. '  as mousex, mousey, and isbutton$
  2494. '============================================================================
  2495.  
  2496.    DIM Buffer(4000)
  2497.    isbutton$ = "UP"
  2498.    CALL WaitaBit(.15)
  2499.    IF mouse$ = "YES" THEN MouseOn
  2500.   
  2501.    m1 = 3               'Mouse function 3, Get Button Status and Mouse Position
  2502.   
  2503.       MouseDriver m1, m2, m3, m4
  2504.       mousex = m3 \ 8
  2505.       mousey = m4 \ 8
  2506.       IF (m2 AND 1) = 1 OR (m2 AND 2) = 2 OR m2 = 3 THEN isbutton$ = "DOWN" ELSE isbutton$ = "UP"
  2507.  
  2508. END SUB
  2509.  
  2510. SUB MouseInit (mouse$)
  2511. '============================================================================
  2512. '  MouseInit checks, then initializes the mouse
  2513. '============================================================================
  2514.  
  2515.    DIM Buffer(4000)
  2516.  
  2517.    COLOR 7, 0                   'FOREGROUND = white, BACKGROUND = black
  2518.    
  2519.    m1 = 0
  2520.    MouseDriver m1, m2, m3, m4
  2521.   
  2522.    IF NOT m1 THEN
  2523.     mouse$ = "NO"
  2524.    ELSE
  2525.     mouse$ = "YES"
  2526.    END IF
  2527.  
  2528.  
  2529. END SUB
  2530.  
  2531. SUB MouseOff
  2532. '============================================================================
  2533. '  MouseOff turns the mouse cursor off.
  2534. '============================================================================
  2535.  
  2536.    m1 = 2
  2537.    MouseDriver m1, m2, m3, m4
  2538.  
  2539. END SUB
  2540.  
  2541. SUB MouseOn
  2542. '============================================================================
  2543. 'MouseOn turns the mouse cursor on.
  2544. '============================================================================
  2545.   
  2546.    m1 = 1
  2547.    MouseDriver m1, m2, m3, m4
  2548.  
  2549. END SUB
  2550.  
  2551. '===============================================
  2552. 'Moves mouse cursor to specific screen location.
  2553. '===============================================
  2554. SUB MoveMouse (mmousey, mmousex)
  2555. DIM regs AS register
  2556. regs.ax = 4
  2557. regs.cx = (mmousex - 1) * 8
  2558. regs.dx = (mmousey - 1) * 8
  2559. WaitaBit .15
  2560. Interrupt 51, regs, regs
  2561.  
  2562. END SUB
  2563.  
  2564. SUB NextFile (filename$)
  2565. DIM inreg AS register, outreg AS register
  2566. inreg.ax = &H4F00
  2567. CALL Interrupt(&H21, inreg, outreg)
  2568. IF (outreg.flags AND 1) = 0 THEN
  2569.     CALL MakeName(filename$):
  2570. ELSE
  2571.     filename$ = ""
  2572. END IF
  2573. END SUB
  2574.  
  2575. SUB SetMemDta (memdta$)
  2576. DIM inreg AS register, outreg AS register
  2577. inreg.dx = SADD(memdta$)
  2578. inreg.ds = VARSEG(memdta$)
  2579. inreg.ax = &H1A00
  2580. CALL Interrupt(&H21, inreg, outreg)
  2581.  
  2582. END SUB
  2583.  
  2584. '
  2585. '===== hold! is measured in seconds. Accurate to .01 sec.
  2586. '
  2587. SUB WaitaBit (hold!)
  2588. delay! = TIMER + hold!
  2589. WHILE TIMER < delay!: WEND
  2590. END SUB
  2591.  
  2592. '
  2593. '=====Passes keystroke through a filter.  If it's a special key
  2594. '=====the name of the key is returned. Else the keystroke returns.
  2595. '=====This routine is fast enough for any typing speed.
  2596. '
  2597. SUB WhatKey (keypress$)
  2598. IF LEN(keypress$) = 1 THEN
  2599.     IF ASC(keypress$) = 13 THEN keypress$ = "ENTER"
  2600.     IF ASC(keypress$) = 9 THEN keypress$ = "TAB"
  2601.     IF ASC(keypress$) = 8 THEN keypress$ = "BACK"
  2602.     IF ASC(keypress$) = 27 THEN keypress$ = "ESC"
  2603. END IF
  2604.  
  2605. IF LEN(keypress$) = 2 THEN
  2606.     second$ = RIGHT$(keypress$, 1)
  2607. SELECT CASE second$
  2608.     
  2609.     CASE "H"
  2610.          keypress$ = "CRSUP"
  2611.     CASE "P"
  2612.         keypress$ = "CRSDOWN"
  2613.     CASE "K"
  2614.         keypress$ = "LEFT"
  2615.     CASE "M"
  2616.         keypress$ = "RIGHT"
  2617.     CASE "G"
  2618.         keypress$ = "HOME"
  2619.     CASE "O"
  2620.         keypress$ = "END"
  2621.     CASE "R"
  2622.         keypress$ = "INS"
  2623.     CASE "S"
  2624.         keypress$ = "DEL"
  2625.     CASE "I"
  2626.         keypress$ = "PGUP"
  2627.     CASE "Q"
  2628.         keypress$ = "PGDN"
  2629.     CASE CHR$(15)
  2630.         keypress$ = "SHFTTAB"
  2631.     CASE "w"
  2632.         keypress$ = "CTRLHOME"
  2633.     CASE "u"
  2634.         keypress$ = "CTRLEND"
  2635.     CASE "s"
  2636.         keypress$ = "CTRLLEFT"
  2637.     CASE "t"
  2638.         keypress$ = "CTRLRIGHT"
  2639.     CASE "v"
  2640.         keypress$ = "CTRLPGDN"
  2641.     CASE CHR$(132)
  2642.         keypress$ = "CTRLPGUP"
  2643.     CASE ";"
  2644.         keypress$ = "F1"
  2645.     CASE "<"
  2646.         keypress$ = "F2"
  2647.     CASE "="
  2648.         keypress$ = "F3"
  2649.     CASE ">"
  2650.         keypress$ = "F4"
  2651.     CASE "?"
  2652.         keypress$ = "F5"
  2653.     CASE "@"
  2654.         keypress$ = "F6"
  2655.     CASE "A"
  2656.         keypress$ = "F7"
  2657.     CASE "B"
  2658.         keypress$ = "F8"
  2659.     CASE "C"
  2660.         keypress$ = "F9"
  2661.     CASE "D"
  2662.         keypress$ = "F10"
  2663.     CASE "à"
  2664.         keypress$ = "F11"
  2665.     CASE "å"
  2666.         keypress$ = "F12"
  2667.     
  2668.     CASE "h"
  2669.         keypress$ = "AF1"
  2670.     CASE "i"
  2671.         keypress$ = "AF2"
  2672.     CASE "j"
  2673.         keypress$ = "AF3"
  2674.     CASE "k"
  2675.         keypress$ = "AF4"
  2676.     CASE "l"
  2677.         keypress$ = "AF5"
  2678.     CASE "m"
  2679.         keypress$ = "AF6"
  2680.     CASE "n"
  2681.         keypress$ = "AF7"
  2682.     CASE "o"
  2683.         keypress$ = "AF8"
  2684.     CASE "p"
  2685.         keypress$ = "AF9"
  2686.     CASE "q"
  2687.         keypress$ = "AF10"
  2688.     CASE "ï"
  2689.         keypress$ = "AF11"
  2690.     CASE "î"
  2691.         keypress$ = "AF12"
  2692.     CASE "T"
  2693.         keypress$ = "SF1"
  2694.     CASE "U"
  2695.         keypress$ = "SF2"
  2696.     CASE "V"
  2697.         keypress$ = "SF3"
  2698.     CASE "W"
  2699.         keypress$ = "SF4"
  2700.     CASE "X"
  2701.         keypress$ = "SF5"
  2702.     CASE "Y"
  2703.         keypress$ = "SF6"
  2704.     CASE "Z"
  2705.         keypress$ = "SF7"
  2706.     CASE "["
  2707.         keypress$ = "SF8"
  2708.     CASE "\"
  2709.         keypress$ = "SF9"
  2710.     CASE "]"
  2711.         keypress$ = "SF10"
  2712.     CASE "ç"
  2713.         keypress$ = "SF11"
  2714.     CASE "ê"
  2715.         keypress$ = "SF12"
  2716.     CASE "^"
  2717.         keypress$ = "CF1"
  2718.     CASE "_"
  2719.         keypress$ = "CF2"
  2720.     CASE "`"
  2721.         keypress$ = "CF3"
  2722.     CASE "a"
  2723.         keypress$ = "CF4"
  2724.     CASE "b"
  2725.         keypress$ = "CF5"
  2726.     CASE "c"
  2727.         keypress$ = "CF6"
  2728.     CASE "d"
  2729.         keypress$ = "CF7"
  2730.     CASE "e"
  2731.         keypress$ = "CF8"
  2732.     CASE "f"
  2733.         keypress$ = "CF9"
  2734.     CASE "g"
  2735.         keypress$ = "CF10"
  2736.     CASE "ë"
  2737.         keypress$ = "CF11"
  2738.     CASE "è"
  2739.         keypress$ = "CF12"
  2740.     END SELECT
  2741. END IF
  2742.  
  2743. END SUB
  2744.  
  2745.