home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / jËzyki_programowania / amigae / e_v3.2a / pdsrc / brush2image.e < prev    next >
Text File  |  2001-03-31  |  4KB  |  132 lines

  1. /*
  2.     ILBM brush to Image.
  3. */
  4. MODULE 'dos/dos','intuition/intuition','asl','libraries/asl',
  5. 'libraries/iffparse','iffparse','utility/tagitem'
  6. ENUM NOERROR,ER_LIBRARY,ER_NOMEM,ER_NOASLREQUEST,ER_FILENOTFOUND,ER_IFFERROR,
  7.     ER_NOBMHD
  8. CONST ID_ILBM=$494C424D
  9. CONST ID_BMHD=$424D4844
  10. CONST ID_BODY=$424F4459
  11. CONST ID_CMAP=$434D4150
  12.  
  13. DEF iff:PTR TO iffhandle
  14.  
  15. PROC main()
  16.     DEF req:PTR TO filerequester,source[256]:STRING,err,xsize,ysize,depth,bmhd,
  17.     body,cmap,camg,cflag,p:PTR TO INT,bp:PTR TO CHAR,sp:PTR TO storedproperty
  18.  
  19.     IF KickVersion(37)=FALSE
  20.         WriteF('Sorry, Kickstart V37+ Required.\n')
  21.         getout(0)
  22.     ENDIF
  23.     IF (aslbase:=OpenLibrary('asl.library',37))=0
  24.         error(ER_LIBRARY,'asl')
  25.     ENDIF
  26.     IF (iffparsebase:=OpenLibrary('iffparse.library',37))=0
  27.         error(ER_LIBRARY,'iffparse')
  28.     ENDIF
  29.     IF (req:=AllocAslRequest(ASL_FILEREQUEST,[ASL_HAIL,'Choose ILBM toconvert',0]:tagitem))>0
  30.         IF AslRequest(req,0)=0
  31.             FreeAslRequest(req)
  32.             getout(0)
  33.         ELSE
  34.             StrCopy(source,req.drawer,ALL) ; AddPart(source,req.file,256) ; SetStr(source,StrLen(source))
  35.         ENDIF
  36.     ELSE
  37.         error(ER_NOASLREQUEST,0)
  38.     ENDIF
  39.     IF FileLength(source)>0
  40.         IF (iff:=AllocIFF())>0
  41.             iff.stream:=Open(source,MODE_OLDFILE)
  42.             InitIFFasDOS(iff)
  43.             IF (err:=OpenIFF(iff,IFFF_READ))=0
  44.                 IF (err:=PropChunk(iff,"ILBM","BMHD"))=0
  45.                     IF (err:=ParseIFF(iff,IFFPARSE_SCAN)=IFFERR_EOF)
  46.                         IF (sp:=FindProp(iff,"ILBM","BMHD"))>0
  47.                             bmhd:=sp.data
  48.                             bp:=p:=bmhd ;xsize:=p[2] ; ysize:=p[3]
  49.                             depth:=bp[13] ; cflag:=bp[14]
  50.                         ELSE
  51.                             error(ER_NOBMHD,0)
  52.                         ENDIF
  53.                         WriteF('Start:\z\h[8]Xsize:\d Ysize:\d Compression:\d Depth:\d\n',bmhd,xsize,ysize,cflag,depth)
  54.                         getout(0)
  55.                     ELSE
  56.                         error(ER_IFFERROR,err)
  57.                     ENDIF
  58.                 ELSE
  59.                     error(ER_IFFERROR,err)
  60.                 ENDIF
  61.             ELSE
  62.                 error(ER_IFFERROR,err)
  63.             ENDIF
  64.         ELSE
  65.             error(ER_IFFERROR,IFFERR_NOMEM)
  66.         ENDIF
  67.     ELSE
  68.         error(ER_FILENOTFOUND,source)
  69.     ENDIF
  70. ENDPROC
  71. CHAR '$VER: ILBM2Image v.01 (C) 1994 Jason Maskell',0
  72.  
  73. PROC getout(retcode)
  74.     IF iff
  75.         CloseIFF(iff)
  76.         Close(iff.stream)
  77.         FreeIFF(iff)
  78.     ENDIF
  79.     IF aslbase
  80.         CloseLibrary(aslbase)
  81.     ENDIF
  82.     IF iffparsebase
  83.         CloseLibrary(iffparsebase)
  84.     ENDIF
  85.     CleanUp(retcode)
  86. ENDPROC
  87.  
  88. PROC error(errnum,str)
  89.     DEF work[80]:STRING
  90.     SELECT errnum
  91.         CASE ER_LIBRARY
  92.             StringF(work,'Could not open \s.library V37+',str)
  93.         CASE ER_NOMEM
  94.             StringF(work,'Unable to allocate memory.')
  95.         CASE ER_NOASLREQUEST
  96.             StringF(work,'Unable to allocate ASL requester.')
  97.         CASE ER_FILENOTFOUND
  98.             StringF(work,'File "\s" not found.',str)
  99.         CASE ER_IFFERROR
  100.             SELECT str
  101.                 CASE IFFERR_EOC
  102.                     StringF(work,'Iffparse Error: Endof Context')
  103.                 CASE IFFERR_NOSCOPE
  104.                     StringF(work,'Iffparse Error: Novalid scope')
  105.                 CASE IFFERR_NOMEM
  106.                     StringF(work,'Iffparse Error:Internal Memory allocation failed.')
  107.                 CASE IFFERR_READ
  108.                     StringF(work,'Iffparse Error:Stream Read Error.')
  109.                 CASE IFFERR_WRITE
  110.                     StringF(work,'Iffparse Error:Stream Write Error.')
  111.                 CASE IFFERR_SEEK
  112.                     StringF(work,'Iffparse Error:Stream Seek Error.')
  113.                 CASE IFFERR_MANGLED
  114.                     StringF(work,'Iffparse Error: IFFfile is corrupt.')
  115.                 CASE IFFERR_SYNTAX
  116.                     StringF(work,'Iffparse Error: IFFSyntax Error.')
  117.                 CASE IFFERR_NOTIFF
  118.                     StringF(work,'Iffparse Error: Notan IFF file.')
  119.                 DEFAULT
  120.                     StringF(work,'Iffparse Error:Unknown Error code: \d',str)
  121.             ENDSELECT
  122.         CASE ER_NOBMHD
  123.             StringF(work,'No Bitmapheader found. Not a usable FORM')
  124.         DEFAULT
  125.             StringF(work,'Unknown Error code: \d',errnum)
  126.     ENDSELECT
  127.     request('ILBN2Image Error',work,'Ok',0)
  128.     getout(11)
  129. ENDPROC
  130. PROC request(title,body,gadgets,args)
  131. ENDPROC EasyRequestArgs(0,[20,0,title,body,gadgets],0,args)
  132.