ÂÁÓÉÃ ÔÏ ÃÏÍÁÌ ÔÒÁÎÓÌÁÔÏÒ BY ÓOL ËATZ ÂREATHES THERE A HACKER WITH SOUL SO DEAD, WHO IN HIS OWN HEART HATH NOT SAID, "ÔHERE HAS GOT TO BE SOME EASY WAY TO CONVERT ALL THOSE ÂÁÓÉÃ PROGRAMS TO ÃÏÍÁÌ." (APOLOGIES TO POETRY LOVERS EVERYWHERE.) ÔWO ÃÏÍÁÌ 0.14 PROGRAMS COMPRISE THE BASIC2COMAL SYSTEM. ÔHIS TWO PART SYSTEM IS DESIGNED TO HELP PROGRAMMERS CONVERT Ã64 ÂÁÓÉÃ PROGRAMS TO ÃÏÍÁÌ. ÂEFORE YOU GET TOO EXCITED, IT ONLY DOES ABOUT 80% OF THE TEXT CONVERSION AND NONE OF THE CONVERSION NECESSARY TO GET RID OF THE TORTURED LOGIC INHERENT IN ÂÁÓÉÃ "SPAGHETTI" CODE. ÔO RUN THE PROGRAMS, THE FOLLOWING CONDITION MUST BE MET: ÂOTH ÃÏÍÁÌ PROGRAMS AND THE ÂÁÓÉÃ PROGRAM TO BE CONVERTED MUST BE ON THE SAME DISK WITH ENOUGH FREE DISK SPACE TO WRITE SEVERAL FILES. ÔHE BASIC2COMAL SYSTEM DOES THE FOLLOWING: * CONVERTS ÂÁÓÉÃ TOKENS TO KEYWORDS * PUTS SPACES AROUND KEYWORDS * CONVERTS ÇÏÔÏ # TO ÇÏÔÏ ÇÔ# (A LABEL) AND THEN PUTS ÇÔ#: IN THE RIGHT PLACE; * CONVERTS ÇÏÓÕÂ # TO ÅØ# (A PROC NAME) AND PUTS THE PROC NAME IN THE RIGHT PLACE * STRIPS ÂÁÓÉÃ LINE NUMBERS AND PUTS IN SEQUENTIAL ÃÏÍÁÌ LINE NUMBERS * CONVERTS ÏÎ..ÇÏÔÏ AND ÏÎ..ÇÏÓÕÂ TO ÃÁÓÅ STRUCTURE * INSERTS A ÇÏÔÏ IN ÉÆ EXPRESSION ÔÈÅÎ # * CONVERTS USER DEFINED ÂÁÓÉÃ FUNCTIONS (ÄÅÆ ÆÎ) TO ÃÏÍÁÌ FORMAT * PARTIALLY CONVERTS ÌÅÆÔ$, ÍÉÄ$ AND ÒÉÇÈÔ$ TO ÃÏÍÁÌ STRING FORMAT, USING THE ÌÅÎ FUNCTION AND A DUMMY STRING VARIABLE, ØØ$ * CONVERTS ÒÅÔÕÒÎ TO ÅÎÄÐÒÏÃ * CONVERTS ALL ÉÆ..ÔÈÅÎ STATEMENTS TO ÉÆ..ÔÈÅÎ..ÅÎÄÉÆ BLOCK FORMAT * INSERTS SOME COMMAS IN SOME ÐÒÉÎÔ STATEMENTS (ÂÁÓÉÃ ISN'T AS STRICT AS ÃÏÍÁÌ WHEN SEPARATING VARIABLES FROM FUNCTIONS LIKE ÔÁÂ AND ÓÐÃ) * CONVERTS ÒÅÍ TO // * CONVERTS ÎÅØÔ TO ÅÎÄÆÏÒ * HIDES ÂÁÓÉÃ KEYWORDS THAT HAVE NO ÃÏÍÁÌ EQUIVALENTS * APPENDS THE STRING "ÏÆ 10" TO ALL ÄÉÍ VARIABLE$(NUMBER) STATEMENTS * SPLITS ALL MULTIPLE STATEMENTS ON ONE LINE TO SEPARATE LINES * SEVERAL OTHER MINOR CONVERSIONS ÔHE PROGRAM LEAVES THE FOLLOWING FOR THE USER TO DO: * ÄÉÍ STRING VARIABLES THAT ARE NOT ÂÁÓÉÃ ARRAYS * CONVERT ÏÐÅÎ STATEMENTS TO ÃÏÍÁÌ FORMAT * INITIALIZE NUMERIC VARIABLES BEFORE THEY ARE USED IN LOGIC STATEMENTS * INSERT OCCASIONAL COMMAS IN PRINT STATEMENTS * SUBSTITUTE THE CORRECT STRING VARIABLE IN THE CONVERTED ÌÅÆÔ$, ÍÉÄ$ AND ÒÉÇÈÔ$ FUNCTIONS * FIGURE OUT HOW TO GET THE ÓÐÃ FUNCTION (CONVERTED TO ÓÐÃÓ) TO WORK * FIGURE OUT HOW TO GET ÓÙÓ #,# TO WORK IN ÃÏÍÁÌ (AN UNDOCUMENTED ÂÁÓÉÃ FEATURE THAT SHOWED UP IN SOME PUBLIC DOMAIN PROGRAMS FROM ÃOMMODORE) * CONVERT ÔÉ, ÔÉ$, ÖÁÌ, ÇÅÔ AND OTHER FUNCTIONS TO ÃÏÍÁÌ FUNCTIONS (THIS WILL BE MUCH EASIER IN ÃÏÍÁÌ 2.0 THEN IN ÃÏÍÁÌ 0.14) * CHANGE ÐÅÅË AND ÐÏËÅ TO WORK WITH ÃÏÍÁÌ ADDRESSES * PUT QUOTES AROUND STRINGS IN SOME ÄÁÔÁ STATEMENTS * AND LAST BUT MOST IMPORTANT, UNTANGLE THE LOGIC THAT USES SUBROUTINE LINE NUMBERS AS TARGETS FOR ÇÏÔÏ STATEMENTS ÂASIC2COMAL ASKS FOR THE NAME OF THE ÂÁÓÉÃ PROGRAM FILE TO BE TRANSLATED. ÉT WRITES OUTPUT TO TWO FILES AFTER DELETING OLDER VERSIONS. ÔHE FIRST IS CALLED STRUCTURED'BASIC. ÉT CONTAINS AN ÁÓÃÉÉ FILE OF THE CONVERTED ÂÁÓÉÃ PROGRAM (INCLUDING THE ORIGINAL ÂÁÓÉÃ LINE NUMBERS AS COMMENTS). ÔHE SECOND FILE (CALLED GOTOS'AND'PROCS) CONTAINS THE LINE NUMBERS THAT WERE PART OF ÇÏÔÏ AND ÇÏÓÕÂ STATEMENTS. ÔHE ÇÏÓÕÂ LINE NUMBERS WERE MADE NEGATIVE TO OVERCOME THE Ã64 LIMITATION OF ALLOWING A MAXIMUM OF 3 FILES OPEN AT ONCE (THE ÂÁÓÉÃ FILE, STRUCTURED'BASIC, AND GOTOS'AND'PROCS). É HAD TO STORE THE LINE NUMBERS IN A FILE AND SPLIT THE PROGRAM INTO 2 PARTS TO OVERCOME THE 12Ë AVAILABLE MEMORY LIMIT IN ÃÏÍÁÌ 0.14. ÔHE FIRST PROGRAM THEN CHAINS THE SECOND. ÉT READS THE LINE NUMBERS INTO 2 ARRAYS, THE POSITIVE NUMBERS INTO THE GOTO ARRAY AND THE NEGATIVE NUMBERS, AFTER CONVERTION TO POSITIVE, INTO THE PROC ARRAY. ÔHE ARRAYS ARE THEN SORTED. ÉT THEN OPENS STRUCTURED'BASIC, COMPARES THE SORTED ÇÏÔÏ #S AND ÇÏÓÕÂ #S WITH THE ÂÁÓÉÃ LINE NUMBERS AND INSERTS THEM AS ÌÁÂÅÌS OR ÐÒÏÃ NAMES IN THE CORRECT ORDER. ×HEN ÌÁÂÅÌS AND ÐÒÏÃ NAMES OCCUR AT THE SAME ÂÁÓÉÃ LINE NUMBER, THE ÐÒÏÃ NAME IS ENTERED FIRST. ÔHE ÂÁÓÉÃ LINE NUMBERS ARE STRIPED OFF AND NEW LINE NUMBERS ADDED. ÔHEN EACH LINE IS WRITTEN TO A FILE CALLED ALMOST'COMAL. ÔHE LAST STEP IN THE AUTOMATED CONVERSION IS TO FIND (AND HOPEFULLY CORRECT) THE REMAINING SYNTAX ERRORS. É USED THE DYNAMIC KEYBOARD TECHNIQUE TO PUT THE COMMANDS: NEW ENTER "ALMOST'COMAL" ON THE SCREEN, AND ÐÏËÅD RETURNS (ÃÈÒ$(13)) INTO THE KEYBOARD BUFFER. ÔHIS AUTOMATICALLY CLEARS MEMORY AND FEEDS EACH LINE OF ÁÓÃÉÉ CODE TO ÃÏÍÁÌ'S SYNTAX CHECKING ROUTINES. ÉT IS AS IF YOU ENTERED THE LINE INVISIBLY AT THE KEYBOARD. ÉF THE LINE IS CORRECT IT GOES ON TO THE NEXT LINE. ÉF THE LINE HAS AN ERROR, THE LINE AND STANDARD ÃÏÍÁÌ ERROR MESSAGE WILL BE DISPLAYED. ÙOU MUST DEAL WITH THE SYNTAX ERROR. ÉF YOU DON'T KNOW WHAT'S WRONG, MAKE THE WHOLE LINE A COMMENT BY PUTTING A ! RIGHT AFTER THE LINE NUMBER (A ! IS COVERTED TO // BY ÃÏÍÁÌ FOR YOU). ÉF YOU USE THE UP OR DOWN CURSOR KEYS, THE PROGRAM WILL STOP BEING ENTERED AT THE PREVIOUS LINE. ÉF YOU ACCIDENTALLY STOP THE AUTOMATIC ENTERING, YOU CAN START OVER BY TYPING: ENTER "ALMOST'COMAL" ÁFTER THE LAST LINE HAS BEEN AUTOMATICALLY ENTERED FROM THE FILE, YOU HAVE A ÃÏÍÁÌ PROGRAM THAT IS READY FOR DEBUGGING. É SUGGEST YOU SAVE IT UNDER A NEW NAME SINCE THE FILE ALMOST'COMAL IS DELETED WHEN BASIC2COMAL IS RUN AGAIN. ÔHE REST IS UP TO YOU. ÇOOD LUCK AND DON'T FORGET TO SEND COPIES OF YOUR CONVERTED PROGRAMS TO ÃÏÍÁÌ ÕSERS ÇROUP, Õ.Ó.Á., ÌIMITED SO THAT WE CAN ALL SHARE THEM. [ÔHIS SYSTEM PROVIDES AN EXCELLENT STARTING POINT FOR ANYONE WISHING TO IMPROVE ON IT. ÐLEASE LET US KNOW IF YOU DO!]