Changeset 2287 for research/2008-displacement/main.c
- Timestamp:
- Apr 16, 2008, 12:11:35 AM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
research/2008-displacement/main.c
r2286 r2287 40 40 void bytecode(unsigned char * mem, int heap_size, int stack_size) 41 41 { 42 char mode[] = "-0"; 43 char *argv[] = { "program", mode, "arg" }; 42 char args[10][1024]; 43 char *argv[] = { args[0], args[1], args[2], args[3], args[4], 44 args[5], args[6], args[7], args[8], args[9] }; 45 int i, argc; 44 46 char c; 45 47 46 if(sys_read(0, mode + 1, 1) != 1)48 if(sys_read(0, &c, 1) != 1) 47 49 sys_exit(-5); 48 49 main(sizeof(argv)/sizeof(*argv), argv); 50 argc = (unsigned char)c; 51 52 for(i = 0; i < argc; i++) 53 { 54 char *p = argv[i]; 55 do 56 if(sys_read(0, p, 1) != 1) 57 sys_exit(-5); 58 while(*p++); 59 } 60 61 main(argc, argv); 50 62 51 63 c = 0; … … 81 93 } while(0) 82 94 83 static void msg(const char *f, ...) 84 { 85 va_list args; 86 va_start(args, f); 95 static void out(FILE *stream, const char *f, va_list args) 96 { 87 97 #ifdef BYTECODE 88 98 static char const *hex2char = "0123456789abcdef"; … … 142 152 else if(f[0] == 'g') 143 153 { 144 double g = va_arg(args, double), h = 9.9f; 145 int i; 146 if(g < 0.f) 147 { 148 sys_write(1, "-", 1); 149 g = -g; 150 } 154 double g = va_arg(args, double), h = 0.0000001; 155 int i = g; 156 WRITE_INT(i, 10); 151 157 for(i = 0; i < 7; i++) 152 158 { 153 sys_write(1, hex2char + (int)g, 1); 159 g = (g - (int)g) * 10; 160 h *= 10; 161 if(g < h) 162 break; 154 163 if(i == 0) 155 164 sys_write(1, ".", 1); 156 g = (g - (int)g) * 10; 157 h = h / 10.f; 158 if(g < h) 159 break; 165 sys_write(1, hex2char + (int)g, 1); 160 166 } 161 167 } … … 197 203 } 198 204 #else 199 vprintf(f, args); 200 fflush(stdout); 201 #endif 205 vfprintf(stream, f, args); 206 fflush(stream); 207 #endif 208 } 209 210 static void err(const char *f, ...) 211 { 212 va_list args; 213 va_start(args, f); 214 out(stderr, f, args); 215 va_end(args); 216 } 217 218 static void msg(const char *f, ...) 219 { 220 va_list args; 221 va_start(args, f); 222 out(stdout, f, args); 202 223 va_end(args); 203 224 } … … 753 774 } 754 775 755 fprintf(stderr,"did %i changes\n", changes);776 err("did %i changes\n", changes); 756 777 757 778 if(changes == 0) … … 829 850 static void usage(char *argv[]) 830 851 { 831 fprintf(stderr, "Usage: %s <mode> [ARGS...]\n", argv[0]); 832 fprintf(stderr, "Allowed modes:\n"); 833 fprintf(stderr, " -1 <src> raster FS displacement study on src\n"); 834 fprintf(stderr, " -2 <src1> <src2> raster FS displacement study on blends of src1 and src2\n"); 835 fprintf(stderr, " -3 <src> quick (a,b,c,d) ED kernel analysis on src\n"); 836 fprintf(stderr, " -4 <src> exhaustive (a,b,c,d) ED kernel analysis on src\n"); 837 fprintf(stderr, " -5 <src> exhaustive displacement study on src\n"); 852 msg("Usage: %s <mode> [ARGS...]\n", argv[0]); 853 msg("Allowed modes:\n"); 854 msg(" -1 <src> raster FS displacement study on src\n"); 855 msg(" -2 <src1> <src2> raster FS displacement study on blends of src1 and src2\n"); 856 msg(" -3 <src> quick (a,b,c,d) ED kernel analysis on src\n"); 857 msg(" -4 <src> exhaustive (a,b,c,d) ED kernel analysis on src\n"); 858 msg(" -5 <src> exhaustive displacement study on src\n"); 859 msg(" -6 <src> restrained (a,b,c,d) ED kernel analysis on src\n"); 860 msg(" -7 <src> restrained displacement study on src\n"); 838 861 } 839 862 … … 845 868 if(argc < 2) 846 869 { 847 fprintf(stderr,"%s: too few arguments\n", argv[0]);870 err("%s: too few arguments\n", argv[0]); 848 871 usage(argv); 849 872 return EXIT_FAILURE; … … 852 875 if(argv[1][0] != '-' || !(mode = atoi(argv[1] + 1))) 853 876 { 854 fprintf(stderr,"%s: invalid mode `%s'\n", argv[0], argv[1]);877 err("%s: invalid mode `%s'\n", argv[0], argv[1]); 855 878 usage(argv); 856 879 return EXIT_FAILURE;
Note: See TracChangeset
for help on using the changeset viewer.