jms@vanth.UUCP (Jim Shaffer) (03/31/91)
Since the REXX language isn't unique to the Amiga, am I correct in assuming that AREXX doesn't support such things as opening windows, drawing graphics, etc.? If that's the case, does it provide a way to call Amiga library functions? (I don't use AREXX right now, as if you couldn't guess that, but since BASIC apparently isn't supported under 2.0 I'll need some way to do really quick programs when I don't feel like writing C.) (This probably should've gone in .introduction, but I don't get that group.) -- * From the disk of: | jms@vanth.uucp | "You know I never knew Jim Shaffer, Jr. | amix.commodore.com!vanth!jms | that it could be so 37 Brook Street | uunet!cbmvax!amix!vanth!jms | strange..." Montgomery, PA 17752 | 72750.2335@compuserve.com | (R.E.M.)
dac@prolix.pub.uu.oz.au (Andrew Clayton) (03/31/91)
*** WARNING - 560+ line posting! *** In article <jms.3829@vanth.UUCP>, Jim Shaffer writes: > Since the REXX language isn't unique to the Amiga, am I correct in assuming > that AREXX doesn't support such things as opening windows, drawing > graphics, etc.? If that's the case, does it provide a way to call Amiga > library functions? (I don't use AREXX right now, as if you couldn't guess > that, but since BASIC apparently isn't supported under 2.0 I'll need some > way to do really quick programs when I don't feel like writing C.) Snap can open windows, draw, use gadgets. It's great. Look at this: [From 'Snap'...] Submitted-by: micke@slaka.sirius.se (Mikael Karlsson) Posting-number: Volume 90, Issue 067 Archive-name: util/snap-1.4/part01 %%%%%%%%%%%%%%%%%%%% cut here %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /* Arexx script to help people with Snap arguments */ signal on error if ~show('l', "rexxarplib.library") then do check = addlib('rexxsupport.library',0,-30,0) check = addlib('rexxmathlib.library',0,-30,0) check = addlib('rexxarplib.library',0,-30,0) end if ~exists("fonts:helvetica/15") then do say "Actually I need font 'Helvetica 15', but I'll try anyway." end bool.0 = 'OFF'; bool.1 = 'ON' /* Fix window dimensions */ screen.width = ScreenCols() screen.height = ScreenRows() window.width = 530 window.height = 200 window.leftedge = (screen.width-window.width)/2 window.topedge = (screen.height-window.height)/2 /* Set up a host */ parse version 'V' vers . signal on syntax call stop(SNAPHOST) syntax: if vers > 1.06 then address AREXX "'call CreateHost(SNAPHOST, SNAPPORT)'" else "runwsh >nil:" "'call CreateHost(SNAPHOST, SNAPPORT)'" /* * Wait for a while until host is ready. */ do for 50 while ~show('Ports','SNAPHOST') call delay 10 /* 200 ms */ end call SetReqColor(SNAPHOST, BLOCKPEN, 1) call SetReqColor(SNAPHOST, DETAILPEN, 0) /* * Open the window */ window.idcmp = 'CLOSEWINDOW+GADGETUP+RAWKEY' window.flags = 'WINDOWCLOSE+WINDOWDRAG+WINDOWDEPTH+ACTIVATE' title = "Setup tool for Snap" call OpenWindow(SNAPHOST, window.leftedge, window.topedge, window.width, , window.height, window.idcmp, window.flags, title) call ModifyHost(SNAPHOST, RAWKEY, "RAWKEY %c") if exists("fonts:Helvetica/15") then do call SetFont(SNAPHOST, "Helvetica.font", 15) end signal dotext /* --- Start of texts --- " Please hold on..." 5 20 60 "" "Priority:" 5 40 6 "Input handler priority." "Insert key:" 215 60 9 "Key used with Left Amiga to insert." "Window key:" 215 80 9 "Key used with Left Amiga to open control window." "Char delay:" 215 100 9 "Delay after each inserted character" "Line delay:" 215 120 9 "Delay after each inserted newline." "Bit mask:" 215 140 9 "Bit planes to draw selection frame into." "Starting unit:" 215 160 9 "Unit in which to start snapping." "Prepend:" 5 180 6 "Characters added in front of each line in modified inserts." "Append:" 215 180 6 "Characters added at the end of each line in modified inserts." "Selection frame pattern:" 345 40 19 "Pattern used for crawling dots in selection frame." "Text qualifier:" 5 60 11 "Qualifier used when snapping characters." "Gfx qualifier:" 110 60 11 "Qualifier used when snapping graphics." EOT --- End of texts --- */ dotext: textlines = sigl+1 call SetReqColor(SNAPHOST, 'BOXPEN', 0) call SetReqColor(SNAPHOST, 'SHADOWPEN', 0) call SetAPen(SNAPHOST, 1) do i=1 while sourceline(textlines+i) ~= "EOT" parse value sourceline(textlines+i) with '"'text'"' x y w . '"'help'"' call AddGadget(SNAPHOST, x, y, 'HLP'i, copies(' ',w), "HELP "help) end call SetReqColor(SNAPHOST, 'BOXPEN', 2) call SetReqColor(SNAPHOST, 'SHADOWPEN', 3) do i=1 while sourceline(textlines+i) ~= "EOT" parse value sourceline(textlines+i) with '"'text'"' x y w . '"'help'"' call Move(SNAPHOST, x, y+10); call Text(SNAPHOST, text) end /* Set up some nice gadgets */ x = 65 do i=51 for 5 call AddGadget(SNAPHOST, x, 40, 'PR'i, ''i'', 'PRIORITY 'i); x = x+27 end inscode.1 = 23; inscode.2 = 15; inscode.3 = 34 inskey.1 = 'I'; inskey.2 = 'Y'; inskey.3 = 'V' x = 300 do i=1 for 3 call AddGadget(SNAPHOST, x, 60, 'INS'i, inskey.i, 'INSKEY 'i); x = x+20 end cwcode.1 = 17; cwcode.2 = 51; cwcode.3 = 24 cwkey.1 = 'W'; cwkey.2 = 'C'; cwkey.3 = 'O' x = 300 do i=1 for 3 call AddGadget(SNAPHOST, x, 80, 'CW'i, cwkey.i, 'CWKEY 'i); x = x+20 end x = 300 do i=0 for 3 call AddGadget(SNAPHOST, x, 100, 'CDL'i, i, 'CDELAY 'i); x = x+20 end x = 300 do i=0 for 3 call AddGadget(SNAPHOST, x, 120, 'LDL'i, i, 'LDELAY 'i); x = x+20 end x = 300 do i=0 for 3 call AddGadget(SNAPHOST, x, 140, 'MSK'i, i, 'MASK 'i); x = x+20 end call AddGadget(SNAPHOST, 300, 160, 'UNT'0, "Frame", 'UNIT 0') call AddGadget(SNAPHOST, 350, 160, 'UNT'1, "Char ", 'UNIT 1') call AddGadget(SNAPHOST, 365, 60, 'XERX', 'Immediate insert', 'XEROX') call AddGadget(SNAPHOST, 365, 80, 'JOIN', 'Join long lines ', 'JOIN') call AddGadget(SNAPHOST, 365, 100, 'PTCH', 'Early patch ', 'PATCH') call AddGadget(SNAPHOST, 365, 120, 'USCR', 'True underscore ', 'UNDERSCORE') call AddGadget(SNAPHOST, 70, 180, 'PREP', "> ", 'PREP %g', 128) call AddGadget(SNAPHOST, 280, 180, 'APP', "", 'APP %g', 128) call SetReqColor(SNAPHOST, 'SHADOWPEN', 0L) y = 18 do i=0 for 16 call AddGadget(SNAPHOST, 510, y, 'PAT'i, ' ', 'PATTERN 'i); y = y+11 end call SetReqColor(SNAPHOST, 'SHADOWPEN', 3L) bit.1 = 0; desc.1 = 'Left Shift ' bit.2 = 1; desc.2 = 'Right Shift' bit.3 = 3; desc.3 = 'Control ' bit.4 = 4; desc.4 = 'Left Alt ' bit.5 = 5; desc.5 = 'Right Alt ' bit.6 = 6; desc.6 = 'Left Amiga ' bit.7 = 7; desc.7 = 'Right Amiga' y = 75 do i=1 for 7 call AddGadget(SNAPHOST, 5, y, 'TQ'i, desc.i, 'TEXTQUAL 'i) call AddGadget(SNAPHOST, 110, y, 'GQ'i, desc.i, 'GFXQUAL 'i) y = y+15 end call AddGadget(SNAPHOST, 430, 172, 'APPLY', ' Apply\settings', 'APPLY') /* Open our host port */ call openport(SNAPPORT) start: call ShowText(" Setting defaults...") pri = 51; call SetGadget(SNAPHOST, 'PR51', 'ON') textqual = '0040'x; call SetGadget(SNAPHOST, 'TQ6', 'ON') gfxqual = '0080'x; call SetGadget(SNAPHOST, 'GQ7', 'ON') inskey = 1; call SetGadget(SNAPHOST, 'INS1', 'ON') cwkey = 1; call SetGadget(SNAPHOST, 'CW1', 'ON') cdelay = 0; call SetGadget(SNAPHOST, 'CDL0', 'ON') ldelay = 0; call SetGadget(SNAPHOST, 'LDL0', 'ON') pattern = '7777'x; do i=0 for 16 if bittst(pattern,i) then call SetGadget(SNAPHOST, 'PAT'i, 'ON') end unit = 0; call SetGadget(SNAPHOST, 'UNT0', 'ON') xerox = 0 patch = 0 join = 0 underscore = 1; call SetGadget(SNAPHOST, 'USCR', 'ON') planes = '00'x call ShowText(" Select options. Click here for help.") help.1 = "Click text (eg 'Priority') for help. Click here for more help." help.2 = "Close window for correct command line. Click for more." help.3 = "Click 'Apply settings' to reconfigure Snap." maxhelp = 3 keycmd. = "" keycmd.95 = "HELP"; keycmd.25 = "PRIORITY"; keycmd.16 = "CLOSEWINDOW" keycmd.23 = "INSKEY"; keycmd.51 = "CDELAY"; keycmd.40 = "LDELAY" keycmd.33 = "UNIT"; keycmd.32 = "APPLY" main: quitflag = 0 helpnum = 1 loop: if quitflag~=0 then signal done call waitpkt(SNAPPORT) p = getpkt(SNAPPORT) if p == NULL() then signal loop cmd = getarg(p) call reply(p, 0) docmd: parse var cmd item val . signal value item closewindow: quitflag = 1 signal loop rawkey: cmd = keycmd.val if cmd ~= "" then do signal docmd end signal loop help: parse var cmd item help if help="" then do call showtext(help.helpnum) helpnum = helpnum+1 if helpnum>maxhelp then helpnum = 1 end else do call showtext(help) end signal loop priority: if val="" then do val = pri+1 if val>55 then val = 51 end pri = val do i=51 for 5 call setgadget(SNAPHOST, 'PR'i, 'OFF') end call setgadget(SNAPHOST, 'PR'pri, 'ON') signal loop inskey: if val="" then do val = inskey+1 if val>3 then val = 1 end inskey = val do i=1 for 3 call setgadget(SNAPHOST, 'INS'i, 'OFF') end call setgadget(SNAPHOST, 'INS'val, 'ON') signal loop cwkey: if val="" then do val = cwkey+1 if val>3 then val = 1 end cwkey = val do i=1 for 3 call setgadget(SNAPHOST, 'CW'i, 'OFF') end call setgadget(SNAPHOST, 'CW'val, 'ON') signal loop cdelay: if val="" then do val = cdelay+1 if val>2 then val = 0 end cdelay = val do i=0 for 3 call setgadget(SNAPHOST, 'CDL'i, 'OFF') end call setgadget(SNAPHOST, 'CDL'val, 'ON') signal loop ldelay: if val="" then do val = ldelay+1 if val>2 then val = 0 end ldelay = val do i=0 for 3 call setgadget(SNAPHOST, 'LDL'i, 'OFF') end call setgadget(SNAPHOST, 'LDL'val, 'ON') signal loop unit: if val="" then do val = 1-unit end unit = val call setgadget(SNAPHOST, 'UNT0', 'OFF') call setgadget(SNAPHOST, 'UNT1', 'OFF') call setgadget(SNAPHOST, 'UNT'unit, 'ON') signal loop pattern: pattern = bitchg(pattern,val) temp = bittst(pattern,val) call setgadget(SNAPHOST, 'PAT'val, bool.temp) signal loop mask: planes = bitchg(planes,val) temp = bittst(planes,val) call setgadget(SNAPHOST, 'MSK'val, bool.temp) signal loop prep: parse var cmd . ' ' prepend signal loop app: parse var cmd . ' ' append signal loop textqual: if bittst(textqual,bit.val) then do textqual = bitclr(textqual,bit.val) call setgadget(SNAPHOST, 'TQ'val, 'OFF') end else do call setgadget(SNAPHOST, 'GQ'val, 'OFF') gfxqual = bitclr(gfxqual,bit.val) textqual = bitset(textqual,bit.val) call setgadget(SNAPHOST, 'TQ'val, 'ON') end signal loop gfxqual: if bittst(gfxqual,bit.val) then do gfxqual = bitclr(gfxqual,bit.val) call setgadget(SNAPHOST, 'GQ'val, 'OFF') end else do call setgadget(SNAPHOST, 'TQ'val, 'OFF') textqual = bitclr(textqual,bit.val) gfxqual = bitset(gfxqual,bit.val) call setgadget(SNAPHOST, 'GQ'val, 'ON') end signal loop xerox: xerox = 1-xerox call setgadget(SNAPHOST, 'XERX', bool.xerox) signal loop join: join = 1-join call setgadget(SNAPHOST, 'JOIN', bool.join) signal loop patch: patch = 1-patch call setgadget(SNAPHOST, 'PTCH', bool.patch) signal loop underscore: underscore = 1-underscore call setgadget(SNAPHOST, 'USCR', bool.underscore) signal loop apply: quitflag = 2 signal loop done: call ReadGadget(SNAPHOST, 'PREP') call waitpkt(SNAPPORT) getprep: p = getpkt(SNAPPORT) if p == NULL() then signal getprep cmd = getarg(p) call reply(p, 0) parse var cmd . ' ' prepend call ReadGadget(SNAPHOST, 'APP') call waitpkt(SNAPPORT) getapp: p = getpkt(SNAPPORT) if p == NULL() then signal getapp cmd = getarg(p) call reply(p, 0) parse var cmd . ' ' append if c2d(textqual)=0 then do call ShowText("No text qualifier specified!") signal main end else if c2d(gfxqual)=0 then do call ShowText("No graphics qualifier specified!") signal main end unixargs = "" amigaargs = "" if pri~=51 then do unixargs = unixargs "-p"pri amigaargs = amigaargs "priority" pri end if textqual~='0040'x then do unixargs = unixargs "-t"c2x(textqual) amigaargs = amigaargs "textqual" c2x(textqual) end if gfxqual~='0080'x then do unixargs = unixargs "-g"c2x(gfxqual) amigaargs = amigaargs "gfxqual" c2x(gfxqual) end if inskey.inskey~='I' then do unixargs = unixargs "-i"inscode.inskey amigaargs = amigaargs "insertkey" inscode.inskey end if cwkey.cwkey~='W' then do unixargs = unixargs "-w"cwcode.cwkey amigaargs = amigaargs "cwkey" cwcode.cwkey end if prepend~="> " then do unixargs = unixargs "-P" '"'||prepend||'"' amigaargs = amigaargs "prepend" '"'||prepend||'"' end if append~="" then do unixargs = unixargs "-A" '"'append'"' amigaargs = amigaargs "append" '"'append'"' end if cdelay~=0 then do unixargs = unixargs "-c"cdelay amigaargs = amigaargs "chardelay" cdelay end if ldelay~=0 then do unixargs = unixargs "-l"ldelay amigaargs = amigaargs "linedelay" ldelay end if pattern~='7777'x then do unixargs = unixargs "-a"c2x(pattern) amigaargs = amigaargs "crawlptrn" c2x(pattern) end if xerox then do unixargs = unixargs "-x" amigaargs = amigaargs "XEROX" end if patch then do unixargs = unixargs "-e" amigaargs = amigaargs "EARLYPATCH" end if underscore then do unixargs = unixargs "-r" amigaargs = amigaargs "TRUEUNDERSCORE" end if join then do unixargs = unixargs "-j" amigaargs = amigaargs "JOINLONG" end if unit~=0 then do unixargs = unixargs "-u"unit amigaargs = amigaargs "startunit" unit end if planes~='00'x then do unixargs = unixargs "-b"c2x(planes) amigaargs = amigaargs "planemask" c2x(planes) end snapcmd = "snap" if quitflag=1 then do say snapcmd || unixargs if amigaargs ~= unixargs then do say "or" say snapcmd || amigaargs end end else do if ~exists("snap") & ~exists("c:snap") then do snapcmd = GetFile(50, 50, "sys:", "", "Find Snap for me") if word(statef(snapcmd),1) ~= 'FILE' then do snapcmd = snapcmd'snap' end end if exists(snapcmd) then do address command snapcmd unixargs end else do call ShowText("Snap not found.") signal main end end error: call Stop(SNAPHOST) exit showtext: procedure expose SNAPHOST parse arg text call SetAPen(SNAPHOST, 0) call RectFill(SNAPHOST, 5, 15, 490, 35) call SetAPen(SNAPHOST, 1) call Move(SNAPHOST, 5, 30) call Text(SNAPHOST, text) return ****************** cut here ************************************************** Maybe posting this wasn't such a good idea? :-/ Dac David Andrew Clayton. // _l _ _ dac@prolix.pub.uu.oz.au *or*|I post.I am. Canberra, Australia.\X/ (_](_l(_ ccadfa.cc.adfa.oz.au!prolix!dac@munnari.oz