   - LoadILBM-SaveACBM  *  -  von Carolyn Scheppner  CBM  04/86  "  -  Eindeutschung Ki 03.12.86     ' :" ( s.a. Bitte-lesen, LoadACBM,    :"   SaveILBM )     . :" Dieses Programm ldt eine Grafikdatei  , :" im IFF-ILBM-Format (aus Graphicraft  , :" oder DeluxePaint o..) und zeigt es  - :" auf einem eigenen Schirm/Fenster an.  - :" Wird ein Farbenzyklus-Chunk gefunden  , :" (Chunk = benamter Datei-Abschnitt),  , :" wird auch der zyklische Farbwechsel   :" ausgefhrt.     * :" Auf Wunsch wird das Bild in einem  & :" ACBM-Format neu abgespeichert  * :" (ACBM = Amiga Contiguous BitMap),  ' :" das schneller von Basic aus zu  ' :" laden ist (z.B. mit LoadACBM).  ) :" Das ACBM-Format hnelt dem ILBM-  ' :" Format, nur da der BODY-Chunk  ' :" durch einen ABIT-Chunk ersetzt  ' :" ist. ABIT enthlt nacheinander  ) :" die in sich kompletten BitPlane-  & :" Daten, whrend sie beim BODY-  ) :" Chunk jeweils bitweise aus allen  ) :" BitPlanes zusammengeholt werden.     & :" Bentigt werden .bmap-Dateien  " :" zu exec, graphics und dos  $ :" (neues ConvertFD benutzen).       k:     9  "LoadILBM-SaveACBM --- ILBM laden und konvertieren"     ;  " Dieses Programm ldt eine IFF-ILBM-Grafikdatei (aus  ;  " Graphicraft, dPaint, Aegis,...), zeigt das Bild und  :  " speichert es auf Wunsch im ACBM-Format (siehe Kom-  8  " mentarzeilen), wonach es von Basic aus schneller    " geladen werden kann.     =  " Nichtkomprimierte ILBM-Dateien (z.B. aus Graphicraft)  =  " werden relativ schnell geladen, komprimierte (wie aus  '  " dPaint, Aegis) dagegen langsam.  :  " Whrend des Ladens ist der Bildschirm sichtbar, um  +  " den Vorgang gut verfolgen zu knnen  1  " (Verdunkelung per REM-Befehl lahmgelegt).         "   &(),  %( ),  %( )     - :" Variablen fr zyklischen Farbwechsel  1 :" mssen angelegt werden, da diese Version  / :" von SaveACBM immer einen dafr zustn-  & :" digen CCRT-Chunk abspeichert.    %        %      %        &       &           5  - Funktionen aus dos.library                         &        &        &     - xClose returns no value     #  - Functionen aus exec.library      :&()      - FreeMem returns no value     ( : "Suchen der .bmap-Dateien ... ";    ":bmaps/dos.library"    ":bmaps/exec.library"     ":bmaps/graphics.library"    "Gefunden."  < : "ILBM-Dateiname (ggf. incl. Zugriffspfad) eingeben."     "( Beispiel: Heart.ILBM )"  C  "( Bitte nicht im ACBM-Format abspeichern, wenn Ihre Diskette  D  "  weniger als 41 KB frei hat.                               )  C  "( Zum Ansehen der ILBM-Datei ohne Abspeichern im ACBM-Format  ;  "  <RETURN> bei Frage nach ACBM-Dateiname drcken. )"          :  %  "   IFF-ILBM-Dateiname = "; n$    ( n$  "")         %  "       ACBM-Dateiname = "; $        !  - Laden des IFF-ILBM-Bildes    p$  ""  
    H     p$  ""          1  - Zyklischer Farbwechsel wie in Graphicraft        %    - Farben retten    K     v%   # %( K)  ( &( K))      %( K)   %( K)       - zyklischer Farbwechsel    K    P    %     
	          
	           !  ~&( O&,( %()), v%)  6 - "Pausen fr Wechselgeschwindigkeitseinstellung         &    	       &    	          - Farben restaurieren   !  ~&( O&,( %()), v%)            )  - Schirm als ACBM-Datei abspeichern  $  ( p$  "")  ( $"")    $  ""  
              :         N :  
     
          :         p$  ""    p$     $  ""    $              /  :  :" Farbwechsel rckwrts (backward)    %   %( %)        %   %     %( )   %( )       %( %)   %        -  :  :" Farbwechsel vorwrts (forward)    %   %( %)        %   %   %( )   %( )       %( %)   %             H:  + :" - Hierzu mssen folgende Variablen   :" - initialisiert sein:  ' :" -    ILBMname$ (IFF-Dateiname)     $ :" -  Variablen initialisieren    8$   n$    w&      A&      e      u                  f       #  - aus include/libraries/dos.h    - MODE_NEWFILE = 1006     - MODE_OLDFILE = 1005       /$   8$  ()    w&   &(( /$),)     w&     . p$  "ILBM-Datei nicht gefunden/lesbar."  
               * :" Grafik-Pufferspeicher reservieren    ?&        B&  h    A&   :&( B&, ?&)     A&     , p$  "Pufferspeicher nicht verfgbar."  
              D&   A&    G&   A&  x    >&   A&          +  - Eingabe sollte lauten  FORMnnnnILBM    &   &( w&, D&,)    L$  ""     K       L%  ( D&   K)   L$   L$  ( L%)           L$  "ILBM"    - p$  "Keine Standard-ILBM-Grafikdatei."  
            % :" ILBM-Datei Chunk-weise lesen       g:  ! :" - Chunk-Name/Lnge lesen   &   &( w&, D&,)   i&  ( D&  )   L$  ""    K       L%  ( D&   K)   L$   L$  ( L%)         ,   L$  "BMHD"   :BitMap-Header    e     &   &( w&, D&, i&)   V%   ( D&)   W%  ( D&  )   X%   ( D&  )     Y%   ( D&  
)   R%   ( D&  )   S%  ( D&  )      %   V%    %   R%     v%   ( X%)     /:" Genug freier Platz fr Videospeicher ?   m&  ()  ' &  (( R%) S%( X%))    m&   &   4 p$  "Rechner-Speicherplatz reicht nicht aus."  
            K       R%  @   K   K       S%      K   K     , R%, S%, X%, K  ! ,"LoadILBM-SaveACBM",,,     0 - Adressen von Screen-Structures ermitteln  
        > - Schirm whrend Ladevorgang dunkel (mit REM lahmgelegt)  / CALL LoadRGB4&(sViewPort&,ctab&,nColors%)        /  i  L$  "CMAP"   : Farb-Palette   u     &   &( w&, G&, i&)      - Farb-Palette aufbauen    K     v%     y%  ( G&( K))   z%  ( G&( K))   {%  ( G&( K))  % x%  ( y%)( z%)( {%)  ( >&( K)), x%          6  i  L$  "CAMG"   :Amiga ViewPort Modes        &   &( w&, D&, i&)   &  ( D&)        =  i  L$  "CCRT" q :Graphicraft-Farbzyklus-Daten        &   &( w&, D&, i&)   %     ( D&)   %   ( D&  )   %     ( D&  )   &    ( D&  )   &    ( D&  )        )  i  L$  "BODY"   :BitMap    f      ,  Y%   V  :Keine Komprimierung         W%   	       X%    &   &( )(  %)  " &   &( w&, &, %)     	          (|  Y%   9  :cmpByteRun1         W%   	       X%    &   &( )(  %)   %       ( %   %)   &   &( w&, D&,)   %  ( D&)    %   v  ) &   &( w&, &   %,  %)   %   %   %      %      &   &( w&, D&,)      %  ( D&)  $  K   %   %     %  ( & K), %        %   %     %       	    	  	|  1 p$  "Unbekanntes Komprimierungsverfahren."  
              
  i   *:" - Unbekannten Chunk-Typ berlesen    K     i&   &   &( w&, D&,)    . - wenn Lnge ungerade, noch 1 Byte lesen   ( i&  )   i&  ]    &   &( w&, D&,)                 )  - Fertig, wenn alle Chunks gelesen      e   u   f    
   }         &  - Lesen ok, nchsten Chunk lesen     &       g     $   &   ¡Z  : Lesefehler   p$  "Lesefehler."  
               *  - rLen& = 0    heit EOF (Dateiende)  '  ( e)  ( f)  ( u) ¡  1 p$  "Wichtige ILBM-Chunks nicht gefunden."  
                 }:    p$  ""        Farben einstellen     u ¢`     ~&( O&, >&, v%)           :     w&      +&( w&)  #   A&      `&( A&, B&)                   :  ( :" Speichert aktuelles Fenster ab.  " :" Folgende Variablen mssen   :" initialisiert sein:  ( :" -    ACBMname$ (ACBM-Dateiname)  ? :" - Zustzlich, falls Farbzyklusdaten zu speichern sind:  7 :" -    ccrtDir% (1,-1, oder 0 = kein Farbzyklus)  9 :" -    ccrtStart% (Niederwertiges Zyklus-Register)  9 :" -    ccrtEnd%   (Hherwertiges  Zyklus-Register)  2 :" -    ccrtSecs&  (Zyklus-Zeit in Sekunden)  7 :" -    ccrtMics&  (Zyklus-Zeit in Mikrosekunden)  	 :"    :"  ! :" - Format der ACBM-Datei:   :" -    LONG   "FORM"  / :" -    LONG   Lnge der restlichen Datei  ( :" -    LONG   "ACBM" (Format-Typ)  	 :"   > :" -    LONG   "BMHD" (Standard-IFF-BitMap-Header-Chunk)  / :" -    LONG   Lnge des BMHD-Chunks = 20  0 :" -    UWORD  w (Bitmap-Breite in Pixeln)  $ :" -    UWORD  h (Bitmap-Hhe)  ' :" -    WORD   x (Ecke ob li) = 0  ' :" -    WORD   y (Ecke ob li) = 0   :" -    UBYTE  nPlanes    :" -    UBYTE  masking = 0  $ :" -    UBYTE  compression = 0   :" -    UBYTE  pad1 = 0  ) :" -    UWORD  transparentColor = 0  ) :" -    UBYTE  xAspect (pixel) = 10  ) :" -    UBYTE  yAspect (pixel) = 11  < :" -    WORD   pageWidth (Screen-Breite in Pixeln)      7 :" -    WORD   pageHeight (Screen-Hhe in Pixeln)  	 :"   = :" -    LONG   "CMAP" (Standard-IFF-Farbpaletten-Chunk)  * :" -    LONG   Lnge des CMAP-Chunks  9 :" -    UBYTE  Stze von 3 UBYTEs (rot, grn, blau)  & :" -           (2^nPlanes Stze)  ; :" -           (rgb-Werte LINKSBNDIG in jedem UBYTE)   :"  2 :" -    LONG   "CAMG" (Amiga ViewPort Modes)  * :" -    LONG   Lnge des CAMG-Chunks   :" -    LONG   Mode   :"  ; :" -    LONG   "CCRT"  (Graphicraft-Farbzyklus-Daten)  > :" -    WORD   Richtung (1,-1, oder 0 = kein Farbzyklus)  < :" -    UBYTE  start  (niederwertiges Zyklus-Register)  < :" -    UBYTE  end    (hherwertiges  Zyklus-Register)  * :" -    LONG   Sekunden (Zykluszeit)  / :" -    LONG   Mikrosekunden (Zykluszeit)   :" -    WORD   pad = 0   :"  * :"      (Amiga-BitPlanes 0, 1, etc.)   :" -    LONG   "ABIT"  * :" -    LONG   Lnge des ABIT-Chunks  2 :" -           BitPlanes 0 bis (nPlanes - 1)  1 :" -           (jede mit  h * (w/8)  Bytes)           - Variablen initialisieren    8$   $    w&      A&         /$   8$  ()    w&   &(( /$),)     w&   ¬x  - $  "Ausgabedatei nicht beschreibbar."  
            ( :" Pufferspeicherplatz reservieren    ?&        B&  x    A&   :&( B&, ?&)     A&   ­2  1 $  "Pufferspeicherplatz nicht verfgbar."  
              G&   A&     0  - Adressen von Screen-Structures ermitteln  
           &      %       %  
      :" Chunk-Lngen ermitteln    &      &  ( U%)      &      &    !  &  ( R%)   S%   U%  G :" - FORMsize& = Chunk-Lngen + 8 Bytes fr Chunk-Header + "ACBM"  &  &   & & & & &,       - FORM-Header schreiben    L$  "FORM"     &   &( w&,( L$),)     &   &( w&,( &),)    L$  "ACBM"     &   &( w&,( L$),)        &   ¯  , $  "Schreibfehler beim FORM-Header."  
                 - BMHD-Chunk schreiben    L$  "BMHD"     &   &( w&,( L$),)     &   &( w&,( &),)     &   &( w&,( R%),)     &   &( w&,( S%),)     &   &( w&,( &),)    %  (    U%)     &   &( w&,( %),)     &   &( w&,( &),)     &   &( w&,( %),)     &   &( w&,( R%),)     &   &( w&,( S%),)        &   ±w  + $  "Schreibfehler beim BMHD-Chunk."  
                 - CMAP-Chunk schreiben    L$  "CMAP"     &   &( w&,( L$),)     &   &( w&,( &),)        - IFF-Farbpalette aufbauen     K     v%     x%  ( &  ( K))  &( G&( K)),( x%   )    $( G&( K)),( x%   )   (( G&( K)),( x%   )            &   &( w&, G&, &)        &   ³4  + $  "Schreibfehler beim CMAP-Chunk."  
                 - CAMG-Chunk schreiben    L$  "CAMG"     &   &( w&,( L$),)     &   &( w&,( &),)    &  ( O&   )     &   &( w&,( &),)        &   ´6  + $  "Schreibfehler beim CAMG-Chunk."  
               )  - CCRT-Chunk (Farbzyklus) schreiben    L$  "CCRT"     &   &( w&,( L$),)     &   &( w&,( &),)     &   &( w&,( %),)    %  (  %)   %     &   &( w&,( %),)     &   &( w&,( &),)     &   &( w&,( &),)     &   &( w&,( %),)        &   µ  + $  "Schreibfehler beim CCRT-Chunk."  
                     '  - ABIT-Chunk schreiben, Bitplanes    L$  "ABIT"     &   &( w&,( L$),)     &   &( w&,( &),)       &  ( R%  )   S%          U%   $ &   &( w&, &( ), &)    &   ·  6 $  "Fehler beim Schreiben der Bitplane"( )  
                      :       $  ""       :     w&      +&( w&)  #   A&      `&( A&, B&)             :  0  - Adressen von Screen-Structures ermitteln   M&    ()   N&    ( M&  .)   O&   N&  ,   P&   N&  T   Q&  ( O&  )   &   ( Q&  )   T&    ( P&  )     " - Screen-Parameter ermitteln   R%   ( N&  )   S%  ( N&  )   U%   ( T&  )   v%     U%     ( - Adressen der Bitplanes ermitteln    K     U%    " &( K)  ( T&( K))                  oAskSoftStyleOpenFontenableFontiSetStylefontNameheightstyleprefspFont	CloseFont	fontName0textAttrSetFontmaskSetSoftStyleExecutelibrarLIBRARY
DosLibTest
DosLibDemoxacunderCLIxOpenxxReadxReadxWriteIoErrbkNEWFILEModeoldfile
filehandlelengthfilehanelementselsizeels	arraysizexCloseerrornumendifnameaddrfilenamecntmodeoldfilemodenewfileLIBinitprintnameaddrDamefile1fclrAllocMemFormBmhdCmapctabClearPublicresultmybuf	mybufsize
ClearPubliinbufibufobufcbufLoadILBMAlreadyDeclaredpicnamekkttsWindowsScreen	sViewPort	sRastPort	sColorMapscrWidth	scrHeightsBitMapscrDepthiWidthiHeightiDepthiComprcleanupcleanup2cleanup1iHeighiHecleanup3FreeMemiChunkiChuiSizeicSize	foundBMHD	foundBODY	ChunkLooprErroricLencleanup4MainFreeRamAvailRamILBMnameABINname	loadErrorSaveABINbModesthanbMode	foundCMAPnColorsfHandleregTempredgreblublGoodLoadLoadRGB4rLenbPlanerrpprAddrbytesPerRowbbbAddrbRowbCntReadCompinbufiii1ii2rowBytesrowBinByteinCodeinByLcleanupnColbRowslTemp
loadColorsh00ffffPEE	iRowBytesscrRowBytesscrRow
scRowBytesScleanupcallxaWidthaHeightaDepth	saveError	sColorTabGetScrAddrscolorTabpadwLencTabLencTabLbpLenddGetNamescycDircycStartcycEndccrtDirccrttartccrtEndccrtSecsccrtMics	foundCCRTfoTHENfounMcleanuptempCTabcTabWorkcTabSaveFcycleBcyclecTabSjj	ccrtStartcTempde1de2fordeto5000detpBMHDsizeACOLsizeCCRTsizeABITsizescrFORMsizeCCRTzeroaspectccrtStarWcleanupstartendtempACBMnameSaveACBMtoACBMACBMnamGOTO	Mcleanup2CMAPsizerereTempCAMGsize	camgModesCAMGsizeCCRTsize	foundCAMGcycleinfoCOLOovpModesorborcord	NeededRamNeedRamGoodSaveenterRETACBMfilespec