📄 dl.c
字号:
#include "hexbin.h"#ifdef DL#include "globals.h"#include "crc.h"#include "readline.h"#include "../fileio/machdr.h"#include "../fileio/wrfile.h"#include "../util/util.h"#include "buffer.h"#include "printhdr.h"extern void exit();static long dl_fork();static int nchar();static int nextc();static char *icp = &line[0];/* oldest format -- process .dl files */void dl(macname, filename)char *macname, *filename;{ int n; if(listmode) { (void)fprintf(stderr, "This file is in \"dl\" format.\n"); } for(n = 0; n < INFOBYTES; n++) { info[n] = 0; } /* set up for Mac name */ if(macname[0] == '\0') { /* strip directories */ macname = search_last(filename, '/'); if(macname == NULL) { macname = filename; } else { macname++; } /* strip extension */ n = strlen(macname); if(n > 3) { n -= 3; if(!strncmp(macname + n, ".dl", 3)) { macname[n] = '\0'; } } } n = strlen(macname); if(n > F_NAMELEN) { n = F_NAMELEN; } (void)strncpy(mh.m_name, macname, n); (void)strncpy(mh.m_type, "APPL", 4); (void)strncpy(mh.m_author, "????", 4); mh.m_name[n] = '\0'; transname(mh.m_name, trname, n); define_name(trname); print_header0(0); print_header1(0, 0); set_put(1); mh.m_datalen = 0; set_put(0); mh.m_rsrclen = dl_fork(); info[I_NAMEOFF] = n; (void)strncpy(info + I_NAMEOFF + 1, mh.m_name, n); (void)strncpy(info + I_TYPEOFF, mh.m_type, 4); (void)strncpy(info + I_AUTHOFF, mh.m_author, 4); put4(info + I_DLENOFF, (unsigned long)mh.m_datalen); put4(info + I_RLENOFF, (unsigned long)mh.m_rsrclen); put4(info + I_CTIMOFF, (unsigned long)mh.m_createtime); put4(info + I_MTIMOFF, (unsigned long)mh.m_modifytime); print_header2(0); end_put();}static long dl_fork(){ register unsigned long i, v, c; register unsigned long n, bytes; n = 0; bytes = 0; v = 0; crc = 0; while((i = nchar()) != '|') { if(i < '@' || i > 'O') { continue; } v = (v << 4) | (i & 0xF); if((++n & 1) == 0) { put_byte((char)v); crc += v; v = 0; bytes++; } } c = 0; for(i = 0 ; i < 8 ; i++) { c = (c << 4) | (nchar() & 0xF); } verify_crc(bytes + crc, c); return bytes;}static int nchar(){ int i; if((i = nextc()) == EOF) { (void)fprintf(stderr, "Premature EOF\n");#ifdef SCAN do_error("hexbin: Premature EOF");#endif /* SCAN */ exit(1); } return i & 0177;}static int nextc(){ while(*icp == 0) { if(readline() == 0) { return EOF; } icp = &line[0]; } return *icp++;}#else /* DL */int dl; /* keep lint and some compilers happy */#endif /* DL */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -