BrightScript

1 program Added 2026-02-06T08:24:19Z Agent: claude-codeModel: sonnetWebSearch: disabled Evidence Report issue View issues
Aliases: —
Provenance: commit eb7c4d015e · authored 2026-02-06T09:26:27+01:00 · agent claude-code · model sonnet

Sources mentioning this language

3 sources · pl_id: pl/brightscript
LLM (this repo) · 1LinguistHyperpolyglot

Extensions claimed by this language

1 claim. Each row is one upstream assertion with its strength. SWH column shows file occurrences with that extension across the entire archive.
ExtensionSourceStrengthSWH
.brslinguistprimary96.9K files

Related languages

ChatScript (0.37)VoltScript (0.37)ZScript (0.35)F-Script (0.33)Qt Script (0.33)

Real programs from Software Heritage

1 sample mined from derived_datasets/<date>/contents/*.parquet, byte-verified against the SWH archive. Citation-grade qualified SWHIDs preserved.
HomeScreen.brs · 30169 B · ext .brs · seen 147× in SWH
via unique-primary
swh:1:cnt:d10fd92c181274ff5dd48e1133924d54602c3e1b;origin=https://github.com/MediaBrowser/Emby.Roku;anchor=swh:1:rev:bef3b50a90044ce97231e6a995ea06ab493a4416;path=/source/HomeScreen.brs
Open in SWH · Raw bytes (SWH) · GitHub raw
Show source
'**********************************************************
'** createHomeScreen
'**********************************************************

Function createHomeScreen(viewController as Object) as Object

	names = []
	keys = []
	
	views = getUserViews()
	
	for each view in views
	
		names.push(view.Title)
		
		key = view.CollectionType + "|" + view.Id + "|" + firstOf(view.HDPosterUrl, "")
		
		keys.push(key)
		
	end for
	
	names.push("Options")
	keys.push("options")

	loader = CreateObject("roAssociativeArray")
	loader.getUrl = getHomeScreenRowUrl
	loader.parsePagedResult = parseHomeScreenResult
	loader.getLocalData = getHomeScreenLocalData

    screen = createPaginatedGridScreen(viewController, names, keys, loader, "two-row-flat-landscape-custom", 8, 75)

	screen.baseHandleMessage = screen.HandleMessage
	screen.HandleMessage = handleHomeScreenMessage

    screen.OnTimerExpired = homeScreenOnTimerExpired
    screen.SuperActivate = screen.Activate
    screen.Activate = homeScreenActivate

	screen.refreshBreadcrumb = homeRefreshBreadcrumb

    screen.clockTimer = createTimer()
    screen.clockTimer.Name = "clock"
    screen.clockTimer.SetDuration(20000, true) ' A little lag is fine here
    viewController.AddTimer(screen.clockTimer, screen)
	
	ConnectionManager().sendWolToAllServers(m)

    screen.SetDescriptionVisible(false)

	return screen
End Function

Function getUserViews() as Object

	views = []
	
	if getGlobalVar("user") = invalid then return views
	
	url = GetServerBaseUrl() + "/Users/" + getGlobalVar("user").Id + "/Views?fields=PrimaryImageAspectRatio"
	
    request = HttpRequest(url)
    request.ContentType("json")
    request.AddAuthorization()

    response = request.GetToStringWithTimeout(10)
    if response <> invalid
	
        result = parseItemsResponse(response, 0, "two-row-flat-landscape-custom")

		for each i in result.Items
		
			viewType = firstOf(i.CollectionType, "")
			
			' Filter out unsupported views
			if viewType = "movies" or viewType = "music" or viewType = "tvshows" or viewType = "livetv" or viewType = "channels" or viewType = "folders" or viewType = "playlists" or viewType = "boxsets" then
				views.push(i)
			
			' Treat all other types as folders for now
			else 
				viewType = "folders"
				views.push(i)
			end if
		
			' Normalize this
			i.CollectionType = viewType
			
		end for
		
	end if	
	
	return views

End Function

Function getHomeScreenLocalData(row as Integer, id as String, startItem as Integer, count as Integer) as Object

	viewController = GetViewController()
	
	parts = id.tokenize("|")
	id = parts[0]
	parentId = firstOf(parts[1], "")
	viewTileImageUrl = parts[2]
	
	if id = "options" then
		return GetOptionButtons(viewController)
		
	else if id = "movies" 
	
		movieToggle  = (firstOf(RegUserRead("movieToggle"), "2")).ToInt()
		
		' Jump list
		if movieToggle = 3 then
		
			return GetMovieButtons(viewController, movieToggle, parentId, viewTileImageUrl)
		end if
		
	else if id = "tvshows" 
	
		tvToggle  = (firstOf(RegUserRead("tvToggle"), "1")).ToInt()
		
		' Jump list
		if tvToggle = 3 then
		
			return GetTVButtons(viewController, tvToggle, parentId, viewTileImageUrl)
		end if
		
	end If
	
	return invalid

End Function

Function getHomeScreenRowUrl(row as Integer, id as String) as String

    parts = id.tokenize("|")
	id = parts[0]
	parentId = firstOf(parts[1], "")
	
	url = GetServerBaseUrl()

    query = {}

	if id = "folders"
	
		url = url  + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?sortby=sortname"
		query.AddReplace("Fields", "PrimaryImageAspectRatio")
		
	else if id = "playlists" or id = "boxsets"
	
		url = url  + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?sortby=sortname"
		
	else if id = "channels"
	
		url = url  + "/Channels?userid=" + HttpEncode(getGlobalVar("user").Id)

	else if id = "movies"
	
		movieToggle  = (firstOf(RegUserRead("movieToggle"), "1")).ToInt()

		' Next Up
		if movieToggle = 1 then
			
			url = url + "/Movies/Recommendations?userId=" + HttpEncode(getGlobalVar("user").Id)
			
			query = {
				ItemLimit: "20"
				CategoryLimit: "1"
				fields: "PrimaryImageAspectRatio",
				ImageTypeLimit: "1"
			}
			
		' Latest
		else if movieToggle = 2 then
			
			url = url + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?IncludeItemTypes=Movie"
			query = {
				recursive: "true"
				ExcludeLocationTypes: "Virtual"
				fields: "PrimaryImageAspectRatio"
				sortby: "DateCreated"
				sortorder: "Descending"
				filters: "IsUnplayed",
				ImageTypeLimit: "1"
			}
			
		' Resume
		else if movieToggle = 4 then
			
			url = url + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?includeitemtypes=Movie"
			query = {
				recursive: "true"
				fields: "PrimaryImageAspectRatio"
				sortby: "DatePlayed"
				sortorder: "Descending"
				filters: "IsResumable",
				ImageTypeLimit: "1"
			}
			
		' Favorites
		else if movieToggle = 5 then
			
			url = url + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?includeitemtypes=Movie"
			query = {
				recursive: "true"
				fields: "PrimaryImageAspectRatio"
				sortby: "SortName"
				sortorder: "Ascending"
				filters: "IsFavorite",
				ImageTypeLimit: "1"
			}
			
		' Genres
		else if movieToggle = 6 then
			
			url = url + "/Genres?Recursive=true"
			query = {
				userid: getGlobalVar("user").Id
				includeitemtypes: "Movie"
				fields: "PrimaryImageAspectRatio"
				sortby: "SortName"
				sortorder: "Ascending"
			}
			
		end if		
		
	else if id = "tvshows"
	
		tvToggle  = (firstOf(RegUserRead("tvToggle"), "1")).ToInt()

		' Next Up
		if tvToggle = 1 then
			
			url = url + "/Shows/NextUp?userId=" + HttpEncode(getGlobalVar("user").Id)
			
			query = {
				fields: "PrimaryImageAspectRatio,Overview",
				ImageTypeLimit: "1"
			}
			
		' Latest
		else if tvToggle = 2 then
			
			url = url + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?IncludeItemTypes=Episode"
			query = {
				recursive: "true"
				ExcludeLocationTypes: "Virtual"
				fields: "PrimaryImageAspectRatio"
				sortby: "DateCreated"
				sortorder: "Descending"
				filters: "IsUnplayed",
				ImageTypeLimit: "1"
			}
			
		' Resume
		else if tvToggle = 4 then
			
			url = url + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?includeitemtypes=Episode"
			query = {
				recursive: "true"
				fields: "PrimaryImageAspectRatio"
				sortby: "DatePlayed"
				sortorder: "Descending"
				filters: "IsResumable",
				ImageTypeLimit: "1"
			}
			
		' Favorites
		else if tvToggle = 5 then
			
			url = url + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?includeitemtypes=Series"
			query = {
				recursive: "true"
				fields: "PrimaryImageAspectRatio"
				sortby: "SortName"
				sortorder: "Ascending"
				filters: "IsFavorite",
				ImageTypeLimit: "1"
			}
			
		' Genres
		else if tvToggle = 6 then
			
			url = url + "/Genres?Recursive=true"
			query = {
				userid: getGlobalVar("user").Id
				includeitemtypes: "Series"
				fields: "PrimaryImageAspectRatio"
				sortby: "SortName"
				sortorder: "Ascending",
				ImageTypeLimit: "1"
			}
			
		end if		
		
	else if id = "livetv"
	
		liveTvToggle = (firstOf(RegUserRead("liveTvToggle"), "1")).ToInt()

		' Suggested
		if liveTvToggle = 1 then
			
			url = url + "/LiveTv/Programs/Recommended?userId=" + HttpEncode(getGlobalVar("user").Id)
			query = {
				IsAiring: "true"
			}
			
		' Favorites
		else if liveTvToggle = 2 then
			
			url = url + "/LiveTv/Channels?userId=" + HttpEncode(getGlobalVar("user").Id)
			query = {
				IsFavorite: "true"
			}
			
		' Resume
		else if liveTvToggle = 3 then
			
			url = url + "/LiveTv/Recordings?userId=" + HttpEncode(getGlobalVar("user").Id)
			query = {
				IsInProgress: "false"
			}
			
		end if		
		
	else if id = "music"
	
		musicToggle  = (firstOf(RegUserRead("musicToggle"), "1")).ToInt()

		' Latest
		if musicToggle = 1 then
			
			url = url + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?includeitemtypes=MusicAlbum"		
			query = {
				recursive: "true"
				fields: "PrimaryImageAspectRatio"
				sortby: "DateCreated"
				sortorder: "Descending",
				ImageTypeLimit: "1"
			}
		
		else
		
			' Not going to use the output, just checking to see if the user has music in their library
			url = url + "/Users/" + HttpEncode(getGlobalVar("user").Id) + "/Items?includeitemtypes=Audio"		
			query = {
				recursive: "true"
				fields: "PrimaryImageAspectRatio"
				sortby: "DateCreated"
				sortorder: "Descending",
				ImageTypeLimit: "1"
			}
		
			
		end if		
		
	end If
	
	if id <> "channels" and id <> "livetv" and parentId <> "" then
		
		query.AddReplace("ParentId", parentId)
	end if

	for each key in query
		url = url + "&" + key +"=" + HttpEncode(query[key])
	end for

    return url

End Function

Function parseHomeScreenResult(row as Integer, id as string, startIndex as Integer, json as String) as Object

	viewController = GetViewController()
	maxListSize = 60
	
	parts = id.tokenize("|")
	id = parts[0]
	parentId = firstOf(parts[1], "")
	viewTileImageUrl = parts[2]
	
	if id = "folders" then
		return parseItemsResponse(json, 0, "two-row-flat-landscape-custom")
	else if id = "playlists" then
		return parseItemsResponse(json, 1, "two-row-flat-landscape-custom")
	else if id = "boxsets" then
		return parseItemsResponse(json, 1, "two-row-flat-landscape-custom")
	else if id = "channels" then
		return parseItemsResponse(json, 1, "two-row-flat-landscape-custom")
		
	else if id = "movies" then
	
		movieToggle  = (firstOf(RegUserRead("movieToggle"), "1")).ToInt()		
		
		if movieToggle = 1 then
			response = parseSuggestedMoviesResponse(json)
		else if movieToggle = 6 then
			response = parseItemsResponse(json, 1, "mixed-aspect-ratio-portrait", "moviegenre")
		else
			response = parseItemsResponse(json, 1, "two-row-flat-landscape-custom")
		end if
		
		buttons = GetBaseMovieButtons(viewController, movieToggle, parentId, viewTileImageUrl, response)
		buttonCount = buttons.Count()
		minTotalRecordCount = buttonCount + response.Items.Count()
		
		' Only insert buttons if startIndex = 0
		if startIndex = 0 then						
			buttons.Append(response.Items)		
			response.Items = buttons
		end if
		
		if response.TotalCount > maxListSize then response.TotalCount = maxListSize	
		if response.TotalCount < minTotalRecordCount then response.TotalCount = minTotalRecordCount	
		return response
		
	else if id = "tvshows" then
	
		tvToggle  = (firstOf(RegUserRead("tvToggle"), "1")).ToInt()		
		
		if tvToggle = 5 then
			response = parseItemsResponse(json, 1, "two-row-flat-landscape-custom")
		else if tvToggle = 6 then
			response = parseItemsResponse(json, 1, "mixed-aspect-ratio-portrait", "tvgenre")
		else
			response = parseItemsResponse(json, 0, "two-row-flat-landscape-custom")
		end if
		
		buttons = GetBaseTVButtons(viewController, tvToggle, parentId, viewTileImageUrl)
		buttonCount = buttons.Count()
		minTotalRecordCount = buttonCount + response.Items.Count()
		
		' Only insert buttons if startIndex = 0
		if startIndex = 0 then						
			buttons.Append(response.Items)		
			response.Items = buttons
		end if
		
		if response.TotalCount > maxListSize then response.TotalCount = maxListSize	
		if response.TotalCount < minTotalRecordCount then response.TotalCount = minTotalRecordCount	
		return response
		
	else if id = "livetv" then
	
		liveTvToggle = (firstOf(RegUserRead("liveTvToggle"), "1")).ToInt()
		
		if liveTvToggle = 1 then
			response = parseLiveTvProgramsResponse(json)
		else if liveTvToggle = 2 then
			response = parseLiveTvChannelsResult(json)
		else
			response = parseLiveTvRecordingsResponse(json)
		end if
		
		buttons = GetBaseLiveTVButtons(viewController, liveTvToggle)
		buttonCount = buttons.Count()
		minTotalRecordCount = buttonCount + response.Items.Count()
		
		' Only insert buttons if startIndex = 0
		if startIndex = 0 then						
			buttons.Append(response.Items)		
			response.Items = buttons
		end if
		
		if response.TotalCount > maxListSize then response.TotalCount = maxListSize	
		if response.TotalCount < minTotalRecordCount then response.TotalCount = minTotalRecordCount	
		return response
		
	else if id = "music" then
	
		response = parseItemsResponse(json, 0, "mixed-aspect-ratio-square")
		
		if response.TotalCount = 0 then
			Return {
				Items: []
				TotalCount: 0
			}
		end if    
	
		musicToggle  = (firstOf(RegUserRead("musicToggle"), "1")).ToInt()		
		
		if musicToggle <> 1 then
			return GetMusicButtons(viewController, musicToggle, parentId, viewTileImageUrl)
		end if
		
		buttons = GetBaseMusicButtons(viewController, musicToggle, parentId, viewTileImageUrl)
		buttonCount = buttons.Count()
		minTotalRecordCount = buttonCount + response.Items.Count()
		
		' Only insert buttons if startIndex = 0
		if startIndex = 0 then
			buttons.Append(response.Items)		
			response.Items = buttons
		end if
		
		if response.TotalCount > maxListSize then response.TotalCount = maxListSize	
		if response.TotalCount < minTotalRecordCount then response.TotalCount = minTotalRecordCount	
		return response
		
	end if

	return parseItemsResponse(json, 0, "two-row-flat-landscape-custom")
	
End Function

Function handleHomeScreenMessage(msg) as Boolean

	handled = false

	viewController = m.ViewController

	if type(msg) = "roGridScreenEvent" Then

        if msg.isListItemSelected() Then
			
			rowIndex = msg.GetIndex()
			context = m.contentArray[rowIndex]           
            index = msg.GetData()
            item = context[index]

            if item = invalid then

            Else If item.ContentType = "MovieToggle" Then

				handled = true
                GetNextMovieToggle()
                m.loader.RefreshRow(rowIndex)

            Else If item.ContentType = "MovieRefreshSuggested" Then
				
                handled = true
                m.loader.RefreshRow(rowIndex)

            Else If item.ContentType = "TVToggle" Then
				
                handled = true

                GetNextTVToggle()
                m.loader.RefreshRow(rowIndex)

            Else If item.ContentType = "LiveTVToggle" Then
				
                handled = true

                GetNextLiveTVToggle()
                m.loader.RefreshRow(rowIndex)

            Else If item.ContentType = "MusicToggle" Then
				
                handled = true

                GetNextMusicToggle()
                m.loader.RefreshRow(rowIndex)

            End If
				
        End If
			
    End If

	return handled or m.baseHandleMessage(msg)

End Function

'**********************************************************
'** GetNextMovieToggle
'**********************************************************

Function GetNextMovieToggle()

	movieToggle  = (firstOf(RegUserRead("movieToggle"), "2")).ToInt()
	
    movieToggle = movieToggle + 1

    if movieToggle = 7 then
        movieToggle = 1
    end if

    RegUserWrite("movieToggle", movieToggle)
	
End Function

'**********************************************************
'** Get GetMovieButtons
'**********************************************************

Function GetBaseMovieButtons(viewController as Object, movieToggle as Integer, parentId as String, allTileImageUrl = invalid, movieResponse = invalid) As Object

	if firstOf(allTileImageUrl, "") = "" then
		allTileImageUrl = viewController.getThemeImageUrl("hd-movies.jpg")
	end if
	
	buttons = [
        {
            Title: "Movie Library"
            ContentType: "MovieLibrary"
            ShortDescriptionLine1: "Library"
            HDPosterUrl: allTileImageUrl
            SDPosterUrl: allTileImageUrl,
			Id: parentId
        }
    ]

    switchButton = [
        {
            ContentType: "MovieToggle"
        }
    ]

    if movieToggle = 1 then
	
        switchButton[0].HDPosterUrl = viewController.getThemeImageUrl("hd-toggle-1.jpg")
        switchButton[0].SDPosterUrl = viewController.getThemeImageUrl("hd-toggle-1.jpg")
        buttons.Append( switchButton )

        suggestedButton = [
                {
                    ContentType: "MovieRefreshSuggested"
 
…(truncated)…

Programs collected by LLM agents experimental · unverified

Gathered by LLM agents during the experiment that started this catalogue. They are not verified: the agent names an origin, but a program can be altered or invented — an audit found one attributed to a file that does not exist, in a syntax the language does not have. Prefer the programs archived by Software Heritage above. The catalogue's goal is the languages themselves, grounded in sources (PLDB, Wikipedia, Rosetta Code, …), with real archived programs; these examples may be dropped.

Array Sum Example

Provenance: commit eb7c4d015e · authored 2026-02-06T09:26:27+01:00 · agent claude-code · model sonnet · WebSearch disabled
code.brs · added: 2026-02-06T08:24:19Z
sub Main()
    print "Hello from BrightScript!"
    numbers = [1, 2, 3, 4, 5]
    sum = 0
    for each num in numbers
        sum = sum + num
    end for
    print "Sum of numbers: "; sum
end sub

Contribute — propose a file extension

Tell us where to find evidence about BrightScript (mapped to pl/brightscript). A reference URL is required; at least one of extension or program code must be provided too. A maintainer reviews each submission via a draft PR before anything lands.
Optional: attach a program from that URL
If the reference URL points at a single source file you'd like to add as an example program, paste it below. The workflow will write it under languages/BrightScript/programs/<sha>/. Keep under ~200 lines.
(or open the pre-filled issue directly)
← BrighterScript brightscript-lang →