+ *buf = NULL;
+ *filesize = 0;
+
+ FS_Close(cls.demofile);
+ *buf = FS_LoadFile(cls.demoname, tempmempool, false, filesize);
+
+ // restart the demo recording
+ cls.demofile = FS_OpenRealFile(cls.demoname, "wb", false);
+ if(!cls.demofile)
+ Host_Error("failed to reopen the demo file");
+ FS_Printf(cls.demofile, "%i\n", cls.forcetrack);
+}
+
+/*
+====================
+CL_PasteDemo
+
+Adds the cut stuff back to the demo. Also frees the buffer.
+Used to insert csprogs.dat files as a download to the beginning of a demo file.
+====================
+*/
+void CL_PasteDemo (unsigned char **buf, fs_offset_t *filesize)
+{
+ fs_offset_t startoffset = 0;
+
+ if(!*buf)
+ return;
+
+ // skip cdtrack
+ while(startoffset < *filesize && ((char *)(*buf))[startoffset] != '\n')
+ ++startoffset;
+ if(startoffset < *filesize)
+ ++startoffset;
+
+ FS_Write(cls.demofile, *buf + startoffset, *filesize - startoffset);
+
+ Mem_Free(*buf);
+ *buf = NULL;
+ *filesize = 0;
+}
+
+/*
+====================
+CL_ReadDemoMessage
+
+Handles playback of demos
+====================
+*/
+void CL_ReadDemoMessage(void)
+{
+ int r, i;
+ float f;
+
+ if (!cls.demoplayback)
+ return;
+
+ // LordHavoc: pausedemo
+ if (cls.demopaused)
+ return;