Compare commits
	
		
			5 Commits
		
	
	
		
			develop
			...
			1db74f791a
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 1db74f791a | |||
| 372fda3afc | |||
| 749ffe6d73 | |||
| 76b399f3b5 | |||
| 83f7ebb223 | 
							
								
								
									
										65
									
								
								.drone.yml
									
									
									
									
									
								
							
							
						
						
									
										65
									
								
								.drone.yml
									
									
									
									
									
								
							| @@ -1,65 +0,0 @@ | ||||
| kind: pipeline | ||||
| type: docker | ||||
| name: build | ||||
|  | ||||
| steps: | ||||
|   - name: build-image | ||||
|     image: plugins/docker | ||||
|     settings: | ||||
|       repo: t3hn3rd/asuro-build | ||||
|       tags: latest | ||||
|       dockerfile: Dockerfile | ||||
|       registry: docker.io | ||||
|       username: | ||||
|         from_secret: docker_username | ||||
|       password: | ||||
|         from_secret: docker_password | ||||
|  | ||||
|   - name: compile | ||||
|     image: t3hn3rd/asuro-build:latest | ||||
|     depends_on: | ||||
|       - build-image | ||||
|     commands: | ||||
|       - git fetch --tags | ||||
|       - find . -type f -print0 | xargs -0 dos2unix | ||||
|       - chmod +x /drone/src/*.sh | ||||
|       - /drone/src/compile.sh | ||||
|        | ||||
|   - name: upload-iso-artifact | ||||
|     image: alpine/git | ||||
|     depends_on: | ||||
|       - compile | ||||
|     when: | ||||
|       branch: | ||||
|         - master | ||||
|     environment: | ||||
|       GITEA_TOKEN: | ||||
|         from_secret: gitea_token | ||||
|     commands: | ||||
|       - apk add --no-cache curl | ||||
|       - chmod +w Asuro.iso | ||||
|       - cp Asuro.iso "Asuro-$(git rev-parse --short HEAD).iso" | ||||
|       - echo "Uploading Asuro-$(git rev-parse --short HEAD).iso to Gitea Packages..." | ||||
|       - | | ||||
|          curl -X PUT "https://gitea.spexeah.com/api/packages/Spexeah/generic/asuro-iso/$(git rev-parse --short HEAD)/Asuro.iso" \ | ||||
|          -H "Authorization: token $GITEA_TOKEN" --upload-file "Asuro-$(git rev-parse --short HEAD).iso" | ||||
|       - echo "Updating latest ISO reference..." | ||||
|       - | | ||||
|         curl -X DELETE https://gitea.spexeah.com/api/packages/Spexeah/generic/asuro-iso/latest/Asuro.iso \ | ||||
|         -H "Authorization: token $GITEA_TOKEN" || echo "No previous latest version found." | ||||
|       - | | ||||
|         curl -X PUT https://gitea.spexeah.com/api/packages/Spexeah/generic/asuro-iso/latest/Asuro.iso \ | ||||
|         -H "Authorization: token $GITEA_TOKEN" --upload-file "Asuro-$(git rev-parse --short HEAD).iso" | ||||
|  | ||||
|   - name: msg status | ||||
|     image: appleboy/drone-discord | ||||
|     depends_on: | ||||
|       - compile | ||||
|     when: | ||||
|       status: [success, failure, changed] | ||||
|     settings: | ||||
|       webhook_id: | ||||
|         from_secret: discord_webhook_id | ||||
|       webhook_token: | ||||
|         from_secret: discord_webhook_secret | ||||
|       message: "**Asuro Build**\n\n{{#success build.status}}✅ Build successful!\n\n{{else}}❌ Build failed!\n\n{{/success}}Repository: `{{repo.namespace}}/{{repo.name}}`\nBranch: `{{commit.branch}}`\nCommit: `{{commit.sha}}`\nAuthor: `{{commit.author}} <{{commit.email}}>`\n\nGitea Diff: [Link](<{{commit.link}}>)\nDrone Build: [Link](<{{build.link}}>)\n\nMessage: {{commit.message}}" | ||||
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @@ -10,4 +10,5 @@ | ||||
| /*.sh~ | ||||
| /*.img | ||||
| src/include/asuro.pas | ||||
| localenv.json | ||||
| .vscode/launch.json | ||||
| .vscode | ||||
|   | ||||
							
								
								
									
										73
									
								
								.gitlab-ci.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								.gitlab-ci.yml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,73 @@ | ||||
| stages: | ||||
|   - Compile Versions | ||||
|   - Compile Sources | ||||
|   - Link | ||||
|   - Generate Documentation | ||||
|   - Deploy | ||||
|  | ||||
| cache: | ||||
|   - key: ${CI_COMMIT_REF_SLUG} | ||||
|     paths: | ||||
|       - lib/*.o | ||||
|       - bin/kernel.bin | ||||
|       - doc | ||||
|  | ||||
| before_script: | ||||
|   - chmod +x *.sh | ||||
|  | ||||
| versions: | ||||
|   stage: Compile Versions | ||||
|   script: | ||||
|     - ./compile_vergen.sh | ||||
|   artifacts: | ||||
|     paths: | ||||
|       - release/*.svg | ||||
|       - src/include/asuro.pas | ||||
|  | ||||
| compile_sources: | ||||
|   stage: Compile Sources | ||||
|   script: | ||||
|     - rm -f lib/*.so | ||||
|     - ./compile_sources.sh | ||||
|   needs: | ||||
|     - versions | ||||
|  | ||||
| link: | ||||
|   stage: Link | ||||
|   script: | ||||
|     - ./compile_stub.sh | ||||
|     - ./compile_link.sh | ||||
|   needs: | ||||
|     - versions | ||||
|     - compile_sources | ||||
|  | ||||
| isogen: | ||||
|   stage: Deploy | ||||
|   script: | ||||
|     - ./compile_isogen.sh | ||||
|     - ./compile_sumgen.sh | ||||
|   artifacts: | ||||
|     paths: | ||||
|       - ./Asuro.iso | ||||
|       - ./release/checksum.svg | ||||
|   needs: | ||||
|     - link | ||||
|  | ||||
| docgen: | ||||
|   stage: Generate Documentation | ||||
|   only: | ||||
|     - master | ||||
|     - develop | ||||
|   script: | ||||
|     - ./compile_sourcelist.sh | ||||
|     - ./compile_docs.sh | ||||
|     # Remove comments when we want to use gitlab pages. | ||||
|     #- cp doc public | ||||
|   allow_failure: true | ||||
|   artifacts: | ||||
|     paths: | ||||
|       - doc | ||||
|       #- public/* | ||||
|       #- ./sources.list | ||||
|   needs: | ||||
|     - versions | ||||
							
								
								
									
										13
									
								
								.mailmap
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								.mailmap
									
									
									
									
									
								
							| @@ -1,13 +0,0 @@ | ||||
| # Map all Aaron identities to a single preferred identity | ||||
| Aaron Hance <ah@aaronhance.me> aaron <aaron@6dbc8c32-bb84-406f-8558-d1cf31a0ab0c> | ||||
| Aaron Hance <ah@aaronhance.me> aaronhance <ah@aaronhance.me> | ||||
| Aaron Hance <ah@aaronhance.me> aaron hance <ah@aaronhance.me> | ||||
| Aaron Hance <ah@aaronhance.me> Aaron <ah@aaronhance.me> | ||||
|  | ||||
| # Map all Kieron identities to a single preferred identity | ||||
| Kieron Morris <kjm@kieronmorris.me> kieron <kieron@6dbc8c32-bb84-406f-8558-d1cf31a0ab0c> | ||||
| Kieron Morris <kjm@kieronmorris.me> Kieron <kjm@kieronmorris.me> | ||||
| Kieron Morris <kjm@kieronmorris.me> t3hn3rd <kjm@kieronmorris.me> | ||||
|  | ||||
| # Map goose's multiple identities | ||||
| goose <goose@6dbc8c32-bb84-406f-8558-d1cf31a0ab0c> goose <angus@actm.uk> | ||||
							
								
								
									
										13
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										13
									
								
								.vscode/launch.json
									
									
									
									
										vendored
									
									
								
							| @@ -3,11 +3,18 @@ | ||||
|         { | ||||
|             "name":"Run", | ||||
|             "request": "launch", | ||||
|             "type": "PowerShell", | ||||
|             "type": "coreclr", | ||||
|             "preLaunchTask": "Build", | ||||
|             "script": "${workspaceFolder}/virtualbox-wrapper.ps1", | ||||
|             "args": ["-Command", "up"], | ||||
|             "program": "VBoxSDL", | ||||
|             "args": [ | ||||
|                 "--comment",  | ||||
|                 "Asuro",  | ||||
|                 "--startvm",  | ||||
|                 "7d395c96-891c-4139-b77d-9b6b144b0b93" | ||||
|             ], | ||||
|             "cwd": "${workspaceFolder}", | ||||
|             "console": "internalConsole", | ||||
|             "internalConsoleOptions": "neverOpen" | ||||
|         } | ||||
|     ] | ||||
| } | ||||
							
								
								
									
										26
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										26
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							| @@ -9,18 +9,14 @@ | ||||
|             "command": "docker-compose", | ||||
|             "args": [ | ||||
|                 "run", | ||||
|                 "builder", | ||||
|                 "builder" | ||||
|             ], | ||||
|             "type": "shell", | ||||
|             "problemMatcher": [], | ||||
|             "group": { | ||||
|                 "kind": "build", | ||||
|                 "isDefault": true | ||||
|             }, | ||||
|             "dependsOn": [ | ||||
|                 "Close VirtualBox", | ||||
|                 "Clean" | ||||
|             ] | ||||
|             } | ||||
|         }, | ||||
|         { | ||||
|             "label": "Build (Builder)", | ||||
| @@ -30,24 +26,6 @@ | ||||
|                 "builder" | ||||
|             ], | ||||
|             "type": "shell" | ||||
|         }, | ||||
|         { | ||||
|             "label": "Clean", | ||||
|             "command": "docker-compose", | ||||
|             "args": [ | ||||
|                 "down", | ||||
|                 "--remove-orphans" | ||||
|             ], | ||||
|             "type": "shell" | ||||
|         }, | ||||
|         { | ||||
|             "label": "Close VirtualBox", | ||||
|             "command": "./virtualbox-wrapper.ps1", | ||||
|             "args": [ | ||||
|                 "-Command",  | ||||
|                 "down" | ||||
|             ], | ||||
|             "type": "shell" | ||||
|         } | ||||
|     ] | ||||
| } | ||||
| @@ -16,7 +16,7 @@ RUN curl -sL https://sourceforge.net/projects/freepascal/files/Linux/$FPC_VERSIO | ||||
|  | ||||
| COPY compile.sh /compile.sh | ||||
| ADD https://raw.githubusercontent.com/fsaintjacques/semver-tool/master/src/semver /usr/bin/semver | ||||
| RUN chmod +x /usr/bin/semver | ||||
| RUN mkdir /code && chmod +x /usr/bin/semver | ||||
| WORKDIR /code | ||||
| RUN find . -type f -print0 | xargs -0 dos2unix | ||||
| ENTRYPOINT ["/bin/bash", "-c"] | ||||
|   | ||||
							
								
								
									
										32
									
								
								compile.sh
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								compile.sh
									
									
									
									
									
								
							| @@ -20,30 +20,26 @@ runOrFail() { | ||||
| 	fi | ||||
| } | ||||
|  | ||||
| declare -a run_steps=( | ||||
| 	"compile_stub.sh" "Failed to compile stub!" | ||||
| 	"compile_vergen.sh" "Versions failed to compile" | ||||
| 	"compile_sources.sh" "Failed to compile FPC Sources!" | ||||
| 	"compile_link.sh" "Failed linking!" | ||||
| 	"compile_isogen.sh" "Failed to create ISO!" | ||||
| ) | ||||
| runOrFail $(pwd)/compile_stub.sh "Failed to compile stub!" | ||||
|  | ||||
| for ((i=0; i<${#run_steps[@]}; i+=2)) | ||||
| do | ||||
| 	if [ "$ERRCOUNT" -eq "0" ] | ||||
| 	then | ||||
| 			script=$(pwd)/"${run_steps[$i]}" | ||||
| 			message="${run_steps[$i+1]}" | ||||
| 			runOrFail "$script" "$message" | ||||
| 	fi | ||||
| done | ||||
| #Generate .pas with versioning headers. | ||||
| runOrFail $(pwd)/compile_vergen.sh "Versions failed to compile" | ||||
|  | ||||
| #Compile all .pas sources | ||||
| runOrFail $(pwd)/compile_sources.sh "Failed to compile FPC Sources!" | ||||
|  | ||||
| #Link into a binary. | ||||
| runOrFail $(pwd)/compile_link.sh "Failed linking!" | ||||
|  | ||||
| #Generate an ISO with GRUB as the Bootloader. | ||||
| runOrFail ./compile_isogen.sh "Failed to create ISO!" | ||||
|  | ||||
| #Call generate final artifacts based on failure or success of the above. | ||||
| if [ "$ERRCOUNT" -ne "0" ] | ||||
| then | ||||
| 	. ./compile_finish.sh "failed" | ||||
| 	./compile_finish.sh "failed" | ||||
| else | ||||
| 	. ./compile_finish.sh "success" | ||||
| 	./compile_finish.sh "success" | ||||
| fi | ||||
|  | ||||
| cd .. | ||||
| @@ -4,4 +4,4 @@ echo "=======================" | ||||
| echo " " | ||||
| echo "Compiling FPC Sources..." | ||||
| echo " " | ||||
| fpc -Aelf -gw -g -gl -n -vlewn -O3 -Op3 -Si -Sc -Sg -Xd -CX -XXs -CfSSE -CfSSE2 -Rintel -Pi386 -Tlinux -FElib/ -Fusrc/* -Fusrc/driver/* -Fusrc/driver/net/* src/kernel.pas | ||||
| fpc -Aelf -gw -n -va -O3 -Op3 -Si -Sc -Sg -Xd -CX -XXs -CfSSE -CfSSE2 -Rintel -Pi386 -Tlinux -FElib/ -Fusrc/* -Fusrc/driver/* -Fusrc/driver/net/* src/kernel.pas | ||||
| @@ -1,3 +1,4 @@ | ||||
| version: "3.9" | ||||
| services: | ||||
|   builder: | ||||
|     build: . | ||||
|   | ||||
| @@ -2,7 +2,7 @@ ENTRY(loader) | ||||
| SECTIONS | ||||
| { | ||||
|   . = 0xC0100000; | ||||
|   kernel_start = .; | ||||
|  | ||||
|   .text : AT(ADDR(.text) - 0xC0000000) | ||||
|   { | ||||
|     text = .; _text = .; __text = .; | ||||
| @@ -33,5 +33,4 @@ SECTIONS | ||||
|     . = ALIGN(4096); | ||||
|   } | ||||
|   end = .; _end = .; __end = .; | ||||
|   kernel_end = .; | ||||
| } | ||||
|   | ||||
							
								
								
									
										49
									
								
								readme.md
									
									
									
									
									
								
							
							
						
						
									
										49
									
								
								readme.md
									
									
									
									
									
								
							| @@ -13,8 +13,8 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f | ||||
|     I don't think this needs an explaination. | ||||
| * [VSCode (Optional, but highly recommended)](https://code.visualstudio.com/) | ||||
|     Visual Studio code is our IDE of choice, and we have a number of recommended plugins. | ||||
|     * [PowerShell Plugin by Microsoft](https://marketplace.visualstudio.com/items?itemName=ms-vscode.powershell) | ||||
|         This plugin gives you the ability to use the 'PowerShell' task type, allowing the automatic launching of virtualbox with the resulting image generated during compilation of Asuro. | ||||
|     * [C# Plugin by Microsoft](https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.csharp) | ||||
|         This plugin gives you the ability to use the 'coreclr' task type, allowing the automatic launching of virtualbox with the resulting image generated during compilation of Asuro. | ||||
| * [VirtualBox](https://www.virtualbox.org/) | ||||
|     Virtualbox is our Virtualisation environment of choice, don't ask why, it just is. | ||||
|  | ||||
| @@ -27,15 +27,15 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f | ||||
| 3. Install Docker for Windows. | ||||
| 4. Install Git for Windows. | ||||
| 5. Install VSCode & the listed plugins. | ||||
| 6. Install VirtualBox (v7+). | ||||
| 6. Install VirtualBox. | ||||
| 7. Clone this repository. | ||||
| 8. Run the following command in the root of the repo to build the docker image: | ||||
|     ```powershell | ||||
|     docker compose build builder | ||||
|     docker-compose build builder | ||||
|     ``` | ||||
| 9. Run the following command to compile Asuro: | ||||
|     ```powershell | ||||
|     docker compose run builder | ||||
|     docker-compose run builder | ||||
|     ``` | ||||
| 10. Create a new virtual machine in Virtualbox and mount the `Asuro.iso` generated in step 9 as a boot image. | ||||
| 11. Add the virtualbox installation directory to your `%PATH%` environment variable, usually: | ||||
| @@ -50,29 +50,32 @@ We welcome everyone to give building/breaking/fixing/shooting Asuro a go, feel f | ||||
|     ```xml | ||||
|     <Machine uuid="{7d395c96-891c-4139-b77d-9b6b144b0b93}" name="Asuro" OSType="Linux" snapshotFolder="Snapshots" lastStateChange="2021-06-20T20:33:07Z"> | ||||
|     ``` | ||||
|     Copy the uuid, in our case `7d395c96-891c-4139-b77d-9b6b144b0b93` & create a `localenv.json` file in the project root with the following content: | ||||
|     Copy the uuid, in our case `7d395c96-891c-4139-b77d-9b6b144b0b93` and replace the uuid found in `.vscode\launch.json` under `args`, so that it looks something like this: | ||||
|     ```json | ||||
|     { | ||||
|         "VirtualBox":{ | ||||
|             "MachineName":"<YOUR_UUID_OR_MACHINE_NAME>" | ||||
|         } | ||||
|         "configurations": [ | ||||
|             { | ||||
|                 "name":"Run", | ||||
|                 "request": "launch", | ||||
|                 "type": "coreclr", | ||||
|                 "preLaunchTask": "Build", | ||||
|                 "program": "VBoxSDL", | ||||
|                 "args": [ | ||||
|                     "--comment",  | ||||
|                     "Asuro",  | ||||
|                     "--startvm",  | ||||
|                     "<YOUR UUID HERE>" | ||||
|                 ], | ||||
|                 "cwd": "${workspaceFolder}", | ||||
|                 "console": "internalConsole", | ||||
|                 "internalConsoleOptions": "neverOpen" | ||||
|             } | ||||
|         ] | ||||
|     } | ||||
|     ``` | ||||
|     This will allow VSCode to automatically launch VirtualBox once Asuro has been compiled. | ||||
|      | ||||
|     You can also enable the serial adapter "COM1" in mode "Raw File", give it a path, and provide this path in the `localenv.json` as follows: | ||||
|     ```json | ||||
|     { | ||||
|         "VirtualBox" : { | ||||
|             "MachineName": "<YOUR_UUID_OR_MACHINE_NAME>", | ||||
|             "LogLocation": "Fully\\Qualified\\Path\\To\\Your\\Log\\File" | ||||
|         } | ||||
|     } | ||||
|     ``` | ||||
|     This will allow you to see the console output from Asuro in your host terminal. | ||||
| 13. Open your project folder in VSCode, use CTRL+SHIFT+B to build & F5 to build + run in VBox. | ||||
| 14. Congratulations! You can now play with Asuro! | ||||
|  | ||||
| ### Notes & Gotchas | ||||
| - The above process has been updated to be compatible with VirtualBox 7+, in which VBoxSDL was removed and vboxmanage should be used in its place. A small wrapper powershell script is used to achieve this. | ||||
| - It was noted that Windows builds above `20H2` seem to have issues installing WSL2. We may have to wait for a patch from Microsoft to fix this. Our devs are currently using build `20H2`. | ||||
| ### Gotchas | ||||
| - It was noted that Windows builds above `20H2` seem to have issues installing WSL2. We may have to wait for a patch from Microsoft to fix this. Our devs are currently using build `20H2`. | ||||
| @@ -491,26 +491,22 @@ begin | ||||
|          | ||||
|         { Create a new header to the use in our DHCP REQUEST packet } | ||||
|         SendHeader:= createHeader(); | ||||
|         CopyIPv4(@getIPv4Config^.Address[0], puint8(@SendHeader^.Client_IP[0])); | ||||
|         CopyIPv4(puint8(@Header^.Your_IP[0]), puint8(@SendHeader^.Client_IP[0])); | ||||
|         CopyIPv4(puint8(@Header^.Server_IP[0]), puint8(@SendHeader^.Server_IP[0])); | ||||
|         processHeader(SendHeader); | ||||
|  | ||||
|         { Setup Options } | ||||
|         SendOptions:= newOptions(); | ||||
|  | ||||
|         { Create a message type option and assign it the value REQUEST } | ||||
|         SendMsgType:= ord(TDHCPMessageType.REQUEST); | ||||
|         NewOption(SendOptions, TDHCPOpCode.DHCP_MESSAGE_TYPE, void(@SendMsgType), 1, false); | ||||
|  | ||||
|         { Create a Requested IP option and assign it the value from the OFFER packet header } | ||||
|         NewOption(SendOptions, TDHCPOpCode.REQUESTED_IP_ADDRESS, void(@Header^.Your_IP[0]), 4, false); | ||||
|  | ||||
|         NewOption(SendOptions, TDHCPOpCode.REQUESTED_IP_ADDRESS, void(@SendHeader^.Client_IP[0]), 4, false); | ||||
|         { Create a Server Identifier Option and assign it the value from the OFFER packet options } | ||||
|         Option:= getOptionByOpcode(Options, TDHCPOpCode.SERVER_IDENTIFIER); | ||||
|         if Option <> nil then begin | ||||
|             NewOption(SendOptions, TDHCPOpCode.SERVER_IDENTIFIER, void(@Option^.Value[0]), 4, false); | ||||
|         end; | ||||
|  | ||||
|         { Create a Parameter Request List, Request the following: Netmask, Gateway, DNS Name & DNS Server } | ||||
|         RequestParams[0]:= Ord(TDHCPOpCode.SUBNET_MASK); | ||||
|         RequestParams[1]:= Ord(TDHCPOpCode.ROUTER); | ||||
| @@ -526,13 +522,9 @@ begin | ||||
|         MAC:= getMAC(); | ||||
|         packetCtx:= PPacketContext(Kalloc(sizeof(TPacketContext))); | ||||
|         packetCtx^.TTL:= 128; | ||||
|  | ||||
|         { Copy over MAC - src: broadcast - dst: DHCP Server } | ||||
|         copyMAC(MAC, @packetCtx^.MAC.Source[0]); | ||||
|         copyMAC(@BROADCAST_MAC[0], @packetCtx^.MAC.Destination[0]); | ||||
|          | ||||
|         { Copy over IP - src: NULL - dst: Broadcast } | ||||
|         CopyIPv4(@getIPv4Config^.Address[0], @packetCtx^.IP.Source[0]); | ||||
|         copyMAC(MAC, @packetCtx^.MAC.Source[0]); | ||||
|         copyIPv4(@NULL_IP[0], @packetCtx^.IP.Source[0]); | ||||
|         copyIPv4(@BROADCAST_IP[0], @packetCtx^.IP.Destination[0]); | ||||
|  | ||||
|         { Setup UDPContext (UDP) & copy in the correct details } | ||||
| @@ -578,7 +570,7 @@ begin | ||||
|  | ||||
|     { Check the frame is for us and then process } | ||||
|     MAC:= getMAC; | ||||
|     if MACEqual(@context^.PacketContext^.MAC.Destination[0], MAC) or MACEqual(@context^.PacketContext^.MAC.Destination[0], BROADCAST_MAC) then begin | ||||
|     if MACEqual(@context^.PacketContext^.MAC.Destination[0], MAC) then begin | ||||
|         Outputln('DHCP','Frame is addressed to us.'); | ||||
|         { Check the message type is client specific } | ||||
|         If Header^.Message_Type = $02 then begin | ||||
| @@ -663,7 +655,7 @@ begin | ||||
|         copyMAC(@BROADCAST_MAC[0], @packetCtx^.MAC.Destination[0]); | ||||
|         MAC:= getMAC; | ||||
|         copyMAC(MAC, @packetCtx^.MAC.Source[0]); | ||||
|         CopyIPv4(@getIPv4Config^.Address[0], @packetCtx^.IP.Source[0]); | ||||
|         copyIPv4(@NULL_IP[0], @packetCtx^.IP.Source[0]); | ||||
|         copyIPv4(@BROADCAST_IP[0], @packetCtx^.IP.Destination[0]); | ||||
|  | ||||
|         { Setup UDPContext (UDP) } | ||||
|   | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -16,7 +16,6 @@ | ||||
| 	Include->Strings - String Manipulation. | ||||
| 	 | ||||
| 	@author(Kieron Morris <kjm@kieronmorris.me>) | ||||
|     @author(Aaron Hance <ah@aaronhance.me>) | ||||
| } | ||||
| unit strings; | ||||
|  | ||||
| @@ -34,10 +33,6 @@ function stringCopy(str : pchar) : pchar; | ||||
| function stringNew(size : uint32) : pchar; | ||||
| function stringSize(str : pchar) : uint32; | ||||
| function stringConcat(str1, str2 : pchar) : pchar; | ||||
| function stringTrim(str : pchar; length : uint32) : pchar; | ||||
| function stringSub(str : pchar; start, size : uint32) : pchar; | ||||
| function stringReplace(str, find, replace : pchar) : pchar; | ||||
| function stringIndexOf(str, find : pchar) : sint32; | ||||
| function stringContains(str : pchar; sub : pchar) : boolean; | ||||
| function stringToInt(str : pchar) : uint32; | ||||
| function hexStringToInt(str : pchar) : uint32; | ||||
| @@ -156,94 +151,6 @@ begin | ||||
|     stringConcat:= result; | ||||
| end; | ||||
|  | ||||
| // Trim the string to the specified length. | ||||
| function stringTrim(str : pchar; length : uInt32) : pchar; | ||||
| var | ||||
|     result : pchar; | ||||
| begin | ||||
|     result:= stringNew(length); | ||||
|     memcpy(uint32(str), uint32(result), length); | ||||
|     stringTrim:= result; | ||||
| end; | ||||
|  | ||||
| // Return a substring of the string. | ||||
| function stringSub(str : pchar; start, size : uint32) : pchar; | ||||
| var | ||||
|     result : pchar; | ||||
| begin | ||||
|     result:= stringNew(size); | ||||
|     memcpy(uint32(str)+start, uint32(result), size); | ||||
|     stringSub:= result; | ||||
| end; | ||||
|  | ||||
| // Replace first instance of a string with another. | ||||
| function stringReplace(str, find, replace : pchar) : pchar; | ||||
| var | ||||
|     result : pchar; | ||||
|     i, j, k : uint32; | ||||
|     found : boolean; | ||||
| begin | ||||
|  | ||||
|     // Find the first instance of the find string. | ||||
|     i:= 0; | ||||
|     found:= false; | ||||
|     while (i < stringSize(str)) and (not found) do begin | ||||
|         if stringEquals(str+i, find) then begin | ||||
|             found:= true; | ||||
|         end else begin | ||||
|             inc(i); | ||||
|         end; | ||||
|     end; | ||||
|  | ||||
|     // If we found the find string, replace it. | ||||
|     if found then begin | ||||
|         result:= stringNew(stringSize(str) - stringSize(find) + stringSize(replace)); | ||||
|         j:= 0; | ||||
|         k:= 0; | ||||
|         while i < stringSize(str) do begin | ||||
|             if stringEquals(str+i, find) then begin | ||||
|                 memcpy(uint32(replace), uint32(result+j), stringSize(replace)); | ||||
|                 j:= j + stringSize(replace); | ||||
|                 inc(i, stringSize(find)); | ||||
|             end else begin | ||||
|                 result[j]:= str[i]; | ||||
|                 inc(j); | ||||
|                 inc(i); | ||||
|             end; | ||||
|         end; | ||||
|         stringReplace:= result; | ||||
|     end else begin | ||||
|         stringReplace:= stringCopy(str); | ||||
|     end; | ||||
|  | ||||
|     // Return the result. | ||||
|     stringReplace:= result; | ||||
|  | ||||
| end; | ||||
|  | ||||
|  | ||||
| // Find the index of the first instance of a string. | ||||
| function stringIndexOf(str, find : pchar) : sint32; | ||||
| var  | ||||
|     i : uint32; | ||||
|     found : boolean; | ||||
| begin | ||||
|     i:= 0; | ||||
|     found:= false; | ||||
|     while (i < stringSize(str)) and (not found) do begin | ||||
|         if stringEquals(str+i, find) then begin | ||||
|             found:= true; | ||||
|         end else begin | ||||
|             inc(i); | ||||
|         end; | ||||
|     end; | ||||
|     if found then begin | ||||
|         stringIndexOf:= i; | ||||
|     end else begin | ||||
|         stringIndexOf:= -1; | ||||
|     end; | ||||
| end; | ||||
|  | ||||
| function stringContains(str : pchar; sub : pchar) : boolean; | ||||
| var | ||||
|     strEnd, subEnd, i, j, count : uint32; | ||||
|   | ||||
| @@ -143,22 +143,6 @@ type | ||||
|  | ||||
|     PText = ^Text; | ||||
|  | ||||
| var | ||||
|   AK_START : uint32; external name 'kernel_start'; | ||||
|   AK_END   : uint32; external name 'kernel_end'; | ||||
|   ASURO_KERNEL_START : uint32; | ||||
|   ASURO_KERNEL_END   : uint32; | ||||
|   ASURO_KERNEL_SIZE  : uint32; | ||||
|  | ||||
| procedure init(); | ||||
|  | ||||
| implementation | ||||
|  | ||||
| procedure init(); | ||||
| begin | ||||
|     ASURO_KERNEL_START := uint32(@AK_START); | ||||
|     ASURO_KERNEL_END := uint32(@AK_END); | ||||
|     ASURO_KERNEL_SIZE:= ASURO_KERNEL_END - ASURO_KERNEL_START; | ||||
| end; | ||||
|  | ||||
| end. | ||||
|   | ||||
| @@ -125,9 +125,6 @@ var | ||||
|    HM              : PHashMap; | ||||
|     | ||||
| begin | ||||
|      { Init the base system unit } | ||||
|      System.init(); | ||||
|  | ||||
|      { Serial Init } | ||||
|      serial.init(); | ||||
|  | ||||
|   | ||||
| @@ -1,59 +0,0 @@ | ||||
| <#  | ||||
| You need a local git-ignored localenv.json file with the following content: | ||||
| { | ||||
|   "virtualbox": { | ||||
|     "MachineName": "your-machine-name or guid" | ||||
|   } | ||||
| } | ||||
| #> | ||||
|  | ||||
| param ( | ||||
|   [Parameter(Mandatory=$true)] | ||||
|   [ValidateSet('up', 'down')] | ||||
|   [String]$Command | ||||
| ) | ||||
|  | ||||
| $Config = Get-Content .\localenv.json | ConvertFrom-Json | ||||
| $MachineName = $Config.virtualbox.MachineName | ||||
| $LogLocation = $Config.virtualbox.LogLocation | ||||
| $LogOutputEnabled = $LogLocation -ne $null | ||||
|  | ||||
| if ($Command -eq 'up') { | ||||
|  | ||||
|   if($LogOutputEnabled) { | ||||
|     Clear-Content $LogLocation | ||||
|   } | ||||
|  | ||||
|   $MonitorJob = Start-Job -ArgumentList $MachineName -ScriptBlock { | ||||
|     param($MachineName) | ||||
|     Write-Output "Starting $MachineName" | ||||
|     VBoxManage.exe startvm $MachineName | ||||
|     $running=$true | ||||
|     while($running) { | ||||
|       $status=(VBoxManage.exe list runningvms) | ||||
|       if($status) { | ||||
|         $running=$status.contains($MachineName) | ||||
|       } else { | ||||
|         $running=$false | ||||
|       } | ||||
|     } | ||||
|   } | ||||
|    | ||||
|   if($LogOutputEnabled) { | ||||
|     $LogJob = Start-Job -ArgumentList $LogLocation -ScriptBlock { | ||||
|       param($LogLocation) | ||||
|       Get-Content -Path $LogLocation -Wait | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   while($MonitorJob.State -eq 'Running') { | ||||
|     if($LogOutputEnabled) { | ||||
|       Receive-Job $LogJob | ||||
|     } | ||||
|     Receive-Job $MonitorJob | ||||
|   } | ||||
|   Get-Job | Stop-Job | Remove-Job -Force | ||||
| } elseif ($Command -eq 'down') { | ||||
|   Write-Output "Stopping $MachineName" | ||||
|   VBoxManage.exe controlvm $MachineName poweroff | ||||
| } | ||||
		Reference in New Issue
	
	Block a user