/* sort_p.c (comment7.c) - Sort screen characters - Don Yang (uguu.org) Preprocessed version. */ volatile long far *p = (long far *)4194412; long q; int o[2000], l, r[26], i, j, k, x = 0, far *s = (int far *)0xb8000000; void ma1n(int a, int b, int c) { k = s[o[a]]; s[o[a]] = s[o[b]]; s[o[b]] = k; if( !(++x % c) && (k & 255) - 32 ) { while( q == *p ); q = *p; } } void Main(int a, int b, int c) { if( a < (l / 2) ) Main(a * 2, b - 2, c); do { for(i = c = 0; i < l - a; i++) { if( (s[o[i]] & 255) < (s[o[i + a]] & 255) ) ma1n(i, i + (c = a), b); } } while( c ); } void main(int a, int b, int c) { if( a > 0 ) { for(i = l = 0; i < 2000; i++) { r[(i + 79) / 80] = l; o[l] = i; if( (s[i] & 255) != 68 && (s[i] & 255) != 79 && (s[i] & 255) != 78 ) l++; } r[25] = l; main(-1, 24, 1); Main(1, 24, -1); } else if( !a ) { if( c > b ) { a = s[o[b]] & 255; i = b; j = c; while( i <= j ) { while( i < c && (s[o[i]] & 255) < a ) i++; while( j > b && (s[o[j]] & 255) > a ) j--; if( i <= j ) { ma1n(i, j, 8); i++; j--; } } main(0, b, j); main(0, i, c); } } else { if( a > -25 ) main(a - 1, 0, 0); main(0, r[25 + a], r[26 + a] - 1); } }