LVal filter_sbcl_uri(LVal v) { char* str=subseq(firsts(v),-3,0); if(strcmp(str,"bz2")==0 || strcmp(str,"msi")==0) { char* u=uname(); char* m=uname_m(); char *third,*fourth; char *m2; int i; char* tmp=file_namestring(q(firsts(v))); LVal ret= split_string(tmp,"-"); s(tmp); third=firsts(nthcdr(2,ret)); fourth=firsts(nthcdr(3,ret)); if(strcmp(third,"x86")==0 && strcmp(fourth,"64")==0) { m2=q("x86-64"); i=4; }else { m2=q(third); i=3; } i=(strcmp(m2,m)==0 && strcmp(firsts(nthcdr(i,ret)),u)==0); s(m2),s(str),s(m),s(u),sL(ret); return i?toNumber(1):0; } s(str); return 0; }
char* sbcl_bin(char* file) { char* str; LVal ret3,ret2,ret; cond_printf(1,"uname=%s uname-m=%s\n",uname(),uname_m()); ret=atag_list(file); ret2=remove_if_not1(filter_sbcl_uri,ret); if(ret2==(LVal)NULL) { fprintf(stderr,"this architecture is not supported.stop\n"); exit(1); } if(verbose&2) print_list(ret2); ret3= split_string(firsts(ret2),"-"); str=q(firsts(nthcdr(1,ret3))); sL(ret),sL(ret2),sL(ret3); return str; }
LVal remove_if_not1(Function1 f,LVal v) { LVal ret; for(ret=0;v;v=Next(v)) { LVal fret=f(v); if(fret) { if(NumberP(first(v))) { ret=consi(firsti(v),ret); }else if(StringP(first(v))) { ret=conss(q(firsts(v)),ret); } } sL(fret); } return nreverse(ret); }
void print_list(LVal v) { printf("("); for(;v;v=Next(v)) { switch(first(v)&3) { case 1: printf("%d",firsti(v)); break; case 2: printf("\"%s\"",firsts(v)); break; case 0: print_list(first(v)); break; } if(Next(v)) printf(" "); } printf(")\n"); }
int install_help(int argc,char **argv,struct sub_command* cmd) { if(argc==1) { cond_printf(0,"Usage: %s install impl [OPTIONS]\n\nFor more details on impl specific options, type:\n %s help install impl\n\n" "Candidates impls for installation are:\n",argv_orig[0],argv_orig[0]); char* install=lispdir(); LVal d=directory(install),v=d; for(;v;v=Next(v)) { char* str=firsts(v); if(str[strlen(str)-1]!='/') { int p=position_char(".",str); if(p!=-1) { char *sub=subseq(str,0,p); if(p>=8/*strlen("install-")*/ && strncmp(str,"install-",8)==0) printf("%s\n",sub+8); s(sub); } } } sL(d); }else if(argc==2) { int i,j,argc_; char** tmp; char* install_ros=s_cat2(lispdir(),q("install.ros")); tmp=(char**)alloc(sizeof(char*)*(argc+9)); i=0; tmp[i++]=q("--"); tmp[i++]=install_ros; tmp[i++]=q("help"); tmp[i++]=q(argv[1]); for(j=2;j<argc;tmp[i++]=q(argv[j++])); argc_=i; for(i=0;i<argc_;i+=proccmd(argc_-i,&tmp[i],top_options,top_commands)); for(j=0;j<argc_;s(tmp[j++])); dealloc(tmp); } return 0; }
//takes an argument a list whose elements are lists of atoms and returns a list which contains the first element from each of the lists list firsts(list p) { if(is_null(p)) return null(); return cons(car(car(p)), firsts(cdr(p))); }