home *** CD-ROM | disk | FTP | other *** search
/ Archive Magazine 1996 / ARCHIVE_96.iso / multimedia / ultima / _willystor / _runimage (.txt) < prev    next >
RISC OS BBC BASIC V Source  |  1995-05-02  |  54KB  |  2,429 lines

  1.  Ultimap v 2.00 (30 March 1995)
  2.  Simon Hayles 1994
  3. =&40000
  4.  taskid% 4:$taskid%="TASK"
  5.  "Wimp_Initialise",200,!taskid%,"Ultimap" 
  6.  version%,task_handle%
  7. errorbox
  8.  "OS_Module",16,"Ubase%Ultimap"
  9.  *UBASE 40000 800000
  10.  global variables
  11.  box% 12,box2% 12,matrix% 16,origin1% 8,origin2% 8
  12.  icon_font$="JOTTER"
  13.  full_name$="Untitled"
  14.  query_string$=""
  15.  menu%=0
  16.  sprite_size%=&1E000
  17.  q% 256,old_q% 256
  18.  errblk% 3000
  19.  main% 1000,sprites% sprite_size%
  20. @ !sprites%=sprite_size%:sprites%!8=16:
  21.  spop%,&209,sprites%
  22.  wimp_palette% 20*4
  23.  page_stack% 1024
  24.  s_sprites%=1
  25.  s_draw%=2
  26.  s_replay%=3
  27.  s_quicktime%=4
  28.  s_fonts%=5
  29.  s_starcoms%=6
  30.  s_loadorder%=7
  31.  s_sounds%=8
  32.  s_text%=9
  33.  s_pages%=10
  34.  s_clicks%=11
  35.  s_mousedrag%=12
  36.  s_often%=13
  37.  s_pointer%=14
  38.  s_mouse%=15
  39.  s_pageshown%=16
  40.  s_spare%=17
  41.  s_clickson%=18
  42.  s_temp%=19
  43.  s_sequences%=20
  44.  options
  45.  printing%=
  46.  portrait%=
  47.  current_page%=0
  48.  margin%=16
  49.  click_time=1
  50.  click_pause=1
  51.  temp_list%=0
  52.  trying%=
  53.  speaking_text%=
  54.  speak_sound%=
  55.  speak_token%=
  56.  h_scroll%=
  57.  v_scroll%=
  58.  toggle_icon%=
  59.  title_bar%=
  60.  scanning%=
  61.  scan_keys%=1
  62.  scan_time%=100
  63.  scan_object%=1
  64.  scan_count%=0
  65.  menu_enabled%=
  66.  ws%=sprites%+32
  67.  page_size%=3
  68.  file_version%=101
  69.  current_page$="Page 1"
  70.  ws%=sprites%+32
  71.  "Hourglass_On"
  72. load_templates
  73. get_mode_info
  74. load_options
  75. new_file
  76.  "OS_GetEnv" 
  77.  EnvStr$,end_adr%
  78. EnvStr$," -quit ") 
  79. Y- I%=
  80. EnvStr$,""""):I%=
  81. EnvStr$,"""",I%+1)
  82. I%+=1:
  83. EnvStr$,I%,1)<>" "
  84. EnvStr$,I%)
  85.  f$<>"" full_name$=f$:
  86. load_file(f$,2)
  87.  icon_bar%=
  88. iconbar
  89.  setcaret%,main_w%,-1,0,10,10
  90.  "Hourglass_Off"
  91. errorbox
  92.  drag%,,-1
  93. begin_trying
  94. try_poll
  95. load_templates
  96.  font_array% 256:
  97. 4:t%!font_array%=0:
  98.  "Wimp_OpenTemplate",,"<Obey$Dir>.Templates"
  99.  winds% 2000,indir% 1000
  100.  indl%=indir%+4000
  101.  "Wimp_LoadTemplate",,winds%,indir%,indl%,-1,"main_w",0 
  102.  ,,indir%
  103.  "Wimp_CreateWindow",,winds% 
  104.  main_w%
  105.  "Wimp_LoadTemplate",,winds%,indir%,indl%,font_array%,"pagelist_wc",0 
  106.  ,,indir%
  107.  "Wimp_CreateWindow",,winds% 
  108.  pagelist_wc%
  109.  "Wimp_LoadTemplate",,winds%,indir%,indl%,font_array%,"print_w",0 
  110.  ,,indir%
  111.  "Wimp_CreateWindow",,winds% 
  112.  print_w%
  113.  "Wimp_LoadTemplate",,winds%,indir%,indl%,-1,"info",0 
  114.  ,,indir%
  115.  "Wimp_CreateWindow",,winds% 
  116.  info%
  117.  "Wimp_CloseTemplate"
  118. load_options
  119. }$ ptr%=
  120. ("<Ultimap$Dir>.options")
  121. #ptr%,toolbox_on%,scanning%,scan_keys%,scan_time%,menu_enabled%,sound_vol%
  122. #ptr%
  123. % ptr%=
  124. ("<Ultimap$Dir>.messages")
  125. #ptr%,info$,info1$
  126. #ptr%
  127. set_icon_text(info%,1,info$)
  128. set_icon_text(info%,2,info1$)
  129. finish
  130.  setcaret%,-1
  131. lose_fonts
  132.  "Wimp_CloseDown",task_handle%,!taskid%
  133.  "OS_Exit"
  134. redraw_window
  135.  redraww%,,q% 
  136.  more%
  137.  more%
  138. -   offx%=(q%!4-q%!20):offy%=(q%!16-q%!24)
  139.  !q% 
  140. \     
  141.  main_w%:
  142. draw_main_w(q%!28-offx%,q%!32-offy%,q%!36-offx%,q%!40-offy%,offx%,offy%)
  143. Z     
  144.  pagelist_wc%:
  145. draw_pagelist_wc(q%!28-offx%,q%!32-offy%,q%!36-offx%,q%!40-offy%)
  146.  getr%,,q% 
  147.  more%
  148. front(handle%)
  149.  !q%=handle%:
  150.  getw%,,q%
  151. open_window(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,-1)
  152. open_window(handle%,x%,y%,x1%,y1%,scx%,scy%,bhandle%)
  153. handle%=-1
  154.  q%!28=bhandle%
  155.  q%!0=handle%
  156. ( q%!4=x%:q%!8=y%:q%!12=x1%:q%!16=y1%
  157.  q%!20=scx%:q%!24=scy%
  158.  openw%,,q%
  159. close_window(handle%)
  160.  !q%=handle%:
  161.  closew%,,q%
  162.  getenv%=&10
  163.   wimp%    = (1<<18) + (3<<6)
  164.  createw%=wimp%+1
  165.  createicon%=wimp%+2
  166.  deleteicon%=wimp%+4
  167.  openw%=wimp%+5
  168.  closew%=wimp%+6
  169.  poll%=wimp%+7
  170.  redraww%=wimp%+8
  171.  updatew%=wimp%+9
  172.  getr%=wimp%+10
  173.  getw%=wimp%+11
  174.  getwi%=wimp%+12
  175.  seti%=wimp%+13
  176.  geti%=wimp%+14
  177.  getp%=wimp%+15
  178.  drag%=wimp%+16
  179.  forceredraw%=wimp%+17
  180.  setcaret%=wimp%+18
  181.  getcaret%=wimp%+19
  182.  createmenu%=wimp%+20
  183.  setextent%=wimp%+&17
  184.  processkey%=wimp%+&1C
  185.  sendmessage%=wimp%+&27
  186.  crsubmenu%=wimp%+&28
  187.  ploticon%=&400E2
  188.  setcol%=&40743
  189.  spop%=&2E
  190.  findfont%=&40081
  191.  losefont%=&40082
  192.  fontinfo%=&40084
  193.  stringwidth%=&40085
  194.  setfont%=&4008A
  195.  currentfont%=&4008B
  196.  converttoos%=&40088
  197.  converttopoints%=&40089
  198.  paint%=&40086
  199.  findcaret%=&4008D
  200.  charbbox%=&4008E
  201.  Ubase%=&1C0100
  202.  newfile%=Ubase%
  203.  newstack%=Ubase%+1
  204.  killstack%=Ubase%+2
  205.  addentry%=Ubase%+3
  206.  amendentry%=Ubase%+4
  207.  findtoken%=Ubase%+5
  208.  killentry%=Ubase%+6
  209.  movedata%=Ubase%+7
  210.  addpacked%=Ubase%+8
  211.  getentry%=Ubase%+9
  212.  unpacksprite%=Ubase%+10
  213.  nentries%=Ubase%+11
  214.  movetoend%=Ubase%+12
  215.  readstatus%=Ubase%+13
  216.  writestatus%=Ubase%+14
  217.  rendershape%=Ubase%+15
  218.  getnth%=Ubase%+17
  219.  locatefile%=Ubase%+19
  220.  playsound%=Ubase%+20
  221.  PD%=&80140
  222.  PDselect%=PD%+5
  223.  PDabort%=PD%+9
  224.  PDpagesize%=PD%+3
  225.  PDgiverec%=PD%+11
  226.  PDdrawpage%=PD%+12
  227.  PDgetrec%=PD%+13
  228.  PDendjob%=PD%+8
  229.  "OS_Module",14,"Ubase%Ultimap"
  230. get_pointer
  231.  getp%,,q%
  232. Hmousex%=!q%:mousey%=q%!4:b%=q%!8:handle%=q%!12:icon%=q%!16:ob%=q%!20
  233. errorbox
  234.  SYS drag%,,-1
  235. 4!errblk%=
  236. $:t$="("+
  237. +")"+t$+" at line "+
  238. $(errblk%+4)=t$+
  239.  "Wimp_ReportError",errblk%,1,"Ultimap"
  240. finish:
  241.  IF printing% printing%=FALSE:PROCclose_window(print_w%)
  242. iconbar
  243. + !q%=-1:q%!4=0:q%!8=0:q%!12=64:q%!16=64
  244.  q%!20=&300A
  245. string0(q%+24,appsprite$)
  246.  "Wimp_CreateIcon",,q% 
  247.  handle%
  248.  =handle%
  249. set_icon_fonts
  250.  findfont%,,icon_font$,12*16,12*16 
  251.  font%
  252.  "Wimp_WhichIcon",print_w%,q%,1<<6,1<<6
  253. < t%=0:
  254. icon_font(print_w%,t%!q%,font%):t%+=4:
  255. t%!q%=-1
  256. icon_font(window%,icon%,font%)
  257. % !errblk%=window%:errblk%!4=icon%
  258. - errblk%!12=&FF000000:errblk%!8=font%<<24
  259.  font%?font_array%+=1
  260.  seti%,,errblk%
  261. lose_fonts
  262. 255:n%=A%?font_array%:A%?font_array%=0
  263.  n%>0 
  264.  B%=1
  265.  losefont%,A%:
  266. get_mode_info
  267.  "Wimp_ReadPalette",,wimp_palette%
  268.  "OS_ReadModeVariable",-1,4 
  269.  ,,xef%
  270.  "OS_ReadModeVariable",-1,5 
  271.  ,,yef%
  272.  "OS_ReadModeVariable",-1,11 
  273.  ,,screen_width%
  274.  "OS_ReadModeVariable",-1,12 
  275.  ,,screen_height%
  276. (J screen_width%=screen_width%<<xef%:screen_height%=screen_height%<<yef%
  277. start_drag(type%,x%,y%,x1%,y1%)
  278.  !q%=0:q%!4=5
  279. -) q%!8=x%:q%!12=y%:q%!16=x1%:q%!20=y1%
  280. .= q%!24=0:q%!28=0:q%!32=screen_width%:q%!36=screen_height%
  281.  drag%,,q%
  282.  drag_type%=type%
  283. --------------------------------------------------------------------------------------------------------
  284. string0(t%):
  285.  t$:t$="":
  286.  ?t%<32:=""
  287. :t$=t$+
  288. ?t%:t%+=1:
  289. ?t%<32 
  290. t$=255:=t$
  291. string0(t%,t$):$t%=t$:t%?
  292. t$=0:
  293. --------------------------------------------------------------------------------------------------------
  294. check_pagelist_wc
  295.  but%=q%!8
  296. >$ !ws%=pagelist_wc%:
  297.  getw%,,ws%
  298. ?/ offx%=(ws%!4-ws%!20):offy%=(ws%!16-ws%!24)
  299. @! page%=(((q%!4)-offy%)
  300. -48)+1
  301.  nentries%,s_pages% 
  302.  np%:
  303.  page%>np% 
  304.  getnth%,s_pages%,page% 
  305.  ,page%
  306.  current_page%=page%
  307. arrange_pagelist_wc(page%)
  308. pre_process
  309. show_page(page%)
  310.  scanning% 
  311.  but%
  312.  createmenu%,,-1
  313. show_page(page%)
  314.  current_page%=page%
  315.  !q%=main_w%:
  316.  getw%,,q%
  317.  (q%!32) 
  318.  (1<<16) 
  319.  forceredraw%,-1,q%!4,q%!8,q%!12,q%!16
  320. window_title(main_w%,full_name$)
  321.  getentry%,s_pages%,page% 
  322.  adr%
  323. Q# current_page$=
  324. string0(adr%+4)
  325.  "set Upage "+current_page$
  326. update_object(stack%,object%)
  327.  adr%
  328.  getentry%,stack%,object% 
  329.  adr%
  330.  forceredraw%,main_w%,adr%!12,adr%!16,adr%!20,adr%!24
  331. set_icon_state(window%,icon%,eor%,clear%)
  332. \X !errblk%=window%:errblk%!4=icon%:errblk%!8=eor%:errblk%!12=clear%:
  333.  seti%,,errblk%
  334. icon_state(window%,icon%)
  335. `C !errblk%=window%:errblk%!4=icon%:
  336.  geti%,,errblk%:=errblk%!24
  337. set_icon_text(window%,icon%,text$)
  338. c7 !errblk%=window%:errblk%!4=icon%:
  339.  geti%,,errblk%
  340. string0(errblk%!28,
  341. text$,(errblk%!36)-1))
  342. e/ errblk%!8=0:errblk%!12=0:
  343.  seti%,,errblk%
  344. leaf(name$):
  345. name$,".")=0:=name$
  346. name$=
  347. name$,
  348. name$-
  349. name$,"."))
  350. name$,".")=0:=name$
  351. start_drag(type%,x%,y%,x1%,y1%)
  352.  !q%=0:q%!4=5
  353. n) q%!8=x%:q%!12=y%:q%!16=x1%:q%!20=y1%
  354. o= q%!24=0:q%!28=0:q%!32=screen_width%:q%!36=screen_height%
  355.  drag%,,q%
  356.  drag_type%=type%
  357. ramfetch
  358.  DMT_ref%=q%!4
  359.  DMT%=q%!20
  360.  DMT_len%=q%!24
  361.  file_type% 
  362. y>   
  363.  &AFF,&FF9:
  364. save_picture(drag_ptype%,drag_picture%,"")
  365. z*   
  366.  &FFF:
  367. save_text(drag_picture%,"")
  368. {)   
  369.  &D3C:
  370. save_sound(drag_sound%,"")
  371. datasaveack
  372.  q%!12<>myref% 
  373.  DMT%=0
  374.  f_type%=q%!40
  375.  f_type% 
  376.  &AFF,&FF9:
  377. save_picture(drag_ptype%,drag_picture%,
  378. string0(q%+44))
  379.  &D3C:
  380. save_sound(drag_sound%,
  381. string0(q%+44))
  382.  &FFF:
  383. save_text(drag_picture%,
  384. string0(q%+44))
  385.  q%!12=q%!8:q%!16=3
  386.  sendmessage%,17,q%,q%!4
  387. save_picture(type%,token%,name$)
  388.  save$=""
  389.  DMT_ptr%=0 
  390.  "Hourglass_On"
  391.  getentry%,type%,token% 
  392.  adr%
  393.    len%=(!adr%)-16
  394.  readstatus%,type%,token% 
  395.  l% len%=l%
  396.    adr%+=16
  397.  type%=s_sprites% 
  398. .     
  399.  getentry%,s_sprites%,token% 
  400.  adr%
  401.      
  402.  !adr%=(adr%!16)+16 
  403. !       save$=
  404. string0(adr%+4)
  405. +       adr%!4=1:adr%!8=16:adr%!12=!adr%
  406.         len%=!adr%+12:adr%+=4
  407.      
  408. 9       
  409.  unpacksprite%,s_sprites%,token%,sprites%+12
  410.        !sprites%=1
  411.        sprites%!4=16
  412. &       sprites%!8=(sprites%!12)+16
  413.        len%=sprites%!8
  414.        adr%=sprites%
  415.      
  416.      file_type%=&FF9
  417.      file_type%=&AFF
  418.    DMT_mylen%=len%
  419.    DMT_data%=adr%
  420. save_slave(name$,adr%,len%,file_type%)
  421.  save$<>"" 
  422.  getentry%,s_sprites%,token% 
  423.  adr%
  424. string0(adr%+4,save$)
  425. save_sound(sound%,name$)
  426.  DMT_ptr%=0 
  427.  "Hourglass_On"
  428.  getentry%,s_sounds%,sound% 
  429.  adr%
  430.    len%=(!adr%)-24
  431.  readstatus%,s_sounds%,sound% 
  432.  l% len%=l%
  433.    adr%+=24
  434.    DMT_mylen%=len%
  435.    DMT_data%=adr%
  436. save_slave(name$,adr%,len%,&D3C)
  437. save_text(text%,name$)
  438.  getentry%,s_text%,text% 
  439.  adr%
  440.  movedata%,adr%,ws%,!adr%
  441.  adr%=ws%+4:t%=adr%
  442.  len%=0
  443.  ?t%=13 ?t%=10
  444.  ?t%<>0 len%+=1:t%+=1
  445. ?t%=0 
  446. ?t%=0
  447.  DMT_ptr%=0 
  448.  "Hourglass_On"
  449.    DMT_mylen%=len%
  450.    DMT_data%=adr%
  451. save_slave(name$,adr%,len%,&FFF)
  452. save_slave(name$,adr%,len%,file_type%)
  453.  DMT% 
  454.  DMT_mylen%-DMT_ptr%>DMT_len% 
  455.      l%=DMT_len%
  456.      l%=DMT_mylen%-DMT_ptr%
  457.      
  458.  "Hourglass_Off"
  459.  "Wimp_TransferBlock",task_handle%,DMT_data%+DMT_ptr%,DMT_ref%,DMT%,l%
  460.    DMT_ptr%+=l%
  461.    q%!12=q%!8:q%!16=7
  462.    q%!24=l%
  463.  sendmessage%,18,q%,q%!4:
  464.  send RAM transmit
  465. .    
  466.  "save "+name$+" "+
  467. ~adr%+" +"+
  468. ~len%
  469. +    
  470.  "SETTYPE "+name$+" "+
  471. ~file_type%
  472.  "Hourglass_Off"
  473. dataload
  474.  movedata%,q%,old_q%,256
  475.  old_q%!40 
  476.  &BC3:
  477. E     
  478.  old_q%!20=main_w% 
  479.  (old_q%!20=-2 
  480.  old_q%!24=icon_bar%) 
  481.        
  482.  old_q%!12<>0 
  483.        
  484.  modified% 
  485. 4         
  486. open_query("load"+
  487. string0(old_q%+44))
  488.        
  489. .         
  490. load_file(
  491. string0(old_q%+44),1)
  492. T         old_q%!12=old_q%!8:old_q%!16=4:
  493.  "Wimp_SendMessage",17,old_q%,old_q%!4
  494.        
  495.      
  496. load_file(name$,error%)
  497. (name$):l%=
  498. set_slot(
  499. &4000)*&4000+&4000,error%)
  500.  newfile%
  501. . full_name$=
  502. name$,
  503. (name$)-
  504. name$,"!")-1)
  505.  "Hourglass_On"
  506.  "load  "+name$+" 40000"
  507.  version%=!&4000C
  508.  locatefile%,&78000
  509.  modified%=0
  510.  query_string$=""
  511.  edited_area%=0
  512. W current_page%=!&40020:toolbox_on%=!&40024:menu_enabled%=!&40028:page_size%=!&4002C
  513. P h_scroll%=!&40060:v_scroll%=!&40064:title_bar%=!&40068:toggle_icon%=!&4006C
  514. < scanning%=!&40070:scan_keys%=!&40074:scan_time%=!&40078
  515. size_page
  516. redefine_main_w
  517. open_main_w
  518.  !&40030 
  519. 4   t%=&40030:x%=t%!4:y%=t%!8:x1%=t%!12:y1%=t%!16
  520.  x1%>screen_width% x%=x%-(x1%-x%):x1%=screen_width%
  521.  y1%+40>screen_height% y%=y%-(y1%-y%)-40:y1%=screen_height%-40
  522.  x%<0 x%=0
  523.  y%<0 y%=0
  524. open_window(main_w%,x%,y%,x1%,y1%,t%!20,t%!24,-1)
  525.  "Hourglass_Off"
  526.  "OS_ReadVarVal","Obey$Dir",main%,1000 
  527.  ,,T%
  528.  T%?main%=0
  529.  full_name$=
  530. string0(main%)
  531. window_title(main_w%,full_name$)
  532. ! appsprite$=
  533. leaf(full_name$)
  534. ' menu$=
  535. appsprite$,
  536. (appsprite$)-1)
  537. menu$<12 
  538. :menu$=menu$+
  539. menu$=12
  540. --------------------------------------------------------------------------------------------------------
  541. new_file
  542. set_slot(
  543. +&4000,2)
  544.  newfile%
  545.  t%=1 
  546.  newstack%
  547.  full_name$="No_Name"
  548. ----------------------------------------------------------------------------------------------------
  549. open_centre(handle%,off%)
  550.  !q%=handle%:
  551.  getw%,,q%
  552. +( w%=(q%!12)-(q%!4):h%=(q%!16)-(q%!8)
  553.  wx%=screen_width%
  554.  wy%=screen_height%
  555. open_window(handle%,wx%,wy%+off%,wx%+w%,wy%+h%+off%,q%!20,q%!24,-1)
  556. open_main_w
  557.  !ws%=main_w%:
  558.  getw%,,ws%
  559.  sx%=ws%!4:sy%=ws%!8
  560.  sx1%=ws%!12:sy1%=ws%!16
  561. 5) sh%=screen_height%:sw%=screen_width%
  562.  hs%=0:vs%=0:tb%=0
  563.  h_scroll% hs%=40
  564.  v_scroll% vs%+=40
  565.  title_bar% tb%=36
  566.  w%=sx1%-sx%:h%=sy1%-sy%
  567.  sy1%+tb%>sh% sy1%=sh%-tb%:sy%=sy1%-h%
  568.  sy%<hs% sy%=hs%
  569.  sx1%+vs%>sw% sx1%=sw%-vs%:sx%=sx1%-w%
  570.  sx%<0 sx%=0
  571.  !ws%=main_w%
  572.  ws%!4=sx%
  573.  ws%!8=sy%
  574.  ws%!12=sx1%
  575.  ws%!16=sy1%
  576.  ws%!20=0:ws%!24=0
  577.  ws%!28=-1
  578. open_window(main_w%,ws%!4,ws%!8,ws%!12,ws%!16,ws%!20,ws%!24,ws%!28)
  579.  !q%=main_w%:
  580.  getw%,,ws%
  581. ----------------------------------------------------------------------------------------------------
  582. draw_picture(type%,token%,x%,y%,w%,h%,flags%)
  583.  type%=s_draw% x%+=(1<<xef%):y%+=(1<<yef%):w%-=(2<<xef%):h%-=(2<<yef%)
  584.  getentry%,type%,token% 
  585.  !a%>sprite_size%-24 flags%=flags%
  586. P8 !errblk%=x%:errblk%!4=y%:errblk%!8=w%:errblk%!12=h%
  587.  rendershape%,type%,token%,sprites%,errblk%,flags%
  588. ----------------------------------------------------------------------------------------------------
  589. window_title(window%,title$)
  590.  window%=main_w% 
  591. X1   
  592.  getentry%,s_pages%,current_page% 
  593.  adr%
  594. Y+   title$=title$+" - "+
  595. string0(adr%+4)
  596.  modified% title$=title$+" *"
  597. \( !errblk%=window%:
  598.  getwi%,,errblk%
  599. string0(errblk%!76,title$)
  600.  forceredraw%,-1,errblk%!4,(errblk%!16),errblk%!12,errblk%!16+36
  601. ----------------------------------------------------------------------------------------------------
  602. check_icon_bar
  603. f" mx%=!q%:my%=q%!4:button%=q%!8
  604.  button% 
  605. do_icon_bar_menu(mx%,my%):
  606. front(main_w%)
  607.  setcaret%,main_w%,-1,0,0,10
  608. do_icon_bar_menu(x%,y%)
  609.  scan_time%=0:scan_time%=100:scan_keys%=1
  610.  opt%=0
  611. 2:P%=main%
  612.  [opt opt%
  613. .iconmenu
  614.  equs menu$
  615. r) equd &070207:equd 208:equd 40:equd 0
  616. s% equd 0:equd info%:equd &07000021
  617.  equs "Info        "
  618. u0 equd scanning%
  619. 1:equd ibmenu:equd &07000021
  620.  equs "Scanning    "
  621. w& equd 0:equd somenu:equd &07000021
  622.  equs "Sound volume"
  623. y$ equd &80:equd -1:equd &07000021
  624.  equs "Quit        "
  625. .ibmenu
  626.  equs "Scanning":equd 0
  627. ~) equd &070207:equd 208:equd 40:equd 0
  628. 1 equd (scan_keys%=2)
  629. 1:equd -1:equd &07000021
  630.  equs "Two switches"
  631. ) equd &80:equd ibmenu1:equd &07000021
  632.  equs "Speed       "
  633. .somenu
  634.  equs "Sound Volume"
  635. ) equd &070207:equd 208:equd 40:equd 0
  636. 4 equd (sound_vol%=&10F)
  637. 1:equd -1:equd &07000021
  638.  equs "Off         "
  639. 4 equd (sound_vol%=&14F)
  640. 1:equd -1:equd &07000021
  641.  equs "Quiet       "
  642. < equd &80 
  643.  ((sound_vol%=&17F)
  644. 1):equd -1:equd &07000021
  645.  equs "Loud        "
  646. .ibmenu1
  647. ! equs "Seconds":equb 0:equd 0
  648. ) equd &070207:equd 208:equd 40:equd 0
  649. $ equd &84:equd -1:equd &07000121
  650. " equd ibmess:equd ibval:equd 8
  651. .ibval equs "a0-9."+
  652. '.ibmess equs 
  653. (scan_time%/100)+
  654.  createmenu%,,main%,mx%-16,260
  655.  menu%=5
  656. ----------------------------------------------------------------------------------------------------
  657. icon_bar_menu
  658.  !q% 
  659.      
  660.  q%!4 
  661. '       
  662.  -1:scanning%=scanning% 
  663.        
  664. 7         
  665.  scan_keys%=2 scan_keys%=1 
  666.  scan_keys%=2
  667.          scanning%=
  668.        
  669. )         t%=(
  670. string0(ibmess)))*100
  671.          
  672.  t% scan_time%=t%
  673.          scanning%=
  674.      
  675.      
  676.  q%!4 
  677.        
  678.  0:sound_vol%=&10F
  679.        
  680.  1:sound_vol%=&14F
  681.        
  682.  2:sound_vol%=&17F
  683.      
  684.  modified% 
  685. open_query("") 
  686. finish
  687.  getp%,,q%:
  688.  q%!8 
  689. do_icon_bar_menu(mx%,my%)
  690. --------------------------------------------------------------------------------------------------------
  691. draw_main_w(wx%,wy%,wx1%,wy1%,offx%,offy%)
  692.  getentry%,s_pages%,current_page% 
  693.  adr%
  694. % stack%=adr%!20:page_col%=adr%!28
  695.  setcol%,page_col%:
  696.  wx%+offx%,wy%+offy%,wx1%-wx%,wy1%-wy%
  697.  nentries%,stack% 
  698.  no% 
  699.  object%=1 
  700. 0     
  701.  getnth%,stack%,object% 
  702.  adr%,token%
  703. E     x%=adr%!12:y%=adr%!16:x1%=adr%!20:y1%=adr%!24:flags%=adr%!36
  704. C     
  705.  x%<wx1% 
  706.  x1%>wx% 
  707.  y%<wy1% 
  708.  y1%>wy% 
  709.  (flags%
  710. 128)=0 
  711.        
  712.  adr%!4 
  713. <         
  714.  s_text%:
  715. draw_text(stack%,token%,offx%,offy%)
  716. e         
  717.  s_sprites%,s_draw%:
  718. draw_picture(adr%!4,adr%!8,x%+offx%,y%+offy%,x1%-x%,y1%-y%,flags%)
  719.        
  720.      
  721. strip_spaces(text$)
  722. text$=32 text$=
  723. text$,
  724. text$-1)
  725. text$<>32
  726.  =text$
  727. lower_case(text$):
  728.  text$="":=""
  729.  t$,t%,c%
  730. text$
  731.    c%=
  732. text$,t%,1))
  733.  c%>64 
  734.  c%<91 c%+=32
  735.    t$=t$+
  736. ----------------------------------------------------------------------------------------------------
  737. draw_text(stack%,token%,offx%,offy%)
  738.  speaking_text% 
  739.  speak_token%=token% 
  740. highlight_text(stack%,token%,offx%,offy%,speak_word%):
  741.  getentry%,stack%,token% 
  742.  adr%
  743.  x%=(adr%!12)+offx%
  744.  y%=(adr%!16)+offy%
  745. " x1%=(adr%!20)-(1<<xef%)+offx%
  746. " y1%=(adr%!24)-(1<<yef%)+offy%
  747. . flags%=adr%!36:font%=adr%!40:b_s%=adr%!32
  748. 0 fcol%=adr%!52:
  749.  fcol% 
  750.  &FF fcol%=page_col%
  751.  bcol%=adr%!56
  752.  flags%
  753. 1 fcol%=fcol%
  754. &FFFFFF00:bcol%=bcol%
  755. &FFFFFF00
  756. draw_border(b_s%,fcol%,bcol%,x%,y%,x1%,y1%)
  757.  x%+=(1<<xef%)
  758.  x1%-=(1<<xef%)
  759.  y%+=(1<<yef%)
  760.  y1%-=(1<<yef%)
  761. :font%=0
  762.  font% 
  763.  getentry%,s_fonts%,font% 
  764.  findfont%,,t%+4,adr%!44,adr%!48 
  765.  font%
  766.  font% 
  767.  bcol% 
  768.  &FF bcol%=fcol%
  769.  "ColourTrans_SetFontColours",font%,bcol%,fcol%,14
  770.  fontinfo%,font% 
  771.  ,cx%,cy%,cx1%,cy1%
  772. >   cx%=-(1<<xef%):cy%=-(1<<yef%):cx1%=8<<xef%:cy1%=8<<yef%
  773.  text_height%=cy1%
  774.  getentry%,s_text%,adr%!8 
  775.  text%
  776.  text%+=4
  777.  text_offset%=0
  778. , px%=x%+margin%:py%=y1%-text_height%+cy%
  779. $ centre%=
  780. :right%=
  781. :underline%=
  782.  flags% 
  783.  8 centre%=
  784.  flags% 
  785.  16 right%=
  786.  flags% 
  787.  32 underline%=
  788.  text_offset%?text% 
  789.      
  790. /     
  791.  13:py%-=text_height%:text_offset%+=1
  792.      
  793.     -       text$=
  794. string0(text%+text_offset%)
  795.        text_offset%+=
  796. text$
  797.        
  798.  font% 
  799. @         
  800.  stringwidth%,,text$,1<<30,1<<30,-1,
  801. text$ 
  802.  ,,w%
  803. &         
  804.  converttoos%,,w% 
  805. -         
  806.  centre% px%=x%+(x1%-x%)
  807. (         
  808.  right% px%=x1%-w%-margin%
  809. 6         
  810.  underline% text$=
  811. (25)+
  812. (16)+text$
  813. .         
  814.  paint%,,text$,1<<4,px%,py%-cy%
  815.        
  816.          w%=
  817. text$*cx1%
  818. -         
  819.  centre% px%=x%+(x1%-x%)
  820. (         
  821.  right% px%=x1%-w%-margin%
  822. 3         
  823.  setcol%,fcol%:
  824.  px%,py%+cy1%:
  825. text$
  826. 8         
  827.  underline% 
  828.  px%,py%-cy%:
  829. 1,cx1%*
  830. text$,0
  831.        
  832.  text_offset%?text%=0
  833.  font% 
  834.  losefont%,font%
  835. draw_border(style%,col%,bcol%,x%,y%,x1%,y1%)
  836.  (bcol%
  837. &FF)=0 
  838.  setcol%,bcol%:
  839.  x%,y%,x1%-x%,y1%-y%
  840.  style% 
  841.      
  842.  setcol%,col%
  843.      
  844.  x%,y%,x1%-x%,y1%-y%
  845.  bold
  846.      
  847.  setcol%,&FFFFFF00
  848. &#     
  849.  x%,y%:
  850.  x%,y1%:
  851.  x1%,y1%
  852. ''     
  853.  setcol%,!(wimp_palette%+16)
  854.      
  855.  x1%,y%:
  856.  x%,y%
  857.  inset
  858. *'     
  859.  setcol%,!(wimp_palette%+16)
  860. +#     
  861.  x%,y%:
  862.  x%,y1%:
  863.  x1%,y1%
  864.      
  865.  setcol%,&FFFFFF00
  866.      
  867.  x1%,y%:
  868.  x%,y%
  869. play_sound(sound%)
  870.  getentry%,s_sounds%,sound% 
  871.  adr1%
  872. 4G len%=(!adr1%)-24:
  873.  readstatus%,s_sounds%,sound% 
  874.  l% len%=l%
  875. errorbox:
  876.  playsound%,adr1%+24,len%,sound_vol%
  877. play_sound_wait(sound%)
  878.  getentry%,s_sounds%,sound% 
  879.  adr1%
  880. <G len%=(!adr1%)-24:
  881.  readstatus%,s_sounds%,sound% 
  882.  l% len%=l%
  883.  playsound%,adr1%+24,len%,sound_vol%
  884.  playsound%,0 
  885. t%<>-1
  886. make_space(plus%)
  887. B# size%=(!&40004-&40000)+plus%*2
  888. C+ slot_size%=
  889. +(size%
  890. &4000)*&4000+&4000
  891.  "Wimp_SlotSize",slot_size%,-1 
  892.  t%<slot_size% 
  893.  1,"Ultimap has run out of memory"
  894. set_slot(size%,error%)
  895.  slot_size%=size%
  896.  "Wimp_SlotSize",slot_size%,-1 
  897.  t%<slot_size% 
  898.  error%,"There's not enough memory to load this file!"
  899. open_print_w
  900.  portrait% a%=0:b%=1<<21 
  901.  a%=1<<21:b%=0
  902. set_icon_state(print_w%,6,a%,1<<21)
  903. set_icon_state(print_w%,7,b%,1<<21)
  904. set_icon_text(print_w%,2,"1")
  905.  getp%,,q%
  906.  createmenu%,,-1
  907.  createmenu%,,print_w%,!q%-30,q%!4+60
  908. check_print_w
  909.  b%=q%!8
  910.  q%!16 
  911.  createmenu%,,-1
  912. ])     !q%=print_w%:q%!4=7:
  913.  geti%,,q%
  914. ^H     
  915.  (q%!24) 
  916.  (1<<21) style%=2:portrait%=
  917.  style%=1:portrait%=
  918. _)     !q%=print_w%:q%!4=2:
  919.  geti%,,q%
  920. `$     run_num%=
  921. string0(q%!28))
  922. a      
  923.  run_num%=0 run_num%=1
  924. b(     
  925. print_routine(style%,run_num%)
  926. c$     
  927.  createmenu%,,-1
  928. print_routine(style%,run_num%)
  929.  phandle%,ohandle%
  930.  left%,bottom%,right%,top%
  931.  copiesleft%,rect%
  932.  phandle%=
  933. ("printer:")
  934. #phandle%:
  935.  1,"There is no printer driver!"
  936.  PDselect%,phandle%,"Ultima" 
  937.  ohandle%
  938.  PDabort%,phandle%:
  939. #phandle%:
  940.  PDselect%,ohandle%:printing%=
  941.  PDpagesize% 
  942.  ,,,left%,bottom%,right%,top%
  943.  "Hourglass_On"
  944.  loop%=1 
  945.  run_num%
  946. w"   !ws%=main_w%:
  947.  getwi%,,ws%
  948. x4   mx%=ws%!44:my%=ws%!48:mx1%=ws%!52:my1%=ws%!56
  949. y4   !box%=mx%:box%!4=my%:box%!8=mx1%:box%!12=my1%
  950.  style% 
  951.      
  952.  landscape
  953.        
  954.  page_size%=4 
  955.          scx=.67
  956.          scy=.67
  957. K         !matrix%=0:matrix%!4=-scx*2^16:matrix%!8=scy*2^16:matrix%!12=0
  958. [         !origin1%=(right%-left%)
  959. 16:origin1%!4=top%-(top%-bottom%)
  960. 2-(top%-bottom%)
  961.        
  962.          scx=1.4
  963.          scy=1.5
  964. K         !matrix%=0:matrix%!4=-scx*2^16:matrix%!8=scy*2^16:matrix%!12=0
  965. J         !origin1%=(right%-left%)
  966. 20:origin1%!4=top%-(top%-bottom%)
  967.        
  968.      
  969.  portrait
  970.        scx=1.05
  971.        scy=.95
  972. H       !matrix%=scx*2^16:matrix%!4=0:matrix%!8=0:matrix%!12=scy*2^16
  973. 9       !origin1%=(right%-left%)
  974. 20:origin1%!4=bottom%
  975.  PDgiverec%,loop%,box%,matrix%,origin1%,&FFFFFF00
  976.    printing%=
  977.  PDdrawpage%,1,box2%,0,0 
  978.  copiesleft%,,rect%
  979.  copiesleft%<>0
  980. ,     
  981. draw_main_w(mx%,my%,mx1%,my1%,0,0)
  982. 1     
  983.  PDgetrec%,,box2% 
  984.  copiesleft%,,rect%
  985.  PDendjob%,phandle%
  986. #phandle%
  987.  PDselect%,ohandle%
  988.  printing%=
  989.  "Hourglass_Off"
  990. hide_object(stack%,token%,hide%,on_vdu%)
  991.  getentry%,stack%,token% 
  992.  adr1%
  993.  hide%<>0 
  994.  ((adr1%!36)
  995. 128)<>0 on_vdu%=0
  996.  hide%=0 
  997.  ((adr1%!36)
  998. 128)=0 on_vdu%=0
  999.  hide% adr1%!36=(adr1%!36)
  1000.  adr1%!36=(adr1%!36)
  1001. &FFFFFF7F
  1002.  on_vdu% 
  1003.  forceredraw%,main_w%,adr1%!12,adr1%!16,adr1%!20+(4<<xef%),adr1%!24+(1<<yef%)
  1004. light_object(stack%,token%,hi%,on_vdu%)
  1005.  getentry%,stack%,token% 
  1006.  adr1%
  1007.   h%=(adr1%!36)
  1008.  hi% hi%=1
  1009.  hi% adr1%!36=(adr1%!36)
  1010.  adr1%!36=(adr1%!36)
  1011. &FFFFFFFE
  1012.  on_vdu% 
  1013.  h%<>hi% 
  1014.  forceredraw%,main_w%,adr1%!12,adr1%!16,adr1%!20,adr1%!24
  1015. stack(page%)
  1016.  adr%
  1017.  getentry%,s_pages%,page% 
  1018.  adr%
  1019.  adr%=0 
  1020.  adr%!20=0 
  1021.  2,"bad stack from page"
  1022.  =adr%!20
  1023. which_object(page%,x%,y%)
  1024.  stack%=
  1025. stack(page%)
  1026.  nentries%,stack% 
  1027.  no%:o%=0
  1028.  no%=0:=0
  1029.  t%=1 
  1030.  getnth%,stack%,t% 
  1031.  adr%,token%
  1032.  x%>=adr%!12 
  1033.  y%>=adr%!16 
  1034.  x%<adr%!20 
  1035.  y%<adr%!24 
  1036.  ((adr%!36)
  1037. 128)=0 
  1038. 8     o%=token%:off_mx%=x%-adr%!12:off_my%=y%-adr%!16
  1039. arrange_pagelist_wc(page%)
  1040.  iw%=280:ih%=-48:pl_tick%=0
  1041.  nentries%,s_pages% 
  1042. % !q%=0:q%!8=iw%-(3<<xef%):q%!12=0
  1043.  np%<3 q%!4=ih%*3 
  1044.  q%!4=ih%*np%
  1045.  setextent%,pagelist_wc%,q%
  1046.  iy%=ih%:cur_y%=iy%
  1047.  loop%=1
  1048.  getnth%,s_pages%,loop% 
  1049.  adr%,token%
  1050.  token%=page% cur_y%=iy%:pl_tick%=iy%
  1051.    iy%+=ih%
  1052. " !q%=pagelist_wc%:
  1053.  getw%,,q%
  1054. " offy%=(q%!16-q%!24):sy%=q%!24
  1055. ( wy%=(q%!8)-offy%:wy1%=(q%!16)-offy%
  1056.  cur_y%<wy% sy%+=cur_y%-wy%
  1057.  cur_y%-ih%>wy1% sy%=cur_y%-ih%
  1058.  q%!24=sy%
  1059.  o%=(q%!32)
  1060. (1<<16)
  1061.  openw%,,q%
  1062.  o%=0 
  1063.  closew%,,q%
  1064.  forceredraw%,-1,q%!4,q%!8,q%!12,q%!16
  1065. draw_pagelist_wc(wx%,wy%,wx1%,wy1%)
  1066.  nentries%,s_pages% 
  1067.  findfont%,,icon_font$,12*16,12*16 
  1068.  font%
  1069. * ih%=-48:ix%=0:iy%=ih%:ix1%=280:iy1%=0
  1070. page%=1
  1071.  ix%<=wx1% 
  1072.  ix1%>=wx% 
  1073.  iy%<=wy1% 
  1074.  iy1%>=wy% 
  1075. 0     
  1076.  getnth%,s_pages%,page% 
  1077.  adr%,token%
  1078.      
  1079.  iy%=pl_tick% 
  1080. 2       !q%=ix%:q%!4=iy%:q%!8=ix%+38:q%!12=iy1%
  1081. -       q%!16=&7000019:
  1082. string0(q%+20,"
  1083.        
  1084.  ploticon%,,q%
  1085.      
  1086. 4     !q%=ix%+38:q%!4=iy%:q%!8=ix%+280:q%!12=iy1%
  1087. =     q%!16=font%<<24 
  1088.  &171:q%!20=adr%+4:q%!24=0:q%!32=12
  1089.      
  1090.  ploticon%,,q%
  1091.    iy%+=ih%:iy1%+=ih%
  1092.  losefont%,font%
  1093.  !q%=pagelist_wc%
  1094. pt_from_context(context%)
  1095.  context% 
  1096.  s_mousedrag%:=4
  1097.  s_often%:=8
  1098.  s_pointer%:=16
  1099.  s_mouse%:=20
  1100.  s_pageshown%:=32
  1101. name_exsists(stack%,f$)
  1102.  nentries%,stack% 
  1103.  ne%=0:=0
  1104.  f%=0:f$=
  1105. lower_case(f$)
  1106. entry%=1
  1107.  getnth%,stack%,entry% 
  1108.  adr%,token%
  1109. lower_case(
  1110. string0(adr%+4)) f%=token%
  1111. size_page
  1112.  !q%=main_w%:
  1113.  getwi%,,q%
  1114.  (q%!32)
  1115. (1<<16) open%=
  1116.  open%=
  1117.  "Wimp_DeleteWindow",,q%
  1118.  bh%=q%!28
  1119.  portrait%=
  1120.  page_size% 
  1121.         
  1122.  1:q%!52=1279:q%!48=-920
  1123.  2:q%!52=1599:q%!48=-1160
  1124.  3:q%!52=2046:q%!48=-1500
  1125.  4:q%!52=1320:q%!48=-2000:portrait%=
  1126. :q%!52=1279:q%!48=-920
  1127.  "Wimp_CreateWindow",,q%+4 
  1128.  main_w%
  1129. U !q%=main_w%:
  1130.  getw%,,q%:
  1131. open_window(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,bh%)
  1132.  ***************************** clicks below here **************************
  1133. begin_trying
  1134.  trying%=
  1135.  click_underway%=
  1136.  pause_on%=
  1137.  pointer_object%=0
  1138.  input$=""
  1139. zero_page_stack
  1140. pre_process
  1141. show_page(current_page%)
  1142.  scanning% 
  1143.  "set Uobject "+
  1144.  "set Ustatus "+
  1145.  status$=""
  1146. delight
  1147. %! stack%=
  1148. stack(current_page%)
  1149.  nentries%,stack% 
  1150.  no% 
  1151.  object%=1
  1152. ))     
  1153.  getnth%,stack%,object% 
  1154.  adr%
  1155. *+     
  1156.  adr%!36 
  1157.  1 adr%!36=(adr%!36)
  1158.  speak_token% 
  1159. update_object(stack%,speak_token%)
  1160. zero_page_stack:
  1161. 4:T%!page_stack%=0:
  1162. :page_ptr%=0:
  1163. pre_process
  1164.  pointer_object%=0
  1165.  pointer_int%=0
  1166.  often_int%=0
  1167.  seq_int%=0
  1168.  scan_object%=0
  1169. 82 speaking_text%=0:speak_word%=0:speak_token%=0
  1170.  pointer_on%=
  1171.  try_time%=
  1172.  nentries%,s_sequences% 
  1173. >/    
  1174.  getnth%,s_sequences%,1 
  1175.  adr%,token%
  1176. ?C    
  1177.  killentry%,s_sequences%,token%:
  1178.      clear all sequences
  1179.  nentries%,s_clickson% 
  1180. E*    
  1181.  getnth%,s_clickson%,1 
  1182.  ,token%
  1183. F?    
  1184.  killentry%,s_clickson%,token%:
  1185.      clear all clicks
  1186. I! stack%=
  1187. stack(current_page%)
  1188.  getentry%,s_pages%,current_page% 
  1189.  adr%
  1190.  adr%!24 
  1191.  writestatus%,s_clicks%,adr%!24,0
  1192.  nentries%,stack% 
  1193.  no% 
  1194.  object%=1
  1195. O)     
  1196.  getnth%,stack%,object% 
  1197.  adr%
  1198. Pa     adr%!36=(adr%!36)
  1199. &FFFFFF3E:
  1200.      ensure all objects shown, unselected and unhighlighted
  1201.      click%=adr%!28
  1202. Rh     
  1203.  click% 
  1204.  writestatus%,s_clicks%,click%,0:
  1205.           zero status to avoid repetition of click
  1206.  object%=0
  1207.  object%=0 
  1208. W3     
  1209.  getentry%,s_pages%,current_page% 
  1210.  adr%
  1211.      click%=adr%!24
  1212. Z)     
  1213.  getnth%,stack%,object% 
  1214.  adr%
  1215.      click%=adr%!28
  1216.  click% 
  1217. ^-     
  1218.  getentry%,s_clicks%,click% 
  1219.  adr%
  1220. _-     
  1221.  readstatus%,s_clicks%,click% 
  1222.      
  1223.  s%=0 
  1224. a-       
  1225.  writestatus%,s_clicks%,click%,1
  1226. b5       
  1227.  adr%!4 
  1228. pre_click(s_mousedrag%,adr%!4,0)
  1229.        
  1230.  adr%!8 
  1231.          often_int%=
  1232. e&         adr%!24=try_time%+adr%!12
  1233. f*         
  1234. pre_click(s_often%,adr%!8,1)
  1235.        
  1236.        
  1237.  adr%!16 
  1238.          pointer_int%=
  1239. j-         
  1240. pre_click(s_pointer%,adr%!16,1)
  1241.        
  1242. l3       
  1243.  adr%!20 
  1244. pre_click(s_mouse%,adr%!20,1)
  1245.        
  1246.  adr%!32 
  1247. n/         
  1248. pre_click(s_pageshown%,adr%!32,1)
  1249. o,         
  1250. do_click(s_pageshown%,adr%!32)
  1251.        
  1252.      
  1253. pre_click(context%,click%,seq%)
  1254.  adr%
  1255.  getentry%,context%,click% 
  1256.  adr%
  1257.  end%=adr%+!adr%:adr%+=4
  1258.    len%=!adr%:cmd%=adr%!4
  1259.  cmd% 
  1260. }8     
  1261.  1,3,4:
  1262.  seq%=0 
  1263. pre_list(cmd%,adr%+8,len%-12)
  1264. ~A     
  1265.  context%=s_pageshown% 
  1266.  seq%=0 
  1267. play_sound(adr%!8)
  1268.      
  1269.        
  1270.  seq% 
  1271.          seq_int%=
  1272. 0         flag%=adr%!12:s%=adr%+36:e%=len%-40
  1273. .         
  1274.  flag% 
  1275.  4 s%=adr%+40:e%=len%-44
  1276.          
  1277. pre_list(3,s%,e%)
  1278.        
  1279.    adr%+=len%
  1280.  adr%>=end%
  1281. pre_list(cmd%,adr%,len%)
  1282. list%=0
  1283.  cmd% 
  1284. 1     
  1285. light_object(stack%,list%!adr%,1,0)
  1286. 0     
  1287. hide_object(stack%,list%!adr%,1,0)
  1288. 0     
  1289. hide_object(stack%,list%!adr%,0,0)
  1290. try_poll
  1291.  poll%,,q% 
  1292.  playsound%,0
  1293.  "OS_Module",16,"Ubase%Ultimap"
  1294. try_null
  1295. redraw_window
  1296. open_window(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28)
  1297. close_window(!q%)
  1298.  !q%=main_w% 
  1299.  pointer_on%<>
  1300. "pointer 1"
  1301. L     
  1302.  !q%=main_w% 
  1303.  pointer_on%=1 
  1304.  "Wimp_SpriteOp",36,1,"ptr_clock",2
  1305. K     
  1306.  !q%=main_w% 
  1307.  pointer_on%=2 
  1308.  "Wimp_SpriteOp",36,1,"ptr_hand",2
  1309. try_mouse
  1310. try_user_drag
  1311. try_keys
  1312. try_menu_select
  1313.  17,18:
  1314. try_receive(q%)
  1315. try_receive(q%)
  1316.  q%!16 
  1317. finish:
  1318. datasaveack
  1319.  q%!40=&BC3 
  1320. dataload
  1321. ramfetch
  1322.  &502:
  1323. help_request
  1324.  &400C0:
  1325. try_menu_warning
  1326.  &400C1:
  1327.      
  1328.  "Hourglass_On"
  1329.      
  1330. get_mode_info
  1331.      
  1332. lose_fonts
  1333.      
  1334. set_icon_fonts
  1335.      
  1336.  "Hourglass_Off"
  1337. try_null
  1338. 4 !q%=main_w%:
  1339.  getw%,,q%:
  1340. ((q%!32)
  1341. (1<<16))=0 
  1342.  seq_int% 
  1343. check_sequences(
  1344. check_clicks
  1345. input$,1)=
  1346. 13:input$=
  1347. input$,
  1348. (input$)-1):!q%=main_w%:q%!24=13:
  1349. try_keys
  1350.  pointer_int% 
  1351.  scanning%=
  1352. under_pointer
  1353.  often_int% 
  1354. often
  1355.  scanning% 
  1356.  scan_keys%=1 
  1357.  playsound%,0 
  1358.  t%<>-1 
  1359.  speaking_text% 
  1360.      
  1361.  speak_sound% 
  1362. )       
  1363. play_sound_wait(speak_sound%)
  1364.      
  1365.        
  1366. 7:t%=
  1367.      
  1368.      
  1369. speaking_text
  1370. check_sysvars
  1371. check_sysvars
  1372.  "OS_ReadVarVal","Upage",main%,1000 
  1373.  ,,T%
  1374. % T%?main%=0:page$=
  1375. string0(main%)
  1376.  page$<>current_page$ 
  1377. *   page%=
  1378. name_exsists(s_pages%,page$)
  1379.  page% 
  1380.      current_page%=page%
  1381.      
  1382. pre_process
  1383. "     
  1384. show_page(current_page%)
  1385.      
  1386.  scanning% 
  1387.  "OS_ReadVarVal","Uobject",main%,1000 
  1388.  ,,T%
  1389. ' T%?main%=0:object$=
  1390. string0(main%)
  1391.  object$<>"" 
  1392.  "set Uobject "+
  1393. 4   input$=object$:!q%=main_w%:q%!24=13:
  1394. try_keys
  1395. try_mouse
  1396.  q%!12 
  1397.  q%!16=icon_bar% 
  1398.  1,&100,&9000,1:
  1399. check_icon_bar
  1400.  main_w%:
  1401. try_main_w
  1402.  pagelist_wc%:
  1403. check_pagelist_wc
  1404.  print_w%:
  1405. check_print_w
  1406. try_main_w
  1407.  setcaret%,main_w%,-1,0,0,10
  1408.  mx%=!q%:my%=q%!4
  1409.  button%=q%!8
  1410.  button%
  1411.  menu_enabled% 
  1412. open_try_menu(mx%,my%)
  1413.  scanning% 
  1414. scan_click(button%):
  1415.  pointer_on%=1 
  1416.  icon%=q%!16
  1417.  !q%=main_w%:
  1418.  getw%,,q%
  1419. + offx%=(q%!4-q%!20):offy%=(q%!16-q%!24)
  1420.  mx%-=offx%:my%-=offy%
  1421.  button% 
  1422. %     stack%=
  1423. stack(current_page%)
  1424. 5     object%=
  1425. which_object(current_page%,mx%,my%)
  1426.      
  1427.  object% 
  1428. -       
  1429.  getentry%,stack%,object% 
  1430.  adr%
  1431.        click%=adr%!28
  1432.        
  1433.  click% 
  1434. 1         
  1435.  getentry%,s_clicks%,click% 
  1436.  adr%
  1437.          
  1438.  adr%!4 
  1439. 6           
  1440.  getentry%,s_mousedrag%,adr%!4 
  1441.  adr%
  1442. +           
  1443. begin_save(object%,adr%!12)
  1444.          
  1445.        
  1446.      
  1447.  &100
  1448. 2     page_ptr%-=4:
  1449.  page_ptr%<0 page_ptr%=1020
  1450. %     
  1451.  page_ptr%!page_stack%<>0 
  1452.        
  1453. delight
  1454. .       current_page%=page_ptr%!page_stack%
  1455. "       page_ptr%!page_stack%=0
  1456.        
  1457. pre_process
  1458. $       
  1459. show_page(current_page%)
  1460.        
  1461.  scanning% 
  1462.      
  1463.  &400
  1464. %     stack%=
  1465. stack(current_page%)
  1466. 5     object%=
  1467. which_object(current_page%,mx%,my%)
  1468.      
  1469.  object% 
  1470. -       
  1471.  getentry%,stack%,object% 
  1472.  adr%
  1473.        click%=adr%!28
  1474.        
  1475.  click% 
  1476. 1         
  1477.  getentry%,s_clicks%,click% 
  1478.  adr%
  1479. C         
  1480.  adr%!20 
  1481. do_click_recorded(object%,s_mouse%,adr%!20)
  1482.        
  1483.      
  1484.  5       
  1485.  getentry%,s_pages%,current_page% 
  1486.  adr%
  1487.        click%=adr%!24
  1488.        
  1489.  click% 
  1490. #1         
  1491.  getentry%,s_clicks%,click% 
  1492.  adr%
  1493. $=         
  1494.  adr%!20 
  1495. do_click_recorded(0,s_mouse%,adr%!20)
  1496.        
  1497.      
  1498. try_keys
  1499.  !q% 
  1500.  main_w%
  1501.      key%=q%!24
  1502.      
  1503.  key%=13 
  1504. /'       stack%=
  1505. stack(current_page%)
  1506. 0/       
  1507. lower_case(
  1508. input$,6))="object" 
  1509. 1+         token%=
  1510. input$,
  1511. (input$)-6))
  1512. 2.         
  1513.  getentry%,stack%,token% 
  1514.  adr%
  1515.          
  1516.  adr% 
  1517.            
  1518.  adr%!28 
  1519. 5'             pointer_object%=token%
  1520. 66             
  1521.  getentry%,s_clicks%,adr%!28 
  1522.  adr%
  1523. 7F             
  1524.  adr%!20 
  1525. do_click_recorded(token%,s_mouse%,adr%!20)
  1526.            
  1527.          
  1528.        
  1529. ;A       
  1530. lower_case(
  1531. input$,4))="back" q%!8=&100:
  1532. try_main_w
  1533.        input$=""
  1534.      
  1535. >-       
  1536.  key%=27:
  1537. close_window(main_w%):
  1538. ?&       
  1539.  key%=&180 
  1540. open_print_w:
  1541. @K       
  1542.  key%>31 
  1543.  key%<255 input$=input$+
  1544. (key%) 
  1545.  processkey%,key%
  1546. A"       
  1547. input$=255 input$=""
  1548.      
  1549.  print_w%
  1550. DH     
  1551.  q%!24=13 q%!8=4:q%!16=4:
  1552. check_print_w 
  1553.  processkey%,q%!24
  1554.      
  1555.  processkey%,q%!24
  1556. do_click_recorded(object%,context%,click%)
  1557.  object% status$=".object"+
  1558. object%+"."+
  1559.  object%=0 status$=".background."+
  1560.  "set Ustatus "+
  1561. leaf(full_name$)+"."+current_page$+status$
  1562. do_click(context%,click%)
  1563. do_click(context%,click%)
  1564.  getentry%,context%,click% 
  1565.  adr%
  1566.  movedata%,adr%,ws%+8,!adr%
  1567. T$ !ws%=(ws%!8)+8:ws%!4=12:ws%!8=0
  1568. make_space(!ws%+16)
  1569.  addentry%,s_clickson%,ws%
  1570. check_clicks
  1571. check_clicks
  1572.  nentries%,s_clickson% 
  1573.  nc%=0 
  1574.  click%=1
  1575. ^1   
  1576.  getnth%,s_clickson%,click% 
  1577.  click_adr%
  1578. _+   
  1579.  click_adr%!8<
  1580.  click_adr%!4<>0 
  1581. `0     ptr%=click_adr%!4:cadr%=click_adr%+ptr%
  1582. a-     click_len%=!cadr%:cmd%=cadr%!4:ok%=
  1583.      
  1584.  cmd% 
  1585. c:       
  1586.  1,3,4:
  1587. click_list(cmd%,cadr%+8,click_len%-12)
  1588.        
  1589.          
  1590. delight
  1591. f0         page_ptr%!page_stack%=current_page%
  1592. g6         page_ptr%+=4:
  1593.  page_ptr%=1024 page_ptr%=0
  1594. h"         current_page%=cadr%!8
  1595. iM         
  1596.  current_page%=0 
  1597.  nentries%,s_pages% 
  1598.  t%:current_page%=
  1599. j.         
  1600.  current_page%=0 current_page%=1
  1601.          
  1602. pre_process
  1603. l&         
  1604. show_page(current_page%)
  1605.          
  1606.  scanning% 
  1607.          
  1608.        
  1609. p!         
  1610.  playsound%,0 
  1611. q1         
  1612.  t%=-1 ok%=
  1613. play_sound(cadr%!8)
  1614. r*       
  1615. speak_text(stack%,cadr%!8)
  1616. s!       
  1617. init_seq(
  1618. ,cadr%)
  1619.        
  1620. u)         click_cmd$=
  1621. string0(cadr%+8)
  1622. v)         cmd$=
  1623. lower_case(click_cmd$)
  1624. w'         
  1625. cmd$,10)="load file " 
  1626. x-           file$=
  1627. cmd$,
  1628. cmd$-10):page$=""
  1629.            
  1630. file$," ") 
  1631. z3             page$=
  1632. file$,
  1633. (file$)-
  1634. file$," "))
  1635. {,             file$=
  1636. file$,
  1637. file$," ")-1)
  1638.            
  1639. })           file$=full_name$+"."+file$
  1640.            
  1641. .           
  1642. :click_adr%!4=0:
  1643. "           
  1644. load_file(file$,1)
  1645. Z           
  1646.  page$<>"" page%=
  1647. name_exsists(s_pages%,page$):
  1648.  page% current_page%=page%
  1649.            
  1650. pre_process
  1651. (           
  1652. show_page(current_page%)
  1653.             
  1654.  scanning% 
  1655.            
  1656. zero_page_stack
  1657.            
  1658.          
  1659. 3         
  1660. cmd$,4)="load" 
  1661. cmd$,5)="*load" 
  1662. ,           file$=
  1663. cmd$,
  1664. cmd$-5):page$=""
  1665.            
  1666. file$," ") 
  1667. 3             page$=
  1668. file$,
  1669. (file$)-
  1670. file$," "))
  1671. ,             file$=
  1672. file$,
  1673. file$," ")-1)
  1674.            
  1675.            
  1676. .           
  1677. :click_adr%!4=0:
  1678. "           
  1679. load_file(file$,1)
  1680. Z           
  1681.  page$<>"" page%=
  1682. name_exsists(s_pages%,page$):
  1683.  page% current_page%=page%
  1684.            
  1685. pre_process
  1686. (           
  1687. show_page(current_page%)
  1688.             
  1689.  scanning% 
  1690.            
  1691. zero_page_stack
  1692.            
  1693.          
  1694. 1         
  1695. cmd$,3)="run" 
  1696. cmd$,4)="*run" 
  1697. *           file$=
  1698. cmd$,
  1699. cmd$-4):
  1700. file$
  1701.            
  1702. .           
  1703. :click_adr%!4=0:
  1704. #           
  1705.  "filer_run "+file$
  1706.            click_cmd$=""
  1707.          
  1708. "         
  1709. cmd$,6)="replay" 
  1710. #           file$=
  1711. cmd$,
  1712. cmd$-7)
  1713. "           
  1714. file$,"-at")=0 
  1715. 3             
  1716.  getentry%,stack%,object% 
  1717.  adr%
  1718. 6             x%=(adr%!12)+offx%:y%=(adr%!16)+offy%
  1719. 0             file$=file$+" -at "+
  1720. x%+","+
  1721.            
  1722.            
  1723. .           
  1724. :click_adr%!4=0:
  1725. (           
  1726.  "Wimp_StartTask",file$
  1727.            click_cmd$=""
  1728.          
  1729. M         
  1730. cmd$,4)="back" input$="back":!q%=main_w%:q%!24=13:
  1731. try_keys:
  1732. "         
  1733. cmd$,6)="object" 
  1734.            click_cmd$=""
  1735.            input$=cmd$+
  1736.          
  1737.          
  1738. ,         
  1739. :click_adr%!4=0:
  1740. *         
  1741.  click_cmd$<>"" 
  1742.  click_cmd$
  1743. %       
  1744.  9:click_adr%!8=
  1745. +cadr%!8
  1746. a       
  1747.  12:pointer_on%=2:
  1748. get_pointer:
  1749.  handle%=main_w% 
  1750.  "Wimp_SpriteOp",36,1,"ptr_hand",2
  1751.      
  1752. 3     
  1753.  getnth%,s_clickson%,click% 
  1754.  click_adr%
  1755. +     
  1756.  ok% click_adr%!4=ptr%+click_len%
  1757. 3     
  1758.  click_adr%!4>=!click_adr% click_adr%!4=0
  1759.  click%=1
  1760.  getnth%,s_clickson%,click% 
  1761.  adr%,token%
  1762.  adr%!4=0 
  1763. )     
  1764.  killentry%,s_clickson%,token%
  1765.      click%-=1
  1766.    click%+=1
  1767.  nentries%,s_clickson% 
  1768. click%>=nc% 
  1769.  nc%=0
  1770. click_list(cmd%,adr%,len%)
  1771. list%=0
  1772.  cmd% 
  1773.      
  1774. .       
  1775.  getentry%,stack%,list%!adr% 
  1776. "       
  1777.  (t%!36)
  1778. 1 t%=0 
  1779.  t%=1
  1780. /       
  1781. light_object(stack%,list%!adr%,1,1)
  1782. 0     
  1783. hide_object(stack%,list%!adr%,1,1)
  1784. 0     
  1785. hide_object(stack%,list%!adr%,0,1)
  1786. under_pointer:
  1787.  pointer_on%=1 
  1788. get_pointer
  1789.  !q%=main_w%:
  1790.  getw%,,q%
  1791. + offx%=(q%!4-q%!20):offy%=(q%!16-q%!24)
  1792. ( mx%=mousex%-offx%:my%=mousey%-offy%
  1793.  handle%=main_w% object%=
  1794. which_object(current_page%,mx%,my%) 
  1795.  object%=0
  1796.  object%<>pointer_object% 
  1797. "pointer 1":pointer_on%=
  1798.    pointer_object%=object%
  1799. #   stack%=
  1800. stack(current_page%)
  1801.  nentries%,stack% 
  1802.  no% 
  1803.      
  1804.  ob%=1
  1805. .       
  1806.  getnth%,stack%,ob% 
  1807.  adr%,token%
  1808. K       
  1809.  token%<>object% 
  1810.  (adr%!36)
  1811. light_object(stack%,token%,0,1)
  1812.      
  1813.      
  1814.  object% 
  1815. 4       
  1816.  getentry%,stack%,object% 
  1817.  adr%,token%
  1818.        
  1819.  adr%!28 
  1820. 2         
  1821.  getentry%,s_clicks%,adr%!28 
  1822.  adr%
  1823. 4         
  1824.  adr%!16 
  1825. do_click(s_pointer%,adr%!16)
  1826.        
  1827.      
  1828. 5       
  1829.  getentry%,s_pages%,current_page% 
  1830.  adr%
  1831.        
  1832.  adr%!24 
  1833. 2         
  1834.  getentry%,s_clicks%,adr%!24 
  1835.  adr%
  1836. 4         
  1837.  adr%!16 
  1838. do_click(s_pointer%,adr%!16)
  1839.        
  1840.      
  1841. often:
  1842.  pointer_on%<>
  1843. ! stack%=
  1844. stack(current_page%)
  1845.  nentries%,stack% 
  1846.  no% 
  1847.  ob%=1
  1848. ,     
  1849.  getnth%,stack%,ob% 
  1850.  adr%,token%
  1851.      
  1852.  adr%!28 
  1853. 0       
  1854.  getentry%,s_clicks%,adr%!28 
  1855.  adr%
  1856.        
  1857.  adr%!8 
  1858.          
  1859.  adr%!24<
  1860.             adr%!24=
  1861. +adr%!12
  1862. )           
  1863. do_click(s_often%,adr%!8)
  1864.          
  1865.        
  1866.      
  1867. open_try_menu(mx%,my%)
  1868. 2:P%=main%
  1869.  [optI%
  1870.  equs menu$
  1871.  equd &070207
  1872.  equd 168:equd 40:equd 0
  1873. , equd 8:equd pagelist_wc%:equd &07000021
  1874.  equs "Show page   "
  1875. $ equd &80:equd -1:equd &07000021
  1876.  equs "Print       "
  1877.  menu%=11
  1878.  createmenu%,,main%,mx%,my%-32
  1879. try_menu_warning
  1880. $ mx%=q%!24:my%=q%!28:item%=q%!32
  1881. arrange_pagelist_wc(current_page%)
  1882.  crsubmenu%,,pagelist_wc%,mx%,my%
  1883. try_menu_select
  1884.  menu% 
  1885. icon_bar_menu
  1886.      
  1887.  !q% 
  1888.        
  1889. open_print_w
  1890.      
  1891. try_pagelist_wc
  1892.  but%=q%!8
  1893. )$ !ws%=pagelist_wc%:
  1894.  getw%,,ws%
  1895. */ offx%=(ws%!4-ws%!20):offy%=(ws%!16-ws%!24)
  1896. +! page%=(((q%!4)-offy%)
  1897. -48)+1
  1898.  nentries%,s_pages% 
  1899.  np%:
  1900.  page%>np% 
  1901.  getnth%,s_pages%,page% 
  1902.  ,page%
  1903. arrange_pagelist_wc(page%)
  1904. show_page(page%)
  1905. arrange_pagelist_wc(current_page%)
  1906. begin_trying
  1907.  but%
  1908.  createmenu%,,-1
  1909.  scan_count%>
  1910.  scan_keys%=1 scan_count%=
  1911. +scan_time%
  1912. 8! stack%=
  1913. stack(current_page%)
  1914.  nentries%,stack% 
  1915.  no%=0 
  1916.  scan_object%<>0 
  1917. <3   
  1918.  getnth%,stack%,scan_object% 
  1919.  adr%,token%
  1920.  adr%!36 
  1921. >)     
  1922. light_object(stack%,token%,0,1)
  1923.      scan_object%+=1
  1924. @*     
  1925.  scan_object%>no% scan_object%=1
  1926.    scan_object%=1
  1927.  yes%=0
  1928. G3   
  1929.  getnth%,stack%,scan_object% 
  1930.  adr%,token%
  1931. H+   
  1932.  (adr%!28)<>0 
  1933.  ((adr%!36)
  1934. 128)=0 
  1935. I.     
  1936.  getentry%,s_clicks%,adr%!28 
  1937.  adr%
  1938.      
  1939.  adr%!16 
  1940. K4       
  1941. light_object(stack%,token%,1,1):yes%=no%
  1942.      
  1943.        scan_object%+=1
  1944. N,       
  1945.  scan_object%>no% scan_object%=1
  1946.        yes%+=1
  1947.      
  1948.      scan_object%+=1
  1949. S*     
  1950.  scan_object%>no% scan_object%=1
  1951.      yes%+=1
  1952. yes%=no%
  1953. scan_click(but%)
  1954.  scan_object%=0 
  1955. [! stack%=
  1956. stack(current_page%)
  1957.  scan_keys%=1 
  1958.  (scan_keys%=2 
  1959.  (but%
  1960. &101)) 
  1961. ]3   
  1962.  getnth%,stack%,scan_object% 
  1963.  adr%,token%
  1964.  adr%!28 
  1965. _.     
  1966.  getentry%,s_clicks%,adr%!28 
  1967.  adr%
  1968. `.     
  1969.  adr%!20 
  1970. do_click(s_mouse%,adr%!20)
  1971.  but%
  1972. &404 
  1973. redefine_main_w
  1974.  !q%=main_w%:
  1975.  getwi%,,q%
  1976.  (q%!32)
  1977. (1<<16) open%=
  1978.  open%=
  1979.  "Wimp_DeleteWindow",,q%
  1980. k' f%=((q%!32)
  1981. &83FFFFFF) 
  1982.  (&83<<24)
  1983.  bh%=q%!28
  1984.  h_scroll% f%=f%
  1985. (1<<30)
  1986.  v_scroll% f%=f%
  1987. (1<<28)
  1988.  h_scroll% 
  1989.  v_scroll% f%=f%
  1990. (1<<29)
  1991.  title_bar% f%=f%
  1992. (1<<26):
  1993.  toggle_icon% f%=f%
  1994. (1<<27)
  1995.  q%!32=f%
  1996.  "Wimp_CreateWindow",,q%+4 
  1997.  main_w%
  1998. sU !q%=main_w%:
  1999.  getw%,,q%:
  2000. open_window(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,bh%)
  2001. init_seq(time%,adr%)
  2002.  movedata%,adr%,ws%,!adr%
  2003.  (adr%!12)
  2004. 4 ws%!4=40:ws%!8=36 
  2005.  ws%!4=36:ws%!8=0
  2006. y) ws%!12=4:ws%!16=adr%!20:ws%!20=time%
  2007. z* ws%!24=adr%!8:ws%!28=0:ws%!32=adr%!12
  2008. make_space(!ws%+16)
  2009.  addentry%,s_sequences%,ws%
  2010.  (ws%!32)
  2011. 64 pointer_on%=1:
  2012. get_pointer:
  2013.  handle%=main_w% 
  2014.  "Wimp_SpriteOp",36,1,"ptr_clock",2
  2015. check_sequences(time%)
  2016.  nentries%,s_sequences% 
  2017.  ns% 
  2018. #   stack%=
  2019. stack(current_page%)
  2020.  seq%=1 
  2021. ,     
  2022.  getnth%,s_sequences%,seq% 
  2023.  adr%
  2024.      
  2025.  time%>adr%!20 
  2026.         adr%!20=time%+adr%!16
  2027. ?       len%=!adr%:ptr%=adr%!4:optr%=adr%!8:ptr_inc%=adr%!12
  2028. (       loop%=(adr%!32)
  2029. 2:last_one%=0
  2030. C       last%=(adr%!32)
  2031. 8:trail%=(adr%!32)
  2032. 16:noud%=(adr%!32)
  2033. !       seethru%=(adr%!32)
  2034. +       
  2035.  adr%!24<>0 
  2036.  adr%!28=adr%!24 
  2037.          
  2038.  loop% 
  2039. $           
  2040.  ptr%=40 last_one%=
  2041.          
  2042. $           
  2043.  ptr%=36 last_one%=
  2044.          
  2045.        
  2046. "       
  2047.  optr%<>0 
  2048.  trail%=0 
  2049.          
  2050.  last_one% 
  2051.            
  2052.  last%=0 
  2053.              
  2054.  noud% 
  2055. 4               
  2056. fast_draw(stack%,optr%!adr%,
  2057.              
  2058. 6               
  2059. hide_object(stack%,optr%!adr%,1,1)
  2060.              
  2061.            
  2062.          
  2063.            
  2064.  noud% 
  2065. 2             
  2066. fast_draw(stack%,optr%!adr%,
  2067.            
  2068. 4             
  2069. hide_object(stack%,optr%!adr%,1,1)
  2070.            
  2071.          
  2072.        
  2073.        
  2074.  last_one%=0 
  2075.          
  2076.  noud% 
  2077. 6           
  2078. fast_draw(stack%,ptr%!adr%,0,seethru%)
  2079.          
  2080. 1           
  2081. hide_object(stack%,ptr%!adr%,0,1)
  2082.          
  2083. '         adr%!8=ptr%:ptr%+=ptr_inc%
  2084.          
  2085.  loop% 
  2086.            
  2087.  ptr%=len% 
  2088. '             ptr%=len%-8:adr%!12=-4
  2089.            
  2090.              
  2091.  ptr%=32 
  2092. $               ptr%=40:adr%!12=4
  2093. 3               
  2094.  adr%!24<>0 adr%!28=(adr%!28)+1
  2095.              
  2096.            
  2097.          
  2098.            
  2099.  ptr%=len% 
  2100.              ptr%=36
  2101. 1             
  2102.  adr%!24<>0 adr%!28=(adr%!28)+1
  2103.            
  2104.          
  2105.        
  2106.          ptr%=0
  2107.        
  2108.        adr%!4=ptr%
  2109.      
  2110.      nomore%=
  2111. (     
  2112.  nentries%,s_sequences% 
  2113.      
  2114.  ns% 
  2115.        
  2116.  seq%=1 
  2117. 7         
  2118.  getnth%,s_sequences%,seq% 
  2119.  adr%,token%
  2120. A         
  2121.  adr%!4=0 
  2122.  (adr%!32)
  2123. "pointer 1":pointer_on%=
  2124. L         
  2125.  adr%!4=0 nomore%=0:seq%=ns%:
  2126.  killentry%,s_sequences%,token%
  2127.        
  2128.      
  2129. nomore%
  2130. fast_draw(stack%,token%,erase%,seethru%)
  2131.  adr%
  2132.  !q%=main_w%:
  2133.  getw%,,q%
  2134. + offx%=(q%!4-q%!20):offy%=(q%!16-q%!24)
  2135.  getentry%,stack%,token% 
  2136.  adr%
  2137.  x%=(adr%!12)+offx%
  2138.  y%=(adr%!16)+offy%
  2139. " x1%=(adr%!20)-(1<<xef%)+offx%
  2140. " y1%=(adr%!24)-(1<<yef%)+offy%
  2141.  erase% 
  2142.  ((adr%!36)
  2143. 128)=0 adr%!36=(adr%!36)
  2144.  getentry%,s_pages%,current_page% 
  2145.  adr1%
  2146.    bcol%=adr1%!28:
  2147.  (adr%!36)
  2148.  seethru%=0 adr%!36=(adr%!36)
  2149.   flags%=adr%!36:type%=adr%!4
  2150. f !q%=main_w%:q%!4=x%-offx%:q%!8=y%-offy%-32:q%!12=x1%-offx%+(1<<xef%)+32:q%!16=y1%-offy%+(1<<yef%)
  2151.  updatew%,,q% 
  2152.  more%
  2153.  more%
  2154.  erase% 
  2155. 3     
  2156.  setcol%,bcol%:
  2157.  x%,y%,x1%-x%,y1%-y%
  2158.      
  2159.  type% 
  2160. :       
  2161.  s_text%:
  2162. draw_text(stack%,token%,offx%,offy%)
  2163. k       
  2164.  s_sprites%,s_draw%:
  2165. draw_picture(adr%!4,adr%!8,x%+(1<<xef%),y%+(1<<yef%),x1%-x%,y1%-y%,flags%)
  2166.      
  2167.  getr%,,q% 
  2168.  more%
  2169. speak_text(stack%,token%)
  2170.  speak_token%=token%
  2171. ! speak_word%=0:speak_sound%=0
  2172.  getentry%,stack%,token% 
  2173.  adr%
  2174.  getentry%,s_text%,adr%!8 
  2175.  adr%
  2176.  sptext%=adr%+4
  2177.  ?sptext%<>0 
  2178.    speaking_text%=
  2179.    text$="":a%=sptext%
  2180. :text$=text$+
  2181. (?a%):a%+=1:
  2182. ?a%<48
  2183. 2   speak_sound%=
  2184. name_exsists(s_sounds%,text$)
  2185. update_object(stack%,speak_token%)
  2186. speaking_text
  2187.  getentry%,stack%,speak_token% 
  2188.  adr%
  2189.  getentry%,s_text%,adr%!8 
  2190.  adr%
  2191.  sptext%=adr%+4
  2192.    speak_word%+=1
  2193.    c%=speak_word%?sptext%
  2194. c%=32 
  2195.  c%=13 
  2196.  c%=0
  2197.  c%=32 
  2198.  c%=13 
  2199. -    speak_word%+=1:c%=speak_word%?sptext%
  2200. c%>32 
  2201.  c%=0
  2202.  c%<>0 
  2203. &   text$="":a%=speak_word%+sptext%
  2204. :text$=text$+
  2205. (?a%):a%+=1:
  2206. ?a%<48
  2207. 2   speak_sound%=
  2208. name_exsists(s_sounds%,text$)
  2209.  c%=0 speaking_text%=
  2210. update_object(stack%,speak_token%)
  2211. highlight_text(stack%,token%,offx%,offy%,word%)
  2212.  getentry%,stack%,token% 
  2213.  adr%
  2214.  x%=(adr%!12)+offx%
  2215.  y%=(adr%!16)+offy%
  2216. " x1%=(adr%!20)-(1<<xef%)+offx%
  2217. " y1%=(adr%!24)-(1<<yef%)+offy%
  2218. . flags%=adr%!36:font%=adr%!40:b_s%=adr%!32
  2219. 8 fcol%=adr%!52:
  2220.  fcol% 
  2221.  &FF fcol%=default_page_col%
  2222.  bcol%=adr%!56
  2223.  flags%
  2224. 1 fcol%=fcol%
  2225. &FFFFFF00:bcol%=bcol%
  2226. &FFFFFF00
  2227. draw_border(b_s%,fcol%,bcol%,x%,y%,x1%,y1%)
  2228.  x%+=(1<<xef%)
  2229.  x1%-=(1<<xef%)
  2230.  y%+=(1<<yef%)
  2231.  y1%-=(1<<yef%)
  2232. :font%=0
  2233.  font% 
  2234. %'   
  2235.  getentry%,s_fonts%,font% 
  2236. &1   
  2237.  findfont%,,t%+4,adr%!44,adr%!48 
  2238.  font%
  2239.  font% 
  2240. )    
  2241.  bcol% 
  2242.  &FF bcol%=fcol%
  2243. *.   
  2244.  fontinfo%,font% 
  2245.  ,cx%,cy%,cx1%,cy1%
  2246. ,>   cx%=-(1<<xef%):cy%=-(1<<yef%):cx1%=8<<xef%:cy1%=8<<yef%
  2247.  text_height%=cy1%
  2248.  getentry%,s_text%,adr%!8 
  2249.  text%
  2250.  text%+=4
  2251.  text_offset%=0
  2252. 2, px%=x%+margin%:py%=y1%-text_height%+cy%
  2253. 3$ centre%=
  2254. :right%=
  2255. :underline%=
  2256.  flags% 
  2257.  8 centre%=
  2258.  flags% 
  2259.  16 right%=
  2260.  flags% 
  2261.  32 underline%=
  2262.  text_offset%?text% 
  2263.      
  2264. :/     
  2265.  13:py%-=text_height%:text_offset%+=1
  2266.      
  2267. <-       text$=
  2268. string0(text%+text_offset%)
  2269.        text_offset%+=
  2270. text$
  2271.        px%=x%+margin%
  2272.        
  2273.  font% 
  2274. @@         
  2275.  stringwidth%,,text$,1<<30,1<<30,-1,
  2276. text$ 
  2277.  ,,w%
  2278. A&         
  2279.  converttoos%,,w% 
  2280. B-         
  2281.  centre% px%=x%+(x1%-x%)
  2282. C(         
  2283.  right% px%=x1%-w%-margin%
  2284. D7         
  2285.  underline% ul$=
  2286. (25)+
  2287. (16) 
  2288.  ul$=""
  2289. EA         
  2290.  "ColourTrans_SetFontColours",font%,bcol%,fcol%,14
  2291. F2         
  2292.  paint%,,ul$+text$,1<<4,px%,py%-cy%
  2293. GB         
  2294.  text_offset%>word% 
  2295.  (text_offset%-
  2296. text$)<=word% 
  2297. H/           i%=word%-(text_offset%-
  2298. (text$))
  2299.            l$=
  2300. text$,i%)
  2301. J<           
  2302.  stringwidth%,,l$,1<<30,1<<30,-1,
  2303.  ,,w%
  2304. K(           
  2305.  converttoos%,,w% 
  2306.            px%+=w%
  2307. M$           r$=
  2308. text$,
  2309. text$-
  2310. N*           
  2311. r$," ") r$=
  2312. r$," "))
  2313. OW           
  2314.  "ColourTrans_SetFontColours",font%,bcol%
  2315. &FFFFFF00,fcol%
  2316. &FFFFFF00,14
  2317. P1           
  2318.  paint%,,ul$+r$,1<<4,px%,py%-cy%
  2319.          
  2320.        
  2321.          w%=
  2322. text$*cx1%
  2323. T-         
  2324.  centre% px%=x%+(x1%-x%)
  2325. U(         
  2326.  right% px%=x1%-w%-margin%
  2327. V3         
  2328.  setcol%,fcol%:
  2329.  px%,py%+cy1%:
  2330. text$
  2331. W8         
  2332.  underline% 
  2333.  px%,py%-cy%:
  2334. 1,cx1%*
  2335. text$,0
  2336. XB         
  2337.  text_offset%>word% 
  2338.  (text_offset%-
  2339. text$)<=word% 
  2340. Y/           i%=word%-(text_offset%-
  2341. (text$))
  2342.            l$=
  2343. text$,i%)
  2344. ["           w%=
  2345. l$*cx1%:px%+=w%
  2346. \$           r$=
  2347. text$,
  2348. text$-
  2349. ]*           
  2350. r$," ") r$=
  2351. r$," "))
  2352. ^<           
  2353.  setcol%,fcol%
  2354. &FFFF0000:
  2355.  px%,py%+cy1%:
  2356. _7           
  2357.  underline% 
  2358.  px%,py%-cy%:
  2359. 1,cx1%*
  2360.          
  2361.        
  2362.  text_offset%?text%=0
  2363.  font% 
  2364.  losefont%,font%
  2365. begin_save(object%,sound%)
  2366.  getentry%,stack%,object% 
  2367.  adr%
  2368.  getp%,,q%:mx%=!q%:my%=q%!4
  2369. j2 ix%=mx%-38:iy%=my%-38:ix1%=mx%+38:iy1%=my%+38
  2370.  sound% 
  2371.  adr%!28 
  2372. m.     
  2373.  getentry%,s_clicks%,adr%!28 
  2374.  adr%
  2375.      
  2376.  adr%!20 
  2377. o/       
  2378.  getentry%,s_mouse%,adr%!20 
  2379.  adr%
  2380.        
  2381.  adr%!8=5 
  2382. q          drag_sound%=adr%!12
  2383. r-         
  2384. start_drag(3,ix%,iy%,ix1%,iy1%)
  2385.        
  2386.      
  2387.  adr%!4=s_text% 
  2388. x1     drag_ptype%=s_text%:drag_picture%=adr%!8
  2389. y*     
  2390. start_drag(20,ix%,iy%,ix1%,iy1%)
  2391. {0     drag_ptype%=adr%!4:drag_picture%=adr%!8
  2392. |)     
  2393. start_drag(4,ix%,iy%,ix1%,iy1%)
  2394. try_user_drag
  2395. get_pointer
  2396.  handle%=main_w% 
  2397.  q%!20=handle%:q%!24=icon%
  2398.   q%!28=mousex%:q%!32=mousey%
  2399.  q%!36=sprite_size%-24
  2400.  !q%=56
  2401.  drag_type% 
  2402.  saving sound
  2403. 3      
  2404.  getentry%,s_sounds%,drag_sound% 
  2405.  adr%
  2406.        save$=
  2407. string0(adr%+4)
  2408.       file_type%=&D3C
  2409.  saving picture
  2410. 7      
  2411.  getentry%,drag_ptype%,drag_picture% 
  2412.  adr%
  2413.        save$=
  2414. string0(adr%+4)
  2415. D      
  2416.  drag_ptype%=s_sprites% file_type%=&FF9 
  2417.  file_type%=&AFF
  2418.  saving text
  2419.       save$="text"
  2420.       file_type%=&FFF
  2421.    q%!40=file_type%
  2422. string0(q%+44,save$)
  2423.    q%!12=q%!8:q%!16=1
  2424.  sendmessage%,17,q%,handle%,icon%:
  2425.  send datasave
  2426.    myref%=q%!8
  2427.    DMT%=0
  2428.    DMT_ptr%=0
  2429.