diff options
Diffstat (limited to 'tests/examplefiles/pacman.ijs')
-rw-r--r-- | tests/examplefiles/pacman.ijs | 1107 |
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 |