555 lines
No EOL
13 KiB
C++
555 lines
No EOL
13 KiB
C++
#include "SCENE.h"
|
|
#include "TRACK.h"
|
|
#include "MEDIA.h"
|
|
|
|
int AddfonRes(char *Str)
|
|
{
|
|
return AddFontResourceEx((LPCSTR)Str,FR_PRIVATE,(PVOID)0);
|
|
}
|
|
|
|
|
|
int TEXT_Grabber::END(void)
|
|
{
|
|
if (TEXT) CC_free(TEXT);
|
|
TEXT = NULL;
|
|
Image.Delete();
|
|
return 0;
|
|
}
|
|
u32 BSWAP_UPPER(u32 Code)
|
|
{
|
|
u32 ReturnV;
|
|
ReturnV = 0;
|
|
ReturnV |= Upper((Code >> 24) & 0xff)<<0;
|
|
ReturnV |= Upper((Code >> 16) & 0xff)<<8;
|
|
ReturnV |= Upper((Code >> 8) & 0xff)<<16;
|
|
ReturnV |= Upper((Code >> 0) & 0xff)<<24;
|
|
return ReturnV;
|
|
}
|
|
u32 POPNUM(char **NUMB)
|
|
{
|
|
u32 ReturnV;
|
|
ReturnV = 0;
|
|
while (**NUMB == ' ') {(*NUMB)++;};
|
|
while ((**NUMB >= '0') && (**NUMB <= '9'))
|
|
{
|
|
ReturnV *= 10;
|
|
ReturnV += **NUMB - '0';
|
|
(*NUMB)++;
|
|
}
|
|
return ReturnV;
|
|
}
|
|
u32 POPNUMH(char **NUMB)
|
|
{
|
|
u32 ReturnV;
|
|
ReturnV = 0;
|
|
while (**NUMB == ' ') {(*NUMB)++;};
|
|
while (((**NUMB >= '0') && (**NUMB <= '9')) || ((Upper(**NUMB) >= 'A') && (Upper(**NUMB) <= 'F')))
|
|
{
|
|
ReturnV <<= 4;
|
|
if (Upper(**NUMB) >= 'A')
|
|
ReturnV += Upper(**NUMB) - 'A' + 10;
|
|
else
|
|
ReturnV += **NUMB - '0';
|
|
(*NUMB)++;
|
|
}
|
|
return ReturnV;
|
|
}
|
|
|
|
|
|
#define DEFAULT_TEXT_PARRAMS "$$HCNT 0;VCNT 0;LINH 0;MULT 0;FONT 0;NUMB 0;PASS 0;EDIT 0;PIXW 256;PIXH 32;COLF FFFFFFFF;COLB 0;CELF FFFFFFFF;CELB 0$$\n"
|
|
char*TEXT_Grabber::ComputeParrams(char*Parrams)
|
|
{
|
|
if (*(u16*)Parrams == '$$')
|
|
{
|
|
Parrams += 2;
|
|
u32 OK = 1;
|
|
TT.AutoSizeX=TT.AutoSizeY=0;
|
|
ColorFront = ColorFront_EDIT = 0xffffffff;
|
|
ColorBack = ColorBack_EDIT = 0xff000000;
|
|
|
|
while (OK)
|
|
{
|
|
u32 Code;
|
|
Code = BSWAP_UPPER(*(u32*)Parrams);
|
|
Parrams += 4;
|
|
switch (Code)
|
|
{
|
|
case 'HCNT':
|
|
while (*Parrams == ' ') {Parrams++;};
|
|
if (*Parrams == '0') TT.HCentered = 0;
|
|
else TT.HCentered = 1;
|
|
break;
|
|
case 'VCNT':
|
|
while (*Parrams == ' ') {Parrams++;};
|
|
if (*Parrams == '0') TT.VCentered = 0;
|
|
else TT.VCentered = 1;
|
|
break;
|
|
case 'MULT':
|
|
while (*Parrams == ' ') {Parrams++;};
|
|
if (*Parrams == '0') TT.Multiline = 0;
|
|
else TT.Multiline = 1;
|
|
break;
|
|
case 'FONT':
|
|
while (*Parrams == ' ') {Parrams++;};
|
|
break;
|
|
case 'NUMB':
|
|
while (*Parrams == ' ') {Parrams++;};
|
|
if (*Parrams == '0') TT.IsNumber = 0;
|
|
else TT.IsNumber = 1;
|
|
break;
|
|
case 'EDIT':
|
|
while (*Parrams == ' ') {Parrams++;};
|
|
if (*Parrams == '0') TT.Editable = 0;
|
|
else TT.Editable = 1;
|
|
break;
|
|
case 'TEXT':
|
|
return Parrams;
|
|
case 'PIXW':
|
|
ulTextW_Pixels = POPNUM(&Parrams);
|
|
if (ulTextW_Pixels == 0)
|
|
TT.AutoSizeX=1;
|
|
break;
|
|
case 'PIXH':
|
|
ulTextH_Pixels = POPNUM(&Parrams);
|
|
if (ulTextH_Pixels == 0)
|
|
TT.AutoSizeY=1;
|
|
break;
|
|
case 'COLF':
|
|
ColorFront = POPNUMH(&Parrams);
|
|
break;
|
|
case 'COLB':
|
|
ColorBack = POPNUMH(&Parrams);
|
|
break;
|
|
case 'CELF':
|
|
ColorFront_EDIT = POPNUMH(&Parrams);
|
|
break;
|
|
case 'CELB':
|
|
ColorBack_EDIT = POPNUMH(&Parrams);
|
|
break;
|
|
case 'LINH':
|
|
InterlineSize = POPNUMH(&Parrams);
|
|
break;
|
|
case 'PASS':
|
|
while (*Parrams == ' ') {Parrams++;};
|
|
if (*Parrams == '0') TT.Password = 0;
|
|
else TT.Password = 1;
|
|
break;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
Parrams -= 4;
|
|
if ((*Parrams == 0) || (*Parrams == '\n')|| (*Parrams == '\r'))
|
|
OK = 0;
|
|
break;
|
|
}
|
|
if (*Parrams) Parrams ++;
|
|
}
|
|
}
|
|
return Parrams;
|
|
}
|
|
|
|
void TEXT_Grabber::ComputeTextSize()
|
|
{
|
|
u32 ulTextWCurrent;
|
|
ulTextWCurrent = ulTextH = ulTextW = 0;
|
|
ulTextW = ulTextH = 1;
|
|
if (TEXT && ulTextLenght)
|
|
{
|
|
if (((FontIndex != -1)) && pScene && pScene->DI && (pScene->ID_MEDIA[FontIndex]->GetType() == IOtype_FONT))
|
|
{
|
|
POINT TextSize;
|
|
SIZE *CharBounds = (SIZE *) pScene->ID_MEDIA[FontIndex]->GetData(0);
|
|
pScene->DI->GetTextSize((u8 *)TEXT,(int*)&TextSize.x,(int*)&TextSize.y,CharBounds);
|
|
if (TT.AutoSizeX) ulTextW_Pixels = 0;
|
|
if (TT.AutoSizeY) ulTextH_Pixels = 0;
|
|
if (ulTextH_Pixels == 0) ulTextH_Pixels = TextSize.y + 4;
|
|
if (ulTextW_Pixels == 0) ulTextW_Pixels = TextSize.x + 4;
|
|
}
|
|
else
|
|
{
|
|
u32 TC = 0;
|
|
while( TEXT[TC])
|
|
{
|
|
if (TEXT[TC] == '\n')
|
|
{
|
|
ulTextH++;
|
|
ulTextWCurrent=1;
|
|
} else
|
|
ulTextWCurrent++;
|
|
if (ulTextWCurrent > ulTextW) ulTextW = ulTextWCurrent;
|
|
TC++;
|
|
}
|
|
if (TT.AutoSizeX) ulTextW_Pixels = 0;
|
|
if (TT.AutoSizeY) ulTextH_Pixels = 0;
|
|
if (ulTextH_Pixels == 0) ulTextH_Pixels = ulTextH * 16 + 4;
|
|
if (ulTextW_Pixels == 0) ulTextW_Pixels = ulTextW * 8 + 4;
|
|
}
|
|
}
|
|
if (ulTextH_Pixels>512) ulTextH_Pixels=512;
|
|
if (ulTextW_Pixels>1024) ulTextW_Pixels=1024;
|
|
}
|
|
|
|
u32 TEXT_Grabber::SetFont(u32 FontI)
|
|
{
|
|
char TEXTSAVE[4096];
|
|
if (FontIndex != FontI)
|
|
{
|
|
FontIndex = FontI;
|
|
strcpy(TEXTSAVE,TEXT);
|
|
UPDATETEXT(TEXTSAVE);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
u32 TEXT_Grabber::UPDATETEXT(char *NewTEXT)
|
|
{
|
|
/* Reset old text */
|
|
if (TEXT)
|
|
{
|
|
//if (strcmp(TEXT,NewTEXT) == 0) return 0;
|
|
CC_free(TEXT);
|
|
}
|
|
TEXT = NULL;
|
|
ulTextLenght = strlen(NewTEXT)*2 + 8;
|
|
TEXT = (char*)CC_malloc(ulTextLenght*1);
|
|
u32 TB;
|
|
TB = 0;
|
|
|
|
/* Treat endtry string according to media feature (multiline, number ...) */
|
|
if (TT.Multiline)
|
|
{
|
|
while (*NewTEXT)
|
|
{
|
|
if (*NewTEXT != '\r')
|
|
{
|
|
if ((!TT.IsNumber) || ((*NewTEXT>='0') && (*NewTEXT<='9')))
|
|
{
|
|
if (*NewTEXT == 9) // TAB CODE
|
|
TEXT[TB++] = ' ';
|
|
else
|
|
TEXT[TB++] = *NewTEXT;
|
|
}
|
|
}
|
|
NewTEXT++;
|
|
}
|
|
} else
|
|
{
|
|
if (*NewTEXT == '\r') *NewTEXT = '\n';
|
|
|
|
while (*NewTEXT && (*NewTEXT != '\n'))
|
|
{
|
|
if ((!TT.IsNumber) || ((*NewTEXT>='0') && (*NewTEXT<='9')))
|
|
{
|
|
if (*NewTEXT == 9) // TAB CODE
|
|
TEXT[TB++] = ' ';
|
|
else
|
|
TEXT[TB++] = *NewTEXT;
|
|
}
|
|
NewTEXT++;
|
|
}
|
|
}
|
|
|
|
TEXT[TB] = 0;
|
|
|
|
ComputeTextSize();
|
|
|
|
u32 MustRecompute = 0;
|
|
|
|
if (Image.SetSize(ulTextW_Pixels, ulTextH_Pixels))
|
|
MustRecompute = 1;
|
|
|
|
u32 EditMode;
|
|
DrwTEXT_UI D_UILocal;
|
|
memset(&D_UILocal,0,sizeof(DrwTEXT_UI));
|
|
EditMode = 0;
|
|
if (pScene && (pScene->pTG == this))
|
|
{
|
|
D_UILocal = pScene->D_UI;
|
|
EditMode = 1;
|
|
}
|
|
|
|
|
|
D_UILocal.HCenter = TT.HCentered;
|
|
D_UILocal.ColorFront = ColorFront;
|
|
D_UILocal.ColorBack = ColorBack;
|
|
D_UILocal.ModePassword = TT.Password;
|
|
/* */
|
|
|
|
|
|
u32 Counter = Image.SX * Image.SY;
|
|
s32 *pBASE = Image.GetBase();
|
|
while (Counter--) pBASE[Counter] = D_UILocal.ColorBack;
|
|
|
|
|
|
|
|
char *TEXTParser,*TEXTParserEnd,TEXTParserEndSave;
|
|
u32 OriginalL,LinNumber,LinVSize,CursorPosInLine,PosInLine;
|
|
s32 CurrentCursorLine;
|
|
OriginalL = strlen(TEXT);
|
|
TEXT[OriginalL] = ' ';
|
|
TEXT[OriginalL+1] = 0;
|
|
|
|
LinNumber = 0;
|
|
CurrentCursorLine = 0;
|
|
CursorPosInLine = 0;
|
|
PosInLine = 0 ;
|
|
TEXTParser = TEXT;
|
|
D_UILocal.CursorPosUP = D_UILocal.CursorPosDown = D_UILocal.CursorPos;
|
|
D_UILocal.FONT_CharBounds = NULL;
|
|
D_UILocal.FONT_CharPos = NULL;
|
|
D_UILocal.FONT_Image = NULL;
|
|
D_UILocal.FONT_AlphaMode = 0;
|
|
LinVSize = InterlineSize;
|
|
if (FontIndex != -1)
|
|
{
|
|
if (pScene && (pScene->ID_MEDIA[FontIndex]->GetType() == IOtype_FONT))
|
|
{
|
|
|
|
D_UILocal.FONT_CharBounds = (SIZE*)pScene->ID_MEDIA[FontIndex]->GetData(0);
|
|
D_UILocal.FONT_CharPos = (SIZE*)pScene->ID_MEDIA[FontIndex]->GetData(1);
|
|
D_UILocal.FONT_Image = &pScene->ID_MEDIA[FontIndex]->Image;
|
|
D_UILocal.FONT_AlphaMode = (u32)(pScene->ID_MEDIA[FontIndex]->GetData(2)) & 1<<5;
|
|
D_UILocal.FONT_Metrix = (TEXTMETRIC *)pScene->ID_MEDIA[FontIndex]->GetData(3);
|
|
if (LinVSize == 0)
|
|
LinVSize = D_UILocal.FONT_Metrix->tmHeight;
|
|
}
|
|
}
|
|
if (LinVSize == 0)
|
|
{
|
|
LinVSize = 16;
|
|
}
|
|
|
|
|
|
if (EditMode)
|
|
{
|
|
D_UILocal.ColorFront = ColorFront_EDIT;
|
|
D_UILocal.ColorBack = ColorBack_EDIT;
|
|
} //else
|
|
// D_UILocal.CursorPos = strlen(TEXT);
|
|
{
|
|
D_UILocal.X = 0;
|
|
D_UILocal.Y = Image.SY-LinVSize;
|
|
}
|
|
|
|
|
|
while (*(TEXTParser))
|
|
{
|
|
if (D_UILocal.CursorPos == TEXTParser - TEXT)
|
|
{
|
|
CurrentCursorLine = LinNumber;
|
|
CursorPosInLine = PosInLine;
|
|
}
|
|
PosInLine++;
|
|
if (*(TEXTParser) == '\n')
|
|
{
|
|
if (D_UILocal.CursorPos > TEXTParser - TEXT) D_UILocal.CursorPosUP = TEXTParser - TEXT - PosInLine + 1;
|
|
if ((D_UILocal.CursorPos <= TEXTParser - TEXT) &&
|
|
(D_UILocal.CursorPosDown == D_UILocal.CursorPos))
|
|
D_UILocal.CursorPosDown = (TEXTParser - TEXT) + 1;
|
|
LinNumber++;
|
|
PosInLine=0;
|
|
}
|
|
TEXTParser++;
|
|
}
|
|
|
|
if (D_UILocal.CursorPosUP >= strlen(TEXT)) D_UILocal.CursorPosUP = strlen(TEXT);
|
|
if (D_UILocal.CursorPosDown >= strlen(TEXT)) D_UILocal.CursorPosDown = strlen(TEXT);
|
|
|
|
while (CursorPosInLine--)
|
|
{
|
|
if (TEXT[D_UILocal.CursorPosUP] && TEXT[D_UILocal.CursorPosUP]!='\n')
|
|
D_UILocal.CursorPosUP++;
|
|
if (TEXT[D_UILocal.CursorPosDown] && TEXT[D_UILocal.CursorPosDown]!='\n')
|
|
D_UILocal.CursorPosDown++;
|
|
}
|
|
|
|
|
|
if (TT.VCentered)
|
|
{
|
|
if (D_UILocal.FONT_CharBounds) // Anti-bug ;-(
|
|
D_UILocal.Y = (Image.SY>>1)-(LinVSize>>1) + ((LinVSize *LinNumber)>>1);
|
|
else
|
|
D_UILocal.Y = (Image.SY>>1)-(8) + ((LinVSize *LinNumber)>>1);
|
|
}
|
|
if (EditMode && TT.Multiline)
|
|
{
|
|
CurrentCursorLine = D_UILocal.Y - LinVSize * CurrentCursorLine;
|
|
if (CurrentCursorLine < 0)
|
|
D_UILocal.Y -= CurrentCursorLine;
|
|
if (CurrentCursorLine > (int)(Image.SY-LinVSize))
|
|
D_UILocal.Y -= CurrentCursorLine - (Image.SY-LinVSize);
|
|
}
|
|
int SaveY;
|
|
TEXTParser = TEXT;
|
|
SaveY = D_UILocal.Y;
|
|
|
|
while (*TEXTParser)
|
|
{
|
|
char LocalCPY[2048];
|
|
TEXTParserEnd = TEXTParser;
|
|
while (*TEXTParserEnd && (*TEXTParserEnd != '\n')) TEXTParserEnd++;
|
|
if (*TEXTParserEnd == '\n') TEXTParserEnd++;
|
|
|
|
|
|
TEXTParserEndSave = *TEXTParserEnd;
|
|
*TEXTParserEnd = 0;
|
|
strcpy(LocalCPY,TEXTParser);
|
|
for (int i = 0 ; i < strlen(LocalCPY);i++)
|
|
{
|
|
if (LocalCPY[i] == '\n') LocalCPY[i] = ' ';
|
|
}
|
|
D_UILocal.DontDraw = 1;
|
|
/* Draw in hiden mode to compute BV */
|
|
D_UILocal.CurrentCursorPos = TEXTParser - TEXT;
|
|
DRawTEXT_UserInterface((u8*)LocalCPY,(u32*)Image.GetBase(),(u32)Image.PITCH, (u32)Image.SY, &D_UILocal);
|
|
if (TT.HCentered)
|
|
{
|
|
D_UILocal.X = (Image.SX>>1) - ((D_UILocal.XEnd - D_UILocal.X)>>1);
|
|
D_UILocal.CurrentCursorPos = TEXTParser - TEXT;
|
|
DRawTEXT_UserInterface((u8*)LocalCPY,(u32*)Image.GetBase(),(u32)Image.PITCH, (u32)Image.SY, &D_UILocal);
|
|
}
|
|
/* then centering on computed BV */
|
|
if (EditMode)
|
|
{
|
|
if (D_UILocal.CursorPosX > (s32)ulTextW_Pixels - 8) D_UILocal.X -= D_UILocal.CursorPosX - ulTextW_Pixels + 8;
|
|
if (D_UILocal.CursorPosX < (s32)2) D_UILocal.X += (s32)2 - D_UILocal.CursorPosX ;
|
|
}
|
|
else D_UILocal.CursorPos = D_UILocal.SelStart = D_UILocal.SelEnd = -1;
|
|
D_UILocal.DontDraw = 0;
|
|
D_UILocal.CurrentCursorPos = TEXTParser - TEXT;
|
|
DRawTEXT_UserInterface((u8*)LocalCPY,(u32*)Image.GetBase(),(u32)Image.PITCH, (u32)Image.SY, &D_UILocal);
|
|
|
|
TEXTParser = TEXTParserEnd;
|
|
*TEXTParserEnd = TEXTParserEndSave;
|
|
|
|
D_UILocal.Y -= LinVSize;
|
|
}
|
|
D_UILocal.Y = SaveY;
|
|
TEXT[OriginalL] = 0;
|
|
|
|
if (EditMode) pScene->D_UI = D_UILocal;
|
|
|
|
|
|
if (ulAssociatedTextureIndex != -1)
|
|
{
|
|
if (MustRecompute)
|
|
{
|
|
pScene->DI->DestroyTexture(ulAssociatedTextureIndex);
|
|
ulAssociatedTextureIndex = pScene->DI->CreateTexture(&Image,ulColorMode);
|
|
}
|
|
pScene->DI->UpdateTexture_BM_2_HW(ulAssociatedTextureIndex, false);
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
u32 TEXT_Grabber::LOADTEXT(MAP *RefMap,char *Filename)
|
|
{
|
|
FILE *F;
|
|
char NewTEXT[2048];
|
|
ulTextLenght = strlen(Filename);
|
|
if ((GetFileNameExtend(Filename) == 'TEXT') && (ulTextLenght > 6) && (Filename[ulTextLenght - 5] != '.'))
|
|
{
|
|
/* this is not a file */
|
|
strcpy(NewTEXT,Filename);
|
|
NewTEXT[ulTextLenght-5] = 0;
|
|
} else
|
|
{
|
|
F = GetSceneFileHanler(Filename);//,"rb");
|
|
if (!F) return 0;
|
|
ulTextLenght = GetFileLenght(Filename) + 1;
|
|
if (ulTextLenght > 2040) ulTextLenght = 2040;
|
|
fread(NewTEXT,1,ulTextLenght-1,F);
|
|
NewTEXT[ulTextLenght-1] = 0;
|
|
CC_fclose(F);
|
|
/* interpret NewTEXT */
|
|
{
|
|
if (*(u16*)NewTEXT != '$$')
|
|
{
|
|
FILE *GetSceneFileHanler_SAVE(char *Name);
|
|
/* Resave with Default Parrams */
|
|
F = GetSceneFileHanler_SAVE(Filename);
|
|
if (F)
|
|
{
|
|
char DefaultText[] = DEFAULT_TEXT_PARRAMS;
|
|
fwrite(DefaultText,1,strlen(DefaultText),F);
|
|
fwrite(NewTEXT,1,strlen(NewTEXT),F);
|
|
CC_fclose(F);
|
|
/* ReloadIt */
|
|
F = GetSceneFileHanler(Filename);//,"rb");
|
|
if (!F) return 0;
|
|
ulTextLenght = GetFileLenght(Filename) + 1;
|
|
if (ulTextLenght > 2040) ulTextLenght = 2040;
|
|
fread(NewTEXT,1,ulTextLenght-1,F);
|
|
NewTEXT[ulTextLenght-1] = 0;
|
|
CC_fclose(F);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
if (*(u16*)NewTEXT == '$$')
|
|
/* Interpret parrams... */
|
|
UPDATETEXT(ComputeParrams((char*)NewTEXT));
|
|
else
|
|
UPDATETEXT(NewTEXT);
|
|
return 1;
|
|
}
|
|
|
|
int TEXT_Grabber::FRAME(void)
|
|
{
|
|
if (pScene && (pScene->pTG == this))
|
|
{
|
|
ulFileAsbeenTouched = 0;
|
|
UPDATETEXT(pScene -> CurrentlyEditedText);
|
|
return 0;
|
|
}//*/
|
|
if (ulFileAsbeenTouched)
|
|
{
|
|
if (LOADTEXT(&Image,(char*)MediaName))
|
|
{
|
|
ulFileAsbeenTouched = 0;
|
|
return 1;
|
|
} else
|
|
return 0;
|
|
}
|
|
return 0;
|
|
};
|
|
|
|
INPUT_IO *TEXT_CREATE(WORLD *pScene,char *Filename)
|
|
{
|
|
INPUT_IO *Ret;
|
|
u32 Fl;
|
|
u8 *Fi;
|
|
// Fl = GetFileLenght(Filename);
|
|
// if (Fl)
|
|
{
|
|
Ret = (INPUT_IO *)new(TEXT_Grabber);
|
|
((TEXT_Grabber *)Ret)->pScene = pScene;
|
|
((TEXT_Grabber *)Ret)->ulAssociatedTextureIndex = -1;
|
|
memset(&Ret->Image, 0, sizeof(Ret->Image));
|
|
memset(&((TEXT_Grabber *)Ret)->TT,0,sizeof(TEXTType));
|
|
((TEXT_Grabber *)Ret)->TT.VCentered = 1;
|
|
((TEXT_Grabber *)Ret)->TT.HCentered = 1;
|
|
((TEXT_Grabber *)Ret)->TT.Multiline = 0;
|
|
((TEXT_Grabber *)Ret)->TT.IsNumber = 0;
|
|
((TEXT_Grabber *)Ret)->TT.Editable = 1;
|
|
((TEXT_Grabber *)Ret)->TT.AutoSizeX=1;
|
|
((TEXT_Grabber *)Ret)->TT.AutoSizeY=1;
|
|
((TEXT_Grabber *)Ret)->FontIndex = -1;
|
|
|
|
|
|
((TEXT_Grabber *)Ret)->TEXT = NULL;
|
|
if (((TEXT_Grabber *)Ret)->LOADTEXT(&Ret->Image,Filename))
|
|
{
|
|
Ret->dTotalTime = 0;
|
|
Ret->dAvgFramePerSecond = 30.0;
|
|
strcpy((char*)Ret->MediaName,Filename);
|
|
return (INPUT_IO *)Ret;
|
|
}
|
|
}
|
|
return ERROR_CREATE("TEXT file\nnot Found!");
|
|
} |