home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 1997 March / VPR9703A.ISO / VPR_DATA / DOGA / SOURCES / POLYEDIT.LZH / MACRO / FILE.M < prev    next >
Text File  |  1996-08-02  |  19KB  |  897 lines

  1. function GetFile( title, filename, kakucho )
  2. {
  3.     var    input_file, temp, warning_flag = ON;
  4.     var    i, ele[3];
  5.  
  6.     if( MACHINE != "WINDOWS" )
  7.     {
  8.         DlogOpen( title, 1 );
  9.         DlogString( 0, "ファイル名", filename, 40 );
  10.         i = DlogWait();
  11.         if( i == 0 )
  12.             return FALSE;
  13.         input_file = MakeFile( DlogAnswer( 0 ), kakucho );
  14.     }
  15.     else
  16.     {
  17.         var t[MAXFILETYPE], i0, ff;
  18.         for (i = 0; i < MAXFILETYPE; i++) {
  19.             t[i] = "";
  20.         }
  21.         if (kakucho == "")
  22.         {
  23.             i0 = 0;
  24.             temp = "";
  25.             if (filename == "")
  26.                 ff = FILEFUNC_LOAD;
  27.             else
  28.                 ff = FILEFUNC_SAVE;
  29.             
  30.             for (i = 0; i < filefuncs; i++) {
  31.                 if (typeof(filefunc[i][ff]) == FUNC)
  32.                 {
  33.                     t[i0] = filefunc[i][FILEFUNC_COMMENT];
  34.                     if (i0 < MAXFILETYPE-1) {
  35.                         i0++;
  36.                     }
  37.                 }
  38.             }
  39.             temp = t[0];
  40.         }
  41.         else if( toupper( kakucho ) == "SUF" )
  42.             temp = "形状ファイル(*.SUF)";
  43.         else if( toupper( kakucho ) == "ATR" )
  44.             temp = "アトリビュートファイル(*.ATR)";
  45.         else if( toupper( kakucho ) == "FSC" )
  46.             temp = "メカデザインデータ(*.FSC)";
  47.         else if( toupper( kakucho ) == "INI" )
  48.             temp = "設定ファイル(*.INI)";
  49.         else if( toupper( kakucho ) == "RSD" )
  50.             temp = "秘密のファイル(*.RSD)";
  51.         else
  52.             temp = "すべてのファイル(*.*)";
  53.         if( filename == "" )
  54.             input_file = DlogFileOpen( title, "", temp, t[1], t[2], t[3], t[4], t[5], t[6], t[7] );
  55.         else
  56.             input_file = DlogFileOpen( title, filename, temp, t[1], t[2], t[3], t[4], t[5], t[6], t[7] );
  57.     }
  58.     if( input_file == "" )
  59.     {
  60.         Warning();
  61.         return FALSE;
  62.     }
  63.     return input_file;
  64. }
  65.  
  66. //
  67. //    形状セーブ関数
  68. //
  69. function _SaveSuf( filename, savefile_org, obj_flag )
  70. {
  71.     var    i, num;
  72.     var    flag = OFF;
  73.     var    temp1, temp2;
  74.     var    ele[3], savefile;
  75.  
  76.     temp2 = fullpath(MakeFile( filename, ".suf"));
  77.     savefile = fullpath( MakeFile( savefile_org, ".suf" ));
  78.     num = Objects();
  79.     for( i = 0; i< num; i++ )
  80.     {
  81.         temp1 = toupper( fullpath(MakeFile( ObjFile(i), ".suf")));
  82.         if( temp1 == toupper(temp2))
  83.         {
  84.             SelectObj( i, TRUE, SELECT_UPDATE );
  85.             ObjFile( i , savefile);
  86.             if( obj_flag == TRUE )
  87.             {
  88.                 Bunkai( savefile_org, ele );
  89.                 ObjName( i, ele[1] );
  90.             }
  91.             if( SelectPolygons() != 0 )
  92.             {
  93.                 if( flag == OFF )
  94.                 {
  95.                     WriteFile( i, FILE_OVERWRITE );
  96.                     flag = ON;
  97.                 }
  98.                 else
  99.                     WriteFile( i, FILE_APPEND );
  100.             }
  101.             else
  102.             {
  103.                 Message( "オブジェクト " + ObjName(i) + "\n"+
  104.                      "には、面が存在しないのでセーブしません。" );
  105.             }
  106.             ObjEdit( i, FALSE );
  107.         }
  108.     }
  109. }
  110.  
  111. //
  112. //    アトリセーブ関数
  113. //
  114. function _SaveAtr( filename, savefile )
  115. {
  116.     var    i, num;
  117.     var    flag = OFF;
  118.     var    temp1, temp2;
  119.     var    sel1, sel2;
  120.  
  121.     sel1 = Select();
  122.     SelectAll( TRUE );
  123.     sel2 = Select();
  124.     PolyInvisible( FALSE );
  125.     temp2 = fullpath(MakeFile(filename,".atr"));
  126.     savefile = fullpath( MakeFile( savefile, ".atr" ));
  127.     num = Attrs();
  128.     for( i = 0; i< num; i++ )
  129.     {
  130.         if( AttrFile(i) != "" )
  131.             temp1 = toupper( fullpath(MakeFile( AttrFile(i), ".atr")));
  132.         else
  133.             temp1 = "";
  134.         if(( temp1 == toupper(temp2) ) | ( temp1 == "" ))
  135.         {
  136.             if( flag == OFF )
  137.                 AttrWriteFile( savefile, i, FILE_OVERWRITE );
  138.             else
  139.                 AttrWriteFile( savefile, i, FILE_APPEND );
  140.             flag = ON;
  141.         }
  142.         else
  143.         {
  144.             SelectAttr( i, TRUE, SELECT_UPDATE );
  145.             if( SelectPolygons() != 0 )
  146.             if( flag == OFF )
  147.                 AttrWriteFile( savefile, i, FILE_OVERWRITE );
  148.             else
  149.                 AttrWriteFile( savefile, i, FILE_APPEND );
  150.             flag = ON;
  151.         }
  152.     }
  153.     Select( sel2 );
  154.     PolyInvisible( invisible_flag );
  155.     Select( sel1 );
  156. }
  157.  
  158. //
  159. //    新規作成
  160. //
  161. function NewData()
  162. {
  163.     var    i, uv[2][2];
  164.     var    flag = OFF;
  165.  
  166.     for( i = 0; i< Objects();i++ )
  167.     {
  168.         if( ObjEdit( i ))
  169.         {
  170.             flag = TRUE;
  171.             break;
  172.         }
  173.     }
  174.     if( flag )
  175.     {
  176.         Warning();
  177.         DlogOpen( "", 1, "キャンセル " ,"いいえ"," はい " );
  178.         DlogMessage( 0, "データが変更されています。保存しますか?" );
  179.         i = DlogWait();
  180.         if( i == 0 )
  181.             return;
  182.         else if(( i == 2 ) | ( i == RET ))
  183.             SaveAll();
  184.     }
  185.     PolyInvisible( FALSE );
  186.     SelectAll( TRUE, SELECT_UPDATE );
  187.     if( SelectPolygons != 0 )
  188.         PolyDelete();
  189.     while( Objects() > 0 )
  190.         ObjDelete( 0 );
  191.     while( Attrs() > 0 )
  192.         AttrDelete( 0 );
  193.     ObjAppend( default_objname, default_filename );
  194.     AttrAppend( default_atrname, default_atrcode );
  195.     AttrFile( 0, default_atrfile );
  196.     if( EXPERT != TRUE )
  197.     {
  198.         AttrMap( 0, TRUE );
  199.         AttrMapFile( 0, MAPPINGFILE );
  200.         uv[0] = {0,0};
  201.         uv[1] = {MAPWIND-1, MAPWIND-1};
  202.         SetAttrMapWind( 0, uv[0], uv[1] );
  203.         uv[0] = {0,0};
  204.         uv[1] = {UVmax,UVmax};
  205.         SetAttrMapSize( 0, uv[0], uv[1] );
  206.     }
  207.     UpdateObject();
  208.     UpdateAttribute();
  209.     AllInit();
  210.     Polygon();
  211. }
  212.  
  213. function private _LoadSufFile( filename )
  214. {
  215.     var    i, j, k, temp, temp2, flag = OFF;
  216.     var    key, sel1, sel2, temp_sel, old_max, deleteflag[MAXOBJECT];
  217.  
  218.  
  219.     temp = fullpath( filename );
  220.     for( i = 0; i< Objects(); i++ )
  221.     {
  222.         temp2 = fullpath( ObjFile( i ));
  223.         if( toupper(temp2) == toupper(temp) )
  224.         {
  225.             flag = TRUE;
  226.             break;
  227.         }
  228.     }
  229.     if( flag == TRUE )
  230.     {
  231.         flag = FALSE;
  232.         for( i = 0; i< Objects(); i++ )
  233.         {
  234.             if( toupper(temp) == toupper( fullpath(ObjFile(i))))
  235.             {
  236.                 if( ObjEdit(i) == TRUE )
  237.                 {
  238.                     flag = TRUE;
  239.                     break;
  240.                 }
  241.             }
  242.         }
  243.         if( flag == TRUE )
  244.         {
  245.             Warning();
  246.             DlogOpen( "", 2 , "いいえ", "はい" );
  247.             DlogMessage( 0, "ファイルはすでに読み込まれています。" );
  248.             DlogMessage( 1, "編集中のデータを破棄しますか?" );
  249.             key = DlogWait();
  250.             if( key == 0 )
  251.                 return FALSE;
  252.         }
  253.         SelectAll( TRUE );
  254.         sel2 = Select();
  255.         PolyInvisible( FALSE );
  256.         i = 0;
  257.         while( i < Objects() )
  258.         {
  259.             if( toupper( temp) == toupper( fullpath( ObjFile(i))))
  260.             {
  261.                 SelectObj( i, TRUE, SELECT_UPDATE );
  262.                 temp_sel = Select();
  263.                 Select( sel2 );
  264.                 PolyDelete( temp_sel );
  265.                 sel2 = Select();
  266.                 ObjDelete( i );
  267.             }
  268.             else
  269.                 i++;
  270.         }
  271.         Select( sel2 );
  272.         PolyInvisible( invisible_flag );
  273.     }
  274.     flag = FALSE;
  275.     old_max = Objects();
  276.     j = 0;
  277.     ReadFile( temp, OBJ_CREATE );
  278.     for( i = old_max; i< Objects(); i++ )
  279.     {
  280.         k = ObjSearch( ObjName( i ));
  281.         if(( k<old_max ) & ( k >= 0 ))
  282.         {
  283.             DlogOpen( "データの上書きを確認", 3, "読み込み中止", "元データを破棄", "新規データを破棄" );
  284.             DlogMessage( 0, "読み込みファイル "+temp );
  285.             DlogMessage( 1, "中に編集中のオブジェクト "+ObjName( i ) );
  286.             DlogMessage( 2, "と同名のオブジェクトが存在します。どうしますか" );
  287.             key = DlogWait();
  288.             if( key == 0 )
  289.             {
  290.                 PolyDelete();
  291.                 return FALSE;
  292.             }
  293.             else if( key == 1 )
  294.             {
  295.                 deleteflag[j] = k;
  296.                 j++;
  297.             }
  298.             else
  299.             {
  300.                 deleteflag[j] = i;
  301.                 j++;
  302.             }
  303.         }
  304.     }
  305.     sel1 = Select();
  306.     for( k = 0; k< j; k++ )
  307.     {
  308.         temp = 0;
  309.         for( i = 0; i< j; i++ )
  310.         {
  311.             if( deleteflag[temp] < deleteflag[i] )
  312.                 temp = i;
  313.         }
  314.         SelectObj( deleteflag[temp], TRUE, SELECT_UPDATE );
  315.         temp_sel = Select();
  316.         Select( sel1 );
  317.         PolyDelete( temp_sel );
  318.         sel1 = Select();
  319.         ObjDelete( deleteflag[temp] );
  320.         deleteflag[temp] = -1;
  321.     }
  322.     return TRUE;
  323. }
  324.  
  325. //
  326. //拡張子から判断して、それらしい形式からファイルを読み込む関数
  327. //
  328. function LoadAnyFile(filename)
  329. {
  330.     var ele[3], i;
  331.     Bunkai( filename, ele );
  332.     for (i = 0; i < filefuncs; i++) {
  333.         if (toupper(ele[2]) == filefunc[i][FILEFUNC_EXT])
  334.             if (typeof(filefunc[i][FILEFUNC_LOAD]) == FUNC)
  335.                 break;
  336.     }
  337.     if (i == MAXFILETYPE) {
  338.         Message( "ファイル形式が不明です: *." + ele[2]);
  339.         return FALSE;
  340.     }
  341.     if (call(filefunc[i][FILEFUNC_LOAD], filename) == FALSE) {
  342.         return FALSE;
  343.     }
  344.     return TRUE;
  345. }
  346.  
  347.  
  348. function private _Load( atr_flag )
  349. {
  350.     var filename, flag, temp;
  351.     if (filefuncs <= 1)
  352.         filename = GetFile( "データロード", "", "suf" );
  353.     else
  354.         filename = GetFile( "データロード", "", "" );
  355.     if( typeof( filename ) == BOOLEAN )
  356.         return;
  357.     if( access( filename ) == FALSE )
  358.     {
  359.         Warning();
  360.         Message( "ファイルが存在しません" );
  361.         return FALSE;
  362.     }
  363.     if (filefuncs <= 1)
  364.         flag = _LoadSufFile(filename);
  365.     else
  366.         flag = LoadAnyFile(filename);
  367.     if (flag == FALSE)
  368.         return FALSE;
  369.  
  370.     if( atr_flag == TRUE )
  371.     {
  372.         filename = MakeFile( substr( filename, ( !filename - 4 )), ".atr" );
  373.         if( access( filename ))
  374.             AttrReadFile( filename );
  375.     }
  376.  
  377.     temp = Objects() -1;
  378.     ObjCurrent( temp );
  379.     UpdateObject();
  380.     UpdateAttribute();
  381.     Update( CLEAR );
  382.     return TRUE;
  383. }
  384.  
  385.  
  386.  
  387. function _Close( filename, name_flag)
  388. {
  389.     var    temp, i, flag = FALSE;
  390.     var    sel1, sel2;
  391.  
  392.     for( i = 0; i< Objects();i++ )
  393.     {
  394.         if( filename == toupper( fullpath( ObjFile( i ))))
  395.         {
  396.             if( ObjEdit( i ))
  397.             {
  398.                 flag = TRUE;
  399.                 break;
  400.             }
  401.         }
  402.     }
  403.     if( flag & name_flag )
  404.     {
  405.         Warning();
  406.         DlogOpen( "", 1,"キャンセル ","いいえ"," はい " );
  407.         DlogMessage( 0, "データが変更されています。保存しますか?" );
  408.         i = DlogWait();
  409.         if( i == 0 )
  410.             return;
  411.         else if( ( i == 2 )| (i == RET ))
  412.         {
  413.             _SaveSuf( filename, filename, FALSE );
  414.             if( EXPERT != TRUE )
  415.             {
  416.                 temp = substr( filename, ( !filename -4 ));
  417.                 _SaveAtr( temp, temp );
  418.             }
  419.         }
  420.     }
  421.     sel1 = Select();
  422.     SelectAll( TRUE );
  423.     sel2 = Select();
  424.     PolyInvisible( FALSE );
  425.     i = 0;
  426.     while( i < Objects())
  427.     {
  428.         if( filename == toupper( fullpath( ObjFile( i ))))
  429.         {
  430.             SelectObj( i, TRUE, SELECT_UPDATE );
  431.             sel1 = sel1 & (!Select());
  432.             sel2 = sel2 & (!Select());
  433.             PolyDelete();
  434.             ObjDelete( i );
  435.         }
  436.         else
  437.             i++;
  438.     }
  439.     Select( sel2 );
  440.     PolyInvisible( invisible_flag );
  441.     Select( sel1 );
  442. }
  443.  
  444. function _Save( atr_flag )
  445. {
  446.     var    sel1, sel2, temp;
  447.  
  448.     sel1 = Select();
  449.     SelectAll( TRUE );
  450.     sel2 = Select();
  451.     PolyInvisible( FALSE );
  452.     temp = ObjFile( ObjCurrent());
  453.     _SaveSuf( temp, temp, FALSE );
  454.     if( atr_flag == TRUE )
  455.     {
  456.         temp = substr( temp, (!temp - 4));
  457.         _SaveAtr( temp, temp );
  458.     }
  459.     Select( sel2 );
  460.     PolyInvisible( invisible_flag );
  461.     Select( sel1 );
  462.     UpdateObject();
  463. }
  464.  
  465. function _SaveSufFile(filename)
  466. {
  467.     _SaveSuf( ObjFile(ObjCurrent()), filename, FALSE );
  468. }
  469.  
  470. //
  471. //拡張子から判断して、それらしい形式でファイルを出力する関数
  472. //
  473. function SaveAnyFile(filename)
  474. {
  475.     var i, ele[3];
  476.  
  477.     Bunkai( filename, ele );
  478.     for (i = 0; i < filefuncs; i++) {
  479.         if (toupper(ele[2]) == filefunc[i][FILEFUNC_EXT])
  480.             if (typeof(filefunc[i][FILEFUNC_SAVE]) == FUNC)
  481.                 break;
  482.     }
  483.     if (i == MAXFILETYPE) {
  484.         Message( "ファイル形式が不明です: *." + ele[2]);
  485.         return FALSE;
  486.     }
  487.     return call(filefunc[i][FILEFUNC_SAVE], filename);
  488. }
  489.  
  490. function _Saveas( atr_flag )
  491. {
  492.     var    sel1, sel2, temp, filename;
  493.  
  494.     sel1 = Select();
  495.     SelectAll( TRUE );
  496.     sel2 = Select();
  497.     PolyInvisible( FALSE );
  498.     temp = ObjFile( ObjCurrent());
  499.     if( atr_flag == TRUE )
  500.     {
  501.         filename = GetFile( "データセーブ", temp, "suf" );
  502.         if( typeof( filename ) == BOOLEAN )
  503.             return;
  504.         _SaveSuf( temp, filename, TRUE );
  505.         temp = substr( temp, (!temp - 4));
  506.         filename = substr( filename, (!filename - 4));
  507.         _SaveAtr( temp, filename );
  508.     }
  509.     else
  510.     {
  511. //        _SaveSuf( temp, filename, FALSE );
  512.         if (filefuncs <= 1)
  513.         {
  514.             filename = GetFile( "データセーブ", temp, "suf" );
  515.             if( typeof( filename ) == BOOLEAN )
  516.                 return;
  517.             _SaveSuf( temp, filename, FALSE );
  518.         }
  519.         else
  520.         {
  521.             filename = GetFile( "データセーブ", temp, "" );
  522.             if( typeof( filename ) == BOOLEAN )
  523.                 return;
  524.             SaveAnyFile(filename);
  525.         }
  526.     }
  527.     Select( sel2 );
  528.     PolyInvisible( invisible_flag );
  529.     Select( sel1 );
  530.     UpdateObject();
  531. }
  532.  
  533. function _SaveAll( atr_flag )
  534. {
  535.     var const    maxfilenumber = 64;
  536.     var    i, j, k=0, num;
  537.     var    sel1, sel2;
  538.     var    temp, filename[maxfilenumber];
  539.     var    flag;
  540.  
  541.     num = Objects();
  542.     for( i = 0; i< num ; i++ )
  543.     {
  544.         if( ObjEdit( i ) == TRUE )
  545.         {
  546.             temp = ObjFile( i );
  547.             flag = TRUE;
  548.             for( j= 0; j< k; j++ )
  549.             {
  550.                 if( filename[j] == temp )
  551.                     flag = FALSE;
  552.             }
  553.             if( flag == TRUE )
  554.             {
  555.                 filename[k] = temp;
  556.                 k++;
  557.             }
  558.         }
  559.     }
  560.  
  561.     sel1 = Select();
  562.     SelectAll( TRUE );
  563.     sel2 = Select();
  564.     PolyInvisible( FALSE );
  565.     for( i = 0; i< k; i++ )
  566.     {
  567.         _SaveSuf( filename[i], filename[i], FALSE );
  568.         if( atr_flag == TRUE )
  569.         {
  570.             temp = substr( filename[i], (!filename[i] - 4));
  571.             _SaveAtr( temp, temp );
  572.         }
  573.     }
  574.     Select( sel2 );
  575.     PolyInvisible( invisible_flag );
  576.     Select( sel1 );
  577.     UpdateObject();
  578.     return TRUE;
  579. }
  580.  
  581. //
  582. //    子プロセス
  583. //
  584. function Shell()
  585.     Child( getenv( "COMSPEC" ) );
  586.  
  587. //
  588. //    終了
  589. //
  590. function QuitModel()
  591. {
  592.     var    i;
  593.     var    flag = OFF, return_flag = TRUE;
  594.  
  595.     for( i = 0; i< Objects();i++ )
  596.     {
  597.         if( ObjEdit( i ))
  598.         {
  599.             flag = TRUE;
  600.             break;
  601.         }
  602.     }
  603.     if( flag )
  604.     {
  605.         Warning();
  606.         DlogOpen( "", 1,"キャンセル ","いいえ"," はい " );
  607.         DlogMessage( 0, "データが変更されています。保存しますか?" );
  608.         i = DlogWait();
  609.         if( i == 0 )
  610.             return_flag =  FALSE;
  611.         else if(( i == 2 ) | ( i == RET ))
  612.         {
  613.             if( EXPERT != TRUE )
  614.                 return_flag = _SaveAll( TRUE );
  615.             else
  616.                 return_flag = _SaveAll( FALSE );
  617.         }
  618.     }
  619.     if( return_flag == TRUE )
  620.     {
  621.         Quit();
  622.         return TRUE;
  623.     }
  624.     else
  625.         return FALSE;
  626. }
  627.  
  628. function LoadAtr()
  629. {
  630.     var    filename, temp;
  631.     var    old_max, i, j, k, key;
  632.     var    copyflag[MAXATTR], deleteflag[MAXATTR];
  633.  
  634.     filename = GetFile( "データロード", "", "atr" );
  635.     if( typeof( filename ) == BOOLEAN )
  636.         return;
  637.     temp = fullpath( filename );
  638.     if( access( filename ) == FALSE )
  639.     {
  640.         Warning();
  641.         Message( "ファイルが存在しません" );
  642.         return FALSE;
  643.     }
  644.  
  645.     old_max = Attrs();
  646.     AttrReadFile( temp, ATTR_CREATE );
  647.     for( i = old_max; i< Attrs(); i++ )
  648.     {
  649.         k = AttrSearch( AttrName( i ));
  650.         if(( k<old_max ) & ( k >= 0 ))
  651.         {
  652.             if( AttrFile( k ) == "" )
  653.             {
  654.                 copyflag[i] = k;
  655.                 deleteflag[i] = k;
  656.             }
  657.             else
  658.             {
  659.                 DlogOpen( "データの上書きを確認", 3, "読み込み中止", "元データを破棄", "新規データを破棄" );
  660.                 DlogMessage( 0, "読み込みファイル "+temp );
  661.                 DlogMessage( 1, "中に編集中のアトリビュート "+AttrName( i ) );
  662.                 DlogMessage( 2, "と同名のアトリビュートが存在します。どうしますか" );
  663.                 key = DlogWait();
  664.                 if( key == 0 )
  665.                 {
  666.                     while( old_max < Attrs() )
  667.                         AttrDelete( old_max );
  668.                     return FALSE;
  669.                 }
  670.                 else if( key == 1 )
  671.                 {
  672.                     copyflag[i] = k;
  673.                     deleteflag[i] = k;
  674.                 }
  675.                 else
  676.                 {
  677.                     copyflag[i] = k;
  678.                     deleteflag[i] = i;
  679.                 }
  680.             }
  681.         }
  682.         else
  683.         {
  684.             copyflag[i] = i;
  685.             deleteflag[i] = i;
  686.         }
  687.     }
  688.     for( i = old_max; i< Attrs(); i++ )
  689.     {
  690.         if( copyflag[i] != i )
  691.         {
  692.             if( deleteflag[i] == i )
  693.             {
  694.                 AttrFile( copyflag[i], temp );
  695.                 AttrCopy( copyflag[i], i );
  696.             }
  697.             else
  698.             {
  699.                 AttrFile( copyflag[i], temp );
  700.                 AttrCopy( i, copyflag[i] );
  701.             }
  702.         }
  703.         if( copyflag[i] != i )
  704.             AttrName( i, "" );
  705.     }
  706.     j = 0;
  707.     while( j < Attrs() )
  708.     {
  709.         if( AttrName( j ) == "" )
  710.             AttrDelete( j );
  711.         else
  712.             j++;
  713.     }
  714.     UpdateAttribute();
  715.     Update( OVERWRITE );
  716. }
  717.  
  718. function _SaveAtrforExpert( file, savefile )
  719. {
  720.     var    i, org, savename, temp, flag = FALSE;
  721.  
  722.     if( file != "" )
  723.         org = toupper(fullpath( file ));
  724.     else
  725.         org = "";
  726.     savename = fullpath( savefile );
  727.     for( i = 0; i< Attrs(); i++ )
  728.     {
  729.         if( AttrFile( i ) != "" )
  730.             temp = toupper(fullpath(AttrFile( i )));
  731.         else
  732.             temp = "";
  733.         if( temp == org )
  734.         {
  735.             AttrFile( i , savename );
  736.             if( flag == TRUE )
  737.                 AttrWriteFile( savename, i, FILE_APPEND );
  738.             else
  739.             {
  740.                 AttrWriteFile( savename, i, FILE_OVERWRITE );
  741.                 flag = TRUE;
  742.             }
  743.         }
  744.     }
  745. }
  746.  
  747. function Load()
  748.     _Load( TRUE );
  749.  
  750. function Close()
  751. {
  752.     _Close( toupper( fullpath( ObjFile( ObjCurrent()))), TRUE);
  753.     if( Objects() == 0 )
  754.         Quit();
  755.     else
  756.     {
  757.         UpdateObject();
  758.         Update( CLEAR );
  759.     }
  760. }
  761.  
  762. function LoadSuf()
  763.     _Load( FALSE );
  764.  
  765. function Save()
  766.     _Save( TRUE );
  767.  
  768. function SaveSuf()
  769.     _Save( FALSE );
  770.  
  771. function Saveas()
  772.     _Saveas( TRUE );
  773.  
  774. function SaveasSuf()
  775.     _Saveas( FALSE );
  776.  
  777. function SaveAll()
  778.     _SaveAll( TRUE );
  779.  
  780. function SaveAllSuf()
  781.     _SaveAll( FALSE );
  782.  
  783. function SaveasAtr()
  784. {
  785.     var    temp, filename;
  786.  
  787.     temp = AttrFile( AttrCurrent());
  788.     filename = GetFile( "データセーブ", temp, "atr" );
  789.     if( typeof( filename ) == BOOLEAN )
  790.         return;
  791.     _SaveAtrforExpert( temp, filename );
  792. }
  793.  
  794. function SaveAtr()
  795. {
  796.     var    temp;
  797.     temp = AttrFile( AttrCurrent() );
  798.     if( temp == "" )
  799.     {
  800.         Warning();
  801.         Message( "ファイル名が設定されていないので、\n"+
  802.              "セーブできませんでした。" );
  803.         return;
  804.     }
  805.     _SaveAtrforExpert( temp, temp );
  806. }
  807.  
  808. //
  809. //    ファイルメニュー
  810. //
  811. if( MACHINE == "WINDOWS" )
  812. {
  813.     if( EXPERT != TRUE )
  814.     {
  815.         MenuPosition(
  816.                 Menu( "ファイル(&F)",
  817.                 "新規作成(&N)         ",    NewData,
  818.                 "---------------------",    SEPARATE_MENU,
  819. //                "DOGA-L1のパーツを新規作成",    NewDataforGENIE,
  820. //                "---------------------",    SEPARATE_MENU,
  821.                 "開く...(&O)          ",    Load,
  822.                 "閉じる(&C)           ",    Close,
  823.                 "---------------------",    SEPARATE_MENU,
  824. //                "メカデザインデータを開く...",    LoadMecha,
  825. //                "---------------------",    SEPARATE_MENU,
  826.                 "上書き保存           ",    Save,
  827.                 "名前を付けて保存...(&A)",    Saveas,
  828.                 "すべて保存(&S)       ",    SaveAll,
  829.                 "---------------------",    SEPARATE_MENU,
  830. //                "DOGA-L1のパーツを登録...",    InstallParts,
  831. //                "---------------------",    SEPARATE_MENU,
  832.                 "終了(&X)            ",    QuitModel
  833.             ), Menu_file
  834.         );
  835.     }
  836.     else
  837.     {
  838.         MenuPosition(
  839.             Menu( "ファイル(&F)",
  840.                 "新規作成(&N)           ",    NewData,
  841.                 "-----------------------",    SEPARATE_MENU,
  842. //                "DOGA-L1のパーツを新規作成",    NewDataforGENIE,
  843. //                "---------------------",    SEPARATE_MENU,
  844.                 "オブジェクトを開く...(&O)  ",    LoadSuf,
  845.                 "オブジェクトを閉じる(&C)   ",    Close,
  846.                 "-----------------------",    SEPARATE_MENU,
  847. //                "メカデザインデータを開く...  ",    LoadMecha,
  848. //                "-----------------------",    SEPARATE_MENU,
  849.                 "アトリビュートを開く...      ",    LoadAtr,MENU_ENABLE,
  850.                 "-----------------------",    SEPARATE_MENU,
  851.                 "オブジェクトを保存     ",    SaveSuf,MENU_ENABLE,
  852.                 "オブジェクトを別名で保存...(&A)",    SaveasSuf,MENU_ENABLE,
  853.                 "オブジェクトを全て保存(&S) ",    SaveAllSuf,MENU_ENABLE,
  854.                 "-----------------------",    SEPARATE_MENU,
  855.                 "アトリビュートを保存         ",    SaveAtr,MENU_ENABLE,
  856.                 "アトリビュートを別名で保存...",    SaveasAtr,MENU_ENABLE,
  857. //                "アトリビュートを全て保存     ",    SaveAllAtr,MENU_ENABLE,
  858.                 "-----------------------",    SEPARATE_MENU,
  859. //                "DOGA-L1のパーツを登録... ",    InstallParts,
  860. //                "-----------------------",    SEPARATE_MENU,
  861.                 "終了(&X)             ",    QuitModel
  862.             ), Menu_file
  863.         );
  864.     }
  865. }
  866. else
  867. {
  868.         MenuPosition(
  869.             Menu( "ファイル(&F)",
  870.                 "新規作成             ",    NewData,
  871.                 "-----------------------",    SEPARATE_MENU,
  872.                 "オブジェクトを開く...      ",    LoadSuf,
  873.                 "オブジェクトを閉じる       ",    Close,
  874.                 "-----------------------",    SEPARATE_MENU,
  875.                 "アトリビュートを開く...      ",    LoadAtr,MENU_ENABLE,
  876.                 "-----------------------",    SEPARATE_MENU,
  877.                 "オブジェクトを保存     ",    SaveSuf,MENU_ENABLE,
  878.                 "オブジェクトを別名で保存...",    SaveasSuf,MENU_ENABLE,
  879.                 "オブジェクトを全て保存     ",    SaveAllSuf,MENU_ENABLE,
  880.                 "-----------------------",    SEPARATE_MENU,
  881.                 "アトリビュートを保存         ",    SaveAtr,MENU_ENABLE,
  882.                 "アトリビュートを別名で保存...",    SaveasAtr,MENU_ENABLE,
  883. //                "アトリビュートを全て保存     ",    SaveAllAtr,MENU_ENABLE,
  884.                 "-----------------------",    SEPARATE_MENU,
  885.                 "子プロセス            ",    Shell,
  886.                 "-----------------------",    SEPARATE_MENU,
  887.                 "終了                 ",    QuitModel
  888.             ), Menu_file
  889.         );
  890. }
  891. filefunc[filefuncs][FILEFUNC_EXT] = "SUF";
  892. filefunc[filefuncs][FILEFUNC_LOAD] = _LoadSufFile;
  893. filefunc[filefuncs][FILEFUNC_SAVE] = _SaveSufFile;
  894. filefunc[filefuncs][FILEFUNC_COMMENT] = "形状ファイル(*.SUF)";
  895. filefuncs++;
  896.  
  897.