diff options
| author | B. Watson <urchlay@slackware.uk> | 2025-11-27 17:26:50 -0500 |
|---|---|---|
| committer | B. Watson <urchlay@slackware.uk> | 2025-11-27 17:26:50 -0500 |
| commit | 8aec307634ac63cf88e77df0e48fde1de0649b03 (patch) | |
| tree | 09ab1b41d242fe632a8ed916ba2dfd2f10c71b7e /src/alf.c | |
| parent | 85770c4b5cb89a8a4420293a2a8b1f0cef851d7e (diff) | |
| download | unalf-8aec307634ac63cf88e77df0e48fde1de0649b03.tar.gz | |
-A (text file conversion) option for alf.
Diffstat (limited to 'src/alf.c')
| -rw-r--r-- | src/alf.c | 46 |
1 files changed, 43 insertions, 3 deletions
@@ -30,6 +30,10 @@ unsigned int input_len, output_len, out_bitpos; int opt_append = 0; int opt_overwrite = 0; +int opt_zerotime = 0; +int opt_alftime = 0; +int opt_gmtime = 0; +int opt_txtconv = 0; struct stat in_file_stat; @@ -132,7 +136,10 @@ unsigned long get_msdos_date_time(void) { int msdos_year; u16 ms_date, ms_time; - tm = localtime(&t); + if(opt_gmtime) + tm = gmtime(&t); + else + tm = localtime(&t); msdos_year = tm->tm_year + 1900 - 1980; @@ -143,17 +150,25 @@ unsigned long get_msdos_date_time(void) { void create_header(void) { char hdr_filename[13]; + unsigned long time; atarify_filename(hdr_filename); printf("Crunching %s\n", hdr_filename); + if(opt_alftime) + time = 0x03130588; + else if(opt_zerotime) + time = 0; + else + time = get_msdos_date_time(); + output_buf[0] = 0x1a; output_buf[1] = 0x0f; memset(&output_buf[3], 0x20, 13); strncat((char *)&output_buf[2], hdr_filename, 13); output_buf[14] = 0x00; store_quad(15, 0); /* compressed size, fill in later */ - store_quad(19, get_msdos_date_time()); + store_quad(19, time); store_cksum(); store_quad(25, input_len); output_len = 29; @@ -292,6 +307,17 @@ void make_backup(void) { rename(out_filename, bak); } +void convert_eols(void) { + int i; + + for(i = 0; i < input_len; i++) { + if(input_buf[i] == '\n') + input_buf[i] = 0x9b; + else if(input_buf[i] == '\t') + input_buf[i] = 0x7f; + } +} + void crunch_file(const char *filename) { init_table(); @@ -309,6 +335,9 @@ void crunch_file(const char *filename) { return; } + if(opt_txtconv) + convert_eols(); + output_len = 0; fstat(fileno(in_file), &in_file_stat); /* for timestamp */ fclose(in_file); @@ -366,10 +395,21 @@ int main(int argc, char **argv) { /* don't let getopt() print error message for us. */ opterr = 0; - while((opt = getopt(argc, argv, "aoV")) != -1) { + while((opt = getopt(argc, argv, "aAt:oV")) != -1) { switch(opt) { + case 'A': opt_txtconv = 1; break; case 'a': opt_append = 1; opt_overwrite = 1; break; case 'o': opt_overwrite = 1; opt_append = 0; break; + case 't': opt_zerotime = opt_alftime = opt_gmtime = 0; + switch(*optarg) { + case 'z': opt_zerotime = 1; break; + case 'd': opt_alftime = 1; break; + case 'u': opt_gmtime = 1; break; + default: + fprintf(stderr, "%s: fatal: invalid -t suboption '-%c' (try -h or --help)\n", self, *optarg); + exit(1); + } + break; case 'V': puts(VERSION); exit(0); break; default: fprintf(stderr, "%s: fatal: invalid option '-%c' (try -h or --help)\n", self, optopt); |
