' ' Simple Command Line Shell emulation to directly execute some BaCon commands. ' ' Usage: ./shell [bacon.bash] ' ./shell [bacon.ksh] ' ' (Without argument 'bacon' is assumed to be the converter.) ' ' October 2010, PvE - GPL. '---------------------------------------------------------------------------------------------------------------- TRAP LOCAL ' Get the arguments SPLIT ARGUMENT$ BY " " TO arg$ SIZE amount ' Name of temporary directory to store generated C files tmp_dir$ = CONCAT$("/tmp/", arg$[0], "/") ' Name of tmp file for direct mode tmp_file$ = CONCAT$(arg$[0], ".tmp.bac") ' Determine compiler binary IF amount EQ 2 THEN bacon$ = arg$[1] ELSE bacon$ = "./bacon" ' Default prompt prompt$ = "-> " PRINT NL$, "---= Entering BaCon Shell v0.1 using BaCon version ", VERSION$, " with 65535 bytes free ;-) =---", NL$ ' Create the temporary directory MAKEDIR tmp_dir$ ' Endless loop WHILE TRUE ' Get data from user INPUT prompt$, command$ ' EXIT command? IF EQUAL(CHOP$(UCASE$(command$)), "EXIT") THEN END ' No, assume BaCon code ELIF LEN(command$) > 0 THEN ' Cleanup temporary directory IF FILEEXISTS(CONCAT$(tmp_dir$, tmp_file$)) THEN DELETE FILE CONCAT$(tmp_dir$, tmp_file$) IF FILEEXISTS(CONCAT$(tmp_dir$, tmp_file$, ".c")) THEN DELETE FILE CONCAT$(tmp_dir$, tmp_file$, ".c") IF FILEEXISTS(CONCAT$(tmp_dir$, tmp_file$, ".h")) THEN DELETE FILE CONCAT$(tmp_dir$, tmp_file$, ".h") ' Write command to temporary file OPEN CONCAT$(tmp_dir$, tmp_file$) FOR WRITING AS tmp_file WRITELN command$ TO tmp_file CLOSE FILE tmp_file ' Convert and compile result$ = EXEC$(CONCAT$(bacon$, " -d ", tmp_dir$, " ", CONCAT$(tmp_dir$, tmp_file$))) ' Check result IF NOT(INSTR(result$, "ready")) THEN PRINT "? ERROR" ELSE SYSTEM CONCAT$(tmp_dir$, LEFT$(tmp_file$, LEN(tmp_file$) - 4)) END IF END IF WEND