CSLbool minusp(Lisp_Object a) { switch ((int)a & TAG_BITS) { case TAG_FIXNUM: return ((int32_t)a < 0); case TAG_SFLOAT: { Float_union aa; aa.i = a - TAG_SFLOAT; return (aa.f < 0.0); } case TAG_NUMBERS: { int32_t ha = type_of_header(numhdr(a)); switch (ha) { case TYPE_BIGNUM: { int32_t l = (bignum_length(a)-CELL-4)/4; return ((int32_t)bignum_digits(a)[l] < (int32_t)0); } case TYPE_RATNUM: return minusp(numerator(a)); default: aerror1("Bad arg for minusp", a); return 0; } } case TAG_BOXFLOAT: { double d = float_of_number(a); return (d < 0.0); } default: aerror1("Bad arg for minusp", a); return 0; } }
int main(int argc,char *argv[]) { int i; int p=0,v=0; int mode=0777-umask(0); mode_t and,or; if (argc<2) usage(); for (i=1; i<argc; i++) { if (!argv[i]) continue; if (argv[i][0]=='-') { int j,len=strlen(argv[i]); for (j=1; j<len; j++) { switch (argv[i][j]) { case '-': if (!strcmp(argv[i],"--parent")) p=1; else if (!strcmp(argv[i],"--verbose")) v=1; else if (argv[i][2]) usage(); j=len; break; case 'p': p=1; break; case 'v': v=1; break; case 'm': parsemode(argv[i+1],&and,&or); mode=(mode&and)|or; argv[i+1]=0; break; default: usage(); } } } else { if (p) { minusp(argv[i],mode,v); } else domkdir(argv[i],mode,v,0,argv[i]); } } return res; }
static Lisp_Object mod_by_rem(Lisp_Object a, Lisp_Object b) { Lisp_Object nil; CSLbool sb = minusp(b); errexit(); a = Cremainder(a, b); /* Repeats dispatch on argument type. Sorry */ errexit(); if (sb) { if (plusp(a)) { errexit(); a = plus2(a, b); } } else if (minusp(a)) { errexit(); a = plus2(a, b); } return a; }