SECTION "FSTEST"



GET "LIBHDR"
GET "RINGHDR"
GET "bcpl.fshdr"



LET start()  BE
$(
    LET bscb  =  0

    rcvopen( 20, 0, @bscb )

    $(  //  Repeat loop.
    
        WHILE  bscb = 0  DO  nextco()
        
        cocreate( main, 500, bscb )
        
        bscb  :=  0
    $)
    REPEAT
$)



AND main( cobase, bscb )  BE
$(
    LET vtp.i  =  makevtp( bscb )
    LET vtp.o  =  result2
    LET root   =  TABLE  #X8013, #X1630, #XDCE1, #X2E0D

    IF  vtp.i = 0  THEN  RETURN
    
    selectinput( vtp.i )
    selectoutput( vtp.o )
    
    writes( "****** Evening all!*N*N" )
    
    UNLESS  fslib.initialize( root )  DO
    $(
        writef( "Initialisation of FSLIB failed:  %N (%S)*N", result2, fs.fileserve )
        
        endread()
        
        RETURN
    $)

    writef( "Fileserver is *"%S*"*N*N", fs.fileserve )

    writes( "SSP Control Block is:  " )
    FOR  i = 0  TO  15  DO  writef( "%X2 ", 0 % (fs.sspcb + i) )
    writes( "*N*N" )

    FOR  i = 0  TO  10  DO
    $(
        LET puid  =  VEC 3
        LET buff  =  VEC 512/bytesperword
        
        retrieve( root, i, puid )
        
        writef( "Slot %I2:  %X4 %X4 %X4 %X4*N", i, puid!0, puid!1, puid!2, puid!3 )

        read( puid, buff, 512, (TABLE 0, 0) )

        FOR  i = 0  TO  511  DO
        $(
            LET ch  =  buff % i

            IF  i REM 8 = 0  THEN  newline()
            
            writef( "%X2 [%C]  ", ch, c( ch ) )
        $)
        
        writes( "*N*N" )
    $)

    writes( "*N*NClosing down ...*N" )

    endread()
$)



AND retrieve( a, b, c )  =  VALOF
$(
    IF  fs.retrieve( a, b, c )  THEN  RESULTIS  TRUE
    
    fs.explain.rc( result2 )

    RESULTIS  FALSE
$)



AND read( a, b, c, d )  =  VALOF
$(
    IF  fs.read( a, b, c, d )  THEN  RESULTIS  TRUE
    
    fs.explain.rc( result2 )

    RESULTIS  FALSE
$)



AND c( char )  =
    ( "................................ !*"#$%&'()**+,-./0123456789:;<=>?*
      *@ABCDEFGHIJKLMNOPQRSTUVWXYZ[]\^_`abcdefghijklmnopqrstuvwxyz{|}~."
    ) % ((char & #X7F) + 1)


