SV1 29 AMONTHSRC BEEPER001 EDITCDSRC GETW@@SRC INIT@@001 INITDS001 LEGOP@SRC LETTERSRC LEVEL@SRC LISTN@SRC LJI@@@SRC LOGON@001 LOWER@001 NEWPAGSRC POPUP@SRC PUTL@@SRC PUTW@@SRC READI@001 RESET@SRC RJI@@@SRC SETUIC001 SPECS@SRC SPRINTSRC SRCSPCSRC SYSDAY001 TRIM@@SRC WRITEI001 WRITEL001 YES@@@SRC [\]. AMONTHSRC C AMONTH SRC AMONTH SRC C 26 FEB 74 26 FEB 74 C FUNCTION AMONTH(I) C C C PURPOSE: C C TO RETURN A 3 CHARACTER ABBREVIATION OF THE "I"-TH MONTH C OF THE YEAR. IF THE NUMBER IS ILLEGAL, A BLANK IS RETURNED C DIMENSION ABR(13) C DATA ABR /3HJAN,3HFEB,3HMAR,3HAPR,3HMAY,3HJUN, 1 3HJLY,3HAUG,3HSEP,3HOCT,3HNOV,3HDEC,3H / C C......................................................................... C J = I IF (J.LE.0.OR.J.GE.13) J = 13 AMONTH = ABR(J) RETURN END [\]. BEEPER001 .TITLE BEEPER "BEEPS" THE VT05 VIA LTS. / VT05=4 MODE=3 /USE IMAGE MODE WRITE / .GLOBL BEEPER BEEPER 0 /ENTRY POINT .WAIT VT05 .WRITE VT05,MODE,BUFFER,2 .WAIT VT05 JMP* BEEPER / BUFFER 3002 0000 0000 0007 0177 0177 / .END [\]. EDITCDSRC C EDITCD SRC EDITCD SRC C 17 FEB 74 17 FEB 74 C SUBROUTINE EDITCD C C CARD EDITOR FOR SPECS C C THE EDITOR WILL ACCEPT THE FOLLOWING COMMANDS C D LINE# - DELETE THIS LINE NUMBER C - LINE# - CONTINUE DELETING THROUGH THIS NUMBER C E - END OF INPUT DECK C I LINE# - INSERT THIS CARD AFTER LINE NUMBER C - CONTINUE INSERTING C R LINE# - REPLACE THE LINE WITH THIS CARD C C IN ADDITION, THE CARDS CAN BE INTERPRETED FOR UPPER AND C LOWER CASE CHARACTERS. ALL CHARACTERS ARE ASSUMED TO BE C LOWER CASE UNLESS A "SHIFT" CHARACTER IS ENCOUNTERED. THE C SHIFT CHARACTERS USED ARE C _ : SHIFT THE NEXT CHARACTER (SHIFT) C < : SHIFT LOCK C > : SHIFT UNLOCK C C C IMPLICIT INTEGER (A-Z) C ******** ******* ***** C REAL REPLY,BLANKS,TEMPS REAL EDITF(2),ORIGF(2),TEMPF(2),RNAME(2) C LOGICAL COPY,INSERT,GOOD LOGICAL LEGNUM,LEGOP,KEEPIT,YES C DIMENSION NULINE(85),LINE(85),CARD(85),EXTRA(85) C COMMON /SLOTS/ IDK1,IDK2,LTA,ICD,LPS C C ASCII CONTROL CHARACTERS DATA BLANK,CR,EOF /#040,#015,#005/ DATA UP,DN,SH /#074,#076, #137/ DATA I1,RE,END /#111,#122,#105/ DATA D1,D2 /#104,#055/ C C FILE CONTROL TEXT DATA BLANKS,TEMPS /5H ,5H.TEMP/ DATA EDITF(2),ORIGF(2),TEMPF(2) /3*4H SPC/ C C......................................................................... C TEST FUNCTIONS C OPERATION CODES: C LEGOP(X) = .T. IF X IS ONE OF (BLANK,<,>,D,E,I,R,-) C C NUMBERS LEGNUM(NO) = ((#60.LE.NO).AND.(NO.LE.#71)).OR.(NO.EQ.BLANK) C KEEP THIS LINE KEEPIT(NO) = (NO.LT.LPOINT.AND.COPY).OR.(CODE.EQ.I1) C.................................................................. C C SET-UP SECTION. C IERR = LPS C FIND AND INITIALIZE FILES C 100 CONTINUE WRITE (LTA,101) 101 FORMAT ("1 EDIT SPEC FILE") C C INPUT FILE WRITE (LTA,105) 105 FORMAT ("0 WHAT IS THE NAME OF THE ORIGINAL SPEC FILE?") C 110 READ (LTA,115) REPLY 115 FORMAT (A5) IF (REPLY.EQ.BLANKS) GO TO 900 C ORIGF(1) = REPLY CALL FSTAT(IDK1,ORIGF,ISIT) CALL CLOSE(IDK1) IF (ISIT) GO TO 120 C ..NO INPUT FILE FOUND CALL BEEPER WRITE (LTA,116) 116 FORMAT (" FILE NOT FOUND. PLEASE RETYPE NAME") GO TO 110 C C OUTPUT FILE NAME 120 CONTINUE WRITE (LTA,125) 125 FORMAT ("0 WHAT IS THE NAME OF THE NEW SPEC FILE?") READ (LTA,115) REPLY IF (REPLY.EQ.BLANKS) REPLY = TEMPS TEMPF(1) = REPLY C C EDIT DECK FILE NAME 130 CONTINUE WRITE (LTA,135) 135 FORMAT ("0 WHAT IS THE NAME OF THE EDIT SEQUENCE?") 140 READ (LTA,115) REPLY IF (REPLY.EQ.BLANKS) GO TO 900 EDITF(1) = REPLY CALL FSTAT(ICD,EDITF,ISIT) CALL CLOSE(ICD) IF (ISIT) GO TO 150 C ..NO EDIT FILE FOUND CALL BEEPER WRITE (LTA,116) GO TO 140 C C INITIALIZE FILES AND POINTERS 150 CONTINUE CALL INIT(IDK1,0) CALL SEEK(IDK1,ORIGF) C CALL INIT(ICD,0) CALL SEEK(ICD ,EDITF) C CALL INIT(IDK2,1) CALL ENTER(IDK2,TEMPF) C LNUMBR = 0 C WRITE (LTA,155) 155 FORMAT ("0 EDIT IN PROGRESS. PLEASE WAIT") C C C CARD INPUT SECTION C 200 CONTINUE C C CLEAR BUFFERS CALL RESET(CARD,81) CALL RESET(NULINE,85) C C ARE THE CARDS FINISHED? IF (CODE.EQ.END) GO TO 400 C READ A CARD CALL READI(ICD,CARD) HEADER = POPUP(CARD) WCOUNT = POPUP(CARD) CALL TRIM(CARD) C ..COPY THE CARD IMAGE INTO EXTRA FOR ERROR MESSAGE DO 205 J=1,81 EXTRA(J) = CARD(J) 205 CONTINUE C C GET THE OP-CODE (CHAR #1) CODE = POPUP(CARD) C TEST FOR LEGALITY IF (LEGOP(CODE)) GO TO 220 C ..BAD OP-CODE WRITE (IERR,210) 210 FORMAT ("0 THE FOLLOWING CARD HAS A BAD EDIT CODE") GO TO 380 C C DECODE THE INTEGER FIELD INTO A NUMBER (CHARS #2 THROUGH #8) 220 CONTINUE LPOINT = 0 GOOD = .TRUE. DO 230 J=2,7 CAR = POPUP(CARD) IF (CAR.EQ.CR) GO TO 231 GOOD = GOOD.AND.LEGNUM(CAR) IF (CAR.NE.BLANK .AND. GOOD) LPOINT = 10*LPOINT + (CAR - #60) 230 CONTINUE C WAS THE NUMBER "GOOD"? 231 IF (GOOD) GO TO 240 C C ..BAD NUMERIC CODE IN THIS CARD C WRITE (IERR,235) 235 FORMAT (" THE FOLLOWING CARD HAS A NON-" 1 "NUMERIC CHARACTER IN THE LINE-NO.") GO TO 380 C C COPY THE CARD IMAGE INTO THE NULINE BUFFER 240 CONTINUE K = 0 DO 250 J=8,81 CAR = POPUP(CARD) IF (CAR.EQ.UP) CAR = 0 IF (CAR.EQ.DN) CAR = -1 IF (CAR.NE.SH) CALL LOWER(CAR) IF (CAR.EQ.SH) CAR = POPUP(CARD) IF (CAR.LE. 0) GO TO 250 K = K + 1 NULINE(K) = CAR IF (CAR.EQ.CR) GO TO 260 250 CONTINUE C C DONE THIS CARD 260 CONTINUE C C CHECK THE CARD FOR ILLEGAL ERROR COMBINATIONS. 300 CONTINUE C C THE PROCEDURE IS TO SKIP OVER THE CODE FOR THAT COMBINATION C IF THE CONDITIONS FOR LEGALITY ARE NOT MET. C C DELETE SEQUENCE C 1. FIRST CARD 310 IF (.NOT.(CODE.EQ.D1.AND.LPOINT.GT.LNUMBR)) GO TO 320 COPY = .TRUE. INSERT = .FALSE. LAST = CODE GO TO 400 C C 2. SECOND CARD 320 IF (.NOT.(LAST.EQ.D1.AND.(CODE.EQ.D2.AND.LPOINT.GT.LNUMBR))) 1 GO TO 330 COPY = .FALSE. INSERT = .FALSE. LAST = CODE GO TO 400 C C INSERT SEQUENCE C 1. FIRST CARD 330 IF (.NOT.(CODE.EQ.I1.AND.LPOINT.GE.LNUMBR)) GO TO 340 COPY = .TRUE. INSERT = .TRUE. LAST = CODE GO TO 400 C C 2. SECOND CARD 340 IF (.NOT.(LAST.EQ.I1.AND.(CODE.EQ.BLANK.AND.LPOINT.EQ.0))) 1 GO TO 350 COPY= .TRUE. INSERT = .TRUE. LAST = I1 GO TO 400 C C REPLACING A LINE 350 CONTINUE IF (.NOT.(CODE.EQ.RE.AND.LPOINT.GT.LNUMBR)) GO TO 360 COPY = .TRUE. INSERT = .TRUE. LAST = CODE GO TO 400 C C CLOSING THE FILE 360 IF (.NOT.(CODE.EQ.END)) GO TO 370 COPY = .TRUE. INSERT = .FALSE. LPOINT = #377777 GO TO 400 C C C ERROR SECTION 370 CONTINUE WRITE (IERR,375) 375 FORMAT (" THE FOLLOWING CARD IS OUT OF SEQUENCE") C 380 CONTINUE WRITE (IERR,381) CODE,LPOINT,LNUMBR 381 FORMAT (/2X,"CODE=",O3," LPOINT=",I4," LNUMBR=",I4) CALL WRITEI(IERR,EXTRA) WRITE (IERR,385) 385 FORMAT (1X,8("_________I")) GO TO 200 C C C FILE MANIPULATION SECTION 400 CONTINUE C C IS THE FILE CORRECTLY POSITIONED IF ((DKFLAG.EQ.EOF).OR.(LNUMBR.GE.LPOINT)) GO TO 420 C OTHERWISE POSITION THE FILE DOING ALL THE COPIES NEEDED CALL READI(IDK1,LINE) STRUCTURE PLANE FRAME DEMO RUN TYPE PLANE FRAME NUMBER OF JOINTS 11 NUMBER OF MEMBERS 12 NUMBER OF SUPPORTS 4 NUMBER OF LOADINGS 3 JOINT COORDINATES 1 0. 0. 0. S 2 192. 0. 0. S 3 384. 0. 0. S 4 576. 0. 0. S 5 0. 240. 6 192. 240. 7 384. 240. 8 576. 240. 9 0. 432. 10 192. 432. 11 384. 432. JOINT RELEASES 2 MOMENT Z MEMBER PROPERTIES PRISMATIC 1 THRU 4 25. 0. 0. 0. 0. 900. 5 20. 0. 0. 0. 0. 600. 6 20. 0. 0. 0. 0. 600. 7 15. 0. 0. 0. 0. 400. 8 14. 0. 0. 0. 0. 360. [\]. GETW@@SRC C GETW SRC GETW SRC C 21 FEB 74 21 FEB 74 C................................................................. SUBROUTINE GETW(LINE,N) C C PURPOSE C "GETW" GETS THE NEXT WORD FROM THE TEXT BUFFER "INLINE" AND C RETURNS IT TO THE USER IN "LINE". THE VARIABLE "N" HAS THE C FOLLOWING VALUES C 1. N>0 - "N" IS THE NUMBER OF CHARACTERS IN THIS WORD, C 2. N<0 - "N" IS TO BE INTREPRETED AS A CONTROL CHARACTER C FOUND WHEN "GETW" HAD TO READ IN A NEW "LINE" C 3. N=-999 - EOF ON INPUT. C C C DECLARATION SECTION IMPLICIT INTEGER (A-Z) C DIMENSION INLINE(85),LINE(85) C COMMON /SLOTS/ IDK1,IDK2,LTA,ICD,LPS C C DATA PERIOD,COMMA,BLANK,CR /46,44,32,13/ DATA WORDCT /0/ C............... C CHECK TO SEE IF THE INPUT LINE IS EMPTY; IF SO GET A NEW LINE. IF (WORDCT.EQ.0) GO TO 30 C ........ C POPUP THE INPUT LINE TO GET THE NEX WORD INCLUDING THE TRAILING C BLANK AND PUNCTUATION MARKS 1 CONTINUE DO 5 J=1,85 N = J CAR = POPUP(INLINE) IF (CAR.EQ.CR) GO TO 20 LINE(N) = CAR IF (CAR.EQ.BLANK) RETURN 5 CONTINUE C............... C SETUP TO READ IN A NEW BUFFER LINE 20 CONTINUE WORDCT = 0 LINE(N) = BLANK IF (N.GT.1) RETURN C NOW READ IN THE NEW BUFFER 30 CONTINUE CALL RESET(INLINE,85) CALL READI(IDK1,INLINE) C GET EOF FLAG AND WORD COUNT. HEADER = POPUP(INLINE) WORDCT = POPUP(INLINE) IF (HEADER.NE.5) GO TO 40 C EOF ENCOUNTERED. WORDCT = 0 N = -999 RETURN C ....... 40 CONTINUE C CHECK FOR A CONTROL CHARACTER AT THE HEAD OF THE LINE K1 = POPUP(INLINE) K2 = POPUP(INLINE) IF (K1.EQ.CR) GO TO 30 IF (K1.EQ.BLANK) GO TO 1 C A CONTROL CHARACTER WAS ENCOUNTERED LINE(1) = LINE(2) = BLANK N = -K1 RETURN END [\]. INIT@@001 .TITLE SUBROUTINE INIT(UNIT,IOSW) 5 FEB 1974 .GLOBL INIT,.DA / / THIS MACRO ROUTINE FORCES A UNIT TO BE INITIALIZED SINCE / THE FORTRAN "SEEK" AND "ENTER" ROUTINEDS DON'T DO IT. / SLOT=0 /DUMMY ARGUMENT FOR SLOT NUMBER MODE=0 /DUMMY ARGUMENT FOR I-O SWITCH / INIT 0 /ENTRY JMS* .DA JMP .+2+1 UNIT 0 IOSW 0 /=0 FOR READ, =1 FOR WRITE LAC* UNIT /GET UNIT NUMBER AND (777 /MASK IT FOR CAL SLOT DAC WAIT LAC* IOSW /GET THE DIRECTION SWITCH AND (1 /MASK IT SWHA /MOVE IT TO 1000'S POSITION XOR WAIT /OR IN THE UNIT DAC INIT1 / INIT1 .INIT SLOT,MODE,RETURN WAIT .WAIT SLOT RETURN JMP* INIT .END [\]. INITDS001 .TITLE INITDS 5 FEB 1974 .GLOBL INITDS /THIS ROUTINE INITIALIZES THE DAT SLOTS INPUT=1 LIST=6 READ=0 WRITE=1 /............... .IODEV INPUT,LIST INITDS 0 .INIT INPUT,READ,RETURN .WAIT INPUT .INIT LIST,WRITE,RETURN .WAIT LIST RETURN JMP* INITDS .END [\]. LEGOP@SRC C LEGOP SRC LEGOP SRC C 19 FEB 74 19 FEB 74 C LOGICAL FUNCTION LEGOP(IT) C C TESTS "IT" TO SEE IF IT IS A LEGAL OPERATION CODE FOR THE C EDIT CARDS. THE LEGAL CHARACTERS ARE C "-" : SECOND PART OF DELETION C "D" : FIRST PART OF DELETION C "E" : END OF CARDS C "I" : INSERT ONE CARD C "R" : REPLACE C " " : CONTINUE INSERTION C C IMPLICIT INTEGER (A-Z) C ******** ******* ***** C C ASCII CONTROL CHARACTERS DATA BLANK,CR,EOF /#040,#015,#005/ DATA UP,DN,SH /#074,#076, #134/ DATA I1,RE,END /#111,#122,#105/ DATA D1,D2 /#104,#055/ C C......................................................................... C OPERATION CODES: LEGOP = (IT.EQ.BLANK).OR.(IT.EQ.D1).OR.(IT.EQ.D2).OR. 1 (IT.EQ.I1).OR.(IT.EQ.RE).OR.(IT.EQ.END) C RETURN END [\]. LETTERSRC C LETTER SRC LETTER SRC C 11 NOV 1973 11 NOV 1973 C................................................................ INTEGER FUNCTION LETTER(N) C C PURPOSE C LETTER CONVERTS AN INTEGER (1 - 26) TO AN ALPHABETICAL CHARACTER C 1. IF N > 0, THE CHARACTER IS AN UPPERCASE ONE C 2. IF N< 0, THE CHARACTER IS A LOWER CASE ONE C 3. IF ABS(N) > 26, A "*" IS RETURNED. C............... K = 42 IF (N.GT.0.AND.N.LE.26) K = N + 64 IF (N.LT.0.AND.N.GE.-26) K = 96 - N LETTER = K RETURN END [\]. LEVEL@SRC C LEVEL SRC LEVEL SRC C 10 NOV 73 10 NOV 73 C.................................................................. C C PURPOSE: C 1. FIND THE CONTROL CHARACTER IN THE INPUT LINE C 2. CONVERT IT TO THE TEXT LEVEL INDICATOR C C LEVEL CONVERTION TABLE C ----------------------------------------- C LEVEL CODE TEXT C 2 $ S SECTION C 3 $ A ARTICLE C 4 0 PARAGRAPH C 5 1 AUB-PARAGRAPH C 6 2 SUB-SUB PARAGRAPH C 7 3 SUB-SUB-SUB-PARAGRAPH C 8 4 SUB-SUB-SUB-SUB-PARAHRAPH C 9 @ NO SHUFFLE C 10 * NOTES FOR WORK SHEET C ----------------------------------------- C C C ERRORS: C 1. AN UNRECOGNIZED CC GIVES A LEVEL = 99 C C................................................................... INTEGER FUNCTION LEVEL(K) DIMENSION LINE(85) C............... IF (K.NE.36) GO TO 10 CALL GETW(LINE,N) IF (LINE(1).EQ.83) LET = 2 IF (LINE(1).EQ.65) LET = 3 LEVEL = LET RETURN C............... 10 CONTINUE C THE CONTROL CHARACTER IS OTHER THAN A "$" LET = K IF (LET.EQ.48) LET = 4 IF (LET.EQ.49) LET = 5 IF (LET.EQ.50) LET = 6 IF (LET.EQ.51) LET = 7 IF (LET.EQ.52) LET = 8 IF (LET.EQ.92) LET = 9 IF (LET.EQ.64) LET = 9 IF (LET.EQ.42) LET = 10 IF (LET.GE.11) LET = 99 LEVEL = LET RETURN END [\]. LISTN@SRC C LISTN SRC LISTN SRC C 24 FEB 74 24 FEB 74 C SUBROUTINE LISTN C C GENERATE A DOUBLE-SPACED LISTING WITH LINE NUMBERS FOR THE C WORKING SPECS C IMPLICIT INTEGER (A-Z) C ******** ******* ***** C LOGICAL YES REAL REPLY,BLANKS,AMONTH,AMO REAL ORIGF(2),TEMPF(2) C DIMENSION INLINE(85),NULINE(100),NFIELD(6) C COMMON /SLOTS/ IDK1,IDK2,LTA,ICD,LPS C EQUIVALENCE (NULINE(2),NFIELD(1)) C C CONTROL CHARACTERS DATA EOF /#005/ DATA DBL /#021/ DATA CR /#015/ C C TEXT NAMES DATA BLANKS /5H / DATA ORIGF(2),TEMPF(2) /4H SPC,4H LST/ C.................................................................. C 100 WRITE (LTA,101) 101 FORMAT ("1 SPECS - LIST WITH LINE NUMBERS") C C GET THE FILE NAME WRITE (LTA,105) 105 FORMAT ("0 WHAT IS THE NAME OF THE INPUT FILE?") C 110 READ (LTA,115) REPLY 115 FORMAT (A5) IF (REPLY.EQ.BLANKS) GO TO 900 C TEMPF(1) = ORIGF(1) = REPLY CALL FSTAT(IDK1,ORIGF,ISIT) CHK 23 CALDATSRC CHKOUTSRC CKACCTSRC CKAMT@SRC CKBTCHSRC CKDATESRC CKDESCSRC CKMMC@SRC CKNUM@SRC CKREF@SRC CKSPECSRC CKTYP@SRC EDTCHKSRC FILAMTSRC FILDAYSRC GETWKESRC RDATE@SRC REGISTSRC SORTR@SRC TOTAL@SRC UMERGESRC UPTR2@SRC UPTRANSRC [\]. LJI@@@SRC C LJI SRC LJI SRC C 27 OCT 73 27 OCT 73 C............................................................. SUBROUTINE LJI(N,LINE,WIDTH) C INTEGER INT(10),LINE(10),WIDTH,BLANK,STAR C C INTEGER CHARACTER REPRESENTATION OF DIGITS 0-9 DATA INT /48,49,50,51,52,53,54,55,56,57/ C C SET THE LINE TO BLANKS AND TEST TO SEE IF THE NUMBER WILL FIT IW = 1 DO 10 J=1,WIDTH LINE(J) = BLANK IW = 10*IW 10 CONTINUE IF (N.LT.IW) GO TO 20 LINE(1) = STAR C PICK UP THE FIRST CHARACTER 20 CONTINUE LINE(1) = INT(1) IT = N K = 1 30 IW = IW/10 IF (IW.EQ.0) RETURN IN = IT/IW IF (IN.EQ.0) GO TO 30 C WE HAVE FOUND THE FIRST CHARACTER; FILL THE LINE 40 CONTINUE LINE(K) = INT(IN+1) K = K + 1 IT = IT - IN*IW IW = IW/10 IF (IW.EQ.0) RETURN IN = IT/IW GO TO 40 END [\]. LOGON@001 .TITLE LOGON : WRITE LOGON MESSAGE ON TTY .GLOBL LOGON,.DA SLOT=-2 /SYSTEM TTY MODE=2 /IOPS ASCII SIZE=10 /WORD COUNT (=8 DEC.) WPCN=6 /HEADER WORD PAIR COUNT / .IODEV SLOT .GLOBL LOGON,.DA / LOGON 0 JMS* .DA /GET ADDR JMP .+2 ARRAY 0 /WILL CONTAIN ADDR OF POINTER LAC* ARRAY DAC ARRAY /NOW POINTS TO FIRST WORD LAC (BUFFER DAC BUFADR# /PUT IN BUFFER POINTER LAW -SIZE /FORM COUNTER IN AC DAC COUNT# LOOP LAC* ARRAY /GET DATA DAC* BUFADR /PUT IN BUFFER ISZ ARRAY /INCREMENT POINTERS ISZ BUFADR ISZ COUNT JMP LOOP NOP .WRITE SLOT,MODE,HEADER,6 JMP* LOGON / HEADER WPCN*1000 0 /OTHER HALF OF HEADER PAIR BUFFER .BLOCK SIZE CR .ASCII <015> /CARRIAGE REUTRN PAIR .END [\]. LOWER@001 .TITLE SUBROUTINE LOWER(CHAR) 18 FEB 74 / / MACRO ROUTINE TO CONVERT CARD ASCII TO LOWER CASE / / THE ROUTINE ASSUMES THAT CONVERTION IS NORMAL CASE / / IF CAR = 0 (.FALSE.) WE STOP LOWERING / IF CHAR=-1 (.TRUE.) WE RESUME LOWERING / .GLOBL LOWER,.DA LOWER 0 JMS* .DA JMP .+1+1 CHAR 0 LAC* CHAR /GET THE CHARACTERR SPA /SKIP IF AC >= 0 JMP CONTRL / JUMP FOR CHAR=-1 SNA /SKIP AC NOT 0 JMP CONTRL / JUMP FOR CHAR=0 / LAC SHIFT /LOAD THE SHIFT FLAG SMA /IF -1, WE WILL LOWER-CASE IT JMP* LOWER / LAC* CHAR /REFETCH THE CHARACTER TAD (-101 /SUBTRACT ALPHA BASE SPA /SHIP IF IT MIGHT BE A CHARACTER JMP* LOWER TAD (-32 /SUBTRACT UPPER BOUND SMA /IF <0, IT'S A CHARACTER! JMP* LOWER TAD (101+32+40 /RESTORE THE AC AND SHIFT TO LOWER CASE DAC* CHAR JMP* LOWER /RETURN / CONTRL DAC SHIFT JMP* LOWER / SHIFT -1 .END [\]. NEWPAGSRC C NEWPAG SRC NEWPAG SRC C 21 FEB 74 21 FEB 74 C............................................................ SUBROUTINE NEWPAG C C PURPOSE: C NEWPAGE IS THE PAGE FLIPPING ROUTINE FOR THE SPEC PRINTER C IT PERFORMS THE FOLLOWING TASKS* C 1. WRITES THE JOB LINE AT THE BOTTOM OF THE PAGE C 2. FLIPS TO AND NI;UMBERS THE NEXT PAGE WITH THE FORMULA C = <-> C 3. SKIPS TWO LINES AND WRITES THE ARTICLE NUMBER COMPOSED AS C = <.> C IMPLICIT INTEGER (A-Z) C ******** ******* ***** C DIMENSION PREFIX(85) C COMMON /NUMBRS/ 1 DIVNUM,SECNUM,ARTNUM,PARNUM,SUBNUM,SB2NUM,SB3NUM,SB4NUM, 1 DIVTAG(5),SECTAG(5),ARTTAG(5),TEMTAG(5) COMMON /PAGES/ PAGNUM,PAGTAG(5),LINNUM,JOBID(85),PAGESZ COMMON /SLOTS/ IDK1,IDK2,LTA,ICD,LPS C DATA FF,DASH,CR /12,45,13/,CC2,PERIOD /17,46/ DATA LEFT /70/ ,MARGIN /7/ C..................................................... CALL RESET(PREFIX,85) PREFIX(3) = CR C 1. PLACE THE JOB NAME AT THE BOTTOM OF THE SHEET JSKIP = PAGESZ - LINNUM 10 IF (JSKIP.LE.0) GO TO 20 CALL WRITEI(LPS,PREFIX) JSKIP = JSKIP - 1 GO TO 10 20 CONTINUE CALL WRITEI(LPS,JOBID) C C 2. WRITE THE PAGE NUMBER AT THE TOP CALL RESET(PREFIX,85) PAGNUM = PAGNUM + 1 CALL LJI(PAGNUM,PAGTAG,3) PREFIX( 1) = FF PREFIX(LEFT+1) = DIVTAG(1) PREFIX(LEFT+2) = DIVTAG(2) PREFIX(LEFT+3) = SECTAG(1) PREFIX(LEFT+4) = DASH PREFIX(LEFT+5) = PAGTAG(1) PREFIX(LEFT+6) = PAGTAG(2) PREFIX(LEFT+7) = PAGTAG(3) PREFIX(LEFT+8) = CR CALL WRITEI(LPS,PREFIX) LINNUM = 1 C C 3. WRITE THE ARTICLE NUMBER CALL RESET(PREFIX,85) PREFIX(1) = CC2 PREFIX(MARGIN+1) = DIVTAG(1) PREFIX(MARGIN+2) = DIVTAG(2) PREFIX(MARGIN+3) = SECTAG(1) PREFIX(MARGIN+4) = PERIOD PREFIX(MARGIN+5) = ARTTAG(1) PREFIX(MARGIN+6) = ARTTAG(2) PREFIX(MARGIN+7) = CR CALL WRITEI(LPS,PREFIX) LINNUM = LINNUM + 2 C RETURN END [\]. POPUP@SRC .TITLE POPUP(LINE) .GLOBL POPUP,.DA / DEFINE MAXIMUM SIZE OF LINE .DEC SIZE=85 .OCT / POPUP CODE POPUP 0 /ENTRY POINT JMS* .DA JMP .+2 LINE 0 LAC* LINE /GET ADDR OF FIRST WORD OF LINE DAC LINE LAW -SIZE /SETUP LIMIT COUNTER DAC #C LAC LINE /GET ADDR LINE(1) TAD (-1 DAC* (10 /USE FIRST A.I.R. FOR FETCH DAC* (11 /USE SECOND A.I.R. FOR PUT LAC* 10 /GET FIRST CHARACTER FOR USER DAC #T /SAVE IT SAD (15 /RETURN IF CARRIAGE RETURN JMP* POPUP ISZ C /INCREMENT THE COUNTER PL1 LAC* 10 /GET LINE(J+1) DAC* 11 /PUT IN LINE(J) SAD (15 /CHECK FO R CR JMP PL2 ISZ C /INCREMENT COUNTER JMP PL1 /LOOP PL2 LAC T /PUT T IN AC FOR USER JMP* POPUP .END [\]. PUTL@@SRC C PUTL SRC PUTL SRC C 21 FEB 74 21 FEB 74 C.................................................................... SUBROUTINE PUTL C C PUTL SUPERVISES THE PRINTING OF THE OUTPUT LINE (LINEX) C 1. THE CR AT THE END OF THE LINE IS INSERTED C 2. A CHECK IS MADE TO SEE IF THE LINE WILL FIT ON THE PAGE C 3. THE LINE IS PACKED AND WRITTEN ON THE OUTPUT DECICE C IF THE LINE WILL NOT FIT ON THE PAGE, THE APPROPRIATE PAGING C TASKS ARE PERFORMED BEFOR THE CURRENT LINE IS OUTPUT C 1. A PAGE IS FLIPPED AND NUMBERED C 2. THE OUTPUT LINE IS WRITTEN C C DECLARATIONS: IMPLICIT INTEGER (A-Z) C ******** ******* ***** C LOGICAL NOTES C COMMON /OUTS/ LINEX(85),LAST,LSKIP,NOTES COMMON /PAGES/ PAGNUM,PAGTAG(5),LINNUM,JOBID(85),PAGESZ COMMON /SLOTS/ IDK1,IDK2,LTA,ICD,LPS C DATA PERIOD,DASH,CR,CC2,CC3 /46,45,13,17,18/ DATA FF,LF,BLANK /12,10,32/ C............... C TERMINATE THE LINE WITH A CARRIAGE CONTROL CHARACTER 10 IF (LAST.LE.0) RETURN LAST = LAST + 1 LINEX(LAST) = CR C WILL THIS LINE FIT ON THE CURRENT PAGE? IF (LINEX(1).EQ.BLANK) LINEX(1) = LSKIP IF (NOTES) LINEX(1) = LF C DETERMINE HOW MANY LINES WILL BE REQUIRED LINC = 1 IF (LINEX(1).EQ.CC2) LINC = 2 IF (LINEX(1).EQ.CC3) LINC = 3 IF ((LINNUM+LINC).LE.PAGESZ) GO TO 100 C............... C FORCE A NEW PAGE CALL NEWPAG C FORCE A DOUBLE SPACING FOR THE NEXT LINE LINEX(1) = CC2 LINC = 2 C............... 100 CONTINUE CALL WRITEI(LPS,LINEX) LINNUM = LINNUM + LINC CALL RESET(LINEX,85) LAST = 0 RETURN END [\]. PUTW@@SRC C PUTW SRC PUTW SRC C 11 NOV 1973 11 NOV 1973 C................................................................. SUBROUTINE PUTW(LINE,N) C C PURPOSE C "PUTW" PLACES THE WORD IN THE USER'S LINE "LINE" INTO THE C OUTPUT BUFFER LINE "LINEX" AFTER FIRST CHECKING TO SEE THAT C IT WILL FIT (IE. LAST+N