home *** CD-ROM | disk | FTP | other *** search
/ Shareware Supreme Volume 6 #1 / swsii.zip / swsii / 102 / QBS-0102.ZIP / QBS102-4.DOC < prev    next >
Text File  |  1993-03-24  |  43KB  |  1,445 lines

  1. ════════════════════════════════════════════════════════════════════════════════
  2.  Area:    QuickBasic
  3.   Msg:    #3203
  4.  Date:    02-11-93 11:52 (Public) 
  5.  From:    MARK BUTLER              
  6.  To:      RUSTY GORDON             
  7.  Subject: EditLine  1/2            
  8. ────────────────────────────────────────────────────────────────────────────────
  9. Once upon a time Rusty Gordon uttered these sage words to All:
  10.  
  11.  RG> ....how do I put a limit to the  number of characters the 
  12.  RG> user can enter as in the sample below: 
  13.  
  14.  RG> Enter Feature Name ▒▒▒▒▒▒▒▒▒▒▒▒▒▒.
  15.  
  16.  I don't know about short but this'll work...
  17.  
  18. ==========================8< Cut Here 8<=============================
  19. DEFINT A-Z
  20. DECLARE SUB EditLine (a$, exitCode)
  21. DECLARE FUNCTION ScanCode ()
  22.  
  23.     CLS
  24.     LOCATE 12, 1
  25.     PRINT "Enter a 9 character string: ";
  26.     a$ = SPACE$(9)
  27.     COLOR 0, 7
  28.     CALL EditLine(a$, exitCode)
  29.     COLOR 7, 0
  30.     PRINT
  31.     PRINT
  32.     PRINT "a$ = "; a$
  33.     PRINT "exitCode ="; exitCode
  34.  
  35.     '*** 'exitCode%' will help you to discren whether the user wants
  36.     '*** go back up to the field above, or the field below the current,
  37.     '*** or abort without change etc etc.
  38.  
  39. SUB EditLine (a$, exitCode) STATIC
  40.     CONST FALSE = 0, TRUE = NOT FALSE
  41.     CONST BACKSPACE = 8
  42.     CONST CTRLLEFTARROW = -115
  43.     CONST CTRLRIGHTARROW = -116
  44.     CONST CTRLY = 25
  45.     CONST CTRLQ = 17
  46.     CONST DELETEKEY = -83
  47.     CONST DOWNARROW = -80
  48.     CONST ENDKEY = -79
  49.     CONST ENTER = 13
  50.     CONST ESCAPE = 27
  51.     CONST HOME = -71
  52.     CONST INSERTKEY = -82
  53.     CONST LEFTARROW = -75
  54.     CONST RIGHTARROW = -77
  55.     CONST TABKEY = 9
  56.     CONST UPARROW = -72
  57.  
  58.     row = CSRLIN
  59.     col = POS(0)
  60.     length = LEN(a$)
  61.     ptr = 0
  62.  
  63.     insirt = TRUE
  64.     quit = FALSE
  65.     original$ = a$
  66.        
  67.     DO
  68.         LOCATE row, col, 0
  69.         PRINT a$;
  70.         IF insirt THEN
  71.             LOCATE row, col + ptr, 1, 6, 7
  72.         ELSE
  73.             LOCATE row, col + ptr, 1, 1, 7
  74.         END IF
  75.        
  76.         kee = ScanCode
  77.         SELECT CASE kee
  78.             CASE INSERTKEY
  79.                 IF insirt THEN
  80.                     insirt = FALSE
  81.                 ELSE
  82.                     insirt = TRUE
  83.                 END IF
  84.             CASE BACKSPACE
  85.                 IF ptr THEN
  86.                     a$ = a$ + " "
  87.                     a$ = LEFT$(a$, ptr - 1) + MID$(a$, ptr + 1)
  88.                     ptr = ptr - 1
  89.                 END IF
  90.             CASE DELETEKEY
  91.                 a$ = a$ + " "
  92.                 a$ = LEFT$(a$, ptr) + MID$(a$, ptr + 2)
  93.             CASE UPARROW
  94.                 exitCode = 1
  95.                 quit = TRUE
  96.             CASE DOWNARROW
  97.                 exitCode = -1
  98.                 quit = TRUE
  99.             CASE LEFTARROW
  100.                 IF ptr THEN
  101.                     ptr = ptr - 1
  102.                 END IF
  103.             CASE RIGHTARROW
  104.                 IF ptr < length - 1 THEN
  105.                     ptr = ptr + 1
  106. ==========================8< Cut Here 8<=============================
  107.  
  108.  >>> continued to the next message
  109.  
  110. --- timEd/B7 * This is your eggs on fried drugs..er..uh..aw forget it.
  111.  * Origin:  Terminal Oasis, Portland OR  (1:105/330.5)
  112.  
  113.  
  114.  
  115. ════════════════════════════════════════════════════════════════════════════════
  116.  Area:    QuickBasic
  117.   Msg:    #3204
  118.  Date:    02-11-93 11:56 (Public) 
  119.  From:    MARK BUTLER              
  120.  To:      RUSTY GORDON             
  121.  Subject: EditLine  2/2            
  122. ────────────────────────────────────────────────────────────────────────────────
  123.  >>> continued from the previous message
  124.  
  125.                 END IF
  126.             CASE ENTER
  127.                 exitCode = 0
  128.                 quit = TRUE
  129.             CASE HOME
  130.                 ptr = 0
  131.             CASE ENDKEY
  132.                 ptr = length - 1
  133.             CASE CTRLRIGHTARROW
  134.                 DO UNTIL MID$(a$, ptr + 1, 1) = " " OR ptr = length - 1
  135.                     ptr = ptr + 1
  136.                 LOOP
  137.                 DO UNTIL MID$(a$, ptr + 1, 1) <> " " OR ptr = length - 1
  138.                     ptr = ptr + 1
  139.                 LOOP
  140.             CASE CTRLLEFTARROW
  141.                 DO UNTIL MID$(a$, ptr + 1, 1) = " " OR ptr = 0
  142.                     ptr = ptr - 1
  143.                 LOOP
  144.                 DO UNTIL MID$(a$, ptr + 1, 1) <> " " OR ptr = 0
  145.                     ptr = ptr - 1
  146.                 LOOP
  147.                 DO UNTIL MID$(a$, ptr + 1, 1) = " " OR ptr = 0
  148.                     ptr = ptr - 1
  149.                 LOOP
  150.                 IF ptr THEN
  151.                     ptr = ptr + 1
  152.                 END IF
  153.             CASE CTRLY
  154.                 a$ = SPACE$(length)
  155.                 ptr = 0
  156.             CASE CTRLQ
  157.                 ctrlQflag = TRUE
  158.             CASE ESCAPE
  159.                 a$ = original$
  160.                 ptr = 0
  161.                 insirt = TRUE
  162.             CASE IS > 255
  163.                 SOUND 999, 1
  164.             CASE IS < 32
  165.                 SOUND 999, 1
  166.             CASE ELSE
  167.                 kee$ = CHR$(kee)
  168.                 IF insirt THEN
  169.                     a$ = LEFT$(a$, ptr) + kee$ + MID$(a$, ptr + 1)
  170.                     a$ = LEFT$(a$, length)
  171.                 ELSEIF ptr < length THEN
  172.                     MID$(a$, ptr + 1, 1) = kee$
  173.                 END IF
  174.                 IF ptr < length THEN
  175.                     ptr = ptr + 1
  176.  
  177.                 ELSE
  178.                     SOUND 999, 1
  179.                 END IF
  180.                 IF kee$ = "y" AND ctrlQflag THEN
  181.                     IF ptr <= length THEN
  182.                         sp = length - ptr + 1
  183.                         MID$(a$, ptr, sp) = SPACE$(sp)
  184.                         ptr = ptr - 1
  185.                     END IF
  186.                 END IF
  187.                 ctrlQflag = FALSE
  188.         END SELECT
  189.     LOOP UNTIL quit
  190. END SUB
  191.  
  192. FUNCTION ScanCode
  193.     DO
  194.         a$ = INKEY$
  195.     LOOP WHILE a$ = ""
  196.     IF ASC(LEFT$(a$, 1)) = 0 THEN
  197.         ScanCode = -ASC(RIGHT$(a$, 1))
  198.     ELSE
  199.         ScanCode = ASC(a$)
  200.     END IF
  201. END FUNCTION
  202. ==========================8< Cut Here 8<=============================
  203.  
  204.   Hope this helps..
  205.  
  206. ·∙■[-M-H-B-]■∙·
  207.  
  208. --- timEd/B7 * 186,000 miles/sec: Not just a good idea, it's the LAW.
  209.  * Origin:  Terminal Oasis, Portland OR  (1:105/330.5)
  210.  
  211.  
  212.  
  213. ════════════════════════════════════════════════════════════════════════════════
  214.  Area:    QuickBasic
  215.   Msg:    #3866
  216.  Date:    02-13-93 12:36 (Public) 
  217.  From:    ROB MCKEE                
  218.  To:      ZACK JONES               
  219.  Subject: Help                     
  220. ────────────────────────────────────────────────────────────────────────────────
  221. Hello Zack!
  222.    You wrote in a message to Hugh Martin:
  223.  
  224.  ZJ> Howdy Hugh!
  225.  
  226.  ZJ> 08 Feb 93, Hugh Martin writes to Zack Jones:
  227.  
  228.  HM> You're funny, Zack.
  229.  
  230.  ZJ> I don't know 'bout that - considering some of the mail I've
  231.  ZJ> gotten here lately. I wonder if there's a way to use an asm
  232.  ZJ> routine to print 2000 characters and not scroll the screen?
  233.  
  234.  Yes, see below...
  235.  
  236.  ZJ> I'll ask Tom Hanlin over on BASNet and see what he says. 
  237.  
  238. WHAT! When I'm here? Traitor <G> <giggle> ;)
  239.  
  240. Int 10 Func 9
  241.     ' $INCLUDE: 'qbx.bi'
  242.     DIM r AS RegType
  243.     LOCATE 1, 1 ' can use this or INTERRUPT &h10 (r.ax=&h0200)     
  244. Char2Write% = 179 ' can be 0 to 255
  245.       Page% = 0
  246.       Attribute = 7
  247.       CountOfrepeat = 1920             ' 2000 for full screen       r.ax = 
  248. &H9 * 256 + Char2Write%
  249.       r.bx = Page% * 256 + Attribute
  250.       r.cx = CountOfrepeat
  251.       Interrupt &H10, r, r
  252.       ' Returns None
  253.     DO: IF INKEY$ = CHR$(27) THEN END
  254.     : LOOP                                                     
  255.  
  256.  Catcha Later , I'll see you on the flip side - Rob
  257.  
  258.  
  259. --- timEd/B6
  260.  * Origin: Another Quik_Bas Point in Richmond, CA (1:125/411)
  261.  
  262.  
  263. ════════════════════════════════════════════════════════════════════════════════
  264.  Area:    QuickBasic
  265.   Msg:    #3893
  266.  Date:    02-12-93 08:58 (Public) 
  267.  From:    QUINN TYLER JACKSON      
  268.  To:      JOE NEGRON               
  269.  Subject: Version Numerology       
  270. ────────────────────────────────────────────────────────────────────────────────
  271. JN>QTJ> I've always wondered about releases in the hundredth.  .01 means what?
  272.  
  273. JN>The general practice seems to be that a change in the units
  274. JN>(the "x" in "X.99") indicate a major new release; a change in
  275. JN>the tenths indicate some added functionality (for example, PDS
  276. JN>7.1 added a few features that PDS 7.0 did not have, like the
  277. JN>REDIM PRESERVE, if I recall correctly); and a change in the
  278. JN>hundredths digit indicates a bug fix, and possibly some minor
  279. JN>added functionality.
  280.  
  281. I knew about this, but the convention seems different with many
  282. developers.  I suppose the most important thing is that any given
  283. company stick to the same schedule.  For instance, my company's policy
  284. is as follows:
  285.  
  286. 1.  Beta's of previously unreleased software are 0.00X
  287. 2.  Entirely new features and format changes are X.00
  288. 3.  Bug fixes are 0.X0
  289. 4.  Distribution changes are 0.0X.
  290.  
  291. Distrubution changes are changes in documenation or diskette order, but
  292. not the actual software or support files.
  293.  
  294. Bug fixes are fixes of actual errors that can be isolated and
  295. identified.  Their work around must NOT change database specs or
  296. configuration files, otherwise this is a X.00 change.
  297.  
  298. New features are like adding Fidonet support to a mailer that never had
  299. it before.
  300.  
  301. Format changes are like totally reworking a database spec so that
  302. previous versions cannot read data or configurations files.
  303.  
  304. Using this system, it is assured that version 1.2 and version 1.9 are
  305. fully compatible.  1.99 and 2.0 may not be, even though they are only a
  306. hundredth apart.
  307.  
  308. This is how we decided it at the company's conception.  Now to actually
  309. release something....
  310.  
  311. JN>Of course, some publishers use the version numbers as a sort of
  312. JN>marketing tool.  For example, Microsoft added some pretty basic
  313. JN>functionality to Word 4.0 and released it as Word 5.0; I think
  314. JN>they did this to keep their version number "current" with
  315. JN>WordPerfect 5.0.
  316.  
  317. It's been said that no one buys version 1.0 of anything.  So, a
  318. developer may issue a limited release as 1.0, and then, make a few
  319. changes here and there, and go an release 1.5, or even 2.0.
  320.  
  321.  
  322. Quinn
  323.  
  324.  
  325.  * SLMR 2.1a * 
  326.  
  327. --- Maximus 2.01wb
  328.  * Origin: VKUG/VPCC QuickBasic Echo - Richmond, BC (1:153/151)
  329.  
  330.  
  331.  
  332. ════════════════════════════════════════════════════════════════════════════════
  333.  Area:    QuickBasic
  334.   Msg:    #4932
  335.  Date:    02-13-93 19:39 (Public) 
  336.  From:    EARL MONTGOMERY          
  337.  To:      ALL                      
  338.  Subject: Graphic Font Editor Part 
  339. ────────────────────────────────────────────────────────────────────────────────
  340. ' Part 1 of 6 parts. This is the basic program. Remember to
  341. ' load it using qb/l. The program is a graphics Font editor
  342. ' that can be used in EGA or VGA screen modes. You will
  343. ' also need FONTGEN.DOC, SROMCHAR.BAS, and LOADFONT.BAS
  344. ' which will follow this 6 part Basic Pgm
  345.      '$INCLUDE: 'qb.bi'
  346.      DIM inregs AS REGTYPEX, outregs AS REGTYPEX
  347.      DIM SCRN2(3584)
  348.      DEF SEG = 0
  349.      CLS
  350.      INPUT "Keyboard or Mouse (K or M)? ", i$
  351.      IF i$ = "K" OR i$ = "k" THEN flag$ = "":  ELSE flag$ = "mouse"
  352.      CLS
  353.      DEF SEG = VARSEG(SCRN2(0))
  354.      V = VARPTR(SCRN2(0))
  355.      BLOAD "ROMFONT.DAT", V
  356.      SCREEN 9
  357.      CLS
  358.      KEY OFF
  359.      DEFINT X-Y
  360.      inregs.ax = &H1121
  361.      inregs.cx = 14
  362.      inregs.ES = VARSEG(SCRN2(0))
  363.      inregs.BP = VARPTR(SCRN2(0))
  364.      CALL interruptx(&H10, inregs, outregs)
  365.      DEF SEG
  366.      ON ERROR GOTO ErrorTrap
  367.      DIM a(100)
  368.      H = 280
  369.      V = 168
  370.      IF flag$ = "mouse" THEN
  371.      GOTO JumpIfMouse
  372.      END IF
  373.      DRAW "bm80,164;r4;br2;bu2;u3;bd5;br2;r4;bl6;bd2;d3;"
  374.      GET (78, 157)-(95, 171), a
  375.      LINE (78, 157)-(95, 171), 0, BF
  376. JumpIfMouse:
  377.      LOCATE 6, 1
  378.      COLOR 14
  379.      PRINT "ROMFONT"
  380. ReEntry3:
  381.      n = 65
  382.      KEY(10) ON
  383.      ON KEY(10) GOSUB ExitPgm
  384.      COLOR 12
  385.      LOCATE 2, 29
  386.      PRINT "EGA/VGA Font Editor"
  387.      LOCATE 4, 32
  388.      PRINT "ELM Software"
  389. ReEntry1:
  390.      LOCATE 2, 60
  391.      COLOR 7
  392.      PRINT "Enter=Accept New Char"
  393.  
  394.      LOCATE 4, 60
  395.      PRINT "F10=Exit Pgm"
  396.      LOCATE 6, 60
  397.      PRINT "Minus=Prev char";
  398.      LOCATE 8, 60
  399.      PRINT "Plus=Next char";
  400.      LOCATE 10, 60
  401.      PRINT "D=Place Pixel";
  402.      LOCATE 12, 60
  403.      PRINT "E=Erase Pixel";
  404.      LOCATE 14, 60
  405.      PRINT "S=Save New Char Set";
  406.      LOCATE 16, 60
  407.      PRINT "C=Change ASCII Value";
  408.      LOCATE 18, 60
  409.      PRINT "L=Load New Char Set";
  410.      LOCATE 20, 60
  411.      PRINT "A=Current Char Set";
  412.      LOCATE 22, 60
  413.      PRINT "X=Clear Screen";
  414.      LOCATE 2, 2
  415.      COLOR 14
  416.      PRINT CHR$(n)
  417. 'End of part 1 of 6
  418.  
  419. --- Maximus 2.01wb
  420.  * Origin: Rabbit and Snake's BBS - Richardson, Texas (1:124/6108)
  421.  
  422.  
  423. ════════════════════════════════════════════════════════════════════════════════
  424.  Area:    QuickBasic
  425.   Msg:    #4933
  426.  Date:    02-13-93 19:42 (Public) 
  427.  From:    EARL MONTGOMERY          
  428.  To:      ALL                      
  429.  Subject: Graphic Font Editor part 
  430. ────────────────────────────────────────────────────────────────────────────────
  431. 'Part 2 of 6 Font Editor
  432.      LOCATE 4, 1
  433.      COLOR 12
  434.      PRINT n;
  435.      COLOR 8
  436.      FOR y = 90 TO 250 STEP 10
  437.      LINE (1, y)-(161, y)
  438.      NEXT
  439.      FOR x = 1 TO 161 STEP 20
  440.      LINE (x, 90)-(x, 250)
  441.      NEXT
  442.      FOR y = 90 TO 250 STEP 10
  443.      LINE (220, y)-(380, y)
  444.      NEXT
  445.      FOR x = 220 TO 380 STEP 20
  446.      LINE (x, 90)-(x, 250)
  447.      NEXT
  448.      LOCATE 19, 2: COLOR 14: PRINT "Template Character";
  449.      LOCATE 19, 32: PRINT "Edit Character";
  450. ReEntry2:
  451.      FOR x = 8 TO 15
  452.      FOR y = 14 TO 29
  453.      IF POINT(x, y) = 14 THEN
  454.      GOSUB AsciiToMainBitMap
  455.      END IF
  456.      NEXT
  457.      NEXT
  458.      IF flag$ = "mouse" THEN
  459.      GOTO MainMouseRoutine
  460.      END IF
  461. KeyBoardWait:
  462.      i$ = INKEY$
  463.      PUT (H, V), a
  464.      PUT (H, V), a
  465.      IF i$ = "" THEN
  466.      GOTO KeyBoardWait
  467.      END IF
  468.      AA = ASC(i$)
  469.      IF AA = 0 THEN
  470.      GOTO ArrowKeys
  471.      END IF
  472.      IF i$ = "=" OR i$ = "+" THEN
  473.      GOSUB IncreaseAsciiValue
  474.      END IF
  475.      IF i$ = "-" OR i$ = "_" THEN
  476.      GOSUB DecreaseAsciiValue
  477.      END IF
  478.      IF i$ = "D" OR i$ = "d" THEN
  479.      PAINT (H + 2, V + 4), 2, 8
  480.      END IF
  481.      IF i$ = "E" OR i$ = "e" THEN
  482.      PAINT (H + 2, V + 4), 0, 8
  483.      END IF
  484.  
  485.      IF i$ = "S" OR i$ = "s" THEN
  486.      GOSUB SaveNewCharSetToDisk
  487.      END IF
  488.      IF i$ = "C" OR i$ = "c" THEN
  489.      GOTO ChangeAsciiValue
  490.      END IF
  491.      IF i$ = "L" OR i$ = "l" THEN
  492.      GOTO LoadNewCharSet
  493.      END IF
  494.      IF i$ = "A" OR i$ = "a" THEN
  495.      GOSUB ShowPresentCharSet
  496.      END IF
  497.      IF i$ = "x" OR i$ = "X" THEN
  498.      ec = 1
  499.      GOSUB ClearScreen
  500.      END IF
  501.      IF i$ = CHR$(13) THEN
  502.      GOSUB UpdateArray
  503.      END IF
  504.      GOTO KeyBoardWait
  505. ClearScreen:
  506.      IF ec = 1 THEN ec = 0: GOTO EditOnly
  507.      FOR x = 11 TO 151 STEP 20
  508.      FOR y = 85 TO 250 STEP 10
  509. ' end of part 2 of 6
  510.  
  511. --- Maximus 2.01wb
  512.  * Origin: Rabbit and Snake's BBS - Richardson, Texas (1:124/6108)
  513.  
  514.  
  515. ════════════════════════════════════════════════════════════════════════════════
  516.  Area:    QuickBasic
  517.   Msg:    #4934
  518.  Date:    02-13-93 19:44 (Public) 
  519.  From:    EARL MONTGOMERY          
  520.  To:      ALL                      
  521.  Subject: Graphic Font Editor part 
  522. ────────────────────────────────────────────────────────────────────────────────
  523. 'Part 3 of 6 Font Editor
  524.      PAINT (x, y), 0, 8
  525.      NEXT: NEXT
  526. EditOnly:
  527.      FOR x = 230 TO 370 STEP 20
  528.      FOR y = 85 TO 250 STEP 10
  529.      PAINT (x, y), 0, 8
  530.      NEXT: NEXT
  531.      RETURN
  532. ArrowKeys:
  533.      IF ASC(MID$(i$, 2)) = 75 THEN
  534.      H = H - 20
  535.      END IF
  536.      IF ASC(MID$(i$, 2)) = 77 THEN
  537.      H = H + 20
  538.      END IF
  539.      IF ASC(MID$(i$, 2)) = 72 THEN
  540.      V = V - 10
  541.      END IF
  542.      IF ASC(MID$(i$, 2)) = 80 THEN
  543.      V = V + 10
  544.      END IF
  545.      IF H < 222 THEN
  546.      H = 222
  547.      END IF
  548.      IF H > 362 THEN
  549.      H = 362
  550.      END IF
  551.      IF V < 88 THEN
  552.      V = 88
  553.      END IF
  554.      IF V > 238 THEN
  555.      V = 238
  556.      END IF
  557.      GOTO KeyBoardWait
  558. AsciiToMainBitMap:
  559.      'transfer from ASCII char to main bit map
  560.      PAINT (-150 + (x * 20), -45 + (y * 10)), 2, 8
  561.      PAINT (65 + (x * 20), -45 + (y * 10)), 2, 8
  562.      RETURN
  563. ExitPgm:
  564.      REM exit program
  565.      DEF SEG
  566.      SCREEN 0
  567.      CLS
  568.      END
  569. IncreaseAsciiValue:
  570.      REM increase ascii value
  571.      n = n + 1
  572.      IF n > 122 THEN n = 122
  573.      GOSUB ClearScreen
  574.      LOCATE 3, 2
  575.      PRINT "              ";
  576.  
  577.      GOTO ReEntry1
  578. DecreaseAsciiValue:
  579.      REM decrease ascii value
  580.      n = n - 1
  581.      IF n < 48 THEN n = 48
  582.      GOSUB ClearScreen
  583.      LOCATE 3, 2
  584.      PRINT "              ";
  585.      GOTO ReEntry1
  586. UpdateArray:
  587.      REM Temp Save Routine to memory array only
  588.      S = VARSEG(SCRN2(0))
  589.      O = VARPTR(SCRN2(0))
  590.      DEF SEG = S
  591.      y = 85
  592. IncrementVertical:
  593.      y = y + 10
  594.      IF y > 250 THEN
  595.      GOTO ZeroCounter
  596.      END IF
  597.      x = 230
  598.      IF POINT(x, y) = 2 THEN
  599.      T = 128
  600.      END IF
  601. 'end of part 3 of 6
  602.  
  603. --- Maximus 2.01wb
  604.  * Origin: Rabbit and Snake's BBS - Richardson, Texas (1:124/6108)
  605.  
  606.  
  607. ════════════════════════════════════════════════════════════════════════════════
  608.  Area:    QuickBasic
  609.   Msg:    #4935
  610.  Date:    02-13-93 19:46 (Public) 
  611.  From:    EARL MONTGOMERY          
  612.  To:      ALL                      
  613.  Subject: Graphic Font Editor part 
  614. ────────────────────────────────────────────────────────────────────────────────
  615. ' part 4 of 6 Font Editor
  616.      x = 250
  617.      IF POINT(x, y) = 2 THEN
  618.      T = T + 64
  619.      END IF
  620.      x = 270
  621.      IF POINT(x, y) = 2 THEN
  622.      T = T + 32
  623.      END IF
  624.      x = 290
  625.      IF POINT(x, y) = 2 THEN
  626.      T = T + 16
  627.      END IF
  628.      x = 310
  629.      IF POINT(x, y) = 2 THEN
  630.      T = T + 8
  631.      END IF
  632.      x = 330
  633.      IF POINT(x, y) = 2 THEN
  634.      T = T + 4
  635.      END IF
  636.      x = 350
  637.      IF POINT(x, y) = 2 THEN
  638.      T = T + 2
  639.      END IF
  640.      x = 370
  641.      IF POINT(x, y) = 2 THEN
  642.      T = T + 1
  643.      END IF
  644.      POKE O + n * 14 + CT, T
  645.      CT = CT + 1
  646.      T = 0
  647.      GOTO IncrementVertical
  648. ZeroCounter:
  649.      CT = 0
  650.      DEF SEG
  651.      LOCATE 2, 2
  652.      PRINT "    ";
  653.      COLOR 14
  654.      LOCATE 2, 2
  655.      PRINT CHR$(n);
  656.      RETURN
  657. SaveNewCharSetToDisk:
  658.      REM Save New Char Set - Permanent Change to Disk
  659. Input1:
  660.      LOCATE 22, 2
  661.      COLOR 14
  662.      INPUT "File Name "; f$
  663.      IF f$ = "romfont" OR f$ = "ROMFONT" THEN
  664.      BEEP
  665.      LOCATE 22, 2
  666.      PRINT "                           ";
  667.      GOTO Input1
  668.  
  669.      END IF
  670.      IF LEN(f$) > 8 THEN
  671.      BEEP
  672.      LOCATE 22, 2
  673.      PRINT "                         ";
  674.      GOTO Input1
  675.      END IF
  676.      LOCATE 22, 2
  677.      PRINT "                       ";
  678.      DEF SEG = VARSEG(SCRN2(0))
  679.      O = VARPTR(SCRN2(0))
  680.      BSAVE f$ + ".dat", O, 3584
  681.      DEF SEG
  682.      RETURN
  683. ChangeAsciiValue:
  684.      REM Change ASCII Value
  685.      LOCATE 2, 2
  686.      PRINT "            ";
  687.      LOCATE 4, 1
  688.      PRINT "            ";
  689.      GOSUB ClearScreen
  690. Input2:
  691.      LOCATE 22, 2
  692.      COLOR 14
  693. 'end of part 4 of 6
  694.  
  695. --- Maximus 2.01wb
  696.  * Origin: Rabbit and Snake's BBS - Richardson, Texas (1:124/6108)
  697.  
  698.  
  699. ════════════════════════════════════════════════════════════════════════════════
  700.  Area:    QuickBasic
  701.   Msg:    #4936
  702.  Date:    02-13-93 19:48 (Public) 
  703.  From:    EARL MONTGOMERY          
  704.  To:      ALL                      
  705.  Subject: Graphic Font Editor Part 
  706. ────────────────────────────────────────────────────────────────────────────────
  707. 'Part 5 of 6 Font Editor
  708.      INPUT "New ASCII Value"; i$
  709.      n = VAL(i$)
  710.      IF n < 48 OR n > 122 THEN
  711.      LOCATE 22, 2
  712.      PRINT "                     ";
  713.      GOTO Input2
  714.      END IF
  715.      LOCATE 4, 1
  716.      COLOR 12
  717.      PRINT n;
  718.      LOCATE 22, 2
  719.      PRINT "                          ";
  720.      LOCATE 2, 2
  721.      COLOR 14
  722.      PRINT CHR$(n);
  723.      GOTO ReEntry2
  724. LoadNewCharSet:
  725.      REM Load New Char Set
  726.      LOCATE 22, 2
  727.      COLOR 14
  728.      INPUT "File Name "; f$
  729.      IF ASC(LEFT$(f$, 1)) > 90 THEN
  730.      END IF
  731.      LOCATE 22, 2
  732.      PRINT "                           ";
  733.      DEF SEG = VARSEG(SCRN2(0))
  734.      V = VARPTR(SCRN2(0))
  735.      BLOAD f$ + ".dat", V
  736.      DEF SEG
  737.      GOSUB ClearScreen
  738.      H = 280
  739.      V = 168
  740.      LOCATE 6, 1
  741.      PRINT "              ";
  742.      LOCATE 6, 2
  743.      PRINT UCASE$(f$);
  744.      GOTO ReEntry3
  745. ErrorTrap:
  746.      REM On Error Routine
  747.      RESUME LoadNewCharSet
  748. ShowPresentCharSet:
  749. PCOPY 0, 1
  750. CLS : COLOR 14
  751. FOR x = 48 TO 122
  752. PRINT CHR$(x);
  753. NEXT
  754. HoldScrn:
  755.      i$ = INKEY$
  756.      IF i$ = "" THEN
  757.      GOTO HoldScrn
  758.      END IF
  759.      PCOPY 1, 0
  760.  
  761. RETURN
  762. MainMouseRoutine:
  763.      inregs.ax = 0
  764.      CALL interruptx(&H33, inregs, outregs)
  765.      hmin% = 224
  766.      hmax% = 375
  767.      inregs.cx = hmin%
  768.      inregs.dx = hmax%
  769.      inregs.ax = 7
  770.      CALL interruptx(&H33, inregs, outregs)
  771.      vmin% = 92
  772.      vmax% = 122
  773.      inregs.cx = vmin%
  774.      inregs.dx = vmax% * 2
  775.      inregs.ax = 8
  776.      CALL interruptx(&H33, inregs, outregs)
  777.      inregs.cx = 0
  778.      inregs.dx = 0
  779.      inregs.ax = 4
  780.      CALL interruptx(&H33, inregs, outregs)
  781. MainMouseInkey:
  782.      i$ = INKEY$
  783.      inregs.ax = 1
  784.      CALL interruptx(&H33, inregs, outregs)
  785. 'End of part 5 of 6
  786.  
  787. --- Maximus 2.01wb
  788.  * Origin: Rabbit and Snake's BBS - Richardson, Texas (1:124/6108)
  789.  
  790.  
  791. ════════════════════════════════════════════════════════════════════════════════
  792.  Area:    QuickBasic
  793.   Msg:    #4937
  794.  Date:    02-13-93 19:50 (Public) 
  795.  From:    EARL MONTGOMERY          
  796.  To:      ALL                      
  797.  Subject: Graphic Font Editor part 
  798. ────────────────────────────────────────────────────────────────────────────────
  799. 'Part 6 of 6 Font Editor
  800.      inregs.ax = 3
  801.      CALL interruptx(&H33, inregs, outregs)
  802.      x = outregs.cx
  803.      y = outregs.dx
  804.      IF outregs.bx = 1 THEN
  805.      inregs.ax = 2
  806.      CALL interruptx(&H33, inregs, outregs)
  807.      PAINT (x, y), 2, 8
  808.      END IF
  809.      IF outregs.bx = 2 THEN
  810.      inregs.ax = 2
  811.      CALL interruptx(&H33, inregs, outregs)
  812.      PAINT (x, y), 0, 8
  813.      END IF
  814.      IF i$ = "-" OR i$ = "_" THEN
  815.      inregs.ax = 2
  816.      CALL interruptx(&H33, inregs, outregs)
  817.      GOSUB DecreaseAsciiValue
  818.      END IF
  819.      IF i$ = "=" OR i$ = "+" THEN
  820.      inregs.ax = 2
  821.      CALL interruptx(&H33, inregs, outregs)
  822.      GOSUB IncreaseAsciiValue
  823.      END IF
  824.      IF i$ = "a" OR i$ = "A" THEN
  825.      inregs.ax = 2
  826.      CALL interruptx(&H33, inregs, outregs)
  827.      GOSUB ShowPresentCharSet
  828.      END IF
  829.      IF i$ = "c" OR i$ = "C" THEN
  830.      inregs.ax = 2
  831.      CALL interruptx(&H33, inregs, outregs)
  832.      GOSUB ChangeAsciiValue
  833.      END IF
  834.      IF i$ = "l" OR i$ = "L" THEN
  835.      inregs.ax = 2
  836.      CALL interruptx(&H33, inregs, outregs)
  837.      GOSUB LoadNewCharSet
  838.      END IF
  839.      IF i$ = "s" OR i$ = "S" THEN
  840.      GOSUB SaveNewCharSetToDisk
  841.      END IF
  842.      IF i$ = "x" OR i$ = "X" THEN
  843.      ec = 1
  844.      inregs.ax = 2
  845.      CALL interruptx(&H33, inregs, outregs)
  846.      GOSUB ClearScreen
  847.      END IF
  848.      IF i$ = CHR$(13) THEN
  849.      inregs.ax = 2
  850.      CALL interruptx(&H33, inregs, outregs)
  851.      GOSUB UpdateArray
  852.  
  853.      END IF
  854.      IF i$ = "" THEN
  855.      GOTO MainMouseInkey
  856.      END IF
  857.      GOTO MainMouseInkey
  858. ' Part 6 of 6 end of program
  859.  
  860. --- Maximus 2.01wb
  861.  * Origin: Rabbit and Snake's BBS - Richardson, Texas (1:124/6108)
  862.  
  863.  
  864. ════════════════════════════════════════════════════════════════════════════════
  865.  Area:    QuickBasic
  866.   Msg:    #4938
  867.  Date:    02-13-93 19:52 (Public) 
  868.  From:    EARL MONTGOMERY          
  869.  To:      ALL                      
  870.  Subject: SROMCHAR.BAS (NEEDED FOR 
  871. ────────────────────────────────────────────────────────────────────────────────
  872. CLS
  873. LOCATE 10, 20: PRINT "Searching for and saving EGA/ROM characters."
  874. LOCATE 11, 32: PRINT "Please be patient."
  875. DEF SEG = &HC000
  876. FOR x = 0 TO 65525
  877. p = PEEK(x)
  878. IF p = &H7E AND PEEK(x + 1) = &H81 AND PEEK(x + 2) = &HA5 AND PEEK(x + 3) = 
  879. &H81 AND PEEK(x + 4) = &H81 AND PEEK(x + 5) = &HBD THEN GOTO savefont
  880. NEXT
  881. savefont:
  882. DEF SEG = &HC000
  883. BSAVE "romfont.dat", x - 16, 3584
  884. LOCATE 13, 20: PRINT "EGA ROM characters captured to ROMFONT.DAT"
  885. END
  886.  
  887.  
  888. --- Maximus 2.01wb
  889.  * Origin: Rabbit and Snake's BBS - Richardson, Texas (1:124/6108)
  890.  
  891.  
  892. ════════════════════════════════════════════════════════════════════════════════
  893.  Area:    QuickBasic
  894.   Msg:    #4939
  895.  Date:    02-13-93 19:54 (Public) 
  896.  From:    EARL MONTGOMERY          
  897.  To:      ALL                      
  898.  Subject: LOADFONT.BAS (NEEDED FOR 
  899. ────────────────────────────────────────────────────────────────────────────────
  900. '$INCLUDE: 'qb.bi'
  901.  DIM inregs AS RegTypeX, outregs AS RegTypeX
  902.  DIM scrn2(3584)
  903.  SCREEN 9: REM can also be screen 12 or 13 if you have VGA
  904.  DEF SEG = VARSEG(scrn2(0))
  905.  v = VARPTR(scrn2(0))
  906.  ' You will want to replace "romfont.dat" with your new fonts
  907.  BLOAD "romfont.dat", v
  908.  inregs.ax = &H1121
  909.  inregs.cx = 14
  910.  inregs.es = VARSEG(scrn2(0))
  911.  inregs.bp = VARPTR(scrn2(0))
  912.  CALL INTERRUPTX(&H10, inregs, outregs)
  913.  DEF SEG
  914.  'Your Program would start here
  915.  PRINT "This is A Test AAA 1234567890."
  916.  PRINT "ABCDEFGHIJKLMNOPQRSTUVWXYZ earl montgomery";
  917. HoldScreen:
  918.  GOTO HoldScreen
  919.  
  920.  
  921. --- Maximus 2.01wb
  922.  * Origin: Rabbit and Snake's BBS - Richardson, Texas (1:124/6108)
  923.  
  924.  
  925. ════════════════════════════════════════════════════════════════════════════════
  926.  Area:    QuickBasic
  927.   Msg:    #5050
  928.  Date:    02-11-93 18:40 (Public) 
  929.  From:    JOHN GALLAS              
  930.  To:      JAMES ZMIJEWSKI          
  931.  Subject: SOUND BLASTER         1/2
  932. ────────────────────────────────────────────────────────────────────────────────
  933. JZ>Does anyone out there know how to use Qbasic to drive the sound blaster.
  934. JZ>I'm just begining to get back in to programing and looking at the online
  935. JZ>help I can't find any acess routines that look appropriate.
  936. JZ>        In the future I would like to upgrade to a higher language Quick
  937. JZ>basic or visual basic, which would you recomend.
  938.  
  939. Heres a program to play the SB:
  940.  
  941. -------------------------------<cut here>-----------------------------
  942.  
  943. ' SBSOUND.BAS by Brett Levin 1992
  944. '
  945. '  These routines were made entirely from a pretty detailed (techie, but
  946. ' not that I mind <G>) text file on programming the FM ports on the AdLib/SB.
  947. '  You are free to use this in any program what so ever, as long as you
  948. ' give credit where credit is due.. (stole that line from Rich!) :)
  949.  
  950. DEFINT A-Z
  951. DECLARE FUNCTION DetectCard% ()
  952. DECLARE SUB SBInit ()
  953. DECLARE SUB WriteReg (Reg%, Value%)
  954. DECLARE SUB SBPlay (note%)
  955.  
  956. CONST false = 0, true = NOT false
  957.  
  958. SCREEN 0: CLS
  959.  
  960. IF DetectCard = true THEN
  961.   PRINT "AdLib-compatible sound card detected."
  962. ELSE
  963.   PRINT "Unable to find/detect sound card."
  964.   BEEP
  965.   SYSTEM
  966. END IF
  967. PRINT " Initalizing...";
  968.  
  969. SBInit
  970.  
  971. PRINT " Done."
  972.  
  973. FOR nt = 0 TO 255
  974. SBPlay nt
  975. NEXT nt
  976.  
  977. PRINT
  978. PRINT "  These routines only support one channel/voice of the FM chip, but"
  979. PRINT "eventually I may fix them so you can have a bunch o' instruments on"
  980. PRINT "at once.  I'd also like to write a replacement for SBFMDRV.COM, but"
  981. PRINT "that's far off, and probably not in QB anyway.  This is too fast"
  982. PRINT "compiled, so if you are going to use it in anything, add a delay."
  983. PRINT "                                  Enjoy!         -Brett 11/12/92"
  984. PRINT
  985.  
  986.  
  987. FOR nt = 255 TO 0 STEP -1
  988. SBPlay nt
  989. NEXT nt
  990.  
  991. PRINT "[Press any key to end]"
  992. SLEEP
  993.  
  994. CALL WriteReg(&HB0, &H0)  'Makes sure no extra sound is left playing
  995.  
  996. FUNCTION DetectCard%
  997.  
  998. '  Purpose:   Detects an AdLib-compatible card.
  999. '             Returns -1 (true) if detected and 0 (false) if not.
  1000. '  Variables: Nope
  1001.  
  1002. CALL WriteReg(&H4, &H60)
  1003. CALL WriteReg(&H4, &H80)
  1004. B = INP(&H388)
  1005. CALL WriteReg(&H2, &HFF)
  1006. CALL WriteReg(&H4, &H21)
  1007.   FOR x = 0 TO 130
  1008.     A = INP(&H388)
  1009.   NEXT x
  1010. C = INP(&H388)
  1011. CALL WriteReg(&H4, &H60)
  1012. CALL WriteReg(&H4, &H80)
  1013. Success = 0
  1014. IF (B AND &HE0) = &H0 THEN
  1015.   IF (C AND &HE0) = &HC0 THEN
  1016.     Success = -1
  1017.   END IF
  1018. END IF
  1019. DetectCard% = Success
  1020.  
  1021. END FUNCTION
  1022.  
  1023. SUB SBInit
  1024. '  Initialize the sound card
  1025.  
  1026. '(This is the "quick-and-dirty" method; what it's doing is zeroing out
  1027. '  all of the card's registers.  I haven't had any problems with this.)
  1028.  
  1029. FOR q = 1 TO &HF5
  1030.   CALL WriteReg(q, 0)
  1031. NEXT q
  1032.  
  1033. END SUB
  1034.  
  1035. SUB SBPlay (freq%)
  1036.  
  1037. '  Purpose:      Plays a note
  1038.  
  1039. '  Variables:    freq% - Frequency (00-FF hex)
  1040.  
  1041. '                duration% - Duration (n seconds) (not used)
  1042.  
  1043. '  I'm still working on this part, it may be ugly, but it works <g>.
  1044. '  The first group of WriteRegs is the modulator, the second is the
  1045. '  carrier.
  1046. '  If you just want to know how to create your own instrument, play around
  1047. '  with the second values in the first four calls to WriteReg in each group.
  1048. '  :-)  Have fun!  - Brett
  1049.  
  1050. CALL WriteReg(&H20, &H7)    ' Set modulator's multiple to F
  1051. CALL WriteReg(&H40, &HF)    ' Set modulator's level to 40 dB
  1052. CALL WriteReg(&H60, &HF0)   ' Modulator attack: quick, decay: long
  1053. CALL WriteReg(&H80, &HF0)   ' Modulator sustain: medium, release: medium
  1054. CALL WriteReg(&HA0, freq%)
  1055.  
  1056.  
  1057. CALL WriteReg(&H23, &HF)   ' Set carrier's multiple to 0
  1058. CALL WriteReg(&H43, &H0)   ' Set carrier's level to 0 dB
  1059. CALL WriteReg(&H63, &HF0)  ' Carrier attack: quick, decay: long
  1060. CALL WriteReg(&H83, &HFF)  ' Carrier sustain: quick, release: quick
  1061. CALL WriteReg(&HB0, &H20)  ' Octave
  1062.  
  1063. CALL WriteReg(&HE0, &H0)   ' Waveform argument for Tom..
  1064.                            ' &H00 is the default, but I felt like
  1065.                            ' dropping it in for you.. :)
  1066.  
  1067. ' I originally had an extra argument, duration!, but for some reason
  1068. ' I wanted to do the timing outside of this sub..  You can change it back
  1069. ' if needs require..
  1070.  
  1071. 'TimeUp! = TIMER + duation!
  1072. 'WHILE TimeUp! > TIMER: WEND  ' Worst you can be off is .182 of a second
  1073.  
  1074. END SUB
  1075. >>> Continued to next message
  1076.  
  1077.  * OLX 2.1 TD * Connection Attempt #172 ..<ring>...CONNECT 300...<CLICK>
  1078.  
  1079. --- TMail v1.30.4
  1080.  * Origin: TC-AMS MLTBBS 2.2 - Minnetonka, MN (612)-938-4799 (1:282/7)
  1081.  
  1082.  
  1083.  
  1084. ════════════════════════════════════════════════════════════════════════════════
  1085.  Area:    QuickBasic
  1086.   Msg:    #5051
  1087.  Date:    02-11-93 18:40 (Public) 
  1088.  From:    JOHN GALLAS              
  1089.  To:      JAMES ZMIJEWSKI          
  1090.  Subject: SOUND BLASTER         2/2
  1091. ────────────────────────────────────────────────────────────────────────────────
  1092. >>> Continued from previous message
  1093. SUB WriteReg (Reg%, Value%)
  1094. '  Purpose:   Writes to any of the SB/AdLib's registers
  1095. '  Variables: Reg%: Register number,
  1096. '             Value%: Value to insert in register
  1097. '              (Note: The registers are from 00-F5 (hex))
  1098. OUT &H388, Reg     '388h = address/status port, 389h = data port
  1099.   FOR x = 0 TO 5   ' This tells the SB what register we want to write to
  1100.     A = INP(&H388) ' After we write to the address port we must wait 3.3ms
  1101.   NEXT x
  1102.  
  1103. OUT &H389, Value   ' Send the value for the register to 389h
  1104.   FOR x = 0 TO 34  ' Here we must also wait, this time 23ms
  1105.     A = INP(&H388)
  1106.   NEXT x
  1107.  
  1108. END SUB
  1109.  
  1110. ---------------------------<clip here>-------------------------
  1111.  
  1112. That program will produce a motorcycle engine effect.  I do have code
  1113. that will play a frequency (from 0 to 800 I believe) on any of 11
  1114. octaves, and I'm waiting for the authors permission to post it.
  1115.  
  1116. By the way, we've had quite a few people with names that have been tough
  1117. to pronounce in the past few weeks, but yours tops them all!  Can ya
  1118. give me a hint?  It looks like Zem-ij-ew-sky - am I close?
  1119.  
  1120.  * OLX 2.1 TD * Connection Attempt #172 ..<ring>...CONNECT 300...<CLICK>
  1121.  
  1122. --- TMail v1.30.4
  1123.  * Origin: TC-AMS MLTBBS 2.2 - Minnetonka, MN (612)-938-4799 (1:282/7)
  1124.  
  1125.  
  1126.  
  1127. ════════════════════════════════════════════════════════════════════════════════
  1128.  Area:    QuickBasic
  1129.   Msg:    #5055
  1130.  Date:    02-11-93 18:29 (Public) 
  1131.  From:    JOHN GALLAS              
  1132.  To:      OWEN GIBBINS             
  1133.  Subject: FILE HANDLING            
  1134. ────────────────────────────────────────────────────────────────────────────────
  1135. OG>Are there any functions in QuickBASIC similar to the EXIST and NOT EXIST
  1136. OG>functions in batch files?
  1137.  
  1138. Yes!  Try the following...
  1139.  
  1140. '=========================================================================
  1141. 'DIR.BAS by Dave Cleary
  1142. '
  1143. 'One of the most useful additions to BASIC 7 PDS is the DIR$ function.
  1144. 'This function allows you to read a directory of filenames. It also
  1145. 'allows you to check the existence of a file by doing the following:
  1146. '
  1147. '  IF LEN(DIR$("COMMAND.COM")) THEN
  1148. '     PRINT "File Found"
  1149. '  ELSE
  1150. '     PRINT "File not found"
  1151. '  END IF
  1152. '
  1153. 'Now QuickBASIC 4.X users can have this useful function for their
  1154. 'programs.
  1155. '
  1156. 'Calling DIR$ with a FileSpec$ returns the the name of the FIRST
  1157. 'matching file name. Subsequent calls with a null FileSpec$ return the
  1158. 'NEXT matching file name. If a null string is returned, then no more
  1159. 'matching files were found. FileSpec$ can contain both a drive and a
  1160. 'path plus DOS wildcards. Special care should be taken when using
  1161. 'this on floppy drives because there is no check to see if the drive
  1162. 'is ready.
  1163. '========================================================================
  1164.      DEFINT A-Z
  1165.  
  1166.      DECLARE FUNCTION DIR$ (FileSpec$)
  1167.  
  1168.      '$INCLUDE: 'QB.BI'
  1169.  
  1170.      '-----  Some constants that DIR$ uses
  1171.      CONST DOS = &H21
  1172.      CONST SetDTA = &H1A00, FindFirst = &H4E00, FindNext = &H4F00
  1173.  
  1174.      '--------------------------------------------------------------------
  1175.      'This shows how to call DIR$ to find all matching files
  1176.  
  1177.      'CLS
  1178.      'FileSpec$ = "C:\QB\SOURCE\*.BAS"
  1179.      'Found$ = DIR$(FileSpec$)
  1180.      'DO WHILE LEN(Found$)
  1181.      '   PRINT Found$
  1182.      '   Found$ = DIR$("")
  1183.      'LOOP
  1184.  
  1185.      '--------------------------------------------------------------------
  1186.  
  1187.  FUNCTION DIR$ (FileSpec$) STATIC
  1188.  
  1189.  
  1190.         DIM DTA AS STRING * 44, Regs AS RegTypeX
  1191.         Null$ = CHR$(0)
  1192.  
  1193.      '-----  Set up our own DTA so we don't destroy COMMAND$
  1194.         Regs.AX = SetDTA                    'Set DTA function
  1195.         Regs.DX = VARPTR(DTA)               'DS:DX points to our DTA
  1196.         Regs.DS = -1                        'Use current value for DS
  1197.         InterruptX DOS, Regs, Regs          'Do the interrupt
  1198.  
  1199.      '-----  Check to see if this is First or Next
  1200.         IF LEN(FileSpec$) THEN              'FileSpec$ isn't null, so
  1201.                                             'FindFirst
  1202.            FileSpecZ$ = FileSpec$ + Null$   'Make FileSpec$ into an ASCIIZ
  1203.                                             'string
  1204.            Regs.AX = FindFirst              'Perform a FindFirst
  1205.            Regs.CX = 0                      'Only look for normal files
  1206.            Regs.DX = SADD(FileSpecZ$)       'DS:DX points to ASCIIZ file
  1207.            Regs.DS = -1                     'Use current DS
  1208.         ELSE                                'We have a null FileSpec$,
  1209.            Regs.AX = FindNext               'so FindNext
  1210.         END IF
  1211.  
  1212.         InterruptX DOS, Regs, Regs          'Do the interrupt
  1213.  
  1214.      '-----  Return file name or null
  1215.         IF Regs.Flags AND 1 THEN            'No files found
  1216.            DIR$ = ""                        'Return null string
  1217.         ELSE
  1218.            Null = INSTR(31, DTA, Null$)     'Get the filename found
  1219.            DIR$ = MID$(DTA, 31, Null - 30)  'It's an ASCIIZ string starting
  1220.         END IF                              'at offset 30 of the DTA
  1221.  
  1222.  END FUNCTION
  1223.  
  1224.  * OLX 2.1 TD * He's not dead, Jim, he's metaphysically challenged.
  1225.  
  1226. --- TMail v1.30.4
  1227.  * Origin: TC-AMS MLTBBS 2.2 - Minnetonka, MN (612)-938-4799 (1:282/7)
  1228.  
  1229.  
  1230.  
  1231. ════════════════════════════════════════════════════════════════════════════════
  1232.  Area:    QuickBasic
  1233.   Msg:    #5143
  1234.  Date:    02-13-93 03:24 (Public) 
  1235.  From:    SEAN SULLIVAN            
  1236.  To:      ALL                      
  1237.  Subject: Moving Clock Screen Saver
  1238. ────────────────────────────────────────────────────────────────────────────────
  1239. Greetings and Salutations All!
  1240.  
  1241.  
  1242. This is something I whipped up out of boredom.   Feel free to do what you
  1243. wish with it.  This means you too, Lee.
  1244.  
  1245.  
  1246. ----------------8<  cut here >8--------------------------------------------
  1247. ':::::::::::: MOVING CLOCK SCREEN BLANKER :::::::::::::::::
  1248. 'Written by: Sean P. Sullivan
  1249. '            February 13, 1993
  1250. '
  1251. 'A simple screen blanker routine. It will display the
  1252. 'current time, moving it's position once every second.
  1253. 'It is currently set to run using SCREEN 1 to take
  1254. 'advantage of the larger characters.  See program comments
  1255. 'on how to change to different screens.
  1256. 'This should work on most BASICS from GW to VB.
  1257. '
  1258. 'This code is released to the public domain.
  1259. 'It may be printed, used, changed, whatever.
  1260. 'Printable in QBS: YES!
  1261. '
  1262. '::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  1263.  
  1264. DEFINT A-Z
  1265. '---- starting row ----
  1266.   row = 1
  1267. '---- starting col ----
  1268.   col = 1
  1269. '---- screen mode (default 1-CGA) ----
  1270.   scrn = 1
  1271. '---- # cols for SCREEN mode, subtract 14 from max cols ----
  1272. '---- to prevent clock from printing off screen         ----
  1273. '---- ie:  CGA  max cols=40, so clim=39-14 or 25        ----
  1274.   clim = 25
  1275. '---- # rows for SCREEN mode, usually always 23 ----
  1276.   rlim = 23
  1277. '---- freq of clock update (default=1 sec) ----
  1278.   freq = 1
  1279.  
  1280.  
  1281. 'start TIMER
  1282.   TIMER ON
  1283.  
  1284. 'set screen mode
  1285.   SCREEN scrn
  1286.  
  1287. 'for every change in the timer by the freq amount gosub ShowClock
  1288.   ON TIMER(freq) GOSUB ShowClock
  1289.  
  1290. 'loop until a key is pressed
  1291. DO
  1292.  
  1293.   LOOP WHILE INKEY$ = ""
  1294. END
  1295.  
  1296. 'turn timer off and exit program
  1297. TIMER OFF
  1298. END
  1299.  
  1300.  
  1301. 'Show clock subroutine
  1302. ShowClock:
  1303.  
  1304. 'clear out old clock position
  1305.   LOCATE row, col: PRINT SPACE$(14)
  1306. 'find new row position between 0-23
  1307.   row = 99
  1308.   DO WHILE row > rlim
  1309.      row = INT(RND(1) * 100) + 1
  1310.   LOOP
  1311. 'find new column position between 0-25
  1312.   col = 99
  1313.   DO WHILE col > clim
  1314.      col = INT(RND(1) * 100) + 1
  1315.   LOOP
  1316. 'print clock at new position
  1317.   LOCATE row, col: PRINT "Time: "; TIME$
  1318.   RETURN
  1319.  
  1320. ------------------------8< cut here >8--------------------------------
  1321.  
  1322. Sean
  1323.  
  1324. --- GoldED 2.40.P0623
  1325.  * Origin: COMNET Point #28 [Watervliet, NY] (1:267/113.28)
  1326.  
  1327.  
  1328.  
  1329. ════════════════════════════════════════════════════════════════════════════════
  1330.  Area:    QuickBasic
  1331.   Msg:    #5744
  1332.  Date:    02-14-93 10:11 (Public) 
  1333.  From:    RICHARD DALE             
  1334.  To:      ALL                      
  1335.  Subject: Choose file from screen  
  1336. ────────────────────────────────────────────────────────────────────────────────
  1337. I forgot who was asking for it, but here is a method of choosing a
  1338. filename from the screen.
  1339.  
  1340. It's in numbered-line BASIC, but it should be simple enough to convert
  1341. over to QuickBASIC.  I keep meaning to do it, but never get a
  1342. round tuit.
  1343.  
  1344.  
  1345. 9010 CLS:COLOR 14,0:FILES "*.*"
  1346. 9020 FOR GX = 2 TO 22: IF SCREEN(GX, 1) = 32 THEN GL = GX - 1:
  1347.      LOCATE GX,1: PRINT SPACE$(20): PRINT SPACE$(20): GOTO 9030
  1348. 9030 NEXT GX: GROW = 2: GCOL = 1: COLOR 3, 0: LOCATE 23, 9:
  1349.      PRINT "<- This file?  Use arrow keys to select, <R> to Recall,
  1350.      or <ESCAPE>"
  1351. 9040 IF SCREEN(GROW,GCOL) = 32 THEN 9120
  1352. 9050 GFILE$ = "": FOR GX = 0 TO 11: GFILE$ = GFILE$ + CHR$(SCREEN(GROW,
  1353.      GCOL + GX)): NEXT GX
  1354. 9060 COLOR 0,7: LOCATE GROW, GCOL + 13: PRINT "<-": COLOR 14, 0:
  1355.      LOCATE 23, 1: PRINT LEFT$(GFILE$, 8)
  1356. 9070 GKEY$ = RIGHT$(INKEY$, 1): IF GKEY$ = "" THEN 9070
  1357. 9080 IF GKEY$ = CHR$(27) THEN GFILE$ = "": GOTO 9170
  1358. 9090 IF GKEY$ = "R" OR GKEY$ = "r" THEN 9170
  1359. 9100 IF INSTR("HPKM", GKEY$) = 0 THEN 9070
  1360. 9110 LOCATE GROW, GCOL + 13: PRINT SPACE$(2);
  1361. 9120 IF GKEY$ = "H" THEN GROW = GROW - 1: IF GROW < 2 THEN GROW = GL
  1362. 9130 IF GKEY$ = "P" THEN GROW = GROW + 1: IF GROW > GL THEN GROW = 2
  1363. 9140 IF GKEY$ = "K" THEN GCOL = GCOL - 18: IF GCOL < 1 THEN GCOL = 55
  1364. 9150 IF GKEY$ = "M" THEN GCOL = GCOL + 18: IF GCOL > 55 THEN GCOL = 1
  1365. 9160 GOTO 9040
  1366. 9170 RETURN
  1367.  
  1368.  
  1369. Day 22: America Held Hostage
  1370.  
  1371.  * DeLuxe2 1.26b #2989 * Bill Clinton:  The Dan Quayle of Presidents
  1372. --- FidoPCB v1.4 beta
  1373.  * Origin: Sound Advice - 24 Nodes (816)436-4516 (1:280/333)
  1374.  
  1375.  
  1376.  
  1377. ════════════════════════════════════════════════════════════════════════════════
  1378.  Area:    QuickBasic
  1379.   Msg:    #5983
  1380.  Date:    02-10-93 11:19 (Public) 
  1381.  From:    FRANCOIS ROY             
  1382.  To:      TRENT SHIRLEY            
  1383.  Subject: CD-ROM RECOGNITION       
  1384. ────────────────────────────────────────────────────────────────────────────────
  1385. You can use CALL INTERRUPT to read the ISO-9660 sectors via MSCDEX.  The VTOC
  1386. (Volume Table of Contents) is accessible as shown below; I don't have its
  1387. structure so can't tell you what the fields mean, but I can betcha no two are
  1388. alike... the VTOC is a 2048-byte string; I defined my buffer in CDVTOC with a
  1389. length of 4096 because for some reason 2048 gives me String Space Corrupt
  1390. errors... the demo routine below prints the first 800 bytes of the VTOC but
  1391. you may want to store the whole 2048 bytes as the CD's "fingerprint".
  1392.  
  1393. The code snippet below is for QB; QBX far strings need a small alteration.
  1394.  
  1395. DECLARE SUB CDVTOC (D$, V$)
  1396. DECLARE SUB CDDRIVE (DR$)
  1397.    TYPE REGTYPE  ' For CALL INTERRUPT
  1398.      AX AS INTEGER
  1399.      BX AS INTEGER
  1400.      CX AS INTEGER
  1401.      DX AS INTEGER
  1402.      BP AS INTEGER
  1403.      SI AS INTEGER
  1404.      DI AS INTEGER
  1405.      FL AS INTEGER
  1406.      DS AS INTEGER
  1407.      ES AS INTEGER
  1408.    END TYPE
  1409.    DIM SHARED INR AS REGTYPE, OUR AS REGTYPE
  1410.    CALL CDDRIVE(D$)
  1411.    PRINT "Drive:"; D$
  1412.    CALL CDVTOC(D$, V$)
  1413.    PRINT LEFT$(V$, 800)
  1414.    END
  1415.  
  1416. SUB CDDRIVE (DR$) STATIC
  1417.     DR$ = STRING$(32, 0)
  1418.     INR.AX = &H150D
  1419.     INR.BX = SADD(DR$)
  1420.     INR.ES = SSEG(DR$)
  1421.     CALL InterruptX(&H2F, INR, OUR)
  1422.     IF ASC(DR$) = 0 THEN DR$ = "" ELSE DR$ = CHR$(ASC(DR$) + 65) + ":"
  1423. END SUB
  1424.  
  1425. SUB CDVTOC (D$, V$) STATIC
  1426. REM Reads VTOC
  1427.     DR$ = STRING$(4096, 0)
  1428.     INR.AX = &H1505
  1429.     INR.BX = SADD(DR$)
  1430.     INR.CX = INSTR("ABCDEFGHIJKLMNOP", LEFT$(D$, 1)) - 1
  1431.     INR.DX = 0  ' 1st volume descriptor
  1432.     INR.ES = SSEG(DR$)
  1433.     CALL InterruptX(&H2F, INR, OUR)
  1434. REM AX=1 is normal and indicates a standard vol. descr.
  1435. REM AX=15 is 'Invalid Drive' and 21 is 'Not Ready'. 255 means no vol. desc.
  1436.     IF OUR.AX > 1 THEN V$ = "Error" + STR$(OUR.AX) ELSE V$ = DR$
  1437. END SUB
  1438.  
  1439.  
  1440. --- ME2_1104
  1441.  * Origin: Out of String Space - the Final Frontier (Fidonet 1:163/506.2)
  1442.  
  1443.  
  1444.  
  1445.