10 !********************************************************************* & ! PDPLBR - PDP LIBRARIAN * & ! * & ! D I S C L A I M E R * & ! ------------------- * & ! THIS SOFTWARE HAS NO GUARANTEES, EXPRESSED OR * & ! IMPLIED, AND IS FREE TO BE COPIED, REPRODUCED * & ! OR MODIFIED. ANYONE WHO HAS A COPY MAY USE * & ! IT, WITH THE FOLLOWING RESTRICTIONS: * & ! 1. THIS DISCLAIMER MUST BE INCLUDED * & ! 2. THIS SOFTWARE MUST NOT BE SOLD, * & ! (ONLY GIVEN AWAY FREELY) * & ! * & !********************************************************************* & ! AUTHOR AND AUTHOR'S COMPANY ASSUMES NO RESPONSIBILITY FOR * & ! USE OR RELIABLITY OF THIS SOFTWARE * & !********************************************************************* & ! PROGRAMMER: JIM HOBBS * & ! ADOLPH COORS COMPANY, * & ! GOLDEN, CO. 80401 * & ! (303) 277-2855 * & ! DATE WRITTEN: JULY 1981 * & ! DESCRIPTION: THIS PROGRAM WILL ALLOW PROGRAMMERS TO MOVE * & ! SOURCES, COMMAND FILES, ODL FILES, COMPILED * & ! TASKS BETWEEN THE LIBRARY, PRODUCTION AND * & ! DEVELOPMENT ACCOUNTS WITHOUT THE NEED FOR * & ! MANUALLY REQUESTING THESE TRANSFERS. * & ! & ! THIS PROGRAM TAKES INTO CONSIDERATION THE * & ! FILES REQUIRED FOR BASIC PLUS AND BASIC PLUS * & ! TWO SOURCES, DIFFERENCE IN COMPILED EXTENSION* & ! ETC. ALSO IN MOVING MAPS AND SUBROUTINES ONL* & ! SPECIFIC REQUIRED FILES ARE COPIED EITHER INT* & ! OR OUT OF ACCOUNTS. * & ! & ! THERE WILL BE CHECKING AGAINST A LIBRARIAN * & ! FILE WHICH WILL KEEP HISTORY AS WELL AS * & ! WHO HAS A PROGRAM CHECKED OUT CURRENTLY. * & ! WHEN A PROGRAM IS CHECKED OUT FOR MODIFICATIO* & ! NO ONE ELSE WILL BE ABLE TO CHECK THE SAME * & ! PROGRAM OUT AT THE SAME TIME. * & ! & ! THERE IS A CCL ENTRY POINT INTO THIS PROGRAM * & ! BUT THERE IS NO CHAIN ENTRY ALLOWED * & ! & ! THERE ARE TWO TYPES OF 'HELP' WHICH CAN BE * & ! PRINTED FOR THE USER. THE FIRST IS A COMPLET* & ! DESCRIPTION OF HOW TO USE THIS PROGRAM AND TH* & ! SWITCHES WHICH ARE USED. & ! THE SECOND IS A BRIEF HELP, MORE TOWARDS SHOR* & ! EXAMPLES OF THE MOST COMMONLY USED FUNCTIONS * & ! OF THIS PROGRAM & ! & ! & ! NOTE: & ! THIS PROGRAM IS DESIGNED TO CREATE PRIVILEGED & ! TASKS. (ALLOW CROSS ACCOUNT FILE ACCESS) & ! FEATURE PATCH OF 3.5.22 APRIL 81 MUST BE APPLIED & ! TO ALLOW THIS PROGRAM TO CREATE <240> TASKS & ! & 15 ! MODIFICATION HISTORY & ! DATE PROGRAMMER REASON & ! & ! 30-JUL-81 JIM HOBBS MODIFIED UPDATE LOGIC SO THAT & ! /CO/RO WOULD NOT UPDATE & ! AND DESTROY HISTORY. & ! & ! 28-DEC-81 JIM HOBBS CHANGES MADE WERE: & ! ALLOW USER TO /RO ANY & ! FILE REGUARDLESS OF & ! BEING CHECKED OUT OR NOT & ! INCLUDE NEW SWITCH, /EXC & ! ALLOW SAVE PROGRAM AND & ! EXISTING TASK TO BE & ! REVERSED IF NEW TASK IS & ! BAD & ! INCLUDE NEW SWITCH, /NOBLD & ! TO COPY BP2 SOURCE WITH & ! NO CMD ODL FILES & ! & 130 COMMON (DATPRM) DATE.1900%, DATE.STRING$ = 18%, DATE.JUL, ERRFLAG% & ! DATE CONVERSION COMMON STATEMENTS, SUBPROGRAM DATECV & ! DEFINE RETURNED FIELDS & ! DATE.1900% = DAYS IN CENTURY, JAN. 1, 1901 = 1 & ! DATE.STRING = DATE IN CHARACTER FORMAT & ! DATE.JUL = JULIAN DATE YYDDD & ! ERRFLAG% = ERROR FLAG, TURNED ON IF INVALID INPUT DATE & ! & ! VALID INTYPES: & ! 1% = JULIAN DATE YYDDD, 78029 & ! 2% = MM/DD/YY, 01/29/78 & ! 3% = MMDDYY, 012978 & ! 4% = DAYS FROM JAN. 1, 1901, DDDDD, 28253 & ! 5% = STANDARD SYSTEM DATE DD-Mmm-YY, 28-Jan-78 & ! 6% = YYMMDD & ! (NOTE THAT THE LAST TWO LETTERS OF MONTH ARE LOWER CASE) & ! & ! VALID OUTTYPE%, RETURNED FORMAT AND FIELD ARE AS FOLLOWS & ! 1% = JULIAN DATE, YYDDD, 78027, DATE.JUL & ! 2% = MM/DD/YY, 01/27/78 & ! 3% = MMDDYY, 012778, DATE.STRING$ & ! 4% = DAYS SINCE JAN. 1, 1901, DDDDD, 28253, DATE.1900% & ! 5% = CALANDER DATE JANUARY 27, 1978, DATE.STRING$ & ! 6% = DAY OF WEEK, FRIDAY & ! 7% = YYMMDD & ! & ! CALL DATECV WITH THESE PARAMETERS ONLY & ! IF INVALID INTYPE%, OUTYPE%, OR INVALID INPUT DATE & ! THEN ERRFLAG IS SET TO 1% & ! 900 MAP (PDPLBR) PDP.MAXSIZ$ = 56% & \ MAP (PDPLBR) PDP.PRMKEY$ = 10% & \ MAP (PDPLBR) PDP.PROGRAM.NAME$ = 10%, & PDP.COMPILED.DISK$ = 4%, & PDP.COMPILED.ACCOUNT%, & PDP.PROGRAM.LOCKED%(4%), & PDP.ACCOUNT.RECEIVED%(4%), & PDP.ACCOUNT.DATE%(4%), & PDP.ACCOUNT.TIME%(4%) & \ MAP (PDPLBR) PDP.ACCOUNTS$ = 10%, & PDP.DISK$(7%) = 3%, & PDP.ACCOUNT%(7%) & \ PDP.MAXSIZ$ = "" & ! & ! 910 MAP (FSPFUN) DUMM$ = 32% & \ MAP (FSPFUN) DUMM%(15%) & ! & ! SET UP NEEDED MAPS FOR FILE STRING SCAN FUNCTION & ! AND FOR FSP FUNCTION CALL (BP2 FUNCTION) & ! & ! 1000 ON ERROR GOTO 32000 & \ I% = CTRLC & \ PPN% = PEEK(PEEK(PEEK(520%)+8%)+24%) & \ I% = SWAP%(PPN%) AND 255% & \ GOTO 1010 IF I% = 1% OR I% = 80% & \ PRINT #0%, "?What?" & \ GOTO 32767 & ! & !***************************************************************** & !***************************************************************** & !** CHECK PROJECT NUMBER TO SEE IF THEY SHOULD USE ** & !** THIS PROGRAM, THIS MAY NEED TO BE EXPANDED OR ** & !** CHANGED, OR ENTIRELY REMOVED ** & !***************************************************************** & !***************************************************************** & ! & ! IF NOT VALID USER, THEN PRINT BASIC MONITOR '?WHAT?' & ! AND EXIT PROGRAM & ! & 1010 CRLF$ = CHR$(13%) + CHR$(10%) & \ DIM SWITCH$(25%), SWITCH%(25%) & \ SWITCH$(I%) = "" FOR I% = 0% TO 25% & \ SWITCH%(I%) = 0% FOR I% = 0% TO 25% & \ USER.ACC$ = FNACC$(PPN%) & \ LBR.CHNL% = 2% & \ KB.CHNL% = 3% & \ IN.CHNL% = 4% & \ OUT.CHNL% = 5% & \ HLP.CHNL% = 6% & \ OPEN "TI:" AS FILE #KB.CHNL% & \ SWAP.CHNL% = SWAP%(IN.CHNL%) + OUT.CHNL% & \ RESTORE & \ READ MAX.SWITCHES% & \ FOR J% = 0% TO MAX.SWITCHES% & \ READ SWITCH$(J%), SWITCH%(J%) & \ NEXT J% & \ GOTO 1080 IF CCL.ENTRY% & ! & ! SET ERROR TRAPPING & ! SET CONTROL C TRAPPING & ! DIMENSION SWITCH % AND $ VARIABLES & ! OPEN KB AS FILE & ! FIND THE CURRENT USER'S PROG,PROJ INTEGER VALUE & ! SKIP PROMPTS IF CCL ENTRY & ! & 1020 PRINT #KB.CHNL%, "PDPLBR" + CHR$(9%) + ERT$(0%) & + CHR$(9%) + DATE$(0%) + CHR$(9%) + TIME$(0%) & \ GOTO 1060 & ! & ! PRINT HEADER ID & ! & 1040 PRINT #KB.CHNL%, "'/HE' - HELP, '/BR' - BRIEF HELP" & \ CCL.ENTRY% = 0% & ! & ! PRINT MESSAGE TO ASK FOR HELP & ! ALSO, SINCE THIS MIGHT HAVE BEEN A CCL ENTRY & ! AND IF THERE WAS NO DATA IN DATA.LINE$ & ! THEN LET THE USER ENTER MORE THAN JUST & ! ONE COMMAND & ! & 1060 RESTORE & \ READ MAX.SWITCHES% & \ FOR J% = 0% TO MAX.SWITCHES% & \ READ SWITCH$(J%), SWITCH%(J%) & \ NEXT J% & \ FUNCTION% = 0% & \ PRINT #KB.CHNL%, CRLF$ + "> "; & \ INPUT LINE #KB.CHNL%, DATA.LINE$ & \ DATA.LINE$ = EDIT$(DATA.LINE$,-1%) & ! & ! RE INITIALIZE SWITCHES BEFORE EACH PROMPT & ! GET INPUT, COMPRESS AND STRIP EVERYTHING OFF INPUT & ! & 1080 GOTO 1040 IF DATA.LINE$ = "" & \ GOTO 28000 IF INSTR(1%,DATA.LINE$,"/HE") & \ GOTO 28500 IF INSTR(1%,DATA.LINE$,"/BR") & ! & ! IF NOTHING WAS ENTERED GOBACK AND PRNT HELP MESSAGE PROMPT & ! IF ASK FOR HELP , GIVE IT & ! RETURN FROM HELP BACK TO INPUT PROMPT & ! & ! 4000 OPEN "DB0:[1,3]PDPLBR.IND" FOR INPUT AS FILE #LBR.CHNL%, & ORGANIZATION INDEXED FIXED, & ACCESS MODIFY, ALLOW MODIFY, & MAP PDPLBR, & PRIMARY KEY PDP.PRMKEY$ & ! & \ LSET PDP.ACCOUNTS$ = "ACCOUN LOC" & \ GET #LBR.CHNL%, KEY #0% EQ PDP.ACCOUNTS$ & \ LIBR.SOUR.ACC$ = PDP.DISK$(0%) + ":" + FNACC$(PDP.ACCOUNT%(0%)) & \ LIBR.BLD.ACC$ = PDP.DISK$(1%) + ":" + FNACC$(PDP.ACCOUNT%(1%)) & ! & ! OPEN MASTER LIBRARY FILE & ! FIND LIBRARY SOURCE ACCOUNT & ! FIND LIBRARY BUILD ACCOUNT (CMD, ODL) & ! & ! UP TO EIGHT DIFFERENT DISKS, ACCOUNTS CAN & ! BE SPECIFIED IN CURRENT RECORD FOR MULTIPLE & ! (SEPERATE) PROGRAM LIBRARIES & ! & 4020 DATA.LINE$ = DATA.LINE$ + "/" & \ I% = INSTR(1%,DATA.LINE$,"/") & \ FILE.NAME$ = LEFT(DATA.LINE$,I%-1%) & \ DATA.LINE$ = RIGHT(DATA.LINE$,I%) & ! & ! PULL THE FILE NAME OFF THE INPUT DATA LINE & ! RESET THE DATA LINE WITH ONLY THE OPTION SWITCHES & ! & ! 4100 !********************************************************************* & ! FIND WHICH FUNTION IS BEING REQUESTED AND WHAT SWITCHES ARE * & ! SPECIFIED ON THE INPUT DATA LINE * & ! * & !********************************************************************* & FOR J% = 0% TO MAX.SWITCHES% & \ I% = INSTR(1%,DATA.LINE$,SWITCH$(J%)) & \ IF I% & THEN SWITCH%(J%) = -1% & \ I1% = INSTR(I%+1%,DATA.LINE$,"/") & \ DATA.LINE$ = LEFT(DATA.LINE$,I%-1%) + RIGHT(DATA.LINE$,I1%) & ! & 4120 NEXT J% & \ GOTO 4140 IF DATA.LINE$ = "/" & \ PRINT #KB.CHNL%, CRLF$ + "Invalid switches: " & + LEFT(DATA.LINE$,LEN(DATA.LINE$)-1%) & \ GOTO 32767 IF CCL.ENTRY% & \ GOTO 1060 & ! & ! FOR ALL SWITCHES, FIND IF THEY EXIST IN THE COMMAND LINE & ! IF THEY DO, THEN SET SWITCH%() TRUE, AND REMOVE THE COMMAND & ! FROM THE LINE & ! IF AFTER ALL VALID COMMANDS HAVE BEEN EXTRACTED, THERE IS & ! STILL SOMETHING LEFT, THEN PRINT AN ERROR MESSAGE, & ! GO TO END AND QUIT IF CCL ENTRY, OTHERWISE GOBACK AND PROMPT & ! USER FOR INPUT AGAIN & ! & ! & ! SWITCH%(0%) = COPY & ! SWITCH%(1%) = READ ONLY & ! & ! SWITCH%(2%) = MAP FILE & ! SWITCH%(3%) = SUBROUTINES & ! SWITCH%(4%) = BASIC PLUS SOURCE & ! SWITCH%(5%) = BASIC PLUS TWO SOURCE (DEFAULT) & ! SWITCH%(6%) = DO NOT REPLACE BASIC PLUS SOURCE & ! SWITCH%(7%) = DO NOT REPLACE BASIC PLUS TWO SOURCE & ! & ! SWITCH(8%) = NOCHANGE & ! & ! SWITCH%(9%) = REPLACE & ! SWITCH%(10) = REPLACE TASK & ! SWITCH%(10) = REPLACE CMD & ! SWITCH%(12%) = REPLACE ODL & ! SWITCH%(13%) = DO NOT REPLACE TASK & ! SWITCH%(13) = DO NOT REPLACE CMD & ! SWITCH%(15%) = DO NOT REPLACE ODL & ! SWITCH%(16%) = DO NOT REPLACE OBJ & ! SWITCH%(17%) = REPLACE EXISTING SOURCE, TASK, CMD, ODL & ! NO SAVING OF EXISTING FILES & ! SWITCH%(18%) = NEW FILE, NO NEED TO SAVE EXISTING & ! & ! SWITCH%(19%) = WATCH PROGRESSION OF FILE TRANSFERENCE & ! SWITCH%(20%) = WATCH PROGRESSION OF FILE TRANSFERENCE & ! & ! SWITCH%(21%) = LIST MODULES THAT ARE CURRENTLY OUT & ! AND WHO HAS THEM (PRIVILEGED ONLY) & ! SWITCH%(22%) = LIST ALL MODULES, ALL PREVIOUS UPDATE & ! UPDATE INFORMATION (PRIVILEGED ONLY) & ! SWITCH%(23%) = MANUALLY UPDATE LIBRARIAN RECORDS; ONE & ! RECORD AT A TIME (PRIVILEGED ONLY) & ! SWITCH%(24%) = EXCHANGE OLD TSV FOR EXISTING TASK & ! SWITCH%(25%) = NO BLD TO COPY INTO USER ACCOUNT & ! & 4140 GOTO 4150 UNLESS ( SWITCH%(0%) AND SWITCH%(9%) ) OR & ( SWITCH%(0%) AND SWITCH%(8%) ) OR & ( SWITCH%(8%) AND SWITCH%(9%) ) OR & ( SWITCH%(0%) AND SWITCH%(24%) ) OR & ( SWITCH%(8%) AND SWITCH%(24%) ) OR & ( SWITCH%(9%) AND SWITCH%(24%) ) & \ PRINT #KB.CHNL%, CRLF$ + "Invalid switch combination" & \ GOTO 32767 IF CCL.ENTRY% & \ GOTO 1060 & ! & ! IF SPECIFIED COPY AND REPLACE PRINT ERROR MESSAGE & ! QUIT IF CCL, GO TO PROMPT OTHERWISE & ! & 4150 DUMM$ = SYS(CHR$(6%) + CHR$(-10%) + FILE.NAME$) & \ PROG.EXT$ = "BAS" & \ PROG.EXT$ = "B2S" IF RAD$(DUMM%(5%)) = SPACE$(3%) UNLESS SWITCH%(4%) & \ PROG.EXT$ = RAD$(DUMM%(5%)) IF RAD$(DUMM%(5%)) <> SPACE$(3%) & \ FILE.NAME$ = RAD$(DUMM%(3%)) + RAD$(DUMM%(4%)) + "." + PROG.EXT$ & \ SWITCH%(4%) = -1% IF INSTR(1%,FILE.NAME$,".BAS") & \ SWITCH%(5%) = -1% IF INSTR(1%,FILE.NAME$,".B2S") & \ GOTO 4155 IF SWITCH%(4%) OR SWITCH%(5%) & \ PRINT #KB.CHNL%, CRLF$ + "Invalid file name: " + FILE.NAME$ & + CRLF$ + "MUST be a B2S or BAS file extension!" & \ GOTO 32767 IF CCL.ENTRY% & \ GOTO 1060 & ! & ! MAKE SURE A SWITCH IS SPECIFIED & ! IF USER DID NOT SPECIFICLY APPLY A SWITCH & ! & & 4155 GOTO 4160 IF LEN(FILE.NAME$) < 11% & \ PRINT #KB.CHNL%, CRLF$ + "Invalid file name: " + FILE.NAME$ & \ GOTO 32767 IF CCL.ENTRY% & \ GOTO 1060 & ! & ! FIND OUT IF AN EXTENSION WAS SPECIFIED & ! IF THERE WAS ONE, CHECK TO SEE IF IT IS A BASIC PLUS & ! IF IT WAS THEN SET SWITCH% FLAG, JUST INCASE THE USER & ! DID NOT & ! IF NOT ADD A DEFAULT OF '.B2S' UNLESS SWITCH% SPECIFIED & ! A BASIC PLUS PROGRAM & ! IF THE FILE NAME IS STILL LESS THAN 11 CONTINUE & ! OTHERWISE PRINT ERROR MESSAGE, IF CCL ENTRY QUIT & ! OTHERWISE GOBACK AND PROMPT AGAIN & ! & & 4160 USER.FILE.NO.EXT$ = LEFT(FILE.NAME$,INSTR(1%,FILE.NAME$,".")) & ! & ! CREATE THE USER ACCOUNT NUMBER AND FILE NAME BUT WITHOUT & ! ANY EXTENSION, (DOES INCLUDE '.' OF FILE NAME) & ! & \ FUNCTION% = 5% IF SWITCH%(8%) & \ FUNCTION% = 6% IF SWITCH%(24%) & \ FUNCTION% = 1% IF SWITCH%(0%) & \ FUNCTION% = 2% IF SWITCH%(9%) & \ FUNCTION% = 3% & IF ( SWITCH%(21%) OR SWITCH%(22%) ) AND & ( SWAP%(PPN%) AND 255% ) = 1% & \ FUNCTION% = 4% IF ( SWITCH%(23%) AND ( SWAP%(PPN%) AND 255% ) = 1% ) & \ GOTO 6040 IF FUNCTION% = 3% OR FUNCTION% = 4% & \ GOTO 6000 IF FUNCTION% & \ PRINT #KB.CHNL%, CRLF$ & + STRING$(3%,7%) & + "'/CO', '/RE', '/NOCHANGE', OR 'EXCHANGE' " & + "MUST be specified !!" & \ GOTO 32767 IF CCL.ENTRY% & \ GOTO 1060 & ! & ! SET THE FUNTION TO BE DONE & ! TO USE FUNCTION THREE, MUST BE PRIVILEGED USER & ! & ! 1 = COPY & ! 2 = REPLACE & ! 3 = LIST CHECKED OUT, OR ALL SOURCES STATUS & ! 4 = MANUAL UPDATE OF PDPLBR FILE & ! 5 = NOCHANGE & ! 6 = EXCHANGE & ! & ! 6000 !********************************************************************* & ! WE NOW HAVE A VALID FILE NAME, AND ALL VALID SWITCHES HAVE * & ! BEEN SET, NOW FIND OUT IF THE FILE NAME EXISTS IN THE * & ! LIBRARIAN TABLE. (MUST ALLOW FOR NEW ENTRIES, BUT ONLY IN * & ! REPLACING. * & ! * & !********************************************************************* & LSET PDP.PRMKEY$ = FILE.NAME$ & \ GET #LBR.CHNL%, KEY #0% EQ PDP.PRMKEY$ & 6001 GOTO 6040 IF ( PDP.PROGRAM.LOCKED%(0%) AND 1% ) AND & ( FUNCTION% = 2% OR FUNCTION% = 5% ) AND & ( PPN% = PDP.ACCOUNT.RECEIVED%(0%) ) OR & ( PDP.PROGRAM.LOCKED%(0%) = 0% AND FUNCTION% = 1% ) OR & ( FUNCTION% = 1% AND SWITCH%(1%) ) OR & ( FUNCTION% = 6% ) & \ GOTO 6010 UNLESS FUNCTION% = 2% & \ PRINT #0%, CRLF$ & + "Sorry, you cannot replace " + PDP.PRMKEY$ + & ". It was not checked out to you." & \ GOTO 6039 & ! & ! CONTINUE PROCESSING REQUEST IF ONE OF THE FOLLOWING IS TRUE: & ! & ! PROGRAM IS LOCKED, ACTION REQUESTED TO REPLACE OR NOCHANGE & ! AND IS ASKED BY USER WHO HAS IS CHECKED OUT TO THEM & ! OR & ! PROGRAM IS NOT LOCKED, ACTION REQUESTED IS TO CHECK IT OUT & ! OR & ! REGUARDLESS OF LOCK OR NOT, IF REQUEST IS TO COPY READ ONLY & ! LET USER HAVE IT & ! OR & ! EXCHANGE OPTION BEING USED & ! & 6010 GOTO 6020 IF PDP.PROGRAM.LOCKED%(0%) AND 1% & \ PRINT #KB.CHNL%, CRLF$ & + "Program " & + PDP.PRMKEY$ & + " has been copied 'READ ONLY' by:" & + CRLF$ & + FNWHO$(PDP.ACCOUNT.RECEIVED%(0%),PDP.ACCOUNT.DATE%(0%), & PDP.ACCOUNT.TIME%(0%)) & + " --- Continuing" IF PDP.PROGRAM.LOCKED%(0%) AND 2% & \ GOTO 6040 & ! & ! CHECK 'PDP.PROGRAM.LOCKED%(0%)' FOR BIT PATTERN FLAGS & ! ( MAKE SPECIAL NOTE OF PROGRAM LOCKED OUT BUT CURRENT USER & ! IS TRYING TO REPLACE THAT MODULE, AND HE IS THE ONE WHO & ! HAS IT LOCKED OUT) & ! PRINT MESSAGE ACCORDING TO WHAT IS CORRECT & ! & ! 0% = NOT CURRENTLY CHECKED OUT & ! 1% = CHECKED OUT TO MODIFY & ! 2% = & ! 4% = & ! 8% = & ! 16% = & ! 32% = & ! 64% = & ! 128% = & ! 256% = & ! 512% = & ! & 6020 UNLOCK #LBR.CHNL% & \ PRINT #KB.CHNL%, CRLF$ & + "Sorry ... Program " & + PDP.PRMKEY$ & + " is already checked out to:" & + CRLF$ & + FNWHO$(PDP.ACCOUNT.RECEIVED%(0%),PDP.ACCOUNT.DATE%(0%), & PDP.ACCOUNT.TIME%(0%)) & 6039 GOTO 32767 IF CCL.ENTRY% & \ GOTO 1060 & ! & ! IF PROGRAM IS LOCKED OUT TELL CURRENT USER WHO & ! HAS THE PROGRAM, AND WHAT DAY AND TIME IT WAS TAKEN & ! IF CCL ENTRY GO TO END, OTHERWISE GOBACK AND REPROMPT & ! & 6040 ON FUNCTION% GOSUB 8000, 10000, 12000, 14000, 16000, 18000 & \ GOTO 32767 IF CCL.ENTRY% & \ GOTO 1060 & ! & ! 1% = COPY FROM LIBRARY TO DEVELOPMENT ACCOUNT & ! 2% = COPY FROM DEVELOPMENT TO LIBRARY & ! 3% = LIST PDPLBR.IND FILE (PRIVILEGED ONLY) & ! 4% = UPDATE PDPLBR.IND FILE (PRIVILIEGED ONLY) & ! 5% = REPLACE NOCHANGE & ! 6% = EXCHANGE TSV TO TSK, TSK TO BAD & ! & 6060 GOSUB 14100 & \ LSET PDP.PRMKEY$ = FILE.NAME$ & \ GET #LBR.CHNL%, KEY #0% EQ PDP.PRMKEY$ & \ GOTO 6040 & ! & ! USER WISHES TO ADD NEW PROGRAM INTO LIBRARY & ! SO GO GET THE REQUIRED INFORMATION & ! RE-GET THE SAME RECORD, MUST NOT BE UNLOCKED TO CAN BE & ! UPDATED, NOW GOBACK INTO NORMAL 'GOSUB' OF PROGRAM & ! TO 'REPLACE' ITEMS BACK INTO THE LIBRARY & ! & ! 8000 !********************************************************************* & ! THIS SUBROUTINE IS THE ONE THAT COPIES FILES FROM THE LIBRARY* & ! ACCOUNTS TO THE USER'S ACCOUNT. * & ! THE ONLY VALID SWITCH IS THE READ ONLY "/CO" * & ! * & !********************************************************************* & PRINT #KB.CHNL%, CRLF$ + "Copying from library accounts " & + LIBR.SOUR.ACC$ + " and " + LIBR.BLD.ACC$ & + " to " + USER.ACC$ IF SWITCH%(19%) OR SWITCH%(20%) & \ FILES.MOVED% = 0% & \ GOTO 8030 IF SWITCH%(1%) & ! & ! CHANGED FROM ORIGINAL DESIGN & ! NOT TO UPDATE HISTORY FILE IF TAKEN ONLY FOR READ ONLY & ! THIS WILL ALSO PREVENT THE NOTICE OF 'READ ONLY' WHEN & ! TAKEN OUT & ! & \ FOR I% = 3% TO 0% STEP -1% & \ PDP.PROGRAM.LOCKED%(I%+1%) = PDP.PROGRAM.LOCKED%(I%) & \ PDP.ACCOUNT.RECEIVED%(I%+1%) = PDP.ACCOUNT.RECEIVED%(I%) & \ PDP.ACCOUNT.DATE%(I%+1%) = PDP.ACCOUNT.DATE%(I%) & \ PDP.ACCOUNT.TIME%(I%+1%) = PDP.ACCOUNT.TIME%(I%) & \ NEXT I% & ! & ! EVERYTHING IS VALID, PROGAM IS NOT CHECKED OUT, SO LET THIS & ! USER HAVE IT. BUT FIRST PUT CURRENT HISTORY BACK ONE AND & ! SHIFT EVERYTHING SO THAT THE LATEST ONE IS THE ONE TO BE LOST & ! & 8020 PDP.PROGRAM.LOCKED%(0%) = 1% & \ PDP.PROGRAM.LOCKED%(0%) = 2% IF SWITCH%(1%) & \ PDP.ACCOUNT.RECEIVED%(0%) = PPN% & \ CALL DATECV(5%,1%,DATE$(0%)) & \ PDP.ACCOUNT.DATE%(0%) = & INT( DATE.JUL - 70000. ) & \ TMP$ = TIME$(0%) & \ PDP.ACCOUNT.TIME%(0%) = & 60% * (24% - VAL( LEFT(TMP$,2%) ) ) - VAL( RIGHT(TMP$,4%) ) & ! & ! FIND THE PROJECT PROGRAMMER NUMBER & ! DALL DATECV FOR THE INTEGER FORMAT OF CURRENT DATE & ! CALCULATE THE INTEGER OF CURRENT TIME & ! GET THE CURRENT USERS ACCOUNT NUMBER & ! & 8030 OUTPUT.FILE$ = FILE.NAME$ & ! & ! SET OUTPUT NAME TO SAME AS THE FILE NAME TO BE TRANSFERRED & ! & 8040 OPEN USER.ACC$ + OUTPUT.FILE$ FOR INPUT AS FILE #OUT.CHNL% & \ CLOSE #OUT.CHNL% & ! & ! TRY TO OPEN OUTPUT FILE FOR INPUT TO MAKE SURE THAT & ! FILE OF SAME NAME DOES NOT ALREADY EXISTS & ! & 8060 PRINT #KB.CHNL%, CRLF$ + OUTPUT.FILE$ & + " currently exists in your account!!" & + CRLF$ + "Do you wish to supercede it (Y/N) ? "; & \ LINPUT #KB.CHNL%, ANS$ & \ ANS$ = EDIT$(ANS$,-1%) & \ ANS$ = "N" IF ANS$ = "" & \ GOTO 8060 IF ANS$ <> "N" AND ANS$ <> "Y" & \ GOTO 8080 IF ANS$ == "Y" & \ PRINT #KB.CHNL%, "Filename for output: "; & \ LINPUT #KB.CHNL%, OUTPUT.FILE$ & \ OUTPUT.FILE$ = OUTPUT.FILE$ + "." + PROG.EXT$ & IF INSTR(1%,OUTPUT.FILE$,".") = 0% & \ GOTO 8040 & ! & ! FIND OUT IF USER WANTS TO SUPERCEDE EXISTING FILE OR & ! PUT OUTPUT FILE TO DIFFERNT NAME & ! & 8080 DUMM$ = FNFAST.COPY$(LIBR.SOUR.ACC$ + FILE.NAME$, & USER.ACC$ + OUTPUT.FILE$) & \ FILES.MOVED% = FILES.MOVED% + 1024% & 8140 GOTO 8150 UNLESS SWITCH%(2%) OR & SWITCH%(3%) OR & SWITCH%(4%) OR & SWITCH%(25%) & \ PRINT #KB.CHNL%, CRLF$ & + PROG.EXT$ + " file has been copied to your account" & \ GOTO 8300 & ! & ! CLOSE THE INPUT AND OUTPUT FILES & ! SKIP TO NEXT STATEMENT UNLESS THIS IS A MAP OR SUBROUTINE & ! OR BASIC PLUS PROGRAM THAT HAS BEEN COPIED. & ! IF WAS MAP OR SUB THEN PRINT MESSAGE THAT SOURCE HAS BEEN & ! COPIED, AND DO NOT LOOK FOR CMD OR ODL FILES & ! IF WAS A BASIC PLUS PROGRAM, THERE ARE NO CMD OR ODL TO FIND & ! & 8150 FILE.NAME$ = LEFT(FILE.NAME$,INSTR(1%,FILE.NAME$,".")) & \ OUTPUT.FILE$ = LEFT(OUTPUT.FILE$,INSTR(1%,OUTPUT.FILE$,".")) & ! & ! CLOSE THE INPUT AND OUTPUT FILES & ! & 8160 PRINT #KB.CHNL%, CRLF$ + "Copying "+ LIBR.BLD.ACC$+ FILE.NAME$+ "BLD" & + " to "; IF SWITCH%(19%) OR SWITCH%(20%) & \ OPEN LIBR.BLD.ACC$ + FILE.NAME$ + "BLD" FOR INPUT AS FILE #IN.CHNL% & ! & ! OPEN THE "BLD" FILE, WHICH CONTAINS THE CMD THEN THE & ! ODL AS ONE FILE. & ! & 8180 PRINT #KB.CHNL%, USER.ACC$+ OUTPUT.FILE$ + "CMD"; & IF SWITCH%(19%) OR SWITCH%(20%) & \ OPEN USER.ACC$ + OUTPUT.FILE$ + "CMD" FOR OUTPUT AS FILE #OUT.CHNL% & ! & ! OPEN SAME FILE NAME AS OUTPUT, DON'T CHECK FOR EXISTING & ! FILE THIS TIME & ! & 8200 INPUT LINE #IN.CHNL%, CMD$ UNTIL LEFT(CMD$,10%) = ";**** CMD*" & ! & ! READ FILE UNTIL HAVE FOUND CMD HEADER & ! & 8220 INPUT LINE #IN.CHNL%, CMD$ & \ GOTO 8240 IF LEFT(CMD$,10%) = ";**** ODL*" & \ PRINT #OUT.CHNL%, CMD$; & \ GOTO 8220 & ! & ! PRINT OUT OUTPUT '.CMD' FILE UNTIL FIND ODL HEADER & ! & 8240 CLOSE #OUT.CHNL% & \ PRINT #KB.CHNL%, " and " + USER.ACC$ + OUTPUT.FILE$ + "ODL" & IF SWITCH%(19%) OR SWITCH%(20%) & \ OPEN USER.ACC$ + OUTPUT.FILE$ + "ODL" FOR OUTPUT AS FILE #OUT.CHNL% & ! & ! CLOSE THE CMD FILE AND OPEN THE ODL FILE & ! & 8260 INPUT LINE #IN.CHNL%, CMD$ & \ PRINT #OUT.CHNL%, CMD$; & \ GOTO 8260 & ! & ! READ REST OF FILE INTO OUTPUT '.ODL' FILE & ! ERROR TRAP 11 WILL CATCH END OF FILE & ! & 8280 FILES.MOVED% = FILES.MOVED% + 2048% & \ CLOSE #IN.CHNL%, #OUT.CHNL% & \ PRINT #KB.CHNL%, CRLF$ & + ".B2S, .CMD, and .ODL " & + "files have been copied to your account" & + CRLF$ & ! & ! CLOSE THE INPUT AND OUTPUT FILES & ! PRINT MESSAGE TO USER THAT FILES WERE COPIED SUCCESSFULLY & ! & 8300 UPDATE #LBR.CHNL% & \ RETURN & ! & ! LAST THING TO DO IS TO GOAHEAD AND UPDATE THE RECORD & ! WITH THE NEWEST INFORMATION & ! RETURN & ! & ! 10000 !********************************************************************* & ! THIS SUBROUTINE IS THE ONE THAT HANDLES THE MORE COMPLICATED * & ! COPIES FROM DEVELOPMENT ACCOUNT BACK INTO PRODUCTION ACCOUNT * & ! THE TASK, AS WELL AS MOVING THE SOURCE, ODL,CMD BACK TO THEIR* & ! LIBRARY ACCOUNT. * & ! * & !********************************************************************* & \ PRINT #KB.CHNL%, CRLF$ + "Coping from " + USER.ACC$ + " to " & + LIBR.SOUR.ACC$ + " and " + LIBR.BLD.ACC$ & IF SWITCH%(19%) OR SWITCH%(20%) & \ FILES.MOVED% = 0% & ! & 10010 GOTO 10020 IF SWITCH%(6%) OR SWITCH%(7%) & \ PRINT #KB.CHNL%, CRLF$ + "Looking for " + USER.ACC$ + & USER.FILE.NO.EXT$ + PROG.EXT$; & IF SWITCH%(19%) OR SWITCH%(20%) & \ OPEN USER.ACC$ + USER.FILE.NO.EXT$ + PROG.EXT$ & FOR INPUT AS FILE #IN.CHNL%, & MODE 8192% & \ CLOSE #IN.CHNL% & \ PRINT #KB.CHNL%, "....found" IF SWITCH%(19%) OR SWITCH%(20%) & ! & ! IF USER DOES NOT WISH TO TRANSFER SOURCE DO NOT LOOK & ! FOR IT IN THEIR ACCOUNT & ! & 10020 GOTO 10050 IF SWITCH%(2%) & \ GOTO 10025 UNLESS SWITCH%(3%) & \ PRINT #KB.CHNL%, CRLF$ + "Looking for " + USER.ACC$ + & USER.FILE.NO.EXT$ + "OBJ"; IF SWITCH%(19%) OR SWITCH%(20%) & \ OPEN USER.ACC$ + USER.FILE.NO.EXT$ + "OBJ" & FOR INPUT AS FILE #IN.CHNL%, & MODE 8192% & \ CLOSE #IN.CHNL% & \ PRINT #KB.CHNL%, "....found" IF SWITCH%(19%) OR SWITCH%(20%) & \ GOTO 10050 & ! & ! SKIP THIS UNLESS REPLACING A SUBROUTINE & ! IF USER IS REPLACING SUB, THEN MAKE SURE THAT THE 'OBJ' & ! EXISTS & ! & 10025 GOTO 10030 IF SWITCH%(13%) & \ COMP.PROG.EXT$ = "TSK" & \ COMP.PROG.EXT$ = "BAC" IF SWITCH%(4%) & \ PRINT #KB.CHNL%, CRLF$ + "Looking for " + USER.ACC$ + & USER.FILE.NO.EXT$ + COMP.PROG.EXT$; & IF SWITCH%(19%) OR SWITCH%(20%) & \ OPEN USER.ACC$ + USER.FILE.NO.EXT$ + COMP.PROG.EXT$ & FOR INPUT AS FILE #IN.CHNL%, & MODE 8192% & \ CLOSE #IN.CHNL% & \ PRINT #KB.CHNL%, "....found" IF SWITCH%(19%) OR SWITCH%(20%) & ! & ! & ! IF USER DOES NOT WISH TO TRANSFER TASK DO NOT LOOK FOR IT & ! & 10030 GOTO 10040 IF SWITCH%(4%) OR SWITCH%(14%) & \ PRINT #KB.CHNL%, CRLF$ + "Looking for " + USER.ACC$ + & USER.FILE.NO.EXT$ + "CMD"; & IF SWITCH%(19%) OR SWITCH%(20%) & \ OPEN USER.ACC$ + USER.FILE.NO.EXT$ + "CMD" & FOR INPUT AS FILE #IN.CHNL%, & MODE 8192% & \ CLOSE #IN.CHNL% & \ PRINT #KB.CHNL%, "....found" IF SWITCH%(19%) OR SWITCH%(20%) & ! & ! IF THIS IS A BASIC PLUS PROGRAM THERE IS NO CMD OR ODL & ! IF USER DOES NOT WISH TO TRANSFER CMD DO NOT LOOK FOR IT & ! & 10040 GOTO 10050 IF SWITCH%(15%) & \ PRINT #KB.CHNL%, CRLF$ + "Looking for " + USER.ACC$ + & USER.FILE.NO.EXT$ + "ODL"; & IF SWITCH%(19%) OR SWITCH%(20%) & \ OPEN USER.ACC$ + USER.FILE.NO.EXT$ + "ODL" & FOR INPUT AS FILE #IN.CHNL%, & MODE 8192% & \ CLOSE #IN.CHNL% & \ PRINT #KB.CHNL%, "....found" IF SWITCH%(19%) OR SWITCH%(20%) & ! & ! IF USER DOES NOT WISH TO TRANSFER ODL DO NOT LOOK FOR IT & ! & ! & ! MAKE SURE THAT THE SOURCE, TASK, ODL, AND CMD FILES & ! CURRENTLY EXIST IN USER'S ACCOUNT & ! (AN ERROR ON ANY OF THESE WILL ABORT THE CURRENT COMMAND & ! & ! 10050 !********************************************************************* & ! IF WE HAVE GOTTEN THIS FAR ALL THE NECESSARY FILES EXIST IN * & ! THE USER'S ACCOUNT. SO NOW START DECIPHERING THE SWITCHES * & ! TO PERFORM THE REQUIRED FILE TRANSFERS. * & ! * & !********************************************************************* & GOTO 10055 IF ( SWITCH%(4%) AND SWITCH%(6%) ) & OR ( SWITCH%(5%) AND SWITCH%(7%) ) & \ SAVE.EXT$ = "B2V" & \ PROG.EXT$ = "B2S" & \ PROG.EXT$ = "BAS" IF SWITCH%(4%) & \ SAVE.EXT$ = "BSV" IF SWITCH%(4%) & \ DEST.ACC$ = LIBR.SOUR.ACC$ & \ FILE1% = 1% & \ FILE2% = 2% & \ GOSUB 11000 & \ NAME TRANSFER.OUT.FILE$ AS TRANSFER.OUT.FILE$ + "<56>" IF SWITCH%(2%) & ! & ! GO WORK ON THE SOURCE & ! MAKE PROTECTION 56 IF THIS IS A MAP, OR COMMON USED WITH A & ! MAP SWITCH & ! & 10055 GOTO 10060 UNLESS SWITCH%(3%) & \ GOTO 10060 IF SWITCH%(16%) & \ SAVE.EXT$ = "OSV" & \ PROG.EXT$ = "OBJ" & \ DEST.ACC$ = LIBR.SOUR.ACC$ & \ FILE1% = 4% & \ FILE2% = 8% & \ GOSUB 11000 & \ NAME TRANSFER.OUT.FILE$ AS TRANSFER.OUT.FILE$ + "<56>" & ! & ! WORK ON THE OBJECT IF THIS IS A SUBROUTINE ONLY & ! & & 10060 GOTO 10500 IF SWITCH%(2%) OR SWITCH%(3%) & \ GOTO 10065 IF SWITCH%(13%) & \ SAVE.EXT$ = "TSV" & \ PROG.EXT$ = "TSK" & \ SAVE.EXT$ = "BCS" IF SWITCH%(4%) & \ PROG.EXT$ = "BAC" IF SWITCH%(4%) & \ DEST.ACC$ = PDP.COMPILED.DISK$ + FNACC$(PDP.COMPILED.ACCOUNT%) & \ FILE1% = 16% & \ FILE2% = 32% & \ GOSUB 11000 & \ NAME TRANSFER.OUT.FILE$ AS TRANSFER.OUT.FILE$ + "<240>" & ! & ! SKIP THE REST OF THIS IF WHAT WE ARE WORKING WITH IS & ! A MAP OR SUBROUTINE & ! GO WORK ON THE TSK OR BAC COMPILED FILE & ! SINCE WAS COMPILED, MAKE SURE IT HAS A COMPILED & ! PROTECTION CODE & ! & & 10065 GOTO 10500 IF SWITCH%(4%) & ! & ! HAVE MOVED THE SOURCE AND COMPILED VERSION OF PROGRAM & ! IF WE HAVE A BASIC PLUS PROGRAM THAT IS ALL THERE IS & ! SO QUIT & ! & 10070 GOTO 10130 IF SWITCH%(18%) & \ CMD$ = ";**** CMD*" + CRLF$ & \ ODL$ = ";**** ODL*" + CRLF$ & \ OPEN LIBR.BLD.ACC$ + USER.FILE.NO.EXT$ + "BLD" & FOR INPUT AS FILE #IN.CHNL%, & MODE 8192% & ! & ! DON'T BOTHER LOOKING FOR EXISTING 'BLD' IF THIS IS & ! A NEW PROGRAM BEING ADDED & ! PUT THE EXISTING BUILD FILE TO A 'SAVE' BUILD FILE & ! OPEN THE EXISTING BUILD FILE AND READ INTO PROGRAM & ! BOTH THE CMD AND ODL FILES AND KEEP THEM AS ONE VARIBLE & ! & & 10080 INPUT LINE #IN.CHNL%, TMP$ UNTIL LEFT(TMP$,10%) == ";**** CMD*" & ! & ! READ INPUT UNTIL FIND FIRST DESIRED LINE & ! & 10100 INPUT LINE #IN.CHNL%, TMP$ & \ GOTO 10110 IF LEFT(TMP$,10%) == ";**** ODL*" & \ CMD$ = CMD$ + TMP$ & \ GOTO 10100 & ! & ! SAVE ALL 'COMMAND' LINES INTO VARIABLE CMD$ & ! LOOKING FOR THE FIRST LINE OF THE ODL & ! & 10110 INPUT LINE #IN.CHNL%, TMP$ & \ ODL$ = ODL$ + TMP$ & \ GOTO 10110 & ! & ! SAVE ALL THE ODL LINES INTO VARIABLE ODL$ & ! ON ERROR TRAP WILL RESUME NEXT LINE WHEN EOF FOUND & ! & 10120 CLOSE #IN.CHNL% & ! & ! CLOSE THE INPUT FILE & ! & 10125 GOTO 10130 IF SWITCH%(17%) & \ SYS$ = FNKILL.FILE$(LIBR.BLD.ACC$ + USER.FILE.NO.EXT$ + "HLD") & ! & ! IF REPLACING EXISTING CMD, ODL THEN DONT DELETE AND RENAME & ! TRY TO KILL THE OLD 'BLD' FILE, THERE MAY OR MAY NOT BE ONE & ! (NON-FATAL TO KILL A NON-EXISTANT 'BLD' & ! & 10126 SYS$ = FNNAME.FROM.TO$(LIBR.BLD.ACC$ + USER.FILE.NO.EXT$ + "BLD", & LIBR.BLD.ACC$ + USER.FILE.NO.EXT$ + "HLD") & ! & ! NAME THE EXISTING BUILD FILE TO THE OLD ONE & ! (NON-FATAL ERROR TO RENAME NON-EXISTANT FILE) & ! & 10130 OPEN LIBR.BLD.ACC$ + USER.FILE.NO.EXT$ + "BLD" & FOR OUTPUT AS FILE #OUT.CHNL% & \ PRINT #KB.CHNL%, CRLF$ + "Creating "+LIBR.BLD.ACC$+USER.FILE.NO.EXT$ & + "BLD from "; IF SWITCH%(19%) OR SWITCH%(20%) & \ GOTO 10140 UNLESS SWITCH%(14%) & \ PRINT #OUT.CHNL%, CMD$; & \ PRINT #KB.CHNL%, "Existing CMD"; IF SWITCH%(19%) OR SWITCH%(20%) & \ GOTO 10160 & ! & ! OPEN NEW BUILD FILE & ! IF WANT TO KEEP OLD 'ODL' THEN PRINT ODL$ TO OUTPUT & ! OTHERWISE OPEN USER ACCOUNT FILE AND PRINT IT TO THE BUILD & ! FILE & ! & 10140 OPEN USER.ACC$ + USER.FILE.NO.EXT$ + "CMD" & FOR INPUT AS FILE #IN.CHNL%, & MODE 8192% & \ PRINT #KB.CHNL%, USER.ACC$ + USER.FILE.NO.EXT$ + "CMD"; & IF SWITCH%(19%) OR SWITCH%(20%) & \ PRINT #OUT.CHNL%, ";**** CMD*" & ! & ! OPEN THE USER'S VERSION OF THE CMD & ! & 10150 INPUT LINE #IN.CHNL%, TMP$ & \ PRINT #OUT.CHNL%, TMP$; & \ GOTO 10150 & ! & ! GET AND PUT LINE UNTIL EOF ERROR & ! & 10160 CLOSE #IN.CHNL% & \ GOTO 10170 UNLESS SWITCH%(15%) & \ PRINT #OUT.CHNL%, ODL$; & \ PRINT #KB.CHNL%, " and existing ODL" IF SWITCH%(19%) OR SWITCH%(20%) & \ GOTO 10190 & ! & ! CLOSE INPUT CHANNEL & ! REPLACE ODL WITH USER'S ODL UNLESS WANTS TO KEEP THE ORIGINAL & ! & 10170 OPEN USER.ACC$ + USER.FILE.NO.EXT$ + "ODL" & FOR INPUT AS FILE #IN.CHNL%, & MODE 8192% & \ PRINT #KB.CHNL%, " and " + USER.ACC$ + USER.FILE.NO.EXT$ + "ODL" & IF SWITCH%(19%) OR SWITCH%(20%) & \ PRINT #OUT.CHNL%, ";**** ODL*" & ! & ! OPEN THE USER'S ODL FILE & ! & 10180 INPUT LINE #IN.CHNL%, TMP$ & \ PRINT #OUT.CHNL%, TMP$; & \ GOTO 10180 & ! & ! COPY THE ODL FILE INTO THE BUILD FILE & ! & 10190 CLOSE #IN.CHNL%, #OUT.CHNL% & \ SYS$ = FNKILL.FILE$(USER.ACC$ + USER.FILE.NO.EXT$ + "CMD") & \ SYS$ = FNKILL.FILE$(USER.ACC$ + USER.FILE.NO.EXT$ + "ODL") & \ SYS$ = FNKILL.FILE$(USER.ACC$ + USER.FILE.NO.EXT$ + "OBJ") & \ SYS$ = FNKILL.FILE$(USER.ACC$ + USER.FILE.NO.EXT$ + "MAP") & \ SYS$ = FNKILL.FILE$(USER.ACC$ + USER.FILE.NO.EXT$ + "BAK") & ! & ! CLOSE BOTH THE INPUT AND OUTPUT FILES & ! KILL THE CMD AND THE ODL FILE THAT ARE IN THE USER'S ACCOUNT & ! EVEN IF THEY WERE NOT TO BE REPLACED, JUST CLEAN UP THE & ! ACCOUNT FOR HIM. (NON-FATAL ERROR TO KILL NON-EXISTANT & ! 'CMD' OR 'ODL' FILE & ! & ! GOAHEAD AND TRY TO CLEAN UP USER'S ACCOUNT BY GETTING RID OF & ! THEIR OBJ, MAP, AND BAK FILES & ! 10500 !********************************************************************* & ! ALL THE TRANSFERS HAVE BEEN MADE THAT WERE REQUESTED * & ! NOW MUST UPDATE THE LIBRARIAN FILE TO REFLECT THE CHANGES * & ! AND THAT THE PROGRAM IS NOW AVAILABLE TO OTHERS * & ! * & !********************************************************************* & PDP.PROGRAM.LOCKED%(0%) = 0% & \ CALL DATECV(5%,1%,DATE$(0%)) & \ PDP.ACCOUNT.DATE%(0%) = INT( DATE.JUL - 70000. ) & \ TMP$ = TIME$(0%) & \ PDP.ACCOUNT.TIME%(0%) = & 60% * (24% - VAL( LEFT(TMP$,2%) ) ) - VAL( RIGHT(TMP$,4%) ) & \ UPDATE #LBR.CHNL% & \ RETURN & ! & ! 11000 TRANSFER.IN.FILE$ = USER.ACC$ + USER.FILE.NO.EXT$ + PROG.EXT$ & \ TRANSFER.OUT.FILE$ = DEST.ACC$ + USER.FILE.NO.EXT$ + PROG.EXT$ & \ TRANSFER.SAVE.FILE$ = DEST.ACC$ + USER.FILE.NO.EXT$ + SAVE.EXT$ & \ GOTO 11070 IF SWITCH%(17%) OR SWITCH%(18%) & ! & ! BUILD UP THE FILE NAMES FOR THE INPUT, OUTPUT & ! AND THE SAVE FILE & ! & 11010 SYS$ = FNKILL.FILE$(TRANSFER.SAVE.FILE$) & ! & ! KILL THE OLD SAVE FILE & ! MAKE WAY FOR NEW ONE UNLESS REPLACING EXISTANT FILE & ! WITHOUT SAVING, OR A NEW PROGRAM IS BEING ADDED TO THE & ! LIBRARY & ! & 11020 SYS$ = FNNAME.FROM.TO$(TRANSFER.OUT.FILE$, TRANSFER.SAVE.FILE$) & \ FILES.MOVED% = FILES.MOVED% + FILE1% & ! & ! RENAME THE EXISTING FILE TO THE SAVE FILE & ! (FASTER THAN FAST COPY, AND SAVES THE OLD CREATION & ! TIME AND DATES, NON-FATAL IF FILE NOT FOUND) & ! & 11070 DUMM$ = FNFAST.COPY$(TRANSFER.IN.FILE$,TRANSFER.OUT.FILE$) & \ FILES.MOVED% = FILES.MOVED% + FILE2% & \ SYS$ = FNKILL.FILE$(TRANSFER.IN.FILE$) & \ RETURN & ! & ! THE FIRST FILE TO BE MOVED WILL BE THE SOURCE BACK INTO THE & ! SOURCE LIBRARY ACCOUNT & ! BUT FIRST KILL THE OLD VERSION, IN OUR CASE THE "B2V" OR & ! THE "BSV" IN THE SOURCE LIBRARY ACCOUNT, & ! RENAME THE EXITING "B2S" OR "BAS" TO "B2V" OR "BSV" & ! THEN COPY IN THE NEW SOURCE. & ! & ! KILL THE USER'S SOURCE FILE FROM HIS ACCOUNT & ! & ! THERE ARE SOME POSSIBLE SWITCHES THAT WILL CHANGE THIS & ! SLIGHTLY; THEY ARE: & ! SWITCH%(6%) - DO NOT REPLACE BASIC PLUS SOURCE & ! SWITCH%(7%) - DO NOT REPLACE BASIC PLUS TWO SOURCE & ! SWITCH%(17%)- REPLACE EXISTING SOURCE WITHOUT SAVING & ! THE CURRENT ".B2S" TO A ".BSV" & ! & ! CREATE FILE NAMES FOR INPUT AND OUTPUT, FIRST TO SAVE THE & ! EXISTING BACK TO A SAVE, THEN THE MODDIFIED VERSION TO & ! THE CURRENT SOURCE, FILENAMES INCLUDE MINIMUM OF ACCOUNT & ! AND FULL FILE SPECIFICATION, ON LIBRARY ACCOUNT NAME ALSO & ! INCLUDES WHICH DISK OUTPUT SHOULD BE TO. & ! & ! DO THE FAST COPY TO A SAVE FIRST & ! THEN DO THE FAST COPY FROM USER ACCOUNT TO CURRENT SOURCE & ! AFTER EACH TRANSFER UPDATE THE FILES.MOVED FLAG, SO THAT & ! INCASE SOMETHING GOES WRONG WE CAN TELL THE USER WHAT & ! WAS COMPLETED & ! & ! KILL THE SOURCE FROM THE USER'S ACCOUNT & ! & ! 12000 !********************************************************************* & ! THIS SECTION LISTS OUT DATA FROM THE PDPLBR.IND FILE TO * & ! PRIVILEGED USERS ONLY. * & ! "/LI" = LIST PROGRAMS THAT ARE CURRENTLY OUT WITH * & ! ACCOUNT, DATE AND TIME TAKEN. * & ! "/FU" = LIST ALL PROGRAMS, WITH ALL HISTORY OF ACCOUNT, * & ! DATE, AND TIME TAKEN. * & ! * & !********************************************************************* & PRINT #KB.CHNL%, "Output to: "; & \ LINPUT #KB.CHNL%, TMP$ & \ TMP$ = EDIT$(TMP$,-1%) & \ TMP$ = "TI:" IF TMP$ = "" & \ OPEN TMP$ FOR OUTPUT AS FILE #HLP.CHNL% & ! & ! ASK FOR WHERE OUTPUT SHOULD GO TO & ! IF RETURN, THEN SET DEFAULT TO KB & ! OPEN FILE & ! & 12010 LSET PDP.PRMKEY$ = "ACCOUN LOC" & \ GET #LBR.CHNL%, KEY #0% GE PDP.PRMKEY$ & ! & ! GET FIRST RECORD IN FILE & ! & 12015 GOTO 12020 IF LEFT(FILE.NAME$,6%) == SPACE$(6%) & \ LSET PDP.PRMKEY$ = FILE.NAME$ & \ GET #LBR.CHNL%, KEY #0% EQ PDP.PRMKEY$ & \ GOTO 12040 & ! & ! GET A SPECIFIC PROGRAM ONLY & ! & 12020 GOTO 12499 IF LEFT(FILE.NAME$,6%) <> SPACE$(6%) & \ GET #LBR.CHNL% & ! & ! GET NEXT SEQUENTIAL RECORD & ! (ONLY ONE 'ACCUN LOC' RECORD IN FILE, SO THIS 'GET' WILL & ! WILL GET EITHER THE FIRST PROGRAM FILE NAME, OR THE NEXT) & ! & 12040 GOTO 12050 IF SWITCH%(22%) & \ GOTO 12020 UNLESS (PDP.PROGRAM.LOCKED%(0%) AND 1%) AND SWITCH%(21%) & ! & ! SKIP CHECK IF USER WANTS ALL OF RECORD DISPLAYED & ! OTHERWISE MAKE SURE THAT PROGRAM IS CHECKED OUT & ! BEFORE DISPLAYING IT & ! & 12050 PRINT #HLP.CHNL%, "Program name : " + PDP.PROGRAM.NAME$ + CRLF$ & + "Compiled location : " + PDP.COMPILED.DISK$ & + FNACC$(PDP.COMPILED.ACCOUNT%) & ! & + CRLF$ + SPACE$(5%) + "1" + SPACE$(3%) & + NUM1$(PDP.PROGRAM.LOCKED%(0%)) + SPACE$(3%) & + FNWHO$(PDP.ACCOUNT.RECEIVED%(0%),PDP.ACCOUNT.DATE%(0%), & PDP.ACCOUNT.TIME%(0%)) + CRLF$ & \ GOTO 12020 IF SWITCH%(21%) & ! & ! PRINT A SHORT LISTING OF ONLY THOSE THAT ARE CHECKED OUT & ! GO GET NEXT RECORD & ! & 12060 PRINT #HLP.CHNL%, SPACE$(5%) + "2" + SPACE$(3%) & + NUM1$(PDP.PROGRAM.LOCKED%(1%)) + SPACE$(3%) & + FNWHO$(PDP.ACCOUNT.RECEIVED%(1%),PDP.ACCOUNT.DATE%(1%), & PDP.ACCOUNT.TIME%(1%)) + CRLF$ & ! & + SPACE$(5%) + "3" + SPACE$(3%) & + NUM1$(PDP.PROGRAM.LOCKED%(2%)) + SPACE$(3%) & + FNWHO$(PDP.ACCOUNT.RECEIVED%(2%),PDP.ACCOUNT.DATE%(2%), & PDP.ACCOUNT.TIME%(2%)) + CRLF$ & ! & + SPACE$(5%) + "4" + SPACE$(3%) & + NUM1$(PDP.PROGRAM.LOCKED%(3%)) + SPACE$(3%) & + FNWHO$(PDP.ACCOUNT.RECEIVED%(3%),PDP.ACCOUNT.DATE%(3%), & PDP.ACCOUNT.TIME%(3%)) + CRLF$ & ! & + SPACE$(5%) + "5" + SPACE$(3%) & + NUM1$(PDP.PROGRAM.LOCKED%(4%)) + SPACE$(3%) & + FNWHO$(PDP.ACCOUNT.RECEIVED%(4%),PDP.ACCOUNT.DATE%(4%), & PDP.ACCOUNT.TIME%(4%)) + CRLF$ & ! & \ GOTO 12020 & ! & ! PRINT A "FULL" LISTING & ! GO AND GET NEXT RECORD & ! & 12499 CLOSE #HLP.CHNL% & \ RETURN & ! & ! CLOSE OUTPUT FILE & ! RETURN TO GOSUB & ! & ! 14000 !********************************************************************* & ! THIS SECTION UPDATES THE PDPLBR.IND FILE BY PROGRAM NAME * & ! * & !********************************************************************* & CHANGE.KEY% = 0% & \ PRINT #KB.CHNL%, CRLF$ & + "1 - Add 2 - Update 3 - Delete 4 - Quit "; & \ INPUT #KB.CHNL%, I% & \ GOTO 14000 IF I% < 1% OR I% > 4% & \ RETURN IF I% = 4% & \ ON I% GOSUB 14100, 14200, 14300 & \ GOTO 14000 & ! & ! GET READY FOR POSSIBLE ADDITION, DELETIONS OR CHANGES & ! ALSO DON'T FORGET TO QUIT & ! ALLOW USER ONCE HERE, TO DO MULITPLE UPDATED & ! & ! 14100 GOTO 14101 UNLESS LEFT(FILE.NAME$,6%) <> SPACE$(6%) & \ LSET PDP.PROGRAM.NAME$ = FILE.NAME$ & \ FILE.NAME$ = "" UNLESS SWITCH%(18%) & \ GOTO 14105 & ! & ! IF USER SPECIFIED FILENAME ALONG WITH SWITCH & ! THEN EXTRACT IT , DON'T ASK FOR ANOTHER ON FOR THE FIRST & ! TIME THROUGH & ! RESET FILENAME BACK TO NULL SO THAT WE WILL ASK FOR A NAME & ! THE SECOND OR MORE TIMES THROUGH & ! & 14101 GOSUB 14500 & ! & ! GO GET A VALID FILENAME & ! & 14105 GET #LBR.CHNL%, KEY #0% EQ PDP.PROGRAM.NAME$ & \ UNLOCK #LBR.CHNL% & \ PRINT #KB.CHNL%, CRLF$+ PDP.PROGRAM.NAME$ & + "Already on file, cannot be re-added." & \ GOTO 14199 & ! & ! MAKE SURE THAT THAT NAME DOES NOT ALREADY EXIST IN FILE & ! & 14110 IF I% = 4% & THEN PRINT #KB.CHNL%, "New account for account received, "+ & "IE '[20,0]'" & ELSE PRINT #KB.CHNL%, "Disk and Account for compiled program, IE "+ & "'DB1:[20,0]'" & 14115 LINPUT #KB.CHNL%, TMP$ & \ DUMM$ = SYS(CHR$(6%)+CHR$(-10%)+TMP$) & \ GOTO 14117 IF I% = 4% & \ GOTO 14110 UNLESS (SWAP%(DUMM%(12%)) AND 255%) = 255% & \ PDP.COMPILED.DISK$ = CHR$(DUMM%(11%) AND 255%) & + CHR$(SWAP%(DUMM%(11%)) AND 255%) & + NUM1$(DUMM%(12%) AND 255%) + ":" & \ PDP.COMPILED.ACCOUNT% = DUMM%(2%) & \ PRINT #KB.CHNL%, CRLF$ + PDP.COMPILED.DISK$; & 14117 PRINT #KB.CHNL%, FNACC$(DUMM%(2%)) & \ PRINT #KB.CHNL%, CRLF$ & \ LINPUT #KB.CHNL%, "Is this correct (Y/N): "; TMP$ & \ GOTO 14110 UNLESS ASCII(TMP$) = ASCII("Y") & \ RETURN IF GO.SUB% & ! & ! GET THE INPUT FROM USER & ! DO A FILE NAME STRING SCAN ON INPUT & ! MAKE SURE A DISK WAS SPECIFIED, IF NOT GOBACK AND ASK FOR & ! INPUT AGAIN & ! CREATE THE DISK NAME, AND SET THE ACCOUNT INTO THE & ! PROPER MAP VARIABLES & ! DISPLAY INPUT FOR USER AND MAKE SURE IT IS CORRECT & ! & 14130 PDP.PROGRAM.LOCKED%(I%), & PDP.ACCOUNT.RECEIVED%(I%), & PDP.ACCOUNT.TIME%(I%) = 0% FOR I% = 0% TO 4% & \ CALL DATECV(5%,1%,DATE$(0%)) & \ PDP.ACCOUNT.DATE%(I%) = DATE.JUL - 70000. FOR I% = 0% TO 4% & ! & ! ALL THE REQUIRED DATA HAS BEEN ACCEPTED & ! SO JUST ZERO FILL THE REST OF THE RECORD & ! & 14140 GO.SUB% = -1% & \ GOSUB 14210 & \ GO.SUB% = 0% & \ LINPUT #KB.CHNL%, "Is this correct (Y/N): "; TMP$ & \ GOTO 14140 IF ASCII(TMP$) <> ASCII("Y") AND ASCII(TMP$) <> ASCII("N") & \ GOTO 14100 IF ASCII(TMP$) = ASCII("N") & \ PUT #LBR.CHNL% & \ PRINT #KB.CHNL%, CRLF$+ "Record has been added to file" & ! & ! ONE LAST TIME TO MAKE SURE ABOVE DATA CORRECT & ! GO ASK AGAIN IF NOT, ADD IT TO THE FILE IF IT IS & ! & 14199 RETURN & ! & ! THAT'S ALL FOR THE ADD & ! & ! 14200 GOTO 14201 UNLESS LEFT(FILE.NAME$,6%) <> SPACE$(6%) & \ LSET PDP.PROGRAM.NAME$ = FILE.NAME$ & \ FILE.NAME$ = "" & \ GOTO 14205 & ! & ! IF USER SPECIFIED FILENAME ALONG WITH SWITCH & ! THEN EXTRACT IT , DON'T ASK FOR ANOTHER ON FOR THE FIRST & ! TIME THROUGH & ! RESET FILENAME BACK TO NULL SO THAT WE WILL ASK FOR A NAME & ! THE SECOND OR MORE TIMES THROUGH & ! & 14201 GOSUB 14500 & ! & ! GO GET A VALID FILENAME & ! & 14205 GET #LBR.CHNL%, KEY #0% EQ PDP.PROGRAM.NAME$ & ! & ! MAKE SURE THAT THAT NAME DOES ALREADY EXIST IN FILE & ! DO NOT UNLOCK THE RECORD SINCE IT MAY BE UPDATED & ! & 14210 PRINT #KB.CHNL%, PDP.PROGRAM.NAME$ + CRLF$ & + PDP.COMPILED.DISK$ + CRLF$ & + FNACC$(PDP.COMPILED.ACCOUNT%) & \ PRINT #KB.CHNL%, I%+1%, & PDP.PROGRAM.LOCKED%(I%), & FNACC$(PDP.ACCOUNT.RECEIVED%(I%)), & DATE$(PDP.ACCOUNT.DATE%(I%)), & TIME$(PDP.ACCOUNT.TIME%(I%))+CRLF$ & FOR I% = 0% TO 4% & \ RETURN IF GO.SUB% & ! & 14220 PRINT #KB.CHNL%, "Change: 1 - Program name" + CRLF$ & + " 2 - Compiled disk and account"+ CRLF$ & + " 3 - Program lock" + CRLF$ & + " 4 - Account received" + CRLF$ & + " 5 - Account date" + CRLF$ & + " 6 - Account time" + CRLF$ & + CRLF$ + "What to change: "; & 14230 INPUT #KB.CHNL%, I% & \ GOTO 14220 IF I% < 1% OR I% > 6% & \ GOTO 14240 IF I% < 3% & 14235 INPUT #KB.CHNL%, "For which record (1-5) "; J% & \ GOTO 14235 IF J% < 1% OR J% > 5% & \ J% = J% - 1% & 14240 GOTO 14242 UNLESS I% = 1% & \ CHANGE.KEY% = -1% & \ OLD.PROGRAM.NAME$ = PDP.PROGRAM.NAME$ & \ GOSUB 14500 & ! & ! IF USER WANTS TO CHANGE KEY, SET FLAG IN J% & ! SAVE THE OLD PROGRAM NAME & ! THEN GO GET A NEW ONE & ! & 14242 GO.SUB% = -1% & \ GOSUB 14110 IF I% = 2% & ! & ! GO GET A NEW DISK AND PPN & ! & \ GOTO 14244 UNLESS I% = 3% & \ PRINT #KB.CHNL%, "Old value: "; PDP.PROGRAM.LOCKED%(J%); & \ INPUT #KB.CHNL%, " New value: "; PDP.PROGRAM.LOCKED%(J%) & ! & ! GET A NEW LOCK VALUE & ! & 14244 GOTO 14245 UNLESS I% = 4% & \ PRINT #KB.CHNL%, "Old account is: " & + FNACC$(PDP.ACCOUNT.RECEIVED%(J%)) & \ GOSUB 14110 & \ PDP.ACCOUNT.RECEIVED%(J%) = DUMM%(2%) & ! & ! CHANGE ACCOUNT IF REQUESTED & ! & 14245 GO.SUB% = 0% & \ GOTO 14246 UNLESS I% = 5% & \ PRINT #KB.CHNL%, "Old date is: " & + DATE$(PDP.ACCOUNT.DATE%(J%)) & \ LINPUT #KB.CHNL%, "Enter date as 'MMDDYY' :";TMP$ & \ CALL DATECV(3%,1%,TMP$) & \ PDP.ACCOUNT.DATE%(J%) = & INT( DATE.JUL - 70000. ) & \ PRINT #KB.CHNL%, "New date is: " & + DATE$(PDP.ACCOUNT.DATE%(J%)) & ! & ! CHANGE DATE IF REQUESTED & ! & 14246 GOTO 14248 UNLESS I% = 6% & \ PRINT #KB.CHNL%, "Old time is: " & + TIME$(PDP.ACCOUNT.TIME%(J%)) & \ LINPUT #KB.CHNL%, "Enter time as 'HH:MM' :"; TMP$ & \ PDP.ACCOUNT.TIME%(J%) = & 60% * (24% - VAL( LEFT(TMP$,2%) ) ) - VAL( RIGHT(TMP$,4%) ) & \ PRINT #KB.CHNL%, "New time is: " & + TIME$(PDP.ACCOUNT.TIME%(J%)) & ! & ! CHANGE TIME IF REQUESTED & ! & 14248 LINPUT #KB.CHNL%, "Any more changes (Y/N): "; TMP$ & \ GOTO 14248 IF ASCII(TMP$) <> ASCII("Y") AND ASCII(TMP$) <> ASCII("N") & \ GOTO 14220 IF ASCII(TMP$) = ASCII("Y") & & 14250 GO.SUB% = -1% & \ GOSUB 14210 & \ GO.SUB% = 0% & \ LINPUT #KB.CHNL%, "Is this correct (Y/N): "; TMP$ & \ GOTO 14250 IF ASCII(TMP$) <> ASCII("Y") AND ASCII(TMP$) <> ASCII("N") & \ GOTO 14100 IF ASCII(TMP$) = ASCII("N") & \ GOTO 14260 UNLESS CHANGE.KEY% & \ TMP$ = PDP.MAXSIZ$ & \ GET #LBR.CHNL%, KEY #0% EQ OLD.PROGRAM.NAME$ & \ DELETE #LBR.CHNL% & \ LSET PDP.MAXSIZ$ = TMP$ & ! & ! CHECK AND SEE IF KEY WAS CHANGED, IF SO KEEP MODIFIED RECORD & ! GET ORIGINAL RECORD AND DELETE IT & ! THEN REPLACE SAVED RECORD AND UPDATE (REALLY PUT) RECORD & ! BACK INTO FILE & ! & 14260 UPDATE #LBR.CHNL% & \ UNLOCK #LBR.CHNL% & \ PRINT #KB.CHNL%, CRLF$+ "Record has been updated" & ! & ! ONE LAST TIME TO MAKE SURE ABOVE DATA CORRECT & ! GO ASK AGAIN IF NOT, ADD IT TO THE FILE IF IT IS & ! & 14270 RETURN & ! & ! 14300 GOTO 14301 UNLESS LEFT(FILE.NAME$,6%) <> SPACE$(6%) & \ LSET PDP.PROGRAM.NAME$ = FILE.NAME$ & \ FILE.NAME$ = "" & \ GOTO 14305 & ! & ! IF USER SPECIFIED FILENAME ALONG WITH SWITCH & ! THEN EXTRACT IT , DON'T ASK FOR ANOTHER ON FOR THE FIRST & ! TIME THROUGH & ! RESET FILENAME BACK TO NULL SO THAT WE WILL ASK FOR A NAME & ! THE SECOND OR MORE TIMES THROUGH & ! & 14301 GOSUB 14500 & ! & ! GO GET A VALID FILENAME & ! & 14305 GET #LBR.CHNL%, KEY #0% EQ PDP.PROGRAM.NAME$ & ! & ! MAKE SURE THAT THAT NAME DOES ALREADY EXIST IN FILE & ! DO NOT UNLOCK THE RECORD SINCE IT MAY BE DELETED & ! & 14310 GO.SUB% = -1% & \ GOSUB 14210 & \ GO.SUB% = 0% & ! & ! GO PRINT THE FULL RECORD OUT FOR USER TO SEE & ! & 14320 PRINT #KB.CHNL%, CRLF$ + "Is this the record to be deleted (Y/N) : "; & \ INPUT #KB.CHNL%, TMP$ & \ GOTO 14320 IF ASCII(TMP$) <> ASCII("Y") AND ASCII(TMP$) <> ASCII("N") & \ GOTO 14399 IF ASCII(TMP$) = ASCII("N") & \ DELETE #LBR.CHNL% & \ PRINT #KB.CHNL%, CRLF$+ "Record has been deleted" & ! & 14399 RETURN & ! & ! 14500 !********************************************************************* & ! GET A PROGRAM NAME FOR THE 'UPDATE' SECTION ABOVE * & ! * & !********************************************************************* & PRINT #KB.CHNL%, "Complete file name and extension must be specified" & \ LINPUT #KB.CHNL%, "PDP.PROGRAM.NAME$ : "; PDP.PROGRAM.NAME$ & \ J% = INSTR(1%,PDP.PROGRAM.NAME$,".") & \ PDP.PROGRAM.NAME$ = LEFT(PDP.PROGRAM.NAME$,J%-1%) & + SPACE$(7%-J%) + RIGHT(PDP.PROGRAM.NAME$,J%) & ! & ! GET PROGRAM NAME TO BE ADDED, & ! PAD OUT NAME TO FULL 6 POSITIONS PAD WITH SPACE & ! IF NEEDED & ! & 14510 RETURN IF INSTR(1%,PDP.PROGRAM.NAME$,".B2S") OR & INSTR(1%,PDP.PROGRAM.NAME$,".BAS") & \ PRINT #KB.CHNL%, "Program name "+ PDP.PROGRAM.NAME$+ " invalid " & + "must be 'B2S' or 'BAS'" & \ GOTO 14500 & ! & ! NOW MAKE SURE A VALID EXETENSION WAS SUPPLIED & ! & ! 16000 SYS$ = FNKILL.FILE$(USER.ACC$ + FILE.NAME$ ) & \ GOTO 10500 IF SWITCH%(4%) & \ SYS$ = FNKILL.FILE$(USER.ACC$ + LEFT(FILE.NAME$,7%) + "ODL" ) & \ SYS$ = FNKILL.FILE$(USER.ACC$ + LEFT(FILE.NAME$,7%) + "CMD" ) & \ GOTO 10500 & ! & ! SPECIAL HANDLING OF "NOCHANGE" SWITCH # 8% & ! NO NEED TO COPY ANYTHING BACK, SO JUST KILL THE FILES & ! OUT OF THE USER'S ACCOUNT AND RESET LIBRARIAN SO OTHER & ! NOW HAVE ACCESS TO PROGRAM & ! & ! 18000 !********************************************************************* & ! /EXCHANGE -> MOVE TSK TO BAD, TSV TO TSK * & ! * & !********************************************************************* & DEST.ACC$ = PDP.COMPILED.DISK$ + FNACC$(PDP.COMPILED.ACCOUNT%) & \ TRANSFER.IN.FILE$ = DEST.ACC$ + USER.FILE.NO.EXT$ + "TSV" & \ TRANSFER.OUT.FILE$ = DEST.ACC$ + USER.FILE.NO.EXT$ + "TSK" & \ TRANSFER.SAVE.FILE$ = DEST.ACC$ + USER.FILE.NO.EXT$ + "BAD" & ! & 18020 PRINT #0%, CRLF$+ "This will REVERSE the /RE option for TSK's only"+ & CRLF$+ "Do you really want to name "+ & TRANSFER.OUT.FILE$+" to "+TRANSFER.SAVE.FILE$+ & CRLF$+ "and copy "+TRANSFER.IN.FILE$+" to "+ & TRANSFER.OUT.FILE$+ " (Y/N) "; & \ LINPUT #0%, TMP$ & \ TMP$ = EDIT$(TMP$,-1%) & \ TMP$ = "N" UNLESS LEN(TMP$) & \ GOTO 18020 UNLESS LEFT(TMP$,1%) = "N" OR LEFT(TMP$,1%) = "Y" & \ GOTO 18100 IF LEFT(TMP$,1%) = "N" & ! & ! TELL USER WHAT IS GOING TO HAPPEN IF THEY PROCEED & ! AND ASK THEM IF THIS IS WHAT THEY WANT & ! IF NOT GET OUT, OTHERWISE CONTINUE & ! & 18040 SYS$ = FNNAME.FROM.TO$(TRANSFER.OUT.FILE$, TRANSFER.SAVE.FILE$) & ! & ! TAKE EXISTING TASK AND RENAME IT TO 'BAD' & ! & 18060 DUMM$ = FNFAST.COPY$(TRANSFER.IN.FILE$,TRANSFER.OUT.FILE$) & \ NAME TRANSFER.OUT.FILE$ AS TRANSFER.OUT.FILE$ + "<240>" & ! & ! TAKE TSV AND COPY BACK INTO TSK & ! AND MAKE IT PRIVILEGED & ! & 18100 RETURN & ! 27000 DEF FNACC$(ACC%) = & "[" & + NUM1$( SWAP%( ACC% ) AND 255% ) & + "," & + NUM1$( ACC% AND 255% ) & + "]" & ! & ! TAKE THE INTEGER VALUE OF ACCOUNT NUMBER AND CREATE & ! THE STANDARD "[XXX,XXX]" PROJECT PROGRAMMER NUMBER & ! & ! 27100 DEF FNWHO$(ACC%,DAT%,TIM%) = & FNACC$(ACC%) & + " on " & + DATE$( DAT% ) & + " at " & + TIME$(TIM%) & ! & ! EXPAND INTEGER FORMAT DATE AND TIME TO BE PRINTED & ! & ! 27200 DEF FNFAST.COPY$(IN$,OUT$) & \ PRINT #KB.CHNL%, CRLF$+ "Copying "+ IN$+ " to "+ OUT$; & IF SWITCH%(19%) OR SWITCH%(20%) & \ OPEN IN$ FOR INPUT AS FILE #IN.CHNL%, & MODE 8192% & \ DUMM$ = FSP$(IN.CHNL%) & 27201 OPEN OUT$ FOR OUTPUT AS FILE #OUT.CHNL%, & FILESIZE DUMM%(2%), & MODE 64% & ! & ! OPEN IN FOR INPUT, READ ONLY & ! OUT FOR OUTPUT, FILESIZE OF THE INPUT FILE, & ! AND CONTIGOUS IF THE SYSTEM HAS THE FILESPACE & ! GET THE FAST COPY CHANNEL NUMBER & ! & 27202 ATRIB$ = RIGHT( & SYS(CHR$(6%)+CHR$(-25%)+CHR$(IN.CHNL%)+CHR$(0%)), & 5%) & \ RUN.TIME$ = SYS(CHR$(6%) + CHR$(-17%) + CHR$(OUT.CHNL%) & + RIGHT(ATRIB$,23%)) & ! & ! GET THE ATTRIBUTES FROM INPUT FILE & ! ALSO GET THE RUN TIME NAME OFF INPUT AND WRITE THEM TO & ! THE OUTPUT FILE & ! & 27203 GOTO 27210 UNLESS CVT$%(ATRIB$) & ! & ! IF INPUT DOES NOT HAVE ANY ATTRIBUTES THEN SKIP TRYING & ! TO WRITE THEM TO THE OUTPUT FILE & ! & 27204 ATB% = 21% & \ ATB% = ATB% - 2% UNTIL CVT$%(RIGHT(ATRIB$,ATB%)) & \ ATB% = (ATB% + 1%) / 2% & \ ATRIB$ = SYS(CHR$(6%)+CHR$(-25%)+CHR$(OUT.CHNL%)+CHR$(ATB%) & + LEFT(ATRIB$,ATB%*2%)) & ! & ! FIND OUT THE AMOUNT OF ATTRIBUTES THERE ARE FOR FILE & ! MAX VALUE OF ATB% IS 11%, MINIMUM IS 1% & ! WRITE ATTRIBUTES TO OUTPUT FILE & ! & 27210 GET #IN.CHNL% & \ PUT #SWAP.CHNL% & \ GOTO 27210 & ! & ! DO GET, PUT UNTIL EOF, ERROR TRAP WILL RESUME NEXT STATEMENT & ! & 27220 CLOSE #IN.CHNL%, #OUT.CHNL% & \ PRINT #KB.CHNL%, " ...completed" IF SWITCH%(19%) OR SWITCH%(20%) & \ FNEND & ! & ! CLOSE THE TWO FILES & ! QUIT & ! & ! 27300 DEF FNNAME.FROM.TO$(IN$,OUT$) & \ PRINT #KB.CHNL%, CRLF$+ "Naming "+ IN$+ " to "+ OUT$ & IF SWITCH%(19%) OR SWITCH%(20%) & \ NAME IN$ AS OUT$ & 27310 FNEND & ! & ! RENAME ROUTINE, FROM CURRENT VERSION TO OLD VERSION & ! DISPLAY MESSAGE IF WATCH OR LOG SWITCH & ! & ! 27400 DEF FNKILL.FILE$(IN$) & \ PRINT #KB.CHNL%, CRLF$ + "Deleting " + IN$ & IF SWITCH%(19%) OR SWITCH%(20%) & \ KILL IN$ & 27410 FNEND & ! & ! KILL ROUTINE, DISPLAY MESSAGE IF WATCH OR LOG SWITCH & ! & ! 28000 !********************************************************************* & ! SUPPLY FULL HELP DESCRIPTION TO USER * & ! * & !********************************************************************* & OPEN "DB0:[1,3]PDPLBR.HLP" FOR INPUT AS FILE #HLP.CHNL%, & MODE 8192% & ! & ! OPEN HELP FILE READ ONLY & ! & 28010 GET #HLP.CHNL% & \ PUT #SWAP%(HLP.CHNL%) + KB.CHNL% & \ GOTO 28010 & ! & ! GET HELP FILE, AND PUT IT TO THE KEYBOARD & ! ON ERROR 11 RESUME NEXT LINE & ! & 28020 CLOSE #HLP.CHNL% & \ GOTO 1060 & ! & ! CLOSE HELP FILE & ! GOBACK AND PROMPT USER FOR DATA LINE & ! & ! 28500 !********************************************************************* & ! BRIEF HELP, PRIMARILY EXAMPLES OF MOST COMMONLY USED SWITCHES* & ! * & !********************************************************************* & PRINT #KB.CHNL%, "BRIEF HELP"+ CRLF$+ & "EXTRACT A MODULE FROM LIBRARY TO CURRENT ACCOUNT"+ & CRLF$+ CRLF$+ & " COMMAND PERFORMS"+ & CRLF$+ & "Filename/CO copies .B2S, .CMD, .ODL to current account"+ & CRLF$+ & "Filename/CO/BAS copies .BAS to current account"+ & CRLF$+ & "Filename/CO/MAP copies .B2S to current account"+ & CRLF$+ & "Filename/CO/SUB copies .B2S to current account"+ & CRLF$+ CRLF$+ & "Filename/RE saves existing .B2S, .TSK, .CMD, .ODL, replaces"+ & CRLF$+ & " .TSK, .B2S, .CMD, .ODL, and deletes"+ & CRLF$+ & " all of these files from your account"+ & CRLF$+ & "Filename/RE/BAS saves existing .BAS, .BAC, replaces"+ & CRLF$+ & " .BAS, .BAC, and deletes both files from your account"+ & CRLF$+ & "Filename/RE/MAP saves existing .B2S, replaces .B2S"+ & CRLF$+ & " and deletes these files from your account"+ & CRLF$+ & "Filename/RE/SUB saves existing .B2S, .OBJ, replaces .B2S AND .OBJ"+ & CRLF$+ & " and deletes these files from your account"+ & CRLF$+ CRLF$+ CRLF$+ & "OTHER SWITCHES"+ & CRLF$+ & "/RO read only - used only when copying, module cannot be replaced"+ & CRLF$+ & "/REX replace exisiting - used only when replacing, does not do save"+ & CRLF$+ & " of current modules to 'saved' modules"+ & CRLF$+ & "/NEW replace only - used when adding a new program to library" & 28599 SLEEP 5% & \ GOTO 1060 & ! & ! PRINT SHORT EXAMPLES OF COMMANDS & ! GOBACK TO PROMPT & ! & ! 29000 !********************************************************************* & ! DATA SWITCHES FOR INPUT * & ! * & !********************************************************************* & DATA 25, & "/CO", 0, & "/RO", 0 & 29010 !********************************************************************* & ! DATA SWITCHES FOR INPUT OR OUTPUT * & ! * & !********************************************************************* & DATA "/MAP", 0, & "/SUB", 0, & "/BA", 0, & "/B2", 0, & "/NOBA", 0, & "/NOB2", 0 & 29020 !********************************************************************* & ! SPECIAL CASE SWITCH - NOCHANGE * & ! * & !********************************************************************* & DATA "/NOCH", 0 & 29030 !********************************************************************* & ! DATA SWITCHES FOR OUTPUT ONLY * & ! * & !********************************************************************* & DATA "/RE", 0, & "/TS", -1, & "/CM", -1, & "/OD", -1, & "/NOTS", 0, & "/NOCM", 0, & "/NOOD", 0, & "/NOOB", 0, & "/REX", 0, & "/NEW", 0 & 29040 !********************************************************************* & ! GENERAL DATA SWITCHES FOR PROGRAM MONITORING * & ! * & !********************************************************************* & DATA "/WA", 0, & "/LO", 0 & 29050 !********************************************************************* & ! DATA SWITCHES FOR PRIVILEGED USERS ONLY * & ! * & !********************************************************************* & DATA "/LI", 0, & "/FU", 0, & "/UP", 0 & 29060 !********************************************************************* & ! LATE ADDITIONS * & ! * & !********************************************************************* & DATA "/EXC", 0, & "/NOBL", 0 & 29090 ! & ! SWITCH%(0%) = COPY & ! SWITCH%(1%) = READ ONLY & ! & ! SWITCH%(2%) = MAP FILE & ! SWITCH%(3%) = SUBROUTINES & ! SWITCH%(4%) = BASIC PLUS SOURCE & ! SWITCH%(5%) = BASIC PLUS TWO SOURCE (DEFAULT) & ! SWITCH%(6%) = DO NOT REPLACE BASIC PLUS SOURCE & ! SWITCH%(7%) = DO NOT REPLACE BASIC PLUS TWO SOURCE & ! & ! SWITCH%(8%) = NOCHANGE & ! & ! SWITCH%(9%) = REPLACE & ! SWITCH%(10) = REPLACE TASK & ! SWITCH%(10) = REPLACE CMD & ! SWITCH%(12%) = REPLACE ODL & ! SWITCH%(13%) = DO NOT REPLACE TASK & ! SWITCH%(13) = DO NOT REPLACE CMD & ! SWITCH%(15%) = DO NOT REPLACE ODL & ! SWITCH%(16%) = DO NOT REPLACE OBJ & ! SWITCH%(17%) = REPLACE EXISTING SOURCE, TASK, CMD, ODL & ! NO SAVING OF EXISTING FILES & ! SWITCH%(18%) = NEW FILE, NO NEED TO SAVE EXISTING & ! & ! SWITCH%(19%) = WATCH PROGRESSION OF FILE TRANSFERENCE & ! SWITCH%(20%) = WATCH PROGRESSION OF FILE TRANSFERENCE & ! & ! SWITCH%(21%) = LIST MODULES THAT ARE CURRENTLY OUT & ! AND WHO HAS THEM (PRIVILEGED ONLY) & ! SWITCH%(22%) = LIST ALL MODULES, ALL PREVIOUS UPDATE & ! UPDATE INFORMATION (PRIVILEGED ONLY) & ! SWITCH%(23%) = MANUALLY UPDATE LIBRARIAN RECORDS; ONE & ! RECORD AT A TIME (PRIVILEGED ONLY) & ! SWITCH%(24%) = EXCHANGE TSV TO TSK, TSK TO BAD & ! SWITCH%(25%) = NO BLD ON COPY & ! & ! 30000 !********************************************************************* & ! CCL ENTRY INTO LIBRARIAN * & ! * & !********************************************************************* & SYS$ = SYS(CHR$(7%)) & \ SYS$ = EDIT$(SYS$,-1%) & \ IF LEFT(SYS$,6%) == "PDPLBR" & THEN DATA.LINE$ = RIGHT(SYS$,7%) & \ CCL.ENTRY% = -1% & \ GOTO 1000 & ELSE PRINT #KB.CHNL%, CRLF$+"CORE COMMON NOT SET CORRECTLY FOR CCL" & + CRLF$ + SYS$ + CRLF$ & \ GOTO 32767 & ! & ! GET CORE COMMON & ! COMPRESS INPUT LINE & ! IF THE FIRST SIX ARE NOT 'PDPLBR' THEN GET OUT & ! OTHERWISE STRIP OFF THE USER TYPED DATA & ! MAKE NOTE THAT THIS WAS A CCL ENTRY INTO PROGRAM & ! GO TO TOP OF PROGRAM SKIPPING PROMPTS & ! & 31000 PRINT #0%, "THERE IS NO CHAIN OPTION FOR PDPLBR, SORRY" & \ GOTO 32767 & ! & ! DO NOT ALLOW CHAINS INTO PROGRAM & ! & ! 32000 !********************************************************************* & ! ERROR TRAPPING * & ! * & !********************************************************************* & RESUME 32767 IF ERR = 28% & ! & ! ON CONTROL C EXIT PROGRAM & ! & \ IF ERR = 154% OR ERR = 10% & THEN SLEEP 2% & \ RESUME & ! & ! CATCH LOCKED BLOCKS OR PROTECTION VIOLATION & ! & 32005 RESUME 32767 IF ERR = 11% AND ERL = 1060% & ! & ! IF CONTROL-Z AT PROMPT LINE THEN EXIT PROGRAM & ! & \ IF ERR = 2% AND ERL = 4150% & THEN PRINT #KB.CHNL%, CRLF$ + ERT$(2%) & \ RESUME 32767 IF CCL.ENTRY% & \ RESUME 1060 & ! & ! FOUND ILLEGAL FILE NAME IN FILE NAME STRING SCAN & ! & 32007 RESUME 8080 IF ERR = 5% AND ERL = 8040% & ! & ! SHOULD NORMALLY OCCUR & ! TESTING TO BE SURE OUTPUT FILE NAME DOES NOT ALREADY EXIST & ! & \ IF ERR = 11% AND ERL = 8060% & THEN RESUME 32767 IF CCL.ENTRY% & \ RESUME 1060 & ! & ! END OF FILE TRAP AT PROMPT FOR 'DIFFERENT' OUTPUT FILE NAME & ! QUIT IF CCL ENTRY, OTHERWISE GO BACK TO PROMPT FOR INPUT & ! & 32010 RESUME 8140 IF ERR = 11% AND ERL = 8120% & ! & ! HAVE COMPLETED TRANSFER OF .B2S & ! CLOSE FILE AND RESUME TO TRANSFER CMD AND ODL & ! & \ RESUME 8280 IF ERR = 11% AND ERL = 8260% & ! & ! HAVE HIT END OF FILE OF "BLD" FILE & ! THIS FILE CONTAINS BOTH THE CMD AND ODL OF THE & ! PROGRAM. THIS ROUTINE EXTRACTS THEM BACK TO TWO & ! FILES, AND WHEN HITS THE END OF FILE RESUMES TO CLOSE & ! THE ODL AND PROCEDE WITH NOTIFICATION OF FILES COPIED & ! & \ IF ERR = 155% AND ERL = 6000% & THEN RESUME 6060 IF SWITCH%(18%) & \ PRINT #KB.CHNL%, CRLF$+PDP.PRMKEY$+" Not found in LBRARY.IND" & \ RESUME 32767 IF CCL.ENTRY% & \ RESUME 1060 & ! & ! TRIED TO GET NON EXISTANT FILE NAME FROM LIBRARIAN FILE & ! OK, IF A 'NEW' FILE BEING ADDED & ! & 32020 IF ERR = 5% & THEN PRINT #0%, CRLF$ + "Source file not found" IF ERL = 10010% & \ PRINT #0%, CRLF$ + "Object file not found" IF ERL = 10020% & \ PRINT #0%, CRLF$ + "TSK or BAC not found" IF ERL = 10025% & \ PRINT #0%, CRLF$ + "CMD file not found" IF ERL = 10030% & \ PRINT #0%, CRLF$ + "ODL file not found" IF ERL = 10040% & ! & 32030 RESUME 10120 IF ERR = 11% AND ERL = 10110% & ! & ! HIT END OF FILE FOR 'BLD' FILE WHILE READING IN DATA & ! (SINCE 'BLD' CONTAINS BOTH 'CMD' AND 'ODL' FILES & ! MUST READ INTO PROGRAM DATA WHICH WOULD NORMALLY & ! BE IN SEPERATE FILES, JUST INCASE THE USER MAY NOT & ! WANT TO REPLACE EITHER ONE OR BOTH FILES & ! & \ RESUME 10160 IF ERR = 11% AND ERL = 10150% & ! & ! HIT END OF FILE OF USER'S 'CMD' FILE, IF WE ARE USING & ! IT TO REPLACE THE EXISTING 'CMD' WITHIN THE 'BLD' FILE & ! & \ RESUME 10190 IF ERR = 11% AND ERL = 10180% & ! & ! HIT END OF FILE OF USER'S 'ODL' FILE, IF WE ARE USING & ! IT TO REPLACE THE EXISTING 'ODL' WITHIN THE 'BLD' FILE & ! & 32035 IF ERR = 155% AND ERL = 12015% & THEN PRINT #KB.CHNL%, CRLF$ + PDP.PRMKEY$ & + " Not found in LBRARY.IND" & \ RESUME 12499 & ! & ! PRIVILEGED USER TRIED TO LIST A NON-EXISTANT PROGRAM & ! & 32040 RESUME 12499 IF ERR = 11% AND ERL = 12020% & ! & ! READING LIBRARIAN FILE SEQUENTIALLY, HIT END OF FILE & ! & \ RESUME 32767 IF ERR = 11% AND (ERL/1000%) = 14% & ! & ! ON ANY CONTROL-Z AT INPUT PROMPT IN UPDATE SECTION & ! JUST QUIT & ! & \ RESUME 14110 IF ERR = 155% AND ERL = 14105% & ! & ! MAKE SURE RECORD DOES NOT ALREADY EXIST WHEN & ! TRYING TO ADD A NEW PROGRAM TO LIBRARIAN FILE & ! & \ IF ERR = 155% AND ( ERL = 14205% OR ERL = 14305% ) & THEN PRINT #KB.CHNL%, CRLF$ + "Record not found for program: " & + PDP.PROGRAM.NAME$ & \ RESUME 14199 & ! & ! DID NOT FIND RECORD WHEN TRYING TO UPDATE OR DELTE & ! MUST RESUME BACK AT A 'RETURN' SINCE WE WERE IN A 'GOSUB' & ! WHEN THE ERROR OCCURED & ! & 32050 RESUME 27220 IF ERR = 11% AND ERL = 27210% & ! & ! HIT END OF FILE WITHIN FAST COPY FILE ROUTINE & ! & \ IF ERR = 5% AND ERL = 27300 & THEN RESUME 27310 IF SWITCH%(18%) & \ PRINT #0%, CRLF$ & + "There is not an existing source or task to be saved." & + CRLF$ & + "If this is a new program make sure you " & + "have used the '/NEW' switch" & \ RESUME 32610 & ! & ! IF ERR OF FILE NOT FOUND, WHILE TRYING TO SAVE EXISTING & ! TASK TO OLD TASK AND THIS IS A NEW FILE BEING SAVED & ! THEN RESUME, OTHERSIWSE STATE THE ERROR AS TO WHY WE & ! CANNOT CONTINUE, THEN QUIT & ! & 32060 RESUME 27410 IF ERR = 5% AND ERL = 27400% & ! & ! TRIED TO KILL A NON-EXIATNT FILE & ! & \ RESUME 28020 IF ERR = 11% AND ERL = 28010% & ! & ! RESUME TO CLOSE 'HELP' FILE AFTER PRINTING IT FOR THE USER & ! & 32600 PRINT #0%, STRING$(3%,7%) + CRLF$ & + "UNEXPECTED ERROR " + NUM1$(ERR) + " IN PDPLBR AT LINE " & + NUM1$(ERL) + CRLF$ + ERT$(ERR) & ! & ! WHEN ALL ELSE FAILS, TELL USER WHAT HAPPENED & ! & 32610 PRINT #0%, CRLF$ & + "Files that were transfered before program error were:" & + CRLF$ & \ PRINT #0%, "NONE" IF FILES.MOVED% = 0% & \ PRINT #0%, "Original source to saved source" IF FILES.MOVED% AND 1% & \ PRINT #0%, "User source to Library source" IF FILES.MOVED% AND 2% & \ PRINT #0%, "Original object to saved object" IF FILES.MOVED% AND 4% & \ PRINT #0%, "User object to Library object" IF FILES.MOVED% AND 8% & \ PRINT #0%, "Original task to saved task" IF FILES.MOVED% AND 16% & \ PRINT #0%, "User task to Library task" IF FILES.MOVED% AND 32% & \ PRINT #0%, "Original CMD to saved CMD" IF FILES.MOVED% AND 64% & \ PRINT #0%, "User CMD to Library CMD" IF FILES.MOVED% AND 128% & \ PRINT #0%, "Original ODL to saved ODL" IF FILES.MOVED% AND 256% & \ PRINT #0%, "User ODL to Library ODL" IF FILES.MOVED% AND 512% & \ PRINT #0%, "Original source to your account" IF FILES.MOVED% AND 1024% & \ PRINT #0%, "Original CMD and ODL to your account" IF FILES.MOVED% AND 2048% & & 32767 CLOSE #I% FOR I% = 1% TO 12% & \ SYS$ = CHR$(9%) & \ END & ! & ! CLOSE ALL POSSIBLE FILES & ! CLEAR PROGRAM FROM MEMORY & ! END & ! &