※タイトル   face2 - 元気な顔と困った顔
※ファイル名  face2
※ライブラリ  gullib
※副ソース


          ※ Copyright (C) 1985 Rigy Corporation ※
          ※ Copyright (C) 2026 Scripts Lab Inc. ※


※説明     グラフィックを使って元気な顔と困った顔を画面に表示します

※ 改訂記録 ※
※ 2026.09.15	Mind9向けに修正
※ 2026.10.10	9801libは使わず、guilib直結にする
※		関連し、座標のY,X のスタック積みをX,Yの順に変更
※ 改訂終り ※


"../../srclib/rotate.src"を コンパイルする。  ※外部の座標回転ライブラリ


キャンバスの右下座標は 640と 400。	※9801のディスプレイサイズ

キャンバスIDは	ID。

キャンバスを設置処理とは (・ → ・)
	※
  親ID・サイズ・背景色を積むとは (・ → Xサイズ、Yサイズ)
	メインウィンドゥをつみ
	 キャンバスの右下座標をつみ
	  黒色をつむ
	※
  本体とは
	親ID・サイズ・背景色を積み キャンバスを立て キャンバスIDに 入れること。

描画色は	文字列実体 長さ 24桁。

角度は		変数。		※単位は度

※/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\※
回転角設定とは (回転角(度) −−> ・)
	角度に 入れること。
※\_________________/※

開始角度は	変数。
終了角度は	変数。

※/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\※
開始/終了角設定とは (開始角、終了角  −−>  ・)
	開始角度と 終了角度に 入れること。
※\_________________/※

画面中心Xは  変数。
画面中心Yは  変数。

※/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\※
顔位置モードは 変数。 (0:左 1:右)

顔X位置は (・ → X位置)
    顔位置モードが 真?
        ならば 480をつみ
        さもなければ
			160をつみ
        つぎに。

顔Y位置は (・ → Y位置)
	画面中心Yを 返すこと。

顔位置を左に設定とは
    顔位置モードを クリア。

顔位置を右に設定とは
    1を 顔位置モードに 入れる。
※\___________________/※

顔サイズは       ワード変数。
顔上下長さ%は     ワード変数。
顔上半分Y半径%は   ワード変数。
顔上半分X半径%は   ワード変数。
顔下半分Y半径%は   ワード変数。
顔下半分X半径%は   ワード変数。

顔サイズ既定値は        数値  100。
顔上下長さ%既定値は      数値  35。
顔上半分Y半径%既定値は    数値  100。
顔上半分X半径%既定値は    数値  120。
顔下半分Y半径%既定値は    数値  115。
顔下半分X半径%既定値は    数値  130。

顔下地既定値設定とは
    顔サイズ既定値を     顔サイズに     入れる
    顔上下長さ%既定値を   顔上下長さ%に   入れる
    顔上半分Y半径%既定値を 顔上半分Y半径%に 入れる
    顔上半分X半径%既定値を 顔上半分X半径%に 入れる
    顔下半分Y半径%既定値を 顔下半分Y半径%に 入れる
    顔下半分X半径%既定値を 顔下半分X半径%に 入れる。

%補正とは
  (値、%値 −−> 値)
    掛け 100で 割る。

顔上下長さは      顔サイズを 顔上下長さ%で   %補正し。
顔上半分Y半径は    顔サイズを 顔上半分Y半径%で %補正し。
顔上半分X半径は    顔サイズを 顔上半分X半径%で %補正し。
顔下半分Y半径は    顔サイズを 顔下半分Y半径%で %補正し。
顔下半分X半径は    顔サイズを 顔下半分X半径%で %補正し。

顔上半分Y位置は
    顔Y位置から 顔上下長さを 引いたもの。

顔下半分Y位置は
    顔Y位置に  顔上下長さを 加えたもの。

楕円を塗るとは   (中心X、中心Y、X半径、Y半径 −−> ・)
		中心Xは 変数
		中心Yは 変数
		X半径は 変数
		Y半径は 変数

		左上Xは 変数
		左上Yは 変数

		右下Xは 変数
		右下Yは 変数

		楕円IDは 図形ID

	※		※
	※ 枠線は抑制 ※
	※		※
    中心Xと 中心Yと X半径と Y半径に 入れ
	※
	[ 左上X := 中心X - X半径 ]
	[ 左上Y := 中心Y - Y半径 ]
	[ 右下X := 中心X + X半径 ]
	[ 右下Y := 中心Y + Y半径 ]
	キャンバスIDと
	 左上Xと 左上Yと 右下Xと 右下Yで
	  楕円のIDを取得し 楕円IDに 入れ
	0を   楕円IDに 線の太さを設定し
	描画色を 楕円IDに 満たす色を設定し
	楕円IDを 描画し
	。

顔の下地をかくとは
	「#fce2c4」を 描画色に 入れ	※←肌色

    顔X位置と 顔上半分Y位置に 顔上半分X半径と 顔上半分Y半径で、
     楕円を塗る

    顔X位置と 顔下半分Y位置に 顔下半分X半径と 顔下半分Y半径で、
     楕円を塗る
	。


目上方向%は  ワード変数。
目左右%は   ワード変数。
目Y半径%は  ワード変数。
目X半径%は  ワード変数。
瞳半径%は   ワード変数。
目上がり角度は 変数。
眉上方向%は  ワード変数。

目上方向%既定値は   数値 23。
目左右%既定値は    数値 40。
目Y半径%既定値は   数値 10。
目X半径%既定値は   数値 23。
瞳半径%既定値は    数値 6。
目上がり角度既定値は  数値 7。
眉上方向%既定値は   数値 27。

目既定値設定とは
    目上方向%既定値を   目上方向%に 入れる
    目左右%既定値を    目左右%に  入れる
    目Y半径%既定値を   目Y半径%に 入れる
    目X半径%既定値を   目X半径%に 入れる
    瞳半径%既定値を    瞳半径%に  入れる
    目上がり角度既定値を  目上がり角度に 入れる
    眉上方向%既定値を   眉上方向%に 入れる。

目上方向オフセットは
    顔上半分Y半径の 目上方向%で %補正し。

目左右オフセットは
    顔上半分X半径の 目左右%で %補正し。

目X半径は
    顔上半分X半径の 目X半径%で %補正し。

目Y半径は
    顔上半分X半径の 目Y半径%で %補正し。

瞳半径は
    顔上半分X半径の 瞳半径%で %補正し。

目Y位置は
    顔Y位置から 目上方向オフセットを 引く。

左目X位置は
    顔X位置から 目左右オフセットを 引く。

右目X位置は
    顔X位置に  目左右オフセットを 加える。


鼻上端%は   ワード変数。
鼻長さ%は   ワード変数。
口上がり角度は 変数。
口Y位置%は  ワード変数。
口長さ%は   ワード変数。

鼻上端%既定値は    数値 30。
鼻長さ%既定値は    数値 50。
口上がり角度既定値は  数値 10。
口Y位置%既定値は   数値 65。
口長さ%既定値は    数値 60。

鼻と口既定値設定とは
    鼻上端%既定値を    鼻上端%に 入れる
    鼻長さ%既定値を    鼻長さ%に 入れる
    口上がり角度既定値を  口上がり角度に 入れる
    口Y位置%既定値を   口Y位置%に 入れる
    口長さ%既定値を    口長さ%に 入れる。



※※※※ 目をかく ※※※※

円半径は	変数。

左上Y座標は 変数。
左上X座標は 変数。
右下Y座標は 変数。
右下X座標は 変数。

斜めの楕円を描くとは  (中心X、中心Y、X半径、Y半径、角度 → ・)
	※			※
	※ 白目を描くのが目的 ※
	※			※
		中心Xは	変数
		中心Yは	変数
		X半径は	変数
		Y半径は	変数
		斜め角度は	変数

		左上Xは 変数
		左上Yは 変数
		右上Xは 変数
		右上Yは 変数

		左下Xは 変数
		左下Yは 変数
		右下Xは 変数
		右下Yは 変数

		図形1は 図形ID

	中心Xと 中心Yと X半径と Y半径と 斜め角度に 入れ

  (左下)
	[ 左下X := 中心X - X半径 ]
	[ 左下Y := 中心Y + Y半径 ]

  (左上)
	[ 左上X := 左下X ]
	[ 左上Y := 中心Y - Y半径 ]

  (右下)
	[ 右下X := 中心X + X半径 ]
	[ 右下Y := 左下Y ]

  (右上)
	[ 右上X := 右下X ]
	[ 右上Y := 左上Y ]

	キャンバスIDをつみ

	 左上X 左上Y  右上X 右上Yと	※多角形の座標
	  右下X 右下Y  左下X 左下Yと
	   4個で
	    中心X 中心Yと 		※回転の中心
		 斜め角度で
	      座標群を回転し

	多角形のIDを取得し 図形1に 入れ

	描画色を 図形1に 線の色を設定し
	2を   図形1に 線の太さを設定し
※	3を   図形1に 線の太さを設定し
	0を   図形1に スムージングを設定し
	図形1を 描画し
	。


暗黙の角度で斜めの楕円を描くとは  (中心X、中心Y、X半径、Y半径 → ・)
	角度をつみ 斜めの楕円を描くこと。

円を塗るとは  (中心X、中心Y、半径 −−> ・)
		中心Xは	変数
		中心Yは	変数
		半径1は 	変数
		円IDは	図形ID
    中心Xと 中心Yと 半径1に 入れ
	キャンバスIDと
	 中心Xと 中心Yと 半径1で
	  円のIDを取得し 円IDに 入れ
	描画色を 円IDに 満たす色を設定し
	円IDを 描画し
	。

片方の目をかくとは (中心X、中心Y、X半径、Y半径 → ・)
		中心Xは	変数
		中心Yは	変数
		X半径は	変数
		Y半径は	変数
	中心Xと 中心Yと X半径と Y半径に 入れ
  (白目)
    黒色を 描画色に 入れ
    中心Xと 中心Yと X半径と Y半径で 暗黙の角度で斜めの楕円を描き
  (瞳)
    黒色を 描画色に 入れ
    中心X 中心Yに 瞳半径で 円を塗る
	。

左目をかくとは
    目上がり角度の 負数をとり 回転角設定し
    左目X位置、目Y位置、目X半径、目Y半径で 片方の目をかく
	。

右目をかくとは
    目上がり角度を 回転角設定し
    右目X位置、目Y位置、目X半径、目Y半径で 片方の目をかく。

目をかくとは
    左目をかき 右目をかくこと。


※※※※ 眉をかく ※※※※

眉長さの半分とは 目X半径。

眉Y位置は
    目Y位置から、
     顔上半分Y半径の 眉上方向%ので %補正を
	  引く。

左眉をかくとは
		直線IDは	図形ID
	キャンバスIDをつみ
	 左目X位置と 眉Y位置と
	  眉長さの半分と 目上がり角度の 負数をとり
	   中心と半径と角度を指定し直線のIDを取得し 直線IDに 入れ

	3を   直線IDに 線の太さを設定し
	描画色を 直線IDに 線の色を設定し
	直線IDを 描画し
	。

右眉をかくとは
		直線IDは	図形ID
	キャンバスIDをつみ
	 右目X位置と 眉Y位置と
	  眉長さの半分と 目上がり角度で
	   中心と半径と角度を指定し直線のIDを取得し 直線IDに 入れ

	3を   直線IDに 線の太さを設定し
	描画色を 直線IDに 線の色を設定し
	直線IDを 描画し
	。

眉をかくとは
    黒色を 描画色に 入れ
    左眉をかき 右眉をかく。


※※※※ 鼻をかく ※※※※

鼻上端Y位置は
    顔下半分Y位置から、
    顔下半分Y半径の 鼻上端%で %補正を
    引く。

鼻下端Y位置は
    鼻上端Y位置に、
    顔上半分Y半径の 鼻長さ%で %補正を
    加える。

※/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\※
太い直線とは (開始X、開始Y、終了X、終了Y −−> ・)
		開始X座標は	変数
		開始Y座標は	変数
		終了X座標は	変数
		終了Y座標は	変数
		直線IDは	図形ID
    開始X座標と 開始Y座標と 終了X座標と 終了Y座標に 入れ

	キャンバスIDと
	 開始X座標と 開始Y座標と 終了X座標と 終了Y座標で
	  直線のIDを取得し 直線IDに 入れ

	3を   直線IDに 線の太さを設定し
※	2を   直線IDに 線の太さを設定し
	描画色を 直線IDに 線の色を設定し
	直線IDを 描画する。
※\___________________________/※

鼻をかくとは
    黒色を 描画色に 入れ
    顔X位置、鼻上端Y位置、顔X位置、鼻下端Y位置に 太い直線をかく。


※※※※ 口をかく ※※※※

口長さは
    顔下半分X半径の 口長さ%ので %補正し。

口Y位置は
    顔下半分Y位置に、
    顔下半分Y半径の 口Y位置%で %補正を
    加える。

口半径は    変数。
開始角は    変数。
終了角は    変数。
口開き角の半分は 変数。
口中心Y位置は 変数。

口パラメータ計算は
    顔下半分Y半径に 10を 掛け、
    口上がり角度を 複写し 負?
        ならば 負数をとり
        つぎに
    複写し ゼロ?
        ならば 1を 加え
        つぎに
    割り 口半径に 入れる
    口長さに 100を 掛け 口半径で 割り 57を 掛け 100で 割り
    2で 割り 口開き角の半分に 入れる
    口上がり角度が 正?
        ならば 270
        さもなければ 90
        つぎに
    複写したものから 口開き角の半分を 引き 開始角に 入れ
    口開き角の半分を 加え 終了角に 入れ
    口上がり角度が 正?
        ならば 口Y位置から 口半径を 引き
        さもなければ
            口Y位置に 口半径を 加え
        つぎに
    口中心Y位置に 入れる。

太さを指定し円弧をかくとは (中心X座標、中心Y座標、半径、太さ −−> ・)
		中心Xは	変数
		中心Yは	変数
		半径1は	変数
		_太さは	変数
		_描画角度は	変数
		円弧IDは	図形ID
    中心Xと 中心Yと 半径1と _太さに 入れる
	キャンバスIDをつみ
	 中心Xと 中心Yと
	  半径1で
	   円弧のIDを取得し 円弧IDに 入れ
	終了角度から 開始角度を 引き _描画角度に 入れ
	開始角度と _描画角度を	 円弧IDに 開始・描画角度を設定し
	円弧単独で			 円弧IDに 円弧の種類を設定
	描画色を 			 円弧IDに 線の色を設定し
	_太さを			 円弧IDに 線の太さを設定し
	円弧IDを 描画し
	。

口をかくとは
    黒色を 描画色に 入れ
    口パラメータ計算し
    開始角、終了角で 開始/終了角設定し
    顔X位置、口中心Y位置に 口半径と 3で 太さを指定し円弧をかき
	。


※※※※ メインブロック ※※※※

既定値設定とは
		_Xサイズは	変数
		_Yサイズは	変数
	キャンバスの右下座標を _Xサイズと _Yサイズに 入れ
	_Xサイズの 二分の一を 画面中心Xに 入れ
	_Yサイズの 二分の一を 画面中心Yに 入れ
	
    顔下地既定値設定し 目既定値設定し 鼻と口既定値設定し

	白色を 描画色に 入れること。

元気な顔を設定とは
    7度を 目上がり角度に 入れ
    10度を 口上がり角度に 入れること。

困った顔を設定とは
    −7度を 目上がり角度に 入れ
    −10度を 口上がり角度に 入れること。

顔全体をかくとは
    顔の下地をかき
    目をかき 眉をかき 鼻をかき 口をかくこと。

メインとは
    キャンバスを設置処理し
    既定値設定し

    顔位置を左に設定し 元気な顔を設定し 顔全体をかく
    顔位置を右に設定し 困った顔を設定し 顔全体をかくこと。


※ 終り(face2.src) ※