このディレクトリの索引

base64g(Atom,X) :-
    replace_all(Atom,' ','',Atom2),
    base64(X,Atom2) .

base64s(Atom,X) :-
    \+(var(Atom)),
    name2(Atom,L1),
    base64_2(L1,Y),
    concat_atom(Y,X) .

base64(Atom,X) :-
    \+(var(Atom)),
    atom_codes(Atom,L1),
    kjtoeuc(CodeList,L1),
    base64_2(CodeList,Y),
    concat_atom(Y,X),!.
base64(X,Atom) :-
    var(X),
    atom_chars(Atom,List),
    base64_1(Y,List),
    concat_atom(Y,Y2),
    atom_codes(Y2,Codes),
    kjtoeuc(Codes,Y3),
    atom_codes(X,Y3),!.

base64_1([],[]) :- !.
base64_1(X,[A,B,C,=]) :-
    base64_table(A1,A),
    base64_table(B1,B),
    base64_table(C1,C),
    append(A1,B1,L1),
    append(L1,C1,L),
    base64_a2b(Y,L),
    base64_1(Z,R),
    append(Y,Z,X).
base64_1(X,[A,B,=,=]) :-
    base64_table(A1,A),
    base64_table(B1,B),
    append(A1,B1,L),
    base64_a2b(Y,L),
    base64_1(Z,R),
    append(Y,Z,X).
base64_1(X,[A,B,C,D|R]) :-
    base64_table(A1,A),
    base64_table(B1,B),
    base64_table(C1,C),
    base64_table(D1,D),
    append(A1,B1,L1),
    append(L1,C1,L2),
    append(L2,D1,L),
    base64_a2b(Y,L),
    base64_1(Z,R),
    append(Y,Z,X).

base64_table([0,0,0,0,0,0],'A').
base64_table([0,0,0,0,0,1],'B').
base64_table([0,0,0,0,1,0],'C').
base64_table([0,0,0,0,1,1],'D').
base64_table([0,0,0,1,0,0],'E').
base64_table([0,0,0,1,0,1],'F').
base64_table([0,0,0,1,1,0],'G').
base64_table([0,0,0,1,1,1],'H').
base64_table([0,0,1,0,0,0],'I').
base64_table([0,0,1,0,0,1],'J').
base64_table([0,0,1,0,1,0],'K').
base64_table([0,0,1,0,1,1],'L').
base64_table([0,0,1,1,0,0],'M').
base64_table([0,0,1,1,0,1],'N').
base64_table([0,0,1,1,1,0],'O').
base64_table([0,0,1,1,1,1],'P').
base64_table([0,1,0,0,0,0],'Q').
base64_table([0,1,0,0,0,1],'R').
base64_table([0,1,0,0,1,0],'S').
base64_table([0,1,0,0,1,1],'T').
base64_table([0,1,0,1,0,0],'U').
base64_table([0,1,0,1,0,1],'V').
base64_table([0,1,0,1,1,0],'W').
base64_table([0,1,0,1,1,1],'X').
base64_table([0,1,1,0,0,0],'Y').
base64_table([0,1,1,0,0,1],'Z').
base64_table([0,1,1,0,1,0],a).
base64_table([0,1,1,0,1,1],b).
base64_table([0,1,1,1,0,0],c).
base64_table([0,1,1,1,0,1],d).
base64_table([0,1,1,1,1,0],e).
base64_table([0,1,1,1,1,1],f).
base64_table([1,0,0,0,0,0],g).
base64_table([1,0,0,0,0,1],h).
base64_table([1,0,0,0,1,0],i).
base64_table([1,0,0,0,1,1],j).
base64_table([1,0,0,1,0,0],k).
base64_table([1,0,0,1,0,1],l).
base64_table([1,0,0,1,1,0],m).
base64_table([1,0,0,1,1,1],n).
base64_table([1,0,1,0,0,0],o).
base64_table([1,0,1,0,0,1],p).
base64_table([1,0,1,0,1,0],q).
base64_table([1,0,1,0,1,1],r).
base64_table([1,0,1,1,0,0],s).
base64_table([1,0,1,1,0,1],t).
base64_table([1,0,1,1,1,0],u).
base64_table([1,0,1,1,1,1],v).
base64_table([1,1,0,0,0,0],w).
base64_table([1,1,0,0,0,1],x).
base64_table([1,1,0,0,1,0],y).
base64_table([1,1,0,0,1,1],z).
base64_table([1,1,0,1,0,0],'0').
base64_table([1,1,0,1,0,1],'1').
base64_table([1,1,0,1,1,0],'2').
base64_table([1,1,0,1,1,1],'3').
base64_table([1,1,1,0,0,0],'4').
base64_table([1,1,1,0,0,1],'5').
base64_table([1,1,1,0,1,0],'6').
base64_table([1,1,1,0,1,1],'7').
base64_table([1,1,1,1,0,0],'8').
base64_table([1,1,1,1,0,1],'9').
base64_table([1,1,1,1,1,0],+).
base64_table([1,1,1,1,1,1],/).
base64_table([A,B,C,D],X) :-
    base64_table([A,B,C,D,0,0],X).
base64_table([A,B],X) :-
    base64_table([A,B,0,0,0,0],X).

base64_a2b([],[]).
base64_a2b([Atom|R],[A,B,C,D,E,F,G,H|R2]) :-
    atob(Atom,[A,B,C,D,E,F,G,H]),
    base64_a2b(R,R2).

base64_2([],[]) :- !.
base64_2([A,B,C|R],X) :-
    base64_i2b([A,B,C],L),
    base64_3(L,Z),
    base64_2(R,R2),
    append(Z,R2,X),!.
base64_2([A,B],X) :-
    base64_i2b([A,B],L),
    base64_3(L,Z),
    append(Z,[=],X),!.
base64_2([Y],X) :-
    base64_i2b([Y],L),
    base64_3(L,Z),
    append(Z,[=,=],X),!.

base64_3([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X],[Z1,Z2,Z3,Z4]) :-
    base64_table([A,B,C,D,E,F],Z1),
    base64_table([G,H,I,J,K,L],Z2),
    base64_table([M,N,O,P,Q,R],Z3),
    base64_table([S,T,U,V,W,X],Z4),!.
base64_3([A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P],[Z1,Z2,Z3]) :-
    base64_table([A,B,C,D,E,F],Z1),
    base64_table([G,H,I,J,K,L],Z2),
    base64_table([M,N,O,P],Z3),!.
base64_3([A,B,C,D,E,F,G,H],[Z1,Z2]) :-
    base64_table([A,B,C,D,E,F],Z1),
    base64_table([G,H],Z2).

base64_i2b([],[]) :- !.
base64_i2b([X|R],[1,B,C,D,E,F,G,H|R2]) :-
    var(X),
    itob(X,[1,B,C,D,E,F,G,H]),
    base64_i2b(R,R2),!.
base64_i2b([X|R],[0,B,C,D,E,F,G,H|R2]) :-
    var(X),
    itob(U,[0,B,C,D,E,F,G,H]),
    X is U - 128,
    base64_i2b(R,R2),!.
base64_i2b([Code|R],[A,B,C,D,E,F,G,H|R2]) :-
    itob(Code,[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,A,B,C,D,E,F,G,H]),
    base64_i2b(R,R2) .

name2(X,Y) :-
    atom(X),
    strlen(X,Len),
    findall(N,(for(1,M,Len) , char_code1(X,M,N1) , (N1 < 0 , N is N1 + 256 ; N1 >= 0 , N = N1)),Y),!.
name2(A,[N]) :-
    atomic(A),
    name(A,[N]),!.
name2(A,L) :-
    var(A),
    name21(L,L2),
    atom_codes(A,L2),!.

name21([],[]) :- !.
name21([N1,N2|R],[N|R2]) :-
    N1 > 127,
    N2 > 127,
    N is N1 * 256 + N2,
    name21(R,R2),!.
name21([N1,N2|R],[N|R2]) :-
    N1 > 127,
    N2 < 128,
    N is N1 * 256 + N2,
    name21(R,R2),!.
name21([N1|R],[N1|R2]) :-
    name21(R,R2).

itob(N,L) :-
    itob(N,[],L1),
    length(L1,Len),
    Len2 is 8 - Len,
    length(L2,Len2),
    all(L2,0),
    append(L2,L1,L).

itob(0,X,X) :- !.
itob(N,Y,X) :-
    M is N mod 2,
    N2 is N // 2,
    itob(N2,[M|Y],X).