📄 main.cpp
字号:
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ +
+ main.cpp - this is the boot-strap file +
+ +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ ANSI includes +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ virtual machine includes +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
#ifdef WINDOWS_32
#include<win32.c>
#endif
#ifdef LINUX_x86
#include<linux.c>
#endif
#include<iset.c>
#include<exenv.c>
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ prototypes +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void main(int argc, char *argv[]);
void shutDown(U1 code);
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ assembler components +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
#include<common.c>
#include<error.c>
#include<cmdline.cpp>
#include<lnscan.cpp>
#include<strtbl.cpp>
#include<globvar.cpp>
#include<sframe.cpp>
#include<label.cpp>
#include<proc.cpp>
#include<symtbl.cpp>
#include<hashtbl.cpp>
#include<linetok.cpp>
#include<pass1.cpp>
#include<pass2.cpp>
#include<bldfile.cpp>
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ macros +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
/*#define MAIN_DEBUG 1*/
#ifdef MAIN_DEBUG
#define MAIN_DEBUG0(arg); printf("main(): ");printf(arg);
#define MAIN_DEBUG1(arg1,arg2); printf("main(): ");printf(arg1,arg2);
#define MAIN_DEBUG2(arg1,arg2,arg3); printf("main(): ");printf(arg1,arg2,arg3);
#else
#define MAIN_DEBUG0(arg);
#define MAIN_DEBUG1(arg1,arg2);
#define MAIN_DEBUG2(arg1,arg2,arg3);
#endif
/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ function definitions +
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/
void main(int argc, char *argv[])
{
CommandLine cmdLine(&maxErrors);
nErrors = 0;
/*1) handle command line arguments */
MAIN_DEBUG0("handling arguments\n");
if((cmdLine.handleArgs(argc,argv))==FALSE)
{
FATAL_ERROR();
}
/*2) PASS1 - scan, parse, populate symbol table*/
MAIN_DEBUG0("initiating first pass\n");
StringTable strTbl;
HashTable hashTbl(&strTbl);
SymbolTable symTbl(&strTbl);
struct Line line;
{
Pass1 pass1(&strTbl,&symTbl,&hashTbl);
LineScanner scanner(&cmdLine);
line = scanner.getInputLine();
while(line.end!=TRUE)
{
pass1.parseLine(&line);
line = scanner.getInputLine();
}
pass1.parseLine(&line);
}
/*
strTbl.printStrTbl();
symTbl.printSymTbl();
hashTbl.printHashTbl();
*/
/*if errors exist, shutdown before generate anything*/
if(nErrors > 0)
{
printf("%d Error(s) during first pass\n",nErrors);
printf("build failed\n");
FATAL_ERROR();
}
/*3) PASS2 - create bytecode temp file and listing file */
MAIN_DEBUG0("initiating second pass\n");
{
Pass2 pass2(&cmdLine,&strTbl,&symTbl,&hashTbl);
LineScanner scanner(&cmdLine);
line = scanner.getInputLine();
while(line.end!=TRUE)
{
pass2.parseLine(&line);
line = scanner.getInputLine();
}
pass2.parseLine(&line);
if(cmdLine.listing==TRUE){ pass2.generateSymbolSummary(); }
}
MAIN_DEBUG1("%lu bytes written to tempfile\n",pass2.bytePosPass2);
/*if errors exist after 2rd pass, shutdown */
if(nErrors > 0)
{
printf("main(): %d Error(s) during second pass\n",nErrors);
printf("main(): build failed\n");
FATAL_ERROR();
}
/*4) build compilation unit */
MAIN_DEBUG0("building bytecode executable\n");
{
BuildFile bldfile(&cmdLine,&strTbl, &symTbl);
bldfile.buildFileFormat();
}
/*5) safe-shutdown */
printf("main(): exiting with (%d) errors\n",nErrors);
shutDown(SHUTDOWN_OK);
return;
}/*end main*/
/* ----------------------------------------------------------------*/
void shutDown(U1 code)
{
exit(code);
}/*end shutDown*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -