1 REM ===================================================== 2 REM DISK-ACCESS.BAS — C64 1541 Disk I/O Examples 3 REM Demonstrates: sequential files, relative files, 4 REM error channel, directory reading 5 REM ===================================================== 100 REM ===================== 101 REM SECTION 1: ERROR CHANNEL SUBROUTINE 102 REM ===================== 103 REM Call GOSUB 9000 after any disk operation 104 REM Sets EN=error number, EM$=message, ET=track, ES=sector 105 GOTO 200 9000 REM --- READ ERROR CHANNEL --- 9010 OPEN 15,8,15 9020 INPUT#15, EN, EM$, ET, ES 9030 CLOSE 15 9040 IF EN > 1 THEN PRINT "DISK ERROR" EN EM$ "T"ET "S"ES 9050 RETURN 200 REM ===================== 201 REM SECTION 2: WRITE SEQUENTIAL FILE 202 REM ===================== 210 PRINT "WRITING SEQUENTIAL FILE..." 220 OPEN 1, 8, 2, "MYDATA,S,W" 230 GOSUB 9000 : IF EN > 1 THEN GOTO 299 240 PRINT#1, "RECORD 1" 250 PRINT#1, "RECORD 2" 260 PRINT#1, 12345 270 PRINT#1, "LAST RECORD" 280 CLOSE 1 290 GOSUB 9000 299 PRINT "WRITE DONE." 300 REM ===================== 301 REM SECTION 3: READ SEQUENTIAL FILE 302 REM ===================== 310 PRINT "READING SEQUENTIAL FILE..." 320 OPEN 1, 8, 2, "MYDATA,S,R" 330 GOSUB 9000 : IF EN > 1 THEN GOTO 399 340 IF ST <> 0 THEN GOTO 380 : REM check status 350 INPUT#1, LINE$ 360 PRINT "READ: "; LINE$ 370 GOTO 340 380 CLOSE 1 390 GOSUB 9000 399 PRINT "READ DONE." 400 REM ===================== 401 REM SECTION 4: READ DIRECTORY 402 REM ===================== 410 PRINT "DIRECTORY:" 420 LOAD "$",8 430 REM (After LOAD, program is gone! Use OPEN method instead:) 440 REM Alternative: open $ and read it 450 OPEN 1, 8, 0, "$" 460 GET#1, A$, B$ : REM skip first two bytes (load address) 470 LOOP$="" 480 GET#1, A$ : IF ST<>0 THEN GOTO 520 490 IF A$ = CHR$(0) THEN GOTO 480 : REM skip nulls 500 IF ASC(A$+CHR$(0)) = 13 THEN PRINT LOOP$ : LOOP$="" : GOTO 480 510 LOOP$ = LOOP$ + A$ : GOTO 480 520 IF LOOP$ <> "" THEN PRINT LOOP$ 530 CLOSE 1 600 REM ===================== 601 REM SECTION 5: SEND DOS COMMANDS 602 REM ===================== 610 REM Scratch a file 620 PRINT "SCRATCHING OLD BACKUP..." 630 OPEN 15,8,15,"S0:BACKUP" 640 CLOSE 15 650 GOSUB 9000 660 REM Rename a file 670 PRINT "RENAMING FILE..." 680 OPEN 15,8,15,"R0:NEWNAME=MYDATA" 690 CLOSE 15 700 GOSUB 9000 710 REM Validate disk 720 PRINT "VALIDATING DISK..." 730 OPEN 15,8,15,"V0:" 740 CLOSE 15 750 GOSUB 9000 800 REM ===================== 801 REM SECTION 6: LOAD ML PROGRAM 802 REM ===================== 810 REM Load ML at its original address (SA=1) 820 LOAD "MLPROG",8,1 830 REM (after LOAD, program continues or use SYS) 840 END 900 REM ===================== 901 REM SUBROUTINE: WAIT FOR KEY 902 REM ===================== 910 PRINT "PRESS ANY KEY..." 920 GET K$ : IF K$="" THEN GOTO 920 930 RETURN