📄 main.cpp
字号:
#include <iostream>
#include <sys/stat.h>
#include "zlib.h"
#include "bitmap.h"
#include <windows.h>
#include <wincon.h>
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <NB30.H>//for NetBios command
#define MAX_HOSTMAC 30
using namespace std;
typedef struct _ASTAT_ {
ADAPTER_STATUS adapt;
NAME_BUFFER NameBuff[ 30 ];
}ASTAT,*PASTAT;
ASTAT Adapter;//定义LAN适配器
unsigned char srcHostmac[MAX_HOSTMAC];//授权的MAC,
////////////////////////////////////////////////////////////
// 判断目前的HOST是否是授权的 //
// MAC HOST //
////////////////////////////////////////////////////////////
BOOL IsAcchost()
{
NCB Ncb;
UCHAR uRetCode;
LANA_ENUM lenum;//目前LAN中的适配器数目
int i;
unsigned char curHostmac[MAX_HOSTMAC];//本机的MAC
sprintf((char *)curHostmac,"0");
sprintf((char *)srcHostmac,"00-09-6B-08-1E-56");//add accredited mac
memset( &Ncb, 0, sizeof(Ncb) );
Ncb.ncb_command = NCBENUM;
Ncb.ncb_buffer = (UCHAR *)&lenum;
Ncb.ncb_length = sizeof(lenum);
uRetCode = Netbios( &Ncb );//枚举所有适配器
for(i=0; i < lenum.length ;i++) {
if(lenum.lana[i]!=0)
continue;
memset( &Ncb, 0, sizeof(Ncb) );
Ncb.ncb_command = NCBRESET;
Ncb.ncb_lana_num = lenum.lana[i];
uRetCode = Netbios( &Ncb );
memset( &Ncb, 0, sizeof (Ncb) );
Ncb.ncb_command = NCBASTAT;
Ncb.ncb_lana_num = lenum.lana[i];
strcpy( (char*)Ncb.ncb_callname, "* " );
Ncb.ncb_buffer = (unsigned char *) &Adapter;
Ncb.ncb_length = sizeof(Adapter);
uRetCode = Netbios( &Ncb );//获取MAC信息
printf( "The NCBASTAT on LANA %d return code is: 0x%x \n",lenum.lana[i], uRetCode );
if( uRetCode == 0 ) {
printf(
"The Ethernet Number on LANA %d is: %02X-%02X-%02X-%02X-%02X-%02X\n",
lenum.lana[i],
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5]
);//打印目前的MAC信息
sprintf((char *)curHostmac,
"%02X-%02X-%02X-%02X-%02X-%02X",
Adapter.adapt.adapter_address[0],
Adapter.adapt.adapter_address[1],
Adapter.adapt.adapter_address[2],
Adapter.adapt.adapter_address[3],
Adapter.adapt.adapter_address[4],
Adapter.adapt.adapter_address[5]
);//得到目前的MAC
if(strcmp((char *)curHostmac,(char *)srcHostmac)==0)
{
printf("the host is accredited!!\n");
return TRUE;
}
else
{
printf("the host is not accredited!!\n");
// return FALSE;
return TRUE;
}
}
}
}
//END IsAcchost
void Error(const char *txt) {
printf("ERROR: %s\n", txt);
exit(1);
}
void Usage(void) {
puts("Usage: bmp2icon file[.bmp]");
exit(1);
}
int ZEXPORT my_compress (Bytef *dest, uLongf *destLen,
const Bytef *source, uLong sourceLen, int level)
{
z_stream stream;
int err;
stream.next_in = (Bytef*)source;
stream.avail_in = (uInt)sourceLen;
#ifdef MAXSEG_64K
/* Check for source > 64K on 16-bit machine: */
if ((uLong)stream.avail_in != sourceLen) return Z_BUF_ERROR;
#endif
stream.next_out = dest;
stream.avail_out = (uInt)*destLen;
if ((uLong)stream.avail_out != *destLen) return Z_BUF_ERROR;
stream.zalloc = (alloc_func)0;
stream.zfree = (free_func)0;
stream.opaque = (voidpf)0;
// err = deflateInit(&stream, level);
err = deflateInit2(&stream, level, Z_DEFLATED, 11, MAX_MEM_LEVEL,
Z_DEFAULT_STRATEGY);
if (err != Z_OK) return err;
err = deflate(&stream, Z_FINISH);
if (err != Z_STREAM_END) {
deflateEnd(&stream);
return err == Z_OK ? Z_BUF_ERROR : err;
}
*destLen = stream.total_out;
err = deflateEnd(&stream);
return err;
}
void print_icon8(FILE *fout, BYTE *icon, size_t len, const char *name, int s=1)
{
size_t i,j;
size_t w = ((((WORD)icon[0])<<8)+icon[1])*s;
fprintf(fout, "const u8 %s[] = \n{\n", name);
for (i=0; i<8&&i<len; i++)
{
//fprintf(fout, "0x%.2x,", icon[i]);
}
//fprintf(fout, "\n");
while (i<len)
{
for (j=0; j<w&&i<len; j++,i++)
{
fprintf(fout, "0x%.2x,", icon[i]);
}
fprintf(fout, "\n");
}
fseek(fout, -3, SEEK_CUR);
fprintf(fout, "\n};\n");
}
void outicon8(FILE *fout, bitmap &bmp)
{
BYTE *picon;
size_t len = 0;
len = bmp.icon_size(bitmap::ICON_8BIT);
picon = new BYTE[len];
if (bmp.bmp_to_icon(picon, len))
{
fprintf(fout, "//Normal Image: size = %d\n", len);
print_icon8(fout, picon, len, "icon8");
/*
unsigned long buflen = (len-8+12)*1.1;
BYTE *pbuf = new BYTE[buflen+10];
if (my_compress(pbuf+10, &buflen, picon+8, len-8, 9) == Z_OK)
{
memcpy(pbuf, picon, 8);
pbuf[4] = 0x80;
pbuf[8] = (buflen>>8)&0xff;
pbuf[9] = (buflen)&0xff;
fprintf(fout, "//Compressed Image: size = %d\n", buflen+10);
fprintf(fout, "//Compress ratio: %.2f%%\n", (float)(buflen+10)*100/len);
print_icon8(fout, pbuf, buflen+10, "icon8");
}
else
{
cout << "压缩数据失败.\n";
}
delete pbuf; */
}
else
{
cout << "转换ICON8不成功:" << bmp.error_msg() << endl;
}
delete picon;
}
void print_icon16(FILE *fout, BYTE *icon, size_t len, const char *name)
{
size_t i,j;
size_t width = (((WORD)icon[0])<<8)+icon[1];
WORD w;
fprintf(fout, "const unsigned char %s[] = \n{\n", name);
for (i=0; i<8&&i<len; i+=2)
{
// w = (((WORD)icon[i])<<8)+icon[i+1];
// fprintf(fout, "0x%.4x,", w);
}
//fprintf(fout, "\n");
while (i<len)
{
for (j=0; j<width&&i<len; j++,i+=2)
{
// w = (((WORD)icon[i])<<8)+icon[i+1];
// fprintf(fout, "0x%.4x,", w);
fprintf(fout, "0x%.2x,0x%.2x,", icon[i+1],icon[i]);
}
fprintf(fout, "\n");
}
fseek(fout, -3, SEEK_CUR);
fprintf(fout, "\n};\n");
}
void outicon16(FILE *fout, bitmap &bmp)
{
BYTE *picon;
size_t len = 0;
len = bmp.icon_size(bitmap::ICON_16BIT);
picon = new BYTE[len];
if (bmp.bmp_to_icon(picon, len, bitmap::ICON_16BIT))
{
fprintf(fout, "//Normal Image: size = %d\n", len);
picon[5] |= 0x40;
picon[6] = 0xff;
picon[7] = 0xff;
print_icon16(fout, picon, len, "icon16");
// print_icon8(fout, picon, len, "icon16", 2);
/*
unsigned long buflen = (len-8+12)*1.1;
BYTE *pbuf = new BYTE[buflen-8];
if (my_compress(pbuf+10, &buflen, picon+8, len-8, 9) == Z_OK)
{
memcpy(pbuf, picon, 8);
pbuf[4] = 0x80;
pbuf[8] = (buflen>>8)&0xff;
pbuf[9] = (buflen)&0xff;
fprintf(fout, "//Compressed Image: size = %d\n", buflen+10);
fprintf(fout, "//Compress ratio: %.2f%%\n", (float)(buflen+10)*100/len);
print_icon8(fout, pbuf, buflen+10, "icon16", 2);
}
else
{
cout << "压缩数据失败.\n";
}
delete pbuf;
*/
}
else
{
cout << "转换ICON8不成功" << bmp.error_msg() << endl;
}
delete picon;
}
int main(int argc, char *argv[])
{
if(IsAcchost()==FALSE)
{
printf("The Command end!!\n");
return 0;
}
int result = 1;
char *p, *g;
char filename[1024];
if (argc < 2)
Usage();
p = strrchr(argv[1], '.');
g = strrchr(argv[1], '\\');
if (!p || (g && g > p)) {
struct stat s;
sprintf(filename, "%s.bmp", argv[1]);
if (stat(filename, &s) < 0)
Error("File no find!");
} else
sprintf(filename, "%s", argv[1]);
if (p != NULL)
*p = '\0';
bitmap bmp;
if (bmp.load_file(filename))
{
FILE *fout;
sprintf(filename, "%s.h", argv[1]);
fout = fopen(filename, "w");
if (fout != NULL)
{
outicon8(fout, bmp);
outicon16(fout, bmp);
fclose(fout);
}
printf("Transfer success!\n");
}
else
{
Error("File format error");
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -