home *** CD-ROM | disk | FTP | other *** search
/ APDL Public Domain 1 / APDL_PD1A.iso / program / assembler / tasm / ARC_EXE / !CTasm / !RunImage < prev    next >
Encoding:
Text File  |  1992-09-03  |  12.9 KB  |  502 lines

  1. REM > <CTasm$Dir>.!RunImage
  2. REM Desktop Front-End for EXPAND/TASM
  3. REM (C) Walther Shoonenburg/RJP
  4. REM   3rd September 1992 Modified version of !CCompile.
  5. :
  6. program$="CTasm":version$="1.0 (30-Aug-92)"
  7. :
  8. PROCinit
  9. mask%=(1<<5)+(1<<4)+(1<<0)
  10. quit%=FALSE
  11. REPEAT
  12.   SYS "Wimp_Poll",mask%,q% TO reason%,offset%
  13.   CASE reason% OF
  14.   WHEN 2: PROCopen_window(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28)
  15.   WHEN 3: PROCclose_window(!q%)
  16.   WHEN 6: PROCmouse_click(!q%,q%!4,q%!8,q%!12,q%!16,q%!20)
  17.   WHEN 8: PROCkey_press(!q%,q%!4,q%!24)
  18.   WHEN 9: PROCmenu_select
  19.   WHEN 17,18: PROCreceive(q%!12,q%!16)
  20. ENDCASE
  21. UNTIL quit%
  22. SYS "Wimp_CloseDown"
  23. END
  24. :
  25. DEF PROCload_options
  26. LOCAL id%
  27. id%=OPENIN("<CTasm$Dir>.Options")
  28. IF id%=0 ENDPROC
  29. INPUT#id%,r$:$expand_icon%=r$
  30. INPUT#id%,r$:$TAB_icon%=r$
  31. INPUT#id%,r$:$tasm_icon%=r$
  32. INPUT#id%,r$:$BIN_icon%=r$
  33. INPUT#id%,r$:$errors_icon%=r$
  34. INPUT#id%,r$:$LST_icon%=r$
  35. INPUT#id%,r$:$TMP_icon%=r$
  36. INPUT#id%,r$:$SWEX_icon%=r$
  37. INPUT#id%,r$:$SWTA_icon%=r$
  38.  
  39. INPUT#id%,r$:IF r$="0" PROCc_b(o%, 4) ELSE PROCs_b(o%, 4)
  40.  
  41. INPUT#id%,r$:IF r$="0" PROCc_b(o%, 8) ELSE PROCs_b(o%, 8)
  42.  
  43. INPUT#id%,r$:IF r$="0" PROCc_b(o%, 9) ELSE PROCs_b(o%, 9)
  44.  
  45. INPUT#id%,r$:IF r$="0" PROCc_b(o%,10) ELSE PROCs_b(o%,10)
  46.  
  47. INPUT#id%,r$:IF r$="0" PROCc_b(o%,24) ELSE PROCs_b(o%,24)
  48.  
  49. INPUT#id%,r$:IF r$="0" PROCc_b(o%,25) ELSE PROCs_b(o%,25)
  50.  
  51. INPUT#id%,r$:IF r$="0" PROCc_b(o%,31) ELSE PROCs_b(o%,31)
  52.  
  53. CLOSE#id%
  54. ENDPROC
  55. :
  56. DEF PROCsave_options
  57. LOCAL id%
  58. id%=OPENOUT("<CTasm$Dir>.Options")
  59. PRINT#id%,$expand_icon%
  60. PRINT#id%,$TAB_icon%
  61. PRINT#id%,$tasm_icon%
  62. PRINT#id%,$BIN_icon%
  63. PRINT#id%,$errors_icon%
  64. PRINT#id%,$LST_icon%
  65. PRINT#id%,$TMP_icon%
  66. PRINT#id%,$SWEX_icon%
  67. PRINT#id%,$SWTA_icon%
  68. IF FNg_b(o%, 4) PRINT#id%,"1" ELSE PRINT#id%,"0"
  69. IF FNg_b(o%, 8) PRINT#id%,"1" ELSE PRINT#id%,"0"
  70. IF FNg_b(o%, 9) PRINT#id%,"1" ELSE PRINT#id%,"0"
  71. IF FNg_b(o%,10) PRINT#id%,"1" ELSE PRINT#id%,"0"
  72. IF FNg_b(o%,24) PRINT#id%,"1" ELSE PRINT#id%,"0"
  73. IF FNg_b(o%,25) PRINT#id%,"1" ELSE PRINT#id%,"0"
  74. IF FNg_b(o%,31) PRINT#id%,"1" ELSE PRINT#id%,"0"
  75. CLOSE#id%
  76. ENDPROC
  77. :
  78. DEF PROCinit
  79. DIM taskid%4:$taskid%="TASK"
  80. SYS "Wimp_Initialise",200,!taskid%,"CTasm" TO version%,task%
  81. DIM BK% 2048,q% 255
  82. maxws%=&1000:DIM ws% maxws%:wsend%=ws%+maxws%
  83.  
  84. REM workspace for indirected icons in windows
  85.  
  86. SYS "Wimp_OpenTemplate",,"<CTasm$Dir>.Templates"
  87. ON ERROR SYS "Wimp_CloseTemplate":PROCerrorbox:END
  88. SYS "Wimp_LoadTemplate",,BK%,ws%,wsend%,-1,"info",0 TO ,,ws%
  89. SYS "Wimp_CreateWindow",,BK% TO info%
  90. version_icon%=FNiconaddr(info%,4):$version_icon%=version$
  91. SYS "Wimp_LoadTemplate",,BK%,ws%,wsend%,-1,"options",0 TO ,,ws%
  92. SYS "Wimp_CreateWindow",,BK% TO o%
  93.  
  94. expand_icon%=FNiconaddr(o%,18)
  95. tasm_icon%=FNiconaddr(o%,23)
  96. TAB_icon%=FNiconaddr(o%,21)
  97. BIN_icon%=FNiconaddr(o%,6)
  98. errors_icon%=FNiconaddr(o%,2)
  99. LST_icon%=FNiconaddr(o%,12)
  100. TMP_icon%=FNiconaddr(o%,13)
  101. SWEX_icon%=FNiconaddr(o%,28) 
  102. SWTA_icon%=FNiconaddr(o%,30)
  103.  
  104. SYS "Wimp_LoadTemplate",,BK%,ws%,wsend%,-1,"message",0 TO ,,ws%
  105. SYS "Wimp_CreateWindow",,BK% TO message%
  106. message_icon%=FNiconaddr(message%,0)
  107. SYS "Wimp_CloseTemplate"
  108. ON ERROR PROCerrorbox:END
  109. PROCload_options
  110. wbcol=0:tbcol=2:sco=3:mbcol=2:wfcol=7:tfcol=7:sci=1:tbcol2=12
  111. menublocksize%=268
  112. nmenu%=5
  113. DIM iconmenu% menublocksize%
  114. DIM sub%(2):sub%(1)=info%:sub%(2)=o%
  115. PROCcreate_menu(iconmenu%,210,program$+",!1Info,!2Options,Load options,Save options,Quit")
  116. icon%=FNiconbar
  117. ENDPROC
  118. :
  119. DEF FNiconbar
  120. !q%=-1:q%!4=0:q%!8=0:q%!12=69:q%!16=68:q%!20=&3002:$(q%+24)="!ctasm"
  121. SYS "Wimp_CreateIcon",,q% TO WH%
  122. =WH%
  123. :
  124. DEF FNiconaddr(h%,i%)
  125. !q%=h%:q%!4=i%:SYS "Wimp_GetIconState",,q%
  126. IF (q%!24 AND &100)=0 ERROR 0,"Icon is not indirected"
  127. =q%!28
  128. :
  129. DEF PROCdo_menu(BK%)
  130. menu%=BK%
  131. IF menu%=iconmenu% SYS "Wimp_CreateMenu",,BK%,mousex%-64,96+nmenu%*44:ENDPROC
  132. SYS "Wimp_CreateMenu",,BK%,mousex%-32,mousey%+16
  133. ENDPROC
  134. :
  135. DEF PROCmenu_select
  136. LOCAL menu$,adjust%
  137. SYS "Wimp_GetPointerInfo",,BK%:adjust%=(BK%!8 AND 1)
  138. SYS "Wimp_DecodeMenu",,menu%,q%,STRING$(200," ")TO,,,menu$
  139. PROCmenu(menu$):IF adjust% PROCdo_menu(menu%)
  140. ENDPROC
  141. :
  142. DEF FNcreate_menu_level(menu%,width%,text$)
  143. LOCAL newtext$,title$,ptr%,shade%,tick%,dotted%,submenu%,mb%
  144. level%+=1
  145. mb%=menu%+(level%-1)*menublocksize%
  146. title$=LEFT$(text$,INSTR(text$,",")-1)
  147. text$=MID$(text$,INSTR(text$,",")+1)
  148. $mb%=LEFT$(title$,11): REM menu title
  149. mb%?12=tfcol:mb%?13=2:mb%?14=wfcol:mb%?15=wbcol: REM colours
  150. mb%!16=width%                   : REM width of menu items
  151. mb%!20=44                       : REM height of menu items
  152. mb%!24=0                        : REM vert. gap between items
  153. IF RIGHT$(text$,1)<>"," text$+=","
  154. ptr%=mb%+28: REM start menu items block
  155. REPEAT
  156.   shade%=0
  157.   tick%=0
  158.   dotted%=0
  159.   submenu%=-1
  160.   IF LEFT$(text$,1)="<" shade%=&400000:text$=MID$(text$,2)
  161.   IF LEFT$(text$,1)=">" tick%=1:text$=MID$(text$,2)
  162.   IF LEFT$(text$,1)=":" dotted%=2:text$=MID$(text$,2)
  163.   IF LEFT$(text$,1)="!" THEN
  164.     submenu%=sub%(VAL(MID$(text$,2,1)))
  165.     text$=MID$(text$,3)
  166.   ENDIF
  167.   IF LEFT$(text$,1)="(" THEN
  168.     text$=MID$(text$,2)
  169.     newtext$=menu$(VAL(LEFT$(text$,INSTR(text$,")")-1)))
  170.     text$=MID$(text$,INSTR(text$,")")+1)
  171.     submenu%=FNcreate_menu_level(menu%,width%,newtext$)
  172.   ENDIF
  173.   $(ptr%+12)=LEFT$(LEFT$(text$,INSTR(text$,",")-1),12)
  174.   text$=MID$(text$,INSTR(text$,",")+1)
  175.   ptr%!0=tick% OR dotted% OR (&80 AND (text$=""))
  176.   ptr%!4=submenu%
  177.   IF shade% ptr%!8=&400000 OR &010021 OR 7<<28 OR 0<<24 ELSE ptr%!8=&07000021
  178.   ptr%+=24
  179. UNTIL text$=""
  180. =mb%
  181. :
  182. DEF PROCcreate_menu(menu%,width%,text$)
  183. LOCAL crap%
  184. level%=0
  185. crap%=FNcreate_menu_level(menu%,width%,text$)
  186. IF crap%<>menu% ERROR 0,"Internal error: menu block address exception"
  187. ENDPROC
  188. :
  189. DEF PROCpreviousfield(WH%,icon%)
  190. CASE icon% OF
  191. WHEN 23:SYS "Wimp_SetCaretPosition",WH%,18,,,-1,LEN($FNiconaddr(WH%,18)) DIV 2
  192. WHEN 21:SYS "Wimp_SetCaretPosition",WH%,23,,,-1,LEN($FNiconaddr(WH%,23)) DIV 2
  193. WHEN  6:SYS "Wimp_SetCaretPosition",WH%,21,,,-1,LEN($FNiconaddr(WH%,21)) DIV 2
  194. WHEN  2:SYS "Wimp_SetCaretPosition",WH%, 6,,,-1,LEN($FNiconaddr(WH%, 6)) DIV 2
  195. WHEN 12:SYS "Wimp_SetCaretPosition",WH%, 2,,,-1,LEN($FNiconaddr(WH%, 2)) DIV 2
  196. WHEN 13:SYS "Wimp_SetCaretPosition",WH%,12,,,-1,LEN($FNiconaddr(WH%,12)) DIV 2
  197. ENDCASE
  198. ENDPROC
  199. :
  200. DEF PROCnextfield(WH%,icon%)
  201. CASE icon% OF
  202. WHEN 18:SYS "Wimp_SetCaretPosition",WH%,23,,,-1,LEN($FNiconaddr(WH%,23)) DIV 2
  203. WHEN 23:SYS "Wimp_SetCaretPosition",WH%,21,,,-1,LEN($FNiconaddr(WH%,21)) DIV 2
  204. WHEN 21:SYS "Wimp_SetCaretPosition",WH%, 6,,,-1,LEN($FNiconaddr(WH%, 6)) DIV 2
  205. WHEN  6:SYS "Wimp_SetCaretPosition",WH%, 2,,,-1,LEN($FNiconaddr(WH%, 2)) DIV 2
  206. WHEN  2:SYS "Wimp_SetCaretPosition",WH%,12,,,-1,LEN($FNiconaddr(WH%,12)) DIV 2
  207. WHEN 12:SYS "Wimp_SetCaretPosition",WH%,13,,,-1,LEN($FNiconaddr(WH%,13)) DIV 2
  208. ENDCASE
  209. ENDPROC
  210. :
  211. DEF PROCkey_press(WH%,icon%,key%)
  212. LOCAL processed%
  213. processed%=FALSE
  214. IF WH%=o% THEN
  215.   IF key%=&18F PROCpreviousfield(WH%,icon%)
  216.   IF key%=13 OR key%=&18E PROCnextfield(WH%,icon%)
  217.   processed%=TRUE
  218. ENDIF
  219. IF NOT processed% SYS "Wimp_ProcessKey",key%
  220. ENDPROC
  221. :
  222. DEF PROCmouse_click(x%,y%,b%,WH%,icon%,ob%)
  223. mousex%=x%:mousey%=y%
  224. clicked%=FALSE
  225. CASE b% OF
  226. WHEN 1,4: REM select- or alter-button clicked
  227.   CASE WH% OF
  228.   WHEN message%
  229.     IF icon%=1 PROCclose_window(message%)
  230.   WHEN -2: PROCmessagebox("Drag an ASM file to the icon bar")
  231.   ENDCASE
  232. WHEN 2: REM menu-button clicked
  233.   CASE WH% OF
  234.   WHEN -2: PROCdo_menu(iconmenu%)
  235.   ENDCASE
  236. ENDCASE
  237. ENDPROC
  238. :
  239. DEF PROCmenu(menu$)
  240. IF menu%<>iconmenu% ENDPROC
  241. CASE menu$ OF
  242. WHEN "Load options": PROCload_options
  243. WHEN "Save options": PROCsave_options
  244. WHEN "Quit": quit%=TRUE
  245. ENDCASE
  246. ENDPROC
  247. :
  248. DEF PROCreceive(ref%,message%)
  249. CASE message% OF
  250. WHEN 0: quit%=TRUE
  251. WHEN 1: REM file dropped from application - return filename
  252.         !q%=(48+20)ANDNOT3:       REM adjust size of packet
  253.         q%!12=q%!8:               REM copy myref
  254.         q%!16=2:                  REM set to DataLoadAck
  255.         q%!36=-1:                 REM unsafe file!
  256.         $(q%+44)="<CTasm$Dir>.^.ASM.?"
  257.         ?(q%+44+20)=0
  258.         OSCLI("CDir <CTasm$Dir>.^.ASM")
  259.         SYS"Wimp_SendMessage",17,q%,q%!4
  260. WHEN 3: REM file dropped from Filer - transfer to data file
  261.         PROCload
  262. ENDCASE
  263. ENDPROC
  264. :
  265. DEF FNrtoz(p%)
  266. LOCAL q$
  267. WHILE ?p%<>0 q$+=CHR$?p%:p%+=1:ENDWHILE
  268. =q$
  269. :
  270. DEF PROCcheck_type
  271. type%=q%!40
  272. IF type%=&1000 PROCwarningbox("Can't load a directory"):ENDPROC
  273. IF type%=&2000 PROCwarningbox("Can't load an application"):ENDPROC
  274. IF type%<>&FFF PROCwarningbox("Must be a text file")
  275. ENDPROC
  276. :
  277. DEF FNlowercase(s$)
  278. LOCAL K%,c%,lower$
  279. lower$=""
  280. FOR K%=1 TO LEN(s$)
  281.   c%=ASC(MID$(s$,K%,1))
  282.   IF c%>=ASC("A") AND c%<=ASC("Z") THEN
  283.     lower$+=CHR$(c%-ASC("A")+ASC("a"))
  284.   ELSE
  285.     lower$+=CHR$(c%)
  286.   ENDIF
  287. NEXT
  288. =lower$
  289. :
  290. DEF FNg_b(h%,i%)
  291. !BK%=h%:BK%!4=i%:SYS"Wimp_GetIconState",,BK%
  292. =((BK%!24 AND 1<<21)<>0)
  293. :
  294. DEF PROCs_b(h%,i%)
  295. !q%=h%:q%!4=i%:q%!8=1<<21:q%!12=1<<21
  296. SYS "Wimp_SetIconState",,q%
  297. ENDPROC
  298. :
  299. DEF PROCc_b(h%,i%)
  300. !q%=h%:q%!4=i%:q%!8=0<<21:q%!12=1<<21
  301. SYS "Wimp_SetIconState",,q%
  302. ENDPROC
  303. :
  304. DEF FNread_system_var(name$)
  305. LOCAL K%,s%,t%
  306. SYS "XOS_ReadVarVal",name$,q%,255,0,3 TO ,,s%,,t%
  307. IF s%=0 THEN
  308.   name$=""
  309. ELSE
  310.   name$=""
  311.   FOR K%=0 TO s%-1
  312.     name$+=CHR$(q%?K%)
  313.   NEXT
  314. ENDIF
  315. =name$
  316. :
  317. DEF PROCwrite_variable(name$,content$,type%)
  318. IF type%=-1 THEN
  319.   OSCLI("UnSet "+name$)
  320. ELSE
  321.   SYS "OS_SetVarVal",name$,content$,LEN(content$),0,type%
  322. ENDIF
  323. ENDPROC
  324. :
  325. DEF PROCload
  326. LOCAL dot%,lastdot%,prevdot%,id%,len%,prefix$
  327. LOCAL dir$,file$,bin_out$,report$,cc$,link$,squeeze$
  328.  
  329. PROCcheck_type:  IF type%<>&FFF ENDPROC
  330. name$=FNrtoz(q%+44)
  331.  
  332. dot%=INSTR(name$,".",dot%)
  333.  
  334. WHILE dot%>0
  335.   prevdot%  =lastdot%
  336.   lastdot%  =dot%
  337.   dot%      =INSTR(name$,".",dot%+1)
  338. ENDWHILE
  339.  
  340. IF prevdot%=0 THEN
  341.   PROCwarningbox("Name '"+name$+"' not accepted by CTasm")
  342.   ENDPROC
  343. ENDIF
  344.  
  345. prefix$  =LEFT$(name$,prevdot%-1)
  346. dir$     =MID$(name$,prevdot%+1,lastdot%-prevdot%-1)
  347. file$    =MID$(name$,lastdot%+1)
  348.  
  349. IF FNlowercase(dir$)<>"asm" THEN
  350.   PROCwarningbox("File '"+file$+"' not in ASM source directory")
  351.   ENDPROC
  352. ENDIF
  353.  
  354. ex_dir$  =$expand_icon%
  355. ta_dir$  =$tasm_icon%
  356. sw_ex$   =$SWEX_icon%
  357. sw_ta$   =$SWTA_icon%
  358. tab_dir$ =$TAB_icon%
  359. bin_out$ =$BIN_icon%
  360.  
  361. report$    =$errors_icon%
  362. lst_out$   =$LST_icon%
  363. tmp_file$  =$TMP_icon%
  364.  
  365. REM
  366. REM     --------------------------------------------------
  367. REM     Set up the EXPAND Step...
  368. REM
  369. excmd$=""
  370. IF ex_dir$<>"" excmd$+=ex_dir$+"."
  371. excmd$+="EXPAND /I:"+prefix$+".ASM."+file$+" /O:"+tmp_file$
  372.  
  373. REM   IF FNg_b(o%,31) cc$+=" -g"
  374. REM   IF tab_dir$="" THEN
  375. REM   ELSE
  376. REM   ENDIF
  377.      
  378. IF sw_ex$<>""    excmd$+=" "+sw_ex$
  379. IF FNg_b(o%,24)  excmd$+=" +M +C "
  380. IF FNg_b(o%,25) AND report$<>"" excmd$+=" { > "+report$+" }"
  381.  
  382. REM
  383. REM     --------------------------------------------------
  384. REM     Set Up the Assembly Step.
  385. REM
  386.  
  387. ascmd$=""
  388. IF ta_dir$<>""  ascmd$+=ta_dir$+"."
  389. ascmd$+="TASM "+sw_ta$+" "+tmp_file$+" "
  390.  
  391. IF bin_out$ <> "" THEN
  392.     ascmd$+= prefix$+".BIN."+bin_out$+" "
  393. ELSE
  394.     ascmd$+= prefix$+".BIN."+file$+" "
  395. ENDIF
  396.  
  397. IF FNg_b(o%,9)   THEN
  398.     IF lst_out$ <> "" THEN
  399.          ascmd$+= prefix$+".LST."+lst_out$+" "
  400.     ELSE
  401.          ascmd$+= prefix$+".LST."+file$+" "
  402.     ENDIF
  403. ELSE
  404.     ascmd$+=" -Q "
  405. ENDIF
  406.  
  407. IF FNg_b(o%,25) AND report$<>"" ascmd$+=" { > "+report$+" }"
  408.   
  409.  
  410. REM
  411. REM     Begin  Processing.
  412. REM
  413. OSCLI("Dir  "+prefix$)            :REM only used for terminal output
  414. OSCLI("CDir "+prefix$+".BIN")     :REM BIN directory created
  415. IF FNg_b(o%,9) OSCLI("CDir "+prefix$+".LST")  :REM LST directory created
  416.  
  417. SYS "Wimp_SlotSize",-1,-1 TO ,next%,free%
  418. IF free%<400*1024 THEN
  419.   PROCwarningbox("Can't claim enough free memory.")
  420.   ENDPROC
  421. ENDIF
  422.  
  423. SYS "Hourglass_On"
  424. SYS "Wimp_SlotSize",-1,free%
  425. SYS "Wimp_StartTask",excmd$
  426.  
  427. IF FNg_b(o%,25) AND report$<>"" THEN
  428.    IF FNread_system_var("Sys$ReturnCode")="0" THEN
  429.         OSCLI("Remove "+report$)
  430.    ELSE
  431.         OSCLI("SetType "+report$+" Text")
  432.         PROCwarningbox("*EXPAND Failed..")
  433.         SYS "Wimp_SlotSize",-1,next%
  434.         SYS "Hourglass_Off"
  435.         ENDPROC
  436.    ENDIF
  437. ENDIF
  438.  
  439. REM
  440. REM     Start Assembler.
  441. REM
  442. IF FNg_b(o%,8) THEN
  443.   SYS "Wimp_StartTask",ascmd$
  444.   IF FNread_system_var("Sys$ReturnCode")="0" THEN
  445.     IF FNg_b(o%,10) OSCLI("Remove "+tmp_file$)
  446.     IF FNg_b(o%,25) AND report$<>"" OSCLI("Remove "+report$)
  447.   ELSE
  448.     IF FNg_b(o%,25) AND report$<>"" OSCLI("SetType "+report$+" Text")
  449.     PROCwarningbox("*Assembly Failed")     
  450.   ENDIF
  451. ENDIF
  452. SYS "Wimp_SlotSize",-1,next%
  453. SYS "Hourglass_Off"
  454. ENDPROC
  455. :
  456. DEF PROCopen_window(WH%,x0%,y0%,x1%,y1%,scx%,scy%,bWH%)
  457. BK%!0=WH%:BK%!28=bWH%
  458. BK%!4=x0%:BK%!8=y0%:BK%!12=x1%:BK%!16=y1%
  459. BK%!20=scx%:BK%!24=scy%
  460. SYS "Wimp_OpenWindow",,BK%
  461. ENDPROC
  462. :
  463. DEF PROCorigin(BK%)
  464. x0%=BK%!4:y0%=BK%!8:x1%=BK%!12:y1%=BK%!16
  465. scx%=BK%!20:scy%=BK%!24
  466. bx%=x0%-scx%:by%=y1%-scy%
  467. ENDPROC
  468. :
  469. DEF PROCgetw(WH%)
  470. !BK%=WH%:SYS "Wimp_GetWindowState",,BK%
  471. PROCorigin(BK%):bWH%=BK%!28:flags%=BK%!32
  472. ENDPROC
  473. :
  474. DEF PROCfront(WH%)
  475. PROCgetw(WH%)
  476. PROCopen_window(WH%,x0%,y0%,x1%,y1%,scx%,scy%,-1)
  477. ENDPROC
  478. :
  479. DEF PROCclose_window(WH%)
  480. PROCgetw(WH%)
  481. !BK%=WH%:SYS "Wimp_CloseWindow",,BK%
  482. ENDPROC
  483. :
  484. DEF PROCmessagebox(message$)
  485. $message_icon%=message$
  486. PROCfront(message%)
  487. ENDPROC
  488. :
  489. DEF PROCwarningbox(warning$)
  490. !q%=0:$(q%+4)=warning$+CHR$0
  491. SYS "Wimp_ReportError",q%,1,program$
  492. ENDPROC
  493. :
  494. DEF PROCerrorbox
  495. LOCAL ERROR
  496. ON ERROR LOCAL SYS "Wimp_CloseDown":END
  497. SYS "Hourglass_Smash"
  498. !q%=ERR:$(q%+4)=REPORT$+" at line "+STR$(ERL)+CHR$(0)
  499. SYS "Wimp_ReportError",q%,1,program$
  500. SYS "Wimp_CloseDown"
  501. ENDPROC
  502.