//This takes an input file of doubles and makes a sorted output file. Cd(__DIR__);; I64 Compare(F64 e1, F64 e2) { return Sign(e1 - e2); } U0 F64FileSortTXT(U8 *in_name,U8 *out_name) { CCompCtrl *cc; I64 i, n; F64 *a; CDoc *doc; //Pass1: Count the number of F64s. n = 0; cc = CompCtrlNew(MStrPrint("#include \"%s\"", in_name)); while (Lex(cc)) if (cc->token == TK_F64) n++; CompCtrlDel(cc); a = MAlloc(n * sizeof(F64)); //Pass2: Read F64s. i = 0; cc = CompCtrlNew(MStrPrint("#include \"%s\"", in_name)); while (Lex(cc)) if (cc->token == TK_F64) a[i++] = cc->cur_f64; CompCtrlDel(cc); QuickSortI64(a, n, &Compare); //Sort 64-bit sized values //Save doc = DocNew(out_name); DocPrint(doc, "//This is sorted.\n"); for (i = 0; i < n; i++) DocPrint(doc, "%12.6f\n", a[i]); DocWrite(doc); DocDel(doc); Free(a); } F64FileSortTXT("~/DemoUnsortedF64.DD", "~/DemoSortedF64.DD"); Type("~/DemoUnsortedF64.DD"); Type("~/DemoSortedF64.DD"); U0 F64FileSortDAT(U8 *in_name, U8 *out_name) {//File/CFile, ::/Demo/Disk/DataBase.ZC I64 size; F64 *a = FileRead(in_name, &size); QuickSortI64(a,size / sizeof(F64), &Compare); //Sort 64-bit sized values FileWrite(out_name, a, size); Free(a); } F64FileSortDAT("~/DemoUnsortedF64.DATA", "~/DemoSortedF64.DATA"); U0 F64FileDumpDAT(U8 *in_name) {//File/CFile, ::/Demo/Disk/DataBase.ZC I64 i, n, size; F64 *a = FileRead(in_name, &size); n = size / sizeof(F64); "%s\n", in_name; for (i = 0; i < n; i++) "%12.6f\n", a[i]; Free(a); } F64FileDumpDAT("~/DemoUnsortedF64.DATA"); F64FileDumpDAT("~/DemoSortedF64.DATA");