home *** CD-ROM | disk | FTP | other *** search
AMOS Source Code | 1991-12-03 | 5.0 KB | 227 lines |
- Screen Open 0,320,200,16,Lowres
- Reserve As Work 15,100000
- Limit Mouse
- Flash Off
- Screen Open 0,640,75,4,Hires
- Curs Off
- Palette $888,$FFF,$F0,$F00
- Paper 0
- Pen 1
- Screen Open 1,320,256,2,Lowres
- Curs Off
- '
- MENUVPOS=200
- Screen Display 0,,MENUVPOS,,
- MASK=-1
- BLOCKWIDTH=3
- BLOCKHEIGHT=32
- MENUDRAW
- MENUFRONT
- '
- While WIDTH=0
- SCRLOAD
- Wend
- MAIN:
- Do
- INVBLOCK[XPOS,YPOS]
- A$=""
- While A$=""
- A$=Inkey$
- Wend
- INVBLOCK[XPOS,YPOS]
- If A$="l" Then SCRLOAD
- If A$="-" Then MENUUP
- If A$="+" Then MENUDOWN
- If A$="m" Then MASKTOGGLE
- If A$="b" Then BLOCKSIZEGET
- If A$="c" Then MAKECOPPERLIST
- If A$="s" Then BLOCKSAVE
- If A$=Cup$ Then UP
- If A$=Cdown$ Then DN
- If A$=Cleft$ Then LF
- If A$=Cright$ Then RT
- Loop
- '
- '
- Procedure SCRLOAD
- Shared WIDTH,HEIGHT,NUMBEROFCOLOURS,NUMBEROFPLANES,XPOS,YPOS
- 'Shared BLOCKWIDTH,BLOCKHEIGHT
- F$=Fsel$("df1:","","Select an IFF screen to load")
- While F$<>""
- Load Iff F$,1
- F$=""
- WIDTH=Screen Width
- HEIGHT=Screen Height
- NUMBEROFCOLOURS=Screen Colour
- NUMBEROFPLANES=0
- If NUMBEROFCOLOURS=0 Then NUMBEROFPLANES=0
- If NUMBEROFCOLOURS=2 Then NUMBEROFPLANES=1
- If NUMBEROFCOLOURS=4 Then NUMBEROFPLANES=2
- If NUMBEROFCOLOURS=8 Then NUMBEROFPLANES=3
- If NUMBEROFCOLOURS=16 Then NUMBEROFPLANES=4
- If NUMBEROFCOLOURS=32 Then NUMBEROFPLANES=5
- If NUMBEROFCOLOURS=64 Then NUMBEROFPLANES=6
- MENUDRAW
- MENUFRONT
- XPOS=0
- YPOS=0
- Wend
- End Proc
- '
- Procedure MENUFRONT
- Screen 0
- Screen To Front 0
- End Proc
- '
- Procedure MENUBACK
- Screen 1
- Screen To Front 1
- End Proc
- '
- Procedure MENUUP
- Shared MENUVPOS
- If MENUVPOS>-10 Then MENUVPOS=MENUVPOS-8
- Screen Display 0,,MENUVPOS,,
- End Proc
- '
- Procedure MENUDOWN
- Shared MENUVPOS
- If MENUVPOS<300 Then MENUVPOS=MENUVPOS+8
- Screen Display 0,,MENUVPOS,,
- End Proc
- '
- Procedure MENUDRAW
- Shared WIDTH,HEIGHT,NUMBEROFCOLOURS,NUMBEROFPLANES,MASK,BLOCKWIDTH,BLOCKHEIGHT
- MENUFRONT
- Cls 0
- Home
- Print "<L>oad IFF"
- Print "<M>asK ";
- If MASK Then Print "On" Else Print "Off"
- Print "<B>lock size (Current =";BLOCKWIDTH;" words x";BLOCKHEIGHT;" lines)"
- Print "<S>ave block (as raw data)"
- Print "Generate <C>opperlist"
- Print "Modulo=";(WIDTH/8)-(2*BLOCKWIDTH)
- Print "number of bitplanes=";NUMBEROFPLANES;""
- Print "ScreenWidth=";WIDTH;" ScreenHeight=";HEIGHT;" Max.NumberofColours=";NUMBEROFCOLOURS;""
- End Proc
- '
- Procedure MASKTOGGLE
- Shared MASK
- If MASK=True Then MASK=False Else MASK=True
- MENUDRAW
- End Proc
- '
- Procedure BLOCKSIZEGET
- Shared BLOCKWIDTH,BLOCKHEIGHT,XPOS,YPOS,WIDTH,HEIGHT
- MENUFRONT
- Cls
- Print
- Input "Enter block width (words): ";BLOCKWIDTH
- If BLOCKWIDTH<=0 Then BLOCKWIDTH=1
- If BLOCKWIDTH>WIDTH/16 Then BLOCKWIDTH=WIDTH/16
- Input "Enter block height (lines): ";BLOCKHEIGHT
- If BLOCKHEIGHT<=0 Then BLOCKHEIGHT=16
- If BLOCKHEIGHT>HEIGHT Then BLOCKHEIGHT=HEIGHT
- MENUDRAW
- XPOS=0
- YPOS=0
- End Proc
- '
- Procedure INVBLOCK[X,Y]
- Shared BLOCKWIDTH,BLOCKHEIGHT
- Screen 1
- Gr Writing 2
- Bar X*BLOCKWIDTH*16,Y*BLOCKHEIGHT To((X+1)*BLOCKWIDTH*16)-1,((Y+1)*BLOCKHEIGHT)-1
- Screen 0
- End Proc
- '
- '
- '
- Procedure UP
- Shared YPOS,BLOCKHEIGHT
- If YPOS>0 Then YPOS=YPOS-1
- End Proc
- '
- Procedure DN
- Shared YPOS,BLOCKHEIGHT,HEIGHT
- If((YPOS+2)*BLOCKHEIGHT)-1<HEIGHT Then YPOS=YPOS+1
- End Proc
- '
- Procedure LF
- Shared XPOS,BLOCKWIDTH
- If XPOS>0 Then XPOS=XPOS-1
- End Proc
- '
- Procedure RT
- Shared XPOS,BLOCKWIDTH,WIDTH
- If((XPOS+2)*BLOCKWIDTH*16)-1<WIDTH Then XPOS=XPOS+1
- End Proc
- '
- '
- Procedure MAKECOPPERLIST
- Shared NUMBEROFCOLOURS
- F$=Fsel$("df1:","","Save copper source")
- If F$<>""
- Open Out 1,F$
- Print #1,Chr$(10);
- For I=0 To NUMBEROFCOLOURS-1
- I$=Str$(I)-" "
- If Len(I$)=1
- I$="0"+I$
- End If
- Screen 1
- A$=Chr$(9)+Chr$(9)+"dc.w"+Chr$(9)+"COLOR"+I$+","+Hex$(Colour(I),4)+Chr$(10)
- 'Print Hex$(Colour(I),4)
- Print #1,A$;
- Next
- Print #1,Chr$(10);
- Close 1
- End If
- End Proc
- '
- '
- '
- Procedure BLOCKSAVE
- Shared NUMBEROFPLANES,XPOS,YPOS,BLOCKWIDTH,BLOCKHEIGHT,WIDTH,HEIGHT,MASK
- '
- Screen 1
- PTR=0
- X=XPOS*BLOCKWIDTH*2
- Y=YPOS*BLOCKHEIGHT
- BLOCKSIZE=BLOCKWIDTH*2*BLOCKHEIGHT
- For PLANE=0 To NUMBEROFPLANES-1
- PLANEADDR=Phybase(PLANE)
- For H=Y To Y+BLOCKHEIGHT-1
- For W=X To X+(BLOCKWIDTH*2)-1
- A=Peek(PLANEADDR+(H*WIDTH/8)+W)
- Poke Start(15)+PTR,A
- PTR=PTR+1
- Next
- Next
- Next
- '
- If MASK=True
- For W=0 To BLOCKSIZE-1
- A=0
- For PLANE=0 To NUMBEROFPLANES-1
- A=A or Peek(Start(15)+(BLOCKSIZE*PLANE)+W)
- Next
- Poke Start(15)+PTR,A
- PTR=PTR+1
- Next
- End If
- '
- F$=Fsel$("df1:","","Save raw data")
- If F$<>""
- Bsave F$,Start(15) To Start(15)+PTR
- End If
- Screen 0
- Cls 0
- Print "Block saved in raw format"
- Print "Blocksize =";BLOCKSIZE;" bytes per bitplane (also mask)"
- Print
- Print "Press a key..."
- Wait Key
- MENUDRAW
- End Proc