MODULE Logo
IMPLICIT NONE
CONTAINS
FUNCTION TestArea(x,y) result(Hit)
REAL :: x, y, ty, Angle, Radius
REAL :: Pi = 3.14159265358979
LOGICAL :: Hit
REAL :: RandomDummy
!CALL RANDOM_NUMBER(RandomDummy)
! WRITE(*,*) RandomDummy
Hit = .FALSE.
x = ABS(x)
Angle = ATAN(y/x) ! TODO <= juist hoek bepalen
Radius = SQRT(x*x+y*y)
IF (y >= 0. .AND. Radius > 0.8 .AND. Radius < 1.) THEN
!IF (Angle < 0.4 .AND. Radius > 0.8 .AND. Radius < 1.) THEN
Hit = .TRUE.
END IF
IF (y < 0. .AND. y > -.3 &
.AND. (x-(1.6*y+.3)) > 0.45 .AND. (x-(1.6*y+.3)) < 0.7) THEN
Hit = .TRUE.
END IF
IF (y <= -.3 &
.AND. y > -.55 &
.AND. (x-(.4*y+.3)+.3) > 0.45 &
.AND. (x-(.4*y+.3)+.3) < 0.7) THEN
Hit = .TRUE.
END IF
IF (x < .1) THEN
ty = y + .03 * COS(x)
ELSE
ty = y
END IF
IF (ty <= -.55 .AND. ty > -.7) THEN
IF (x < .5) THEN
Hit = .TRUE.
END IF
END IF
END FUNCTION TestArea
END MODULE Logo
MODULE RenderAscii
IMPLICIT NONE
CONTAINS
FUNCTION TestAreaByColumnRow(Column, Row) RESULT(Hit)
USE Logo, ONLY: TestArea
INTEGER, INTENT(IN) :: Column, Row
LOGICAL :: Hit
Hit = TestArea((Column-30) * (2./60), (20-Row) * (2./40))
END FUNCTION TestAreaByColumnRow
FUNCTION GetCharacterFromLogoAA(Column, Row) RESULT(Char)
INTEGER, INTENT(IN) :: Column, Row
CHARACTER(LEN=1) :: Char
INTEGER :: Neighbours
IF (TestAreaByColumnRow(Column, Row)) THEN
Neighbours = 0
IF (TestAreaByColumnRow(Column,Row-1)) THEN
Neighbours = Neighbours + 8 ! IBSET(Neighbours, 3)
END IF
IF (TestAreaByColumnRow(Column,Row+1)) THEN
Neighbours = Neighbours + 4 ! IBSET(Neighbours, 2)
END IF
IF (TestAreaByColumnRow(Column-1,Row)) THEN
Neighbours = Neighbours + 2 ! IBSET(Neighbours, 1)
END IF
IF (TestAreaByColumnRow(Column+1,Row)) THEN
Neighbours = Neighbours + 1 ! IBSET(Neighbours, 0)
END IF
! WRITE (*,*) Neighbours
SELECT CASE(Neighbours)
CASE(5)
Char = 'd'
CASE(6)
Char = 'b'
CASE(10)
Char = 'F'
CASE(9)
Char = 'Y'
CASE(4)
Char = ';'
CASE(8)
Char = 'V'
CASE(2)
Char = '>'
CASE(1)
Char = '<'
CASE(0)
Char = '@'
CASE DEFAULT
Char = 'x'
END SELECT
ELSE
Char = ' '
END IF
END FUNCTION GetCharacterFromLogoAA
END MODULE RenderAscii
PROGRAM RenderShellLogo
USE RenderAscii, ONLY: GetCharacterFromLogoAA
IMPLICIT NONE
INTEGER :: Column, Row
CHARACTER(LEN=60) :: RenderedRow
LOGICAL :: Hit
INTEGER :: Phase
DO Row=1,40
DO Column=1,60
RenderedRow(Column:Column) = GetCharacterFromLogoAA(Column,Row)
END DO
WRITE(*,*) RenderedRow
END DO
END PROGRAM RenderShellLogo
TU9EVUxFIExvZ28KICAgIElNUExJQ0lUIE5PTkUKQ09OVEFJTlMKICAgIAogICAgRlVOQ1RJT04gVGVzdEFyZWEoeCx5KSByZXN1bHQoSGl0KQogICAgCiAgICAgICAgUkVBTCAgICAgICAgICAgICAgICA6OiB4LCB5LCB0eSwgQW5nbGUsIFJhZGl1cwogICAgICAgIFJFQUwgICAgICAgICAgICAgICAgOjogUGkgPSAzLjE0MTU5MjY1MzU4OTc5CiAgICAgICAgTE9HSUNBTCAgICAgICAgICAgICA6OiBIaXQKICAgICAgICBSRUFMICAgICAgICAgICAgICAgIDo6IFJhbmRvbUR1bW15CiAgICAgICAgCiAgICAgICAgIUNBTEwgUkFORE9NX05VTUJFUihSYW5kb21EdW1teSkKICAgICAgICAhIFdSSVRFKCosKikgUmFuZG9tRHVtbXkKCiAgICAgICAgSGl0ID0gLkZBTFNFLgogICAgICAgIAogICAgICAgIHggPSBBQlMoeCkKICAgICAgICBBbmdsZSA9IEFUQU4oeS94KSAhIFRPRE8gPD0ganVpc3QgaG9layBiZXBhbGVuCiAgICAgICAgUmFkaXVzID0gU1FSVCh4KngreSp5KQoKICAgICAgICBJRiAoeSA+PSAwLiAuQU5ELiBSYWRpdXMgPiAwLjggLkFORC4gUmFkaXVzIDwgMS4pIFRIRU4KICAgICAgICAhSUYgKEFuZ2xlIDwgMC40IC5BTkQuIFJhZGl1cyA+IDAuOCAuQU5ELiBSYWRpdXMgPCAxLikgVEhFTgogICAgICAgICAgICBIaXQgPSAuVFJVRS4KICAgICAgICBFTkQgSUYKICAgICAgICAKICAgICAgICBJRiAoeSA8IDAuIC5BTkQuIHkgPiAtLjMgJgogICAgICAgICAgICAgICAgLkFORC4gKHgtKDEuNip5Ky4zKSkgPiAwLjQ1IC5BTkQuICh4LSgxLjYqeSsuMykpIDwgMC43KSBUSEVOCiAgICAgICAgICAgIEhpdCA9IC5UUlVFLgogICAgICAgIEVORCBJRgoKICAgICAgICBJRiAoeSA8PSAtLjMgJgogICAgICAgICAgICAuQU5ELiB5ID4gLS41NSAmCiAgICAgICAgICAgIC5BTkQuICh4LSguNCp5Ky4zKSsuMykgPiAwLjQ1ICYKICAgICAgICAgICAgLkFORC4gKHgtKC40KnkrLjMpKy4zKSA8IDAuNykgVEhFTgogICAgICAgICAgICBIaXQgPSAuVFJVRS4KICAgICAgICBFTkQgSUYKCiAgICAgICAgSUYgKHggPCAuMSkgVEhFTgogICAgICAgICAgICB0eSA9IHkgKyAuMDMgKiBDT1MoeCkKICAgICAgICBFTFNFCiAgICAgICAgICAgIHR5ID0geQogICAgICAgIEVORCBJRgogIAogICAgICAgIElGICh0eSA8PSAtLjU1IC5BTkQuIHR5ID4gLS43KSBUSEVOCiAgICAgICAgICAgIElGICh4IDwgLjUpIFRIRU4KICAgICAgICAgICAgICAgIEhpdCA9IC5UUlVFLgogICAgICAgICAgICBFTkQgSUYKICAgICAgICBFTkQgSUYKICAgICAgICAKICAgIAogICAgRU5EIEZVTkNUSU9OIFRlc3RBcmVhCiAgICAKRU5EIE1PRFVMRSBMb2dvCgpNT0RVTEUgUmVuZGVyQXNjaWkKICAgIElNUExJQ0lUIE5PTkUKQ09OVEFJTlMKICAgIEZVTkNUSU9OIFRlc3RBcmVhQnlDb2x1bW5Sb3coQ29sdW1uLCBSb3cpIFJFU1VMVChIaXQpCiAgICAKICAgICAgICBVU0UgTG9nbywgT05MWTogVGVzdEFyZWEKICAgICAgICAKICAgICAgICBJTlRFR0VSLCBJTlRFTlQoSU4pIDo6IENvbHVtbiwgUm93CiAgICAgICAgTE9HSUNBTCAgICAgICAgICAgICA6OiBIaXQKICAgICAgICAKICAgICAgICBIaXQgPSBUZXN0QXJlYSgoQ29sdW1uLTMwKSAqICgyLi82MCksICgyMC1Sb3cpICogKDIuLzQwKSkKICAgIAogICAgRU5EIEZVTkNUSU9OIFRlc3RBcmVhQnlDb2x1bW5Sb3cKICAgIAogICAgRlVOQ1RJT04gR2V0Q2hhcmFjdGVyRnJvbUxvZ29BQShDb2x1bW4sIFJvdykgUkVTVUxUKENoYXIpCiAgICAKICAgICAgICBJTlRFR0VSLCBJTlRFTlQoSU4pIDo6IENvbHVtbiwgUm93CiAgICAgICAgQ0hBUkFDVEVSKExFTj0xKSAgICA6OiBDaGFyCiAgICAgICAgSU5URUdFUiAgICAgICAgICAgICA6OiBOZWlnaGJvdXJzCiAgICAgICAgCiAgICAgICAgSUYgKFRlc3RBcmVhQnlDb2x1bW5Sb3coQ29sdW1uLCBSb3cpKSBUSEVOCiAgICAgICAgCiAgICAgICAgICAgIE5laWdoYm91cnMgPSAwCiAgICAgICAgICAgIAogICAgICAgICAgICBJRiAoVGVzdEFyZWFCeUNvbHVtblJvdyhDb2x1bW4sUm93LTEpKSBUSEVOCiAgICAgICAgICAgICAgICBOZWlnaGJvdXJzID0gTmVpZ2hib3VycyArIDggISBJQlNFVChOZWlnaGJvdXJzLCAzKQogICAgICAgICAgICBFTkQgSUYKICAgICAgICAgICAgSUYgKFRlc3RBcmVhQnlDb2x1bW5Sb3coQ29sdW1uLFJvdysxKSkgVEhFTgogICAgICAgICAgICAgICAgTmVpZ2hib3VycyA9IE5laWdoYm91cnMgKyA0ICEgSUJTRVQoTmVpZ2hib3VycywgMikKICAgICAgICAgICAgRU5EIElGCiAgICAgICAgICAgIElGIChUZXN0QXJlYUJ5Q29sdW1uUm93KENvbHVtbi0xLFJvdykpIFRIRU4KICAgICAgICAgICAgICAgIE5laWdoYm91cnMgPSBOZWlnaGJvdXJzICsgMiAhIElCU0VUKE5laWdoYm91cnMsIDEpCiAgICAgICAgICAgIEVORCBJRgogICAgICAgICAgICBJRiAoVGVzdEFyZWFCeUNvbHVtblJvdyhDb2x1bW4rMSxSb3cpKSBUSEVOCiAgICAgICAgICAgICAgICBOZWlnaGJvdXJzID0gTmVpZ2hib3VycyArIDEgISBJQlNFVChOZWlnaGJvdXJzLCAwKQogICAgICAgICAgICBFTkQgSUYKICAgICAgICAgICAgCiAgICAgICAgICAgICEgV1JJVEUgKCosKikgTmVpZ2hib3VycwogICAgICAgICAgICAKICAgICAgICAgICAgU0VMRUNUIENBU0UoTmVpZ2hib3VycykKICAgICAgICAgICAgICAgIENBU0UoNSkKICAgICAgICAgICAgICAgICAgICBDaGFyID0gJ2QnCiAgICAgICAgICAgICAgICBDQVNFKDYpCiAgICAgICAgICAgICAgICAgICAgQ2hhciA9ICdiJwogICAgICAgICAgICAgICAgQ0FTRSgxMCkKICAgICAgICAgICAgICAgICAgICBDaGFyID0gJ0YnCiAgICAgICAgICAgICAgICBDQVNFKDkpCiAgICAgICAgICAgICAgICAgICAgQ2hhciA9ICdZJwogICAgICAgICAgICAgICAgQ0FTRSg0KQogICAgICAgICAgICAgICAgICAgIENoYXIgPSAnOycKICAgICAgICAgICAgICAgIENBU0UoOCkKICAgICAgICAgICAgICAgICAgICBDaGFyID0gJ1YnCiAgICAgICAgICAgICAgICBDQVNFKDIpCiAgICAgICAgICAgICAgICAgICAgQ2hhciA9ICc+JwogICAgICAgICAgICAgICAgQ0FTRSgxKQogICAgICAgICAgICAgICAgICAgIENoYXIgPSAnPCcKICAgICAgICAgICAgICAgIENBU0UoMCkKICAgICAgICAgICAgICAgICAgICBDaGFyID0gJ0AnCiAgICAgICAgICAgICAgICBDQVNFIERFRkFVTFQKICAgICAgICAgICAgICAgICAgICBDaGFyID0gJ3gnCiAgICAgICAgICAgIEVORCBTRUxFQ1QKICAgICAgICBFTFNFCiAgICAgICAgICAgIENoYXIgPSAnICcKICAgICAgICBFTkQgSUYKICAgICAgICAKICAgIEVORCBGVU5DVElPTiBHZXRDaGFyYWN0ZXJGcm9tTG9nb0FBCiAgICAKRU5EIE1PRFVMRSBSZW5kZXJBc2NpaQoKUFJPR1JBTSBSZW5kZXJTaGVsbExvZ28KCiAgICBVU0UgUmVuZGVyQXNjaWksIE9OTFk6IEdldENoYXJhY3RlckZyb21Mb2dvQUEKICAgIAogICAgSU1QTElDSVQgICBOT05FCgogICAgSU5URUdFUiAgICAgICAgICAgICA6OiBDb2x1bW4sIFJvdwogICAgQ0hBUkFDVEVSKExFTj02MCkgICA6OiBSZW5kZXJlZFJvdwogICAgTE9HSUNBTCAgICAgICAgICAgICA6OiBIaXQKICAgIElOVEVHRVIgICAgICAgICAgICAgOjogUGhhc2UKCiAgICBETyBSb3c9MSw0MAogICAgICAgIERPIENvbHVtbj0xLDYwCiAgICAgICAgICAgIFJlbmRlcmVkUm93KENvbHVtbjpDb2x1bW4pID0gR2V0Q2hhcmFjdGVyRnJvbUxvZ29BQShDb2x1bW4sUm93KQogICAgICAgIEVORCBETwogICAgICAgIFdSSVRFKCosKikgUmVuZGVyZWRSb3cKICAgIEVORCBETwogICAKRU5EIFBST0dSQU0gUmVuZGVyU2hlbGxMb2dvCg==