diff --git a/swad_game_resource.c b/swad_game_resource.c
new file mode 100644
index 000000000..87f554cf3
--- /dev/null
+++ b/swad_game_resource.c
@@ -0,0 +1,120 @@
+// swad_game_resource.c: links to games as program resources
+
+/*
+ SWAD (Shared Workspace At a Distance),
+ is a web platform developed at the University of Granada (Spain),
+ and used to support university teaching.
+
+ This file is part of SWAD core.
+ Copyright (C) 1999-2022 Antonio Caņas Vargas
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+/*****************************************************************************/
+/********************************* Headers ***********************************/
+/*****************************************************************************/
+
+#include "swad_alert.h"
+#include "swad_error.h"
+#include "swad_form.h"
+#include "swad_game.h"
+#include "swad_game_database.h"
+#include "swad_program_database.h"
+
+/*****************************************************************************/
+/***************************** Get link to game ******************************/
+/*****************************************************************************/
+
+void Gam_GetLinkToGame (void)
+ {
+ extern const char *Txt_Link_to_resource_X_copied_into_clipboard;
+ struct Gam_Games Games;
+ long GamCod;
+ char Title[Gam_MAX_BYTES_TITLE + 1];
+
+ /***** Reset games context *****/
+ Gam_ResetGames (&Games);
+
+ /***** Get parameters *****/
+ if ((GamCod = Gam_GetParams (&Games)) <= 0)
+ Err_WrongGameExit ();
+
+ /***** Get game title *****/
+ Gam_DB_GetGameTitle (GamCod,Title);
+
+ /***** Copy link to game into resource clipboard *****/
+ Prg_DB_CopyToClipboard (PrgRsc_GAME,GamCod);
+
+ /***** Write sucess message *****/
+ Ale_ShowAlert (Ale_SUCCESS,Txt_Link_to_resource_X_copied_into_clipboard,
+ Title);
+
+ /***** Show games again *****/
+ Gam_ListAllGames (&Games);
+ }
+
+/*****************************************************************************/
+/*********************** Write game in course program ************************/
+/*****************************************************************************/
+
+void GamRsc_WriteGameInCrsProgram (long GamCod,bool PutFormToGo,
+ const char *Icon,const char *IconTitle)
+ {
+ extern const char *Txt_Actions[Act_NUM_ACTIONS];
+ char Title[Gam_MAX_BYTES_TITLE + 1];
+
+ /***** Get game title *****/
+ Gam_DB_GetGameTitle (GamCod,Title);
+
+ /***** Begin form to go to game *****/
+ if (PutFormToGo)
+ {
+ Frm_BeginForm (ActSeeGam);
+ Gam_PutParamGameCod (GamCod);
+ HTM_BUTTON_Submit_Begin (Txt_Actions[ActSeeGam],
+ "class=\"LM BT_LINK PRG_LNK_%s\"",
+ The_GetSuffix ());
+ }
+
+ /***** Icon depending on type ******/
+ if (PutFormToGo)
+ Ico_PutIconLink (Icon,Ico_BLACK,ActSeeGam);
+ else
+ Ico_PutIconOn (Icon,Ico_BLACK,IconTitle);
+
+ /***** Write game title of exam *****/
+ HTM_Txt (Title);
+
+ /***** End form to download file *****/
+ if (PutFormToGo)
+ {
+ /* End form */
+ HTM_BUTTON_End ();
+
+ Frm_EndForm ();
+ }
+ }
+
+/*****************************************************************************/
+/*********************** Get game title from game code ***********************/
+/*****************************************************************************/
+
+void GamRsc_GetTitleFromGamCod (long GamCod,char *Title,size_t TitleSize)
+ {
+ char TitleFromDB[Gam_MAX_BYTES_TITLE + 1];
+
+ /***** Get game title *****/
+ Gam_DB_GetGameTitle (GamCod,TitleFromDB);
+ Str_Copy (Title,TitleFromDB,TitleSize);
+ }
diff --git a/swad_game_resource.h b/swad_game_resource.h
new file mode 100644
index 000000000..da8153ec9
--- /dev/null
+++ b/swad_game_resource.h
@@ -0,0 +1,41 @@
+// swad_game_resource.h: links to games as program resources
+
+#ifndef _SWAD_GAM_RSC
+#define _SWAD_GAM_RSC
+/*
+ SWAD (Shared Workspace At a Distance in Spanish),
+ is a web platform developed at the University of Granada (Spain),
+ and used to support university teaching.
+
+ This file is part of SWAD core.
+ Copyright (C) 1999-2022 Antonio Caņas Vargas
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as
+ published by the Free Software Foundation, either version 3 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see .
+*/
+/*****************************************************************************/
+/********************************* Headers ***********************************/
+/*****************************************************************************/
+
+#include // For size_t
+
+/*****************************************************************************/
+/***************************** Public prototypes *****************************/
+/*****************************************************************************/
+
+void Gam_GetLinkToGame (void);
+void GamRsc_WriteGameInCrsProgram (long GamCod,bool PutFormToGo,
+ const char *Icon,const char *IconTitle);
+void GamRsc_GetTitleFromGamCod (long GamCod,char *Title,size_t TitleSize);
+
+#endif