3
3
using System ;
4
4
using System . Collections . Generic ;
5
5
using System . ComponentModel ;
6
+ using System . Drawing ;
6
7
using System . IO ;
7
8
using System . Linq ;
8
9
using System . Threading . Tasks ;
9
10
using Ancient . ProjectSystem ;
11
+ using ancient . runtime ;
10
12
using cli ;
11
13
using etc ;
12
14
using Internal ;
@@ -41,36 +43,46 @@ public async Task<int> Execute(bool isTemp)
41
43
42
44
43
45
var acc_bin = Dirs . Bin . ACC . FullName ;
44
-
45
-
46
- var argBuilder = new List < string > ( ) ;
47
-
48
46
var files = Directory . GetFiles ( directory , "*.asm" ) ;
49
47
50
48
if ( ! files . Any ( ) )
51
49
return await Fail ( $ "'*.asm' sources code in '{ directory } ' for compile not found.") ;
52
50
51
+ if ( ! files . Any ( x => x . Contains ( "entry" ) ) )
52
+ Console . WriteLine ( $ "{ ":warning:" . Emoji ( ) } { "'entry.asm' file not found, maybe VM cannot start executing files." . Color ( Color . Orange ) } ") ;
53
+
54
+ try
55
+ {
56
+ foreach ( var file in files ) Compile ( file , isTemp ) ;
57
+ return await Success ( ) ;
58
+ }
59
+ catch ( Win32Exception e ) // AccessDenied on linux
60
+ {
61
+ Console . WriteLine ( $ "{ ":x:" . Emoji ( ) } { e . Message } ") ;
62
+ return await Fail ( $ "Run [chmod +x \" { acc_bin } \" ] for resolve this problem.") ;
63
+ }
64
+ }
65
+
66
+ private void Compile ( string file , bool isTemp )
67
+ {
68
+ var directory = Directory . GetCurrentDirectory ( ) ;
69
+ var acc_bin = Dirs . Bin . ACC . FullName ;
70
+ var argBuilder = new List < string > ( ) ;
53
71
var outputDir = "bin" ;
54
72
55
73
if ( isTemp )
56
74
outputDir = "obj" ;
57
75
var Project = AncientProject . FromLocal ( ) ;
58
- argBuilder . Add ( $ "-o ./{ outputDir } /{ Project . Name } ") ;
76
+ var fileName = Path . GetFileNameWithoutExtension ( file ) ;
77
+ argBuilder . Add ( $ "-o ./{ outputDir } /{ fileName } ") ;
59
78
if ( Project . Extension != null )
60
79
argBuilder . Add ( $ "-e { Project . Extension } ") ;
61
- argBuilder . Add ( $ "-s \" { files . First ( ) } \" ") ;
80
+ argBuilder . Add ( $ "-s \" { file } \" ") ;
62
81
63
82
var external = new ExternalTools ( acc_bin , string . Join ( " " , argBuilder ) ) ;
64
83
Directory . CreateDirectory ( Path . Combine ( directory , outputDir ) ) ;
65
- try
66
- {
67
- return external . Start ( ) . Wait ( ) . ExitCode ( ) ;
68
- }
69
- catch ( Win32Exception e ) // AccessDenied on linux
70
- {
71
- Console . WriteLine ( $ "{ ":x:" . Emoji ( ) } { e . Message } ") ;
72
- return await Fail ( $ "Run [chmod +x \" { acc_bin } \" ] for resolve this problem.") ;
73
- }
84
+ external . Start ( ) . Wait ( ) . ExitCode ( ) ;
85
+
74
86
}
75
87
}
76
88
}
0 commit comments