.TITLE GETCMD .IDENT /01/ .PSECT CODE,RO ; ; VERSION 01 ; ; TOM GETZINGER 19-SEP-80 ; ; THIS MODULE GETS THE NEXT COMMAND. IT EXITS IF THERE IS NONE. ; ; LOCAL DATA ; .PSECT RWDATA,RW,D MNTBAS: .BLKW 1 ; BASE BLOCK # OF MNT FOR LIBRARY FILES .PSECT CODE .MCALL CSI$1 CSI$2 EXIT$S GET$S GCML$ .MCALL OPEN$ OPNT$D GETCMD:: MOV #S.LABL,SWITCH ; SET DEFAULT SWITCH VALUES GCML$ #GCLBLK ; GET THE COMMAND LINE BCC 2$ JMP 200$ ; ERROR 2$: CSI$1 #CSIBLK,GCLBLK+G.CMLD+2,GCLBLK+G.CMLD BCS 15$ ; ERROR CSI$2 ,OUTPUT,#SWTOUT ; GET THE OUTPUT FILE NAME BCS 15$ ; ERROR OPEN$ #FDBOUT ; OPEN THE OUTPUT FILE BCS 15$ ; ERROR BIT #S.LABL,SWITCH ; DO THEY WANT LABELS? BEQ 10$ ; NO CLR CSIBLK+34 ; YES, MAKE SURE CSI DOESN'T USE DEFAULTS CLR CSIBLK+36 ; FROM THE OUTPUT FILE-SPEC CLR CSIBLK+44 CLR CSIBLK+46 CSI$2 #CSIBLK,OUTPUT,#0 ; YES, SO GET THE TEMP FILE NAME BCS 15$ ; ERROR OPNT$D #FDBTMP ; OPEN THE TEMPORARY FILE BCS 15$ ; ERROR 10$: CSI$2 #CSIBLK,INPUT,#SWTIN ; GET THE INPUT FILE NAME BCS 15$ ; ERROR MOV #DFNOBJ,R1 ; ASSUME WE WANT TO OPEN A .OBJ FILE BIT #S.LIBR,SWITCH ; IS THAT TRUE? BEQ 13$ ; YES MOV #DFNOLB,R1 ; NO, SO WE WANT TO OPEN A .OLB FILE 13$: OPEN$ #FDBIN,,,,R1 ; OPEN THE INPUT FILE 15$: BCS 220$ ; ERROR BIT #S.LIBR,SWITCH ; IS THIS A LIBRARY FILE? BEQ 100$ ; NO CLR R1 ; YES, SETUP FOR READING THE FIRST BLOCK MOV #1,R2 CLR R3 CALL .POINT ; READ THE LIBRARY HEADER BCS 220$ ; ERROR MOV F.NREC(R0),R1 ; GET BUFFER ADDRESS MOV 34(R1),MNTBAS ; GET MNT BASE BLOCK NUMBER MOV 36(R1),R5 ; GET # OF MNT ENTRIES ALLOCATED SUB 40(R1),R5 ; - FREE = # OF MNT ENTRIES IN USE MOV #MODNAM,R0 ; CONVERT THE MODULE NAME TO RAD50 MOV R0,R4 CALL $CAT5 MOV R1,(R4) BCC 18$ CLR 2(R4) BR 20$ 18$: CALL $CAT5 MOV R1,2(R4) 20$: MOV #FDBIN,R0 25$: CLR R1 ; READ IN THE NEXT BLOCK OF MNT ENTRIES MOV MNTBAS,R2 CLR R3 CALL .POINT BCS 220$ ; ERROR MOV F.NREC(R0),R3 ; GET BUFFER ADDRESS MOV #64.,R2 ; COUNT OF MNT ENTRIES IN THE BLOCK 30$: CMP (R3),(R4) ; DO THE MODULE NAMES MATCH? BNE 40$ ; NO CMP 2(R3),2(R4) ; MAYBE BEQ 50$ ; YES 40$: DEC R5 ; NO, ARE THERE ANY MORE TO CHECK? BEQ 220$ ; NO ADD #10,R3 ; YES, SKIP TO THE NEXT ONE SOB R2,30$ ; IF THERE ARE MORE IN THE BLOCK, CHECK THEM INC MNTBAS ; THERE AREN'T ANY MORE BR 25$ ; SO GO CHECK THE NEXT BLOCK 50$: CLR R1 ; POINT TO THE MODULE HEADER MOV 4(R3),R2 MOV 6(R3),R3 CALL .POINT BCS 220$ ; ERROR MOVB #R.VAR,F.RTYP(R0) ; SET VARIABLE LENGT@ RECORD FLAG GET$S ; SKIP OVER THE MODULE HEADER BCS 220$ 100$: CALL .MARK ; MARK THE INPUT FILE MOV R1,VBN ; SAVE VIRTUAL BLOCK NUMBER MOV R2,VBN+2 MOV R3,BYTNUM ; SAVE STARTING BYTE NUMBER RETURN ; AND RETURN 200$: CMPB #GE.EOF,G.ERR(R0) ; EOF ON COMMAND FILE? BEQ 210$ ; YES, SO EXIT CMPB #GE.IOR,G.ERR(R0) ; I/O ERROR ON COMMAND FILE? BNE 220$ ; NO TRAP CMDIOR ; YES, SO OUTPUT ERROR MESSAGE 210$: EXIT$S ; AND EXIT 220$: TRAP SYNTAX ; COMMAND SYNTAX ERROR JMP GETCMD ; TRY AGAIN .END