home *** CD-ROM | disk | FTP | other *** search
/ APDL Public Domain 1 / APDL_PD1A.iso / program / assembler / sasm / !SAsm / sasmfront (.txt) < prev    next >
Encoding:
RISC OS BBC BASIC V Source  |  1996-01-15  |  15.6 KB  |  634 lines

  1.  --> SAsm front end
  2.  This program and all documentation 
  3.  David Holden 1995
  4. A_$="0.04":
  5. 262343,D_%,E_%
  6. 262341,,E_%
  7. 262342,,E_%
  8. 262364,E_%!24
  9. 17,18:
  10. E_%!16
  11. E_%!40=&2EF
  12. E_%!20
  13. E_%!24=17
  14. E_%!40=&FFD
  15. P_(E_%+44)
  16. 262364,E_%!24
  17. 262351,,E_%+&C0:R_%=E_%!&C8:S_%=E_%:
  18. W_(U_%,3)
  19. 4:!X_%=O_%:X_%!4=38:X_%!12=0:X_%!8=1<<22:
  20. 262349,,X_%
  21. Z_(O_%,11,"Absolute")
  22. Z_(O_%,11,"Utility")
  23. Z_(O_%,11,"Module")
  24. Z_(O_%,12,"32K")
  25. Z_(O_%,12,"64K")
  26. Z_(O_%,12,"96K")
  27. Z_(O_%,12,"128K")
  28. Z_(O_%,10,"128K")
  29. Z_(O_%,10,"256K")
  30. Z_(O_%,10,"400K")
  31. Z_(O_%,10,"640K")
  32. Z_(O_%,10,"1024K")
  33. !E_%=3
  34. e_%=0 I%=
  35. f_(1,"No files!"):
  36. J/F%=
  37. F%<0 I%=
  38. f_(1,"No file selected"):
  39. h_(M_%,F%,0):I%=i_%:
  40. F%>0:
  41. ?I%<>13:I%+=1:
  42. :I%+=1:F%-=1:
  43. :J%=I%:
  44. ?J%<>13:J%+=1:
  45. :J%+=1:
  46. J%<j_%:?I%=?J%:J%+=1:I%+=1:
  47. :j_%=I%:
  48. e_%>1
  49. h_(M_%,F%,0):I%=i_%:J%=F%:
  50. J%>1:
  51. ?I%<>13:I%+=1:
  52. :I%+=1:J%-=1:
  53. :J%=I%:
  54. ?J%<>13:J%+=1:
  55. :J%+=1:$X_%=$I%:$I%=$J%:$(I%+
  56. ($I%)+1)=$X_%:
  57. h_(M_%,F%-1,1)
  58. F%<e_%-1
  59. e_%>1
  60. h_(M_%,F%,0):I%=i_%:J%=F%:
  61. J%>0:
  62. ?I%<>13:I%+=1:
  63. :I%+=1:J%-=1:
  64. :J%=I%:
  65. ?J%<>13:J%+=1:
  66. :J%+=1:$X_%=$I%:$I%=$J%:$(I%+
  67. ($I%)+1)=$X_%:
  68. h_(M_%,F%+1,1)
  69. R_%=1
  70. 262356,,T_%,l_%,m_%
  71. n_%,o_%:
  72. 262351,,E_%+&C0:R_%=E_%!&C8:S_%=E_%!&C4:o_%=E_%!12:n_%=E_%!16:
  73. n_%=p_%
  74. q_(M_%)
  75. 2:T_%=U_%:l_%=E_%!&C0-120:m_%=360:
  76. 262356,,T_%,l_%,m_%
  77. q_(O_%)
  78. r_(O_%)
  79. R_%=2
  80. ;T_%=Y_%:l_%=E_%!&C0-60:m_%=S_%-10:
  81. 262356,,T_%,l_%,m_%
  82. s_(O_%,11)
  83. R_%=2
  84. ;T_%=a_%:l_%=E_%!&C0-60:m_%=S_%-10:
  85. 262356,,T_%,l_%,m_%
  86. s_(O_%,12)
  87. R_%=2
  88. ;T_%=b_%:l_%=E_%!&C0-60:m_%=S_%-10:
  89. 262356,,T_%,l_%,m_%
  90. s_(O_%,10)
  91. R_%=2 T_%=c_%:l_%=E_%!&C0-60:m_%=S_%-10:
  92. 262356,,T_%,l_%,m_%
  93. 0:w_%=&2EF:
  94. x_(v_%,0)
  95. n_%=0 w_%=&FEB:
  96. x_(y_%,0)
  97. i%:i%=e_%+1:
  98. :i%-=1:
  99. z_(M_%,i%)=
  100. i%<0:=i%
  101. !(U_%+28+(3*24))
  102. o$<>""
  103. 262366,o$
  104. o$,s$:
  105. A`$="" I%=
  106. f_(1,"You must first save the Make file"):=""
  107. do$="taskwindow "+
  108. 34+"SAsm <SAsmProj$Dir>."+B`$+" ":s$=
  109. C`(O_%,14):
  110. s$<>"" o$=o$+s$+" "
  111. o$+="! "
  112. C`(O_%,15):
  113. s$<>"" o$=o$+s$
  114. o$+="~"
  115. z_(O_%,24)=
  116. o$+=" Q"
  117. z_(O_%,28)=
  118. o$+=" X"
  119. z_(O_%,29)=
  120. o$+=" N"
  121. z_(O_%,27)=
  122. o$+=" L"
  123. z_(O_%,22)=
  124. o$+=" V"
  125. z_(O_%,30)=
  126. o$+=" F"
  127. z_(O_%,21)=
  128. o$+=" S"
  129. z_(O_%,26)=
  130. o$+=" A"
  131. Jo$+=
  132. 34:o$+=" -wimpslot ":o$+=
  133. C`(O_%,10):
  134. o$)<>"K"
  135. o$)<>"k" o$+="K"
  136. Jo$+=" -name "+
  137. 34+"SAsm assembler"+
  138. 34:o$+=" -ctrl -display -quit":=o$
  139. o$,s$:
  140. A`$="" I%=
  141. f_(1,"You must first save the Make file"):
  142. Ro$="SAsm <SAsmProj$Dir>."+B`$+" ":s$=
  143. C`(O_%,14):
  144. s$<>"" o$=o$+s$+" "
  145. o$+="! "
  146. C`(O_%,15):
  147. s$<>"" o$=o$+s$
  148. o$+="~"
  149. z_(O_%,24)=
  150. o$+=" Q"
  151. z_(O_%,28)=
  152. o$+=" X"
  153. z_(O_%,29)=
  154. o$+=" N"
  155. z_(O_%,27)=
  156. o$+=" L"
  157. z_(O_%,22)=
  158. o$+=" V"
  159. z_(O_%,30)=
  160. o$+=" F"
  161. z_(O_%,21)=
  162. o$+=" S"
  163. z_(O_%,26)=
  164. o$+=" A"
  165. $X_%=o$:*fx153,0,&CC
  166. 4I%=X_%:
  167. 6,153,0,?I%:I%+=1:
  168. ?I%=13:*fx153,0,13
  169. P_(i%):
  170. f$:f$="":
  171. ?i%>31:f$+=
  172. (?i%):i%+=1:
  173. A`$>""
  174. f$,A`$)=1 f$="<SAsmProj$Dir>"+
  175. (f$)-
  176. (A`$))
  177. Z_(O_%,17,f$):
  178. p%,c%,a$:
  179. E`(j_%-i_%+&2000)=
  180. f_(1,"Not enough memory available to create Make file"):
  181. Bp%=F`%:a$=
  182. C`(O_%,11):
  183. a$>"" $p%="# type       "+a$:p%=
  184. G`(p%)
  185. C`(O_%,13):
  186. a$>"" $p%="# org        "+a$:p%=
  187. G`(p%)
  188. C`(O_%,12):
  189. a$>"" $p%="# size       "+a$:p%=
  190. G`(p%)
  191. C`(O_%,14):
  192. a$>"" $p%="# obj        "+a$:p%=
  193. G`(p%)
  194. C`(O_%,15):
  195. a$>""
  196. z_(O_%,25)=
  197. $p%="# errfile    "+a$:p%=
  198. G`(p%)
  199. C`(O_%,16):
  200. a$>"" $p%="# listfile   "+a$:p%=
  201. G`(p%)
  202. z_(O_%,27)=
  203. C`(O_%,17):
  204. a$>""
  205. z_(O_%,27)=
  206. $p%="# lib        "+a$:p%=
  207. G`(p%)
  208. :$p%="# lib":p%=
  209. G`(p%)
  210. C`(O_%,18):
  211. a$>"" $p%="# xrfile     "+a$:p%=
  212. G`(p%)
  213. C`(O_%,19):
  214. a$>"" $p%="# labelfile  "+a$:p%=
  215. G`(p%)
  216. z_(O_%,21)=
  217. $p%="# swion":p%=
  218. G`(p%)
  219. z_(O_%,22)=
  220. $p%="# verbose":p%=
  221. G`(p%)
  222. z_(O_%,23)=
  223. $p%="# enhance":p%=
  224. G`(p%)
  225. $p%="# noenhance":p%=
  226. G`(p%)
  227. d?p%=10:p%+=1:c%=0:
  228. c%<e_%:$p%="# include "+
  229. C`(M_%,c%):p%=
  230. G`(p%):c%+=1:
  231. :?p%=10:p%+=1:H`%=p%:
  232. G`(i%):
  233. ?i%>31:i%+=1:
  234. :?i%=10:=i%+1
  235. f$,I`%:E_%!12=E_%!8:E_%!16=4:I%=E_%+44:f$="":
  236. ?I%>31:f$+=
  237. (?I%):I%+=1:
  238. 262375,17,E_%,E_%!4:I`%=E_%!40:
  239. &2000:I%=
  240. f_(1,"You can't assemble a directory!):ENDPROC
  241. &FFF,&FFD
  242. f_(3,"This isn't Text or Data file, are you sure you want to include it?")=
  243. A`$>""
  244. f$,A`$)=1 f$="<SAsmProj$Dir>"+
  245. (f$)-
  246. (A`$))
  247. *$j_%=f$:I%=j_%+
  248. (f$)-1:
  249. ?I%<58
  250. ?I%>47
  251. ?I%<58
  252. ?I%>47:I%-=1:
  253. :I%?1=
  254. "*":I%?2=13
  255. 35:X_%?(I%+4)=J`%?I%:
  256. :X_%!8-=(e_%*40):X_%!16-=(e_%*40):X_%!24=j_%:!X_%=M_%:
  257. 262338,e_%,X_%:e_%+=1:j_%+=(
  258. (f$)+1):I%=e_%*40:
  259. I%<520 I%=520
  260. -]!X_%=0:X_%!4=-I%:X_%!8=1280:X_%!12=0:
  261. 262359,M_%,X_%:
  262. 262353,M_%,0,-(e_%+1)*40,1280,0:
  263. r_(w%):
  264. x%,y%,K`%,L`%:!X_%=w%:
  265. 262347,,X_%:x%=X_%!4:y%=X_%!16:!X_%=v_%:
  266. 262347,,X_%:K`%=X_%!12-X_%!4:L`%=X_%!16-X_%!8:X_%!4=x%+480:X_%!16=y%+32:X_%!12=X_%!4+K`%:X_%!8=X_%!16-L`%:
  267. 262341,,X_%:
  268. s_(v_%,1):
  269. q_(w%):X_%!&80=w%:
  270. 262347,,X_%+&80:E_%!&9C=-1:
  271. 262341,,X_%+&80:
  272. BcE_%!12=E_%!8:E_%!16=4:I%=E_%+44:N`$="":
  273. ?I%>31:N`$+=
  274. (?I%):I%+=1:
  275. 262375,17,E_%,E_%!4:
  276. 8,17,N`$
  277. I%,,,,P`%:
  278. I%=0 I%=
  279. f_(1,"File not found"):
  280. E`(P`%+&20)=
  281. f_(1,"Not enough memory to load this Make file"):I%-
  282. E`(0):
  283. 8,16,N`$,F`%
  284. ,,,,P`%:H`%=F`%+P`%:$E_%=N`$:I%=E_%:
  285. ?I%>31:I%+=1:
  286. ?I%<>46:I%-=1:
  287. :?I%=13:A`$=$E_%:B`$=$(I%+1):
  288. "Set SAsmProj$Dir "+A`$:
  289. Z_(v_%,1,B`$):
  290. e_%>0:e_%-=1:!X_%=M_%:X_%!4=e_%:
  291. 262340,,X_%:
  292. :!X_%=0:X_%!4=-520:X_%!8=1280:X_%!12=0:
  293. 262359,M_%,X_%:
  294. 262353,M_%,0,-520,1280,0:
  295. n%,p%:!X_%=M_%:
  296. 262348,,X_%
  297. 1:n%=X_%!88:
  298. n%>=0:!X_%=M_%:X_%!4=n%:
  299. 262340,,X_%:n%-=1:
  300. :p%=i_%:e_%=0:
  301. p%<j_%:
  302. 35:X_%?(I%+4)=J`%?I%:
  303. :X_%!8-=(e_%*40):X_%!16-=(e_%*40):X_%!24=p%:!X_%=M_%:
  304. 262338,e_%,X_%:e_%+=1
  305. q/p%+=
  306. ($p%):p%+=1:
  307. :I%=e_%*40:
  308. I%<520 I%=520
  309. t]!X_%=0:X_%!4=-I%:X_%!8=1280:X_%!12=0:
  310. 262359,M_%,X_%:
  311. 262353,M_%,0,-(e_%+1)*40,1280,0:
  312. R`%,p%,d$,c%,S`%:
  313. $+" at line "+
  314. (R`%),
  315. |CR`%=1:p%=F`%:S`%=i_%:
  316. p%<H`%:
  317. ?p%=32
  318. ?p%=9:p%+=1:
  319. Jd$="":p%+=1:
  320. ?p%=32
  321. ?p%=9:p%+=1:
  322. ?p%>32:d$+=
  323. T`(?p%):p%+=1:
  324. "ORG":p%=
  325. U`(p%):
  326. V`(O_%,13,p%)
  327. "SIZE":p%=
  328. U`(p%):
  329. V`(O_%,12,p%)
  330. "TYPE":p%=
  331. U`(p%):
  332. V`(O_%,11,p%)
  333. "OBJ":p%=
  334. U`(p%):
  335. V`(O_%,14,p%)
  336. "ERRFILE":p%=
  337. U`(p%):
  338. V`(O_%,15,p%)
  339. "LIB":
  340. ?p%=32
  341. ?p%=9:p%+=1:
  342. ?p%=10
  343. ?p%=13
  344. Z_(O_%,17,""):
  345. h_(O_%,27,0)
  346. U`(p%):
  347. V`(O_%,17,p%)
  348. "VERBOSE":
  349. h_(O_%,22,1)
  350. "QUIET":
  351. h_(O_%,22,0)
  352. "INCLUDE":p%=
  353. U`(p%):I%=0:
  354. p%?I%>32:j_%?I%=p%?I%:I%+=1:
  355. :j_%?I%=13:j_%+=(
  356. ($j_%)+1)
  357. "LISTFILE":p%=
  358. U`(p%):
  359. V`(O_%,16,p%)
  360. "NOENHANCE":
  361. h_(O_%,23,0)
  362. "ENHANCE":
  363. h_(O_%,23,1)
  364. "XREF":
  365. h_(O_%,28,1)
  366. "XRFILE":p%=
  367. U`(p%):
  368. V`(O_%,18,p%)
  369. "LABELFILE":p%=
  370. U`(p%):
  371. V`(O_%,19,p%)
  372. "SWION":
  373. h_(O_%,21,1)
  374. "SWIOFF":
  375. h_(O_%,21,0)
  376. f_(1,"Unrecognised directive at line "+
  377. R`%+" in Make file")
  378. ?p%<>10
  379. ?p%<>13:p%+=1:
  380. :p%+=1:R`%+=1:
  381. k_:I%=
  382. E`(0):
  383. V`(w%,i%,W`%):
  384. X`%:X`%=W`%:
  385. ?X`%>32:X`%+=1:
  386. :?X`%=13:
  387. Z_(w%,i%,$W`%):
  388. U`(p%):
  389. ?p%<33:p%+=1:
  390. T`(c%):
  391. c%>96
  392. c%<123 c%=c%
  393. s_(w%,i%):L%=
  394. C`(w%,i%)):
  395. 262354,w%,i%,,,-1,L%:
  396. Y`(w%,i%,v%):!X_%=w%:X_%!4=i%:
  397. 262350,,X_%:X_%!8=0:X_%!12=0:$(X_%!28)=
  398. (v%):
  399. 262349,,X_%:
  400. Z_(w%,i%,s$):!X_%=w%:X_%!4=i%:
  401. 262350,,X_%:X_%!8=0:X_%!12=0:$(X_%!28)=s$:
  402. 262349,,X_%:
  403. C`(w%,i%):!X_%=w%:X_%!4=i%:
  404. 262350,,X_%:I%=(X_%!28):
  405. ?I%>31:I%+=1:
  406. :?I%=13:=$(X_%!28)
  407. x_(w%,i%):!E_%=w%:
  408. 262347,,E_%:X%=E_%!4-E_%!20:Y%=E_%!16-E_%!24:E_%!4=i%:
  409. 262350,,E_%:!E_%=E_%!8+X%:E_%!4=E_%!12+Y%:E_%!8=E_%!16+X%:E_%!12=E_%!20+Y%:
  410. 271360,%11000101,1,"file_"+
  411. ~(w_%),E_%:
  412. 271361:
  413. 262351,,E_%:E_%!20=E_%!12:E_%!24=E_%!16:E_%!28=!E_%:E_%!32=E_%!4:E_%!36=H`%-F`%:E_%!40=w_%:E_%!16=1:
  414. w_%=&2EF $(E_%+44)=
  415. C`(v_%,1)
  416. $(E_%+44)=
  417. C`(y_%,1)
  418. F!E_%=(
  419. ($(E_%+44))+49)
  420. 3:E_%!12=0:
  421. 262375,17,E_%,E_%!20,E_%!24:
  422. s%,a$:
  423. 0I%=E_%+44:
  424. ?I%>31:I%+=1:
  425. :?I%=13:
  426. w_%=&2EF
  427. ?I%<>46:I%-=1:
  428. :?I%=13:A`$=$(E_%+44):B`$=$(I%+1):
  429. "Set SAsmProj$Dir "+A`$:
  430. 8,10,A`$+"."+B`$,&2EF,,F`%,H`%:I%=
  431. E`(0):!E_%=v_%:
  432. 262342,,E_%
  433. :a$="Set SAsmProj$Dir <Obey$Dir>"+
  434. 10:$X_%=a$:s%=X_%+
  435. ($X_%):
  436. 8,10,$(E_%+44),&FEB,,X_%,s%
  437. A`$=""I%=
  438. f_(1,"Project Directory not set"):!E_%=v_%:
  439. 262342,,E_%:
  440. D`:B`$=
  441. C`(v_%,1):
  442. 8,10,A`$+"."+B`$,&2EF,,F`%,H`%:!E_%=v_%:
  443. 262342,,E_%:I%=
  444. E`(0):
  445. Z`(w%,i%):!X_%=w%:X_%!4=i%:
  446. 262350,,X_%:
  447. 262354,w%,i%,,,-1,
  448. $(X_%!28):
  449. z_(w%,i%):!X_%=w%:X_%!4=i%:
  450. 262350,,X_%:
  451. (X_%!24
  452. 1<<21):=
  453. h_(w%,i%,s%):!X_%=w%:X_%!4=i%:X_%!12=1<<21:X_%!8=s%<<21:
  454. 262349,,X_%:
  455. W_(m%,i%):
  456. p%:p%=m%+28+(i%*24):!p%=!p%
  457. E`(a`%):
  458. 262380,b`%+a`%,-1
  459. e%<(b`%+a`%):=
  460. d`,e`,f`,g`,m%:e`=1:d`=2:g`=4:f`=&80:
  461. h`%&300:m%=h`%:U_%=
  462. i`(m%,"SAsm",208):m%=
  463. j`("Info",0,k`%):m%=
  464. j`("Save Opts",0,0):m%=
  465. j`("Save Obey",0,y_%):m%=
  466. j`("Taskwindow",e`,0):m%=
  467. j`("Lock Set",d`,0):m%=
  468. j`("Quit",f`,0)
  469. i`(m%,"Obj type",180):m%=
  470. j`("Absolute",0,0):m%=
  471. j`("Utility",0,0):m%=
  472. j`("Module",f`,0):a_%=
  473. i`(m%,"Code size",120):m%=
  474. j`("32K",0,0):m%=
  475. j`("64K",0,0):m%=
  476. j`("96K",0,0):m%=
  477. j`("128K",f`,0):b_%=
  478. i`(m%,"Memory",120)
  479. j`("128K",0,0):m%=
  480. j`("256K",0,0):m%=
  481. j`("400K",0,0):m%=
  482. j`("640K",0,0):m%=
  483. j`("1024K",f`,0):c_%=
  484. i`(m%,"Files",180):m%=
  485. j`("Remove",0,0):m%=
  486. j`("Move up",0,0):m%=
  487. j`("Move down",0,0):m%=
  488. j`("Clear all",f`,0):
  489. i` (a%,l`$,m`%):$a%=l`$:a%!12=&70207:a%!16=m`%:a%!20=40:a%!24=0:m%=a%+28:=a%
  490. j` (n`$,o`%,p`%):!m%=o`%:m%!4=p`%:m%!8=&7000001:$(m%+12)=n`$:=m%+24
  491. q` (r`$,s`%,r`%):!m%=s`%:m%!4=0:m%!8=&7000101:m%!12=r`%:m%!16=-1:m%!20=127:
  492. r`$<>"?" $r`%=r`$
  493. =m%+24
  494. t` (m%,i%):!(m%+36+(24*i%))=!(m%+36+(24*i%))
  495. 1<<22:
  496. u` (m%,i%):!(m%+36+(24*i%))=!(m%+36+(24*i%))
  497. (1<<22):
  498. v` (w`$,x`%):
  499. y`% 24:$y`%="s!"+w`$:$(y`%+16)="SAsm":!E_%=x`%:E_%!4=0:E_%!8=-16:E_%!12=80:E_%!16=88:E_%!20=&1700210B:E_%!28=y`%:E_%!24=y`%+16:E_%!32=8:
  500. 262338,,E_%
  501. I%:=I%
  502. C_(z`$,_`%):
  503. 6,229,1:
  504. 6,2,0:
  505. 263874:D_%=&C31:!X_%=
  506. :$(X_%+4)="Error "+
  507. )+": "+z`$++
  508. 262367,X_%,1,``%:
  509. 262365,Aa%,&4B534154:
  510. f_(Ba%,a$):X_%!&80=0:$(X_%+&84)=a$+
  511. 262367,X_%+&80,16
  512. Ba%,``%
  513. ,I%:=I%
  514. :I%+=1:
  515. ?I%=34
  516. ?I%<32:
  517. ?I%<32:=""
  518. :I%+=1:
  519. ?I%<>32:
  520. ?I%<32:=""
  521. q%J%=I%:
  522. :J%+=1:
  523. ?J%<32:?J%=13:=$I%
  524. Ea%&300:
  525. 2:P%=Ea%:[OPT Fa:stmfd r13!,{r14}:adr r8,Ga:mov r0,r0,lsl#2:ldr pc,[r8,r0]
  526. .Ga equd Ha
  527. ^.Ia equd X_%:.F` equd F`%:.Ja equd Ka%:.La equd Ma%:.Na equd k`%:.Oa equd Oa%:.Pa equd ``%
  528. .Ha stmfd r13!,{r14}:adr r1,Qa:mov r0,#13:swi 8:cmp r0,#1:bne Ra:cmp r4,#&20:bne Sa:mov r0,#255:ldr r2,F`:mov r3,#0:swi 8:ldr r6,Oa:ldr r4,F`:ldr r3,[r4],#4:mov r2,#0:.Ta:ldrb r0,[r4,r2]:mvn r0,r0:and r0,r0,#&FF:add r0,r0,r6
  529. ]sub r3,r3,r0:sub r0,r0,r2:strb r0,[r4,r2]:add r2,r2,#1:cmp r2,#20:blt Ta:cmp r3,#0:beq Ua
  530. .Sa:ldr r0,Pa:swi&400Ef:adr r1,Va:.Wa ldrb r0,[r1],#1:cmp r0,#0:swine 0:bne Wa:align:bl Xa:mov r0,#1:ldmfd r13!,{pc}:.Ra:swi 256+7:ldr r0,La:ldr r1,F`:add r1,r1,#48:str r0,[r1]:swi&400Cb:bl Ya:mov r0,#20:ldr r2,[r1,#4]
  531. add r2,r2,r0:str r2,[r1,#4]:ldr r2,[r1,#12]:add r2,r2,r0:str r2,[r1,#12]:mov r0,#20:ldr r2,[r1,#8]:sub r2,r2,r0:str r2,[r1,#8]:ldr r2,[r1,#16]:sub r2,r2,r0:str r2,[r1,#16]:mvn r0,#0:str r0,[r1,#28]:swi&400c5:ldr r0,Ja
  532. [ldr r1,F`:add r1,r1,#48:str r0,[r1]:swi&400Cb:bl Ya:mvn r0,#0:str r0,[r1,#28]:swi&400c5
  533. .Za:mov r0,#0:ldr r1,F`:add r1,r1,#48:swi&400c7:subs r4,r4,#1:bpl Za:bl Xa:ldr r1,F`:add r1,r1,#48:ldr r0,La:str r0,[r1]:swi&400c6:ldr r0,Ja:str r0,[r1]:swi&400c6:mov r0,#0:ldmfd r13!,{pc}
  534. .Ya mov r4,#10:mvn r0,#0:mov r1,#4:swi&35:mov r10,r2:mvn r0,#0:mov r1,#11:swi&35:mov r8,r2,lsl r10:mvn r0,#0:mov r1,#5:swi&35:mov r9,r2:mvn r0,#0:mov r1,#12:swi&35:mov r7,r2,lsl r9:ldr r1,F`:add r1,r1,#48:ldr r2,[r1,#12]
  535. ldr r3,[r1,#4]:sub r3,r2,r3:sub r2,r8,r3:mov r2,r2,lsr#1:str r2,[r1,#4]:add r2,r2,r3:str r2,[r1,#12]:ldr r2,[r1,#16]:ldr r3,[r1,#8]:sub r3,r2,r3:sub r2,r7,r3:mov r2,r2,lsr#1:str r2,[r1,#8]:add r2,r2,r3:str r2,[r1,#16]
  536. mov pc,r14
  537. .Ua:ldr r1,F`:add r1,r1,#48:ldr r0,Na:str r0,[r1]:mov r0,#8:str r0,[r1,#4]:swi&400ce:ldr r3,[r1,#28]:ldr r2,F`:add r2,r2,#4:.Wa ldrb r0,[r2],#1:strb r0,[r3],#1:cmp r0,#32:bge Wa:mov r0,#%00010111<<24:str r0,[r1,#8]
  538. "Mmov r0,#%11111111<<24:str r0,[r1,#12]:swi&400CD:mov r0,#0:ldmfd r13!,{pc}
  539. 'S.Xa swi&42:add r3,r0,#600:.aa swi&42:cmp r0,r3:blt aa:mov pc,r14:]:
  540. Fa>1:=
  541. [OPT Fa:.Qa equs "<obey$dir>.sa_reg":equb 0:align:.Va:equd&20200A0A:equd&20656854:equd&69676552:equd&61727473:equd&6e6f6974:equd&6c694620:equd&61682065
  542. equd&65622073:equd&74206e65:equd&65706d61:equd&20646572:equd&68746977:equd&0A0A070D:equd&2020200A:equd&20202020:equd&20202020:equd&676f7250:equd&206d6172:equd&6d726574:equd&74616e69:equd&0A676e69:equd&0A0D:]:
  543. $+" loading Options",
  544. ?CH%=
  545. (da$+".Options"):
  546. H%=0 I%=
  547. f_(1,"Options file not found"):
  548. ca%=21
  549. ea(O_%,ca%):
  550. ea(O_%,38):
  551. ca%=11
  552. fa(O_%,ca%):
  553. ea(w%,i%):!X_%=w%:X_%!4=i%:
  554. 262350,,X_%:
  555. J%=64
  556. 67:X_%?J%=
  557. :X_%!8=(X_%!24)
  558. (X_%!64):X_%!12=0:
  559. 262349,,X_%:
  560. fa(w%,i%):
  561. a$,c%:a$="":
  562. #H%:a$+=
  563. (c%):
  564. c%<32:
  565. Z_(w%,i%,a$):
  566. W_H%=
  567. (da$+".Options"):
  568. ca%=21
  569. ga(O_%,ca%):
  570. ga(O_%,38):
  571. ca%=11
  572. ha(O_%,ca%):
  573. ga(w%,i%):!X_%=w%:X_%!4=i%:
  574. 262350,,X_%:
  575. J%=24
  576. #H%,X_%?J%:
  577. ha(w%,i%):!X_%=w%:X_%!4=i%:
  578. 262350,,X_%:J%=X_%!28:
  579. ?J%>31:
  580. #H%,?J%:J%+=1:
  581. #H%,13:
  582. ia (ja%):
  583. r`% ja%,ka%&100:E%=r`%+ja%:
  584. 262361,,da$+".templates":
  585. 262363,,F`%,r`%,E%,-1,"info",0
  586. ,,R%:
  587. 262337,,F`%
  588. 262363,,F`%,R%,E%,-1,"main",0
  589. ,,R%:
  590. 262337,,F`%
  591. 262363,,F`%,R%,E%,-1,"files",0
  592. 262337,,F`%
  593. 262363,,F`%,R%,E%,-1,"saveas",0
  594. ,,R%:
  595. 262337,,F`%
  596. 262363,,F`%,R%,E%,-1,"saveobey",0
  597. ,,R%:
  598. 262337,,F`%
  599. 262363,,F`%,R%,E%,-1,"shad",0
  600. ,,R%:
  601. 262337,,F`%
  602. 262363,,F`%,R%,E%,ka%,"banner",0
  603. ,,R%:
  604. 262337,,F`%
  605. 262362:
  606. Z_(k`%,2,la$):
  607. Z_(k`%,3,ma$):
  608. Z_(k`%,4,na$):
  609. Z_(v_%,1,B`$):!E_%=M_%:
  610. 262348,,E_%:J%=E_%+92:
  611. 35:J`%?I%=J%?I%:
  612. 262336,200,&4B534154,"Desktop SAsm"
  613. oa%,Aa%:
  614. oa%<300
  615. 0,"This program requires RISC-OS 3 or better":
  616. E_%&180,X_%&100,``% 24,i_%&4000,J`%&30:$``%="Desktop SAsm":
  617. $+" During initialisation",
  618. 35,"SAsmApp$Dir",E_%,256,0,3
  619. ,,I%:E_%?I%=13:da$=$E_%:b`%=
  620. -&8000:F`%=
  621. E`(&2000)=
  622. -1,"Not enough memory to run Desktop SAsm"
  623. ia(&B00):
  624. 8p_%=
  625. v`("sasm",-1):
  626. 8,13,da$+".Options"
  627. c`:N`$=
  628. N`$>""
  629. E`(0)
  630. M`:H`%=F`%:j_%=i_%:A`$="":
  631. pa:la$="Desktop SAsm":ma$=A_$+"  1995":na$="
  632.  David Holden":qa%=&2EF:B`$="Make":Oa%=7:e_%=1:A`$="":ra%=
  633. :D_%=%110000110001:
  634.