土木測量プログラムの開発 (メイン関数と初期値の呼び出し)

2017/03/21


メイン関数の作成

全てのプログラムはメイン関数内の無限ループ内で呼び出されます。

各プログラムへのジャンプはグローバル変数で管理します。 以下はメイン関数より前に宣言します。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#include "fxlib.h"

// 定数

// グローバル変数
char FuncKey;        // ファンクションキー用
int JumpNumber = 1;  // プログラムのジャンプ先を指定。

// 関数
#include "fontdata.h"
#include "extio.h"
#include "menu.h"
以下は基本となるメイン関数部分です。
/****************************************************************************
int AddIn_main(int isAppli, unsigned short OptionNum) {
    int i;   // 汎用変数
    char c;  // 汎用変数

    while(1) {
        FuncKey = 0;
        switch(JumpNumber) {
            case 1: // F1 メニュー
                break;
            case 2: // F2 メニュー
                break;
        }
    }

    return 1;
}
F1メニューの中身を作成します。 Menu関数の戻り値によりとび先が変わります。
まだプログラムが作成されていない部分は何も処理されません。
   case 1: // F1 メニュー
      i = Menu(1, 0);
      if(FuncKey == 1) {         // F1キー
          JumpNumber = 1;
      } else if(FuncKey == 2) {  // F2キー
          JumpNumber = 2;
      } else {         // 戻り値の分岐
          switch(i) {
              case 1:  // 器械点登録
                  i = SubMenu(0);  // サブメニュー(0)へ
                  JumpNumber = 1;
                  break;
              case 2:  // 座標変換要素登録
                  break;
              case 3:  // 線形要素登録
                  break;
              case 4:  // 縦断要素登録
                  break;
              case 5:  // 拡幅要素登録
                  i = SubMenu(1);  // サブメニュー(1)へ
                  JumpNumber = 1;
                  break;
              case 6:  // 横断勾配登録
                  i = SubMenu(2);  // サブメニュー(2)へ
                  JumpNumber = 1;
                  break;
              default:
                  JumpNumber = 1;
                  break;
          }
      }
      break;


変数の保存と呼び出し。

ファイル操作のページでも解説しましたが、各プログラムの実行の際に変数を呼び出したり保存したりします。

ファイルのどの位置にどのような変数を保存したかを番地で管理するより、定数でプログラムした方が保存先を変更した際に修正の手間が省けます。

ファイル名"\\fls0\dmem.dat"の定義を定数の箇所に追加します。

// 定数
static const FONTCHARACTER MemFile[] = {'\\','\\','f','l', 's', '0','\\','d','m','e','m','.','d','a','t',0};
static const F1_Menu_Number  01;  // 1 F1メニューの選択番号
static const F2_Menu_Number  02;  // 1 F1メニューの選択番号

// グローバル変数

変数の呼び出し関数を作成し、メイン関数の先頭で読み込みます。 ファイルが無い場合はデフォルトの変数をファイルに保存します。

LoadFile(void) {
    int fileHandle;
    int fileAddress;
    int tmp;

    fileHandle = Bfile_OpenFile(MemFile, _OPENMODE_READWRITE); // ファイルのオープン
    if (fileHandle < 0) {
        Bfile_CreateFile(MemFile, 100); // オープンに失敗した場合、新規にファイルを作成。
        fileHandle = Bfile_OpenFile(MemFile, _OPENMODE_READWRITE);
    }

    tmp = Bfile_CloseFile(fileHandle); // ファイルをクローズ
    return;
}