/*********************************************************************** GADGET: "'Laden'" "7" AUTO TYP: "?" $DAT >><< 27.11.1993 - (C) ProDAD Holger Burkarth ************************************************************************/ Options RESULTS ARG InputVar Address clariSSA FailAt 11 AltFail=RESULT SetPref "SCREENS OFF" DO FOREVER WorkAnim2="" WorkAnim=GetAnimReg("") IF WorkAnim="" THEN LEAVE F_NewAnim=1 GetAnimInfo Master IF RESULT~="" THEN DO MSRequester "TITLE '*** Anim laden ***'", "'Animationsregister MASTER ist bereits belegt.'", "PTEXT 'Animation an die MASTER anhängen bzw. erweitern'", "'MASTER neu anlegen (alte Animation entfernen)'", "'Animation zu einer Multi-Anim zusammenfügen'" IF RC~=0 THEN LEAVE F_MultiAnim=0 F_NewAnim=0 IF RESULT=2 THEN DO F_NewAnim=1 CloseAnim Master IF RC~=0 THEN LEAVE END ELSE IF RESULT=3 THEN DO F_MultiAnim=1 END END GetPref PARSE VAR RESULT . "NAME" '"'Datei'"' . PrefFile='"'Datei'"' Mode_Auto=0 Mode_REQ=0 DO FOREVER PARSE VAR InputVar com InputVar IF com="" THEN LEAVE IF com="AUTO" THEN Mode_Auto=1; ELSE IF com="REQ" THEN Mode_REQ=1; ELSE IF com="NAME" THEN DO PARSE VAR InputVar '"'Datei'"' PrefFile='"'Datei'"' END END IF Mode_Auto=1 THEN DO Datei=PrefFile END ELSE DO SetBasicScreen Front FileSelect "Name" PrefFile "TITLE 'Wählen Sie die zu ladende Datei' PTEXT 'Laden'" IF RC~=0 THEN LEAVE Datei='"'RESULT'"' END IF F_MultiAnim=1 THEN DO WorkAnim2=GetAnimReg(WorkAnim) IF WorkAnim2="" THEN LEAVE F_NewAnim=1 /** neue Anim vortäuschen **/ SwapAnim WorkAnim2 "MASTER" END ret=RunA(Datei,F_NewAnim,WorkAnim) IF ret=0 THEN DO IF F_MultiAnim=1 THEN DO SelectAnim WorkAnim2 GetAnimInfo "MULTI" PARSE VAR RESULT . "NAME" d "FRAMES" frames . IF frames>1 THEN DO SelectAnim "MASTER" GetMAnimList 2 MAList=RESULT DO FOREVER PARSE VAR MAList nr na MAList IF nr="" THEN LEAVE SelectAnim "MULTI" nr GetAnimRun 2 PARSE VAR RESULT "POS" start len . SetAnimRun "POS" start+frames len END END SetMAnimList "MOVE" WorkAnim2 "MASTER" SelectAnim "MASTER" END END ELSE DO IF F_MultiAnim=1 THEN DO CloseAnim "MASTER" SwapAnim WorkAnim2 "MASTER" SelectAnim "MASTER" END END LEAVE END SetPref "SCREENS ON" RequestStatus ON FailAt AltFail exit /*------------------------------------------------ Hauptroutine -------------------------------------------------*/ RunA: procedure DO ARG Datei,F_NewAnim,WorkAnim IF F_NewAnim=1 THEN F_SetName=1 ELSE F_SetName=0 IF GetVersion()="P" THEN DO PV=1 SetPref HBComp OFF LaceCompensation ON END; ELSE DO PV=0 SetPref LaceCompensation ON END DO FOREVER GetFileInfo "NAME" Datei IF RC~=0 THEN DO Message "'Unbekanntes Dateiformat'" LEAVE END PARSE VAR RESULT ."ID" AnimID . "FORMAT" ex ey et "VIEWMODE" eViewMode "FRAMES" frames . MAnimID=AnimID IF AnimID='MDHD' THEN F_SetName=0 f_F=0 IF CheckAnimIDChange(AnimID,1)=1 THEN DO MSRequester "TITLE '*** Laden ***'", "'FORMAT: "MAnimID "-" ex ey et eViewMode "'", "''", "'Ausgewählte Datei ist keine SSA-Animation.'", "'Soll die Datei in das SSA-Format umgewandelt werden?'", "PTEXT 'Umwandlung in SSA'", "'Ohne Umwandlung einladen'", "'Abbruch'" IF RC~=0 | RESULT=3 THEN LEAVE IF RESULT=1 THEN f_F=1 END IF ( f_F=1 ) | ((F_NewAnim=0) & (AnimID~='MDHD')) THEN DO F_FrameSeq=0 F_OneFrame=0 IF frames = 1 THEN DO F_SingleFrame=1 IF PV=1 THEN DO MSRequester "TITLE '*** Laden ***'", "'Ausgewählte Datei beinhaltet ein Einzelbild.'", "''", "'FORMAT: "MAnimID "-" ex ey et eViewMode "'", "''", "'Folgende Einzelbilder in eine SSA-Animation umwandeln.'", "''", "'Einzelbilder als Frame-Sequenz umwandeln. (keine Animation)'", "''", "'Standbild-Animationen für z.B. Titeleinblendung erzeugen.'", "'So können mehrere Standbilder mit einer Zwischenpause'", "'als Animation erzeugt und weiterbearbeitet werden.'", "PTEXT 'Umwandlung in SSA'", "'Frame-Sequenz (ILBM) [Zum Schneiden von Anims]'", "'Standbild-Animation erzeugen (SSA)'", "'Abbruch'" IF RC~=0 | RESULT=4 THEN LEAVE IF RESULT=2 THEN F_FrameSeq=1 IF RESULT=3 THEN F_OneFrame=1 END ELSE DO END END ELSE DO F_SingleFrame=0 END IF F_NewAnim=1 THEN DO IF F_OneFrame=0 THEN DO IF F_FrameSeq=0 & INDEX(eViewMode,"LACE")>0 THEN DO IF CheckAnimIDChange(AnimID,2)=1 THEN DO MSRequester "TITLE '*** Laden ***'", "'FORMAT: "MAnimID "-" ex ey et eViewMode "'", "'Animation beinhalten LACE und kann mit'", "'50/60Hz abgespielt werden.'", "'Soll die Anim flimmerfrei mit kleineren'", "'Geschwindigkeiten darstellbar sein,'", "'so muß der HB-Kompensator zugeschaltet werden.'", "PTEXT 'normal einladen'", "'mit HB-Kompensator einladen'", "'Abbruch'" IF RC~=0 | RESULT=3 THEN LEAVE IF RESULT=1 THEN SetPref "HBComp OFF LaceCompensation ON" ELSE IF RESULT=2 THEN SetPref "HBComp ON LaceCompensation OFF" END END END IF F_FrameSeq=1 THEN AnimID="ILBM" ELSE AnimID="SSA " IF INDEX(eViewMode,"LACE")=0 & AnimID~="ILBM" THEN DO IF MS_NoLace()=1 THEN LEAVE END OpenAnim "MASTER ID" AnimID "FORMAT" ex ey et "VIEWMODE" eViewMode IF RC~=0 THEN LEAVE END IF F_OneFrame=1 THEN DO INTRequest "'Geben Sie ein, wie lange das'", "'Standbild angezeigt werden soll.'", "'In dieser Zeitspanne können Effekte,'", "'wie 2P-Bewegung, angewendet werden.'", "'(50 = 1 Sekunde)' 50" FrameCount=RESULT IF RC~=0 | FrameCount<2 THEN LEAVE RequestStatus OFF LoadAnim "MASTER NAME" Datei "FRAMES 1" IF RC~=0 THEN LEAVE IF F_NewAnim=0 THEN DO LoadAnim "MASTER NAME" Datei "FRAMES 1" FrameCount=FrameCount-1 END SelectAnim MASTER ViewFrame 99999 Record INSERT FrameCount-1 SetArea FULL END ELSE IF F_SingleFrame=1 THEN DO INTRequest "'Geben Sie die Anzahl'", "'der vorhandenen Bilder ein.' 1" FrameCount=RESULT IF RC~=0 | FrameCount<2 THEN LEAVE LoadAnim "MASTER NAME" Datei "FRAMES" FrameCount SelectAnim MASTER SetArea FULL END ELSE DO LoadAnim WorkAnim "NAME" Datei IF RC~=0 THEN LEAVE RequestStatus OFF Record Area IF RC~=0 THEN LEAVE CloseAnim WorkAnim SelectAnim MASTER END END ELSE LoadAnim "MASTER NAME" Datei IF F_SetName=1 THEN DO PARSE VAR Datei '"'Datei'"' IF Length(Datei)>34 THEN Datei=Right(Datei,34) SetMAnimList "NAME" "'"Datei"'" END LEAVE END RETURN(RC) END /*------------------------------------ Freies Animationsregister ermitteln. -------------------------------------*/ GetAnimReg: procedure DO ARG IReg WorkAnim="" DO FOREVER WorkAnim="SOURCE_A" IF IReg~=WorkAnim & TestReg(WorkAnim)=0 THEN LEAVE WorkAnim="SOURCE_B" IF IReg~=WorkAnim & TestReg(WorkAnim)=0 THEN LEAVE WorkAnim="SOURCE_C" IF IReg~=WorkAnim & TestReg(WorkAnim)=0 THEN LEAVE WorkAnim="SOURCE_D" IF IReg~=WorkAnim & TestReg(WorkAnim)=0 THEN LEAVE WorkAnim="" LEAVE END IF WorkAnim="" THEN DO a="" WorkAnim="SOURCE_A" IF IReg~=WorkAnim THEN a=a WorkAnim WorkAnim="SOURCE_B" IF IReg~=WorkAnim THEN a=a WorkAnim WorkAnim="SOURCE_C" IF IReg~=WorkAnim THEN a=a WorkAnim WorkAnim="SOURCE_D" IF IReg~=WorkAnim THEN a=a WorkAnim SelectAnim a, "TITLE 'Wählen Sie ein Arbeits-Register zur@Zwischenspeicherung aus.'", "REQ" IF RC > 1 THEN LEAVE WorkAnim=RESULT CloseAnim WorkAnim IF RC > 1 THEN LEAVE END RETURN (WorkAnim) END TestReg: procedure DO ARG Reg GetAnimInfo Reg IF RESULT~="" THEN RETURN(1) RETURN (0) END GetVersion: procedure DO Information PARSE VAR RESULT . "VERSION:" cl . RETURN (cl) END CheckAnimIDChange: procedure DO ARG ID,Mode IF Mode=1 THEN DO IF ID='MDHD' | ID='SSA ' | ID='SSAD' | ID='SSA5' THEN RETURN(0) ELSE RETURN(1) END ELSE IF Mode=2 THEN DO IF ID='ADO1' THEN RETURN(0) ELSE RETURN(1) END RETURN (0) END MS_NoLace: procedure expose MAnimID ex ey et eViewMode DO MSRequester "TITLE '*** Anim laden ***'", "'Animation beinhalten kein LACE => NICHT ABSPIELBAR'", "'FORMAT: "MAnimID "-" ex ey et eViewMode "'", "PTEXT 'Umwandlung in LACE + Korrektur (Verhältnis)'", "'Umwandlung in LACE (Bild verkleinert sich)'", "'Abbruch'" IF RC~=0 | RESULT=3 THEN RETURN(1) IF RESULT=1 THEN DO SetPref "HBComp OFF LaceCompensation ON" ey=ey*2 END ELSE IF RESULT=2 THEN SetPref "HBComp OFF LaceCompensation OFF" eViewMode=eViewMode "LACE" RETURN (0) END