home *** CD-ROM | disk | FTP | other *** search
- REM > <CTasm$Dir>.!RunImage
- REM Desktop Front-End for EXPAND/TASM
- REM (C) Walther Shoonenburg/RJP
- REM 3rd September 1992 Modified version of !CCompile.
- :
- program$="CTasm":version$="1.0 (30-Aug-92)"
- :
- PROCinit
- mask%=(1<<5)+(1<<4)+(1<<0)
- quit%=FALSE
- REPEAT
- SYS "Wimp_Poll",mask%,q% TO reason%,offset%
- CASE reason% OF
- WHEN 2: PROCopen_window(!q%,q%!4,q%!8,q%!12,q%!16,q%!20,q%!24,q%!28)
- WHEN 3: PROCclose_window(!q%)
- WHEN 6: PROCmouse_click(!q%,q%!4,q%!8,q%!12,q%!16,q%!20)
- WHEN 8: PROCkey_press(!q%,q%!4,q%!24)
- WHEN 9: PROCmenu_select
- WHEN 17,18: PROCreceive(q%!12,q%!16)
- ENDCASE
- UNTIL quit%
- SYS "Wimp_CloseDown"
- END
- :
- DEF PROCload_options
- LOCAL id%
- id%=OPENIN("<CTasm$Dir>.Options")
- IF id%=0 ENDPROC
- INPUT#id%,r$:$expand_icon%=r$
- INPUT#id%,r$:$TAB_icon%=r$
- INPUT#id%,r$:$tasm_icon%=r$
- INPUT#id%,r$:$BIN_icon%=r$
- INPUT#id%,r$:$errors_icon%=r$
- INPUT#id%,r$:$LST_icon%=r$
- INPUT#id%,r$:$TMP_icon%=r$
- INPUT#id%,r$:$SWEX_icon%=r$
- INPUT#id%,r$:$SWTA_icon%=r$
-
- INPUT#id%,r$:IF r$="0" PROCc_b(o%, 4) ELSE PROCs_b(o%, 4)
-
- INPUT#id%,r$:IF r$="0" PROCc_b(o%, 8) ELSE PROCs_b(o%, 8)
-
- INPUT#id%,r$:IF r$="0" PROCc_b(o%, 9) ELSE PROCs_b(o%, 9)
-
- INPUT#id%,r$:IF r$="0" PROCc_b(o%,10) ELSE PROCs_b(o%,10)
-
- INPUT#id%,r$:IF r$="0" PROCc_b(o%,24) ELSE PROCs_b(o%,24)
-
- INPUT#id%,r$:IF r$="0" PROCc_b(o%,25) ELSE PROCs_b(o%,25)
-
- INPUT#id%,r$:IF r$="0" PROCc_b(o%,31) ELSE PROCs_b(o%,31)
-
- CLOSE#id%
- ENDPROC
- :
- DEF PROCsave_options
- LOCAL id%
- id%=OPENOUT("<CTasm$Dir>.Options")
- PRINT#id%,$expand_icon%
- PRINT#id%,$TAB_icon%
- PRINT#id%,$tasm_icon%
- PRINT#id%,$BIN_icon%
- PRINT#id%,$errors_icon%
- PRINT#id%,$LST_icon%
- PRINT#id%,$TMP_icon%
- PRINT#id%,$SWEX_icon%
- PRINT#id%,$SWTA_icon%
- IF FNg_b(o%, 4) PRINT#id%,"1" ELSE PRINT#id%,"0"
- IF FNg_b(o%, 8) PRINT#id%,"1" ELSE PRINT#id%,"0"
- IF FNg_b(o%, 9) PRINT#id%,"1" ELSE PRINT#id%,"0"
- IF FNg_b(o%,10) PRINT#id%,"1" ELSE PRINT#id%,"0"
- IF FNg_b(o%,24) PRINT#id%,"1" ELSE PRINT#id%,"0"
- IF FNg_b(o%,25) PRINT#id%,"1" ELSE PRINT#id%,"0"
- IF FNg_b(o%,31) PRINT#id%,"1" ELSE PRINT#id%,"0"
- CLOSE#id%
- ENDPROC
- :
- DEF PROCinit
- DIM taskid%4:$taskid%="TASK"
- SYS "Wimp_Initialise",200,!taskid%,"CTasm" TO version%,task%
- DIM BK% 2048,q% 255
- maxws%=&1000:DIM ws% maxws%:wsend%=ws%+maxws%
-
- REM workspace for indirected icons in windows
-
- SYS "Wimp_OpenTemplate",,"<CTasm$Dir>.Templates"
- ON ERROR SYS "Wimp_CloseTemplate":PROCerrorbox:END
- SYS "Wimp_LoadTemplate",,BK%,ws%,wsend%,-1,"info",0 TO ,,ws%
- SYS "Wimp_CreateWindow",,BK% TO info%
- version_icon%=FNiconaddr(info%,4):$version_icon%=version$
- SYS "Wimp_LoadTemplate",,BK%,ws%,wsend%,-1,"options",0 TO ,,ws%
- SYS "Wimp_CreateWindow",,BK% TO o%
-
- expand_icon%=FNiconaddr(o%,18)
- tasm_icon%=FNiconaddr(o%,23)
- TAB_icon%=FNiconaddr(o%,21)
- BIN_icon%=FNiconaddr(o%,6)
- errors_icon%=FNiconaddr(o%,2)
- LST_icon%=FNiconaddr(o%,12)
- TMP_icon%=FNiconaddr(o%,13)
- SWEX_icon%=FNiconaddr(o%,28)
- SWTA_icon%=FNiconaddr(o%,30)
-
- SYS "Wimp_LoadTemplate",,BK%,ws%,wsend%,-1,"message",0 TO ,,ws%
- SYS "Wimp_CreateWindow",,BK% TO message%
- message_icon%=FNiconaddr(message%,0)
- SYS "Wimp_CloseTemplate"
- ON ERROR PROCerrorbox:END
- PROCload_options
- wbcol=0:tbcol=2:sco=3:mbcol=2:wfcol=7:tfcol=7:sci=1:tbcol2=12
- menublocksize%=268
- nmenu%=5
- DIM iconmenu% menublocksize%
- DIM sub%(2):sub%(1)=info%:sub%(2)=o%
- PROCcreate_menu(iconmenu%,210,program$+",!1Info,!2Options,Load options,Save options,Quit")
- icon%=FNiconbar
- ENDPROC
- :
- DEF FNiconbar
- !q%=-1:q%!4=0:q%!8=0:q%!12=69:q%!16=68:q%!20=&3002:$(q%+24)="!ctasm"
- SYS "Wimp_CreateIcon",,q% TO WH%
- =WH%
- :
- DEF FNiconaddr(h%,i%)
- !q%=h%:q%!4=i%:SYS "Wimp_GetIconState",,q%
- IF (q%!24 AND &100)=0 ERROR 0,"Icon is not indirected"
- =q%!28
- :
- DEF PROCdo_menu(BK%)
- menu%=BK%
- IF menu%=iconmenu% SYS "Wimp_CreateMenu",,BK%,mousex%-64,96+nmenu%*44:ENDPROC
- SYS "Wimp_CreateMenu",,BK%,mousex%-32,mousey%+16
- ENDPROC
- :
- DEF PROCmenu_select
- LOCAL menu$,adjust%
- SYS "Wimp_GetPointerInfo",,BK%:adjust%=(BK%!8 AND 1)
- SYS "Wimp_DecodeMenu",,menu%,q%,STRING$(200," ")TO,,,menu$
- PROCmenu(menu$):IF adjust% PROCdo_menu(menu%)
- ENDPROC
- :
- DEF FNcreate_menu_level(menu%,width%,text$)
- LOCAL newtext$,title$,ptr%,shade%,tick%,dotted%,submenu%,mb%
- level%+=1
- mb%=menu%+(level%-1)*menublocksize%
- title$=LEFT$(text$,INSTR(text$,",")-1)
- text$=MID$(text$,INSTR(text$,",")+1)
- $mb%=LEFT$(title$,11): REM menu title
- mb%?12=tfcol:mb%?13=2:mb%?14=wfcol:mb%?15=wbcol: REM colours
- mb%!16=width% : REM width of menu items
- mb%!20=44 : REM height of menu items
- mb%!24=0 : REM vert. gap between items
- IF RIGHT$(text$,1)<>"," text$+=","
- ptr%=mb%+28: REM start menu items block
- REPEAT
- shade%=0
- tick%=0
- dotted%=0
- submenu%=-1
- IF LEFT$(text$,1)="<" shade%=&400000:text$=MID$(text$,2)
- IF LEFT$(text$,1)=">" tick%=1:text$=MID$(text$,2)
- IF LEFT$(text$,1)=":" dotted%=2:text$=MID$(text$,2)
- IF LEFT$(text$,1)="!" THEN
- submenu%=sub%(VAL(MID$(text$,2,1)))
- text$=MID$(text$,3)
- ENDIF
- IF LEFT$(text$,1)="(" THEN
- text$=MID$(text$,2)
- newtext$=menu$(VAL(LEFT$(text$,INSTR(text$,")")-1)))
- text$=MID$(text$,INSTR(text$,")")+1)
- submenu%=FNcreate_menu_level(menu%,width%,newtext$)
- ENDIF
- $(ptr%+12)=LEFT$(LEFT$(text$,INSTR(text$,",")-1),12)
- text$=MID$(text$,INSTR(text$,",")+1)
- ptr%!0=tick% OR dotted% OR (&80 AND (text$=""))
- ptr%!4=submenu%
- IF shade% ptr%!8=&400000 OR &010021 OR 7<<28 OR 0<<24 ELSE ptr%!8=&07000021
- ptr%+=24
- UNTIL text$=""
- =mb%
- :
- DEF PROCcreate_menu(menu%,width%,text$)
- LOCAL crap%
- level%=0
- crap%=FNcreate_menu_level(menu%,width%,text$)
- IF crap%<>menu% ERROR 0,"Internal error: menu block address exception"
- ENDPROC
- :
- DEF PROCpreviousfield(WH%,icon%)
- CASE icon% OF
- WHEN 23:SYS "Wimp_SetCaretPosition",WH%,18,,,-1,LEN($FNiconaddr(WH%,18)) DIV 2
- WHEN 21:SYS "Wimp_SetCaretPosition",WH%,23,,,-1,LEN($FNiconaddr(WH%,23)) DIV 2
- WHEN 6:SYS "Wimp_SetCaretPosition",WH%,21,,,-1,LEN($FNiconaddr(WH%,21)) DIV 2
- WHEN 2:SYS "Wimp_SetCaretPosition",WH%, 6,,,-1,LEN($FNiconaddr(WH%, 6)) DIV 2
- WHEN 12:SYS "Wimp_SetCaretPosition",WH%, 2,,,-1,LEN($FNiconaddr(WH%, 2)) DIV 2
- WHEN 13:SYS "Wimp_SetCaretPosition",WH%,12,,,-1,LEN($FNiconaddr(WH%,12)) DIV 2
- ENDCASE
- ENDPROC
- :
- DEF PROCnextfield(WH%,icon%)
- CASE icon% OF
- WHEN 18:SYS "Wimp_SetCaretPosition",WH%,23,,,-1,LEN($FNiconaddr(WH%,23)) DIV 2
- WHEN 23:SYS "Wimp_SetCaretPosition",WH%,21,,,-1,LEN($FNiconaddr(WH%,21)) DIV 2
- WHEN 21:SYS "Wimp_SetCaretPosition",WH%, 6,,,-1,LEN($FNiconaddr(WH%, 6)) DIV 2
- WHEN 6:SYS "Wimp_SetCaretPosition",WH%, 2,,,-1,LEN($FNiconaddr(WH%, 2)) DIV 2
- WHEN 2:SYS "Wimp_SetCaretPosition",WH%,12,,,-1,LEN($FNiconaddr(WH%,12)) DIV 2
- WHEN 12:SYS "Wimp_SetCaretPosition",WH%,13,,,-1,LEN($FNiconaddr(WH%,13)) DIV 2
- ENDCASE
- ENDPROC
- :
- DEF PROCkey_press(WH%,icon%,key%)
- LOCAL processed%
- processed%=FALSE
- IF WH%=o% THEN
- IF key%=&18F PROCpreviousfield(WH%,icon%)
- IF key%=13 OR key%=&18E PROCnextfield(WH%,icon%)
- processed%=TRUE
- ENDIF
- IF NOT processed% SYS "Wimp_ProcessKey",key%
- ENDPROC
- :
- DEF PROCmouse_click(x%,y%,b%,WH%,icon%,ob%)
- mousex%=x%:mousey%=y%
- clicked%=FALSE
- CASE b% OF
- WHEN 1,4: REM select- or alter-button clicked
- CASE WH% OF
- WHEN message%
- IF icon%=1 PROCclose_window(message%)
- WHEN -2: PROCmessagebox("Drag an ASM file to the icon bar")
- ENDCASE
- WHEN 2: REM menu-button clicked
- CASE WH% OF
- WHEN -2: PROCdo_menu(iconmenu%)
- ENDCASE
- ENDCASE
- ENDPROC
- :
- DEF PROCmenu(menu$)
- IF menu%<>iconmenu% ENDPROC
- CASE menu$ OF
- WHEN "Load options": PROCload_options
- WHEN "Save options": PROCsave_options
- WHEN "Quit": quit%=TRUE
- ENDCASE
- ENDPROC
- :
- DEF PROCreceive(ref%,message%)
- CASE message% OF
- WHEN 0: quit%=TRUE
- WHEN 1: REM file dropped from application - return filename
- !q%=(48+20)ANDNOT3: REM adjust size of packet
- q%!12=q%!8: REM copy myref
- q%!16=2: REM set to DataLoadAck
- q%!36=-1: REM unsafe file!
- $(q%+44)="<CTasm$Dir>.^.ASM.?"
- ?(q%+44+20)=0
- OSCLI("CDir <CTasm$Dir>.^.ASM")
- SYS"Wimp_SendMessage",17,q%,q%!4
- WHEN 3: REM file dropped from Filer - transfer to data file
- PROCload
- ENDCASE
- ENDPROC
- :
- DEF FNrtoz(p%)
- LOCAL q$
- WHILE ?p%<>0 q$+=CHR$?p%:p%+=1:ENDWHILE
- =q$
- :
- DEF PROCcheck_type
- type%=q%!40
- IF type%=&1000 PROCwarningbox("Can't load a directory"):ENDPROC
- IF type%=&2000 PROCwarningbox("Can't load an application"):ENDPROC
- IF type%<>&FFF PROCwarningbox("Must be a text file")
- ENDPROC
- :
- DEF FNlowercase(s$)
- LOCAL K%,c%,lower$
- lower$=""
- FOR K%=1 TO LEN(s$)
- c%=ASC(MID$(s$,K%,1))
- IF c%>=ASC("A") AND c%<=ASC("Z") THEN
- lower$+=CHR$(c%-ASC("A")+ASC("a"))
- ELSE
- lower$+=CHR$(c%)
- ENDIF
- NEXT
- =lower$
- :
- DEF FNg_b(h%,i%)
- !BK%=h%:BK%!4=i%:SYS"Wimp_GetIconState",,BK%
- =((BK%!24 AND 1<<21)<>0)
- :
- DEF PROCs_b(h%,i%)
- !q%=h%:q%!4=i%:q%!8=1<<21:q%!12=1<<21
- SYS "Wimp_SetIconState",,q%
- ENDPROC
- :
- DEF PROCc_b(h%,i%)
- !q%=h%:q%!4=i%:q%!8=0<<21:q%!12=1<<21
- SYS "Wimp_SetIconState",,q%
- ENDPROC
- :
- DEF FNread_system_var(name$)
- LOCAL K%,s%,t%
- SYS "XOS_ReadVarVal",name$,q%,255,0,3 TO ,,s%,,t%
- IF s%=0 THEN
- name$=""
- ELSE
- name$=""
- FOR K%=0 TO s%-1
- name$+=CHR$(q%?K%)
- NEXT
- ENDIF
- =name$
- :
- DEF PROCwrite_variable(name$,content$,type%)
- IF type%=-1 THEN
- OSCLI("UnSet "+name$)
- ELSE
- SYS "OS_SetVarVal",name$,content$,LEN(content$),0,type%
- ENDIF
- ENDPROC
- :
- DEF PROCload
- LOCAL dot%,lastdot%,prevdot%,id%,len%,prefix$
- LOCAL dir$,file$,bin_out$,report$,cc$,link$,squeeze$
-
- PROCcheck_type: IF type%<>&FFF ENDPROC
- name$=FNrtoz(q%+44)
-
- dot%=INSTR(name$,".",dot%)
-
- WHILE dot%>0
- prevdot% =lastdot%
- lastdot% =dot%
- dot% =INSTR(name$,".",dot%+1)
- ENDWHILE
-
- IF prevdot%=0 THEN
- PROCwarningbox("Name '"+name$+"' not accepted by CTasm")
- ENDPROC
- ENDIF
-
- prefix$ =LEFT$(name$,prevdot%-1)
- dir$ =MID$(name$,prevdot%+1,lastdot%-prevdot%-1)
- file$ =MID$(name$,lastdot%+1)
-
- IF FNlowercase(dir$)<>"asm" THEN
- PROCwarningbox("File '"+file$+"' not in ASM source directory")
- ENDPROC
- ENDIF
-
- ex_dir$ =$expand_icon%
- ta_dir$ =$tasm_icon%
- sw_ex$ =$SWEX_icon%
- sw_ta$ =$SWTA_icon%
- tab_dir$ =$TAB_icon%
- bin_out$ =$BIN_icon%
-
- report$ =$errors_icon%
- lst_out$ =$LST_icon%
- tmp_file$ =$TMP_icon%
-
- REM
- REM --------------------------------------------------
- REM Set up the EXPAND Step...
- REM
- excmd$=""
- IF ex_dir$<>"" excmd$+=ex_dir$+"."
- excmd$+="EXPAND /I:"+prefix$+".ASM."+file$+" /O:"+tmp_file$
-
- REM IF FNg_b(o%,31) cc$+=" -g"
- REM IF tab_dir$="" THEN
- REM ELSE
- REM ENDIF
-
- IF sw_ex$<>"" excmd$+=" "+sw_ex$
- IF FNg_b(o%,24) excmd$+=" +M +C "
- IF FNg_b(o%,25) AND report$<>"" excmd$+=" { > "+report$+" }"
-
- REM
- REM --------------------------------------------------
- REM Set Up the Assembly Step.
- REM
-
- ascmd$=""
- IF ta_dir$<>"" ascmd$+=ta_dir$+"."
- ascmd$+="TASM "+sw_ta$+" "+tmp_file$+" "
-
- IF bin_out$ <> "" THEN
- ascmd$+= prefix$+".BIN."+bin_out$+" "
- ELSE
- ascmd$+= prefix$+".BIN."+file$+" "
- ENDIF
-
- IF FNg_b(o%,9) THEN
- IF lst_out$ <> "" THEN
- ascmd$+= prefix$+".LST."+lst_out$+" "
- ELSE
- ascmd$+= prefix$+".LST."+file$+" "
- ENDIF
- ELSE
- ascmd$+=" -Q "
- ENDIF
-
- IF FNg_b(o%,25) AND report$<>"" ascmd$+=" { > "+report$+" }"
-
-
- REM
- REM Begin Processing.
- REM
- OSCLI("Dir "+prefix$) :REM only used for terminal output
- OSCLI("CDir "+prefix$+".BIN") :REM BIN directory created
- IF FNg_b(o%,9) OSCLI("CDir "+prefix$+".LST") :REM LST directory created
-
- SYS "Wimp_SlotSize",-1,-1 TO ,next%,free%
- IF free%<400*1024 THEN
- PROCwarningbox("Can't claim enough free memory.")
- ENDPROC
- ENDIF
-
- SYS "Hourglass_On"
- SYS "Wimp_SlotSize",-1,free%
- SYS "Wimp_StartTask",excmd$
-
- IF FNg_b(o%,25) AND report$<>"" THEN
- IF FNread_system_var("Sys$ReturnCode")="0" THEN
- OSCLI("Remove "+report$)
- ELSE
- OSCLI("SetType "+report$+" Text")
- PROCwarningbox("*EXPAND Failed..")
- SYS "Wimp_SlotSize",-1,next%
- SYS "Hourglass_Off"
- ENDPROC
- ENDIF
- ENDIF
-
- REM
- REM Start Assembler.
- REM
- IF FNg_b(o%,8) THEN
- SYS "Wimp_StartTask",ascmd$
- IF FNread_system_var("Sys$ReturnCode")="0" THEN
- IF FNg_b(o%,10) OSCLI("Remove "+tmp_file$)
- IF FNg_b(o%,25) AND report$<>"" OSCLI("Remove "+report$)
- ELSE
- IF FNg_b(o%,25) AND report$<>"" OSCLI("SetType "+report$+" Text")
- PROCwarningbox("*Assembly Failed")
- ENDIF
- ENDIF
- SYS "Wimp_SlotSize",-1,next%
- SYS "Hourglass_Off"
- ENDPROC
- :
- DEF PROCopen_window(WH%,x0%,y0%,x1%,y1%,scx%,scy%,bWH%)
- BK%!0=WH%:BK%!28=bWH%
- BK%!4=x0%:BK%!8=y0%:BK%!12=x1%:BK%!16=y1%
- BK%!20=scx%:BK%!24=scy%
- SYS "Wimp_OpenWindow",,BK%
- ENDPROC
- :
- DEF PROCorigin(BK%)
- x0%=BK%!4:y0%=BK%!8:x1%=BK%!12:y1%=BK%!16
- scx%=BK%!20:scy%=BK%!24
- bx%=x0%-scx%:by%=y1%-scy%
- ENDPROC
- :
- DEF PROCgetw(WH%)
- !BK%=WH%:SYS "Wimp_GetWindowState",,BK%
- PROCorigin(BK%):bWH%=BK%!28:flags%=BK%!32
- ENDPROC
- :
- DEF PROCfront(WH%)
- PROCgetw(WH%)
- PROCopen_window(WH%,x0%,y0%,x1%,y1%,scx%,scy%,-1)
- ENDPROC
- :
- DEF PROCclose_window(WH%)
- PROCgetw(WH%)
- !BK%=WH%:SYS "Wimp_CloseWindow",,BK%
- ENDPROC
- :
- DEF PROCmessagebox(message$)
- $message_icon%=message$
- PROCfront(message%)
- ENDPROC
- :
- DEF PROCwarningbox(warning$)
- !q%=0:$(q%+4)=warning$+CHR$0
- SYS "Wimp_ReportError",q%,1,program$
- ENDPROC
- :
- DEF PROCerrorbox
- LOCAL ERROR
- ON ERROR LOCAL SYS "Wimp_CloseDown":END
- SYS "Hourglass_Smash"
- !q%=ERR:$(q%+4)=REPORT$+" at line "+STR$(ERL)+CHR$(0)
- SYS "Wimp_ReportError",q%,1,program$
- SYS "Wimp_CloseDown"
- ENDPROC
-