# Projects and the file that runs A project is a platform plus the program to build for it. This page explains how 8bitworkshop decides which file runs, and where it saves your choices. ## What makes a project A folder becomes an 8bitworkshop project in one of these ways: - **New Project** or **Copy to Workspace** creates it. - You choose **Set as Main File** on a file, or run a file that has no project yet, and confirm its platform. - You accept a detected platform when you open a folder. See [Platform detection](detection.md). - The folder's README has the link the 8bitworkshop website adds when it pushes a project to GitHub. 8bitworkshop uses that link without asking. Files outside a project behave exactly as they would without the extension. ## The main file and the file that runs The **main file** is the project's program. **Build** and **Run** build it even when you're editing another file, such as a header or a file it links. That way, pressing **Run** in `sprites.c` still runs your game. The status bar shows the platform and the file that runs, such as **NES · game.c**. Click it for the project menu. ### Run a different file To run another program in the same folder, such as a test program: 1. Open it. 2. Choose **Run This File** from the **...** menu at the top right of the editor. It keeps running that file. When you save a file it uses, it rebuilds and restarts it. The status bar shows its name. To go back, click the status bar and choose **Run Main File**. **Run This File** doesn't change any settings. VS Code remembers the choice for you on this computer. ### Follow the active editor Choose **Follow Active Editor** from the project menu to run whichever program you're looking at. Headers, and files another program includes or links, don't count. The status bar adds **(active file)**. ### A folder of small programs Some folders hold many separate programs, such as a set of exercises. A project with no main file runs the program in the active editor. To set this up, choose **Change Main File** from the project menu, then choose **(none: run whichever program is open)**. ## Change the main file Right-click a file and choose **8bitworkshop: Set as Main File**. If the folder already has a project, you choose one of these: - **Make game2.c the main file**: Build and Run use it from now on. - **Run each program in this folder on its own**: the folder becomes a folder of small programs. - **Start a second project in levels**: when the file is in a subfolder, that subfolder gets its own project. Or click the status bar and choose **Change Main File...**. ## Keep a list of programs to run To switch between programs with F5: 1. Run the program with **Run This File**. 2. Click the status bar and choose **Add Launch Configuration**. The program appears in the **Run and Debug** view's list. Choose it there and press F5 to build and debug it. A launch configuration can also name another platform, so one program can run on `c64` and `vic20`: ```json { "type": "8bitworkshop", "request": "launch", "name": "Run game.c (VIC-20)", "mainFile": "game.c", "platform": "vic20" } ``` F5 builds and debugs the program; Ctrl+F5 runs it without the debugger. See [Debug](emulator.md#debug). ## Where your choices are saved | Choice | Saved in | |---|---| | Platform, main file, build tool | `.vscode/settings.json` | | Projects in subfolders | `.vscode/settings.json`, under `8bitworkshop.folders` | | Run This File, Follow Active Editor | VS Code, on this computer only | | Launch configurations | `.vscode/launch.json` | Commit `.vscode/settings.json` to pin an ambiguous answer or a folder with several projects; detection normally fills these in from your README and source. Your own settings — `autoBuild`, `reloadOnBuild`, `toolchainPath` — stay in your user settings and aren't committed. A file opened with no folder has nowhere to save, so its platform lasts until you close the window. Choose **Open Containing Folder** in the notification to keep it. ## Settings JSON For example, a repo with a game at the top and a C64 port in a subfolder: ```json { "8bitworkshop.platform": "nes", "8bitworkshop.mainFile": "src/game.c", "8bitworkshop.folders": { "ports/c64": { "platform": "c64", "mainFile": "game.c" } } } ```