亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? leafpak.c

?? leafpak: 一個文件打包器的源代碼
?? C
字號:
/* * leafpak.c * decode leaf archive file. * 10/06/1997 by TF <tf@imou.to> *//* * Changes: * 10/31/2000 TAKAHASHI Kaoru <kaoru@kaisei.org> *            Fixed a probrem when fopen(,"w") failed. * 10/17/1997 FUJIWARA Teruyoshi <tf@imou.to> *            Add auto key calculation. *            Support maxxdata.pak in 'Saorin to Issho!!'*/#include <stdio.h>#include <stdlib.h>#include <string.h>#include "leafpak.h"static void check_magic(FILE *);static int get_file_num(FILE *);static void set_type(LEAFPACK *);static void init_leafpack(LEAFPACK *);static void extract_table(LEAFPACK *);static void regularize_name(char *);static void guess_key(LEAFPACK *);#ifdef DEBUGstatic void verify_key(LEAFPACK *);#endif/* * Open archive file and extact file table. */LEAFPACK *leafpack_open(const char *filename){  LEAFPACK *lp = NULL;    lp = (LEAFPACK *)malloc(sizeof(LEAFPACK));  if (lp == NULL) {    fprintf(stderr, "leafpack_open: Memory allocation error.\n");    return NULL;  }    lp->fp = fopen(filename, "r");  if (lp->fp == NULL) {    fprintf(stderr, "leafpack_open: Can't open %s\n", filename);    return NULL;  }    check_magic(lp->fp);  lp->file_num = get_file_num(lp->fp);  set_type(lp);  if (lp->type == UNKNOWN) {    guess_key(lp);  }  init_leafpack(lp);  extract_table(lp);    return lp;}/* * Free allocated memories and close file. */void leafpack_close(LEAFPACK *lp){  int i;  if (lp->fp != NULL) {    fclose(lp->fp);  }  lp->fp = NULL;  for (i = 0; i < lp->file_num; i++) {    free(lp->name[i]);  }    free(lp->name);  free(lp->pos);  free(lp->len);  free(lp->nextpos);  free(lp);}/* * Extract all archive into current directory. Archive file * shuold already be opend. */void extract_all(LEAFPACK *lp){  int i, k;  int val, pos;  FILE *fp;  for (i = 0; i < lp->file_num; i++) {    fp = fopen(lp->name[i], "w");    if (fp == NULL) {      printf("Can't write %s. skip\n", lp->name[i]);    } else {      printf("extracting %s...", lp->name[i]);      fflush(stdout);      pos = lp->pos[i];      fseek(lp->fp, (long)pos, SEEK_SET);      k = 0;      while (pos != lp->nextpos[i]) {	val = (fgetc(lp->fp) - lp->key[k]) & 0xff;	k = (++k) % KEY_LEN; 	fputc(val, fp);	pos++;      }      fclose(fp);      printf("done.\n");    }  }  printf("\nAll files are extracted.\n");}/* * Extract a file specified by name from archive. Archive file * shuold already be opened. */int leafpack_extract_file(LEAFPACK *lp, const char *file){  int i = 0, k = 0;  int val, pos;  FILE *fp;  /* lookup table */  while (i < lp->file_num) {    if (!strcasecmp(file, lp->name[i])) {      break;    }    i++;  }    if (i == lp->file_num) {    printf("%s isn't included in this archive.\n", file);    return 1;  }  printf("extracting %s...", file);  fflush(stdout);  fp = fopen(file, "w");  if ( fp == NULL ) {    printf("Can't write %s.\n", file);    return -1;  }  pos = lp->pos[i];  fseek(lp->fp, (long)pos, SEEK_SET);  while (pos != lp->nextpos[i]) {    val = (fgetc(lp->fp) - lp->key[k]) & 0xff;    k = (++k) % KEY_LEN;     fputc(val, fp);    pos++;  }  fclose(fp);  printf("done.\n");  return 0;}/* * a char array 'buf' should have size more than 9.*/void leafpack_read_magic(LEAFPACK *lp, const char *file, char *buf){  int i = 0;  int pos;  /* lookup table */  while (i < lp->file_num) {    if (!strcasecmp(file, lp->name[i])) {      break;    }    i++;  }    if (i == lp->file_num) {    printf("%s isn't included in archive.\n", file);    buf[0] = '\0';    return;  }  pos = lp->pos[i];  fseek(lp->fp, (long)pos, SEEK_SET);  for (i = 0; i < 8; i++) {    buf[i] = (fgetc(lp->fp) - lp->key[i]) & 0xff;   }  buf[8] =  '\0';  return;}int *leafpack_extract_file_to_data(LEAFPACK *lp, const char *file, int *size){  int i = 0, j = 0, k = 0;  int pos;  int *res;  /* lookup table */  while (i < lp->file_num) {    if (!strcasecmp(file, lp->name[i])) {      break;    }    i++;  }    if (i == lp->file_num) {    printf("%s isn't included in archive.\n", file);    return NULL;  }  *size = lp->len[i];  printf("extracting %s...", file);  fflush(stdout);  res = (int *)calloc(lp->len[i], sizeof(int));  pos = lp->pos[i];  fseek(lp->fp, (long)pos, SEEK_SET);  while (pos != lp->nextpos[i]) {    res[j] = (fgetc(lp->fp) - lp->key[k]) & 0xff;    k = (++k) % KEY_LEN;     pos++;    j++;  }  printf("done.\n");  return res;}/* * PRIVATE FUNCTIONS*/static void check_magic(FILE *fp){  int i;  char buf[9];  for (i = 0; i < 8; i++) {    buf[i] = fgetc(fp);  }  buf[8] = '\0';  if (strcmp(buf, "LEAFPACK")) {    fprintf(stderr, "This file isn't a Leaf archive file.\n");    exit(1);  }}static int get_file_num(FILE *fp){  int u, l;    l = fgetc(fp);  u = fgetc(fp);  return u << 8 | l;}/* * Type is set by the number of files included in an archive file. * (And this type is used to select an encryption key!) * Then we can't extract an unkown archive. *//* * 10/16/1997: Add auto key calculation feature(experimental). */static void set_type(LEAFPACK *lp){  guess_key(lp);  if (lp->file_num == 0x0248 || lp->file_num == 0x03e1) {    lp->type = TOHEART;    return;  } else if (lp->file_num == 0x01fb) {    lp->type = KIZUWIN;    return;  } else if (lp->file_num == 0x0193) {    lp->type = SIZUWIN;    return;  } else if (lp->file_num == 0x0072) {    lp->type = SAORIN;  } else {    lp->type = UNKNOWN;  }  #ifdef DEBUG  verify_key(lp);#endif}#ifdef DEBUGstatic void verify_key(LEAFPACK *lp){  int i;  int result = TRUE;  if (lp->type == UNKNOWN || lp->type == SAORIN) {    return;  }  for (i = 0; i < KEY_LEN; i++) {    if (key_const[lp->type][i] != lp->key[i]) {      fprintf(stderr, "Warning: An auto-calculated key is bad.\n");      result = FALSE;      break;    }  }  if (result == FALSE) {    for (i = 0; i < KEY_LEN; i++) {      lp->key[i] = key_const[lp->type][i];    }  }}#endifstatic void init_leafpack(LEAFPACK *lp){  int i;  /* initialize a filename table */  lp->name = (char **)calloc(lp->file_num, sizeof(char *));  for (i = 0; i < lp->file_num; i++) {    lp->name[i] = (char *)calloc(13, sizeof(char));  }  /* initialize table entories */  lp->pos = (int *)calloc(lp->file_num, sizeof(int));  lp->len = (int *)calloc(lp->file_num, sizeof(int));  lp->nextpos = (int *)calloc(lp->file_num, sizeof(int));}static void extract_table(LEAFPACK *lp){  int i, j;  int k = 0;  int b[4];  /* set a position to the head of the header part */  fseek(lp->fp, (long)(-24 * lp->file_num), SEEK_END);  for (i = 0; i < lp->file_num; i++) {    /* get filename */    for (j = 0; j < 12; j++) {      lp->name[i][j] = (fgetc(lp->fp) - lp->key[k]) & 0xff;      k = (++k) % KEY_LEN;     }    regularize_name(lp->name[i]);    /* a position in the archive file */    for (j = 0; j < 4; j++) {      b[j] = (fgetc(lp->fp) - lp->key[k]) & 0xff;      k = (++k) % KEY_LEN;     }    lp->pos[i] = (b[3] << 24) | (b[2] << 16) | (b[1] << 8) | b[0];    /* file length */    for (j = 0; j < 4; j++) {      b[j] = (fgetc(lp->fp) - lp->key[k]) & 0xff;      k = (++k) % KEY_LEN;     }    lp->len[i] = (b[3] << 24) | (b[2] << 16) | (b[1] << 8) | b[0];        /* the head of the next file */    for (j = 0; j < 4; j++) {      b[j] = (fgetc(lp->fp) - lp->key[k]) & 0xff;      k = (++k) % KEY_LEN;     }    lp->nextpos[i] = (b[3] << 24) | (b[2] << 16) | (b[1] << 8) | b[0];  }}static void regularize_name(char *name){  char buf[12];  int i = 0;  strcpy(buf, name);  while (i < 8 && buf[i] != 0x20) {    name[i] = buf[i];    i++;  }  name[i++] = '.';  /* file extention */  name[i++] = buf[8];  name[i++] = buf[9];  name[i++] = buf[10];  name[i] = '\0';}void print_type(LEAFPACK *lp){  printf("Archive file: ");  switch (lp->type) {  case SIZUWIN:    printf("SHIZUKU for Windows95\n\n");    break;  case KIZUWIN:    printf("KIZUATO for Windows95\n\n");    break;  case TOHEART:    printf("To Heart\n\n");    break;  case SAORIN:    printf("Saorin to Issho!! (maxxdata.pak)\n\n");    break;  default:    printf("Unknown\n\n");  }}void print_table(LEAFPACK *lp, int verbose){  int i;  if (verbose == TRUE) {    printf("Key: ");    for (i = 0; i < KEY_LEN; i++) {      printf("%02x ", lp->key[i]);    }    printf("\n\n");  }    if (verbose == TRUE) {      printf("Filename      Position  Length   Next\n");    printf("------------  --------  -------  --------\n");  } else {    printf("Filename       Length\n");    printf("------------   -------\n");  }  for (i = 0; i < lp->file_num; i++) {    printf("%12s  ", lp->name[i]);    if (verbose == TRUE) {      printf("%08x ", lp->pos[i]);    }    printf("%8d  ", lp->len[i]);    if (verbose == TRUE) {      printf("%08x", lp->nextpos[i]);    }    printf("\n");  }  printf("%d files.\n", lp->file_num);}/* * Calculate key using length of archive data. * To use this function, the archive must include at least 3 files. */static void guess_key(LEAFPACK *lp){  int buf[72];  int i;  /* find the top of table */  fseek(lp->fp, (long)(-24 * lp->file_num), SEEK_END);  /* read 3 table entries, needed to calculate keys. */  for (i = 0; i < 72; i++) {    buf[i] = fgetc(lp->fp);  }    /* zero */  lp->key[0] = buf[11];    /* 1st position, (maybe :-)) constant */  lp->key[1] = (buf[12] - 0x0a) & 0xff;  lp->key[2] = buf[13];  lp->key[3] = buf[14];  lp->key[4] = buf[15];  /* 2nd position, from 1st next position */  lp->key[5] = (buf[38] -  buf[22] + lp->key[0]) & 0xff;  lp->key[6] = (buf[39] -  buf[23] + lp->key[1]) & 0xff;    /* 3rd position, from 2nd next position */  lp->key[7] = (buf[62] - buf[46] + lp->key[2]) & 0xff;  lp->key[8] = (buf[63] - buf[47] + lp->key[3]) & 0xff;  /* 1st next position, from 2nd position */  lp->key[9] = (buf[20] - buf[36] + lp->key[3]) & 0xff;  lp->key[10] = (buf[21] - buf[37] + lp->key[4]) & 0xff;}/* end of file */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久亚洲综合av| 欧美主播一区二区三区美女| 精品美女被调教视频大全网站| 日韩不卡一区二区三区| 欧美福利视频一区| 日韩av电影免费观看高清完整版在线观看| 欧美福利视频一区| 看片的网站亚洲| 国产色综合久久| 99久精品国产| 午夜精品福利在线| 日韩午夜三级在线| 国产精品99久久久久久有的能看| 国产精品久久久久久一区二区三区| 91影视在线播放| 日韩电影一二三区| 国产欧美精品一区二区色综合朱莉| 奇米色一区二区| 国产欧美日韩在线视频| 日本福利一区二区| 麻豆国产精品一区二区三区| 国产精品视频一二三区| 欧美日韩精品免费观看视频 | 久久99久久精品| 国产三级精品视频| 欧美日韩一级黄| 国产精品一区二区三区乱码| 亚洲伦理在线精品| 日韩精品在线一区| 色欧美乱欧美15图片| 麻豆成人久久精品二区三区小说| 国产精品久久久久久久第一福利| 欧美精品亚洲二区| 播五月开心婷婷综合| 午夜精品成人在线视频| 国产精品美女www爽爽爽| 成人黄动漫网站免费app| 日韩国产欧美三级| 日韩一区有码在线| 日韩欧美中文字幕精品| 91久久线看在观草草青青| 精品一区精品二区高清| 亚洲线精品一区二区三区八戒| 国产色综合久久| 欧美一二三区在线| 一本色道久久加勒比精品| 国产乱国产乱300精品| 日本成人在线电影网| 一区二区三区在线播放| 国产精品丝袜黑色高跟| 久久夜色精品一区| 欧美一区二区不卡视频| 色成人在线视频| 波多野结衣91| 丰满少妇在线播放bd日韩电影| 午夜精品久久久久久久久久| 综合久久久久久| 欧美激情艳妇裸体舞| 日韩三级视频在线看| 欧美电影一区二区| 欧美日韩午夜在线视频| 色琪琪一区二区三区亚洲区| 99精品久久只有精品| 成人激情免费电影网址| 国产成人精品综合在线观看 | 黑人巨大精品欧美黑白配亚洲| 亚洲国产精品久久一线不卡| 亚洲精品视频免费看| 亚洲图片另类小说| 亚洲精选免费视频| 亚洲乱码精品一二三四区日韩在线| 国产午夜亚洲精品羞羞网站| 久久久亚洲午夜电影| 久久久久久久免费视频了| 久久久精品tv| 国产欧美精品区一区二区三区| 久久伊人中文字幕| www日韩大片| 日韩影院在线观看| 欧美mv日韩mv国产网站| 国产精品一区二区男女羞羞无遮挡| 欧美一区二区三区影视| 99热在这里有精品免费| 成人av电影免费在线播放| 99久久精品久久久久久清纯| 99热99精品| 色悠悠亚洲一区二区| 欧美日韩国产不卡| 日韩三级精品电影久久久 | 国产精品传媒在线| 亚洲欧美成aⅴ人在线观看| 伊人开心综合网| 亚洲一卡二卡三卡四卡 | 欧美日韩国产免费| 日韩一区二区三区四区五区六区| 日韩亚洲国产中文字幕欧美| 久久综合久色欧美综合狠狠| 国产午夜亚洲精品午夜鲁丝片 | 日韩精品在线一区| 91美女在线视频| 欧美日韩二区三区| 精品福利一二区| 国产精品久久久久久久久免费相片 | 国产成人福利片| 91免费版在线| 91精品国产综合久久香蕉麻豆 | 亚洲午夜视频在线观看| 蜜臀av性久久久久蜜臀aⅴ四虎| 国模大尺度一区二区三区| 成人午夜电影久久影院| 欧美视频日韩视频在线观看| 精品国产伦一区二区三区观看方式 | 蜜桃av一区二区在线观看| 国产成人啪午夜精品网站男同| 成人a级免费电影| 69av一区二区三区| 国产精品久久久久久久浪潮网站| 亚洲综合图片区| 国产揄拍国内精品对白| 91久久精品一区二区| 久久综合色天天久久综合图片| 国产精品不卡一区二区三区| 无码av免费一区二区三区试看| 国产一区在线精品| 欧美视频在线不卡| 国产午夜精品在线观看| 偷拍亚洲欧洲综合| 成人18视频在线播放| 欧美一级二级在线观看| 亚洲精品v日韩精品| 国精品**一区二区三区在线蜜桃| 日本道免费精品一区二区三区| 精品电影一区二区| 香蕉久久夜色精品国产使用方法| 国产成人精品一区二| 欧美一级专区免费大片| 亚洲人精品午夜| 国产精品一品二品| 欧美一区二区三区性视频| 亚洲一区在线观看免费| 成人免费三级在线| 26uuu欧美| 精品国免费一区二区三区| 免费在线成人网| 精品国产乱码久久久久久久| 日韩欧美电影一区| 亚洲国产精品一区二区www在线| 床上的激情91.| 久久综合九色综合久久久精品综合| 一区二区三区精品| 91麻豆免费观看| 国产精品午夜在线观看| 国产一区二区三区日韩| 欧美成人在线直播| 麻豆91精品视频| 欧美男同性恋视频网站| 亚洲国产sm捆绑调教视频 | 一本色道综合亚洲| 国产精品夫妻自拍| av在线播放不卡| 国产亚洲美州欧州综合国| 久久99久国产精品黄毛片色诱| 制服视频三区第一页精品| 视频一区国产视频| 69av一区二区三区| 日本视频免费一区| 欧美一级片免费看| 精品在线一区二区| 欧美精品一区二区三区视频| 亚洲午夜av在线| 一区二区三区产品免费精品久久75| 精品电影一区二区| 91搞黄在线观看| 精品一区二区三区的国产在线播放| 91精品国产品国语在线不卡| 亚洲国产精品影院| 欧美日韩不卡在线| 日本人妖一区二区| 久久亚洲精精品中文字幕早川悠里| 久久电影网站中文字幕| 久久这里只有精品首页| 高清国产一区二区| 中文字幕一区二区三区在线不卡| 波波电影院一区二区三区| 一区二区日韩av| 在线不卡a资源高清| 麻豆一区二区三| 91精品国产91久久久久久一区二区 | 国产专区综合网| 国产欧美一区二区精品性色| av电影在线不卡| 亚洲国产日韩综合久久精品| 欧美区视频在线观看| 久久国产欧美日韩精品| 久久99精品国产| 色综合久久久久综合99| 欧美性xxxxxx少妇| 久久av老司机精品网站导航| 久久精品一区四区| 欧美性受xxxx黑人xyx性爽|