100 REM Test NadaNet File Server 2 110 REM MJM - 04/02/07 120 : 130 GOSUB 50000: REM Initialize File Server Definitions 140 : 200 PRINT CHR$ (21): REM 40-column screen 210 PRINT : PRINT "TEST.FSERVER2 running" 220 P$ = "testdir": REM Test directory 230 EH = 0: REM Use default error handling 240 : 250 REM Build HGR1 and HGR2 screens 260 BUF = 2 * 4096: REM $2000 270 HGR : HCOLOR= 3 280 HPLOT 0,0 TO 279,0 TO 279,191 TO 0,191 TO 0,0: REM Box 290 HGR2 300 HPLOT 0,0 TO 279,191: HPLOT 0,191 TO 279,0: REM "X" 310 : 320 REM Save 20KB of data 330 F$ = P$ + "/testbig" + IS$: REM File pathname 340 RQ$ = "bsave" + F$ + ",a" + STR$ (BUF) + ",l$5000": GOSUB 51000 350 : 360 HGR : HGR2 : REM Clear the screens 370 : 380 REM Read it back 390 RQ$ = "bload" + F$: GOSUB 51000 400 : 410 REM Verify the file data 420 TX = 12 * 4096 + 5 * 16 + 1: REM Show text $C051 430 H1 = 12 * 4096 + 5 * 16 + 4: REM Show HGR $C054 440 H2 = H1 + 1: REM Show HGR2 $C055 450 FOR I = 1 TO 100: REM Flip screens 100 times 460 X = PEEK (H2): REM Show page 2 470 FOR J = 1 TO 10: NEXT 480 X = PEEK (H1): REM Show page 1 490 FOR J = 1 TO 10: NEXT 500 NEXT I 510 : 520 X = PEEK (TX): REM Back to text screen 530 : 540 REM Test LOCK and UNLOCK 550 RQ$ = "lock" + F$: GOSUB 51000: REM LOCK the file 560 EH = 1 570 RQ$ = "delete" + F$: GOSUB 51000: REM FILE LOCKED expected 580 EH = 0 590 IF RC < > 10 THEN PRINT "*** Error: LOCK/DELETE error "RC 600 RQ$ = "unlock" + F$: GOSUB 51000: REM UNLOCK the file 610 RQ$ = "delete" + F$: GOSUB 51000: REM and really DELETE it. 620 : 630 RQ$ = "stats": GOSUB 51000: REM Get STATS 640 PRINT "Statistics:" 650 PRINT "Result code = ";:A = RADR:L = 1: GOSUB 790: PRINT 660 PRINT "File Server ID = ";:A = RADR + 1:L = 1: GOSUB 790: PRINT 670 PRINT "Totals:" 680 PRINT " Requests = ";:A = RADR + 2:L = 2: GOSUB 790: PRINT 690 PRINT " Errors = ";:A = RADR + 4:L = 2: GOSUB 790: PRINT 700 PRINT " Reads = ";:A = RADR + 6:L = 2: GOSUB 790: PRINT 710 PRINT " Read Bytes = ";:A = RADR + 8:L = 4: GOSUB 790: PRINT 720 PRINT " Writes = ";:A = RADR + 12:L = 2: GOSUB 790: PRINT 730 PRINT " Write Bytes = ";:A = RADR + 14:L = 4: GOSUB 790: PRINT 740 PRINT 750 : 760 PRINT "Test completed." 770 END 780 : 790 REM Print L-byte number at A 800 V = 0 810 FOR I = L - 1 TO 0 STEP - 1 820 V = V * 256 + PEEK (A + I) 830 NEXT 840 PRINT V; 850 RETURN 860 : 50000 REM ====== File Server definitions ====== 50010 ID = PEEK (3 * 256 + 12 * 16 + 12): REM My NadaNet ID ($3CC) 50020 ID$ = CHR$ (ID): REM My ID as CHR$ 50030 IS$ = STR$ (ID): REM My ID as STR$ 50040 FSRV = 16: REM Msg Class of File Server Requests 50050 RA = 2 * 256 + 6 * 16: REM Result Code address = $260 50060 : 50070 REM Install USR function to return address of param 50080 I = 3 * 256 + 11 * 16: REM USR code at $3B0 50090 POKE 12, INT (I / 256): POKE 11,I - PEEK (12) * 256: REM USR JMP 50100 READ A$: IF A$ < > "USR" GOTO 50100: REM Position to USR DATA 50110 READ V: IF V > - 1 THEN POKE I,V:I = I + 1: GOTO 50110 50120 DATA USR,160,2,177,131,72,136,177,131,168,104,76,242,226,-1 50130 RESTORE 50140 RETURN 50150 : 51000 REM ====== Invoke File Server ====== 51010 MS$ = ID$ + RQ$: REM Prefix ID 51020 POKE RA,127: REM Mark incomplete 51030 & PUTMSG(2,FSRV, LEN (MS$), USR (MS$)): REM Enqueue request 51040 FOR UNTIL = 0 TO 1 51050 & SERVE#():RC = PEEK (RA) 51060 UNTIL = (RC < > 127): NEXT : REM Await result 51070 REM RC = 129 means BRUN loaded code without error, now call it. 51080 IF RC = 129 THEN RC = 128: CALL PEEK (RA + 1) + 256 * PEEK (RA + 2) 51090 IF RC = 128 OR EH THEN RETURN : REM If OK or inline error handling 51100 PRINT "File server error "RC" for request:": PRINT "<"RQ$">" 51110 STOP