944BASICの部屋の押し入れ

3番
2002.6.23更新
 
インフォーメーション
■自己紹介の部屋
■944BASICの部屋
■MI-E1ザウルスの部屋
■PI系ザウルスの部屋
■MI-10ザウルスの部屋
■リンクの部屋
 944BASICの部屋で古くなったものを収納する押入れです。
目 次
自作数値関数修正版 2002.5.7
自作数値関数 2002.5.6
アイコン乱れの修正 2002.5.2
常駐する格言 Ver1.10 2002.5.1
Tools944BASIC Ver. 1.11 2002.4.22
2D加工の友 Ver1.20 2002.4.21
Tools944BASIC Ver. 1.10 2002.4.20
常駐する格言 2002.4.5

自作数値関数修正版 (2002.5.7)
ダウンロード(trsccal0.lzh)

 2002.5.6版のアークコサイン関数のサブルーチン名が間違っていました。*ACNではなくて*ACSです。すいません。修正版を関数部に関して修正版を再アップします

 アップしたファイルには、TRSCFUN1.BASをライブラリとして用いるサンプル(TRSCCAL0.BAS)が同梱されています。

 さらに、修正版では双曲関数(ハイパボリック)を追加しました。詳しくは下記仕様を参考にしてください。

◆逆三角関数
 ・ATN() アークタンジェント
 ・ASN() アークサイン
  アークサインとアークタンジェントの関係、ASN(X)=ATN(X/SQR(-X*X+1))
                          -1≦X≦1
 ・ACN() アークコサイン
 アークコサインとアークタンジェントの関係、ACS(X)=π/2-ATN(X/SQR(-X*X+1))
                           -1≦X≦1

 ■アークタンジェント(サブルーチン名 *ATN)
   引数として用いる変数  ATNX
    計算結果が入る変数   ATNY (単位はRadian)
  用いている変数     ATNF,ATNT,ATNN,ATNS
  用いているラベル    *ATNLOOP,*ATN00
  呼び出しているルーチン 無し

 ■アークサイン(サブルーチン名 *ASN)
  引数として用いる変数  ASNX (計算範囲:-1≦ASNX≦1)
  計算結果が入る変数   ASNY (単位はRadian)
  用いている変数     ATNX,ATNY
  用いているラベル    無し
  呼び出しているルーチン *ATN

 ■アークコサイン(サブルーチン名 *ACS)
  引数として用いる変数  ACSX (計算範囲:-1≦ACSX≦1)
  計算結果が入る変数   ACSY (単位はRadian)
  用いている変数     ATNX,ATNY
  用いているラベル    無し
  呼び出しているルーチン *ATN

 ■アークタンジェントAG(サブルーチン名 *ATNAG)
  引数として用いる変数  ATNAGX
  計算結果が入る変数   ATNAGY (単位はDegree)
  用いている変数     ATNX,ATNY
  用いているラベル    無し
  呼び出しているルーチン *ATN

 ■アークサインAG(サブルーチン名 *ASNAG)
  引数として用いる変数  ASNAGX
  計算結果が入る変数   ASNAGY (単位はDegree)
  用いている変数     ATNX,ATNY
  用いているラベル    無し
  呼び出しているルーチン *ATN

 ■アークコサインAG(サブルーチン名 *ACSAG)
  引数として用いる変数  ACSAGX
  計算結果が入る変数   ACSAGY (単位はDegree)
  用いている変数     ATNX,ATNY
  用いているラベル    無し
  呼び出しているルーチン *ATN

◆自然指数(Exp)
 ・EXP() エキスポネンシャル
 EXPとLOG(自然対数)の関係、Y=EXP(X)のときX=LOG(Y)

 ■エキスポネンシャル(サブルーチン名 *EXP)
  引数として用いる変数  EXPX
  計算結果が入る変数   EXPY
  用いている変数     EXPK,EXPN
  用いているラベル    *EXPLOOP
  呼び出しているルーチン 無し

◆対数
 ・LOG()  自然対数
 ・LOG10() 常用対数
 自然対数と常用対数の関係、LOG10(X)=LOG(X)/LOG(10)

 ■自然対数ログ(サブルーチン名 *LOG)
  引数として用いる変数  LOGX (計算範囲:LOGX>0)
  計算結果が入る変数   LOGY
  用いている変数     LOGZ,LOGC,LOGD,LOGE,LOGB,LOGN,LOGK
  用いているラベル    *LOGEANS,*LOGCANS,*LOGANS,*LOGLOOP
  呼び出しているルーチン 無し

 ■常用対数ログ(サブルーチン名 *LOG10)
  引数として用いる変数  LOG10X (計算範囲:LOGX>0)
  計算結果が入る変数   LOG10Y
  用いている変数     LOGX,LOGY
  用いているラベル    無し
  呼び出しているルーチン *LOG

◆XのY乗(X^Y)
 ・POW() パワー

 ■パワー(サブルーチン名 *POW)
  引数として用いる変数  POWX,POWY
  計算結果が入る変数   POWA
  用いている変数     LOGX,LOGY,EXPX,EXPY,POWI,POWJ
  用いているラベル    *POWSEISU,*POWFU
  呼び出しているルーチン *LOG,*EXP

◆双曲関数(ハイパボリック)
 ・sinh() ハイパボリックサイン
   sinhとexpの関係、sinh(x)=(exp(x)-exp(-x))/2
 ・cosh() ハイパボリックコサイン
   coshとexpの関係、cosh(x)=(exp(x)+exp(-x))/2
 ・tanh() ハイパボリックタンジェント
   tanhとexpの関係、tanh(x)=1-exp(-x)/(exp(x)+exp(-x))*2
 ・asinh() ハイパボリックアークサイン
   asinhとlnの関係、asinh(x)=ln(x+√(x*x+1))
 ・acosh() ハイパボリックアークコサイン
   acoshとlnの関係、acosh(x)=ln(x+√(x*x-1))
 ・atanh() ハイパボリックアークタンジェント
   atanhとlnの関係、atanh(x)=ln((1+x)/(1-x))/2

 ■ハイパボリックサイン(サブルーチン名 *SINH)
  引数として用いる変数  SINHX
  計算結果が入る変数   SINHY
  用いている変数     SINHA,EXPX,EXPY
  用いているラベル    無し
  呼び出しているルーチン *EXP

 ■ハイパボリックコサイン(サブルーチン名 *COSH)
  引数として用いる変数  COSHX
  計算結果が入る変数   COSHY
  用いている変数     COSHA,EXPX,EXPY
  用いているラベル    無し
  呼び出しているルーチン *EXP

 ■ハイパボリックタンジェント(サブルーチン名 *TANH)
  引数として用いる変数  TANHX
  計算結果が入る変数   TANHY
  用いている変数     TANHA,EXPX,EXPY
  用いているラベル    無し
  呼び出しているルーチン *EXP

 ■ハイパボリックアークサイン(サブルーチン名 *ASNH)
  引数として用いる変数  ASNHX
  計算結果が入る変数   ASNHY
  用いている変数     LOGX,LOGY
  用いているラベル    無し
  呼び出しているルーチン *LOG

 ■ハイパボリックアークコサイン(サブルーチン名 *ACSH)
  引数として用いる変数  ACSHX
  計算結果が入る変数   ACSHY
  用いている変数     LOGX,LOGY
  用いているラベル    無し
  呼び出しているルーチン *LOG

 ■ハイパボリックアークタンジェント(サブルーチン名 *ATNH)
  引数として用いる変数  ATNHX
  計算結果が入る変数   ATNHY
  用いている変数     LOGX,LOGY
  用いているラベル    無し
  呼び出しているルーチン *LOG

                              


自作数値関数 (2002.5.6)
 
 944BASIC FAQ(掲示板編)が新設されたこともあり、数値関係のネタを私の方もまとめておきたいと思います。
 >OSAさん、時間があれはFAQの方にも反映お願いします。m(_ _)m

□変数の精度は、単精度?倍精度?
 944BASIC内部の計算処理は全て倍精度で行われています。それなので変数は全て倍精度になります。

□つかえる数値関数は?
 944BASICでは、数値関数として10個持っています。それ以外の関数は自作する必要があります。
 INT(式)  値を整数に変換
 SIN(式)  サイン値の算出(ラディアン)
 COS(式)  コサイン値の算出(ラディアン)
 TAN(式)  タンジェント値の算出(ラディアン)
 SINAG(式) サイン値の算出(角度指定degree)
 COSAG(式) コサイン値の算出(角度指定degree)
 TANAG(式) タンジェント値の算出(角度指定degree)
 SQR(式)  スクエア値の算出(平方根)
 SGN(式)  符号の算出
 ABS(式)  絶対値の算出

□文字を数字に変えるには?
 944BASICでは、INPUT命令等で入力された文字は計算において数値として扱われます。
 例えば、文字として入力したものも、何もしないと計算では数値として扱われます。
  A='250'
  B=LEFT(A,2)
  C=A-B
  PRINT C     ←225と表示される

 ですので、944BASICには一般のBASIC命令であるVAL関数がいりません
 逆に文字を文字として扱いたい場合には、STR関数(明示的に文字列として扱う)が必要となってきます。

□他の関数も使いたいけど自作は・・・
 という方のために、自作した関数についてまとめておきます。

ダウンロード(trscfun0.lzh)

 TRSCFUN0.BASをINCLUDEして使ってください。INCLUDE "F1:\944BASIC\TRSCFUN0.BAS"

 ◆逆三角関数
  ・ATN() アークタンジェント
  ・ASN() アークサイン
    アークサインとアークタンジェントの関係、ASN(X)=ATN(X/SQR(-X*X+1)) -1≦X≦1
  ・ACN() アークコサイン
    アークコサインとアークタンジェントの関係、ACS(X)=π/2-ATN(X/SQR(-X*X+1)) -1≦X≦1

  ■アークタンジェント(サブルーチン名 *ATN)
   引数として用いる変数  ATNX
   計算結果が入る変数   ATNY (単位はRadian)
   用いている変数     ATNF,ATNT,ATNN,ATNS
   用いているラベル    *ATNLOOP,*ATN00
   呼び出しているルーチン 無し

  ■アークサイン(サブルーチン名 *ASN)
   引数として用いる変数  ASNX (計算範囲:-1≦ASNX≦1)
   計算結果が入る変数   ASNY (単位はRadian)
   用いている変数     ATNX,ATNY
   用いているラベル    無し
   呼び出しているルーチン *ATN

  ■アークコサイン(サブルーチン名 *ACN)
   引数として用いる変数  ACNX (計算範囲:-1≦ACNX≦1)
   計算結果が入る変数   ACNY (単位はRadian)
   用いている変数     ATNX,ATNY
   用いているラベル    無し
   呼び出しているルーチン *ATN

  ■アークタンジェントAG(サブルーチン名 *ATNAG)
   引数として用いる変数  ATNAGX
   計算結果が入る変数   ATNAGY (単位はDegree)
   用いている変数     ATNX,ATNY
   用いているラベル    無し
   呼び出しているルーチン *ATN

  ■アークサインAG(サブルーチン名 *ASNAG)
   引数として用いる変数  ASNAGX
   計算結果が入る変数   ASNAGY (単位はDegree)
   用いている変数     ATNX,ATNY
   用いているラベル    無し
   呼び出しているルーチン *ATN

  ■アークコサインAG(サブルーチン名 *ACNAG)
   引数として用いる変数  ACNAGX
   計算結果が入る変数   ACNAGY (単位はDegree)
   用いている変数     ATNX,ATNY
   用いているラベル    無し
   呼び出しているルーチン *ATN

 ◆自然指数(Exp)
  ・EXP() エキスポネンシャル
    EXPとLOG(自然対数)の関係、Y=EXP(X)のときX=LOG(Y)

  ■エキスポネンシャル(サブルーチン名 *EXP)
   引数として用いる変数  EXPX
   計算結果が入る変数   EXPY
   用いている変数     EXPK,EXPN
   用いているラベル    *EXPLOOP
   呼び出しているルーチン 無し

 ◆対数
  ・LOG()  自然対数
  ・LOG10() 常用対数
    自然対数と常用対数の関係、LOG10(X)=LOG(X)/LOG(10)

  ■自然対数ログ(サブルーチン名 *LOG)
   引数として用いる変数  LOGX (計算範囲:LOGX>0)
   計算結果が入る変数   LOGY
   用いている変数     LOGZ,LOGC,LOGD,LOGE,LOGB,LOGN,LOGK
   用いているラベル    *LOGEANS,*LOGCANS,*LOGANS,*LOGLOOP
   呼び出しているルーチン 無し

  ■常用対数ログ(サブルーチン名 *LOG10)
   引数として用いる変数  LOG10X (計算範囲:LOGX>0)
   計算結果が入る変数   LOG10Y
   用いている変数     LOGX,LOGY
   用いているラベル    無し
   呼び出しているルーチン *LOG

 ◆XのY乗(X^Y)
  ・POW() パワー

  ■パワー(サブルーチン名 *POW)
   引数として用いる変数  POWX,POWY
   計算結果が入る変数   POWA
   用いている変数     LOGX,LOGY,EXPX,EXPY,POWI,POWJ
   用いているラベル    *POWSEISU,*POWFU
   呼び出しているルーチン *LOG,*EXP
 

                              

アイコン乱れの修正 (2002.5.2)

ダウンロード:trsuist0.lzh

944BASICのメニューで表示されるアイコンを修正します。
 とりあえず、このようなアイコンになります。
 崩れているままでは、見栄えが悪かったので、おまけツールとして作ってみました。
プログラムはこれだけです。(^^;

REM 944BASIC 'メニューアイコン修正'
BITMAP "F1:\944BASIC\TRSUIST0.BMP",0,0
END

プログラム最小記録では?

 さらにさらに、ランチャーの「メニューキー」で出てくるヘルプファイルにも対応しました。
 このプログラムにカーソルを合わせて「メニュー」キーを押し、ソフトの説明を選んでみて下さい。
 
 
 

                              

常駐する格言Ver 1.10 (2002.5.1)

ダウンロード:trslkak1.lzh


 TEXTCSVコマンドを用いて、常駐して格言を表示するプログラムのバージョンアップ版です。
 kaolさんが作られた付箋紙を真似て作りました。前回のものは常駐物にしてはちょっと画面サイズが大きかったので、今回新たにサポートされた文字変数関係のコマンドを用いて、文字が流れて表示されるプログラムに改良しました。

 trslkak1.datというファイルに下のように格言を入れておくと、それをランダムに表示します。1行目の1項目は、格言ファイルの全体行数です。2〜3項は必要ですが、特に表示されません。2行目以降はカンマで区切った格言です。

●データの説明
447,格,言,集
教育とは,学校で学んだ事を,忘れた後に残るもの,アインシュタイン
空想は,知識よりも,重要である,アインシュタイン

●プログラム説明
REM 944BASIC '格言集 v1.10'
EVENT 100,999,1:REM 常駐制御
FASTTICK 12     :REM 944BASICの120ms毎の処理割り込み(Default 3)

DIM A(3,500)
dim MojiT(20)
dim Kaku(20)
格言データを読み込んでいます。格言データは俗に言う格言とプログラマ向け格言の2つを用意しています。それ以外にも自由に変更して下さい。
LOADCSV 'F1:\944BASIC\TRSLKAK1.DAT',A    ←格言
REM LOADCSV 'F1:\944BASIC\TRSLKAK0.DAT',A  ←プログラマ向け格言

いろいろな初期化
X=20: Y=20   :REM 初期表示位置(X,Y)
W=172: H=15  :REM 付箋紙の幅と高さ
FONT 64      :REM フォントサイズ
Kurikaeshi=2 :REM 同じ格言の繰り返し数
↑格言は2回表示した後、違う格言に変わるようにしています。

表示位置とウィンドウサイズを指定します
SCREEN X,Y,W,H
rem 乱数の初期化
gosub *RANINI
↑は乱数の初期化サブルーチンです。

↓背景を設定している
COLORBG 0,64,128
COLORFG 255,255,255←ラインの色は白色に設定
CLS ←背景を指定色に変更
BOX 1,2,10,11   ←ウィンドウ左端の四角を描く
line 10,2,1,11  ←同上

m=A(0,0)-1 ←格言の全数をmに代入
p=(rnd%m)+1 ←どの格言を表示するか乱数で決定する
KuriFlag=0 ←繰り返し回数を初期化

rem 文字変数に格納できるのは31文字(62バイト)まで。
rem 配列文字変数に格納できるのは63文字(123バイト)まで。

rem 移動文字パラメータの初期化
gosub *MojiMoveINI

ここから、文字の流れ表示のループである。
*LOOP SYNC
  ↓流れ表示する文字列変数(Vwm)をサブルーチンで生成する
  gosub *MojiMove
  Vwmを生成したので、次は1ドットずつ文字を流す動作をさせる。
  for i=0 to 11
    FORループとGCURSORを用いて1文字分(12ドット)を左に移動させている。
    GCURSOR 15-i,1
    COLORFG 255,255,64
    PRINT Vwm
    ↑色を指定して、Vwmの表示
    ↓左端の消えていくべき文字を、素早くボックスで塗りつぶして消している
    COLORFG 0,64,128
    BOXFILL 4,2,12,12
    ↓もう一度、白四角と線を描いている。
    COLORFG 255,255,255
    BOX 1,2,10,11
    line 10,2,1,11
    SYNC
  next
  ↑ループを終って、位置も自分のスムース移動完了。
  ↓文字ポインタを1文字分ずらす。
  MojiP=MojiP+1*2

  ↓表示文字が最後まで行って、MojiPに-2が代入されて返ってきたときには、上の式でMojiP=0となっている。そのときに、新しい格言を選ぶ処理を行う。
  if MojiP<=0 then else goto *EndIfMain00
    KuriFlag=KuriFlag+1
    ↓同じ格言を何回繰り返すかをチェックして、新規格言を選ぶかどうか決めている。
    if KuriFlag=Kurikaeshi then KuriFlag=0:p=(rnd%m)+1:gosub *MojiMoveINI
  *EndIfMain00
GOTO *LOOP

rem *******************************
rem *       乱数の初期化          *
rem *******************************
*RANINI
     ↓今の時間を利用して、乱数を変えて生成しています。
 RaniA=time%500
 for RaniI=0 to RaniA ←ループを回して乱数を変更する。
  Ranih=rnd
 next
return

rem *******************************
rem *                             *
rem *   文字の流れ表示(初期化)    *
rem *                             *
rem *******************************
rem DIM Kaku(20), DIM MojiT(20) 配列宣言
*MojiMoveINI
・文字変数に格納できるのは31文字(62バイト)まで。配列文字変数に格納できるのは63文字(123バイト)まで。
↓文字列の長さに制限があるので(↑参照)、複数の配列に分けて代入する。
Kaku(0)='              '
Kaku(1)=str(A(0,p))
Kaku(2)=' '
Kaku(3)=str(A(1,p))
Kaku(4)=' '
Kaku(5)=str(A(2,p))
Kaku(6)=' '
Kaku(7)='/ '
Kaku(8)=str(A(3,p))
Kaku(9)='              '
↑最初と最後に長い空白の文字列を代入しているのは、文字を流して表示するときに、表示文字列を常に14文字(28バイト)確保したいため(プログラムが楽だから)。それと表示位置(GCURSOR)を1文字分以上移動させないで表示させたかったから。

Rem 文字ポインタの初期化
MojiP=0*2 ←位置文字が2バイトなので2を掛けている。944BASICは全てバイト単位で文字数を扱う。
Rem 文字数の合計の計算
MojiT(0)=Len(Kaku(0))
この配列(MojiT)には、文字列配列(Kaku)のそれぞれの配列までの文字数の合計が代入されている。
for i=1 to 9
 MojiT(i)=MojiT(i-1)+Len(Kaku(i))
next
return
 

rem *******************************
rem *                             *
rem *       文字の流れ表示        *
rem *                             *
rem *******************************
rem Vwm文字列に14文字(28バイト)が格納される。
*MojiMove
  ↓サブルーチンではiという変数を使わないほうが良い・・・(^^;。バグの元。
For i=0 To 8
   ↓文字ポインタ(先頭に表示すべき文字の位置)がばらして代入したどの配列(Kaku)まで移動しているかを検索している。↓
  If MojiP<MojiT(i) Then else goto *EndIfMM00
    配列が見つかったら、Vwm変数に文字ポインタ以降を代入する。
    ただし、代入する文字数が14文字以上の場合は、14文字以内に成るようにして代入している(Elseの部分)。
    If (MojiT(i)-MojiP)<=14*2 Then else goto *ElseMM01
      Vwm=Right(Kaku(i),MojiT(i)-MojiP)
      ↓文字ポインタが配列の何番目にあるかを記録している。
      MojiStartBL=i
      goto *EndIfMM01
    *ElseMM01
      ms=Right(Kaku(i),MojiT(i)-MojiP)
      Vwm=Left(ms,14*2)
      ↓文字ポインタのある配列のみで、14文字確保できる場合は、-1を代入している。
      MojiStartBL=-1
    *EndIfMM01
    ↓検索が終了したので、i=8として、FORループを抜けるように操作している。
    i=8
  *EndIfMM00
Next

↓文字ポインタから表示終了文字数が全体の何番目かを計算している。
MojiE=MojiP+14*2
↓表示文字の最後が、何番目の配列にあるかを検索している。
For i=0 To 9
  If MojiE<MojiT(i) Then MojiEndBL=i:i=9 ←検索し終わったらFORループを抜けたいので、i=9になるように操作している。(ここも変数iを使わないほうがいい)
Next

↓Vwmに14文字分代入する。MojiStartBLが-1のときには14文字分代入されているので、処理を続けない。
If MojiStartBL>=0 Then else goto *EndIfMM02
  配列(Kaku)からVwmが14文字になるようにVwmに文字を追加していく。
  For i=MojiStartBL+1 To MojiEndBL
    If (14*2-Len(Vwm))>Len(Kaku(i)) Then else goto *ElseMM03
      1つの配列(Kaku)を全て追加しても、14文字に至らないときは、全て追加している。
      Vwm=strcat(Vwm,Kaku(i))
      goto *EndIfMM03
    *ElseMM03
     14文字を越えてしまう場合の処理
      ↓既にVwmがちょうど14文字になってしまっている場合はこの処理を飛ばす。
      if 14*2=Len(Vwm) then goto *EndIfMM03
      ↓14文字になるように文字を抜き出して、Vwmに追加する。
      ms=Left(Kaku(i),14*2-Len(Vwm))
      Vwm=strcat(Vwm,ms)
      i=MojiEndBL ←ループを抜けるために、iの値を操作している。いらないかも・・・(^^;。
      (ここも変数iを使わないほうがいい)
    *EndIfMM03
  Next
*EndIfMM02
↓文字ポインタが格言の最後の1文字までいったかどうかを調べている。もし行っていたら、文字ポインタを-2にしている。これは、メインルーチンで2が足されるので、そこで0に成るように調整している。
If MojiP=MojiT(8)-2 Then MojiP=-2
return
 

                              

◆Tools944BASIC Ver. 1.11 (2002.4.22)
ダウンロード:tools944basic111.LZH
 バージョンが1.10から1.11になりました。BMPファイルのコピーの不具合を解消しました。また、本バージョンでは、
 
 ・コピーフォルダ(\944BASIC)選択をリスト化しました。
 ・BASファイル以外がドラッグされると、そのままコピーするようにしました。
 ・ファイル名.ICN.BMPというファイルがドラッグされたときには、
 ファイル名.ICNというファイル名でコピーするようにしました。

 


 ・ヘルプをつけました。

 944BASICはザウルス単体でプログラムが組めることが特徴ですが、私の場合はたいていパソコンで組んでいます。
 それで、動作確認するたびに作ったプログラムをメモリカードにコピーしなければなりません。いちいちコピーペーストが面倒なので、コピーボタン一発でできるツールを作りました。
 第1の特徴としては、プログラム中に小文字を使っていても、自動的に大文字に変換してくれます。どうもプログラムは小文字で組む方が好きなのでこんな機能をつけました。
 第2の特徴としては、BASファイル以外もドラッグすることで944BASICフォルダにコピーすることができます。

                              

◆2D加工の友 Ver. 1.20 (2002.3.21)
ダウンロード:trsc2dk2.LZH
 2D加工の友をバージョンアップしました。

 今まで自作のINPUT命令を使っていたのですが、944BASICがINPUT命令を正式実装したのに合わせて変更しました。

 また、944BASICが倍精度に対応したので、計算精度も飛躍的に上がっていると思います。

 2D加工の友とは、金型加工やその他加工機を使う環境において、加工数値を計算するときに便利に使えるツールを目指しています。 

  このプログラムは、単純に三角形の角度と3辺のうち、どれか2つを入力すると、残りの答えを計算してくれるプログラムです。944BASICでは、こんなプログラムも簡単に組めてしまいます。ブラボー! 
 

                              

常駐する格言 (2002.4.5)

ダウンロード:trslkak0.lzh


 TEXTCSVコマンドを用いて、常駐して格言を表示するプログラムを作ってみました。
 kaolさんが作られた付箋紙を真似て作りました。ちょっと、常駐物にしては大きかったかな・・・と思っています。

 trslkak0.datというファイルに下のように格言を入れておくと、それをランダムに表示します。1行目の1項目は、格言ファイルの全体行数です。2〜3項は左に縦書きで表示される文字です。2行目以降はカンマで区切った格言です。でも最初の3つしか表示しません(^^;。
 また、表示時間も30〜60秒のランダムです。

147,格,言,集
誤りを,防ぐ基本の,積み重ね,基本の体得
研究は,基本技術の,積み重ね,基本の体得

プログラム説明
データをロードします。
LOADCSV 'F1:\944BASIC\TRSLKAK0.DAT',A

X=20: Y=20   :REM 初期表示位置(X,Y)
W=180: H=40  :REM 付箋紙の幅と高さ
FONT 64      :REM フォントサイズ
SCREEN X,Y,W,H
rem 乱数の初期化
gosub *RANINI

0〜30の乱数を求めます。
VSec=rnd%30
今の秒を求めます。
ASec=TIME%100
表示を切り替えるときの秒を求めます。
Vsec=ASec+30+Vsec
if Vsec>59 then Vsec=Vsec-60

COLORBG 0,128,128
CLS

変数mに格言の行数を代入します。
m=A(0,0)
表示する格言の行を乱数で決めます。
p=(rnd%m)+1

*LOOP SYNC
 COLORBG 0,64,128
 COLORFG 255,255,255
 BOX 1,1,10,10
 line 10,1,1,10
 COLORFG 255,255,0
'格''言'の表示
 GCURSOR 1,14:PRINT A(1,0)
 GCURSOR 1,27:PRINT A(2,0)
 COLORBG 0,128,128
 COLORFG 255,255,255
格言の表示
 GCURSOR 16,1: PRINT A(0,p)
 GCURSOR 40,14: PRINT A(1,p)
 GCURSOR 64,27: PRINT A(2,p);
 ASec=TIME%100

表示切替え時間のチェック、また決定キーのチェック
 if (VSec=ASec)+(pada) then else goto *Loop01
  p=(rnd%m)+1
   VSec=rnd%30
   ASec=TIME%100
   Vsec=ASec+30+Vsec
   if Vsec>59 then Vsec=Vsec-60
   cls
 *Loop01
GOTO *LOOP