home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / tools / smak / bbb.txt next >
Text File  |  1992-06-10  |  13KB  |  340 lines

  1. Basic Building Blocks is a collection of QuickBasic subprograms and 
  2. assembler routines that I created and use for my own program development 
  3. as a self-employed programmer.  I try to make them as small, fast, and 
  4. efficient as is practical, and sometimes I even go way past being
  5. practical and stray into fanatical.
  6.  
  7. All routines come with fully documented source code.  I have made a 
  8. special effort to provide clean, clear, and complete documentation 
  9. within each source module itself.  I don't like having to reach for a 
  10. manual every time I need to check the syntax or function of a 
  11. routine, so I did away with the manual.  Everything you need to know 
  12. about a routine is in it.  I do like code that is educational and 
  13. teaches good programming techniques by example.  There is as much art 
  14. in creating a descriptive narrative as there is in creating efficient 
  15. computer code.  I try to do both.
  16.  
  17. To order the Basic Building Blocks diskette, complete the following form 
  18. (please print legibly) and send it with $35 to:
  19.  
  20.  
  21.  
  22.  
  23.                            Martin Systems
  24.                            120 Fence Post Court
  25.                            Fountain, CO  80817
  26.  
  27.  
  28.  
  29.  
  30.  
  31. Diskette type:        [  ] 360K        [  ] 720K
  32.  
  33.  
  34.  
  35. Your name ___________________________________________________________
  36.  
  37.  
  38.   Address ___________________________________________________________
  39.  
  40.  
  41.      City ___________________________  State _______   Zip __________
  42.  
  43.  
  44.     Phone (______)___________________
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51. Current version:  1.01
  52.  
  53. Supports QuickBasic versions 3.0, 4.0, 4.5
  54.  
  55. Free updates are available for a one year period after the purchase date, 
  56. either by mail or modem.  By mail, send a blank, formatted diskette and a 
  57. self-addressed, stamped diskette mailer (or send $4 and I'll provide the 
  58. diskette, mailer, and stamps).  By modem, call (719) 382-8216 to reach 
  59. the BBS (2400 baud, N81).
  60.  
  61. If you think of a routine that would be a useful addition to this package,
  62. please tell me and I will consider creating it.  I have several planned 
  63. already, which is why I'm offering the free updates to initial purchasers.
  64.  
  65.  
  66. A simple example of the format used for all routines is shown below:
  67.  
  68.  
  69.  
  70. ---------------------------- Begin CENTER.BAS ----------------------------
  71.  
  72. 'Purpose:  Centers text (or any other string) on screen.
  73. '
  74. ' Syntax:  call CenterText (text$, row)
  75. '
  76. '   Pass:  text$    String to center on screen.
  77. '          row      Row where string will display.
  78. '
  79. 'Returns:           nothing
  80. '
  81. '   Note:  Row should be 1 to 25.  String length should be <= 80.
  82. '          Screen width is assumed to be 80 characters.  Initial 
  83. '          cursor position is unchanged.  Color used for display
  84. '          is current color.
  85. '
  86.  
  87.  
  88. defint a-z
  89. sub CenterText (text$, row) static
  90.  
  91.   OldRow = csrlin : OldCol = pos(0)         'save current cursor position
  92.   locate row, 41 - (len(text$)+1) \ 2       'place cursor where printing begins
  93.   print text$;                              'display the text on-screen
  94.   locate OldRow, OldCol                     'restore initial cursor position
  95.  
  96. end sub
  97.  
  98. ----------------------------- End CENTER.BAS -----------------------------
  99.  
  100.  
  101.  
  102.  
  103.  
  104. List of current Basic Building Blocks routines (5/11/92):
  105.  
  106.  
  107. BAS file   Syntax and Use
  108. ---------  --------------
  109.  
  110. BITS       call ChkBit       (BitArray(), BitPos, BitOn)
  111.            call SetBit       (BitArray(), BitPos, BitValue)
  112.            call ToggleBits   (BitArray())
  113.            call CountSetBits (BitArray(), MaxBit, Count)
  114.            call FindNextBit  (BitArray(), BitPos, BitValue, Direction, Found)
  115.            
  116.            Collection of routines to manipulate individual bits in an integer
  117.            array.
  118.  
  119. BSEARCH    call SearchStrArray (SearchStr$, Array$(), Rank(), ElementNum)
  120.            Quickly searches any string array using pointers (binary search).
  121.  
  122. CENTERQ    call CenterText (Text$, row)
  123.            Centers a string on-screen at the desired row.
  124.            Uses PrintQ for fast screen writes.
  125.            
  126. CHECKKB    call CheckKB (WaitFlag, KeyPressed)
  127.            Reads chrs from keyboard, optionally waiting for a key press.
  128.            
  129. DATECNV    call ConvertDate (DateStr$, NumDays, WeekDay)
  130.            call RestoreDate (NumDays, DateStr$)
  131.            Facilitates date arithmetic.
  132.  
  133. DELAY      call Delay (DelayTime!)
  134.            Produces a timed delay, regardless of computer speed.
  135.            
  136. DOTPROF    call DotProfile (LowVal, HighVal, StepVal, StepLen, Score!, Graph$)
  137.            Draws a text-based, horizontal graph (like a thermometer graph).
  138.  
  139. DRAWBOXQ   call DrawBoxQ (ulr, ulc, lrr, lrc, BoxChar, BoxColor)
  140.            Draws a box frame on-screen.  Uses PrintQ for fast screen writes.
  141.  
  142. GETCOLOR   call GetColor (CurrentAttr)
  143.            Returns the current COLOR setting.
  144.             
  145. GETFIELD   call GetField (row, col, MaxLen, FillChr, Text$, CrsrPos, EditCode)
  146.            Replaces INPUT statement with full editing and re-entrancy.
  147.            Uses PrintQ for fast screen writes.
  148.  
  149. HEADER     '$include: 'header.bas'
  150.            Convenient first line for modules, sets constants.
  151.  
  152. INSSTR     call InsStr (MainStr$, FindStr$, ReplaceStr$, Found)
  153.            A find & replace utility for text strings.
  154.  
  155. MENUBOXQ   call MenuBoxQ (choice$(), prompt$(), BoxChr, Colors(), Flags, MenuChoice)
  156.            Displays a scrolling, bounce bar menu with item prompts.
  157.            Uses PrintQ for fast screen writes.
  158.  
  159. MSGBOXQ    call MsgBoxQ (message$(), TextColor, BoxChar, BoxColor, BoxWidth)
  160.            Display a window containing a message.  Uses PrintQ for fast 
  161.            screen writes.
  162.  
  163. PARSE      call Parse (Text$, Delimiter$, StartPos, SubStr$)
  164.            General purpose re-entrant parser.
  165.  
  166. SAVECRSR   call PushCrsr (CrsrStack())
  167.            call  PopCrsr (CrsrStack())
  168.            Used to save/restore cursor position & shape - may be nested 
  169.            10 deep.
  170.  
  171. STRIP      call Strip (Text$, chr)
  172.            Strips strings of unwanted leading and trailing chrs.
  173.  
  174. SORT       call SortStrArray (a$(), rank())
  175.            Sorts a string array using pointers.
  176.  
  177. SORT_STR   call SortFixedRecStr (RecStr$, RecLen, NumRec, rank())
  178.            Sorts fixed-length records in a record string using pointers.
  179.  
  180. YESORNO    call YesOrNo (KeyPressed)
  181.            Asks for a Yes or No response from operator.
  182.  
  183.  
  184.  
  185.  
  186. ASM file   Syntax and Use
  187. ---------  --------------
  188.  
  189. CHNGCASE   call ChngCase (Action, Text$)
  190.            Converts a string to upper/lower case.
  191.  
  192. CHNGCHRS   call ChngChrs (Text$, FindChr, ReplaceChr)
  193.            Replaces all matching chrs in a string.
  194.  
  195. CHECKKB    call CheckKB (WaitFlag, KeyPressed)
  196.            Reads chrs from keyboard, optionally waiting for a key press.
  197.            Desqview, Windows, and OS/2 aware - releases time slice when
  198.            waiting for user input for optimal multitasking performance.
  199.  
  200. CRSRINFO   call CrsrInfo (Row, Col, Visible, StartLine, EndLine)
  201.            Returns info about the cursor position, shape, and on/off status.
  202.  
  203. CRYPT      call Crypt (Text$, Password$, Action)
  204.            Encrypts/decrypts any string.
  205.  
  206. DISKINFO   call DiskInfo (DriveLetter$, Bytes, Sectors, Clusters, ClustersFree)
  207.            Returns free space, used space, total space for desired drive.
  208.  
  209. EXIST      Exist (FileName$, Found)
  210.            Reports if a file currently exists.
  211.  
  212. FILEINFO   call FileInfo (FileSpec$, Found, Info$)
  213.            Checks if a file exists and returns its attributes, size, and 
  214.            date/time stamp in a string.  QB4+ only (uses long integers).
  215.  
  216. GETCPU     call GetCPU (ID)
  217.            Returns the current CPU type - 8088, 80286, 80386, or 80486.
  218.  
  219. GETFILES   GetFiles (FileSpec$, DirList$)
  220.            Read files names from a directory.
  221.            
  222. GETPATH    call GetPath (PathSpec$)
  223.            Returns the default drive and directory.
  224.            
  225. INTVAL     call IntVal (r$, Integer)
  226.            Fast replacement of VAL(r$) for integers only.
  227.  
  228. MIDCHAR    call MidChar (Text$, ChrPos, ChrCode)
  229.            Returns ASCII code of any character in a string.
  230.            Like QB's ChrCode = asc(mid$(Text$,ChrPos,1)), only faster!
  231.  
  232. PAINTBOX   call PaintBox (TRow, LCol, BRow, RCol, Attr)
  233.            Changes the color of a rectangular area on-screen without erasing
  234.            any text in the area.
  235.  
  236. PRINTQ     call PrintQ (Row, Col, Attr, Text$)
  237.            Displays strings on-screen QUICKLY using direct screen writes.
  238.            Desqview aware.
  239.  
  240. PRINTQA    call PrintQ (Row, Col, Attr, Text$)
  241.            Displays strings on-screen QUICKLY using direct screen writes.
  242.            Desqview aware.  Can change colors on a per character basis 
  243.            using embedded attribute codes in Text$
  244.            
  245. PUTCHAR    call PutChar (Text$, ChrPos, ChrCode)
  246.            Replaces any character in a string.
  247.            Like QB's mid$(Text$,ChrPos) = chr$(Chrcode), only faster!
  248.  
  249. PTRINIT    call PtrInit (NumElements, segment, offset)
  250.            Fast way to set the integer pointer array used by the sort routines.
  251.  
  252. REBOOT     call ReBoot (BootType)
  253.            Reboots the computer using either a warm or cold reboot.
  254.  
  255. SCANSTR    call ScanStr (StartPos, r$, ChrCode, Action, ChrPos)
  256.            Search a string forwards/backwards for the next character match/
  257.            nonmatch.
  258.  
  259. SCRLLBOX   call ScrollBox (ULRow, ULCol, LRRow, LRCol, Action, ColorCode)
  260.            Scroll or clear a rectangular area on-screen.
  261.  
  262. SCRNSRA    call ScrnSaveA (ULrow, ULcol, LRrow, LRcol, Segment, Offset)
  263.            call ScrnRestA (ULrow, ULcol, LRrow, LRcol, Segment, Offset)
  264.            Saves/restores a specified region of the display screen to an 
  265.            integer array in far memory.
  266.  
  267. SCRNCOPY   call ScrnCopy (Source, Destination)
  268.            Saves/restores two entire screen displays using simplified 
  269.            parameters.
  270.  
  271. STRSAVE    call StrSave (r$, segment, offset)
  272.            call StrRest (r$, segment, offset)
  273.            Saves/Restores a string to far memory (an integer array).
  274.  
  275. TESTPRN    TestPrn (LPTPort, PrnOK)
  276.            Reports if printer is on-line and ready.
  277.  
  278.  
  279.  
  280.  
  281. Utility programs  Use
  282. ----------------  ---
  283.  
  284. XQB4CAPS.BAS      Converts those $@#! upper case QB4 keywords in your source
  285.                   code file to easier-to-read lower case, without affecting 
  286.                   anything else.  Source code included.
  287.  
  288. XDOT.BAS          Converts old-style variable names containing periods in your
  289.                   source file to variable names without periods.
  290.                   
  291.                     Example:   old.style.name => OldStyleName
  292.                   
  293.                   Variable names using periods are so much easier to read, but
  294.                   Microsoft would like to see them used only for user-defined
  295.                   type fields.
  296.  
  297. READPRN.BAS       Reports the printer status for all three LPT ports.
  298.  
  299. DISKINFO.BAS      Reports hard drive partition sizes and percent free space.
  300.  
  301.  
  302.  
  303.  
  304. Demo programs
  305. --------------
  306. Most routines are demonstrated with short, commented, example programs.
  307.  
  308.  
  309.  
  310.  
  311. About the author (Hugh Martin):
  312.  
  313. Ever wonder about the people who do this kind of stuff?  I do, so here's 
  314. a bit about me.
  315.  
  316. I earn my living as a computer programmer, consultant, and systems 
  317. integrator.  I'm have two kids (Miriam - Apr 87 and Eric - Jan 91), who 
  318. are driving my wife and me crazy with their boundless energy.  We are 
  319. energetic ourselves, preferring to ski, bicycle, play tennis, or hike, 
  320. but have been forced to put all that on low while we raise these little 
  321. rascals .  We all speak both French and English at home, though Miriam 
  322. has discovered that English is much more universal in our neighborhood 
  323. and is insisting on using it more and more, despite having learned French 
  324. first.  I'm a bit of a gourmet and like to grow my own vegetables because 
  325. they taste so much better.  I keep a trampoline in the back yard and use 
  326. it regularly and expertly.  Yes, like many computer people, I'm a little 
  327. bit strange.  My neighbors don't understand a grown man doing flips on a 
  328. trampoline.
  329.  
  330. I'm an independent soul, and enjoy forming my own opinions.  When 
  331. something breaks, I prefer to fix it myself, regardless of the time it 
  332. takes, because I know I'll learn something, and probably do a better job 
  333. than most repairmen.  Learning, being independent, and doing the job 
  334. right are major motivators for me.  I am a critical observer, and pay 
  335. close attention to details, but also tend to think globally.  I'm betting 
  336. man will destroy his own environment, but I'm basically an optimist.
  337.  
  338. Gee, doctor, I feel a lot better now.  How much do I owe you?
  339.  
  340.