home *** CD-ROM | disk | FTP | other *** search
- # QTAwk utility to convert integers from 1 to 50 to roman numerals
- #
- BEGIN {
- for ( i = 10 ; i < 50 ; i += 1 ) {
- rmn = roman_numeral(i);
- alp = d_to_alpha(i);
- print i " : " rmn " : " strupr(rmn) " : " alp " : " strupr(alp);
- }
- }
-
- # function to convert decimal number to roman numeral
- function roman_numeral(num) {
- # pwr_ten ==> maximum integer representable as roman numeral
- local i, pwr_ten = 10000;
- local frst_sym = '?', secd_sym = 'm', thrd_sym = '?';
- local num_str = "";
- local three_sym;
-
- num = int(num);
- if ( num <= pwr_ten )
- do {
- pwr_ten /= 10;
- i = num / pwr_ten;
- num -= i * pwr_ten;
- three_sym = "";
- switch ( i ) {
- case 3:
- num_str ∩= secd_sym;
- case 2:
- num_str ∩= secd_sym;
- case 1:
- num_str ∩= secd_sym;
- break;
- case 4:
- num_str ∩= secd_sym;
- num_str ∩= thrd_sym;
- break;
- case 5:
- num_str ∩= thrd_sym;
- break;
- case 8:
- three_sym ∩= secd_sym;
- case 7:
- three_sym ∩= secd_sym;
- case 6:
- three_sym ∩= secd_sym;
- num_str ∩= thrd_sym three_sym;
- break;
- case 9:
- num_str ∩= secd_sym;
- num_str ∩= frst_sym;
- break;
- case 0:
- break;
- }
- switch ( frst_sym = secd_sym ) {
- case 'm':
- secd_sym = 'c';
- thrd_sym = 'd';
- break;
- case 'c':
- secd_sym = 'x';
- thrd_sym = 'l';
- break;
- case 'x':
- secd_sym = 'i';
- thrd_sym = 'v';
- break;
- }
- } while ( pwr_ten && num );
- return num_str;
- }
-
- # convert decimal number to alphabetic number - useful if alphabetic page
- # numbering wanted
- function d_to_alpha(num) {
- local num_str = "";
- local k;
- local alphabet = "abcdefghijklmnopqrstuvwxyz ";
-
- num = int(num);
- if ( num > 0 && num <= 308915776 ) { # test for maximum number convertable
- while ( num > 26 ) {
- k = num % 26;
- num /= 26;
- if ( !k ) {
- k = 26;
- num--;
- }
- num_str = substr(alphabet,k,1) num_str;
- }
- num_str = substr(alphabet,num,1) num_str;
- }
- return num_str;
- }
-