SVNからのミラー
This commit is contained in:
2
CHANGELOG.md
Normal file
2
CHANGELOG.md
Normal file
@@ -0,0 +1,2 @@
|
||||
# 1.0.0 (2024/10)
|
||||
* 開始
|
||||
13
LICENSE.txt
Normal file
13
LICENSE.txt
Normal file
@@ -0,0 +1,13 @@
|
||||
Copyright © 2018-2024 by 076.moe
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted, provided that the above
|
||||
copyright notice and this permission notice appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH REGARD
|
||||
TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR
|
||||
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
SOFTWARE.
|
||||
101
Makefile
Normal file
101
Makefile
Normal file
@@ -0,0 +1,101 @@
|
||||
UNAME_S != uname -s
|
||||
UNAME_M != uname -m
|
||||
OS = ${UNAME_S}
|
||||
ARCH = ${UNAME_M}
|
||||
|
||||
.if ${UNAME_S} == "OpenBSD"
|
||||
OS = openbsd
|
||||
.elif ${UNAME_S} == "NetBSD"
|
||||
OS = netbsd
|
||||
.elif ${UNAME_S} == "FreeBSD"
|
||||
OS = freebsd
|
||||
.elif ${UNAME_S} == "Linux"
|
||||
OS = linux
|
||||
.endif
|
||||
|
||||
.if ${UNAME_M} == "x86_64"
|
||||
ARCH = amd64
|
||||
.endif
|
||||
|
||||
NAME = txtconv
|
||||
UDDUNAME != cat uddu.c | grep "const char \*sofname" | awk '{print $$5}' |\
|
||||
sed "s/\"//g" | sed "s/;//"
|
||||
UAAUNAME != cat uaau.c | grep "const char \*sofname" | awk '{print $$5}' |\
|
||||
sed "s/\"//g" | sed "s/;//"
|
||||
ADDANAME != cat adda.c | grep "const char \*sofname" | awk '{print $$5}' |\
|
||||
sed "s/\"//g" | sed "s/;//"
|
||||
VERSION != cat common.h | grep "const char \*version" | awk '{print $$5}' |\
|
||||
sed "s/\"//g" | sed "s/;//"
|
||||
|
||||
PREFIX = /usr/local
|
||||
.if ${UNAME_S} == "Linux"
|
||||
PREFIX = /usr
|
||||
.elif ${UNAME_S} == "Haiku"
|
||||
PREFIX = /boot/home/config/non-packaged
|
||||
.endif
|
||||
|
||||
MANPREFIX = ${PREFIX}/share/man
|
||||
.if ${UNAME_S} == "OpenBSD"
|
||||
MANPREFIX = ${PREFIX}/man
|
||||
.elif ${UNAME_S} == "Haiku"
|
||||
MANPREFIX = ${PREFIX}/documentation/man
|
||||
.endif
|
||||
|
||||
CC = cc
|
||||
CFLAGS = -Wall -Wextra -O3
|
||||
|
||||
LDFLAGS = -static -lc
|
||||
.if ${UNAME_S} == "Haiku" || ${UNAME_S} == "Darwin" || ${UNAME_S} == "SunOS"\
|
||||
|| ${UNAME_S} == "Minix"
|
||||
LDFLAGS = -lc
|
||||
.endif
|
||||
|
||||
all: compile
|
||||
|
||||
compile:
|
||||
${CC} ${CFLAGS} -o uddu uddu.c ${LDFLAGS}
|
||||
strip uddu
|
||||
${CC} ${CFLAGS} -o uaau uaau.c ${LDFLAGS}
|
||||
strip uaau
|
||||
${CC} ${CFLAGS} -o adda adda.c ${LDFLAGS}
|
||||
strip adda
|
||||
|
||||
clean:
|
||||
rm -rf uddu uaau adda
|
||||
|
||||
dist: compile
|
||||
mkdir -p ${NAME}-${VERSION} release/src\
|
||||
release/bin/${VERSION}/${OS}/${ARCH} release/man/${VERSION}
|
||||
cp -R LICENSE.txt Makefile README.md CHANGELOG.md\
|
||||
*.1 *.c common.h ${NAME}-${VERSION}
|
||||
tar zcfv release/src/${NAME}-${VERSION}.tar.gz ${NAME}-${VERSION}
|
||||
rm -rf ${NAME}-${VERSION}
|
||||
sed "s/VERSION/${VERSION}/g" < uddu.1 > release/man/${VERSION}/uddu.1
|
||||
sed "s/VERSION/${VERSION}/g" < uaau.1 > release/man/${VERSION}/uaau.1
|
||||
sed "s/VERSION/${VERSION}/g" < adda.1 > release/man/${VERSION}/adda.1
|
||||
cp -R uddu uaau adda release/bin/${VERSION}/${OS}/${ARCH}
|
||||
|
||||
install:
|
||||
mkdir -p ${DESTDIR}${PREFIX}/bin ${DESTDIR}${MANPREFIX}/man1
|
||||
cp -rf uddu ${DESTDIR}${PREFIX}/bin
|
||||
cp -rf uaau ${DESTDIR}${PREFIX}/bin
|
||||
cp -rf adda ${DESTDIR}${PREFIX}/bin
|
||||
chmod 755 ${DESTDIR}${PREFIX}/bin/uddu
|
||||
chmod 755 ${DESTDIR}${PREFIX}/bin/uaau
|
||||
chmod 755 ${DESTDIR}${PREFIX}/bin/adda
|
||||
sed "s/VERSION/${VERSION}/g" < uddu.1 > ${DESTDIR}${MANPREFIX}/man1/uddu.1
|
||||
sed "s/VERSION/${VERSION}/g" < uaau.1 > ${DESTDIR}${MANPREFIX}/man1/uaau.1
|
||||
sed "s/VERSION/${VERSION}/g" < adda.1 > ${DESTDIR}${MANPREFIX}/man1/adda.1
|
||||
chmod 644 ${DESTDIR}${MANPREFIX}/man1/uddu.1
|
||||
chmod 644 ${DESTDIR}${MANPREFIX}/man1/uaau.1
|
||||
chmod 644 ${DESTDIR}${MANPREFIX}/man1/adda.1
|
||||
|
||||
uninstall:
|
||||
rm -rf ${DESTDIR}${PREFIX}/bin/uddu
|
||||
rm -rf ${DESTDIR}${PREFIX}/bin/uaau
|
||||
rm -rf ${DESTDIR}${PREFIX}/bin/adda
|
||||
rm -rf ${DESTDIR}${MANPREFIX}/man1/uddu.1
|
||||
rm -rf ${DESTDIR}${MANPREFIX}/man1/uaau.1
|
||||
rm -rf ${DESTDIR}${MANPREFIX}/man1/adda.1
|
||||
|
||||
.PHONY: all compile clean dist install uninstall
|
||||
49
README.md
Normal file
49
README.md
Normal file
@@ -0,0 +1,49 @@
|
||||
# txconv
|
||||
|
||||
## インストールする方法 | Installation
|
||||
### OpenBSD
|
||||
```sh
|
||||
make
|
||||
doas make install
|
||||
```
|
||||
|
||||
### NetBSD | FreeBSD | Dragonfly BSD
|
||||
```sh
|
||||
make
|
||||
sudo make install
|
||||
```
|
||||
|
||||
### CRUX
|
||||
```sh
|
||||
sudo prt-get bmake
|
||||
bmake
|
||||
sudo bmake install
|
||||
```
|
||||
|
||||
### Void
|
||||
```sh
|
||||
sudo xbps-install bmake
|
||||
bmake
|
||||
sudo bmake install
|
||||
```
|
||||
|
||||
### Artix
|
||||
```sh
|
||||
sudo pacman -S base-devel bmake
|
||||
bmake
|
||||
sudo bmake install
|
||||
```
|
||||
|
||||
### Debian | Devuan | Ubuntu | Linux Mint | PopOS
|
||||
```sh
|
||||
sudo apt install -y build-essential bmake git
|
||||
bmake
|
||||
sudo bmake install
|
||||
```
|
||||
|
||||
### Fedora | Red Hat | CentOS | Rocky Linux
|
||||
```sh
|
||||
sudo dnf install bmake clang
|
||||
bmake
|
||||
sudo bmake install
|
||||
```
|
||||
12
adda.1
Normal file
12
adda.1
Normal file
@@ -0,0 +1,12 @@
|
||||
.TH ADDA 1 VERSION
|
||||
.SH NAME
|
||||
adda - Amiga/MacOS 9 to DOS, DOS to Amiga/MacOS 9
|
||||
.br
|
||||
.B adda
|
||||
[-s]
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
Amiga/MacOS 9 to DOS, DOS to Amiga/MacOS 9
|
||||
.SH AUTHORS
|
||||
.PP
|
||||
テクニカル諏訪子(開発者)
|
||||
102
adda.c
Normal file
102
adda.c
Normal file
@@ -0,0 +1,102 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "common.h"
|
||||
|
||||
const char *sofname = "adda";
|
||||
const char *syoumei = "Amiga/MacOS 9 to DOS, DOS to Amiga/MacOS 9";
|
||||
|
||||
void amiga_to_dos(FILE *in, FILE *out) {
|
||||
int c;
|
||||
|
||||
while ((c = fgetc(in)) != EOF) {
|
||||
if (c != '\r') {
|
||||
fputc(c, out);
|
||||
}
|
||||
if ((c = fgetc(in)) != '\n') {
|
||||
fputc('\r', out);
|
||||
fputc('\n', out);
|
||||
ungetc(c, in);
|
||||
} else {
|
||||
fputc('\r', out);
|
||||
fputc('\n', out);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void dos_to_amiga(FILE *in, FILE *out) {
|
||||
int c;
|
||||
int last_char = '\0';
|
||||
|
||||
while ((c = fgetc(in)) != EOF) {
|
||||
if (last_char == '\r' && c == '\n') continue;
|
||||
if (last_char != '\r' && c == '\n') fputc('\r', out);
|
||||
else fputc(c, out);
|
||||
last_char = c;
|
||||
}
|
||||
}
|
||||
|
||||
int detect_line_ending(FILE *in) {
|
||||
int c;
|
||||
int islf = 0;
|
||||
int iscr = 0;
|
||||
while ((c = fgetc(in)) != EOF) {
|
||||
if (c == '\r') iscr = 1;
|
||||
if (c == '\n') islf = 1;
|
||||
}
|
||||
if (iscr && islf) return 1; // DOS
|
||||
return 0; // Amiga
|
||||
}
|
||||
|
||||
void usage() {
|
||||
fprintf(stderr, "%s-%s\n%s\n", sofname, version, syoumei);
|
||||
fprintf(stderr, "usage: %s <ファイル.txt>\n", sofname);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc != 2) {
|
||||
usage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *in = fopen(argv[1], "r");
|
||||
if (in == NULL) {
|
||||
perror("fopen input");
|
||||
usage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *tmp = fopen("tmp.txt", "w");
|
||||
if (tmp == NULL) {
|
||||
perror("fopen tmp");
|
||||
fclose(in);
|
||||
usage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
int line_ending_style = detect_line_ending(in);
|
||||
rewind(in);
|
||||
|
||||
if (line_ending_style == 0) { // AMIGA
|
||||
amiga_to_dos(in, tmp);
|
||||
} else { // DOS
|
||||
dos_to_amiga(in, tmp);
|
||||
}
|
||||
|
||||
fclose(in);
|
||||
fclose(tmp);
|
||||
|
||||
if (remove(argv[1]) != 0) {
|
||||
perror("元のファイルの削除");
|
||||
usage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (rename("tmp.txt", argv[1]) != 0) {
|
||||
perror("tmpファイル名の変更");
|
||||
usage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
6
common.h
Normal file
6
common.h
Normal file
@@ -0,0 +1,6 @@
|
||||
#ifndef COMMON_H
|
||||
#define COMMON_H
|
||||
|
||||
const char *version = "1.0.0";
|
||||
|
||||
#endif
|
||||
12
uaau.1
Normal file
12
uaau.1
Normal file
@@ -0,0 +1,12 @@
|
||||
.TH UAAU 1 VERSION
|
||||
.SH NAME
|
||||
uaau - Unix/BeOS/Plan9 to Amiga/MacOS 9, Amiga/MacOS 9 to Unix/BeOS/Plan9
|
||||
.br
|
||||
.B uaau
|
||||
[-s]
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
Unix/BeOS/Plan9 to Amiga/MacOS 9, Amiga/MacOS 9 to Unix/BeOS/Plan9
|
||||
.SH AUTHORS
|
||||
.PP
|
||||
テクニカル諏訪子(開発者)
|
||||
89
uaau.c
Normal file
89
uaau.c
Normal file
@@ -0,0 +1,89 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "common.h"
|
||||
|
||||
const char *sofname = "uaau";
|
||||
const char *syoumei =
|
||||
"Unix/BeOS/Plan9 to Amiga/MacOS 9, Amiga/MacOS 9 to Unix/BeOS/Plan9";
|
||||
|
||||
void unix_to_amiga(FILE *in, FILE *out) {
|
||||
int c;
|
||||
while ((c = fgetc(in)) != EOF) {
|
||||
if (c == '\n') fputc('\r', out);
|
||||
else fputc(c, out);
|
||||
}
|
||||
}
|
||||
|
||||
void amiga_to_unix(FILE *in, FILE *out) {
|
||||
int c;
|
||||
while ((c = fgetc(in)) != EOF) {
|
||||
if (c == '\r') fputc('\n', out);
|
||||
else fputc(c, out);
|
||||
}
|
||||
}
|
||||
|
||||
int detect_line_ending(FILE *in) {
|
||||
int c;
|
||||
int islf = 0;
|
||||
int iscr = 0;
|
||||
while ((c = fgetc(in)) != EOF) {
|
||||
if (c == '\r') iscr = 1;
|
||||
if (c == '\n') islf = 1;
|
||||
}
|
||||
if (iscr && !islf) return 1; // Amiga
|
||||
return 0; // Unix
|
||||
}
|
||||
|
||||
void usage() {
|
||||
fprintf(stderr, "%s-%s\n%s\n", sofname, version, syoumei);
|
||||
fprintf(stderr, "usage: %s <ファイル.txt>\n", sofname);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc != 2) {
|
||||
usage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *in = fopen(argv[1], "r");
|
||||
if (in == NULL) {
|
||||
perror("fopen input");
|
||||
usage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *tmp = fopen("tmp.txt", "w");
|
||||
if (tmp == NULL) {
|
||||
perror("fopen tmp");
|
||||
fclose(in);
|
||||
usage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
int line_ending_style = detect_line_ending(in);
|
||||
rewind(in);
|
||||
|
||||
if (line_ending_style == 0) { // UNIX
|
||||
unix_to_amiga(in, tmp);
|
||||
} else { // AMIGA
|
||||
amiga_to_unix(in, tmp);
|
||||
}
|
||||
|
||||
fclose(in);
|
||||
fclose(tmp);
|
||||
|
||||
if (remove(argv[1]) != 0) {
|
||||
perror("元のファイルの削除");
|
||||
usage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (rename("tmp.txt", argv[1]) != 0) {
|
||||
perror("tmpファイル名の変更");
|
||||
usage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
12
uddu.1
Normal file
12
uddu.1
Normal file
@@ -0,0 +1,12 @@
|
||||
.TH UDDU 1 VERSION
|
||||
.SH NAME
|
||||
uddu - Unix/BeOS/Plan9 to DOS, DOS to Unix/BeOS/Plan9
|
||||
.br
|
||||
.B uddu
|
||||
[-s]
|
||||
.SH DESCRIPTION
|
||||
.PP
|
||||
Unix/BeOS/Plan9 to DOS, DOS to Unix/BeOS/Plan9
|
||||
.SH AUTHORS
|
||||
.PP
|
||||
テクニカル諏訪子(開発者)
|
||||
88
uddu.c
Normal file
88
uddu.c
Normal file
@@ -0,0 +1,88 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "common.h"
|
||||
|
||||
const char *sofname = "uddu";
|
||||
const char *syoumei = "Unix/BeOS/Plan9 to DOS, DOS to Unix/BeOS/Plan9";
|
||||
|
||||
void unix_to_dos(FILE *in, FILE *out) {
|
||||
int c;
|
||||
while ((c = fgetc(in)) != EOF) {
|
||||
if (c == '\n') fputc('\r', out);
|
||||
fputc(c, out);
|
||||
}
|
||||
}
|
||||
|
||||
void dos_to_unix(FILE *in, FILE *out) {
|
||||
int c;
|
||||
while ((c = fgetc(in)) != EOF) {
|
||||
if (c == '\r') continue;
|
||||
fputc(c, out);
|
||||
}
|
||||
}
|
||||
|
||||
int detect_line_ending(FILE *in) {
|
||||
int c;
|
||||
int islf = 0;
|
||||
int iscr = 0;
|
||||
while ((c = fgetc(in)) != EOF) {
|
||||
if (c == '\r') iscr = 1;
|
||||
if (c == '\n') islf = 1;
|
||||
}
|
||||
if (iscr && islf) return 1; // DOS
|
||||
return 0; // Unix
|
||||
}
|
||||
|
||||
void usage() {
|
||||
fprintf(stderr, "%s-%s\n%s\n", sofname, version, syoumei);
|
||||
fprintf(stderr, "usage: %s <ファイル.txt>\n", sofname);
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
if (argc != 2) {
|
||||
usage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *in = fopen(argv[1], "r");
|
||||
if (in == NULL) {
|
||||
perror("fopen input");
|
||||
usage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
FILE *tmp = fopen("tmp.txt", "w");
|
||||
if (tmp == NULL) {
|
||||
perror("fopen tmp");
|
||||
fclose(in);
|
||||
usage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
int line_ending_style = detect_line_ending(in);
|
||||
rewind(in);
|
||||
|
||||
if (line_ending_style == 0) { // UNIX
|
||||
unix_to_dos(in, tmp);
|
||||
} else { // DOS
|
||||
dos_to_unix(in, tmp);
|
||||
}
|
||||
|
||||
fclose(in);
|
||||
fclose(tmp);
|
||||
|
||||
if (remove(argv[1]) != 0) {
|
||||
perror("元のファイルの削除");
|
||||
usage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (rename("tmp.txt", argv[1]) != 0) {
|
||||
perror("tmpファイル名の変更");
|
||||
usage();
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user