コード例 #1
0
ファイル: FAT.c プロジェクト: datsjon13/ECE470
// writes a dir entry to disk
byte write_dir_entry(dir_entry_t* de, byte* buf)
{
  dword de_sec_offset;
  dword de_sec_start;
  byte b;
  word cluster_rev;
  dword filesize_rev;
  
  de_sec_offset = de->entry_addr % 512;
  de_sec_start = de->entry_addr - de_sec_offset;
  b = read_block(buf, de_sec_start);
  
  memreverse((void*)&(de->first_cluster), &cluster_rev, 2);
  memreverse((void*)&(de->filesize), &filesize_rev, 4);
  
  // enter dir_entry info into buffer (based on http://en.wikipedia.org/wiki/8.3_filename)
  memmove(buf+de_sec_offset, de->filename, 11);
  memmove(buf+de_sec_offset+0x0b, &(de->attributes), 1);
  memmove(buf+de_sec_offset+0x0c, &(de->unused_attr), 14);
  memmove(buf+de_sec_offset+0x1a, &cluster_rev, 2);
  memmove(buf+de_sec_offset+0x1c, &filesize_rev, 4);
  
  if(!write_block(buf, de_sec_start))
  {
    #if DEBUG
    pmsg("problem writing direntry!\r\n");
    #endif
    return 0;
  }
  
  return 1;
}
コード例 #2
0
ファイル: FAT.c プロジェクト: datsjon13/ECE470
// sets FAT[_cluster_] to 0x00 and returns FAT[_cluster_]'s original value
word clear_FAT(byte* buf, word cluster)
{
  dword abs_addr;
  dword sec_start;
  word ori_cluster;

  abs_addr = prtn.FAT_addr + cluster*2;
  sec_start = abs_addr - (abs_addr % 512);
  if(!read_block(buf, sec_start))
  { 
    #if DEBUG
    pmsg("Problem clearing FAT!\r\n");
    #endif
    return 0;
  }
  
  memreverse(buf + (abs_addr % 512), &ori_cluster, 2);
  
  memmove(buf + (abs_addr % 512), (word)0, 2);
  if (!write_block(buf, sec_start))
  {
    #if DEBUG
    pmsg("Problem clearing FAT!\r\n");
    #endif
    return 0;
  }
  
  return ori_cluster;
}
コード例 #3
0
ファイル: FAT.c プロジェクト: datsjon13/ECE470
// make FAT[_cluster_] point to cluster _value_
byte update_FAT(byte* buf, word cluster, word value)
{
  dword abs_addr;
  dword sec_start;
  word value_rev;
  
  memreverse(&value, &value_rev, 2);
  abs_addr = prtn.FAT_addr + cluster*2;
  sec_start = abs_addr - (abs_addr % 512);
  if(!read_block(buf, sec_start))
  { 
    #if DEBUG
    pmsg("Problem updating FAT!\r\n");
    #endif
    return 0;
  }
  memmove(buf + (abs_addr % 512), &value_rev, 2);
  if (!write_block(buf, sec_start))
  {
    #if DEBUG
    pmsg("Problem updating FAT!\r\n");
    #endif
    return 0;
  }
  
  return 1;
}
コード例 #4
0
ファイル: HdrImage.cpp プロジェクト: vshymanskyy/O_oRT
void
HdrImage::FlipX()
{
	for (int y = 0; y < mHeight; y++) {
		memreverse(mData+y*mWidth, mWidth, sizeof(rgba));
	}
}
コード例 #5
0
ファイル: FAT.c プロジェクト: datsjon13/ECE470
byte getFile(dir_entry_t* de, byte* buf, char* filename, byte length)
{
  int i,j;
  word cluster;
  dword file_size;
  byte b;
  char filename_upper[12];
  
  for (i = 0; i < prtn.root_dir_size/512; i++)
  {
    b = read_block(buf, prtn.root_dir_addr + i*512);
    for(j = 0; j < 16; j++)
    {
      if (*(buf + j*32)==0 || *(buf + j*32)==0x2e || *(buf + j*32)==0xe5)
      { continue; }
      
      strncpy(filename_upper, (char*)(buf+j*32), 11);
      filename_upper[11] = '\0';
      
      if(strcmp(filename, str_toupper(filename_upper)) == 0)
      {
        #if DEBUG
        pmsg("found file!\r\n");
        #endif
        
        memreverse(buf + j*32 + 0x1c, &file_size, 4);
        memreverse(buf + j*32 + 0x1a, &cluster, 2);
        
        #if DEBUG
        pmsg("cluster numer:"); disword_dec(cluster); pmsg("\r\n");
        #endif
        
        // fill in dir_entry
        memmove(de->filename, filename, length);
        de->attributes = *(buf + j*32 + 0x0b);
        memmove(de->unused_attr, buf + j*32 + 0x0c, 14);
        de->filesize = file_size;
        de->entry_addr = prtn.root_dir_addr + i*512 + j*32;
        de->first_cluster = cluster;
        
        return 1;                        
      }
    }
  }
  
  return 0;
}
コード例 #6
0
ファイル: FAT.c プロジェクト: datsjon13/ECE470
word next_clus(word clus, byte *buf)
{
  dword addr;
  word next;
  
  addr = prtn.FAT_addr + 2*clus;
  if(!read_block(buf, addr - addr % 512))
  { 
    #if DEBUG
    pmsg("next_clus failed when reading block!\r\n");
    #endif
    return 0;
  }
  memreverse(buf + addr%512, &next, 2);
  
  return next;
}
コード例 #7
0
ファイル: HdrImage.cpp プロジェクト: vshymanskyy/O_oRT
void
HdrImage::FlipXY()
{
	memreverse(mData, mWidth*mHeight, sizeof(rgba));
}
コード例 #8
0
ファイル: memreverse.c プロジェクト: yoanlcq/ideas
int main(int argc, char *argv[]) {
    char str[8] = "Hello !";
    memreverse(str, 2, 3);
    puts(str);
    return 0;
}