このディレクトリの索引

:- nonotify.
:- op(850,fx,(^)).
( ^ P)
  :-
    wr('%%/%q. ',[P]).
pswr(G,X)
  :-
    pswr_2(G,X),!.
pswr(P)
  :-
    functor(P,F,A),
    pswr_1(1,A,P,L1,L2),
    (   L1=[],
        G0='';
        not(L1=[]),
        concat_atom(L1,' ',G0)
    ),
    concat_atom([G0,' ',F,'\n'],G1),
    pswr_2(G1,L2),!.
pswr_1(N,A,_,[],[]) :- N>A,!.
pswr_1(N,E,P,['%t'|R1],[X|R2])
  :-
    arg(N,P,X),
    M is N+1,
    pswr_1(M,E,P,R1,R2).
pswr_2(G,L)
  :-
    telling(user),
    e_printf(G,L),!.
pswr_2(G,L)
  :-
    telling(screen),
    fopen('temp.ps','a+',F),
    sprintf(G,L,S),
    fputs(S,F),
    fclose(F),!.

pswr_2(G,L)
  :-
    write_formatted(G,L).

pstell(F)
  :-
    slush_op(F,F1),
    tell(F1),
    write('%!'),
    write('Adobe-PS'),nl,!.

acroread実行ファイル('/usr/local/Adobe/Acrobat7.0/bin/acroread').

newpath
  :-
    pswr(newpath),!.

xpos(Y)
  :-
    Y1 は Y,
    pswr('/xpos %d def\n',[Y1]),!.
ypos(Y)
  :-
    Y1 は Y,
    pswr('/ypos %d def\n',[Y1]),!.
image(_スキャン長,_スキャンライン数,_ビット数,_変換配列,_16進数ならび文字列)
  :-
    sprintf('[%t %t %t %t %t %t]',_変換配列,_変換配列文字列),
    sprintf(' %t %t %t %t {<%t>} image ',[_スキャン長,_スキャンライン数,_ビット数,_変換配列文字列,_16進数ならび文字列],S),
    pswr(S),!.

scale(X,Y)
  :-
    X1 は X,
    Y1 は Y,
    pswr(scale(X,Y)),!.
translate(X,Y)
  :-
    X1 は X,
    Y1 は Y,
    pswr(translate(X1,Y1)),!.
rotate(R)
  :-
    R1 は R,
    pswr(rotate(R1)),!.

p_point(X,Y)
  :-
    X1 は X,
    Y1 は Y,
    moveto(X1,Y1),
    rlineto(1,0),
    stroke,!.

helvetica(Style) :-
        asciiフォント名変換(helvetica,Style,_フォント名) ,
        一時asciiフォント名(_フォント名) ,
        (!) .

times(Style) :-
        asciiフォント名変換(times,Style,_フォント名) ,
        一時asciiフォント名(_フォント名) ,
        (!) .

courier(Style) :-
        asciiフォント名変換(courier,Style,_フォント名) ,
        一時asciiフォント名(_フォント名) ,
        (!) .

asciiフォント名変換(Name,[],_フォント名) :-
        atomic_length(Name,Len1) ,
        Len2 is Len1 - 1 ,
        subatomic(Name,1,1,A1) ,
        subatomic(Name,2,Len2,A2) ,
        to_upper(A1,A11),
        concat([A11,A2],_フォント名) ,
        (!) .
asciiフォント名変換(Name,Style,_フォント名) :-
        atomic_length(Name,Len1) ,
        Len2 is Len1 - 1 ,
        atomic_length(Style,Len3) ,
        Len4 is Len3 - 1 ,
        subatomic(Name,1,1,A1) ,
        subatomic(Name,2,Len2,A2) ,
        subatomic(Style,1,1,B1) ,
        subatomic(Style,2,Len4,B2) ,
        to_upper(A1,A11),
        to_upper(B1,B11),
        concat([A11,A2,(-),B11,B2],_フォント名) ,
        (!) .

to_upper(A,B)
  :-
    atomic_length(A,Len),
    findall(Y, (     for(1,N,Len),
                     subatomic(A,N,1,X),
                     char_code(X,C),
                     (   (   C > 96,
                             C < 123
                         ),
                         C2 is C-32,
                         char_code(Y,C2);
                         ((C<97);(C>122)),
                         char_code(Y,C)
                      )
                ),L),
    concat_atom(L,B),!.

明朝
  :-
    一時全角フォント名(明朝),
    一時半角フォント名(明朝),!.
ゴチック
  :-
    一時全角フォント名(ゴチック),
    一時半角フォント名(ゴチック),
    一時asciiフォント名('Helvetica-Bold'),!.
一時全角フォント名(明朝)
  :-
    get_global(印刷端末文字コード,euc),
    pswr('/tzfont { /%t } def\n',['Ryumin-Light-78-EUC-H']),!.
一時全角フォント名(明朝)
  :-
    get_global(印刷端末文字コード,sjis),
    pswr('/tzfont { /%t } def\n',['Ryumin-Light-83pv-RKSJ-H']),!.
一時全角フォント名(ゴチック)
  :-
    get_global(印刷端末文字コード,euc),
    pswr('/tzfont { /%t } def\n',['GothicBBB-Medium-78-EUC-H']),!.
一時全角フォント名(ゴチック)
  :-
    get_global(印刷端末文字コード,sjis),
    pswr('/tzfont { /%t } def\n',['GothicBBB-Medium-83pv-RKSJ-H']),!.
一時全角フォント名(_フォント名)
  :-
    pswr('/tzfont { /%t } def\n',[_フォント名]),!.
一時半角フォント名(明朝)
  :-
    pswr('/thfont { /%t } def\n',['Ryumin-Light.Hankaku']),!.
一時半角フォント名(ゴチック)
  :-
    pswr('/thfont { /%t } def\n',['GothicBBB-Medium.Hankaku']),!.
一時半角フォント名(_フォント名)
  :-
    pswr('/thfont { /%t } def\n',[_フォント名]),!.
一時asciiフォント名('Times-Roman')
  :-
    pswr('/tafont { /%t } def\n',['Times-Roman']),!.
一時asciiフォント名(_フォント名)
  :-
    pswr('/tafont { /%t } def\n',[_フォント名]),!.

一時改行定義(_改行名)
  :-
    pswr('/tnl { %t } def\n',[_改行名]),!.
一時全角定義(_サイズ)
  :-
    integer(_サイズ),
    concat([zenkaku,_サイズ],_全角定義名),
    pswr('/%t { tzfont findfont %d scalefont setfont 0 0 3 2 roll lscape-test} def\n',[_全角定義名,_サイズ]),
    pswr('/tz { %t } def\n',[_全角定義名]),!.
一時半角定義(_サイズ)
  :-
    integer(_サイズ),
    concat([hankaku,_サイズ],_半角定義名),
    pswr('/%t { thfont findfont %d scalefont setfont 0 0 3 2 roll lscape-test} def\n',[_半角定義名,_サイズ]),
    pswr('/th { %t } def\n',[_半角定義名]),!.
一時ascii定義(_サイズ)
  :-
    integer(_サイズ),
    concat([ascii,_サイズ],_ascii定義名),
    pswr('/%t { tafont findfont %d scalefont setfont 0 0 3 2 roll lscape-test} def\n',[_ascii定義名,_サイズ]),
    pswr('/ta { %t } def\n',[_ascii定義名]),!.

一時全角定義(_全角定義名)
  :-
    not(integer(_全角定義名)),
    pswr('/tz { %t } def\n',[_全角定義名]),!.
一時半角定義(_半角定義名)
  :-
    not(integer(_半角定義名)),
    pswr('/th { %t } def\n',[_半角定義名]),!.
一時ascii定義(_ascii定義名)
  :-
    not(integer(_ascii定義名)),
    pswr('/ta { %t } def\n',[_ascii定義名]),!.
一時定義(_サイズ)
  :-
    一時全角定義(_サイズ),
    一時半角定義(_サイズ),
    一時ascii定義(_サイズ),!.


改行定義(_改行名,ポートレート,_X座標,_文字開始変位,_行間隔,_下線名,_破線名)
  :-
    get_global(印刷形式,ポートレート),
    ( 書式定義(標準改行名,_,_改行名);true),
    ( 書式定義(固定軸座標,ポートレート,_X座標);true),
    ( 書式定義(文字開始変位,ポートレート,_文字開始変位);true),
    ( 書式定義(行間隔,ポートレート,_行間隔);true),
    ( 書式定義(標準下線名,_,_下線名);true),
    ( 書式定義(標準破線名,_,_破線名);true),
    改行定義の二(_改行名,ポートレート,_X座標,_文字開始変位,_行間隔,_下線名,_破線名),!.

改行定義(_改行名,ランドスケープ,_Y座標,_文字開始変位,_行間隔,_下線名,_破線名)
  :-
    get_global(印刷形式,ランドスケープ),
    ( 書式定義(標準改行名,_,_改行名);true),
    ( 書式定義(固定軸座標,ランドスケープ,_Y座標);true),
    ( 書式定義(文字開始変位,ランドスケープ,_文字開始変位);true),
    ( 書式定義(行間隔,ランドスケープ,_行間隔);true),
    ( 書式定義(標準下線名,_,_下線名);true),
    ( 書式定義(標準破線名,_,_破線名);true),
    改行定義の二(_改行名,ランドスケープ,_Y座標,_文字開始変位,_行間隔,_下線名,_破線名),!.

改行定義の二(_改行名,ポートレート,_X座標,_文字開始変位,_行間隔,_下線名,_破線名)
  :-
    concat([_下線名,'-offset'],_下線変位名),
    concat([_破線名,'-def'],_破線宣言名),
    concat([_下線名,'-def'],_下線宣言名),
    pswr('%t%t %t %t %t %t %t %t %t %t %t %t %t %t %t %t %t %t %t %t\n',['/',_改行名,'{',_X座標,ypos,_下線変位名,'sub moveto',_破線名,'1 eq {',_破線宣言名,' } if',_下線名,'1 eq {',_下線宣言名,'stroke} if /ypos ypos',_行間隔,'sub def',_X座標,_文字開始変位,'add ypos moveto} def']),!.

改行定義の二(_改行名,ランドスケープ,_Y座標,_文字開始変位,_行間隔,_下線名,_破線名)
  :-
    concat([_下線名,'-offset'],_下線変位名),
    concat([_破線名,'-def'],_破線宣言名),
    concat([_下線名,'-def'],_下線宣言名),
    pswr('%t%t %t %t %t %t %t %t %t %t %t %t %t %t %t %t %t %t %t %t %t %t\n',['/',_改行名,'{','gsave xpos ',_下線変位名,'add',_Y座標,moveto,_破線名,'1 eq {',_破線宣言名,' } if',_下線名,'1 eq { 90 rotate',_下線宣言名,'stroke} if grestore /xpos xpos',_行間隔,'add def',xpos,_Y座標,_文字開始変位,'add moveto} def']),!.

行間隔(_行間隔)
  :-
    改行定義(_,_,_,_,_行間隔,_,_),!.

ypos保存定義
  :-
    pswr('/ypos-save {currentpoint pop /ypos exch def} def\n'),!.

白抜きフォント定義(_フォント名,_フォント範疇,_フォント,_ポイント)
  :-
    ( 書式定義(標準フォント名,_フォント範疇,_フォント名);true),
    ( 書式定義(標準フォント,_フォント範疇,_フォント);true),
    ( 書式定義(ポイント,_,_ポイント);true),
    pswr('%t%t %t%t %t %t %t\n',['/',_フォント名,'{ /',_フォント,findfont,_ポイント,'scalefont setfont outline-show} def']),!.
    
フォント定義(_フォント名,_フォント範疇,_フォント,_ポイント,_x軸文字間空白,_y軸文字間空白)
  :-
    ( 書式定義(標準フォント名,_フォント範疇,_フォント名);true),
    ( 書式定義(標準フォント,_フォント範疇,_フォント);true),
    ( 書式定義(ポイント,_,_ポイント);true),
    ( 書式定義(x軸文字間空白,_,_x軸文字間空白);true),
    ( 書式定義(y軸文字間空白,_,_y軸文字間空白);true),
    フォント定義の二(_フォント名,_フォント,_ポイント,_x軸文字間空白,_y軸文字間空白),!.

フォント定義の二(_フォント名,_フォント,_ポイント,_x軸文字間空白,_y軸文字間空白)
  :-
    pswr('%t%t %t%t %t %d %t %d %d %t\n',['/',_フォント名,'{ /',_フォント,findfont,_ポイント,'scalefont setfont',_x軸文字間空白,_y軸文字間空白,'3 2 roll lscape-test} def']),!.

zenkaku_font(_ポイント,_行間隔)
  :-
    retract(書式定義(行間隔,_,_)),
    asserta(書式定義(行間隔,_,_ポイント)),
    改行定義(newline,_,_,_,_行間隔,_,_),
    フォント定義(zenkaku,全角,_,_ポイント,0,0),!.
hankaku_font(_ポイント,_行間隔)
  :-
    retract(書式定義(行間隔,_,_)),
    asserta(書式定義(行間隔,_,_ポイント)),
    改行定義(newline,_,_,_,_行間隔,_,_),
    フォント定義(zenkaku,半角,_,_ポイント,0,0),!.
ascii_font(_ポイント,_行間隔)
  :-
    retract(書式定義(行間隔,_,_)),
    asserta(書式定義(行間隔,_,_ポイント)),
    改行定義(newline,_,_,_,_行間隔,_,_),
    フォント定義(zenkaku,ascii,_,_ポイント,0,0),!.

ポストスクリプト矩形(_左上x座標,_左上y座標,_右下x座標,_右下y座標,_線幅,_オプション)
  :-
    moveto(_左上x座標,_左上y座標),
    _幅 は _右下x座標 - _左上x座標,
    _高さ は _左上y座標-_右下y座標,
    _幅マイナス は -_幅,
    _高さマイナス は -_高さ,
    rlineto(_幅,0),
    rlineto(0,_高さマイナス),
    rlineto(_幅マイナス,0),
    rlineto(0,_高さ),
    closepath,
    setlinewidth(_線幅),
    _オプション,!.

ポストスクリプト矩形角丸め(_左上X座標,_左上Y座標,_右下X座標,_右下Y座標,_線幅,_オプション,_丸め幅)
  :-
    setlinewidth(_線幅),
    X2 is _左上X座標 + _丸め幅,
    moveto(X2,_左上Y座標),
    wr('%t %t %t %t %t arcto 4 {pop} repeat\n',[_右下X座標,_左上Y座標,_右下X座標,_右下Y座標,_丸め幅]),
    wr('%t %t %t %t %t arcto 4 {pop} repeat\n',[_右下X座標,_右下Y座標,_左上X座標,_右下Y座標,_丸め幅]),
    wr('%t %t %t %t %t arcto 4 {pop} repeat\n',[_左上X座標,_右下Y座標,_左上X座標,_左上Y座標,_丸め幅]),
    wr('%t %t %t %t %t arcto 4 {pop} repeat\n',[_左上X座標,_左上Y座標,_右下X座標,_左上Y座標,_丸め幅]),
    closepath,
    setlinewidth(_線幅),
    call(_オプション),!.

ポストスクリプト罫線(_,_左上y座標,_,_右下y座標,0,_y軸方向間隔,_)
  :-
    Y は _左上y座標 - _y軸方向間隔,
    Y =< _右下y座標,!.

ポストスクリプト罫線(_左上x座標,_左上y座標,_右下x座標,_右下y座標,0,_y軸方向間隔,_線幅)

  :-
    Len は _右下x座標 - _左上x座標,
    Y は _左上y座標 - _y軸方向間隔,
    moveto(_左上x座標,Y),
    setlinewidth(_線幅),
    rlineto(Len,0),
    stroke,
    ポストスクリプト罫線(_左上x座標,Y,_右下x座標,_右下y座標,0,_y軸方向間隔,_線幅),!.

ポストスクリプト罫線(_左上x座標,_,_右下x座標,_,_x軸方向間隔,0,_)
  :-
    X は _左上x座標 + _x軸方向間隔,
    X >= _右下x座標,!.
ポストスクリプト罫線(_左上x座標,_左上y座標,_右下x座標,_右下y座標,_x軸方向間隔,0,_線幅)

  :-
    Len は _左上y座標 - _右下y座標,
    X は _左上x座標 + _x軸方向間隔,
    moveto(X,_右下y座標),
    setlinewidth(_線幅),
    rlineto(0,Len),
    stroke,
    ポストスクリプト罫線(X,_左上y座標,_右下x座標,_右下y座標,_x軸方向間隔,0,_線幅),!.

arc(_中心X座標,_中心Y座標,_半径,_開始角度,_弧角度)
  :-
    _中心X座標の二 は _中心X座標,
    _中心Y座標の二 は _中心Y座標,
    stroke,
    pswr(arc(_中心X座標の二,_中心Y座標の二,_半径,_開始角度,_弧角度)),!.

save
  :-
    pswr(' /saveobj save def\n'),!.
restore
  :-
    pswr(' saveobj restore\n'),!.

stroke
  :-
    pswr(stroke),!.

closepath
  :-
    pswr(closepath),!.

setrgbcolor(Red,Green,Blue)
  :-
    pswr(setrgbcolor(Red,Green,Blue)),!.
sethsbcolor(Hue,Saturation,Brightness)
  :-
    pswr(sethsbcolor(Hue,Saturation,Brightness)),!.
setlinewidth(N)
  :-
    pswr(setlinewidth(N)),!.

rlineto(X,Y)
  :-
    X1 は X,
    Y1 は Y,
    pswr(rlineto(X1,Y1)),!.

lineto(X,Y)
  :-
    X1 は X,
    Y1 は Y,
    pswr(lineto(X1,Y1)),!.

curveto([]) :- !.
curveto([A|R])
  :-
    not(list(A)),
    concat([A|R],' ',L),
    wr(' %t curveto\n',[L]),!.
curveto([[X1,Y1,X2,Y2,X3,Y3]|R])
  :-
    curveto(X1,Y1,X2,Y2,X3,Y3),
    curveto(R),!.
curveto([[X1,Y1]|R])
  :-
    flat([[X1,Y1]|R],L),
    curveto(L),!.
curveto(X1,Y1,X2,Y2,X3,Y3)
  :-
    pswr(curveto(X1,Y1,X2,Y2,X3,Y3)),!.

rcurveto([]) :- !.
rcurveto([A|R])
  :-
    not(list(A)),
    concat([A|R],' ',L),
    wr(' %t rcurveto\n',[L]),!.
rcurveto([[X1,Y1,X2,Y2,X3,Y3]|R])
  :-
    rcurveto(X1,Y1,X2,Y2,X3,Y3),
    rcurveto(R),!.
rcurveto([[X1,Y1]|R])
  :-
    flat([[X1,Y1]|R],L),
    rcurveto(L),!.
rcurveto(X1,Y1,X2,Y2,X3,Y3)
  :-
    pswr(rcurveto(X1,Y1,X2,Y2,X3,Y3)),!.

ベジェ曲線(T,_刻み_,_,_,_,_,_,_,_,[]) :- T > 1.0,!.
ベジェ曲線(T,_刻み,X1,Y1,X2,Y2,X3,Y3,X4,Y4,[[X,Y]|R]) :-
    T2 is T + _刻み,
    X is (1-T) * (1-T) * (1-T) * X1 + 3 * (1-T) * (1-T) * T * X2
        + 3 * (1-T) * T * T * X3 + T * T * T + X4,
    Y is (1-T) * (1-T) * (1-T) * Y1 + 3 * (1-T) * (1-T) * T * Y2
        + 3 * (1-T) * T * T * Y3 + T * T * T * Y4,
    ベジェ曲線(T2,_刻み,X1,Y1,X2,Y2,X3,Y3,X4,Y4,R).

setdash([],Y)
  :-
    pswr(setdash([],Y)),!.
setdash([A|R],Y)
  :-
    concat([A|R],' ',X0),
    concat(['[',X0,']'],X),
    pswr(setdash(X,Y)),!.
setdash(X,Y)
  :-
    pswr(setdash(X,Y)),!.
setlinecap(X)
  :-
    pswr(setlinecap(X)),!.
setlinejoin(X)
  :-
    pswr(setlinejoin(X)),!.
matrix
  :-
    pswr(matrix),!.
setmatrix(Matrix)
  :-
    flat(Matrix,FlatMatrix),
    concat(FlatMatrix,' ',X0),
    concat(['[',X0,']'],X),
    pswr(setdash(X,Y)),!.
setscreen(Frequency,Angle,Proc)
  :-
    pswr(setscreen(Frequency,Angle,Proc)),!.
stroke
  :-
    pswr(stroke),!.

fill
  :-
    pswr(fill),!.

setgray(0)
  :-
    pswr(setgray('.0')),!.

setgray(F)
  :-
    sprintf('%1.2f',[F],S),
    subatomic(S,2,3,S1),
    pswr(setgray(S)),!.

pvector([],[])
  :-
    stroke,!.
pvector([],[[_X座標位置,_Y座標位置,_ベクター長|_オプション]|_R],_線幅,_破線形式,_白色度)
  :-
    線属性(_オプション,_線幅,_破線形式,_白色度),
    moveto(_X座標位置,_Y座標位置),
    rlineto(0,_ベクター長),
    線属性の二(_オプション,[_線幅,_破線形式,_白色度]),
    pvector([],R,_線幅,_破線形式,_白色度),!.
pvector([[_X座標位置,_Y座標位置,_ベクター長|_オプション]|_R],R1,_線幅,_破線形式,_白色度)
  :-
    線属性の一(_オプション,[_線幅,_破線形式,_白色度]),
    moveto(_X座標位置,_Y座標位置),
    rlineto(_ベクター長,0),
    線属性の二(_オプション,[_線幅,_破線形式,_白色度]),
    pvector(R,R1,_線幅,_破線形式,_白色度),!.

下線定義(_下線名,_印刷形式,_下線変位,_下線長,_下線幅)
  :-
    ( 書式定義(標準下線名,_,_下線名);true),
    ( 書式定義(下線変位,_,_下線変位);true),
    ( 書式定義(下線長,_印刷形式,_下線長);true),
    ( 書式定義(下線幅,_,_下線幅);true),
    下線定義の二(_下線名,_下線変位,_下線長,_下線幅),!.

us :- 下線定義(_,_,_,_,0).
us(N) :- 下線定義(_,_,_,_,N).

下線
  :-
    us,!.
下線定義の二(_下線名,_下線変位,_下線長,_下線幅)
  :-
    concat([_下線名,'-offset'],_下線変位名),
    concat([_下線名,'-length'],_下線長名),
    concat([_下線名,'-width'],_下線幅名),
    concat([_下線名,'-def'],_下線宣言名),
    pswr('%t%t %t\n',['/',_下線名,'1 def']),
    pswr('%t%t %t %t\n',['/',_下線長名,_下線長,def]),
    pswr('%t%t %t %t\n',['/',_下線幅名,_下線幅,def]),
    pswr('%t%t %t %t\n',['/',_下線変位名,_下線変位,def]),
    pswr('%t%t %t %t %t %t %t\n',['/',_下線宣言名,'{',_下線長名,'0 rlineto',_下線幅名,'setlinewidth} def']),!.

下線解除(_下線名)
  :-
    ( 書式定義(標準下線名,_,_下線名);true),
    pswr('%t%t %t\n',['/',_下線名,'0 def']),!.

破線定義(_破線名,_破線形式,_破線開始変位,_破線幅)
  :-
    ( 書式定義(標準破線名,_,_破線名);true),
    ( 書式定義(破線形式,_,_破線形式);true),
    ( 書式定義(破線開始変位,_,_破線開始変位);true),
    ( 書式定義(破線幅,_,_破線幅);true),
    破線定義の二(_破線名,_破線形式,_破線開始変位,_破線幅),!.

破線定義の二(_破線名,_破線形式,_破線開始変位,_破線幅)
  :-
    concat([_破線名,'-type'],_破線形式名),
    concat([_破線名,'-startpos'],_破線変位名),
    concat([_破線名,'-width'],_破線幅名),
    concat(_破線形式,' ',_破線形式の二),
    concat(['[',_破線形式の二,']'],_破線形式の三),
    concat([_破線名,'-def'],_破線宣言名),
    pswr('%t%t %t\n',['/',_破線名,'1 def']),
    pswr('%t%t %t %t\n',['/',_破線形式名,_破線形式の三,def]),
    pswr('%t%t %t %t\n',['/',_破線変位名,_破線開始変位,def]),
    pswr('%t%t %t %t\n',['/',_破線幅名,_破線幅,def]),
    pswr('%t%t %t %t %t %t %t %t\n',['/',_破線宣言名,'{',_破線形式名,_破線変位名,'setdash',_破線幅名,'setlinewidth } def']),!.

破線解除(_破線名)
  :-
    ( 書式定義(標準破線名,_,_破線名);true),
    pswr('%t%t %t\n',['/',_破線名,'0 def']),!.

破線描画定義(_名,_破線パターン,_破線パターン開始位置,_線幅)
  :-
    破線パターン文字列(_破線パターン,_破線パターン文字列),
    pswr('%t%t %t %t %t %t %t %t %t\n',['/',_名,'{ [,_破線パターン文字列',']',_破線パターン開始位置,setdash,_線幅,'setlinewidth} def']),!.

破線パターン文字列(L,L1)
  :-
    concat(L,' ',L1),!.

ランドスケープ表示定義
  :-
    pswr('/lscape-show { gsave 90 rotate ashow ypos-save grestore xpos ypos moveto} def\n'),!.
ランドスケープ検査定義
  :-
    pswr('/lscape-test {lscape 1 eq {lscape-show} {ashow} ifelse} def\n'),!.
ランドスケープ
  :-
    set_global(印刷形式,ランドスケープ),
    pswr('/lscape 1 def\n /portlate 0 def\n'),!.
ポートレート
  :-
    set_global(印刷形式,ポートレート),
    pswr('/portlate 1 def\n/lscape 0 def\n'),!.

肖像画
  :-
    set_global(印刷形式,ポートレート),
    !.
風景画
  :-
    set_global(印刷形式,ランドスケープ),
    !.

moveto(X+X1,Y+Y1)
  :-
    var(X),
    var(Y),
    integer(X1),
    integer(Y1),
    pswr('currentpoint exch \n'),
    concat([X1,' add exch'],S),
    pswr(S),
    concat([Y1,' add moveto\n'],S2),
    pswr(S2),!.


moveto(X+X1,Y)
  :-
    var(X),
    integer(X1),
    var(Y),
    pswr('currentpoint exch \n'),
    concat([X1,' add exch moveto'],S),
    pswr(S),!.

moveto(X,Y+Y1)
  :-
    var(X),
    integer(Y1),
    var(Y),
    pswr('currentpoint \n'),
    concat([Y1,' add moveto'],S),
    pswr(S),!.

moveto(X,Y)
  :-
    var(X),
    Y1 は Y,
    pswr('currentpoint pop \n'),
    pswr(moveto(Y1)),!.

moveto(X,Y)
  :-
    var(Y),
    X1 は X,
    concat([X1,' exch moveto'],S),
    pswr('currentpoint exch pop \n'),
    pswr(S),!.

moveto(X,Y)
  :-
    X1 は X,
    Y1 は Y,
    pswr(moveto(X1,Y1)),!.
showpage
  :-
    pswr(showpage),
    get_global(印刷形式,_印刷形式),
    書式定義(初期x座標,_印刷形式,_初期x座標),
    書式定義(初期y座標,_印刷形式,_初期y座標),
    moveto(_初期x座標,_初期y座標),!.
copypage
  :-
    pswr(copypage),!.
erasepage
  :-
    pswr(erasepage),!.

文字開始位置(ポートレート,_文字開始変位,_初期x座標,_初期y座標,_文字開始x座標,_文字開始y座標)
  :-
    _文字開始y座標 は _初期y座標,
    _文字開始x座標 は _初期x座標 + _文字開始変位,!.

文字開始位置(ランドスケープ,_文字開始変位,_初期x座標,_初期y座標,_文字開始x座標,_文字開始y座標)
  :-
    _文字開始x座標 は _初期x座標,
    _文字開始y座標 は _初期y座標 + _文字開始変位,!.

背景色なし
  :-
    retract(書式定義(背景色,_,_)),
    assertz(書式定義(背景色,_, (-1))),!.

ポストスクリプト背景
  :-
    書式定義(背景色,_, -1),!.

ポストスクリプト背景
  :-
    get_global(印刷形式,_印刷形式),
    書式定義(背景色,_,_白色度),
    書式定義(下線長,_,_下線長),
    書式定義(行間隔,_,_行間隔),
    書式定義(制限行数,_印刷形式,_制限行数),
    書式定義(初期x座標,_印刷形式,_初期x座標),
    書式定義(初期y座標,_印刷形式,_初期y座標),
    setgray(_白色度),

    X4 は _初期x座標 + _下線長,
    Y40 は '*'(_行間隔,_制限行数),
    Y4 は _初期y座標 - Y40,
    Y1 は _初期y座標 + _行間隔,
    ポストスクリプト矩形(_初期x座標,Y1,X4,Y4,0,fill), 
    setgray(0),!.

ポストスクリプト汎用定義
  :-
   get_global(印刷形式,_印刷形式),
   ypos保存定義,
   call(_印刷形式),

   ランドスケープ表示定義,
   ランドスケープ検査定義,

   下線定義(_,_印刷形式,_,_,_),
   破線定義(_,_,_,_),
   改行定義(_改行名,_印刷形式,_,_,_,_,_),
   一時改行定義(_改行名),
   retract(書式定義(標準改行名,_,_)),
   asserta(書式定義(標準改行名,_,tnl)),
   フォント定義(_,全角,_,_,4,0),
   フォント定義(_,半角,_,_,2,0),
   フォント定義(_,ascii,_,_,2,0),!.

適用業務標準設定(_印刷形式,_初期x座標,_初期y座標,_文字開始変位,_制限行数,_文字名ならび)
  :-
    get_global(印刷形式,_印刷形式),
    書式定義(初期x座標,_印刷形式,_初期x座標),
    書式定義(初期y座標,_印刷形式,_初期y座標),
    書式定義(文字開始変位,_,_文字開始変位),
    書式定義(制限行数,_印刷形式,_制限行数),
    書式定義(標準フォント名,ascii,_asciiフォント名),
    書式定義(標準フォント名,全角,_全角フォント名),
    書式定義(標準フォント名,半角,_半角フォント名),
    一時全角定義(_全角フォント名),
    一時半角定義(_半角フォント名),
    一時ascii定義(_asciiフォント名),
    (retract(書式定義(標準フォント名,_,_)),fail;true),
    asserta(書式定義(標準フォント名,ascii,ta)),
    asserta(書式定義(標準フォント名,全角,tz)),
    asserta(書式定義(標準フォント名,半角,th)),

    _文字名ならび = [ta,tz,th],
    !.
ポストスクリプト見出し(1,_,_初期化情報)
  :-
    midashi,
    call(_初期化情報),!.
ポストスクリプト見出し(_,_,_).

setup(F)
  :-
    seeing(FILE),
    see(F),
    repeat,
       get0(X),
       ( X = -1;put(X),fail),
    seen,
    see(FILE),!.

ail3(FILE)
  :-
    seeing(CurrentFile),
    see(FILE),
    repeat,
    reads(X),
    ( X=end_of_file;
      ail3_1(X)
    ),
    seen,
    see(CurrentFile),!.

ail3_1(X)
  :-
    subatomic(X,1,2,'%%'),
    !,fail.
ail3_1(X)
  :-
    subatomic(X,1,5,gsave),
    atomic_length(X,N),
    M is N-7,
    subatomic(X,M,8,showpage),
    !,fail.
ail3_1(X)
  :-
    wr('%t\n',[X]),
    fail.


% *** user: p_print / 7 ***
p_print(FI,P_DEFAULT,P_DEF,MIDASHI,_制御命令,FO,TTY) :-
    r_consult(P_DEFAULT),
    p_print_def(FI,P_DEFAULT,P_DEF,MIDASHI),
        open(P_DEF,read,Input_1) ,
        repeat ,
        read(Input_1,P) ,
        (
          P = end_of_file
        ;
          P = (書式定義(ARG1,ARG2,ARG3) :- T) ,
          retract((書式定義(ARG1,ARG2,_) :- T)) ,
          asserta((書式定義(ARG1,ARG2,ARG3) :- T)) ,
          fail
        ;
          not P = (書式定義(ARG1,ARG2,ARG3) :- _) ,
          P = 書式定義(ARG1,ARG2,ARG3) ,
          retract((書式定義(ARG1,ARG2,_) :- _)) ,
          asserta(書式定義(ARG1,ARG2,ARG3)) ,
          fail
        ) ,
        close(Input_1),
    r_consult(MIDASHI),
    slush_op(FI,FI_2),
    (   atom(FO),
        not(FO=user_output),
        tell(FO);
        not(atom(FO)),
        tmpnam(FO),
        tell(FO);
        FO=user_output
    ),
    (   atom(FI_2),
        not(FI_2=user_input),
        see(FI_2);
        atom(FI_2),
        FI_2=user_input
    ),
    wr '%%!\n',
    '一時全角フォント名'('明朝'),
    '一時半角フォント名'('ゴチック'),
    '一時asciiフォント名'('Times-Roman'),
    'ポストスクリプト汎用定義',
    '適用業務標準設定'(_印刷形式,_初期x座標,_初期y座標,_文字開始変位,_制限行数,_文字名ならび),
    set_global('制限行数',_制限行数),
    get_global('印刷端末文字コード',_文字コード),
    'p_print_フォント定義'(_文字コード),
    (
        '書式定義'('下線幅',_,-1),
        '書式定義'('標準下線名',_,_標準下線名),
        '下線解除'(_標準下線名)
    ;
        true
    ),
    call(_制御命令),
    set_global(page,1),
    repeat,
    xpos(_初期x座標),
    ypos(_初期y座標),
    (   _印刷形式=ポートレート,
        _仮x座標 is _初期x座標 + _文字開始変位,
        _仮y座標 = _初期y座標;
        _印刷形式=ランドスケープ,
        _仮x座標 = _初期x座標,
        _仮y座標 is _初期y座標 + _文字開始変位
    ),
    moveto(_仮x座標,_仮y座標),
    newpath,
    'ポストスクリプト背景',
    set_global('頁換え',off),
    p_print_0(_制限行数,_印刷形式,_文字開始変位,_初期x座標,_初期y座標,_文字開始x座標,_文字開始y座標,_文字名ならび,X),
    X = end_of_file,
    seen,
    told,
    ! .

% *** user: p_print / 5 ***
p_print(FI,P_DEFAULT,P_DEF,MIDASHI,_制御命令) :-
    tty(TTY_1),
    concat(['/usr2/',TTY_1,'.pst'],SaveSystem),
    save_system(SaveSystem),
    印刷端末(_印刷端末),
    p_print(FI,P_DEFAULT,P_DEF,MIDASHI,_制御命令,FO,TTY),
    '印刷制御'(_印刷端末,FO,_),
    ! .

% *** user: p_print / 4 ***
p_print(FI,P_DEFAULT,P_DEF,MIDASHI) :-
    slush_op(FI,FI_2),
    p_print(FI_2,P_DEFAULT,P_DEF,MIDASHI,true),
    ! .

% *** user: p_print / 2 ***
p_print(FI,_制御命令) :-
    slush_op(FI,FI_2),
    p_print(FI_2,'p_default.pro','p_def.pro','midashi.pro',_制御命令),
    ! .

% *** user: p_print / 1 ***
p_print(Network :: FI) :-
    hosts(_,Network,_,sjis),
    tmpnam(F),
    tmpnam(F2),
    cp(Network :: FI,F),
    concat(['sjtoeuc ',F,' >',F2],S),
    system(S),
    p_print(F2),
    unlink(F),
    unlink(F2),
    ! .
p_print(FI) :-
    slush_op(FI,FI_2),
    p_print(FI_2,'p_default.pro','p_def.pro','midashi.pro',true),
    ! .

p_print_フォント定義(euc)
  :-
    白抜きフォント定義(zenkaku4,全角,'Ryumin-Light-78-EUC-H',30),
    白抜きフォント定義(hankaku4,半角,'Ryumin-Light.Hankaku',30),
    白抜きフォント定義('ascii-code4',ascii,'Courier',30),
    フォント定義(ascii7,ascii,'Times-Roman',7,0,0),
    フォント定義(zenkaku7,全角,'GothicBBB-Medium-78-EUC-H',7,0,0),
    フォント定義(hankaku7,半角,'GothicBBB-Medium.Hankaku',7,0,0),
    フォント定義(ascii8,ascii,'Times-Roman',8,0,0),
    フォント定義(zenkaku8,全角,'GothicBBB-Medium-78-EUC-H',8,0,0),
    フォント定義(hankaku8,半角,'GothicBBB-Medium.Hankaku',8,0,0),
    フォント定義(zenkaku6,全角,'Ryumin-Light-78-EUC-H',6,0,0),
    フォント定義(hankaku6,半角,'Ryumin-Light.Hankaku',6,0,0),
    フォント定義(ascii6,ascii,'Times-Roman',6,0,0),
    フォント定義(zenkaku16,全角,'Ryumin-Light-78-EUC-H',16,0,0),
    フォント定義(ascii16,ascii,'Times-Roman',16,0,0),
    フォント定義(hankaku16,半角,'Ryumin-Light.Hankaku',16,0,0),
    フォント定義(zenkaku25,全角,'Ryumin-Light-78-EUC-H',25,0,0),
    フォント定義(ascii25,ascii,'Times-Roman',25,0,0),
    フォント定義(hankaku25,半角,'Ryumin-Light.Hankaku',25,0,0),
    フォント定義(ascii30,ascii,'Times-Roman',30,0,0),
    フォント定義(zenkaku30,全角,'Ryumin-Light-78-EUC-H',30,0,0),
    フォント定義(hankaku30,半角,'GothicBBB-Medium.Hankaku',30,0,0),!.

p_print_フォント定義(sjis)
  :-

    白抜きフォント定義(zenkaku4,全角,'Ryumin-Light-83pv-RKSJ-H',30),
    白抜きフォント定義(hankaku4,半角,'Ryumin-Light.Hankaku',30),
    白抜きフォント定義('ascii-code4',ascii,'Courier',30),
    フォント定義(ascii7,ascii,'Times-Roman',7,0,0),
    フォント定義(zenkaku7,全角,'GothicBBB-Medium-83pv-RKSJ-H',7,0,0),
    フォント定義(hankaku7,半角,'GothicBBB-Medium.Hankaku',7,0,0),
    フォント定義(ascii8,ascii,'Times-Roman',8,0,0),
    フォント定義(zenkaku8,全角,'GothicBBB-Medium-83pv-RKSJ-H',8,0,0),
    フォント定義(hankaku8,半角,'GothicBBB-Medium.Hankaku',8,0,0),
    フォント定義(zenkaku6,全角,'Ryumin-Light-83pv-RKSJ-H',6,0,0),
    フォント定義(hankaku6,半角,'Ryumin-Light.Hankaku',6,0,0),
    フォント定義(ascii6,ascii,'Times-Roman',6,0,0),

    フォント定義(zenkakuG8,全角,'GothicBBB-Medium-83pv-RKSJ-H',8,0,0),
    フォント定義(asciiG8,ascii,'Helvetica-Bold',8,0,0),
    フォント定義(hankakuG8,半角,'GothicBBB-Medium.Hankaku',8,0,0),

    フォント定義(zenkaku12,全角,'GothicBBB-Medium-83pv-RKSJ-H',12,0,0),
    フォント定義(ascii12,ascii,'Helvetica-Bold',12,0,0),
    フォント定義(hankaku12,半角,'Gothic-Medium.Hankaku',12,0,0),
/*
    フォント定義(zenkaku16,全角,'Ryumin-Light-83pv-RKSJ-H',16,0,0),
    フォント定義(ascii16,ascii,'Times-Roman',16,0,0),
    フォント定義(hankaku16,半角,'Ryumin-Light.Hankaku',16,0,0),
*/
    フォント定義(zenkaku16,全角,'GothicBBB-Medium-83pv-RKSJ-H',16,0,0),
    フォント定義(ascii16,ascii,'Helvetica-Bold',16,0,0),
    フォント定義(hankaku16,半角,'Gothic-Medium.Hankaku',16,0,0),
    フォント定義(ascii20,ascii,'Times-Roman',20,0,0),
    フォント定義(zenkaku20,全角,'Ryumin-Light-83pv-RKSJ-H',20,0,0),
    フォント定義(hankaku20,半角,'GothicBBB-Medium.Hankaku',20,0,0),

    フォント定義(zenkaku25,全角,'Ryumin-Light-83pv-RKSJ-H',25,0,0),
    フォント定義(ascii25,ascii,'Times-Roman',25,0,0),
    フォント定義(hankaku25,半角,'Ryumin-Light.Hankaku',25,0,0),
    フォント定義(ascii30,ascii,'Times-Roman',30,0,0),
    フォント定義(zenkaku30,全角,'Ryumin-Light-83pv-RKSJ-H',30,0,0),
    フォント定義(hankaku30,半角,'GothicBBB-Medium.Hankaku',30,0,0),!.

/*
    白抜きフォント定義(zenkaku4,全角,'Ryumin-Light-KL',30),
    白抜きフォント定義(hankaku4,半角,'Ryumin-Light.Hankaku',30),
    白抜きフォント定義('ascii-code4',ascii,Courier,30),
    フォント定義(ascii7,ascii,'Times-Roman',7,0,0),
    フォント定義(zenkaku7,全角,'GothicBBB-Midium',7,0,0),
    フォント定義(hankaku7,半角,'GothicBBB-Midium.Hankaku',7,0,0),
    フォント定義(ascii8,ascii,'Times-Roman',8,0,0),
    フォント定義(zenkaku8,全角,'GothicBBB-Midium',8,0,0),
    フォント定義(hankaku8,半角,'GothicBBB-Midium.Hankaku',8,0,0),
    フォント定義(zenkaku6,全角,'Ryumin-Light-KL',6,0,0),
    フォント定義(hankaku6,半角,'Ryumin-Light.Hankaku',6,0,0),
    フォント定義(ascii6,ascii,'Times-Roman',6,0,0),
    フォント定義(zenkaku16,全角,'Ryumin-Light-KL',16,0,0),
    フォント定義(ascii16,ascii,'Times-Roman',16,0,0),
    フォント定義(hankaku16,半角,'Ryumin-Light.Hankaku',16,0,0),
    フォント定義(zenkaku25,全角,'Ryumin-Light-KL',25,0,0),
    フォント定義(ascii25,ascii,'Times-Roman',25,0,0),
    フォント定義(hankaku25,半角,'Ryumin-Light.Hankaku',25,0,0),
    フォント定義(ascii30,ascii,'Times-Roman',30,0,0),
    フォント定義(zenkaku30,全角,'Ryumin-Light-KL',30,0,0),
    フォント定義(hankaku30,半角,'GothicBBB-Midium.Hankaku',30,0,0),!.
*/
p_print_4(ttyz02,_一時ファイル)
  :-
    cp(_一時ファイル,ttyz02 :: prn),
    unlink(_一時ファイル),!.
p_print_4(ttyz03,_一時ファイル)
  :-
    cp(_一時ファイル,ttyz03 :: prn),
    unlink(_一時ファイル),!.
p_print_4(_印刷端末,_印刷端末) :- !.
p_print_4(_印刷端末,_一時ファイル)
  :-
    cp(_一時ファイル,_印刷端末 :: prn),
    unlink(_一時ファイル),
    !.

p_print_def(FI,P_DEFAULT,P_DEF,MIDASHI)
  :-
    ( 変数(P_DEFAULT),
      P_DEFAULT = 'p_default.pro';
      変数(P_DEF),
      P_DEF = 'p_def.pro';
      変数(MIDASHI),
      MIDASHI = 'midashi.pro'
    ),
    p_print_def(FI,P_DEFAULT,P_DEF,MIDASHI),!.
p_print_def(_,_,_,_).



印刷端末取得(xview,_一時ファイル)
  :-
    get_global(印刷端末,xview),
    tmpnam(_一時ファイル),!.
印刷端末取得(_印刷端末,_一時ファイル)
  :-
    get_global(印刷端末,_印刷端末),
    subatomic(_印刷端末,1,3,tty),
    tmpnam(_一時ファイル),!.
印刷端末取得(_印刷端末,_印刷端末)
  :-
    get_global(印刷端末,_印刷端末).
p_print_copy(F,F1)
  :-
    tmpnam(F1),
    tell(F1),
    see(F),
    repeat,
       reads(X),
       ( X=end_of_file;
         atomic_length(X,LEN),
         p_print_copy_2(X,LEN),
         fail
       ),
    seen,
    told,!.
p_print_copy_2(X,LEN)
  :-
    get_global(印刷形式,ポートレート),

    書式定義(初期x座標,ポートレート,_初期x座標),
    書式定義(文字開始変位,_,_文字開始変位),
    書式定義(ポイント,_,_ポイント),
    書式定義(下線長,ポートレート,_下線長),
    N は '-'(_下線長,'*'(_文字開始変位,2)), 
    LEN2 は (_下線長 / _ポイント),
    p_print_copy_3(X,LEN,LEN2),!.

p_print_copy_3(X,LEN,LEN2)
  :-
    LEN>=LEN2,
    write(X),nl,!.
p_print_copy_3(X,LEN,LEN2)
  :-
    eucsubstr(X,1,LEN2,Y),
    write(Y),nl,
    LEN3 は LEN2-LEN,
    N3 は LEN2 + 1,
    eucsubstr(X,N3,LEN3,Z),
    write(Z),nl,!.


% *** user: p_print_0 / 9 ***
p_print_0(_制限行数,_印刷形式,_文字開始変位,_初期x座標,_初期y座標,_文字開始x座標,_文字開始y座標,_文字名ならび,X) :-
    char_code(A,12),
/*
    set_global('制限行数',_制限行数),
*/
    pct_for(1,N),
    reads(X),
    (
        X = end_of_file,
        N = 1
    ;
        X = end_of_file,
        \+(N = 1),
        'pct_頁表示',
        showpage
    ;
        N = 1,
        (
            subatomic(X,1,1,A),
            subatomic(X,2,2,'%/'),
            SP1 = 4
        ;
            subatomic(X,1,11,'%/showpage.'),
            subatomic(X,13,2,'%/'),
            SP1 = 15
        ),
        error_protect(parse_atom(X,SP1,_,T,_,_),fail),
        (
            \+(T = end_of_file),
            \+(T = []),
            error_protect(T,fail)
        ;
            T = end_of_file
        ),
        fail
    ;
        \+(N = 1),
        (
            subatomic(X,1,1,A),
            SP2 = 2
        ;
            subatomic(X,1,11,'%/showpage.'),
            SP2 = 13
        ),
        get_global('制限行数',_制限行数の二),
        \+(0 is N mod _制限行数の二),
        !,
        'pct_頁表示',
        showpage,
        subatomic(X,SP2,2,'%/'),
        SP3 is SP2 + 2,
        error_protect(parse_atom(X,SP3,_,T,_,_),fail),
        (
            \+(T = end_of_file),
            error_protect(T,fail)
        ;
            T = end_of_file
        ),
        !,
        fail
    ;
        get_global('制限行数',_制限行数の二),
        'ポストスクリプト見出し'(N,_制限行数の二,(xpos(_初期x座標) , ypos(_初期y座標) , setdash('[1 0]',0) , '文字開始位置'(_印刷形式,_文字開始変位,_初期x座標,_初期y座標,_文字開始x座標,_文字開始y座標) , moveto(_文字開始x座標,_文字開始y座標))),
        setgray(0),
        concat([X,'\n'],Y),
        'ポストスクリプト文字列'(_文字名ならび,_,Y,Z),
        wr('%t\n',[Z]),
        0 'は' N mod _制限行数の二,
        'pct_頁表示',
        showpage
    ),
    ! .
/*
p_print_0(_制限行数,_印刷形式,_文字開始変位,_初期x座標,_初期y座標,_文字開始x座標,_文字開始y座標,_文字名ならび,X) :-
        char_code(A,12) ,
        set_global(制限行数,_制限行数) ,
        pct_for(1,N) ,
        (   N=1,
            moveto(_文字開始x座標,_文字開始y座標);
            not(N=1)
        ),
        reads(X) ,
        (
          X = end_of_file ,
          N = 1
        ;
          X = end_of_file ,
          not N = 1 ,
          pct_頁表示 ,
          showpage
        ;
          N = 1 ,
          (   subatomic(X,1,1,A),
              subatomic(X,2,2,'%/'),
              SP1=4;
              subatomic(X,1,11,'%/showpage.'),
              subatomic(X,13,2,'%/'),
              SP1=15
          ),
          moveto(_文字開始x座標,_文字開始y座標),
          error_protect(parse_atom(X,SP1,_,T,_,_),fail),
          (
            not T = end_of_file ,
            not(T = []),
            error_protect(T,fail)
          ;
            T = end_of_file
          ) ,
          fail
        ;
          not N = 1 ,
          (   subatomic(X,1,1,A),
              SP2=2,
              moveto(_文字開始x座標,_文字開始y座標);
              subatomic(X,1,11,'%/showpage.'),
              SP2=13,
              moveto(_文字開始x座標,_文字開始y座標)
          ),
          get_global(制限行数,_制限行数の二),
          not(0 is N mod _制限行数の二),
          pct_頁表示,
          showpage,
          subatomic(X,SP2,2,'%/'),
          SP3 is SP2+2,
          error_protect(parse_atom(X,SP3,_,T,_,_),fail),
          (
            not T = end_of_file ,
            error_protect(T,fail)
          ;
            T = end_of_file
          ) ,
          (!) ,
          fail
        ;
          get_global(制限行数,_制限行数の二) ,
          ポストスクリプト見出し(N,_制限行数の二,(xpos(_初期x座標) , ypos(_初期y座標) , setdash('[1 0]',0) , 文字開始位置(_印刷形式,_文字開始変位,_初期x座標,_初期y座標,_文字開始x座標,_文字開始y座標) , moveto(_文字開始x座標,_文字開始y座標))) ,
          setgray(0) ,
          concat([X,'\n'],Y) ,
          ポストスクリプト文字列(_文字名ならび,_,Y,Z) ,
          wr('%t\n',[Z]),
          0 は N mod _制限行数の二 ,
          pct_頁表示 ,
          showpage
        ) ,
        (!) .
*/

pct_頁表示
  :-
    get_global(頁表示,off),!.
pct_頁表示
  :-
    get_global(印刷形式,ポートレート),
    get_global(page,PAGE),
    PAGE1 is PAGE+1,
    set_global(page,PAGE1),
/*    atoi(Page,PAGE), */
    lpad(PAGE,2,' ',Page),
    moveto(300,60),
    ポストスクリプト文字列(['ascii-code',zenkaku,hankaku],_,Page,W2),
    wr('%t\n',[W2]),!.

pct_頁表示
  :-
    get_global(印刷形式,ランドスケープ),
    get_global(page,PAGE),
    PAGE1 is PAGE+1,
    set_global(page,PAGE1),
/*    atoi(Page,PAGE), */
    lpad(PAGE,2,' ',Page),
    moveto(565,416),
    ポストスクリプト文字列(['ascii-code',zenkaku,hankaku],_,Page,W2),
    wr('%t\n',[W2]),!.

pct_for(A,_)
  :-
    get_global(制限行数,_制限行数),
    _制限行数 < A,!,fail.
pct_for(A,A).
pct_for(A,B)
  :-
    A2 is A+1,
    pct_for(A2,B).
%/実線,下線定義(_,_,_,_,0). 
実線
  :-
    retract(書式定義(破線形式,_,_)),
    asserta(書式定義(破線形式,_,[1,0])).

行数(_行数)
  :-
    set_global(制限行数,_行数).

印刷制御(アクロバット,FO,_保護ファイル)
  :-
    ペーパーサイズ(PAPERSIZE),
    印刷制御保護ファイル(FO4,FO40,FO43,FO44),
    concat(['ps2pdf -sPAPERSIZE=',PAPERSIZE,' ',FO,' ',FO44],S),
    system(S),
    cp(FO44,FO43),
    set_global(html,jump),!.

印刷制御(_印刷端末,FO,_)
  :-
    concat(['lpr -P',_印刷端末,' ',FO],SYSTEM),
    system(SYSTEM),
    !.

印刷制御保護ファイル(FO4,FO40,FO43,FO44)
  :-
    subatomic(FO4,1,5,'/tmp/'),
    replace_all(FO4,'/tmp/','',FO40),
    concat(['/tmp/',FO40,'.pdf'],FO43),
    set_global(tmpnam,FO43),
    concat(['/home/takao/tmp/',FO40,'.pdf'],FO44),!.

印刷制御保護ファイル(FO4,FO40,FO43,FO44)
  :-
    not(subatomic(FO4,1,5,'/tmp/')),
    make_list(FO4,['/'],L),
    last(L,FO40),
    concat(['/tmp/',FO40,'.pdf'],FO43),
    set_global(tmpnam,FO43),
    concat(['/home/takao/tmp/',FO40,'.pdf'],FO44),!.

ローカル印刷端末(ttyz06) :- !.

ペーパーサイズ(a4).
ペーパーサイズ(_旧,_新)
  :-
    ペーパーサイズ(_旧),
    retract(ペーパーサイズ(_旧)),
    assertz(ペーパーサイズ(_新)),!.

印刷制御_acrobat_server_待ち合わせ(F)
  :-
    アクロバットサーバー(AcrobatServer),
    atomic_length(F,Len),
    for(1,N,30),
    sleep(1),
    anonymousdir(AcrobatServer,'/out',X),
    member(A,X),
    atom_suffix(A,Len,F),
    split(A,[' '],[_,_,_,_,Size,Mon,Day,_,_]),
    (   \+(Size = 0),
        sleep(2);
        Size = 0,
        sleep(5)
    ),
    N < 10,!.

大域変数を取得(Key,Value)
  :-
    error_protect(get_global(Key,Value),fail).