home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / Programming / AllPlaton / Unsorted / CreateGfxIndex.AMOS / CreateGfxIndex.amosSourceCode
Encoding:
AMOS Source Code  |  2001-08-10  |  12.5 KB  |  477 lines

  1. Set Buffer 100
  2. Screen Open 0,640,256,2,$8000
  3. Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 
  4. Centre "CreateGfxIndex V1.3 (06-Dec-97) by Chris Hodges"
  5. Print : Print 
  6. Gosub ACQUIREPREFS
  7. Print "Counting files:";
  8.  Extension_8_063A SOURCE$
  9. MXFIL=0
  10. Do 
  11.   F$= Extension_8_064C 
  12.   Exit If F$=""
  13.   Inc MXFIL
  14. Loop 
  15. Print MXFIL;" files found."
  16. Print 
  17. Dim FI$(MXFIL)
  18. Gosub LOOKFILES
  19. Gosub LAYOUT
  20. CMAPX=8
  21. INNUM=1
  22. COUFI=(INNUM-1)*14*7
  23. Repeat 
  24.   F$=Mid$(FI$(COUFI),32)
  25.   Exit If F$=""
  26.   Gosub CREATEONEINDEX
  27. '  Gosub IMAGEFILTER 
  28.   Home : Cline : Print "Saving PPM Index..."
  29.   FF$=BASENAME$+ Extension_8_0EB8(INNUM,2)
  30.    Extension_8_0472 FF$+".ppm",9
  31.   If CMAPX
  32.     If CMAPX=24
  33.       Home : Cline : Print "Creating 24 Bit IFF Index..."
  34.       Exec COMPATH$+"ppmtoilbm -aga "+FF$+".ppm >"+FF$+".24b"
  35.     Else 
  36.       Home : Cline : Print "Creating CMAPx Index..."
  37.       Exec COMPATH$+"ppm2aga "+FF$+".ppm "+FF$+".iff -E -CMAP"+ Extension_8_0EC8(CMAPX,1)
  38.     End If 
  39.   Else 
  40.     Home : Cline : Print "Creating HAM8 Index..."
  41.     Exec COMPATH$+"ppm2aga "+FF$+".ppm "+FF$+".iff"
  42.   End If 
  43.   Inc INNUM
  44. Until F$=""
  45. Trap Kill "T:Temp.ppm"
  46. Trap Kill "T:Temp2.ppm"
  47. Cls : Print "Processing finished." : Wait Key 
  48. Screen Close 0
  49. End 
  50. ACQUIREPREFS:
  51.   THBX=144 : THBY=48 : THBSX=2 : THBSY=4
  52.   THBX=180 : THBY=68 : THBSX=2 : THBSY=2
  53. '  THBX=200 : THBY=66 : THBSX=4 : THBSY=4
  54. '  THBX=96 : THBY=128 : THBSX=0 : THBSY=0
  55.   SOURCE$=Fsel$("","PleaseDontChange","Select image directory you","want to create index pictures of")
  56.   If SOURCE$="" Then Stop 
  57.   SOURCE$= Extension_8_03E0(SOURCE$)
  58.   Print "Source path: ";SOURCE$
  59.   'SOURCE$="DH0:Storage/Bootlogos" 
  60.   BASENAME$=Fsel$("","!Index","Enter name of target ppm file","")
  61.   If BASENAME$="" Then Stop 
  62.   Print "Basename: ";BASENAME$
  63.   'BASENAME$="Work:!Index" 
  64.   COMPATH$="Work:Visual/Tools/Commands/"
  65.   If Exist("Commands")
  66.     COMPATH$="Commands/"
  67.   End If 
  68.   Print "Path for cli-commands: ";COMPATH$
  69.   Print 
  70. '  Put Key "1428"
  71.   Put Key "1274"
  72.   Input "Enter maximum width: ";MXSCX
  73.   Put Key "980"
  74.   Input "Enter maximum height: ";MXSCY
  75.   Print "HAM, 32 colours or greyscale preview (H/C/G): ";
  76.   Repeat : Multi Wait : K$=Upper$(Inkey$) : Until K$="H" or K$="C" or K$="G"
  77.   Print K$
  78.   If K$="C" Then HAM=0
  79.   If K$="H" Then HAM=1
  80.   If K$="G" Then HAM=2
  81.   Print "Add filename? (Y/N) ";
  82.   Repeat : Multi Wait : K$=Upper$(Inkey$) : Until K$="Y" or K$="N"
  83.   Print K$
  84.   If K$="Y" Then FILNAM=1 Else FILNAM=0
  85.   Print "Add image size information? (Y/N) ";
  86.   Repeat : Multi Wait : K$=Upper$(Inkey$) : Until K$="Y" or K$="N"
  87.   Print K$
  88.   If K$="Y" Then IMSIZE=1 Else IMSIZE=0
  89.   Print "Deep pre-examination of files in directory? (Y/N) ";
  90.   Repeat : Multi Wait : K$=Upper$(Inkey$) : Until K$="Y" or K$="N"
  91.   Print K$
  92.   If K$="Y" Then DEEP=1 Else DEEP=0
  93.   Curs Off 
  94.   Print 
  95. Return 
  96. LOOKFILES:
  97.   If DEEP
  98.     Print "Checking files for valid pictures..."
  99.     Print 
  100.   End If 
  101.    Extension_8_063A SOURCE$
  102.   NUMFI=0
  103.   Reserve As Work 10,16
  104.   TST=1
  105.   Do 
  106.     F$= Extension_8_064C 
  107.     Exit If F$=""
  108.     If Extension_8_0688 <0
  109.       DIT=0
  110.       If DEEP
  111.         Open In 1, Extension_8_03EC(SOURCE$)+F$
  112.            Extension_8_17A6 1 To Start(10),16
  113.         Close 1
  114.         If Leek(Start(10)+8)= Extension_8_0998("ILBM")
  115.           DIT=1
  116.         Else 
  117.           If Leek(Start(10)+6)= Extension_8_0998("JFIF")
  118.             DIT=1
  119.           Else 
  120.             If Leek(Start(10))= Extension_8_0998("GIF8")
  121.               DIT=1
  122.             Else 
  123.               Trap Kill "T:Temp2.ppm"
  124.               Exec COMPATH$+'xtoilbm "'+ Extension_8_03EC(SOURCE$)+F$+'" T:Temp2.ppm'
  125.               PIC$="T:Temp2.ppm"
  126.               If Exist(PIC$)
  127.                 DIT=1
  128.               End If 
  129.             End If 
  130.           End If 
  131.         End If 
  132.       Else 
  133.         DIT=1
  134.       End If 
  135.       If DIT
  136.         FI$(NUMFI)=Upper$(F$)+Space$(31-Len(F$))+F$
  137.         Inc NUMFI
  138.       End If 
  139.     End If 
  140.     If DEEP
  141.       Print "Valid:";NUMFI;"...(";TST;" tested)"
  142.       Cup 
  143.     End If 
  144.     Inc TST
  145.   Loop 
  146.   XXX=Free
  147.   Print "Number of files to process:";NUMFI
  148.   For A=NUMFI To MXFIL
  149.     FI$(A)=Chr$(255)
  150.   Next 
  151.   Sort FI$(0)
  152.   Print : Print 
  153.   Print "Press any key to continue..."
  154.   Wait Key 
  155. Return 
  156. LAYOUT:
  157.   If HAM=0 Then Screen Open 0,320,256,32,0
  158.   If HAM=1 Then Screen Open 0,320,256,4096,0
  159.   If HAM=2 Then Screen Open 0,320,256,16,0
  160.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 
  161.    Extension_8_05B0 "small",6
  162.   If HAM
  163.     For A=0 To 15
  164.       Colour A,A*$111
  165.     '  Ink A : Bar A*10,20 To A*10+19,29 
  166.     Next 
  167.   Else 
  168.     For A=0 To 31
  169.       Colour A, Extension_8_0A0E((A/8)*5,((A/2) mod 4)*5,(A and 1)*15)
  170.     Next 
  171.   End If 
  172.   Pen Extension_8_1504($FFF)
  173.   COUFI=0
  174.   Repeat 
  175.     Multi Wait : View 
  176.     Gosub RENDERLAYOUT
  177.     Home : Cline : Print "Width:";THBX;" Height:";THBY;"  SpcX:";THBSX;" SpcY:";THBSY
  178.     Print "Use Cursor to change or Space."
  179.     Repeat : Multi Wait : K$=Inkey$ : Until K$<>""
  180.     If Key Shift=0
  181.       If K$=Cleft$ : Dec THBX : End If 
  182.       If K$=Cright$ : Inc THBX : End If 
  183.       If K$=Cup$ : Dec THBY : End If 
  184.       If K$=Cdown$ : Inc THBY : End If 
  185.     Else 
  186.       If K$=Cleft$ : Dec THBSX : End If 
  187.       If K$=Cright$ : Inc THBSX : End If 
  188.       If K$=Cup$ : Dec THBSY : End If 
  189.       If K$=Cdown$ : Inc THBSY : End If 
  190.     End If 
  191.   Until K$=" "
  192.   Home : Cline : Print : Cline 
  193. Return 
  194. CREATEONEINDEX:
  195.   Gosub RENDERLAYOUT
  196.   Reserve As Work 9,TARX*TARY*3+Len(TAR$)
  197.   ST=Start(9)
  198.   Poke$ ST,TAR$
  199.   BMP=ST+Len(TAR$)
  200.   IX=0 : IY=0
  201.   Do 
  202.     K$=Inkey$ : If K$=Chr$(27) Then F$="" : Exit 
  203.     F$=Mid$(FI$(COUFI),32) : Inc COUFI
  204.     Exit If F$=""
  205.     DIT=0
  206.     Reserve As Work 10,16
  207.     Open In 1, Extension_8_03EC(SOURCE$)+F$
  208.        Extension_8_17A6 1 To Start(10),16
  209.     Close 1
  210.     If Leek(Start(10)+8)= Extension_8_0998("ILBM")
  211.       DIT=1
  212.       PIC$= Extension_8_03EC(SOURCE$)+F$
  213.       Erase 10
  214.     Else 
  215.       If Leek(Start(10)+6)= Extension_8_0998("JFIF")
  216.         Erase 10
  217.         Home : Cline : Print "Converting ";F$;" (jpeg) to ppm..."
  218.         Trap Kill "T:Temp.ppm"
  219.         Exec COMPATH$+'djpeg "'+ Extension_8_03EC(SOURCE$)+F$+'" T:Temp.ppm'
  220.         If Exist("T:Temp.ppm")
  221.           DIT=2
  222.         End If 
  223.       Else 
  224.         If Leek(Start(10))= Extension_8_0998("GIF8")
  225.           Erase 10
  226.           Home : Cline : Print "Converting ";F$;" (gif) to ppm..."
  227.           Trap Kill "T:Temp.ppm"
  228.           Exec COMPATH$+'giftopnm "'+ Extension_8_03EC(SOURCE$)+F$+'" >T:Temp.ppm'
  229.           If Exist("T:Temp.ppm")
  230.             DIT=2
  231.           End If 
  232.         Else 
  233.           Erase 10
  234.           Home : Cline : Print "Converting ";F$;" to ilbm..."
  235.           Trap Kill "T:Temp2.ppm"
  236.           Exec COMPATH$+'xtoilbm "'+ Extension_8_03EC(SOURCE$)+F$+'" T:Temp2.ppm'
  237.           PIC$="T:Temp2.ppm"
  238.           If Exist(PIC$)
  239.             DIT=1
  240.           End If 
  241.         End If 
  242.       End If 
  243.     End If 
  244.     Erase 10
  245.     If DIT
  246.       If DIT<2
  247.         Home : Cline : Print "Converting ";F$;" to ppm..."
  248.         Exec COMPATH$+'ilbmtoppm "'+PIC$+'" >T:Temp.ppm'
  249.       End If 
  250. '      If IMSIZE 
  251.         Reserve As Work 10,32
  252.         Open In 1,"T:Temp.ppm"
  253.           DAT$=Input$(1,32)
  254.         Close 1
  255.         D$= Extension_8_16B6(DAT$,1,Chr$(10))
  256.         OGX=Val( Extension_8_16B6(D$,0," "))
  257.         OGY=Val( Extension_8_16B6(D$,1," "))
  258. '      End If  
  259.       If OGX<>THBX or OGY<>THBY
  260.         Home : Cline : Print "Creating thumbnail of ";F$;"..."
  261.         Exec COMPATH$+"pnmscale -width"+Str$(THBX)+" -height"+Str$(THBY)+" T:Temp.ppm >T:Temp2.ppm"
  262.       Else 
  263.         Home : Cline : Print "Image has got right size..."
  264.         Trap Kill "T:Temp2.ppm"
  265.         Rename "T:Temp.ppm" To "T:Temp2.ppm"
  266.       End If 
  267.       Gosub INSERTTHUMB
  268.       Add IX,THBX+THBSX
  269.       If IX>TARX-THBX : IX=0 : Add IY,THBY+THBSY : End If 
  270.       If IY>TARY-THBY : Exit : End If 
  271.     End If 
  272.   Loop 
  273. Return 
  274. RENDERLAYOUT:
  275.   Cls 
  276.   IX=0 : IY=0
  277.   Ink Extension_8_1504($FFF),0
  278.   Box 0,16 To MXSCX/4,MXSCY/4+16
  279.   NUMX=MXSCX/(THBX+THBSX) : NUMY=MXSCY/(THBY+THBSY)
  280.   TARX=NUMX*THBX+(NUMX-1)*THBSX
  281.   TARY=NUMY*THBY+(NUMY-1)*THBSY
  282.   For A=COUFI+1 To NUMFI
  283.     X=IX : Y=IY
  284.     Box X/4,Y/4+16 To(X+THBX-1)/4,(Y+THBY-1)/4+16
  285.     T$= Extension_8_0EB8(A,3)
  286.     LT=Text Length(T$)
  287.     If LT>THBX : LT=THBX : End If 
  288.     X=IX+1+THBX/2
  289.     Y=IY+THBY/2
  290.     Text X/4-LT/2,Y/4+13+Text Base,T$
  291.     Add IX,THBX+THBSX
  292.     NTARY=IY+THBY
  293.     If IX>TARX-THBX Then IX=0 : Add IY,THBY+THBSY
  294.     Exit If IY>TARY-THBY
  295.   Next 
  296.   TARY=NTARY
  297.   TAR$="P6"+Chr$(10)+(Str$(TARX)-" ")+Str$(TARY)+Chr$(10)+"255"+Chr$(10)
  298. Return 
  299. INSERTTHUMB:
  300.    Extension_8_0456 "T:Temp2.ppm",10
  301.   FFB=Start(10)
  302.   DAT$=Peek$(FFB,32)
  303.   D$= Extension_8_16B6(DAT$,1,Chr$(10))
  304.   OX=Val( Extension_8_16B6(D$,0," "))
  305.   OY=Val( Extension_8_16B6(D$,1," "))
  306.   NUMLF=0
  307.   Repeat 
  308.     If Peek(FFB)=10
  309.       Inc NUMLF
  310.     End If 
  311.     Inc FFB
  312.   Until NUMLF=3
  313.   X=IX : Y=IY
  314.   Ink 0
  315.   Bar X/4,Y/4+16 To(X+OX-1)/4,(Y+OY-1)/4+16
  316.   Gosub IMAGECOPY
  317.   If HAM=2 Then Gosub GREYTHUMB
  318.   If HAM=1 Then Gosub HAMTHUMB
  319.   If HAM=0 Then Gosub THUMBC32
  320.   If FILNAM Then T$=((F$-".gif")-".iff")-".jpg" : X=IX : Y=IY+1 : Gosub WRITETEXT
  321.   If IMSIZE
  322.     T$=(Str$(OGX)+"x"+Str$(OGY))-" "
  323.     X=IX : Y=IY+THBY-8 : Gosub WRITETEXT
  324.   End If 
  325. Return 
  326. IMAGECOPY:
  327.   AD=FFB
  328.   If Left$(DAT$,2)="P6"
  329.     For YY=0 To OY-1
  330.       For XX=0 To OX-1
  331.         TA=BMP+(X+XX)*3+(Y+YY)*TARX*3
  332.         Poke TA,Peek(AD) : Poke TA+1,Peek(AD+1) : Poke TA+2,Peek(AD+2)
  333.         Add AD,3
  334.       Next 
  335.     Next 
  336.   End If 
  337.   If Left$(DAT$,2)="P5"
  338.     For YY=0 To OY-1
  339.       For XX=0 To OX-1
  340.         TA=BMP+(X+XX)*3+(Y+YY)*TARX*3
  341.         PPPP=Peek(AD) : Inc AD
  342.         Poke TA,PPPP : Poke TA+1,PPPP : Poke TA+2,PPPP
  343.       Next 
  344.     Next 
  345.   End If 
  346. Return 
  347. IMAGEFILTER:
  348.   Home : Cline : Print "Filtering image..."
  349.   AD=BMP
  350.   THRES=56
  351.   For CNT=1 To TARX*TARY
  352.     C0=Peek(AD)
  353.     C1=Peek(AD+1)
  354.     C2=Peek(AD+2)
  355.     If(C0<THRES and C1<THRES and C2<THRES)
  356.       Poke AD,0
  357.       Poke AD+1,0
  358.       Poke AD+2,0
  359.     End If 
  360.     Add AD,3
  361.   Next 
  362. Return 
  363. HAMTHUMB:
  364.   AD=FFB
  365.   If Left$(DAT$,2)="P6"
  366.     For YY=0 To OY-1 Step 4
  367.       HAMA= Extension_8_16E6((X/4)-1,(Y+YY)/4+16)
  368.       If HAMA<0 : HAMA=Colour(0) : End If 
  369.       For XX=0 To OX-1
  370.         If(XX mod 4)=0
  371.           HAMP= Extension_8_09FC( Extension_8_0A0E(Peek(AD)/16,Peek(AD+1)/16,Peek(AD+2)/16),HAMA)
  372.            Extension_8_0388(X+XX)/4,(Y+YY)/4+16,HAMP
  373.           HAMA= Extension_8_09E8(HAMP,HAMA)
  374.         End If 
  375.         Add AD,3
  376.       Next 
  377.       Add AD,OX*9
  378.     Next 
  379.   End If 
  380.   If Left$(DAT$,2)="P5"
  381.     For YY=0 To OY-1 Step 4
  382.       HAMA= Extension_8_16E6((X/4)-1,(Y+YY)/4+16)
  383.       If HAMA<0 : HAMA=Colour(0) : End If 
  384.       For XX=0 To OX-1
  385.         If(XX mod 4)=0
  386.           HAMP= Extension_8_09FC((Peek(AD)/16)*$111,HAMA)
  387.            Extension_8_0388(X+XX)/4,(Y+YY)/4+16,HAMP
  388.           HAMA= Extension_8_09E8(HAMP,HAMA)
  389.         End If 
  390.         Inc AD
  391.       Next 
  392.       Add AD,OX*3
  393.     Next 
  394.   End If 
  395. Return 
  396. THUMBC32:
  397.   AD=FFB
  398.   If Left$(DAT$,2)="P6"
  399.     For YY=0 To OY-1 Step 4
  400.       For XX=0 To OX-1
  401.         If(XX mod 4)=0
  402.            Extension_8_0388(X+XX)/4,(Y+YY)/4+16, Extension_8_1504( Extension_8_0A0E(Peek(AD)/16,Peek(AD+1)/16,Peek(AD+2)/16))
  403.         End If 
  404.         Add AD,3
  405.       Next 
  406.       Add AD,OX*9
  407.     Next 
  408.   End If 
  409.   If Left$(DAT$,2)="P5"
  410.     For YY=0 To OY-1 Step 4
  411.       For XX=0 To OX-1
  412.         If(XX mod 4)=0
  413.            Extension_8_0388(X+XX)/4,(Y+YY)/4+16, Extension_8_1504((Peek(AD)/16)*$111)
  414.         End If 
  415.         Inc AD
  416.       Next 
  417.       Add AD,OX*3
  418.     Next 
  419.   End If 
  420. Return 
  421. GREYTHUMB:
  422.   AD=FFB
  423.   If Left$(DAT$,2)="P6"
  424.     For YY=0 To OY-1 Step 4
  425.       For XX=0 To OX-1
  426.         If(XX mod 4)=0
  427.            Extension_8_0388(X+XX)/4,(Y+YY)/4+16,Min((Peek(AD)+Peek(AD+1)+Peek(AD+2)+ Extension_8_11B8(24)),765)/48
  428.         End If 
  429.         Add AD,3
  430.       Next 
  431.       Add AD,OX*9
  432.     Next 
  433.   End If 
  434.   If Left$(DAT$,2)="P5"
  435.     For YY=0 To OY-1 Step 4
  436.       For XX=0 To OX-1
  437.         If(XX mod 4)=0
  438.            Extension_8_0388(X+XX)/4,(Y+YY)/4+16,Min((Peek(AD)+ Extension_8_11B8(8)),255)/16
  439.         End If 
  440.         Inc AD
  441.       Next 
  442.       Add AD,OX*3
  443.     Next 
  444.   End If 
  445. Return 
  446. WRITETEXT:
  447.   Home : Cline 
  448.   Ink 1,0 : Text 0,Text Base,T$
  449.   LT=Text Length(T$)
  450.   If LT>THBX : LT=THBX : End If 
  451.   Add X,1+(THBX-LT)/2
  452.   For YY=0 To 5
  453.     For XX=0 To LT-1
  454.       P= Extension_8_039E(XX,YY)
  455.       If P
  456.         TA=BMP+(X+XX+1)*3+(Y+YY)*TARX*3
  457.         Poke TA,0 : Poke TA+1,0 : Poke TA+2,0
  458.         TA=BMP+(X+XX)*3+(Y+YY+1)*TARX*3
  459.         Poke TA,0 : Poke TA+1,0 : Poke TA+2,0
  460.         TA=BMP+(X+XX+2)*3+(Y+YY+1)*TARX*3
  461.         Poke TA,0 : Poke TA+1,0 : Poke TA+2,0
  462.         TA=BMP+(X+XX+1)*3+(Y+YY+2)*TARX*3
  463.         Poke TA,0 : Poke TA+1,0 : Poke TA+2,0
  464.       End If 
  465.     Next 
  466.   Next 
  467.   For YY=0 To 5
  468.     For XX=0 To LT-1
  469.       P= Extension_8_039E(XX,YY)
  470.       If P
  471.         TA=BMP+(X+XX+1)*3+(Y+YY+1)*TARX*3
  472.         Poke TA,255 : Poke TA+1,255 : Poke TA+2,255
  473.       End If 
  474.     Next 
  475.   Next 
  476.   Home : Cline 
  477. Return