home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / sourcecode / utilities / grabiff.amos / grabiff.amosSourceCode < prev    next >
AMOS Source Code  |  1992-05-23  |  8KB  |  283 lines

  1. '
  2. '  Filename: GrabIFF.AMOS  
  3. '
  4. '  Date: 23/05/92   Version: 1.1 
  5. '
  6. '  By:  Tony Swanwick
  7. '
  8. '*************************************************************************** 
  9. '
  10. '              This program is AMOS Public Domain.   
  11. '
  12. '*************************************************************************** 
  13. '
  14. Set Buffer 10
  15.    Dim V(5)
  16.    Global A$,SX,SY,XOFF,YOFF,PY,TX,TY,VP,FF,T$,D$,FILE$,BLANK$
  17.    Global PADSCRN,OLDSCRN,NEWSCRN,BACKSCRN,SCRNBANK,V(),WM,HM,NC
  18. Goto L_COLD_START
  19. '
  20. L_LOOP:
  21.    P_SCREEN_XY
  22.    If Mouse Key=0 Then Goto L_LOOP
  23. '
  24.    If SX>14 and SY>7 and SX<70 and SY<33 Then Goto L_EXIT
  25.    If SX>14 and SY>37 and SX<70 and SY<61 Then Goto L_CLEAR
  26.    If SX>436 and SY>6 and SX<524 and SY<17 Then P_LOAD_FILE
  27. '
  28.    If FF=0 Then Goto L_LOOP
  29. '
  30. ' Only do these if file loaded.
  31. '
  32.    If SX>92 and SY>45 and SX<411 and SY<53 Then P_CHANGE_VP
  33.    If SX>434 and SY>36 and SX<592 and SY<62 Then P_CHANGE_VALUE
  34.    If SX>534 and SY>21 and SX<614 and SY<32 Then P_FLASH
  35.    If SX>436 and SY>21 and SX<524 and SY<32 Then P_SAVE_FILE
  36.    If SX>534 and SY>6 and SX<614 and SY<17 Then P_SHOW_OLD
  37.    If SX>0 Then P_MOVE_PAD
  38. Goto L_LOOP
  39. '
  40. '
  41. ' ***** Procedures ***** 
  42. '
  43. Procedure P_CENTRE_TEXT
  44.    Screen PADSCRN : Ink 1,0
  45.    If Len(T$)>32 Then T$=Left$(T$,32)
  46.    X=252+XOFF-((10*Len(T$))/2) : Y=YOFF+16+9*TY
  47.    Text X,Y,T$
  48. End Proc
  49. Procedure P_CHANGE_VALUE
  50.    S=1 : Y=42 : If SY>49 Then S=-1 : Y=56
  51.    V=1 : X=443 : If SX>487 Then V=10 : X=498
  52.    If SX>541 Then V=100 : X=553
  53.    Ink 2 : Paint XOFF+X,YOFF+Y,1
  54.    A=V(VP)+(V*S) : If A<0 Then A=0
  55.    If(VP=0 or VP=2) and A>WM Then A=WM
  56.    If(VP=1 or VP=3) and A>HM Then A=HM
  57.    V(VP)=A
  58.    If V(0)<16 Then V(0)=16
  59.    If V(1)<8 Then V(1)=8
  60.    P_COPY_OLD_NEW
  61.    P_STATUS
  62.    SX=0 : Ink 7 : Paint XOFF+X,YOFF+Y,1
  63. End Proc
  64. Procedure P_CHANGE_VP
  65.    VP=(SX-93)/80 : P_STATUS
  66.    P_MOUSE_UP
  67.    SX=0
  68. End Proc
  69. Procedure P_CLEAR_DISPLAY
  70.    Screen PADSCRN
  71.    Cls 0,XOFF+85,YOFF+10 To XOFF+419,YOFF+59
  72. End Proc
  73. Procedure P_COPY_OLD_NEW
  74.    X1=V(2) : Y1=V(3) : X2=V(4) : Y2=V(5) : X3=0 : Y3=0
  75.    If WM>320
  76.       Screen Open NEWSCRN,V(0),V(1),NC,Hires : Flash Off 
  77.    Else 
  78.       Screen Open NEWSCRN,V(0),V(1),NC,Lowres : Flash Off 
  79.    End If 
  80.    Get Palette OLDSCRN
  81.    Screen Copy OLDSCRN,X1,Y1,X2,Y2 To NEWSCRN,X3,Y3
  82.    Screen Show NEWSCRN
  83.    Screen To Back BACKSCRN
  84.    Screen To Front NEWSCRN
  85.    Screen To Front PADSCRN
  86. End Proc
  87. Procedure P_FLASH
  88.    Ink 2 : Paint XOFF+539,YOFF+28,1
  89.    Screen NEWSCRN : C=Colour(0)
  90.    Flash 0,"(001,3)(003,3)(005,3)(007,3)(009,3)(00b,3)(00d,3)(00f,4)(00d,3)(00b,3)(009,3)(007,3)(005,3)(003,3)"
  91.    P_MOUSE_UP
  92.    Flash Off : SX=0 : Colour 0,C
  93.    Screen PADSCRN : Ink 7 : Paint XOFF+539,YOFF+28,1
  94. End Proc
  95. Procedure P_LOAD_FILE
  96.    SX=0 : Ink 2 : Paint XOFF+441,YOFF+12
  97.    Set Dir 32,".info/*.info/*.*.info"
  98.    Dir$=D$
  99.    PATH$="*.*"
  100.    T1$="Load IFF File" : T2$=""
  101.    FILE$=Fsel$(PATH$,"",T1$,T2$)
  102.    If FILE$="" Then Goto L_P_L_F_EXIT
  103. '
  104.    P_CLEAR_DISPLAY
  105.    TY=1 : T$="Loading IFF File" : P_CENTRE_TEXT
  106.    TY=3 : T$=FILE$ : P_CENTRE_TEXT
  107.    Load Iff FILE$,OLDSCRN : Flash Off : NC=Screen Colour
  108.    Screen Hide OLDSCRN
  109.    V(0)=Screen Width(OLDSCRN) : V(4)=V(0)
  110.    V(1)=Screen Height(OLDSCRN) : V(5)=V(1)
  111.    V(2)=0 : V(3)=0 : WM=V(0) : HM=V(1) : FF=1
  112.    P_STATUS
  113.    P_COPY_OLD_NEW
  114. '
  115. L_P_L_F_EXIT:
  116.    Screen PADSCRN : Ink 7 : Paint XOFF+441,YOFF+12
  117. End Proc
  118. Procedure P_MOUSE_UP
  119.    While Mouse Key<>0
  120.    Wend 
  121. End Proc
  122. Procedure P_MOVE_PAD
  123.    OMY=Y Mouse : OPY=PY : LMY=OMY
  124. L_P_M_P0:
  125.    MY=Y Mouse
  126.    If Mouse Key=0 Then Goto L_P_M_P_EXIT
  127.    If MY=LMY Then Goto L_P_M_P0
  128. '
  129.    PY=OPY+MY-OMY
  130.    Screen Display PADSCRN,,PY,,
  131.    LMY=MY
  132. Goto L_P_M_P0
  133. '
  134. L_P_M_P_EXIT:
  135. End Proc
  136. Procedure P_PAD_BOTTOM
  137.    PB=234 : DY=Sgn(PB-PY)
  138.    While PY<>PB
  139.       Screen Display PADSCRN,,PY,,
  140.       PY=PY+DY : Wait Vbl 
  141.    Wend 
  142. End Proc
  143. Procedure P_SAVE_FILE
  144.    SX=0 : Ink 2 : Paint XOFF+441,YOFF+28
  145.    Set Dir 32,".info/*.info/*.*.info"
  146.    Dir$=D$
  147.    PATH$="*.*"
  148.    T1$="Save IFF File" : T2$=""
  149.    FILE$=Fsel$(PATH$,"",T1$,T2$)
  150.    If FILE$="" Then Goto L_P_S_F_EXIT
  151. '
  152.    P_CLEAR_DISPLAY
  153.    TY=1 : T$="Saving IFF File" : P_CENTRE_TEXT
  154.    TY=3 : T$=FILE$ : P_CENTRE_TEXT
  155.    Screen NEWSCRN
  156.    Save Iff FILE$ : Flash Off 
  157. '  
  158. L_P_S_F_EXIT:
  159.    P_STATUS
  160.    Ink 7 : Paint XOFF+441,YOFF+28
  161. End Proc
  162. Procedure P_SCREEN1
  163.    Screen Open BACKSCRN,320,296,2,Lowres : Flash Off : Curs Off 
  164.    D$="df1:" : If Exist(D$)=0 Then D$="df0:"
  165.    A$=D$+"GrabIFF.IFF"
  166.    Wait Vbl : If Length(SCRNBANK)>0
  167.       Unpack SCRNBANK To PADSCRN : Screen Hide PADSCRN
  168.    Else 
  169.       Load Iff A$,PADSCRN : Flash Off : Curs Off : Screen Hide PADSCRN
  170.       Spack PADSCRN To SCRNBANK
  171.    End If 
  172. '
  173. ' Determine offsets? 
  174. '
  175.    YOFF=0 : XOFF=320
  176.    While Point(XOFF,YOFF)=0
  177.       Inc YOFF
  178.    Wend 
  179.    XOFF=0 : Y=YOFF+40
  180.    While Point(XOFF,Y)=0
  181.       Inc XOFF
  182.    Wend 
  183. End Proc
  184. Procedure P_SCREEN_TITLE
  185. ' Sign On Title
  186. '
  187.    Screen PADSCRN : P_CLEAR_DISPLAY
  188.    TY=1 : T$="Screen Grabber V1.1" : P_CENTRE_TEXT
  189.    TY=2 : T$="by Tony Swanwick" : P_CENTRE_TEXT
  190.    TY=4 : T$="Start By Loading An IFF File" : P_CENTRE_TEXT
  191.    Screen Show PADSCRN
  192.    P_PAD_BOTTOM
  193. End Proc
  194. Procedure P_SCREEN_XY
  195.    SX=X Screen(1,X Mouse) : SY=Y Screen(1,Y Mouse) : SC=Point(SX,SY)
  196.    SX=SX-XOFF : SY=SY-YOFF
  197. '   T$=" SX="+Str$(SX)+"  SY="+Str$(SY)+"  SC="+Str$(SC)+"  "
  198. '   TY=-1 : P_CENTRE_TEXT
  199. End Proc
  200. Procedure P_SHOW_OLD
  201.    Ink 2 : Paint XOFF+539,YOFF+12,1
  202.    Screen Show OLDSCRN : Screen To Front OLDSCRN
  203.    While Mouse Key<>0
  204.    Wend 
  205.    Screen Hide OLDSCRN
  206.    Ink 7 : Paint XOFF+539,YOFF+12,1
  207. End Proc
  208. Procedure P_STATUS
  209.    P_CLEAR_DISPLAY
  210.    T$="Loaded Screen:"+BLANK$ : TY=0 : P_CENTRE_TEXT
  211.    W=Screen Width(OLDSCRN) : H=Screen Height(OLDSCRN)
  212.    TY=1 : T$="Width="+Str$(W)+" Height="+Str$(H)+BLANK$
  213.    P_CENTRE_TEXT
  214.    T$="New Screen:"+BLANK$ : TY=3 : P_CENTRE_TEXT
  215. '
  216.    C=2 : TY=4 : TX=0 : T$="W=       H=         XOFF=      YOFF=" : P_TEXT_XY
  217.    Ink 1,0 : If VP=0 Then Ink 1,C
  218.    TY=4 : TX=2 : T$=Str$(V(0))+"  " : T$=Mid$(T$,2,3) : P_TEXT_XY
  219.    Ink 1,0 : If VP=1 Then Ink 1,C
  220.    TY=4 : TX=9 : T$=Str$(V(1))+"  " : T$=Mid$(T$,2,3) : P_TEXT_XY
  221.    Ink 1,0 : If VP=2 Then Ink 1,C
  222.    TY=4 : TX=20 : T$=Str$(V(2))+"  " : T$=Mid$(T$,2,3) : P_TEXT_XY
  223.    Ink 1,0 : If VP=3 Then Ink 1,C
  224.    TY=4 : TX=29 : T$=Str$(V(3))+"  " : T$=Mid$(T$,2,3) : P_TEXT_XY
  225.    Ink 1,0
  226. End Proc
  227. Procedure P_TEXT_XY
  228.    Screen PADSCRN
  229.    If Len(T$)>36 Then T$=Left$(T$,36)
  230.    X=92+XOFF+(10*TX) : Y=YOFF+16+9*TY
  231.    Text X,Y,T$
  232. End Proc
  233. '
  234. '
  235. '
  236. L_CLEAR:
  237.    Hide On 
  238.    Screen PADSCRN : Ink 2 : Paint XOFF+19,YOFF+58,1
  239.    If FF=1 Then Screen Close NEWSCRN : Screen Close OLDSCRN
  240.    Goto L_WARM_START
  241. '
  242. L_COLD_START:
  243.    Hide On : While Screen>-1
  244.       Screen Close Screen
  245.    Wend : Close Editor 
  246.    BLANK$="                                     "
  247.    PADSCRN=1
  248.    OLDSCRN=2
  249.    NEWSCRN=3
  250.    BACKSCRN=4
  251.    SCRNBANK=1
  252.    P_SCREEN1
  253. '
  254. L_WARM_START:
  255.    D$="df1:" : If Exist(D$)=0 Then D$="df0:"
  256.    PY=300 : FF=0 : FILE$="" : VP=0
  257.    P_SCREEN_TITLE
  258.    X Mouse=253 : Y Mouse=264
  259.    Limit Mouse 128,42 To 447,297 : Show On 
  260.    Ink 7 : Paint XOFF+19,YOFF+58,1
  261. Goto L_LOOP
  262. '
  263. L_EXIT:
  264.    Ink 2 : Paint XOFF+19,YOFF+30,1 : Wait 20
  265.    Default : Edit 
  266. End 
  267. '
  268. VARIABLES:
  269. '
  270. ' A          = any variable. 
  271. ' D$         = Directory pathname. 
  272. ' FF         = file loaded flag. 
  273. ' FILE$      = file description. 
  274. ' HM         = max new screen height.
  275. ' NC         = number of colours in oldscrn. 
  276. ' PY         = pad vertical screen offset. 
  277. ' TY         = text row value. 
  278. ' T$         = text string.
  279. ' VP         = array pointer.  
  280. ' V()        = array w,h,xoff,yoff.
  281. ' WM         = max new screen width. 
  282. ' XOFF,YOFF  = pad screen offsets. 
  283. '