BBS: Inland Empire Archive Date: 01-15-93 (16:24) Number: 388 From: JOHN GALLAS Refer#: NONE To: MARK THOMAS Recvd: NO Subj: RA USER 1/2 Conf: (2) Quik_Bas
MT> I was wondering if anyone out there knows how to access MT>the Remote Access User base. I have looked at RASTRUCT.100, MT>but derned if I know what I'm looking at. I have a full MT>understanding of sequential files, so Iguess what I'm asking Do you have any understanding of random access files? Thats what it is.. I have the structure and code, in QB, see below. MT>is how does the structure relate to QBable files commands. MT> I would post the structure, but I'm not sure how legal MT>it would be, as it has a copyright with it. Nope its not illegal. '* * * * * * * * * * * * * * * * * * * * * '* RDRAUSER.BAS - * '* Program to read the RA 1.11 user file * '* * * * * * * * * * * * * * * * * * * * * DEFINT A-Z ' RA uses a method of storing numbers called "Word", which is an unsigned ' integer, so instead of being a 2 byte number from -32768 to +32767, it ' is a 2 byte number from 0 to 65536, which can come in very handy for ' saving space when storing large numbers. The StrToVal! function will ' take the two byte number, and convert it into a number from 0 to 65536, ' and the ValToStr$ function will take a number (0-65536) and change it ' into 2 bytes, so you can store the number in the file. DECLARE FUNCTION StrToVal! (WordBytes$) DECLARE FUNCTION ValToStr$ (WordValue!) ' When storing strings, RA will add an extra byte at the beginning of each ' string, which will tell how much of the actual string is part of the ' actual string. For instance, the following string: ' Harold Mishmashijdo239cndlape94jsnc would actually mean "Harold Mishmashi". ' And so, the formula for decoding an RA string is: ' NewString$ = MID$(OldString$, 2, ASC(CHR$(LEFT$(OldString$,1)))) ' And thats what UVal$ does, so you don't have to type ^^^^^^. DECLARE FUNCTION UVal$ (Sumpin$) ' The type for the RA user file. Each of the entries that have a 'W after ' them are the unsigned integers, and must be manipulated by the StrToVal! ' and ValToStr$ functions. TYPE RAUserFileType UName AS STRING * 36 Location AS STRING * 26 Password AS STRING * 16 DataPhone AS STRING * 13 VoicePhone AS STRING * 13 LastTime AS STRING * 6 LastDate AS STRING * 9 Attribute AS STRING * 1 ' now here comes the confusing part. if bit 1 is set in flaga, that ' means that the first flag in a is set, etc.. I'm too tired to explain ' any further. If ya don't understand, post what I just said on the ' Quik_bas echo and somebody will explain it to ya. flaga AS STRING * 1 flagb AS STRING * 1 flagc AS STRING * 1 flagd AS STRING * 1 Credit AS STRING * 2 'W Pending AS STRING * 2 'W MsgsPosted AS STRING * 2 'W LastRead AS STRING * 2 'W Security AS STRING * 2 'W NoCalls AS STRING * 2 'W Uploads AS STRING * 2 'W Downloads AS STRING * 2 'W UploadsK AS STRING * 2 'W DownloadsK AS STRING * 2 'W TodayK AS INTEGER Elapsed AS INTEGER ScreenLength AS STRING * 2 'W LastPwdChange AS STRING * 1 Attribute2 AS STRING * 1 Group AS STRING * 1 XIrecord AS STRING * 2 'W ExtraSpace AS STRING * 3 END TYPE DIM User AS RAUserFileType ' And this little routine'll read in all the users, print their names, their ' locations, and how many messages each user has posted, and then it'll print ' the total messages that have ever been posted by the current users. COLOR 15, 0 LOCATE , , 1, 12, 13 CLS PRINT "Reading in users..." PRINT "Found user: " PRINT "From : " PRINT "Posted : "; OPEN "\RA\USERS.BBS" FOR RANDOM AS #1 LEN = LEN(User) 'or whatever the 'pathname is. TotalUsers! = LOF(1) \ LEN(User) 'make it a long integer cause theres 'no limit on how many users there can 'be. FOR i = 1 TO TotalUsers! GET #1, i, User LOCATE 2, 13 PRINT UVal$(User.UName) + SPACE$(36); LOCATE 3, 13 PRINT UVal$(User.Location) + SPACE$(36); LOCATE 4, 13 PRINT StrToVal!(User.MsgsPosted) TotalPosts! = TotalPosts! + StrToVal!(User.MsgsPosted) a$ = INKEY$ IF LEN(a$) THEN a$ = LCASE$(a$) IF a$ = "p" THEN x$ = INPUT$(1) END IF IF a$ = "q" THEN CLOSE #1 END END IF END IF NEXT i CLOSE #1 PRINT PRINT TotalUsers!; "users, and"; TotalPosts!; "posts." END FUNCTION StrToVal! (WordBytes$) Vl! = ASC(RIGHT$(WordBytes$, 1)) Vl! = (Vl! * 256) Vl! = Vl! + ASC(LEFT$(WordBytes$, 1)) >>> Continued to next message * OLX 2.1 TD * BASIC programmers don't die, they GOSUB without RETURN --- TMail v1.30.4 * Origin: TC-AMS MLTBBS 2.2 - Minnetonka, MN (612)-938-4799 (1:282/7)
Books at Amazon:
Back to BASIC: The History, Corruption, and Future of the Language
Hackers: Heroes of the Computer Revolution (including Tiny BASIC)
Go to: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Scientists and Iconoclasts who were the Hero Programmers of the Software Revolution
The Advent of the Algorithm: The Idea that Rules the World
Moths in the Machine: The Power and Perils of Programming
Mastering Visual Basic .NET