- SNOBOL.OPR - THESE NOTES PROVIDE THE INFORMATION NECESSARY FOR THE MAINTENANCE AND GENERATION OF THE SNOBOL PROGRAMMING SYSTEM ON A PDP-10 SYSTEM. -TABLE OF CONTENTS- A. DESCRIPTION OF THE COMPONENT FILES B. COMPILING INSTRUCTIONS FOR EACH PROGRAM C. LOADING INSTRUCTIONS FOR THE SYSTEM D. PATCHING TECHNIQUES WITH DDT E. BRIEF HISTORY F. ACKNOWLEDGEMENTS A. DESCRIPTION OF THE COMPONENT FILES GENERAL- MOST OF THE FILES DESCRIBED HERE HAVE ALPHANUMERIC FILE NAMES AND NUMERIC EXTENSIONS. THE EXTENSION NUMBER IS INCREMENTED BY ONE EACH TIME AN EDIT HAS BEEN MADE. THE FOLLOWING COMMENTS WILL REFER ONLY TO THE FILENAMES, LEAVING THE READER TO DETER- MINE THE LATEST EXTENSION. 1. "C"-COMMON SUBROUTINES THIS IS A COLLECTION OF SUBROUTINES WHICH ARE CALLED PRIMIRARILY FROM MACROS INSIDE THE MAIN SNOBOL PROGRAM. THE ROUTINES ARE GROUPED HERE FOR CONVENIENCE DURING REASSEMBLY PERIODS SINCE IT IS MUCH QUICKER TO RE- ASSEMBLE "C" RATHER THAN "SNOBOL". EXAMPLES ARE THE 'DATE' ROUTINE, THE ROUTINE WHICH DOES ALL CHAR- ACTER STRING OUTPUTTING, AND THE ROUTINE WHICH CONVERTS A FLOATING POINT NUMBER INTO A STRING. 2. "EXECL"-EXECUTIVE, LOW PART THIS IS AN ARTIFACT OF THE FORTRAN EXECUTIVE SYSTEM. IT CONTAINS ALMOST EXCLUSIVELY ALL DATA DEFINITIONS AND WAS MEANT TO BE THE CLASSICAL 'LOW SEGMENT' IN THE EARLY WAY OF GENERATING TWO SEGMENT PROGRAMS. MANY OF THE DEFINITIONS WERE TAKEN FROM 'FX4'. 3. "EXEC"-EXECUTIVE ROUTINE THIS IS THE PROGRAM WHICH COMMUNICATES WITH THE USER AT START-UP TIME. IT ACCEPTS A STANDARD COMMAND STRING OF THE FORM LIST-DEVICE:FILE_SOURCE-DEVICE:FILE(S) THE ROUTINE WAS LARGELY STOLEN FROM THE FORTRAN EXEC SINCE IT HAD ALL THE FEATURES NEEDED BY SNOBOL, I.E. TMPCOR UUO INTERFACE, CCL INTERFACE AND THE ABILITY TO PROCESS SWITCHES. 4. "MACROS"-MACRO DEFINITION DEFINITIONS FOR SNOBOL THESE ARE THE 130 ODD MACRO DEFINITIONS NEEDED BY SNOBOL. THEY WERE CODED FROM THE DESCRIPTION PROVIDED BY BELL TELEPHONE LABORATORIES ENTITLED 'A GUIDE TO THE MACRO IMPLEMENTATION OF SNOBOL4' BY RALPH GRISWOLD. 5. "SYNTAX"-SYNTAX TABLES FOR SNOBOL THESE ARE THE APPROXIMATELY 25 TABLES WHICH DEFINE THE CHARACTER PROCESSING OF THE SNOBOL SYNTAX. THESE TABLES ARE USED BY THE 'STREAM' MACRO (WHICH CALLS THE 'STREEM' SUBROUTINE IN 'C'). THE TABLES ARE LAID OUT IN SUCH A WAY THAT EACH CHARACTER TAKES UP ONE HALFWORD. CONSEQUENTLY EACH TABLE IS 128/2 WORDS LONG. 6. "SNOBOL"-THE MAIN PROGRAM THIS IS THE 'MAIN PROGRAM' WHICH CONSISTS MAINLY OF THE MACROS CALLS, ALTHOUGH THERE IS A CONSIDERABLE AMOUNT OF ASSEMBLY LANGUAGE CODE TO HANDLE THE UNIQUE PDP-10 FEATURES. 7. "P"-PARAMETER DEFINITIONS THIS IS A SMALL FILE WHICH CONTAINS COMMON DEFINITIONS SUCH AS ACCUMULATOR ASSIGNMENTS. 8. "IFILE"-A MODIFIED 'IFILE' ROUTINE THIS IS A MODIFED 'IFILE' ROUTINE WHICH ACCEPTS SIX CHARACTER FILE NAMES, THREE CHARACTER EXTENSIONS, AND PROJECT-PROGRAMMER NUMBERS. IT IS USED BY THE 'EXEC' ROUTINE AS WELL AS FOR THE 'IFILE/OFILE' PRIMITIVE FUNCTIONS. 9. "FORSE"-FORTRAN OPERATING SYSTEM THIS IS A MODIFIED VERSION OF THE STANDARD FORTRAN OPERATING SYSTEM. THE CHANGES ARE PRIMARILY ENHANCE- MENTS TO HANDLE THE FULL CHARACTER SET AND TO FIX SOME OF THE RESULTING OBSCURE BUGS. 10. "LIBSNO"-LIBRARY ROUTINES FOR SNOBOL THIS IS 'FUDGED' VERSION OF LIB40.REL WHICH CONTAINS THE BINARY VERSIONS OF THE AFFECTED LIBRARY PROGRAMS SUCH AS IFILE, FORSE, TRAPS AND ALPHO. 11. "TRAPS"-TRAP HANDLER THIS IS A VERY SLIGHTLY MODIFIED VERSION OF THE STANDARD FORTRAN 'TRAPS' ROUTINE. AT 'OVTRAP' A CHANGE WAS MADE TO RE-CALL 'APRENB' UUO ON EVERY OCCURRENCE IN ORDER TO MAKE SNOBOL RUN SUCCESSFULLY ON PRE-4S72 MONITORS WHICH DO NOT KNOW ABOUT THE 400000 BIT IN THE APRENB UUO. 12. "DDT"-DYNAMIC DEBUGGING TECHNIQUE THIS JUST HAPPENS TO BE A RECENT VERSION OF DDT. IT IS INCLUDED HERE TO MAKE SURE A COPY IS AVAIL- ABLE WHICH IS ABLE TO HANDLE PATCHES INTO THE HIGH SEGMENT. 13. "ALPHO"-ALPHANUMERIC OUTPUT ROUTINE THIS CONTAINS ONE EDIT TO NOT CONVERT CONTROL CHARACTERS TO BLANKS AS IS DONE IN FORTRAN. OTHER- WISE IT IS THE STANDARD 'ALPHO' FORTRAN ROUTINE. 14. "MAC441"-MACRO VERSION 44 WITH ONE EDIT MACRO.44 (OR LATER) IS REQUIRED TO ASSEMBLE THE INDIVIDUAL PROGRAMS SINCE THE 'TWOSEG' PSUEDO-OP IS REQUIRED TO GENERATE A REENTRANT SYSTEM. 15. "LOAD52"-LOADER VERSION 52 THIS VERSION OF THE LOADER IS REQUIRED TO LOAD THE CODE PRODUCED BY MAC441. 16. "*.SNO"-SNOBOL SOURCE PROGRAMS THESE ARE A RANDOM COLLECTION OF SOURCE PROGRAMS I DEVELOPED WHILE MAKING SNOBOL. NOT ALL OF THEM WORK. THE ONES WHICH DO INCLUDE 'FACTOR', 'APIAPT', 'BRIDGE', 'TESTER', 'SORT', 'COMMON' AND 'SYNTAX'. THE REMAINDER ARE IN VARIOUS STATES OF COMPLETION. 17. "DEVTB"-DEVICE TABLE THIS FORTRAN 'DEVTB' WAS MODIFIED PRIMARILY TO MAKE DEVICE NUMBERS 5, 6, AND 7 CONSISTENT WITH STANDARD SNOBOL. WHILE I WAS AT IT, I ALSO MADE SOME OTHER ADDITIONS AND REARRANGEMENTS. 18. "EBCDIC"-EBCDIC TO ASCII CONVERSION THIS IS A MODIFIED 'CODE' PROGRAM USED TO CONVERT A 7 TRACK BCD TAPE GENERATED ON A 360. 19. "RUNOFF"-DOCUMENTATION PRODUCTION PROGRAM THIS IS A BINARY COPY OF A DECUS PROGRAM USED TO PRODUCE THE SNOBOL USER'S GUIDE. IT ACCEPTS AN ASCII FILE WITH IMBEDDED CONTROL CHARACTERS AND FORMATS THE OUTPUT. IT ACCEPTS A DEFAULT INPUT FILE EXTENSION OF 'RNO'. 20. "SNOBOL.RNO"-SNOBOL USER'S GUIDE THIS ASCII FILE IS IN RUNOFF FORMAT. TO PRODUCE THE SNOBOL USER'S GUIDE RUNOFF MUST PROCESS THIS FILE. 21. "SNONNN.MAP"-LOADER MAP THIS IS THE LOADER MAP WITH LOCAL SYMBOLS WHICH DESCRIBES THE DISTRIBUTED BINARY FILES. B. COMPILING INSTRUCTIONS EXCEPT AS NOTED BELOW ALL PROGRAMS ARE ASSEMBLED THE NORMAL WAY. 1. "C"-COMMON ROUTINES .RUN DSK MAC441 *CNNN,CNNN/C_P.NNN,C.NNN ;(NNN=VERSION NUMBER) * 2. "EXECL"-EXECUTIVE, LOW PART .RUN DSK MAC441 *EXECL,EXECL/C_P.NNN,EXECL.NNN * 3. "EXEC"-EXECUTIVE .RUN DSK MAC441 *EXEC,EXEC/C_EXEC.NNN * 4. "SNOBOL"-MAIN PROGRAM .RUN DSK MAC441 */P/PSNONNN,SNONNN/C_MACROS.NNN,P.NNN,SYNTAX.NNN,SNONNN.MAC * THE 'P' SWITCHES ARE REQUIRED TO PREVENT A MACRO PDL OVERFLOW C. LOADING INSTRUCTIONS THE PROGRAM "LOAD52" MUST BE USED IN ORDER TO LOAD THE OUTPUT PRODUCED BY MACRO.44. THE FOLLOWING FORMAT SHOULD BE CLOSELY FOLLOWED IN ORDER TO MAKE 'DDT' THE LAST PROGRAM LOADED IN ORDER TO RECOVER THE SPACE LATER. IT IS IMPORTANT THAT 'EXECL' BE LOADED FIRST BECAUSE THE IMPLEMENTATION OF THE 'SAVE' PRIMITIVE FUNCTION ADDED FOR THE PDP-10 DEPENDS UPON IT. .RUN DSK LOAD52 */S *EXECL,EXEC,CNNN,SNONNN *LIBSNO/L */F *DDT */B *DSK:SNONNN_/M *$ THIS SHOULD BE FOLLOWED BY THE 'SAVE' COMMAND OF THE FORM .SAV DSK SNONNN .JOB SAVED .THIS WILL MAKE THE PROGRAM REENTRANT BUT WILL LEAVE YOU WITH A NON-SHARABLE HIGH SEGMENT. THIS WILL MAKE IT EASIER TO MAKE ANY PATCHES TO THE HIGH SEGMENT IF IT BECOMES NECESSARY LATER. THE INTENT IS TO NOW SET UP 'JOBSA' SO THE SPACE USED BY THE SYMBOL TABLE AND DDT IS RECOVERED WHEN THE PROGRAM IS STARTED. THE RIGHT HALF OF 'JOBDDT' POINTS TO THE START ADDRESS OF DDT. THIS VALUE WILL BE PLACED IN THE LEFT HALF OF 'JOBSA', WHICH WILL BE COPIED TO JOBFF AUTOMATICALLY BY THE SYSTEM WHEN THE PROGRAM IS STARTED. SO DO THE FOLLOWING .GET DSK SNONNN .JOB SETUP ^C .DDT XXX $S$$R (TO SET THE TYPEOUT MODE TO WHAT WE WANT) JOBDDT[ TO GET THE LH AND RH OF JOBDDT JOBSA[ TO SEE WHAT IS IN JOBSA AT THIS POINT COPY THE RH OF JOBDDT INTO THE LH OF JOBSA FIND OUT HOW MANY '1K' BLOCKS ARE TAKEN BY THE RESULTING LOW SEGMENT. ASSUME THE VALUE OF THE RH OF JOBDDT IS 25567 THEN THE RESULTING SIZE IN 'K' CAN BE FOUND WITH DDT BY 25567$10R= 11116. THIS MEANS IT IS A LITTLE OVER 11K WE NOW WANT TO SHRINK THE LOW SEGMENT TO 12K (THE NEXT HIGHEST 1K BOUNDARY) WITH THE CORE COMMAND. THE CORE COMMAND VARIES DEPENDING WHETHER YOU ARE RUNNING WITH 4S50 OR LATER. WITH 4S50 THE ARGUMENT TO THE 'CORE' COMMAND IS INTERPRETED TO MEAN ONLY THE SIZE OF THE LOW SEGMENT, SO TO MAKE THE CORE IMAGE 12K TYPE ^C TO GET BACK TO THE MONITOR AND TYPE 'CORE 12'. WITH 4S72 AND LATER THE ARGUMENT TO THE 'CORE' COMMAND IS INTERPRETED TO MEAN THE SUM OF THE LOW AND HIGH SEGMENTS. SO TYPE ^C TO GET BACK TO THE MONITOR AND TYPE'CORE' WITH NO ARGUMENTS TO FIND OUT HOW BIG THE HIGH SEGMENT IS (THIS WILL BE THE SECOND NUMBER TYPED OUT). ADD TO THIS NUMBER THE DESIRED LOW SEGMENT SIZE AND TYPE THAT, SUCH AS 'CORE 28' ALL THAT IS NOW REQUIRED IS TO SAVE THE VERSION AS A SHARABLE REENTRANT PROGRAM, SUCH AS .SSAVE DSK SNOBOL ONE FINAL TASK REMAINS, AND THAT IS TO GENERATE A FILE KNOWN AS 'SNOBOL.INI'. THIS IS DONE BY STARTING AN UNRUN VERSION OF SNOBOL AND USING THE 'C' SWITCH, SUCH AS .RUN DSK SNOBOL */C *^C . NOW TRANSFER SNOBOL.LOW, SNOBOL.SHR, AND SNOBOL.INI TO SYS: AND THE VERSION IS READY FOR USE BY OTHERS. TO USE THIS VERSION ON YOUR OWN PRIVATE DISK AREA, ASSIGN YOUR DSK AREA, ASSIGN YOUR DSK TO SYS, SUCH AS .ASSIGN DSK SYS .DSK ASSIGNED AND YOU ARE ALL SET D. FINAL CORRECTIONS TO MAKE ANY PATCHES VIA DDT, USE THE NON-SHARABLE COPY, MAKE THE PATCHES AND PRODUCE THE 'SNOBOL.*' FILES AS DESCRIBED ABOVE. E. HISTORY SNOBOL ON THE PDP-10 WAS STARTED IN LATE MAY 1969. IN AUGUST A VERSION WAS RUNNING WHICH WOULD EXECUTE TRIVIAL PROGRAMS. BY JANUARY 1970 VERSION 2.0 WAS COMPLETED AND SUBMITTED TO DECUS. WORK STARTED ON MAKING THE SYSTEM REENTRANT IN LATE JANUARY WITH THE RELEASE OF VERSION 3.0 BY BELL LABS. IT TOOK ABOUT 2 WEEKS (ON THE ORDER OF 20 HOURS WORK) TO MAKE THE CHANGES AND GET THE NON-REENTRANT VERSION OF 3.0 RUNNING. WITH THIS DONE, WORK PROGRESSED TO MAKE IT REENTRANT. THIS WAS PLANNED ALL ALONG SO THERE WASN'T MUCH TO DO. THE BIGGEST PROBLEM WAS SPENDING AN ENORMOUS AMOUNT OF TIME FIGURING OUT HOW TO GENERATE THE GLOBAL LINKAGES REQUIRED OF THE 'HISEG' PSUEDO-OP DAYS. FINALLY IN MAY DAVE NIXON PRODUCED MACRO.44 AND LOADER.52 AND THE 'TWOSEG' FACILITY CAME INTO BEING. THIS MADE THE TASK OF GETTING SNOBOL RENTRANT TRIVIIAL. FINALLY VERSION 3.3 CORRECTIONS CAME OUT AND THE PACKAGE WAS ESSENTIALLY DONE IN LATE MARCH. EARLY VERSIONS WENT TO CARNEGIE-MELLON, WESTERN ELECTRIC, NIH,UC IRVINE AND BLAINE BELECKI. BUGS WERE FOUND AND CORRECTED IN LATE JUNE. THE PACKAGE WAS COMPLETED IN OCTOBER 1970. F. ACKNOWLEDGEMENTS 1. WITHOUT RALPH GRISWOLD AT BELL LABS SNOBOL WOULD NEVER HAVE GOTTEN OUT OF N.J. HIS WORK TO GENERATE THE DOCUMENTATION CAN NEVER BE UNDERESTIMATED. THANKS FOR THE MANY LETTERS AND STRANGE PHONE CALLS. 2. WITHOUT BILL WEIHER, FIRST AT COMPUTER CENTER AND THEN AT TYMSHARE, I COULD NEVER HAVE GOTTEN MANY OF THE BUGS IN MACRO AND LOADER FOUND. I SERIOUSLY DOUBT WHETHER I WOULD HAVE FINISHED WITHOUT HIS HELP. 3. WORK WAS DONE ON MANY MACHINES, NAMELY ISI(PORTLAND), COMPUTER CENTER CORP(SEATTLE), U. OF UTAH(SALT LAKE CITY), STANDFORD AI(PALO ALTO), UC IRVINE(IRVINE) AND SRI(MENLO PARK). I AM SURE I WOULD NEVER HAVE FINISHED HAD IT NOT BEEN FOR SRI WITH THEIR 200K OF CORE AND LIMITLESS MACHINE ACCESS. THE BULK OF THE REMAINDER WAS DONE AT COMPUTER CENTER BUT THE CHIEF ADVANCES THERE WERE TO PRODUCE MORE CASES OF PINK SCHEDULING THAN I CARE TO ADMIT.