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