Exemple #1
0
        public void mount( )
        {
            FCB fcb = new FCB( );

            disk.mount( );

            // Mark all block as not used
            for (int i = 0; i < blockUsed.Length; i++)
            {
                blockUsed[i] = false;
            }

            // Mark directory block as used
            for (int i = 0; i < 8; i++)
            {
                if ((dpb.alloc0 & (1 << (7 - i))) != 0)
                {
                    blockUsed[i] = true;
                }
                if ((dpb.alloc1 & (1 << (7 - i))) != 0)
                {
                    blockUsed[8 + i] = true;
                }
            }

            files = new ArrayList();

            for (int i = 0; i <= dpb.drm; i++)
            {
                readFCB(i, fcb);

                if (fcb.getDeleted( ))
                {
                    directoryUsed[i] = false;
                    continue;
                }

                int user   = fcb.getUser( );
                int ext    = fcb.getEX( );
                int record = fcb.getRC( );

                directoryUsed[i] = true;

                // Skip not valid user
                if (user > 31)
                {
                    continue;
                }

                // Mark directory entry used
                directoryUsed[i] = true;


                String fileName = fcb.getFileName( );


                CpmFile file = searchFile(user, fileName);

                if (file == null)
                {
                    file = new CpmFile(dpb, user, fileName);
                    files.Add(file);
                }

                file.AddFCB(i);

                // Read block number from FCB
                for (int j = 0; j < getFCBBlockCount( ); j++)
                {
                    int b = getFCBBlock(fcb, j);
                    if (b == 0)
                    {
                        break;
                    }
                    blockUsed[b] = true;
                    file.AddBlock(b);
                }
            }
        }
Exemple #2
0
        public void mount( )
        {
            FCB fcb = new FCB( );

            disk.mount( );

            // Mark all block as not used
            for ( int i = 0; i < blockUsed.Length; i++ )
                blockUsed[i] = false;

            // Mark directory block as used
            for ( int i = 0; i < 8; i++ ) {
                if ( ( dpb.alloc0 & ( 1 << ( 7 - i ) ) ) != 0 )
                    blockUsed[i] = true;
                if ( ( dpb.alloc1 & ( 1 << ( 7 - i ) ) ) != 0 )
                    blockUsed[8 + i] = true;
            }

            files = new ArrayList();

            for ( int i = 0; i <= dpb.drm; i++ ) {
                readFCB(i, fcb);

                if ( fcb.getDeleted( ) ) {
                    directoryUsed[i] = false;
                    continue;
                }

                int user = fcb.getUser( );
                int ext = fcb.getEX( );
                int record = fcb.getRC( );

                directoryUsed[i] = true;

                // Skip not valid user
                if ( user > 31 ) {
                    continue;
                }

                // Mark directory entry used
                directoryUsed[i] = true;

                String fileName = fcb.getFileName( );

                CpmFile file = searchFile(user, fileName);

                if ( file == null ) {
                    file = new CpmFile(dpb, user, fileName);
                    files.Add(file);
                }

                file.AddFCB(i);

                // Read block number from FCB
                for ( int j = 0; j < getFCBBlockCount( ); j++ ) {

                    int b = getFCBBlock(fcb, j);
                    if ( b == 0 )
                        break;
                    blockUsed[b] = true;
                    file.AddBlock(b);
                }
            }
        }