home *** CD-ROM | disk | FTP | other *** search
-
- /* Edit CEL v 0.77 */
-
- /*
- No copyright is claimed for *any* material within.
- This source is *currently* Public Domain, and therefore open to free exploitation. */
-
- /* Use at your own risk, and watch for hairy palms. */
-
-
- /* November 9, 1994
- Chad Randall
- - mbissaymssiK Software, broken spork division
- Internet: crandall@garnet.msen.com
- USNail: 229 S.Washington St.
- Manchester, Michigan, 48158-9680 USA */
-
- /* This sucker's not been tested but on my machine. So let me know about any probs, 'kay? */
-
- OPT LARGE
-
- MODULE 'graphics/rastport','graphics/gfx','graphics/text','graphics/scale','graphics/view',
- 'graphics/gfxbase','graphics/clip','graphics/layers','graphics/displayinfo'
- MODULE 'layers'
- MODULE 'intuition/intuition','intuition/screens','intuition/gadgetclass','intuition/screens',
- 'intuition/pointerclass'
- MODULE 'libraries/gadtools','gadtools'
- MODULE 'dos/dos'
- MODULE 'libraries/asl','asl'
- MODULE 'tools/async'
- MODULE 'wb','workbench/workbench','workbench/startup'
- MODULE 'icon'
- MODULE 'exec/memory'
-
- MODULE '*doloaddt'
- MODULE '*i3_subs'
-
- ENUM OLD_,NEW_
- ENUM DRAG_TOP,DRAG_PAUSE,DRAG_DIRTY,DRAG_BUFFER,DRAG_SMART
-
- OBJECT color
- red:LONG
- grn:LONG
- blu:LONG
- ENDOBJECT
-
- OBJECT palet
- color[260]:ARRAY OF color
- ENDOBJECT
-
-
- DEF filename[500]:STRING
- DEF paletname[500]:STRING
- DEF dtname[500]:STRING
- DEF ppmname[500]:STRING
-
- DEF vp:PTR TO viewport,cm,depth,scrw,scrh,menu,vis
- DEF rp:PTR TO rastport,winw,winh
-
- DEF quit=FALSE,newproj=FALSE
- DEF mode=0
- DEF config_size_x,config_size_y
-
- DEF disp:PTR TO rastport
- DEF scr:PTR TO screen
- DEF win:PTR TO window,outwin:PTR TO window
- DEF fixxed=FALSE,rtdrag=4,waittof=TRUE,hand=FALSE,bound=TRUE
- DEF string[500]:STRING
- DEF iconbmap=0:PTR TO bitmap,iconwidth,iconheight,oldx,oldy
- DEF copybmap=0:PTR TO bitmap,copyrast:PTR TO rastport
- DEF backbmap=0:PTR TO bitmap,backrast:PTR TO rastport
- DEF maskbmap=0:PTR TO bitmap
- DEF blankbmap=0:PTR TO bitmap,maximumw=1,maximumh=1
- DEF palet=0:PTR TO palet
- DEF hand1=0,hand2=0,hand3=0
- DEF curobj=0,offx,offy,dragmode=0
- DEF filereq=0:PTR TO filerequester
- DEF paletreq=0:PTR TO filerequester
- DEF dtreq=0:PTR TO filerequester
- DEF ppmreq=0:PTR TO filerequester
- ENUM OFF=FALSE,ON=TRUE
- DEF outputmode=0
- DEF pauseflag=FALSE
- DEF iinfo:PTR TO imageinfo
- DEF goodload,xsize,ysize,nxsize,nysize,xoff,yoff
-
- CONST FILE_MARK_CELL=$20,FILE_MARK_PALET=$10
-
-
- RAISE "CHIP" IF AllocBitMap()=FALSE
- RAISE "MEM" IF AllocMem()=FALSE
- RAISE "MEM" IF New()=FALSE
- RAISE "^C" IF CtrlC()=TRUE
-
- PROC version()
- WriteF('\s',{versionstring})
- ENDPROC
-
- versionstring:
- CHAR '\0$VER: edit cel 0.77 (9.11.94) \tPUBLIC DOMAIN --- NOT FOR RESALE\0\0'
-
- PROC reportmousemoves(win:PTR TO window)
- Forbid()
- win.flags:=win.flags OR WFLG_REPORTMOUSE
- Permit()
- ENDPROC
- PROC noreportmousemoves(win:PTR TO window);DEF flag
- Forbid()
- flag:=win.flags
- IF (flag AND WFLG_REPORTMOUSE) THEN flag:=flag-WFLG_REPORTMOUSE
- win.flags:=flag
- Permit()
- ENDPROC
-
- PROC busy()
- SetWindowPointerA(win,[$80000098,TRUE,WA_POINTERDELAY,TRUE,NIL,NIL])
- ModifyIDCMP(win,IDCMP_MENUPICK)
- StrCopy(string,'Edit CEL 0.77 *BUSY*',ALL)
- SetWindowTitles(win,-1,string)
- ENDPROC
-
- PROC ready()
- ClearPointer(win)
- ModifyIDCMP(win,IDCMP_MENUPICK OR IDCMP_MENUVERIFY)
- StringF(string,'Edit CEL 0.77 (\dx\d)',xsize,ysize)
- SetWindowTitles(win,-1,string)
- ENDPROC
-
-
- PROC main() HANDLE
- DEF i,ii,t,zz,tt,zzz
- DEF mes:PTR TO intuimessage
- DEF hit,hitflag=0,palload=0,iadd:PTR TO menuitem,drawx,drawy
- DEF dir[500]:STRING,file[250]:STRING,buffer
- DEF args:PTR TO wbarg,wstr[250]:STRING,toolobject=NIL:PTR TO diskobject
- DEF region1,rectangle:PTR TO rectangle
- DEF olddir,dirrr,wb:PTR TO wbstartup
- DEF argarray[32]:LIST,rdarg=0,gotme=0,check,code=0,du=0
- DEF zx,zy,zw,zh,zox,zoy
- DEF oldfh=0,newfh=0,filebuf=0,bufptr,filelen=1
- DEF menuverify=FALSE
- DEF fh1,fbuf=0,byte_h,byte_l,r,g,b,bpp,numc
-
- IF (KickVersion(39)=0)
- Raise("Kick")
- ENDIF
-
- buffer:=New(260*16)
- NEW palet,iinfo
- IF (iconbase:=OpenLibrary('icon.library', 37))=NIL THEN Raise("LIB")
- IF (aslbase:=OpenLibrary('asl.library', 37))=NIL THEN Raise("LIB")
- IF (gadtoolsbase:=OpenLibrary('gadtools.library',37))=NIL THEN Raise("LIB")
- IF (layersbase:=OpenLibrary('layers.library',37))=NIL THEN Raise("LIB")
-
- IF wbmessage<>NIL
- outputmode:=TRUE
- wb:=wbmessage;args:=wb.arglist
- olddir:=CurrentDir(args.lock)
- IF args.name>0
- GetCurrentDirName(wstr,250)
- StrCopy(filename,wstr,ALL);AddPart(filename,'',490)
- StrAdd(wstr,args.name,ALL)
- toolobject:=GetDiskObjectNew(wstr)
- CurrentDir(olddir)
- ENDIF
- IF wb.numargs>1
- olddir:=args[].lock++ ->skip our lock! olddir is meaningless at this point
- IF args.lock
- olddir:=CurrentDir(args.lock)
- GetCurrentDirName(filename,490)
- NameFromLock(args.lock,wstr,240)
- CurrentDir(olddir)
- AddPart(filename,args.name,490)
- StrCopy(dtname,filename,ALL)
- StrCopy(ppmname,filename,ALL)
- StrCopy(paletname,filename,ALL)
- ENDIF
- ENDIF
- IF (toolobject<>0)
- IF (du:=FindToolType(toolobject.tooltypes,'DEPTH'))
- StrToLong(du,{rtdrag})
- IF rtdrag<4 THEN rtdrag:=4
- IF rtdrag>4 THEN rtdrag:=8
- ENDIF
- IF (du:=FindToolType(toolobject.tooltypes,'PICTURE_DIRECTORY'))
- StrCopy(dtname,du,ALL)
- AddPart(dtname,'',490)
- StrCopy(ppmname,du,ALL)
- AddPart(ppmname,'',490)
- ENDIF
- IF (du:=FindToolType(toolobject.tooltypes,'PICDIR'))
- StrCopy(dtname,du,ALL)
- AddPart(dtname,'',490)
- ENDIF
- IF (du:=FindToolType(toolobject.tooltypes,'KISS_DIRECTORY'))
- StrCopy(filename,du,ALL)
- AddPart(filename,'',490)
- StrCopy(paletname,du,ALL)
- AddPart(paletname,'',490)
- ENDIF
- IF (du:=FindToolType(toolobject.tooltypes,'CELDIR'))
- StrCopy(filename,du,ALL)
- AddPart(filename,'',490)
- ENDIF
- IF (du:=FindToolType(toolobject.tooltypes,'KCFDIR'))
- StrCopy(paletname,du,ALL)
- AddPart(paletname,'',490)
- ENDIF
- IF (du:=FindToolType(toolobject.tooltypes,'INITIAL_KCF'))
- StrCopy(paletname,du,ALL)
- palload:=555
- ENDIF
- FreeDiskObject(toolobject)
- ENDIF
- ELSE
- FOR i:=0 TO 30
- argarray[i]:=NIL
- ENDFOR
- rdarg:=ReadArgs('WORKDIR=K,PICDIR=P,KCF/K,DEPTH=D/N',argarray,0)
- IF rdarg
- IF argarray[0]
- StrCopy(filename,argarray[0],ALL)
- AddPart(filename,'',490)
- StrCopy(paletname,argarray[0],ALL)
- AddPart(paletname,'',490)
- StrCopy(dtname,argarray[0],ALL)
- AddPart(dtname,'',490)
- StrCopy(ppmname,argarray[0],ALL)
- AddPart(ppmname,'',490)
- ENDIF
- IF argarray[1]
- StrCopy(dtname,argarray[1],ALL)
- AddPart(dtname,'',490)
- StrCopy(ppmname,argarray[1],ALL)
- AddPart(ppmname,'',490)
- ENDIF
- IF argarray[2]
- StrCopy(paletname,argarray[2],ALL)
- palload:=555
- ENDIF
- IF argarray[3]
- rtdrag:=argarray[3]
- rtdrag:=^rtdrag
- IF rtdrag<4 THEN rtdrag:=4
- IF rtdrag>4 THEN rtdrag:=8
- ENDIF
- FreeArgs(rdarg)
- ENDIF
- ENDIF
-
- filereq:=AllocAslRequest(ASL_FILEREQUEST,[ASLFR_INITIALPATTERN,'#?.CEL',NIL,NIL])
- paletreq:=AllocAslRequest(ASL_FILEREQUEST,[ASLFR_INITIALPATTERN,'#?.KCF',NIL,NIL])
- dtreq:=AllocAslRequest(ASL_FILEREQUEST,[ASLFR_INITIALPATTERN,'#?',NIL,NIL])
- ppmreq:=AllocAslRequest(ASL_FILEREQUEST,[ASLFR_INITIALPATTERN,'#?.ppm',NIL,NIL])
-
- scr:=LockPubScreen('Workbench')
- config_size_x:=scr.width
- config_size_y:=(scr.height+scr.barheight+1)
- UnlockPubScreen(0,scr);scr:=0
- openscreen(rtdrag)
- GetRGB32(cm,0,256,buffer)
- FOR i:=0 TO 255
- palet.color[i].red:=Long(buffer+(i*12))
- palet.color[i].grn:=Long(buffer+(i*12)+4)
- palet.color[i].blu:=Long(buffer+(i*12)+8)
- ENDFOR
- WHILE quit=FALSE
- updatecolors()
- WHILE ((quit=FALSE) AND (newproj=FALSE))
- Wait(-1)
- CtrlC()
- hitflag:=0
- WHILE (mes:=Gt_GetIMsg(win.userport))
- IF (mes.class=IDCMP_MENUVERIFY)
- menucolors(buffer)
- ENDIF
- IF (mes.class=IDCMP_MENUPICK)
- code:=mes.code
- WHILE (code<>MENUNULL)
- iadd:=ItemAddress(menu,code)
- IF iadd
- hit:=Long(iadd+34)
- check:=(Int(iadd+12) AND CHECKED)
- IF ((hit>0) AND (hit<10)) THEN hitflag:=hit
- IF hit=66 THEN quit:=TRUE
- code:=iadd.nextselect
- ELSE
- code:=MENUNULL
- ENDIF
- ENDWHILE
- updatecolors()
- ENDIF
- Gt_ReplyIMsg(mes)
- ENDWHILE
- IF (palload) THEN hitflag:=1
- SELECT hitflag
- CASE 1
- busy()
- IF palload=0
- WbenchToFront()
- splitname(paletname,dir,file)
- ii:=AslRequest(paletreq,[ASL_HAIL,'Select .KCF file',
- ASL_OKTEXT,'_Open',ASL_FILE,file,ASL_DIR,dir,
- ASLFR_DOPATTERNS,TRUE,ASLFR_DOSAVEMODE,FALSE,FILF_NEWIDCMP,TRUE,NIL,NIL])
- WbenchToBack()
- ELSE
- ii:=TRUE
- ENDIF
- IF ii
- IF palload=0
- StrCopy(paletname,paletreq.drawer,ALL)
- AddPart(paletname,paletreq.file,490)
- ENDIF
- fh1:=Open(paletname,MODE_OLDFILE)
- IF fh1
- fbuf:=New(500)
- Read(fh1,fbuf,32)
- IF Long(fbuf)="KiSS"
- IF Char(fbuf+4)=FILE_MARK_PALET
- bpp:=Char(fbuf+5)
- numc:=ibmconv(Int(fbuf+8))
- FOR i:=0 TO numc-1
- IF bpp=12
- Read(fh1,fbuf,2)
- byte_l:=Char(fbuf)
- byte_h:=Char(fbuf+1)
- r:=(Shr(byte_l,4) AND $F)*$1111
- g:=(byte_h AND $F)*$1111
- b:=(byte_l AND $F)*$1111
- ELSE
- Read(fh1,fbuf,1);r:=Shl(Char(fbuf),8) OR Char(fbuf)
- Read(fh1,fbuf,1);g:=Shl(Char(fbuf),8) OR Char(fbuf)
- Read(fh1,fbuf,1);b:=Shl(Char(fbuf),8) OR Char(fbuf)
- ENDIF
- r:=(Shl(Shl(r,8),8) OR r)
- g:=(Shl(Shl(g,8),8) OR g)
- b:=(Shl(Shl(b,8),8) OR b)
- palet.color[i].red:=r
- palet.color[i].grn:=g
- palet.color[i].blu:=b
- ENDFOR
- ENDIF
- ELSE
- Seek(fh1,0,OFFSET_BEGINNING)
- FOR i:=0 TO 15
- Read(fh1,fbuf,2)
- byte_l:=Char(fbuf)
- byte_h:=Char(fbuf+1)
- r:=(Shr(byte_l,4) AND $F)*$1111
- g:=(byte_h AND $F)*$1111
- b:=(byte_l AND $F)*$1111
- r:=(Shl(Shl(r,8),8) OR r)
- g:=(Shl(Shl(g,8),8) OR g)
- b:=(Shl(Shl(b,8),8) OR b)
- palet.color[i].red:=r
- palet.color[i].grn:=g
- palet.color[i].blu:=b
- ENDFOR
- ENDIF
- Dispose(fbuf)
- Close(fh1)
- updatecolors()
- ENDIF
- ENDIF
- CASE 2
- busy()
- WbenchToFront()
- splitname(filename,dir,file)
- ii:=AslRequest(filereq,[ASL_HAIL,'Select .CEL file',
- ASL_OKTEXT,'_Open',ASL_FILE,file,ASL_DIR,dir,
- ASLFR_DOPATTERNS,TRUE,ASLFR_DOSAVEMODE,FALSE,FILF_NEWIDCMP,TRUE,NIL,NIL])
- WbenchToBack()
- IF ii
- StrCopy(filename,filereq.drawer,ALL)
- AddPart(filename,filereq.file,490)
- fh1:=Open(filename,MODE_OLDFILE)
- IF fh1
- fbuf:=New(8000)
- SetRast(rp,0)
- Read(fh1,fbuf,4)
- IF Long(fbuf)="KiSS"
- Read(fh1,fbuf,28)
- IF Char(fbuf)=FILE_MARK_CELL
- nxsize:=ibmconv(Int(fbuf+4))
- nysize:=ibmconv(Int(fbuf+6))
- xoff:=ibmconv(Int(fbuf+8))
- yoff:=ibmconv(Int(fbuf+10))
- xsize:=nxsize+xoff
- ysize:=nysize+yoff
- bpp:=Char(fbuf+1)
- IF bpp=4
- FOR t:=0 TO nysize-1
- Read(fh1,fbuf,(nxsize/2))
- FOR i:=0 TO (nxsize-1) STEP 2
- byte_h:=Char(fbuf+(i/2))
- SetAPen(rp,Shr(byte_h AND $F0,4))
- WritePixel(rp,xoff+i,xoff+t)
- SetAPen(rp,byte_h AND $F)
- WritePixel(rp,xoff+i+1,yoff+t)
- ENDFOR
- ENDFOR
- ELSE
- FOR t:=0 TO nysize-1
- Read(fh1,fbuf,nxsize)
- FOR i:=0 TO nxsize-1
- byte_h:=Char(fbuf+i)
- SetAPen(rp,byte_h)
- WritePixel(rp,xoff+i,xoff+t)
- ENDFOR
- ENDFOR
- ENDIF
- ELSE
- DisplayBeep(0)
- ENDIF
- ELSE
- nxsize:=ibmconv(Int(fbuf))
- nysize:=ibmconv(Int(fbuf+2))
- IF ((nxsize<2) OR (nxsize>640) OR (nysize<2) OR (nysize>400))
- DisplayBeep(0)
- ELSE
- xsize:=((nxsize)/2)*2
- ysize:=nysize
- FOR t:=0 TO ysize-1
- Read(fh1,fbuf,(xsize/2))
- FOR i:=0 TO (xsize-1) STEP 2
- byte_h:=Char(fbuf+(i/2))
- SetAPen(rp,Shr(byte_h AND $F0,4))
- WritePixel(rp,i,t)
- SetAPen(rp,byte_h AND $F)
- WritePixel(rp,i+1,t)
- ENDFOR
- ENDFOR
- ENDIF
- ENDIF
- Dispose(fbuf)
- Close(fh1)
- ENDIF
- ENDIF
- CASE 3
- busy()
- WbenchToFront()
- splitname(dtname,dir,file)
- ii:=AslRequest(dtreq,[ASL_HAIL,'Select Picture file',
- ASL_OKTEXT,'_Open',ASL_FILE,file,ASL_DIR,dir,
- ASLFR_DOPATTERNS,TRUE,ASLFR_DOSAVEMODE,FALSE,FILF_NEWIDCMP,TRUE,NIL,NIL])
- WbenchToBack()
- IF ii
- StrCopy(dtname,dtreq.drawer,ALL)
- AddPart(dtname,dtreq.file,490)
- ENDIF
- goodload:=(doloaddt(dtname,rp,cm,0,0,config_size_x,config_size_y,[DLDT_CENTER,FALSE,
- DLDT_INTEGERSCALE,FALSE,
- DLDT_DITHER,TRUE,
- DLDT_REMAP,TRUE,
- DLDT_ASPECTX,1,
- DLDT_ASPECTY,1,
- DLDT_SCALE,TRUE,
- DLDT_USEASPECT,TRUE,
- DLDT_ENLARGE,FALSE,
- DLDT_CLEAR,TRUE,
- DLDT_INFO,iinfo,
- DLDT_HIGHPEN,-1,NIL,NIL]))
- IF goodload=0
- xsize:=(iinfo.destination_w+1)/2*2
- ysize:=iinfo.destination_h
- ENDIF
- CASE 4
- menucolors(buffer)
- EasyRequestArgs(win,[20,0,'Load .ppm file...',
- 'Loading a .ppm file is not implemented yet.',
- 'Ok'],0,0)
- updatecolors()
- -> busy()
- -> WbenchToFront()
- -> splitname(ppmname,dir,file)
- -> ii:=AslRequest(ppmreq,[ASL_HAIL,'Select ppm file',
- -> ASL_OKTEXT,'_Open',ASL_FILE,file,ASL_DIR,dir,
- -> ASLFR_DOPATTERNS,TRUE,ASLFR_DOSAVEMODE,FALSE,FILF_NEWIDCMP,TRUE,NIL,NIL])
- -> WbenchToBack()
- -> IF ii
- -> StrCopy(ppmname,ppmreq.drawer,ALL)
- -> AddPart(ppmname,ppmreq.file,490)
- -> ENDIF
- CASE 5
- busy()
- WbenchToFront()
- splitname(paletname,dir,file)
- ii:=AslRequest(paletreq,[ASL_HAIL,'Select .KCF file',
- ASL_OKTEXT,'_Save',ASL_FILE,file,ASL_DIR,dir,
- ASLFR_DOPATTERNS,TRUE,ASLFR_DOSAVEMODE,TRUE,FILF_NEWIDCMP,TRUE,NIL,NIL])
- WbenchToBack()
- IF ii
- StrCopy(paletname,paletreq.drawer,ALL)
- AddPart(paletname,paletreq.file,490)
- fh1:=Open(paletname,MODE_NEWFILE)
- IF fh1
- fbuf:=New(500)
- FOR i:=0 TO 31
- PutChar(fbuf,0)
- ENDFOR
- PutLong(fbuf,"KiSS")
- PutChar(fbuf+4,FILE_MARK_PALET)
- PutChar(fbuf+5,24)
- PutInt(fbuf+8,ibmconv(IF depth=4 THEN 16 ELSE 256))
- Write(fh1,fbuf,32)
- FOR t:=0 TO 9
- FOR i:=0 TO IF (depth=4) THEN 15 ELSE 255
- PutChar(fbuf+(i*3),palet.color[i].red)
- PutChar(fbuf+(i*3)+1,palet.color[i].grn)
- PutChar(fbuf+(i*3)+2,palet.color[i].blu)
- ENDFOR
- Write(fh1,fbuf,IF (depth=4) THEN 16*3 ELSE 256*3)
- ENDFOR
- Dispose(fbuf)
- Close(fh1)
- ENDIF
- ENDIF
- CASE 6
- busy()
- WbenchToFront()
- splitname(filename,dir,file)
- ii:=AslRequest(filereq,[ASL_HAIL,'Select .CEL file',
- ASL_OKTEXT,'_Save',ASL_FILE,file,ASL_DIR,dir,
- ASLFR_DOPATTERNS,TRUE,ASLFR_DOSAVEMODE,TRUE,FILF_NEWIDCMP,TRUE,NIL,NIL])
- WbenchToBack()
- IF ii
- StrCopy(filename,filereq.drawer,ALL)
- AddPart(filename,filereq.file,490)
- xoff:=xsize
- SetAPen(rp,1)
- FOR i:=0 TO ysize
- FOR t:=0 TO xoff
- IF ReadPixel(rp,t,i)<>0
- xoff:=smaller(xoff,t)
- t:=xoff
- ENDIF
- ENDFOR
- ENDFOR
- yoff:=ysize
- FOR i:=0 TO xsize
- FOR t:=0 TO yoff
- IF ReadPixel(rp,i,t)<>0
- yoff:=smaller(yoff,t)
- t:=yoff
- ENDIF
- ENDFOR
- ENDFOR
- WriteF('\d,\d',xoff,yoff)
- xsize:=((xsize-xoff+1)/2)*2
- ysize:=ysize-yoff
- WriteF('\d,\d',xsize,ysize)
- ClipBlit(rp,xoff,yoff,rp,0,0,xsize,ysize,192)
- SetAPen(rp,0)
- RectFill(rp,xsize,0,3000,2000)
- RectFill(rp,0,ysize,3000,2000)
-
-
- nxsize:=0
- FOR i:=ysize TO 0 STEP -1
- FOR t:=xsize TO nxsize STEP -1
- IF ReadPixel(rp,t,i)<>0
- nxsize:=t
- t:=nxsize
- ENDIF
- ENDFOR
- ENDFOR
- nysize:=0
- FOR i:=xsize TO 0 STEP -1
- FOR t:=ysize TO nysize STEP -1
- IF ReadPixel(rp,i,t)<>0
- nysize:=t
- t:=nysize
- ENDIF
- ENDFOR
- ENDFOR
- xsize:=((nxsize+1)/2)*2
- ysize:=nysize
-
- fh1:=Open(filename,MODE_NEWFILE)
- IF fh1
- fbuf:=New(6000)
- FOR i:=0 TO 31
- PutChar(fbuf,0)
- ENDFOR
- PutLong(fbuf,"KiSS")
- PutChar(fbuf+4,FILE_MARK_CELL)
- PutChar(fbuf+5,IF (depth=4) THEN 4 ELSE 8)
- PutInt(fbuf+8, ibmconv(xsize))
- PutInt(fbuf+10,ibmconv(ysize))
- PutInt(fbuf+12,ibmconv(xoff))
- PutInt(fbuf+14,ibmconv(yoff))
- Write(fh1,fbuf,32)
- IF (depth=4)
- FOR t:=0 TO ysize-1
- FOR i:=0 TO (xsize-1) STEP 2
- PutChar(fbuf+(i/2),(Shl(ReadPixel(rp,i,t) AND $F,4) OR (ReadPixel(rp,i+1,t) AND $F)))
- ENDFOR
- Write(fh1,fbuf,(xsize/2))
- ENDFOR
- ELSE
- FOR t:=0 TO ysize-1
- FOR i:=0 TO xsize-1
- PutChar(fbuf+i,ReadPixel(rp,i,t))
- ENDFOR
- Write(fh1,fbuf,xsize)
- ENDFOR
- ENDIF
- Close(fh1)
- Dispose(fbuf)
- ENDIF
- ENDIF
- CASE 7
- busy()
- WbenchToFront()
- splitname(dtname,dir,file)
- ii:=AslRequest(dtreq,[ASL_HAIL,'Select IFF file',
- ASL_OKTEXT,'_Save',ASL_FILE,file,ASL_DIR,dir,
- ASLFR_DOPATTERNS,TRUE,ASLFR_DOSAVEMODE,TRUE,FILF_NEWIDCMP,TRUE,NIL,NIL])
- WbenchToBack()
- IF ii
- StrCopy(dtname,dtreq.drawer,ALL)
- AddPart(dtname,dtreq.file,490)
- ENDIF
- CASE 8
- busy()
- WbenchToFront()
- splitname(ppmname,dir,file)
- ii:=AslRequest(ppmreq,[ASL_HAIL,'Select ppm file',
- ASL_OKTEXT,'_Save',ASL_FILE,file,ASL_DIR,dir,
- ASLFR_DOPATTERNS,TRUE,ASLFR_DOSAVEMODE,TRUE,FILF_NEWIDCMP,TRUE,NIL,NIL])
- WbenchToBack()
- IF ii
- StrCopy(ppmname,ppmreq.drawer,ALL)
- AddPart(ppmname,ppmreq.file,490)
- ENDIF
- CASE 9
- menucolors(buffer)
- EasyRequestArgs(win,[20,0,'About Edit CEL v0.77',
- 'Written in a few hours by\nChad Randall\ncrandall@garnet.msen.com',
- 'Ok'],0,0)
- updatecolors()
- ENDSELECT
- ready();palload:=FALSE
- ENDWHILE
- ENDWHILE
- closescreen()
- EXCEPT DO
- closescreen()
- Dispose(buffer)
- IF ((exception="^C") AND (outputmode=0)) THEN WriteF('***BREAK\n')
- IF ((exception="Kick"))
- WriteF('You need at least OS 3.0 (Kickstart 39) to run.\n')
- DisplayBeep(0)
- ENDIF
- IF filereq THEN FreeAslRequest(filereq)
- IF dtreq THEN FreeAslRequest(dtreq)
- IF paletreq THEN FreeAslRequest(paletreq)
- IF ppmreq THEN FreeAslRequest(ppmreq)
-
- IF gadtoolsbase THEN CloseLibrary(gadtoolsbase)
- IF layersbase THEN CloseLibrary(layersbase)
- IF aslbase THEN CloseLibrary(aslbase)
- IF iconbase THEN CloseLibrary(iconbase)
- END palet
- ENDPROC
-
- PROC menucolors(buffer)
- DEF i
- FOR i:=0 TO 3
- SetRGB32(vp,i,Long(buffer+(i*12)),Long(buffer+(i*12)+4),Long(buffer+(i*12)+8))
- ENDFOR
- FOR i:=17 TO 19
- SetRGB32(vp,i,Long(buffer+(i*12)),Long(buffer+(i*12)+4),Long(buffer+(i*12)+8))
- ENDFOR
- FOR i:=(Shl(1,rtdrag)-4) TO (Shl(1,rtdrag)-1)
- SetRGB32(vp,i,Long(buffer+(i*12)),Long(buffer+(i*12)+4),Long(buffer+(i*12)+8))
- ENDFOR
- ENDPROC
-
- PROC updatecolors()
- DEF i,pn=0,t
- FOR i:=0 TO 255
- SetRGB32(vp,i,palet.color[i].red,palet.color[i].grn,palet.color[i].blu)
- ENDFOR
- ENDPROC
-
- PROC isdigit(s);IF (((s>="0") AND (s<="9")) OR (s=".") OR (s="-")) THEN RETURN TRUE;ENDPROC FALSE
- PROC isalpha(s);IF (((s>="a") AND (s<="z")) OR ((s>="A") AND (s<="Z"))) THEN RETURN TRUE;ENDPROC FALSE
- PROC ispunc(s);IF ((s=".") OR (s="-") OR (s="_")) THEN RETURN TRUE;ENDPROC FALSE
-
- PROC scanforvalue(str)
- DEF l=0,i,s[100]:STRING,ins,iii=0
- WHILE (isdigit(Char(str+l)));l:=l+1;ENDWHILE
- StrCopy(s,str,l)
- ins:=InStr(str,'.')
- IF ((ins>0) AND (ins<=l))
- StrToLong(s,{i})
- StrToLong(s+ins+1,{iii})
- ELSE
- StrToLong(s,{i})
- ENDIF
- ENDPROC i,l,iii
-
- PROC scanforstring(str)
- DEF l=0
- WHILE (isdigit(Char(str+l)) OR isalpha(Char(str+l)) OR ispunc(Char(str+l)));l:=l+1;ENDWHILE
- ENDPROC l
-
- PROC ibmconv(a)
- DEF hi,lo,ret
- hi:=a AND $FF00
- lo:=a AND $00FF
- ret:=Shl(lo,8) OR Shr(hi,8)
- ENDPROC ret
-
- PROC openscreen(d)
- DEF cflag,lflag1=CHECKIT,lflag2=CHECKIT,lflag3=CHECKIT,lflag4=CHECKIT,lflag5=CHECKIT,lflag=CHECKIT
- DEF hflag1=CHECKIT,hflag2=CHECKIT,hflag3=CHECKIT,bflag=CHECKIT
- depth:=d
- scr:=OpenScreenTagList(NIL,[SA_LIKEWORKBENCH,TRUE,
- SA_DEPTH,depth,
- SA_TITLE,'Edit CEL',
- SA_COLORMAPENTRIES,256,
- SA_FULLPALETTE,TRUE,
- SA_WIDTH,config_size_x,
- SA_HEIGHT,config_size_y,
- SA_INTERLEAVED,TRUE,
- SA_AUTOSCROLL,TRUE,
- SA_PENS,[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1]:INT,
- NIL,NIL])
- IF scr=0 THEN Raise("SCR")
- IF (vis:=GetVisualInfoA(scr,NIL))=0 THEN RETURN "VIS"
- win:=OpenWindowTagList(0,[WA_WIDTH,scr.width,WA_HEIGHT,scr.height-scr.barheight-1,
- WA_TOP,scr.barheight+1,WA_LEFT,0,
- WA_FLAGS,WFLG_ACTIVATE OR WFLG_SMART_REFRESH,
- WA_BORDERLESS,TRUE,
- WA_BACKDROP,TRUE,
- WA_CUSTOMSCREEN,scr,
- WA_NEWLOOKMENUS,TRUE,
- WA_IDCMP,IDCMP_MENUPICK OR IDCMP_MENUVERIFY,
- NIL,NIL])
- IF win=0 THEN Raise("WIN")
- vp:=scr.viewport
- cm:=vp.colormap
- rp:=win.rport
-
- IF (menu:=CreateMenusA([NM_TITLE,0,'Project',0,0,0,0,
- NM_ITEM,0,'Open KCF...','K',0,0,1,
- NM_ITEM,0,'Open CEL...','C',0,0,2,
- NM_ITEM,0,'Open Datatype...','O',0,0,3,
- NM_ITEM,0,'Open PPM (P6)','P',0,0,4,
- NM_ITEM,0,NM_BARLABEL,0,0,0,0,
- NM_ITEM,0,'Save KCF','F',0,0,5,
- NM_ITEM,0,'Save CEL','E',0,0,6,
- NM_ITEM,0,'Save IFF','I',0,0,7,
- NM_ITEM,0,'Save PPM (P6)','B',0,0,8,
- NM_ITEM,0,NM_BARLABEL,0,0,0,0,
- NM_ITEM,0,'About','?',0,0,9,
- NM_ITEM,0,'Quit','Q',0,0,66,
-
- NM_END,0,'End','x',0,0,0]:newmenu,NIL))=NIL THEN Raise("MENU")
- LayoutMenusA(menu,vis,[GTMN_NEWLOOKMENUS,TRUE,NIL,NIL])
- SetMenuStrip(win,menu)
- offmenu(4)
- offmenu(7)
- offmenu(8)
- ENDPROC
-
- PROC offmenu(id)
- DEF a,b,c
- a,b,c:=findmenuid(menu,id)
- IF win THEN OffMenu(win,packmenunumber(a,b,c))
- ENDPROC
-
- PROC closescreen()
- IF win
- CloseWindow(win)
- win:=0
- ENDIF
- IF menu
- FreeMenus(menu)
- menu:=0
- ENDIF
- IF vis
- FreeVisualInfo(vis)
- vis:=0
- ENDIF
- IF scr
- CloseScreen(scr)
- scr:=0
- ENDIF
-
- ENDPROC
-