home *** CD-ROM | disk | FTP | other *** search
Text File | 1989-09-30 | 176.9 KB | 7,525 lines |
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QB4BAS.LIB -- Version 4.5
-
- October 10, 1989
-
- Harold Thomson
-
- 7437 Burnway Drive
- Orlando, Fl. 32819
- 407-351-3737
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- PREFACE
-
-
-
-
-
- There has been a major enhancement to this release of QB4BAS.LIB. Many
- of the routines that required pre-allocated strings to be passed in
- the call no longer require this and will now return their output as a
- string. Many of the subroutines have been converted to functions to
- accomodate this new functionality. This is another step towards making
- these routines appear as if they are a part of QuickBASIC.
-
-
- QB4BAS.LIB is a collection of subroutines and functions which are
- designed for use with Microsoft QuickBASIC 4.0 thru 4.5. In addition
- they will also work with the new Microsoft BASCOM 6.0 compiler. They
- are not compatable with previous versions of QuickBASIC or BASCOM and
- no attempts should be made to use them with other versions.
-
- As noted above, this library contains both subroutines and functions.
- The difference is that subroutines will perform the assigned task and
- exit where as a function will perform an assigned task and return a
- value which can be used to assign a value to a variable (ie variable
- = function) or be part of an expression ( IF function = 0 THEN). As
- you can see, this makes QB4BAS.LIB much more powerful and easier to
- use than its predecessor, QuickBas.LIB. I would like to take credit
- for this improvement but the thanks belongs to Microsoft for creating
- a powerful and impressive compiler.
-
- These routines are for whomever wants to use them. I am not charging
- anything as long as they are used for personal use or freeware
- programs. If any of these routines are to be used in any packages
- that are to be sold to the public, I feel it is only fair that I be
- informed of this use. I also feel that it would be appropriate in
- this case to send me a small donation. I am not in this to make money
- but if someone else is going to make money from my work, I should get
- at least a little something from it.
-
- As you may have noticed, I did not include the source code for these
- routines. The reason for this is to protect these routines from any
- changes which may cause them to no longer function the way they are
- documented. I am willing to accept any comments or suggestions for
- changes but I will have the final say on what happens. I do not
- intend to make changes which would cause these routine not to function
- as originally documented unless it is felt that these changes will
- only improve the routines. Of course if this happens, I will make note
- of it so please read the #@!%$& documentation. (I know, I hate to
- read documentation almost as much as I hate writing it.)
-
- I do have one thing that I would like to ask of anyone who might
- decide to use any or all of these routines, let me know what you think
- of them. I like praise but I can also take criticism. You can send
- me a note at the address on the front cover.
-
-
-
- QB4BAS.LIB -- Version 4.5 ii
-
-
-
-
-
-
-
-
- ACKNOWLEDGEMENTS
-
-
- While developing the original QuickBas.LIB routines, Charlie Wooster
- and Terry Shockley where very helpful in testing the routines as well
- as suggesting several of the routines that were in the library. I
- would also like to extend thanks to Charlie who spent a lot of time
- correcting problems encountered in QMENU as well as extending its
- capabilities by writing QMENUS. Thanks to both of you.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QB4BAS.LIB -- Version 4.5 iii
-
-
-
-
-
-
-
-
- Many of the new routines in version 2.0 were written for Clint
- Labarth, Sysop of the Black Hole BBS in Orlando, for inclusion in his
- new release of DoorPch routines which are used with PCBoard for
- writing doors. Thanks for the suggestions, Clint.
-
- I have also received several suggestions and comments from different
- people who have taken the time to try these routines. It is good to
- see that these routines are finally starting to be noticed. To all
- who have written or called, thanks.
-
- Many of the routines contained in the QB4BAS.LIB were derived from
- routines in Leo J. Scanlons "Assembly Language Subroutines for MS-DOS
- Computers". This is a very handy book and if you don't have a copy
- and like to write assembly programs, I would recommend it. Another of
- his books that I use quite often is "8086/88 Assembly Language
- Programming". Page 100 is used quite often.
-
- The QINPUT routine included in the library was developed from the
- article "The Finishing Strokes" by Hardin Brothers in the September
- 1987 (#6) issue of PCResource magazine. Hardin has been writing good
- articles for some time now, I remember some from 80 MICRO, and he has
- several good ones in PCResource. I find this a very good magazine
- with a good amount of information on Quick Basic programming.
-
- The QCLOCK routine supplied is based upon the CLOCK.ASM program by
- Robert J. Karp in the October 13, 1987 issue (Vol 7, Number 17) of PC
- Magazine.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QB4BAS.LIB -- Version 4.5 iv
-
-
-
-
-
-
-
-
- TABLE OF CONTENTS
-
-
-
-
-
- Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ii
- Acknowledgements . . . . . . . . . . . . . . . . . . . . . . . . iii
-
- Summary of Amendments . . . . . . . . . . . . . . . . . . . . . . 1
- Version 4.5 - Released 10/10/89 . . . . . . . . . . . . . . . . . 1
- Version 4.2 - Released 07/17/89 . . . . . . . . . . . . . . . . . 2
- Version 4.1 - Released 05/08/89 . . . . . . . . . . . . . . . . . 2
- Version 4.0 - Released 04/15/89 . . . . . . . . . . . . . . . . . 2
- Version 3.0 - Released 11/20/88 . . . . . . . . . . . . . . . . . 4
- Version 2.0 - Released 03/15/88 . . . . . . . . . . . . . . . . . 4
- Version 1.0 - Released 01/17/88 . . . . . . . . . . . . . . . . . 5
-
- Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
- Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
-
- Dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
- QDATE -- FUNCTION . . . . . . . . . . . . . . . . . . . . . . 8
- QDATECVT -- FUNCTION . . . . . . . . . . . . . . . . . . . . . . 9
- QDATEIN -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 10
- QDATE2INT -- FUNCTION . . . . . . . . . . . . . . . . . . . . 11
- QINT2DATE -- FUNCTION . . . . . . . . . . . . . . . . . . . . 11
- QJULCALC -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 12
-
- Disk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
- QCNTFILE -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 13
- QDISKSTAT -- SUB . . . . . . . . . . . . . . . . . . . . . . . 13
- QDISKTYP -- SUB . . . . . . . . . . . . . . . . . . . . . . . 14
- QDRVSPACE -- FUNCTION . . . . . . . . . . . . . . . . . . . . 14
- QGETDRV -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 15
- QGETVOL -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 15
- QSETDRV -- SUB . . . . . . . . . . . . . . . . . . . . . . . 15
- QSETVOL -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 16
-
- File . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
- QCOPYFIL -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 17
- QDELETE -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 17
- QEXIST -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 18
- QFATTR -- SUB . . . . . . . . . . . . . . . . . . . . . . . 18
- QFCLOSE -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 19
- QFCREATE -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 20
- QFDATE -- SUB . . . . . . . . . . . . . . . . . . . . . . . 21
- QFINDFIRST -- FUNCTION . . . . . . . . . . . . . . . . . . . . 22
- QFINDNEXT -- FUNCTION . . . . . . . . . . . . . . . . . . . . 23
- QFINDF -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 24
- QFINDN -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 24
- QFLOF -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 25
- QFNAME -- SUB . . . . . . . . . . . . . . . . . . . . . . . 25
- QFOPEN -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 26
- QFREAD -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 27
-
-
- QB4BAS.LIB -- Version 4.5 v
-
-
-
-
-
-
-
-
- QFSETEND -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 28
- QFSETREC QFSETRECL-- FUNCTION . . . . . . . . . . . . . . . . 28
- QFSIZE -- SUB . . . . . . . . . . . . . . . . . . . . . . . 29
- QFSTAMP -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 29
- QFTIME -- SUB . . . . . . . . . . . . . . . . . . . . . . . 30
- QFWRITE -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 31
- QMOVEFIL -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 32
- QPARSEF -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 33
- QRENAME -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 34
- QTREAD -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 35
- QTWRITE -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 36
-
- Keyboard . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
- QALTKEY -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 38
- QCAPSKEY -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 38
- QCTRLKEY -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 39
- QGETKEY -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 39
- QINKEY -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 40
- QINPUT -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 41
- QINPUTM -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 43
- QKEYFLAG -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 44
- QKEYSTAT -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 44
- QPOPMENU -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 45
- QMENU -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 48
- QMENUS -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 51
- QNUMKEY -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 54
- QSCRLKEY -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 54
- QYESNO -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 55
-
- Miscellaneous . . . . . . . . . . . . . . . . . . . . . . . . . 56
- QALARM -- SUB . . . . . . . . . . . . . . . . . . . . . . . 56
- QARGC QARGV -- FUNCTION . . . . . . . . . . . . . . . . . . . 56
- QCAPSOFF QCAPSON -- SUB . . . . . . . . . . . . . . . . . . . 57
- QCLOCK -- SUB . . . . . . . . . . . . . . . . . . . . . . . 58
- QCMDLEN -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 59
- QCMDLINE -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 59
- QCRCCHK QCRCSET -- FUNCTION . . . . . . . . . . . . . . . . . 60
- QDOSVER -- SUB . . . . . . . . . . . . . . . . . . . . . . . 60
- QEMSSIZE -- SUB . . . . . . . . . . . . . . . . . . . . . . . 61
- QEMSEXIST -- FUNCTION . . . . . . . . . . . . . . . . . . . . 61
- QEQUIPMENT -- SUB . . . . . . . . . . . . . . . . . . . . . . 62
- QEXIT -- SUB . . . . . . . . . . . . . . . . . . . . . . . 62
- QINPORT -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 63
- QMININT QMAXINT -- FUNCTION . . . . . . . . . . . . . . . . . 63
- QMINLONG QMAXLONG -- FUNCTION . . . . . . . . . . . . . . . . 64
- QNUMLOCKOFF QNUMLOCKON -- SUB . . . . . . . . . . . . . . . . 64
- QPRINTER -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 65
- QPRTSCRN -- SUB . . . . . . . . . . . . . . . . . . . . . . . 65
- QPRTSCRNOFF QPRTSCRNON -- SUB . . . . . . . . . . . . . . . . 66
- QPAUSE -- SUB . . . . . . . . . . . . . . . . . . . . . . . 66
- QPAUSE18 -- SUB . . . . . . . . . . . . . . . . . . . . . . . 67
- QREBOOT -- SUB . . . . . . . . . . . . . . . . . . . . . . . 67
- QSHIFTIL QSHIFTIR -- FUNCTION . . . . . . . . . . . . . . . . 68
- QSHIFTLL QSHIFTLR -- FUNCTION . . . . . . . . . . . . . . . . 68
- QSCROLLOFF QSCROLLON -- SUB . . . . . . . . . . . . . . . . . 69
-
-
- QB4BAS.LIB -- Version 4.5 vi
-
-
-
-
-
-
-
-
- QTIME -- SUB . . . . . . . . . . . . . . . . . . . . . . . 69
- QTEMPC -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 70
- QTEMPF -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 70
- QVERIFY -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 71
- QVERIFYOFF QVERIFYON -- SUB . . . . . . . . . . . . . . . . . 71
- Q8087 -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 72
-
- String . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
- QCAPIT -- SUB . . . . . . . . . . . . . . . . . . . . . . . 73
- QCENTER -- SUB . . . . . . . . . . . . . . . . . . . . . . . 73
- QCHARTYP -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 74
- QDELIM -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 74
- QEXTRACT -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 75
- QHIGHBIT -- SUB . . . . . . . . . . . . . . . . . . . . . . . 75
- QINSTR -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 76
- QLEN -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 76
- QMID -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 77
- QMOVREC -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 77
- QMOVSTR -- SUB . . . . . . . . . . . . . . . . . . . . . . . 78
- QREPLACE -- SUB . . . . . . . . . . . . . . . . . . . . . . . 78
- QREVERSE -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 79
- QRINSTR -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 79
- QSTRIP -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 80
- QSTRPCHR -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 80
- QSUBSTR -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 81
- QWORD -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 81
- QWORDS -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 82
-
- Sub-Directory . . . . . . . . . . . . . . . . . . . . . . . . . 83
- QCHDIR -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 83
- QCHKDIR -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 83
- QGETDIR -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 84
- QMKDIR -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 84
- QRMDIR -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 84
-
- Video . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
- QANSIPRT -- SUB . . . . . . . . . . . . . . . . . . . . . . . 85
- QATTR -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 85
- QBPRT -- SUB . . . . . . . . . . . . . . . . . . . . . . . 86
- QBMPRT -- SUB . . . . . . . . . . . . . . . . . . . . . . . 87
- QCRTMODE -- SUB . . . . . . . . . . . . . . . . . . . . . . . 88
- QCLREOL -- SUB . . . . . . . . . . . . . . . . . . . . . . . 88
- QGETATTR -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 90
- QGETCURS -- SUB . . . . . . . . . . . . . . . . . . . . . . . 90
- QGETMODE -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 91
- QMPRT -- SUB . . . . . . . . . . . . . . . . . . . . . . . 92
- QPAINT -- SUB . . . . . . . . . . . . . . . . . . . . . . . 93
- QPRT -- SUB . . . . . . . . . . . . . . . . . . . . . . . 94
- QPRTANSI -- SUB . . . . . . . . . . . . . . . . . . . . . . . 95
- QRESTSCR -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 96
- QSAVESCR -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 97
- QSCROLL -- SUB . . . . . . . . . . . . . . . . . . . . . . . 98
- QSCROLLB -- SUB . . . . . . . . . . . . . . . . . . . . . . . 98
- QSCRREST -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 99
- QSCRSAVE -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 100
-
-
- QB4BAS.LIB -- Version 4.5 vii
-
-
-
-
-
-
-
-
- QSETMODE -- SUB . . . . . . . . . . . . . . . . . . . . . . . 101
- QWINDOW -- SUB . . . . . . . . . . . . . . . . . . . . . . . 102
- QWINDOWH -- SUB . . . . . . . . . . . . . . . . . . . . . . . 103
- QWINDOWV -- SUB . . . . . . . . . . . . . . . . . . . . . . . 104
- QWINDOWX -- SUB . . . . . . . . . . . . . . . . . . . . . . . 105
- QVIDREST -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 106
- QVIDSAVE -- FUNCTION . . . . . . . . . . . . . . . . . . . . . 106
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- QB4BAS.LIB -- Version 4.5 viii
-
-
-
-
-
-
-
-
- SUMMARY OF AMENDMENTS
-
-
-
- VERSION 4.5 - RELEASED 10/10/89
-
-
- NEW ROUTINES
-
- File QFSETRECL
-
- Miscellaneous QARGC QARGV
-
- String QREVERSE
-
- ROUTINES CORRECTED
-
- QWINDOWX Correct documentation for DECLARE
- QINPUT QINPUTM Would not accept 2 as valid number of keys
- QCHARTYP Returning wrong results
-
- ROUTINES REVISED
-
- QCMDLINE Now returns a string variable
- QDATE Now returns a string variable
- QDATECVT Now returns a string variable
- QDATEIN Now returns a string variable
- QDELIM Now returns a string variable
- QEXIST Can now also check for existance of directorys
- QEXTRACT Now returns a string variable
- QGETDIR Now returns a string variable
- QGETDRV Now returns a string variable
- QGETVOL Now returns a string variable
- QINT2DTE Now returns a string variable
- QMOVREC Now returns a string variable
- QREVERSE Now returns a string variable
- QSTRIP Now returns a string variable
- QSTRPCHR Now returns a string variable
- QSUBSTR Now returns a string variable
- QWORD Now returns a string variable
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Summary of Amendments 1
-
-
-
-
-
-
-
-
- VERSION 4.2 - RELEASED 07/17/89
-
-
- NEW ROUTINES
-
- File QFLOF QPARSEF
-
- Keyboard QINPUTM
-
- Miscellaneous QCMDLEN QREBOOT (Really)
-
- String QMID QSTRIP QSTRPCHR QSUBSTR
-
- ROUTINES CORRECTED
-
- QFSETREC Now can select first record.
- QCRTMODE Support added to test for VGA monitor.
-
-
-
- VERSION 4.1 - RELEASED 05/08/89
-
-
- NEW ROUTINES
-
- Disk QSETVOL
-
- Keyboard QALTKEY QCAPSKEY QCAPSON QCAPSOFF QCNTLKEY QNUMKEY
- QSCRLKEY QSCROLLON QSCROLLOFF QYESNO
-
- Miscellaneous QTEMPC QTEMPF Q8087
-
- String QHIGHBIT QLEN
-
-
-
- VERSION 4.0 - RELEASED 04/15/89
-
-
- NEW ROUTINES
-
- Disk QDISKTYP
-
- File QFSTAMP QTREAD QTWRITE
-
- Miscellaneous QMAXINT QMININT QMAXLONG QMINLONG QSHIFTIL QSHIFTIR
- QSHIFTLL QSHIFTLR QVERIFY QVERIFYON QVERIFYOFF
- QEMSEXIST
-
- String QCAPIT QCENTER QCHARTYP
-
- Video QCLREOL QGETMODE QPAINT QRESTSCR QSAVESCR QSETMODE
-
- ROUTINES CORRECTED
-
-
-
- Summary of Amendments 2
-
-
-
-
-
-
-
-
- QCOPYFIL Increased copy buffer from 1K to 2K.
- QMOVEFIL Increased move buffer from 1K to 2K.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Summary of Amendments 3
-
-
-
-
-
-
-
-
- VERSION 3.0 - RELEASED 11/20/88
-
-
- NEW ROUTINES
-
- Disk QCNTFILE QGETVOL
-
- File QFINDFIRST QFINDNEXT
-
- Keyboard QPOPMENU
-
- Miscellaneous QBYTES
-
- String QMOVREC QMOVSTR
-
- Video QWINDOWX
-
- ROUTINES CORRECTED
-
- QINPUT No longer hangs certain systens on exit.
- QSCROLL No longer hangs certain systems on exit.
- QSCROLLB No longer hangs certain systems on exit.
- QSCRREST Now works with monochrome monitors.
- QSCRSAVE Now works with monochrome monitors.
-
-
-
- VERSION 2.0 - RELEASED 03/15/88
-
-
- NEW ROUTINES
-
- Date QDATE2INT QINT2DATE
-
- Disk QDSKSTAT QDRVSPC
-
- Keyboard QGETKEY QINKEY QKEYSTAT
-
- Miscellaneous QINPORT QTIMER
-
- Video QCRTMODE QGETATTR QGETCURS QPRTANSI
-
- ROUTINES CORRECTED
-
- QEXIT Now resets either Mono or CGA cursor.
- QWORDS Now returns 0 for null strings.
-
-
-
-
-
-
-
-
-
-
-
- Summary of Amendments 4
-
-
-
-
-
-
-
-
- VERSION 1.0 - RELEASED 01/17/88
-
-
- CONVERTED ROUTINES from QuickBas.LIB Version 3.0
-
- Date QDATE QDATECVT QDATEIN QJULCALC
-
- Disk QGETDRV QSETDRV
-
- File QCOPYFIL QDELETE QEXIST QFATTR QFCLOSE QFCREATE
- QFOPEN QFREAD QFSETEND QFSETREC QFWRITE QFDATE QFINDF
- QFINDN QFNAME QFSIZE QFTIME QMOVEFIL QRENAME
-
- KeyBoard QINPUT QMENU QMENUS
-
- Miscellaneous QALARM QCLOCK QCMDLINE QCRCCHK QCRCSET QDOSVER
- QEMSSIZE QEQUIPMENT QEXIT QNUMLOCKOFF QNUMLOCKON
- QPRINTER QPRTSCRN QPRTSCRNOFF QPRTSCRNON QPAUSE
- QPAUSE18
-
- String QDELIM QEXTRACT QREPLACE QWORD QWORDS
-
- Sub-Directory QCHDIR QCHKDIR QGETDIR QMKDIR QRMDIR
-
- Video QANSIPRT QATTR QBPRT QPRT QBMPRT QMPRT QSCROLL
- QSCROLLB QSCRREST QSCRSAVE QWINDOW QWINDOWH QWINDOWV
- VIDREST VIDSAVE
-
- DELETED ROUTINES from QuickBas.LIB Version 3.0
-
- String QLOWER QUPPER
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Summary of Amendments 5
-
-
-
-
-
-
-
-
- INTRODUCTION
-
-
-
- QB4BAS is a collection of subroutine and functions written in
- Assembler for the Microsoft QuickBASIC 4.0 thru 4.5 compilers. The
- routines will also work with the Microsoft BASIC 6.0 compiler. Many of
- the routines are functionally the same as routines found in other
- Basic Library packages. In addition, I have added several routines
- that were not available and which I find to be very helpful. I have
- tested all of the routines and they have worked for me on my AT&T
- PC6300. I am sure that they will work on any AT&T compatible machine.
-
- The files included in QB4BAS45.ZIP are as follows:
-
- QB4BAS.DOC The QB4BAS library DOC.
- QB4BAS.LIB The QB4BAS library.
- QB4BAS.QLB The QB4BAS quick library.
- QB4BAS.BI Include file containing the necessary DECLAREs.
- QB4OBJ.ZIP The individual OBJ files to create a LIB.
- QB4BAS.RSP The response file used to create the .LIB file.
- QB4QLB.RSP The response file used to create the .QLB file.
-
-
-
- REQUIREMENTS
-
-
- In order to use the functions or routines in QB4BAS.LIB, you must
- either add the DECLARE statements in the examples or include QB4BAS.BI
- using the $INCLUDE metacommand.
-
- Most of the routines in this library require that either a string
- variable or a numeric variable be passed with the call. Whenever a
- routine requires a numeric variable, the variable must be defined as
- an integer by either using the DEFINT statement or by using the
- percent sign at the end of the variable name.
-
- Some routines require that when a string variable is used, it be set
- to a minimum size. This is due to the limitations placed upon me by
- BASIC when using assembly language routines. Always check the routine
- format before using it.
-
- Whenever an array is used in a call, double check the example to be
- sure that the proper calling format is used. Failure to do so may
- cause some of these routines fail or hang up your machine.
-
- I have received some correspondence regarding linking programs with
- the routines in the .LIB to create an .EXE file. According to the
- information from MicroSoft, only stand alone .EXE files can be creates
- using these routines, do not try to create an .EXE from within the QB
- environment, you must compile the program using the BC compiler. In
- addition, when using the BC compiler, you must use the /O option to
- indicate that BCOM45.LIB will be used to link the program.
-
-
-
- Introduction 6
-
-
-
-
-
-
-
-
- The proper format is:
-
- BC mypgm /O;
-
- The format of the link command is as follows:
-
- LINK /E mypgm+NOCOM, , ,BCOM45+QB4BAS;
-
- I hope that this clears up any problems that anyone has been having
- with the routines.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Introduction 7
-
-
-
-
-
-
-
-
- DATES
-
-
-
- QDATE -- FUNCTION
-
-
- Returns a variety of date information based upon the current date. The
- routine returns a string which contains the requested information. It
- is no longer necessary to pre-allocate the return string. By using a
- variety of function codes, this function will return the alpha weekday
- (Sunday), the number of days so far this year (ddd), the Julian date
- (yyddd), the alpha month (June), the default date format (dd MMM
- yyyy), the USA date (mm/dd/yy), The European date (dd/mm/yy), the
- ordered date (yy/mm/dd) and the sorted date (yyyymmdd). If an error
- is encountered, a null string will be returned.
-
- The format of the call is as follows:
-
- Buffer$ = QDATE(FuncCode$)
-
- The following are the valid Function Codes:
-
- D - Day of the year : ddd
- E - European date : dd/mm/yy
- J - Julian date : yyddd
- M - Month : name of month, RC = length
- N - Normal : dd MMM yyyy (30 Sep 1987)
- O - Ordered date : yy/mm/dd
- S - Sorted date : yyyymmdd
- U - USA date : mm/dd/yy
- W - Weekday : day of the week, RC = length
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QDATE$ (FunCode AS STRING)
- .
- REM Print the day of the week
- FuncCode$ = "W"
- Buffer$ = QDATE(FuncCode$)
- IF Buffer$ <> "" THEN
- PRINT "Today is " Buffer$
- END IF
- .
- REM Print the normal date
- FuncCode$ = "N"
- Buffer$ = QDATE(FuncCode$)
- IF Buffer$ <> "" THEN
- PRINT "Today is " Buffer$
- END IF
-
-
-
-
-
-
- Dates 8
-
-
-
-
-
-
-
-
- QDATECVT -- FUNCTION
-
-
- Converts either a gregorian date to julian (IN = mm/dd/yy OUT = yyddd)
- or a julian date to gregorian date (IN = yyddd OUT = mm/dd/yy). The
- conversion is based upon a function code which is passed with the
- call. If an error is encountered, a null string will returned.
-
- The format of the call is as follows:
-
- OutDate$ = QDATECVT(Indate$, FuncCode$)
-
- The following are the valid Function Codes:
-
- J - Converts gregorian to julian
- G - Converts julian to gregorian
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QDATECVT$ (InDate AS STRING, _
- FunCode AS STRING)
- .
- REM Convert to julian
- InDate$ = "05/29/87"
- FuncCode$ = "J"
- OutDate$ = QDATECVT(InDate$, FuncCode$)
- IF OutDate$ <> "" THEN
- PRINT "The julian date is " OutDate$
- END IF
- .
- REM Convert to gregorian
- InDate$ = "87149"
- FuncCode$ = "G"
- OutDate$ = QDATECVT(InDate$, FuncCode$)
- IF OutDate$ <> "" THEN
- PRINT "The gregorian date is " OutDate$
- END IF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Dates 9
-
-
-
-
-
-
-
-
- QDATEIN -- FUNCTION
-
-
- Returns a variety of date information based upon a date which is
- included in the call. The date in is in the format of MM/DD/YY or
- MM/DD/YYYY. If the year is YY then 1900 is assumed. By supplying a
- function code, this routine returns a string which contains either the
- alpha weekday (Sunday), the number of days so far this year (ddd), the
- Julian date (yyddd), the alpha month (June), the default date format
- (dd MMM yyyy), the USA date (mm/dd/yy), The European date (dd/mm/yy),
- the ordered date (yy/mm/dd) and the sorted date (yyyymmdd). If an
- error is, a null string is returned.
-
- The format of the call is as follows:
-
- Buffer$ = QDATEIN(InDate$, FuncCode$)
-
- The following are the valid Function Codes:
-
- D - Day of the year : ddd
- E - European date : dd/mm/yy
- J - Julian date : yyddd
- M - Month : name of month, RC = length
- N - Normal : dd MMM yyyy (30 Sep 1987)
- O - Ordered date : yy/mm/dd
- S - Sorted date : yyyymmdd
- U - USA date : mm/dd/yy
- W - Weekday : day of the week, RC = length
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QDATEIN$ (InDate AS STRING, _
- FunCode AS STRING)
- .
- REM Print the day of the week
- InDate$ = "10-18-1987"
- FuncCode$ = "W"
- Buffer$ = QDATEIN(InDate$, FuncCode$)
- IF Buffer$ <> "" THEN
- PRINT "Today is " Buffer$
- END IF
- .
- REM Print the normal date
- FuncCode$ = "N"
- Buffer$ = QDATEIN(InDate$, FuncCode$)
- IF Buffer$ <> "" THEN
- PRINT "Today is " Buffer$
- END IF
-
-
-
-
-
-
-
-
- Dates 10
-
-
-
-
-
-
-
-
- QDATE2INT -- FUNCTION
-
-
- Compress an 8 byte string date (XX/XX/XX) into a 2 byte integer. This
- function can be used to compress a date to be written to a file to
- save 6 bytes per date written.
-
- The format of the call is as follows:
-
- HoldDate = QDATE2INT(InDate$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QDATE2INT% (InDate AS STRING)
- .
- InDate$ = "05/29/48"
- HoldDate = QDATE2INT(InDate$)
-
-
-
- QINT2DATE -- FUNCTION
-
-
- Uncompress a 2 byte integer date which has been compressed using
- QDATE2INT back into an 8 byte string date (XX/XX/XX).
-
- The format of the call is as follows:
-
- OutDate$ = QINT2DATE(InDate)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QDATE2INT% (InDate AS STRING)
- DECLARE FUNCTION QINT2DATE$ (BYVAL InDate AS INTEGER)
- .
- InDate$ = "05/29/48"
- HoldDate = QDATE2INT(InDate$)
- OutDate$ = QINT2DATE(HoldDate)
- PRINT "The date is " OutDate$
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Dates 11
-
-
-
-
-
-
-
-
- QJULCALC -- FUNCTION
-
-
- Either adds or subtracts from a julian date. The julian date must be
- passed as a string and the amount to add or subtract must be an
- integer. This function allows for leap years. If there is an error
- encountered, the RC will be set to -1.
-
- The format of the call is as follows:
-
- RC = QJULCALC(Calcdate$, Amount)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QJULCALC% (CalcDate AS STRING, _
- BYVAL Amount AS INTEGER)
- .
- REM Add 25 days to "87214"
- CalcDate$ = "87214"
- Amount = 25
- IF QJULCALC(CalcDate$, Amount) = 0 THEN
- PRINT "The new julian date is " CalcDate$
- END IF
- .
- REM Subtract 25 days from "87214"
- CalcDate$ = "87214"
- Amount = -25
- IF QJULCALC(CalcDate$, Amount) = 0 THEN
- PRINT "The new julian date is " CalcDate$
- END IF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Dates 12
-
-
-
-
-
-
-
-
- DISK
-
-
-
- QCNTFILE -- FUNCTION
-
-
- Retrieves the number of files in the requested path that match the
- search string.
-
- The format of the call is as follows:
-
- FileCnt = QCNTFILE(InFileName AS STRING)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QCNTFILE% (InFileName AS STRING) _
- BYVAL Attr AS INTEGER)
- InFileName$ = "C:\TESTPATH" + CHR$(0)
- Attr = 32
- Cnt = QCNTFILE(InFileName$, Attr)
- PRINT "Number of files is " + STR$(Cnt)
-
-
-
- QDISKSTAT -- SUB
-
-
- Retrieves information on the requested disk drive. The information
- returned is the free clusters, total clusters, bytes per sector and
- the number of sectors per cluster
-
- The format of the call is as follows:
-
- QDISKSTAT Drv$, FClusters, TotClusters, BytesSector, SectorsCluster
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QDISKSTAT (DrvName AS STRING, _
- FreeClusters AS INTEGER, _
- TotClusters AS INTEGER, _
- BytesSector AS INTEGER, _
- SectorsCluster AS INTEGER)
- Drv$="C:\"
- QDISKSTAT Drv$, FClusters, TotClusters, BytesSector, SectorsCluster
- PRINT "Drive "+Drv$+" has "+STR$(SectorsCluster)+" Clusters/Sector."
-
-
-
-
-
-
-
-
-
- Disk 13
-
-
-
-
-
-
-
-
- QDISKTYP -- SUB
-
-
- Returns a return code which indicates the type of disk for the current
- logged drive. A return code of 0 indicates the it is a hard drive, a
- 1 indicates a floppy disk and a -1 indicates that the type of disk
- could not be determined.
-
- The format of the call is as follows:
-
- RC = QDISKTYP()
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QDISKTYP% ()
- RC = QDISKTYP()
- IF RC = 0 THEN
- PRINT "The current logged disk is a hard disk"
- ELSEIF RC = 1 THEN
- PRINT "The current logged disk is a floppy disk"
- ELSE
- PRINT "The current logged disk type cannot be determined"
- END IF
-
-
-
- QDRVSPACE -- FUNCTION
-
-
- Retrieves the total amount of free disk space on the requested disk
- drive.
-
- The format of the call is as follows:
-
- FreeSpace = QDRVSPACE(DrvStr$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QDRVSPACE& (DrvName AS STRING)
- DrvStr$="C:\"
- FreeSpace = QDRVSPACE(DrvStr$)
- PRINT "Drive "+DrvStr$+" has "+STR$(FreeSpace)+" bytes."
-
-
-
-
-
-
-
-
-
-
-
-
-
- Disk 14
-
-
-
-
-
-
-
-
- QGETDRV -- FUNCTION
-
-
- Get the current logged disk drive. It is no longer necessary to
- pre-allocate the return string.
-
- The format of the call is as follows:
-
- DrvStr$ = QGETDRV
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QGETDRV$ ()
- DrvStr$ = QGETDRV
- PRINT "The current disk is " DrvStr$
-
-
-
- QGETVOL -- FUNCTION
-
-
- Get the volume label of the requested disk drive. It is not necessary
- to pre-allocate the return string.
-
- The format of the call is as follows:
-
- VolId$ = QGETVOL
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QGETVOL$ ()
- VolId$ = QGETVOL
- PRINT "The current disk label is " VolId$
-
-
-
- QSETDRV -- SUB
-
-
- Change the current logged disk drive.
-
- The format of the call is as follows:
-
- QSETDRV NewDrv$
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QSETDRV (DrvName AS STRING)
- NewDrv$="C:"
- QSETDRV NewDrv$
-
-
-
-
- Disk 15
-
-
-
-
-
-
-
-
- QSETVOL -- FUNCTION
-
-
- This function will set, change or delete the volume label of the
- requested disk drive. In order to set or change the vol label, the
- string that is passed must be 11 characters long. A null string can
- be used to delete the current vol label.
-
- The format of the call is as follows:
-
- RC = QSETVOL(VolId$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QSETVOL% (VolId AS STRING)
- VolId$ = "HAROLDSDISK"
- IF QSETVOL(VolId$) = 0 THEN
- PRINT "The Vol label has been set to " VolId$
- END IF
- .
- REM The following will delete the current Vol label
- VolId$ = ""
- IF QSETVOL(VolId$) = 0 THEN
- PRINT "The Vol label has been deleted"
- END IF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Disk 16
-
-
-
-
-
-
-
-
- FILE
-
-
-
- QCOPYFIL -- FUNCTION
-
-
- Copies a file. This is a better way of copying a file because it does
- not require the SHELL command. This routine will replace the file on
- the destination device, use QEXIST to check if the file already
- exists. Requires an ASCIIZ filename. The return code will be set if
- any errors are encountered.
-
- The format of the call is as follows:
-
- RC = QCOPYFIL(OldFile$, NewFile$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QCOPYFIL% (InFileName AS STRING, _
- OutFileName AS STRING)
- OldFile$ = "TESTFILE.OLD"+CHR$(0)
- NewFile$ = "TESTFILE.NEW"+CHR$(0)
- IF QCOPYFIL(OldFile$, NewFile$) = 0 THEN
- PRINT "File copied"
- ELSE
- PRINT "File not copied"
- END IF
-
-
-
- QDELETE -- FUNCTION
-
-
- Deletes a file. Requires an ASCIIZ filename without wildcards. Upon
- exit, a return code is set to indicate if the file was deleted or not.
-
- The format of the call is as follows:
-
- RC = QDELETE(DelFile$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QDELETE% (FileName AS STRING)
- .
- DelFile$="QUICKBAS.LIB"+CHR$(0)
- IF QDELETE(DelFile$) = 0 THEN
- PRINT "File deleted"
- ELSE
- PRINT "File not deleted"
- END IF
-
-
-
-
- File 17
-
-
-
-
-
-
-
-
- QEXIST -- FUNCTION
-
-
- Tells you if the requested file or sub-directory already exists.
- Returns zero if it does, or a -1 if it doesn't. Requires an ASCIIZ
- name without wildcards.
-
- The format of the call is as follows:
-
- RC = QEXIST(ChkFile$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QEXIST% (FileName AS STRING)
- REM For a sub-directory use ==> ChkFile$ = "\QB4\WORK" + CHR$(0)
- ChkFile$ = "FINDFILE.TXT" + CHR$(0)
- IF QEXIST(ChkFile$) = 0 THEN
- PRINT "File exists"
- ELSE
- PRINT "File not found"
- END IF
-
-
-
- QFATTR -- SUB
-
-
- Returns the file attribute of a file that has been located by either
- QFINDF or subsequent calls to QFINDN. See the information on these
- two calls before using this routine.
-
- The format of the call is as follows:
-
- QFATTR Attr
-
- The file attributes are as follows:
-
- Normal - 00h A normal file.
- Read-Only - 01h File cannot be erased or rewritten.
- Hidden - 02h File info not displayed by DIR command.
- System - 04h Like hidden but for system (DOS,BIOS) files.
- Vol Label - 08h A disk's vol label.
- Directory - 10h A subdirectory.
- Archive - 20h Set after most backup programs run.
-
- Combinations of file attributes can be used. An example is IBMDOS.COM
- which is usually a hidden, system, read-only, archive file.
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QFATTR (Attr AS INTEGER)
- QFATTR Attr
- PRINT "The file attribute is " Attr
-
-
- File 18
-
-
-
-
-
-
-
-
- QFCLOSE -- FUNCTION
-
-
- This function is used to close a file which was created by the
- QFCREATE routine or opened by the QFOPEN routine. This function must
- be called after the QFCREATE or QFOPEN routines to close the created
- or opened file.
-
- The function is called by passing the file "handle" which was returned
- by the QFCREATE or QFOPEN routine. Upon return, the RC will either be
- zero indicating the file was closed or will be 6 indicating an invalid
- handle was specified.
-
- The format of the call is as follows:
-
- RC = QFCLOSE(FHandle)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QFCLOSE% (Handle AS INTEGER)
- .
- REM You must issue either a call to QFCREATE or QFOPEN first
- .
- IF QFCLOSE(FHandle) = 0 THEN
- Print "File Closed"
- ELSE
- Print "Invalid Handle, File Not Closed"
- END IF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- File 19
-
-
-
-
-
-
-
-
- QFCREATE -- FUNCTION
-
-
- This function is used to either create a 0 length file in the
- specified or defaulted path or to initialize a file which will be
- written to using QFWRITE. The QFCLOSE function must be used to close
- the file.
-
- The function is called by passing a file name which may include the
- drive and path). The file name must end with a binary "0" as the
- routine requires ASCIIZ names. In addition, the file attribute must
- be passed in the call, see QFATTR for information on file attributes.
- Upon return, the RC will either be zero indicating the file was
- created or non-zero indicating an error. If the RC is 0 the file
- "handle" will be in the integer variable specified as the 3rd
- parameter. If the RC is 3 the specified path was not found. If the
- RC is 4 a file "handle" was not available. If the RC is 5 access was
- denied.
-
- The format of the call is as follows:
-
- RC = QFCREATE(FileName$, Fattr, FHandle)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QFCREATE% (FileName AS STRING, _
- FileAttr AS INTEGER, _
- Handle AS INTEGER)
- .
- FileName$ = "C:\DEMO\TEST.DAT"+CHR$(0)
- Fattr = 0
- RC = QFCREATE(FileName$, Fattr, FHandle)
- IF RC = 0 THEN
- Print "File Created"
- ELSE
- Print "File Not Created";RC
- END IF
- .
- RC = QFCLOSE(FHandle)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- File 20
-
-
-
-
-
-
-
-
- QFDATE -- SUB
-
-
- Returns the date that the file was created or updated. The file must
- first located by a call to either QFINDF or subsequent calls to
- QFINDN. See the information on these two calls before using this
- routine.
-
- The format of the call is as follows:
-
- QFDATE Month, Day, Year
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QFDATE (Month AS INTEGER, _
- Day AS INTEGER, _
- Year AS INTEGER)
- .
- QFDATE Month, Day, Year
- .
- PRINT "The file date is " Month Day Year
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- File 21
-
-
-
-
-
-
-
-
- QFINDFIRST -- FUNCTION
-
-
- This new function works much like the QFINDF function but, unlike
- QFINDF, it does not require additional calls to other routines to
- retrieve the information that you really wanted in the beginning. The
- file information is returned in a record which must be defined with
- the TYPE command. The necessary record TYPE is supplied in QB4BAS.BI.
- See below for an example on how to use it. This function will locate
- the first file in the specified or default path which matches the
- specified file name. The file name may contain wildcards (* and ?).
- Additional matching files may be found using the QFINDNEXT function.
-
- The function is called by passing a pointer to the record where the
- file information is to be placed. A file name (which can contain
- wildcards "*" or "?" as well as the drive and path) which must end
- with a binary "0" as the routine requires ASCIIZ names. In addition,
- the file attribute must be passed in the call, see QFATTR for
- information on file attributes. Upon return, the RC will either be
- zero, indicating that a file was found, or non-zero indicating an
- error. If the RC is -1 there was an error in the call. If the RC is
- a 2 the specified path is invalid. If the RC is 18 there is no
- matching file.
-
- The format of the call is as follows:
-
- RC = QFINDFIRST(RecAddr, ChkFile$, Fattr)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QFINDFIRST% (BYVAL RecPtr AS INTEGER, _
- FileName AS STRING, _
- BYVAL Attr AS INTEGER)
- TYPE FileType
- Fname AS STRING * 12
- Fdate AS STRING * 8
- Ftime AS STRING * 5
- Fsize AS LONG
- Fattr AS INTEGER
- Month AS INTEGER
- Day AS INTEGER
- Year AS INTEGER
- Hour AS INTEGER
- Minute AS INTEGER
- END TYPE
- .
- DIM Qfile AS FileType
- Fptr = VARPTR(Qfile)
- ChkFile$="C:\DEMO\*.EXE"+CHR$(0)
- IF QFINDFIRST(Fptr, ChkFile$, 0) = 0 THEN
- Print Qfile.Fname, Qfile.Fdate, Qfile.Ftime, Qfile.Fsize
- END IF
-
-
-
-
- File 22
-
-
-
-
-
-
-
-
- QFINDNEXT -- FUNCTION
-
-
- This new function works much like the QFINDN function but, unlike
- QFINDN, it does not require additional calls to other routines to
- retrieve the information that you really wanted in the beginning. The
- file information is returned in a record which must be defined with
- the TYPE command. The necessary record TYPE is supplied in QB4BAS.BI.
- See below for an example on how to use it. This function will locate
- additional files after a successful call to QFINDFIRST.
-
- The function is called by passing a pointer to the record where the
- file information is to be placed. Upon return, the RC will either be
- zero indicating that a file was found or 18 indicating there are no
- more matching files.
-
- The format of the call is as follows:
-
- RC = QFINDNEXT(RecAddr)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QFINDNEXT% (BYVAL RecPtr AS INTEGER)
- .
- TYPE FileType
- Fname AS STRING * 12
- Fdate AS STRING * 8
- Ftime AS STRING * 5
- Fsize AS LONG
- Fattr AS INTEGER
- Month AS INTEGER
- Day AS INTEGER
- Year AS INTEGER
- Hour AS INTEGER
- Minute AS INTEGER
- END TYPE
- .
- DIM Qfile AS FileType
- Fptr = VARPTR(Qfile)
- ChkFile$="C:\DEMO\*.EXE"+CHR$(0)
- IF QFINDFIRST(Fptr, ChkFile$, 0) = 0 THEN
- Print Qfile.Fname, Qfile.Fdate, Qfile.Ftime, Qfile.Fsize
- WHILE QFINDNEXT(Fptr) = 0
- Print Qfile.Fname, Qfile.Fdate, Qfile.Ftime, Qfile.Fsize
- WEND
- END IF
-
-
-
-
-
-
-
-
-
-
- File 23
-
-
-
-
-
-
-
-
- QFINDF -- FUNCTION
-
-
- This function is used to locate the first file in the specified or
- default path which matches the specified file name. The file name may
- contain wildcards (* and ?). Additional matching files may be found
- using the QFINDN function. This function must be called before calls
- to QFATTR, QFDATE, QFINDN, QFNAME, QFSIZE and QFTIME.
-
- The function is called by passing a file name (which can contain
- wildcards "*" or "?" as well as the drive and path). The file name
- must end with a binary "0" as the routine requires ASCIIZ names. In
- addition, the file attribute must be passed in the call, see QFATTR
- for information on file attributes. Upon return, the RC will either
- be zero, indicating that a file was found, or non-zero indicating an
- error. If the RC is -1 there was an error in the call, a 2 indicates
- the specified path is invalid, an 18 indicates there is no matching
- file.
-
- The format of the call is as follows:
-
- RC = QFINDF(ChkFile$, Fattr)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QFINDF% (FileName AS STRING, BYVAL Attr AS INTEGER)
- RC = QFINDF("C:\DEMO\*.EXE"+CHR$(0), 0)
- IF RC < 0 THEN
- Print "Error in call."
- ELSEIF RC > 0 THEN
- Print "File not found."
- END IF
-
-
-
- QFINDN -- FUNCTION
-
-
- This function is used to locate additional files beyond the file found
- by the QFINDF function. The QFINDN function reuses the parameters
- passed to the QFINDF function to locate any additional files. The RC
- will zero if a file was found or 18 if there are no more matching
- files.
-
- The format of the call is as follows:
-
- RC = QFINDN
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QFINDN% ()
- IF QFINDN > 0 THEN PRINT "No more files."
-
-
-
- File 24
-
-
-
-
-
-
-
-
- QFLOF -- FUNCTION
-
-
- This function is used to return the file size of an open file that was
- opened with either QFOPEN or QFCREATE. It will return the file size
- whether it has been just opened or if it has been added to with
- QFWRITE. Be careful to make sure that a long integer is used to
- return the file size to.
-
- The format of the call is as follows:
-
- Fsize& = QFLOF(FHandle)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QFLOF& (Handle AS INTEGER)
- REM Open file for reading
- FileName$ = "C:\DEMO\TEST.DAT"+CHR$(0)
- Faccess = 1
- RC = QFOPEN(FileName$, Faccess, FHandle)
- Fsize& = QFLOF(FHandle)
- RC = QFCLOSE(FHandle)
-
-
-
- QFNAME -- SUB
-
-
- Returns the name of the file that was located by either QFINDF or
- subsequent calls to QFINDN. It also returns the length of the file
- name less trailing spaces. See the information on these two calls
- before using this routine.
-
- The format of the call is as follows:
-
- QFNAME File$
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QFNAME (FileName AS STRING)
- .
- REM You must issue a call to either QFINDF or QFINDN first
- .
- File$ = Space$(12)
- QFNAME File$
- PRINT "The file name is " RTRIM$(File$)
- .
-
-
-
-
-
-
-
-
- File 25
-
-
-
-
-
-
-
-
- QFOPEN -- FUNCTION
-
-
- This function is used to open an existing file. The file can then be
- read by using QFREAD or written to by QFWRITE. The QFCLOSE function
- must be used to close the file.
-
- The function is called by passing a file name which may include the
- drive and path). The file name must end with a binary "0" as the
- routine requires ASCIIZ names. In addition, the file access must be
- passed in the call, 0 to open for reading, 1 to open for writing or 2
- to open for both reading and writing. Upon return, the RC will either
- be zero indicating the file was opened or non-zero indicating an
- error. If the RC is 0 the file "handle" will be in the integer
- variable specified as the 3rd parameter. If the RC is 2 the specified
- path was not found. If the RC is 4, then too many files open. If the
- RC is 5, then access was denied. If the RC is 12, then an invalid
- access number was passed.
-
- The format of the call is as follows:
-
- RC = QFOPEN(FileName$, Faccess, FHandle)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QFOPEN% (FileName AS STRING, _
- Access AS INTEGER, _
- Handle AS INTEGER)
- .
- REM Open file for reading
- FileName$ = "C:\DEMO\TEST.DAT"+CHR$(0)
- Faccess = 0
- RC = QFOPEN(FileName$, Faccess, FHandle)
- IF RC = 0 THEN
- Print "File Opened"
- ELSE
- Print "File Not Opened";RC
- END IF
- .
- REM Open file for writing
- FileName$ = "C:\DEMO\TEST.DAT"+CHR$(0)
- Faccess = 1
- RC = QFOPEN(FileName$, Faccess, FHandle)
- IF RC = 0 THEN
- Print "File Opened"
- ELSE
- Print "File Not Opened";RC
- END IF
- .
- RC = QFCLOSE(FHandle)
-
-
-
-
-
-
- File 26
-
-
-
-
-
-
-
-
- QFREAD -- FUNCTION
-
-
- This function is used to read a file which has been opened by QFOPEN.
- The calling sequence requires that a string buffer be passed which
- will contain the requested record upon return. In addition, the
- length of the record to read must be passed so that the routine will
- know how many bytes to read. Upon return, the string will contain the
- requested record and the actual number of bytes read will be returned.
- In addition, the RC will either be zero indicating that the read was
- successful or non-zero indicating an error. If the RC is -1, there
- was an error in one of the parameters. If the RC is greater than
- zero, DOS encountered an error reading the file.
-
- A useful feature of this function is that block reads can be done. A
- block read is reading multiple records at a time. If the record
- length is 50, by setting a buffer length to 500 will cause the routine
- to attempt to read 10 records. The bytes read count can then be used
- to determine exactly how many records were read. The buffer can be
- split using the MID$ function to extract each record.
-
- The format of the call is as follows:
-
- RC = QFREAD(FHandle, FBuffer$, ReadLen, BytesRead)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QFREAD% (Handle AS INTEGER, _
- Buffer AS STRING, _
- ReadLen AS INTEGER, _
- BytesRead AS INTEGER)
- .
- REM Open file for reading
- FileName$ = "C:\DEMO\TEST.DAT"+CHR$(0)
- Faccess = 0
- RC = QFOPEN(FileName$, Faccess, FHandle)
- .
- FBuffer$ = Space$(50)
- ReadLen = 50
- RC = QFREAD(FHandle, FBuffer$, ReadLen, BytesRead)
- IF RC <> 0 THEN
- PRINT "Error reading file"
- END
- ELSEIF BytesRead = 0 THEN
- PRINT "End of File"
- ELSE
- PRINT FBuffer$
- END IF
- .
- RC = QFCLOSE(FHandle)
-
-
-
-
-
-
- File 27
-
-
-
-
-
-
-
-
- QFSETEND -- FUNCTION
-
-
- This function is used to set the file pointer to the end of the file.
- The file must have been opened using QFOPEN. This function is useful
- to add new records to the end of an existing file. Upon return, the
- RC will either be zero indicating success or non-zero indicating an
- error.
-
- The format of the call is as follows:
-
- RC = QFSETEND(FHandle)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QFSETEND% (Handle AS INTEGER)
- FileName$ = "C:\DEMO\TEST.DAT"+CHR$(0)
- Faccess = 1
- RC = QFOPEN(FileName$, Faccess, FHandle)
- RC = QFSETEND(FHandle)
- REM New records can now be added.
- RC = QFCLOSE(FHandle)
-
-
-
- QFSETREC QFSETRECL-- FUNCTION
-
-
- These functions are used to set the file pointer for random reading or
- writing to a file that has been opened using QFOPEN. The calling
- sequence requires that the record length and the record number to set
- be passed in the call. Upon return, the RC will either be zero
- indicating success or non-zero indicating an error.
-
- The format of the call is as follows:
-
- RC = QFSETREC(FHandle, RecLen, RecNum)
- RC = QFSETRECL(FHandle, RecLen, RecNum)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QFSETREC% (BYVAL Handle AS INTEGER, _
- BYVAL RecLen AS INTEGER, _
- BYVAL RecNum AS INTEGER)
- DECLARE FUNCTION QFSETRECL% (BYVAL Handle AS INTEGER, _
- BYVAL RecLen AS INTEGER, _
- BYVAL RecNum AS LONG)
- FileName$ = "C:\DEMO\TEST.DAT"+CHR$(0): Faccess = 0
- RC = QFOPEN(FileName$, Faccess, FHandle)
- RecLen = 50: RecNum& = 70000
- RC = QFSETRECL(FHandle, RecLen, RecNum&)
- REM Record 70000 can now be read.
- RC = QFCLOSE(FHandle)
-
-
- File 28
-
-
-
-
-
-
-
-
- QFSIZE -- SUB
-
-
- Returns the size of the file that was located by either QFINDF or
- subsequent calls to QFINDN. See the information on these two calls
- before using this routine. This routine returns the size of the file
- as a long integer, make sure you ues the correct type declaration.
-
- The format of the call is as follows:
-
- QFSIZE SizeFile&
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QFSIZE (Size AS LONG)
- .
- REM You must issue a call to either QFINDF or QFINDN first
- QFSIZE SizeFile&
- Print "File size is " SizeFile&
-
-
-
- QFSTAMP -- FUNCTION
-
-
- This function is used to change the date and time that a file was last
- updated. It returns a zero if the request completed successfully. If
- there was and error in the information passed to the function, then a
- -1 is return. If there were any DOS error encountered, then a
- positive number will be returned.
-
- The format of the call is as follows:
-
- RC = QFSTAMP(Qname$, Qtime$, Qdate$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QFSTAMP (Qname AS STRING, _
- Qtime AS STRING, _
- Qdate AS STRING)
- .
- Qname$ = "TEST.TST" + CHR$(0)
- Qtime$ = "13:10:00"
- Qdate$ = "12/12/88"
- .
- XX = QFSTAMP(Qname$, Qtime$, Qdate$)
- .
- END
-
-
-
-
-
-
-
- File 29
-
-
-
-
-
-
-
-
- QFTIME -- SUB
-
-
- Returns the time that the file was created or updated. The file must
- first located by a call to either QFINDF or subsequent calls to
- QFINDN. See the information on these two calls before using this
- routine.
-
- The format of the call is as follows:
-
- QFTIME Hrs, Min
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QFTIME (Hrs AS INTEGER, _
- Min AS INTEGER)
- .
- REM You must issue a call to either QFINDF or QFINDN first
- QFTIME Hrs, Min
- PRINT "The file time is " Hrs Min
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- File 30
-
-
-
-
-
-
-
-
- QFWRITE -- FUNCTION
-
-
- This function is used to Write a file which has been opened by QFOPEN.
- The calling sequence requires that a string buffer be passed which
- will contain the data to be written. In addition, the length of the
- record to write must be passed so that the routine will know how many
- bytes to write. Upon return, then actual number of bytes written will
- be returned. In addition, the RC will either be zero indicating that
- the write was successful or non-zero indicating an error. If the RC
- is -1, there was an error in one of the parameters. If the RC is
- greater than zero, DOS encountered an error writing to the file.
-
- The format of the call is as follows:
-
- RC = QFWRITE(FHandle, FBuffer$, WriteLen, BytesWritten)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QFWRITE% (Handle AS INTEGER, _
- Buffer AS STRING, _
- WriteLen AS INTEGER, _
- BytesWritten AS INTEGER)
- .
- REM Open file for writing
- FileName$ = "C:\DEMO\TEST.DAT"+CHR$(0)
- Faccess = 1
- RC = QFOPEN(FileName$, Faccess, FHandle)
- .
- FBuffer$ = "This is a record that will be written to the file."
- ReadLen = LEN(FBuffer$)
- RC = QFWRITE(FHandle, FBuffer$, WriteLen, BytesWritten)
- IF RC <> 0 THEN
- PRINT "Error writing file"
- END
- ELSEIF BytesWritten <> WriteLen THEN
- PRINT "Error writing file"
- ELSE
- PRINT "Write successful"
- END IF
- .
- RC = QFCLOSE(FHandle)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- File 31
-
-
-
-
-
-
-
-
- QMOVEFIL -- FUNCTION
-
-
- Moves a file. It functions the same way as QCOPYFIL but the original
- file will be deleted after the copy is completed. If the file is to
- be moved to a different directory on the same device, it will move
- just the directory entry which will make the move much faster. If an
- error is encountered, the RC will be set to -1. See QCOPYFIL for
- additional information.
-
- The format of the call is as follows:
-
- RC = QMOVEFIL(OldFile$, NewFile$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QMOVEFIL% (InFileName AS STRING, _
- OutFileName AS STRING)
- .
- REM Move a file from the A drive to the C drive
- OldFile$="A:TESTFILE.TXT"+CHR$(0)
- NewFile$="C:\TESTSUB\TESTFILE.TXT"+CHR$(0)
- IF QMOVEFIL(OldFile$, NewFile$) = 0 THEN
- PRINT "File moved"
- ELSE
- PRINT "File not moved"
- END IF
- .
- .
- REM Move a file to a different directory on the C drive
- OldFile$="TESTFILE.TXT"+CHR$(0)
- NewFile$="\TESTSUB\TESTFILE.TXT"+CHR$(0)
- IF QMOVEFIL(OldFile$, NewFile$) = 0 THEN
- PRINT "File moved"
- ELSE
- PRINT "File not moved"
- END IF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- File 32
-
-
-
-
-
-
-
-
- QPARSEF -- FUNCTION
-
-
- This function will parse a string which can contain a drive specifier,
- a path, a file name and a file extention into individule pieces which
- will be returned in a defined type record. This function will return
- a -1 if the file name is longer than 8 characters.
-
- The TYPE description below is contained in QB4BAS.BI and if it is
- included into the program using the $INCLUDE meta command it will be
- available to the program. You will still have to DIM the record using
- whichever name that you wish to use.
-
- The format of the call is as follows:
-
- RC = PARSEF(Pstring$, Pseg, Pptr)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QPARSEF% (Pstring AS STRING, _
- BYVAL Pseg AS INTEGER, _
- BYVAL Pptr AS INTEGER)
- TYPE ParseType
- Pdrive AS STRING * 2
- Ppath AS STRING * 64
- Pname AS STRING * 8
- Pext AS STRING * 3
- END TYPE
-
- DIM FileRec AS ParseType
-
- Pseg = VARSEG(FileRec)
- Pptr = VARPTR(FileRec)
- Pstring$ = "D:\PATH1\PATH2\THISTEST.DAT"
-
- IF QPARSEF(Pstring$, Pseg, Pptr) = 0 THEN
- PRINT "1 " + FileRec.Pdrive
- PRINT "2 " + FileRec.Ppath
- PRINT "3 " + FileRec.Pname
- PRINT "4 " + FileRec.Pext
- END IF
-
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
- File 33
-
-
-
-
-
-
-
-
- QRENAME -- FUNCTION
-
-
- Rename an existing file. Can also be used to move a file from one
- sub-directory to another. Requires an ASCIIZ filename without
- wildcards for both files. If an error is encountered, the RC will be
- set to -1.
-
- The format of the call is as follows:
-
- RC = QRENAME(OldFile$, NewFile$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QRENAME% (InFileName AS STRING, _
- OutFileName AS STRING)
- .
- REM Rename a file
- OldFile$="\FIRSTDIR\MYFILE.TXT"+CHR$(0)
- NewFile$="MYFILE.DOC"+CHR$(0)
- IF QRENAME(OldFile$, NewFile$) = 0 THEN
- PRINT "File renamed"
- ELSE
- PRINT "File not renamed"
- END IF
- .
- .
- REM Move a file
- OldFile$="\FIRSTDIR\MYFILE.TXT"+CHR$(0)
- NewFile$="\SECONDDIR\MYFILE.TXT"+CHR$(0)
- IF QRENAME(OldFile$, NewFile$) = 0 THEN
- PRINT "File renamed"
- ELSE
- PRINT "File not renamed"
- END IF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- File 34
-
-
-
-
-
-
-
-
- QTREAD -- FUNCTION
-
-
- This function is similar to QFREAD except instead of placing the
- record into a string buffer it will place the record into a user
- defined record type. This allows records to be placed directly
- into the type of record needed and, in addition, multiple records
- can be read directly into an array of defined records.
-
- This function requires that the file be opened with QFOPEN and
- closed with QFCLOSE. The file handle returned by QFOPEN is used
- to read the records. Also required by the call is the segment
- address of the file buffer, the offset of the file buffer and the
- number of bytes to read which is usually the length of the record
- type. Upon return, the record will contain the requested record
- and the actual number of bytes read. The RC will either be zero
- indicating that the read was successful or non-zero indicating an
- error. If the RC is -1, there was an error in one of the
- parameters. If the RC is greater than zero, DOS encountered an
- error reading the file.
-
- A useful feature of this function is that block reads can be done.
- A block read is reading multiple records at a time. If the record
- length is 50, by setting a buffer length to 500 will cause the
- routine to attempt to read 10 records. The bytes read count can
- then be used to determine exactly how many records were read.
-
- The format of the call is as follows:
-
- RC = QTREAD(FHandle, BufSeg, BufPtr, ReadLen, BytesRead)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QTREAD% (BYVAL Handle AS INTEGER, _
- BYVAL BufSeg AS INTEGER, _
- BYVAL BufPtr AS INTEGER, _
- BYVAL ReadLen AS INTEGER, _
- BytesRead AS INTEGER)
- .
- TYPE TestType
- TstCode AS STRING * 2
- TstName AS STRING * 34
- Balance AS LONG
- END TYPE
- .
- DIM TestRec(1 TO 100) AS TestType
- .
- REM Open file for reading
- FileName$ = "C:\DEMO\TEST.DAT"+CHR$(0)
- Faccess = 0
- RC = QFOPEN(FileName$, Faccess, FHandle)
- VSeg = VARSEG(TestRec(1))
- VPtr = VARPTR(TestRec(1))
- Rlen = LEN(TestRec(1))
-
-
- File 35
-
-
-
-
-
-
-
-
- Olen = 0
- FOR x = 1 TO 100
- RC = QTREAD(Fhandle, VSeg, VPtr, Rlen, Olen)
- IF RC <> 0 THEN
- PRINT "Error reading record number ", x
- PRINT "Error code returned is ", RC
- END
- ELSEIF Olen = 0 THEN
- EXIT FOR
- END IF
- VPtr = VPtr + Rlen
- NEXT x
- .
- RC = QFCLOSE(FHandle)
-
-
-
- QTWRITE -- FUNCTION
-
-
- This function is similar to QFWRITE except instead of wrinting the
- record into a string buffer it will write the record from a user
- defined record type. This allows records to be written directly
- from the type of record needed and, in addition, multiple records
- can be written directly from an array of defined records.
-
- This function requires that the file be opened with QFOPEN and
- closed with QFCLOSE. The file handle returned by QFOPEN is used
- to write the records. Also required by the call is the segment
- address of the file buffer, the offset of the file buffer and the
- number of bytes to write which is usually the length of the record
- type. Upon return, the actual number of bytes written will be
- returned. The RC will either be zero indicating that the write was
- successful or non-zero indicating an error. If the RC is -1,
- there was an error in one of the parameters. If the RC is greater
- than zero, DOS encountered an error writing the file.
-
- A useful feature of this function is that block writes can be
- done. A block write is writing multiple records at a time. If the
- record length is 50, by setting a buffer length to 500 will cause
- the routine to attempt to write 10 records. The bytes written
- count can then be used to determine exactly how many records were
- written.
-
- The format of the call is as follows:
-
- RC = QTWRITE(FHandle, BufSeg, BufPtr, WriteLen, BytesWritten)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QTWRITE% (BYVAL Handle AS INTEGER, _
- BYVAL BufSeg AS INTEGER, _
- BYVAL BufPtr AS INTEGER,
- BYVAL WriteLen AS INTEGER, _
-
-
- File 36
-
-
-
-
-
-
-
-
- BytesWritten AS INTEGER)
- .
- TYPE TestType
- TstCode AS STRING * 2
- TstName AS STRING * 34
- Balance AS LONG
- END TYPE
- .
- DIM TestRec(1 TO 100) AS TestType
- .
- REM Open file for reading
- FileName$ = "C:\DEMO\TEST.DAT"+CHR$(0)
- Faccess = 0
- RC = QFOPEN(FileName$, Faccess, FHandle)
- VSeg = VARSEG(TestRec(1))
- Wlen = LEN(TestRec(1))
- Olen = 0
- FOR x = 1 TO RecCounter
- VPtr = VARPTR(TestRec(x))
- RC = QTWRITE(Fhandle, VSeg, VPtr, Wlen, Olen)
- IF RC <> 0 THEN
- PRINT "Error writing record number ", x
- PRINT "Error code returned is ", RC
- END
- END IF
- NEXT x
- .
- RC = QFCLOSE(FHandle)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- File 37
-
-
-
-
-
-
-
-
- KEYBOARD
-
-
-
- QALTKEY -- FUNCTION
-
-
- Returns a zero to indicate that the ALT key is pressed, otherwise it
- returns a -1 to indicate that the ALT key is not pressed.
-
- The format of the call is as follows:
-
- RC = QALTKEY()
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QALTKEY% ()
- WHILE INKEY$ = ""
- SELECT CASE QALTKEY
- CASE -1
- LOCATE 5, 2: PRINT "ALT not pressed"
- CASE 0
- LOCATE 5, 2: PRINT "ALT is pressed "
- END SELECT
- WEND
- END
-
-
-
- QCAPSKEY -- FUNCTION
-
-
- Returns a zero to indicate that the CAPS LOCK key is pressed,
- otherwise it returns a -1 to indicate that the CAPS LOCK key is not
- pressed.
-
- The format of the call is as follows:
-
- RC = QCAPSKEY()
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QCAPSKEY% ()
- WHILE INKEY$ = ""
- SELECT CASE QCAPSKEY
- CASE -1
- LOCATE 5, 2: PRINT "CAPS not pressed"
- CASE 0
- LOCATE 5, 2: PRINT "CAPS is pressed "
- END SELECT
- WEND
- END
-
-
-
- Keyboard 38
-
-
-
-
-
-
-
-
- QCTRLKEY -- FUNCTION
-
-
- Returns a zero to indicate that the CTRL key is pressed, otherwise
- it returns a -1 to indicate that the CTRL key is not pressed.
-
- The format of the call is as follows:
-
- RC = QCTRLKEY()
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QCTRLKEY% ()
- WHILE INKEY$ = ""
- SELECT CASE QCTRLKEY
- CASE -1
- LOCATE 7, 2: PRINT "CTRL not pressed"
- CASE 0
- LOCATE 7, 2: PRINT "CTRL is pressed "
- END SELECT
- WEND
- END
-
-
-
- QGETKEY -- FUNCTION
-
-
- Returns a key which is waiting in the keyboard buffer. If the RC is
- zero then the key returned is a normal ASCII key. If the RC is -1
- the the key returned is an extended code. The meanings of these
- codes can be found in the BASIC reference manual.
-
- The format of the call is as follows:
-
- RC = QGETKEY(Char$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QGETKEY% (Char AS STRING)
- Char$ = SPACE$(1)
- IF QGETKEY(Char$) = 0 THEN
- PRINT "Normal key "; Char$
- ELSE
- PRINT "Extended code "; Char$
- END IF
-
-
-
-
-
-
-
-
-
- Keyboard 39
-
-
-
-
-
-
-
-
- QINKEY -- FUNCTION
-
-
- This function is a combination of both QGETKEY and QKEYSTAT. It
- will set a RC to indicate if a key is waiting and what type of key
- was pressed. This function works very well with SELECT CASE logic.
-
- The format of the call is as follows:
-
- RC = QINKEY(Char$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QINKEY% (Char AS STRING)
- Char$ = SPACE$(1)
- SELECT CASE QINKEY(CHAR$)
- CASE 0
- PRINT "No key waiting."
- CASE 1
- PRINT "Normal key "; Char$
- CASE -1
- PRINT "Extended code "; VAL(Char$)
- CASE ELSE
- PRINT "Error detected."
- END SELECT
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Keyboard 40
-
-
-
-
-
-
-
-
- QINPUT -- FUNCTION
-
-
- A keyboard input function that has full editing capabilities. By
- passing a verification string, each key stroke is validated as it is
- entered. It also returns a RETURN CODE which indicates which key
- was pressed to exit the input routine. The input string can either
- be all spaces or it can contain existing data to be updated. It
- should be noted here, because of the restrictions BASIC forces on
- called ASSEMBLER programs, the size of the string must be set before
- calling the function. The Keys variable must be initialized with a
- number from 0 to 50 which is used to set which return keys will be
- used. The keys with an RC equal to or less than the passed number
- will be the active return keys. See the next page for the valid
- return keys. The color attribute used by the program is the Aattr
- variable. The program will reverse the color attribute that is set,
- which usually means that the input field will highlighted.
-
- The format of the call is as follows:
-
- RC = QINPUT(Ver$,InBuff$,Row,Col,Aattr,Page,Keys)
-
- Where:
-
- RC the return code or key that was pressed to exit.
- Ver$ the string containing that valid characters.
- InBuff$ the input buffer which can be pre-populated.
- Row the screen row to display the buffer.
- Column the screen column to display the buffer.
- Aattr the action video color attribute.
- Page the video display page (Valid pages are 0-3).
- Keys a number from 0 to 50 to indicate the valid return keys.
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QINPUT% (VerStr AS STRING, _
- Buffer AS STRING, _
- BYVAL Row AS INTEGER, _
- BYVAL Col AS INTEGER, _
- BYVAL Attr AS INTEGER, _
- BYVAL Page AS INTEGER, _
- BYVAL Keys AS INTEGER)
- Fgrd = 7
- Bkgrd = 1
- Aattr = QATTR(Fgrd,Bkgrd)
- REM Only accept alpha-numeric input
- Ver$ = "0123456789abcdefghijklmnopqrstuvwxyz"
- Ver$ = Ver$+"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- InBuff$ = SPACE$(20)
- Row = 10 : Col = 20 : Page = 0 : Keys = 8
- IF QINPUT(Ver$,InBuff$,Row,Col,Aattr,Page,Keys) > 0 THEN
- InBuff$ = RTRIM$(InBuff$)
- END IF
-
-
-
- Keyboard 41
-
-
-
-
-
-
-
-
- The following are the valid editing keys:
-
- INSERT Toggles the insert mode and over-type mode.
- DELETE Delete character at cursor.
- BACKSPACE Destructive backspace.
- LEFT ARROW Move the cursor to the left.
- RIGHT ARROW Move the cursor to the right.
- HOME Move the cursor to the beginning of the field.
- END Move the cursor to the end of the field.
- CTL-HOME Move cursor to the start and erase the field.
- CTL-END Erase from the cursor to the end of the field.
- CTL-BkSpace Erase from the cursor to the start of the field.
-
- The following are the return codes returned upon exit:
-
- RC - Key pressed RC - Key pressed
-
- 00 - ESC 09 - ALT HOME
- 01 - RETURN 10 - ALT-END
- 02 - CTL-RETURN 11-20 - F1 thru F10
- 03 - TAB 21-30 - SHIFT-F1 thru SHIFT-F10
- 04 - SHIFT-TAB 31-40 - CTL-F1 thru CTL-F10
- 05 - UP ARROW 41-50 - ALT-F1 thru ALT-F10
- 06 - DOWN ARROW
- 07 - PAGE UP
- 08 - PAGE DOWN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Keyboard 42
-
-
-
-
-
-
-
-
- QINPUTM -- FUNCTION
-
-
- This function works just like QINPUT but has the added feature of
- allowing you to supply an edit mask which makes entering information
- such as dates or social security numbers look much more
- professional. The cursor will automatically skip over any mask
- characters, the user will not have to press the tab or arrow keys.
- The mask characters will not be returned in the buffer. See QINPUT
- for further information on using the editing functions, it works
- just the same.
-
- The format of the call is as follows:
-
- RC = QINPUTM(Ver$,InBuff$,Mask$,Row,Col,Aattr,Page,Keys)
-
- Where:
-
- RC the return code or key that was pressed to exit.
- Ver$ the string containing that valid characters.
- InBuff$ the input buffer which can be pre-populated.
- Mask$ the edit mask to be displayed.
- Row the screen row to display the buffer.
- Column the screen column to display the buffer.
- Aattr the action video color attribute.
- Page the video display page (Valid pages are 0-3).
- Keys a number from 0 to 50 to indicate the valid return keys.
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QINPUTM% (VerStr AS STRING, _
- Buffer AS STRING, _
- Mask AS STRING, _
- BYVAL Row AS INTEGER, _
- BYVAL Col AS INTEGER, _
- BYVAL Attr AS INTEGER, _
- BYVAL Page AS INTEGER, _
- BYVAL Keys AS INTEGER)
- Fgrd = 7
- Bkgrd = 1
- Aattr = QATTR(Fgrd,Bkgrd)
- REM Only accept numeric input
- VerStr$ = "0123456789"
- Buffer$ = "4075551212"
- BuffMask$ = "( ) - "
- Row = 10 : Col = 20 : Page = 0 : Keys = 8
- RC = QINPUTM(VerStr$, Buffer$, BuffMask$, Row, Col, Aattr, Page, Keys)
-
- END
-
-
-
-
-
-
-
- Keyboard 43
-
-
-
-
-
-
-
-
- QKEYFLAG -- FUNCTION
-
-
- This function returns an RC to indicate if either the ALT, CTRL,
- LEFT SHIFT or the RIGHT SHIFT is pressed. By adding the various key
- values together, you can check various combinations. The key values
- are NO KEY-0, RIGHT SHIFT-1, LEFT SHIFT-2, CTRL-4 and ALT-8.
-
- The format of the call is as follows:
-
- RC = QKEYFLAG
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QKEYFLAG% ()
- CLS
- WHILE INKEY$ = ""
- SELECT CASE QKEYFLAG
- CASE 1
- LOCATE 5, 2: PRINT "RIGHT SHIFT "
- CASE 15
- LOCATE 5, 2: PRINT "R L CTRL ALT "
- END SELECT
- WEND
- END
-
-
-
- QKEYSTAT -- FUNCTION
-
-
- This function returns an RC to indicate if a key is waiting in the
- keyboard buffer. A zero indicates no key, anything else indicates
- that a key is waiting.
-
- The format of the call is as follows:
-
- RC = QKEYSTAT
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QKEYSTAT% ()
- .
- Char$ = SPACE$(1)
- IF QKEYSTAT = 0 THEN
- PRINT "No key waiting."
- ELSE
- IF QGETKEY(Char$) = 0 THEN
- PRINT "Normal key "; Char$
- ELSE
- PRINT "Extended code "; Char$
- END IF
- END IF
-
-
- Keyboard 44
-
-
-
-
-
-
-
-
- QPOPMENU -- FUNCTION
-
-
- The QPOPMENU function displays a menu within a window or frame and
- obtains a selection from the user and passes back an indicator of
- the users selection. The function accepts as input the screen
- location where the window should be displayed allowing the menu to
- be placed in a window which is a subset of the screen. The menu may
- be created allowing selection by moving a selection bar, optionally
- each menu entry may have an action indicator which provides a faster
- selection mechanism.
-
- The QPOPMENU function is specified as follows:
-
- Slct=QPOPMENU(Cnt,VARSEG(Menu$(1)),VARPTR(Menu$(1)), _
- Row,Col,NAttr,AAttr,HAttr,Page)
-
- The Slct variable will contain the results of the QPOPMENU function
- when control is returned to your program. This will be the number of
- the menu array entry selected or, depending on the key pressed, zero
- if the Esc key was depressed, -1 if the left arrow was pressed or -2
- if the right arrow was pressed.
-
- The contents of the variables passed are as follows:
-
- Cnt The number of entries contained in the menu array which are
- to be included in the menu.
- VARSEG(Menu$(1)) A string array (Menu$) passed to QPOPMENU using the
- VARSEG/VARPTR functions. The number (1) indicates the array
- element where the menu entries begin.
- VARPTR(Menu$(1)) A string array (Menu$) passed to QPOPMENU using the
- VARSEG/VARPTR functions. The number (1) indicates the array
- element where the menu entries begin.
- Row The screen row where the menu window is to start.
- Col The screen Column where the menu window is to start.
- NAttr The color attribute to be used to display normal text. It
- is also used for the color attribute of the window frame.
- AAttr The color attribute to be used to display the action
- character. Use 0,0 (black on black) if action characters are
- not desired.
- HAttr The color attribute to be used to display the highlighted
- menu entry. When a black background is specified the
- attribute will be reversed by the routine.
- Page The video display page (valid pages are 0-3) to be used.
-
- Rules:
-
- 1. No error checking is performed on the input parameters. Errors
- in the input parameters will have unpredictable results.
-
- 2. The QPOPMENU routine requires the Color Graphics Adapter with a
- color or monochrome (shades of gray) monitor.
-
- 3. Text placed on the screen before this function is called which
- is outside of the bounds of the menu itself is left undisturbed.
-
-
- Keyboard 45
-
-
-
-
-
-
-
-
- 4. The menu is displayed starting at the row and column specified
- and extends down the screen using as many screen rows as there
- are menu entries.
-
- 5. When the action attribute specified is not 0,0 (black on black)
- the first character of each entry will be highlighted with the
- action attribute if there are 36 or fewer menu selection
- entries.
-
- 6. The highlight attribute is checked for a background other than
- black. When the background is black the highlight attribute is
- reversed to create a reverse video highlight bar. If the
- background is not black the highlight attribute is not changed.
-
- 7. The following keys will be active for the indicated purpose
- while the menu is displayed.
-
- Esc Exit the menu without a selection, 0 is returned as
- the function result.
- Left Arrow Exit the menu without a selection, -1 is returned as
- the function result.
- Right Arrow Exit the menu without a selection, -2 is returned as
- the function result.
- Enter Selects highlighted item.
- Up Move the highlight bar up 1 menu entry. Rolls to
- the last entry if the highlight bar is already on
- the first entry.
- Down Move the highlight bar down 1 menu entry. Rolls to
- the first entry if the highlight bar is already on
- the last entry.
- Home Move the highlight bar to the first menu entry.
- End Move the highlight bar to the last menu entry.
- x When the action attribute is specified other than
- 0,0 (black on black) the keys corresponding to the
- characters highlighted by the action attribute may
- be used to select the menu entry.
-
- 8. By checking the value returned by QPOPMENU for a -1 or -2,
- programs can use this function to create pull down menus similar
- to the menus that are found in the QuickBASIC 4 environment.
- See the example below for a suggested way of accomplishing this.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Keyboard 46
-
-
-
-
-
-
-
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QPOPMENU% (BYVAL Count AS INTEGER, _
- BYVAL MenuSeg AS INTEGER, _
- BYVAL MenuOff AS INTEGER, _
- BYVAL Row AS INTEGER, _
- BYVAL Col AS INTEGER, _
- BYVAL Norm AS INTEGER, _
- BYVAL Actn AS INTEGER, _
- BYVAL High AS INTEGER, _
- BYVAL Page AS INTEGER)
- OPTION BASE 1
- DIM Menu$(5)
- ...
- NAttr=QATTR(3,0)
- AAttr=QATTR(4,0)
- HAttr=QATTR(7,0)
- ...
- Menu$(1)= "A - Goto Routine One"
- Menu$(2)= "B - Goto Routine Two"
- Menu$(3)= "C - Goto Routine Three"
- Menu$(4)= "D - Goto Routine Four"
- Menu$(5)= "E - Goto Routine Five"
- Cnt = 5: Row = 3: Col = 3: Page = 0
- RC = QPOPMENU(Cnt,VARSEG(Menu$(1)),VARPTR(Menu$(1)), _
- Row,Col,NAttr,AAttr,HAttr,Page)
- SELECT CASE RC
- CASE -2
- GOTO NextMenu
- CASE -1
- GOTO PrevMenu
- CASE 0
- GOTO GetOut
- CASE 1
- GOTO Rtn1
- CASE 2
- GOTO Rtn2
- CASE 3
- GOTO Rtn3
- CASE 4
- GOTO Rtn4
- CASE 5
- GOTO Rtn5
- CASE ELSE
- GOTO ErrorRtn
- END SELECT
- ...
- END
-
-
-
-
-
-
-
-
- Keyboard 47
-
-
-
-
-
-
-
-
- QMENU -- FUNCTION
-
-
- The QMENU function displays a menu and obtains a selection from the
- user and passes back an indicator of the users selection. The
- function accepts as input the screen location where the menu should
- be displayed allowing the menu to be placed in a window which is a
- subset of the screen. The menu may be created allowing selection by
- moving a selection bar, optionally each menu entry may have an
- action indicator which provides a faster selection mechanism.
-
- The QMENU function is specified as follows:
-
- Slct=QMENU(Cnt,VARSEG(Menu$(1)),VARPTR(Menu$(1)), _
- Row,Col,NAttr,AAttr,HAttr,Page)
-
- The Slct variable will contain the results of the QMENU function
- when control is returned to your program, the number of the menu
- array entry selected or zero if the Esc key was depressed.
-
- The contents of the variables passed are as follows:
-
- Cnt The number of entries contained in the menu array which are
- to be included in the menu.
- VARSEG(Menu$(1)) A string array (Menu$) passed to QMENU using the
- VARSEG/VARPTR functions. The number (1) indicates the array
- element where the menu entries begin.
- VARPTR(Menu$(1)) A string array (Menu$) passed to QMENU using the
- VARSEG/VARPTR functions. The number (1) indicates the array
- element where the menu entries begin.
- Row The screen row where the menu display is to start.
- Col The screen Column where the menu display is to start.
- NAttr The color attribute to be used to display normal text.
- AAttr The color attribute to be used to display the action
- character. Use 0,0 (black on black) if action characters are
- not desired.
- HAttr The color attribute to be used to display the highlighted
- menu entry. When a black background is specified the
- attribute will be reversed by the routine.
- Page The video display page (valid pages are 0-3) to be used.
-
- Rules:
-
- 1. No error checking is performed on the input parameters. Errors
- in the input parameters will have unpredictable results.
-
- 2. The QMENU routine requires the Color Graphics Adapter with a
- color or monochrome (shades of gray) monitor.
-
- 3. Text placed on the screen before this function is called which
- is outside of the bounds of the menu itself is left undisturbed.
- As an example the QWINDOW subroutine can be used to create a
- window before calling this function.
-
-
-
-
- Keyboard 48
-
-
-
-
-
-
-
-
- 4. The menu is displayed starting at the row and column specified
- and extends down the screen using as many screen rows as there
- are menu entries.
-
- 5. When the action attribute specified is not 0,0 (black on black)
- the first character of each entry will be highlighted with the
- action attribute if there are 36 or fewer menu selection
- entries.
-
- 6. The highlight attribute is checked for a background other than
- black. When the background is black the highlight attribute is
- reversed to create a reverse video highlight bar. If the
- background is not black the highlight attribute is not changed.
-
- 7. The following keys will be active for the indicated purpose
- while the menu is displayed.
-
- Esc Exit the menu without a selection, 0 is returned as the
- function result.
- Enter Selects highlighted item.
- Up Move the highlight bar up 1 menu entry.
- Down Move the highlight bar down 1 menu entry.
- Home Move the highlight bar to the first menu entry.
- End Move the highlight bar to the last menu entry.
- x When the action attribute is specified other than 0,0
- (black on black) the keys corresponding to the
- characters highlighted by the action attribute may be
- used to select the menu entry.
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QMENU% (BYVAL Count AS INTEGER, _
- BYVAL MenuSeg AS INTEGER, _
- BYVAL MenuOff AS INTEGER, _
- BYVAL Row AS INTEGER, _
- BYVAL Col AS INTEGER, _
- BYVAL Norm AS INTEGER, _
- BYVAL Actn AS INTEGER, _
- BYVAL High AS INTEGER, _
- BYVAL Page AS INTEGER)
- OPTION BASE 1
- DIM Menu$(3)
- ...
- NAttr=QATTR(3,0)
- AAttr=QATTR(4,0)
- HAttr=QATTR(7,0)
- Menu$(1)= "A - Goto Routine One"
- Menu$(2)= "B - Goto Routine Two"
- Menu$(3)= "C - Goto Routine Three"
- Cnt = 4: Row = 3: Col = 58: Page = 0
- RC = QMENU(Cnt,VARSEG(Menu$(1)),VARPTR(Menu$(1)), _
- Row,Col,NAttr,AAttr,HAttr,Page)
- ON RC GOTO Rtn1,Rtn2,Rtn3
- ...
-
-
- Keyboard 49
-
-
-
-
-
-
-
-
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Keyboard 50
-
-
-
-
-
-
-
-
- QMENUS -- FUNCTION
-
-
- The QMENUS function displays a menu and obtains a selection from the
- user and passes back an indicator of the users selection. Unlike the
- QMENU function this function assumes the entire screen is used for
- the menu display. The function accepts as input the screen row where
- the menu is to start, the screen column is computed based on the
- longest menu selection entry assuming an 80 character screen. The
- displayed menu extends from the specified screen row through row 22,
- rows 23 and 24 are not used and the 25th row is used as a status
- line where the valid cursor movement keys are displayed. The menu
- allows selection by moving a selection bar, optionally each menu
- entry may have an action indicator which provides a faster selection
- mechanism.
-
- A unique feature of the QMENUS function allows a maximum of 32,767
- menu selection entries to be displayed. Yes, that's right 32,767
- menu selection entries. What is displayed on the screen is a subset
- of the menu. The cursor movement keys allow the menu to be scrolled
- in both directions, move to the next or previous screen and move to
- the first or last screen.
-
- The QMENUS function is specified as follows:
-
- Slct=QMENUS(Cnt,VARSEG(Menu$(1)),VARPTR(Menu$(1)), _
- Row,Col,NAttr,AAttr,HAttr,Page)
-
- The Slct variable will contain the results of the QMENUS function
- when control is returned to your program, the number of the menu
- array entry selected or zero if the Esc key was depressed.
-
- The contents of the variables passed are as follows:
-
- Cnt The number of entries contained in the menu array which are
- to be included in the menu. This number may range from 1 to
- 32,767.
- VARSEG(Menu$(1)) A string array (Menu$) passed to QMENUS using the
- VARSEG/VARPTR functions. The number (1) indicates the array
- element where the menu entries begin.
- VARPTR(Menu$(1)) A string array (Menu$) passed to QMENUS using the
- VARSEG/VARPTR functions. The number (1) indicates the array
- element where the menu entries begin.
- Row The screen row where the menu display is to start.
- NAttr The color attribute to be used to display normal text.
- AAttr The color attribute to be used to display the action
- character. Use 0,0 (black on black) if action characters are
- not desired.
- HAttr The color attribute to be used to display the highlighted
- menu entry. When a black background is specified the
- attribute will be reversed by the routine.
- Page The video display page (valid pages are 0-3) to be used.
-
-
-
-
-
- Keyboard 51
-
-
-
-
-
-
-
-
- Rules:
-
- 1. No error checking is performed on the input parameters. Errors
- in the input parameters will have unpredictable results.
-
- 2. The QMENUS function requires the Color Graphics Adapter with a
- color or monochrome (shades of gray) monitor. An 80x25 screen
- size is assumed.
-
- 3. Text placed on the screen before this function is called which
- is outside of the bounds of the menu itself and the status line
- is left undisturbed. As an example the QWINDOW subroutine can be
- used to frame the screen before calling this function, however,
- this frame may not use the 25th row.
-
- 4. The menu is displayed starting at the row specified and extends
- down the screen to row 22. Row 25 is used as a status line to
- indicate the valid cursor movement keys.
-
- 5. When the action attribute specified is not 0,0 (black on black)
- the first character of each entry will be highlighted with the
- action attribute if there are 36 or fewer menu selection
- entries.
-
- 6. The highlight attribute is checked for a background other than
- black. When the background is black the highlight attribute is
- reversed to create a reverse video highlight bar. If the
- background is not black the highlight attribute is not changed.
-
- 7. The following keys will be active for the indicated purpose
- while the menu is displayed.
-
- Esc Exit the menu without a selection, 0 is returned as the
- function result.
- Enter Selects highlighted item.
- Up Move the highlight bar up 1 menu entry.
- Down Move the highlight bar down 1 menu entry.
- PgUp Move up 1 screen.
- PgDn Move down 1 screen.
- Home Move the highlight bar to the first menu entry.
- End Move the highlight bar to the last menu entry.
- x When the action attribute is specified other than 0,0
- (black on black) the keys corresponding to the
- characters highlighted by the action attribute may be
- used to select the menu entry.
-
-
-
-
-
-
-
-
-
-
-
-
- Keyboard 52
-
-
-
-
-
-
-
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QMENUS% (BYVAL Count AS INTEGER, _
- BYVAL MenuSeg AS INTEGER, _
- BYVAL MenuOff AS INTEGER, _
- BYVAL Row AS INTEGER, _
- BYVAL Norm AS INTEGER, _
- BYVAL Actn AS INTEGER, _
- BYVAL High AS INTEGER, _
- BYVAL Page AS INTEGER)
- OPTION BASE 1
- DIM Menu$(5)
- ...
- NAttr=QATTR(3,0)
- AAttr=QATTR(4,0)
- HAttr=QATTR(7,0)
- Menu$(1)= "Apples to Oranges"
- Menu$(2)= "Books to Comics"
- ...
- Menu$(25)= "Yet Another Entry"
- Menu$(26)= "Zebras to Horses"
- Cnt = 26
- Row = 3
- Page = 0
- RC = QMENUS(Cnt,VARSEG(Menu$(1)),VARPTR(Menu$(1)), _
- Row,NAttr,AAttr,HAttr,Page)
- SELECT CASE RC
- CASE 1
- ...
- CASE 2
- ...
- CASE 26
- ...
- END SELECT
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Keyboard 53
-
-
-
-
-
-
-
-
- QNUMKEY -- FUNCTION
-
-
- Returns a zero to indicate that the NUM LOCK key is on, otherwise it
- returns a -1 to indicate that the NUM LOCK key is not on.
-
- The format of the call is as follows:
-
- RC = QNUMKEY()
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QNUMKEY% ()
- CLS
- WHILE INKEY$ = ""
- SELECT CASE QNUMKEY
- CASE -1
- LOCATE 5, 2: PRINT "NUM LOCK not on"
- CASE 0
- LOCATE 5, 2: PRINT "NUM LOCK is on "
- END SELECT
- WEND
- END
-
-
-
- QSCRLKEY -- FUNCTION
-
-
- Returns a zero to indicate that the SCROLL LOCK key is on, otherwise
- it returns a -1 to indicate that the SCROLL LOCK key is not on.
-
- The format of the call is as follows:
-
- RC = QSCRLKEY()
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QSCRLKEY% ()
- CLS
- WHILE INKEY$ = ""
- SELECT CASE QSCRLKEY
- CASE -1
- LOCATE 5, 2: PRINT "SCROLL LOCK not on"
- CASE 0
- LOCATE 5, 2: PRINT "SCROLL LOCK is on "
- END SELECT
- WEND
- END
-
-
-
-
-
-
- Keyboard 54
-
-
-
-
-
-
-
-
- QYESNO -- FUNCTION
-
-
- Returns a value to indicate if the "Y" or "N" or the "ESC" key has
- has been pressed. It will not return to the main program until one
- of the above keys has been pressed. It will accept both upper and
- lower case characters. The values returned are -1 for ESC, 0 for Y
- and 1 for N.
-
- The format of the call is as follows:
-
- RC = QYESNO()
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QYESNO% ()
- CLS
- PRINT "Press (Y)es or (N)o --> ";
- SELECT CASE QYESNO
- CASE -1
- PRINT "ESC was pressed"
- CASE 0
- PRINT "Y was pressed"
- CASE 1
- PRINT "N was pressed"
- END SELECT
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Keyboard 55
-
-
-
-
-
-
-
-
- MISCELLANEOUS
-
-
-
- QALARM -- SUB
-
-
- Produces a pulsating alarm tone.
-
- The format of the call is as follows:
-
- QALARM
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QALARM ()
- QALARM
-
-
-
- QARGC QARGV -- FUNCTION
-
-
- QARGC returns the number of command line parameters used to envoke
- the program. This value can be tested to determine if any
- parameters were passed to the program. This routines has been
- optimized for multiple executions.
-
- QARGV returns the space delimited parameters used to invoke the
- program. The parameters are placed into individual elements much
- like a BASIC array. The zero element, QARGV(0), returns the fully
- qualified program name, including the drive letter, of the executing
- program in version 3.x of DOS. Prior versions return a null string.
- Use QARGC to determine the number of command line parameters.
-
- The format of the calls are as follows:
-
- Parms = QARGC
- Parm$ = QARGV(Parms)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QARGC% ()
- DECLARE FUNCTION QARGV$ (ParmNumber AS INTEGER)
- IF QARGC > 0 THEN
- FOR X = 1 TO QARGC
- PRINT QARGV(X)
- NEXT X
- END IF
-
-
-
-
-
-
- Miscellaneous 56
-
-
-
-
-
-
-
-
- QCAPSOFF QCAPSON -- SUB
-
-
- This routine will enable or disable the CAPS LOCK key on the
- keyboard. This will force all input to be in upper case without
- having to press the shift key. The normal functions can still be
- used by pressing the shift key and then the appropriate key.
-
- The format of the call is as follows:
-
- QCAPSOFF
- QCAPSON
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QCAPSOFF ()
- DECLARE SUB QCAPSON ()
- QCAPSON
- .
- QCAPSOFF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Miscellaneous 57
-
-
-
-
-
-
-
-
- QCLOCK -- SUB
-
-
- Display a running clock on the screen. This is a very nice touch on
- menu and update screens. The clock can be turned on and off by
- flipping the "switch" (1 = on, 0 = off). The routine can also be
- called again to move the location of the clock without having to
- first turn it off.
-
- The format of the call is as follows:
-
- QCLOCK Row, Col, NAttr, Page, Switch
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QCLOCK (BYVAL Row AS INTEGER, _
- BYVAL Col AS INTEGER, _
- BYVAL NAttr AS INTEGER, _
- BYVAL Page AS INTEGER, _
- BYVAL Switch AS INTEGER)
- REM Turn the clock on
- Fgrd=5 : Bkgrd=7
- NAttr = QATTR(Fgrd,Bkgrd)
- Row = 2
- Col = 70
- Switch = 1
- Page = 0
- QCLOCK Row, Col, NAttr, Page, Switch
- REM Turn the clock off
- Switch = 0
- QCLOCK Row, Col, NAttr, Page, Switch
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Miscellaneous 58
-
-
-
-
-
-
-
-
- QCMDLEN -- FUNCTION
-
-
- Returns the length of the command line used to envoke the program.
- This function is helpful in setting the length of the string
- variable needed when using QCMDLINE. If there is no command line
- information, then zero is returned.
-
- The format of the call is as follows:
-
- RC = QCMDLEN
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QCMDLEN% ()
- DECLARE FUNCTION QCMDLINE% (CmdLine AS STRING)
- IF QCMDLEN = 0 THEN
- PRINT "No command line parameters."
- ELSE
- CmdLine$ = Space$(QCMDLEN)
- RC = QCMDLINE(CmdLine$)
- PRINT "Command line is " CmdLine$
- END IF
-
-
-
- QCMDLINE -- FUNCTION
-
-
- Returns the command line used to invoke the program. This function
- works like the COMMAND$ function except it does not convert all
- letters to uppercase. You do not have to pre-set the return string,
- one of the correct size will be returned. A null string will be
- returned it there aren't any characters passed. This function does
- not work in the editor environment because it will return the
- command line used to invoke QuickBasic.
-
- The format of the call is as follows:
-
- CmdLine$ = QCMDLINE
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QCMDLEN% ()
- DECLARE FUNCTION QCMDLINE$ ()
- IF QCMDLEN = 0 THEN
- PRINT "No command line parameters."
- ELSE
- CmdLine$ = QCMDLINE
- PRINT "Command line is " CmdLine$
- END IF
-
-
-
-
- Miscellaneous 59
-
-
-
-
-
-
-
-
- QCRCCHK QCRCSET -- FUNCTION
-
-
- These functions will either calculate and set the cyclical
- redundancy check (CRC) value for a record or check the validity if a
- record with the CRC already set. These functions will return a RC
- which will be zero if OK or -1 on an error.
-
- The format of the call is as follows:
-
- RC = QCRCCHK(Rec$)
- RC = QCRCSET(Rec$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QCRCCHK% (Record AS STRING)
- DECLARE FUNCTION QCRCSET% (Record AS STRING)
- REM Sending a record
- Rec$ = Rec$+STRING$(2,0)
- IF QCRCSET(Rec$) = 0 THEN
- Send the record
- ELSE
- Error computing the CRC
- END IF
- .
- REM Receiving a record
- IF QCRCCHK(Rec$) = 0 THEN
- Rec$ = LEFT$(Rec$,LEN(Rec$)-2)
- ELSE
- Error in CRC, request a resend
- END IF
-
-
-
- QDOSVER -- SUB
-
-
- Retrieve the MS-DOS version. The major version is returned in the
- first parm and the minor version in the second parm.
-
- The format of the call is as follows:
-
- QDOSVER Lparm, Rparm
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QDOSVER (Major AS INTEGER, _
- Minor AS INTEGER)
- QDOSVER Lparm, Rparm
- PRINT Lparm, Rparm
-
-
-
-
-
- Miscellaneous 60
-
-
-
-
-
-
-
-
- QEMSSIZE -- SUB
-
-
- Returns both the total and free amounts of memory in kilobytes that
- is available on an EMS board. If no board is installed or the EMS
- driver is not loaded, it will return -1 for both.
-
- The format of the call is as follows:
-
- QEMSSIZE Total, Free
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QEMSSIZE (Total AS INTEGER, _
- Free AS INTEGER)
- QEMSSIZE Total, Free
- IF Total > 0 THEN
- PRINT "Total is" Total " Free is" Free
- ELSE
- PRINT "EMS is not available."
- END IF
-
-
-
- QEMSEXIST -- FUNCTION
-
-
- Returns a return code indicating if an EMS board and driver is
- installed. If either is unavailable it will return -1 otherwise it
- returns a zero.
-
- The format of the call is as follows:
-
- RC = QEMSEXIST()
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QEMSSIZE% ()
- IF QEMSEXIST() = 0 THEN
- PRINT "EMS is available"
- ELSE
- PRINT "EMS is not available."
- END IF
-
-
-
-
-
-
-
-
-
-
-
-
- Miscellaneous 61
-
-
-
-
-
-
-
-
- QEQUIPMENT -- SUB
-
-
- Returns information on the hardware configuration of the computer.
- The information returned is the memory installed in kilobytes, the
- number of parallel ports (0-3), the number of serial ports (0-7) and
- the number of game ports (0-1).
-
- The format of the call is as follows:
-
- QEQUIPMENT Memory, Parallel, Serial, Game
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QEQUIPMENT (Memory AS INTEGER, _
- Parallel AS INTEGER, _
- Serial AS INTEGER, _
- Game AS INTEGER)
- QEQUIPMENT Memory, Parallel, Serial, Game
- PRINT Memory, Parallel, Serial, Game
-
-
-
- QEXIT -- SUB
-
-
- This routine provides a method of letting you set the DOS errorlevel
- and exiting your program. There may be cases where it may cause
- some problems so use it with care. This routine is used instead of
- the BASIC commands "END" or "SYSTEM". The errorlevel can be set to
- any value between 0 and 255. You must also be sure that any open
- files are closed before calling this routine because it does not
- return, it jumps straight to DOS. This routine can now be called
- from the programming environment, it basically will perform a nop,
- you should include a BASIC "END" or "SYSTEM" on the next line.
-
- The format of the call is as follows:
-
- QEXIT ErrorLevel
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QEXIT (ErrorLevel AS INTEGER)
- .
- ErrorExit:
- CLOSE
- ErrorLevel = 16
- QEXIT ErrorLevel
- END
-
-
-
-
-
-
- Miscellaneous 62
-
-
-
-
-
-
-
-
- QINPORT -- FUNCTION
-
-
- This function works just like the BASIC INP function except it is
- slightly faster. The port must be a number between 0 and 65,535 and
- can be either and integer or in BASIC HEX notation. The function
- will return the value that was read from the port requested.
-
- The format of the call is as follows:
-
- PortVal = QINPORT(&H6A)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QINPORT% (BYVAL Port AS INTEGER)
- .
- .
- PortVal = QINPORT(&H6A)
- PRINT PortVal
-
-
-
- QMININT QMAXINT -- FUNCTION
-
-
- These functions will return either the smaller of two integers for
- QMININT or the larger of two integers for QMAXINT. This will allow
- numbers to be selected with a minimum of code.
-
- The format of the call is as follows:
-
- NewMin = QMININT(Number1, Number2)
- NewMax = QMAXINT(Number1, Number2)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QMININT% (BYVAL NUM1 AS INTEGER, BYVAL NUM1 AS INTEGER)
- DECLARE FUNCTION QMAXINT% (BYVAL NUM1 AS INTEGER, BYVAL NUM1 AS INTEGER)
- .
- NewMin = QMININT(600, 682)
- NewMax = QMAXINT(600, 682)
- PRINT "The smaller number is " NewMin
- PRINT "The larger number is " NewMax
- END
-
-
-
-
-
-
-
-
-
-
-
- Miscellaneous 63
-
-
-
-
-
-
-
-
- QMINLONG QMAXLONG -- FUNCTION
-
-
- These functions will return either the smaller of two long integers
- for QMININT or the larger of two long integers for QMAXINT. This
- will allow numbers to be selected with a minimum of code.
-
- The format of the call is as follows:
-
- NewMin = QMINLONG(Number1, Number2)
- NewMax = QMAXLONG(Number1, Number2)
-
- Example:
-
- DEFLONG A-Z
- DECLARE FUNCTION QMINLONG& (BYVAL NUM1 AS LONG, BYVAL NUM1 AS LONG)
- DECLARE FUNCTION QMAXLONG& (BYVAL NUM1 AS LONG, BYVAL NUM1 AS LONG)
- .
- NewMin = QMININT(600000, 682000)
- NewMax = QMAXINT(600000, 682000)
- PRINT "The smaller number is " NewMin
- PRINT "The larger number is " NewMax
- END
-
-
-
- QNUMLOCKOFF QNUMLOCKON -- SUB
-
-
- This routine will enable or disable the NUMLOCK key on the keyboard.
- This will allow the numeric keypad to be used without having to
- press the shift key. The normal functions can still be used by
- pressing the shift key and then the appropriate key.
-
- The format of the call is as follows:
-
- QNUMLOCKOFF
- QNUMLOCKON
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QNUMLOCKOFF ()
- DECLARE SUB QNUMLOCKON ()
- QNUMLOCKON
- .
- QNUMLOCKOFF
-
-
-
-
-
-
-
-
-
-
- Miscellaneous 64
-
-
-
-
-
-
-
-
- QPRINTER -- FUNCTION
-
-
- Check to see if the first printer device is active or on. The RC
- will be 0 if it is online or -1 if it is not. Care must be taken
- when using this function because some print spoolers may return 0
- when the printer is actually offline.
-
- The format of the call is as follows:
-
- RC = QPRINTER
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QPRINTER% ()
- .
- IF QPRINTER = 0 THEN
- PRINT "Printer is online"
- ELSE
- PRINT "Printer is offline"
- END IF
-
-
-
- QPRTSCRN -- SUB
-
-
- Prints the current screen display to the current printer device.
- This routine functions exactly the same as pressing the Shift-PrtSc
- keys from the keyboard.
-
- The format of the call is as follows:
-
- QPRTSCRN
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QPRTSCRN ()
- QPRTSCRN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Miscellaneous 65
-
-
-
-
-
-
-
-
- QPRTSCRNOFF QPRTSCRNON -- SUB
-
-
- These routines will enable or disable the PRTSCRN key on the
- keyboard. This will prevent anyone from accidently pressing the
- wrong key while the program is executing.
-
- The format of the call is as follows:
-
- QPRTSCRNOFF
- QPRTSCRNON
-
- Example:
-
- DECLARE SUB QPRTSCRNOFF ()
- DECLARE SUB QPRTSCRNON ()
- QPRTSCRNOFF
- .
- QPRTSCRNON
-
-
-
- QPAUSE -- SUB
-
-
- Pause for a given number of seconds. It uses the system clock and
- will pause for the same amount of time regardless of the CPU used.
-
- The format of the call is as follows:
-
- QPAUSE Seconds
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QPAUSE (BYVAL Seconds AS INTEGER)
- Seconds = 15
- QPAUSE Seconds
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Miscellaneous 66
-
-
-
-
-
-
-
-
- QPAUSE18 -- SUB
-
-
- Pause for a given number of eighteenths of a second. The actual
- amount may vary depending on the PC that you are using.
-
- The format of the call is as follows:
-
- QPAUSE18 Count
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QPAUSE18 (BYVAL Count AS INTEGER)
- REM Pause for 1/2 second.
- Count = 9
- QPAUSE18 Count
-
-
-
- QREBOOT -- SUB
-
-
- Forces the system to do an immediate reboot. This program can be
- useful in programs that change the CONFIG.SYS file which requires
- that the system be rebooted to take effect.
-
- The format of the call is as follows:
-
- QREBOOT
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QREBOOT ()
- REM Replace the config.sys file
- RC = QCOPYFIL("CONFIG.NEW" + CHR$(0), "CONFIG.SYS + CHR$(0))
- QREBOOT
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Miscellaneous 67
-
-
-
-
-
-
-
-
- QSHIFTIL QSHIFTIR -- FUNCTION
-
-
- These functions will take an integer and shift the bits the
- requested number of bits either left or right and return the new
- number. This will increase or decrease the number by the power of
- two.
-
- The format of the call is as follows:
-
- Num1 = QSHIFTIL(Number, 1)
- Num2 = QSHIFTIR(Number, 1)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QSHIFTIL% (BYVAL Number AS INTEGER, _
- BYVAL Shift AS INTEGER)
- DECLARE FUNCTION QSHIFTIR% (BYVAL Number AS INTEGER, _
- BYVAL Shift AS INTEGER)
- .
- Num1 = QSHIFTIL(5,1)
- Num2 = QSHIFTIL(10,1)
- PRINT Num1, Num2
-
-
-
- QSHIFTLL QSHIFTLR -- FUNCTION
-
-
- These functions will take a long integer and shift the bits the
- requested number of bits either left or right and return the new
- number. This will increase or decrease the number by the power of
- two.
-
- The format of the call is as follows:
-
- Num1 = QSHIFTLL(Number, 1)
- Num2 = QSHIFTLR(Number, 1)
-
- Example:
-
- DEFLONG A-Z
- DECLARE FUNCTION QSHIFTIL& (BYVAL Number AS LONG, _
- BYVAL Shift AS INTEGER)
- DECLARE FUNCTION QSHIFTIR& (BYVAL Number AS LONG, _
- BYVAL Shift AS INTEGER)
- .
- Num1 = QSHIFTLL(65536,1)
- Num2 = QSHIFTLL(262144,1)
- PRINT Num1, Num2
-
-
-
-
-
-
- Miscellaneous 68
-
-
-
-
-
-
-
-
- QSCROLLOFF QSCROLLON -- SUB
-
-
- This routine will enable or disable the SCROLL LOCK key on the
- keyboard.
-
- The format of the call is as follows:
-
- QSCROLLOFF
- QSCROLLON
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QSCROLLOFF ()
- DECLARE SUB QSCROLLON ()
- QSCROLLON
- .
- QSCROLLOFF
-
-
-
- QTIME -- SUB
-
-
- Returns 4 integers which contain the current hours, minutes and
- seconds of the day as well as the total number of seconds since
- midnight.
-
- The format of the call is as follows:
-
- QTIME Hours, Minutes, Seconds, TotSeconds
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QTIME (Hours AS INTEGER, _
- Minutes AS INTEGER, _
- Seconds AS INTEGER, _
- TotSeconds AS LONG)
- .
- QTIME Hours, Minutes, Seconds, TotSeconds
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Miscellaneous 69
-
-
-
-
-
-
-
-
- QTEMPC -- FUNCTION
-
-
- This function will convert the inputed fahrenheit temperature and
- convert it into centigrade.
-
- The format of the call is as follows:
-
- TempC = QTEMPC(TempF);
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QTEMPC% (BYVAL Fahrenheit AS INTEGER)
- FOR N1 = 32 TO 212
- PRINT QTEMPC(N1);
- NEXT N1
- END
-
-
-
- QTEMPF -- FUNCTION
-
-
- This function will convert the inputed centigrade temperature and
- convert it into fahrenheit.
-
- The format of the call is as follows:
-
- TempF = QTEMPF(TempC);
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QTEMPF% (BYVAL Fahrenheit AS INTEGER)
- FOR N1 = 0 TO 100
- PRINT QTEMPF(N1);
- NEXT N1
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Miscellaneous 70
-
-
-
-
-
-
-
-
- QVERIFY -- FUNCTION
-
-
- Returns an integer which indicates if the DOS write verify flag is
- on or off. If the value is zero then the verify flag is turned off.
- If the value is one then the flag is turned on.
-
- The format of the call is as follows:
-
- Flag = QVERIFY
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QVERIFY% ()
- .
- PRINT "The write verify flag is ";
- IF QVERIFY = 0 THEN
- PRINT "OFF"
- ELSE
- PRINT "ON"
- END IF
-
-
-
- QVERIFYOFF QVERIFYON -- SUB
-
-
- These subroutines will either turn the verify flag on or off. If the
- verify flag is turned on, writing to files will take longer.
-
- The format of the call is as follows:
-
- QVERIFYOFF
- QVERIFYON
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QVERIFYOFF()
- DECLARE SUB QVERIFYON()
- DECLARE FUNCTION QVERIFY% ()
- .
- CLS
- PRINT QVERIFY
- QVERIFYON
- PRINT QVERIFY
- QVERIFYOFF
- PRINT QVERIFY
- END
-
-
-
-
-
-
-
- Miscellaneous 71
-
-
-
-
-
-
-
-
- Q8087 -- FUNCTION
-
-
- Returns an integer which indicates if an 80x87 math coprocessor is
- present. If the value is zero then a coprocessor is present. A
- value of -1 is returned if a coprocessor is not present.
-
- The format of the call is as follows:
-
- Flag = Q8087
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION Q8087% ()
- IF Q8087 = 0 THEN
- PRINT "Co-processor is present"
- ELSE
- PRINT "Co-processor is not present"
- END IF
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Miscellaneous 72
-
-
-
-
-
-
-
-
- STRING
-
-
-
- QCAPIT -- SUB
-
-
- This routine will take an input string and change the first character
- to upper case and the remainder of the string will be changed to lower
- case. If the second character of the string is an apostrophe ('), then
- the third character will also be converted to an upper case character.
-
- The format of the call is as follows:
-
- QCAPIT TstStr$
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QCAPIT (StringName AS STRING)
- TstStr$="harold"
- QCAPIT TstStr$
- PRINT TstStr$
- .
- TstStr$="o'brian"
- QCAPIT TstStr$
- PRINT TstStr$
- END
-
-
-
- QCENTER -- SUB
-
-
- This routine will take an input string that has been padded with
- spaces and center the test. It does not matter if the padding is
- on the left or the right of the text and the text can have
- multiple words. The way that this routine works is to first left
- justify all text and then to center the text.
-
- The format of the call is as follows:
-
- QCENTER TstStr$
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QCENTER (StringName AS STRING)
- TstStr$ = "Harold Thomson" + SPACE$(30)
- QCENTER TstStr$
- PRINT TstStr$
- END
-
-
-
-
-
- String 73
-
-
-
-
-
-
-
-
- QCHARTYP -- FUNCTION
-
-
- This function is used to determine if an input string contains
- valid characters which are inputed to the function via a string of
- valid characters. If the inputed characters are valid, a zero (0)
- is returned otherwise the position of the first invalid characters
- is returned. If either string is null ("") then a -1 is returned.
-
- The format of the call is as follows:
-
- RC = QCHARTYP(TstStr$, ValStr$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QCHARTYP% (TstStr AS STRING, ValStr AS STRING)
- TstStr$="abbc2254621"
- ValStr$="abcdefgABCDEFG12345"
- IF QCHARTYP(TstStr$, ValStr$) = 0 THEN
- PRINT "The string is valid"
- ELSE
- PRINT "The string is invalid"
- END
-
-
-
- QDELIM -- FUNCTION
-
-
- Returns the n'th word in a comma delimited string. If the
- requested word is null (,,) then a null string is returned.
-
- The format of the call is as follows:
-
- NewStr$ = QDELIM(TstStr$, Index)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QDELIM$ (StringName AS STRING,
- BYVAL Indx AS INTEGER)
- TstStr$="This,,string,contains,five,words"
- Index = 5
- NewStr$ = QDELIM(TstStr$, Indx)
- IF NewStr$ <> "" THEN
- PRINT "The fifth word of the string is " NewStr$
- ELSE
- PRINT "Error in QDELIM"
- END
-
-
-
-
-
-
-
- String 74
-
-
-
-
-
-
-
-
- QEXTRACT -- FUNCTION
-
-
- Returns the n'th word from a string based upon a delimiter which
- is passed in the call. A null string is returned if an error is
- encountered.
-
- The format of the call is as follows:
-
- NewString$ = QEXTRACT(TstStr$, Delim$, Index)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QEXTRACT$ (StringName AS STRING, _
- Delim AS STRING, _
- BYVAL Index AS INTEGER)
- TstStr$="This@string@contains@five@words"
- Index = 4
- Delim$ = "@"
- NewStr$ = QEXTRACT(TstStr$, Delim$, Index)
- IF NewStr$ <> "" THEN
- PRINT "The fourth word of the string is " NewStr$
- ELSE
- PRINT "Error in QEXTRACT"
- END
-
-
-
- QHIGHBIT -- SUB
-
-
- This subroutine will turn off the high order or leftmost bit of
- every character in a string. This may be useful when reading some
- files which have been created by some word processing programs
- such as Wordstar.
-
- The format of the call is as follows:
-
- QHIGHBIT TstStr$
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QINSTR (TstStr AS STRING)
- TstStr$="Çà ÄÜ"
- QHIGHBIT TstStr$
- PRINT "This string now reads " TstStr$
- END
-
-
-
-
-
-
-
-
- String 75
-
-
-
-
-
-
-
-
- QINSTR -- FUNCTION
-
-
- Returns the position of a character in a string based upon a
- supplied character which is passed in the call. In addition, the
- desired number of the character occurence is passed. Returns a -1
- if an error is encountered or the character is not found.
-
- The format of the call is as follows:
-
- RC = QINSTR(TstStr$, Delim$, Index)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QINSTR% (TstStr AS STRING, _
- Delim AS STRING, _
- BYVAL Index AS INTEGER)
- TstStr$="aaa( ( ( ) ) )aaa"
- Index = 2
- Delim$ = "("
- IF QINSTR(TstStr$, Delim$, Index) = 0 THEN
- PRINT "The character position is " Index
- ELSE
- PRINT "Error in QINSTR Call"
- END IF
- END
-
-
-
- QLEN -- FUNCTION
-
-
- Returns the length of a string. This routine works just like the
- BASIC LEN() function but is somewhat faster. This functions works
- with variable length strings as well as fixed length strings. It
- also works with strings defined with the BASIC TYPE statement.
-
- The format of the call is as follows:
-
- StrLen = QLEN(TstStr$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QLEN% (TstStr AS STRING)
- TstStr$="1234567890"
- PRINT "The length of the string is " QLEN(TstStr$)
-
-
-
-
-
-
-
-
-
- String 76
-
-
-
-
-
-
-
-
- QMID -- FUNCTION
-
-
- Overlays the contents of string 2 with the contents of string 1
- starting at the character pointed to by start. This function
- returns a zero if it is successful, if start if beyond the string
- 2 length or the length of string 1 extends beyond string 2 a -1 is
- returned.
-
- The format of the call is as follows:
-
- RC = QMID(Str1$, Str2$, Start)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QMID% (Str1 AS STRING, _
- Str2 AS STRING, _
- BYVAL Start AS INTEGER)
- Str1$ = "zzzzzzzzzz": Str2$ = "aaaXxxxxxxxxxxXaaa"
- Start = 5
- XX = QMID(Str1$, Str2$, Start)
- PRINT Str2$
- END
-
-
-
- QMOVREC -- FUNCTION
-
-
- Move a record defined with the TYPE function to a BASIC string
- variable. Currently, only individule fields can be moved to a
- string.
-
- The format of the call is as follows:
-
- OutString$ = QMOVREC(PtrR, LenR)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QMOVREC$ (BYVAL PtrR AS INTEGER, _
- BYVAL LenR AS INTEGER)
- TYPE TestType
- Fld1 AS STRING * 5
- Fld2 AS STRING * 10
- END TYPE
- DIM TestRec AS TestType
- TestRec.Fld1 = "AAAAA": TestRec.Fld2 = "0123456789"
- PtrR = VARPTR(TestRec): LenR = LEN(TestRec)
- Buffer$ = QMOVREC(PrtR, LenR)
- PRINT Buffer$
-
-
-
-
-
- String 77
-
-
-
-
-
-
-
-
- QMOVSTR -- SUB
-
-
- Moves a BASIC string variable to a record defined with the TYPE
- function. Currently, strings can only be moved to individule
- fields.
-
- The format of the call is as follows:
-
- QMOVSTR PtrR, LenR, OutString$
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QMOVSTR (BYVAL PtrR AS INTEGER, BYVAL LenR AS INTEGER, _
- Buffer AS STRING)
- TYPE TestType
- Fld1 AS STRING * 5
- Fld2 AS STRING * 10
- END TYPE
- DIM TestRec AS TestType
- PtrR = VARPTR(TestRec): LenR = LEN(TestRec)
- Buffer$ = "AAAAA0123456789"
- QMOVSTR PrtR, LenR, Buffer$
- PRINT TestRec.Fld1, TestRec.Fld2
-
-
-
- QREPLACE -- SUB
-
-
- Replace the character specified by OLD$ with the character
- specified by NEW$. These two characters must be only one
- character long or the routine returns without changing the string.
-
- The format of the call is as follows:
-
- QREPLACE TstStr$, Old$, New$
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QREPLACE (StringName AS STRING, _
- OldStr AS STRING, _
- NewStr AS STRING)
- TstStr$="05-29-87"
- Old$ = "-"
- New$ = "/"
- QREPLACE TstStr$, Old$, New$
- PRINT TstStr$
-
-
-
-
-
-
-
- String 78
-
-
-
-
-
-
-
-
- QREVERSE -- FUNCTION
-
-
- This function returns a new string with all characters of the
- input string reversed. In other words, "ABCD" becomes "DCBA". It
- is not necessary to supply an output string.
-
- The format of the call is as follows:
-
- NewStr$ = QREVERSE OldStr$
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QREVERSE$ (StringName AS STRING)
- TstStr$ = "This is a test string"
- NewStr$ = QREPLACE TstStr$
- PRINT NewStr$
- REM The results are ==> "gnirts tset a si sihT"
-
-
-
- QRINSTR -- FUNCTION
-
-
- This routine is simular to QINSTR except it starts the search from
- the end of the string and searches towards the beginning. It will
- return the position of a character in a string based upon a
- supplied character which is passed in the call. In addition, the
- desired number of the character occurence is passed. Returns a -1
- if an error is encountered or the character is not found.
-
- The format of the call is as follows:
-
- RC = QRINSTR(TstStr$, Delim$, Index)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QRINSTR% (TstStr AS STRING, _
- Delim AS STRING, _
- BYVAL Index AS INTEGER)
- TstStr$="aaa( ( ( ) ) )aaa"
- Index = 2
- Delim$ = ")"
- IF QRINSTR(TstStr$, Delim$, Index) = 0 THEN
- PRINT "The character position is " Index
- ELSE
- PRINT "Error in QRINSTR Call"
- END
-
-
-
-
-
-
-
- String 79
-
-
-
-
-
-
-
-
- QSTRIP -- FUNCTION
-
-
- This routine removes all occurances of blanks or spaces from a
- string and returns a new string.
-
- The format of the call is as follows:
-
- NewString$ = QSTRIP(StringName$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QSTRIP$ (StringName AS STRING)
- StringName$ = "This is a test string for QSTRIP"
- NewString$ = QSTRIP(StringName$)
- PRINT NewString$
-
-
-
- QSTRPCHR -- FUNCTION
-
-
- This routine removes all of the occurances of the requested
- character from a string and return it in a new string.
-
- The format of the call is as follows:
-
- NewString$ = QSTRPCHR(StringName$, StripChr$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QSTRPCHR$ (StringName AS STRING, _
- StripChr AS STRING)
- StringName$ = "This#is#a#test#string#for#QSTRPCHR"
- StripChr$ = "#"
- NewString$ = QSTRPCHR(StringName$, StripChr$)
- PRINT NewString$
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- String 80
-
-
-
-
-
-
-
-
- QSUBSTR -- FUNCTION
-
-
- This function copies a portion of FromStr starting at the Start
- position for Length number of characters and places it in ToStr$.
- A null string is returned if it was unsuccessful.
-
- The format of the call is as follows:
-
- ToStr$ = QSUBSTR(FromStr$, Start, Length)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QSUBSTR$ (FromStr AS STRING, _
- BYVAL Start AS INTEGER, _
- BYVAL Length AS INTEGER)
- .
- FromStr$ = "aaaXxxxxxxxxxxXaaa"
- Start = 4
- Length = 10
- ToStr$ = QSUBSTR(FromStr$, Start, Length)
- PRINT ToStr$
- END
-
-
-
- QWORD -- FUNCTION
-
-
- Returns a string which contains the n'th space delimited word from
- a string. Returns a null string if an error is encountered.
-
- The format of the call is as follows:
-
- Found$ = QWORD(TstStr$, Index)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QWORD$ (StringName AS STRING, _
- BYVAL Index AS INTEGER)
- TstStr$="This string contains five words"
- Index = 4
- Found$ = QWORD(TstStr$, Index)
- IF Found$ <> "" THEN
- PRINT "The fourth word of the string is " Found$
- ELSE
- PRINT "Error in QWORD"
- END
-
-
-
-
-
-
-
- String 81
-
-
-
-
-
-
-
-
- QWORDS -- FUNCTION
-
-
- Returns the number of space delimited words in a string. If the
- string is null or all spaces, it will return zero.
-
- The format of the call is as follows:
-
- Number.Of.Words = QWORDS(TstStr$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QWORDS% (StringName AS STRING)
- TstStr$="This string contains five words"
- IF QWORDS(TstStr$) > 0 THEN
- PRINT "The number of words in this string is " QWORDS(TstStr$)
- ELSE
- PRINT "Error in QWORDS"
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- String 82
-
-
-
-
-
-
-
-
- SUB-DIRECTORY
-
-
-
- QCHDIR -- FUNCTION
-
-
- Change the current sub-directory. Works the same as the DOS CHDIR
- command except a return code is set to zero (0) if successful.
-
- The format of the call is as follows:
-
- RC = QCHDIR(ChFile$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QCHDIR% (DirName AS STRING)
- ChFile$="C:\NEWSUB\DIR"+CHR$(0)
- IF QCHDIR(ChFile$) = 0 THEN
- PRINT "New directory set"
- ELSE
- PRINT "New directory not selected"
- END IF
-
-
-
- QCHKDIR -- FUNCTION
-
-
- Checks to see if the requested sub-directory exists. The return
- code is set to -1 if the directory doesn't exist.
-
- The format of the call is as follows:
-
- RC = QCHKDIR(ChkFile$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QCHKDIR% (DirName AS STRING)
- ChkFile$="C:\CHKSUB\DIR"+CHR$(0)
- IF QCHKDIR(ChkFile$) = 0 THEN
- PRINT "Sub-directory exists"
- ELSE
- PRINT "The requested sub-directory doesn't exist"
- END IF
-
-
-
-
-
-
-
-
-
-
- Sub-Directory 83
-
-
-
-
-
-
-
-
- QGETDIR -- FUNCTION
-
-
- Returns the current sub-directory. It is no longer necessary to
- pre-allocate the return string.
-
- The format of the call is as follows:
-
- DirStr$ = QGETDIR
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QGETDIR$ ()
- DirStr$ = QGETDIR
- PRINT "The current directory is " DirStr$
-
-
-
- QMKDIR -- FUNCTION
-
-
- Create a new sub-directory. Works the same as the DOS MKDIR
- command except a return code is set to -1 if the directory wasn't
- created.
-
- The format of the call is as follows:
-
- RC = QMKDIR(MkFile$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QMKDIR% (DirName AS STRING)
- MkFile$ = "NEWSUBDIR"+CHR$(0)
- IF QMKDIR(MkFile$) = 0 THEN PRINT "Sub-directory created."
-
-
-
- QRMDIR -- FUNCTION
-
-
- Deletes an existing sub-directory. Same as the DOS RMDIR command
- except the RC will be set to -1 if the directory not found.
-
- The format of the call is as follows:
-
- RC = QRMDIR(RmFile$)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QRMDIR% (DirName AS STRING)
- RmFile$ = "OLDSUBDIR"+CHR$(0)
- IF QRMDIR(RmFile$) = 0 THEN PRINT "Sub-directory deleted."
-
-
- Sub-Directory 84
-
-
-
-
-
-
-
-
- VIDEO
-
-
-
- QANSIPRT -- SUB
-
-
- Print a string to the screen including any ANSI escape characters
- sequences. The BASIC LOCATE command must be used before the call
- to set the line and column before printing. This routine uses DOS
- calls so it will print slower than QPRT or QBPRT.
-
- The format of the call is as follows:
-
- QANSIPRT CharString$
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QANSIPRT (PrtString AS STRING)
- LOCATE 3,2
- QANSIPRT CharString$
-
-
-
- QATTR -- FUNCTION
-
-
- Calculates the color attribute for routines such as QPRT, QWINDOW,
- etc. It also allows use of the "blink" attribute.
-
- The format of the call is as follows:
-
- NAttr = QATTR(Fgrd, Bkgrd)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QATTR% (BYVAL Fore AS INTEGER, _
- BYVAL Back AS INTEGER)
- Fgrd = 7 : Bkgrd = 0
- NAttr = QATTR(Fgrd, Bkgrd)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Video 85
-
-
-
-
-
-
-
-
- QBPRT -- SUB
-
-
- Print a string at the specified location on the screen. The Color
- attribute must be computed prior to the call and included with the
- call. It also allows the string to be printed on any of the 4
- video pages. This routine uses BIOS calls to print the string so
- it will be compatible with most versions of DOS.
-
- The format of the call is as follows:
-
- QBPRT Prt$, Row, Col, NAttr, Page
-
- The parameters that are used by QBPRT are as follow:
-
- Prt$ The string to be printed.
- Row The row to print.
- Col The column to print.
- Attr The video color attribute to use.
- Page The video page to print on.
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QBPRT (PrtLine AS STRING, _
- BYVAL Row AS INTEGER, _
- BYVAL Col AS INTEGER, _
- BYVAL Attr AS INTEGER, _
- BYVAL Page AS INTEGER)
- .
- .
- Prt$="This is the string to be printed."
- Fgrd = 7 : Bkgrd = 0
- NAttr = QATTR(Fgrd, Bkgrd)
- Row=5 : Col=10 : Page=0
- QBPRT Prt$, Row, Col, NAttr, Page
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Video 86
-
-
-
-
-
-
-
-
- QBMPRT -- SUB
-
-
- Print a string array at the specified location on the screen. The
- color attribute must be calculated before the call and passed with
- the call. It also allows the string to be printed on any of the 4
- video pages. This routine uses BIOS calls to print the strings so
- it will be compatible with most versions of DOS.
-
- The format of the call is as follows:
-
- QBMPRT Elements, VARSEG(Prt$(0)), VARPTR(Prt$(0)), Row, Col, AAttr, Page
-
- The parameters that are used by QMPRT are as follows:
-
- Elements The number of occurrences of the array.
- VARSEG(Prt$(0)) The VARSEG segment address of the first array
- element.
- VARPTR(Prt$(0)) The VARPTR address of the first array element.
- Row The row to start printing.
- Col The column to start in.
- Attr The video color attribute to use.
- Page The video page to print on.
-
- Example:
-
- OPTION BASE 0
- DEFINT A-Z
- DECLARE SUB QBMPRT (BYVAL Elements AS INTEGER, _
- BYVAL VSeg AS INTEGER, _
- BYVAL VOff AS INTEGER, _
- BYVAL Row AS INTEGER, _
- BYVAL Col AS INTEGER, _
- BYVAL Attr AS INTEGER, _
- BYVAL Page AS INTEGER)
- DIM Prt$(4)
- .
- Prt$(0)="This is the first string to be printed."
- Prt$(1)="This is the second string to be printed."
- Prt$(2)="This is the third string to be printed."
- Prt$(3)="This is the fourth string to be printed."
- Fgrd = 1 : Bkgrd = 7
- AAttr = QATTR(Fgrd, Bkgrd)
- Row=5 : Col=10 : Page=0
- Elements=4
- QBMPRT Elements, VARSEG(Prt$(0)), VARPTR(Prt$(0)), Row, Col, AAttr, Page
-
-
-
-
-
-
-
-
-
-
-
- Video 87
-
-
-
-
-
-
-
-
- QCRTMODE -- SUB
-
-
- This routine will return a value between 0 and 3 to indicate the
- type of monitor that is installed. In addition it will return the
- current number of columns that the screen is set too. Care must
- be taken on some systems such as the AT&T PC6300 because it will
- return a 1 indicationg CGA even though a mono screen is being
- used. This is due to the fact that a CGA video controller card is
- being used.
-
- The format of the call is as follows:
-
- QCRTMODE CType, CCols
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QCRTMODE (CrtType AS INTEGER, _
- CrtCols AS INTEGER)
- REM CrtType ==> 0 = MDA, 1 = CGA, 2 = EGA, 3 = VGA
- QCRTMODE CType, CCols
- SELECT CASE CType
- CASE 0
- PRINT "Monitor type is MDA with"+STR$(CCols)+" Columns."
- CASE 1
- PRINT "Monitor type is CGA with"+STR$(CCols)+" Columns."
- CASE 2
- PRINT "Monitor type is EGA with"+STR$(CCols)+" Columns."
- CASE 3
- PRINT "Monitor type is VGA with"+STR$(CCols)+" Columns."
- CASE ELSE
- PRINT "Unknown monitor type."
- END SELECT
- END
-
-
-
- QCLREOL -- SUB
-
-
- This routine will print spaces from the current cursor location to
- the end of the line. The cursor can be places anywhere on the
- screen using the LOCATE statement.
-
- The format of the call is as follows:
-
- QCLREOL
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QCLREOL ()
- .
- LOCATE 5, 15
-
-
- Video 88
-
-
-
-
-
-
-
-
- QCLREOL
- .
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Video 89
-
-
-
-
-
-
-
-
- QGETATTR -- FUNCTION
-
-
- This function will return an integer containing the current video
- attribute at the requested row and column. This can be useful in
- determinine the color attribute being used before print with QPRT
- or the other print routines in this library.
-
- The format of the call is as follows:
-
- Attr = QGETATTR (Row, Col)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QGETATTR% (BYVAL Row AS INTEGER, _
- BYVAL Col AS INTEGER)
- PRINT "The color attribute at row 24, column 1 is "; QGETATTR(24,1)
- END
-
-
-
- QGETCURS -- SUB
-
-
- This routine will return integer values containing the current
- cursor row and column for the requested video page. This requires
- only one call instead of 2 using the BASIC funtions CSRLIN and
- POS(0).
-
- The format of the call is as follows:
-
- QGETCURS Row, Col, Page
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QGETCURS (Row AS INTEGER, _
- Col AS INTEGER, _
- Page AS INTEGER)
- QGETCURS Row, Col, Page
- PRINT "The cursor is at Row/Column": Row, Col
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Video 90
-
-
-
-
-
-
-
-
- QGETMODE -- FUNCTION
-
-
- This function will return an integer value which contains the
- current video mode returned by the BIOS. This value can then be
- used to reset the video mode after it has been changed with
- QSETMODE.
-
- The format of the call is as follows:
-
- HoldMode = QGETMODE
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QGETMODE% ()
- HoldMode = QGETMODE
- QSETMODE HoldMode - 2
- .
- .
- QSETMODE HoldMode
- .
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Video 91
-
-
-
-
-
-
-
-
- QMPRT -- SUB
-
-
- Print a string array at the specified location on the screen. The
- color attribute must be calculated before the call and passed with
- the call. It also allows the string to be printed on any of the 4
- video pages. This routine writes to video ram directly and may
- not be compatible with some versions of DOS.
-
- The format of the call is as follows:
-
- QMPRT Elements, VARSEG(Prt$(0)), VARPTR(Prt$(0)), Row, Col, AAttr, Page
-
- The parameters that are used by QMPRT are as follows:
-
- Elements The number of occurrences of the array.
- VARSEG(Prt$(0)) The VARSEG segment address of the first array
- element.
- VARPTR(Prt$(0)) The VARPTR address of the first array element.
- Row The row to start printing.
- Col The column to start in.
- Attr The video color attribute to use.
- Page The video page to print on.
-
- Example:
-
- OPTION BASE 0
- DEFINT A-Z
- DECLARE SUB QMPRT (BYVAL Elements AS INTEGER, _
- BYVAL VSeg AS INTEGER, _
- BYVAL VOff AS INTEGER, _
- BYVAL Row AS INTEGER, _
- BYVAL Col AS INTEGER, _
- BYVAL Attr AS INTEGER, _
- BYVAL Page AS INTEGER)
- DIM Prt$(4)
- .
- Prt$(0)="This is the first string to be printed."
- Prt$(1)="This is the second string to be printed."
- Prt$(2)="This is the third string to be printed."
- Prt$(3)="This is the fourth string to be printed."
- Fgrd = 1 : Bkgrd = 7
- AAttr = QATTR(Fgrd, Bkgrd)
- Row=5 : Col=10 : Page=0
- Elements=4
- QMPRT Elements, VARSEG(Prt$(0)), VARPTR(Prt$(0)), Row, Col, AAttr, Page
-
-
-
-
-
-
-
-
-
-
-
- Video 92
-
-
-
-
-
-
-
-
- QPAINT -- SUB
-
-
- This subroutine will change the current foreground and background
- colors of an area of the screen as defined by the supplied screen
- locations. Any text that exists in this area will remain. Only
- the colors will change.
-
- The format of the call is as follows:
-
- QPAINT TRow, LCol, BRow, RCol, Attr, Page
-
- The parameters that are used by QPAINT are as follows:
-
- TR The top row location.
- LC The left column location.
- BR The bottom row location.
- RC The right column location.
- Attr The video color attribute to use.
- Page The video page to print on.
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QPAINT (BYVAL TR AS INTEGER, _
- BYVAL LC AS INTEGER, _
- BYVAL BR AS INTEGER, _
- BYVAL RC AS INTEGER, _
- BYVAL ATTR AS INTEGER, _
- BYVAL PAGE AS INTEGER)
- .
- .
- TRow = 5: LCol = 10: BRow = 15: RCol = 70: Page = 0
- Attr = QATTR(3, 0)
- QPAINT TRow, LCol, BRow, RCol, Attr, Page
- .
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Video 93
-
-
-
-
-
-
-
-
- QPRT -- SUB
-
-
- Print a string at the specified location on the screen. The color
- attribute must be calculated prior to the call and passed with the
- call. It also allows the string to be printed on any of the 4
- video pages. This routine writes to video ram directly and may
- not be compatible with some versions of DOS.
-
- The format of the call is as follows:
-
- QPRT Prt$, Row, Col, NAttr, Page
-
- The parameters that are used by QPRT are as follows:
-
- Prt$ The string to be printed.
- Row The row to print.
- Col The column to print.
- Attr The video color attribute to use.
- Page The video page to print on.
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QPRT (PrtLine AS STRING, _
- BYVAL Row AS INTEGER, _
- BYVAL Col AS INTEGER, _
- BYVAL Attr AS INTEGER, _
- BYVAL Page AS INTEGER)
- .
- .
- Prt$="This is the string to be printed."
- Fgrd = 7 : Bkgrd = 0
- NAttr = QATTR(Fgrd, Bkgrd)
- Row=5 : Col=10 : Page=0
- QPRT Prt$, Row, Col, NAttr, Page
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Video 94
-
-
-
-
-
-
-
-
- QPRTANSI -- SUB
-
-
- Print a string to the screen including any ANSI escape characters
- sequences. The unlike the QANSIPRT sub, this routine has a built
- in locate function. In addition, this subroutine can be passed a
- number which is the last line of a window that the routine will
- print to. If this number will be exceeded, the subroutine will
- scroll the screen up one before printing the next line. In this
- case, the row and column parameters will be ignored. If this
- value is zero, then the window parameter is ignored and the row
- and column specified will be used. This routine uses DOS calls so
- it will print slower than QPRT or QBPRT.
-
- The format of the call is as follows:
-
- QPRTANSI CharString$, Row, Col, Awindow
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QPRTANSI (PrtString AS STRING, _
- BYVAL Row AS INTEGER, _
- BYVAL Col AS INTEGER, _
- BYVAL Awindow AS INTEGER)
- .
- REM Print string at row and column specified
- CharString$ = "This is a string to be printed"
- Row=5 : Col=10 : Awindow = 0
- QPRTANSI CharString$, Row, Col, Awindow
- .
- .
- REM Print string at next row if the row is less than the window
- CharString$ = "This is a string to be printed" + CHR$(13) + CHR$(10)
- Row=0 : Col=0 : Awindow = 22
- QPRTANSI CharString$, Row, Col, Awindow
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Video 95
-
-
-
-
-
-
-
-
- QRESTSCR -- FUNCTION
-
-
- Restore the portion of the screen from an array that had been
- saved with QSAVESCR. It will restore the screen to any of the 4
- video pages. The screen does not have to be restored to the same
- location that it was saved from. The array that is used must be
- large enough to hold the saved screen area. The way to calculate
- the size array needed is with the following ((BottomRow - TopRow)
- + 1) * (RightCol - LeftCol) + 1).
-
- The format of the call is as follows:
-
- QRESTSCR TRow, LCol, BRow, RCol, Page, VARSEG(Array(0)), VARPTR(Array(0))
-
- The parameters that are used by QRESTSCR are as follows:
-
- TR The top row location.
- LC The left column location.
- BR The bottom row location.
- RC The right column location.
- Page The video page to save from.
- VARSEG(A(0)) The array segment address.
- VARPTR(A(0)) The array pointer address.
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QRESTSCR (BYVAL TR AS INTEGER, _
- BYVAL LC AS INTEGER, _
- BYVAL BR AS INTEGER, _
- BYVAL RC AS INTEGER, _
- BYVAL PAGE AS INTEGER, _
- BYVAL VSEG AS INTEGER, _
- BYVAL VPTR AS INTEGER)
- DIM Array(671)
- .
- SHELL "DIR"
- TRow = 5: LCol = 10: BRow = 15: RCol = 70: Page = 0
- QSAVESCR TRow, LCol, BRow, RCol, Page, VARSEG(Array(0)), VARPTR(Array(0))
- CLS
- WHILE INKEY$ = "": WEND
- QRESTSCR TRow, LCol, BRow, RCol, Page, VARSEG(Array(0)), VARPTR(Array(0))
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
- Video 96
-
-
-
-
-
-
-
-
- QSAVESCR -- FUNCTION
-
-
- Saves a portion of the screen to an array. You do not have to
- save the whole screen, only the portions that is needed. The
- screen can be restored at a later time using QRESTSCR. The array
- that is used must be large enough to hold the saved screen area.
- The way to calculate the size array needed is with the following
- ((BottomRow - TopRow) + 1) * (RightCol - LeftCol) + 1).
-
- The format of the call is as follows:
-
- QSAVESCR TRow, LCol, BRow, RCol, Page, VARSEG(Array(0)), VARPTR(Array(0))
-
- The parameters that are used by QSAVESCR are as follows:
-
- TR The top row location.
- LC The left column location.
- BR The bottom row location.
- RC The right column location.
- Page The video page to save from.
- VARSEG(A(0)) The array segment address.
- VARPTR(A(0)) The array pointer address.
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QSAVESCR (BYVAL TR AS INTEGER, _
- BYVAL LC AS INTEGER, _
- BYVAL BR AS INTEGER, _
- BYVAL RC AS INTEGER, _
- BYVAL PAGE AS INTEGER, _
- BYVAL VSEG AS INTEGER, _
- BYVAL VPTR AS INTEGER)
- DIM Array(671)
- .
- SHELL "DIR"
- TRow = 5: LCol = 10: BRow = 15: RCol = 70: Page = 0
- QSAVESCR TRow, LCol, BRow, RCol, Page, VARSEG(Array(0)), VARPTR(Array(0))
- CLS
- WHILE INKEY$ = "": WEND
- QRESTSCR TRow, LCol, BRow, RCol, Page, VARSEG(Array(0)), VARPTR(Array(0))
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Video 97
-
-
-
-
-
-
-
-
- QSCROLL -- SUB
-
-
- Scrolls the screen up using the locations that are passed in the
- call. One or more lines can be scrolled and if the number is
- zero, the whole area will be cleared. Be sure that the rows and
- columns are within the screen.
-
- The format of the call is as follows:
-
- QSCROLL Trow, Lcol, Brow, Rcol, Lines
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QSCROLL (BYVAL TRow AS INTEGER, _
- BYVAL LCol AS INTEGER, _
- BYVAL BRow AS INTEGER, _
- BYVAL RCol AS INTEGER, _
- BYVAL Lines AS INTEGER)
- Trow = 5 : Lcol = 15 : Brow = 15 : Rcol = 65 : Lines = 2
- QSCROLL Trow, Lcol, Brow, Rcol, Lines
- .
- REM The following will clear an area of the screen
- Trow = 5 : Lcol = 15 : Brow = 15 : Rcol = 65 : Lines = 0
- QSCROLL Trow, Lcol, Brow, Rcol, Lines
-
-
-
- QSCROLLB -- SUB
-
-
- Scrolls the screen down using the locations that are passed in the
- call. One or more lines can be scrolled and if the number is
- zero, the whole area will be cleared. Be sure that the rows and
- columns are within the screen.
-
- The format of the call is as follows:
-
- QSCROLLB Trow, Lcol, Brow, Rcol, Lines
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QSCROLLB (BYVAL TRow AS INTEGER, _
- BYVAL LCol AS INTEGER, _
- BYVAL BRow AS INTEGER, _
- BYVAL RCol AS INTEGER, _
- BYVAL Lines AS INTEGER)
- Trow = 5 : Lcol = 15 : Brow = 15 : Rcol = 65 : Lines = 2
- QSCROLLB Trow, Lcol, Brow, Rcol, Lines
-
-
-
-
-
-
- Video 98
-
-
-
-
-
-
-
-
- QSCRREST -- FUNCTION
-
-
- Restore the screen from an array that had been saved with
- QSCRSAVE. It will restore the screen to any of the 4 video pages.
- If an error was encountered, the RC will be -1.
-
- The format of the call is as follows:
-
- RC = QSCRREST(VARSEG(ScrnHold(1)), VARPTR(ScrnHold(1)), Page)
-
- The parameters that are used by QSCRREST are as follows:
-
- VARSEG(Prt$(0)) The VARSEG segment address of the first array
- element.
- VARPTR(Prt$(0)) The VARPTR address of the first array element.
- Page The video page to print on.
-
- Example:
-
- OPTION BASE 1
- DEFINT A-Z
- DECLARE FUNCTION QSCRREST% (BYVAL ASeg AS INTEGER, _
- BYVAL AOffset AS INTEGER, _
- BYVAL Page AS INTEGER)
- DIM ScrnHold(2000)
- Page = 0
- IF QSCRREST(VARSEG(ScrnHold(1)), VARPTR(ScrnHold(1)), Page) = 0 THEN
- LOCATE RowHold,ColHold
- ELSE
- PRINT "Error on screen restore"
- END IF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Video 99
-
-
-
-
-
-
-
-
- QSCRSAVE -- FUNCTION
-
-
- Save the requested video page (0 - 3) into array. Use this in
- text mode only. The array must be an integer array dimensioned to
- at least 2000 occurrences. The starting address of the array must
- be passed, use the VARPTR function to get this address. The
- cursor location is not saved so, if it is needed, save the
- location. More than one screen can be saved into the array as
- long as 2000 occurrences are dimensioned for each screen and the
- appropriate VARPTR address is passed the the routine. If an error
- is encountered, the RC will be -1.
-
- The format of the call is as follows:
-
- RC = QSCRSAVE(VARSEG(ScrnHold(1)), VARPTR(ScrnHold(1)), Page)
-
- The parameters that are used by QSCRSAVE are as follows:
-
- VARSEG(Prt$(0)) The VARSEG segment address of the first array
- element.
- VARPTR(Prt$(0)) The VARPTR address of the first array element.
- Page The video page to print on.
-
- Example:
-
- OPTION BASE 1
- DEFINT A-Z
- DECLARE FUNCTION QSCRSAVE% (BYVAL ASeg AS INTEGER, _
- BYVAL AOffset AS INTEGER, _
- BYVAL Page AS INTEGER)
- DIM ScrnHold(2000)
- Page = 0
- IF QSCRSAVE(VARSEG(ScrnHold(1)), VARPTR(ScrnHold(1)), Page) = 0 THEN
- RowHold = CSRLIN
- ColHold = POS(0)
- ELSE
- PRINT "Error on screen save"
- END IF
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Video 100
-
-
-
-
-
-
-
-
- QSETMODE -- SUB
-
-
- This subroutine will set the video mode to the value that is
- supplied. This value can be any of the valid BIOS video modes.
-
- The format of the call is as follows:
-
- QSETMODE HoldMode
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QSETMODE (BYVAL VMode AS INTEGER)
- HoldMode = QGETMODE
- QSETMODE HoldMode - 2
- .
- .
- QSETMODE HoldMode
- .
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Video 101
-
-
-
-
-
-
-
-
- QWINDOW -- SUB
-
-
- Displays a pop-up window on the screen. It requires several
- parameters which are used to determine where to print the window
- as well as the type of frame to be used for the window. The rows
- and columns that are used and the ones that will be used for the
- frame. The color attribute that must be computed prior to the call
- and passed to QWINDOW. If the value passed for frame is not 1-4,
- the screen will be cleared based upon the row and column values.
-
- The format of the call is as follows:
-
- QWINDOW TRow, LCol, BRow, RCol, Frame, NAttr, Page
-
- The parameters that are used by QWINDOW are as follows:
-
- TRow The top row of the window.
- LCol The left column of the window.
- BRow The bottom row of the window.
- RCol The right column of the window.
- Frame The type of frame to be used for the window.
- Attr The video color attribute to use.
- Page The video page to print the window on.
-
- The types of frames available with QWINDOW are as follow:
-
- 1 Single line frame.
- 2 Double line frame.
- 3 Double vertical and single horizontal frame.
- 4 Single vertical and double horizontal frame.
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QWINDOW (BYVAL TRow AS INTEGER, _
- BYVAL LCol AS INTEGER, _
- BYVAL BRow AS INTEGER, _
- BYVAL RCol AS INTEGER, _
- BYVAL Frame AS INTEGER, _
- BYVAL Attr AS INTEGER, _
- BYVAL Page AS INTEGER)
- .
- Fgrd=7 : Bkgrd=0
- NAttr = QATTR(Fgrd, Bkgrd)
- TRow=1 : LCol=1 : BRow=25 : RCol=80 : Frame=2 : Page=0
- QWINDOW TRow, LCol, BRow, RCol, Frame, NAttr, Page
-
-
-
-
-
-
-
-
-
-
- Video 102
-
-
-
-
-
-
-
-
- QWINDOWH -- SUB
-
-
- Works just like QWINDOW, but in addition, it will draw horizontal
- lines across the window based upon the values passed in NLines and
- RNum. This routine can be very useful in menu windows. If the
- value passed in NLines is zero, it will function the same as
- QWINDOW. The VARPTR function must be used to get the address of
- the first array element.
-
- To use this routine, you must define a numeric array. Each element
- of this array will contain the row in which you wish to have a
- line drawn across the window. The address of the first occurrence
- of the array is what is passed to the routine.
-
- The format of the call is as follows:
-
- QWINDOWH TRow, LCol, BRow, RCol, NLine, RSeg, RNum, Frame, NAttr, Page
-
- The parameters that are used by QWINDOWH are as follows:
-
- TRow The top row of the window.
- LCol The left column of the window.
- BRow The bottom row of the window.
- RCol The right column of the window.
- NLine The number of horizontal lines to draw.
- RSeg The VARSEG segment address of the first array element.
- RNum The VARPTR address of the first array element.
- Frame The type of frame to be used for the window.
- Attr The video color attribute to use.
- Page The video page to print the window on.
-
- The types of frames available with QWINDOWH are as follows:
-
- 1 Single line frame.
- 2 Double line frame.
- 3 Double vertical and single horizontal frame.
- 4 Single vertical and double horizontal frame.
-
- Example:
-
- OPTION BASE 0
- DEFINT A-Z
- DECLARE SUB QWINDOWH (BYVAL TRow AS INTEGER, BYVAL LCol AS INTEGER, _
- BYVAL BRow AS INTEGER, BYVAL RCol AS INTEGER, _
- BYVAL NLine AS INTEGER, BYVAL ASeg AS INTEGER, _
- BYVAL AOff AS INTEGER, BYVAL Frame AS INTEGER, _
- BYVAL Attr AS INTEGER, BYVAL Page AS INTEGER)
- DIM ARow(2)
- .
- Fgrd=7 : Bkgrd=0 : NAttr = QATTR(Fgrd, Bkgrd)
- TRow=1 : LCol=1 : BRow=25 : RCol=80 : Frame=2 : Page=0
- NLine=2 : ARow(0)=3 : ARow(1)=23
- RSeg=VARSEG(ARow(0)) : RNum=VARPTR(ARow(0))
- QWINDOWH TRow, LCol, BRow, RCol, NLine, RSeg, RNum, Frame, NAttr, Page
-
-
- Video 103
-
-
-
-
-
-
-
-
- QWINDOWV -- SUB
-
-
- Works just like QWINDOW, but in addition, it will draw vertical
- lines down the window based upon the values passed in NLines and
- CNum. If the value passed in NLines is zero, it will function the
- same as QWINDOW. The VARPTR function must be used to get the
- address of the first array element.
-
- To use this routine, you must define a numeric array. Each element
- of this array will contain the row in which you wish to have a
- line drawn down the window. The address of the first occurrence
- of the array is what is passed to the routine.
-
- The format of the call is as follows:
-
- QWINDOWH TRow, LCol, BRow, RCol, NLine, CSeg, CNum, Frame, NAttr, Page
-
- The parameters that are used by QWINDOWV are as follows:
-
- TRow The top row of the window.
- LCol The left column of the window.
- BRow The bottom row of the window.
- RCol The right column of the window.
- NLine The number of vertical lines to draw.
- CSeg The VARSEG segment address of the first array element.
- CNum The VARPTR address of the first array element.
- Frame The type of frame to be used for the window.
- Attr The video color attribute to use.
- Page The video page to print the window on.
-
- The types of frames available with QWINDOWV are as follows:
-
- 1 Single line frame.
- 2 Double line frame.
- 3 Double vertical and single horizontal frame.
- 4 Single vertical and double horizontal frame.
-
- Example:
-
- OPTION BASE 0
- DEFINT A-Z
- DECLARE SUB QWINDOWV (BYVAL TRow AS INTEGER, BYVAL LCol AS INTEGER, _
- BYVAL BRow AS INTEGER, BYVAL RCol AS INTEGER, _
- BYVAL NLine AS INTEGER, BYVAL ASeg AS INTEGER, _
- BYVAL AOff AS INTEGER, BYVAL Frame AS INTEGER, _
- BYVAL Attr AS INTEGER, BYVAL Page AS INTEGER)
- DIM ACol(2)
- .
- Fgrd=7 : Bkgrd=0 : NAttr = QATTR(Fgrd, Bkgrd)
- TRow=1 : LCol=1 : BRow=25 : RCol=80 : Frame=2 : Page=0
- NLine=2 : ACol(0)=5 : ACol(1)=75
- CSeg=VARSEG(ACol(0)) : CNum=VARPTR(ACol(0))
- QWINDOWH TRow, LCol, BRow, RCol, NLine, CSeg, CNum, Frame, NAttr, Page
-
-
-
- Video 104
-
-
-
-
-
-
-
-
- QWINDOWX -- SUB
-
-
- Displays a pop-up window on the screen with a user selectable
- shadow either below left or below rightp window on the screen. It
- requires several parameters which are used to determine where to
- print the window as well as the type of frame to be used for the
- window. The rows and columns that are used and the ones that will
- be used for the frame. The color attribute that must be computed
- prior to the call and passed to QWINDOWX. If the value passed for
- frame is not 1-4, the screen will be cleared based upon the row
- and column values.
-
- The format of the call is as follows:
-
- QWINDOWX TRow, LCol, BRow, RCol, Frame, NAttr, HAttr, Page
-
- The parameters that are used by QWINDOWX are as follows:
-
- TRow The top row of the window.
- LCol The left column of the window.
- BRow The bottom row of the window.
- RCol The right column of the window.
- Frame The type of frame to be used for the window.
- Attr The video color attribute to use.
- Page The video page to print the window on.
-
- The types of frames available with QWINDOWX are as follow:
-
- 1 Single line frame, shadow bottom left.
- 2 Double line frame, shadow bottom left.
- 3 Double vertical and single horizontal frame, shadow bottom
- left.
- 4 Single vertical and double horizontal frame, shadow bottom
- left.
- 5 Single line frame, shadow bottom right.
- 6 Double line frame, shadow bottom right.
- 7 Double vertical and single horizontal frame, shadow bottom
- right.
- 8 Single vertical and double horizontal frame, shadow bottom
- right.
-
- Example:
-
- DEFINT A-Z
- DECLARE SUB QWINDOWX (BYVAL TRow AS INTEGER, BYVAL LCol AS INTEGER, _
- BYVAL BRow AS INTEGER, BYVAL RCol AS INTEGER, _
- BYVAL Frame AS INTEGER, BYVAL Attr AS INTEGER, _
- BYVAL Attrs AS INTEGER, BYVAL Page AS INTEGER)
- .
- REM Will print window with a shadow on bottom left.
- Fgrd=7 : Bkgrd=0 : NAttr = QATTR(Fgrd, Bkgrd)
- Fgrd=3 : Bkgrd=2 : HAttr = QATTR(Fgrd, Bkgrd)
- TRow=5 : LCol=10 : BRow=15 : RCol=30 : Frame=2 : Page=0
- QWINDOWX TRow, LCol, BRow, RCol, Frame, NAttr, HAttr, Page
-
-
- Video 105
-
-
-
-
-
-
-
-
- QVIDREST -- FUNCTION
-
-
- Restore a screen that was saved with QVIDSAVE. Color and
- monochrome screens have 4 pages of video memory and this routine
- will move a screen from pages 1-3 to page 0. If an error is
- encountered, the RC will be set to -1.
-
- The format of the call is as follows:
-
- RC = QVIDREST(Page)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QVIDREST% (BYVAL Page AS INTEGER)
- Page = 2
- RC = QVIDREST(Page)
-
-
-
- QVIDSAVE -- FUNCTION
-
-
- Save a screen to video page 1, 2 or 3 from page 0. If an error is
- encountered, the RC will be set to -1.
-
- The format of the call is as follows:
-
- RC = QVIDSAVE(Page)
-
- Example:
-
- DEFINT A-Z
- DECLARE FUNCTION QVIDSAVE% (BYVAL Page AS INTEGER)
- Page = 2
- RC = QVIDSAVE(Page)
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Video 106
-
-
-
-
-