ライブラリ libgm のプロトタイプと機能概要(C言語)

English

 このライブラリ libgm に含まれる各ルーチンのソースは, 'getargs.f'(FORTRAN言語ソース) を除いて, いずれもC言語で記述されており,そのプロトタイプと機能概要を以下に示す.
 ルーチン名の末尾が '_' のものは,FORTRAN言語用である. FORTRAN言語からのより詳細な利用法については,使用説明書HTML文書を 用意してあり,その目次ページ libf.html から アクセスできる.
 C言語用のルーチンは,大部分が整数値を返す関数となっており,関数値を返すこと 自体が目的となっている場合を除くと,返される値は,正常に動作終了したとき 0,プ ログラムの続行が無意味と判断されるエラーのとき -1,軽微なエラーの場合に 正の値 となっている.


PSPLOT (線画 PostScript出力)

 PSPLOT は,PostScriptプリンタへの線画出力を行うためのルーチン群 である.
 線画を描く基本機能として,C言語用の関数群(psopn, plots, plote, pscls, epsbox, plot, clspath, scisor, factor, penatr, newpen, qpatr, qpsfp, qapos, where, wrect, wcirc)があり,これらの関数と FORTRAN言語 とのインタフェイスをはかる基本ルーチン群(psopn_, plots_, plote_, pscls_, epsbox_, plot_, scisor_, factor_, penatr_, newpen_, where_, wrect_, wpolyg_, wcirc_)を用意してある.

int  psopn(char *pfile, char *sheet);
void psopn_(char *pfile, char *sheet);
  使用用紙(sheet)を指定し,PostScript出力ファイル(pfile)をオープンする.

int  plots(double xo, double yo);
void plots_(float *xo, float *yo);
  頁の開始を宣言し,初期原点(xo,yo)を指定する.

int  plote(void);
void plote_(void);
  頁の終了を宣言する.

int  pscls(void);
void pscls_(void);
  PostScript出力ファイルをクローズする.

int  epsbox(double obbx, double obby, double sbbx, double sbby);
void epsbox_(float *obbx, float *obby, float *sbbx, float *sbby);
  psopn(psopn_)の呼出しより前に,BoundingBox値を原点座標(obbx,obby)および
  その幅と高さ(sbbx,sbby)で指定する.

int  plot(double xp, double yp, int md);
void plot_(float *xp, float *yp, int *md);
  モード(md)に従って,ペンを指定位置(xp,yp)へ移動する. md が ±2 ならペン
  ダウンで,その他のときペンアップで移動し,md<0 のとき 移動先を原点に再設
  定する.

int clspath(int join);
  連続するペンダウンでの線描画の始点まで線を引き,閉じた多角形を構成する.
  引数(join)は折点の角の処理方法を指定し,0 を与えると Miter join,2 を与え
  ると Bevel join,それ以外の場合は Round join になる.

int  scisor(double xlm, double ylm, double wlm, double hlm);
void scisor_(float *xlm, float *ylm, float *wlm, float *hlm);
  描画の有効範囲を,基点座標(xlm,ylm),横幅(wlm>0.),高さ(hlm>0.)で指定す
  る.この範囲の外側の描画要求は,シザリングされる(wrect, wcirc を除く).

int  factor(double fac);
void factor_(float *fac);
  使用座標系の拡大率(fac)を指定する.fac=1. のとき,長さの単位が cm となる.

int  penatr(int jpen, int icol, int ityp, double thick);
void penatr_(int *jpen, int *icol, int *ityp, float *thick);
  指定のペン番号(jpen)に対する色(icol)・線種(ityp)・線幅(thick)を設定する.

int  newpen(int npen);
void newpen_(int *npen);
  描画に使用するペン番号(npen)を指定する.

int  qpatr(int mpen, int *lcol, int *ltyp, double *wthick);
  現在のペンをペンアップ状態とし,ペン番号mpen に設定されている色(lcol)・線種
  (ltyp)・線幅(wthick)を得る.また,現在のペン番号を関数値とする.

int  qpsfp(FILE **fps);
int  qapos(int *ixp, int *iyp);
  PS出力ファイルのファイルポインタ(fps)/ペンの現絶対座標位置(ixp,iyp)を得る.

int  where(double *wx, double *wy, double *wfac);
void where_(float *wx, float *wy, float *wfac);
  現在のペンの位置座標(wx,wy),座標系拡大率(wfac)を得る.

int  wrect(double xl, double yl, double wide, double high);
void wrect_(float *xl, float *yl, float *wide, float *high);
  基点座標(xl,yl),横幅(wide),高さ(high)を指定して,矩形を描く.

void wpolyg_(float *xm, float *ym, int *npt, int *inc);
  頂点座標を配列(xm,ym)で指定して,頂点数が npt(>2) の多角形を描く.
  (inc は配列から座標値を取り出す間隔を指定する.)

int  wcirc(double xc, double yc, double radius, double ang1, double ang2);
void wcirc_(float *xc, float *yc, float *radius, float *ang1, float *ang2);
  中心座標(xc,yc),半径(radius),始・終点の角度(ang1,ang2)を指定して,円(弧)
  を描く.

PSPAINT (面描画 PostScript出力)

 PSPAINT は,PostScriptプリンタへの面描画出力を行うためのルーチン群 であり,PSPLOTの配下で動作する.C言語用の関数群として,dftone, dfrgbt, dfcols, dresol, dframe, paintm, paintw 及び dfpcol, paintc, paintr, paintp があり,FORTRAN言語からも同じ名称でコールできるように インタフェイスルーチンを用意してある.

int dftone(int nlevel, int mtone[], int ktnlo, int ktnhi, int ktnvd);
void dftone_(int *nlevel, int mtone[], int *ktnlo, int *ktnhi, int *ktnvd);
  paintm ルーチンによる2次元配列データ表示をモノクロ表示に指定し,その濃淡階
  調を,階調数(nlevel),階調数に対応した濃淡レベルを指定する配列(mtone),下限
  以下の値/上限以上の値/未定義データ領域 に対応させる濃淡レベル(ktnlo/ktnhi/
  ktnvd)で指定する.

int dfrgbt(int nclev, int mrgb[], int kclo, int kchi, int kcnv);
void dfrgbt_(int *nclev, int mrgb[], int *kclo, int *kchi, int *kcnv);
  paintm ルーチンによる2次元配列データ表示をカラー表示に指定し,そのカラー階
  調を,階調数(nclev),階調数に対応したカラーコードを指定する配列(mrgb),下限
  以下の値/上限以上の値/未定義データ領域 に対応させるカラーコード(kclo/kchi/
  kcnv)で指定する.

int dfcols(int nclev, double fh, double fd, int kcnv);
void dfcols_(int *nclev, float *fh, float *fd, int *kcnv);
  paintm ルーチンによる2次元配列データ表示をカラー表示に指定し,paintm/paintw
  ルーチンが使用するカラー階調テーブルを,階調数(nclev),色相/暗度の変化範囲割
  合(fh/fd),未定義データ領域のカラーコード(kcnv)の指定から自動生成する.

int dfc40s(void);
void dfc40s_(void);
  paintm ルーチンによる2次元配列データ表示をカラー表示に指定し,paintm/paintw
  ルーチンが使用するカラー階調テーブルを,階調数40の標準カラー階調に設定する.

int dresol(int nras);
void dresol_(int *nras);
  paintm/paintw ルーチンによる2次元配列データ表示のラスター化分解能の既定値を
  25.4mm * (nras / 600) に変更する.

int dframe(double xo, double yo, double wd, double hi, int imax, int jmax);
void dframe_(float *xo, float *yo, float *wd, float *hi, int *imax, int *jmax);
  paintm/paintw ルーチンによる2次元配列データ表示を,指定の基準(左下)座標(xo,
  yo),幅(wd),高さ(hi),配列整合寸法(imax,jmax) で行うよう設定する.

int dframo(double x0, double y0, double x1, double y1, double x2, double y2,
           int imax, int jmax);
void dframo_(float *x0, float *y0, float *x1, float *y1, float *x2, float *y2,
             int *imax, int *jmax);
  paintm/paintw ルーチンによる2次元配列データ表示を,3頂点 (x0,y0), (x1,y1),
  (x2,y2) と 第4頂点 (x1+x2-x0, y1+y2-y0) で囲まれる 一般に傾斜した斜交格子に
  設定する(俯瞰図表現).配列整合寸法は(imax,jmax) に指定する.

int paintm(float *v, float vlo, float vhi, float vnvd);
void paintm_(float *v, float *vlo, float *vhi, float *vnvd);
  2次元配列(v)で格子点上に与えられたデータについて,下限/上限/未定義データの
  値(vlo/vhi/vnvd)を指定して,データの線形補間によるラスター化を行い,濃淡表現
  またはカラー表現で図化する.

int paintw(float *v, float vlo, float vhi, float vnvd, float *u);
void paintw_(float *v, float *vlo, float *vhi, float *vnvd, float *u);
  2次元配列(v)で格子点上に与えられたデータについて,下限/上限/未定義データの値
  (vlo/vhi/vnvd)を指定したデータのカラー表現を,明度値が2次元配列(u)で指定され
  る陰影とともに図化する.

int dfpcol(int key, int mcol);
void dfpcol_(int *key, int *mcol);
  paintc/paintr/paintp ルーチンで 円形/矩形/多角形 のぬりつぶしに用いる濃淡レ
  ベルまたはカラーを指定する.key=0 のとき 0〜255 の濃淡レベル値,key=1 のと
  き 0〜16777215 のカラーコード値,key=2 のとき 現用の階調レベル番号 を mclo 
  に指定する.

int paintc(double xc, double yc, double radius);
void paintc_(float *xc, float *yc, float *radius);
  中心座標(xc,yc),半径(radius) を指定して,円を塗りつぶす.

int paintr(double xorg, double yorg, double wide, double high);
void paintr_(float *xorg, float *yorg, float *wide, float *high);
  基点座標(xorg,yorg),横幅(wide),高さ(high) を指定して,矩形を塗りつぶす.

int paintp(float xa[], float ya[], int npt, int inc);
void paintp_(float xa[], float ya[], int *npt, int *inc);
  頂点座標(xa,ya),頂点数(npt),座標値取出し間隔(inc) による多角形について,
  non-zero winding rule による塗りつぶしを行う.

PTEXT (各種フォント文字列/マーク 描画)

int lstyle(char *fnt, double high, double ang, int tcol, int bcol);
void lstyle_(char fnt[3], float *high, float *ang, int *tcol, int *bcol);
  ptext ルーチンで文字列を描く際に使用する字体のフォント(fnt)・サイズ(high)・
  方向角(ang)・色(tcol)および背景色(bcol)を指定する.

int ptext(char *text, int ltxt, double xp, double yp, int kp);
void ptext_(char *text, int *ltxt, float *xp, float *yp, int *kp);
  lstyle で指定された字体で,(xp,yp) の位置に長さ ltxt の文字列 text を描く.
  kp=0 なら始点(文字列の左下),kp=1 なら終点(文字列の右下),kp=2 なら文字列
  中央 が指定位置となるように位置決めされる.

int pcstr(double xp, double yp, double chi, char *text, double ang, int ns);
void pcstr_(float *xp, float *yp, float *chi, char *text, float *ang, int *ns);
  長さ ns の文字列 text を,実文字高さ chi の Courierフォントで,(xp,yp) の位置
  を始点に ang の角度方向で描く.

int pmark(int mark, double xc, double yc, double size, double thick, int mcol);
void pmark_(int *mark, float *xc, float *yc, float *sz, float *th, int *mcol);
  マークの種別(mark)・マークの中心位置(xc,yc)・マークの大きさ(size)・マークを描
  く線の幅(thick)・マークの色(mcol)を指定して,マークの作画を行う.

CONT (線画コンター図 描画)

int conts(double xorg, double yorg, double wide, double high,
          int imax, int jmax, double csize);
void conts_(float *xorg, float *yorg, float *wide, float *high,
            int *imax, int *jmax, float *csize);
  contx ルーチンによる2次元配列データのコンター図化を,指定の基準(左下)座標
  (xorg,yorg),幅(wide),高さ(high),配列整合寸法(imax,jmax),数値表示文字サイ
  ズ(csize) で行うよう設定する.

int contso(double x0, double y0, double x1, double y1, double x2, double y2,
           int imax, int jmax);
void contso_(float *x0, float *y0, float *x1, float *y1, float *x2, float *y2,
             int *imax, int *jmax);
  contx ルーチンによる2次元配列データのコンター図化を,3頂点 (x0,y0), (x1,y1),
  (x2,y2) と 第4頂点 (x1+x2-x0, y1+y2-y0) で囲まれる 一般に傾斜した斜交格子に
  設定する(俯瞰図表現).配列整合寸法は(imax,jmax)に指定し,コンター値の記入は
  行わない.

int contx(float *v, float undef, int istep, int lcapt,
          int lml, int lmh, int kln);
void contx_(float *v, float *undef, int *istep, int *lcapt,
            int *lml, int *lmh, int *kln);
int contr(float *v, float undef, float step, int lcapt,
          float vlml, float vlmh, int kln)
void contr_(float *v, float *undef, float *step, int *lcapt,
            float *vlml, float *vlmh, int *kln)
  2次元配列(v)で格子点上に与えられたデータ(未定義データの値を undef とする)
  について,下限値・上限値の範囲(lml≦v≦lmh または vlml<v<vlmh)のコンター図
  を実線・破線・点線または1点鎖線(kln による指定)で描く.コンターは主曲線(間隔
  istep または step)と計曲線(主曲線の lcapt 本目ごと)からなり,コンターの密な部
  分は計曲線のみを描き,計曲線の両端に(閉曲線となる場合は1ヶ所に)コンター値
  を記入する.

WSHORE (海岸線等 描画)

void rshore(int m, int is, int in, int kw, int ke);
void rshore_(int *m, int *is, int *in, int *kw, int *ke);
  pshore ルーチンで海岸線等を図化する緯度範囲 (is〜in)・経度範囲 (kw〜ke) [分単
  位] と測地系(m=0 なら旧東京測地系,m=1 なら世界測地系)の選択を行う.

void pshore(double xorg, double yorg, int mpen, double scl,
            void (*conv)(float *alat, float *alon, float *xe, float *yn));
void pshore_(float *xorg, float *yorg, int *mpen, float *scl,
            void (*conv)(float *alat, float *alon, float *xe, float *yn));
  rshore ルーチンによる指定に基づき,大縮尺図(1/100万以上)用の海岸線・湖沼河
  川・都府県境の作図を行う.

void wshore(double xorg, double yorg, int mpen, double scl,
            void (*conv)(float *alat, float *alon, float *xe, float *yn));
void wshore_(float *xorg, float *yorg, int *mpen, float *scl,
            void (*conv)(float *alat, float *alon, float *xe, float *yn));
  小縮尺図(1/500万以下)作成を想定した海岸線と湖沼河川の描画を行う.

  conv は,描画の図法を規定する外部手続き名であり,それによる図法展開の原点(xe
  =yn=0.)を 図上の (xorg,yorg) に位置させ,展開座標値の scl を 図上の 1cm の
  長さに縮尺する.mpen は,10進3桁以下の数値であり,10進での各桁が,海岸線(1の
  位)・湖沼河川(10の位)・都府県境(100の位) を描画するときに用いるペン番号に割り
  当てられ,0 が割り当てられたものは線を描かない.
  (ペン番号については,PSPLOTの説明を参照.)

AXIS (ストロークによる文字/マーク/座標軸等 描画)

int chtype(double ang, double slope, double high, double ratio);
void chtype_(float *ang, float *slope, float *high, float *ratio);
  pchar ルーチンで描く文字の 方向角(ang)・傾き(slope)・高さ(high)・縦横比倍率
  (ratio) を与える.(ratio=1 のとき,文字間隔は高さの 6/7 倍となる.)

int p1char(char c);
  文字 c を,ペンの現在位置に,chtype ルーチンで設定されたストロークテーブルに
  よる文字で描く.
int pchars(char *bcd);
  文字列 bcd を,ペンの現在位置に,chtype ルーチンで設定されたストロークテーブ
  ルによる文字で描く.
void pchar_(char *s, int *nc, float *xs, float *ys, int *kk);
  文字数 nc の文字列 s を,chtype ルーチンで設定されたストロークテーブルによる
  文字で描く.kk≠0 のとき (xs,ys) を始点とするが,kk=0 のときペンの現在位置が
  始点となる.

int psmset(int ksms);
  ストロークテーブルによる文字列描画のモードを ksms にする.ksms=0 が ノーマル
  モード,ksms=1 が 下つきモード,ksms=2 が 上つきモード である.
void pnorm_(void);
  ストロークテーブルによる文字列描画をノーマルモードにする.
void psubsc_(void);
  ストロークテーブルによる文字列描画を下つきモードにする.
void psupsc_(void);
  ストロークテーブルによる文字列描画を上つきモードにする.
int pscdef(char csb, char csp);
void pshift_(char cs[2]);
  ストロークテーブルによる文字列描画に際しシフトコードとみなす2文字(下つきシフ
  トコード csb/cs[0],上つきシフトコード csp/cs[1] の順)を指定する.下(上)つき
  シフトコードと指定された文字は,上(下)つきモード中を除いて文字は描かれず,描
  く文字のモードをノーマルから下(上)つきへ,下(上)つきからノーマルへ変更する機
  能を持つ.

void gsymbl_(float *xs, float *ys, float *high, char *s, float *ang, int *nc);
  chtype ルーチンによる設定を,文字方向角 ang,傾き slope=0.,文字高さ high,
  縦横比倍率 ratio=1. に再設定した上で,(xs,ys) を始点とし,文字数 nc の文字列
  s をストロークテーブルによる文字で描く.

int pcsymb(int ics, double size, double ang);
  ics 番のストロークテーブルによるセンターシンボルを,大きさ size,回転角 ang 
  で,ペンの現在位置に描く.
void csymbl_(float *xs, float *ys, float *sz, int *ics, float *ang, int *mp);
  モード(mp)に従ってペンを現在位置から (xs,ys) まで移動し,大きさ sz の ics 番
  のストロークテーブルによるセンターシンボルを,回転角 ang で描く.

int symbol(double xp, double yp, double high, char *text, double ang, int nc);
void symbol_(float *xp, float *yp, float *high, char *text,
             float *ang, int *nc);
  (xp,yp) を始点とし,文字間隔=文字高さ=high,文字方向角 ang で,文字数 nc の
  文字列 text を,ストロークテーブルによる文字で描く.

int number(double xp, double yp, double high, double fv, double ang, int ndec);
void number_(float *xp, float *yp, float *high, float *fv,
             float *ang, int *ndec);
  (xp,yp) を始点とし,文字間隔=文字高さ=high,文字方向角 ang で,数値 fv を
  小数以下 ndec桁まで,ストロークテーブルによる文字で描く.

int scale(float va[], double axlen, int npt, int inc);
void scale_(float va[], float *axlen, int *npt, int *inc);
  配列(va)で指定された座標データ群(個数 npt,データ取出し間隔 inc)を 指定の座
  標軸長(axlen)におさめるのに必要な 軸目盛の初期値と増分値を求めて,配列中に格
  納する.

int line(float xa[], float ya[], int npt, int inc, int ltype, int mark);
void line_(float xa[], float ya[], int *npt, int *inc, int *ltype, int *mark);
  配列(xa,ya)に格納されている座標データ(個数 npt,データ取出し間隔 inc)を用い
  て,指定されたタイプ(ltype/mark)の折れ線・マークを作画する.

int axis(double xp, double yp, char *text, int ltx,
         double axlen, double angle, double firstv, double deltav);
void axis_(float *xp, float *yp, char *text, int *ltx,
           float *axlen, float *angle, float *firstv, float *deltav);
  (xp,yp) を始点とし,長さ axlen,方向角 angle の座標軸を描き,初期値 firstv,
  1cmあたりの増分値 deltav の座標目盛と,文字列長 ltx の座標軸名称 text を記入
  する.

XYCONV (地図投影座標変換)

int cvinit(int nca, double gi, double gk, double sp1, double sp2);
void cvinit_(int *nca, float *gi, float *gk, float *sp1, float *sp2);
void cvdinit_(int *nca, double *gi, double *gk, double *sp1, double *sp2);
  cviken/cvdiken または cvenik/cvdenik ルーチンで座標変換を行うため,図法番号と
  そのパラメータを指定する.現在,用意されている図法/座標系とその番号は,ベッ
  セル楕円体に対して次の通りであり,GRS楕円体では 200 を加算したものである.
  (図法番号=nca)   (図法/座標系)
         0    国土調査法に基づく平面直角座標[JTM座標](ガウスクルィーゲル図法)
      1-60    UTM座標(ガウスクルィーゲル図法)
        61    北極UPS座標(Universal Polar Stereographic Projection)
        62    南極UPS座標(   = 国際極心平射図法                  )
        65    UTM座標と同様であるが非標準の中央経線を指定できる
        70    メルカトール図法
        71    ランベルト等角円錐図法(1基本緯線)
        72    ランベルト等角円錐図法(2基本緯線)
       100    ランベルト等積方位図法(楕円体と表面積の等しい球からの投影)
       109    ランベルト等積方位図法(楕円体の長半径を半径とする球から投影)
       199    緯経度の分単位の値をそのまま km 単位の北・東向き座標値とみなす
  UTM座標/UPS座標 以外の場合,座標原点(X=Y=0.)の緯度(gi)・経度(gk)を分単位
  で指定し,2基本緯線タイプのランベルト等角円錐図法の場合はさらに,その2基本緯
  線の緯度(sp1,sp2)を分単位で与える.

int cviken(double fi, double fk, double *ye, double *xn);
void cviken_(float *fi, float *fk, float *ye, float *xn);
void cvdiken_(double *fi, double *fk, double *ye, double *xn);
  cvinit/cvdinit ルーチンで設定された図法/座標系において,緯度(fi)・経度(fk) 
  [分単位] から 直角座標値(xn,ye) [km単位] への変換を行う.

int cvenik(double ye, double xn, double *fi, double *fk);
void cvenik_(float *ye, float *xn, float *fi, float *fk);
void cvdenik_(double *ye, double *xn, double *fi, double *fk);
  cvinit/cvdinit ルーチンで設定された図法/座標系において,直角座標値(xn,ye) 
  [km単位] から 緯度(fi)・経度(fk) [分単位] への変換を行う.

void xyconv_(float *gi, float *gk, float *fi, float *fk, float *x, float *y);
void nxycnv_(float *gi, float *gk, float *fi, float *fk, float *x, float *y);
  座標原点の緯度(gi)・経度(gk)と計算点の緯度(fi)・経度(fk) [分単位] を与えて,
  国土調査法に基づく平面直角座標の座標値(x,y) [km単位] を計算する.xyconv は 
  2002年3月以前の旧東京測地系,nxycnv は 2002年4月以降の「日本測地系2000」に基
  づいた計算を行う.
void utm_(int *nz, float *fi, float *fk, float *x, float *y);
  緯度(fi)・経度(fk) [分単位] を与えて,指定のゾーン番号(nz)における UTM座標(x,
  y)の値 [km単位] を計算する.日本測地系2000 の場合 200 を加算した 201〜260 の
  値で,そのゾーン番号を指定する.
void ikconv_(float *gi, float *gk, float *x, float *y, float *fi, float *fk);
void nikcnv_(float *gi, float *gk, float *x, float *y, float *fi, float *fk);
  xyconv/nxycnv ルーチンの逆変換(座標値 x,y から 緯度 fi, 経度 fk へ)を行う.
void utmik_(int *nz, float *x, float *y, float *fi, float *fk);
  utm ルーチンの逆変換(座標値 x,y から 緯度 fi, 経度 fk へ)を行う.

XW84T (測地座標変換)

void xw84t(double wlat, double wlon, double walt,
             double *tlat, double *tlon, double *talt);
void xw84t_(float *wlat, float *wlon, float *walt,
             float *tlat, float *tlon, float *talt);
void xw84td_(double *wlat, double *wlon, double *walt,
             double *tlat, double *tlon, double *talt);
  WGS84測地系(世界測地系)における緯度(wlat)・経度(wlon)・高度(walt)を与えて,
  旧東京測地系における緯度(tlat)・経度(tlon)・高度(talt)を得る.
  緯度・経度の単位は 分,高度の単位は m である.

void xtw84(double tlat, double tlon, double talt,
            double *wlat, double *wlon, double *walt);
void xtw84_(float *tlat, float *tlon, float *talt,
             float *wlat, float *wlon, float *walt);
void xtw84d_(double *tlat, double *tlon, double *talt,
             double *wlat, double *wlon, double *walt);
  旧東京測地系における緯度(tlat)・経度(tlon)・高度(talt)を与えて,WGS84測地系
  (世界測地系)における緯度(wlat)・経度(wlon)・高度(walt)を得る.
  緯度・経度の単位は 分,高度の単位は m である.

IGRF (国際標準地球磁場モデル計算)

void field(double are, double aflat, double ara, int maxoda);
  IGRF計算のため,楕円体パラメータの赤道半径(are)・扁平率の逆数(aflat)・ガウス
  係数基準球面半径(ara)・モデルの最大次数(maxoda) を与える.
void tcoef(double agh[MxOD+1][MxOD+1], double aght[MxOD+1][MxOD+1],
            double atzero, int kexta, double aext[3]);
  IGRF計算のため,ガウス係数(agh),その経年変化率(aght),基準年(atzero),外部ソ
  ース項を含ませるか否かのフラグ(kexta),外部ソース項の係数(aext) を与える.
void tyear(double ayear);
  IGRF計算のための計算年(ayear) を与える.
void mfldg(double alat, double alon, double ahi,
            double *ax, double *ay, double *az, double *af);
  楕円体上の緯度(alat)・経度(alon)・高度(ahi) を与えて,IGRFモデルの地心座標系
  での3成分(ax,ay,az) と全磁力(af) を得る.
void mfldc(double athe, double alon, double ar,
            double *ax, double *ay, double *az, double *af);
  地心座標系での余緯度(athe)・経度(alon)・地心距離(ar) を与えて,IGRFモデルの地
  心座標系での3成分(ax,ay,az) と全磁力(af) を得る.
void gcomp(double *axg, double *ayg, double *azg);
  直前に IGRFモデルの計算を行った点の測地座標系での3成分(axg,ayg,azg) を得る.

  以上は,主として内部サブルーチンとしての使用を意図しており,通常のIGRF計算以
  外の特殊な用途以外には,利用が見込まれない.

void gigrf(int gen, double year);
void gigrf_(int *gen, float *year);
  世代番号(gen)によるモデルの選択を行い,計算年(year)の設定を行う.

void igrfc(double fido, double fkeido, double high, double *tf);
void igrfc_(float *fi, float *fk, float *h, float *f);
  緯度(fi:度単位)・経度(fk:度単位)・高度(h:m単位) を与えて指定済のIGRFモデル
  の計算を行い,全磁力値(f:nT単位)を返す.

void igrfm(double fm[6]);
void igrfm_(float fm[6]);
  直前に IGRFモデルの計算を行った点における磁場ベクトルを,6成分の値(X, Y, Z,
  H, 伏角, 偏角)として,配列 fm で返す.X, Y, Z, H の単位は nT,伏角, 偏角 の
  単位は 度 である.

void sigrf(double year);
void sigrf_(float *year);
void sdgrf(double year);
void sdgrf_(float *year);
void spgrf(double year);
void spgrf_(float *year);
  計算するIGRFモデル(Tentative IGRF/DGRF/PGRF)の選択と計算年(year)の設定を
  行う.year の値により適切なモデル基準年が選ばれる.

CALMA (理論磁気異常計算)

void magafd(double the, double phi, double dip, double dec);
void magafd_(float *the, float *phi, float *dip, float *dec);
  計算すると伏角(the)・偏角(phi)および地球磁場の伏角
  (dip)・偏角(dec)を設定する.[磁化強度の単位は A/m,角度の単位は 度.]

void mpoint(double am, double xc, double yc, double zc, double vol);
void mpoint_(float *am, float *xc, float *yc, float *zc, float *vol);
  計算するソースのモデルを 点 に設定し,ソースの磁化強度(am),その水平位置座標
  (xc,yc),深度座標(zc),等価体積(vol) を設定する.
void mvline(double am, double xc, double yc,
            double za, double w, double area);
void mvline_(float *am, float *xc, float *yc,
             float *za, float *w, float *area);
  計算するソースのモデルを 鉛直な線分 に設定し,ソースの磁化強度(am),その X座
  標(xc),Y座標(yc),深度方向のひろがりの下限(=上端深度)(za)と線の長さ(w),体
  積換算のための等価水平断面積(area) を設定する.
  但し,w=0. のとき底なしモデル(w→∞)とみなす.
void mhrect(double am, double cx, double rx, double cy, double ry,
            double zc, double h);
void mhrect_(float *am, float *cx, float *rx, float *cy, float *ry,
             float *zc, float *h);
  計算するソースのモデルを 水平な矩形の面 に設定し,ソースの磁化強度(am),その
  X座標方向のひろがりの中央値と全幅(cx,rx),Y座標方向のひろがりの中央値と全幅
  (cy,ry),深度座標(zc),体積換算のための等価厚さ(h) を設定する.
void mprism(double am, double cx, double rx, double cy, double ry,
            double za, double w);
void mprism_(float *am, float *cx, float *rx, float *cy, float *ry,
             float *za, float *w);
  計算するソースのモデルを 直方体 に設定し,ソースの磁化強度(am),その X座標方
  向のひろがりの中央値と全幅(cx,rx),Y座標方向のひろがりの中央値と全幅(cy,ry),
  深度方向のひろがりの下限(=上面深度)(za)と厚さ(w) を設定する.
  但し,w=0. のとき底なしモデル(w→∞)とみなす.

double calma(double xp, double yp, double zp);
float calma_(float *xp, float *yp, float *zp);
  観測点の位置座標(xp,yp,zp) を指定して,設定済みのモデルの磁気異常を計算し,そ
  の結果を関数値とする.

SML (回帰分析)

int sm1opn(int nvar, int nsrc);
void sm1opn_(int *nvar, int *nsrc);
  n元1次の回帰分析(8元まで)の処理の初期化を行う.
  (元の数 nvar は 8 まで,変量の個数 nsrc は 5 まで.)
int sm1ex(double var[], double src[]);
void sm1ex_(float fv[], float fs[]);
  n元1次の回帰分析を適用すべき変量値(src) と独立変数(元)(var) を与える.
  (繰返し呼び出し.)
int sm1cls(double *coef);
void sm1cls_(float *fc, int *mc, int *nc);
  n元1次の回帰分析に対する回帰係数を求め,配列 fc で返す.
  mc,nc は配列 fc の整合寸法.
int sm1rv(double vr[], double sr[]);
void sm1rv_(float fvr[], float fsr[]);
  n元1次の回帰分析結果の回帰係数を用いて,独立変数(元)(vr) の値に対する回帰式
  の値(sr) の計算を行う.

int sm2opn(int ndg2, int nsrc);
void sm2opn_(int *ndg2, int *nsrc);
  2元n次の回帰分析(8次まで)の処理の初期化を行う.
  (次数 ndg2 は 8 まで,変量の個数 nsrc は 5 まで.)
int sm2ex(double u, double v, double src[]);
void sm2ex_(float *fu, float *fv, float fs[]);
  2元n次のの回帰分析を適用すべき変量値(src) と2個の独立変数(u,v) を与える.
  (繰返し呼び出し.)
int sm2cls(double *coef);
void sm2cls_(float *fc, int *mc, int *nc);
  2元n次の回帰分析に対する回帰係数を求め,配列 fc で返す.
  mc,nc は配列 fc の整合寸法.
int sm2rv(double ur, double vr, double sr[]);
void sm2rv_(float *fur, float *fvr, float fsr[]);
  2元n次の回帰分析結果の回帰係数を用いて,2個の独立変数(ur,vr) の値に対する回帰
  式の値(sr) の計算を行う.

int sm3opn(int ndg3, int nsrc);
void sm3opn_(int *ndg3, int *nsrc);
  3元n次の回帰分析(5次まで)の処理の初期化を行う.
  (次数 ndg3 は 5 まで,変量の個数 nsrc は 5 まで.)
int sm3ex(double x, double y, double z, double src[]);
void sm3ex_(float *fx, float *fy, float *fz, float fs[]);
  3元n次の回帰分析を適用すべき変量値(src) と3個の独立変数(x,y,z) を与える.
  (繰返し呼び出し.)
int sm3cls(double *coef);
void sm3cls_(float *fc, int *mc, int *nc);
  3元n次の回帰分析に対する回帰係数を求め,配列 fc で返す.
  mc,nc は配列 fc の整合寸法.
int sm3rv(double xr, double yr, double zr, double sr[]);
void sm3rv_(float *fxr, float *fyr, float *fzr, float fsr[]);
  3元n次の回帰分析結果の回帰係数を用いて,3個の独立変数(xr,yx,zr) の値に対する
  回帰式の値(sr) の計算を行う.

RAND (疑似乱数発生)

double rand1(void);
float rand1_(void);
  -1. から +1. の範囲の一様乱数を関数値として得る.

double randg(void);
float randg_(void);
  平均が 0. で,分散が 1. の正規乱数の値を関数値として得る.

LWKDIR (作業ディレクトリ 処理パラメータ 設定支援 ほか)

int prompt(char *str);
void prompt_(char *str, size_t ls);
  メッセージ str を標準エラー出力に書き出す.
int premsg(char *str);
void premsg_(char *str, size_t ls);
  メッセージ str に改行コードを付加し,標準エラー出力に書き出す.

int dpcini(char *str);
void dpcini_(char *str, size_t ls);
  下記dpcent の初期設定と 30文字以下の文字列ヘッダーstr の出力を行う.
int dpcent(int m, int n);
void dpcent_(int *m, int *n);
  長時間を要するループ処理の実行時などにおいて,その進捗状況を 2%につき1個の #
  文字で表示する.合計n回の繰返しのうち,m回の処理を終了したことを意味する.

char *strdtm()
void strdtm_(char *sdt, size_t ls)
  日付時刻文字列を取得する.
int lrtrim_(char *str, size_t ls);
  文字列strの右側空白を除いた文字列長を得る.

void abend_(int *ecd);
  エラーコード番号を表示して異常終了する.
void abendm_(char *ems, size_t len);
  エラーメッセージを表示して異常終了する.

void opnpinc(int argc, char *argv[])
void opnpin_(void);
  パラメータ入力を既存ファイル読み取りに変更する機会を与える.
  opnpinc() は,メインプログラムの起動時に取得したコマンド+パラメータ文字列の
  配列とその個数を *argv[] と argc に設定して呼出しを行う.
void clspin(void);
void clspin_(void);
  opnpin による設定を解除する.

int get_wkdir(char *dnm, size_t len);
int lwkdir_(int *len, char *dnm);
  作業ディレクトリの入力操作を受け付け,その絶対パス名 dnm (文字数 len 以下)を
  返す.lwkdir_ では,そのディレクトリのファイル一覧も表示される.

int parmin(int lbuf, char *buf);
  パラメータ入力をそのままの文字列 buf (lbuf 文字以下) として受け取る.
void parmin_(char *str, int lbuf, char *buf, size_t ls);
  プロンプト str を出力して,パラメータ入力を lbuf 文字以下の 生のままの文字列
  buf として受け取る.

void gparma(char *str, int lnam, char *nam);
void gparma_(char *str, int *lnam, char *nam, size_t ls);
  プロンプト str を出力し,パラメータ入力として lnam 文字以下の文字列データ
  nam を受け取る.
void gparmi(char *str, int *iv);
void gparmi_(char *str, int *iv, size_t ls);
  プロンプト str を出力し,パラメータ入力として intデータ iv を受け取る.
void gparmf(char *str, float *fv);
void gparmf_(char *str, float *fv, size_t ls);
  プロンプト str を出力し,パラメータ入力として floatデータ fv を受け取る.
void gparmd(char *str, double *dv);
void gparmd_(char *str, double *dv, size_t ls);
  プロンプト str を出力し,パラメータ入力として doubleデータ dv を受け取る.
void gparmif(char *str, int *iv, float *fv);
void gparmif_(char *str, int *iv, float *fv, size_t ls);
  プロンプト str を出力し,パラメータ入力として intデータ iv と floatデータ fv
  を受け取る.
void gparmid(char *str, int *iv, double *dv);
void gparmid_(char *str, int *iv, double *dv, size_t ls);
  プロンプト str を出力し,パラメータ入力として intデータ iv と doubleデータ dv
  を受け取る.
void gparmi2(char *str, int *iv1, int *iv2);
void gparmi2_(char *str, int *iv1, int *iv2, size_t ls);
  プロンプト str を出力し,パラメータ入力として 2つの intデータ iv1,iv2 を受け
  取る.
void gparmf2(char *str, float *fv1, float *fv2);
void gparmf2_(char *str, float *fv1, float *fv2, size_t ls);
  プロンプト str を出力し,パラメータ入力として 2つの floatデータ fv1,fv2 を受
  け取る.
void gparmd2(char *str, double *dv1, double *dv2);
void gparmd2_(char *str, double *dv1, double *dv2, size_t ls);
  プロンプト str を出力し,パラメータ入力として 2つの doubleデータ dv1,dv2 を受
  け取る.

void getargs_(int *max, char args[][], int *argc, size_t ls);
  getargs_() は,メインプログラムの起動時に取得したコマンド+パラメータ文字列を
  長さ ls の固定長文字列 args[] の配列(最大要素数 max)と その要素数 argc とし
  て受け取る.

  (いずれの場合も,str の長さ引数 ls は,FORTRANコンパイラが自動付加する.)