home *** CD-ROM | disk | FTP | other *** search
/ MacUser Mac Bin 40 / MACUSER-MACBIN40A-1997-03.ISO.7z / MACUSER-MACBIN40A-1997-03.ISO / 特集⁄オンラインソフト / ゲーム&アミューズメント / アミューズメント / お説教フォルダ / インサイドお説教 next >
Text File  |  1991-12-14  |  6KB  |  127 lines

  1. ★ ”お説教”の技術情報 ★
  2.  
  3. 日曜プログラマーの人、必須のドキュメントです。プログラムなんか興味が
  4. ないという人は特に読まないといけないわけじゃありません。
  5.  
  6. なお、このプログラムは漢字トーク6.0.4で動くマックプラス(4M RAM)で
  7. Think-C Ver.5.0.1で開発をしました。
  8.  
  9.  
  10. ★ リソース情報 ★
  11.  
  12. 文章は、すべてSTR#リソースを使っています。したがってリソース
  13. エディターを使えば、自分なりに文章を変えられます。STR#リソース
  14. は追加することも削除することも可能です。OSEKリソース(これは
  15. 正式なリソースじゃなく、このアプリケーションで独自に決めたリソース
  16. です。)のID=1001はSTR#リソースの最小番号を意味し、
  17. ID=1002はSTR#リソースの最大番号を意味し、
  18. ID=1003は、この次に”お説教”する予定の文章のID番号を意味
  19. します。だから、このへんを調整してください。
  20. OSEKリソースの項目では日本語で”数値”という文句が出てきますが
  21. その秘密はTMPLリソースにあります。TMPLリソースの使い方は
  22. ResEditの参考書を参照してください。
  23.  
  24.  
  25. ★ プログラム情報 ★
  26.  
  27. まず、典型的なアプリケーションとは初期化→メインの処理→終了処理と
  28. いう3つの流れがあります。終了処理はアプリケーションではなくOSが
  29. 勝手にやってくれる場合があるのでアプリケーションで省略したり手を抜く
  30. ことがありますが、初期化とメインの処理は省略するわけにはいきません。
  31.  
  32. まず、初期化はマネージャの初期化をしています。
  33. MaxApplZoneからInitCursorまでの部分がそうです。それぞれの手続きが
  34. 何をしているかはインサイドマックやインサイドマック徹底ガイドなどを
  35. 参考にしてください。
  36.  
  37. InitDialogs(ResumeIt);に注意。普通の参考書ではInitDialogs(0L);とかいう
  38. ように0Lを指定している場合が多いのですが、ここではそうしていません。
  39. 実はInitDialogsの引き数になる部分には爆弾アラートが出たときに
  40. レジュームボタンを出して、レジューム処理(回復処理)をさせるときの
  41. 処理ルーチンの指定を行ないます。こういうように、いったんシステムの
  42. 内部で、なにかがあったときにシステムから呼び出してくれるように
  43. システムに依頼をするルーチンをコールバック関数という言い方をする人
  44. もいます。ここではstatic pascal void ResumeItを処理ルーチンとして
  45. います。通常、マックではコールバック関数はパスカル呼び出しをすると
  46. いう約束事になっているのでpascalというキーワードをつけます。
  47. ResumeItの中身は単にExitToShellでファインダーに戻しているだけです。
  48.  
  49. 続いてメインの処理です。本格的なマックのアプリケーションは、ここで
  50. GetNewWindowとかNewWindowを使ってウィンドウをひろげてユーザー
  51. の入力を待つという形になるのですが、これは低レベルソフトなので、
  52. そういう面倒な道を選ばず、すべてGetNewDialogとAlertで、お茶を濁して
  53. いきます。(^^;)  ダイアログにしてもアラートにしても、これが出ている間
  54. はデスクアクセサリは呼べないし、マルチファインダーの場合なら他の
  55. アプリケーションに切り替わることもできません。こういうのを
  56. 「モーダル」と称し、これの反対語である「モードレス」よりも低級で
  57. あるとか文句を言われることもあります。しかし「低レベルソフト」では
  58. 変にかっこうをつけて泥沼な「モードレス」処理を選ばないで、あえて
  59. 「モーダル」で突っ走ろうという姑息な手段をとります。(笑い)
  60.  
  61. OpeningTitle
  62.  
  63. ウィンドウをひろげるのはGetNewWindowとNewWindowだけではあり
  64. ません。ここではGetNewDialogでウィンドウをひろげていますが、これを
  65. 使うメリットとしてリソースエディターでウィンドウの中身をいじるのは
  66. ダイアログリソース(DLOGリソース)のほうが便利であり、あとから修正が
  67. 楽だというのがあります。さてGetNewDialogをしただけではウィンドウの
  68. 外枠が出てくるだけであり、この段階では中身は、まだ表示されません。
  69. DrawDialogで初めて中身が表示されます。ところでこのDrawDialogは
  70. インサイドマックなどを読めば「異常な状態で使うものであり、これを直接
  71. 使うことはありえない」とかいう意味のことが書いてありギョっとします
  72. が、これは通常はModalDialogが暗黙のうちにDrawDialogを呼んでくれたり
  73. あるいはアップデートイベントが発生するのでアプリケーションの
  74. アップデート処理で明示的に呼ぶというわけで何も異常なときであるわけ
  75. ではありません。
  76. GetNewDialogを呼んだあと、この関数はダイアログの情報を記録した領域
  77. のポインターを返してくれます。やっかいなことにマックでは、なにかの
  78. 処理を依頼した結果、情報を記録した領域のアドレスをポインターで返す
  79. ときと、ハンドルで返すときとがあって混乱しそうになります。まぁC言語
  80. の勉強で挫折する定番パターンは「ポインター」ですが、これこそ言葉だけ
  81. が浮遊した状態で、いったい「ポインター」とは何者であるかを、しっかり
  82. 把握していないと後々に不幸に見舞われるので、言葉だけでなく、意味を
  83. 把握することにしましょう。ポインターとは、すなわち間接アドレッシング
  84. (アドレッシングとは、ある物が、どこにあるかを指し示すための表現方法
  85. のことです)にしか過ぎないんですけどね。。。
  86.  
  87. WaitAWhile
  88. Delayは実に簡単な手続きですので説明は省略します。
  89.  
  90. GetTodayInformation
  91. 最近のC言語は複数のパラメータを構造体を使って返すことができます。
  92. 昔のC言語なら、いわゆる構造体ポインターを使ってやってましたけどね。
  93. GetResourceはリソースを取り出すための関数です。これは取り出した
  94. リソースへのポインターじゃなくハンドルを返します。ハンドルは
  95. 「ポインターのポインター」であり、いわゆるUNIXとかでファイル
  96. ハンドルという言い方をするものはマックでは参照番号(reference number)
  97. と称するので間違えないように。ポインターのポインターであるのでデータ
  98. をさわりに行くときに*マークを二重にしています。
  99. ReleaseResourceでリソースの参照をやめにします。(いわゆる解放)
  100. リソースは他のハンドルやポインターを使ってアクセスするものと違って
  101. 必ず解放処理をしなくてもいい場合もあるのですが(というより解放処理
  102. を手抜きしたいために設計した形跡がうかがえます)ここでは律儀に
  103. 解放します。リソースは通常はリードオンリーなデータであり、パージ可能
  104. なビットを立てておけばメモリー不足のときにOSが勝手に解放してくれて
  105. メモリーのやりくり処理が楽になるわけですが、このアプリケーションでは
  106. OSEKリソースのID番号が1003のものは更新をかけています。この処理は
  107. ChangedResourceとWriteResourceで行なっています。この2つの手続きは
  108. インサイドマックを読むと結構、難解なことを書いているのでビビりそうに
  109. なりますが、要するにChangedResourceで変更を加えたということを教え
  110. WriteResourceで変更箇所を書いてやるということです。
  111.  
  112. OsekkyouMain
  113.  
  114. ここではAlertでウィンドウを出しています。Alertから戻ってくるのは、どの
  115. ボタンが押されたかの情報であり、もし中止であるなら終了フラグをたてて
  116. 次回にOsekkyouMainが呼ばれてもヤンペするようにしています。
  117. GetIndStringはSTR#リソースを読み込む手続きです。文字列を扱うリソース
  118. はSTR,TEXT,STR#といくつか種類がありますが、ここではアプリの性格で
  119. STR#リソースが最適であると判断したので、これを使います。
  120. ParamTextはダイアログやアラートで文字列が可変である部分(たとえば
  121. 今日の日付や時刻などは固定したデータじゃないからリソースに埋め込め
  122. ないですよね)をあとからフィックスしてやるときに使います。ここでは
  123. ^0というようにリソースで指定しているものだけをフィックスします。
  124.  
  125.  
  126. 1991年12月 K仲川 (IKU-NET 287,NIFTY PAG02107)
  127.