! File: DRIVER.BLI ! Module DRIVER(main=main) = Begin ! ! DRIVER MODULE ! ------------- ! ! ! THIS IS THE MAIN PROGRAM FOR THE BLISS-11 COMPILER. IT ALSO ! CONTAINS SOME COMMON UTILITY ROUTINES. THIS MODULE RESIDES IN ! THE LOW SEGMENT IN THE OVERLAID VERSION OF THE COMPILER. ! ! Require 'Bliss'; External Routine ParseCcl : Novalue, OpenFiles : Novalue, CloseFiles : Novalue, SYS$EXIT : Novalue, PrintTree : Novalue, decl_module : Novalue, FreeSymbolList : Novalue; Global Routine GENIT : Novalue = Begin If .swit_dump_flowan Then Begin Print(AZ('\n\n==== after flowan ===\n\n')); PrintTree(.sym,0) End; DELAYDRIVER(.SYM); If .swit_dump_delay Then Begin Print(AZ('\n\n==== after delay ===\n\n')); PrintTree(.sym,1) End; TNBIND(.SYM); ! Note: dump done in tnbind before needed tables are destroyed CODEDRIVER(.SYM); FINALDRIV(0); FreeSymbolList(.PURGED); PURGED = .LASTPUR End; Global Routine MAIN : Novalue = Begin ParseCcl(); OpenFiles(); ONCEONLY(); TNCHAIN[itm_llink] = TNCHAIN; TNCHAIN[itm_rlink] = TNCHAIN; MODMAIN = AZ(''); MODNAME = AZ('$MODULE'); CSNAME = .MODNAME; DEVICE = LSTDEV; PURGED = .LASTPUR; level_block = 1; level_structure = 999; PAGE(); RUND(QL_LEXEME); If .DEL Neq TK_MODULE Then Begin ERRPRNT(.pos_del,.pos_del,B11$_MISSING_MODULE); STOP(1) End; decl_module(); LASTPUR = 0; MODDONE = TRUE; If Not .NOTREE And .num_error Eql 0 Then GENIT(); swit_errors = TRUE; Print(AZ('%b\n%3m')); If .num_error + .num_warning Neq 0 Then Print(AZ('\n; # Warnings =%d\n; # Errors =%d\n'), .num_warning,.num_error); Print(AZ('%e')); RUND(QL_LEXEME); If Not .flg_eof Then ERRPRNT(.pos_del,.pos_del,B11$_EXTRA_DATA); Print(AZ('%3m\n; Size: %d+%d'),.CODESIZE,.DATASIZE); Print(AZ('\n; Compilation Complete\n%2m\n\t.END %s\n'),.MODMAIN); CloseFiles(); SYS$EXIT(1) End; End Eludom