' *** TINYSHOW.LST *** 2nd GFA-Manual, page 20-31 > PROCEDURE tiny_load_show(tiny$,VAR loaded!) ' ' *** Put (compressed) Tiny-picture directly on physical screen ' *** *.TNY = Low, *.TN2 = Medium, *.TN3 = High ' *** Palette of Tiny-picture is used (save current palette first!) ' *** Resolution is checked ' *** Colour animation is ignored ' *** Channel #90 is used for loading ' *** Variabele loaded!=TRUE if successful ' *** Original Procedure by Jim Burton (improved, but still slow...) ' ' *** Standard: high.res! med.res! low.res! physbase% ' *** Procedure: Program_exit ' LOCAL m$,k,res$ LOCAL pal$,le$,code$,buffer$,res%,lcode%,ldata%,ptrco%,ptrda% LOCAL ix%,ixpic%,ixcode%,ixdata%,pword%,coval%,i% ' LET loaded!=FALSE ' IF EXIST(tiny$) pal$=STRING$(32,0) ! palette le$=STRING$(4,0) ! code table and data table length code$=STRING$(16000,0) ! code table buffer buffer$=STRING$(32000,0) ! data word buffer OPEN "I",#90,tiny$ res%=INP(#90) ! resolution IF (high.res! AND res%=2) OR (med.res! AND res%=1) OR (low.res! AND res%=0) BGET #90,V:pal$,32 BGET #90,V:le$,4 lcode%=DPEEK(V:le$) ! length of code table ldata%=DPEEK(V:le$+2)*2 ! length of data area BGET #90,V:code$,lcode% ! read in code table BGET #90,V:buffer$,ldata% ! read in the data words CLOSE #90 ptrco%=V:code$ ! remove pointer evaluation from loops ptrda%=V:buffer$ ix%=160 FOR i%=0 TO 15 ! install palette SETCOLOR i%,WORD{ADD(V:pal$,MUL(i%,2))} NEXT i% CLS CLR ixpic%,ixcode%,ixdata%,pword% WHILE ixcode%=32000 ADD ixpic%,8 SUB ixpic%,32000 IF ixpic%>=ix% ADD ixpic%,2 SUB ixpic%,ix% ENDIF ENDIF NEXT i% ELSE IF coval%=1 coval%=ADD(MUL(BYTE{SUCC(ADD(ptrco%,ixcode%))},256),BYTE{ADD(ADD(ptrco%,ixcode%),2)}) ADD ixcode%,3 FOR i%=1 TO coval% pword%=WORD{ADD(ptrda%,ixdata%)} ADD ixdata%,2 WORD{ADD(physbase%,ixpic%)}=pword% ADD ixpic%,ix% IF ixpic%>=32000 ADD ixpic%,8 SUB ixpic%,32000 IF ixpic%>=ix% ADD ixpic%,2 SUB ixpic%,ix% ENDIF ENDIF NEXT i% ELSE IF coval%<128 INC ixcode% pword%=WORD{ADD(ptrda%,ixdata%)} ADD ixdata%,2 FOR i%=1 TO coval% WORD{ADD(physbase%,ixpic%)}=pword% ADD ixpic%,ix% IF ixpic%>=32000 ADD ixpic%,8 SUB ixpic%,32000 IF ixpic%>=ix% ADD ixpic%,2 SUB ixpic%,ix% ENDIF ENDIF NEXT i% ELSE INC ixcode% coval%=SUB(256,coval%) FOR i%=1 TO coval% pword%=WORD{ADD(ptrda%,ixdata%)} ADD ixdata%,2 WORD{ADD(physbase%,ixpic%)}=pword% ADD ixpic%,ix% IF ixpic%>=32000 ADD ixpic%,8 SUB ixpic%,32000 IF ixpic%>=ix% ADD ixpic%,2 SUB ixpic%,ix% ENDIF ENDIF NEXT i% ENDIF ENDIF ENDIF WEND LET loaded!=TRUE CLR pal$,le$,code$,buffer$ ~FRE(0) ! collect garbage ELSE CLR pal$,le$,code$,buffer$ ~FRE(0) ! collect garbage CLOSE #90 IF res%=0 res$="Low " ELSE IF res%=1 res$="Medium " ELSE IF res%=2 res$="High " ENDIF m$=" *** Error ***| |File "+RIGHT$(tiny$,LEN(tiny$)-RINSTR(tiny$,"\")) m$=m$+" is for |"+res$+"resolution!" ALERT 3,m$,1,"Continue|Quit",k IF k=2 @program_exit ENDIF ENDIF ELSE m$=" *** Error ***|File "+RIGHT$(tiny$,LEN(tiny$)-RINSTR(tiny$,"\")) m$=m$+" was|not found by the |Procedure Tiny_load_show" ALERT 3,m$,1,"Continue|Quit",k IF k=2 @program_exit ENDIF ENDIF ' RETURN ' ********* '