%PL 78 FOR 8 LINES/INCH. 00001000 B5500 SNOBOL3 MANUAL. 00002000 00003000 00004000 00005000 00006000 00007000 00008000 00009000 00010000 00011000 00012000 JOHN M. CHAMBERS 00013000 COMPUTER SCIENCES DEPT. 00014000 1210 W. DAYTON STREET 00015000 UNIVERSITY OF WISCONSIN 00016000 MADISON, WISCONSIN 53706 00017000 00018000 00019000 %SECTION "CONTENTS." 00020000 %PAGE 1 00021000 CONTENTS: 00022000 00023000 1. INTRODUCTION 00024000 2. CONTROL CARDS 00025000 2.1. MCP CONTROL CARDS. 00026000 2.2. SNOBOL CONTROL CARDS. 00027000 3. PROGRAM ORGANIZATION. 00028000 3.1. INSTRUCTIONS. 00029000 3.2 PROGRAM-DEFINED FUNCTIONS. 00030000 3.2.1. FUNCTION CALLS. 00031000 3.2.2. FUNCTION RETURNS. 00032000 3.2.3. FUNCTION CODE. 00033000 3.2.4. CALLING DEFINE(). 00034000 3.3. PROGRAM ENTRY POINTS. 00035000 4. RULES. 00036000 4.1. THE STRING REFERENCE. 00037000 4.2. RULES WITH STRING REFERENCE ONLY. 00038000 4.3. RULES WITH PATTERNS. 00039000 4.4. RULES WITH REPLACEMENTS. 00040000 4.5. RULES WITH BOTH PATTERN AND REPLACEMENT. 00041000 5. EXPRESSIONS. 00042000 5.1. NAMES AND VALUES. 00043000 5.1.1. LITERALS. 00044000 5.1.2. NAMES 00045000 5.1.3. INDIRECTION. 00046000 5.2. CONCATENATION. 00047000 5.3. FUNCTION CALLS. 00048000 5.4. ARITHMETIC. 00049000 5.4.1. DIVISION MODES. 00050000 5.4.2. FAILURE OF ARITHMETIC. 00051000 5.4.3. ARITHMETIC FUNCTIONS. 00052000 5.4.4. ADDITIONAL COMMENTS ON ARITHMETIC. 00053000 6. PATTERNS. 00054000 6.1. CONSTANT PATTERN ELEMENTS. 00055000 6.2. STRING VARIABLES. 00056000 6.2.1. ARBITRARY STRING VARIABLES. 00057000 6.2.2. BALANCED STRING VARIABLES. 00058000 6.2.3. FIXED-LENGTH STRING VARIABLES. 00059000 6.3. BACK REFERENCES. 00060000 6.4. PATTERN MATCH MODES. 00061000 6.5. ASSIGNMENT OF STRING VARIABLES. 00062000 6.6. PATTERN MATCH ALGORITHM. 00063000 7. GO-TO PARTS, LABELS. 00064000 7.1 LABELS. 00065000 7.2. SIMPLE GO-TO PARTS. 00066000 7.3. RESERVED LABELS. 00067000 7.4. COMPUTED GO-TOS. 00068000 7.5. ERRORS IN GO-TO PARTS. 00069000 8. FAILURE. 00070000 8.1. CAUSES OF FAILURE. 00071000 8.2. ORDER OF EXECUTION. 00072000 9. INTRINSIC FUNCTIONS. 00073000 10. INPUT/OUTPUT. 00074000 10.1. I/O STRINGS. 00075000 10.2. OPEN AND CLOSED FILES. 00076000 10.3. STANDARD I/O STRINGS. 00077000 10.4. TELETYPES. 00078000 10.4.1. TELETYPE INPUT AND OUTPUT. 00079000 10.4.2. TELETYPE WAITING TIMES. 00080000 10.4.3. TELETYPE ADDRESSES. 00081000 10.4.4. SPECIAL CHARACTERS FOR THE TELETYPE. 00082000 10.5. CAUSES OF I/O. 00083000 11. DEBUGGING AIDS. 00084000 11.1. TRACING. 00085000 11.2. INTERACTIVE DEBUGGING. 00086000 12. MISCELLANEOUS. 00087000 APPENDIX A. BNF DEFINITIONS FOR SNOBOL3. 00088000 APPENDIX B. BNF NOTATION. 00089000 APPENDIX C. B5500 CHARACTER SET. 00090000 APPENDIX D. RUNNING JOBS FROM A TELETYPE. 00091000 INDEX. 00092000 00093000 %SECTION 1 00094000 %PAGE 1 00095000 1. INTRODUCTION 00096000 00097000 THIS MANUAL DESCRIBES THE PROGRAMMING LANGUAGE SNOBOL3, AS 00098000 IMPLEMENTED ON THE BURROUGHS B5500 AT THE UNIVERSITY OF WISCONSIN 00099000 (MADISON) BY JOHN M. CHAMBERS, WITH MUCH HELP IN IN THE DESIGN AND 00100000 INITIAL CODING STAGES BY WILLIAM KRUEGER, AND SOME HELP IN WRITING 00101000 THE COMPILER BY DAVID WILSON. 00102000 THE VERSION OF SNOBOL3 DESCRIBED HERE IS BASICALLY IDENTICAL 00103000 WITH THE LANGUAGE DEVELOPED AT BELL LABS, WITH THE OBVIOUS DIFFERENCES 00104000 OF CHARACTER SET AND I/O FACILITIES. (THERE IS ALSO A SLIGHT PROBLEM 00105000 WITH DIVISION, CAUSED BY THE FACT THAT THE B5500 HARDWARE ROUNDS 00106000 QUOTIENTS, WHILE MOST OTHER MACHINES TRUNCATE. SEE THE SECTION 00107000 ON ARITHMETIC.) THERE ARE, AS USUAL, A NUMBER OF "EXTENSIONS", 00108000 MOSTLY IN THE INTRINSIC FUNCTIONS. THE BASIC SNOBOL3 FUNCTIONS 00109000 ACT AS THEY DO ON OTHER SYSTEMS, BUT THOSE WHOSE ACTIONS ARE MACHINE 00110000 DEPENDENT ARE OFTEN DIFFERENT. THERE ARE A NUMBER OF NEW FUNCTIONS 00111000 THAT REFLECT THE PECULIARITIES OF THE B5500 OPERATING SYSTEM. 00112000 MOST SNOBOL3 PROGRAMS WRITTEN ON OTHER MACHINES CAN BE RUN ON 00113000 THE B5500 WITH ONLY MINOR CHANGES IN THE I/O, MOST OF WHICH CAN BE 00114000 MADE BY THE COMPILER ITSELF. 00115000 AN EXTREMELY USEFUL FACILITY OF THE B5500 IS THE AVAILABILITY OF 00116000 TELETYPES AS I/O DEVICES. NATURALLY, THIS IS AVAILABLE TO SNOBOL 00117000 IN AN EASILY-USED MANNER, AND A SIMPLE, VERY USEFUL INTERACTIVE 00118000 DEBUGGING AID HAS BEEN SUPPLIED FOR TELETYPE USERS. 00119000 %SECTION 2 00120000 %PAGE 1 00121000 2. CONTROL CARDS 00122000 00123000 THERE ARE TWO TYPES OF CONTROL CARDS RELEVANT FOR SNOBOL JOBS-- 00124000 THOSE THAT GIVE INFORMATION TO THE OPERATING SYSTEM (THE "MASTER 00125000 CONTROL PROGRAM", OR "MCP"), WHICH START WITH A QUESTION MARK; AND 00126000 THOSE THAT GIVE INFORMATION TO THE SNOBOL COMPILER, WHICH START WITH 00127000 A MINUS SIGN ("-"). 00128000 00129000 2.1. MCP CONTROL CARDS. 00130000 AT THE START OF A DECK OF CARDS FOR BATCH JOBS, OR TYPED TO 00131000 INITIATE A TELETYPE JOB, THE USER NEEDS A SET OF MCP CONTROL CARDS 00132000 FOR BATCH JOBS. THESE ARE SEPARATE CARDS, EACH STARTING WITH A 00133000 QUESTION MARK ("ILLEGAL CHARACTER"). FOR TELETYPE JOBS, THE ENTIRE 00134000 SET OF CONTROL CARDS IS PRECEDED BY A PAIR OF QUESTION MARKS, AND 00135000 THE CARDS ARE SEPARATED BY SEMICOLONS (";"), WITH AN ARROW AFTER THE 00136000 LAST CONTROL CARD. 00137000 THE FIRST TWO CARDS IN A BATCH JOB SHOULD BE: 00138000 00139000 ? USER / 00140000 ? EXECUTE SNOBOL/SNOBOL 00141000 00142000 THE FIRST CARD IDENTIFIES THE USER TO THE MCP; THE SECOND TELLS IT 00143000 TO INITIATE SNOBOL. THE PROGRAM AND DATA DECK MUST BE PRECEDED BY 00144000 00145000 ? DATA 00146000 00147000 WHICH NAMES THE INPUT DECK. BETWEEN THE EXECUTE CARD AND THE DATA 00148000 CARD CAN COME ANY NUMBER OF OTHER CONTROL CARDS; SOME OF THE CARDS 00149000 THAT ARE USEFUL TO SNOBOL USERS ARE DESCRIBED BELOW. ONE OF THE 00150000 OTHER CONTROL CARDS MUST BE THE FOLLOWING: 00151000 00152000 ? FILE PROGRAM = 00153000 00154000 WHERE IS THE SAME AS THE ON THE DATA CARD. THIS 00155000 ASSIGNS THE CARD DECK AS THE INPUT FILE TO THE COMPILER. SOME OTHER 00156000 MCP CONTROL CARDS THAT CAN BE USED ARE: 00157000 00158000 ? PROCESS = 00159000 THIS PUTS A CPU TIME LIMIT TO THE ENTIRE RUN OF 00160000 MINUTES. IF THIS LIMIT IS EXCEEDED, THE JOB WILL BE TERMINATED00161000 BY THE MCP. THE DEFAULT CPU TIME LIMIT IS 2 MINUTES. 00162000 ? IO = 00163000 THIS PUTS A TIME LIMIT OF MINUTES TO THE I/O TIME 00164000 THAT CAN BE USED BY THE RUN. THE DEFAULT I/O LIMIT IS 00165000 5 MINUTES. 00166000 ? STACK = 00167000 THIS ASSIGNS A STACK OF WORDS TO THE RUN. THIS 00168000 IS ONLY NECESSARY IF THE PROGRAM REACHES GREAT DEPTHS OF 00169000 FUNCTION CALLS, CAUSING STACK OVERFLOWS. THE DEFAULT STACK 00170000 SIZE IS 512. 00171000 ? CORE = 00172000 THIS ASSIGNS A CORE ESTIMATE OF WORDS TO THE 00173000 RUN. THE JOB WILL BE STARTED WHEN THIS MANY WORDS BECOME 00174000 AVAILABLE. THE DEFAULT CORE ESTIMATE IS 10000. 00175000 00176000 A BATCH JOB CAN EXECUTE A SNOBOL PROGRAM FROM A DISK FILE IF THE 00177000 DATA CARD IS OMITTED AND THE PROGRAM CARD IS CHANGED TO: 00178000 00179000 ? FILE PROGRAM = / SERIAL 00180000 00181000 WHERE / IS THE NAME OF THE DISK FILE. IN GENERAL, 00182000 THE INPUT FILE NAMED "PROGRAM" CAN BE ASSIGNED TO ANY FILE WHICH 00183000 CAN BE READ WITH 10,30 BLOCKING. 00184000 ANOTHER CONTROL CARD WHICH IS OCCASIONALLY USEFUL, THOUGH THE 00185000 SAME RESULTS CAN BE ACHEIVED WITH THE SNOBOL FUNCTION FILL(), IS 00186000 THE FILE CARD, WHICH HAS THE GENERAL FORM: 00187000 00188000 ? FILE = / 00189000 00190000 WHERE IS THE "INTERNAL" NAME OF THE FILE, AND / 00191000 IS THE "EXTERNAL" NAME OF THE FILE ACTUALLY BEING USED. FOR SNOBOL 00192000 JOBS, SHOULD BE THE I/O STRING NAME, WITH THE EXCEPTION 00193000 OF THE STRING READ, WHICH THE MCP THINKS IS CALLED "PROGRAM". 00194000 INDICATES WHAT SORT OF I/O DEVICE IS TO BE USED. SOME 00195000 POSSIBLE VALUES FOR ARE: 00196000 SERIAL MEANS SERIAL DISK FILE 00197000 PRINT MEANS LINE PRINTER FILE--NO BACK-UP 00198000 PRINT OR BACK UP MEANS LINE PRINTER OR PRINTER BACK-UP 00199000 TAPE MEANS MAGNETIC TAPE 00200000 FOR INPUT FILES, IT IS ONLY NECESSARY TO DISTINGUISH DISK FILES 00201000 FROM NON-DISK FILES. OF THE STANDARD SNOBOL FILES, NEWDISK IS 00202000 ASSUMED TO BE A DISK FILE UNLESS DECLARED OTHERWISE; ALL OTHERS 00203000 ARE NON-DISK UNLESS THE USER SPECIFICALLY ASKS FOR DISK. 00204000 SOME EXAMPLES OF FILE CARDS ARE: 00205000 00206000 ? FILE CARD = RALPH/GRK SERIAL (DISK FILE) 00207000 ? FILE PROGRAM = MLX/PHLP (NON-DISK; ASSIGNS READ) 00208000 ? FILE PRINT = P PRINT OR BACK UP (GOES TO PRINTER IF IT CAN) 00209000 ? FILE PRINT = PRNT PRINT (LP, NO BACK-UP) 00210000 ? FILE NEWDISK = ART/BEVL (GOES TO DISK) 00211000 00212000 NOTE THAT THE FILE CARD ONLY APPLIES TO THE FIRST FILE THAT AN I/O 00213000 STRING IS ASSIGNED TO. TO RE-ASSIGN AN I/O STRING TO A SECOND FILE, 00214000 IT IS NECESSARY TO USE THE SNOBOL FUNCTIONS CLOSE() AND FILL(). 00215000 NOTE ESPECIALLY THAT TO ASSIGN THE INPUT FILE READ (WHICH CAN 00216000 ONLY BE DONE WITH TELETYPE JOBS, SINCE IT IS ASSIGNED TO THE PROGRAM 00217000 FILE AUTOMATICALLY FOR BATCH JOBS), THE CARD USED STARTS WITH 00218000 "? FILE PROGRAM", NOT WITH "? FILE READ". 00219000 00220000 00221000 %CP 30 00222000 SOME EXAMPLES OF BATCH JOBS: 00223000 00224000 TO RUN A SIMPLE BATCH JOB USING A CARD DECK, THE FOLLOWING MIGHT 00225000 BE USED: 00226000 00227000 ? USER 1234/5678 00228000 ? EXECUTE SNOBOL/SNOBOL 00229000 ? FILE PROGRAM = AJONES 00230000 ? PROCESS = 3 00231000 ? IO = 7 00232000 ? DATA AJONES 00233000 PROGRAM DECK 00234000 . 00235000 . 00236000 . 00237000 END 00238000 DATA DECK 00239000 00240000 00241000 00242000 TO RUN A SNOBOL PROGRAM FROM THE DISK FILE TMILLR/SDCK: 00243000 00244000 ? USER 9876/5432 00245000 ? EXECUTE SNOBOL/SNOBOL 00246000 ? FILE PROGRAM = TMILLR/SDCK SERIAL 00247000 ? PROCESS = 5 00248000 ? IO = 10 00249000 ? CORE = 18000 00250000 00251000 00252000 00253000 %CP 25 00254000 2.2. SNOBOL CONTROL CARDS. 00255000 00256000 VARIOUS ACTIONS OF THE SNOBOL COMPILER ARE CONTROLED BY SNOBOL 00257000 CONTROL CARDS, WHICH ARE ANY CARDS WITH A "-" IN COLUMN 1. IF SUCH 00258000 A CARD IS NOT A VALID CONTROL CARD, A DIAGNOSTIC MESSAGE WILL BE 00259000 PRINTED, AND THE CARD WILL BE IGNORED. THE CONTROL CARDS THAT ARE 00260000 CURRENTLY RECOGNIZED ARE: 00261000 00262000 00263000 00264000 %CP 4 00265000 -LIST 00266000 THIS INITIATES LISTING OF THE PROGRAM ON THE LINE PRINTER FILE, 00267000 PRINT. THERE WILL BE BLANK LINES BETWEEN EACH LINE 00268000 OF THE LISTING. IF IS OMITTED, 0 (ZERO) IS ASSUMED. 00269000 00270000 00271000 00272000 %CP 2 00273000 -UNLIST 00274000 THIS CARD STOPS THE LISTING. 00275000 00276000 00277000 00278000 %CP 3 00279000 -PCC 00280000 THIS CAUSES ALL CONTROL CARDS TO BE LISTED, EVEN IF THE PROGRAM 00281000 ITSELF IS NOT BEING LISTED. 00282000 00283000 00284000 00285000 %CP 2 00286000 -EJECT 00287000 THIS EJECTS THE LISTING TO THE TOP OF THE NEXT PAGE 00288000 00289000 00290000 00291000 %CP 3 00292000 -SPACE 00293000 THIS PRODUCES BLANK LINES IN THE LISTING. 00294000 00295000 00296000 00297000 %CP 6 00298000 -WIDTH 00299000 THIS SAYS THAT THE COMPILER IS TO USE THE FIRST 00300000 CHARACTERS OF EACH CARD READ FROM A CARD-IMAGE FILE. IT DOES 00301000 NOT APPLY TO INPUT FROM A TELETYPE. THE COMPILER ASSUMES 00302000 THAT 72 CHARACTERS ARE TO BE USED IF THIS CARD ISNT USED. THE 00303000 MAXIMUM CARD WIDTH IS 80. 00304000 00305000 00306000 00307000 %CP 6 00308000 -26 00309000 THIS SAYS THAT THE DECK WAS PUNCHED ON AN 026 KEYPUNCH, WITH 00310000 THE IBM/CDC CHARACTER SET. A CHARACTER-SET TRANSLATION WILL 00311000 BE MADE BY THE COMPILER BEFORE COMPILING EACH CARD. THE HANDLING 00312000 OF "SPECIAL CHARACTERS" NOT ON THE 026 IS NOT VERY WELL-DEFINED. 00313000 THIS CARD CAN ALSO BE WRITTEN "-026" IF DESIRED. 00314000 00315000 00316000 00317000 %CP 9 00318000 -3600 00319000 THIS CAUSES THE SAME CONVERSION AS THE -26 CARD, AND ALSO TRANSLATES 00320000 THE I/O STRING NAMES USED ON THE CDC3600 SNOBOL AS IMPLEMENTED 00321000 AT THE UNIVERSITY OF WISCONSIN. IN PARTICULAR, THE FOLLOWING 00322000 SUBSTITUTIONS ARE MADE: 00323000 00324000 "SYSPIT" BECOMES "READ " 00325000 "SYSLOK" BECOMES "LOOK " 00326000 "SYSPPT" BECOMES "PUNCH " 00327000 00328000 00329000 00330000 %CP 2 00331000 -B5500 00332000 THIS CANCELS ANY PREVIOUS -26 OR -3600 CARD. 00333000 00334000 00335000 00336000 %CP 5 00337000 -PUNCH 00338000 THIS CAUSES THE COMPILER TO PUNCH OUT THE PROGRAM DECK ON THE 00339000 CARD PUNCH, STARTING WITH THE NEXT CARD. THIS CAN BE USED WITH 00340000 A -26 OR -3600 CARD TO PRODUCE A B5500 DECK FROM A SNOBOL PROGRAM 00341000 WRITTEN FOR ANOTHER MACHINE. 00342000 00343000 00344000 00345000 %CP 8 00346000 -INFORM 00347000 THIS TURNS ON A SET OF SYSTEM INFORMATIVE DIAGNOSTICS. IT IS 00348000 EQUIVALENT TO THE RUN-TIME USE OF MODE("INFORM"). SOME MESSAGES 00349000 THAT ARE PRODUCED BY THE COMPILER IF THIS CARD IS USED ARE: 00350000 LABELS REFERENCED THAT ARE UNDEFINED (AT THE END OF THE LISTING); 00351000 INACCESSIBLE INSTRUCTIONS; USING -DEFINE TO RE-DEFINE A PREVIOUSLY 00352000 DEFINED FUNCTION; USING NON-NUMERIC LITERALS IN ARITHMETIC; 00353000 AND OTHER THINGS THAT MAY BE ADDED IN THE FUTURE. 00354000 00355000 00356000 00357000 %CP 2 00358000 -SILENCE 00359000 THIS CANCELS ANY PREVIOUS -INFORM CARD. 00360000 00361000 00362000 00363000 %CP 4 00364000 -WAIT 00365000 THIS SETS THE WAITING TIME FOR TELETYPE I/O TO 00366000 SECONDS. IT IS EQUIVALENT TO USING WAIT("") AT 00367000 RUN TIME. 00368000 00369000 00370000 00371000 %CP 12 00372000 -LIMIT 00373000 THIS SETS A PROGRAM LIMIT TO THE THING NAMED BY 00374000 TO THE VALUE OF . IF THIS LIMIT IS EXCEEDED, THE 00375000 PROGRAM WILL BE TERMINATED ABNORMALLY. SOME POSSIBLE VALUES 00376000 FOR ARE: 00377000 00378000 RULES SETS A LIMIT TO THE NUMBER OF RULES THAT CAN BE 00379000 EXECUTED. 00380000 PROCESS SETS A TIME LIMIT (IN SECONDS) TO THE PROGRAMS 00381000 CPU TIME. 00382000 IO SETS A TIME LIMIT (IN SECONDS) TO THE PROGRAMS 00383000 I/O TIME. 00384000 00385000 00386000 00387000 %CP 9 00388000 -SIZE 00389000 THIS TELLS THE COMPILER HOW MANY INSTRUCTIONS TO EXPECT IN THE 00390000 PROGRAM. IT NEED NOT BE USED; IT ALLOWS THE COMPILER TO SET 00391000 UP ITS TABLES TO TRY TO MINIMIZE THE TIME FOR BOTH COMPILATION 00392000 AND EXECUTION. THE VALUE OF SHOULD BE ABOUT (SAY, 00393000 WITHIN 25 OF) THE NUMBER OF INSTRUCTIONS IN THE PROGRAM. THIS CARD 00394000 CAN CAUSE SAVINGS OF 5-10% IN LARGE PROGRAMS. IF USED, A -SIZE 00395000 CARD MUST APPEAR BEFORE ALL PROGRAM MATERIAL (INCLUDING -SET, 00396000 -DEFINE, -COMPILE, AND -LOAD CARDS). 00397000 00398000 00399000 00400000 %CP 21 00401000 -SET 00402000 THIS CARD ASSIGNS AN INITIAL VALUE TO THE VARIABLE NAMED 00403000 . THE VALUE IS DETERMINED BY SCANNING THE CARD 00404000 FOR ALL LITERALS, AND CONCATENATING THEM. ANYTHING BETWEEN 00405000 THE LITERALS IS TREATED AS COMMENT. THUS, A LONG STRING CAN 00406000 BE BROKEN UP BETWEEN SEVERAL CARDS IN ANY CONVENIENT WAY. SOME 00407000 EXAMPLES OF -SET CARDS ARE: 00408000 00409000 -SET ALPHABET "ABCDEFGHIJKLMNOPQRSTUVWXYZ" 00410000 -SET CARDNAME "GEORGE/POSDECK" 00411000 -SET SUITS "HEARTS,CLUBS,SPADES,DIAMONDS" 00412000 -SET CITIES "NEW YORK,N.Y./CHICAGO,ILL./BOSTON,MASS./" 00413000 . "SAN FRANCISCO,CALIF./DENVER,COL./CLEVELAND,OHIO/" 00414000 . "NEW ORLEANS,LA./LOS ANGELES,CALIF./ATLANTA,GA./" 00415000 . "PHOENIX,ARIZ./PITTSBURG,PENN./SEATTLE,WASH./" 00416000 -SET OPS " + - | / * " 00417000 00418000 THE MAJOR REASON FOR USING A -SET CARD IS THAT IT SAVES THE 00419000 SPACE THAT WOULD BE REQUIRED FOR THE EQUIVALENT RUN-TIME ASSIGNMENT 00420000 STATEMENT. THIS CAN BE IMPORTANT WHEN THE SMALL MEMORY SIZE 00421000 OF THE B5500 IS TAKEN INTO ACCOUNT. 00422000 00423000 00424000 00425000 %CP 34 00426000 -DEFINE , , 00427000 THIS SETS UP A FUNCTION DURING COMPILATION IN THE SAME WAY THAT 00428000 A CALL OF DEFINE(,,) WOULD DURING EXECUTION. 00429000 THE PARAMETERS MUST ALL BE SINGLE LITERALS (NO CONCATENATION 00430000 WILL BE DONE BY THE COMPILER). LIKE THE -SET CARD, A -DEFINE 00431000 CARD SAVES THE SPACE AND EXTRA TIME THAT WOULD BE REQUIRED FOR 00432000 AN INSTRUCTION TO CREATE THE FUNCTION AT RUN TIME. IT USUALLY 00433000 TURNS OUT EASIER TO USE THE -DEFINE CARD, THOUGH, SINCE THIS 00434000 MAKES IT POSSIBLE TO PLACE THE DEFINITION TOGETHER WITH THE 00435000 FUNCTION CODE WITHOUT THE NEED TO LINK THE DEFINITIONS TOGETHER 00436000 WITH GO-TOS. THE PARAMETERS HAVE THE FOLLOWING MEANINGS: 00437000 00438000 IS THE "FUNCTION PROTOTYPE", OF THE FORM: 00439000 00440000 ( ) 00441000 00442000 WHERE IS THE FUNCTION NAME, AND IS A 00443000 LIST OF FORMAL PARAMETERS, SEPARATED BY COMMAS. 00444000 CONTAINS A LABEL, WHICH IS THE ENTRY POINT OF 00445000 THE FUNCTION. IF IS MISSING (I.E., THE COMMAS 00446000 HAVE NO LITERAL BETWEEN THEM), THEN THE ENTRY POINT IS 00447000 TAKEN TO BE SPELLED THE SAME AS . 00448000 CONTAINS A LIST OF LOCAL VARIABLES--A LIST OF 00449000 IDENTIFIERS, SEPARATED BY COMMAS. 00450000 00451000 FOR FURTHER INFORMATION, SEE SECTIONS 3.2 (FUNCTION CALLS) AND 9 00452000 (INTRINSIC FUNCTIONS--DEFINE()). SOME EXAMPLES OF -DEFINE CARDS: 00453000 00454000 -DEFINE "M(A1,A2)","M1","V,XY,ALPH" 00455000 -DEFINE "MAX(A,B)" 00456000 -DEFINE "MIN(MIN,X)" 00457000 -DEFINE "FCT()",,"X" 00458000 -DEFINE "MRGE(L)","MRGENTRY","L1,L2,L3" 00459000 -DEFINE("GLORCH(A,B,C,D,E,F,G,H,I)","GLORK","J,K,L,M,N,O,P") 00460000 00461000 00462000 00463000 %CP 4 00464000 -DEBUG 00465000 THIS TURNS ON "DEBUG MODE" (SEE SECTION 11.2) DURING COMPILATION, AND00466000 CAUSES THE JOB TO BE SUSPENDED JUST BEFORE THE FIRST INSTRUCTION IS 00467000 EXECUTED (IF THERE IS A TELETYPE ATTACHED). 00468000 00469000 00470000 00471000 %CP 42 00472000 -COMPILE / 00473000 THIS CARD CAUSES THE COMPILER TO COMPILE THE DISK FILE NAMED 00474000 / INTO THE PROGRAM AT THE POINT WHERE THE 00475000 CARD IS FOUND. THE COMPILER WILL READ EVERYTHING IN THE FILE 00476000 UP TO AN END CARD OR THE END-OF-FILE, AND THEN RETURN TO THE 00477000 ORIGINAL FILE (OR TELETYPE). IF AN END CARD IS FOUND, IT IS 00478000 SEARCHED FOR A LABEL; IF ONE IS FOUND, IT BECOMES THE PROGRAM 00479000 ENTRY POINT (UNLESS A LATER END CARD CHANGES IT). IF THE FILE 00480000 NAMED IS NOT ON THE DISK, A DIAGNOSTIC WILL BE PRINTED AND THE 00481000 CARD WILL BE IGNORED. ANY CARD-IMAGE FILE (WITH 80-CHAR LOGICAL 00482000 RECORDS) CAN BE READ BY THE COMPILER. 00483000 THE MOST OBVIOUS USE OF THE -COMPILE CARD IS TO ENABLE USERS TO 00484000 BUILD UP A SNOBOL "LIBRARY" OF FUNCTIONS, WHICH CAN THEN BE USED 00485000 BY ANYONE BY SIMPLY INCLUDING A -COMPILE CARD FOR EACH FUNCTION 00486000 DESIRED. ALTHOUGH STANDARDS FOR SUCH A LIBRARY ARE CLEARLY NOT 00487000 ENFORCEABLE, SOME GUIDELINES ARE SUGGESTED HERE WHICH SHOULD MAKE 00488000 IT EASIER TO USE LIBRARY FILES: 00489000 00490000 1) THOROUGH DOCUMENTATION SHOULD EITHER BE INCLUDED IN THE CODE OR 00491000 THERE SHOULD BE COMMENTS AT THE START OF THE FILE TELLING THE 00492000 USER WHERE TO FIND DOCUMENTATION. 00493000 2) FUNCTIONS SHOULD BE SET UP BY THE -DEFINE CONTROL CARD, RATHER 00494000 THAN BY THE FUNCTION DEFINE(), SO THAT THE USER DOESNT HAVE TO 00495000 SET UP A LOT OF GO-TOS INTO THE CODE. 00496000 3) THE USER SHOULD GET INTO THE CODE BY CALLING A FUNCTION, RATHER 00497000 THAN BY A GO-TO. THIS MAKES IT MUCH EASIER TO INTEGRATE THE CODE 00498000 WITH THE MAIN PROGRAM. 00499000 4) NO INSTRUCTIONS IN THE LIBRARY FILE SHOULD TRANSFER OUT 00500000 OF THE FILE, WITHOUT EXPLICIT DESCRIPTIONS OF ALL LABELS 00501000 THAT THE CALLING PROGRAM SHOULD CONTAIN. THIS SHOULD 00502000 BE AVOIDED ENTIRELY IF POSSIBLE. 00503000 5) THERE SHOULD BE VERY EXPLICIT COMMENTS DESCRIBING ALL GLOBAL 00504000 VARIABLES USED OR ALTERED BY THE CODE. WHENEVER POSSIBLE, 00505000 THE CODE SHOULD DO ITS OWN INITIALIZATION BY MEANS OF 00506000 THE -SET CONTROL CARD, RATHER THAN ASKING THE USER TO 00507000 FIGURE OUT WHAT TO DO. 00508000 6) LABELS SHOULD BE SUCH THAT USERS OF THE FILE ARE UNLIKELY 00509000 TO DUPLICATE THEM IN THEIR OWN CODE. THIS IS MOST EASILY 00510000 HANDLED BY MAKING EACH LABEL INCLUDE EITHER THE NAME OF 00511000 THE FILE OR THE NAME OF THE FUNCTION THEY ARE USED IN. NOTE 00512000 THAT IF TWO LIBRARY FILES USE THE SAME LABEL, THEY CANT 00513000 BE USED IN THE SAME PROGRAM. 00514000 00515000 00516000 00517000 %CP 12 00518000 -LIBRARY / 00519000 THIS CARD CREATES A "LIBRARY" FILE CONTAINING THE COMPILED 00520000 VERSION OF THE PROGRAM. THE FILE IS NAMED /. 00521000 THIS LIBRARY FILE CAN THEN BE USED IN A LATER RUN WITHOUT 00522000 RECOMPILING IT BY USING THE -LOAD CARD (SEE BELOW). A -LIBRARY 00523000 CARD IS NORMALLY THE LAST CARD IN THE PROGRAM DECK, COMING 00524000 JUST BEFORE THE END CARD, BUT IT CAN APPEAR ANYWHERE IN A 00525000 PROGRAM, AND THE PROGRAM STORED IN THE FILE WILL LOOK AS IF 00526000 THE -LIBRARY CARD HAD BEEN FOLLOWED BY AN END CARD. SEVERAL 00527000 -LIBRARY CARDS CAN BE USED IN THE SAME PROGRAM, IF DESIRED. 00528000 IN ADDITION TO THE PROGRAM ITSELF, ANY LIMITS SET BY -LIMIT 00529000 CARDS ARE SAVED, AS IS THE ENTRY POINT AS OF THE -LIBRARY CARD. 00530000 00531000 00532000 00533000 %CP 13 00534000 -LOAD / 00535000 THIS LOADS A LIBRARY FILE CREATED BY A -LIBRARY CARD IN A 00536000 PREVIOUS RUN. IF THE FILE NAMED IS NOT PRESENT OR IS NOT 00537000 A VALID LIBRARY FILE, A DIAGNOSTIC MESSAGE WILL BE PRINTED. 00538000 IF THE FILE WAS THERE, BUT CONTAINED DAMAGED CODE, THE COMPILER 00539000 WILL OFTEN BE UNABLE TO RECOVER FROM THE BAD INFORMATION LOADED 00540000 INTO ITS TABLES WHEN THE PROBLEM IS DISCOVERED; THIS WILL 00541000 CAUSE THE COMPILER TO SIMPLY GIVE UP AND THE JOB WILL TERMINATE. 00542000 ONLY ONE -LOAD CARD CAN BE USED IN A PROGRAM, AND IT MUST BE 00543000 BEFORE ANY OTHER PROGRAM MATERIAL (INCLUDING INSTRUCTIONS, -SET, 00544000 -DEFINE CONTROL CARDS). THE -LOAD CARD CAN BE FOLLOWED BY MORE 00545000 PROGRAM, WHICH WILL BE COMPILED AND ADDED ONTO THE PROGRAM 00546000 LOADED FROM THE FILE. (THE FILE, OF COURSE, WILL NOT BE ALTERED.) 00547000 00548000 00549000 00550000 %SECTION 3 00551000 %PAGE 1 00552000 3. PROGRAM ORGANIZATION. 00553000 00554000 A SNOBOL PROGRAM CONSISTS OF A SET OF INSTRUCTIONS. THE PROGRAM 00555000 CAN BE INPUT FROM A CARD-IMAGE FILE, OR FROM A TELETYPE. EACH CARD 00556000 IMAGE FROM AN INPUT FILE STARTS A NEW INSTRUCTION, UNLESS THE FIRST 00557000 CHARACTER IS ".", IN WHICH CASE THE CARD IS A CONTINUATION OF THE 00558000 PREVIOUS INSTRUCTION. IN B5500 SNOBOL, IT IS ALSO POSSIBLE TO FIT 00559000 SEVERAL INSTRUCTIONS ON ONE CARD, THOUGH THIS IS RARELY DONE. 00560000 FOR JOBS RUN FROM A TELETYPE, THE PROGRAM IS READ FROM THE TELETYPE, 00561000 WITH EACH INPUT BEING AN INSTRUCTION. CONTINUATIONS ARE NOT VALID 00562000 FROM A TELETYPE. THIS IS NOT REALLY A RESTRICTION, SINCE FEW PEOPLE 00563000 ACTUALLY ATTEMPT TO INPUT ENTIRE PROGRAMS FROM A TELETYPE. IT IS FAR 00564000 EASIER TO CREATE A DISK FILE CONTAINING THE PROGRAM (SAY, WITH AN 00565000 EDITING PROGRAM), AND USE THE -COMPILE CARD TO DIRECT THE COMPILER 00566000 TO THE FILE. 00567000 SCATTERED AMONG THE INSTRUCTIONS IN A PROGRAM CAN BE ANY NUMBER OF 00568000 SNOBOL CONTROL CARDS, WHICH ARE INSTRUCTIONS TO THE COMPILER, BUT 00569000 ARE NOT ACTUALLY PART OF THE PROGRAM. IN ADDITION TO THE USUAL 00570000 CONTROL CARDS, THE B5500 HAS CARDS THAT CAN BE USED TO DEFINE 00571000 FUNCTIONS DURING COMPILATION, AND TO ASSIGN INITIAL VALUES TO PROGRAM 00572000 VARIABLES. 00573000 A PROGRAM DECK CAN ALSO CONTAIN ANY NUMBER OF COMMENT CARDS, 00574000 WHICH ARE CARDS STARTING WITH "*" OR "%". SUCH CARDS ARE PRINTED ON A 00575000 LISTING, BUT OTHERWISE IGNORED. USERS ARE ENCOURAGED TO MAKE LIBERAL 00576000 USE OF COMMENTS IN THEIR PROGRAMS. 00577000 AT THE END OF A SNOBOL PROGRAM SHOULD BE AN "END" CARD, WHICH 00578000 IS A CARD WITH "END " IN COLUMNS 1-4. THE FIRST STRING OF NON-BLANK 00579000 CHARACTERS ON THE CARD IS TAKEN AS A LABEL WHICH IS THE "ENTRY POINT" 00580000 TO THE PROGRAM. THAT IS, IT IS THE LABEL OF THE FIRST INSTRUCTION 00581000 TO BE EXECUTED. IF THE ENTIRE CARD IS BLANK, THE FIRST INSTRUCTION 00582000 IN THE PROGRAM IS ASSUMED TO BE THE ENTRY POINT. 00583000 INSTRUCTIONS CAN BE EITHER LABELED OR UNLABELED. LABELS ARE 00584000 NEEDED WHENEVER AN INSTRUCTION MUST BE TRANSFERED TO BY ANOTHER ONE, 00585000 AND OTHER INSTRUCTIONS ARE GENERALLY UNLABELED. A LABEL IS ANY 00586000 STRING OF NON-BLANK CHARACTERS STARTING IN COLUMN 1. IF COLUMN 1 00587000 IS A BLANK, THE INSTRUCTION IS UNLABELED. LABELS ARENT REALLY A 00588000 PART OF THEIR INSTRUCTIONS, BUT SIMPLY SERVE AS "NAMES" FOR THE 00589000 INSTRUCTIONS. 00590000 A SNOBOL PROGRAM IS A SINGLE SET OF INSTRUCTIONS, WITH NO SUB-PARTS 00591000 (UNLIKE MOST OTHER PROGRAMMING LANGUAGES THAT HAVE SEPARATE BLOCKS 00592000 OF CODE FOR EACH SUB-ROUTINE OR FUNCTION OR WHATEVER THEY ARE CALLED). 00593000 ONE CONSEQUENCE OF THIS IS THAT STATEMENT LABELS IN A SNOBOL PROGRAM 00594000 MUST BE UNIQUE. THERE IS VERY LITTLE CONSISTENCY BETWEEN IMPLEMEN- 00595000 TATIONS ON HOW DOUBLY-DEFINED LABELS ARE TREATED. THE METHOD USED 00596000 ON THE B5500 IS THIS: THE SECOND LABEL OVERWRITES THE FIRST AND 00597000 CAUSES IT TO BE RE-DEFINED, BUT A WARNING MESSAGE IS PRINTED. THIS 00598000 CAN BE USEFUL AT TIMES ON INTERACTIVE JOBS TO RE-DEFINE AN INSTRUCTION 00599000 PREVIOUSLY COMPILED. 00600000 00601000 00602000 %PAGE 00603000 3.1. INSTRUCTIONS. 00604000 ::= 00605000 ::= 00606000 ::=