📄 packager.c
字号:
/* * $Id: packager.c,v 1.9 2003/10/16 10:32:46 andrew_belov Exp $ * --------------------------------------------------------------------------- * ARJ distribution packaging tool. * */#include "arj.h"#include "arjdata.h"#define P PATHSEP_DEFSTR /* Dirty hack for compaction */#if TARGET==UNIX #define REGWIZ "arj-register"#else #define REGWIZ "register"#endif/* mkdir() macro */#if TARGET==UNIX||defined(__EMX__) #define md(p) mkdir(p, 0755)#else #define md(p) mkdir(p)#endifstatic char strform[]="%s";static char sfx_name[16];static char buf[2048];static char l_nullstr[]="";/* Q&D tolower() */static void arj_strlwr(char *str){ char p; while((p=*str)!='\0') { if(p>='A'&&p<='Z') { p+=32; *str=p; } str++; }}/* A smart fopen() */static FILE *s_fopen(char *name, char *mode){ FILE *rc; if((rc=fopen(name, mode))==NULL) { printf("Can't open %s\n", name); exit(2); } return(rc);}/* Line-by-line output routine. Involves macro expansion. */static void out_line(FILE *stream, char *str){ strcpyn(buf, str, sizeof(buf)); expand_tags(buf, sizeof(buf)); fprintf(stream, strform, buf);}/* Transfer a file, expanding the tags */static void transfer_file(char *dest, char *src){ FILE *istream; FILE *ostream; istream=s_fopen(src, "r"); ostream=s_fopen(dest, "w"); while(fgets(buf, sizeof(buf), istream)) { expand_tags(buf, sizeof(buf)); fputs(buf, ostream); } fclose(istream); fclose(ostream);}/* Packages a binary or other file, transforming to a UNIX-style path */#if TARGET==UNIXstatic void package_unix(FILE *stream, char *name, char *trunk, char *realpath, char *unixpath){ char realname[CCHMAXPATH], unixname[CCHMAXPATH]; /* Compose the trunk path, e.g. "freebsd3.4/en/rc/" */ strcpy(realname, trunk); strcpy(unixname, trunk); strcat(realname, P); strcat(unixname, P); /* Now, make "freebsd3.4/en/rc/arj" and "freebsd3.4/en/rc/u/bin" */ strcat(realname, realpath); /* arj */ if(realpath[0]!='\0') strcat(realname, P); strcat(unixname, "u"); /* u */ md(unixname); strcat(unixname, P); strcat(unixname, unixpath); /* u/bin */ md(unixname); strcat(unixname, P); /* Append the names */ strcat(realname, name); strcat(unixname, name); unlink(unixname); if(link(realname, unixname)) { printf("Failed to link <%s> to <%s>\n", realname, unixname); exit(1); } fprintf(stream, "%s" P "%s\n", unixpath, name);}#endif/* Arranges text file packaging (realpath -> resource, trunk -> compiler/en/rc/...) */static void package_txt(FILE *stream, char *name, char *trunk, char *realpath, char *unixpath){ char tmp_name[CCHMAXPATH], realname[CCHMAXPATH]; char *p; strcpy(tmp_name, trunk); strcat(tmp_name, P); strcat(tmp_name, name); strcpy(realname, realpath); strcat(realname, P); strcat(realname, name); transfer_file(tmp_name, realname); #if TARGET==UNIX package_unix(stream, name, trunk, "", unixpath); #else fprintf(stream, "%s\n", tmp_name); #endif}/* Arranges binary file packaging (realpath -> arj, trunk -> compiler/en/rc/...) */static void package_bin(FILE *stream, char *name, char *trunk, char *realpath, char *unixpath){ #if TARGET==UNIX package_unix(stream, name, trunk, realpath, unixpath); #else fprintf(stream, "%s" P "%s" P "%s\n", trunk, realpath, name); #endif}/* Comment creation routine */static void create_cmt(char *dest){ FILE *stream; /* Output path tricks */ #if TARGET==UNIX char subdir[]="/usr/local/"; #elif TARGET==OS2 char subdir[]="C:" P "ARJ" P "OS2" P; /* Historical (since ARJ/2 v 2.61) */ #elif TARGET==DOS||TARGET==WIN32 char subdir[]="C:" P "ARJ" P; #endif char tmp_str[128], out_str[128]; int i, l; stream=s_fopen(dest, "w"); fprintf(stream, ")) %s -m -b -x\n\n", subdir); /* Version string */ sprintf(tmp_str, "%s", #if LOCALE==LANG_en #if TARGET==DOS "ARJ v @VERSION manufacturing refresh by ARJ Software Russia All rights reserved" #else "@PRODUCT v @VERSION, (c) 1998-@{y}, ARJ Software Russia. All rights reserved." #endif #elif LOCALE==LANG_de #if TARGET==DOS "ARJ @VERSION Produktionsauffrischung, ARJ Software Russia Alle Rechte vorbehalten" #else "ARJ f乺 @PLATFORM @VERSION (c) 1998-@{y}, ARJ Software Russia. Alle Rechte vorbehalten." #endif #elif LOCALE==LANG_ru "ARJ v @VERSION, (c) 1998-@{y}, ARJ Software Russia." #endif ); expand_tags(tmp_str, sizeof(tmp_str)); sprintf(out_str, "@{c40}%s@{_}\n", tmp_str); out_line(stream, out_str); l=strlen(tmp_str); for(i=0; i<l; i++) tmp_str[i]='_'; sprintf(out_str, "@{c40}%s@{_}\n", tmp_str); out_line(stream, out_str); out_line(stream, "\n"); /* Distribution area */ #ifndef DEBUG sprintf(tmp_str, "@{c40}\n", #if LOCALE==LANG_en "*** For World-wide use and distribution ***" #elif LOCALE==LANG_de "*** F乺 weltweiten Einsatz und Vertrieb ***" #elif LOCALE==LANG_ru /* All correct here, Russian NLV contains strong encryption so we limit it to domestic distribution */ "*** 劔
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -