8-Bit Software Online Conversion
                
             
        
        
    
Presenting programs Ex. 4 - Listing
    
       10REM >Step4                         
   20REM by Steven Flintham             
   30REM                                
   40REM Sunday 4th April 1993          
   50:                                  
   60MODE 4                             
   70VDU 23;8202;0;0;0;                 
   80PROCdisable                        
   90PROCinit                           
  100REPEAT                             
  110choice%=FNmenu                     
  120UNTIL choice%=5                    
  130MODE 7                             
  140PROCenable                         
  150END                                
  160:                                  
  170DEF PROCdisable                    
  180*FX229,1                           
  190*FX4,1                             
  200ENDPROC                            
  210:                                  
  220DEF PROCenable                     
  230*FX229                             
  240*FX4                               
  250ENDPROC                            
  260:                                  
  270DEF PROCinit                       
  280ON ERROR MODE 7:REPORT:PRINT " at l
ine ";ERL:PROCenable:END                
  290DIM block% 8                       
  300ENDPROC                            
  310:                                  
  320DEF FNmenu                         
  330LOCAL choice%,key%                 
  340PROCtitle                          
  350PRINTTAB(3,4);"Option 1"           
  360PRINTTAB(3,5);"Option 2"           
  370PRINTTAB(3,6);"Option 3"           
  380PRINTTAB(3,7);"Option 4"           
  390PRINTTAB(3,8);"Option 5"           
  400PRINTTAB(3,9);"Quit this program"  
  410PRINTTAB(0,11);"Use the cursor keys
 to move the bar and"'"press RETURN to s
elect"                                  
  420choice%=0                          
  430PROCdraw`bar(choice%,TRUE,0)       
  440REPEAT                             
  450*FX21                              
  460key%=GET                           
  470IF key%=138 THEN IF choice%<5 THEN 
choice%=choice%+1:PROCdraw`bar(choice%,T
RUE,32)                                 
  480IF key%=139 THEN IF choice%>0 THEN 
choice%=choice%-1:PROCdraw`bar(choice%,F
ALSE,-32)                               
  490UNTIL key%=13                      
  500=choice%                           
  510:                                  
  520DEF PROCdraw`bar(choice%,top`to`bot
tom%,offset%)                           
  530LOCAL start%,end%,temp%,y%         
  540GCOL 4,1                           
  550start%=1020-((choice%+4)*32)       
  560end%=(1020-((choice%+4)*32)-28)    
  570IF NOT top`to`bottom% THEN temp%=st
art%:start%=end%:end%=temp%             
  580FOR y%=start% TO end% STEP SGN(end%
-start%)*4                              
  590MOVE 0,y%                          
  600DRAW 1276,y%                       
  610IF offset%<>0 THEN MOVE 0,y%+offset
%:DRAW 1276,y%+offset%                  
  620PROCdelay(2)                       
  630NEXT                               
  640ENDPROC                            
  650:                                  
  660DEF PROCdelay(delay%)              
  670LOCAL time%                        
  680time%=TIME                         
  690REPEAT UNTIL TIME-time%>=delay%    
  700ENDPROC                            
  710:                                  
  720DEF PROCtitle                      
  730VDU 26,12                          
  740COLOUR 0:COLOUR 129                
  750PROCdouble`height(" Menu demonstrat
ion ",10,0)                             
  760COLOUR 1:COLOUR 128                
  770PRINTTAB(8,2);"(C) Steven Flintham 
1993"                                   
  780ENDPROC                            
  790:                                  
  800DEF PROCdouble`height(text$,x%,y%) 
  810LOCAL pos%,A%,X%,Y%                
  820VDU 31,x%,y%                       
  830FOR pos%=1 TO LEN(text$)           
  840block%?0=ASC(MID$(text$,pos%,1))   
  850A%=10                              
  860X%=block% MOD 256                  
  870Y%=block% DIV 256                  
  880CALL &FFF1                         
  890VDU 23,255,0,block%?1,block%?1,bloc
k%?2,block%?2,block%?3,block%?3,block%?4
,255,8,10,23,255,block%?4,block%?5,block
%?5,block%?6,block%?6,block%?7,block%?7,
block%?8,255,11                         
  900REM VDU 23,255,block%?1,block%?1,bl
ock%?2,block%?2,block%?3,block%?3,block%
?4,block%?4,255,8,10,23,255,block%?5,blo
ck%?5,block%?6,block%?6,block%?7,block%?
7,block%?8,block%?8,255,11              
  910NEXT                               
  920ENDPROC