📄 hpi32.lst
字号:
676 1
677 1 ThisFile.bFileOpen=0;
678 1 ThisFile.FatSectorPointer=0;
679 1
680 1 cnum=GetFreeCusterNum32();
681 1 if(cnum<0x02)
682 1 return FALSE;
683 1
684 1 pBuffer[11]=0x10;
685 1 pBuffer[21]=(unsigned char)(cnum>>24);
686 1 pBuffer[20]=(unsigned char)(cnum>>16);
687 1 pBuffer[27]=(unsigned char)(cnum>>8);
688 1 pBuffer[26]=(unsigned char)(cnum);
689 1 pBuffer[28]=0;pBuffer[29]=0;pBuffer[30]=0;pBuffer[31]=0;
690 1 bstop=0;
691 1
692 1 NowCluster32=DirStartCluster32;
693 1 do
694 1 {
695 2 NowSector=FirstSectorofCluster32(NowCluster32);
696 2 ClusterPointer=NowCluster32;
697 2 for(sector=0;sector<DeviceInfo.BPB_SecPerClus;sector++)
698 2 {
699 3 if(!RBC_Read(NowSector+sector,1,DBUF))
700 3 return FALSE;
701 3 DirCount=0;bwrite=0;
702 3 for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
703 3 {
704 4 if(len==0)
705 4 {
706 5 if((DBUF[i]==0x00)||(DBUF[i]==0xE5))
707 5 {
708 6 for(j=0;j<32;j++)
709 6 DBUF[i+j]=*(pBuffer+j);
710 6 if(!RBC_Write(NowSector+sector,1,DBUF))
711 6 return FALSE;
712 6 bstop=1;
713 6 break;
714 6 }
715 5 }
716 4 else
717 4 {
718 5 if(DirCount==0)
719 5 InByte=i;
720 5 if(DBUF[i]==0xE5)
721 5 DirCount++;
722 5 else if(DBUF[i]==0x00)
723 5 {
724 6 DirCount++;
725 6 DBUF[i]=0xE5;
726 6 bwrite=1;
727 6 }
728 5 else
729 5 DirCount=0;
730 5
731 5 if((DirCount*32)>=(len+32))
732 5 {
733 6 for(j=0;j<len;j++)
734 6 DBUF[InByte+j]=*(pName+j);
735 6 for(j=0;j<32;j++)
736 6 DBUF[InByte+len+j]=*(pBuffer+j);
737 6 if(!RBC_Write(NowSector+sector,1,DBUF))
C51 COMPILER V7.06 HPI32 09/18/2004 01:30:05 PAGE 13
738 6 return FALSE;
739 6 bstop=1;
740 6 break;
741 6 }
742 5 }
743 4 }
744 3 if(bstop==1)break;
745 3 if((len!=0)&&(bwrite==1))
746 3 {
747 4 if(!RBC_Write(NowSector+sector,1,DBUF))
748 4 return FALSE;
749 4 }
750 3 }
751 2 if(bstop==1)break;
752 2
753 2 NowCluster32=GetNextClusterNum32(NowCluster32);
754 2 if(NowCluster32>DeviceInfo.TotCluster)
755 2 {
756 3 NowCluster32=CreateClusterLink32(ClusterPointer);
757 3 if(NowCluster32==0x00)
758 3 return FALSE;
759 3 NowSector=FirstSectorofCluster32(NowCluster32);
760 3 for(i=0;i<DeviceInfo.BPB_BytesPerSec;i++) DBUF[i]=0x00;
761 3 for(sector=0;sector<DeviceInfo.BPB_SecPerClus;sector++)
762 3 {
763 4 if(!RBC_Write(NowSector+sector,1,DBUF))
764 4 return FALSE;
765 4 }
766 3 }
767 2 }while(NowCluster32<=DeviceInfo.TotCluster);
768 1
769 1 if(NowCluster32>DeviceInfo.TotCluster)
770 1 return FALSE;
771 1 ////////////////////////////////////////////////////////////////
772 1 for(i=64;i<DeviceInfo.BPB_BytesPerSec;i++) DBUF[i]=0x00;
773 1
774 1 for(i=0;i<43;i++) DBUF[i]=0x20;
775 1
776 1 DBUF[0]=0x2e;
777 1 for(i=11;i<32;i++) DBUF[i]=pBuffer[i];
778 1
779 1 DBUF[32]=0x2e;DBUF[33]=0x2e;
780 1 for(i=43;i<64;i++) DBUF[i]=pBuffer[i-32];
781 1
782 1 if(DirStartCluster32==DeviceInfo.RootStartCluster) //Root Dir
783 1 {
784 2 DBUF[53]=0;DBUF[52]=0;DBUF[59]=0;DBUF[58]=0;
785 2 }
786 1 else
787 1 {
788 2 DBUF[53]=(unsigned char)(DirStartCluster32>>24);
789 2 DBUF[52]=(unsigned char)(DirStartCluster32>>16);
790 2 DBUF[59]=(unsigned char)(DirStartCluster32>>8);
791 2 DBUF[58]=(unsigned char)(DirStartCluster32);
792 2 }
793 1
794 1 NowSector=FirstSectorofCluster32(cnum);
795 1 if(!RBC_Write(NowSector,1,DBUF))
796 1 return FALSE;
797 1
798 1 DirStartCluster32=cnum;
799 1 // ThisFile.ClusterPointer=DirStartCluster32;
C51 COMPILER V7.06 HPI32 09/18/2004 01:30:05 PAGE 14
800 1 ThisFile.ClusterPointer=0;
801 1 return TRUE;
802 1 }
803
804 unsigned char DownDir32(unsigned char *pBuffer)
805 {
806 1 unsigned int i;
807 1 unsigned char j,bstop,sector;
808 1
809 1 if(!bFlags.bits.SLAVE_IS_ATTACHED)
810 1 return FALSE;
811 1
812 1 ThisFile.bFileOpen=0;
813 1 bstop=0;
814 1
815 1 NowCluster32=DirStartCluster32;
816 1 do
817 1 {
818 2 NowSector=FirstSectorofCluster32(NowCluster32);
819 2 for(sector=0;sector<DeviceInfo.BPB_SecPerClus;sector++)
820 2 {
821 3 if(!RBC_Read(NowSector+sector,1,DBUF))
822 3 return FALSE;
823 3 for(i=0;i<DeviceInfo.BPB_BytesPerSec;i=i+32)
824 3 {
825 4 if(DBUF[i]==0x00)
826 4 return FALSE;
827 4 j=0;
828 4 while(DBUF[i+j]==*(pBuffer+j))
829 4 {
830 5 j=j+1;
831 5 if(j>10)
832 5 break;
833 5 }
834 4 if(j>10&&(DBUF[i+11]&0x10))
835 4 {bstop=1;break;}
836 4 }
837 3 if(bstop==1)break;
838 3 }
839 2 if(bstop==1)break;
840 2 NowCluster32=GetNextClusterNum32(NowCluster32);
841 2 }while(NowCluster32<=DeviceInfo.TotCluster);
842 1
843 1 if(NowCluster32>DeviceInfo.TotCluster)
844 1 return FALSE;
845 1
846 1 DirStartCluster32=LSwapINT32(DBUF[i+26],DBUF[i+27],DBUF[i+20],DBUF[i+21]);
847 1 // ThisFile.ClusterPointer=DirStartCluster32;
848 1 ThisFile.ClusterPointer=0;
849 1 return TRUE;
850 1 }
851
852 unsigned char UpDir32()
853 {
854 1 if(!bFlags.bits.SLAVE_IS_ATTACHED)
855 1 return FALSE;
856 1 if(DirStartCluster32==DeviceInfo.RootStartCluster) //Root Dir
857 1 return TRUE;
858 1
859 1 ThisFile.bFileOpen=0;
860 1
861 1 NowSector=FirstSectorofCluster32(DirStartCluster32);
C51 COMPILER V7.06 HPI32 09/18/2004 01:30:05 PAGE 15
862 1 if(!RBC_Read(NowSector,1,DBUF))
863 1 return FALSE;
864 1 if(DBUF[32]!=0x2e&&DBUF[33]!=0x2e) //..
865 1 return FALSE;
866 1
867 1 DirStartCluster32=LSwapINT32(DBUF[58],DBUF[59],DBUF[52],DBUF[53]);
868 1 if(DirStartCluster32==0) //Root Dir
869 1 DirStartCluster32=DeviceInfo.RootStartCluster;
870 1 // ThisFile.ClusterPointer=DirStartCluster32;
871 1 ThisFile.ClusterPointer=0;
872 1 return TRUE;
873 1 }
874
875 unsigned char UpRootDir32()
876 {
877 1 if(!bFlags.bits.SLAVE_IS_ATTACHED)
878 1 return FALSE;
879 1
880 1 ThisFile.bFileOpen=0;
881 1 DirStartCluster32=DeviceInfo.RootStartCluster; //Root Dir
882 1
883 1 return TRUE;
884 1 }
885
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 8529 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 8 6
PDATA SIZE = ---- ----
DATA SIZE = ---- 128
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -