1$! 2$! DES-LIB.COM 3$! Written By: Robert Byer 4$! Vice-President 5$! A-Com Computing, Inc. 6$! byer@mail.all-net.net 7$! 8$! Changes by Richard Levitte <richard@levitte.org> 9$! 10$! This command files compiles and creates the 11$! "[.xxx.EXE.CRYPTO.DES]LIBDES.OLB" library. The "xxx" denotes the machine 12$! architecture of AXP or VAX. 13$! 14$! It was re-written to try to determine which "C" compiler to try to use 15$! or the user can specify a compiler in P3. 16$! 17$! Specify one of the following to build just that part, specify "ALL" to 18$! just build everything. 19$! 20$! ALL To Just Build "Everything". 21$! LIBRARY To Just Build The [.xxx.EXE.CRYPTO.DES]LIBDES.OLB Library. 22$! DESTEST To Just Build The [.xxx.EXE.CRYPTO.DES]DESTEST.EXE Program. 23$! SPEED To Just Build The [.xxx.EXE.CRYPTO.DES]SPEED.EXE Program. 24$! RPW To Just Build The [.xxx.EXE.CRYPTO.DES]RPW.EXE Program. 25$! DES To Just Build The [.xxx.EXE.CRYPTO.DES]DES.EXE Program. 26$! DES_OPTS To Just Build The [.xxx.EXE.CRYPTO.DES]DES_OPTS.EXE Program. 27$! 28$! Specify either DEBUG or NODEBUG as P2 to compile with or without 29$! debugging information. 30$! 31$! Specify which compiler at P3 to try to compile under. 32$! 33$! VAXC For VAX C. 34$! DECC For DEC C. 35$! GNUC For GNU C. 36$! 37$! If you don't speficy a compiler, it will try to determine which 38$! "C" compiler to try to use. 39$! 40$! P4, if defined, sets a compiler thread NOT needed on OpenVMS 7.1 (and up) 41$! 42$! 43$! Make sure we know what architecture we run on. 44$! 45$! 46$! Check Which Architecture We Are Using. 47$! 48$ IF (F$GETSYI("CPU").GE.128) 49$ THEN 50$! 51$! The Architecture Is AXP. 52$! 53$ ARCH := AXP 54$! 55$! Else... 56$! 57$ ELSE 58$! 59$! The Architecture Is VAX. 60$! 61$ ARCH := VAX 62$! 63$! End The Architecture Check. 64$! 65$ ENDIF 66$! 67$! Check To Make Sure We Have Valid Command Line Parameters. 68$! 69$ GOSUB CHECK_OPTIONS 70$! 71$! Tell The User What Kind of Machine We Run On. 72$! 73$ WRITE SYS$OUTPUT "Compiling On A ",ARCH," Machine." 74$! 75$! Define The OBJ Directory Name. 76$! 77$ OBJ_DIR := SYS$DISK:[--.'ARCH'.OBJ.CRYPTO.DES] 78$! 79$! Check To See If The Architecture Specific OBJ Directory Exists. 80$! 81$ IF (F$PARSE(OBJ_DIR).EQS."") 82$ THEN 83$! 84$! It Dosen't Exist, So Create It. 85$! 86$ CREATE/DIR 'OBJ_DIR' 87$! 88$! End The Architecture Specific OBJ Directory Check. 89$! 90$ ENDIF 91$! 92$! Define The EXE Directory Name. 93$! 94$ EXE_DIR :== SYS$DISK:[--.'ARCH'.EXE.CRYPTO.DES] 95$! 96$! Check To See If The Architecture Specific Directory Exists. 97$! 98$ IF (F$PARSE(EXE_DIR).EQS."") 99$ THEN 100$! 101$! It Dosen't Exist, So Create It. 102$! 103$ CREATE/DIR 'EXE_DIR' 104$! 105$! End The Architecture Specific Directory Check. 106$! 107$ ENDIF 108$! 109$! Define The Library Name. 110$! 111$ LIB_NAME := 'EXE_DIR'LIBDES.OLB 112$! 113$! Check To See What We Are To Do. 114$! 115$ IF (BUILDALL.EQS."TRUE") 116$ THEN 117$! 118$! Since Nothing Special Was Specified, Do Everything. 119$! 120$ GOSUB LIBRARY 121$ GOSUB DESTEST 122$ GOSUB SPEED 123$ GOSUB RPW 124$ GOSUB DES 125$ GOSUB DES_OPTS 126$! 127$! Else... 128$! 129$ ELSE 130$! 131$! Build Just What The User Wants Us To Build. 132$! 133$ GOSUB 'BUILDALL' 134$! 135$! End The BUILDALL Check. 136$! 137$ ENDIF 138$! 139$! Time To EXIT. 140$! 141$ EXIT 142$ LIBRARY: 143$! 144$! Tell The User That We Are Compiling. 145$! 146$ WRITE SYS$OUTPUT "Compiling The ",LIB_NAME," Files." 147$! 148$! Check To See If We Already Have A "[.xxx.EXE.CRYPTO.DES]LIBDES.OLB" Library... 149$! 150$ IF (F$SEARCH(LIB_NAME).EQS."") 151$ THEN 152$! 153$! Guess Not, Create The Library. 154$! 155$ LIBRARY/CREATE/OBJECT 'LIB_NAME' 156$! 157$! End The Library Exist Check. 158$! 159$ ENDIF 160$! 161$! Define The DES Library Files. 162$! 163$ LIB_DES = "set_key,ecb_enc,cbc_enc,"+ - 164 "ecb3_enc,cfb64enc,cfb64ede,cfb_enc,ofb64ede,"+ - 165 "enc_read,enc_writ,ofb64enc,"+ - 166 "ofb_enc,str2key,pcbc_enc,qud_cksm,rand_key,"+ - 167 "des_enc,fcrypt_b,read2pwd,"+ - 168 "fcrypt,xcbc_enc,read_pwd,rpc_enc,cbc_cksm,supp" 169$! 170$! Define A File Counter And Set It To "0". 171$! 172$ FILE_COUNTER = 0 173$! 174$! Top Of The File Loop. 175$! 176$ NEXT_FILE: 177$! 178$! O.K, Extract The File Name From The File List. 179$! 180$ FILE_NAME = F$ELEMENT(FILE_COUNTER,",",LIB_DES) 181$! 182$! Check To See If We Are At The End Of The File List. 183$! 184$ IF (FILE_NAME.EQS.",") THEN GOTO FILE_DONE 185$! 186$! Increment The Counter. 187$! 188$ FILE_COUNTER = FILE_COUNTER + 1 189$! 190$! Create The Source File Name. 191$! 192$ SOURCE_FILE = "SYS$DISK:[]" + FILE_NAME + ".C" 193$! 194$! Tell The User We Are Compiling The Source File. 195$! 196$ WRITE SYS$OUTPUT " ",FILE_NAME,".C" 197$! 198$! Create The Object File Name. 199$! 200$ OBJECT_FILE = OBJ_DIR + FILE_NAME + "." + ARCH + "OBJ" 201$ ON WARNING THEN GOTO NEXT_FILE 202$! 203$! Check To See If The File We Want To Compile Actually Exists. 204$! 205$ IF (F$SEARCH(SOURCE_FILE).EQS."") 206$ THEN 207$! 208$! Tell The User That The File Dosen't Exist. 209$! 210$ WRITE SYS$OUTPUT "" 211$ WRITE SYS$OUTPUT "The File ",SOURCE_FILE," Dosen't Exist." 212$ WRITE SYS$OUTPUT "" 213$! 214$! Exit The Build. 215$! 216$ EXIT 217$! 218$! End The File Exists Check. 219$! 220$ ENDIF 221$! 222$! Compile The File. 223$! 224$ ON ERROR THEN GOTO NEXT_FILE 225$ CC/OBJECT='OBJECT_FILE' 'SOURCE_FILE' 226$! 227$! Add It To The Library. 228$! 229$ LIBRARY/REPLACE/OBJECT 'LIB_NAME' 'OBJECT_FILE' 230$! 231$! Time To Clean Up The Object File. 232$! 233$ DELETE 'OBJECT_FILE';* 234$! 235$! Go Back And Do It Again. 236$! 237$ GOTO NEXT_FILE 238$! 239$! All Done With This Library Part. 240$! 241$ FILE_DONE: 242$! 243$! Tell The User That We Are All Done. 244$! 245$ WRITE SYS$OUTPUT "Library ",LIB_NAME," Built." 246$! 247$! All Done, Time To Return. 248$! 249$ RETURN 250$! 251$! Compile The DESTEST Program. 252$! 253$ DESTEST: 254$! 255$! Check To See If We Have The Proper Libraries. 256$! 257$ GOSUB LIB_CHECK 258$! 259$! Check To See If We Have A Linker Option File. 260$! 261$ GOSUB CHECK_OPT_FILE 262$! 263$! Check To See If The File We Want To Compile Actually Exists. 264$! 265$ IF (F$SEARCH("SYS$DISK:[]DESTEST.C").EQS."") 266$ THEN 267$! 268$! Tell The User That The File Dosen't Exist. 269$! 270$ WRITE SYS$OUTPUT "" 271$ WRITE SYS$OUTPUT "The File DESTEST.C Dosen't Exist." 272$ WRITE SYS$OUTPUT "" 273$! 274$! Exit The Build. 275$! 276$ EXIT 277$! 278$! End The DESTEST.C File Check. 279$! 280$ ENDIF 281$! 282$! Tell The User What We Are Building. 283$! 284$ WRITE SYS$OUTPUT "Building ",EXE_DIR,"DESTEST.EXE" 285$! 286$! Compile The DESTEST Program. 287$! 288$ CC/OBJECT='OBJ_DIR'DESTEST.OBJ SYS$DISK:[]DESTEST.C 289$! 290$! Link The DESTEST Program. 291$! 292$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'DESTEST.EXE - 293 'OBJ_DIR'DESTEST.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION 294$! 295$! All Done, Time To Return. 296$! 297$ RETURN 298$! 299$! Compile The SPEED Program. 300$! 301$ SPEED: 302$! 303$! Check To See If We Have The Proper Libraries. 304$! 305$ GOSUB LIB_CHECK 306$! 307$! Check To See If We Have A Linker Option File. 308$! 309$ GOSUB CHECK_OPT_FILE 310$! 311$! Check To See If The File We Want To Compile Actually Exists. 312$! 313$ IF (F$SEARCH("SYS$DISK:[]SPEED.C").EQS."") 314$ THEN 315$! 316$! Tell The User That The File Dosen't Exist. 317$! 318$ WRITE SYS$OUTPUT "" 319$ WRITE SYS$OUTPUT "The File SPEED.C Dosen't Exist." 320$ WRITE SYS$OUTPUT "" 321$! 322$! Exit The Build. 323$! 324$ EXIT 325$! 326$! End The SPEED.C File Check. 327$! 328$ ENDIF 329$! 330$! Tell The User What We Are Building. 331$! 332$ WRITE SYS$OUTPUT "Building ",EXE_DIR,"SPEED.EXE" 333$! 334$! Compile The SPEED Program. 335$! 336$ CC/OBJECT='OBJ_DIR'SPEED.OBJ SYS$DISK:[]SPEED.C 337$! 338$! Link The SPEED Program. 339$! 340$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'SPEED.EXE - 341 'OBJ_DIR'SPEED.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION 342$! 343$! All Done, Time To Return. 344$! 345$ RETURN 346$! 347$! Compile The RPW Program. 348$! 349$ RPW: 350$! 351$! Check To See If We Have The Proper Libraries. 352$! 353$ GOSUB LIB_CHECK 354$! 355$! Check To See If We Have A Linker Option File. 356$! 357$ GOSUB CHECK_OPT_FILE 358$! 359$! Check To See If The File We Want To Compile Actually Exists. 360$! 361$ IF (F$SEARCH("SYS$DISK:[]RPW.C").EQS."") 362$ THEN 363$! 364$! Tell The User That The File Dosen't Exist. 365$! 366$ WRITE SYS$OUTPUT "" 367$ WRITE SYS$OUTPUT "The File RPW.C Dosen't Exist." 368$ WRITE SYS$OUTPUT "" 369$! 370$! Exit The Build. 371$! 372$ EXIT 373$! 374$! End The RPW.C File Check. 375$! 376$ ENDIF 377$! 378$! Tell The User What We Are Building. 379$! 380$ WRITE SYS$OUTPUT "Building ",EXE_DIR,"RPW.EXE" 381$! 382$! Compile The RPW Program. 383$! 384$ CC/OBJECT='OBJ_DIR'RPW.OBJ SYS$DISK:[]RPW.C 385$! 386$! Link The RPW Program. 387$! 388$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'RPW.EXE - 389 'OBJ_DIR'RPW.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION 390$! 391$! All Done, Time To Return. 392$! 393$ RETURN 394$! 395$! Compile The DES Program. 396$! 397$ DES: 398$! 399$! Check To See If We Have The Proper Libraries. 400$! 401$ GOSUB LIB_CHECK 402$! 403$! Check To See If We Have A Linker Option File. 404$! 405$ GOSUB CHECK_OPT_FILE 406$! 407$! Check To See If The File We Want To Compile Actually Exists. 408$! 409$ IF (F$SEARCH("SYS$DISK:[]DES.C").EQS."") 410$ THEN 411$! 412$! Tell The User That The File Dosen't Exist. 413$! 414$ WRITE SYS$OUTPUT "" 415$ WRITE SYS$OUTPUT "The File DES.C Dosen't Exist." 416$ WRITE SYS$OUTPUT "" 417$! 418$! Exit The Build. 419$! 420$ EXIT 421$! 422$! End The DES.C File Check. 423$! 424$ ENDIF 425$! 426$! Tell The User What We Are Building. 427$! 428$ WRITE SYS$OUTPUT "Building ",EXE_DIR,"DES.EXE" 429$! 430$! Compile The DES Program. 431$! 432$ CC/OBJECT='OBJ_DIR'DES.OBJ SYS$DISK:[]DES.C 433$ CC/OBJECT='OBJ_DIR'DES.OBJ SYS$DISK:[]CBC3_ENC.C 434$! 435$! Link The DES Program. 436$! 437$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'DES.EXE - 438 'OBJ_DIR'DES.OBJ,'OBJ_DIR'CBC3_ENC.OBJ,- 439 'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION 440$! 441$! All Done, Time To Return. 442$! 443$ RETURN 444$! 445$! Compile The DES_OPTS Program. 446$! 447$ DES_OPTS: 448$! 449$! Check To See If We Have The Proper Libraries. 450$! 451$ GOSUB LIB_CHECK 452$! 453$! Check To See If We Have A Linker Option File. 454$! 455$ GOSUB CHECK_OPT_FILE 456$! 457$! Check To See If The File We Want To Compile Actually Exists. 458$! 459$ IF (F$SEARCH("SYS$DISK:[]DES_OPTS.C").EQS."") 460$ THEN 461$! 462$! Tell The User That The File Dosen't Exist. 463$! 464$ WRITE SYS$OUTPUT "" 465$ WRITE SYS$OUTPUT "The File DES_OPTS.C Dosen't Exist." 466$ WRITE SYS$OUTPUT "" 467$! 468$! Exit The Build. 469$! 470$ EXIT 471$! 472$! End The DES_OPTS.C File Check. 473$! 474$ ENDIF 475$! 476$! Tell The User What We Are Building. 477$! 478$ WRITE SYS$OUTPUT "Building ",EXE_DIR,"DES_OPTS.EXE" 479$! 480$! Compile The DES_OPTS Program. 481$! 482$ CC/OBJECT='OBJ_DIR'DES_OPTS.OBJ SYS$DISK:[]DES_OPTS.C 483$! 484$! Link The DES_OPTS Program. 485$! 486$ LINK/'DEBUGGER'/'TRACEBACK'/CONTIGUOUS/EXE='EXE_DIR'DES_OPTS.EXE - 487 'OBJ_DIR'DES_OPTS.OBJ,'LIB_NAME'/LIBRARY,'OPT_FILE'/OPTION 488$! 489$! All Done, Time To Return. 490$! 491$ RETURN 492$ EXIT 493$! 494$! Check For The Link Option FIle. 495$! 496$ CHECK_OPT_FILE: 497$! 498$! Check To See If We Need To Make A VAX C Option File. 499$! 500$ IF (COMPILER.EQS."VAXC") 501$ THEN 502$! 503$! Check To See If We Already Have A VAX C Linker Option File. 504$! 505$ IF (F$SEARCH(OPT_FILE).EQS."") 506$ THEN 507$! 508$! We Need A VAX C Linker Option File. 509$! 510$ CREATE 'OPT_FILE' 511$DECK 512! 513! Default System Options File To Link Agianst 514! The Sharable VAX C Runtime Library. 515! 516SYS$SHARE:VAXCRTL.EXE/SHARE 517$EOD 518$! 519$! End The Option File Check. 520$! 521$ ENDIF 522$! 523$! End The VAXC Check. 524$! 525$ ENDIF 526$! 527$! Check To See If We Need A GNU C Option File. 528$! 529$ IF (COMPILER.EQS."GNUC") 530$ THEN 531$! 532$! Check To See If We Already Have A GNU C Linker Option File. 533$! 534$ IF (F$SEARCH(OPT_FILE).EQS."") 535$ THEN 536$! 537$! We Need A GNU C Linker Option File. 538$! 539$ CREATE 'OPT_FILE' 540$DECK 541! 542! Default System Options File To Link Agianst 543! The Sharable C Runtime Library. 544! 545GNU_CC:[000000]GCCLIB/LIBRARY 546SYS$SHARE:VAXCRTL/SHARE 547$EOD 548$! 549$! End The Option File Check. 550$! 551$ ENDIF 552$! 553$! End The GNU C Check. 554$! 555$ ENDIF 556$! 557$! Check To See If We Need A DEC C Option File. 558$! 559$ IF (COMPILER.EQS."DECC") 560$ THEN 561$! 562$! Check To See If We Already Have A DEC C Linker Option File. 563$! 564$ IF (F$SEARCH(OPT_FILE).EQS."") 565$ THEN 566$! 567$! Figure Out If We Need An AXP Or A VAX Linker Option File. 568$! 569$ IF (F$GETSYI("CPU").LT.128) 570$ THEN 571$! 572$! We Need A DEC C Linker Option File For VAX. 573$! 574$ CREATE 'OPT_FILE' 575$DECK 576! 577! Default System Options File To Link Agianst 578! The Sharable DEC C Runtime Library. 579! 580SYS$SHARE:DECC$SHR.EXE/SHARE 581$EOD 582$! 583$! Else... 584$! 585$ ELSE 586$! 587$! Create The AXP Linker Option File. 588$! 589$ CREATE 'OPT_FILE' 590$DECK 591! 592! Default System Options File For AXP To Link Agianst 593! The Sharable C Runtime Library. 594! 595SYS$SHARE:CMA$OPEN_LIB_SHR/SHARE 596SYS$SHARE:CMA$OPEN_RTL/SHARE 597$EOD 598$! 599$! End The VAX/AXP DEC C Option File Check. 600$! 601$ ENDIF 602$! 603$! End The Option File Search. 604$! 605$ ENDIF 606$! 607$! End The DEC C Check. 608$! 609$ ENDIF 610$! 611$! Tell The User What Linker Option File We Are Using. 612$! 613$ WRITE SYS$OUTPUT "Using Linker Option File ",OPT_FILE,"." 614$! 615$! Time To RETURN. 616$! 617$ RETURN 618$! 619$! Library Check. 620$! 621$ LIB_CHECK: 622$! 623$! Look For The Library LIBDES.OLB. 624$! 625$ IF (F$SEARCH(LIB_NAME).EQS."") 626$ THEN 627$! 628$! Tell The User We Can't Find The [.xxx.CRYPTO.DES]LIBDES.OLB Library. 629$! 630$ WRITE SYS$OUTPUT "" 631$ WRITE SYS$OUTPUT "Can't Find The Library ",LIB_NAME,"." 632$ WRITE SYS$OUTPUT "We Can't Link Without It." 633$ WRITE SYS$OUTPUT "" 634$! 635$! Since We Can't Link Without It, Exit. 636$! 637$ EXIT 638$ ENDIF 639$! 640$! Time To Return. 641$! 642$ RETURN 643$! 644$! Check The User's Options. 645$! 646$ CHECK_OPTIONS: 647$! 648$! Check To See If We Are To "Just Build Everything". 649$! 650$ IF (P1.EQS."ALL") 651$ THEN 652$! 653$! P1 Is "ALL", So Build Everything. 654$! 655$ BUILDALL = "TRUE" 656$! 657$! Else... 658$! 659$ ELSE 660$! 661$! Else, Check To See If P1 Has A Valid Arguement. 662$! 663$ IF (P1.EQS."LIBRARY").OR.(P1.EQS."DESTEST").OR.(P1.EQS."SPEED") - 664 .OR.(P1.EQS."RPW").OR.(P1.EQS."DES").OR.(P1.EQS."DES_OPTS") 665$ THEN 666$! 667$! A Valid Arguement. 668$! 669$ BUILDALL = P1 670$! 671$! Else... 672$! 673$ ELSE 674$! 675$! Tell The User We Don't Know What They Want. 676$! 677$ WRITE SYS$OUTPUT "" 678$ WRITE SYS$OUTPUT "The Option ",P1," Is Invalid. The Valid Options Are:" 679$ WRITE SYS$OUTPUT "" 680$ WRITE SYS$OUTPUT " ALL : Just Build Everything. 681$ WRITE SYS$OUTPUT " LIBRARY : To Compile Just The [.xxx.EXE.CRYPTO.DES]LIBDES.OLB Library." 682$ WRITE SYS$OUTPUT " DESTEST : To Compile Just The [.xxx.EXE.CRYPTO.DES]DESTEST.EXE Program." 683$ WRITE SYS$OUTPUT " SPEED : To Compile Just The [.xxx.EXE.CRYPTO.DES]SPEED.EXE Program." 684$ WRITE SYS$OUTPUT " RPW : To Compile Just The [.xxx.EXE.CRYPTO.DES]RPW.EXE Program." 685$ WRITE SYS$OUTPUT " DES : To Compile Just The [.xxx.EXE.CRYPTO.DES]DES.EXE Program." 686$ WRITE SYS$OUTPUT " DES_OPTS : To Compile Just The [.xxx.EXE.CRYTPO.DES]DES_OPTS.EXE Program." 687$ WRITE SYS$OUTPUT "" 688$ WRITE SYS$OUTPUT " Where 'xxx' Stands For: " 689$ WRITE SYS$OUTPUT "" 690$ WRITE SYS$OUTPUT " AXP : Alpha Architecture." 691$ WRITE SYS$OUTPUT " VAX : VAX Architecture." 692$ WRITE SYS$OUTPUT "" 693$! 694$! Time To EXIT. 695$! 696$ EXIT 697$! 698$! End The Valid Arguement Check. 699$! 700$ ENDIF 701$! 702$! End The P1 Check. 703$! 704$ ENDIF 705$! 706$! Check To See If We Are To Compile Without Debugger Information. 707$! 708$ IF (P2.EQS."NODEBUG") 709$ THEN 710$! 711$! P2 Is Blank, So Compile Without Debugger Information. 712$! 713$ DEBUGGER = "NODEBUG" 714$ TRACEBACK = "NOTRACEBACK" 715$ GCC_OPTIMIZE = "OPTIMIZE" 716$ CC_OPTIMIZE = "OPTIMIZE" 717$ WRITE SYS$OUTPUT "No Debugger Information Will Be Produced During Compile." 718$ WRITE SYS$OUTPUT "Compiling With Compiler Optimization." 719$! 720$! Else... 721$! 722$ ELSE 723$! 724$! Check To See If We Are To Compile With Debugger Information. 725$! 726$ IF (P2.EQS."DEBUG") 727$ THEN 728$! 729$! Compile With Debugger Information. 730$! 731$ DEBUGGER = "DEBUG" 732$ TRACEBACK = "TRACEBACK" 733$ GCC_OPTIMIZE = "NOOPTIMIZE" 734$ CC_OPTIMIZE = "NOOPTIMIZE" 735$ WRITE SYS$OUTPUT "Debugger Information Will Be Produced During Compile." 736$ WRITE SYS$OUTPUT "Compiling Without Compiler Optimization." 737$! 738$! Else... 739$! 740$ ELSE 741$! 742$! Tell The User Entered An Invalid Option.. 743$! 744$ WRITE SYS$OUTPUT "" 745$ WRITE SYS$OUTPUT "The Option ",P2," Is Invalid. The Valid Options Are:" 746$ WRITE SYS$OUTPUT "" 747$ WRITE SYS$OUTPUT " DEBUG : Compile With The Debugger Information." 748$ WRITE SYS$OUTPUT " NODEBUG : Compile Without The Debugger Information." 749$ WRITE SYS$OUTPUT "" 750$! 751$! Time To EXIT. 752$! 753$ EXIT 754$! 755$! End The Valid Arguement Check. 756$! 757$ ENDIF 758$! 759$! End The P2 Check. 760$! 761$ ENDIF 762$! 763$! Special Threads For OpenVMS v7.1 Or Later. 764$! 765$! Written By: Richard Levitte 766$! richard@levitte.org 767$! 768$! 769$! Check To See If We Have A Option For P4. 770$! 771$ IF (P4.EQS."") 772$ THEN 773$! 774$! Get The Version Of VMS We Are Using. 775$! 776$ ISSEVEN := "" 777$ TMP = F$ELEMENT(0,"-",F$EXTRACT(1,4,F$GETSYI("VERSION"))) 778$ TMP = F$INTEGER(F$ELEMENT(0,".",TMP)+F$ELEMENT(1,".",TMP)) 779$! 780$! Check To See If The VMS Version Is v7.1 Or Later. 781$! 782$ IF (TMP.GE.71) 783$ THEN 784$! 785$! We Have OpenVMS v7.1 Or Later, So Use The Special Threads. 786$! 787$ ISSEVEN := ,PTHREAD_USE_D4 788$! 789$! End The VMS Version Check. 790$! 791$ ENDIF 792$! 793$! End The P4 Check. 794$! 795$ ENDIF 796$! 797$! Check To See If P3 Is Blank. 798$! 799$ IF (P3.EQS."") 800$ THEN 801$! 802$! O.K., The User Didn't Specify A Compiler, Let's Try To 803$! Find Out Which One To Use. 804$! 805$! Check To See If We Have GNU C. 806$! 807$ IF (F$TRNLNM("GNU_CC").NES."") 808$ THEN 809$! 810$! Looks Like GNUC, Set To Use GNUC. 811$! 812$ P3 = "GNUC" 813$! 814$! Else... 815$! 816$ ELSE 817$! 818$! Check To See If We Have VAXC Or DECC. 819$! 820$ IF (ARCH.EQS."AXP").OR.(F$TRNLNM("DECC$CC_DEFAULT").NES."") 821$ THEN 822$! 823$! Looks Like DECC, Set To Use DECC. 824$! 825$ P3 = "DECC" 826$! 827$! Else... 828$! 829$ ELSE 830$! 831$! Looks Like VAXC, Set To Use VAXC. 832$! 833$ P3 = "VAXC" 834$! 835$! End The VAXC Compiler Check. 836$! 837$ ENDIF 838$! 839$! End The DECC & VAXC Compiler Check. 840$! 841$ ENDIF 842$! 843$! End The Compiler Check. 844$! 845$ ENDIF 846$! 847$! Set Up Initial CC Definitions, Possibly With User Ones 848$! 849$ CCDEFS = "" 850$ IF F$TYPE(USER_CCDEFS) .NES. "" THEN CCDEFS = USER_CCDEFS 851$ CCEXTRAFLAGS = "" 852$ IF F$TYPE(USER_CCFLAGS) .NES. "" THEN CCEXTRAFLAGS = USER_CCFLAGS 853$ CCDISABLEWARNINGS = "" 854$ IF F$TYPE(USER_CCDISABLEWARNINGS) .NES. "" THEN - 855 CCDISABLEWARNINGS = USER_CCDISABLEWARNINGS 856$! 857$! Check To See If The User Entered A Valid Paramter. 858$! 859$ IF (P3.EQS."VAXC").OR.(P3.EQS."DECC").OR.(P3.EQS."GNUC") 860$ THEN 861$! 862$! Check To See If The User Wanted DECC. 863$! 864$ IF (P3.EQS."DECC") 865$ THEN 866$! 867$! Looks Like DECC, Set To Use DECC. 868$! 869$ COMPILER = "DECC" 870$! 871$! Tell The User We Are Using DECC. 872$! 873$ WRITE SYS$OUTPUT "Using DECC 'C' Compiler." 874$! 875$! Use DECC... 876$! 877$ CC = "CC" 878$ IF ARCH.EQS."VAX" .AND. F$TRNLNM("DECC$CC_DEFAULT").NES."/DECC" - 879 THEN CC = "CC/DECC" 880$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/STANDARD=ANSI89" + - 881 "/NOLIST/PREFIX=ALL" + CCEXTRAFLAGS 882$! 883$! Define The Linker Options File Name. 884$! 885$ OPT_FILE = "SYS$DISK:[]VAX_DECC_OPTIONS.OPT" 886$! 887$! End DECC Check. 888$! 889$ ENDIF 890$! 891$! Check To See If We Are To Use VAXC. 892$! 893$ IF (P3.EQS."VAXC") 894$ THEN 895$! 896$! Looks Like VAXC, Set To Use VAXC. 897$! 898$ COMPILER = "VAXC" 899$! 900$! Tell The User We Are Using VAX C. 901$! 902$ WRITE SYS$OUTPUT "Using VAXC 'C' Compiler." 903$! 904$! Compile Using VAXC. 905$! 906$ CC = "CC" 907$ IF ARCH.EQS."AXP" 908$ THEN 909$ WRITE SYS$OUTPUT "There is no VAX C on Alpha!" 910$ EXIT 911$ ENDIF 912$ IF F$TRNLNM("DECC$CC_DEFAULT").EQS."/DECC" THEN CC = "CC/VAXC" 913$ CC = CC + "/''CC_OPTIMIZE'/''DEBUGGER'/NOLIST" + CCEXTRAFLAGS 914$ CCDEFS = """VAXC""," + CCDEFS 915$! 916$! Define <sys> As SYS$COMMON:[SYSLIB] 917$! 918$ DEFINE/NOLOG SYS SYS$COMMON:[SYSLIB] 919$! 920$! Define The Linker Options File Name. 921$! 922$ OPT_FILE = "SYS$DISK:[]VAX_VAXC_OPTIONS.OPT" 923$! 924$! End VAXC Check 925$! 926$ ENDIF 927$! 928$! Check To See If We Are To Use GNU C. 929$! 930$ IF (P3.EQS."GNUC") 931$ THEN 932$! 933$! Looks Like GNUC, Set To Use GNUC. 934$! 935$ COMPILER = "GNUC" 936$! 937$! Tell The User We Are Using GNUC. 938$! 939$ WRITE SYS$OUTPUT "Using GNU 'C' Compiler." 940$! 941$! Use GNU C... 942$! 943$ CC = "GCC/NOCASE_HACK/''GCC_OPTIMIZE'/''DEBUGGER'/NOLIST" + CCEXTRAFLAGS 944$! 945$! Define The Linker Options File Name. 946$! 947$ OPT_FILE = "SYS$DISK:[]VAX_GNUC_OPTIONS.OPT" 948$! 949$! End The GNU C Check. 950$! 951$ ENDIF 952$! 953$! Set up default defines 954$! 955$ CCDEFS = """FLAT_INC=1""," + CCDEFS 956$! 957$! Finish up the definition of CC. 958$! 959$ IF COMPILER .EQS. "DECC" 960$ THEN 961$ IF CCDISABLEWARNINGS .EQS. "" 962$ THEN 963$ CC4DISABLEWARNINGS = "DOLLARID" 964$ ELSE 965$ CC4DISABLEWARNINGS = CCDISABLEWARNINGS + ",DOLLARID" 966$ CCDISABLEWARNINGS = "/WARNING=(DISABLE=(" + CCDISABLEWARNINGS + "))" 967$ ENDIF 968$ CC4DISABLEWARNINGS = "/WARNING=(DISABLE=(" + CC4DISABLEWARNINGS + "))" 969$ ELSE 970$ CCDISABLEWARNINGS = "" 971$ CC4DISABLEWARNINGS = "" 972$ ENDIF 973$ CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS 974$! 975$! Show user the result 976$! 977$ WRITE SYS$OUTPUT "Main Compiling Command: ",CC 978$! 979$! Else The User Entered An Invalid Arguement. 980$! 981$ ELSE 982$! 983$! Tell The User We Don't Know What They Want. 984$! 985$ WRITE SYS$OUTPUT "" 986$ WRITE SYS$OUTPUT "The Option ",P3," Is Invalid. The Valid Options Are:" 987$ WRITE SYS$OUTPUT "" 988$ WRITE SYS$OUTPUT " VAXC : To Compile With VAX C." 989$ WRITE SYS$OUTPUT " DECC : To Compile With DEC C." 990$ WRITE SYS$OUTPUT " GNUC : To Compile With GNU C." 991$ WRITE SYS$OUTPUT "" 992$! 993$! Time To EXIT. 994$! 995$ EXIT 996$! 997$! End The P3 Check. 998$! 999$ ENDIF 1000$! 1001$! Time To RETURN... 1002$! 1003$ RETURN 1004