10 REM RANDOM INPUT/OUTPUT DEMO 20 REM THIS PROGRAM ALLOWS THE USER TO READ AND WRITE 30 REM RECORDS SEQUENTIALLY AND RANDOMLY 32 REM THE LINE NUMBERS WILL NEED TO BE REMOVED FROM THESE REM STMTS. 35 REM IT IS CURRENTLY A CUSTOMER FILE WHERE RECORD # IS CUSTOMER ID 40 REM IT MAY BE MODIFIED TO PROCESS ANY TYPE OF RECORD AS FOLLOWS: 50 REM 1. CHANGE RECORD LENGTH ON OPEN (LINE 150) 60 REM 2. INSERT APPROPRIATE FIELD STATEMENT(S) (LINE 170) 70 REM 3. MODIFY SUBROUTINE AT LINE 4000 TO SET FIELDED VAR'S IN RECORD 80 REM 4. MODIFY SUBROUTINE AT LINE 3000 TO DISPLAY A RECORD READ 90 REM NOTE THAT AN ATTEMPT TO READ 'EMPTY' RECORDS OR PAST EOF 100 REM WILL CAUSE AN EXECUTION ERROR 110 DEFINT I-J 120 DEFSTR C 150 OPEN "R",#1,"TEST2.DAT",117 170 FIELD #1, 30 AS COMPANY.NAME, 30 AS CONTACT.NAME, 30 AS CADDRESS, 20 AS CITY, 2 AS CSTATE, 5 AS CZIP 180 CUR.REC% = 0 190 FOR.EVER% = 1 193 PRINT "NOTE THAT AN ATTEMPT TO READ 'EMPTY' RECORDS OR" 196 PRINT "PAST EOF WILL CAUSE AN EXECUTION ERROR" 200 WHILE FOR.EVER% = 1 210 PRINT "CURRENT RECORD # ->";LOC(1) 220 INPUT "R - READ W - WRITE Q - QUIT ";MODE$ 230 PRINT 240 IF MODE$ = "Q" THEN GOTO 290 250 INPUT "ENTER R - RANDOM S - SEQUENTIAL ";TYPE$ 260 IF TYPE$ = "R" THEN GOSUB 1000 'RANDOM 270 IF TYPE$ = "S" THEN GOSUB 2000 'SEQUENTIAL 280 WEND 290 CLOSE #1 300 STOP 1000 REM RANDOM READS AND WRITES 1050 PRINT : INPUT "RECORD # ";CUR.REC% : PRINT 1100 IF MODE$ = "R" THEN GOTO 1400 1150 GOSUB 4000 'MAKE RECORD 1200 PUT #1,CUR.REC% 1250 PRINT CUR.REC% : PRINT 1300 GOTO 1600 1400 GET #1,CUR.REC% 1450 GOSUB 3000 'PRINT RECORD 1500 PRINT 1600 RETURN 2000 REM SEQUENTIAL READS AND WRITES 2050 PRINT : INPUT "# RECORDS";NUM.RECS% : PRINT 2100 FOR I = 1 TO NUM.RECS% 2150 CUR.REC% = CUR.REC% + 1 2200 IF MODE$ = "R" THEN GOTO 2500 2250 GOSUB 4000 'MAKE RECORD FOR WRITE 2300 PUT #1 2350 REM PRINT CUR.REC%; 2400 GOTO 2600 2500 GET #1 2550 GOSUB 3000 'PRINT RECORD READ 2600 NEXT I 2650 PRINT 2700 RETURN 3000 REM PRINT RECORD 3200 PRINT "CUSTOMER ID : ";LOC(1) 3220 PRINT "COMPANY NAME: ";COMPANY.NAME 3240 PRINT "CONTACT NAME: ";CONTACT.NAME 3300 PRINT "ADDRESS : ";CADDRESS 3320 PRINT "CITY : ";CITY;" STATE: ";CSTATE;" ZIP: ";CZIP 3340 PRINT:PRINT 3400 RETURN 4000 REM MAKE RECORD FOR WRITE 4100 PRINT 4120 INPUT "COMPANY NAME ";C 4150 LSET COMPANY.NAME = C 4160 INPUT "CONTACT NAME ";C 4200 LSET CONTACT.NAME = C 4250 INPUT "ADDRESS ";C 4260 LSET CADDRESS = C 4270 INPUT "CITY ";C 4275 LSET CITY = C 4280 INPUT "STATE ABBR. ";C 4285 LSET CSTATE = C 4290 INPUT "ZIP CODE ";C 4300 LSET CZIP = C 4350 RETURN