summaryrefslogtreecommitdiff
path: root/tests/examplefiles/pacman.ijs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/examplefiles/pacman.ijs')
-rw-r--r--tests/examplefiles/pacman.ijs1107
1 files changed, 1107 insertions, 0 deletions
diff --git a/tests/examplefiles/pacman.ijs b/tests/examplefiles/pacman.ijs
new file mode 100644
index 00000000..f067b6e2
--- /dev/null
+++ b/tests/examplefiles/pacman.ijs
@@ -0,0 +1,1107 @@
+cocurrent 'jpacman'
+coinsert 'j'
+
+BASELIB=: 'base library'
+DATAMASK=: 0
+HWNDP=: ''
+ISGUI=: 0
+ONLINE=: 0
+PKGDATA=: 0 7$a:
+SECTION=: ,<'All'
+SYSNAME=: 'Package Manager'
+TIMEOUT=: 60
+WWWREV=: REV=: _1
+
+IgnoreIOS=: 0 : 0
+api/jni
+data/dbman
+data/ddmysql
+data/odbc
+demos/isigraph
+demos/wd
+demos/wdplot
+games/minesweeper
+games/nurikabe
+games/pousse
+games/solitaire
+general/pcall
+general/sfl
+graphics/d3
+graphics/fvj3
+graphics/gl2
+graphics/gnuplot
+graphics/graph
+graphics/graphviz
+graphics/jturtle
+graphics/print
+graphics/tgsj
+graphics/treemap
+graphics/viewmat
+gui/monthview
+gui/util
+ide/qt
+math/tabula
+media/animate
+media/gdiplus
+media/image3
+media/ming
+media/paint
+media/wav
+)
+
+Ignore=: 3 : 0''
+if. IFIOS do.
+ <;._2 IgnoreIOS
+else.
+ <'ide/ios'
+end.
+)
+3 : 0''
+nc=. '--no-cache'
+if. IFUNIX do.
+ if. UNAME-:'Darwin' do.
+ HTTPCMD=: 'curl -o %O --stderr %L -f -s -S %U'
+ elseif. do.
+ if. 'Android'-:UNAME do. nc=. ''
+ else. try. nc=. nc #~ 1 e. nc E. shell 'wget --help' catch. nc=. '' end. end.
+ HTTPCMD=: 'wget ',nc,' -O %O -o %L -t %t %U'
+ end.
+else.
+ if. fexist exe=. jpath '~tools/ftp/wget.exe' do. exe=. '"',exe,'"' else. exe=. 'wget.exe' end.
+ try. nc=. nc #~ 1 e. nc E. shell exe,' --help' catch. nc=. '' end.
+ HTTPCMD=: exe,' ',nc,' -O %O -o %L -t %t -T %T %U'
+ if. fexist UNZIP=: jpath '~tools/zip/unzip.exe' do. UNZIP=: '"',UNZIP,'" -o -C ' else. UNZIP=: 'unzip.exe -o -C ' end.
+end.
+)
+setfiles=: 3 : 0
+ADDCFG=: jpath '~addons/config/'
+makedir ADDCFG
+ADDCFGIJS=: ADDCFG,'config.ijs'
+JRELEASE=: ({.~i.&'/') 9!:14''
+JRELEASE=: 'j802'
+LIBTREE=: readtree''
+if. IFIOS do.
+ WWW=: '/jal/',JRELEASE,'/'
+else.
+ WWW=: 'http://www.jsoftware.com/jal/',JRELEASE,'/'
+end.
+LIBVER=: jpath '~system/config/version.txt'
+)
+destroy=: codestroy
+CFGFILES=: <;._2 (0 : 0)
+addons.txt
+library.txt
+release.txt
+revision.txt
+zips.txt
+)
+LIBDESC=: 0 : 0
+This is the base library of scripts and labs included in the J system.
+
+Reinstalling or upgrading this library will overwrite files in the system subdirectory. Restart J afterwards.
+
+Files outside the system subdirectory, such as profile.ijs, are not changed.
+)
+cutjal=: ([: (* 4 > +/\) ' ' = ]) <;._1 ]
+cutjsp=: ([: (* 5 > +/\) ' ' = ]) <;._1 ]
+dquote=: '"'&, @ (,&'"')
+fname=: #~ ([: *./\. ~:&'/')
+hostcmd=: [: 2!:0 '(' , ] , ' || true)'"_
+ischar=: 2 = 3!:0
+rnd=: [ * [: <. 0.5 + %~
+sep2under=: '/' & (I.@('_' = ])})
+termLF=: , (0 < #) # LF -. {:
+todel=: ; @: (DEL&, @ (,&(DEL,' ')) each)
+tolist=: }. @ ; @: (LF&,@,@":each)
+isjpkgout=: ((4 = {:) *. 2 = #)@$ *. 1 = L.
+getintro=: ('...' ,~ -&3@[ {. ])^:(<#)
+info=: smoutput
+getnames=: 3 : 0
+select. L.y
+case. 0 do.
+ if. +/ BASELIB E. y do.
+ y=. (<BASELIB), cutnames y rplc BASELIB;''
+ else.
+ y=. cutnames y
+ end.
+case. 1 do.
+ if. 2 = #$y do.
+ y=. {."1 y
+ else.
+ y=. ,y
+ end.
+case. do.
+ '' return.
+end.
+y
+)
+curtailcaption=: 3 : 0
+idx=. <_1;~I. 45<#&>{:"1 y
+y=. (45&getintro &.> idx{y) idx}y
+)
+deltree=: 3 : 0
+try.
+ res=. 0< ferase {."1 dirtree y
+ *./ res,0<ferase |.dirpath y
+catch. 0 end.
+)
+fixjal=: 3 : 0
+if. 2 > #y do. i.0 5 return. end.
+m=. _2 |. (LF,')',LF) E. y
+r=. _2 }. each m <;._2 y
+x=. r i.&> LF
+d=. (x+1) }.each r
+r=. x {.each r
+r=. 3 {."1 cutjal &> ' ' ,each r
+x=. d i.&> LF
+c=. x {.each d
+d=. (x+1) }.each d
+r,.c,.d
+)
+fixjal2=: 3 : 0
+if. 2 > #y do. i.0 2 return. end.
+cutjal &> ' ' ,each <;._2 y
+)
+fixjsp=: 3 : 0
+if. 2 > #y do. i.0 5 return. end.
+m=. _2 |. (LF,')',LF) E. y
+r=. _2 }. each m <;._2 y
+x=. r i.&> LF
+d=. (x+1) }.each r
+r=. x {.each r
+r=. ' ' ,each r
+(cutjsp &> r),.d
+)
+fixlib=: 3 : 0
+msk=. (<LIBTREE) = 1 {"1 y
+if. -. 1 e. msk do. ($0);'';0 return. end.
+'ver fln siz'=. 2 4 5 { (msk i.1) { y
+ver=. fixver ver
+ver;fln;siz
+)
+fixlibs=: 3 : 0
+if. 2 > #y do.
+ i.0 6 return.
+end.
+fls=. <;._2 y
+ndx=. fls i.&> ' '
+siz=. <&> 0 ". (ndx+1) }.&> fls
+fls=. ndx {.each fls
+zps=. <;._2 &> fls ,each '_'
+pfm=. 3 {"1 zps
+uname=. tolower UNAME
+msk=. (uname -: ({.~ i.&'.')) &> pfm
+if. 1 ~: +/msk do. msk=. 1,~ }:0*.msk end.
+msk # zps,.fls,.siz
+)
+fixrev=: 3 : 0
+{. _1 ". :: _1: y -. CRLF
+)
+fixupd=: 3 : 0
+_1 ". :: _1: y -. CRLF
+)
+fixver=: 3 : 0
+if. ischar y do.
+ y=. y -. CRLF
+ y=. 0 ". ' ' (I. y='.') } y
+end.
+3 {. y
+)
+fixvers=: 3 : 0
+s=. $y
+y=. ,y
+3 {."1 [ 0 ". s $ ' ' (I. y e. './') } y
+)
+fmtjal=: 3 : 0
+if. 0 = #y do. '' return. end.
+r=. (4 {."1 y) ,each "1 ' ',LF2
+r=. <@; "1 r
+; r ,each ({:"1 y) ,each <')',LF
+)
+fmtjal2=: 3 : 0
+if. 0 = #y do. '' return. end.
+; (2 {."1 y) ,each "1 ' ',LF
+)
+fmtdep=: 3 : 0
+}. ; ',' ,each a: -.~ <;._2 y
+)
+fmtjsp=: 3 : 0
+if. 0 = #y do. '' return. end.
+r=. (4 {."1 y) ,each "1 ' ',LF
+r=. <@; "1 r
+; r ,each ({:"1 y) ,each <')',LF
+)
+fmtlib=: 3 : 0
+, 'q<.>,q<.>r<0>3.0,r<0>3.0' 8!:2 y
+)
+fmtver=: 3 : 0
+if. 0=#y do. '' return. end.
+if. ischar y do. y return. end.
+}. ; '.' ,each ": each y
+)
+fmtverlib=: 3 : 0
+fmtver y
+)
+fixzips=: 3 : 0
+if. 2 > #y do. i.0 5 return. end.
+fls=. <;._2 y
+ndx=. fls i.&> ' '
+siz=. 0 ". (ndx+1) }.&> fls
+fls=. ndx {.each fls
+zps=. <;._2 &> fls ,each '_'
+zps=. zps,.fls,.<&>siz
+pfm=. 3 {"1 zps
+and=. (1 e. 'android'&E.) &> pfm
+lnx=. (1 e. 'linux'&E.) &> pfm
+mac=. (1 e. 'darwin'&E.) &> pfm
+win=. mac < (1 e. 'win'&E.) &> pfm
+
+select. UNAME
+case. 'Win' do.
+ zps=. win # zps
+case. 'Linux' do.
+ zps=. lnx # zps
+case. 'Android' do.
+ zps=. and # zps
+case. 'Darwin' do.
+ zps=. mac # zps
+ zps=. zps /: 3 {"1 zps
+ zps=. (~: 3 {."1 zps) # zps
+end.
+
+bit=. IF64 pick '64';'32'
+pfm=. 3 {"1 zps
+exc=. (1 e. bit&E.) &> pfm
+zps=. zps \: exc
+zps=. (~: 3 {."1 zps) # zps
+fnm=. 0 {"1 zps
+lnm=. 1 {"1 zps
+ver=. 2 {"1 zps
+pfm=. 3 {"1 zps
+fls=. 4 {"1 zps
+siz=. 5 {"1 zps
+nms=. fnm ,each '/' ,each lnm
+pfm=. (pfm i.&> '.') {.each pfm
+ndx=. \: # &> pfm
+sort ndx { nms,.pfm,.ver,.fls,.siz
+)
+fwritenew=: 4 : 0
+if. x -: fread y do.
+ 0
+else.
+ x fwrite y
+end.
+)
+platformparent=: 3 : 0
+((< _2 {. y) e. '32';'64') # _2 }. y
+)
+makedir=: 1!:5 :: 0: @ <
+plural=: 4 : 0
+y,(1=x)#'s'
+)
+sizefmt=: 3 : 0
+select. +/ y >: 1e3 1e4 1e6 1e7 1e9
+case. 0 do.
+ (": y), ' byte',(y~:1)#'s'
+case. 1 do.
+ (": 0.1 rnd y%1e3),' KB'
+case. 2 do.
+ (": 1 rnd y%1e3),' KB'
+case. 3 do.
+ (": 0.1 rnd y%1e6),' MB'
+case. 4 do.
+ (": 1 rnd y%1e6),' MB'
+case. do.
+ (": 0.1 rnd y%1e9),' GB'
+end.
+)
+shellcmd=: 3 : 0
+if. IFUNIX do.
+ hostcmd y
+else.
+ spawn_jtask_ y
+end.
+)
+subdir=: 3 : 0
+if. 0=#y do. '' return. end.
+a=. 1!:0 y,'*'
+if. 0=#a do. '' return. end.
+a=. a #~ '-d' -:"1 [ 1 4 {"1 > 4 {"1 a
+(<y) ,each ({."1 a) ,each '/'
+)
+testaccess=: 3 : 0
+f=. <jpath'~install/testaccess.txt'
+try.
+ '' 1!:2 f
+ 1!:55 f
+ 1
+catch.
+ 0
+end.
+)
+toupper1=: 3 : 0
+if. 0=#y do. '' return. end.
+(toupper {. y),tolower }. y
+)
+unzip=: 3 : 0
+'file dir'=. dquote each y
+e=. 'Unexpected unzip error'
+if. IFUNIX do.
+ notarcmd=. 0
+ if. IFIOS +. UNAME-:'Android' do.
+ notarcmd=. _1-: 2!:0 ::_1: 'which tar'
+ if. (UNAME-:'Android') > '/mnt/sdcard'-:2!:5'EXTERNAL_STORAGE' do. notarcmd=. 1 end.
+ end.
+ if. notarcmd do.
+ require 'tar'
+ 'file dir'=. y
+ if. (i.0 0) -: tar 'x';file;dir do. e=. '' end.
+ else.
+ e=. shellcmd 'tar ',((IFIOS+:UNAME-:'Android')#(('Darwin'-:UNAME){::'--no-same-owner --no-same-permissions';'-o -p')),' -xzf ',file,' -C ',dir
+ end.
+ if. (0~:FHS) *. ('root'-:2!:5'USER') +. (<2!:5'HOME') e. 0;'/var/root';'/root';'';,'/' do.
+ shellcmd ::0: 'find ',dir,' -type d -exec chmod a+rx {} \+'
+ shellcmd ::0: 'find ',dir,' -type f -exec chmod a+r {} \+'
+ end.
+else.
+ dir=. (_2&}. , '/' -.~ _2&{.) dir
+ e=. shellcmd UNZIP,' ',file,' -d ',dir
+end.
+e
+)
+zipext=: 3 : 0
+y, IFUNIX pick '.zip';'.tar.gz'
+)
+CHECKADDONSDIR=: 0 : 0
+The addons directory does not exist and cannot be created.
+
+It is set to: XX.
+
+You can either create the directory manually, or set a new addons directory in your profile script.
+)
+CHECKASK=: 0 : 0
+Read catalog from the server using Internet connection now?
+
+Otherwise the local catalog is used offline.
+)
+CHECKONLINE=: 0 : 0
+An active Internet connection is needed to install packages.
+
+Continue only if you have an active Internet connection.
+
+OK to continue?
+)
+CHECKREADSVR=: 0 : 0
+An active Internet connection is needed to read the server repository catalog.
+
+Continue only if you have an active Internet connection.
+
+OK to continue?
+)
+CHECKSTARTUP=: 0 : 0
+Setup repository using Internet connection now?
+
+Select No if not connected, to complete setup later. After Setup is done, repository can be used offline with more options in Tools menu and Preferences dialog.
+)
+checkaccess=: 3 : 0
+if. testaccess'' do. 1 return. end.
+msg=. 'Unable to run Package Manager, as you do not have access to the installation folder.'
+if. IFWIN do.
+ msg=. msg,LF2,'To run as Administrator, right-click the J icon, select Run as... and '
+ msg=. msg,'then select Adminstrator.'
+end.
+info msg
+0
+)
+checkaddonsdir=: 3 : 0
+d=. jpath '~addons'
+if. # 1!:0 d do. 1 return. end.
+if. 1!:5 :: 0: <d do.
+ log 'Created addons directory: ',d
+ 1 return.
+end.
+info CHECKADDONSDIR rplc 'XX';d
+0
+)
+getonline=: 3 : 0
+ONLINE=: 2=3 2 wdquery y
+)
+getserver=: 3 : 0
+'rc p'=. httpgetr (WWW,'revision.txt');2
+if. rc do. 0 return. end.
+write_lastupdate''
+WWWREV=: fixrev p
+if. WWWREV = REV do. 1 return. end.
+refreshweb''
+)
+checkonline=: 3 : 0
+select. ReadCatalog_j_
+case. 0 do.
+ if. REV >: 0 do.
+ ONLINE=: 0
+ log 'Using local copy of catalog. See Preferences to change the setting.'
+ 1 return.
+ end.
+ if. 0 = getonline 'Read Catalog from Server';CHECKREADSVR do. 0 return. end.
+case. 1 do.
+ ONLINE=: 1
+case. 2 do.
+ if. REV >: 0 do.
+ if. 0 = getonline 'Read Catalog from Server';CHECKASK do.
+ log 'Using local copy of catalog. See Preferences to change the setting.'
+ 1 return.
+ end.
+ else.
+ if. 0 = getonline 'Setup Repository';CHECKSTARTUP do. 0 return. end.
+ end.
+end.
+log 'Updating server catalog...'
+if. 0 = getserver'' do.
+ ONLINE=: 0
+ log 'Working offline using local copy of catalog.'
+else.
+ log 'Done.'
+end.
+1
+)
+checkstatus=: 3 : 0
+if. 0 e. #LIBS do. '' return. end.
+msk=. masklib PKGDATA
+ups=. pkgups''
+libupm=. 1 e. msk *. ups
+msk=. -. msk
+addnim=. +/msk *. pkgnew''
+addupm=. +/msk *. pkgups''
+tot=. +/addnim,addupm,libupm
+if. 0 = tot do.
+ 'All available packages are installed and up to date.' return.
+end.
+select. 0 < addnim,addupm
+case. 0 0 do.
+ msg=. 'Addons are up to date.'
+case. 0 1 do.
+ msg=. 'All addons are installed, ',(":addupm), ' can be upgraded.'
+case. 1 0 do.
+ if. addnim = <:#PKGDATA do.
+ msg=. 'No addons are installed.'
+ else.
+ j=. ' addon',('s'#~1<addnim),' are not yet installed.'
+ msg=. 'Installed addons are up to date, ',(":addnim),j
+ end.
+case. 1 1 do.
+ j=. (":addupm),' addon',('s'#~1<addupm),' can be upgraded, '
+ msg=. j,(":addnim), ' addon',('s'#~1<addnim),' are not yet installed.'
+end.
+if. 0 = libupm do.
+ msg,LF,'The base library is up to date.'
+else.
+ msg,LF,'There is a newer version of the base library.'
+end.
+)
+write_lastupdate=: 3 : 0
+txt=. ": 6!:0 ''
+txt fwrites ADDCFG,'lastupdate.txt'
+)
+checklastupdate=: 3 : 0
+if. _1 -: LASTUPD do.
+ res=. 'has never been updated.'
+else.
+ res=. 'was last updated: ',timestamp LASTUPD
+end.
+'Local JAL information ',res
+)
+getdepend=: 3 : 0
+if. 0 = #y do. y return. end.
+dep=. getdepend_console 1{"1 y
+PKGDATA #~ (1{"1 PKGDATA) e. dep
+)
+getdepend_console=: 3 : 0
+if. 0 = #y do. y return. end.
+old=. ''
+ids=. 1{"1 PKGDATA
+dep=. 6{"1 PKGDATA
+res=. ~. <;._1 ; ',' ,each (ids e. y) # dep
+whilst. -. res-:old do.
+ old=. res
+ res=. ~. res, <;._1 ; ',' ,each (ids e. res) # dep
+end.
+~. y, res -. a:, {."1 ADDINS
+)
+httpget=: 3 : 0
+'f t'=. 2 {. (boxxopen y),a:
+n=. f #~ -. +./\. f e. '=/'
+p=. jpath '~temp/',n
+q=. jpath '~temp/httpget.log'
+t=. ":{.t,3
+ferase p;q
+fail=. 0
+cmd=. HTTPCMD rplc '%O';(dquote p);'%L';(dquote q);'%t';t;'%T';(":TIMEOUT);'%U';f
+if. IFIOS +. UNAME-:'Android' do.
+ require 'socket'
+ 1!:55 ::0: <p
+ rc=. 0 [ e=. pp=. ''
+ whilst. 0 do.
+ 'rc sk'=. sdsocket_jsocket_''
+ if. 0~:rc do. break. end.
+ rc=. sdconnect_jsocket_ sk;PF_INET_jsocket_;'23.21.67.48';80
+ if. 0~:rc do. break. end.
+ 'rc sent'=. ('GET ',f,' HTTP/1.0',LF2) sdsend_jsocket_ sk;0
+ if. 0~:rc do. break. end.
+ while. ((0=rc)*.(*#m)) [[ 'rc m'=. sdrecv_jsocket_ sk,4096 do.
+ pp=. pp,m
+ end.
+ end.
+ sdclose_jsocket_ sk
+ if. 0~:rc do. fail=. 1
+ elseif. 1 -.@e. '200 OK' E. (20{.pp) do. fail=. 1 [ e=. ({.~ i.&LF) pp
+ elseif. #p1=. I. (CRLF,CRLF) E. 500{.pp do. p2=. 4
+ elseif. #p1=. I. LF2 E. 500{.pp do. p2=. 2
+ elseif. do. fail=. 1
+ end.
+ if. 0=fail do.
+ ((p2+{.p1)}.pp) 1!:2 <p
+ else.
+ if. 0~:rc do. e=. sderror_jsocket_ rc end.
+ end.
+elseif. do.
+ try.
+ e=. shellcmd cmd
+ catch. fail=. 1 end.
+end.
+if. fail +. 0 >: fsize p do.
+ if. _1-:msg=. freads q do.
+ if. 0=#msg=. e do. msg=. 'Unexpected error' end. end.
+ log 'Connection failed: ',msg
+ info 'Connection failed:',LF2,msg
+ r=. 1;msg
+ ferase p;q
+else.
+ r=. 0;p
+ ferase q
+end.
+r
+)
+httpgetr=: 3 : 0
+res=. httpget y
+if. 0 = 0 pick res do.
+ f=. 1 pick res
+ txt=. freads f
+ ferase f
+ 0;txt
+end.
+)
+install=: 3 : 0
+dat=. getdepend y
+'num siz'=. pmview_applycounts dat
+many=. 1 < num
+msg=. 'Installing ',(":num),' package',many#'s'
+msg=. msg,' of ',(many#'total '),'size ',sizefmt siz
+log msg
+installdo 1 {"1 dat
+log 'Done.'
+readlocal''
+pacman_init 0
+)
+install_console=: 3 : 0
+ if. -. init_console 'server' do. '' return. end.
+ pkgs=. getnames y
+ if. pkgs -: ,<'all' do. pkgs=. 1 {"1 PKGDATA end.
+ pkgs=. pkgs (e. # [) ~. (<'base library'), ((pkgnew +. pkgups) # 1&{"1@]) PKGDATA
+ pkgs=. pkgs -. Ignore
+ pkgs=. getdepend_console pkgs
+ if. 0 = num=. #pkgs do. '' return. end.
+ many=. 1 < num
+ msg=. 'Installing ',(":num),' package',many#'s'
+ log msg
+ installdo pkgs
+ log 'Done.'
+ readlocal''
+ pacman_init ''
+ checkstatus''
+)
+upgrade_console=: 3 : 0
+ if. -. init_console 'read' do. '' return. end.
+ pkgs=. getnames y
+ if. (0=#pkgs) +. pkgs -: ,<'all' do. pkgs=. 1{"1 PKGDATA end.
+ pkgs=. pkgs (e. # [) (pkgups # 1&{"1@])PKGDATA
+ install_console pkgs
+)
+installdo=: 3 : 0
+msk=. -. y e. <BASELIB
+if. 0 e. msk do.
+ install_library''
+end.
+install_addon each msk # y
+)
+install_addon=: 3 : 0
+ndx=. ({."1 ZIPS) i. <y
+if. ndx = #ZIPS do. EMPTY return. end.
+log 'Downloading ',y,'...'
+f=. 3 pick ndx { ZIPS
+'rc p'=. httpget WWW,'addons/',f
+if. rc do. return. end.
+log 'Installing ',y,'...'
+msg=. unzip p;jpath'~addons'
+ferase p
+if. 0>:fsize jpath'~addons/',y,'/manifest.ijs' do.
+ log 'Extraction failed: ',msg
+ info 'Extraction failed:',LF2,msg
+ return.
+end.
+install_addins y
+install_config y
+)
+install_addins=: 3 :0
+fl=. ADDCFG,'addins.txt'
+ins=. fixjal2 freads fl
+ins=. ins #~ (<y) ~: {."1 ins
+ndx=. ({."1 ADDONS) i. <y
+ins=. sort ins, 2 {. ndx { ADDONS
+(fmtjal2 ins) fwrites fl
+)
+install_config=: 3 : 0
+ADDLABS=: ''
+0!:0 :: ] < ADDCFGIJS
+install_labs y
+write_config''
+)
+install_labs=: 3 : 0
+labs=. dirtree jpath '~addons/',y,'/*.ijt'
+if. 0=#labs do. return. end.
+pfx=. jpath '~addons/'
+labs=. (#pfx) }.each {."1 labs
+LABCATEGORY=: ''
+0!:0 ::] <jpath '~addons/',y,'/manifest.ijs'
+cat=. LABCATEGORY
+if. 0 = #cat do.
+ cat=. toupper1 (y i. '/') {. y
+end.
+new=. labs ,each <' ',cat
+txt=. sort ~. new,<;._2 ADDLABS
+ndx=. 4 + (1 i.~ '.ijt'&E.) &> txt
+msk=. fexist &> (<pfx) ,each ndx {.each txt
+txt=. msk # txt
+ADDLABS=: ; txt ,each LF
+)
+install_library=: 3 : 0
+log 'Downloading base library...'
+f=. 1 pick LIB
+'rc p'=. httpget WWW,'library/',f
+if. rc do. return. end.
+log 'Installing base library...'
+unzip p;jpath'~system'
+ferase p
+readlin''
+)
+write_config=: 3 : 0
+txt=. 'NB. Addon configuration',LF2
+txt=. txt,'ADDLABS=: 0 : 0',LF,ADDLABS,')',LF
+txt fwrites ADDCFGIJS
+)
+show_console=: 4 : 0
+ if. -. init_console 'read' do. '' return. end.
+ select. x
+ case. 'search' do.
+ pkgs=. getnames y
+ res=. (pkgsearch pkgs) # 1 2 3 4 {"1 PKGDATA
+ res=. curtailcaption res
+ case. 'show' do.
+ pkgs=. getnames y
+ if. pkgs -: ,<'all' do. pkgs=. 1 {"1 PKGDATA end.
+ res=. (msk=. pkgshow pkgs) # 5 {"1 PKGDATA
+ if. #res do.
+ res=. ,((<'== '), &.> msk # 1 {"1 PKGDATA) ,. res
+ res=. (2#LF) joinstring (70&foldtext)&.> res
+ end.
+ case. 'showinstalled' do.
+ dat=. (isjpkgout y) {:: (1 2 3 4 {"1 PKGDATA);<y
+ res=. (-.@pkgnew # ])dat
+ res=. curtailcaption res
+ case. 'shownotinstalled' do.
+ dat=. (isjpkgout y) {:: (1 2 3 4 {"1 PKGDATA);<y
+ res=. (pkgnew # 0 2 3&{"1@])dat
+ res=. curtailcaption res
+ case. 'showupgrade' do.
+ dat=. (isjpkgout y) {:: (1 2 3 4 {"1 PKGDATA);<y
+ res=. (pkgups # ])dat
+ res=. curtailcaption res
+ case. 'status' do.
+ res=. checklastupdate''
+ res=. res,LF,checkstatus''
+ end.
+ res
+)
+showfiles_console=: 4 : 0
+ if. -. init_console 'read' do. '' return. end.
+ pkgs=. getnames y
+ pkgs=. pkgs (e. # [) (-.@pkgnew # 1&{"1@]) PKGDATA
+ pkgs=. pkgs -. <BASELIB
+ if. 0=#pkgs do. '' return. end.
+ fn=. (<'~addons/') ,&.> (pkgs) ,&.> <'/',x,(x-:'history'){::'.ijs';'.txt'
+ res=. res #~ msk=. (<_1) ~: res=. fread@jpath &.> fn
+ if. #res do.
+ res=. ,((<'== '), &.> msk#pkgs) ,. res
+ res=. (2#LF) joinstring res
+ end.
+)
+remove_console=: 3 : 0
+ if. -. init_console 'edit' do. '' return. end.
+ pkgs=. getnames y
+ if. pkgs -: ,<'all' do. pkgs=. 1 {"1 PKGDATA end.
+ pkgs=. pkgs (e. # [) (-.@pkgnew # 1&{"1@]) PKGDATA
+ pkgs=. pkgs -. <BASELIB
+ if. 0 = num=. #pkgs do. '' return. end.
+ many=. 1 < num
+ msg=. 'Removing ',(":num),' package',many#'s'
+ log msg
+ remove_addon each pkgs
+ log 'Done.'
+ readlocal''
+ pacman_init ''
+ checkstatus''
+)
+
+remove_addon=: 3 : 0
+ log 'Removing ',y,'...'
+ treepath=. jpath '~addons/',y
+ if. ((0 < #@dirtree) *. -.@deltree) treepath do.
+ nf=. #dirtree treepath
+ nd=. <: # dirpath treepath
+ nd=. nd + (tolower treepath) e. dirpath jpath '~addons/', '/' taketo y
+ msg=. (":nd),' directories and ',(":nf),' files not removed.'
+ log 'Remove failed: ',msg
+ info 'Remove failed:',LF2,msg
+ return.
+ end.
+ remove_addins y
+ remove_config y
+)
+remove_addins=: 3 :0
+ fl=. ADDCFG,'addins.txt'
+ ins=. fixjal2 freads fl
+ ins=. ins #~ (<y) ~: {."1 ins
+ (fmtjal2 ins) fwrites fl
+)
+remove_config=: 3 : 0
+ ADDLABS=: ''
+ 0!:0 :: ] < ADDCFGIJS
+ remove_labs y
+ write_config''
+)
+remove_labs=: 3 : 0
+ txt=. <;._2 ADDLABS
+ txt=. txt #~ (<jpathsep y) ~: (#y)&{. each txt
+ ADDLABS=: ; txt ,each LF
+)
+LOG=: 1
+log=: 3 : 0
+if. LOG do. smoutput y end.
+)
+logstatus=: 3 : 0
+if. ONLINE do.
+ log checkstatus''
+end.
+)
+readlin=: 3 : 0
+LIN=: 6 1 1 >. fixver freads LIBVER
+)
+readlocal=: 3 : 0
+readlin''
+ADDONS=: fixjal freads ADDCFG,'addons.txt'
+ADDINS=: fixjal2 freads ADDCFG,'addins.txt'
+REV=: fixrev freads ADDCFG,'revision.txt'
+LASTUPD=: fixupd freads ADDCFG,'lastupdate.txt'
+LIBS=: fixlibs freads ADDCFG,'library.txt'
+LIB=: fixlib LIBS
+ZIPS=: fixzips freads ADDCFG,'zips.txt'
+EMPTY
+)
+readtree=: 3 : 0
+f=. ADDCFG,'tree.txt'
+tree=. LF -.~ freads f
+if. -. (<tree) e. 'current';'stable' do.
+ tree=. 'current'
+ writetree tree
+end.
+tree
+)
+writetree=: 3 : 0
+y fwritenew ADDCFG,'tree.txt'
+)
+refreshweb=: 3 : 0
+if. 0 = refreshjal'' do. 0 return. end.
+readlocal''
+1
+)
+refreshaddins=: 3 : 0
+ADDLABS=: ''
+f=. ADDCFG,'addins.txt'
+p=. jpath '~addons/'
+sd=. ;subdir each subdir p
+if. 0=#sd do.
+ '' fwrite f
+ write_config'' return.
+end.
+r=. s=. ''
+for_d. sd do.
+ mft=. freads (>d),'manifest.ijs'
+ if. mft -: _1 do. continue. end.
+ VERSION=: ''
+ 0!:100 mft
+ ver=. fmtver fixver VERSION
+ n=. }: (#p) }. >d
+ n=. '/' (I.n='\') } n
+ r=. r,n,' ',ver,LF
+ s=. s,d
+end.
+r fwritenew f
+s=. (#p) }.each }: each s
+install_labs each s
+write_config''
+)
+refreshjal=: 3 : 0
+'rc p'=. httpget WWW,zipext 'jal'
+if. rc do. 0 return. end.
+unzip p;ADDCFG
+ferase p
+if. *./ CFGFILES e. {."1 [ 1!:0 ADDCFG,'*' do. 1 return. end.
+msg=. 'Could not install the local repository catalog.'
+log msg
+info msg
+0
+)
+updatejal=: 3 : 0
+ log 'Updating server catalog...'
+ if. -. init_console 'server' do. '' return. end.
+ refreshaddins''
+ readlocal''
+ pacman_init''
+ res=. checklastupdate''
+ res,LF,checkstatus''
+)
+RELIBMSG=: 0 : 0
+You are now using the XX base library, and can switch to the YY base library.
+
+This will download the YY version of the base library and overwrite existing files. Addons are not affected.
+
+OK to switch to the YY library?
+)
+prelib=: 3 : 0
+old=. LIBTREE
+new=. (('stable';'current') i. <old) pick 'current';'beta'
+msg=. RELIBMSG rplc ('XX';'YY'),.old;new
+if. 0 = query SYSNAME;msg do.
+ info 'Not done.' return.
+end.
+switchlibrary 1 pick new
+)
+switchlibrary=: 3 : 0
+'' fwrite LIBVER
+writetree LIBTREE=: y
+refreshjal''
+readlocal''
+pmview_setpn''
+)
+masklib=: 3 : 0
+(1 {"1 y) = <BASELIB
+)
+pkglater=: 3 : 0
+dat=. (s=.isjpkgout y){:: PKGDATA;<y
+if. 0=#dat do. $0 return. end.
+loc=. fixvers > (2-s) {"1 dat
+srv=. fixvers > (3-s) {"1 dat
+{."1 /:"2 srv ,:"1 loc
+)
+pkgnew=: 3 : 0
+dat=. (s=.isjpkgout y){:: PKGDATA;<y
+if. 0=#dat do. $0 return. end.
+0 = # &> (2-s) {"1 dat
+)
+pkgups=: pkgnew < pkglater
+pkgsearch=: 3 : 0
+ +./"1 +./ y E."1&>"(0 _) 1{"1 PKGDATA
+)
+pkgshow=: 3 : 0
+ y e.~ 1{"1 PKGDATA
+)
+setshowall=: 3 : 0
+PKGDATA=: (<y) (<(I.DATAMASK);0) } PKGDATA
+)
+setshownew=: 3 : 0
+ndx=. I. DATAMASK *. pkgnew''
+PKGDATA=: (<y) (<ndx;0) } PKGDATA
+)
+setshowups=: 3 : 0
+ndx=. I. DATAMASK *. pkgups''
+PKGDATA=: (<y) (<ndx;0) } PKGDATA
+)
+splitlib=: 3 : 0
+if. 0=#y do.
+ 2 $ <y return.
+end.
+msk=. masklib y
+(msk#y) ; <(-.msk)#y
+)
+pacman_init=: 3 : 0
+dat=. ADDONS #~ ({."1 ADDONS) e. {."1 ZIPS
+if. 0=#dat do.
+ dat=. i.0 6
+else.
+ ndx=. ({."1 ADDINS) i. {."1 dat
+ ins=. ndx { (1 {"1 ADDINS),<''
+ dat=. dat,.<''
+ dat=. 0 5 1 3 4 2 {"1 dat
+ dat=. ins 1 }"0 1 dat
+end.
+lib=. 'base library';(fmtver LIN);(fmtver 0 pick LIB);'base library scripts';LIBDESC;''
+dat=. dat,lib
+dat=. (<0),.dat
+PKGDATA=: sort dat
+nms=. 1 {"1 PKGDATA
+nms=. ~. (nms i.&> '/') {.each nms
+SECTION=: 'All';nms
+DATAMASK=: (#PKGDATA) $ 1
+EMPTY
+)
+init_console=: 3 : 0
+ if. 0=#y do. y=. 'read' end.
+ select. y
+ fcase. 'edit';'server' do.
+ if. -. checkaccess'' do. 0 return. end.
+ case. 'read' do.
+ if. -. checkaddonsdir'' do. 0 return. end.
+ setfiles''
+ readlocal''
+ pacman_init ''
+ res=. 1
+ case. do. res=. 0
+ end.
+ if. y -: 'server' do. res=. getserver'' end.
+ res
+)
+jpkg=: 4 : 0
+ select. x
+ case. 'history';'manifest' do.
+ x showfiles_console y
+ case. 'install' do.
+ install_console y
+ case. 'reinstall' do.
+ remove_console y
+ install_console y
+ case. 'remove' do.
+ remove_console y
+ case. ;:'show search showinstalled shownotinstalled showupgrade status' do.
+ x show_console y
+ case. 'update' do.
+ updatejal ''
+ case. 'upgrade' do.
+ upgrade_console y
+ case. do.
+ msg=. 'Valid options are:',LF
+ msg=. msg,' history, install, manifest, remove, reinstall, show, search,',LF
+ msg=. msg,' showinstalled, shownotinstalled, showupgrade, status,',LF
+ msg,' update, upgrade'
+ end.
+)
+do_install=: 3 : 0
+if. -. checkaccess_jpacman_ '' do. return. end.
+'update' jpkg ''
+select. y
+case. 'qtide';'angle' do.
+ 'install' jpkg 'base library ide/qt'
+ getqtbin (y-:'angle'){::0;'angle'
+ msg=. (+/ 2 1 * IFWIN,'Darwin'-:UNAME) pick 'jqt.sh';'the jqt icon';'jqt.cmd'
+ smoutput 'exit and restart J using ',msg
+case. 'all' do.
+ 'install' jpkg 'all'
+ getqtbin 0
+end.
+)
+do_getqtbin=: 3 : 0
+smoutput 'Installing JQt binaries...'
+if. 'Linux'-:UNAME do.
+ if. IFRASPI do.
+ z=. 'jqt-raspi-32.tar.gz'
+ else.
+ z=. 'jqt-',((y-:'slim') pick 'linux';'slim'),'-',(IF64 pick 'x86';'x64'),'.tar.gz'
+ end.
+ z1=. 'libjqt.so'
+elseif. IFWIN do.
+ z=. 'jqt-win',((y-:'slim')#'slim'),'-',(IF64 pick 'x86';'x64'),'.zip'
+ z1=. 'jqt.dll'
+elseif. do.
+ z=. 'jqt-mac',((y-:'slim')#'slim'),'-',(IF64 pick 'x86';'x64'),'.zip'
+ z1=. 'libjqt.dylib'
+end.
+'rc p'=. httpget_jpacman_ 'http://www.jsoftware.com/download/j802/qtide/',z
+if. rc do.
+ smoutput 'unable to download: ',z return.
+end.
+d=. jpath '~bin'
+if. IFWIN do.
+ unzip_jpacman_ p;d
+else.
+ if. 'Linux'-:UNAME do.
+ if. (0~:FHS) do.
+ if. IFRASPI do.
+ d1=. '/usr/lib/arm-linux-gnueabihf/.'
+ elseif. IF64 do.
+ d1=. '/usr/lib/x86_64-linux-gnu/.'
+ elseif. do.
+ d1=. '/usr/lib/i386-linux-gnu/.'
+ end.
+ hostcmd_jpacman_ 'cd /usr/bin && tar --no-same-owner --no-same-permissions -xzf ',(dquote p), ' && chmod 755 jqt && chmod 644 libjqt.so && mv libjqt.so ',d1
+ else.
+ hostcmd_jpacman_ 'cd ',(dquote d),' && tar xzf ',(dquote p)
+ end.
+ else.
+ hostcmd_jpacman_ 'unzip -o ',(dquote p),' -d ',dquote d
+ end.
+end.
+ferase p
+if. #1!:0 ((0~:FHS)*.'Linux'-:UNAME){::(jpath '~bin/',z1);'/usr/bin/jqt' do.
+ m=. 'Finished install of JQt binaries.'
+else.
+ m=. 'Unable to install JQt binaries.',LF
+ m=. m,'check that you have write permission for: ',LF,((0~:FHS)*.'Linux'-:UNAME){::(jpath '~bin');'/usr/bin'
+end.
+smoutput m
+if. 'Linux'-:UNAME do. return. end.
+
+tgt=. jpath IFWIN{::'~install/Qt';'~bin/Qt5Core.dll'
+y=. (*#y){::0;y
+smoutput 'Installing Qt library...'
+if. IFWIN do.
+ z=. 'qt53-',((y-:'angle') pick 'win';'angle'),'-',((y-:'slim')#'slim-'),(IF64 pick 'x86';'x64'),'.zip'
+else.
+ z=. 'qt53-mac-',((y-:'slim')#'slim-'),(IF64 pick 'x86';'x64'),'.zip'
+end.
+'rc p'=. httpget_jpacman_ 'http://www.jsoftware.com/download/j802/qtlib/',z
+if. rc do.
+ smoutput 'unable to download: ',z return.
+end.
+d=. jpath IFWIN{::'~install';'~bin'
+if. IFWIN do.
+ unzip_jpacman_ p;d
+else.
+ hostcmd_jpacman_ 'unzip -o ',(dquote p),' -d ',dquote d
+end.
+ferase p
+if. #1!:0 tgt do.
+ m=. 'Finished install of Qt binaries.'
+else.
+ m=. 'Unable to install Qt binaries.',LF
+ m=. m,'check that you have write permission for: ',LF,IFWIN{::tgt;jpath'~bin'
+end.
+smoutput m
+
+)
+jpkg_z_=: 3 : 0
+ 'help' jpkg y
+ :
+ a=. conew 'jpacman'
+ res=. x jpkg__a y
+ destroy__a''
+ res
+)
+jpkgv_z_=: (<@:>"1@|:^:(0 ~: #))@jpkg \ No newline at end of file