IMD 1.17: 11/11/2014 12:07:11 82VKXSVRDOS B* VERSADOS/RMS68K SRC/OBJ 4.4 (NOT BOOTABLE) SN=49367 27 OF 30  SR27q82VKXSVRDOS 0420§n-:˜8 ;¨7°;¸À4È;Ð4Ø-àBè1ð0ø712 *ˆREVISIONCODE‡01258547*’CHANGEDPARAMETERBLOCKFORLOADERSOTHATATTRIBUTES*’ARETAKENFROMTHETASKLIB.**ˆREVISIONCODE‡01168548*’ChangedDCODE68KtooutputthedisplacementofaMOVEP*’instructionindecimal.**ˆREVISIONCODE‡01048548*’CHANGEDASQMESSAGEEVENTSIZEFROM12TO24SOASNOT2*’TOOVERWRITEPARTOF"PRINTFHS"PARAMETERBLOCK.**ˆREVISIONCODE‡11148446*’UPGRADE1-LINEASSEMBLER/DISASSEMBLERTOHANDLELOAD"*’MODULESFORTHE68010PROCESSOR.* ‰OPT‡FRS¯3/82*‰XREF†EDITFILE,SIMBO,RESOLVE,GETNUMDE“3/82(‰XREF†.PVTRAPD,.PVTRAPE,PARSE_ST,MM,MDDI‰XREF†FORMADDR,BESTFIT,PARSMSGS(‰XDEF†CONV,CLASCODEˆREQUIREDBYEDITFILE0‰XDEF†.PLJSR,.PALSTS,.PALSTSLƒREQUIREDBYPASCAL%‰XDEF†PROMPT,WHAT‰REQUIREDBYMM3/82*‰XDEF†KEYIN,DO7OUTR,ERLL,MSG00,MSGADR“3/82#‰XDEF†ADRELOŽREQUIREDBYMBSRŽ11/83 *Â<<111484*’DATALOCATIONS†REQUIREDBY*‰XDEF†ADR_VAL-†-…-ƒMBSR‰XDEF†BASE-†-…-ƒMBSR‰XDEF†BRKBUFŽ-†-…MM‰XDEF†BRKGETŽ-†-…MM‰XDEF†BRKPBGŽ-†-…MM‰XDEF†BRKPBPŽ-†-…MM‰XDEF†BRKPBUF-†-…MM‰XDEF†BRKSORŽ-†-…MM‰XDEF†CURTCNTSIMBO‰XDEF†DMOUTAŽ-†-…MM‰XDEF†EOL_FLG-†-…-ƒMBSR‰XDEF†ERR_NMBRŒ-†-…MM‚MBSR‰XDEF†FHSDB0ŽSIMBO‰XDEF†FHSDB1ŽSIMBO‰XDEF†FHSOPENSIMBO‚IODB‰XDEF†FORTASKSIMBO‚IODB'‰XDEF†GLOBALŽSIMBO‚IODB‚MM‚MBSR‚UTILITY‰XDEF†INP_STR-†-…-ƒMBSR‰XDEF†INQ‘-†-…MM‚MBSR‰XDEF†INQE-†-…MM‰XDEF†IOIN-†-…MM‰XDEF†IOSDB-†IODB‰XDEF†IOUTSIMBO‚-…-ƒ-…UTILITY‰XDEF†MODNAMESIMBO‰XDEF†OMNEXTŽSIMBO‰XDEF†OMNTBLŽSIMBO‰XDEF†OTEND-†-…MM‰XDEF†OUTBUFŽ-†-…MM‰XDEF†OUTSTAR-†-…MM‰XDEF†PCODE-†-…MM‰XDEF†POOL-†IODB‰XDEF†POOLEND-†IODB‰XDEF†POOLPTR-†IODB‰XDEF†PRSE_MDSIMBO‚-…-ƒMBSR‰XDEF†PTR_INP-†-…-ƒMBSR‰XDEF†RCVADDRSIMBO‰XDEF†RCVBLKŽSIMBO‰XDEF†RCVBUFŽSIMBO‰XDEF†RCVSEGŽSIMBO‰XDEF†REVISIONŒSIMBO‰XDEF†SEGADDR-†IODB‰XDEF†SEGENDŽSIMBO‰XDEF†SYM_BUF-†-…MM ‰XDEF†SYMNAMESIMBO‚IODB‚MM‚MBSR‰XDEF†TOKEN-†-…MM‰XDEF†UTLWORD-†-…MM**ˆIOS&TR1EQUATES* CDFLUNƒEQU‡$5 DELAY„EQU‡$15 DEMON„EQU‡$41EXMMSKƒEQU‡$42 EXMON„EQU‡$40FHALLOƒEQU‡$80FHASGNƒEQU‡$40 FHCLOSƒEQU‡$4 FHSCLGƒEQU‡$CFHSCLNƒEQU‡$10FHSEXTƒEQU‡$1CFHSFILƒEQU‡$14FHSLRLƒEQU‡$22 FHSLUAƒEQU‡$5 FHSLUBƒEQU‡$6 FHSLUNƒEQU‡$5 FHSOPTƒEQU‡$2 FHSSESƒEQU‡$CFHSSIZƒEQU‡$24 FHSTSKƒEQU‡$8 FHSUSNƒEQU‡$A FHSVOLƒEQU‡$6FHSWCDƒEQU‡$200 FOPEW„EQU‡$3FOPPRPW‚EQU‡$4 GTASQ„EQU‡$1F GTSEG„EQU‡$1IOPBLKƒEQU‡$40IOPBRKƒEQU‡$10 IOPIMGƒEQU‡$8 IOREADƒEQU‡$1IOSCADƒEQU‡$18IOSEADƒEQU‡$10 IOSFCTƒEQU‡$0IOSLENƒEQU‡$14 IOSOPTƒEQU‡$2 IOSRRNƒEQU‡$8 IOSSADƒEQU‡$C IOWRITƒEQU‡$2ISTABRK‚EQU‡$C6 LDFLUNƒEQU‡$6 MOVELLƒEQU‡$6PSTATEƒEQU‡$44 QEVNT„EQU‡$23RDEVNTƒEQU‡$22REXMONƒEQU‡$45RSTATEƒEQU‡$43RTEVNTƒEQU‡$25SETASQƒEQU‡$21 START„EQU‡$D STOP…EQU‡$19 TERM…EQU‡$F TERMT„EQU‡$10TRPVCTƒEQU‡$1BWAKEUPƒEQU‡$14WTEVNTƒEQU‡$24* *ˆDATAAREAS* ‰SECTIONƒ0/BˆEQU‡*‰USEA6FORSOURCEFIELDDATAADDRESSING:‰DC.B†'0116854'ƒUTILITYCONTROLDATE&VERSAdosRELEASE#*$*ˆVERSAdos‚CONTROLBLOCKSBEGINHERE* STOPTASK:!‰DC.L†0,0‡*TASKNAMEANDSESSION STARTTSK: ‰DC.L†0,0-‰DC.W†$A000…*MONITORTASKANDREGSSPECIFIED‰DC.L†0,0‡*MONITORTASK=MBUG=TASKREGSDS.L†16ˆREGSAVEAREAISPARTOFSTARTTSKPARMBLOCKDREG6„EQU‡TASKREGS+$18**ˆLOADERPARAMETERBLOCK*TASKLDR‚DC.L†'TASK'„*TASKNAME8SESSION‚DC.L†0‰*STANDARDSESSIONID(ALLTASKS&EXMON)/‰DC.W†$8000…*CRTCBOPTIONS-MONITORSPECIFIED)‰DC.L†0,0‡*MONITORTASKNAMEANDSESSION)‰DC.B†50,100„*INITIALANDFINALPRIORITY‰DC.W†0‰*TASKATTRIBUTES‰DC.L†0‰*TASKENTRYADDRESS‰DC.W†0‰*USERIDDLOADOPT‚DC.W†$600E…*USELIBFORTASKINFO&ATTRS(CHGDBIT6)1/85$LOADCLL‚DC.B†0‰*COMMANDLINELENGTH‰DC.B†0‰*LUNOFLOADFILE‰DC.L†0,0‡*RESERVED%LOADCLA‚DC.L†0‰*COMMANDLINEADDRESS* J* FHS PARAMETER BLOCK BEGINS - DO NOT SEPARATE THIS FROM ABOVE DEFINITIONS*FHSTASK:‰DC.B†0‰*CODE‰DC.B†0‰*COMMAND=CHECKPOINT*‰DC.W†0‰*OPTIONS:CONTIGUOUS,PUBLICREAD‰DC.B†$FF‡*STATUS ‰DC.B†0‰*LUNLDVOL$L‚EQU‡*-TASKLDR‰DC.L†0LDUID$W‚EQU‡*-TASKLDR‰DC.W†0‰*USERNUMBERLDCAT$L‚EQU‡*-TASKLDR‰DC.L†0,0‡*CATALOGFILENAMEDC.L†0,0‡*FILENAMEEXTENTƒDC.W†'LO'‰*EXTENSION‰DC.W†0‰*RESERVED‰DC.B†0,0‡*PROTECTCODES‰DC.W†0‰*RECORDLENGTH‰DC.L†0‰*SIZE/POINTER**ˆGETASQPARAMETERBLOCK*"ASQB…EQU‚*‹GETASQPARAMETERBLOCK ‰DC.L‚0…TASK‰DC.L‚0ŠSESSION.‰DC.B‚5ŠSTATUS‚ASQ-MESSAGEENABLED-ASRENABLED"‰DC.B‚24‰MAXMESSAGELENGTH…010485‰DC.L‚120ˆ10MESSAGESMAX6ASQASRV‚DC.L‚0ŠASRSERVICEROUTINEVECTOR‚(EXASR)ˆ1/82‰DC.L‚0*(*ˆATTACHTARGETTASKTOEXMONPARMBLOCK*)EXMONBƒEQUƒ*†ATTACHEXMONPARAMETERBLOCK‰DC.L‚'„'†TARGETTASKNAME‰DC.L‚0‹SESSION)EXMONAMEDC.L‚0‡NAMEOFEXCEPTIONMONITOR‰DC.L‚0ŠSESSION*$*ˆEXMONMASKMODIFICATIONPARMBLOCK*"XMSKB„EQU‚*ŠEXMMSKPARAMETERBLOCK‰DC.L‚'TEST'…TARGETTASK‰DC.L‚0ŠSESSION‰DC.L‚$01FFFFF1ƒMASK**ˆREXMONPARMBLOCK*8REXPB„DS.L†3‰TASKNAME,SESSION,A(OPTIONSINSTATEBUFFER)*9*ˆMOVELLPARMBLOCKSTOSEND&RECEIVEDATABETWEENTASKS*5BRKPBG‚DC.L‚'TEST',0MOVELLGETCODEFROMTARGETTASKBRKPBUF‚DC.L‚0,0,0BRKGET‚DC.L‚0,2*4BRKPBP‚DC.L‚0,0MOVELLPUTBPORCODETOTARGETTASKBRKSOR‚DC.L‚0,'TEST',0BRKBUF‚DC.L‚0,2**ˆGTSEGPARMBLOCK*PBGETSG‚DC.L†0‰TASK¤3/825SEGB…DC.L†0‰SESSIONƒ(SEGBASEADDRAFTERTRAP#1)‚3/82'‰DC.W†$2000,0ƒOPT=LOGICAL‚ATTR=R/W“1/82‰DC.L†'TSKS'„SEGMENTNAME&SEGADDR‚DC.L†0‰LOGICALADDROFSEGMENT3SEGLTHƒDC.L†$4000…SEGMENTLENGTHDEFAULT=16KŒ5/83**ˆRCVSAPARMBLOCK*+RCVBLKƒDC.L†0,0,0…TASK,SESSION,OPTIONS”3/82%RCVSEGƒDC.L†0,0,0,0ƒSEGMENTNAMEœ3/82&RCVBUFƒDC.L†0‰RCVFEEDBACKBUFFER•3/82‰DC.W†0‰SEGMENTATTRIBUTES–3/82;RCVADDR‚DC.L†0,0,0…BEG,END&PHYSICALADDRSOFSEGMENT…3/82 **ˆASQEVENTBUFFER*!EVNTBLK‚DC.B†0‰ASRRECEIVINGAREA0EVNTCODEDC.B†0‰ISALWAYS8FOREXCEPTIONEVENTS"EVNTTASKDC.L†0,0‡TASKNAMESESSION3EVNTECODDC.B†0‰IDENTIFIESNORMALEVENTEXCEPTION#)EVNTETYPDC.B†0‰3TYPES=ATT,DET,NORMAL&‰DS.B†12ˆSPACENEEDEDFOREVENT‚010485*%*ˆFHSTOASSIGNPRINTERORREMOTECRT**ˆLUNUTILIZATIONF*0=&SCT‚1=#PR‚2=#FN‚3=PF&HELP4=REMOTECRT5=KEYBOARD6=CRT7=DBFILE*BPRINTFHSDC.B…0,$40,1,$B,0,1,'PR‚'‚ALSOUSEDTOASSIGNLUN#4ƒ11/83‰DC.W…0”*USERNUMBER‰DC.L…'ˆ'‹*CATALOG‰DC.L…0,0’*FILENAME"‰DC.W…0,0’*EXTENSIONANDRESERVED'‰DC.B…0,0’*WRITEANDREADPROTECTCODE‰DC.W…0”*RECORDLENGTH‰DC.L…0”*SIZE/POINTER**ˆCHANGELUNFHS*4LUNFHSƒDC.B†1,$10,$80,0‰CHANGELUASSIGN‚SEND&KEEP%‰DC.B†0,5,5,0STATUSLUALUBRESERVED‰DC.L†0,0‘TASKNAME&SESSION*.*ˆI/OPARMBLOCKSFORDBFILESOFTARGETTASKS*7IOSDB„DC.W†$0001,$6000,$0007,0READ,RANDOM,KEYOFLUN=7,‰DC.L†0,0,0,0,0‹DYNAMICIOSSAD,IOSEADFIELDS$FHSDB0ƒDC.W†$0040,$0100,$0007,'„',-1 ‰DC.L†0,0,0,0‰DC.W†'DB',0,256,0,0$FHSDB1ƒDC.W†$0040,$0100,$0007,'„',-1 ‰DC.L†0,0,0,0‰DC.W†'DB',0,256,0,0$FHSDB2ƒDC.W†$0040,$0100,$0007,'„',-1 ‰DC.L†0,0,0,0‰DC.W†'DB',0,256,0,0$FHSDB3ƒDC.W†$0040,$0100,$0007,'„',-1 ‰DC.L†0,0,0,0‰DC.W†'DB',0,256,0,0$FHSDB4ƒDC.W†$0040,$0100,$0007,'„',-1 ‰DC.L†0,0,0,0‰DC.W†'DB',0,256,0,0$FHSDB5ƒDC.W†$0040,$0100,$0007,'„',-1 ‰DC.L†0,0,0,0‰DC.W†'DB',0,256,0,0$FHSDB6ƒDC.W†$0040,$0100,$0007,'„',-1 ‰DC.L†0,0,0,0‰DC.W†'DB',0,256,0,0$FHSDB7ƒDC.W†$0040,$0100,$0007,'„',-1 ‰DC.L†0,0,0,0‰DC.W†'DB',0,256,0,0$FHSDB8ƒDC.W†$0040,$0100,$0007,'„',-1 ‰DC.L†0,0,0,0‰DC.W†'DB',0,256,0,0$FHSDB9ƒDC.W†$0040,$0100,$0007,'„',-1 ‰DC.L†0,0,0,0‰DC.W†'DB',0,256,0,0*3*ˆI/OPARMBLOCKSFORFILEREAD&FILESAVE(FR&FS)*4FHSFILE‚DC.B†0,$40,0,4,0,3,'„',-1,-1ƒFHSFORFR&FS‰DC.L†'„','„','„','„'‰DC.W†'‚',0,0,256,0,23FILELTH‚EQU‡512‘LENGTHOFSINGLEBLOCKFILE(FS&FR)IOSFILE‚DC.W†1,$40,3,0‹LUN=3(‰DC.L†0,0,0,0ONEBIGBLOCKFORHELPMSG* #*ˆIOSPARMBLOCKFORKEYBOARDINPUT* IOIN…EQU‡*“INPUTPARAMETERBLOCK=‰DC.W†1,IOPBRK+IOPIMG„NOTEBREAKOPTIONAUGMENTEDWITHIOPPRO‰DC.B†0,CDFLUN,0,0‰DC.L†0"‰DC.L†0INPUTBUFFERSTARTADDRESS‰DC.L†0ENDADDRESS‰DC.L†02‰DC.L†0…CSA=ASRADDRESSWHENINPROCEEDI/OMODE*"*ˆIOSPARMBLOCKFORSCREENOUTPUT*!IOUT…EQU‡*‰OUTPUTPARAMETERBLOCK‰DC.W†2,IOPBRK‰DC.B†0,LDFLUN,0,0‰DC.L†0"OUTSTAR‚EQU‡*‰NEEDEDFORXDEF™1/82+IOUTSAD‚DC.L†0ŠDYNAMICIOSSAD&IOSEAD‘1/82OTEND„DC.L†0²1/82‰DC.L†0‰DC.L†0>PTYPE„DC.L„$68000ˆHOLDSCURRENTPROCESSORTYPE(DEFAULT=68000).PCODE„DC.L„0HOLDSCURRENTPROCESSORTYPECODE *ž0=68000 *ž4=68008 *ž8=68010.*žC=68020(FUTURENOTIMPLEMENTEDYET!!!!!!)**ˆCRTKEYBOARDBUFFER*6INQ†COMLINEƒ80ˆCOMLINESERVESASKEYBOARDINPUTBUFFER INQE…EQU‚***ˆSCREENMESSAGEBUFFERS*B*ˆMSGADRisanaddresstableofconsecutivemessagesindexedbyD71*D7isinitializedbybranchingtoalabelMSGxx9*whichentersthemessagestart&endaddrsintotheIOB:MSGADRƒDC.L†QUEST1-B,QUEST2-B,QUEST3-B,OUTMESS-B,OUTSTAT-B,‰DC.L†OUTBUF-B,OUTBUFE-B,0,DEMSG-B,STATHDR-B1‰DC.L†CRMSG-B,ERMES1-B,ERMES2-B,ERMES3-B,ERMES4-B2‰DC.L†ERMES5-B,ERMES6-B,ERMES7-B,ERMES8-B,ERMES9-B7‰DC.L†ERMES10-B,ERMES11-B,ERMES12-B,ERMES13-B,ERMES14-B8‰DC.L†ERMES15-B,ERMES16-B,ERMES17-B,HELPMSG-B,HELPCONT-B0‰DC.L†DMOUTA-B,SPACES-B,MAPZAP-B,MAPMSG-B,LOST-B.‰DC.L†INTEGRTY-B,BROKE-B,OPERMSGS-B,SRPREFIX-B(*‹LASTBUFFERVECTORIS"OPERMSGS"MSG37(QUEST1ƒDC.B†'SYMbug'ŒSYNTAXERRORPROMPTQUEST1N‚DC.B†'…WHAT?',$07 4QUEST2ƒDC.B†'‚ZOPTION(K)Œ='‚REUSEDFORTASKCOUNT QUEST3ƒDC.B†'SYMbug'QUEST3N‚DC.B†'…?',$00 OUTMESS‚DC.B†'}--->'OUTTASK‚DC.B†'†'%OUTEVNT‚DC.B†''EVENTTYPEGOESHEREPCPREFIXDC.L†'PC='OUTPC„DC.L†0,0,0 4OUTSTAT‚DC.L†0,0,0†BUFFERTODISPLAYREGISTERVALUES**ˆBUFFERTODISPLAYBREAKPOINTS*+OUTBUFƒDC.B†'SYMbug:Revisionƒ3.05‘'ˆ021885 ‰DC.B†'¨' OUTBUFE‚EQU‡*0DEMSG„DC.B†'NOMALNOECHO‚NOBREHEXIN#CNFILE='6STATHDR‚DC.B†'TASKSESS‚STATEEVENT‚@PC‡PCNOW„SR…MASK'‰DC.B†'„TCBSTATƒOP„CRT‚' CRMSG„DC.B†'CRepeating‚'-CRBUF„DS.B†68’BUFFERFORCOMMANDFOLLOWINGCR**ˆERRORMESSAGEBUFFERS*ERMES1ƒDC.B†'NOMEMORYFOR'ERMES1N‚DC.B†'ASQ'ERMES2ƒDC.B†'BADTARGETTASK'$ERMES3ƒDC.B†'BADPARMBLOCKADDRESS'"ERMES4ƒDC.B†'BUFFERADDRESSWRONG'ERMES5ƒDC.B†'NOASQ'ERMES6ƒDC.B†'BRKPTTABLEFULL'*ERMES7ƒDC.B†'VALUELOCATIONINCORRECT',7,7)ERMES8ƒDC.B†'TARGETTASKADDRESSERROR',7$ERMES9ƒDC.B†'MESSAGEFROMASQWRONG'!ERMES10‚DC.B†'NOROOMTOATTACH'6NUTASKNMDC.B†'TASK-BUTTASKISRUNNINGUNATTACHED'!ERMES11‚DC.B†'ATTACHNOTALLOWED'ERMES12‚DC.B†'LOADERROR''ERMES13‚DC.B†'CANNOTHANDLEBREAKS',7,7!ERMES14‚DC.B†'EVENTNOTSENT',7,7ERMES15‚DC.B†'***ERRORTRAP'TRAPIDƒDC.B†0,'‚ERRORCODE:'ERRCODƒDC.L†0,0,0CRLF…DC.W†$0D0AERMES16‚DC.B†'UNKNOWNTASKNAME')ERMES17‚DC.B†'BRKPTSLOCKEDINEXECUTION'0HELPMSG‚DC.B†'…AS„[[[;]]]',‰DC.B†'ADDRESSSTOP(Onchangeor=Value)…'%‰DC.B†'…BF„…'+‰DC.B†'BLOCKFILLAddressrangewithdata†''‰DC.B†'…BM„ƒ'-‰DC.B†'BLOCKMOVEAddressrangetonewaddr„'(‰DC.B†'[NO]BR„[[]]....†'/‰DC.B†'BREAKPOINTList,SetorDeleteMultiple‚'%‰DC.B†'…BS„…',‰DC.B†'BLOCKSEARCHaddressrangefordata…'‰DC.B†'…CR„–'0‰DC.B†'COMMANDREPEATnextcommandcounttimes'‰DC.B†'…DC„—'0‰DC.B†'DEFINECONSTANTinHex,Decimal&Binary'‰DC.B†'…DE„[]“'!‰DC.B†'DEFAULTList,SetOptions' ‰DC.B†'…DF¡'$‰DC.B†'DISPLAYFORMATTEDRegisters'‰DC.B†'…FR„“'-‰DC.B†'FILEREADMacros&Symbolsyousaved„'‰DC.B†'…FS„“'-‰DC.B†'FILESAVEMacros&Symbolsforlater„'‰DC.B†'…G[O]‚[]•',‰DC.B†'GOintoExecution(ForegroundTask)…'‰DC.B†'[NO]MA„[....]'0‰DC.B†'MACRODefine,DisplayorDeletename(s)'%‰DC.B†'…MAEƒ[;]†'*‰DC.B†'MACROEDITredefinesamacroline‡' #‰DC.B†'…MD„[][;DI]‡'0‰DC.B†'MEMORYDISPLAY(defaultcount=16Bytes)'‰DC.B†'…M[M]‚[;]'.‰DC.B†'MODIFYMEMORYinteractivelyuntil(.)ƒ'(‰DC.B†'…MS„[....]‚''‰DC.B†'MEMORYSETalsosetsregistersŠ' ‰DC.B†'…OF¡''‰DC.B†'OFFSETRegisterRangesDisplayŠ'‰DC.B†'…Q[UIT]'+‰DC.B†'QUIT(TerminateDebuggingSession)†'‰DC.B†'…T[R]‚[]”'+‰DC.B†'TRACEinstructionsstartingat.PC†'(‰DC.B†'…WAIT‚for{BREAK}keytoprompt„'#‰DC.B†'Ž:HIT{RETURN}tocontinue:'+HELPCONTDC.B†'[NO]SD„[[]]‹'/‰DC.B†'SYMBOLDEFINE,DisplayorDeleteLocal‚'‰DC.B†'…ATTA‚[,<#crt>]'/‰DC.B†'ATTACHTasktoSYMBUG(RemotecrtI/O)‚'‰DC.B†'…DETA‚[]•'0‰DC.B†'DETACHTaskfromSYMBUG(ContinuesExec)'$‰DC.B†'…EVEN‚[],ˆ'!‰DC.B†'EVENTCREATEDforaTask'!‰DC.B†'…LOAD‚[]‹'!‰DC.B†'LOADTASK‚(withCOMLINE)'$‰DC.B†'…MASK‚[],ˆ'‰DC.B†'MASKExceptionToggled’'‰DC.B†'…STAR‚[|ALL]'-‰DC.B†'STARTTask(s)intoExecutionlikeGO„' ‰DC.B†'…STAT‚[,]Œ'/‰DC.B†'STATUSListorSet(DORM,REDYorWAKE)‚'‰DC.B†'…STOP‚[|ALL]'-‰DC.B†'STOPTask(s)Execution&SetDORMANT„'"‰DC.B†'…TASK‚[,<#notify>]Š'0‰DC.B†'TASKbecomesFOREGROUNDwithBPoptions'‰DC.B†'…TERM‚—'‰DC.B†'TERMINATETaskš' **ˆMEMORYDISPLAYBUFFERS*DMOUTAƒDC.B†'¨' ‰DC.B†'¨'SPACESƒDC.L†'„'4MAPZAPƒDC.B†'MapFull'ŠERRORMESSAGESFORSIMBO†3/82MAPMSGƒDC.B†'DupSect'”"“3/82LOST…DC.B†'IODBErr'”"“3/82INTEGRTYDC.B†'VerifyDB'”"“3/82BROKE„DC.B†'*IOErr*'”"“3/82/OPERMSGSDC.B†'INVALIDOPTIONSPECIFIED'—111484SRPREFIXDC.B†'SR='D0D7…DC.B†'D0->D7‚'A0A7…DC.B†'A0->A7‚'R0R7…DC.B†'R0->7Min'ADETYPEƒDC.B†'HEXDECOCTBINCHRFL.INTBOOPDEDISBWLPRFN‚CN'PRLUN„EQU‡1‰LUNOF#PR1DEVLUNƒEQU‡2‰LUNFORLOGGINGDISKFILE(FILENAME)&FILELUN‚EQU‡3‰LUNFORFS&FRCOMMANDSCRTLUNƒEQU‡4‰LUNOFREMOTE#CN.LTSKVECTEQU‡32ˆBYTESPERTASKINVECTORTABLE*LINCNTƒDC.W†0NUMBEROFLINESLEFTONPAGE4BPVALUE‚DC.W†$4E70…RESETINSTRUCTIONISABREAKPOINT$DECRT„DC.L†0‰EXMONCRTTERMINALNAME,TERMINALDC.L†0‰TERMINALOFLASTLOADEDTASK,STACKBRKDC.L†0‰BREAKRECOVERYSTACKPOINTER**’TABLEFOREDITFILE*/CLASCODEDC.B†0,0,0,0,0,0,0,0,0,0,0,0,0,$80,0,0%‰DC.B†0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;‰DC.B†$80,0,0,$40,$40,0,$10,0,$20,$20,$50,0,$80,$40,$20,$20?‰DC.B†$17,$17,$17,$17,$17,$17,$17,$17,$17,$17,$20,$80,0,$40,0,0E‡DC.B‚$10,$1E,$1E,$1E,$1E,$1E,$1E,$1C,$1C,$1C,$1C,$1C,$1C,$1C,$1C,$1C;‰DC.B†$1C,$1C,$1C,$1C,$1C,$1C,$1C,$1C,$1C,$1C,$1C,0,0,0,0,0%‰DC.B†0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0%‰DC.B†0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0* *ˆBREAKSTUFF*BREAK„DC.W†0‰THEWORDSETBRKƒEQU‡15ˆTAKEIOBREAKSGOTBRKƒEQU‡14ˆGOTIOBREAKBPMAX„EQU‡10ˆMAXBPPERTASK* *ˆBREAKEVENT* ATTEVNT‚EQU‡*‰DS.W†1‰LENGTH+CODE‰DS.L†1‰DEVICE‰DS.W†1‰DEVICESTATUS**ˆCOMMANDPARSINGDATAFIELDS*VFLD…DC.L†0‰VALUE(CREPEAT‚DC.L†0‰FLAGSCRCOMMANDINFORCE.CRCOUNT‚DC.L†0‰HOLDSCRCOUNTFORNEXTCOMMAND**ˆSIMBOFIELDS*4REVISIONDC.L†1‰DBFILEREVISIONCODEFORSIMBO‰6/83(MODNAME‚DC.L†'ˆ'ŠMODULENAMEBUFFERŒ3/82(SYMNAME‚DC.L†'ˆ'ŠSYMBOLNAMEBUFFERŒ3/822OMNEXTƒDC.L†0“HIGHH2OMARKINFILLINGOMNTBL3/82)FHSOPEN‚DC.L†0“A(FHSCURRENTLYOPEN)‰3/82 *#*ˆEVENTNOTIFICATIONMESSAGEBUFFER*MESTYPƒDC.B‚'TRAP0Š'‰DC.B‚'TRAP1Š'‰DC.B‚'TRAP2Š'‰DC.B‚'TRAP3Š'‰DC.B‚'TRAP4Š'‰DC.B‚'TRAP5Š'‰DC.B‚'TRAP6Š'‰DC.B‚'TRAP7Š'‰DC.B‚'TRAP8Š'‰DC.B‚'TRAP9Š'‰DC.B‚'TRAP10‰'‰DC.B‚'TRAP11‰'‰DC.B‚'TRAP12‰'‰DC.B‚'TRAP13‰'‰DC.B‚'TRAP14‰'‰DC.B‚'TRAP15‰'‰DC.B‚'BUSERROR‡'‰DC.B‚'ADDRESSERRORƒ'‰DC.B‚'ILLEGALINST„'‰DC.B‚'ZERODIVIDE…'‰DC.B‚'CHK‚INST‡'‰DC.B‚'TRAPV‹'‰DC.B‚'PRIVVIOLATION‚'‰DC.B‚'LINE1010‡'‰DC.B‚'LINE1111‡')UTLWORD‚DS.L†4“UNUSEDEXCEPTIONEVENT#196ADX†DC.B‚'ADXDORMREDYWAIT'†UNUSEDEXCEPTIONEVENT#1AADXENDƒDC.B‚'TRACEMAXINST‚'‰DC.B‚'TRACEONEINST‚' ‰DC.B‚'VALUECHANGE„'‰DC.B‚'VALUEEQUAL…'3‰DC.B‚'STOPPED‰'…EXCEPTION$1FALTERNATEATTACHMSG‰DC.B‚'ATTACHEDˆ'20‰DC.B‚'DETACHEDˆ'21‰DC.B‚'BREAKPOINT†'22*(*ˆINITIALIZEPASCALGLOBALVARIABLEAREA*BCMD_CODEDC.B†01,27,14,18,06,21,22,15,17,29,07,16†AS,ATTA...ETC.)‰DC.B†30,19,20,13,12,38,02,05,31,10,08,24)‰DC.B†39,23,03,32,34,33,36,28,26,37,00,005COMMAND‚DC.B†'AS‚ATTABF‚BM‚BR‚BS‚CR‚DC‚DE‚DETADF‚DU‚'1‰DC.B†'EVENFR‚FS‚GO‚HELPLOADMA‚MAEMASKMD‚MM‚MS‚'1‰DC.B†'OF‚QUITSD‚STARSTATSTOPTASKTERMTR‚WAIT#%$&'-DLIM_FLGDS.B†4‰PACKEDARRAY[1..4]OFBOOLEANNUM_PARMDS.B†1‰BYTECODE…DS.B†1‰BYTEERROR„DS.B†1‰BYTETMP_CHR‚DS.B†1‰BYTETMP_PTR‚DS.B†1‰BYTEEVL_TYPEDS.B†1‰BYTEEVL_LNG‚DS.B†1‰BYTEEVL_OUT‚DS.B†1‰BYTENO_FLGƒDS.B†1‰BOOLEANNXT_CHR‚DS.B†1‰CHARFOUND„DS.B†1‰BOOLEANCHECK„DS.B†1‰BOOLEANNEG_FLG‚DS.B†1‰BOOLEANCHK_CHARDS.B†1‰CHARSAV_EOL‚DS.B†1‰BOOLEANEOL_FLG‚DS.B†1‰BOOLEANDLIM_CHRDS.B†1‰CHARPTR_MAC‚DS.B†1‰BYTEPTR_PARMDS.B†1‰BYTENUM_PTR‚DS.B†1‰BYTEPTR_INP‚DS.B†1‰BYTENXTS_LENDS.B†1‰BYTEDEF_BASEDS.B†1‰BOOLEANMACRO„DS.B†1‰BOOLEANLINE_NUMDC.L†'010'„STR4*SYM_BUF‚DS.B†80ˆSTRNXT_STR‚DS.B†80ˆSTRINP_BUF‚DS.B†80ˆSTRIˆDS.L†1‰INTEGERJˆDS.L†1‰INTEGERKˆDS.L†1‰INTEGERLˆDS.L†1‰INTEGERCOUNT„DS.L†1‰INTEGERSYM_VAL‚DS.L†1‰INTEGERREG_VAL‚DS.L†1‰INTEGEREA_VALƒDS.L†1‰INTEGEREXP_VAL‚DS.L†1‰INTEGERADR_VAL‚DS.L†1‰INTEGERNUM_VAL‚DS.L†1‰INTEGERMAC_NAMEDS.B†8‰STR8I*---------------------------- HANDS OFF PASCAL VALUES BELOW THIS LINE !!!/IN_CR„DC.L†0‰INTEGERƒINTERNALFLAGFORMACROCR3SAVE_CNTDC.L†0‰INTEGERƒINTERNALCOUNTFORMACROCRTBL_PTR‚DS.L†1‰INTEGER+TABLE„DS.B†504‡PACKEDARRAY[1..504]OFCHARENDSYMB‚DC.L†505‡INTEGERENDMACƒDC.L†0‰INTEGERIN_MACRODC.L†0‰INTEGERINDEX„DC.L†0‰INTEGERMAC_BUF‚DS.B†80ˆSTR *°defaults)DEVICEƒDC.B†1‰BYTE†#PR‡LUNOFECHODEVICE&LENGTHƒDC.B†4‰BYTE†WORD†DISPLAYLENGTH"TYPES„DC.B†1‰BYTE†HEX‡DISPLAYBASEBASE…DC.B†1‰BYTE†HEX‡INPUTBASE+BR_ENABLDC.B†1‰BYTE†BRE‡ENABLEBREAKPOINTS3ECHO…DC.B†0‰BYTE†NOECHO„ECHODEBUGOUTPUTTODEVICE/MA_LIST‚DC.B†1‰BYTE†MAL‡EXPANDMACROSINOUTPUT‰DC.B†$20‡FILLER0OUTFILE‚DCB.B…30,$20„PACKEDARRAY[1..30]OFCHAR*"INP_STR‚DC.L†0‰POINTERƒA(INQ)˜1/82REGS…DC.L†0‰POINTER1OFREGSƒDC.L†0,0,0,0,0,0,0,0…OFBASEREGS‚.R0->.R7*‰DC.L†0,0,0,0,0,0,0,0…OFUPPERLIMITS5/839MAXTCNT‚DS.W†1‰MAXIMUM#OFTASKSTOBEATTACHEDTOEXMON*CURTCNT‚DC.W†0‰CURRENT#OFTASKSATTACHED12#PT13…DC.L†0,0,0™TRAPS13,14,15†1/81**ˆIODBBUFFERSFOR.DBFILES*4POOLPTR‚DC.L†0‰CIRCULARBUFFERPOINTERFORIODBˆ3/828POOL…DCB.L…1300,-1ƒPOOLOF20SECTORLENGTHBUFFERSˆ3/82'POOLEND‚EQU‡*-1‡ENDOFBUFFERPOOL–3/82)DATASIZEEQU‡(POOLEND+256-B)/256*256›3/822**************************************************;*ˆTASKCONTROLDATA‚(BUFFERDYNAMICALLYOBTAINEDVIAGETSG)5*’includes‚TASKVECTORTABLE,BUFFERS,OMNTBLS&MAPS)*’sizeoftheGTSEGedarea=#TASKS*800*'*ˆTASKVECTORTABLE‚(32BYTESPERTASK)**OFFSET„CONTENTTVNAMEƒEQU‡0†TASKNAMETVSESSƒEQU‡4†TASKSESSIONTVBUF„EQU‡8†A(TASKBUFFER)TVBRKPT‚EQU‡12†A(OMITTEDBRKPT))TVAGE„EQU‡16†EVENTAGEFLAG(0=DISPLAYED)/TVEXECƒEQU‡17†TASKINEXECUTIONFLAG(>0=YES)"TVEVNTƒEQU‡18†EVENTEXCEPTIONTYPE TVCODEƒEQU‡19ˆ"‡"…CODE TVPC…EQU‡20†PCATEVENT‰(BINARY)%TVTERMƒEQU‡24†TASKTERMINALVOLUMEID%TVNOTEƒEQU‡28†TASKNOTIFICATIONLEVEL0TVDBIDƒEQU‡30†DBID=TASKNUMBER(ZERORELATIVE)*1***************************************************ˆTASKBUFFERS*=LTASKBUFEQU‡$100†(256BYTEBUFFERPERTASK:FORMATFOLLOWS)BUFD…EQU‡0‰D0-D7BUFA…EQU‡$20‡A0-A6BUFUSPƒEQU‡$3C‡A7BUFPC„EQU‡$40‡PCBUFSR„EQU‡$44‡SRBUFMASK‚EQU‡$46‡EXMONMASKBUFSTAT‚EQU‡$4A‡TASKSTATUSBUFDO„EQU‡$4E‡DIRECTIVEOPTIONSBUFLOCƒEQU‡$50‡LOCATIONBUFVALƒEQU‡$54‡VALUEBUFVM„EQU‡$58‡VALUEMASKBUFCNTƒEQU‡$5C‡MAXCOUNTBUFOMNƒEQU‡$60‡A(TASK'SOMNTBL)BUFMAPƒEQU‡$64‡A(TASK'SOMMAP)#BUFMAPE‚EQU‡$68‡A(ENDTASK'SOMMAP)/BUFOMHI‚EQU‡$6C‡HIGHESTOMCODEINTASKSOMNTBL=BUFCURO‚EQU‡$6E‡CURRENTOBJECTMODULECODEOFPC(WHEREAMI)MAXTCNT#tasks|:A*ˆ|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|:A*ˆ|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|:/*TASKBUF|#Tasks*32+0000„TaskBuffer‰TASK1|:*ˆ|Š+0100ˆ"TASK2|<=*ˆ|±BUFOMN....|..*ˆ|±BUFMAP----|---!%*ˆ|Š+0200ˆ"TASK3->MAXTCNT#tasks|:!C*ˆ|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|:!C*ˆ|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|:!9*OMNTBL|#Tasks*288+0000„ObjectModuleNamesTASK1|:!&*ˆ|Š+OM1*14‚OMSectionMap†TASK1|:!)*ˆ|Œ+S1*8‚ObjectModuleNamesTASK2|<=!&*ˆ|Š+OM2*14‚OMSectionMap†TASK2|<==!3*ˆ|Œ+S2*8‚ObjectModuleNamesTASK3->MAXTCNT#tasks|*ˆ|Š+OM3*14‚OMSectionMapŒ"|?*ˆ|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|?*ˆ|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|*SEGEND|#Tasks*800±|‰PAGE&‰SECTIONƒ8‰PASCALROUTINESFROMPASLIB$.PLJSRƒEQU‡*‰PASCALLONGJSRROUTINE-‰MOVE.L„(A7),A4ƒGETRETURNADDRESSFROMSTACK"‰ADD.L…#4,(A7)ƒCORRECTITONSTACK$‰ADD.L…(A4),A4ƒCALCULATEDESTINATION‰JMP‡(A4)†GOTOIT%.PALSTS‚EQU‡*‰ALLOCATESPACEONSTACK$HPTR…EQU‡4‰STACKTOPOFFSETINTORMABUF†EQU‡32ˆBUFFERZONEAMOUNT"STKOV„EQU‡$10‡STACKOVERFLOWERROR ‰EXT.L…D4.PALSTSLEQU‡*“LONGENTRYPOINT4‰ADD.L…#1,D4…FORCED4=LEASTEVENINTEGER>=OLDD4‰ANDI.L„#-2,D4'‰SUB.L…D4,A7ALLOCATED4BYTESOFSTACK-‰SUBA.L„#BUF,A7ALLOCATEBUFZONEAMOUNTMORE4‰CMP.L…HPTR(A5),A7‰ISSTACKPOINTER>=TOPOFSTACK?5‰BHI.S…ALOCSTK1ŒYES,THENWEHAVEROOMTOALLOCATEIT.‰LEA‡BUF(A7,D4.L),A7…NO,REMOVEALLOCATEDAREA0‰MOVEQ…#STKOV,D0‹GENERATEASTACKOVERFLOWERROR ‰TRAP†#14‰DC.W†0.ALOCSTK1LEA‡BUF(A7),A7ŠA7=NEWSTACKPOINTER7‰MOVE.L„(A7,D4.L),(A7)†MOVERETURNADDRTOTOPOFSTACK ‰RTS›RETURN‰PAGE ‰SECTIONƒ9**ˆREGISTERCONVENTIONS**ˆA0ˆSCRATCHD0*ˆA1ˆA(TASKBUFFER)†D1*ˆA2œD2*ˆA3œD3*ˆA4ˆA(CURTASKVECTOR)ƒD4*ˆA5ˆA(INQKEYBDBUFF)ƒD5*ˆA6ˆA(DATAAREA)ˆD6&*ˆA7ˆA(STACK)ŒD7ˆINDEXTOCRTMESSAGES* *ˆENTRYPOINT*-SYMBUGƒLEA‡B(PC),A6ŒGLOBALDATABASEREGŠ3/82‰LEA‡STACK-B(A6),A7¤3/82-‰MOVEM.LƒD0-D7/A0-A7,TASKREGS-B(A6)ƒSAVEREGS.‰MOVE.L„A0,EXMONAME-B(A6)ƒSAVEDEBUGGER'SNAME)‰MOVE.L„A0,ASQB-B(A6)‡INITASQPARABLOCK5‰MOVE.L„A0,PBGETSG-B(A6)„TASKNAMETOGTSEGPARMBLOCK 1‰MOVE.L„A1,DECRT-B(A6)†SAVEDEBUGCRTVOLUMENAME)‰LEA‡EXASR(PC),A0ˆPUTA(ASR)INASQBŒ1/82‰MOVE.L„A0,ASQASRV-B(A6)¢1/821‰LEA‡TASKLDR-B(A6),A0„INITIALIZETARGETTASKˆ3/82"‰MOVE.L„D2,LDVOL$L(A0)†VOLUMENAME‰MOVE.W„D3,LDUID$W(A0)†USERID'‰MOVEM.LƒD4-D5,LDCAT$L(A0)ƒCATALOGNAME‰MOVE.L„D1,$04(A0)"‰MOVE.L„D1,$0E(A0)ŠMONITORSESSION‰MOVE.L„D1,STARTTSK+4-B(A6)‰MOVE.L„D1,STARTTSK+$0E-B(A6)(‰CLR.L…D7’D7ISINDEXTOMESSAGEVECTORS‰BSR‡MSG05VERSIONMESSAGE**ˆCLAIMBREAKS*‰LEA‡IOIN-B(A6),A0¥3/82>‰MOVE.L„IOSFCT(A0),D5SAVEFUNCTION&OPTIONSFORBREAKSERVICE*‰MOVE.L„#$01200200,IOSFCT(A0)‰CLAIMBREAKS‰LEA‡TENSHUN(PC),A1¤1/82*‰MOVE.L„A1,IOSCAD(A0)‘SERVICEADDRESS…1/82‰TRAP†#28‰MOVE.L„D5,IOSFCT(A0)RESTORENORMALCYTOIOSPARMBLOCK‰TST.L…D0ŒDIDITWORK?‰BEQ.S…IN.MSIZE†YES‰BSR‡MSG23‰TELLUSERNOBREAKS ,IN.MSIZEMOVEQ…#1,D4ASSUMESINGLETASKMODE#‰CMP.L…D4,D6COMLINELENGTHPASSED?,‰BGT‡IN.SINGYES-IMPLIESSINGLETASKDEBUG‰BSR‡MSG01ASKZOPTION’5/83"‰BSR‡KEYINGETKEYBOARDREPLYŒ5/832‰LEA‡INQ-B(A6),A5ˆA(ASCIISTRING)FORGETNUMDƒ5/83$‰BSR‡GETNUMDEŒCONVERTTOBINARY5/83&‰MULS†#1024,D0ŒCONVERTTOKBYTESŒ5/83*‰MOVE.L„D0,SEGLTH-B(A6)…SIZEOFGTSEG‘5/832‰LEA‡QUEST2+2-B(A6),A0ƒCHANGETOTASKMESSAGEˆ5/83‰MOVE.L„#'MAX',(A0)+‰MOVE.L„#'TASK',(A0)+‰MOVE.L„#'S(1',(A0)+‰MOVE.L„#'->19',(A0)+‰MOVE.W„#')',(A0)+*9*ˆPROMPTUSERFORMAXIMUMTASKCOUNT‚(MULTITASKINGMODE)*+IN.MULT‚BSR‡MSG01PROMPTFORMAX#OFTASKS‰BSR‡KEYINGETKEYBOARDREPLY2‰LEA‡INQ-B(A6),A5ˆA(ASCIISTRING)FORGETNUMDƒ3/82$‰BSR‡GETNUMDEŒCONVERTTOBINARY3/82(‰MOVE.W„D0,D4BINARYMAXTASKCOUNT‰3/82#‰BLE‡IN.MULTZEROTASKSNOTALLOWED'‰CMP.W…#19,D4ŽVALIDATETASKCOUNTLIMIT%‰BGT‡IN.MULTINVALID-REISSUEPROMPT 6‰LEA‡QUEST2+2-B(A6),A0ƒCHANGETOPROCMESSAGE†>>111484‰MOVE.L„#'PROC',(A0)+‰MOVE.L„#'(68',(A0)+‰MOVE.L„#'000/',(A0)+‰MOVE.L„#'6801',(A0)+‰MOVE.L„#'0/68',(A0)+‰MOVE.L„#'020)',(A0)+*5*ˆPROMPTUSERFORPROCESSORTYPE‚(MULTITASKINGMODE)*+IN.PROC‚BSR‡MSG01PROMPTFORPROCESSORTYPE‰BSR‡KEYINGETKEYBOARDREPLY-‰LEA‡INQ-B(A6),A5ˆA(ASCIISTRING)FORGETNUMD‰BSR‡GETNUMDEŒCONVERTTOBINARY*¦BINARYPROCESSORTYPEIND0‰CMP.L…#68000,D0‰IFˆTHEN.S&‰MOVE.L„#$68000,PTYPE-B(A6)SAVEPTYPE1‰MOVE.L„#0,PCODE-B(A6)†FORCEPCODEBASEDONPTYPE‰BRA.S…IN.SINGDONE.‰ENDI ‰CMP.L…#68010,D0‰IFˆTHEN.S&‰MOVE.L„#$68010,PTYPE-B(A6)SAVEPTYPE/‰MOVE.L„#8,PCODE-B(A6)†FORPCODEBASEDONPTYPE‰BRA.S…IN.SINGDONE.‰ENDI ‰CMP.L…#68020,D0‹021885‰IFˆTHEN.S-‰MOVE.L„#$68020,PTYPE-B(A6)SAVEPTYPE‚0218859‰MOVE.L„#$C,PCODE-B(A6)†FORCEPCODEBASEDONPTYPEƒ021885‰BRA.S…IN.SINGDONE‰ENDI -‰BSR‡MSG37DISPLAY'INVALIDOPTIONSPECIFIED'‰BRA‡IN.PROCTRYAGAIN“111484>> 7IN.SING‚MOVE.W„D4,MAXTCNT-B(A6)„MAXIMUMTASKCOUNTŒ1/82*‰ASL.L…#5,D4TIMES32=LTHOFVECTORAREA.‰MOVE.L„D4,D1LTHOFGTSEGDUETOVECTORSƒ5/832‰MOVE.L„D4,TASKBUF-B(A6)„A(FIRSTTASKBUFFER)Š1/82)‰ASL.L…#3,D4TASKBUFSIZE=#TASKS*256-‰ADD.L…D4,D1PLUSLTHOFGTSEG(BUFFERS)ƒ5/83-‰MOVE.L„D1,OMNTBL-B(A6)…OFFSETOFOMNTBLŽ5/83*‰ASL.L…#1,D4OMN&MAPAREA=#TASKS*512.‰ADD.L…D4,D1TOTALLTHOFGTSEG(#TASKS*800)/‰ADD.L…#DATASIZE,D1ˆLENGTHOFNONTASKAREAˆ5/839‰CMP.L…SEGLTH-B(A6),D1…ENOUGHZFORTHISMANYTASKS?5/83‰BLE.S…GETMEMŽYES›5/832‰MOVE.L„D1,SEGLTH-B(A6)…OVERRIDEHISZOPTION‰5/83*5*ˆGETDYNAMICSEGMENTFORHISSYMBUGDATA(SECTION0)*.GETMEMƒMOVEQ…#GTSEG,D0‹GTSEGDIRECTIVECODE=1‰LEA‡PBGETSG-B(A6),A0¢3/82 ‰TRAP†#1’ATTACHMEMORYFORTASKS‰BNE‡FATAL01XŒUNSUCCESSFUL"‰MOVE.L„A0,D0A(GTSEGEDAREA)3/82,‰MOVE.L„A0,SEGB-B(A6)‡SAVEBASEADDRESS3/825‰ADD.L…#DATASIZE,D0ˆOFFSETOFTASKAREAINGTSEG‚3/82/‰MOVE.L„D0,SEGADDR-B(A6)„SAVEA(TASKAREA)1/82;‰MOVE.L„D0,FORTASK-B(A6)„ANTICIPATEATTACHOF1STTASK1/82/‰ADD.L…D0,TASKBUF-B(A6)„A(1STTASKBUFFER)Œ1/827‰ADD.L…D0,OMNTBL-B(A6)…OFFSETCONVERTEDTOADDRESSƒ1/82 =‰MOVE.L„OMNTBL-B(A6),OMNEXT-B(A6)…HIH2OOMNTBLADDRINSIMBO4‰ADD.L…SEGLTH-B(A6),D0…A(ENDOFOMN&MAPAREA)†1/82:‰MOVE.L„D0,SEGEND-B(A6)…ENDADDROFENTIREGTSEGAREA1/82 7‰MOVE.L„#DATASIZE,D0ˆCOPY13KOFDATAINSECTION03/82(‰ASR.L…#2,D0COPY4BYTESATATIMEˆ3/82(‰MOVE.L„A0,A5SAVEHISA6BASEADDR‰3/82=IN.COPY‚MOVE.L„(A6)+,(A0)+‰COPYINITIALDATAAREATOHIS3/82.‰DBRA†D0,IN.COPYŠINITIALIZEHISDATAAREA†3/82*1*ˆHEREISWHEREWESTARTTALKINGTOHISDATAAREA*-‰MOVE.L„A5,A6FROMNOWONA6ISHISDATA„3/82‰LEA‡STCK_TOP-B(A6),A7¡3/82:‰MOVE.L„A7,RMA_ST-B(A6)…DEFINEHEAPBOTTOMFORPASCAL3/82,‰LEA‡STACK-B(A6),A7†ANDA7ISHISSTACK‹3/82 *‰MOVE.L„SEGADDR-B(A6),A0„A(TASKAREA)’3/82-‰MOVE.W„MAXTCNT-B(A6),D0†NUMBEROFTASKS3/82%‰SUBQ†#1,D0INDEXFORDBRAISTASKS-1*‰MOVE.L„TASKBUF-B(A6),A1†FIRSTTASKBUFFER)IN.TASK‚CLR.L…(A0)+CLEARTASKFIELDŽ1/82%‰CLR.L…(A0)+CLEARSESSIONFIELD‹1/821‰CLR.L…8(A0)CLEAREVENTFIELDSESPECIALLYTVEXEC2‰MOVE.L„A1,(A0)LINKTASKBUFFERSTOTHEIRVECTORS+‰ADD.W…#LTSKVECT-8,A0†NEXTTASKVECTORŽ1/82/‰ADD.W…#LTASKBUF,A1ˆADVANCETONEXTBUFFERˆ1/82+‰DBRA†D0,IN.TASKŠLOOPTOCLEARTASKVECTORS* *ˆGETANASQ*‰MOVEQ…#GTASQ,D0‹GETANASQ.‰LEA‡ASQB-B(A6),A0‡ASQPARAMETERBLOCKADDRESS‰TRAP†#1-‰BEQ.S…IN.PASCSUCCESS-GOCLAIMBREAKS…5/83 ‰CMP.W…#8,D0‰BEQ.S…FATAL01021885 ‰CMP.W…#6,D0&‰BEQ.S…IN.PASCALREADYHASASQ-OKŒ5/83 ‰CMP.W…#3,D0‰BNE.S…FATAL03BADPARMBLOCK"‰BRA.S…FATAL02BADTARGETTASKNAME:FATAL01XMOVE.L„#'TCB',ERMES1N-B(A6)ALTERMEMORYMESSAGE‰BRA.S…FATAL01'FATAL05‚ADD.L…#4,D7ADJUSTMSGTOMSG15'FATAL04‚ADD.L…#4,D7ADJUSTMSGTOMSG14'FATAL03‚ADD.L…#4,D7ADJUSTMSGTOMSG13'FATAL02‚ADD.L…#4,D7ADJUSTMSGTOMSG12;FATAL01‚BSR‡MSG11…HANDLESMSG11,12,13,14WITHD7ADJUSTMENT#DONE…MOVEQ…#TERM,D0ŒTERMINATEEXMON‰TRAP†#1’THAT'SALLFOLKS*1MEANSSINGLETASKMODE0‰BLE‡PROMPT‡NOCOMLINEIMPLIESMULTITASKINGMODE1‰BSR‡LOADTASK†PROCESSCOMLINELOADREFERENCETASK%‰MOVE.L„A0,A5PRETENDPARMLINEISINQ ‰BSR‡ATCHTASK"‰BRA‡PROMPTŽBEGINSINGLETASKMODE‰PAGE**ˆASR‚ROUTINESINNEXT5PAGES*!EXASR„MOVEQ…#RDEVNT,D0ŠREADEVENT$‰LEA‡EVNTBLK-B(A6),A0„RECEIVINGAREA‰TRAP†#1%‰BNE‡MSG15EVENTREADFAILED‚(NOASQ) $*ˆEVENTCODE…TYPEEVENTŒEXMONACTION,*Š3ŒUSERTASKCREATEDƒ-SHOULDNOTSEETHESE*Š4ŒTIMEOUTEVENT‡-‚"†"ƒ"„"1*Š5ŒTERMINATIONEVENTƒ-DETACHSUBTASKFROMEXMON,*Š7ŒSERVERTASKEVENTƒ-SHOULDNOTSEETHESE2*Š8ŒEXCEPTIONEVENT…-NORMALTYPE:SUBTASKHALTED*™#1’SUBTASKATTACHTOEXMON*™#2’SUBTASKDETACHFROMEXMON%*™#3’SUBTASKHALTED(BREAKPOINT,etc.) =‰CMP.B…#5,EVNTCODE-B(A6)ƒSEEIFTASKTERMINATEDBEFOREDETACH ‰BEQ‡EXITASR3‰CMP.B…#8,EVNTCODE-B(A6)ƒEXCEPTIONTYPEEVENT?‰1/82+‰BNE‡EX.019ŽNO-DISCARDUNSOLICITEDEVENTS5‰MOVEM.LƒEVNTTASK-B(A6),A2-A3‡SAVETASKNAME&SESSION7‰MOVE.B„EVNTETYP-B(A6),D0ƒGETEXCEPTIONEVENTTYPECODE!‰CMP.B…#2,D0CHECKEXCEPTIONTYPE*‰BGT‡EXEVNT†CODE3=NORMALEXCEPTIONEVENT‰BEQ‡EXDET‡CODE2=DETACH‰PAGE**ˆATTACHEVENT*(EXATT„MOVE.L„SEGADDR-B(A6),A4„A(TVTABLE),‰MOVE.B„#$20,D2PSEUDOEVENTCODEFORATTACH ‰CLR.L…D0’TVIDOFTASKSLOT3/82,EX.002ƒTST.L…(A4)TESTASLOTINTHETVTABLE‰BEQ.S…EX.005ŽEMPTY-USEIT#‰CMPA.L„(A4),A2TASKBEINGSTOPPED?-‰BEQ.S…EX.004ŽYES-ALTERTOPSEUDOEVENT#1F,‰ADD.W…#LTSKVECT,A4ˆA(NEXTVECTORSLOT)‹1/82‰ADDQ†#1,D0NEXTTVID•3/821‰CMP.W…MAXTCNT-B(A6),D0„MORESLOTSTOCHECK?Š3/82‰BLT‡EX.002ŽYES›3/82.‰MOVE.L„A2,NUTASKNM-B(A6)ƒNO-‚NAMETOMESSAGE‰BSR‡MSG20TASKLIMITMESSAGE#‰BRA‡EXITASRGETOUT(NOMOREROOM) )EX.004ƒMOVE.B„#$1F,D2STOPPEDMESSAGEKEY .EX.005ƒMOVE.B„D2,EVNTECOD-B(A6)ƒTOEVENTBLOCK#‰MOVE.L„TVBUF(A4),A1ˆA(TASKBUFFER),‰MOVEM.LƒA2-A3,(A4)ŠSAVETASKNAME&SESSION2‰MOVE.L„TERMINAL-B(A6),TVTERM(A4)ƒSAVETERMINALID"‰MOVE.W„#1,TVNOTE(A4)‡NOTELEVEL=1&‰MOVE.W„D0,TVDBID(A4)‡SAVETASK'SDBID1‰TST.W…CURTCNT-B(A6)‡FOREGROUNDTASKEXISTS?‡1/82‰BNE.S…EX.007ŽYES)‰BSR‡FOREGRNDŒNO-MAKETHISTASKFORTASK9EX.007ƒADD.W…#1,CURTCNT-B(A6)„ONEMORETASKNOWINEFFECT*‰LEA‡XMSKB-B(A6),A0†ADDRESSOFPARA.BLOCK,‰MOVE.L„8(A0),BUFMASK(A1)ƒSAVEMASKFORTASK)‰BSR.S…SETMASKSETINITIALEXMONMASK‰3/82‰BNE‡FATAL02BADTARGETTASK5‰MOVE.L„TVBUF(A4),A0ˆGETADDRESSOFBUFFERTOBEUSED)‰MOVE.W„#LTASKBUF-1,D0†CLEANUPTHEBUFFER%EX.010ƒCLR.B…(A0)+ZEROTASK'SBUFFER‰DBRA†D0,EX.010‰BRA.S…READSTATŒSERVICEMESSAGE#EX.019ƒBSR‡MSG19UNKNOWNEVENTTYPE‰BRA‡EXITASRTHROWITAWAY‰PAGE**ˆDETACHEVENT*/EXDET„BSR.S…FINDTASKŒLOCATEEVNTTASKINTVTABLE‰BRA.S…EXDET1ŽSUCCESSFUL‰BRA.S…UNKNOWNNOTFOUNDERROR:EXDET1ƒMOVE.W„#7,TVNOTE(A4)‡FORCEDETACHMESSAGEFROMTELL ‰CLR.L…TVSESS(A4)ŠREMOVESESSION0‰SUB.W…#1,CURTCNT-B(A6)„REMOVEFROMNO.OFTASKS3‰MOVE.B„#$21,EVNTECOD-B(A6)INDEXTODETACHMESSAGE2‰CMPA.L„QUEST3N-B(A6),A2„FOREGROUNDTASKDETACHED?‰BNE.S…GOTSTATNO>‰MOVE.L„SPACES-B(A6),QUEST3N-B(A6)‚BLANKTASKNAMEFROMPROMPTS)*10/83‚MOVE.L„SPACES-B(A6),QUEST1N-B(A6)$‰BRA.S…GOTSTATSENDDETACHEDMESSAGE *0*ˆSUBROUTINEFINDEVNTTASKINVTASKVECTORTABLE*GFINDTASKMOVE.L„SEGADDR-B(A6),A4„ASSUMESA2-A3HOLDEVNTTASK&EVNTSESS*‰MOVE.W„MAXTCNT-B(A6),D6„NUMBEROFENTRIES‰SUBQ†#1,D6LOOPCOUNT”3/82FINDVTƒCMP.L…(A4),A2SAMETASK?‰BNE.S…NEXTVTŽNO"‰CMP.L…TVSESS(A4),A3‡SAMESESSION?‰BEQ.S…GOTVECTYES3NEXTVTƒADD.W…#LTSKVECT,A4ˆNEXTSLOTINTVTABLEŠ1/82‰DBRA†D6,FINDVT9‰ADD.L…#2,(A7)„NOTFOUNDEXITALTERSRETURNADDRONSTACK3GOTVECT‚RTSŒFOUNDTASK(A4=VECTORENTRYINTVTABLE) 4SETMASK‚MOVE.L„BUFMASK(A1),8(A0)ƒNEWMASKVALUE3/82+‰MOVEQ.Lƒ#EXMMSK,D0ŠSETMASKDIRECTIVEŒ3/82&‰BSR‡COPY4COPYTASKNAME&TRAP#1ˆ3/82‰RTS‰PAGE**ˆNORMALEVENT**EXEVNTƒBSR‡FINDTASKŒLOCATETASKINTVTABLE!‰BRA.S…READSTATŒFOUNDTASKVECTOR%UNKNOWN‚BSR‡MSG26TASKNAMENOTFOUND ‰BRA‡EXITASR *-*ˆREADTASKSTATEANDPROCESSEXCEPTIONEVENT*0READSTATMOVEQ…#RSTATE,D0ŠSETUPFORREADSTATUS)‰MOVE.L„A4,A0USETASKVECTORASPARMBLOCK‰TRAP†#1)‰BEQ.S…GOTSTATTASKSTATEREADSUCCESSFULER1†CMP.W…#2,D0‰BEQ‡FATAL03BADPARMBLOCK ‰CMP.W…#3,D0+‰BEQ‡FATAL02TASKNONEXISTENTORPRIVILEGED ‰CMP.W…#10,D0'‰BEQ‡FATAL03TASKNOTATTACHEDTOEXMON‰BRA‡FATAL04BADBUFFERADDR*GOTSTAT‚MOVE.L„TVBUF(A4),A1ˆBUFFERADDRESS7‰MOVE.L„BUFPC(A1),D2ˆPCWILLSTAYIND2FORASRROUTINE.‰MOVE.L„D2,TVPC(A4)‰SAVEPCOFEXCEPTIONEVENT,‰CLR.B…TVEXEC(A4)ŠTASKFLAGGEDNOTEXECUTING**†CHECKTRACEANDBREAKPOINT*4‰MOVE.W„EVNTECOD-B(A6),D0ƒGETEVENTCODE&TYPE‰3/82(‰MOVE.W„D0,TVEVNT(A4)‡SAVEFORTELL‘3/82"‰LSR.W…#8,D0EVNTECODIND0.BŽ3/82#‰MOVE.B„D0,TVAGE(A4)ˆFLAGNEWEVENT‰BNE.S…NOTRAP0ISNONZEROFLAG0‰SUBQ.B„#1,TVAGE(A4)ˆFORCEFLAGTO$FFFORTRAP0%NOTRAP0‚CMP.B…#28,D0ŽSEEIFTRACEONE*‰BNE.S…NOTRACENOCHECKIFBREAKPOINTˆ5/83)‰CMP.W…#$1800,BUFDO(A1)„STEPPINGPASTBP?4‰BNE.S…NOTRACENO-REGULARTRACECHECKIT&OTLIMITS<‰MOVE.L„TVBRKPT(A4),BRKBUF-B(A6)YES-INSTALLOMITTEDBRKPT4‰MOVE.W„BUFDOSA(A1),BUFDO(A1)RESTORENORMALOPTIONS‰LEA‡BPVALUE-B(A6),A0¢3/827‰MOVE.L„A0,BRKSOR-B(A6)…A(BRKPT)ISFROMADDROFMOVELL*‰BSR‡GETDESTPUTBREAKPOINTBEHINDUS†1/82‰BNE‡ERLLUNSUCCESSFUL&‰CMP.W…#$1000,BUFDO(A1)„ISHETRACING?"‰BEQ.S…NOTBPYES-DOTRACEOUTPUT 4RERUN„CLR.B…TVAGE(A4)‹SUPPRESSTELLOFTRACE1EVENT+‰BSR‡RUN‘TASKCONTINUESEXECWITHBRKPTSIN0‰BRA.S…EXITASRRETURNFROMEVENTWITHOUTMESSAGE ,NOTRACE‚CMP.B…#22,D0ŽSEEIFBREAKPOINTEVENT‰BNE.S…NOTBPNO &‰MOVE.W„BUFBPCNT(A1),D5…GETLOOPCOUNT ,‰BEQ.S…EXITASRNOBREAKPOINTSENTERED‚021885'‰LEA‡BUFBPTBL(A1),A2…A(FIRSTBREAKADDR)-VALIDBP‚CMP.L…(A2),D2THISBRKPT?‚(CHECKSPC)‰BEQ.S…BPFNDYES'‰LEA‡LBPENTRY(A2),A2…STEPTONEXTBRKPTééééééé‰SUB.W…#1,D5LASTBPENTRY?‰BNE‡VALIDBPNOTYET(‰BRA.S…NOTBPYES-HAVETRUEPRIV.INST.7BPFND„SUBQ.W„#1,8(A2)ŒREDUCEEFFECTIVEBREAKPOINTCOUNT‰BLE.S…BPFOUNDCOUNTEXHAUSTED‰LEA‡6(A2),A3ŒA(BRKSOURCE)2‰MOVE.L„D2,TVBRKPT(A4)†SAVEA(BRKPTTOBEREMOVED)‰BSR‡BPOUTREMOVEIT/‰MOVE.W„BUFDO(A1),BUFDOSA(A1)‚SAVETRUEOPTIONS6‰MOVE.W„#$1800,BUFDO(A1)„FORCETRACE1MODEPASTBRKPT‰BRA‡RERUNCONTINUEEXECUTION9BPFOUND‚MOVE.B„#$22,TVAGE(A4)†INDEXTOBREAKPOINTMESSAGE/NOTBP„CMP.W…#$2102,EVNTECOD-B(A6)„SEEIFDETACH'‰BEQ.S…EXITASRBREAKPTSALREADYREMOVED !‰MOVE.W„BUFBPCNT(A1),D5…GETCOUNT‰BEQ.S…EXITASRNOBPTOREMOVE&‰LEA‡BUFBPTBL(A1),A2…A2GOESTOBRKBUF)REMOVEBPLEA‡6(A2),A3ŒA3ISA(BRKSOURCE) ‰CMP.W…#$1000,BUFDO(A1)„TRACING?‰BNE.S…PURGEBPNO,‰CMP.L…(A2),D2YES-THISINSTABREAKPOINT?,‰BNE.S…PURGEBPNO-WILLTELLTRACEDMESSAGE6‰MOVE.B„#$22,TVAGE(A4)†YES-CHANGEMESSAGETOBREAKPT5‰MOVE.B„#22,TVEVNT(A4)†PRETENDTHISWASABRKPTEVENT+PURGEBP‚BSR‡BPOUTRESTORECODEWHILEINASR%‰LEA‡LBPENTRY(A2),A2…POINTTONEXTBP&‰SUBQ.W„#1,D5COUNTBREAKPTSTOREMOVE$‰BNE.S…REMOVEBPŒBRANCHIFMORETODO *EXITASR‚MOVEQ…#RTEVNT,D0ŠRETURNFROMEVENT‰LEA‡1,A0ENABLEASRSTATUS‰TRAP†#1L*---------------------------------------------------------------------------L*/////////////////// EXECUTION PATH RESUMES FOLLOWING WTEVENT //////////////:*///////////////////ˆENDOFASRDRIVENCODEŒ//////////////L*---------------------------------------------------------------------------*)*ˆATTENTIONEVENT…(BREAKKEYSTRUCK!!!!)*'TENSHUN‚MOVEQ…#RDEVNT,D0ŠREADTHEEVENT‰LEA‡ATTEVNT-B(A6),A0¢3/82‰TRAP†#1*‰BSET†#GOTBRK,BREAK-B(A6)GOTANI/OBREAK‰BRA‡EXITASRRETURNFROMEVENT >FOREGRNDMOVE.L„A4,FORTASK-B(A6)„MAKETHISTHEFOREGROUNDTASK6‰MOVE.L„(A4),QUEST3N-B(A6)‚INITIALIZEPROMPTTASKNAMES‰MOVE.L„(A4),QUEST1N-B(A6)0‰MOVE.L„FHSOPEN-B(A6),D0„CURRENTOPENFHSDBŒ3/82‰BEQ.S…FOREXITNONEOPEN•3/829‰MOVE.W„TVDBID(A4),D6‡DERIVEA(FHSDB)OFTASKFROMITSID ‰EXT.L…D6°3/82$‰MULS†#38,D6ŽOFFSETOFA(FHSDB)Œ3/82&‰LEA‡FHSDB0-B(A6),A0…A(1STFHSDB)’3/82%‰ADD.L…A0,D6A(THISTASKSFHSDB)‹3/82-‰CMP.L…D0,D6ISITTHECURRENTOPENONE?ƒ3/82‰BEQ.S…FOREXITYES›3/820‰MOVE.L„D0,A0NO-CLOSECURRENTOPENFHSDB3/82"‰MOVE.W„#4,(A0)CLOSECOMMAND‘3/82‰TRAP†#3’DOCLOSE–3/82&‰MOVE.L„D6,A0A(THISTASKSFHSDB)‹3/82%‰MOVE.W„#$40,(A0)‹ASSIGNCOMMAND3/82‰TRAP†#3’OPENFHSDB”3/821‰MOVE.L„A0,FHSOPEN-B(A6)„REMEMBERITASOPEN‹3/82 FOREXIT‚RTS PAGE**ˆTELLUSERABOUTRECENTEVENTS*'TELL…MOVE.L„SEGADDR-B(A6),A4„A(TVTABLE)#‰MOVE.W„MAXTCNT-B(A6),D6„LOOPCOUNT.‰CMP.W…#1,MAXTCNT-B(A6)„SINGLETASKMODE?1/82/‰BNE.S…TELLMOREŒNO-NOIMPLIEDWAITFORPROMPT$‰TST.B…TVEXEC(A4)ŠTASKINEXECUTION?%‰BEQ.S…TELLMOREŒNO-PROCESSMESSAGES.‰MOVEQ…#WTEVNT,D0ŠWAITFOREVENTBEFOREPROMPT‰TRAP†#1&TELLMORETST.L…(A4)TASKINTHISSLOT?‰BEQ.S…NEXTELLNO‰CLR.L…D2’PREPAREINDEXREG$‰MOVE.B„TVAGE(A4),D2ˆNEWEVENTFLAG?!‰BEQ.S…NEXTELLNONEFORTHISTASK*‰BGT.S…TELLMSGUSEFLAGASINDEXTOMESTYP'‰ADDQ.B„#1,D2TRAP0MSGHASFLAGOF$FF"TELLMSG‚CLR.B…TVAGE(A4)‹CLEARFLAG6‰MOVE.L„TVBUF(A4),A1ˆESTABLISHBUFFERADDRFORGETRRID ‰CMP.B…#$22,D2BREAKPOINTEVENT?,‰BNE.S…NOTFORENO-SKIPNOTELEVELANALYSIS&‰MOVE.W„TVNOTE(A4),D1‡CHECKNOTELEVEL%‰BEQ.S…NEXTELL=0MEANSNOMSG&HALT ‰CMP.W…#2,D13‰BEQ.S…ISFOREŽ=2MEANSMSG&HALT&SETTOFOREGRND"‰BLT.S…NOTFORE=1MEANSMSG&HALT-‰BSR‡INSTALL=3OR4MEANSCONTINUEEXECUTION‰BSR‡RUN$‰MOVE.L„#$22,D2INSTALLCLOBBEREDD2,‰CMP.W…#3,D1EXECRESTARTEDCHECKIFMESSAGE&‰BEQ.S…NOTFORE=3MEANSMSG&CONTINUE/******ƒBRA.S…NEXTELL=4MEANSNOMSG&CONTINUE*=NEXTELL‚ADD.W…#LTSKVECT,A4ˆCHECKNEXTTASKFORNEWEVENT1/82$‰SUBQ.W„#1,D6DONEALLTASKVECTORS?‰BGT‡TELLMOREŒNOTYET‰RTS  &ISFOREƒBSR‡FOREGRNDŒYES-NOTELEVEL=25NOTFORE‚MOVE.L„(A4),OUTTASK-B(A6)‚TASKNAMETOMESSAGE3‰LEA‡OUTEVNT-B(A6),A0„A(MESSAGEVARIABLEPART)†3/825‰LEA‡MESTYP-B(A6),A5…BASEADDROFEVENTMSGTABLEƒ3/82)‰LSL.L…#4,D2SHIFTINDEXTOMESTYPOFFSET$‰ADD.W…D2,A5A(MESSAGETOBECOPIED)1‰MOVE.L„(A5)+,(A0)+‰COPYEVENTMSGTOOUTPUTAREA‰MOVE.L„(A5)+,(A0)+‰MOVE.L„(A5)+,(A0)+.‰MOVE.L„(A5)+,(A0)+‰ALLMESSAGES16BYTESLONG‰MOVE.L„TVPC(A4),D0‰GETPC0‰LEA‡OUTPC-B(A6),A3†OUTPUTLOCATIONADDRESS‡3/82‰BSR‡MOVED0ŽPCTOMESSAGE-‰CLR.L…-(A3)ERASELEFTOVERRREGDIGITS„10/83#‰LEA‡OUTPC-B-4(A6),A3„RESETA3–5/83'‰BSR‡PCRELOŽPCRELATIVETOANRREGˆ5/83‰BSR‡MSG03PRINTEVENTMESSAGE*(‰CMP.W…#7,TVNOTE(A4)‡JUSTDETACHEDTASK? ‰BNE.S…DISPCNO,DIS-ASSEMBLEPC4‰CLR.L…(A4)YES:EMPTYTASKVECTORSLOTNOW!!!!!!!!!!‰BRA‡NEXTELLCONTINUE*.*ˆDIS-ASSEMBLEPCWHEREEVENTJUSTOCCURRED!!*?DISPC„MOVEM.LƒD6/A4,-(A7)‰SAVED6/A4(TASKCOUNT/TASKPTR)3/82>‰MOVE.L„FORTASK-B(A6),-(A7)ƒSAVETHEREALFOREGROUNDTASK3/827‰BSR‡FOREGRNDŠLETRESOLVETHINKTHISISFOREGROUND3/82*‰MOVEQ…#1,D2SETDIS-ASSEMBLYTO1&‰MOVE.L„TVPC(A4),D1‰GETTHISTASK'SPC$‰MOVE.L„A1,-(A7)ŒSAVEFROMMDDI3/82!‰BSR‡MDDIDIS-ASSEMBLEPCADDRESS1‰MOVE.L„(A7)+,A1ŒRESTOREOURA1FORFOREGRNDƒ3/826‰MOVE.L„(A7)+,A4ŒRESTORETHETRUEFOREGROUNDTASK3/82)‰BSR‡FOREGRNDŒMAKEITTHEFOREGROUNDˆ3/82'‰MOVEM.Lƒ(A7)+,D6/A4‰RESTORED6/A4‘3/82‰BRA‡NEXTELLCONTINUE PAGE**ˆGETNEXTCOMMAND*(WHAT…BSR‡PARSMXXDISPLAYERRORTEXTŒ2/84.PROMPTƒLEA‡STACK-B(A6),A7†CLEANTHESTACK5/83"‰BSR‡TELLINTERJECTEVENTMESSAGES4MACRONƒLEA‡MSG02(PC),A5ˆPROMPTFORNEXTCOMMAND‡5/836‰BCLR.B„#GOTBRK,BREAK-B(A6)HASHEHITBREAKKEY?‰5/83‰BEQ.S…SAYWHATNOœ5/83+‰CLR.L…CREPEAT-B(A6)‡ZEROREPEATCOUNT5/83'‰CLR.L…CRCOUNT-B(A6)‡ANDREFCOUNT‘5/835‰CLR.L…IN_MACRO-B(A6)†MACROABORTEDBYBREAKKEY„5/83(‰BRA.S…PROMPTERŒGIVEHIMTHEPROMPT‹5/83>SAYWHAT‚TST.L…IN_MACRO-B(A6)†ISPARSEDOINGKEYBOARDI/O?‚1/82.‰BNE.S…PARSINGYES-WEAREPERFORMINGAMACRO5‰SUBQ.L„#1,CREPEAT-B(A6)„NO,BUTCRMAYBEINEFFECT?‰BLE.S…PROMPTERŒNOITISN'T..‰BSR‡MSG10‡DISPLAYREPEATABLECOMMANDINCRBUF 6‰LEA‡INQ-B(A6),A0ˆYES-COPYPRIORCOMMANDTOINQ3/826‰LEA‡CRBUF-B(A6),A5†FROMCRBUFWHEREITWASSAVED3/828COPYCNT‚MOVEQ.Lƒ#16,D0ŽCOPY20LONGWORDS(LOOPCOUNT-1);COPYCRƒMOVE.L„(A5)+,(A0)+‰COPYINGPRIORCOMMANDTO/FROMINQ+‰DBRA†D0,COPYCR‹CONTINUEFOR80BYTEBUFFER3‰SUB.L…#1,CRCOUNT-B(A6)„REDUCECRREPEATCOUNTˆ1/82$‰BRA.S…PARSINGSKIPPROMPTANDKEYIN 1PROMPTERJSR‡(A5)PROMPTWITHMSG00ORMSG02„5/83‰BSR‡KEYINREADINPUTMESSAGE;‰TST.L…CRCOUNT-B(A6)‡ISTHISTHECOMMANDSAVEDFORCR?1/82‰BEQ.S…PARSINGNOWAY!0‰LEA‡CRBUF-B(A6),A0†OFCOURSEITIS........‡3/82:‰MOVE.L„CRCOUNT-B(A6),CREPEAT-B(A6)THISCOUNTCOUNTS…3/820‰BRA‡COPYCNTGOSAVETHISCOMMANDFORFUTUREREF**ˆCALLTHEPASCALPARSER*+PARSING‚CLR.W…BREAK-B(A6)‰SETNOI/OBREAKS7‰MOVE.L„FORTASK-B(A6),A4„A(FOREGROUNDTASKVECTOR)…3/82)‰MOVE.L„TVBUF(A4),A1ˆA(TASKSTATEBUFFER)5‰MOVE.L„A1,REGS-B(A6)‡A(REGS)OFFOREGROUNDTASK„1/822‰MOVEM.LƒD7/A1/A4/A6,-(A7)ƒSAVEREGSFROMPARSE_ST2‰TST.W…CURTCNT-B(A6)‡FOREGROUNDTASKLOADED?†1/82'‰BEQ.S…NOFGNDŽNOFOREGROUNDTASKLOADED6‰MOVE.L„BUFPC(A1),D7ˆGETCURRENTPCOFFOREGROUNDTASK#‰CLR.L…D0’SETWHERE_AM_ICODEIND0%‰BSR‡RESOLVESETMODULE/SECTIONCODES=NOFGNDƒLEA‡GLOBAL-B(A6),A5…PARSERREQUIRESREGSA3,A5,A6ƒ3/82.‰MOVE.L„A5,A6BOTHA5,A6POINTTOGLOBALAREA7‰LEA‡.PLJSR(PC),A3‡A3POINTSTO'LONG'JSRROUTINE3/82‰BSR‡PARSE_STŒCALLIT;‰MOVEM.Lƒ(A7)+,D7/A1/A4/A6ƒRESTOREREGSCLOBBEREDBYPASCAL.‰TST.B…ERR_NMBR-B(A6)†NO-‚CHECKERR_NMBRŠ3/82.‰BNE‡WHATSYNTAXERROR-FORNOWJUSTSAYWHAT&‰CLR.L…D0’PARSEDOK.‚PREPAREFORTOKEN%‰MOVE.B„TOKEN-B(A6),D0†GETTOKEN•3/82%‰LSL.W…#2,D0TOKEN*4=CMDTBLINDEX/‰LEA‡CMDTBL(PC),A2‡BASEOFCOMMANDVECTORS‡1/82‰ADD.L…D0,A2CMDTBLVECTOR0‰MOVEM.LƒPARM_BLK-B(A6),D1-D6‚PRELOADPARMS3/82=‰MOVE.B„PM_COUNT-B(A6),D0ƒPARMCOUNT(NOTEALSOSETSSR)3/82/‰JMP‡(A2)GOPROCESSCOMMANDTHRUCMDTBLVECTOR/CMDTBLƒBRA‡MACRON„STARTORENDOFMAPROCESSING3‰BRA‡ASˆADDRESSSTOPVALUECHANGE(OREQUALW/MASK)1‰BRA‡MACRODEF‚MA[MACRODEFINE(doneinparse)]‰BRA‡SDˆSYMBOLDEFINE5‰BRA‡MACRODEF‚INSIDETRACE(NOLONGERSUPPORTED5/83):‰BRA‡MACRODEF‚MACROEDITEXISTINGLINEDONEINPARSER5/83#‰BRA‡BRK‡BREAKPOINTSETORDISPLAY'‰BRA‡DISPLY„DISPLAYFORMATTEDREGISTERS‰BRA‡MMOD†MODIFYMEMORY ‰BRA‡WHAT†MMREGNOTIMPLEMENTED‰BRA‡DMEM†MEMORYDISPLAY ‰BRA‡DMEM.REG‰BRA‡HELP†HELP‹TOKEN=12 ‰BRA.S…GOˆGO!‰NOP¡PADSSHORTBRANCHTO4BYTES‰BRA‡BFˆBLOCKFILL‰BRA‡DCˆDEFINECONSTANT ‰BRA‡DUˆDUMP‰BRA‡DEFAULTƒDEFAULTOPTIONS‰BRA‡BMˆBLOCKMOVE‰BRA‡FRˆFILEREAD‰BRA‡FSˆFILESAVE‰BRA‡BSˆBLOCKSEARCH‰BRA‡CRˆCOMMANDREPEAT4‰BRA‡QUIT…TERMINATEDEBUGSESSION&ASSOCIATEDTASKS‰BRA‡SMEM†MEMORYSET‰BRA‡SMEM.REG‚REGISTERSET‰BRA‡TRACE…TRACE‰BRA‡ATTACH„ATTACH&STARTTASK‰BRA‡TERMIN„TERMINATEATASK"‰BRA‡DETACH„DETACHTASKFROMEXMON#‰BRA‡EVENT…CREATEEVENTREMOTETASK&‰BRA‡MASK†ALTEREXMONMASKREMOTETASK‰BRA‡STARTASK‚STARTTASK‰BRA‡HALTTASK‚STOPTASK ‰BRA‡DISPLATƒDISPLAYTASKSTATUS‰BRA‡STAT†SETTASKSTATUS‰BRA‡TASK†SETREFERENCETASK$‰BRA‡WAITER„NOPROMPTWAITFOREVENT"‰BRA‡LOAD†LOADTASK(W/WOCOMLINE)#‰BRA‡OFFSET„DISPLAYOFREGS.R0->.R7‰PAGE**ˆGO*GO‡BEQ.S…GOPCNOSTARTADDR,‰MOVE.L„D1,BUFPC(A1)ˆINITPCWITHSTARTADDR#GOPC…CLR.W…BUFDO(A1)‹SETOP=$0000 &GOEX…BSR.S…INSTALLINSTALLBREAKPOINTS1‰BSR.S…RUN‘DOPSTATE&REXMONDIRECTIVESFORTASK ‰BRA‡PROMPT +RUN†TST.B…TVEXEC(A4)ŠTASKINEXECUTIONNOW?6‰BNE.S…RANYES-CANNOTSTARTSECONDPATHOFEXECUTION"‰MOVEQ.Lƒ#PSTATE,D0ŠPUTTASKSTATE+‰MOVE.L„A4,A0‡USETASKVECTORASPARMBLOCK‰TRAP†#1ŠUPDATEMASK,PC,ETC.‰BNE‡ER1*‰LEA‡REXPB-B(A6),A0†REXMONPARMBLOCK3/82‰MOVE.L„8(A4),D01‰ADD.L…#BUFDO,D0‹COMPUTEADDRESSOFEXMONOPTIONS‰MOVE.L„D0,8(A0),‰MOVE.B„#1,TVEXEC(A4)‡FLAGTASKINEXECUTION0‰MOVEQ.Lƒ#REXMON,D0ŠRUNTASKUNDEREXMONCONTROL&‰BSR‡COPY4COPYTASKNAME&TRAP#1ˆ3/82‰BEQ.S…RUNNINGSUCCESSFUL0‰CMP.W…#15,D0ŽCHECKFORBADVALUELOCATIONERROR ‰BNE‡ER1‘NO-SOMEOTHERERROR%‰BSR‡MSG17BADVALUELOCATIONMESSAGERUNNING‚MOVEQ.Lƒ#DELAY,D0"‰MOVE.L„#100,A0DELAYFOR1/10SEC6‰TRAP†#1ˆINHOPETHEEVENTWILLOCCURBEFOREWEPROMPTRAN†RTS‰SPC‡3(INSTALL‚MOVE.W„BUFBPCNT(A1),D5…GETCOUNT‰BEQ.S…INSTALLDŒBRANCHIFNONE3‰TST.B…BR_ENABL-B(A6)†DEFAULTNOBREINEFFECT?†1/82‰BEQ.S…INSTALLDŒYES(‰TST.B…TVEXEC(A4)ŠTASKNOWINEXECUTION?,‰BNE.S…INSTALLDŒYES-BREAKPOINTSALREADYIN‰LEA‡BPVALUE-B(A6),A2¢1/82*‰MOVE.L„A2,BRKSOR-B(A6)…PUTA(SOURCE)‘1/82"‰MOVE.L„#2,BRKGET+4-B(A6)ƒLENGTH=2‰MOVE.L„#2,BRKBUF+4-B(A6)-‰LEA‡BUFBPTBL(A1),A2…BREAKPOINTADDRESSTABLE)‰MOVE.L„BUFPC(A1),D2ˆPCSAVEDFORCOMPARE-INSTALBPMOVE.L„(A2),BRKPBUF-B(A6)‚GETSOURCE)‰MOVE.L„(A2),BRKBUF-B(A6)ƒPUTDESTINATION‰LEA‡6(A2),A0ŒA(SOURCE)'‰MOVE.L„A0,BRKGET-B(A6)…GETDESTINATION.‰BSR‡GETSOURSAVESOURCECODEFROMTARGET‚1/82ERLLH„BNE‡ERLLBRANCHIFBAD9‰MOVE.W„4(A2),8(A2)‰COPYREFERENCECOUNTTOEFFECTIVECNT ‰CMP.L…(A2),D2BREAKPOINTATPC?‰BNE.S…NOTATBPNO/‰CMP.B…#22,TVEVNT(A4)†YES,BUTHAVEWETOLDHIM.‰BNE.S…NOTATBPNOPE-SOINSTALLITANDHITIT0‰MOVE.L„D2,TVBRKPT(A4)†YES-SAVETHEPCADDRESS/‰MOVE.W„BUFDO(A1),BUFDOSA(A1)‰SAVEUSEROPTIONS9‰MOVE.W„#$1800,BUFDO(A1)„FORCETRACE1INSTRUCTIONOPTION*‰BRA.S…INSTLNXTŒSKIPINSTALLINGTHISBRKPT1NOTATBP‚BSR‡GETDESTPUTBREAKPOINTINTARGET†1/82‰BNE‡ERLLHBRANCHIFBAD4INSTLNXTADD.W…#LBPENTRY,A2ˆA(NEXTBRKPTENTRY)‹3/82 ‰SUBQ.W„#1,D5%‰BNE.S…INSTALBPŒSTILLMORETOINSTALL*INSTALLDRTS›ALLBREAKPOINTSAREINSTALLEDK*--------------------------------------------------------------------------+*IT‡TST.B…NO_FLG-B(A6)ˆNOITSPECIFIED?1/82&*ˆBNE.S…IT.NOYES-DELETETHEITFLAG9*ˆMOVEM.LƒD1-D2,BUFITLO(A1)ƒSAVELOW&HIGHADDRESSRANGE4*ˆBSET†#0,BUFTRFLG(A1)…SETBIT0TOSHOWITINEFFECT&*ˆBRA.S…PROM.11THISRETURNSTOPROMPT;*IT.NO„BCLR†#0,BUFTRFLG(A1)…CLEARBIT0TOTURNOFFITTRACE*ˆBRA.S…PROM.11K*--------------------------------------------------------------------------+*OT‡TST.B…NO_FLG-B(A6)ˆNOOTSPECIFIED?1/82&*ˆBNE.S…OT.NOYES-DELETETHEOTFLAG9*ˆMOVEM.LƒD1-D2,BUFOTLO(A1)ƒSAVELOW&HIGHADDRESSRANGE4*ˆBSET†#1,BUFTRFLG(A1)…SETBIT1TOSHOWOTINEFFECT*ˆBRA.S…PROM.11;*OT.NO„BCLR†#1,BUFTRFLG(A1)…CLEARBIT1TOTURNOFFOTTRACEK*-------------------------------------------------------------------------- PROM.11‚EQU‡**BT‡BRA‡PROMPTŽBRANCHTRACENOTIMPLEMENTEDK*--------------------------------------------------------------------------'TRACE„MOVE.W„#$1000,D6‹SETTRACEOPTION‰SUBQ.L„#1,D1COUNT<=ONE?$‰BLE.S…TRACINGTRACEONEINSTRUCTION‰LSR.W…#1,D6CHANGEOPTO$0800‰ADD.L…#1,D1RESTORETRUECOUNT!‰MOVE.L„D1,BUFCNT(A1)‡COUNTINMC"TRACING‚MOVE.W„D6,BUFDO(A1)ˆSETOP‰BRA‡GOEXBEGINEXECUTIONK*--------------------------------------------------------------------------'AS‡BEQ.S…AS.LISTDISPLAYEXISTINGVREGS(‰MOVE.W„#$2000,D6‹PRESET.OPFORNOMASK*‰MOVE.L„D1,BUFLOC(A1)‡SETNEW.VLLOCATION‰SUB.B…#1,D0ONEPARMONLY?"‰BEQ.S…ASTOPYES-NO.VAPROVIDED2‰MOVE.W„#$3000,D6‹STOPONEQUALRATHERTHANCHANGE&‰MOVE.L„D2,BUFVAL(A1)‡SETNEWVAVALUE‰SUB.B…#1,D0TWOPARMSONLY?-‰BNE.S…AS.COMŽNO:NEW.VMMASKALREADYIND3-ASTOP„MOVE.L„#-1,D3ŽDEFAULTMASKIS$FFFFFFFF9AS.COMƒMOVE.L„D3,BUFVM(A1)ˆASTOPEQUALENTRYƒ.VM=FFXXXXXX‰BRA‡TRACINGSTARTEXECUTION2AS.LIST‚LEA‡BUFDO(A1),A2ˆPSEUDOREGISTERBASEADDR‰BSR‡CLEANA3=A(OUTBUF)‰MOVE.L„#'OP=',(A3)+‰BSR‡MOVE2CONVERTOP‰ADD.L…#2,A32BYTESEXTRAPAD‰MOVE.L„#'VL=',-4(A3)‰MOVE.L„#'VA=',8(A3)‰MOVE.L„#'VM=',20(A3)‰MOVE.L„#'MC=',32(A3)‰BSR‡MOVEVCONVERTVL,VA,VM,MC,‰BSR‡MSG05DISPLAYASSOCIATEDASPSEUDOREGS ‰BRA‡PROMPTM*----------------------------------------------------------------------------%MACRODEFBRA‡PROMPTŽMADONEBYPARSERM*----------------------------------------------------------------------------*SD‡BRA‡PROMPTŽSYMBOLDEFINEDONEBYPARSERM*---------------------------------------------------------------------------- 7HELP…BEQ‡HELP.ALLŒNOSPECIFICHELPCOMMAND(ZEROPARMS)‰SUBQ.L„#1,D1COMMANDCODE-10‰ASL.L…#1,D1D1ISOFFSETININDEXOFMSGSECTOR‰LEA‡SYM_BUF-B(A6),A0¢3/82‰MOVE.L„A0,D2­1/82‰LEA‡255(A0),A0¨1/822‰MOVE.L„A0,D3START/ENDBUFFERADDRSIND2-D3‚1/82‰LEA‡FHSFILE-B(A6),A0¢3/82,‰MOVE.L„#$00400100,(A0)…OPENSEQUENTIALFILE‰MOVE.L„SPACES-B(A6),D0£3/82&‰MOVE.L„D0,FHSVOL(A0)‡BLANKFHSVOLUME‰CLR.W…FHSUSN(A0)#‰MOVE.L„D0,FHSCLG(A0)‡BLANKCATALOG‰MOVE.L„D0,FHSCLN(A0)‰MOVE.L„#'SYMB',FHSFIL(A0)‰MOVE.L„#'HELP',FHSFIL+4(A0)‰MOVE.W„#'IN',FHSEXT(A0)‰TRAP†#3’ASSIGNHELPFILE‰BEQ.S…HELP.OPN3HELP.E3‚MOVE.B„#46,ERR_NMBR-B(A6)‚FAILEDOPEN“10/83‰BRA‡WHAT®10/838HELP.E2‚MOVE.B„#45,ERR_NMBR-B(A6)‚SCREENI/OERRORŽ10/83‰BRA‡WHAT®10/83"HELP.OPNLEA‡IOSFILE-B(A6),A0¢3/821‰MOVE.L„#$00016000,(A0)…READRANDOMRECORDOPTION(‰CLR.L…IOSRRN(A0)ŠREADINDEXRECORDZERO6‰MOVEM.LƒD2-D3,IOSSAD(A0)„BUFFERADDRESSESARESYM_BUF‰TRAP†#2‰BNE‡HELP.E3READFAILED“10/83‰MOVE.L„D2,A3A3=A(SYM_BUF)4‰MOVE.W„(A3,D1),IOSRRN+2(A0)GETSECTORFOR1STREAD-‰MOVE.W„2(A3,D1),D5‰SECTORNUMBEROFNEXTMSG?‰OR.W†#IOPIMG,IOUT+IOSOPT-B(A6)ALLBUTLASTSECTORISIMAGEIOHELP.NXTTRAP†#2’READSECTOR‰BNE.S…HELP.E3FAILED˜10/83+‰ADDQ.L„#1,IOSRRN(A0)‡UPDATESECTORPOINTER4‰CMP.W…IOSRRN+2(A0),D5…ISTHISTHELASTHELPSECTOR?‰BNE.S…HELP.PRNO<‰AND.W…#$FFF7,IOUT+IOSOPT-B(A6)‚YES-DOFORMATTEDIOFORITHELP.PR‚LEA‡IOUT-B(A6),A0¥3/82/‰MOVEM.LƒD2-D3,IOSSAD(A0)„CRTBUFFERISSYM_BUF"‰TRAP†#2’OUTPUTPARTIALMSGTOCRT‰BNE‡HELP.E2FAILED-‰LEA‡IOSFILE-B(A6),A0„NOWCHECKFILEIOBŒ3/82-‰CMP.W…IOSRRN+2(A0),D5…DISPLAYEDALLSECTORS?‰BNE‡HELP.NXTŒNOTYET"HELP.DUNLEA‡FHSFILE-B(A6),A0¢3/82‰MOVE.W„#FHCLOS,(A0)ˆCLOSEFILE‰TRAP†#3‰BNE‡HELP.E3FAILED‰BRA.S…PROM.15SUCCESS9HELP.ALLBSR‡MSG28PRINTHELPSCREEN‚(HELPNAMENOTIMPL),‰BSR‡KEYINAWAITCARRIAGERETURNTOCONTINUE ‰BSR‡MSG29CONTINUEHELPMESSAGEPROM.15‚BRA‡PROMPTŽISSUEPROMPTM*----------------------------------------------------------------------------/*ˆD0PARMCNTCONTROLSDEFAULTOPTIONPROCESSING*ˆD0=0†MEANSDISPLAYDEFAULTS**ˆD0=1†MEANSPROCESSFILE‚ASOUTFILE(#FN)4*ˆD0=2†MEANSNOECHOWHICHCLOSESDEVICE(#PROR#FN)8*ˆD0=3†MEANSECHOWHICHOPENSTHEECHOFILE(#PROR#FN)3DEFAULT‚BEQ.S…DEF.LISTŒNOPARMSMEANSLISTDEFAULTS2‰MOVE.L„SPACES-B(A6),D5…KEEPTHESPACESHANDY‰3/82 ‰SUBQ.W„#1,D0FILENAMEPARAMETER2‰BNE.S…DEF.ECHOŒMAYHAVETOOPENORCLOSEECHOFILE3‰LEA‡PRINTFHS-B(A6),A1ƒA(FHS)TOBEFILLEDOUT‡6/83%‰BSR‡FILLFHSUSEEDITFILEONFHS‹6/837‰MOVE.B„#$0B,FHSOPT+1(A1)ƒSETTOREWRITEFILEONASSIGN)‰SUB.L…#1,A0BACKADDRUPTOA(DELIMITER)4‰LEA‡OUTFILE-B(A6),A3„FILENAMEINDEFAULTPARMS…3/82‰LEA‡INP_BUF-B(A6),A2%‰ADD.L…D1,A2OFFSETTOFILENAMEŒ10/83DEF.COPYMOVE.B„(A2)+,(A3)+‰CMP.L…A2,A0ATTHEDELIMITER?‰BNE‡DEF.COPYŒNOTYET$PROM.14‚BRA‡PROM.15RETURNTOPROMPT/DEF.ECHOLEA‡AP(PC),A2‹CALLATTACHPRINTER‹1/82'‰CMP.B…#2,D0OPENORCLOSEECHODEVICE?‰BGT‡PROM.14NEITHER‰BEQ.S…DEF.OPENŒASSIGNPRINTER'‰LEA‡DP(PC),A2‹CALLDETACHPRINTER‹1/82*DEF.OPENJSR‡(A2)ATTACHORDETACHPRINTER ‰BRA‡PROM.146DEF.LISTLEA‡DEMSG-B(A6),A2†BASICDEFAULTMESSAGE‰3/82*‰BSR‡CLEANBLANKOUTBUF&SETA3=A(OUTBUF)&‰MOVE.L„(A3),D5KEEPSPACESHANDY3/82%‰MOVE.L„#47,D3ŽLOOPCOUNTFORCOPY-18DEF.LOOPMOVE.B„0(A2,D3),0(A3,D3)ƒCOPYDEFAULTBASICMSG‰DBRA†D3,DEF.LOOP%‰CLR.L…D1’PREPAREFORBYTEMOVESˆ1/82(‰TST.B…MA_LIST-B(A6)‡MALOPTIONON?1/82‰BEQ.S…DEF.NOMAŒNO$‰MOVE.W„D5,(A3)BLANKNOPREFIX3/82.DEF.NOMATST.B…ECHO-B(A6)ŠECHOOPTIONON?1/82‰BEQ.S…DEF.NOENO"‰MOVE.W„D5,6(A3)ŒBLANKTHENO’3/823DEF.NOE‚TST.B…BR_ENABL-B(A6)†BREAKPTSENABLED?1/82‰BEQ.S…DEF.NOBNO#‰MOVE.W„D5,14(A3)‹BLANKTHENO’3/829DEF.NOB‚MOVE.B„BASE-B(A6),D1‡CONVERTINPUTBASECODE‡3/82.‰LEA‡20(A3),A0‹A(NAMEINOUTBUFOFINPUTBASE)"‰MOVE.L„A0,D3FIRSTPASSFLAG3/82)‰LEA‡DETYPE-B(A6),A2…BASENAMESTABLE3/82 DEF.INƒSUBQ.L„#1,D1CODE-1—1/82 -‰LSL.W…#2,D1TIMES4=OFFSETINTOTABLEƒ1/829‰MOVE.L„0(A2,D1),(A0)‡INPUTOROUTPUTBASENAMETOOUTBUF(*5/83ƒCMP.L…D3,A0DONEBOTHBASES?Ž3/82*5/83ƒBNE.S…DEF.LTHYES›1/825*5/83ƒADDQ.L„#8,A0STEPA(BASENAME)FOROUTPUT‚1/829*5/83ƒMOVE.B„TYPES-B(A6),D1†NO-NOWDOOUTPUTBASE‡3/82*5/83ƒBRA.S…DEF.IN9DEF.LTH‚MOVE.B„LENGTH-B(A6),D1…DEFAULTOUTPUTLENGTH‰3/821*5/83ƒMOVE.B„39(A2,D1),36(A3)„B,WORLCODE‘1/82‰MOVE.B„DEVICE-B(A6),D1£3/82*‰AND.B…#$FE,D1CONVERTCODE1=0(#PR)ˆ1/82)‰MOVE.W„44(A2,D1),40(A3)„#PR,#FN,#CN“1/82%‰MOVE.L„#29,D3ŽLENGTHOFFILENAMEMAX‰LEA‡OUTFILE-B(A6),A2¢3/829DEF.ILE‚MOVE.B„0(A2,D3),50(A3,D3)‚COPYFILENAMETOOUTBUF‰DBRA†D3,DEF.ILE%‰BSR‡MSG05PRINTDEFAULTSFROMOUTBUF‰BRA.S…PROM.02ALLDONE**ˆTASKRELATEDCOMMANDS*6LOAD…LEA‡INP_BUF-B(A6),A0„CAN'TBEINQFORMACROS‡3/82‰ADD.W…D1,A0A(TASKNAMEININQ)/‰MOVEQ.Lƒ#80,D6ŽPSEUDOCOMLINELENGTH=80„111484:‰BSR‡LOADTASK‚PERFORMLOAD&PASSCOMLINETOUSERTASK1/82!PROM.02‚BRA‡PROMPTŽREISSUEPROMPTJ*=========================================================================6ATTACHƒMOVE.L„D1,TASKLDR-B(A6)†TASKNAMETOBEATTACHED0‰BSR‡ATCHTASK‚ATTACHTASK&PASSLUNS&STARTIT ‰BRA‡PROM.02J*=========================================================================STARTASKBSR‡GETNAME-STARTNXTTST.L…(A4)†TASKEXISTSINTHISSLOT?‰BEQ.S…STARTSKP‚NO1‰MOVE.L„TVBUF(A4),A1‚YES-USEITSA(TASKBUFFER)(‰BSR‡INSTALLƒINSTALLBREAKPOINTSINTASK‰BSR‡RUN‡STARTEXECUTION8STARTSKPCMP.L…#'ALL',VFLD-B(A6)„COMMANDFORALLTASKS?‰BNE‡PROM.02ƒNO2‰ADD.W…#LTSKVECT,A4ˆPOINTTONEXTTASKVECTOR…1/82‰SUB.W…#1,D3…REDUCETASKCOUNT‰BNE‡STARTNXT‚CONTINUE#‰BRA‡PROM.02ƒALLTASKSINEXECUTIONJ*=========================================================================HALTTASKBSR‡GETNAMEHALTMORETST.L…(A4)TASKHERE?‰BEQ.S…HALTSKIPŒNO-TRYNEXT(‰TST.B…TVEXEC(A4)ŠYES-ISITEXECUTING?#‰BEQ.S…HALTSKIPŒNO-LEAVEITALONE-‰MOVE.L„A4,A0USETASKVECTORASSTOPPARMBLK ‰MOVEQ.Lƒ#STOP,D0ŒSTOPDIRECTIVE‰TRAP†#1'‰BEQ.S…HALTEDŽTASKSTOPPEDSUCCESSFULLY)‰BSR.L…PARSM47REPORTTASKFAILEDTOSTOP-‰BRA.S…HALTSKIPŒONTOTHENEXTIFHALT"ALL"1HALTEDƒCLR.B…TVEXEC(A4)ŠTASKNOTNOWINEXECUTION#‰MOVE.L„TVBUF(A4),A1ˆA(TASKBUFFER)‰MOVE.L„(A4),A2SAVETASKNAME,‰BSR‡DETACHTTŒTEMPORARILYDETACHTASK‚1114845‰MOVE.L„A2,(A4)UNERASETASKNAMEINVECTORFORATTACH4‰MOVE.L„A4,A1A1MUSTPOINTATTASKNAMEFORREDYTASK‰BSR‡REGLESSSTARTWITHOUTREGS4‰BSR‡REDYTASKŒATTACH&STARTTASK(WON"TBEGINEXEC)1STOPPINGBSR‡STATISŽRSTATEFORCURRENTREGVALUES+HALTSKIPCMP.L…#'ALL',VFLD-B(A6)‚STOPALL?'‰BNE.S…PROM.03NO-SINGLETASKSTOPPED1‰ADD.W…#LTSKVECT,A4ˆSTEPTONEXTTASKVECTOR†1/82&‰SUB.W…#1,D3LOOPONGETNAME'SMAXTCNT4‰BNE‡HALTMOREŒLOOPUNTILUNSUCCESSFUL(FORALLMODE)‰BRA.S…PROM.03RETURNTOPROMPTK*==========================================================================(TASK…BSR‡GETNAMEGETTASKNAME(REQUIRED)+‰CMP.B…#1,D0NOTELEVELPARAMETERSUPPLIED?‰BEQ.S…TASK.FORŒNO5‰MOVE.W„D2,TVNOTE(A4)‡ALTERNOTELEVELINTASKVECTOR2TASK.FORBSR‡FOREGRNDŒMAKEITFOREGROUNDTASK‡5/83‰BRA.S…PROM.03H*=======================================================================&MASK…BSR‡GETNAMEGETTASKNAME(IFANY)‰MOVE.L„#1,D3SETMASKBIT&‰TST.L…D2’RETURNEDEXCEPTIONBITVALUE'‰BEQ.S…MASKXORD3CURRENTLY=1‚(BIT#0)‰LSL.L…D2,D3SHIFTMASKBIT1MASKXOR‚MOVE.L„TVBUF(A4),A1ˆUSENAMEDTASKBUFFER1‰EOR.L…D3,BUFMASK(A1)†INVERTSELECTEDBITINMASK&‰LEA‡XMSKB-B(A6),A0†A(PARMBLOCK)‘3/82‰BSR‡SETMASK«3/82.‰MOVE.L„#$01FFFFF1,8(A0)„RESTORESTANDARDMASKPROM.03‚BRA‡PROMPTH*=======================================================================EVENT„BSR‡GETNAME-‰LEA‡ASQB-B(A6),A0‡REUSETHISPARMBLOCK‰3/82/‰SUB.W…#12,A7ŽMAKEROOMONSTACKFOREVENT‚1/82(‰MOVE.L„A7,10(A0)‹A(EVENT)TOPARMBLOCK7‰MOVE.W„#$0C08,(A7)‰NORMALEXCEPTIONEVENTPUTONSTACK ‰MOVE.L„(A4),2(A7)ŠCOPYTASKNAME*‰MOVE.L„SESSION-B(A6),6(A7)Š&SESSIONŒ3/82  ' /1!<)91:9:A3I7Q4Y7a5i4q7y6;‰T‘@™1¡I©7±5¹ )‰MOVE.B„D2,10(A7)‹EXCEPTIONCODEOFEVENT%‰MOVE.B„#$03,11(A7)‰NORMALEVENTTYPE+‰MOVEQ.Lƒ#QEVNT,D0‹DIRECTIVECODEFORQEVNT&‰BSR‡COPY8COPYTASKNAME&TRAP#1ˆ3/82 ‰ADD.W…#12,A7ŽCLEANUPSTACK‘1/82‰TST.L…D0’CHECKSUCCESS‰BEQ‡PROM.03OK!‰BSR‡MSG24FAILED ‰BRA‡PROM.03G*======================================================================TERMINƒBSR‡GETNAME"‰BSR‡QUITTERTERMINATETARGETTASK ‰BRA‡PROM.03H*======================================================================="DETACHƒBSR‡GETNAMESPR1043”111484‰MOVE.L„TVBUF(A4),A1#‰BSR‡DETACHTDETACHTASKFROMEXMON ‰BRA‡PROM.03H*=======================================================================:WAITERƒMOVEQ.Lƒ#WTEVNT,D0ŠWAITFOREVENTWITHOUTEXMONI/O&‰TRAP†#1’ALLOWSTARGETTASKTOUSECRT.‰BRA‡PROM.03NOWREADYTOISSUEDEBUGCOMMANDSH*=======================================================================STAT…BSR‡GETNAME‰LSL.W…#2,D2STATUS*4.‰JMP‡SLEEP(PC,D2.W)†JUMPTOSTATUSVECTOR‰1/824SLEEP„MOVEQ.Lƒ#STOP,D0ŒDOSTOPTOSETSTATUSDORMANT‰BRA.S…TRAPPER1AAWAKE„MOVEQ.Lƒ#START,D0†DOSTARTTOSETSTATUSREADYFROMDORMANT‰BRA.S…TRAPPER1AUNWAITƒMOVEQ.Lƒ#WAKEUP,D0‡DOWAKEUPTOSETSTATUSREADYFROMWAIT0TRAPPER1LEA‡STARTTSK-B(A6),A0ƒA(PARMBLOCK)’3/823‰MOVE.W„#$8000,8(A0)ˆNOREGINITIALIZATIONONSTART.‰BSR‡COPY4DOWAKEUP,STARTORSTOPTRAP#13/82:‰LEA‡STARTTSK-B(A6),A0ƒA0CLOBBEREDBYSTOPDIRECTIVE3/82$‰MOVE.W„#$A000,8(A0)ˆRESTOREOPTIONS‰TST.W…D0’DIDITWORK?‰BEQ.S…DISPLATSUCCESSFULGSTAT.ERRMOVE.B„#47,ERR_NMBR-B(A6)‚STATUSCHANGEDIRECTIVEFAILED10/83‰BRA‡WHAT®10/83L*---------------------------------------------------------------------------DISPLAT‚BSR‡MSG09PRINTSTATHDR3‰MOVE.L„SEGADDR-B(A6),A4„STARTOFTASKVECTORS‰3/82,‰MOVE.W„MAXTCNT-B(A6),D2„MAXTASKCOUNT3/82DIS.005‚TST.L…(A4)TASKHERE?‰BNE.S…DIS.007YES-SHOWIT5DIS.006‚ADD.W…#LTSKVECT,A4ˆNEXTTASKVECTORSLOT‰1/82%‰SUB.W…#1,D2LOOPONALLTASKVECTORS‰BNE‡DIS.005CONTINUE2PROM.04‚BRA‡PROMPTŽALLTASKSSTATUSREPORTED…10/83:DIS.007‚LEA‡SPACES-B(A6),A3…BLANKDMOUTAFOR80BYTES…3/82‰BSR‡CLEAN2¬3/82‰MOVE.L„(A4),(A3)‹COPYTASKNAME"‰MOVE.L„TVSESS(A4),4(A3)‹&‚SESSION$‰TST.B…TVEXEC(A4)ŠTASKINEXECUTION?‰BEQ.S…DIS.012NO,‰MOVE.B„#$65,9(A3)ŠYES-FLAGeBEFORESTATEDIS.012‚LEA‡ADX-B(A6),A0¦3/82/‰MOVE.B„TVCODE(A4),D0‡INDEXTOA,D,XTYPEEVENT ‰EXT.W…D02‰MOVE.B„0(A0,D0.W),17(A3)ƒEVENTIDTOPRINTBUFFER‰MOVE.B„TVEVNT(A4),D0 ‰BSR‡CONV"‰MOVE.W„D0,18(A3)‹ASCIIEVENTCODE‰TST.B…TVAGE(A4)‰BEQ.S…DIS.015OLDEVENTFLAG"‰MOVE.B„#'!',20(A3)‰FLAGNEWEVENT4DIS.015‚CMP.L…FORTASK-B(A6),A4„FOREGROUNDTASK?Ž3/82‰BNE.S…DIS.020NO‰MOVE.B„#'<',15(A3)‰YES/DIS.020‚MOVE.W„TVNOTE(A4),D0‹NOTIFICATIONLEVEL‰OR.B†#$30,D0CONVERTTOASCII‰MOVE.B„D0,16(A3)‹TOBUFFER$‰BSR.S…STATISŽRSTATEFORTASKSTATUS'‰LEA‡ADX+4-B(A6),A0†A(STATETABLE)3/82!‰MOVE.L„BUFSTAT(A1),D1†TCBSTATUS‰BMI.S…DIS.030ISDORMANT ‰ADD.L…#4,A0‰BTST.L„#20,D1ŽREADYBITIS#20‰BNE.S…DIS.030TASKISREADY ‰ADD.L…#4,A09DIS.030‚MOVE.L„(A0),10(A3)‰LITERALSTATUSTOPRINTBUFFER)‰LEA‡DMOUTA+22-B(A6),A3‚A(OUTPUTPC)’3/82‰LEA‡20(A4),A2‹BINARYPC‰BSR‡MOVETCONVERTPCTOASCII2‰LEA‡DMOUTA+32-B(A6),A3‚SPACEPASTNOTELEVEL‰3/82/‰LEA‡BUFPC(A1),A2ˆCONVERSIONADDRISCURRENTPC‰BSR‡MOVETPCNOWTOBUFFER‰BSR‡MOVE2SRTOBUFFER‰BSR‡MOVETEXMONMASKTOBUFFER#‰BSR‡MOVETTCBHEXSTATUSTOBUFFER‰BSR‡MOVE2OPTIONSTOBUFFER6‰MOVE.L„TVTERM(A4),(A3)…COPYCRTTERMINALIDTOBUFFER‰BSR‡MSG30REPORTSTATUS‰BRA‡DIS.006CONTINUE -STATISƒMOVE.L„A4,A0TASKVECTORISPARMBLOCK+‰MOVEQ.Lƒ#RSTATE,D0ŠREADCURRENTTASKSTATE‰TRAP†#1‰BNE‡ER1‘FATALERROR%‰MOVE.L„TVBUF(A4),A1ˆTASKBUFFERADDR‰RTS*5*ˆFINDTASKNAMEININPUTB  UF&LOCATEINTASKVECTORS*;GETNAME‚MOVE.L„FORTASK-B(A6),A4„ASSUMEFOREGROUNDTASKˆ3/82#‰TST.L…D1’TASKNAMESPECIFIED?‹10/833‰BEQ.S…GETFORENO-USEFOREGROUNDDEFAULTTASKNAME+‰MOVE.L„D1,A2YES-MOVELITERALNAMETOA21‰MOVE.L„SESSION-B(A6),A3„STANDARDSESSIONID‹3/82*‰BSR‡FINDTASKŒMATCHNAMEWITHTASKVECTORS)‰BRA.S…GETHIMŽFOUNDNAME(A4ISSET)ˆ1/82(‰CMP.L…#'ALL',D1ŠCOMMANDFORALLTASKS?‰BNE.S…GETWHOŽNO-SYNTAXERROR:‰MOVE.L„SEGADDR-B(A6),A4„STARTWITHFIRSTTASKVECTOR‚3/82:‰MOVE.W„MAXTCNT-B(A6),D3„WILLHAVETOCHECKALLSLOTS‚3/82?GETHIMƒMOVE.L„D1,VFLD-B(A6)‡SAVE'ALL'ASTASKNAMEPARSED1/820GETRTSƒRTS‘A5NOWPOINTSPASTTASKNAMEDELIMITER(GETWHOƒBSR‡MSG26…REPORTUNKNOWNTASKNAME&‰ADD.L…#4,A7…POPRETURNADDROFFSTACK‰BRA‡WHAT†EXIT-SYNTAXERROR?GETFORE‚MOVE.L„(A4),VFLD-B(A6)…NULLTASKNAMEBECOMESFOREGROUND‰BRA‡GETRTSŽNORMALEXIT PAGE**ˆDETACHANDEXIT*#DETACHT‚BSR‡CLRBPCLEARANYBPSSET#‰MOVE.W„BUFSR(A1),D0ˆGETSTATUSREG"‰BCLR†#15,D0ŽCLEARTRACEBITIFON‰MOVE.W„D0,BUFSR(A1)ˆRESTORESR‰CLR.L…BUFMASK(A1)‰CLEARMASK‰CLR.W…BUFDO(A1)‹CLEAROPTIONS(‰MOVEQ.Lƒ#PSTATE,D0ŠSETUPFORPUTSTATE*‰MOVE.L„A4,A0USETASKVECTORASPARMBLOCK‰TRAP†#1#‰BNE‡ER1‘PUTSTATEDIRECTIVEFAILED9DETACHTTMOVE.L„A4,A0USETASKVERTORASPARMBLOCK‚111484‰MOVEQ.Lƒ#DEMON,D0*‰TRAP†#1’A0POINTSTOTASKVECTORASABOVEH*----------------------------ASR ROUTINE GETS DETACH EVENT AT THIS POINT6‰BEQ.S…QUITTINGŠTASKSTILLRUNNINGUNATTACHEDTOEXMON-‰CMP.W…#1,D0IDENTIFYFAILUREERROROFDETACH‰BEQ‡FATAL03BADPARMBLOCK‰BRA‡FATAL02BADTASKNAME*%*ˆQUITƒ(TERMINATETARGETTASKSFIRST)*2QUIT…MOVE.W„MAXTCNT-B(A6),D1„MAX#OFACTIVETASKS ‰SUB.W…#1,D1+‰MOVE.L„SEGADDR-B(A6),A4„GETTASKLIST‘3/820QUIT.01‚BSR.S…QUITTERTERMINATETHISTARGETTASK-‰ADD.W…#LTSKVECT,A4ˆADVANCETONEXTTASKŠ1/82‰DBRA†D1,QUIT.01‰BRA‡DONETERMEXMON &QUITTER‚TST.L…(A4)ANYTASKNAMEHERE?‰BEQ.S…QUITTINGŒNO)‰MOVEQ.Lƒ#TERMT,D0‹TERMINATEDIRECTIVEID‰LEA‡STOPTASK-B(A6),A0¡3/82‰BSR.S…COPY8­3/82"QUITTINGCLR.L…(A4)CLEARTASKNAME'*10/83‚CLR.L…TVSESS(A4)ŠSESSIONNUMBER‰RTS›TERMINATEDONETARGETTASK ©8„CLR.W…8(A0)A0=A(PARMBLOCK)3/82)COPY4„MOVE.L„(A4),(A0)‹COPYTASKNAME‘3/82%‰MOVE.L„4(A4),4(A0)‰COPYSESSION’3/82#‰TRAP†#1’D0CONTAINSDIRECTIVE‰3/82‰RTS‰PAGE**ˆPRIMITIVECOMMANDS*0*ˆPARMCNT:1=ADDR;2=ADDR+TYPE;3=ADDR+LTH;4=ALL+MMOD…BSR‡MM’CALLDISASSEMBLERTOPROCESSMM ‰BRA‡PROMPT5AMAXERR‚MOVE.B„#16,ERR_NMBR-B(A6)‚ADDRESSRANGEERROR‰BRA‡WHATREPORTERRORL*---------------------------------------------------------------------------(BF‡SUB.L…D1,D2START-ENDADDRFORFILL!‰BMI‡AMAXERRLOADDR>HIADDR5/83!‰ADDQ.L„#1,D2TRUELENGTHOFMOVE$‰MOVE.L„D2,D6SAVETOTALMOVELENGTH!‰CMP.L…#256,D2MORETHAN1BLOCK?‰BLE.S…BF.ONEŽNO$‰MOVE.L„#256,D2YES-DO1BLOCKNOWEBF.ONEƒLEA‡SYM_BUF-B(A6),A3ƒBUILDINGADDRESSOFVALUESTOBEMOVELLED6‰MOVE.L„#1,D5COMPENSATEFORODDSTARTADDRIFPRESENT ‰AND.B…D1,D5/‰ADD.L…D5,A3IFODDADDRWILLBUILDATSYMBUF+1$‰MOVE.L„D2,D5WORKREGISTERFORMOVE‰CMP.B…#2,D4WORDMOVE?‰BGT.S…BF.LONGNO-LONGWORD‰BNE.S…BF.BYTENO-ABYTE,BF.WORD‚MOVE.W„D3,(A3)+ŒBUILDBLOCKOFWORDS‰SUB.L…#2,D5DONE?‰BHI.S…BF.WORDNOPE#‰BRA.S…BF.EXITYES-DONEWORDFILLBF.BYTE‚MOVE.B„D3,(A3)+ ‰SUB.L…#1,D5‰BHI.S…BF.BYTE‰BRA.S…BF.EXITDONEBYTEFILLBF.LONG‚MOVE.L„D3,(A3)+ ‰SUB.L…#4,D5 ‰BHI‡BF.LONG9BF.EXIT‚LEA‡SYM_BUF-B(A6),A3„A(CONTENTFORMOV2TASK)‡3/82 ‰MOVE.L„D1,-(A7)ŒSAVED1=A(to)‰BSR‡MOV2TASKŒPERFORMMOVELL#‰MOVE.L„(A7)+,D1ŒRESTORED1=A(to):‰ADD.L…D2,D1†ANTICIPATEANOTHERMOVE‚A(NEXTBLOCKtoADDR)%‰SUB.L…D2,D6REDUCETOTALMOVELENGTH‰BEQ‡PROMPTŽDONE‰CMP.L…D2,D6LESSTHAN1BLOCK?"‰BGE‡BF.EXITNO-DOANOTHERBLOCK&‰MOVE.L„D6,D2REFRESHREMAININGLENGTH‰BRA‡BF.EXITANDTRYAGAINL*---------------------------------------------------------------------------DC‡MOVE.L„D1,D4SAVEVALUE”1/82  +‰TST.W…CURTCNT-B(A6)‡FOREGROUNDTASK?1/82‰BEQ.S…NORSLVŽNO/‰BSR‡CLEANYES,BLANKOUTBUF&SETA3=A(OUTBUF)9******ƒMOVE.L„A6,-(A7)ŒSAVEA6FROMFORMADDR&BESTFIT3/82-******ƒMOVEA.LƒA3,A6SETA6TOA(OUTBUF)‹3/82$‰MOVE.L„D1,D0GETADDRESSTORESOLVE*‰BSR‡FORMADDRŒFORMATRELATIVEADDRESS‡1/82‰ADD.W…#8,A3INSERT8SPACES%‰MOVE.L„D1,D0RESTORERESOLVEADDRESS,‰BSR‡BESTFITRESOLVETOSYMBOL[+OFFSET]„1/82*******ƒMOVE.L„(A7)+,A6ŒRESTOREOURA63/82‰MOVE.L„A3,D0SPACEFILLER’6/83‰ADDQ†#2,D0­6/83‰AND.B…#$FE,D0«6/83‰MOVE.L„D0,A3­6/83 ‰MOVE.L„D4,D0REFRESHVALUE‘6/83(‰BSR‡ADRELOŽRREGRELOCATIONIFANY‡5/83‰BSR‡MSG05PRINTLINE*5NORSLVƒBSR‡CLEANBLANKOUTBUF&SETA3=A(OUTBUF)1/82&‰MOVE.W„#'$',(A3)+‰FIRSTFIELDISHEX ‰MOVE.L„D4,D0REFRESHVALUE‘1/82&‰BSR‡MOVED0ŽCONVERTVALUETOHEXASCII‰MOVE.L„D4,D0REFRESHVALUE‰BPL.S…DC.PLUSPOSITIVENUMBER%‰MOVE.B„#'-',-1(A3)‰PREFIXMINUSSIGN2‰NEG.L…D0‘COMPLEMENTFORABSOLUTEVALUECONVERSION4DC.PLUS‚BSR.S…BI2ASCDCONVERTVALUETODECIMALASCII0‰MOVE.B„SPACES-B(A6),(A3)+‚TOWORDBOUNDARYŽ3/82 ‰MOVE.B„#'%',(A3)+ŠBINARYPREFIX?‰MOVE.L„#31,D1„LOOPCOUNTANDBIT#TOCONVERTFORBINARYASCII#DC.BINƒBTST.L„D1,D4TESTBINARYBIT‰BEQ.S…DC.ZIPŽPUTZERO‰MOVE.B„#'1',(A3)+ŠPUTONE‰BRA.S…DC.LOOPDC.ZIPƒMOVE.B„#'0',(A3)+2DC.LOOP‚DBRA†D1,DC.BIN‹CONVERTALL32BITS(31->0)‰BSR‡MSG05PRINTLINE5LO‡BRA‡PROMPTŽWILLNEVERBEIMPLEMENTED(LOADSERVES)*!*ˆCONVERTBINARYTOASCIIDECIMAL*BI2ASCD‚LEA‡POWER10(PC),A0¤1/82/‰MOVE.L„(A0)+,D3ŒFETCHSPACES,ADVANCEPOINTER‰MOVE.B„D3,D1LEADBLANKFLAG BLANKIT‚MOVE.B„D3,D2OUTPUTBYTE SLODIVƒSUB.L…(A0),D0SUB(10**N) ‰BCS.S…LEAD0TABLEVALUETOOBIG*‰ADD.L…#1,D2INCREMENTCURRENTDIGITCOUNT ‰BRA‡SLODIV9LEAD0„ADD.L…(A0)+,D0ŒRESTOREOVERBORROW,ADVANCEPOINTER‰CMP.B…D1,D2LEADINGZEROTEST&‰BEQ.S…LEADBYES:STORELEADINGBLANK(‰ADD‡#16,D2ŽCONVERTBLANKTOASCIIDIGIT!‰CLR.B…D1’TURNOFFLEADINGBLANKS6LEADB„MOVE.B„D2,(A3)+ŒDECIMALCHARACTERTOOUTPUTLINE‰TST.L…(A0)DONE?‰BEQ.S…CHKALLBYES ‰BRA‡BLANKITCONTINUENEXTDIGITCHKALLB‚TST.B…D1’ALLBLANKS?‰BEQ.S…BI2ASCXNO:EXIT-‰ADD.B…#16,-1(A3)ŠCONVERTLASTBLANKTOASCII BI2ASCX‚RTS%POWER10‚DC.L†'„',1000000000,1000000003‰DC.L†10000000,1000000,100000,10000,1000,100,10,1,0M*----------------------------------------------------------------------------BM‡MOVE.L„D1,A3fromADDR‰MOVE.L„D3,D1toADDR‰MOVE.L„D2,D5SAVEfromENDADDR3‰ADD.L…#1,D5A(FIRSTBYTEAFTERfrom)ISA(OVERLAP)‰SUB.L…A3,D2MOVELENGTHIND2‰ADD.L…#1,D2TRUELENGTH‰MOVE.L„D2,D6SAVETOTALLENGTH‰CMP.L…A3,D1BACKWARDMOVE?‰BLE.S…BM.FWDŽYES‰CMP.L…D5,D1MOVEBEYOND?‰BGE.S…BM.FWDŽYES7‰MOVE.L„D1,D2ŒMOVEOVERLAPS-PROPAGATIONERRORPROBLEM‰SUB.L…A3,D2NONOVERLAPLENGTH!‰BMI‡AMAXERRLOADDR>HIADDR5/83!‰MOVE.L„D5,A3STARTATLASTBLOCK BM.BKWD‚MOVE.L„A3,D1NEWtoADDR‰SUB.L…D2,A3NEWfromADDR0BM.FWDƒMOVE.L„(A4),BRKPBP-B(A6)ƒSAMETASKMOVELL‰BSR‡MOV2TASKŒPERFORMMOVELL‰SUB.L…D2,D6DONE?‰BLE.S…BM.EXITYES-ALLMOVED ‰CMP.L…D2,D6PARTIALLASTBLOCK?‰BGE‡BM.BKWDNO$‰MOVE.L„D3,A3YES-ORIGINALtoADDR ‰BRA‡BM.BKWDBBM.EXIT‚CLR.L…BRKPBP-B(A6)ˆRESETSOURCETASKTOEXMONDEFAULT‚1/825‰BRA‡PROMPT‹ALLDONE‚-‚ODDPARITYADDRESSESAPROBLEMM*-----------------------------------------------------------------------------FS‡MOVE.L„#IOWRIT,D2ŠSETWRITEOPTIONFORIOS‰BRA.S…GET_FILE8FILLFHS‚LEA‡INP_BUF-B(A6),A0„A(INPUTFROMKEYBOARD)ˆ3/82‰ADD.L…D1,A0A(FILENAME)-‰MOVE.L„D1,-(A7)ŒSAVENAMEDISPLACEMENTˆ10/83‰MOVE.L„A6,-(A7)ŒSAVEBASEREG3‰MOVE.L„42(A6),FHSVOL(A1)ƒOVERLAY'PR‚'VOLUME‰6/837‰MOVE.W„48(A6),FHSUSN(A1)ƒOVERLAYZEROUSERNUMBER†6/836‰MOVE.L„50(A6),FHSCLG(A1)ƒOVERLAYCATALOGDEFAULT‡6/83 ‰MOVE.L„54(A6),FHSCLN(A1)"“6/83#‰MOVE.L„A1,A6FHSFOREDITFILEŽ6/83$‰BSR‡EDITFILEŒEDITVERSADOSFILENAME!‰BPL.S…FILLEDŽGOODFILENAME‘10/836‰MOVE.B„#41,ERR_NMBR-B(A6)‚BADVERSADOSFILENAME‰10/830‰LEA‡WHAT(PC),A1‰RETUR  NTOWHATFORERRMSG…10/83,‰MOVE.L„A1,8(A7)ŒMUSTRESTOREA6FIRST‰10/83FILLEDƒMOVE.L„A6,A1A(FHS).‰MOVE.L„(A7)+,A6ŒNORMALBASEREGRESTORED†3/82+‰MOVE.L„(A7)+,D1ŒRESTOREDISPLACEMENTŠ10/83‰RTSM*----------------------------------------------------------------------------,FR‡MOVE.L„#IOREAD,D2ŠSETREADOPTIONFORIOS"GET_FILELEA‡FHSFILE-B(A6),A1¢6/83*‰MOVE.W„#'‚',FHSEXT(A1)„BLANKSUFFIX’11/83‰BSR‡FILLFHSA(FILENAME)“6/83‰MOVE.L„A1,A0A(FHS)˜6/83<‰MOVE.W„#$000D,FHSOPT(A0)ƒOVERWRITE,CONTIGUOUS,PUBLICFILE%FR.IO„MOVE.W„#FHASGN,(A0)ˆASSIGNCODE‰TRAP†#3‰BEQ.S…FR.SETŽSUCCESS)‰CMPI.B„#IOWRIT,D2ŠNO,WRITEOPTIONSET?$‰BEQ.S…SAVEYES,FS,TRYANALLOCATE=FR.BADƒMOVE.B„#44,ERR_NMBR-B(A6)‚PROFILEFILEI/OERRORˆ10/83 ‰BRA‡WHAT FR.SETƒLEA‡IOSFILE-B(A6),A0¢3/82)‰MOVE.W„D2,(A0)READORWRITECODETOIOS=‰MOVE.W„#IOPBLK,IOSOPT(A0)‚RESETOPTIONSAFTERHELPIFNEEDED‰LEA‡TABLE-B(A6),A2¤3/821‰MOVE.L„A2,IOSSAD(A0)‡HELPCHANGEDTHISADDRˆ1/82‰LEA‡FILELTH-1(A2),A2¢1/82‰MOVE.L„A2,IOSEAD(A0)¥1/82‰TRAP†#2(‰BNE‡FR.BADŽPROFILEFILEI/OERRORˆ10/83!FR.GOOD‚LEA‡FHSFILE-B(A6),A0¢3/82‰MOVE.W„#FHCLOS,(A0)ˆCLOSECODE‰TRAP†#3 ‰BNE‡FR.BADPROM.10‚BRA‡PROMPT*&SAVE…MOVE.W„#FHALLO,(A0)ˆALLOCATECODE*‰CLR.W…FHSWCD(A0)ŠZEROWRITE,PROTECTCODES%‰MOVE.W„#256,FHSLRL(A0)…RECORDLENGTH‰MOVE.L„#2,FHSSIZ(A0)‡2RECORDS‰TRAP†#3’ALLOCATEFILE%‰BEQ.S…FR.IOOK-NOWDOASSIGN/WRITE‰BRA‡FR.BADŽBADALLOCATEK*--------------------------------------------------------------------------(BS‡CMP.L…D1,D2VERIFYLOADDRBS.BLKƒLEA‡NXT_STR-B(A6),A1„MYSEARCHADDRESSFORABLOCK3/82!‰BTST.L„D7,D1TARGETADDRESSODD?‰BEQ.S…BS.EVENNO/‰ADD.L…#1,A1MAINTAINADDRESSPARITYFORMOVELLBS.EVEN‚MOVE.L„D1,D2 ‰ADD.L…#80,D2$‰SUB.L…D4,D2A(LASTSTRINGINBLOCK)3‰MOVE.L„A1,BRKGET-B(A6)…MY(to)ADDR(NXT_STR[+1])(‰MOVE.L„#80,BRKGET+4-B(A6)‚MOVELLLENGTH+‰MOVE.L„D1,BRKPBUF-B(A6)„TARGETADDR(from)‰BSR‡GETSOURDOMOVELL•1/82‰BNE‡ERLLFAILED&BS.BEGINMOVE.L„D4,D5STRINGLENGTH-1+BS.SAME‚MOVE.B„0(A5,D5),D0‰STRINGCOMPARAND,‰CMP.B…0(A1,D5),D0‰MATCHMEMORY(INNXT_STR)‰BNE.S…BS.DIFŽNO‰DBRA†D5,BS.SAMEŠSOFAR,YES.‰MOVE.L„D1,D0UNEQUIVOCABLYYES(WHOLESTRING)/‰MOVEM.LƒD1/A2,-(A7)‰SAVEREGSFROMMOVED0‰3/821‰BSR‡MOVED0ŽPUTTARGETADDRTOOUTBUF(CONVERTED)&‰MOVEM.Lƒ(A7)+,D1/A2‰RESTOREREGS’3/82 ‰CMP.L…A2,A3OUTBUFFILLED?1/82‰BLE.S…BS.MORENOTYET‰MOVE.L„D1,-(A7)ŒSAVED1—4/82‰BSR‡MSG05DISPLAYOUTBUF ‰MOVE.L„(A7)+,D1ŒRESTORED1”4/82‰BSR‡CLEANREFRESHOUTBUF&A30‰LEA‡OUTBUFE-12-B(A6),A2LINEOVERFLOWADDRŒ3/82,BS.MORE‚ADD.L…D4,A1STEPPASTMATCHEDSTRING ‰ADD.L…D4,D1,BS.DIFƒADD.L…#1,A1A(NEXTSTRINGINNXT_STR)4‰ADD.L…#1,D1CORRESPONDINGTARGETADDRKEEPSINSTEP‰CMP.L…D6,D1AREWEDONE? ‰BGT.S…BS.DONEYES::::FINALLY!5‰CMP.L…D2,D1HAVEWEEXHAUSTEDTHESTRINGSTHISBLOCK‰BLT‡BS.BEGINŒNOTYET'‰BRA‡BS.BLKŽMOVEINANEW80BYTEBLOCK4BS.DONE‚BSR‡MSG05EMPTYBUFFEROFADDRMATCHESFOUND2PROM.13‚BRA‡PROMPTŽBLANKLINEOUTPUTIFNOMATCHESM*----------------------------------------------------------------------------8CR‡TST.L…IN_MACRO-B(A6)†LETPARSEDOCRIFINMACROƒ1/82%‰BNE‡PROM.13YES‚THECRISINAMACRO?‰MOVE.L„D1,CRCOUNT-B(A6)„SAVEREPEATCOUNTOFNEXTCOMMAND1/82?‰MOVE.L„#1,CREPEAT-B(A6)„TRIGGERCRONNEXTPASSOFPROMPT1/82 DU‡BRA‡PROMPT **…DISPLAYREGISTERS*:OFFSETƒLEA‡OFREGS-B(A6),A2…ENTRYPOINTFOROFCOMMAND„2/82#‰LEA‡R0R7-B(A6),A5‡PREFIXADDR“3/82#‰MOVE.W„#'in',6(A5)‰MINRANGES”5/83'‰BRA.S…DISPREGSŒCOMMONENTRYPOINTŒ2/82*MAXRREG‚LEA‡R0R7-B(A6),A5‡PREFIXADDR“5/83&‰CMP.W…#'in',6(A5)‰JUSTDIDMINS?5/83%‰BNE‡PROM.13NO-FINISHEDMAXES‹5/83#‰MOVE.W„#'ax',6(A5)‰MAXRA  NGES”5/83&‰BRA.S…DISPREGSŒOMMONENTRYPOINT5/835DISPLYƒMOVE.L„A1,A2TASKBUFISFROMADDRESSFORMOVER#‰LEA‡D0D7-B(A6),A5‡PREFIXADDR’3/822DISPREGSBSR‡CLEANBLANKOUTBUF&SETA3=A(OUTBUF))‰MOVE.L„(A5)+,(A3)+‰COPYPREFIXTOOUTBUF‰MOVE.L„(A5)+,(A3)+‰BSR‡MOVERCONVERTFIRST4REGS9‰MOVE.B„SPACES-B(A6),(A3)+‚EXTRASPACEBETWEENR3&R4…3/82‰BSR‡MOVERCONVERTNEXT4REGS‰BSR‡MSG05PRINTREGS/‰CMP.B…#'D',OUTBUF-B(A6)ƒNEEDTODOA0-A7REGS?%‰BEQ.S…DISPREGSŒYES-GODOTHEMŽ2/82(‰BGT.S…MAXRREGNO-JUSTTHEOFREGSŠ5/83(‰BSR‡CLEANNO-BUTCONVERTPC&SRNEXT"‰MOVE.L„SRPREFIX-B(A6),12(A3)3/82!‰MOVE.L„PCPREFIX-B(A6),(A3)+ž3/82 ‰BSR‡MOVEPC‰BSR‡MOVE2ŠMOVESR'‰MOVE.B„#'.',D2TRANSLATEOPTIONOŒ5/83$‰MOVE.W„BUFSR(A1),D0ˆSTATUSREG”5/83‰MOVE.W„D0,D1COPIED˜5/83.‰AND.L…#$00000700,D0‡MASKINTERRUPTLEVELŠ5/83+‰OR.L†#'TS0X',D0ŠLEFTHALFTRANSLATION‰5/83‰MOVE.L„D0,(A3)TOOUTBUF•5/83/‰MOVE.L„#'NZVC',4(A3)‡RIGHTHALFTOOUTBUFŠ5/83‰BTST†#15,D1ŽTRACEBITON?‘5/83‰BNE.S…TBITYES-LEAVET‘5/83%‰MOVE.B„D2,(A3)NO-OVERLAYDOTŽ5/83&TBIT…BTST†#13,D1ŽSUPERVISORMODE?Ž5/83‰BNE.S…SBITYES-LEAVES‘5/83&‰MOVE.B„D2,1(A3)ŒNO-OVERLAYDOTŽ5/83/SBIT…LEA‡3(A3),A3ŒPOINTATXOF"TS0XNZVC"†5/83,‰MOVEQ…#4,D3LOOPCOUNT-1=BIT#TESTED„5/83'SRTRANS‚BTST†D3,D1TESTSTATUSBIT5/83‰BNE.S…BITONLEAVELETTER’5/83 ‰MOVE.B„D2,(A3)OVERLAYDOT“5/83(BITON„ADD.L…#1,A3STEPALONGOUTBUF5/83"‰DBRA†D3,SRTRANSŠTRANSLATESR’5/83)‰BSR.S…PCRELOŽREDISPLAYPCVIARREGSˆ5/83 ‰BSR‡MSG05PROM.09‚BRA‡PROMPTŽRETURN /PCRELOƒMOVEM.LƒD0/D1/A2/A5,-(A7)ƒSAVEREGS•5/83)‰MOVE.L„TVBUF(A4),A2ˆA(TASKBUFREGS)5/83+‰MOVE.L„BUFPC(A2),D0ˆFETCHABSOLUTEPC5/83‰BRA.S…PCR.00ŽCOMMONCODE“5/83@ADRELOƒMOVEM.LƒD0/D1/A2/A5,-(A7)ƒSAVEREGSƒD0=ABSOLUTEADDR‚5/83(PCR.00ƒLEA‡OFREGS-B(A6),A5…A(RREGS)–5/83!‰MOVE.L„#28,D1ŽOFFSETTO.R7‘5/83(PCR.01ƒCMP.L…32(A5,D1),D0ˆPC=MIN?”9/83‰BMI.S…PCR.03ŽNOœ5/83(‰SUB.L…0(A5,D1),D0‰GETOFFSETINR0Ž9/83'‰CMP.B…#10,TOKEN-B(A6)…MDCOMMAND?“5/83#‰BEQ.S…PCR.02ŽNOTAPCADDRESSŽ5/83*‰MOVE.L„PCPREFIX-B(A6),(A3)+ƒLABELPC“5/83PCR.02ƒMOVE.B„#'R',(A3)+¨5/83‰LSR.W…#2,D1RREGOFFSET/4‘5/83&‰OR.B†#'0',D1CONVERTTOASCIIR#‹5/83‰MOVE.B„D1,(A3)+ŒTOTEXT—5/83‰BSR‡MOVED0ŽOFFSETTOTEXT5/83(‰MOVE.W„#'+$',-12(A3)‡6BYTEOFFSET‘5/83'‰SUB.L…#2,A3CANCELPADOF2BYTES‰5/83‰BRA.S…PCR.EXITŒEXITš5/83(PCR.03ƒSUB.L…#4,D1NEXTRREGOFFSETŽ5/83‰BPL‡PCR.01ŽTRYIT˜5/834PCR.EXITMOVEM.Lƒ(A7)+,D0/D1/A2/A5ƒRESTOREREGS’5/83‰RTS‰PAGE8BRK†BNE.S…BRKNEW†IFPARMCNT>0THENNOTINDISPLAYMODE/‰TST.B…NO_FLG-B(A6)ˆMIGHTBEPARMLESSNOBRˆ1/82‰BNE.S…BRKNEWŽYES-ITIS!2‰MOVE.W„BUFBPCNT(A1),D4…HEREIFBREAKPOINTDISPLAY%‰BEQ.S…PROM.05NOBREAKPOINTSDEFINED(‰LEA‡BUFBPTBL(A1),A2…ADDRESSOFBPTABLE6BRKDISP‚BSR‡CLEANBLANKSTOOUTPUTLINE(A3=A(OUTBUF)))‰MOVE.L„#5,D3LIMIT5BPSOUTPUTPERLINE.BRKDNXT‚BSR‡MOVETCONVERTADDR&PUTINBUFFER(‰MOVE.B„#'~',-1(A3)‰TILDEPRECEDESCOUNT‰BSR‡MOVE2CONVERTCOUNT2‰LEA‡4(A2),A2ŒSKIPOVERBRSOURCE&EFFECTIVECOUNT‰SUB.W…#1,D4DIDONE(‰BEQ.S…BRKSHOWBRANCHIFDONE-PRINTLINE‰SUB.L…#1,D3COUNTIT$‰BNE‡BRKDNXTBRANCHIFROOMFORMORE#BRKSHOW‚BSR‡MSG05PRINTBREAKPOINTS‰TST.W…D4’SEEIFMORETODO!‰BNE‡BRKDISPBRANCHIFMORETODOPROM.05‚BRA‡PROMPTŽDONE  *BRKNEWƒTST.B…TVEXEC(A4)ŠTASKINEXECUTION?‰BEQ.S…ALLOWBPNO1‰BSR‡MSG27ŽBREAKPOINTSINSTALLED&LOCKEDMESSAGE‰BRA‡PROM.05RETURNTOPROMPT6ALLOWBP‚LEA‡PARM_BLK-B(A6),A5ƒPOINTA5ATPARMBLK‹3/82'‰MOVE.L„D0,D6MOVEPARMCNTSAFELYTOD6(‰TST.B…NO_FLG-B(A6)ˆNOBRSPECIFIED?1/82&‰BNE.S…BRKDELŽYES-DELETEBREAKPOINTS2BRNEWNXTMOVEM.Lƒ(A5)+,D1-D2‰GETBRADDR,COUNTPAIR3‰LEA‡BUFBPTBL(A1),A2…BEGINSEARCHWITH1STINTABLE0‰MOVE.W„BUFBPCNT(A1),D5…CURRENTBREAKPOINTCOUNT.‰BEQ.S…BRKSLOTNOPREVIOUSBREAKPOINTSDEFINED'‰CMP.W…#BPMAX,D5‹FULLBREAKPOINTTABLE?,‰BLT.S…BRKFINDNO-SEEIFITALREADYEXISTS0‰BSR‡MSG16YES-PRINTBREAKPOINTTABLEFULLMSG ‰BRA  ‡PROM.05*BRKFIND‚CMP.L…(A2),D1SEEIFALREADYTHERE%‰BEQ.S…BRKHAVEYES-MAYCHANGECOUNT;‰LEA‡LBPENTRY(A2),A2…BPENTRY=ADDR,COUNT,SOURCE=4+2+2+2‰SUB.W…#1,D5DECREMENTCOUNTER‰BNE.S…BRKFINDCONTINUESEARCH.BRKSLOT‚MOVE.L„D1,(A2)NEWBREAKPOINTTOTABLE‰ADD.W…#1,BUFBPCNT(A1)…COUNTIT.‰MOVE.L„D1,BRKPBUF-B(A6)„SEEIFADDRESSEXISTS"‰LEA‡6(A2),A3ŒA(BREAKPOINTSOURCE)$‰MOVE.L„A3,BRKGET-B(A6)…A(OFSOURCE)(‰MOVE.L„#2,BRKGET+4-B(A6)ƒLENGTHOFMOVE‰BSR‡GETSOURDOMOVELL•1/82"‰BEQ.S…BRKHAVEGOODNEWBREAKPOINT!‰CLR.L…(A2)REMOVEBADBREAKPOINT!‰SUB.W…#1,BUFBPCNT(A1)…UNCOUNTIT!‰BSR‡MSG18REPORTBADTARGETADDR.‰BRA.S…PROM.06SKIPANYREMAININGBRKPTSINPUT1BRKHAVE‚MOVE.W„D2,4(A2)ŒREPETITIONCOUNTTOTABLE"‰SUB.L…#2,D6EXHAUSTEDPARMCOUNT? ‰BGT‡BRNEWNXTŒHAVEMOREGODOIT(‰BRA.S…PROM.06PROCESSEDALLBREAKPOINTS BRKDELƒTST.W…D6’ANYPARMS?(‰BNE.S…BRKCLR1BRANCHIFWEHAVEAVALUE+‰BSR.S…CLRBPNO‚(PARMLESSNOBR=CLEARALL)%PROM.06‚BRA‡PROMPTŽRETURN-ALLCLEARED DCLRBP„MOVE.W„BUFBPCNT(A1),D5…breakpointsmustbeclearatthispoint#‰BEQ.S…CLRBP4ŽEQUALMEANSNOBPSET&‰LEA‡BUFBPTBL(A1),A2…A2GOESTOBRKBUF%CLRBP2ƒLEA‡6(A2),A3ŒA3GOESTOBRKSOR/‰BSR‡BPOUTDOMOVELLTORETURNSOURCETOTARGET$‰CLR.L…(A2)ERASEBREAKPOINTADDRESS‰CLR.W…(A3)ERASESOURCEENTRY7‰LEA‡LBPENTRY(A2),A2…STEPTONEXTBREAKPOINTENTRYƒ1/82$‰SUB.W…#1,D5REDUCEBREAKPOINTCOUNT&‰BNE.S…CLRBP2ŽLOOPUNTILALLARECLEAR‰CLR.W…BUFBPCNT(A1)ˆCLEARCOUNTCLRBP4ƒRTS›RETURN 7BRKCLR1‚MOVE.W„BUFBPCNT(A1),D5…COUNTOFEXISTINGBRKPTS‰BEQ‡PROM.06BRANCHIFNONESET3‰LEA‡BUFBPTBL(A1),A2…BEGINSEARCHWITH1STINTABLE7‰MOVEM.Lƒ(A5)+,D1-D2‰ADDRESS&COUNT(ignored)PARMPAIR1BRKLOOK‚CMP.L…(A2),D1FINDITINBREAKPOINTTABLE‰BEQ.S…BRKSAMEFOUNDIT2‰LEA‡LBPENTRY(A2),A2…STEPTONEXTENTRY(10BYTES)‰SUB.W…#1,D5DECREMENTCOUNTER‰BNE.S…BRKLOOKLOOKSOMEMORE6‰MOVE.B„#30,ERR_NMBR-B(A6)‚NONEXISTENTBRKPTTODELETE‰BRA‡WHATDIDN'TFINDIT9BRKSAME‚MOVE.W„BUFBPCNT(A1),D5…CURRENTACTIVEBRKPTCOUNT ‰SUB.W…#1,D5-‰MULS†#LBPENTRY,D5ˆOFFSETOFLASTBRKPTENTRY‰LEA‡BUFBPTBL(A1),A3‰ADD.W…D5,A3A(LASTBRKPTADDR)?‰MOVE.L„(A3),(A2)+„MOVEITTOOVERLAYTHEBRKPTWEARECLEARING&‰CLR.L…(A3)+CLEAROLDLASTBRKPTADDR4‰MOVE.L„(A3),(A2)+ŠMOVECOUNTANDSOURCEFIELDSALSO*‰CLR.L…(A3)+CLEAROLDLASTCOUNT&SOURCE&‰MOVE.W„(A3),(A2)‹MOVEEFFECTIVECOUNT!‰CLR.W…(A3)CLEAREFFECTIVECOUNT!‰SUB.W…#1,BUFBPCNT(A1)…UNCOUNTIT‰SUB.W…#2,D6REMAININGPARMCNT‰BLE‡PROM.06ISEXHAUSTED#‰BRA‡BRKCLR1CONTINUEPARSINGPARMSI*========================================================================;DMEM…MOVE.L„A7,STACKBRK-B(A6)ƒSAVESTACKPOINTERFORBREAKS(‰BSET†#SETBRK,BREAK-B(A6)TAKEIOBREAKS‰MOVE.L„D0,A5SAVEPARMCNT‰SUB.L…#2,D0PARMCOUNT>2?"‰BEQ.S…NOTDINO,NOTYPEORLENGTH'‰CMP.B…#10,D4ŽYES,TYPE=DI(IFANY)?‰BNE.S…NOTDINO$‰BSR‡MDDIYES,DISPLAYLINES ‰BRA‡PROM.07,NOTDI„MOVE.L„D1,BRKPBUF-B(A6)„TARGETADDRESS‰AND.L…#1,D1SAVEODDADDRFLAG‰LEA‡OUTBUF-B(A6),A0£3/82'‰ADD.L…A0,D1SAMEPARITYADDRESSES‰1/82#‰MOVE.L„D1,BRKGET-B(A6)…A(DMBUFFER)/DMLTH„ADD.L…#15,D2ŽROUNDUPTO16BYTEMULTIPLE%‰ASR.L…#4,D2NUMBEROF16BYTEBLOCKS+‰MOVE.L„#16,BRKGET+4-B(A6)‚MOVELENGTHPARM DMFETCH‚EQU‡*‰BSR‡GETSOURDOMOVELL•1/82‰BNE‡ERLLERRORHANDLER0‰MOVE.L„BRKPBUF-B(A6),D0„SAVESTARTADDRESSŒ3/82+‰LEA‡DMOUTA-B(A6),A3…BUFFERTOADDRESS3/824‰MOVE.L„SPACES-B(A6),8(A3)‚MAYNOTBENECESSARYŠ3/82,‰BSR‡ADRELOŽDISPLAYRREGADDRESSIFANYƒ3/82*‰BPL.S…DMRELADDRESSISRREGRELATIVE†3/82'‰BSR‡MOVED0ŽDISPLAYADDRESSASABSOLUTE5DMREL„LEA‡DMOUTA+60-B(A6),A0‚A(ASCIITEXTFIELD)‹3/82.‰MOVE.W„SPACES-B(A6),(A0)+‚SPACESBEFOREASCII.‰MOVE.L„BRKGET-B(A6),A2…SOURCETOBECONVERTED‰MOVE.W„#15,D4ŽCONVERT16BYTES!DMBYTEƒMOVE.B„(A2)+,D0ŒGETABYTE‰CMP.B…#$20,D0‰BLT.S…DMDOTBRANCHIF$00-$1F‰CMP.B…#$7E,D0‰BGT.S…DMDOTBRANCHIF$7F-$FF ‰MOVE.B„D0,(A0)+ŒAS-ISTOOUTPUT‰BRA.S…DMHEXGODOHEX(  DMDOT„MOVE.B„#'.',(A0)+ŠUNPRINTABLEBYTE"DMHEX„BSR‡CONVBYTETOASCII--HHLL‰CMP.W…#7,D4ATMIDDLEOFHEX?‰BNE.S…DMMIDBRANCHIFNO+‰MOVE.B„SPACES-B(A6),(A3)+‚EXTRASPACE“3/82DMMID„ROR.W…#8,D0LLHH‰MOVE.B„D0,(A3)+ŒHH‰LSR.W…#8,D000LL‰MOVE.B„D0,(A3)+ŒLL%‰MOVE.B„SPACES-B(A6),(A3)+‚BLANK™3/82(‰DBRA†D4,DMBYTE‹LOOPTOCONVERT16BYTES0*‚HEREISWHERELENGTH,TYPEORDEVICEARGSAPPLY‰BSR‡MSG30PRINTDMOUTABUFFER.‰ADD.L…#16,BRKPBUF-B(A6)ƒNEXTADDRESSTOPRINT‰SUB.L…#1,D2MOREBLOCKSTODO?‰BNE‡DMFETCHBRANCHIFYES+PROM.07‚BRA‡PROMPTŽBACKFORANOTHERCOMMANDM*----------------------------------------------------------------------------1DMEM.REGLEA‡OUTSTAT-B(A6),A3„12BYTEBUFFER3/82‰LEA‡INP_BUF-B(A6),A5¢3/82"‰ADD.L…D2,A5A(REGISTERID)ININQ‰MOVE.B„(A5)+,(A3)+‰REGISTERID‰MOVE.B„(A5)+,(A3)+‰MOVE.W„#'=',(A3)+7‰MOVE.L„SPACES-B(A6),4(A3)‚BLANKINCASESHORTREG‡3/82&‰LEA‡MOVET(PC),A5ˆASSUMELONGREG1/82-‰CMP.W…#24,D1ŽREGCODE24->31AREOFREGS„2/823‰BGE.S…DM.OFUSEOFREGSRATHERTHANA1ASBASE2/82)‰MOVE.L„A1,A2BASEADDROFREGSTHISTASK+DM.COMƒLSL.L…#2,D1PROBABLEOFFSETTHISREG#‰ADD.L…D1,A2A(REGTOBEDISPLAYED)!‰CMP.W…#BUFMASK+2,D1‡XMREGISTER?‰BLT.S…DM.SRNO,BUTMAYBESR ‰BEQ.S…DM.XMYES-ADJUSTOFFSET$‰CMP.W…#BUFDO-2,D1‰OPREGISTER?’2/82‰BGT.S…DM.LONGNO"‰ADD.W…#2,A2OFFSETIS$4ENOT$4C.DM.SHORTLEA‡MOVE2(PC),A5ˆDISPLAY2BYTES1/820DM.LONG‚JSR‡(A5)CONVERTREGTOASCIIINOUTSTAT‰BSR‡MSG04DISPLAYREGISTER ‰BRA‡PROM.07+DM.SR„CMP.W…#BUFSR,D1‹STATUSREGISTER?Ž2/82‰BNE‡DM.LONGNO‰BRA‡DM.SHORTŒYES'DM.XM„SUB.W…#2,A2OFFSETIS$46NOT$48 ‰BRA‡DM.LONG8DM.OF„LEA‡OFREGS-B(A6),A2…BASEREGOFREGS.R0->.R7…3/82%‰SUB.W…#24,D1ŽCALCOFFSETINTOOFREGS‰LSL.L…#2,D1­5/83‰ADD.L…D1,A2­5/83‰JSR‡(A5)MINIMUMRREG’5/83‰BSR‡MSG04­5/83/‰LEA‡OUTSTAT+4-B(A6),A3‚REUSEFORMAXRREGŒ5/83‰ADD.L…#28,A2ŽA(MAXRREG)“5/83'‰BRA‡DM.LONGBACKFORMAXIMUMRREG‰5/83G*======================================================================2SMEM…LEA‡SYM_BUF-B(A6),A3„A(FromADDR)‚VALUESŠ3/82‰BSR‡MOV2TASKŒPERFORMMOVELL‰BRA.S…PROM.08RETURN4SMEM.REGCMP.W…#24,D1ŽCHECKREGCODEFOROFREGSTYPE‰BLT.S…REG.REGNOTANOFREG0‰LEA‡OFREGS-B(A6),A1…BASEREGINSTEADOFTASKBUF*‰SUB.W…#24,D1ŽREDUCEOFFSETPRIORTOSHIFT)‰LSL.W…#2,D1YES-GETOFFSETOFMIN‡5/835‰CMP.B…#2,PM_COUNT-B(A6)ƒBOTHMINANDMAXGIVEN?‡5/83$‰BEQ.S…REG.OFŽNO-SETONLYMIN5/83‰CMP.L…D2,D3MIN'PROMPTCE‚EQU„*-1ŠDS.Wƒ0ŠXDEFƒREENTERS,REENTERE8REENTERS‚DC.Bƒ$D,$A,'SYSA:REENTEROUTPUTDEVICENAME>'REENTERE‚EQU„*-1ŠDS.Wƒ0ŠXDEFƒOUTERRS,OUTERRD0,OUTERRE;OUTERRSƒDC.Bƒ'SYSA:ERRORWRITINGTOOUTPUTDEVICE-D0='OUTERRD0‚DC.Bƒ'00000000'ŠDC.Bƒ'RETRY?(Y/N)>'OUTERREƒEQU„*-1ŠDS.Wƒ0 BRKRCV„DC.Bƒ'SYSA:BREAKRVCD!!'BRKRCVEƒEQU„*-1ŠDS.Wƒ0ŠXDEFƒTSKNFND,TSKNFNDE#TSKNFNDƒDC.Bƒ'SYSA:TASKNOTFOUND'TSKNFNDE‚EQU„*-1ŠPAGE* *…MESSAGESSENTTOOUTPUTDEVICE*)ŠXDEFƒPAGSLEWS,PDATE,PTIME,PTASK,PAGSLEWEPAGSLEWS‚DC.Wƒ$200C%ŠDC.Bƒ'SYSTEM…ANALYSIS‚'ŠDC.Bƒ'DATE:'PDATE… DC.Bƒ'XX/XX/XXƒ'ŠDC.Bƒ'TIME:'PTIME…DC.Bƒ'XX:XX:XX'PTASK…DC.Bƒ'„'ŠENDLINEPAGSLEWE‚EQU„*-1ŠDS…0BLNKLINS‚DC.Bƒ'',CRBLNKLINE‚EQU„*-1ŠPAGE**ƒOPERATORINPUTCOMMANDS*ŠXDEFƒCMDTBL,CMDTBLE CMDTBL„EQU„* ŠXREFƒPADMPŠDC.Lƒ'ADRD',PADMP-CMDTBL ŠXREFƒPCCBSŠDC.Lƒ'CCBS',PCCBS-CMDTBL ŠXREFƒPDELAYŠDC.Lƒ'DELA',PDELAY-CMDTBL ŠXREFƒPFREEŠDC.Lƒ'FREE',PFREE-CMDTBL ŠXREFƒPFREQŠDC.Lƒ'FREQ',PFREQ-CMDTBL ŠXREFƒPGSTŠDC.Lƒ'GST',PGST-CMDTBL ŠXREFƒPHELPÒZÛ2ŠDC.Lƒ'HELP',PHELP-CMDTBL ŠXREFƒPLCTBLŠDC.Lƒ'LCT',PLCTBL-CMDTBL ŠXREFƒPMAPŠDC.Lƒ'MAP',PMAP-CMDTBL ŠXREFƒPMDMPŠDC.Lƒ'MD‚',PMDMP-CMDTBLŠDC.Lƒ'MEM',PMAP-CMDTBL ŠXREFƒPNATBLŠDC.Lƒ'NAT',PNATBL-CMDTBL ŠXREFƒPNNTBLŠDC.Lƒ'NNT',PNNTBL-CMDTBLŠDC.Lƒ'OFFS',OFFSET-CMDTBLŠDC.Lƒ'OUTP',CHGOUT-CMDTBLŠDC.Lƒ'PAT',PDELAY-CMDTBL ŠXREFƒPPCBTBLŠDC.Lƒ'PCB',PPCBTBL-CMDTBLŠDC.Lƒ'QUIT',QUIT-CMDTBL ŠXREFƒPRECVQŠDC.Lƒ'RCVQ',PRECVQ-CMDTBL ŠXREFƒPREADYŠDC.Lƒ'READ',PREADY-CMDTBL ŠXREFƒPSCBTBLŠDC.Lƒ'SCB',PSCBTBL-CMDTBL ŠXREFƒPSTCBŠDC.Lƒ'STCB',PSTCB-CMDTBL ŠXREFƒPSYSPŠDC.Lƒ'SYSP',PSYSP-CMDTBL ŠXREFƒALLTBLŠDC.Lƒ'TABL',ALLTBL-CMDTBLŠXREFƒPONETASKŠDC.Lƒ'TASK',PONETASK-CMDTBL ŠXREFƒPTCBSŠDC.Lƒ'TCBS',PTCBS-CMDTBL ŠXREFƒPTRACEŠDC.Lƒ'TRAC',PTRACE-CMDTBL ŠXREFƒPTIATŠDC.Lƒ'TRAP',PTIAT-CMDTBL ŠXREFƒPUDRTBLŠDC.Lƒ'UDR',PUDRTBL-CMDTBL ŠXREFƒPUSRQŠDC.Lƒ'USRQ',PUSRQ-CMDTBL ŠXREFƒPUSTŠDC.Lƒ'UST',PUST-CMDTBL ŠXREFƒPUTCBŠDC.Lƒ'UTCB',PUTCB-CMDTBL ŠXREFƒPTMITQŠDC.Lƒ'XMTQ',PTMITQ-CMDTBL CMDTBLEƒEQU„* ééé=/*=/*†SYSANAL.AF=/**=/* Chain file to assemble SYSANAL utility=/*:=/* If no output argument is specified for the listing the)=/* chain file will default to SYSANAL.LS=/*=/IFC \1ƒ=ARGSYSANAL.LS=/ENDIF=/*+=ASM SYSANAL.SA,SYSANAL.RO,TEMP1.LS;SRZ=100=/*{ Included files are:=/*ƒANALMACR.AI=/*ƒ9995.&.TR1.EQ=/*ƒ9995.&.IOE.EQ=/*ƒANALDATA.AI=/*ƒSYSAMSG.AI=/*ƒANALMAIN.AI=/*ƒSYSARCMD.AI =/*ƒANALIO.AI=/*ƒANALUTIL.AI=/*}=/*ƒ=COPYTEMP1.LS,TEMP2.LS;Y=/*,=ASM SYSARESP.SA,SYSARESP.RO,TEMP1.LS;RZ=100=/*{ Included files are:=/*ƒANALMACR.AI=/*ƒ9995.&.TR1.EQ=/*ƒ9995.&.IOE.EQ=/*ƒSYSAMOVM.AI=/*ƒANALPDMP.AI=/*}=/*ƒ=COPYTEMP1.LS,TEMP2.LS;A=/*,=ASM ANALTABL.SA,ANALTABL.RO,TEMP1.LS;RZ=230=/*{ Included files are:=/*ƒANALMACR.AI=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TST.EQ=/*ƒ9995.&.GST.EQ=/*ƒ9995.&.BAB.EQ=/*ƒ9995.&.PAT.EQ=/*ƒ9995.&.TIOT.EQ=/*ƒ9995.&.UST.EQ=/*ƒ9995.&.UDR.EQ=/*ƒ9995.&.MAP.EQ=/*ƒ9995.&.ASQ.EQ=/*ƒ9995.NTS.NNT.EQ=/*ƒ9995.NTS.NAT.EQ=/*ƒ9995.NTS.LCT.EQ=/*ƒ9995.SDLCPRI.TEMPLTS.EQ=/*ƒANALSYSP.AI=/*ƒANALTRAP.AI=/*ƒANALTASK.AI=/*ƒANALGST.AI=/*ƒANALUST.AI=/*ƒANALCCBS.AI=/*ƒANALMAP.AI=/*ƒANALNET.AI=/*}=/*ƒ=COPYTEMP1.LS,TEMP 2.LS;A=/*,=ASM DUMPTRAC.SA,DUMPTRAC.RO,TEMP1.LS;RZ=100=/*{ Included files are:=/*ƒANALMACR.AI=/*ƒ9995.&.TRACE.EQ=/*}=/*ƒ=COPYTEMP1.LS,TEMP2.LS;Aƒ=COPYTEMP2.LS,\1;Yƒ=DELTEMP1.LSƒ=DELTEMP2.LS=/*=ENDééãO=/*=/*†SYSANAL.LF=/*(=/* Link chain file to create SYSANAL.LO=/*:=/* If no output argument is specified for the listing the)=/* chain file will default to SYSANAL.LL=/*G=/*NotethatSYSPARisincludedinthelink.‚SYSANALhasbeencodedinL=/*ƒsuchawaythatwecanincludeSYSPARfromanysystem(VM02,EXORmacsorK=/*ƒother)anditwillnotaffectthewaySYSANALexecutes.‚TheloadmoduleG=/*ƒhowever,willdifferifdifferentversionsofSYSPARarelinkedin.F=/*ƒSYSANALdeterminesthememoryaddressofSYSPARparametersfortheG=/*ƒfileweareanalyzingfromthecommandline'S='option.‚Ifno'S='G=/*ƒoptionisspecified,SYSANALassumesadefaultlocationof$900forH=/*ƒSYSPAR.‚ThisisthenormallocationofSYSPARonanEXORmacssystem.=/*=/IFC \1ƒ=ARGSYSANAL.LL=/ENDIF=/*=LINK ,SYSANAL.LO,\1;HAMIXS TASK SYSA ATTRIBUTES PSEG SEG0:0,8,14 $0000INPUT 9999.C4O9.SYSPAR.RO IN„SYSANAL.ROIN„SYSARESP.ROIN„ANALTABL.ROINPUT DUMPTRAC.ROLIB 0.&.UTILIB.ROEND=/*=ENDéééì"(SYSANALƒIDNT„4,2„ON-LINESYSTEMANALYSIS*D**********************************************************************’MODIFICATIONHISTORY**ˆREVISION0215854;*‰Userdefineddirectives,processedbyANALNET,werebeing<*‰confusedbytheusers,inthattheoptionbytesweresplit=*‰betweenaheadingOPTandonecalledEXIT.‚Sincebothbytes;*‰werereallyoptionbytes,thetwowerecombinedunderone*‰headingcallOPTIONS.*;*‰TheVM04hasitsSystemParametersoutsidetherangethat=*‰SYSANALlooksat($500-2200).‚Also,thereisaspotinthis9*‰rangethatisnotavailabletoread($1FF0-1FFF),which9*‰causedanerrorduringreading.‚Tocircumventthis,the9*‰errorhandlinglocationwaschangedsoastoignorethe>*‰errorco nditionandcontinuetosearchintheexpandedrange*‰($500-2400)forSYSPAR.*ééééõþ,*ˆREVISION02018547*‰SPR906indicatedthattheuserwantstoseeallfree:*‰partitionswhenusingtheMAPsubcommand.‚Therefore,the<*‰ANALMAP.AIwaschangedtolookforeithertheuser-entered;*‰partitionnumberoranindicator(-1)thatallpartitions*‰aredesired.**ˆREVISION0129854:*‰Thememorymapwasnotcorrectlyinterpreted(SPR1166).<*‰AfterV4.2theorganizationofmemorychanged,butSYSANAL=*‰wasnot‚updated.‚ANALMAP.AIwaschangedtousethefreemap:*‰headerpointer,MAPFMLP,tofindtheendofapartition.*7*‰Whendumpingfromlocationtolocation,usingAD,the8*‰programwouldnotdumptheendinglocation(SPR1027).7*‰ANALPDMP.AIwaschangedtoadd1tothedifferencein *‰locations.**ˆREVISION01258549*‰SeveralproblemswerefoundduringthetestingofV4.4.6*‰Mostofthesedealtwiththefactthattheformatof&*‰theTCBandASQtableswerechanged.D********************************************************************‰PAGE**‰INCLUDEANALMACR.AI*‰INCLUDE9995.&.TR1.EQ*‰INCLUDE9995.&.IOE.EQ*‰INCLUDEANALDATA.AI*‰INCLUDESYSAMSG.AI*‰INCLUDEANALMAIN.AI*‰INCLUDESYSARCMD.AI*‰INCLUDEANALIO.AI*‰INCLUDEANALUTIL.AIŠINCLUDEANALMACR.AIŠINCLUDE9995.&.TR1.EQŠINCLUDE9995.&.IOE.EQŠINCLUDEANALDATA.AIŠINCLUDESYSAMSG.AIŠINCLUDEANALMAIN.AIŠINCLUDESYSARCMD.AIŠINCLUDEANALIO.AIŠINCLUDEANALUTIL.AI ŠEND„BEGINéé   ,ŠTTL„SYSARCMD.AIˆ-Systemanalysis-SYSANALŠPAGE9**********************************************************INCLUDEFILE:SYSARCMD.AI*9***********************************************************ŠREADCOMMANDLINE*ŠREDIRECTOUTPUTIFREQUESTED* ŠXREF.SPARSE-COMMANDL‚LEA„CLINE(PC),A0‡COMMANDLINEBUFFERŠBSR„PARSEŽPARSECOMMANDLINEŠMOVEM.LA1-A2,PARSAREG-MBD(A6)ŠBTSTƒ#14,D0Anyoutputfield?ŠBNE.S‚COMDL16ŒBranchifno)ŠBSR.S‚NEWOUTGOTOOUTPUTCHANGEROUT INE** Analyze options field COMDL16ƒEQU„*0ŠMOVE.LOPTSRT-MBD(A6),D0‚Startofoptionsfield"ŠBEQ.S‚CMDL99Branchifnooptions#ŠMOVE.LD0,A6ŽForOPTIONsubroutine ŠXREFƒOPTION ŠBSR„OPTIONŠLEA„BEGDATA(PC),A6‰RestoreA6,ŠCMP.B‚#$40,D0ŒArewedonewiththeoptions?ŠBEQ.S‚CMDL99Branchifyes!ŠBTSTƒ#7,D0ŽAnyerrorinoptions?ŠBEQ.S‚OPOK1ŽBranchifno0OPTERR„MOVE.L#EM_NVO,D0‰Complainonbadoptions ŠBSR„ERRMSGŠBRA„QUITQuitonbadoptions*&OPOK1…CMP.B‚#'S',D1ŒIstheoption'S'? ŠBNE„OPTERRBranchifno-errorŠMOVE.LD3,SYSPAROF-MBD(A6) ŠBLE„OPTERR* CMDL99„RTSééé*,ŠTTL„SYSARESP.SAˆ-Systemanalysis-SYSANALŠPAGE*SYSARESP‚IDNTƒ4,2RESPONDTOINPUTREQUEST ŠXREFƒMBD*‰INCLUDEANALMACR.AI*‰INCLUDE9995.&.TR1.EQ*‰INCLUDE9995.&.IOE.EQ*‰INCLUDESYSAMOVM.AI*‰INCLUDEANALPDMP.AIŠNOLISTŠINCLUDEANALMACR.AIŠINCLUDE9995.&.TR1.EQŠINCLUDE9995.&.IOE.EQŠLISTŠINCLUDESYSAMOVM.AIŠINCLUDEANALPDMP.AI,ŠTTL„SYSARESP.SAˆ-Systemanalysis-SYSANALŠPAGE ŠSECTION0**$*†DATASECTION--RESPONDTOCOMMAND*SAVTNAMƒDC.Lƒ0’SAVETASKNAMESAVTSESƒDC.Lƒ0’SAVESESSIONSAVENUMƒDC.Lƒ0’SAVEPARTITION#* ŠOFFSET0TASKTNAM‚DS.Lƒ1TASKTSES‚DS.Lƒ1TASKTADR‚DS.Lƒ1TASKTESZ‚EQU„*-TASKTNAMŠPAGE ŠSECTION8*!ŠXREF.SBLDTASKT,TASKTCNT,TASKTBLŠXREF.SCONVAORHŠXREF.SCMDPRO,NEWPAGEŠXREF.STSKNFND,TSKNFNDE*ŠXDEFƒPONETASK PONETASK‚MOVE.LA0,-(A7)‹SAVEA0ŠBSR„BLDTASKT‹BUILDTASKTABLEŠMOVE.L(A7)+,A0‹RESTOREA0*!*…GETTASKNAMEFROMCOMMANDLINE*ŠLEA„SAVTNAM(PC),A1ŠBSR„CONVAORH‹CONVERTTASKNAME)ŠBMI.S‚ONETK6BRANCHIFILLEGALCHARACTERŠLEA„SAVTSES(PC),A1ŠBSR„CONVAORH‹CONVERTSESSION)ŠBMI.S‚ONETK6BRANCHIFILLEGALCHARACTER**…FINDTASKINTABLE*ŠLEA„TASKTBL(PC),A5ŠLEA„SAVTNAM(PC),A1)ŠMOVEM.L(A1),D0-D1ˆTASKNAMEANDSESSION2ŠMOVE.WTASKTCNT(PC),D4„NUMBEROFENTRIESINTABLE ŠBRA.S‚ONETK55ONETK2„CMP.L‚TASKTNAM(A5),D0„ISTHISTHEONEWEWANT?ŠBNE.S‚ONETK4BRANCHIFNOŠTST.L‚D1‘WASSESSIONGIVEN)ŠBEQ.S‚ONETK10ŒBRANCHIFNO-FOUNDENTRY*ŠCMP.L‚TASKTSES(A5),D1„DOESSESSIONMATCH?)ŠBEQ.S‚ONETK10ŒBRANCHIFGOODENTRYFOUND%ONETK4„LEA„TASKTESZ(A5),A5„NEXTENTRYONETK5„DBRAƒD4,ONETK2=ONETK6„MESGƒTSKNFND(PC),TSKNFNDE(PC)TELLUSERTASKNOTFOUND ŠBRA„CMDPRO1ONETK10ƒMOVE.LTASKTADR(A5),A5„GETADDRESSOFTCBŠXREF.SONETASKŠBSR„ONETASKŒGOPRINTTASKINFO ŠBRA„CMDPRO* ŠXDEFƒPTCBSŠXREF.STCBCHNPTCBS…BSR„NEWPAGEŠBSR„TCBCHNPRINTTCBCHAIN ŠBRA„CMDPRO* ŠXDEFƒPSTCBŠXREF.SSTCBCHNPSTCB…BSR„NEWPAGE#ŠBSR„STCBCHNŒPRINTSYSTEMTCBCHAINVo I  ŠBRA„CMDPRO* ŠXDEFƒPUTCBŠXREF.SUTCBCHNPUTCB…BSR„NEWPAGE!ŠBSR„UTCBCHNŒPRINTUSERTCBCHAIN ŠBRA„CMDPRO* ŠXDEFƒPTRACEŠXREF.STRACSUBPTRACE„BSR„NEWPAGEŠBSR„TRACSUBŒPRINTTRACETABLE ŠBRA„CMDPRO* ŠXDEFƒPGST ŠXREF.SGSTBLPGST†BSR„NEWPAGE%ŠBSR„GSTBLŽPRINTGLOBALSEGMENTTABLE ŠBRA„CMDPRO* ŠXDEFƒPNNTBL ŠXREF.SNNTBLPNNTBL„BSR„NEWPAGEŠBSR„READSPREADSYSTEMPARMS#ŠBSR„NNTBLŽPRINTNETWORKNAMETABLE ŠBRA„CMDPRO* ŠXDEFƒPNATBL ŠXREF.SNATBLPNATBL„BSR„NEWPAGEŠBSR„READSPSYSTEMPARAMETERS&ŠBSR„NATBLŽPRINTNETWORKADDRESSTABLE ŠBRA„CMDPRO* ŠXDEFƒPLCTBL ŠXREF.SLCTBLPLCTBL„BSR„NEWPAGE ŠBSR„READSP&ŠBSR„LCTBLŽPRINTLOGICALCONNECTTABLE ŠBRA„CMDPRO* ŠXDEFƒPPCBTBLŠXREF.SPCBTBLPPCBTBLƒBSR„NEWPAGE$ŠBSR„READSPV2‹READSYSTEMPARAMETERS'ŠBSR„PCBTBLPRINTPRIMARYCONTROLBLOCK ŠBRA„CMDPRO* ŠXDEFƒPSCBTBLŠXREF.SSCBTBLPSCBTBLƒBSR„NEWPAGE$ŠBSR„READSPV2‹READSYSTEMPARAMETERS)ŠBSR„SCBTBLPRINTSECONDARYCONTROLBLOCK ŠBRA„CMDPRO* ŠXDEFƒPUDRTBLŠXREF.SUDRTBLPUDRTBLƒBSR„NEWPAGE"ŠBSR„READSPREADSYSTEMPARAMETERS&ŠBSR„UDRTBLPRINTUSERDIRECTIVETABLE ŠBRA„CMDPRO* ŠXDEFƒPHELP ŠXREFƒHELPPHELP…BSR„NEWPAGEŠBSR„HELPPRINTCOMMANDS ŠBRA„CMDPRO* ŠXDEFƒPFREQ ŠXREF.SFREQPFREQ…BSR„NEWPAGE ŠBSR„READSPV2ŠBSR„FREQPRINTSDLCFREEQUEUE ŠBRA„CMDPRO* ŠXDEFƒPUSRQ ŠXREF.SUSRQPUSRQ…BSR„NEWPAGE ŠBSR„READSPV2ŠBSR„USRQREADSDLCUSERQUEUE ŠBRA„CMDPRO* ŠXDEFƒPRECVQ ŠXREF.SRECVQPRECVQ„BSR„NEWPAGE ŠBSR„READSPV2#ŠBSR„RECVQŽPRINTSDLCRECEIVEQUEUE ŠBRA„CMDPRO* ŠXDEFƒPTMITQ ŠXREF.STMITQPTMITQ„BSR„NEWPAGE ŠBSR„READSPV2%ŠBSR„TMITQŽPRINTSDLSTRANSMITQUEUES ŠBRA„CMDPRO* ŠXDEFƒPUST ŠXREF.SUSTBLPUST†BSR„NEWPAGE%ŠBSR„USTBLŽPRINTUSERSEMAPHORETABLE ŠBRA„CMDPRO* ŠXDEFƒPSYSPŠXREF.SSYSPARMPSYSP…BSR„NEWPAGE$ŠBSR„SYSPARMŒPRINTSYSTEMPARAMETERS ŠBRA„CMDPRO* ŠXDEFƒPCCBSŠXREF.SCRCCBS-PCCBS…BSR„CRCCBSPRINTCHANNELCONTROLBLOCKS ŠBRA„CMDPRO* ŠXDEFƒPTIATŠXREF.SCTRAPASGPTIAT…BSR„NEWPAGE*ŠBSR„CTRAPASG‹PRINTTRAPASSIGNMENTTABLES ŠBRA„CMDPRO* ŠXDEFƒPMAP ŠXREF.SPRMAPPMAP†BSR„NEWPAGEŠBSR„PRMAPŽPRINTMEMORYMAP ŠBRA„CMDPRO* ŠXDEFƒPFREEŠXREF.SPRFREE-PFREE…LEA„SAVENUM(PC),A1‰PLACETOSAVEPART#ŠBSR„CONVAORH‹GETNUMBERŠCLR.L‚D7‘DEFAULT#IS0 ŠCLR.L‚D0ŠLEA„SAVENUM(PC),A1ŠMOVE.B(A1),D0ŠCMP.B‚#$30,D0ŒISCHAR<0?ŠBLT.S‚PFREEGIFYES-USE0ŠCMP.B‚#$39,D0ŒISCHAR>9?ŠBGT.S‚PFREEGIFYES-USE0ŠAND.B‚#$0F,D0ŒSAVENUMBERONLYŠMOVE.LD0,D7ŽSAVECHARŠLEA„SAVENUM(PC),A1ŠMOVE.B1(A1),D0ŠCMP.B‚#$30,D0ŒISCHAR<0?ŠBLT.S‚PFREEGIFYES-USE0ŠCMP.B‚#$39,D0ŒISCHAR>9?ŠBGT.S‚PFREEGIFYES-USE0ŠAND.B‚#$0F,D0ŒSAVENUMBERONLY ŠMULUƒ#10,D7 ŠADD.L‚D0,D7(PFREEG„BSR„PRFREEPRINTFREEMEMORYLIST ŠBRA„CMDPRO* ŠXDEFƒPREADYŠXREF.SREADYLPREADY„BSR„NEWPAGEŠBSR„READYLPRINTREADYLIST ŠBRA„CMDPRO* ŠXDEFƒPDELAYŠXREF.SDELAYLPDELAY„BSR„NEWPAGEŠBSR„DELAYLPRINTDELAYLIST ŠBRA„CMDPROŠPAGE1**************************************************¯**ALLTBL-PRINTEXECTABLES”**¯*1************************************************** ŠXDEFƒALLTBLALLTBL„BSR„NEWPAGEŠBSR„SYSPARMŒPRINTSYSPARTABLE*†BSRƒCTST10‡PRINTSTACK*ŠBSR„CTRAPASG‹PRINTTRAPASSIGNMENTTABLESŠBSR„PRMAPŽPRINTMEMORYMAPŠBSR„TCBCHNPRINTTCBCHAIN"ŠBSR„READYLPRINTREADYLISTCHAIN"ŠBSR„DELAYLPRINTDELAYLISTCHAINŠBSR„USTBLŽPRINTUSTŠBSR„GSTBLŽPRINTGSTŠBSR„CRCCBSPRINTCCBSŠBSR„TRACSUBŒPRINTTRACETABLE"ŠBRA„CMDPRORETURNTOCOMMANDLOOPŠENDé =/* =/*†SYSGEN.AF=/*)=/* Chain file to assemble SYSGEN utility=/*:=/* If no output argument is specified for the listing the(=/* chain file will default to SYSGEN.LS=/*=/IFC \1ƒ=ARGSYSGEN.LS=/ENDIF=/*"=ASM SYSGEN.SA,SYSGEN.RO,\1;RZ=160=/*{ Included files are:=/*ƒ9995.&.TR1.EQ=/*ƒ9995.&.FME.EQ=/*ƒ9995.&.IOE.EQ=/*ƒ9995.&.TCB.EQ=/*ƒ9995.&.TST.EQ=/*ƒ9995.&.CRASH.MC=/*}=/*=ENDéééééé(=/* =/*†SYSGEN.LF=/*'=/* Link chain file to create SYSGEN.LO=/*:=/* If no output argument is specified for the listing the(=/* chain file will default to SYSGEN.LL=/*=/IFC \1ƒ=ARGSYSGEN.LL=/ENDIF=/*=LINK ,SYSGEN.LO,\1;HAMIX ATTRIBUTES PSEG SEG0:0,14 $0INPUT SYSGEN.ROLIB 0.&.UTILIB.ROEND=/*=ENDééééé é1ŠPAGEŠNOLISTŠINCLUDE9995.&.TR1.EQŠINCLUDE9995.&.FME.EQŠINCLUDE9995.&.IOE.EQŠINCLUDE9995.&.TCB.EQŠINCLUDE9995.&.TST.EQŠINCLUDE9995.&.CRASH.MCŠLIST*‰INCLUDE9995.&.TR1.EQ*‰INCLUDE9995.&.FME.EQ*‰INCLUDE9995.&.IOE.EQ*‰INCLUDE9995.&.TCB.EQ*‰INCLUDE9995.&.TST.EQ*‰INCLUDE9995.&.CRASH.MC** Changes since 4.3 release:*?*‰1.Fixedbuginwhichthesysgenutilitywasnotinitializing@*thenumberofsegmentsusedfieldintheTST(fieldTSTCSEGS).B*‰2.Addednewautomaticparameters$SOPT,and$ROPTwhichreflect(*thesettingofthe'R'or'P'options.=*‰3.Modifiedequatetoallownestingof'INCLUDE'filesto3 *levels.E*‰4.Setthebit(10)inthetasksegmenttable(TST)whichindicates>*thatthisisphysicalrom.Necessaryincaseatasktriesto>*abortitselfandRMStriestogivebacktherommemorywhich?*RMSthinksisramunlessthisbitisset.IfRMSdoesn'tknow=*thatitisphysicalromthekillroutinewillbeinvokedby*RMS.B*‰5.ModifiedtoATTRIBandSTATEcommandscanonlyaffectonebit;*Previously,ATTRIB='SYST'wouldsetbothbits15and13?*intheattributeswordoftheTCB(systemtaskandcritical).=*Thenewschemeallows'SYST'toonlyaffectthesystemtask6*bit.‚WiththeATTRIBcommandyoucanspecifyseveral:*consecutivecommands,eachoneaffectingadifferentbit=*andsuccessiveATTRIBcommandsneednotdestroyinformation9*setbypreviousATTRIBcommands.‚WiththeSTATEcommand=*youcompletelywipeouttheeffectofanypreviouslyissued=*STATEcommands.‚Thestatecommandhastheeffectofturning>*oneonebitinthewordandturningoffalltheothersorof'*turningoffallthebitsintheword.*;*Threenewattributescommandswereadded.‚ATTRIB='CRIT':*willturnonthecriticalbit,‚ATTRIB='NOCR'willturn6*offthecriticalbit.‚Notethattohavethecritical<*bitbeeffectivethatthetaskmustbeasystemtask.‚This3:/C.K,S:[Dc@kbsJ{1ƒa‹X“[›Z£L«Y³]»JÃ@Ë0ÓCÛDã<ëFóCûDB <:A#>;*requirementisnotenforcedbySYSGEN.‚Inotherwordsyou<*areallowedtosetthecriticalbitwithoutbeingasystem;*task,itwillsimplyhavenoaffectwhenthesystemruns.=*ThelastnewATTRIBcommandis'RTIM'toindicaterealtime*task.*:*WhenanewTASKcommandisencountered,SYSGENnolonger@*carriestheoldattributesandstatebitsforward.‚Instead,it3*defaultstosystemtask,critical,onreadylist.*=*‰6.Modifiedequatetoallownestingof'INCLUDE'filesto4 *levels.*4*‰7.ModifiedtopushaVORintotheTCBstackarea.*MOVE.W#$0084,TCBVOR(A0)<*wasinsertedimmediatelyafterMOVE.LLIBENT(A4),TCBPC(A0)7*ThiswasrequiredtosupporttheRMS68Kmodifications"*thatweremadeforVERSAdos4.4.* *‡12208442*‘Allcodewasmodifiedwhereapplicabletoensure**‘positionindependanceandrelocatability *‡01048548*‘SPR#1127wasfixed;theminiTCBsnolongeroverwrite)*‘thememorytableinaROMbasedsystem.*=*‰8.‚AddedcodesothatSYSGENwouldcreateacrossreference9*symboltablefile.‚Thisisnowcreatedbyusingthe'C'6*option.‚Thefilewillcontaininformationabouteach9*sysgenparameter.‚Itwillcontainthesymbol,thevalue6*thefilesthatdefinedthesymbolandth efilesthat8*referencedthesymbol.‚SGSYMBLutilitywillneedtobe3*runafterSYSGENtocreatealistingfileofthis*information.01/10/85B******************************************************************* Changes since 4.2 release:*:*‰1.Fixedproblem(SPR786)whichwasincorrectlyparsing)*Žfilenameondirectinvocationoftask.9*Ž(Example:‚Thefollowinglinewasnotparsedcorrectly-*Ž=:101.NET.ASMTESTž)B*‰2.Enhancedsothatusercanspecifyconcatenatedfilesoninput2*Žfield.‚Example:‚=SYSGENSYSCMD1/SYSCMD2,,LIST.LSB*‰3.Fixedsothatstandardequatefile:9995.&.TST.EQcanbeused2*Žinsteadofthespecialfile:9995.SYSGEN.TST.EQ.@*ŽChangedtostandardequatefilenamesalloutofaccount#9995@*‰4.Removedcarriagereturnfromformattedoutputofrecordsto8*Žlistfile.‚Beforethiswasdone,editingthelistfile=*ŽoutputfromSYSGENwiththeCRTeditorcausedgarbledlines*Žtobedisplayed.?*‰5.Fixedsothatifweencounteralinewithinthescopeofa=*ŽconditionalthatindicatesweshouldNOTprocessthatline,5*Žwedonotperformsubstitutions.‚Priortothis,the/*Žfollowingsequencewaserroneouslyprocessed:*‘IFEQ1 *“DOG=2*‘ENDC*‘IFEQ2 *“CAT=\DOG*‘ENDC=*ŽSysgencomplainedthat\DOGwasundefinedwhenitshouldn't'*Žhaveprocessedthatstatementanyway.@*‰6.Fixedsothatanyrecordsencounteredinthesysgencommand:*Žfilewhichhavesubstitutionindicatedwiththelineare7*ŽdisplayedBEFOREthesubstitutiontakesplaceaswell *Žasafter.8*‰7.PutinINCLUDEfilecapabilitywithlinenumbering.4*‰8.Increasedmaximumliterallengthfrom10to30.2*‰9.Addedstringandliteralcomparisonfacility.@*ˆ10.MadeSYSGENmultipasssoyoucanuseasymbolbeforeit's *Ždefined.*ˆ11.AddedABORTcommand.@*ˆ12.FixbugwhenyourunSYSGENunderusernumber0withaUSE=*Žof9101andtheVERSADOS.SYfilegoesto0insteadof9101.>*ˆ13.Fixbugofnotdetectingsymboltableoverflowproperly.*K****************************************************************************‰Changessince4.0release:*B*‰1.SYSGENnolongerterminateswithanerrorstatuswhennoboot>*Žfileiscreated.‚Nobootfileisnotnecessarilyanerrorif:*ŽSYSGENisbeingusedsimplyforit'sSUBS,ASM,andLINK4*Žfacilitywithoutproducinganytasksorprocesses.B*‰2.CorrectproblemofSYSGENnotcorrectlyreflectingthenumber6*ŽoferrorsencounteredintheRDpseudoregisterwhen'*Žanderrorcauseabnormaltermination.=*‰3.Slightlymodifiedfinalmessages:'START-UPADDRESS'and)*Ž'TOTALNUMBEROFUSERDEFINEDSYMBOLS'.9*‰4.Putexpressionevaluationintoparameterdefinition.=*ŽParameterswithnumericvaluesarestoredasasingleASCII,*Žhexnumberintheshortestfieldpossible.?*‰5.Allowtemporarilydefinedusersymbolsbeginningwith'&'.D*‰6.WhenSUBSing,alwayscreatethe'X'fileunderthedefaultuser;*Žnumber.‚Notethatthisisnotnecessarilythesameasthe3*ŽusernumberfromwhichtherawSUBSfileisread.D*‰7.WhenSUBSing,alwayscreatethe'X'fileunderthedefaultuser>*Žvolumename.‚Notethatthisnameisnotnecessarilythesame:*ŽnameasthevolumefromwhichtherawSUBSfileisread.**=*‡***********************************************************$*‡*‹ENHANCEMENTSSINCE3.0RELEASE**‡*¹*0*‡*1.MISSINGENDCSTATEMENTERRORREPORTING.Ž**‡*¹*1*‡*2.ABORTANDDIAGNOSTICREGESTERSHAVEBEEN*-*‡*„ENTEREDINTOTHESYMBOLTABLE($RA,$RD).Ž**‡*¹*8*‡*3.ADDEDOPTIONT,WHICHALLOWSTHEUSERTODEFINE†*8*‡*„THESIZEOFHISUSERDEFINEDSYMBOLTABLE(DEFAULTƒ**‡*„IS170).­**‡*¹*/*‡*4.ADDEDPATCHESTOCODEFROM3.0RELEASE**‡*¹*5*‡*5.ADDEDCODETODISPLAY#OFSYMBOLSINTABLE.‰**‡*¹*6*‡*6.ADDEDCODETOKEEPMAPTABLEFROMOVERWRITINGˆ*4*‡*„FUNCTIONALPROGRAMCODE(NOTINOVERLAYAREA).‡*=*‡***********************************************************=*‡************************************************************ **SYSGEN BUILDS BOOT FILE**COMMAND LINE FORMAT:-*‚SYSGEN,/,*+*…-SOURCEFILECONTAININGCOMMANDS(*…-VOLUMEFORTEMP.OUTPUTFILE9*…-BOOTLOADFILE(DEFAULTSTOBOOT:0..VERSADOS.SY)7*…-OUTPUTLISTDEVICE(DEFAULTSTOLOGDEVICE) SYSGEN„IDNTƒ04,05ŽSYSGENCOMMAND:ŠXREFƒSBARG,OPTION,PARSE,EDITFILE,BDCONV,ODATCONV,TIMECONV ŠSECTION0B‰EQU„*’BASEOFSECTIONŠDC.Bƒ'0110854'‰VERSIONVMSG†DC.Bƒ'SYSGENVERSION‚'(VMSGV…DC.Bƒ'Š'‡HOLDSVERSIONFORDISPLAY*VTIME…DC.Bƒ'‚/‚/…:‚:‚'HOLDSDATEANDTIME VMSGE…EQU„*-1 DCNT†MACRO ŠSUB.W‚#1,\1ŠBNE„\2ŠENDM*C* PASS1 macro will perform a branch if we are not on the last pass.&*ƒWeareononeoftheinitialpasses.*+PASS1…MACRO•BypassbranchoninitialpassesŠMOVE.WPASS(PC),-(A7) ŠTST.W‚(A7)+ ŠBPL.\0\1ŠENDM*?* PASSL macro will perform a branch if we are on the last pass.*&PASSL…MACRO•BypassbranchonlastpassŠMOVE.WPASS(PC),-(A7) ŠTST.W‚(A7)+ ŠBMI.\0\1ŠENDMŠPAGE**EQUATES*F*INCLMAXdefinesthemaximumnestinglevelforincludefiles.‚Setting5*„itto1willallowonelevelofincludetobeused.:INCLMAXƒEQU„4…10/01/84…Maximumnestinglevelforincludes.CFLUN…EQU„1’LUFORCOMMANDFILE$TFLUN…EQU„2’LUFORTEMP.OUTPUTFILEBFLUN…EQU„3’LUFORBOOTFILELSLUN…EQU„4’LUFORLISTDEVICEBSFLUN…EQU„3†LUFORSUBSTITUTEFILEANDASM/LINKSOURCEANDLOFILE)XSFLUN„EQU„7’LUFORNEWFILESUBSTITUTION-SYLUN…EQU„8’LUforsymboltablefile01/10/854SUBMAX„EQU„10‘MAXRECURSIONDEPTHINSUBSPROCESSING%PARLEN„EQU„8’MAX.LENGTHOFPARAMETER"VALLEN„EQU„30‘MAX.LENGTHOFVALUE$NOPAR…EQU„170MAX.NO.OFPARAMETERS#MINPAR„EQU„0’MIN.NO.OFPARAMETERS@NOTASKSƒEQU„40ŠMAX.NO.OFLINESINTASKMAPTHATCANBEPRINTED*FORMAT OF SYMBOL TABLE ENTRY ŠOFFSET0!PARMAM„DS.BƒPARLENParameternameVALUE…DS.BƒVALLENValuePLEN†DS.Bƒ1’ParameterlengthVLEN†DS.Bƒ1’ValuelengthPFLAG…DS.Wƒ1’Flagword SYMLEN„EQU„*&PPASL…EQU„0’Set=definedonlastpass ŠSECTION0 *CRˆEQU„$D‘CARRIAGERETURN LFˆEQU„$AFFˆEQU„$C‘FORMFEEDAPOS†EQU„$27APOSTROPHE*OFFSETS TO START-UP REGISTERS.DUV‡EQU„2*4OFFSETTOUSERDEFAULTVOLUME(D2)/DUN‡EQU„3*4+2ŽOFFSETTODEFAULTUSERNO.(D3.W)-DUC‡EQU„4*4OFFSETTODEFAULTCATALOG(D4,D5)!TNˆEQU„8*4OFFSETTOSESSION(A0)CLˆEQU„6*4COMMANDLENGTH(D6)CTˆEQU„0*4CALLERTASK(D0)!CSESS…EQU„1*4CALLERSESSION(D1)*-ASQLEN„EQU„22‘LENGTHOFTASKCOMPLETIONEVENT**OFFSETS IN LIBLIBTSK„EQU„0’TASK"LIBMON„EQU„10‘MONITORTASK/SESSIONLIBENT„EQU„22‘TASKENTRYPT.+LIBSAD„EQU„48‘STARTOFSEGMENTALLOC.DESC."LIBSADLN‚EQU„16‘LENGTHOFEACHSAD!LIBMIDLN‚EQU„4’LENGTHOFEACHMID+NOSAD…EQU„8’NO.OFSEGMENTALLOCATIONDESC.%SADATT„EQU„2’OFFSETTOSADATTRIBUTES#SADNAM„EQU„4’OFFSETTOSEGMENTNAME$SADSTR„EQU„8’OFFSETTOSEGMENTSTART&SADLEN„EQU„12‘OFFSETTOSEGMENTLENGTH*LIBMID„EQU„176STARTOFMEMORYIMAGEDESC.NOMID…EQU„20‘NO.OFMID'S$MAXSEG„EQU„4’MAXIMUMNO.OFSEGMENTSŠPAGE** MINI TCB FORMAT* ŠOFFSET0MTCB†DS.Bƒ4’!TCBMTCBNAME‚DS.Bƒ4’TASKNAMEMTCBSESSNDS.Bƒ4’TASKSESSION MTCBMONƒDS.Bƒ4’MONITORTASKNAMEŠDS.Bƒ4’MONITORTASKSESSIONMTCBUSER‚DS.Bƒ2’USERNUMBERMTCBLPRI‚DS.Bƒ1’PRIORITYŠDS.Bƒ1’UNUSEDMTCBSTATEDS.Bƒ2’STATEMTCBATTR‚DS.Bƒ2’ATTRIBUTESMTCBENTRYDS.Bƒ4’ENTRYADDRESSMTSTMMUƒDS.Bƒ32‘TSTMMUINRO)TSTMMUSZ‚EQU„*-MTSTMMUŠ#BYTESINMMUINFOMTSTATTR‚DS.Bƒ32‘TSTATTRIBUTES,TSTATTRSZEQU„*-MTSTATTR‰#BYTESINATTRINFOMTCBLN„EQU„*’LENGTHOFMINI-TCB ŠSECTION0%ŠDS.Lƒ20‘Expressionevaluationstack.EXPSTACK‚DC.Lƒ07STAKSAVƒDS.Lƒ1’Saveforstackvalueonexpressioneval.ŠDS.Lƒ40‘STACKAREA STACK…EQU„*** OPTION FLAGS*3ROPT†EQU„0’'R'OPTION(READONLYMODEFORALLCODE),POPT†EQU„1’'P'OPTION(PHYSCALADDRESSMODE)&SOPT†EQU„2’'S'OPTION(SKIP-RESTART)-TOPT†EQU„3’'T'OPTION(SETSYMBOLTABLESIZE),COPT†EQU„4’'C'OPTION(CROSSREFERENCEFILE)OPTFLG„DC.Bƒ0’OPTIONFLAGBYTE+OPTSZE„DC.LƒNOPARŽDEFAUL TSYMBOLTABLESIZE* * Misc. flags* MSCFLG„DC.Wƒ0.INSTF…EQU„0’Set=symbolinsertedonthispass5UNDEF…EQU„1’Undefinedsymbolencounteredonthispass*G*PASSisinitiallysetto1forthefirstpass.‚Onthelastpass,PASSG*ƒissetto-1.‚Initialpassesareperformeduntiloneofthefollowing*ƒconditionstakesplace:8*…1.Noundefinedsymbolswereencounteredonthispass..*…2.Nonewsymbolsweredefinedonthispass.C*ƒWhenalltheinitialpasseshavebeenperfomred,thelastpassis *ƒperformed.*-PASS†DC.Wƒ0’Saveforpassnumber(posorneg)&MAPF†EQU„0’MAPTABLEOVERFLOWFLAGBIT*MAPFLG„DC.Bƒ0’MAPTABLEOVERFLOWFLAGWORD'SUBDUN„EQU„0’FLAGFORSUBSTITUTIONDONESUBFLG„DC.Wƒ0’SUBSFLAGWORD(SUBCNT„DC.Wƒ0’RECURSIONCOUNTERFORSUBS-ERRCNT„DC.Wƒ0’ERRORCOUNTERFORFINALMESSAGE*#* GET DATE AND TIME PARAMETER BLOCK* TIMBLK„DS.Lƒ1’RETURNSDAYNUMBER ŠDS.Lƒ1’RETURNSMSPASTMIDNIGHT*'* MEMORY SEGMENT BLOCK FOR SYMBOL TABLE*MSBSYM„DC.Lƒ0’TASKNAMEŠDC.Lƒ0’SESSIONNUMBERŠDS.Wƒ1’DIRECTIVEOPTIONŠDC.Wƒ0’SEGMENTATTRIBUTESŠDC.Lƒ'SMTB'SEGMENTNAMEŠDC.Lƒ0’LOGICALADDRESSŠDS.Lƒ1’SEGMENTLENGTH*'* ERROR MESSAGE HANDLER PARAMETER BLOCK*4ERRPBLKƒDC.Lƒ0’USERREGD0CONTAINSERRMSGKEYVALUE-ŠDC.Lƒ0’USERREGA0POINTSATI/OCONTROLBLK3ERRPOPTƒDC.Bƒ0’ERROROPTIONS[BIT0=QUERYRESPONSE].ERRPLDFƒDC.BƒLDFLUNUSERLDFLUNLUNFORSCREEN%ERRPQUYƒDC.Bƒ0’QUERYRETURNCHARACTER,ERRPCDFƒDC.BƒCDFLUNUSERCDFLUNFORKEYBOARD0ERRPLUGB‚DC.Lƒ0’BEGINNINGOFUSERTEXTPLUGPOOL*ERRPLUGE‚DC.Lƒ0’ENDOFUSERTEXTPLUGPOOL)*FHSBlockforsymboltablefile„01/10/85SYMFHS„DC.WƒFHDELTŠDC.WƒFOPISD+FOPEREW ŠDC.Bƒ0,SYLUN ŠDC.Bƒ'„'ŠDC.Wƒ0 ŠDC.Bƒ'ˆ'ŠDC.Bƒ'SGSYMS‚' ŠDC.Bƒ'SY'ŠDC.Wƒ0 ŠDC.Bƒ0,0ŠDC.Wƒ0ŠDC.Lƒ0 *FHS BLOCK FOR TASK/PROCESS FILETSKFHS„DC.WƒFHASGN ŠDC.WƒFOPER ŠDC.Bƒ0,SFLUN ŠDC.Bƒ'„'ŠDC.Wƒ-1 ŠDC.Bƒ'ˆ' ŠDC.Bƒ'ˆ' ŠDC.Bƒ'LO'ŠDC.Wƒ0 ŠDC.Bƒ0,0ŠDC.Wƒ0ŠDC.Lƒ0*FHS BLOCK FOR COMMAND FILECMDFHS„DC.WƒFHASGN'*****************TEMP.***************** ŠDC.WƒFOPPR *DC.W FOPEREW ŠDC.Bƒ0,CFLUN ŠDC.Bƒ'„'ŠDC.Wƒ-1 ŠDC.Bƒ'ˆ' ŠDC.Bƒ'ˆ' ŠDC.Bƒ'SA'ŠDC.Wƒ0 ŠDC.Bƒ0,0ŠDC.Wƒ0ŠDC.Lƒ0$*FHS BLOCK FOR TEMPORARY OUTPUT FILETMPFHS„DC.WƒFHALLO+FHASGNŠDC.WƒFOPEREW+FOPSEQ ŠDC.Bƒ0,TFLUN ŠDC.Bƒ'„'ŠDC.Wƒ-1 ŠDC.Bƒ'ˆ' ŠDC.Bƒ'&‡' ŠDC.Bƒ'‚'ŠDC.Wƒ0 ŠDC.Bƒ0,0ŠDC.Wƒ256RECORDLENGTHŠDC.Lƒ0*FHS BLOCK FOR BOOT FILEBOOTFHSƒDC.WƒFHALLO+FHASGNŠDC.WƒFOPEREW+FOPCON ŠDC.Bƒ0,BFLUN ŠDC.Bƒ'„'ŠDC.Wƒ-1 ŠDC.Bƒ'ˆ'ŠDC.Bƒ'VERSADOS' ŠDC.Bƒ'SY'ŠDC.Wƒ0 ŠDC.Bƒ0,0ŠDC.Wƒ0ŠDC.Lƒ0’LENGTHOFBOOTFILE7*FHS BLOCK FOR LIST DEVICE AND SOURCE FILES IN COMMANDSLISFHS„DC.WƒFHASGNŠDC.WƒFOPPW+FOPOVRT+FOPSEQ ŠDC.Bƒ0,LSLUN ŠDC.Bƒ'„'ŠDC.Wƒ-1 ŠDC.Bƒ'ˆ' ŠDC.Bƒ'ˆ' ŠDC.Bƒ'SA'ŠDC.Wƒ0 ŠDC.Bƒ0,0ŠDC.Wƒ0ŠDC.Lƒ0*FHS BLOCK TO FREE CDFLUNFREFHS„DC.WƒFHCLOSŠDC.Wƒ0ŠDC.Bƒ0,CDFLUN ŠDC.Bƒ'„'ŠDC.Wƒ-1 ŠDC.Bƒ'ˆ' ŠDC.Bƒ'ˆ' ŠDC.Bƒ'‚'ŠDC.Wƒ0 ŠDC.Bƒ0,0ŠDC.Wƒ0ŠDC.Lƒ0(*FHS BLOCK FOR SUBSTITUTION CREATED FILEŠFHS.SUB,CMDBUFN0‚DCB.B‚6,''ŽForgloballinenumbers0CMDBUFNƒDCB.B‚6,''ŽForlinenumberswithinfile&ŠDS.Bƒ2’FORLEADING'.'IFPROCESSING+CMDBUF„DS.Bƒ80‘BUFFERFORCOMMANDFILEREC.CMDBUFEƒEQU„*-1ŠDC.BƒCR‘RECORDENDSWITHCRŠDS…0*BUFFER FOR TCB AND TST,SUBBUF1ƒDS.Lƒ1’BASEADDRESSOFSECTORBUFFER+SUBBUF2ƒDS.Lƒ1’ENDADDRESSOFSECTORBUFFERTCBBLK„DS.Bƒ256?*SUB. INPUT FILE RECORD AND SECTOR BUFFER FOR TASK/PROCESS FILESUBBUF„DS.Bƒ256TCBBLKLƒEQU„*-TCBBLK&ŠDC.BƒCR‘MAKESURERECORDENDSWITHCRŠDS…0!LIBLK…DS.Bƒ256LOADERINFO.BLOCKLIBLKE„EQU„*-1#*IOSBlockforsymbolfileƒ01/10/85ŠIOS.SYMIOWRIT,IOPRRN,SYLUN,0)*IOS BLOCK FOR COMMAND FILE AND BOOT FILE BOOTIOSƒEQU„*$ŠIOS.CMDIOREAD,IOPPOS,CFLUN,,-1,0,0*IOS BLOCK FOR TEMPORARY FILEŠIOS.TMPIOWRIT,0,TFLUN+*IOS BLOCK FOR LIST FILE AND CONSOLE OUTPUTŠIOS.OUTIOWRIT*IOS BLOCK FOR CONSOLE INPUTŠIOS.INIOREAD,0,CDFLUN,0,0,0,0N*I OS BLOCK FOR SUBSTITUTION SOURCE FILE,LINK CHAIN FILE, AND TASK/PROCESS FILEŠIOS.SUBSIOREAD,0,SFLUN&*IOS BLOCK FOR SUBSTITUTION DEST. FILEŠIOS.SUBXIOWRIT,0,XSFLUN,,,0*#* INCLUDE file processing data area!GLOBCNTƒDC.Lƒ0’Globallinenumber%INCLNEST‚DC.Wƒ0’Currentnestinglevel*CMDLNE USED FOR SUBSTITUTION OUTPUT AND ASM/LINK COMMAND LINE'COMMSG„DC.Bƒ'COMMANDLINEPARAMETERS:‚'CMDLNE„COMLINE160COMMANDLINECMDLNL„EQU„*-CMDLNE,COMEND„DC.Lƒ0’SAVEADDRFORCOMMANDLINEEND,CMDLNE1ƒDS.Lƒ1’ADDRESSOFCOMMANDLINEBEGIN*CMDLNE2ƒDS.Lƒ1’ADDRESSOFCOMMANDLINEEND)EDITSVA0‚DS.Lƒ1’SaveforA0fromEDITFILE(EDITRTNƒDS.Lƒ1’SaveforD0fromEDITFILE1MONITORƒDS.Lƒ1’Savefortasknamethatstartedme%REPLY…DS.Bƒ80‘RESTARTSUBSTRINGREPLYREPLYE„EQU„*-12BASEADDR‚DC.Lƒ0’BASEADDRESSFORBOOTFILESEGMENT;TPSW†DC.Lƒ00/1/-1->NOTHING/TASKINPROCESS/PROCESSINPROC8SEC0SW„DC.Lƒ0’0/1->BOOTSECTOR0NOTPROCESSED/PROCESSED/LDFLG…DC.Bƒ0’INDICATESIFLISTDEVICESPECIFIED4SEGFLG„DC.Bƒ0’INDICATESSEGMENTDIRECTIVEINPROCESS9SEGCNT„DC.Wƒ0’INIDCATESNUMBEROFSEGMENTBEINGPROCESSED&FSTART„DC.Lƒ0’SEGMENTSTARTINGADDRESS5TSKTCB„DC.Lƒ0’SAVEADDRESSFORTCBDISPLAYINMESSAGE#TSKLST„DC.Lƒ0’NEXTAVAILTASKSPACE#CLC‡DC.Lƒ0’CURRENTLOCATIONCOUNTER,CMDLGH„DC.Lƒ0’LENGTHOFREADINCOMMANDLINE0REPLGH„DC.Lƒ0’LENGTHOFKEYEDINSUBSTRINGREPLY*B* VARIABLES USED IN COPYING FROM TEMPORARY FILE TO FINAL BOOT FILE*SREC†DC.Lƒ0’SOURCERRNFROMTEMPORARYFILE(DREC†DC.Lƒ0’DESTINATIONRRNINBOOTFILE.TREC†DC.Lƒ0’RRNTOWRITENEXTMINI-TCBFRAMTO5BNIN†DC.Lƒ0’NEXTINPOINTERADDRESSTOMINI-TCBFRAME1STARTTCB‚DC.Lƒ0’BASEADDRESSOFTCB'SINROMFILE+PLCTCB„DC.Wƒ0’NUMBEROFTCB'SPLACEDSOFAR8NXTTCB„DC.Lƒ0’POINTSTOSUCCESSIVELYLOWERTCB'SINTEMP7TSKCNT„DC.Wƒ0’COUNTOFTCBBLOCKSPROCESSEDFOR'R'OPT*"* BUFFER FOR PROCESSING MINI TCB'S3ŠDS.BƒMTCBLNOVERFLOWBUFFERFORSTAGINGMINI-TCB'S BBASE…EQU„*#ŠDS.Bƒ256I/OBUFFERFORMINI-TCB'S'BBASE1„DS.Lƒ1’HOLDSBUFFERBASEADDRESS(BBASE2„DS.Lƒ1’HOLDSBUFFERENDADDRESS+1*EXCLUDED SEGMENT LIST2EXCLNUMƒDC.Wƒ0’CURRENTNUMBEROFEXCLUDEDSEGMENTSEXCLLSTƒDCB.L‚MAXSEG,00SYMADR„DS.Lƒ1’HOLDSTABLEBASEADDRESS(DYNAMIC)SYMSTR„EQU„*’SYMBOLTABLESTART)ŠDC.Bƒ'$TCBLST'‰STEFORTCBLISTPOINTERS‰SET„*TCBLP…DC.Bƒ'$00000000'ŠDCB.B‚VALLEN-(*-S),'' ŠDC.Bƒ7,9 ŠDC.Wƒ0’Flags*+ŠDC.Bƒ'$TCBRDY'‰STEFORTCBREADYLISTPTRS‰SET„*TCBRP…DC.Bƒ'$00000000'ŠDCB.B‚VALLEN-(*-S),'' ŠDC.Bƒ7,9 ŠDC.Wƒ0’Flags*>* NOTE THAT DATE AND TIME MUST REMAIN CONTIGUOUS IN MEMORY FOR*ƒPROPERINITIALIZATION*ŠDC.Bƒ'$DATEƒ'3DATE†DCB.B‚VALLEN,''‰YYMMDDISDYNAMICALLYSTUFFED ŠDC.Bƒ5,6 ŠDC.Wƒ0’Flags**ŠDC.Bƒ'$TIMEƒ'‰HHMMISDYNAMICALLYSTUFFEDTIME†DCB.B‚VALLEN,'' ŠDC.Bƒ5,4 ŠDC.Wƒ0’Flags*>* DIAGNOSTIC AND ABORT REGESTERS FOR SYSCMD FILE TO CHECK WHEN* USING ASM/LINK.* ŠDC.Bƒ'$RD…'S‰SET„*+DIAG†DC.Bƒ'$0000…'‡DIAGNOSTICCODEREGESTERŠDCB.B‚VALLEN-(*-S),'' ŠDC.Bƒ3,5 ŠDC.Wƒ0’Flags* ŠDC.Bƒ'$RA…'S‰SET„*&ABRT†DC.Bƒ'$0000…'‡ABORTCODEREGESTERŠDCB.B‚VALLEN-(*-S),'' ŠDC.Bƒ3,5 ŠDC.Wƒ0’Flags*ŠDC.Bƒ'USER„'‰USERparameterS‰SET„*ŠDC.Bƒ'$0000…'ŠDCB.B‚VALLEN-(*-S),'' ŠDC.Bƒ4,5 ŠDC.Wƒ0’Flags*"ŠDC.Bƒ'SESSION'‰SESSIONparameterS‰SET„*ŠDC.Bƒ'$0000…'ŠDCB.B‚VALLEN-(*-S),'' ŠDC. Bƒ7,5 ŠDC.Wƒ0’Flags*#ŠDC.Bƒ'PRIORITY'‰PRIORITYparameterS‰SET„* ŠDC.Bƒ'$0ˆ'ŠDCB.B‚VALLEN-(*-S),'' ŠDC.Bƒ8,2 ŠDC.Wƒ0’Flags*ŠDC.Bƒ'PC†'‰PCparameterS‰SET„* ŠDC.Bƒ'$0ˆ'ŠDCB.B‚VALLEN-(*-S),'' ŠDC.Bƒ2,2 ŠDC.Wƒ0’Flags*#ŠDC.Bƒ'$ROPTƒ'‰'R'optionparameterS‰SET„*ROPTF…DC.Bƒ'$0ˆ'ŠDCB.B‚VALLEN-(*-S),'' ŠDC.Bƒ5,2 ŠDC.Wƒ0’Flags*#ŠDC.Bƒ'$POPTƒ'‰'P'optionparameterS‰SET„*POPTF…DC.Bƒ'$0ˆ'ŠDCB.B‚VALLEN-(*-S),'' ŠDC.Bƒ5,2 ŠDC.Wƒ0’Flags*1PDEF†EQU„*-SYMSTR‹ENDOFPREDEFINEDTABLEENTRIESSYMSTR1ƒDC.Lƒ1 SYMEND„DC.Lƒ06SYMCNT„DC.Wƒ0’Numberofsymbolsduringsysgen01/10/85(NXTSYM„DC.Lƒ0’ADDR.OFNEXTAVAIL.SPACETCBLST„DC.Lƒ0’TCBLISTPTR TCBRDY„DC.Lƒ0’TCBREADYLISTPTR$PROCSTRƒDC.Lƒ0’STARTOFLASTPROCESSGATTR†DC.Wƒ1<-1=NOTPROCESSING*IFXXT…DS.Lƒ1’ADDRESSOFCOMPARISONROUTINE**TASK COMPLETION EVENTTCOMBLKƒDS.BƒASQLEN*PARAMETER BLOCK TO SET UP ASQASQBLK„DC.Lƒ0,0TASK/SESSIONŠDC.Bƒ0,ASQLEN ŠDC.LƒASQLENŠDC.Lƒ0’ADDR.OFASR(TSKCOM)ŠDC.Lƒ02MMUPO…DS.WƒMAXSEGPHYSICALOFFSETFOREACHSEGMENTŠPAGE**LOADER PARAMETER BLOCK*LDRBLKŠDC.Lƒ0,0TASKNO.,SESSION1ŠDC.Wƒ$8000ŽCREATETCBOPTION(MONITORSPECIFIED)ŠDC.Lƒ0,0MONITORISSELFŠDC.Bƒ0,0INITIAL/LIMITPRIORŠDC.Wƒ0’CREATETCBTASKATTRIB.ŠDC.Lƒ0’TASKENTRYPOINTŠDC.Wƒ0’TASKUSERID.ŠDC.Wƒ$6030ŽLOADEROPTIONSUSEPASSEDPRIORITY!LDRCLL„DC.Bƒ0’COMMANDLINELENGTHŠDC.Bƒ0’REQUESTOR'SLUN ŠDC.Lƒ0,0LDRCL…DC.Lƒ0’COMMANDLINEADDR. *FHS BLOCKLDRFHS„DC.Wƒ0,0 ŠDC.Bƒ0,0ŠDC.Bƒ'„'VOLUMEŠDC.Wƒ0’USERNO.ŠDC.Bƒ'ˆ'‰CATALOGLDRFN…DC.Bƒ'ˆ'‰NAME ŠDC.Bƒ'LO'ŠDC.Wƒ0 ŠDC.Bƒ0,0ŠDC.Lƒ0*"*PARAMETER BLOCK FOR TASK START UP*STRBLKŠDC.Lƒ0,0TASK/SESSION#ŠDC.Wƒ$A000ŽNEWMONITOR,PASSREGS.ŠDC.Lƒ0,0MONITORISSELF*REGISTERS MUST FOLLOW"SAVEREGƒDS.Bƒ60‘STARTUPREGISTERS)DEFVOLNƒEQU„SAVEREG+8ŠDefaultvolumename1DEFUSRNƒEQU„SAVEREG+14‰Defaultusernumber(SUBS)7CNID†EQU„SAVEREG+36‰POINTSTOA1SAVELOC(TERMINALID)ŠPAGE**TABLE OF VALID COMMANDS**FORMAT:*„8BYTECOMMANDNAME*…2BYTEADDR.OFROUTINECMDTBL ŠDC.Bƒ'TASK„' ŠDC.LƒTSK-BŠDC.Bƒ'PROCESS' ŠDC.LƒPRC-BŠDC.Bƒ'SEGMENT' ŠDC.LƒSEG-B ŠDC.Bƒ'MSG…' ŠDC.LƒMSG-BŠDC.Bƒ'PAUSEƒ' ŠDC.LƒPSE-B ŠDC.Bƒ'PC†' ŠDC.LƒPPC-B ŠDC.Bƒ'SUBS„' ŠDC.LƒSUBS-B ŠDC.Bƒ'ASM…' ŠDC.LƒASM-B ŠDC.Bƒ'LINK„' ŠDC.LƒLNK-B ŠDC.Bƒ'USER„' ŠDC.LƒUSR-BŠDC.Bƒ'SESSION' ŠDC.LƒSES-BŠDC.Bƒ'STATEƒ' ŠDC.LƒSTE-BŠDC.Bƒ'PRIORITY' ŠDC.LƒPRI-BŠDC.Bƒ'EXCLUDE' ŠDC.LƒEXCL-BŠDC.Bƒ'ATTRIB‚' ŠDC.LƒATT-B ŠDC.Bƒ'END…' ŠDC.LƒEND-BŠDC.Bƒ'ABORTƒ' ŠDC.LƒABT-B<* Only the following commands are executed on initial passesPASS1C„DC.Bƒ'IFEQ„' ŠDC.LƒIFEQC-B ŠDC.Bƒ'IFNE„' ŠDC.LƒIFNEC-B ŠDC.Bƒ'IFLT„' ŠDC.LƒIFLTC-B ŠDC.Bƒ'IFLE„' ŠDC.LƒIFLEC-B ŠDC.Bƒ'IFGT„' ŠDC.LƒIFGTC-B ŠDC.Bƒ'IFGE„' ŠDC.LƒIFGEC-B ŠDC.Bƒ'ENDC„' ŠDC.LƒENDCC-BŠDC.Bƒ'INCLUDE' ŠDC.LƒINCL-BŠDC.Lƒ0’ENDOFLISTŠPAGE*I* Macro sets up byte in attribute or state table corresponding to desiredF*ƒbittobeaffectedintheassociatedstateorattributefieldintheE*ƒTCB.‚Ifthebitistobeturnedoff,thebitvaluewillbenegated.* SETW†MACROŠIFC„'ON','\1' DC.Bƒ\2,0ŠENDCŠIFC…'OFF','\1' DC.B„-\2,0ŠENDCŠENDM**TABLE OF VALID STATES**FORMAT:?*…4BYTEASCIISTATE(mnemonicfollowingSTATEcommandexample:*›STATE='DORM'*…1WORDSTATEVALUE=*‰Byte1:‚Bitnumberaffectedinstateword.‚Ifnegativethen-*”turnbitoff.‚Ifpositivethenturnbiton.*‰Byte2:‚Reserved(value=0)STETBLŠDC.Bƒ'DORM'DORMANTŠSETWƒON,TSKSDORM ŠDC.Bƒ'SUSP'SUSPENEDŠSETWƒON,TSKSSUSPŠDC.Bƒ'WAIT'WAIT(Blocked)ŠSETWƒON,TSKSBLCKŠDC.Bƒ'READ'READYŠSETWƒON,TSK2NRDYŠDC.Lƒ0’ENDOFLISTŠPAGE**TABLE OF VALID ATTRIBUTES**FORMAT:*…4BYTEASCIIATTRIBUTE*…2BYTEATTRIBUTEVALUE*FORMAT:D*…4BYTEASCIIATRRIBUTE(mnemonicfollowingATTRIBcommandexample:*›ATTRIB='USER'*…2BYTEATTRIBUTEVALUE=*‰Byte1:‚Bitnumberaffectedinstateword.‚Ifnegativethen-*”turnbitoff.‚Ifpositivethenturnbiton.*‰Byte2:‚Reserved(value=0)ATTTBLŠDC.Bƒ'USER'USERTASK&ŠSETWƒOFF,TSKASYST‡TurnoffsystembitŠDC.Bƒ'SYST'SYSTEMTASKŠSETWƒON,TSKASYSTŠDC.Bƒ'CRIT'CRITICAL5ŠSETWƒON,TSKACRITˆCriticaltoOScrashiftaskabortsŠDC.Bƒ'NOCR'NOTCRITICAL0ŠSETWƒOFF,TSKACRIT‡Don'tcrashOSiftaskabortsŠDC.Bƒ'RTIM'REALTIMEŠSETWƒON,TSKARTIMŠDC.Lƒ0’ENDOFLISTŠPAGE**MESSAGES THAT ABORT*MSG3†DC.Bƒ'INPUTFILEREQUIRED' MSG3E…EQU„*-1ŠDS.Lƒ0#MSG4†DC.Bƒ'TEMP.FILEVOLUMEERROR' MSG4E…EQU„*-1ŠDS.Lƒ0MSG5†DC.Bƒ'INPUTFILEERROR' MSG5E…EQU„*-1ŠDS.Lƒ0MSG6†DC.Bƒ'BOOTFILEERROR' MSG6E…EQU„*-1ŠDS.Lƒ0"MSG7†DC.Bƒ'LISTDEVICE/FILEERROR' MSG7E…EQU„*-1ŠDS.Lƒ0!MSG8†DC.Bƒ'SYMBOLTABLEOVERFLOW' MSG8E…EQU„*-1ŠDS.Lƒ0/MSG9†DC.Bƒ'SEGMENTENDLESSTHATSEGMENTSTART' MSG9E…EQU„*-1ŠDS.Lƒ05MSG10…DC.Bƒ'SEGMENTSTARTLESSTHANLOCATIONCOUNTER'MSG10E„EQU„*-1ŠDS.Lƒ0MSG11…DC.Bƒ'TOOMANYSEGMENTS'MSG11E„EQU„*-1ŠDS.Lƒ02MSG12…DC.Bƒ'STARTOFSEGMENTNOTONPAGEBOUNDARY'MSG12E„EQU„*-1ŠDS.Lƒ0*MSG13…DC.Bƒ'SEGMENT/MEMORYIMAGECONFLICT'MSG13E„EQU„*-1ŠDS.Lƒ0#MSG14…DC.Bƒ'NOOUTPUTFILECREATED'MSG14E„EQU„*-1ŠDS.Lƒ0%MSG15…DC.Bƒ'UNMATCHEDENDCSTATEMENT'MSG15E„EQU„*-1ŠDS.Lƒ0#MSG16…DC.Bƒ'MISSINGENDCSTATEMENT'MSG16E„EQU„*-1ŠDS.Lƒ07MSG17…DC.Bƒ'SYMBOLTABLESIZEVIALATION,MUSTBE0-9999'MSG17E„EQU„*-1ŠDS.Lƒ0%MSG18…DC.Bƒ'SEGMENTALLOCATIONERROR'MSG18E„EQU„*-1ŠDS.Lƒ0;MSG19…DC.Bƒ'MEMORYUNAVAILABLEFORALLOCATIONATTHISTIME'MSG19E„EQU„*-1ŠDS.Lƒ0+MSG20…DC.Bƒ'EXCEEDEDINCLUDENESTINGLEVEL'MSG20E„EQU„*-1ŠDS.Lƒ0.MSG21…DC.Bƒ'SYNTAXERRORONINCLUDEFILENAME'MSG21E„EQU„*-1ŠDS.Lƒ0MSGT†DC.Bƒ'XXXXABORTED.D0='MSGTA…DC.Bƒ'XXXX' MSGTE…EQU„*-1ŠDS.Lƒ0AMAPFM…DC.Bƒ'******MAPENTRIESMISSING,CANONLYLIST40*******'MAPFME„EQU„*-1ŠDS.Lƒ0"MSGD†DC.Bƒ'-START-UPADDRESS=$'MSGD1…DC.Bƒ'XXXXXX' MSGDE…EQU„*-1ŠDS.Lƒ04MSGOT…DC.Bƒ'TOTALNUMBEROFUSERDEFINEDSYMBOLS=‚'MSGOT1„DC.Bƒ'XXXX'MSGOTE„EQU„*-1ŠDS.Lƒ0 MSGP†DC.Bƒ'-FINALPCVALUE=$'MSGFPC„DC.Bƒ'XXXXXX' MSGPE…EQU„*-1ŠDS…0&INCMSG1ƒDC.Bƒ'-BEGININCLUDEFILE-'INCMSG1I‚DCB.B‚30,''INCFILSZ‚EQU†*-INCMSG1IINCMSG1E‚EQU„*-1ŠDS…0!INCMSG2ƒDC.Bƒ'-RESUMINGFILE-'INCMSG2I‚DCB.B‚30,''INCMSG2E‚EQU„*-1ŠDS…00FILMSG1ƒDC.Bƒ'-PROCESSINGCOMMANDLINEFILE-'FILMSG1I‚DCB.B‚30,''FILMSG1E‚EQU„*-1ŠDS…0*ŠPAGE*4*PRINT ERROR MESSAGE ON LOG AND LIST DEVICE AND STOP7ERR1†MOVE.L#EM_NVE,D0‰COMPLAINOFCOMMANDSYNTAXERRORERR1.5„BSR„ERRMSGŠBRA.S‚ERRTERMERR0†BSR„LOGLIS** Error termination*@ERRTERMƒMOVE.WERRCNT(PC),D0†Numberoferrorsencounteredsofar(ŠADD.W‚#1,D0ŽBumpbyoneforthiserror.:ŠOR.Wƒ#$C000,D0ŠSeterrorcodebitsforRDpseudoregisterŠSWAPƒD0 ŠSUB.L‚A0,A0"ŠMOVE.W#TERM,D0‹ErrorterminationŠTRAPƒ#1*%ERR2†MOVE.L#EM_NVO,D0‰INVALIDOPTION ŠBRA.S‚ERR1.5(ERR3†LEA„MSG3(PC),A1ŒINPUTFILEREQUIREDŠLEA„MSG3E(PC),A2 ŠBRA.S‚ERR0,ERR4†LEA„MSG4(PC),A1ŒTEMP.FILEVOLUMEERRORŠLEA„MSG4E(PC),A2 ŠBRA.S‚ERR0%ERR5†LEA„MSG5(PC),A1ŒINPUTFILEERRORŠLEA„MSG5E(PC),A2 ŠBRA.S‚ERR0$ERR6†LEA„MSG6(PC),A1ŒBOOTFILEERRORŠLEA„MSG6E(PC),A2 ŠBRA.S‚ERR0&ERR7†LEA„MSG7(PC),A1ŒLISTDEVICEERRORŠLEA„MSG7E(PC),A2 ŠBRA.S‚ERR0*ERR8†LEA„MSG8(PC),A1ŒSYMBOLTABLEOVERFLOWŠLEA„MSG8E(PC),A2ERR0A…BRA„ERR08ERR9†LEA„MSG9(PC),A1ŒSEGMENTENDLESSTHANSEGMENTSTARTŠLEA„MSG9E(PC),A2 ŠBRA.S‚ERR0A>ERR10…LEA„MSG10(PC),A1‹SEGMENTSTARTLESSTHANLOCATIONCOUNTEŠLEA„M SG10E(PC),A2 ŠBRA.S‚ERR0A(ERR11…LEA„MSG11(PC),A1‹TOOMANYSEGMENTSŠLEA„MSG11E(PC),A2 ŠBRA.S‚ERR0AERR19…LEA„MSG19(PC),A1‹MEMORYSPACENOTAVAILABLEATTHISTIMEŠLEA„MSG19E(PC),A2 ŠBRA.S‚ERR0A5ERR20…LEA„MSG20(PC),A1‹EXCEEDEDMAXIMUMINCLUDELEVELŠLEA„MSG20E(PC),A2 ŠBRA.S‚ERR0A8ERR21…LEA„MSG21(PC),A1‹SYNTAXERRORONINCLUDEFILENAMEŠLEA„MSG21E(PC),A2 ŠBRA.S‚ERR0AŠPAGE*.*ERRORS DETECTED IN COMMAND FILE THAT CONTINUE* CMSG1…DC.Bƒ'%%INVALIDPARAMETER'CMSG1E„EQU„*-1ŠDS.Lƒ0CMSG2…DC.Bƒ'%%SYNTAXERROR'CMSG2E„EQU„*-1ŠDS.Lƒ0CMSG3…DC.Bƒ'%%INVALIDVALUE'CMSG3E„EQU„*-1ŠDC.Lƒ0"CMSG4…DC.Bƒ'%%DUPLICATEPARAMETER'CMSG4E„EQU„*-1ŠDS.Lƒ0CMSG5…DC.Bƒ'%%VALUETOOBIG'CMSG5E„EQU„*-1ŠDS.Lƒ0)CMSG6…DC.Bƒ'%%INVALIDSTATEORATTRIBUTE'CMSG6E„EQU„*-1ŠDS.Lƒ0#CMSG7…DC.Bƒ'%%NEWPCLESSTHANOLD'CMSG7E„EQU„*-1ŠDS.Lƒ0&CMSG8…DC.Bƒ'%%INVALIDFILEDESCRIPTOR'CMSG8E„EQU„*-1ŠDS.Lƒ0 CMSG9…DC.Bƒ'%%FILENAMEMISSING'CMSG9E„EQU„*-1ŠDS.Lƒ0&CMSG10„DC.Bƒ'%%INVALIDLINKSTATEMENT'CMSG10EƒEQU„*-1ŠDS.Lƒ0!CMSG11„DC.Bƒ'%%INVALIDTASKNAME'CMSG11EƒEQU„*-1ŠDS.Lƒ0/CMSG12„DC.Bƒ'%%NEWPCMUSTBEONPAGEBOUNDARY'CMSG12EƒEQU„*-1ŠDS.Lƒ0"CMSG13„DC.Bƒ'%%FILENAMETOOLONG'CMSG13EƒEQU„*-1ŠDS.Lƒ0$CMSG14„DC.Bƒ'%%INVALIDSEGMENTNAME'CMSG14EƒEQU„*-1ŠDS.Lƒ0*CMSG15„DC.Bƒ'%%TOOMANYEXCLUDEDSEGMENTS'CMSG15EƒEQU„*-1ŠDS.Lƒ0&CMSG16„DC.Bƒ'%%XXXXSEGMENTNOTFOUND'CMSG16EƒEQU„*-1ŠDS.Lƒ0%CMSG17„DC.Bƒ'%%NOSEGMENTSPROCESSED'CMSG17EƒEQU„*-1ŠDS.Lƒ0)CMSG18„DC.Bƒ'%%UTILITYENCOUNTEREDERROR'CMSG18EƒEQU„*-1ŠDS.Lƒ0ŠPAGE*/*SEND ERROR TO LIST AND LOG DEVICE AND CONTINUE*(CERR1…LEA„CMSG1(PC),A1‹INVALIDPARAMETERŠLEA„CMSG1E(PC),A2CERR0…BSR„EMLOGLIS ŠBNE„IOERR"ŠBRA„NXTCMD‘GOPROCESSNEXTRECORD#CERR2…LEA„CMSG2(PC),A1‹SYNTAXERRORŠLEA„CMSG2E(PC),A2 ŠBRA.S‚CERR0$CERR3…LEA„CMSG3(PC),A1‹INVALIDVALUEŠLEA„CMSG3E(PC),A2 ŠBRA.S‚CERR0*CERR4…LEA„CMSG4(PC),A1‹DUPLICATEPARAMETERŠLEA„CMSG4E(PC),A2CERR4.5ƒBRA.S‚CERR0$CERR5…LEA„CMSG5(PC),A1‹VALUETOOBIGŠLEA„CMSG5E(PC),A2 ŠBRA.S‚CERR01CERR6…LEA„CMSG6(PC),A1‹INVALIDSTATEORATTRIBUTEŠLEA„CMSG6E(PC),A2 ŠBRA.S‚CERR0+CERR7…LEA„CMSG7(PC),A1‹NEWPCLESSTHANOLDŠLEA„CMSG7E(PC),A2 ŠBRA.S‚CERR0(CERR8…LEA„CMSG8(PC),A1‹INVALIDFILENAMEŠLEA„CMSG8E(PC),A2ŠBRA.S‚CERR4.5(CERR9…LEA„CMSG9(PC),A1‹FILENAMEMISSINGŠLEA„CMSG9E(PC),A2CERR0A„BRA.S‚CERR4.5/CERR10„LEA„CMSG10(PC),A1ŠINVALIDLINKSTATEMENTŠLEA„CMSG10E(PC),A2 ŠBRA.S‚CERR0A*CERR11„LEA„CMSG11(PC),A1ŠINVALIDTASKNAMEŠLEA„CMSG11E(PC),A2 ŠBRA.S‚CERR0A4CERR12„LEA„CMSG12(PC),A1ŠNEWPCNOTONPAGEBOUNADRYŠLEA„CMSG12E(PC),A2 ŠBRA.S‚CERR0A+CERR13„LEA„CMSG13(PC),A1ŠFILENAMETOOLONGŠLEA„CMSG13E(PC),A2 ŠBRA.S‚CERR0A-CERR14„LEA„CMSG14(PC),A1ŠINVALIDSEGMENTNAMEŠLEA„CMSG14E(PC),A2 ŠBRA.S‚CERR0A3CERR15„LEA„CMSG15(PC),A1ŠTOOMANYEXCLUDEDSEGMENTSŠLEA„CMSG15E(PC),A2 ŠBRA.S‚CERR0A0CERR18„LEA„CMSG18(PC),A1ŠUTILITYENCOUNTERERRORŠLEA„CMSG18E(PC),A2 ŠBRA.S‚CERR0A*ŠPAGE*>*ERRORS DETECTED IN PROCESSING SUBSTITUTION FILE THAT CONTINUE* SMSG1…DC.Bƒ'%%INVALIDFILETYPE'SMSG1E„EQU„*-1ŠDS.Lƒ0*SMSG2…DC.Bƒ'%%SUBSTITUTIONRECORDTOOBIG'SMSG2E„EQU„*-1ŠDS.Lƒ02SMSG3…DC.Bƒ'%%XXXXXXXXNOTDEFINED'PARAMETERNAMESMSG3E„EQU„*-1ŠDS.Lƒ0PCMSG…DC.Bƒ'-PC=$'PCDSP…DC.Bƒ'XXXXXX' ŠDC.Bƒ$0DPCMSGE„EQU„*-1ŠDS…0FFS‡DC.Wƒ$200CŽFORMFEED FFE‡EQU„*-1* ERMSGS„EQU„*5ERMSG…DC.Bƒ'†ERRORSENCOUNTERED'FINAL SYSGENMESSAGEERMSGE„EQU„*-1ŠDS…0ŠPAGE** RESTART MESSAGES*9RSMSG…DC.Bƒ'ENTERCHARACTERMATCHINGPATTERNFORRESTART' ŠDC.Bƒ$0D ŠDC.Bƒ$0A ŠDC.Bƒ'>' ŠDC.Bƒ''RSMSGE„EQU„*-1ŠDS…09RLIST…DC.Bƒ'RESTARTOPTIONSPECIFIED-MATCHPATTERNIS:'RLISTE„EQU„*-1ŠDS…06RSTS†DC.Bƒ'-----NORMALPROCESSRESUMINGFROMRESTART' RSTSE…EQU„*-1ŠDS…0** TABLE ALLOCATION MESSAGE*SYSG0T„CMP.B‚#'T',D1ŒISTHISA'T'OPTION?(SYMBOLTABLESIZE)ŠBNE.S‚SYSG0SBRANCHIFNO)ŠBCHGƒ#TOPT,OPTFLG-B(A6)MARKOPTIONFLAG.ŠBNE„ERR2BRANCHIF'T'OPTIONWASALREADYSET.ŠCMP.B‚#$10,D0ŒWAS"="ANDVALIDNUMBERFOUND?ŠBNE„ERR2BRANCHIFNO.ŠCMP.L‚#MINPAR,D3‰SYMBOLTABLELESSTHANMIN.?ŠBLT„ERR17ŽBRANCHIFYESŠCMP.L‚#9999,D3‹OUTOFRANGE?ŠBGT„ERR17ŽBRANCHIFYES.ŠMOVE.LD3,OPTSZE-B(A6)„SAVESYMBOLTABLESIZE&ŠBRA„SYSG06GOLOOKFORANOTHEROPTION4SYSG0S„CMP.B‚#'S',D1ŒISTHISA'S'OPTION?(RESTART).ŠBNE„ERR2BRANCHIFNO-MUSBEILLEGALOPTION)ŠBCHGƒ#SOPT,OPTFLG-B(A6)MARKOPTIONFLAG*ŠBNE„ERR2BRANCHIF'S'OPTIONALREADYSET&ŠBRA„SYSG06GOLOOKFORANOTHEROPTION*INPUT FIELD MUST BE SPECIFIED>SYSG08„LEA„CMDLNE(PC),A2†SETUPA2ATBEGININGOFCOMMANDLINE;LOP1†CMP.B‚#0,(A2)+‹MOVEA2POINTERTOFINDFIRSTNULLCHAR(ŠBNE.S‚LOP1BRANCHIFNOTNULLCHARACTER3ŠSUB.L‚#2,A2ŽA2NOWPOINTSTOLASTCHARONCMDLINE<ŠMOVE.LA2,COMEND-B(A6)„SAVEENDOFCOMMANDLINEFORMESSAGE ŠMOVE.LD5,D0ŠBTSTƒ#22,D0INPUTFIELDNULL?ŠBNE„ERR3YES-ERROR#*Check for valid input file name(s)ŠLEA„CMDLNE(PC),A0CŠMOVE.LA0,EDITSVA0-B(A6)‚Setuppointertonextfilenameoninput8ŠMOVE.L#1,EDITRTN-B(A6)ƒSetflagformoreoninputline;NXTIN2„LEA„CMDFHS(PC),A0†Freecurrentlyassignedinputfile%ŠMOVE.WFHSCMD(A0),-(A7)ƒSavecommand6ŠMOVE.W#FHCLOS,FHSCMD(A0)PreparetocloseinputfileŠTRAPƒ#3/ŠMOVE.W(A7)+,FHSCMD(A0)ƒRestoreformercommand;ŠMOVE.LEDITSVA0-B(A6),A0‚SaveaddrofnextinputfilenameŠMOVE.LEDITRTN-B(A6),D0 ŠBTSTƒ#0,D00ŠBEQ.S‚CKOBJŽBranchifdonecheckinginputfiles%ŠBSR„SETDEFPUTDEFAULTSINFHSBLOCKŠMOVE.LA0,-(A7)<ŠLEA„CMDFHS(PC),A6†FHSP.B.addr.neededforEDITFILE,SETDEF ŠBSR„EDITFILEŠMOVE.L(A7)+,A0ŠLEA„B(PC),A6REBASEA6 ŠTST.L‚D0ŠBMI„ERR5INPUTFILEERROR ŠBSR„NEWIN ŠBEQ.S‚NXTIN2#ŠBRA„IOERRŽComplainonassignerror(*INPUT FILE NAME LOOKS OKAY-CHECK OBJECT*…OUTPUTFILEFIELD+CKOBJ…BTSTƒ#14,D5WASOUTPUTFIELDENTERED? ŠBNE„SYS15ŽNO-USEDEFAULTVALUES7*SEE IF VOLUME:USER NO. SPECIFIED FOR TEMP. OUTPUT FILEŠLEA„TMPFHS(PC),A6 ŠBSR„EDITFILEŠLEA„B(PC),A6‹REBASEA6ŠMOVE.LD0,D6ŽSAVESTATUS ŠBMI„ERR43*MAKE SURE ONLY VOLUME AND USER NO. ENTERED AT MOST ŠBTSTƒ#1,D0ŽDEVICENAMEENTERED?ŠBNE„ERR4YES-ERROR#ŠAND.L‚#$1C0000,D0ˆCAT .,NAME,EXT?ŠBNE„ERR4YES-ERROR3*TEMPORARY FILE FIELD OKAY-SEE IF BOOT FILE ENTEREDŠLEA„BOOTFHS(PC),A6ŠBSR„SETDEFSETUPDEFAULTSŠMOVE.W#'SY',FHSEXT(A6) ŠBTSTƒ#0,D6ŠBEQ.S‚SYS10ŽNOBOOTFILE.ŠMOVE.W#'SY',FHSEXT(A6)ƒSETDEFAULTEXTENSION ŠBSR„EDITFILEŠLEA„B(PC),A6‹REBASEA6 ŠTST.L‚D0 ŠBMI„ERR6 ŠBTSTƒ#1,D0ŽDEVICENAMEENTERED?ŠBNE„ERR6YES-ERROR ŠBTSTƒ#0,D0ŠBNE„ERR6CAN'THAVE'/' *SEE IF LISTING DEVICE SPECIFIED"SYS10…CMP.B‚#CR,D1ATENDOFLINE?ŠBEQ.S‚SYS15ŽYESŠCMP.B‚#';',D1ŠBEQ.S‚SYS15ŽBRANCHIFYESŠLEA„LISFHS(PC),A6ŠBSR„SETDEFSETUPDEFAULTS3ŠMOVE.W#'LS',FHSEXT(A6)ƒDEFAULTTO'.LS'EXTENSION ŠBSR„EDITFILEŠLEA„B(PC),A6‹REBASEA6 ŠTST.L‚D0 ŠBMI„ERR7)*DEVICE NAME OR FILE NAME MUST BE ENTERED ŠBTSTƒ#1,D0ŠBNE.S‚SYS12ŽDEVICENAMEŠBTSTƒ#19,D0NAMEENTERED?ŠBEQ„ERR7NOLISTDEVICE-ERROR/SYS12…CMP.B‚#CR,D1SHOULDNOWBEATENDOFLINEŠBEQ.S‚SYS14ŽBRANCHIFYESŠCMP.B‚#';',D1ŠBNE„ERR1BRANCHIFNO*ASSIGN LIST DEVICE,SYS14…AND.W‚#(1<<14+1<<1),D0ƒSEEIFJUST'#'ŠCMP.W‚#(1<<14+1<<1),D0ŠBEQ.S‚SYS15ŽBRANCHIFYES3ŠMOVE.B#1,LDFLG-B(A6)…INDICATELISTDEVICEENTEREDSYS13…LEA„LISFHS(PC),A5 ŠFHSCALL(A5) ŠBEQ.S‚SYS20ŠCMP.B‚#FSTANNM,D0ˆNOFILE? ŠBNE„IOERRŽNO*YES-TRY TO ALLOCATE FILE!ŠMOVE.W#FHASGN+FHALLO,FHSCMD(A0) ŠBRA.S‚SYS137*NO LIST DEVICE-ASSIGN TO LOG DEVICE (DO SEND AND KEEP)SYS15…LEA„LISFHS(PC),A0ŠMOVE.W#FHCHLU,FHSCMD(A0)!ŠMOVE.W#FOPKEP+FOPSLU,FHSOPT(A0)ŠMOVE.B#LDFLUN,FHSLUA(A0)ŠMOVE.B#LSLUN,FHSLUB(A0)ŠCLR.L‚FHSTSK(A0)ŠCLR.L‚FHSSES(A0) ŠFHSCALL(A0)ŠBNE„IOERRŽUNEXPECTEDERROR'*IF TEMPORARY VOLUME NOT SPECIFIED, USE*…VOLUMEFORCOMMANDFILESYS20…LEA„TMPFHS(PC),A1ŠBTSTƒ#14,D5ANYOUTPUT?)ŠBNE.S‚SYS21ŽNO-USECMDVOLUMEASDEFAULTŠBTSTƒ#14,D6NULLVOLUME?ŠBEQ.S‚SYS22ŽNO'SYS21…MOVE.LSAVEREG+DUV(PC),FHSVOL(A1)SYS22…BTSTƒ#14,D5ANYOUTPUT?ŠBNE.S‚SYS23ŽNOŠBTSTƒ#13,D6NULLUSERNO.?ŠBEQ.S‚SYS24ŽNO+SYS23…MOVE.WSAVEREG+DUN(PC),FHSUSN(A1)YES-SYS24…FHSCALL(A1)ŽALLOCATE/ASSIGNTEMP.FILE ŠBNE„IOERR*£01/10/85‚vvvvvŠBTST.B#COPT,OPTFLG-B(A6)ŠIFTHEN.S=ŠLEA„SYMFHS(PC),A6†GettheaddressoftheFHSparameterblock1ŠBSR„SETDEFsowecangosetthedefaultsforthe *£filename,ŠMOVE.W#'SY',FHSEXT(A6)ƒDefaultto.SYfile*ŠLEA„B(PC),A6‹ReloadtheBeginningaddress0ŠFHSCALLSYMFHS(PC)ˆDeletethesymboltablefileFŠMOVE.L#$000A0000,FHSSIZ(A0)Thekeysizeforthesymboltableoutput"*£filewillbe10characterslong.<ŠMOVE.W#FHALLO,FHSCMD(A0)Getreadytoallocatesymbolfile5ŠFHSCALLSYMFHS(PC)ˆGoallocatethesymboltablefile ŠBNE„IOERRŠENDI*£01/10/85‚^^^^^** LIST COMMAND LINEŠLEA„COMMSG(PC),A1ŠMOVE.LCOMEND-B(A6),A2ŠBSR„LISOUTLISTCOMMANDLINE ŠBNE„IOERRŠBSR„BKLISŽLISTTWOBLANKLINES ŠBSR„BKLIS ŠBNE„IOERR:ŠLEA„CMDFHS(PC),A0†Listcommandfilenamewe'reprocessingŠPASS1.STOPT0 ŠBSR„NEWLST** GET SEGMENT FOR SYMBOL TABLE*FTOPT0…MOVE.W#$2000,MSBSYM+8-B(A6)‚SEGMENTDIRECTIVE(NOMEMORYAVAIL)0ŠMOVE.LOPTSZE-B(A6),D0„CALCULATESEGMENTLENGTH0ŠMULU.W#SYMLEN,D0‰SYMBOLLENGTH*VALUEASKEDFOR5ŠADD.L‚#PDEF,D0‹LENGTHASKEDFOR+PREDEFINEDSYMBOLS<ŠMOVE.LD0,MSBSYM+20-B(A6)STUFFSEGMENTLENGTHINMSBTABLETOPT3…MOVE.L#GTSEG,D0ŠLEA„MSBSYM(PC),A0†GETSEGMENTŠTRAPƒ#1 ŠBEQ.S‚TOPT1ŽBRANCHIFNOERRORS-ŠCMP.W‚#8,D0ŽPHYSICALMEMORYAVAILABLEERROR?ŠBEQ.S‚TOPT2ŽBRANCHIFYES#ŠBRA„ERR18ŽSEGMENTALLOCATIONERRORTOPT4…MOVE.LA0,SYMADR-B(A6)„SAVEBASEADDRESSOFSYMBOLTABLE%ŠMOVE.LA0,A1ŽBaseaddressofsegment,ŠMOVE.LMSBSYM+20-B(A6),D0Lengthofsegment ŠADD.L‚#$FF,D0;ŠAND.L‚#$FFFFFF00,D0†Rounduptonearest256byteboundary.'TOPT6…CLR.L‚(A1)+ŽClearoutthesegment ŠSUB.L‚#4,D0 ŠBNE.S‚TOPT6*3* MOVE PREDEFINED SYMBOLS INTO NEW SYMBOL TABLE AND* INITIALIZE DATA AREAS.+ŠLEA„SYMSTR(PC),A1†VALUESSTARTTOBEMOVED$ŠMOVE.L#PDEF,D0‹#OFVALUESTOMOVESEG1L…MOVE.B(A1)+,(A0)+ ŠDBF„D0,SEG1L ŠSUB.L‚#1,A0?ŠMOVE.LA0,SYMSTR1-B(A6)ƒINITIALIZESTARTOFUSERTABLESYMBOLS0ŠMOVE.LA0,NXTSYM-B(A6)„POINTSTONEXTAVAILABLEŠMOVE.LSYMADR-B(A6),D04ŠLEA„MSBSYM+20(PC),A0ƒCALCULATEENDOFTABLEADDRESSŠADD.L‚(A0),D06ŠMOVE.LD0,SYMEND-B(A6)„INITIALIZEENDOFSYMBOLTABLE*5* IF 'S' OPTION IS SPECIFIED, THEN READ START UP LINEŠBTSTƒ#SOPT,OPTFLG-B(A6)"ŠBEQ.S‚NOSBRANCHIFNO'S'OPTION*7* 'S' OPTION SPECIFIED, TELL THEM TO ENTER RESTART LINEŠLEA„RSMSG(PC),A1ŠLEA„RSMSGE(PC),A2ŠBSR„LOGIOUTŒIMAGEMODEOUTPUT ŠBSR„BKLOGŠLEA„REPLY(PC),A1ŠLEA„REPLYE(PC),A2ŠBSR„LOGINŽTAKEKEYEDININPUT ŠBNE„IOERR:ŠMOVE.LIOSLEN(A0),REPLGH-B(A6)SAVELENGTHOFKEYEDINPUT** LIST RESTART LINEŠLEA„RLIST(PC),A1ŠLEA„RLISTE(PC),A2 ŠBSR„LOGLISŠLEA„REPLY(PC),A1 ŠMOVE.LA1,A2ŠADD.L‚REPLGH-B(A6),A2 ŠSUB.L‚#1,A2 ŠBSR„LOGLIS ŠBSR„BKLOGLIS*#* FREE CDFLUN SINCE WE NEVER USE ITNOS‡LEA„FREFHS(PC),A0ŠTRAPƒ#3 ŠBNE„IOERR ŠBRA„DONE01.3*-*********************************************4* FROM TASKMTB TO HERE WE OVERLAY THE INITIALIZATION*ƒCODETOSAVESPACE-*********************************************'TASKM1„DS.BƒNOTASKS*EACHENT-(*-TASKMTB)TSKMSGEƒDS.Lƒ1ŠPAGE*%* Subroutine to assign new input file6*ƒEnterwithA0pointingtofilenamefromcommandline *ƒOnexit:,*†D0‡=returncode,0isOKnonzeroiserror'*†EDITRTN‚=savedD0fromEDITFILEcall(*†EDITSVA0=savedA0fromEDITFILEcall NEWIN…EQU„*ŠMOVE.LEDITRTN-B(A6),D0 ŠBTSTƒ#0,D0,ŠCRASH.EQ*+1ŽCrashifnomoreoninputline$ŠLEA„CMDFHS(PC),A6†FHSP.B.location&ŠBSR„SETDEFSetdefaultsintoFHSP.B.*ŠBSR„EDITFILE‹PlugfilenameintoFHSP.B..ŠLEA„B(PC),A6‹RebaseA6forposindepregister;ŠMOVE.LD0,EDITRTN-B(A6)ƒBit#0setifmoreoninputfield.;ŠMOVE.LA0,EDITSVA0-B(A6)‚Savepositionofnextinputfile. ŠTST.L‚D0ŠBMI.S‚NEWINEXŠFHSCALLCMDFHS(PC) NEWINEXƒRTSŠPAGEA*LIST DEVICE ASSIGNED-MUST ASSIGN COMMAND FILE AND TEMPORARY FILE$*ƒPointtobeginningofcommandline*ƒAssignoriginalcommandfile+*ƒSetrecordcountersbacktoinitialstate1SYSIN…LEA„CMDLNE(PC),A0†Addressof1stinputfile>ŠMOVE.L#1,EDITRTN-B(A6)ƒInsurethatNEWINthinksthereisone ŠBSR„NEWINŽAssigntheinputfile ŠBNE„IOERRŠMOVE.L#-1,CMDIOS+IOSRRN-B(A6)ŠCLR.L‚GLOBCNT-B(A6).ŠCLR.L‚STKCNT-B(A6)‡ClearIFxxnestingcounter<ŠMOVE.L#-1,PROCNT-B(A6)ƒResetprocessingindicatorforIFxxŠPAGE@*ALL FILES BUT BOOT FILE HAVE BEEN ASSIGNED-PROCESS COMMAND FILEANXTCMD„ADD.L‚#1,CMDIOS+IOSRRN-B(A6)Advancerandomrecordpointer3ŠADD.L‚#1,GLOBCNT-B(A6)ƒAddonetotheglobalcountŠIOSCALLCMDIOS(PC)ˆREADRECORD ŠBEQ„SYS32ŠCMP.B‚#ISTAEOF,D0ˆEndoffile?ŠBNE„IOERRŽBranchifno>ŠSUB.L‚#1,GLOBCNT-B(A6)ƒAdjustglobalcountertokeepinsync.0ŠTST.W‚INCLNEST-B(A6)…AreweinanINCLUDEfile?0ŠBEQ.S‚NXTCMD.1‹Branchifno-we'rereallydone$ŠBSR„RSTRINCŒReinstatepreviousfile"ŠBRA.S‚NXTCMDGoreadnextcommand*F*Seeifanymorefilesexistoninput.‚Ifso,assignthemandproceed *ƒnormally.ANXTCMD.1‚LEA„CMDFHS(PC),A0†FreethecurrentlyassignedinputfileŠMOVE.WFHSCMD(A0),-(A7)ŠMOVE.W#FHCLOS,FHSCMD(A0)ŠTRAPƒ#3 ŠBNE„IOERR*ŠMOVE.W(A7)+,FHSCMD(A0)'ŠBTSTƒ#0,EDITRTN-B+3(A6)Istheremore?ŠBEQ.S‚DONE01Branchifno.:ŠMOVE.LEDITSVA0-B(A6),A0‚Addressofnextinputfilename. ŠBSR„NEWINŽAssignnewinputfile-ŠBNE„ERR5ShouldnevertakethiserrorbranchŠPASS1.SNXTCMD.2 ŠBSR.S‚NEWLSTListnewfilename2NXTCMD.2‚MOVE.L#-1,CMDIOS+IOSRRN-B(A6)SetupRRN ŠBRA.S‚NXTCMD*.* List name of new file for concatenated input<*ƒEntryA0-pointstoFHSP.B.wherenewfilenameresides.*ƒExit‚A2,D0destroyed*NEWL ST„MOVEM.LA0/A1,-(A7)ŠLEA„FHSVOL(A0),A0ŠLEA„FILMSG1I(PC),A1 ŠBSR„FFNAMEŠLEA„FILMSG1(PC),A1ŠLEA„FILMSG1E(PC),A2 ŠBSR„LISOUTŠMOVEM.L(A7)+,A0/A1ŠRTS*DONE01„PASSL.SDONE01.59* See if we need to do one more pass before the last pass*?ŠBCLRƒ#UNDEF,MSCFLG-B(A6)Clearflagindicatingundefinedsyms.1ŠBEQ.S‚LPASSŽBranchforlastpassifnoundefined9ŠBCLRƒ#INSTF,MSCFLG-B(A6)Didweinsertanyonthispass?0ŠBEQ.S‚LPASSŽBranchifno-dolastpassanyway.*&* We cannot perform the last pass yet.*ƒAdvancepasscounter.*ƒPutoutnextpassmessage.*ƒGotoSYSIN.*DONE01.3‚ADD.W‚#1,PASS-B(A6) ŠCLR.L‚D0ŠMOVE.WPASS-B(A6),D0 ŠBSR„BDCONVŠMOVE.LD0,PASSNO-B(A6) ŠBSR„BKLOGŠLEA„PASS1M(PC),A1ŠLEA„PASS1ME(PC),A2 ŠBSR„LOGOUT ŠBSR„BKLOG ŠBRA„SYSIN** Set up for last pass:*ƒSetpasscounternegative*ƒDisplaynewpassmessage *ƒGotoSYSIN*/LPASS…MOVE.W#-1,PASS-B(A6)…Advancepassnumber*#ŠBSR„BKLOGŽDisplaynewpassmessageŠLEA„PASSLM(PC),A1ŠLEA„PASSLME(PC),A2 ŠBSR„LOGOUT ŠBSR„BKLOG* ŠBRA„SYSIN&* Do we have a missing ENDC statement?3DONE01.5‚TST.L‚STKCNT-B(A6)‡MISSINGENDCSTATEMENT?!ŠBNE„ERR16ŽBRANCHTOERRORIFYESŠPAGE**END OF COMMAND FILE0ŠBSR„FINTSKWRAPUPPREVIOUSTASK/PROCESSIFANYB*TEMPORARY FILE HAS BEEN GENERATED-NOW MUST CREATE CONTIGUOUS FILE>*1ST POSITION TO END OF TEMP. FILE TO DETERMINE LENGTH OF FILEŠLEA„TMPIOS(PC),A0ŠMOVE.W#IOPOST,IOSFCT(A0)ŠMOVE.W#IOPRAN,IOSOPT(A0)ŠMOVE.L#-1,IOSRRN(A0) ŠIOSCALL(A0) ŠBEQ.S‚DONE02$*WAS ANYTHING WRITTEN TO TEMP. FILE?ŠCMP.B‚#ISTAEOF,D03ŠBNE.S‚DONE02Branchifwehaveinfoinoutputfile*ŠLEA„MSG14(PC),A1‡'NOOUTPUTFILECREATED'ŠLEA„MSG14E(PC),A2 ŠBSR„LOGLIS ŠBRA„DMSG5 DONE02„EQU„**RRN=LAST RECORD IN FILEŠMOVE.LIOSRRN(A0),D0-ŠADD.L‚#2,D0ŽD0=LENGTHOFFILE(INCLUDESLIB)2ŠBTSTƒ#ROPT,OPTFLG-B(A6)WAS'R'OPTIONSPECIFIED?ŠBEQ.S‚DONE3ŽBRANCHIFNO*D* SINCE 'R' OPTION WAS SPECIFIED, SIZE OF FINAL OUTPUT FILE MUST NOTE*ƒINCLUDETHESPACEREQUIREDFORTHETCB'SWHICHARETWOBLOCKSLONG.?*ƒITMUSTINSTEADREFLECTTHESIZEREQUIREDFORTHEMINI-TCB'S.**ƒCORRECTD0TOREFLECTTHISSMALLERSIZE.*ŠMOVE.LD0,SREC-B(A6)5ŠSUB.L‚#2,SREC-B(A6)†WHERETOBEGINREADINGTEMPFILE ŠCLR.L‚D11ŠMOVE.WTSKCNT-B(A6),D1„NUMBEROFTASKSPROCESSED ŠMOVE.LD1,D24ŠLSL.L‚#1,D2Ž*2TOREFLECTBLOCKCOUNT(FULLTCB'S)4ŠMULUƒ#MTCBLN,D1‰REFLECTSBYTELENGTHFORMINI-TCB'SŠADD.L‚#255,D1,ŠLSR.L‚#8,D1ŽD1HAS#BLOCKSFORSHORTTCB'S3ŠSUB.L‚D1,D2ŽD2HASEXCESSCOUNTREQ.FORFULLSIZEŠSUB.L‚D2,D0ŽCORRECTD0SIZE*#* SAVE START ADDRESS OF SHORT TCB'SŠMOVE.LD0,TREC-B(A6)8ŠSUB.L‚#1,TREC-B(A6)†RRNTOWRITNEXTSHORTTCBFRAMETOŠMOVE.LD0,STARTTCB-B(A6)4ŠSUB.L‚D1,STARTTCB-B(A6)‚BASEADDRESSOFSHORTTCB'S*I* COMPUTE BNIN (NEXT IN TOP POINTER ADDRESS FOR SHORT TCB'S WITHIN FRAME) ŠCLR.L‚D11ŠMOVE.WTSKCNT-B(A6),D1„NUMBEROFTASKSPROCESSEDŠBEQ.S‚DONE3ŽBRANCHIFNONEŠMULUƒ#MTCBLN,D1 ŠDIVUƒ#256,D1 ŠCLR.W‚D1ŠSWAPƒD1ŠBNE.S‚DONE2¯010485ŠMOVE.LBBASE2-B(A6),D1¥010485ŠBRA.S‚DONE4¯010485"DONE2…ADD.L‚BBASE1-B(A6),D1¥0104859DONE4…MOVE.LD1,BNIN-B(A6)†TOPNEXTINADDRESSWITHFRAME.DONE3…MOVE.LD0,BOOTFHS+FHSSIZ-B(A6)SAVESIZE0*REWIND TEMP. FILE TO BE READY TO READ FROM FILEŠMOVE.W#IOREWD,IOSFCT(A0) ŠIOSCALL(A0) ŠBNE„IOERR-*NOW ATTEMPT TO ALLOCATE AND ASSIGN BOOT FILEDONE05„FHSCALLBOOTFHS(PC) ŠBEQ.S‚DONE08"ŠCMP.B‚#FSTADNM,D0ˆDUPLICATEFILE?ŠBNE„IOERRŽNO-QUIT *BOOT FILE ALREADY EXISTS-DELETEŠMOVE.W#FHDELT,FHSCMD(A0) ŠFHSCALL(A0) ŠBNE„IOERR!ŠMOVE.W#FHALLO+FHASGN,FHSCMD(A0) ŠBRA.S‚DONE051*READ TEMPORARY FILE AND WRITE TO CONTIGUOUS FILEDONE08„LEA„TMPIOS(PC),A0ŠLEA„BOOTIOS(PC),A1-ŠCLR.W‚IOSOPT(A1)‰ReverttosequentialaccessŠCLR.L‚IOSRRN(A1)ŠMOVE.W#IOREAD,IOSFCT(A0)ŠCLR.W‚IOSOPT(A0) ŠMOVE.LSUBBUF1-B(A6),IOSSAD(A0) ŠMOVE.LSUBBUF2-B(A6),IOSEAD(A0)ŠMOVE.LIOSSAD(A0),IOSSAD(A1)ŠMOVE.LIOSEAD(A0),IOSEAD(A1)ŠMOVE.W#IOWRIT,IOSFCT(A1)ŠM OVE.B#BFLUN,IOSLUN(A1)*BUILD LIB FOR BOOT FILEŠMOVE.LIOSSAD(A1),A0DONE09„CLR.L‚(A0)+ŽZEROLIBŠCMP.L‚IOSEAD(A1),A0 ŠBLS.S‚DONE09;*DON'T NEED ALL INFO. FILLED-BUT MUST HAVE SEGMENT 0 INFOL.%*FILL IN SEG LENGTH AND START ADDRESSŠMOVE.LIOSSAD(A1),A0ŠMOVE.LBOOTFHS+FHSSIZ-B(A6),D0ŠSUB.L‚#1,D0ŽADJUSTFORLIBŠMULUƒ#$100,D0.ŠMOVE.LD0,LIBSAD+SADLEN(A0)LENGTHOFSEGMENT ŠSUB.L‚#1,D0ŠADD.L‚BASEADDR-B(A6),D0(ŠASR.L‚#8,D0ŽENDINGADDR.OF1STSEGMENTŠMOVE.WD0,LIBMID+2(A0)ŠMOVE.LBASEADDR-B(A6),D0 ŠLSR.L‚#8,D0'ŠMOVE.WD0,LIBMID(A0)†MIDSTARTADDRESS3ŠMOVE.LPROCSTR-B(A6),LIBENT(A0)SETUPEXEC.ADDR.AŠMOVE.LBASEADDR-B(A6),LIBSAD+SADSTR(A0)SEGMENTSTARTINGADDRESS5*SET UP TASK NAME AND SEGMENT NAME BASED ON FILE NAME.ŠMOVE.LBOOTFHS+FHSFIL-B(A6),LIBSAD+SADNAM(A0) ŠMOVE.B#'0',LIBSAD+SADNAM+3(A0)'ŠMOVE.LBOOTFHS+FHSFIL-B(A6),LIBTSK(A0)*SET UP END OF SEGMENT INFO.-ŠMOVE.L#$FFFFFFFF,LIBSAD+SADLEN+LIBSADLN(A0)ŠMOVE.W#$FFFF,LIBMID+2+4(A0)ŠIOSCALL(A1)ŽWRITEOUTLIB ŠBNE„IOERRDONE102ŠBTSTƒ#ROPT,OPTFLG-B(A6)WAS'R'OPTIONSPECIFIED?ŠBNE.S‚DONE80BRANCHIFYESŠIOSCALLTMPIOS(PC) ŠBEQ.S‚DONE40ŠCMP.B‚#ISTAEOF,D0 ŠBNE„IOERR ŠBRA„DONE20C*IF THIS IS FIRST DATA SECTOR, INSERT EXEC. ADDR. IN RESTART VECTORDONE40ŠTST.L‚SEC0SW-B(A6) ŠBNE.S‚DONE45ŠMOVE.L#1,SEC0SW-B(A6)ŠMOVE.LBOOTIOS+IOSSAD-B(A6),A0ŠMOVE.LPROCSTR-B(A6),4(A0)'DONE45„IOSCALLBOOTIOS(PC)‡WRITESECTOR ŠBNE„IOERR ŠBRA„DONE10*I*'R'OPTIONWASSPECIFIED.‚PROCESSTEMPORARYBOOTFILEINREVERSEORDER,*ƒPLACINGTCB'SATENDOFFILE.* DONE80„EQU„*1ŠCLR.W‚PLCTCB-B(A6)‡NUMBEROFTCB'SPLACEDSOFARCŠMOVE.LTCBLST-B(A6),NXTTCB-B(A6)POINTTOBASEADDROFHIGHESTTCB>ŠADD.L‚#1,NXTTCB-B(A6)„POINTTOTSTPORTIONOFTCB(TEMPFILE)!ŠMOVE.LSTARTTCB-B(A6),DREC-B(A6)6ŠSUB.L‚#1,DREC-B(A6)†WHERETOPLACEFIRSTNON-TCBPART>ŠOR.Wƒ#IOPRAN,TMPIOS+IOSOPT-B(A6)FORCERAN.READOFTEMPFILE@ŠOR.Wƒ#IOPRAN,BOOTIOS+IOSOPT-B(A6)FORCERAN.WRITEOFBOOTFILE8DONE85„MOVE.LSREC-B(A6),D1†WHERETORETRIEVENEXTBLOCKŠBMI„DONE20BRANCHIFNOBLOCKS,ŠCMP.L‚#1,D1ŽISTHIS1STRECOFSOURCEFILE?*ŠBEQ.S‚DONE88BRANCHIFYES-NOTCBCHECK-ŠCMP.L‚NXTTCB-B(A6),D1„ISTHISATCBSECTION?ŠBEQ.S‚PROCTCBŒBRANCHIFYES*** READ TEMP FILE AND WRITE IT TO BOOT FILE/DONE88„MOVE.LD1,TMPIOS+IOSRRN-B(A6)SOURCERRN7ŠMOVE.LDREC-B(A6),BOOTIOS+IOSRRN-B(A6)DESTINATIONRRNŠIOSCALLTMPIOS(PC) ŠBNE„IOERR<ŠCMP.L‚#1,DREC-B(A6)†ISTHISTHEFIRSTBLOCKOFMEMORYIMAGEŠBNE.S‚DONE90BRANCHIFNOT(* PLUG START ADDRESS INTO RESTART VECTORŠMOVE.LBOOTIOS+IOSSAD-B(A6),A0ŠMOVE.LPROCSTR-B(A6),4(A0)*?DONE90„IOSCALLBOOTIOS(PC)‡WRITEBLOCKTOTHEMEMORYIMAGEFILE ŠBNE„IOERRŠSUB.L‚#1,SREC-B(A6)ŠSUB.L‚#1,DREC-B(A6) ŠBRA.S‚DONE85*I*BUILDMINITCBANDPLACEITINSTAGINGBUFFER.‚WRITESTAGINGBUFFEROUT#*ƒIFNEWTCBFILLSOROVERFLOWSIT. PROCTCBƒEQU„*6ŠMOVE.LBNIN-B(A6),A2†TOPADDRESS+1OFMINITCBOUTPUT ŠMOVE.LA2,A11ŠSUB.L‚#MTCBLN,A1‰BASEADDRESSOFMINITCBOUTPUT&ŠMOVE.L#'!TCB',(A1)‡PLACEEYECATCHER** READ TST SECTION OF TCB0*‚SRECPOINTSTORRNCONTAINING2NDBLOCKOFTCB@ŠMOVE.LSREC-B(A6),TMPIOS+IOSRRN-B(A6)SOURCERRNFROMTEMPFILEŠIOSCALLTMPIOS(PC) ŠBNE„IOERR*#* CONSTRUCT TST PORTION OF MINI-TCB@ŠMOVE.LTMPIOS+IOSSAD-B(A6),A3ƒA3POINTSTOBASEOFFULLTCB+256 ŠMOVE.LA3,A4FŠLEATSTBEGIN+TSTMMU-256(A4),A4A4POINTSTOTSTMMUINFOFROMFULLTCB ŠMOVE.LA1,A5<ŠLEA„MTSTMMU(A5),A5…A5POINTSTOSPOTINMINI-TCBTOMOVETO'ŠMOVE.L#TSTMMUSZ,D0‡#BYTESINMMUINFO(DONE120ƒMOVE.L(A4)+,(A5)+ˆMOVEMMUINFO ŠSUB.L‚#4,D0ŠBNE.S‚DONE120 ŠMOVE.LA3,A4G‰LEATSTBEGIN+TSTATTR-256(A4),A4A4POINTSTOTSTATTRINFOFROMFULLTC ŠMOVE.LA1,A5=ŠLEA„MTSTATTR(A5),A5„A5POINTSTOSPOTINMINI-TCBTOMOVETO)ŠMOVE.L#TSTATTRSZ,D0†#BYTESINATTRINFO)DONE130ƒMOVE.L(A4)+,(A5)+ˆMOVEATTRINFO ŠSUB.L‚#4,D0ŠBNE.S‚DONE130*+* CONSTRUCT INFO FROM 1ST BLOCK OF FULL TCB:ŠSUB.L‚#1,SREC-B(A6)†POINTTORECORDINFILEFOR1STBLO CK&ŠMOVE.LSREC-B(A6),TMPIOS+IOSRRN-B(A6))ŠIOSCALLTMPIOS(PC)ˆREAD1STBLOCKOFTCB ŠBNE„IOERR:ŠSUB.L‚#1,SREC-B(A6)†DECREMENTSOURCEREC#FORNEXTFETCHŠMOVE.LTCBALL(A3),NXTTCB-B(A6)5ŠADD.L‚#1,NXTTCB-B(A6)„POINTTO2NDBLOCKOFNEXTTCB ŠMOVE.LTCBNAME(A3),MTCBNAME(A1)"ŠMOVE.LTCBSESSN(A3),MTCBSESSN(A1)ŠMOVE.LTCBMON(A3),MTCBMON(A1)"ŠMOVE.LTCBMON+4(A3),MTCBMON+4(A1) ŠMOVE.WTCBUSER(A3),MTCBUSER(A1) ŠMOVE.BTCBLPRI(A3),MTCBLPRI(A1)"ŠMOVE.WTCBSTATE(A3),MTCBSTATE(A1) ŠMOVE.WTCBATTR(A3),MTCBATTR(A1)"ŠMOVE.LTCBENTRY(A3),MTCBENTRY(A1)*** MINI-TCB HAS BEEN CONSTRUCTED IN BUFFER.B*ƒIFBASEOFNEWLYCONSTRUCTEDMINI-TCB<=BBASE(BASEOFBUFFER),@*ƒWRITEOUTBUFFERANDADJUSTREMAININGPORTIONOFTCBTOTOPOF *ƒBUFFER.*+ŠMOVE.LA1,BNIN-B(A6)†NEWTOP+1INDICATORŠCMP.L‚BBASE1-B(A6),A1*ŠBHI„DONE85BRANCHIFNONEEDTOWRITEOUT*0* WRITE OUT THE MINI-TCB BUFFER TO THE BOOT FILE6ŠMOVE.LBOOTIOS+IOSSAD-B(A6),-(A7)SAVEOLDPARAMETERS"ŠMOVE.LBOOTIOS+IOSEAD-B(A6),-(A7)"ŠMOVE.LBOOTIOS+IOSRRN-B(A6),-(A7)7ŠMOVE.LBBASE1-B(A6),BOOTIOS+IOSSAD-B(A6)STARTADDRESS)ŠMOVE.LBBASE2-B(A6),BOOTIOS+IOSEAD-B(A6)*ŠSUB.L‚#1,BOOTIOS+IOSEAD-B(A6)…ENDADDRESS'ŠMOVE.LTREC-B(A6),BOOTIOS+IOSRRN-B(A6)ŠIOSCALLBOOTIOS(PC) ŠBNE„IOERR:ŠSUB.L‚#1,TREC-B(A6)†ADJUSTNEXTTCBBUFFEROUTPUTADDRESS9ŠMOVE.L(A7)+,BOOTIOS+IOSRRN-B(A6)RESTOREOLDPARAMETERS"ŠMOVE.L(A7)+,BOOTIOS+IOSEAD-B(A6)"ŠMOVE.L(A7)+,BOOTIOS+IOSSAD-B(A6)*/* ADJUST REMAINDER OF MINI-TCB TO TOP OF BUFFERŠADD.L‚#256,BNIN-B(A6)ŠLEA„256(A1),A2DONE140ƒCMP.L‚BBASE1-B(A6),A1(ŠBEQ„DONE85BRANCHIFOVERFLOWALLMOVEDŠMOVE.B(A1)+,(A2)+ŠBRA.S‚DONE140*DONE20„LEA„TMPFHS(PC),A0ŠMOVE.W#FHCLOS,FHSCMD(A0)ŠFHSCALL(A0)ŽCLOSETEMP.FILE ŠBNE„IOERRŠMOVE.B#BFLUN,FHSLUN(A0)ŠFHSCALL(A0)ŽCLOSEBOOTFILE ŠBNE„IOERR!*PRINT LIST OF TASK/TCB ADDRESSESŠLEA„FFEED(PC),A1 ŠLEA„1(A1),A2ŠBSR„LISOUTOUTPUTFORMFEEDŠLEA„TASKMSG(PC),A1ŠLEA„TASKMTB-1(PC),A2"ŠBSR„LISOUTOUTPUTTASKMAPHEADERŠBSR„BKLISŽOUTPUTBLANKLINE ŠBNE„IOERRŠLEA„TASKMTB(PC),A1ŠMOVE.LTSKLST-B(A6),A3ŠSUB.L‚#1,A3ŽENDOFLIST2DONE30„CMP.L‚A3,A1ŽHAVEWELISTALLTHEADDRESSES?ŠBCC„DMSGBRANCHIFYES*ŠLEA„EACHENT-1(A1),A2ƒENDOFENTRYTOLIST ŠBSR„LISOUT ŠBNE„IOERR)ŠLEA„1(A2),A1‹POINTTONEXTENTRYTOLIST ŠBRA„DONE30ŠPAGE**PROCESS NEXT COMMAND RECORD* SYS32…EQU„*$ŠBSR„PROCAreweinprocessingmode?-ŠBNE„SYS32.5ŒBranchifno-donotsubstitute*C*Seeifthereareanysubstitutionstobemadeinthisline,‚IfsoG*ƒthenechothethelineexactlyasitappearsbeforethesubstitution.,ŠMOVE.LIOSSAD(A0),A1†Beginningoflineread/ŠMOVE.LIOSLEN(A0),D3†NumberofcharactersreadSYS32.3ƒBTST.B#COPT,OPTFLG-B(A6)Seeifthe'C'optionissetŠIFTHEN.S,ŠMOVEM.LD0/A0-A1,-(A7)„Saveusersregisters=ŠLEA„SYMBUFF+2+PARLEN(PC),A1Gettheaddressofthebufferof*£wherethefilenamewillgo@ŠLEA„CMDFHS+FHSCLG(PC),A0Gettheaddressoftheparameterblock'*£thatcontainsthefilenamebeingusedŠFOR.B‚D0=#1TO#18DO.S3ŒMOVE.B(A0)+,(A1)+†MovethefilenametothebufferŠENDF/ŠMOVEM.L(A7)+,D0/A0-A1„RestoreusersregistersŠENDI*£01/10/85‚^^^^^$ŠBSR„SUB00ŽMAKESYSGENSUBSTITUTIONS!ŠBMI.S‚SYS32.5ŒBRANCHONOVERFLOW%ŠBSR„SBARGŽMAKESESSIONSUBSTITUTIONS!ŠBEQ.S‚SYS32.5ŒBRANCHIFNOERROR-ŠPASS1.SSYS32.5 ‹Bypasserroroninitialpass.ŠBSR„ERRMSGLETERRORMESSAGEHANDLERCOMPLAIN#ŠBRA„ERRTERMŒERRORTERMINATIONEXIT*-SYS32.5ƒMOVE.LIOSSAD(A0),A1†STARTOFCOMMAND)ŠMOVE.LIOSLEN(A0),D3†GETLENGTHOFINPUT4ŠMOVE.LD3,CMDLGH-B(A6)„SAVELENGTHOFCOMMANDINPUT*C* IF 'S' OPTION SPECIFIED, SEE IF THIS COMMAND SHOULD RESUME NORMAL4*ƒPROCESSING,IFSOTHENTURNOFRESTARTOPTIONBIT.ŠPASS1.SSYS351ŠBTSTƒ#SOPT,OPTFLG-B(A6)WAS'S'OPTIONSPECIFIEDŠBEQ.S‚SYS35ŽBRANCHIFNOŠMOVEM.LA0/A1,-(A7)ŠBSR„MCHTESTŒSEEIFMATCH2ŠBNE.S‚SYS34ŽBRANCHIFTHISCOMMANDDOESNOTMATCH2ŠBCLRƒ#SOPT,OPTFLG-B(A6)CLEARTHE'S'OPTIONFLAG ŠBSR„BKLOGLIS.ŠLEA„RSTS(PC),A1ˆLOGNORMALPROCESSINGMESSAGEŠLEA„RSTSE(PC),A2 ŠBSR„LOGLIS ŠBSR„BKLOGLISSYS34…MOVEM.L(A7)+,A0/A1*SYS35…MOVE.LA1,A2*ŠADD.L‚D3,A2ŽA2=ADDR.OFBYTEAFTERRECORD$ŠMOVE.B#CR,(A2)‹STORECRAFTERREC.3ŠSUB.L‚#2,A1ŽOUTPUT'.'ONLYIFLINEWASPROCESSEDŠMOVE.W#'.',(A1) ŠBSR„PROC#ŠBEQ.S‚SYS35.5ŒBRANCHIFPROCESSING)ŠMOVE.W#'‚',(A1)‰INDICATENOTPROCESSING#SYS35.5ƒMOVE.LCMDIOS+IOSRRN(PC),D0)ŠADD.L‚#1,D0ŽConvertRRNto1-relative...ŠBSR„BDCONŽ...linenumber0ŠLEA„CMDBUFN(PC),A1…Beginningoflinetodisplay(ŠMOVE.LD0,(A1)ŒPlugconvertednumberin)ŠMOVE.LGLOBCNT(PC),D0…GloballinenumberŠBSR„BDCONŽConverttoASCII+ŠLEA„CMDBUFN0(PC),A1„PlugintolistinglineŠMOVE.LD0,(A1)ŠPASS1.SSYS35.8 ŠBSR„LISOUT ŠBNE„IOERRSYS35.8ƒMOVE.LIOSSAD(A0),A1*NOW PARSE COMMAND ŠBSR„SKPSPCŠCMP.B‚#CR,(A1) ŠBEQ„NXTCMD-ŠCMP.B‚#'*',(A1)ŠIFCOMMENTLINE,THENIGNORE"ŠBEQ„NXTCMDBRANCHIFCOMMENTLINE-ŠCMP.B‚#'=',(A1)ŠISTHISADIRECTINVOCATION?ŠBEQ.S‚INVOKŽBRANCHIFYESŠBSR„GETPARGETPARAMETERNAME!ŠBCC.S‚SYS35.95‹INVALIDparameterŠPASS1.SSYS35.95SYS35.9ƒBRA„CERR1*A1 POINTS TO NEXT BYTE:SYS35.95‚MOVE.BD1,TMPSYM+PLEN-B(A6)SAVEPARAMETERLENGTH1*MUST NOW DETERMINE IF PARAMETER IS KNOWN COMMANDŠLEA„CMDTBL(PC),A0SYS36…LEA„TMPSYM(PC),A2 ŠTST.L‚(A0)ŠBEQ„PARENDOFTABLEŠCMP.L‚(A0)+,(A2)+ ŠBNE.S‚SYS38ŽNOMATCH-CHECKNEXTŠCMP.L‚(A0)+,(A2)+ŠBNE.S‚SYS39ŽNOMATCH*PARAMETER IS VALID COMMAND/ŠBSR„PROCAREWEINCONDITIONALPROCESSINGMODE/ŠBEQ.S‚SYS36.5ŒBRANCHIFYES-PROCESSNORMALLY.ŠCMP.W‚#'IF',-8(A0)‡ISTHISAN'IFXX'COMMAND?6ŠBEQ.S‚SYS36.5ŒIFYESTHENBRANCHANDPROCESSNORMALLY1ŠCMP.L‚#'ENDC',-8(A0)…ISTHISAND'ENDC'COMMAND?(ŠBNE„NXTCMDNO-SODON'TPROCESSATALL*(* JUMP TO APPROPRIATE ROUTINE TO PROCESSSYS36.5ƒPASSL.SSYS36.7ŠLEA„PASS1C(PC),A24ŠCMP.L‚A2,A0ŽCanweexecutethisonaninitialpass?ŠBLO„NXTCMDBranchifnoSYS36.7ƒMOVE.L(A0),A0 ŠADD.L‚A6,A0ŽADDINSEGMENTBASE ŠJMP„(A0)SYS38…TST.L‚(A0)+SYS39…TST.L‚(A0)+ ŠBRA„SYS36*1* DIRECTLY INVOKE THE PROGRAM ON THE COMMAND LINE$B+C4A<>D?LNTM\LdHlLt@|D„DŒ;”IœD¤G¬N´S¼OÄJÌJÔPÜ]ä>ì9ôIüUZ wn INVOK…EQU„*ŠPASS1.LNXTCMDŠBSR„PROCAREWEPROCESSING?ŠBNE„NXTCMDBRANCHIFNO*/ŠMOVE.LA1,-(A7)‹SAVEPOINTERINTOCOMMANDLINE2ŠMOVE.LIOSSAD(A0),A1†BASEADDRESSOFCOMMANDLINE ŠBSR„LOGOUTLOGTHECOMMANDLINE2ŠMOVE.L(A7)+,A1‹RESTOREPOINTERINTOCOMMANDLINE*C* DON'T PROCESS '=' INVOCATION IF WE HAVEN'T SEEN RESTART MATCH YETŠBTSTƒ#SOPT,OPTFLG-B(A6) ŠBNE„NXTCMD*ŠMOVE.LD3,D0ŽLENGTHOFCOMMANDŠADD.L‚#1,A1ŽBYPASS'='%INVOK2„CMP.B‚#$0D,(A1)ŠFINDPROGNAME3ŠBEQ.S‚INVOK2.5‹BRANCHIFATBEGINNINGOFPROGNAMEŠCMP.B‚#'',(A1)9ŠBNE.S‚INVOK2.5‹Branchifwe'reatbegginingofprogname+ŠADD.L‚#1,A1ŽContinuesearchforprogname. ŠBRA.S‚INVOK2$* A1 POINTS TO 1ST CHAR OF PROG NAME2* D0 CONTAINS LENGTH OF COMMAND LINE FROM A1 TO CRINVOK2.5‚MOVE.LA1,A0<ŠLEA„LDRFHS-B(A6),A6„PointtoFHSparameterblockinLDRPB.*ŠBSR„EDITFILE‹LetArnoldputfilenamein.ŠLEA„B(PC),A6‹RebaseA6ŠTST.L‚D0‘Seeifsyntaxerror!ŠBLT„CERR2ŽBranchifsyntaxerror*I* A1 pointin g to beginning of program name, move to character immediately*ƒfollowingprogramname.INVOK4„CMP.B‚#$0D,(A1).ŠBEQ.S‚INVOK5BranchifatfollowingcharacterŠCMP.B‚#'',(A1).ŠBEQ.S‚INVOK5Branchifatfollowingcharacter ŠADD.L‚#1,A1 ŠBRA.S‚INVOK4*J* We're at the blank (or carriage return) between prog name and arguments.'*ƒAdvancetotheargumentlist(ifany)INVOK5„CMP.B‚#'',(A1)0ŠBNE.S‚INVOK6BranchwhenA1pointstoarguments ŠADD.L‚#1,A1 ŠBRA.S‚INVOK5*<* We're at beginning of argument list or at carriage return.:*„Seehowlongargumentlistis-putthatnumberintoD0.INVOK6„CLR.L‚D0INVOK6.5‚CMP.B‚#$0D,-1(A1,D0) ŠBEQ.S‚INVOK8 ŠADD.L‚#1,D0ŠBRA.S‚INVOK6.5*8INVOK8„BSR„CJUSTŽJUSTIFYCOMMANDLINEONEVENBYTEBNDRY)ŠMOVE.BD0,LDRCLL-B(A6)„LENGTHOFCOMMAND'ŠMOVE.LA1,LDRCL-B(A6)…STARTOFCOMMAND*!ŠBRA„ASM34ŽGOFINISHLOADANDRUNŠPAGE*H* SUBROUTINE TO DETERMINE IF RESTART LINE (SUBSTRING) MATCHES IN COMMAND*ƒINPUT.*D* RETURN EQ CONDITION CODES IF MATCH, NE CONTITION CODES IF NO MATCH* LENGTH OF SUBSTRING IN REPLGH* SUBSTRING BASED AT REPLY* LENGTH OF COMMAND IN CMDLGH* COMMAND BASED AT CMDBUF* A1,A2,A3,A4,A5,D4 DESTROYED* MCHTESTƒEQU„*,ŠTST.L‚REPLGH-B(A6)‡ISSUBSTRINGZEROLENGTH,ŠBEQ.S‚MCHRTSBRANCHIFYES-ALWAYSMATCHES(ŠLEA„CMDBUF(PC),A2†ADDROFINPUTCOMMAND#ŠLEA„REPLY(PC),A1‡SUBSTRINGADDRESS ŠMOVE.LA2,A46ŠADD.L‚CMDLGH-B(A6),A4„A4POINTSTOENDOFCOMMAND+1 ŠMOVE.LA1,A38ŠADD.L‚REPLGH-B(A6),A3„A3POINTSTOENDOFSUBSTRING+1M10‡MOVE.LA4,D4-ŠSUB.L‚A2,D4ŽLENGTHOFREMAININGCOMMANDLINEŠCMP.L‚REPLGH-B(A6),D4'ŠBLO.S‚MCHRTSBRANCHIFNOTENOUGHLEFT ŠMOVE.LA2,A5ŽCOMPARISONPOINTERM15‡CMPM.B(A1)+,(A5)+!ŠBNE.S‚M20BRANCHONNOMATCHYET!ŠCMP.L‚A1,A3ŽDONEWITHSUBSTRING?ŠBNE.S‚M15BRANCHIFNO!ŠBRA.S‚MCHRTSMATCH-THISISIT!.M20‡LEA„REPLY(PC),A1‡RESTORESUBSTRINGPOINTER.ŠADD.L‚#1,A2ŽTRYNEXTPOSITIONINCOMMANDLINE ŠBRA.S‚M10,MNMCH…TST.L‚(A7)SETUNEQUALCONDITIONCODES MCHRTS„RTSŠPAGE*2*PAR ASSUMES, SINCE COMMAND WAS NOT IN TABLE, THAT*…THISISAPARAMETERSTATEMENT**…A1=POINTERTOBYTE1PASTPARAMETERNAME PAR‡EQU„**ŠBSR„PROCAREWECONDITIONALLYPROCESSING?ŠBNE„NXTCMDBRANCHIFNOT%*SKIP OVER ALL SPACES AFTER PARAMETER ŠBSR„SKPSPC!*…A1NOWPOINTSTO1STNONESPACEŠCMP.B‚#'=',(A1)+ŠBEQ.S‚PAR10ŽSyntaxok2ŠPASS1.LNXTCMDŒBadsyntaxoninitialpassignored+ŠBRA„CERR2ŽBadsyntaxonlastpassreported*PAR10…BSR„SKPSPCSKIPOVERANYMORESPACES%*NOW SHOULD BE READY TO PROCESS VALUE)*FIRST CHAR. MUST BE $, ', -, *,", OR 0-9'ŠMOVE.B(A1),D0ŒSAVE1STCHAR.OFVALUEŠCMP.B‚#APOS,D0‹APOSTROPHE?!ŠBEQ.S‚PSTRYES-GOPROCESSSTRINGŠCMP.B‚#'*',D0$ŠBEQ„PLCVALUECONTAINSLOC.COUNTERŠCMP.B‚#'$',D0ŠBEQ.S‚PNUMHEXNO.ŠCMP.B‚#'"',D0ŒDOUBLEQUOTE?+ŠBEQ.S‚PLITBRANCHIFYES-PROCESSLITERAL ŠBRA.S‚PNUMASSUMEDECIMALVALUE***VALUE IS STRING FIELD-MOVE TO VALUE FIELD&*…OFSYMBOL,CHECKINGforVALIDSYNTAX'*…A1=POINTERTOBEGINNINGOFSTRING(') PSTR†EQU„* ŠBSR„GETSTR&VALPRC„BCC.S‚VALP09Branchifnoerror,ŠPASS1.LNXTCMDŒOninitialpassignoreerror2ŠBRA„CERR3ŽReportinvalidvalueerroronlastpass8VALP09„MOVE.BD1,TMPSYM+VLEN-B(A6)SAVELENGTHOFSTRING9VALP10„MOVE.BTMPSYM-B(A6),D0„Seeifredefinitionsymbol.ŠCMP.B‚RPTCHR(PC),D01ŠBNE.S‚VALP11Branchifcan'tredefinethistype.&VALP10.5‚BSR„CHKSTIInsertnewsymbol.*ŠBCS„ERR8Branchifsymboltableoverflow.ŠBRA„NXTCMDGofornextcommand*5VALP11„BSR„CHKSTŽSeeifentryexistsinsymboltable.$ŠBCC.S‚VALP12Branchifnoduplicate1ŠPASS1.LNXTCMDŒOninitialpassignoreduplicates1*Symbol was in table, address of symbol is in A3.=ŠBTSTƒ#PPASL,PFLAG(A3)ƒHassymbolbeeninsertedinlastpass?5ŠBNE„CERR4ŽReportduplicatesymbolerroronlastpass&ŠBRA„VALP10.5‹Goinsertsymbolanyway+*Symbol not in symbol table-insert if room.VALP12„BSR„INSSTŠBCS„ERR8SYMBOLTABLEOVERFLOW#ŠBRA„NXTCMDGOPROCESSNEXTCOMMAND*/*Val ue is a number starting with '$' or decimal*#*…A1=PointertobeginningofstringPNUMŠBSR„EXP$ŠBCC.S‚PLC16ŽBranchifexpressionok,ŠPASS1.LNXTCMDŒOninitialpassignoreerror2ŠBRA„CERR3ŽReportinvaludvalueerroronlastpass*'* VALUE STARTS WITH " - MUST BE LITERAL*'*…A1=POINTERTOBEGINNINGOFSTRING(")PLIT†BSR„GETLTR ŠBRA„VALPRCŠPAGE*(*VALUE STARTS WITH *-MUST GET NUMBER AND*…CALCULATEACTUALVALUE*…A1POINTSTO*PLC ŠTST.B‚(A1)+ŽPointtonextbyte.*MUST BE + OR - OR CR OR SPACEŠMOVE.LCLC-B(A6),D31ŠMOVE.B(A1),D2ŒFirstbyteofpossibleexpressionŠCMP.B‚#'',D2 ŠBEQ.S‚PLC15 ŠCMP.B‚#CR,D2 ŠBEQ.S‚PLC15#*HEX OR DECIMAL VALUE MUST FOLLOW *.PLC10…BSR„EXPCONVERTDECIMALORHEXTOBINARYŠBCC.S‚PLC12ŽBranchifnoerror2ŠPASS1.LNXTCMDŒDon'treporterroroninitialpass2ŠBRA„CERR3ŽReportinvalidvalueerroronlastpass*…D0=BINARYVALUE*…D3=VALUEOFCLC!PLC12…ADD.L‚D0,D3ŽADDVALUETOPC.*…D3=BINARYVALUETOBEASSIGNEDTOPARAMETER-*…MUSTCONVERTTOHEXASCIIPLC15…MOVE.LD3,D04PLC16…BSR.S‚MAKTMPHŒSetupsymbolintemporaryarea. ŠBRA„VALP10 K*MAKTMPHsetsupsymbolintemporaryareaTMPSYM.‚Symbolmusthavenumeric*ƒvalue.,*‰ENTRY:D0=Binarynumbervalueofsymbol.*TMPSYM=ASCIIsymbolvalue3*TMPSYM+PLEN=Bytevaluecontainingsymbollength*6*MAKTMPHfillsinTMPSYM+PVAL(value)andTMPSYM+VLEN*’(valuelength).* MAKTMPHƒEQU„*ŠMOVEM.LD1/A2,-(A7)5ŠMOVE.L#PARLEN+VALLEN,D1‚Lengthofparameter+value<ŠLEA„TMPSYM+PARLEN+VALLEN(PC),A2Blankfillfromrightside.!MAKT05„CMP.B‚TMPSYM+PLEN-B(A6),D1 ŠBEQ.S‚MAKT10>ŠMOVE.B#'',-(A2)‰Blankoutvalueandrightsideofsymfield ŠSUB.L‚#1,D1 ŠBRA.S‚MAKT05MAKT10„LEA„TMPSYM+VALUE(PC),A26ŠMOVE.B#'$',(A2)+‰Setinleadingdollarsignforhex.ŠBSR.S‚VLENGTH5ŠBSR„BINHEXConverttohexandstuffintovaluefieldŠADD.L‚#1,D1ŽAccountfor'$'1ŠMOVE.BD1,TMPSYM+VLEN-B(A6)PluglengthofvalueŠMOVEM.L(A7)+,D1/A2ŠRTS*I* VLENGTH returns the length of the value field required for storing this *ƒnumber.*‰ENTRY:D0=Binarynumber9*‰EXIT:‚D1=LengthrequiredtostorenumberinhexASCII*—(notincludingthe'$').**‰OnlyD1isaltered.* VLENGTHƒEQU„*ŠMOVE.LD0,-(A7) ŠMOVE.L#7,D1VLEN05„LSR.L‚#4,D0 ŠTST.L‚D0 ŠBEQ.S‚VLEN10 ŠSUB.L‚#1,D1 ŠBNE.S‚VLEN05VLEN10„SUB.L‚#8,D1 ŠNEG.L‚D1ŠMOVE.L(A7)+,D0ŠRTSŠPAGE**USR PROCESSES TASK USER NUMBER&*…A1=POINTERTO1STBYTEAFTERCOMMAND*USR ŠBSR„SKPSPCŠCMP.B‚#'=',(A1)+ŠBNE„CERR2ŽSYNTAXERROR ŠBSR„SKPSPC*…A1=1STCHAR.OFVALUE$*VALUE MUST BE 2 BYTE HEX OR DECIMALŠBSR„EXPŠBCS„CERR3ŽINVALIDVALUE&*MAKE SURE VALUE NOT TOO BIG FOR WORD-'*HIGH ORDER WORD MUST BE ALL 0'S OR 1'SŠSWAPƒD0 ŠTST.W‚D0 ŠBEQ.S‚USR10 ŠCMP.W‚#-1,D0ŠBNE„CERR5ŽVALUETOOBIG*VALID-SAVE USER NO. USR10…SWAPƒD0ŠMOVE.WD0,USER-B(A6)!*Insert USER as symbol into table6ŠMOVE.L#'USER',TMPSYM-B(A6)SymbolforUSERparameter-ŠMOVE.B#4,TMPSYM+PLEN-B(A6)LengthofsymbolŠBSR„MAKTMPHŒMakeTMPSYM3ŠBSR„CHKSTIInsertintotableevenifalreadythereŠBCS„CERR12Erroriftablefull ŠBRA„NXTCMDŠPAGE*"*SES PROCESSES TASK SESSION NUMBER"*…A1=POINTERTOBYTEAFTERCOMMAND*SES ŠBSR„SKPSPCŠCMP.B‚#'=',(A1)+ŠBNE„CERR2ŽSYNTAXERROR ŠBSR„SKPSPC*…A1=1STCHAR.OFVALUE*VALUE MUST BE HEX OR DECIMALŠBSR„EXPŠBCS„CERR3ŽINVALIDVALUE)ŠMOVE.LD0,SESSION-B(A6)ƒSAVESESSIONNO.$*Insert SESSION as symbol into table9ŠMOVE.L#'SESS',TMPSYM-B(A6)SymbolforSESSIONparameterŠMOVE.L#'ION',TMPSYM+4-B(A6)-ŠMOVE.B#7,TMPSYM+PLEN-B(A6)LengthofsymbolŠBSR„MAKTMPHŒMakeTMPSYM3ŠBSR„CHKSTIInsertintotableevenifalreadythereŠBCS„CERR12Erroriftablefull ŠBRA„NXTCMDŠPAGE**PRI PROCESSES TASK PRIORITY&*…A1=POINTERTO1STBYTEAFTERCOMMANDPRI ŠBSR„SKPSPCŠCMP.B‚#'=',(A1)+ŠBNE„CERR2ŽSYNTAXERROR ŠBSR„SKPSPC*…A1=1STCHAR.OFVALUE$*VALUE MUST BE 1 BYTE HEX OR DECIMALŠBSR„EXP ŠBCS„CERR3ŽINVALIDVALUE%*MAKE SURE VALUE NOT TOO BIG FOR BYTE*…D0=CONVERTEDVALUE ŠMOVE.LD0,D1 ŠOR.Bƒ#$FF,D0 ŠCMP.L‚#-1,D0"ŠBEQ.S‚PRI10ŽHIGHORDERBITSALL1 ŠCLR.B‚D0 ŠTST.L‚D0ŠBNE„CERR5ŽVALUETOOBIG*VALID-SAVE PRIORITYPRI10…MOVE.BD1,PRIOR-B(A6) ŠMOVE.LD1,D0%*Insert PRIORITY as symbol into table:ŠMOVE.L#'PRIO',TMPSYM-B(A6)SymbolforPRIORITYparameterŠMOVE.L#'RITY',TMPSYM+4-B(A6)-ŠMOVE.B#8,TMPSYM+PLEN-B(A6)LengthofsymbolŠBSR„MAKTMPHŒMakeTMPSYM3ŠBSR„CHKSTIInsertintotableevenifalreadythereŠBCS„CERR12Erroriftablefull ŠBRA„NXTCMDŠPAGE*A*EXCL ADDS SEGMENT NAME TO LIST OF SEGMENTS TO BE EXCLUDED FROM A*‚TASKORPROCESS&*…A1=POINTERTO1STBYTEAFTERCOMMAND* EXCL†EQU„* ŠBSR„SKPSPC ŠBSR„GETPAR1ŠBCS„CERR14BRANCHONBADSYNTAXFORSEGMENTNAME ŠCMP.L‚#4,D1'ŠBHI„CERR14BRANCHONSEGNAMETOOLONG*** MOVE SEGMENT NAME TO LIST IF IT WILL FIT;ŠMOVE.WEXCLNUM-B(A6),D0ƒNUMBEROFEXCLUDEDSEGMENTSSOFARŠCMP.W‚#MAXSEG,D0'ŠBEQ„CERR15BRANCHONTOOMANYSEGMENTS ŠADD.W‚#1,D0;ŠMOVE.WD0,EXCLNUM-B(A6)ƒUPDATENUMBEROFEXCLUDEDSEGMENTS!ŠLSL.W‚#2,D0ŽMAKELONGWORDINDEXŠLEA„EXCLLST-4(PC),A00ŠMOVE.LTMPSYM-B(A6),0(A0,D0.W)‚PLUGNEWNAMEIN ŠBRA„NXTCMDŠPAGE**STE PROCESSES TASK STATE&*…A1=POINTERTO1STBYTEAFTERCOMMAND*STEŠLEA„STETBL(PC),A0ŠLEA„STATE(PC),A4/*COMMON PROCESSING FOR ATTRIBUTE/STATE COMMANDSSTEATT ŠBSR„SKPSPCŠCMP.B‚#'=',(A1)+ŠBNE„CERR2ŽSYNTAXERROR ŠBSR„SKPSPC*…A1=1STCHAROFVALUE*VALUE MUST BE STRINGŠCMP.B‚#APOS,(A1)#ŠBNE„CERR3ŽNOTSTRING-INVALIDVALUE ŠBSR„GETSTR ŠBCS„CERR38*STRING MUST BE AT LEAST 6 BYTES (INCLUDING APOSTROPHES) ŠCMP.W‚#6,D1ŠBCS„CERR6ŽINVALIDSTATE*SEARCH STATE TABLE FOR STRINGSTE10…LEA„TMPSYM+VALUE+1(PC),A2ŠTST.L‚(A0)ENDOFTABLE?ŠBEQ„CERR6ŽYES-NOTVALIDSTATE ŠMOVE.W#4,D3 ŠMOVE.LA0,A3STE15…CMP.B‚(A2)+,(A3)+ŠBNE.S‚STE20ŽNOMATCHŠDCNTƒD3,STE15 ŠTST.L‚(A0)+ ŠCLR.L‚D3 ŠCLR.L‚D0ŠLEA„ATTR(PC),A3ŠIF.LA3A4THEN.S;*We'remodifyingtheattributesfield.‚Inthiscaseweare=*allowedtosetmultiplebitswithseparateATTRIBcommands.1MOVE.B(A0),D3ŒBytetoaffectinwordsizefield3IFTHEN.SŒIflessthenbitmustbeturnedoffNEG.L‚D3ŽActualbittoaffectBSETƒD3,D0‹Setthebit(NOT.L‚D0ŽFixso'AND'willturnoffbit'AND.W‚D0,(A4)‰TurnoffappropriatebitELSE.SBSETƒD3,D0‹Setbittoaffect%OR.WƒD0,(A4)‰TurnonappropriatebitENDIŠELSE.S8*We'remodifyingthestatefield.‚Inthiscase,wemust9*overwritetheentirestateword.‚Weareonlyallowedto9*setonebitforaspecifictaskwiththeSTATEcommand.MOVE.B(A0),D3ŒBittoaffectIFTHEN.S.CLR.W‚(A4)ŒTurnoffentirewordifbitisoffELSE.S BSET‚D3,D0.MOVE.WD0,(A4)‰SetonlythisbitifbitisonENDIŠENDI ŠBRA„NXTCMD!STE20…TST.L‚(A0)+ŽSKIPOVERSTATE"ŠTST.W‚(A0)+ŽSKIPOVERSTATEVALUE ŠBRA.S‚STE10ŠPAGE**ATT PROCESSES TASK ATTRIBUTES&*…A1=POINTERTO1STBYTEAFTERCOMMANDATT1ŠLEA„ATTTBL(PC),A0†SETUPATTRIBUTETABLEPOINTER1ŠLEA„ATTR(PC),A4ˆSETUPPOINTERTOATTRIBUTEWORD ŠBRA„STEATTŠPAGE*.*PPC CHANGES VALUE OF CURRENT LOCATION COUNTER#*…A1=POINTERTOCHAR.AFTERCOMMAND*PPC ŠBSR„SKPSPCŠCMP.B‚#'=',(A1)+ŠBNE„CERR2ŽSYNTAXERROR ŠBSR„SKPSPC*…A1=1STCHAR.OFVALUE#ŠCLR.L‚D3‘0CURRENTPCINCASENO*%*VALUE MUST START WITH * OR BE NUMBERŠCMP.B‚#'*',(A1)ŠBNE.S‚PPC25ŽNO*ŠTST.B‚(A1)+ŽSKIPOVER*-ŠMOVE.LCLC-B(A6),D3‡GETCURRENTLOC.COUNTERŠCLR.L‚D0‘ZERONUMBER&*CHAR AFTER * MUST BE + OR CR OR SPACEŠCMP.B‚#'',(A1) ŠBEQ.S‚PPC30ŠCMP.B‚#CR,(A1) ŠBEQ.S‚PPC30*<*CONVERT NUMBER TO BINARY TO BE USED AS NEW LOCATION COUNTER PPC25…BSR„EXPŠBCS„CERR3ŽINVALIDVALUE%*MAKE SURE NUMBER IS ON PAGE BOUNADRY ŠMOVE.LD0,D2ŠAND.L‚#$FF,D2 ŠBNE„CERR12NOTONPAGEBOUNDARY#*MAKE SURE NEW VALUE .GE. OLD VALUE *…D0=NUMBER*…D3=OLDPCOR0PPC30…ADD.L‚D0,D3E*IF CLC IS ZERO THEN THIS PC  COMMAND CAME BEFORE ANY TASK, PROCESS ORB*ƒSEGMENTCOMMAND.‚INTHATCASE,DONOTWRITEZEROESTOTEMPFILE,@*ƒBUTSIMPLYSETCLCANDBASEADDRTOTHECOMPUTEDADDRESSVALUE.ŠTST.L‚CLC-B(A6)#ŠBNE.S‚PPC35ŽBRANCHIFNOT1STTIMEŠMOVE.LD3,CLC-B(A6)%ŠBSR.S‚PCUPDATŒUpdatesymboltablePCŠMOVE.LD3,BASEADDR-B(A6) ŠBRA.S‚PPC37PPC35…CMP.L‚CLC-B(A6),D3!ŠBLT„CERR7ŽPCLESSTHANOLDVALUE/*ZERO SPACE IN BOOT FILE BETWEEN OLD AND NEW PC%ŠBEQ.S‚PPC37ŽBRANCHIFZEROFILLDONE ŠBSR„ZERBUF ŠBRA„PPC35*PPC37…LEA„PCDSP(PC),A2 ŠMOVE.L#6,D1ŠMOVE.LCLC-B(A6),D0'ŠBSR„BINHEXCONVERTNEWPCVALUETOHEX(ŠLEA„PCMSG(PC),A1‡DISPLAYNEWPCMESSAGEŠLEA„PCMSGE(PC),A2 ŠBSR„LISOUT ŠBNE„IOERR#ŠBRA„NXTCMD.5‹BACKFORNEXTCOMMAND*G*SubroutinetoupdatesymboltablePCvalue.‚Shouldbecalledwhenever*ƒCLCischanged. PCUPDATƒEQU„*ŠMOVE.LD0,-(A7)/ŠMOVE.LCLC-B(A6),D0‡BinaryvalueofPCcounter1ŠMOVE.L#'PC‚',TMPSYM-B(A6)SymbolforPCcounter-ŠMOVE.B#2,TMPSYM+PLEN-B(A6)LengthofsymbolŠBSR„MAKTMPHŒMakeTMPSYM3ŠBSR„CHKSTIInsertintotableevenifalreadythereŠMOVE.L(A7)+,D0ŠRTSŠPAGE***MSG PROCESSING LIST COMMAND TO LOG DEVICE*MSG‡LEA„CMDBUF(PC),A1ŠLEA„CMDBUFE(PC),A2 ŠBSR„LOGOUTŠBRA.S‚NXTCMD.5***PSE LIST PAUSE COMMAND TO LOG DEVICE THEN+*„ISSUES1BYTEINPUTTOWAITFORRESPOINSEPSE0ŠBTSTƒ#SOPT,OPTFLG-B(A6)IS'S'OPTIONSTILLSET&ŠBNE„NXTCMDBRANCHIFYES-SKIPPAUSEH* If we're in batch mode then ignore PAUSE - just go on to next command.5*ƒWe'reinbatchmodeifD0(onstartup)says'&BCT'.ŠCMP.L‚#'&BCT',MONITOR-B(A6) ŠBEQ„NXTCMD8* ASSIGN TERMINAL FOR INPUT USING SUBFHS PARAMETER BLOCKŠLEA„SUBFHS(PC),A6†P.B.ADDRESS&ŠBSR„SETDEFSETDEFAULTSTUFFINTHERE ŠMOVE.LA6,A0ŠLEA„B(PC),A6‹REBASEA6;ŠMOVE.LCNID-B(A6),FHSVOL(A0)SETUPDEVICENAMEFORASSIGN!ŠMOVE.W#FHASGN,FHSCMD(A0)ASSIGN%ŠMOVE.W#FOPPR,FHSOPT(A0)‚PUBLICREAD&ŠMOVE.B#SFLUN,FHSLUN(A0)‚LOGICALUNITŠFHSCALL(A0)ŽDOTHEASSIGN ŠBNE„IOERRŠLEA„CMDBUF(PC),A1ŠLEA„CMDBUFE(PC),A2 ŠBSR„LOGOUT ŠMOVE.LA1,A0#ŠMOVEM.LA0-A1,SUBSIOS+IOSSAD-B(A6)PSE.1…IOSCALLSUBSIOS(PC)ŠBEQ.S‚NXTCMD.5ŠCMP.B‚#ISTATO,D0 ŠBEQ.S‚PSE.1 ŠBRA„IOERRNXTCMD.5‚LEA„SUBFHS(PC),A0ŠBSR„CLOSEŽCLOSETHEASSIGNMENT ŠMOVE.LA0,A6 ŠBSR„SETDEFRESETDEFAULTVALUES ŠLEA„B(PC),A6 ŠBRA„NXTCMDŠPAGE*#*SUBS COMMAND SUBSTITUTES PARAMETER*…VALUESINSOURCEFILES*$*…A1=POINTERTO1BYTEAFTERCOMMAND*SUBSŠBTSTƒ#SOPT,OPTFLG-B(A6)0ŠBNE„NXTCMDDON'TPERFORMIF'S'OPTIONSTILLON ŠBSR„SKPSPCSKIPOVERANYSPACES ŠMOVE.LA1,A5&SUBS05„MOVE.LA5,A0ŽSTARTOFFILENAMEŠLEA„LISFHS(PC),A6 ŠBSR„SETDEF ŠBSR„EDITFILEŠLEA„B(PC),A6‹REBASEA6ŠLEA„LISFHS(PC),A4 ŠTST.L‚D0ŠBMI„CERR8ŽINVALIDFILENAME!ŠBTSTƒ#19,D0FILENAMESPECIFIED?ŠBEQ„CERR9ŽFILENAMEMISSING"ŠMOVE.BD1,D5ŽSAVETERMINATORBYTE&ŠMOVE.LA0,A5ŽSAVESTARTOFNEXTFIELDC*DON'T ALLOW MORE THAN 7 CHARS. IN FILE NAME OF SUBS. FILE TO ALLOW *„FOR'X'ŠCMP.B‚#'',FHSFIL+7(A4)ŠBNE„CERR13NAMETOOLONG *TRY TO ASSIGN SUBSTITUTION FILEŠMOVE.W#FOPER,FHSOPT(A4)ŠMOVE.B#SFLUN,FHSLUN(A4)ŠMOVE.W#FHASGN,FHSCMD(A4) ŠFHSCALL(A4) ŠBNE„IOERR+ŠMOVE.WFHSOPT(A0),D0†SEEWHATFILETYPEISŠAND.W‚#FFTBIT,D0'ŠBEQ„SERR1ŽBRANCHIFCONTIGUOUS(ERROR)!*MOVE FHS INFO TO XFILE FHS BLOCKŠLEA„SUBFHS(PC),A2ŠLEA„LISFHS(PC),A0ŠMOVE.W#FHSBLN,D0SUBS20„MOVE.B(A0)+,(A2)+ŠDCNTƒD0,SUBS20ŠLEA„SUBFHS(PC),A0ŠMOVE.B#XSFLUN,FHSLUN(A0)2*MOVE FILE NAME DOWN 1 BYTE AND PUT X AT BEGINNINGŠLEA„SUBFHS(PC),A0 ŠBSR„INSXK*Set in user default volume name (not volume name from which we're SUBSing)ŠMOVE.LDEFVOLN(PC),FHSVOL(A0)K*Set in user default user number (not user number from which we're SUBSing)ŠMOVE.WDEFUSRN(PC),FHSUSN(A0)*DELETE 'X' FILEŠMOVE.W#FHDELT,(A0)ŠFHSCALL(A0)ŽDOTHEDELETE*ASSIGN 'X' FILE SEQUENTIAL1ŠMOVE.W#FHASGN+FHALLO,FHSCMD(A0)ASSIGN/ALLOCATECŠMOVE.W#FOPEREW+FOPSEQ,FHSOPT(A0)EXCLUSIVEREAD/WRITE,SEQUENTIAL  ŠFHSCALL(A0) ŠBNE„IOERR"*SET UP BUFFER START/END ADDRESSES*ŠMOVE.LSUBBUF1-B(A6),SUBSIOS+IOSSAD-B(A6)*ŠMOVE.LSUBBUF2-B(A6),SUBSIOS+IOSEAD-B(A6)ŠPAGE,*FILES ARE BOTH ASSIGNED-PROCESS EACH RECORD-SUBS35„IOSCALLSUBSIOS(PC)‡READSOURCERECORD ŠBEQ.S‚SUBS40ŠCMP.B‚#ISTAEOF,D0!ŠBEQ.S‚SUBCONDONEWITHTHISFILE ŠBRA„IOERR SUBS40„EQU„**£01/10/85‚vvvvv7ŠBTST.B#COPT,OPTFLG-B(A6)Seeifthe'C'optionissetŠIFTHEN.S,ŠMOVEM.LD0/A0-A1,-(A7)„Saveusersregisters=ŠLEA„SYMBUFF+2+PARLEN(PC),A1Gettheaddressofthebufferon*£wheretoputthefilename@ŠLEA„LISFHS+FHSCLG(PC),A0Gettheaddressoftheparamaterblock)*£thathasthefilenamethatweareusingŠFOR.B‚D0=#1TO#18DO.S3ŒMOVE.B(A0)+,(A1)+†MovethefilenametothebufferŠENDF/ŠMOVEM.L(A7)+,D0/A0-A1„RestoreusersregistersŠENDI*£01/10/85‚^^^^^*ŠBSR.S‚SUB00ŽPERFORMARGUMENTSUBSTITUTION"*END OF RECORD-WRITE OUTPUT RECORD SUBS58„EQU„*ŠLEA„SUBXIOS(PC),A0ŠMOVE.LIOSSAD(A0),IOSEAD(A0)ŠMOVE.LSUBSIOS+IOSLEN-B(A6),D0 ŠBEQ.S‚SUBS59 ŠSUB.L‚#1,D0-SUBS59„ADD.L‚D0,IOSEAD(A0)†POINTTOLASTBYTE ŠIOSCALL(A0) ŠBNE„IOERRŠBRA„SUBS35GODONEXTREOCRD*/*SENDS ERROR MESSAGE TO LIST AND LOG DEVICE AND+*…CONTINUESPROCESSINGSUBSTITUTIONCOMMAND(SERR1…LEA„SMSG1(PC),A1‡INVALIDFILETYPEŠLEA„SMSG1E(PC),A2SERR0…BSR„EMLOGLIS ŠBNE„IOERRŠPAGE:*FILE SUBSTITUTION COMPLETE-CLOSE BOTH FILES AND GOTO NEXT*…D5=TERMINATINGCHAR.'*…A5=POINTERTOSTARTOFNEXTFILENAMESUBCON„LEA„LISFHS(PC),A0 ŠBSR.S‚CLOSEŠLEA„SUBFHS(PC),A0 ŠBSR.S‚CLOSE!*SEE IF ANOTHER FILE NAME FOLLOWSŠCMP.B‚#'/',D5ŠBEQ„CERR2ŽSYNTAXERRORŠCMP.B‚#',',D5ŠBEQ„SUBS05MOREFILESŠBRA„NXTCMDDONEW/SUBSTITUTION*CLOSE…MOVE.W#FHCLOS,FHSCMD(A0) ŠFHSCALL(A0)ŠRTSŠPAGE%*************************************-* SUBROUTINE TO PERFORM ARGUMENT SUBSTITUTION0*ƒ1.PERFORMSUBSTITUTIONFROMSYSGEN'SINTERNAL*ˆPARAMETERSUBSTITUTIONLIST./*ƒ2.PERFORMSUBSTITUTIONUSINGSBARGFROMUSER*ˆDEFINEDSESSIONARGUMENTS.9*ƒSTEP1ISPERFORMEDRECURSIVELYBYMAKINGSUBSTITUTIONS2*…THROUGHOUTTHEENTIRELINEANDIFANYUNRESOLVED3*…SUBSTITUTIONSRESULT,THEUPDATEDLINEISSCANNED5*…AGAIN.‚THEMAXIMUMDEPTHOFRECURSIONISDETERMINED*…BYTHESUBSMAXEQUATE.*9*ENTRY:‚A0-POINTSTOPARAMETERBLOCKOFDATALINETHAT*HASJUSTBEENREAD* *‰BSR„SUB00*:*EXIT:ƒA0-POINTSTOSAMEPARAMETERBLOCKBUTTHEIOSLEN'*FIELDHASBEENUPDATEDTOREFLECTTHE0*CHANGEDLENGTHOFTHELINEAFTERSUBSTITUTIONS**HAVEBEENMADE.‚ACARRIAGERETURNALWAYS1*TERMINATESTHELINE.‚ACOPYOFTHEUPDATEDLINE4*APPEARSINXMDLNEASWELLASTHEBUFFERASSOCIATED *WITHA0.***‰CONDITIONCODES-*ŽMINUSIFBUFFEROVERFLOW1*–ERRORMESSAGEISDISPLAYEDONLISOUTANDLOGOUT*ŽEQUALIFNOBUFFEROVERFLOW*:*ŽIFAPARAMETERCANNOTBEFOUND,'0'ISINSERTEDINPLACE2*OFTHATPARAMETER,ANERRORMESSAGEISDISPLAYED7*TOLISOUTANDLOGOUTANDNORMALPROCESSINGCONTINUES.**‰SUBSTITUTIONFLAGSUBFLG-0*ŽSUBDUNSETTO1IFANYSUBSTITUTIONSWEREDONE**‰ALLREGISTERSAREPRESERVED*$*ƒXMDLNEISUSEDASAWORKINGBUFFER%************************************** SUB00…EQU„**-ŠMOVEM.LD0-D7/A0-A5,-(A7)SAVEALLREGISTERS1ŠCLR.W‚SUBCNT-B(A6)‡CLEARRECURSIONDEPTHCOUNTER7ŠBCLRƒ#SUBDUN,SUBFLG-B(A6)CLEARSUBSTITUTIONDONEFLAG*2SUB15…MOVE.LIOSSAD(A0),A1†STARTINBBUFFERADDRESS+ŠMOVE.LIOSEAD(A0),D5†ENDINGBUFFERADDRESS/ŠMOVE.LIOSLEN(A0),D4†NUMBEROFBYTESJUSTREAD0ŠBNE.S‚SUB16ŽBRANCHIFMORETHANZEROBYTESREAD-ŠMOVE.B#'',XMDLNE-B(A6)‚NULLINPUTISBLANKŠMOVE.B#'',(A1)%ŠCMP.L‚D0,D0ŽSETEQUALCONDTIONCODES ŠBRA„SUBEXITSUB16…SUB.L‚A1,D5)ŠLEA„XMDLNE(PC),A4†WORKINGBUFFERADDRESS%ŠADD.L‚A4,D5ŽD5=LASTLEGALADDRRESS*"* INSURE THAT CR TERMINATES RECORDŠMOVE.B#CR,0(A1,D4.L)*$SUB42…MOVE.B(A1)+,D4‹GETINPUTBYTEŠCMP.B‚#CR,D4ENDOFINPUT?5ŠBEQ„SUBAGNBRANCHIFYES-GOSUBAGAINIFNECESSARY**ŠCMP.L‚D5,A4ŽSEEIF RECORDGROWNTOOLARGE)ŠBHI„SUBMIŽBRANCHIFSUBSTITUTIONTOOBIGŠCMP.B‚#'\',D4+ŠBEQ.S‚SUB45ŽBRANCHTOGOTRYTOSUBSTITUTEŠMOVE.BD4,(A4)+ŠBRA.S‚SUB42ŽKEEPMOVING* * PARAMETER MAY FOLLOW BACKSLASHSUB45…BSR„GETPARS*?* IF THE PARAMETER WAS LESS THAN 2 CHARS, DON'T DO SUBSTITUTION-*ƒSINCEASSUMEDTOBEMACROORSBARGARGUMENT ŠCMP.W‚#2,D1 ŠBCC.S‚SUB50ŽBRANCHIF>2CHARS** DON'T DO SUBSTITUTION0SUB48…MOVE.B#'\',(A4)+‰PUT'\'INOUTPUTBUFFERŠTST.B‚D1‘PARAMETERLENGTH=0?ŠBEQ„SUB42ŽBRANCHIFYES* MOVE PARAMETER NAME TO OUTPUTSUB49…LEA„TMPSYM(PC),A3 ŠBRA„SUB55#* NOW SEARCH SYMBOL TABLE FOR VALUESUB50…BSR„CHKST&ŠBCS.S‚SUB52ŽBRANCHIFPARAMETERFOUND1* COMPLAIN OF 'PARAMETER NOT DEFINED' AND CONTNUE@ŠBSETƒ#UNDEF,MSCFLG-B(A6)Setundefinedsymbolencounteredflag.%ŠPASS1.SSUB48BypassoninitialpassŠMOVEM.LA0/A1,-(A7)ŠLEA„SMSG3+2(PC),A1ŠMOVE.LTMPSYM-B(A6),(A1)ŠMOVE.LTMPSYM+4-B(A6),4(A1) ŠSUB.L‚#2,A1ŠLEA„SMSG3E(PC),A2 ŠBSR„EMLOGLISŠMOVEM.L(A7)+,A0/A1 ŠBNE„IOERR/ŠMOVE.B#'0',(A4)+‰INSERT0FORPARAMETERVALUE ŠBRA„SUB42* MOVE VALUE TO DEST RECORD*£01/10/85‚vvvvvTHEN.S,ŠMOVEM.LA0/A3/A5,-(A7)„Saveusersregisters9ŠLEA„SYMBUFF(PC),A5…Gettheaddressofthebufferforthe*£symboltablefile7ŠMOVE.W#$0003,(A5)+‡Thismeansthatthisparameterwas *£referenced'*£Ifthisisthelastpassthenwewill)*£savethislabelandthefilenametothe*£symboltablefile.>ŠIF.WƒPASS-B(A6)#-1THEN.SIfthisisthelastpassthenŒFOR.B‚D0=#1TO#PARLENDO.S1ŽMOVE.B(A3)+,(A5)+„moveparameternametobufferŒENDF;ŒLEA„SYMFHS(PC),A0„Gettheaddressofthesymboltablefile*£parameterblock7ŒMOVE.W#FHASGN,FHSCMD(A0)GetreadytoassignthefileŒFHSCALLSYMFHS(PC)†Godoit ŒBNE„IOERR<ŒLEA„SYMBUFF(PC),A0ƒGetthestartaddressofthebufferthat'*£containsthesymbolandthefilethat**£referencedthesymbolandsaveitintheAŒMOVE.LA0,SYMIOS+IOSSAD-B(A6)IOSparameterblockforthesymbol *£tablefile.BŒADD.L‚#PARLEN+2+18-1,A0Gettheendingaddressofthebufferthat'*£containsthesymbolandthefilethat**£referencedthesymbolandsaveitintheAŒMOVE.LA0,SYMIOS+IOSEAD-B(A6)IOSparameterblockforthesymbol *£tablefile.#ŒIOSCALLSYMIOS(PC)†Gowriteitout ŒBNE„IOERR:ŒLEA„SYMFHS(PC),A0„GettheaddressofthesymboltableFHS*£parameterblock.6ŒMOVE.W#FHCLOS,FHSCMD(A0)GetreadytoclosethefileŒFHSCALLSYMFHS(PC)†Godoit ŒBNE„IOERRŠENDI/ŠMOVEM.L(A7)+,A0/A3/A5„RestoreusersregistersŠENDI*£01/10/85‚^^^^^#ŠMOVE.BVLEN(A3),D1ˆLENGTHOFVALUE"ŠLEA„VALUE(A3),A3‡ADDRESSOFVALUE4ŠBSETƒ#SUBDUN,SUBFLG-B(A6)FLAGSUBSTITUTIONASDONE** D1.B = NO. OF CHARS TO MOVE*A3ƒ=SOURCEADDR.*A4ƒ=DESTADDR. SUB55…EQU„*ŠTST.B‚D1‘AREWETHROUGH?SUB56…BEQ„SUB42ŽBRANCHIFYES ŠCMP.L‚D5,A4ŽHAVEWEOVERFLOWED?ŠBHI.S‚SUBMIŽBRANCHIFYES/ŠMOVE.B(A3)+,(A4)+ˆMOVESUBSTITUTIONCHARACTER ŠSUB.B‚#1,D1 ŠBRA.S‚SUB56* * MOVE RECORD/SUBAGN„BSR.S‚SUBMOVMOVERECORDTOORIGINALLOC=ŠBCLRƒ#SUBDUN,SUBFLG-B(A6)DIDWEDOANYSUBSTITUTIONSSOFARŠBEQ.S‚SUBEXITŒBRANCHIFNOŠMOVE.WSUBCNT-B(A6),D0 ŠADD.L‚#1,D0.ŠMOVE.WD0,SUBCNT-B(A6)„BUMPRECURSIONCOUNTER2ŠCMP.W‚#SUBMAX,D0‰HAVEWEHITMAXRECURSIONDEPTH?ŠBEQ.S‚SUBMIŽBRANCHIFYES.ŠBRA„SUB15ŽBRANCHIFNO-GOFORANOTHERCYCLE*+SUBMOV„MOVE.LIOSSAD(A0),A1†MOVETOADDRESS$ŠLEA„XMDLNE(PC),A3†MOVEFROMADDRESS ŠMOVE.LA4,D0 ŠSUB.L‚A3,D05ŠMOVE.LD0,IOSLEN(A0)†ADJUSTLENGTHFIELDINIOSP.B.SUBMOV2ƒCMP.L‚A4,A3%ŠBHS.S‚SUBMOVEX‹BRANCHIFDONEMOVINGŠMOVE.B(A3)+,(A1)+ŠBRA.S‚SUBMOV2 SUBMOVEX‚RTS** COMPLAIN OF RECORD TOO LARGE SUBMI…EQU„*ŠPASS1.SSUBEXITŠMOVE.LA1,-(A7)ŠLEA„SMSG2(PC),A1ŠLEA„SMSG2E(PC),A2 ŠBSR„EMLOGLISŠMOVE.L(A7)+,A1 ŠBNE„IOERR)ŠOR.Bƒ#$8,SRSETNEGATIVECONDITIONCODES!SUBEXITƒMOVEM.L(A7)+,D0-D7/A0-A5ŠRTSŠPAGE**ASM SETS UP COMMAND LINE FOR*†ASSEMBLERANDENVOKES IT#*…A1=POINTERETOBYTEAFTERCOMMANDASMŠBTSTƒ#SOPT,OPTFLG-B(A6),ŠBNE„NXTCMDDON'TDOIF'S'OPTIONSTILLSET ŠBSR„SKPSPC-ŠLEA„XMDLNE(PC),A2†COMMANDLINEFORASSEMBLERASM05…LEA„LISFHS(PC),A6 ŠMOVE.LA1,A05ŠBSR„SETDEFSETDEFAULTVOLUME,USERNO.CATALOG,EXT*GET ASSEMBLER SOURCE FILES ŠBSR„EDITFILEŠLEA„B(PC),A6‹REBASEA6ŠLEA„LISFHS(PC),A4 ŠTST.L‚D0ŠBMI„CERR8ŽINVALIDFILENAME!ŠBTSTƒ#19,D0FILENAMESPECIFIED?ŠBEQ„CERR9ŽFILENAMEMISSING*…D1.B=TERMINATOR*…A0=STARTOFNEXTFIELD1*TRY TO ASSIGN FILE WITH 'X' PRECEEDING FILE NAME*‚USINGLISFHSPARAMETERBLOCK%ŠMOVE.LA0,A3ŽSAVESTARTOFNEXTFILE!ŠMOVE.LA4,A0ŽLISFHSP.B.ADDRESSŠSUB.L‚A5,A5ŽSETUPFORNO'X'-ŠMOVE.LD0,D5ŽSAVEERRORSTATUSFROMEDITFILE ŠBSR„INSX!ŠMOVE.W#FHASGN,FHSCMD(A0)ASSIGN%ŠMOVE.W#FOPPR,FHSOPT(A0)‚PUBLICREAD9ŠMOVE.B#SFLUN,FHSLUN(A0)‚SOURCEFILELOGICALUNITNUMBER ŠFHSCALL(A0)ŠBNE.S‚ASM10ŽCAN'TUSE'X'FILE7*'X' FILE EXISTS-PUT ITS NAME IN ASSEMBLER COMMAND LINEŠMOVE.W#FHCLOS,FHSCMD(A0)ŠFHSCALL(A0)ŽCLOSEFILE6*MUST DETERMINE WHERE NAME FIELD STARTS-WORK BACKWARDS&*…(SKIPPINGOVEREXTENSIONIFENTERED)$ŠMOVE.LA3,A5ŽA5=STARTOFNEXTFIELD!ŠBTSTƒ#18,D5EXTENSIONSPECIFIED?ŠBEQ.S‚ASM07ŽNO-*SCAN BACKWARD UNTIL START OF EXTENSION FOUNDASM06…CMP.B‚#'.',-(A5) ŠBNE.S‚ASM06(*SEARCH BACKWARD THROUGH FILE NAME UNTIL%*…BEGINNINGOFFIELDOR.ENCOUNTERED1ASM07…CMP.B‚#'.',-(A5)‰POINTTOLASTBYTEOFNAME)ŠBEQ.S‚ASM08ŽBEGINNINGOFFILENAMEFOUNDŠCMP.L‚A1,A5ŽATBEGINNING?ŠBHI.S‚ASM07ŽNO ŠBRA.S‚ASM091ASM08…TST.B‚(A5)+ŽPOINTTO1STCHAR.OFFILENAMEASM095*MOVE SOURCE FILE THROUGH TERMINATOR TO OUTPUT BUFFERG*A5=ADDR. OF START OF NAME FILED IF 'X' IS TO BE INSERTED (= OTHERWISE)ASM10…CMP.L‚A3,A1 ŠBCC.S‚ASM20ŠCMP.L‚A5,A1ŽMOVEIN'X'YET?ŠBNE.S‚ASM15ŽNOŠMOVE.B#'X',(A2)+‰YESASM15…MOVE.B(A1)+,(A2)+ ŠBRA.S‚ASM10*MORE INPUT FILES?ASM20…CMP.B‚#'/',D1ŠBEQ.S‚ASM05ŽYES-GOGET*NO-MOVE REMAINDER OF LINEASM25…CMP.B‚#CR,D1ŠBEQ.S‚ASM30ŽDONEMOVINGDATAŠMOVE.B(A1)+,D1ŠMOVE.BD1,(A2)+ ŠBRA.S‚ASM25ŠPAGE*-*COMMAND LINE FOR ASSEMBLER HAS BEEN CREATED-*…READYTOENVOKEASM *…A2=LASTBYTEOFCOMMANDLINE+1ASM30(ŠSUB.L‚#1,A2ŽPOINTA2TOCARRIAGERETURNŠLEA„XMDLNE-8(PC),A1ŠMOVE.W#'-',(A1))ŠMOVE.L#'=ASM',2(A1)†FORMESSAGEDISPLAYŠMOVE.W#'‚',6(A1)*ŠBSR„LOGLISDISPLAYASSEMBLERCOMMANDLINE1ŠSUB.L‚XMDLNE1-B(A6),A2ƒA2=LENGTHOFCOMMANDLINE ŠMOVE.LA2,D00ŠMOVE.BD0,LDRCLL-B(A6)„SAVECOMMANDLINELENGTH4ŠMOVE.LXMDLNE1-B(A6),LDRCL-B(A6)COMMANDLINESTARTŠMOVE.L#'ASM',LDRFN-B(A6)6*SET UP TO SEND COMMAND FILE TO TASK AS LU 5 WITH KEEPASM34…LEA„LISFHS(PC),A0ŠMOVE.B#CFLUN,FHSLUA(A0)!ŠMOVE.W#FOPSLU+FOPKEP,FHSOPT(A0)*%*ENTER HERE TO FINISH LINK PROCESSING* ASM35…EQU„*ŠLEA„LDRBLK(PC),A0.ŠMOVE.L#$01,D0ŒUSEPASSEDTASKNAME,PRIORITYŠTRAPƒ#4‘LOADASMŠBNE„LDRERRLOADERERROR9*ASM OR LINK HAS BEEN LOADED-SEND CDFLU AND LDFLU TO TASK*ŠMOVE.L(A0),LISFHS+FHSTSK-B(A6)TASKNAME.ŠMOVE.L4(A0),LISFHS+FHSSES-B(A6)TASKSESSION#ŠMOVE.L(A0),STRBLK-B(A6)‚TASKNAME)ŠMOVE.L4(A0),STRBLK+4-B(A6)TASKSESSION'ŠMOVE.L(A0),SAVEREG+TN-B(A6)TASKNAMEŠLEA„LISFHS(PC),A0ŠMOVE.W#FHCHLU,FHSCMD(A0)ŠMOVE.B#CDFLUN,FHSLUB(A0) ŠFHSCALL(A0) ŠBNE„IOERR:ŠMOVE.W#FOPSLU+FOPKEP,FHSOPT(A0)SETUPFORSENDANDKEEP2ŠMOVE.B#LDFLUN,FHSLUA(A0)TRANSFERLDFLUNTOTASKŠMOVE.B#LDFLUN,FHSLUB(A0) ŠFHSCALL(A0) ŠBNE„IOERR%*NOW START UP TASK AND WAIT FOR EVENT*…TOINDICATECOMPLETION ŠCLR.L‚D0ŠLEA„STRBLK(PC),A0ŠMOVE.BLDRCLL-B(A6),D0DŠMOVE.LD0,SAVEREG+CL-B(A6)SAVECOMMANDLINELENGTHINSTARTUPREGŠERQ.START(A0) ŠBNE„STRERRŠERQ.SETASQ#7 ŠERQ.WTEVNT ŠBRA„NXTCMDŠPAGE*<*ASR ENTRY POINT-COMES HERE AFTER TASK WHICH WAS ENVOKED HAS *…COMPLETED*TSKCOMŠERQ.RDEVNTTCOMBLK(PC)6*LOAD DIAGNOSTIC AND ABORT REGESTERS INTO SYMBOL TABLE!ŠMOVE.LD0,-(A7)‹SAVEVALUEOFD0 ŠCLR.L‚D0$ŠMOVE.W$14(A0),D0‰ABORTBINARYCODEŠMOVE.W#4,D1Ž4BYTESOFOUTPUT4ŠMOVEƒ #ABRT-SYMSTR+1,A2‚CONVERTBINTOHEXASCIIANDŠADD.L‚SYMADR-B(A6),A2ŠBSR„BINHEXLOADSYMBOLTABLE. ŠCLR.L‚D0)ŠMOVE.W$16(A0),D0‰DIAGNOSTICBINARYCODEŠMOVE.W#4,D1Ž4BYTESOFOUTPUT1ŠMOVEƒ#DIAG-SYMSTR+1,A2‚CONVERTCODETOASCIIANDŠADD.L‚SYMADR-B(A6),A2ŠBSR„BINHEXLOADSYMBOLTABLE.ŠMOVE.L(A7)+,D0‹RESTORED0/*IF TASK ABORTED, PRINT ABORT MSG AND TERMINATE ŠCMP.B‚#$2,$12(A0)‡TASKABORTED?ŠBEQ„TSKERRYES&ŠADD.L‚#66,A7BYPASSREGSANDRTRINFO0ŠBTSTW‚#15,$16(A0)ˆWEREERRORSDETECTEDBYTASK?ŠBNE„CERR18BRANCHIFYES ŠBRA„NXTCMDŠPAGE*<*LINK SETS UP COMMAND LINE FOR LINKAGE EDITOR AND ENVOKES IT$*…A1=POINTERTO1BYTEAFTERCOMMANDLNKŠBTSTƒ#SOPT,OPTFLG-B(A6),ŠBNE„NXTCMDDON'TDOIF'S'OPTIONSTILLSET ŠBSR„SKPSPCŠLEA„LISFHS(PC),A6 ŠMOVE.LA1,A0%ŠMOVE.LA1,A2ŽSAVESTARTOFFILENAMEŠBSR„SETDEFSETFILEDEFAULTSŠMOVE.W#'CF',FHSEXT(A6)ŠBSR„EDITFILE‹GETFILENAMEŠLEA„B(PC),A6‹REBASEA6ŠLEA„LISFHS(PC),A0 ŠTST.L‚D0"ŠBMI„CERR8ŽINVALIDFILEDESCRIPTOR!ŠBTSTƒ#19,D0FILENAMESPECIFIED?ŠBEQ„CERR9ŽNO-ERROR-*MAKE SURE NO OTHER FILE NAME ON COMMAND LINEŠCMP.B‚#'',D1 ŠBEQ.S‚LNK10 ŠCMP.B‚#CR,D1 ŠBNE„CERR8*USE 'X' FILE IF IT EXISTSLNK10…BSR„INSXŠMOVE.W#FHASGN,FHSCMD(A0)ŠMOVE.W#FOPPR,FHSOPT(A0)ŠMOVE.B#SFLUN,FHSLUN(A0) ŠFHSCALL(A0)ŠBEQ.S‚LNK15Ž'X'FILEOKAY/*'X' FILE DIDN'T ASSIGN-TRY REQUESTED FILE NAME ŠMOVE.LA0,A6 ŠMOVE.LA2,A0-ŠBSR„EDITFILE‹PUTFILENAMEBACKINFHSBLOCK ŠFHSCALL(A6)ŠLEA„B(PC),A6‹REBASEA6 ŠBNE„IOERR0*CHAIN FILE FOR LINK COMMANDS HAS BEEN ASSIGNED-*…READ1STLINEFORCOMMANDLNK15…LEA„SUBSIOS(PC),A0 ŠMOVE.LXMDLNE1-B(A6),IOSSAD(A0) ŠMOVE.LXMDLNE2-B(A6),IOSEAD(A0) ŠIOSCALL(A0) ŠBNE„IOERR1*SET UP TO PASS COMMAND LINE AFTER 'LINK' TO LINKŠMOVE.LIOSLEN(A0),D0ŠMOVE.LIOSSAD(A0),A1ŠMOVE.B#CR,0(A1,D0.L)!ŠCMP.B‚#'=',(A1)ŠCANSTARTWITH= ŠBNE.S‚LNK20 ŠTST.B‚(A1)+ ŠSUB.L‚#1,D0,ŠCMP.B‚#'/',(A1)ŠALLOWCOMMENTOFTYPE'=/*' ŠBNE.S‚LNK20ŠTST.B‚(A1)+ŽJUSTADVANCEA1ŠCMP.B‚#'*',(A1)/ŠBNE.S‚LNKERŽBRANCHIFNOTCOMMENTANDNOTLINK1ŠBRA.S‚LNK15ŽBRANCHFORNEXTLINEIFJUSTCOMMENTLNK20…CMP.B‚#'L',(A1)+#ŠBNE.S‚LNKERŽINVALIDLINKSTATEMENTŠCMP.B‚#'I',(A1)+ ŠBNE.S‚LNKERŠCMP.B‚#'N',(A1)+ ŠBNE.S‚LNKERŠCMP.B‚#'K',(A1)+ ŠBNE.S‚LNKERŠCMP.B‚#'',(A1)+ ŠBNE.S‚LNKER* List the '=LINK' command lineŠMOVEM.LD0/A1,-(A7)ŠMOVE.LIOSLEN(A0),A2ŠMOVE.LIOSSAD(A0),A1 ŠADD.L‚A1,A2 ŠSUB.L‚#2,A1ŠMOVE.W#'-',(A1)%ŠBSR„LOGLISDISPLAYLINKCOMMANDLINEŠMOVEM.L(A7)+,D0/A1*#ŠSUB.L‚#4,D0ŽALLOWFORCRINBUFFER*SKIP OVER ALL SPACESŠCMP.B‚#'',(A1) ŠBNE.S‚LNK25 ŠTST.B‚(A1)+ ŠSUB.L‚#1,D0 LNK25…EQU„*7ŠBSR.S‚CJUSTŽJUSTIFYCOMMANDLINEONEVENBYTEBOUNDARY0ŠMOVE.BD0,LDRCLL-B(A6)„SAVECOMMANDLINELENGTH'ŠMOVE.LA1,LDRCL-B(A6)…STARTOFCOMMANDŠMOVE.L#'LINK',LDRFN-B(A6)?*SET UP TO SEND FILE ASSIGNMENT TO LINK AS LU 5 (DON'T KEEP IT)ŠLEA„LISFHS(PC),A0ŠMOVE.B#SFLUN,FHSLUA(A0)ŠMOVE.W#FOPSLU,FHSOPT(A0)ŠBRA„ASM35ŽGOFINISHLINK@*1ST RECORD DOESN'T START WITH LINK-CLOSE FILE AND PRINT MESSAGELNKER…LEA„LISFHS(PC),A0ŠMOVE.W#FHCLOS,FHSCMD(A0) ŠFHSCALL(A0) ŠBRA„CERR10%*************************************3* CJUST JUSTIFYS COMMAND LINE ON EVEN BYTE BOUNDARY* ENTRY:$*„A1POINTSTOSTARTOFCOMMANDLINE*„D0CONTAINSLENGTHOFCOMMAND* EXIT:<*„COMMANDLINEMOVEDIFREQUIREDANDA1ADJUSTEDACCORDINGLY* CJUST…EQU„*ŠMOVEM.LD1/A0,-(A7)"ŠMOVE.L‚A1,D1ADDROFCOMMANDLINEŠBTSTƒ#0,D1ŽEVENBOUNDARY?ŠBEQ.S‚CJUSTXBRANCHIFYES$ŠMOVE.LA1,A0ŽNOSOMOVEDOWNABYTE ŠSUB.L‚#1,A1%ŠMOVE.LD0,D1ŽNUMBEROFCHARSTOMOVE)CJUST2„BEQ.S‚CJUSTXBRANCHIFDONEMOVINGŠMOVE.B(A0)+,-2(A0) ŠSUB.L‚#1,D1 ŠBRA.S‚CJUST2CJUSTX„MOVEM.L(A7)+,D1/A0ŠRTSŠPAGE**PRC HANDLES PROCESS REQUEST&*…A1=POINTERTO1STBYTEAFTERCOMMANDPRC(ŠBSR„FINTSKFINISHPREVIOUSTASK/PROCESS ŠBSR„SKPSPC*GET PROCESS FILE NAMEŠLEA„TSKFHS(PC),A6 ŠMOVE.LA1,A0ŠBSR„SETDEFSETDEFAULTSŠMOVE.W#' LO',FHSEXT(A6) ŠBSR„EDITFILEŠLEA„B(PC),A6‹REBASEA6 ŠTST.L‚D0ŠBMI„CERR8ŽINVALIDFILEDESC.!ŠBTSTƒ#19,D0FILENAMESPECIFIED?ŠBEQ„CERR9ŽNO-ERROR-*MAKE SURE NO OTHER FILE NAME ON COMMAND LINEŠCMP.B‚#'',D1 ŠBEQ.S‚PRC10 ŠCMP.B‚#CR,D1 ŠBNE„CERR82PRC10…MOVE.L#-1,TPSW-B(A6)…INDICATEDOINGPROCESS ŠBRA„NXTCMDŠPAGE**TSK HANDLES TASK REQUEST$*…A1POINTSTO1STBYTEAFTERCOMMANDTSK(ŠBSR„FINTSKFINISHPREVIOUSTASK/PROCESS ŠBSR„SKPSPC7* Set attributs and state words back to default values.ŠLEA„STATE(PC),A0ŠMOVE.W#1<ŠMOVE.L#'„',TASKN-B(A6)SETNMETOSPACESINCASENOTENTEREDŠCMP.B‚#'',D1ŠBEQ.S‚TSK10ŽNOTASKNAME ŠCMP.B‚#CR,D1 ŠBEQ.S‚TSK10ŠCMP.B‚#',',D1ŠBNE„CERR8ŽERROR#*A0 SHOULD BE POINTING AT TASK NAME.*…RETRIEVEANDMAKESURENOMORETHAN4CHARS. ŠMOVE.LA0,A1 ŠBSR„GETPARŠBCS„CERR11INVALIDTASKNAME ŠCMP.L‚#4,D1ŠBHI„CERR11TASKNAMETOOLONG ŠMOVE.LTMPSYM-B(A6),TASKN-B(A6).TSK10…MOVE.L#1,TPSW-B(A6)†INDICATEDOINGTASK ŠBRA„NXTCMDŠPAGE** IFXX TYPE COMMAND*IFEQC…LEA„IFEQT(PC),A0 ŠBRA.S‚IFXXCIFNEC…LEA„IFNET(PC),A0 ŠBRA.S‚IFXXCIFLTC…LEA„IFLTT(PC),A0 ŠBRA.S‚IFXXCIFLEC…LEA„IFLET(PC),A0 ŠBRA.S‚IFXXCIFGTC…LEA„IFGTT(PC),A0 ŠBRA.S‚IFXXCIFGEC…LEA„IFGET(PC),A0*3IFXXC…MOVE.LA0,IFXXT-B(A6)…SAVECOMPARISONADDRESS&ŠBSR.S‚PROCAREWEINPROCESSINGMODE?ŠBEQ.S‚IFXX20BRANCHIFYES*B* NOT IN PROCESSING MODE - SIMPLY PUSH 1 TO INDICATE NO PROCESSING ŠMOVE.L#1,D0 ŠBSR.S‚PUSHCŠBRA„NXTCMDGOFORNEXTCOMMAND** IN PROCESSING MODE -*ƒIFTESTSATIFIES*ƒTHEN *†PUSH0TOPROPOGATEPROCESSING*ƒELSE*†PUSH1TOSETNOPROCESSING*IFXX20„BSR.S‚TESTXX,ŠBCC.S‚IFXX30BRANCHIFNOERRORENCOUNTERED3ŠPASS1.SIFXX30ŒBypasserrorprocessingon1stpass*ŠMOVE.L#1,D0ŽPUSHNOPROCESSINGFORERROR ŠBSR.S‚PUSHC ŠBRA„CERR13IFXX30„BNE.S‚IFXX40BRANCHIFTESTDOESNOTSATISFY* TEST SATIFIES ŠCLR.L‚D0 ŠBSR.S‚PUSHC ŠBRA„NXTCMD* TEST DOES NOT SATISFYIFXX40„MOVE.L#1,D0 ŠBSR.S‚PUSHC ŠBRA„NXTCMD%*************************************8* PROC SUBROUTINE RETURNS EQ IF PROCESSING, NE OTHERWISE*PROC†TST.L‚PROCNT-B(A6)#ŠBMI.S‚YESPROCŒBRANCHIFPROCESSING0ŠTST.L‚(A7)SETNECONDCODESFORNOTPROCESSINGŠBRA.S‚PROCRTS9YESPROCƒCMP.L‚D0,D0ŽSETEQCONDITIONCODESFORPROCESSING PROCRTSƒRTS%*************************************-* PULLC DECREASES CONDITIONAL DEPTH INDICATOR*ƒIFWEGOFROMNOTPROCESSING*ƒTOPROCESSING.*PULLC…SUB.L‚#1,STKCNT-B(A6)-ŠBLT„ERR15ŽBRANCHIFUNMATCHEDENDCSTATEMENTŠMOVE.LSTKCNT-B(A6),D06ŠCMP.L‚PROCNT-B(A6),D0„DIDWECHANGEPROCESSINGMODES?ŠBGE.S‚PULLC.XŒBRANCHIFNO,ŠMOVE.L#-1,PROCNT-B(A6)ƒINDICATEPROCESSING PULLC.XƒRTS%*************************************1* PUSHC INCREASES CONDITIONAL DEPTH INDICATOR AND-*ƒSETSPROCNTIFATRANSITIONFROMPROCESSING3*ƒTONOPROCESSINGISDESIRED.‚PROCNTWILLINDICATE.*ƒTHEDEPTHATWHICHPROCESSINGWASSUSPENDED.)* INPUT: D0 = 0 TEST SATISFY (PROCESSING)*‹=1TESTFAIL(NOPROCESSING)**PUSHC…ADD.L‚#1,STKCNT-B(A6)ŠBSR„PROCWEREWEPROCESSING?1ŠBNE.S‚PUSHC.XŒBRANCHIFCURRENTLYNOTPROCESSING$ŠTST.B‚D0‘DOWECONTINUEPROCESSING?ŠBEQ.S‚PUSHC.XŒBRANCHIFYESFŠMOVE.LSTKCNT-B(A6),PROCNT-B(A6)NO-SETNOPROCESSINGDEPTHINDICAT PUSHC.XƒRTS%*************************************'* TESTXX WILL TEST THE EXPRESSION VALUE)*ƒACCORDINGTOTHECONDITIONBASEDONTHE%*ƒADDRESSSAVEDINIFXXT.‚IFTHETEST'*ƒSATIFIES,THENEQCONDITIONCODESARE)*ƒRETURNED.‚IFTESTDOESNOTSATISFYTHEN"*ƒNECONDITIONCODESARERETURNED.,*ƒIFAPARAMETERDOESNOTEXISTORISOFTHE&*ƒWRONGTYPE(NOTDECIMALORHEX)THEN)*ƒTHECARRYCONDITIONISSETUPONRETURN./*ƒTHEEX PRESSIONISSCANNEDINASIMPLELEFTTO0*ƒRIGHTMANNER,EACHELEMENTCANBEAPREVIOUSLY0*ƒDEFINEDPARAMETERORADECIMALORHEXCONSTANT-*ƒELEMENTSARESEPARATEDBY'+'OR'-'SIGNS.1*ƒTHEEXPRESSIONISTERMINATEDBYACRORABLANK* * EXAMPLE*‰IFEQƒDOG+CAT-22**TESTXX„BSR„SKPSPC&TEST.05ƒBSR.S‚GETVALGETVALUEINTOD0'ŠBCC.S‚TESTIFBranchifgoodexpression* * ERROR ENCOUNTERED IN PARAMETERTESTX.99‚OR.Bƒ#1,SRŽSETERRORŠRTS*>* TESTIF FINALLY TEST CONDITION BASE ON SAVED ADDRESS IN IFXXTTESTIF„MOVE.LIFXXT(PC),A0 ŠTST.L‚D0 ŠJSR„(A0)ŠRTS* IFEQT…RTS*IFNET…BNE.S‚EQRTN ŠBRA.S‚NERTN*IFLTT…BLT.S‚EQRTN ŠBRA.S‚NERTN*IFLET…BLE.S‚EQRTN ŠBRA.S‚NERTN*IFGTT…BGT.S‚EQRTN ŠBRA.S‚NERTN*IFGET…BGE.S‚EQRTN**NERTN…AND.B‚#0,SRŽCLEARCANDZCONDITIONSŠRTS#EQRTN…AND.B‚#0,SRŽCLEARCCONDITION&ŠCMP.L‚D0,D0ŽSETEQUALCONDITIONCODESŠRTS****************************7* GETVAL SUBROUTINE GETS VALUE OF PARAMETER OR CONSTANT *ƒINTOD0!*ƒRETURNSWITHCARRYSETIFERROR*,GETVAL„MOVE.LA1,A0ŽPOSITIONININPUTSTRINGŠCMP.B‚#CR,(A0)+,ŠBEQ.S‚GETVMBAD‹BRANCHIFONLYCRHERE-BAD ŠBSR„EXPCONVERTTOBINARYIND0ŠBRA.S‚GETVMRTS‹GORETURN**,GETVMBAD‚OR.Bƒ#1,SRŽSETCARRYFORBADRETURN* GETVMRTS‚RTSŠPAGE*6* ENDCC TERMINATES ONE LEVEL OF CONDITIONAL PROCESSING*ENDCC…BSR„PULLC ŠBRA„NXTCMDŠPAGE** INCLUDE instates include file)*ƒA2=pointerto1stbyteaftercommand.7INCL†BSR„SKPSPCA1pointsto1stcharacteroffilename+ŠADD.W‚#1,INCLNEST-B(A6)‚BumpnestinglevelEŠCMP.W‚#INCLMAX,INCLNEST-B(A6)HaveweexceededtheINCLUDEnesting?ŠBGT„ERR20ŽBranchifyes*4* Save the RRN and FHS P.B. of last file we were on.+ŠMOVE.LINCLPTR-B(A6),A2ƒPointtosavearea:ŠMOVE.LBOOTIOS+IOSRRN(PC),-(A2)Saverandomrecordnumber6ŠMOVEM.LCMDFHS+FHSVOL(PC),D0-D5SavemeatofFHSP.B.ŠMOVEM.LD0-D5,-(A2)-ŠMOVE.LA2,INCLPTR-B(A6)ƒSaveupdatedpointer*1* Close the file that we are currently prosessingŠLEA„CMDFHS(PC),A0,ŠMOVE.WFHSCMD(A0),-(A7)ƒSaveformercommandŠMOVE.W#FHCLOS,FHSCMD(A0)ŠTRAPƒ#3 ŠBNE„IOERR/ŠMOVE.W(A7)+,FHSCMD(A0)ƒRestoreformercommand*?* Set up defaults in command file FHS P.B. and perform editfile$ŠLEA„CMDFHS(PC),A6†CommandfileP.B. ŠBSR„SETDEF*ŠMOVE.LA1,A0ŽPointstofilenametoparse ŠBSR„EDITFILE'ŠBMI„ERR21ŽBranchiferrorinfilename ŠLEA„B(PC),A6ŠLEA„CMDFHS(PC),A0ŠTRAPƒ#3‘Assignthefile ŠBNE„IOERR*-* Display the file name that we just assignedŠPASS1.SINCL08ŠLEA„INCMSG1I(PC),A1ŠLEA„CMDFHS+FHSVOL(PC),A0ŠBSR.S‚FFNAMEFormatfilenameŠLEA„INCMSG1(PC),A1ŠLEA„INCMSG1E(PC),A2%ŠMOVE.L#'-BE',(A1)‡Insert'-BEGIN'ŠMOVE.L#'GIN',4(A1) ŠBSR„LISOUT*"* Set RRN to zero on included file&INCL08„MOVE.L#-1,BOOTIOS+IOSRRN-B(A6)*#* We're ready - go for next command ŠBRA„NXTCMD** Format file name for display/*ƒEntryA0-pointstovolumefieldofFHSP.B.(*‰A1-pointstoplacetomovefilename**ƒExit‚A0,A1,A2,D0destroyed*L*ƒ30spacesareblankedoutfirsttoaccountforlongestpossiblefilename.*FFNAME„MOVE.L#29,D0 ŠMOVE.LA1,A24FFNAME2ƒMOVE.B#'',(A2)+‰BlankoutreceiveingfieldŠDCNTƒD0,FFNAME2ŠMOVE.L#4,D0ŽMovevolumename ŠBSR.S‚MOVEIT0ŠMOVE.B#':',(A1)+‰Place':'intoformattedname ŠCLR.L‚D0(ŠMOVE.W(A0)+,D0‹PickuprawusernumberŠBSR„BDCONVConverttoASCII0ŠMOVE.LA1,D1ŽSeeifweareonoddbyteboundary ŠBTSTƒ#0,D1.ŠBEQ.S‚FFNAME3ŒBranchifonevenbyteboundary)ŠMOVE.B#0,(A1)+‹Forceevenbyteboundary1FFNAME3ƒMOVE.LD0,(A1)+‹PlaceintoformattednameŠMOVE.B#'.',(A1)+ ŠMOVE.L#8,D0ŠBSR.S‚MOVEITCatalogŠMOVE.B#'.',(A1)+ŠBSR.S‚MOVEITFilenameŠMOVE.B#'.',(A1)+ ŠMOVE.L#2,D0ŠBSR.S‚MOVEITExtensionŠRTS*MOVEIT„MOVE.LD0,-(A7)MOVEIT1ƒMOVE.B(A0)+,(A1)++ŠCMP.B‚#'',-1(A1)ˆDidwejustmoveablankŠBNE.S‚MOVEIT2ŒBranchifno(ŠSUB.L‚#1,A1ŽYes-resetmovetopointerMOVEIT2ƒSUB.L‚#1,D0%ŠBNE.S‚MOVEIT1ŒBranchifmoretomov eŠMOVE.L(A7)+,D0ŠRTS**BDCON…BSR„BDCONVBlankoutnullcharacters ŠROL.L‚#8,D0 ŠBSR.S‚BDCONB ŠROL.L‚#8,D0 ŠBSR.S‚BDCONB ŠROL.L‚#8,D0 ŠBSR.S‚BDCONB ŠROL.L‚#8,D0ŠRTS*BDCONB„TST.B‚D0ŠBNE.S‚BDCONBXŠMOVE.B#'',D0 BDCONBXƒRTSŠPAGE** Restore former include file6RSTRINCƒSUB.W‚#1,INCLNEST-B(A6)‚Backoffnestinglevel(ŠCRASH.LT*+1ŽCrashifthiseverhappens*1* Close the file that we are currently prosessingŠLEA„CMDFHS(PC),A0,ŠMOVE.WFHSCMD(A0),-(A7)ƒSaveformercommandŠMOVE.W#FHCLOS,FHSCMD(A0)ŠTRAPƒ#3 ŠBNE„IOERR/ŠMOVE.W(A7)+,FHSCMD(A0)ƒRestoreformercommand*.* Display the name of the file we are closing.ŠPASS1.SRSTR08ŠLEA„INCMSG1(PC),A1ŠLEA„INCMSG1E(PC),A2#ŠMOVE.L#'-EN',(A1)‡Insert'-END'ŠMOVE.L#'Dƒ',4(A1) ŠBSR„LISOUT*+* Reinstate RRN and FHS P.B. of former fileRSTR08„MOVE.LINCLPTR(PC),A2ŠMOVEM.L(A2)+,D0-D53ŠMOVEM.LD0-D5,CMDFHS+FHSVOL-B(A6)RestoreFHSP.B..ŠMOVE.L(A2)+,BOOTIOS+IOSRRN-B(A6)RestoreRRNŠMOVE.LA2,INCLPTR-B(A6)** Assign former fileŠLEA„CMDFHS(PC),A0ŠTRAPƒ#3 ŠBNE„IOERR*-* Display the file name that we just assignedŠPASS1.SRSTR16ŠLEA„INCMSG2I(PC),A1ŠLEA„CMDFHS+FHSVOL(PC),A0 ŠBSR„FFNAME‰LEA‡INCMSG2I(PC),A1*œA1=Addressmovefrom‰LEA‡INCMSG1I(PC),A2*œA2=Addressmoveto‰MOVE.B„#INCFILSZ,D0*œD0=NumberofbytestomoveRSTR10:‰MOVE.B„(A1)+,(A2)+ ‰SUB.B…#1,D0 ‰BNE.S…RSTR10/*œMovefilenamejustassignedtoBEGIN/ENDmsg*œBranchifnotdoneŠLEA„INCMSG2(PC),A1ŠLEA„INCMSG2E(PC),A2 ŠBSR„LISOUT** We're done - return to caller RSTR16„RTSŠPAGE**END ENDS TASK/PROCESS*END(ŠBSR„FINTSKFINISHPREVIOUSTASK/PROCESS ŠBRA„NXTCMD**ABORT aborts sysgen*ABT‡MOVE.L#ABORT,D0 ŠSUB.L‚A0,A0ŠTRAPƒ#1ŠPAGE**SEG HANDLES SEGMENT REQUEST%*…A1POINTSTO1STBYTEAFTERCOMMANDSEG(ŠBSR„FINTSKFINISHPREVIOUSTASK/PROCESS ŠBSR„SKPSPC*GET SEGMENT FILE NAMEŠLEA„TSKFHS(PC),A6 ŠMOVE.LA1,A0 ŠBSR„SETDEFŠMOVE.W#'LO',FHSEXT(A6) ŠBSR„EDITFILEŠLEA„B(PC),A6‹REBASEA6 ŠTST.L‚D0 ŠBMI„CERR8 ŠBTSTƒ#19,D0 ŠBEQ„CERR9&*SEE IF SEGMENT NAME FOLLOWS FILE NAME>ŠMOVE.L#'„',TASKN-B(A6)SETNMETOSPACESINCASENOTENTEREDŠCMP.B‚#'',D1ŠBEQ„CERR14NOSEGMENTNAME ŠCMP.B‚#CR,D1 ŠBEQ„CERR14ŠCMP.B‚#',',D1ŠBNE„CERR8ŽERROR&*A0 SHOULD BE POINTING AT SEGMENT NAME.*…RETRIEVEANDMAKESURENOMORETHAN4CHARS. ŠMOVE.LA0,A1 ŠBSR„GETPAR ŠBCS„CERR14INVALIDSEGMENTNAME ŠCMP.L‚#4,D1!ŠBHI„CERR14SEGMENTNAMETOOLONG ŠMOVE.LTMPSYM-B(A6),TASKN-B(A6).ŠMOVE.B#1,SEGFLG-B(A6)„INDICATEDOINGSEGMENT.ŠMOVE.L#-1,TPSW-B(A6)…INDICATENOTDOINGTASK ŠBRA„NXTCMDŠPAGE'*INSERT BOOT EXECUTION ADDR. IN MESSAGE DMSG†EQU„*+ŠBTSTƒ#MAPF,MAPFLG-B(A6)‚ISMAPTABLEFULL?ŠBEQ.S‚DMSG1ŽBRANCH‚IFNO,ŠLEA„MAPFM(PC),A1‡PRINTOUTMAPFULLMESSAGEŠLEA„MAPFME(PC),A2 ŠBSR„LOGLISDMSG1…BSR„BKLOGLIS3ŠBTSTƒ#ROPT,OPTFLG-B(A6)ISREADONLYMEMOPTIONONŠBNE.S‚DMSG4ŽBRANCHIFYESŠMOVE.LCLC-B(A6),D0 ŠMOVE.W#6,D1ŠLEA„MSGFPC(PC),A2 ŠBSR„BINHEX$ŠLEA„MSGP(PC),A1ˆ'FINALPC=XXXXXX'ŠLEA„MSGPE(PC),A2 ŠBSR„LOGLISDMSG4…MOVE.LPROCSTR-B(A6),D0 ŠMOVE.W#6,D1ŠLEA„MSGD1(PC),A2 ŠBSR„BINHEXŠLEA„MSGD(PC),A1ˆSYSGENDONEŠLEA„MSGDE(PC),A2 ŠBSR„LOGLIS* PRINT OUT NUMBER OF SYMBOLS;DMSG5…LEA„SYMSTR1(PC),A0…STARTADDRESSOFUSERSYMBOLTABLE=ŠMOVE.LNXTSYM-B(A6),D0„NEXTAVAILABLEADDRESSFROMSYMBOLTA2ŠSUB.L‚(A0),D0ŒRESULT=#OFBYTESINSYMBOLTABLEŠDIVU.W#SYMLEN,D0>ŠAND.L‚#$0000FFFF,D0†REGESTERD0CONTAINSINTEGER#OFSYMBOLSŠMOVE.WD0,SYMCNT-B(A6)$ŠBSR„BDCONVCONVERTTODECIMALASCII ŠCMP.L‚#0,D0 ŠBNE.S‚SKPA1ŠMOVE.L#$30,D0)SKPA1…LEA„MSGOT1(PC),A2†STUFFFORMESSAGEŠMOVE.LD0,(A2)ŠLEA„MSGOT(PC),A1ŠLEA„MSGOTE(PC),A2 ŠBSR„LOGLIS*ŠBSR„BKLOGLIS‹BLANKLINE ŠCLR.L‚D0%ŠMOVE.WERRCNT-B(A6),D0„ERRORCOUNTER&ŠBNE.S‚GOTERRBRANCHIFWEHAVEERRORS?ŠMOVE.L#$00000030,ERMSG-B(A6)MOVE'0'TOERRORMESSAGEBUFFER-ŠBRA.S‚ERMSGOUT‹GOPUTOUT'0ERRORS'MESSAGE9GOTERR„BSR„BDC ONVCONVERTD0FROMBINARYTODECIMALASCII.ŠMOVE.LD0,ERMSG-B(A6)…PLUGINTOERRORMESSAGEERMSGOUT‚LEA„ERMSGS(PC),A1ŠLEA„ERMSGE(PC),A2 ŠBSR„LOGLISŠLEA„FFS(PC),A1‰DOFORMFEEDŠLEA„FFE(PC),A2 ŠBSR„LISOUT*£01/10/85‚vvvvv7ŠBTST.B#COPT,OPTFLG-B(A6)Seeifthe'C'optionisset ŠIFTHEN;ŠLEA„SYMFHS(PC),A0†Gettheaddressofthesymboltablefile*£parameterblockDŠMOVE.W#FHASGN,FHSCMD(A0)GetreadytoassignthesymboltablefileŠFHSCALL(A0)ŽGodoit ŠBNE„IOERR8ŠMOVE.L#PDEF,D1‹Getthelengthofpredefinedparameters;ŠDIVU.W#SYMLEN,D1‰Dividebythelengthofonesymboltable'*£entrytogetthenumberofpredefined *£parameters=ŠLEA„SYMIOS(PC),A0†GettheaddressoftheIOSparameterblock*£forthesymboltablefile>ŠLEA„SYMSTR(PC),A1†Getthebeginningaddressofthepredefined *£parameters.ŠFOR.W‚D2=#1TOD1DO.S5ŒSUB.L‚#2,A1ŒBackup2bytessothatwecandefinethe*£typeofparameterthisis.?ŒMOVE.W#$0000,(A1)†Thismeansthatthissymbolisapredefined *£parameter.>ŒMOVE.LA1,IOSSAD(A0)„Savethebeginningaddressofthesymbol**£tableentryintotheIOSparameterblock>ŒADD.L‚#2+SYMLEN-1,A1ƒAddthelengthofthesymboltableentryAŒMOVE.LA1,IOSEAD(A0)„Savetheendingaddressofthesymboltable%*£entryintotheIOSparameterblock.5ŒADD.L‚#1,A1ŒAdd1sothatwewillbepointingtothe*£nextsymboltableentry./ŒIOSCALL(A0)ŒWriteittothesymboltablefile ŒBNE.S‚IOERRŠENDF:ŠMOVE.LSYMSTR1(PC),A1…Gettheaddressoftheuserdefined *£parameters.=ŠMOVE.WSYMCNT(PC),D1†Getthenumberofsymbolsinthesymbol*£tableŠFOR.W‚D2=#1TOD1DO.S5ŒSUB.L‚#2,A1ŒBackup2bytessothatwecandefinethe*£typeofparameterthisis.?ŒMOVE.W#$0001,(A1)†Thismeansthatthisistheparameteralong*£withitsvalue.>ŒMOVE.LA1,IOSSAD(A0)„Savethebeginningaddressofthesymbol**£tableentryintotheIOSparameterblock>ŒADD.L‚#2+SYMLEN-1,A1ƒAddthelengthofthesymboltableentryAŒMOVE.LA1,IOSEAD(A0)„Savetheendingaddressofthesymboltable%*£entryintotheIOSparameterblock.5ŒADD.L‚#1,A1ŒAdd1sothatwewillbepointingtothe*£nextsymboltableentry./ŒIOSCALL(A0)ŒWriteittothesymboltablefile ŒBNE.S‚IOERRŠENDF=ŠLEA„SYMFHS(PC),A0†GettheaddressoftheFHSparameterblock*£forthesymboltablefileCŠMOVE.W#FHCLOS,FHSCMD(A0)GetreadytoclosethesymboltablefileŠFHSCALL(A0)ŽGocloseit ŠBNE.S‚IOERRŠENDI*£01/10/85‚^^^^^ ŠSUB.L‚A0,A02ŠMOVE.WERRCNT(PC),D0†Countoferrorsencountered..ŠBEQ.S‚TERMITBranchifnoerrorsencountered.5ŠOR.Wƒ#$C000,D0ŠSeterrorbitsinRDpseudoregister.ŠSWAPƒD0$TERMIT„MOVE.W#TERM,D0‹Terminateit.ŠTRAPƒ#1ŠPAGE#*PRINT I/O ERROR WITH LU AND STATUS *…D0.L=STATUS!*…A0=FHSORIOSPARM.BLOCKADDR.*IOERR.ŠBSR„ERRMSGLETERRORMESSAGEHANDLERCOMPLAIN ŠBRA„ERRTERM*PRINT LOADER ERROR WITH STATUS *„D0.L=STATUS LDRERR„EQU„*'ŠBTSTƒ#29,D0TRAP#4ERRORFROMLOADER?ŠBNE.S‚LDRERR3ŒBRANCHIFYES2ŠBTSTƒ#27,D0TRAP#3ORTRAP#1ERRORFROMLOADER?-ŠBEQ.S‚LDRERR1ŒBRANCHIFNO-MUSTBETRAP#2'ŠBTSTƒ#28,D0TRAP#3ERRORFROMLOADER?,ŠBNE.S‚LDRERR2ŒBRANCHIFTRAP#3(FHSERROR)0LDRERR1ƒSUB.L‚A0,A0ŽTELLEMHNDLRNOTTOUSEP.B.ŠBRA.S‚LDRERR3@LDRERR2ƒLEA„LDRFHS(PC),A0†YES-SOPOINTTOFHSPARAMBLOCKPARTLDRERR3ƒBSR„ERRMSGŠBRA.S‚LDRERRXŒEXIT*5LDRERR4ƒBSR„ERRMSGLETERRORMESSAGEHANDLERCOMPLAINLDRERRXƒBRA„ERRTERM!*PRINT START UP ERROR WITH STATUS *…D0.L=STATUSSTRERR.ŠBSR„ERRMSGLETERRORMESSAGEHANDLERCOMPLAINŠBRA„ERRTERMŒERRORTERMINATION*PRINT TASK ABORTED ERROR#*…A0=ADDR.OFTASKCOMPLETIONEVENTTSKERR0ŠMOVE.L2(A0),MSGT-B(A6)ƒSAVEABORTINGTASKNAME ŠMOVE.W20(A0),D0ŠGETABORTCODEŠLEA„MSGTA(PC),A2 ŠMOVE.W#4,D1 ŠBSR„BINHEXŠLEA„MSGT(PC),A1ŠLEA„MSGTE(PC),A2 ŠBRA„ERR0***********************2* EMLOGLIS SENDS BLANK LINE TO LOG AND LIST DEVICE**ƒFOLLOWEDBYMESSAGEBOUNDEDBYA1ANDA2*ƒFOLLOWEDBYBLANKLINE*   ERRCNT IS INCREMENTED*ƒALLREGISTERSPRESERVED5* IF I/O IS BAD, .NE. CONDITION CODES RETURNED - ELSE#*ƒZEROCONDITIONCODESARERETURNED*1EMLOGLIS‚ADD.W‚#1,ERRCNT-B(A6)„BUMPERRORCOUNTERŠBSR.S‚BKLOGLIS ŠBNE.S‚EMRTN ŠBSR.S‚LOGLIS ŠBNE.S‚EMRTNŠBSR.S‚BKLOGLIS EMRTN…RTSŠPAGE*$*SKPSPC SKIPS OVER SPACES IN COMMAND* *ON CALL:%*…A1=POINTERTONEXTCHAR.INCOMMAND *…BSRSKPSPC* *ON RETURN:$*…A1=POINTERTOCHAR.AFTERSPACE(S)* SKPSPC„EQU„*ŠCMP.B‚#'',(A1)+‰SPACE?ŠBEQ.S‚SKPSPCYES-CHECKNEXT"ŠTST.B‚-(A1)ŽNO-POINTTONON-SPACEŠRTS*#*LOGOUT SENDS MESSAGE TO LOG DEVICE$*LISOUT SENDS MESSAGE TO LIST DEVICE&*LOGLIS SENDS MESSAGE TO BOTH DEVICES.;*‚IFNOLISTINGDEVICEWASSPECIFIED,LISOUTHASNOEFFECT.B*‚OUTPUTISFORMATTEDWITHNOCARRIAGERETURNINCLUDEDINMESSAGE.?*‚IFCARRIAGERETURNISINCLUDEDWITHINMESSAGE,ONLYTHATPART)*‚PRIORTOTHECARRIAGERETURNISOUTPUT.* *ON CALL:*…A1=ADDR.OFMESSAGESTART*…A2=ADDR.OFMESSAGEEND*…BSRLOGOUTORLISOUT* *ON RETURN:*…D0=I/OERRORSTATUS*…A0=IOCBADDR.>*…A2=ADDRESSJUSTPRIORTOCARRIAGERETURNINMESSAGE(IFANY)**LOGLIS„BSR.S‚LOGOUT ŠBSR.S‚LISOUTŠRTS LOGOUT„EQU„*ŠMOVEM.LD0/A0,-(A7)ŠMOVE.B#LDFLUN,D0 ŠBSR.S‚LOG10ŠMOVEM.L(A7)+,D0/A0ŠRTS LISOUT„EQU„*ŠMOVEM.LD0/A0,-(A7)ŠTST.B‚LDFLG-B(A6)1ŠBEQ.S‚LISOUTXŒBRANCHIFNOLISTDEVICESPECIFIEDŠMOVE.B#LSLUN,D0 ŠBSR.S‚LOG10LISOUTXƒMOVEM.L(A7)+,D0/A0ŠRTS*LOG10…LEA„OUTIOS(PC),A0/ŠMOVE.BD0,IOSLUN(A0)†Pluglogicalunitnumber.3ŠMOVEM.LA1/A2,IOSSAD(A0)‚PLUGINBUFFERBOUNDARIES ŠMOVE.LA1,A2:LOG10.5ƒCMP.B‚#CR,(A2)‹ArewelookingatacarriagereturnŠBEQ.S‚LOG11ŽBranchifyes2ŠCMP.L‚IOSEAD(A0),A2†Havewetestedentirebuffer?ŠBEQ.S‚LOG12ŽBranchifyes)ŠADD.L‚#1,A2ŽNosogotestnextcharacterŠBRA.S‚LOG10.5)LOG11…SUB.L‚#1,A2ŽBypasscarriagereturn.ŠMOVE.LIOSEAD(A0),D03ŠMOVE.LA2,IOSEAD(A0)†Updateendofmessageaddress+ŠMOVE.LD0,A2ŽPreserveoriginalvalueinA2LOG12…IOSCALL(A0)ŠRTS*"* BKLOG SKIPS A LINE ON LOG DEVICE#* BKLIS SKIPS A LINE ON LIST DEVICE'* BKLOGLIS SKIPS A LINE ON BOTH DEVICESBKLOGLIS‚BSR.S‚BKLOG ŠBSR.S‚BKLISŠRTS*BKLIS…MOVEM.LA1/A2,-(A7)ŠLEA„BLANK(PC),A1 ŠMOVE.LA1,A2 ŠBSR„LISOUTŠMOVEM.L(A7)+,A1/A2ŠRTS*BKLOG…MOVEM.LA1/A2,-(A7)ŠLEA„BLANK(PC),A1 ŠMOVE.LA1,A2 ŠBSR„LOGOUTŠMOVEM.L(A7)+,A1/A2ŠRTS*-* LOGIOUT OUTPUTS ON LOG DEVICE IN IMAGE MODE*ƒUSESLOGOUTSUBROUTINE;LOGIOUTƒOR.Wƒ#(1<<3),OUTIOS+IOSOPT-B(A6)SETIMAGEMODEBIT ŠBSR„LOGOUT*ŠAND.W‚#($FFFF-(1<<3)),OUTIOS+IOSOPT-B(A6)%ŠMOVE.LD0,D0ŽSETI/OCONDITIONCODESŠRTS** LOGIN INPUTS FROM CDFLUN*ƒUSESLOGOUTSUBROUTINE&LOGIN…MOVE.WOUTIOS+IOSFCT-B(A6),-(A7)#ŠMOVE.W#IOREAD,OUTIOS+IOSFCT-B(A6)ŠMOVE.L#CDFLUN,D0 ŠBSR„LOG10!ŠMOVE.W(A7)+,OUTIOS+IOSFCT-B(A6) ŠMOVE.LD0,D0ŠRTSŠPAGE**GETPAR GETS PARAMETER NAMEA*…VALIDNAMEAREFROM2-8CHARSWITHA-Z,0-9,$,&,@AND.VALID'*VALID TERMINATORS ARE CR, SPACE, AND =* *ON CALL:*…A1=STARTOFPARAMETER *…BSRGETPAR* *ON RETURN:&*…D1.L=NO.OFCHARS.INPARAMETERNAME *…A1=BYTE1PASTENDOFPARAMTER*…CARRY=0IFNOERROR *Š=1IFERROR*PARAMETER STORE IN TMPSYM0*…OUTPUTBUFFERSPACE-FILLEDBEFORESTORINGDATA?*GETPARS IS SAME AS GETPAR EXCEPT ANYTHING IS VALID TERMINATORY)*…ANDOKIFONLY1CHAR(NEVERGETERROR)**GETPARŠMOVEM.LD0/D2/A2,-(A7)ŠCLR.L‚D2‘INDICATEGETPARCALLGETP01)ŠMOVE.L#SYMLEN,D1‰BlankoutsymbolentryŠLEA„TMPSYM(PC),A2GETP02„MOVE.B#'',(A2)+ŠDCNTƒD1,GETP02ŠMOVE.W#PARLEN,D1ŠLEA„TMPSYM(PC),A2GETP05„MOVE.B(A1),D0ŠCMP.B‚#'$',D0 ŠBEQ.S‚GETP10ŠCMP.B‚#'.',D0 ŠBEQ.S‚GETP10ŠCMP.B‚#'&',D0 ŠBEQ.S‚GETP10/ŠCMP.B‚RPTCHR(PC),D0†Isittheredefinesymbol?ŠBEQ.S‚GETP10BranchifyesŠBSR.S‚CHKALPNŠBCS.S‚GETP12ENDOFPARAMETER**CHARACTER IS VALID-STORE IN PASSED BUFFERGETP10„MOVE.BD0,(A2)+ŠTST.B‚(A1)+ŽPOINTTONEXTCHARŠDCNTƒD1,GETP05+*MAXIM  UM NO. OF CHARS. FOUND-MAKE SURE NEXT*…CHAR.ISTERMINATOR1GETP12„TST.L‚D2‘DON'TCHECKTERMINATORIFGETPARS ŠBNE.S‚GETP15ŠCMP.B‚#CR,(A1) ŠBEQ.S‚GETP15ŠCMP.B‚#'',(A1) ŠBEQ.S‚GETP15ŠCMP.B‚#'=',(A1)-ŠBNE.S‚GETPERINVALIDTERM.-MAKEERRORRETURN$*PARAMETER IS VALID-MAKE GOOD RETURN*RETURN LENGTH OF PARAMETERGETP15„SUB.W‚#PARLEN,D1 ŠNEG.W‚D1'ŠTST.L‚D2‘DON'TCHECKLENGTHIFGETPARS ŠBNE.S‚GETPNR*ŠCMP.W‚#2,D1ŽERRORIFNOTATLEAST2CHARS ŠBCS.S‚GETPERGETPNR„AND.B‚#$FE,SR ŠBRA.S‚GETPRTGETPER„OR.Bƒ#1,SRŽERRORRETURNGETPRT„MOVEM.L(A7)+,D0/D2/A2ŠRTS**GETPARS*GETPARSŠMOVEM.LD0/D2/A2,-(A7)#ŠMOVE.L#1,D2ŽINDICATEGETPARSCALL ŠBRA„GETP01ŠPAGE*,*CHKALPN CHECKS TO SEE IF CHAR IS 0-9 OR A-Z*CHKNUM CHECKS FOR 0-9*CHKHEX CHECKS FOR 0-9 OR A-F* *ON CALL:*…D0.B=CHAR.TOCHECK!*…BSRCHKALPNORCHKNUM‚ORCHKHEX* *ON RETURN/*…CARRY=0IFGOODCHAR. *Š=1IFBAD*CHKALPNŠCMP.B‚#'G',D0 ŠBCS.S‚CHKHEXŠCMP.B‚#'Z',D0 ŠBHI.S‚CHKHEXCHKANR„AND.B‚#$FE,SRŠRTSCHKHEX„CMP.B‚#'A',D0 ŠBCS.S‚CHKNUMŠCMP.B‚#'F',D0 ŠBLS.S‚CHKANRCHKNUM„CMP.B‚#'0',D0 ŠBCS.S‚CHKAERŠCMP.B‚#'9',D0 ŠBLS.S‚CHKANRCHKAER„OR.Bƒ#1,SRŠRTSŠPAGE*#*BINHEX CONVERTS BINARY DATA TO HEX* *ON CALL:*…D0=BINARYFIELDTOCONVERT#*…D1.W=NO.OFBYTESINOUTPUT(1-8)*…A2=ADDR.OFOUTPUTBUFFER *…BSRBINHEX* **ON RETURN: *…D0ALTERED *…A2=A2+D1(*…NOCHECKISMADETOMAKESURED1VALID,BINHEX„MOVEM.LD1-D2/A0,-(A7)„SAVEREGISTERSŠADD.W‚D1,A2ŽGETENDOFDATA+1 ŠMOVE.LA2,A0BINH10„MOVE.LD0,D2 ŠAND.B‚#$F,D2 ŠBSR.S‚BHCVTŠMOVE.BD2,-(A0) ŠROR.L‚#4,D0 ŠSUB.W‚#1,D1 ŠBNE.S‚BINH10ŠMOVEM.L(A7)+,D1-D2/A0ŠRTS*$*BHCVT CONVERTS BINARY 4 BITS TO HEX* *ON CALL:*…D2.B=BINARYBYTE *…BSRBHCVT* *ON RETURN:*…D2.B=ASCIIHEXBHCVT ŠCMP.B‚#$A,D2 ŠBCC.S‚BHC10ŠOR.Bƒ#$30,D2Œ0-9ŠRTSBHC10…ADD.B‚#$37,D2ŒA-FŠRTSŠPAGE*$*HEXBIN CONVERTS HEX ASCII TO BINARY5*…GETHEXALREADYCALLEDTOMAKESUREVALIDHEXSTRING* *ON CALL:%*…D1.W=LENGTHOFSTRING(INCLUDING$)$*…TMPSYM+VALUE=HEXSTRINGTOCONVERT *…BSRHEXBIN* *ON RETURN:*…D0=BINARYVALUE*…D1.WCHANGED*HEXBINŠMOVEM.LD2/A0,-(A7)ŠLEA„TMPSYM+VALUE(PC),A0 ŠCLR.L‚D0ŠTST.B‚(A0)+ŽSKIPOVER$ ŠSUB.W‚#1,D1HEXB10„ASL.L‚#4,D0ŠMOVE.B(A0)+,D2 ŠBSR.S‚HBCVT ŠOR.BƒD2,D0ŠDCNTƒD1,HEXB10ŠMOVEM.L(A7)+,D2/A0ŠRTS*#*HBCVT CONVERTS ASCII HEX TO BINARY!*…NOERRORCHECKFORVALIDDIGITS* *ON CALL:*…D2.B=ASCIIDIGIT *…BSRHBCVT* *ON RETURN:*…D2.B=BINARYDIGITHBCVTŠCMP.B‚#'9',D2 ŠBHI.S‚HBC10*0-9ŠSUB.B‚#$30,D2ŠRTS *ASSUME A-FHBC10…SUB.B‚#$37,D2ŠRTSŠPAGE*(*DECBIN CONVERTS DECIMAL ASCII TO BINARY9*…GETDECALREADYCALLEDTOMAKESUREVALIDDECIMALSTRING* *ON CALL:*…D1.W=LENGTHOFSTRING(*…TMPSYM+VALUE=DECIMALSTRINGTOCONVERT *…BSRDECBIN* *ON RETURN:*…D0=BINARYVALUE*…D1.W=CHANGED*DECBINŠMOVEM.LA0/D2,-(A7) ŠCLR.L‚D0ŠLEA„TMPSYM+VALUE(PC),A0 ŠCMP.B‚#'-',(A0)Š1STCHARMINUS?ŠBNE.S‚DECB10NO*YES-SKIP OVER ŠTST.B‚(A0)+ ŠSUB.W‚#1,D1(DECB10„MOVE.LD0,-(A7)‹MultiplyD0by10ŠLSL.L‚#3,D0Ž*8ŠADD.L‚(A7),D0Œ*8+D0'ŠADD.L‚(A7)+,D0‹*8+D0+D0-->D0=D0*10 ŠCLR.L‚D2ŠMOVE.B(A0)+,D2 ŠBSR„HBCVT ŠADD.L‚D2,D0ŠDCNTƒD1,DECB10*IF 1ST CHAR WAS -, NEGATEŠCMP.B‚#'-',TMPSYM+VALUE-B(A6) ŠBNE.S‚DECBRT ŠNEG.L‚D0DECBRT„MOVEM.L(A7)+,A0/D2ŠRTSŠPAGE2* EXP gets value of arithmetic expression such as:*ƒ2-($10+3/(8-5*2))+$23* * On entry:.*ƒA1„pointstofirstcharacterofinputstring* * On exit:#*ƒD0„containsevaluatedexpression.(*ƒCC„carrysetiferror,clearotherwise*=*Expressionmustbeterminatedbyorblank.‚Noembedded9*ƒblanksareallowed.‚Alloperationsarein32bitsigned=*ƒarithmetic,overflowisignored.‚Constantspreceededby'$'9*ƒareassumedtobehex.‚Multiplicationanddivisionhave0*ƒhigherprioritythanadditionandsubrtaction.*D* If the first character of the expression is a " or!  a ' then string7*ƒcomparisonisassumedandabranchismadetoSTRCPR.* * Grammar:* *„E‚-->ƒTD* *„D‚-->ƒ+TD*-TD ** *„E‚-->ƒT+T*T-T*T* *„T‚-->ƒP*P*P/P*P* *„P‚-->ƒ-P*+P*L* *„L‚-->ƒ(E)*** Recursive descent algorithm:**‰getch;*†E:¢T:*‰T;¢P;*‰D;›TSUB1:IFch='*'*­THEN*°getch;*°P; *°multiply;*†D:¨GOTOTSUB1*‰IFch='+'™ELSE*‰THEN¤IFch='/' *Œgetch;ŸTHEN *ŒT;¦getch; *Œadd;¤P; *ŒD;¦divide;*‰ELSE§GOTOTSUB1; *ŒIFch='-'*ŒTHEN*getch;*T; *subrtact;*D;***‡P:¡L:*ŠIFch='-'˜IFch='(' *ŠTHENŸTHEN*getch;getch;*P;¡E;*negate;œIFch<>')' *ŠELSE¢THEN*IFch='+'›error; *THENœELSE*getch;šIFch=*PŸTHEN *ELSE¢push; *L;¡getch;*°ELSE*³error;* EXP‡EQU„*#ŠCMP.B‚#'"',(A1)ŠIsthisaliteral?ŠBEQ„STRCPRBranchifyes#ŠCMP.B‚#'''',(A1)‰Isthisastring?ŠBEQ„STRCPRBranchifyesŠMOVEM.LD1-D2/A0-A2,-(A7)>ŠMOVE.LA7,STAKSAV-B(A6)ƒSavestackpointerforerrorrecovery@ŠLEA„EXPSTACK(PC),A2„SetA2tofirstlocationofexpressionstk.#ŠMOVE.B(A1)+,D1‹GetnextcharacterŠBSR.S‚ESUBEvaluateexpressionŠCMP.B‚#'',D1%ŠBEQ.S‚EXPOKŽBranchon''terminatorŠCMP.B‚#$0D,D10ŠBNE„EXPERRBranchifnoor''terminator.'EXPOK…CMP.L‚D0,D0ŽClearcarryindicatorŠMOVEM.L(A7)+,D1-D2/A0-A2ŠRTS—Returntomainline*E: ESUB†EQU„* ŠBSR.S‚TSUB ŠBSR.S‚DSUB.ŠMOVE.L(A2),D0ŒTopelementonstackisanswerŠRTS**D: DSUB†EQU„*ŠCMP.B‚#'+',D1 ŠBNE.S‚DSUB04#ŠMOVE.B(A1)+,D1‹Getnextcharacter ŠBSR.S‚TSUB4ŠBSR„ADDSUBAddtoptwoelementsonexpressionstack ŠBSR.S‚DSUB*DSUB04„CMP.B‚#'-',D1 ŠBNE.S‚DSUB09#ŠMOVE.B(A1)+,D1‹Getnextcharacter ŠBSR.S‚TSUB8ŠBSR.S‚SUBSUBSubtracttoptwoelemsonexpressionstack ŠBSR.S‚DSUB* DSUB09„EQU„*ŠRTS**T: TSUB†EQU„* ŠBSR.S‚PSUBTSUB1…CMP.B‚#'*',D1 ŠBNE.S‚TSUB04#ŠMOVE.B(A1)+,D1‹Getnextcharacter ŠBSR.S‚PSUB1ŠBSR.S‚MULSUBMultiplytoptwoelementsonstack. ŠBRA.S‚TSUB1*TSUB04„CMP.B‚#'/',D1ŠBNE.S‚TSUBRTS#ŠMOVE.B(A1)+,D1‹Getnextcharacter ŠBSR.S‚PSUB.ŠBSR.S‚DIVSUBDividetoptwoelementsonstack ŠBRA.S‚TSUB1 TSUBRTSƒRTS**P: PSUB†EQU„*ŠCMP.B‚#'-',D1 ŠBNE.S‚PSUB04#ŠMOVE.B(A1)+,D1‹Getnextcharacter ŠBSR.S‚PSUB)ŠBSR.S‚NEGSUBNegatetopelementonstackŠBRA.S‚PSUBRTS*PSUB04„CMP.B‚#'+',D1 ŠBNE.S‚PSUB09#ŠMOVE.B(A1)+,D1‹Getnextcharacter ŠBSR.S‚PSUBŠBRA.S‚PSUBRTS*PSUB09„BSR.S‚LSUB PSUBRTSƒRTS**L: LSUB†EQU„*ŠCMP.B‚#'(',D1 ŠBNE.S‚LSUB04#ŠMOVE.B(A1)+,D1‹Getnextcharacter)ŠBSR„ESUBGoevaluateembeddedexpressionŠCMP.B‚#')',D1&ŠBNE.S‚EXPERRErroronmismatched'()'#ŠMOVE.B(A1)+,D1‹GetnextcharacterŠBRA.S‚LSUBRTS*7LSUB04„BSR.S‚NUMTESTŒSeeifwearepointingtoanumber"ŠBNE.S‚EXPERRBranchifno-error1ŠMOVE.LD2,-(A2)‹Pushconvertednumberontostack#ŠMOVE.B(A1)+,D1‹Getnextcharacter LSUBRTSƒRTS„0*3 [%P-E5T=QETMJUO]Pe:mFu=}<…DB•>+C* Exit from this routine if we encounter an error in the expression* EXPERR„EQU„*6ŠMOVE.LSTAKSAV(PC),A7…Adjuststackpointerforreturn4ŠMOVE.L(A2),D0ŒReturnwhatwehavecomputedsofar.ŠMOVEM.L(A7)+,D1-D2/A0-A2-ŠMOVEƒ#1,CCRSeterror(carry)conditioncodeŠRTS*A* ADDSUB - Replace top two elements on expression stack with sum.* ADDSUB„EQU„*ŠMOVE.L(A2)+,D2ŠADD.L‚(A2),D2ŠMOVE.LD2,(A2)ŠRTS*H* SUBSUB - Replace top two elements on expression stack with difference.* SUBSUB„EQU„*ŠMOVE.L4(A2),D2ŠSUB.L‚(A2),D2 ŠADD.L‚#4,A2ŠMOVE.LD2,(A2)ŠRTS*E* MULSUB - Replace top two elements on expression stack with product.* MULSUB„EQU„*ŠMOVE.L(A2)+,D2ŠMULUƒ2(A2),D2ŠMOVE.LD2,(A2)ŠRTS*F* DIVSUB - Rep! lace top two elements on expression stack with quotient.* DIVSUB„EQU„*ŠMOVE.L4(A2),D2ŠDIVUƒ2(A2),D2 ŠADD.L‚#4,A2'ŠAND.L‚#$0000FFFF,D2†MaskoffremainderŠMOVE.LD2,(A2)ŠRTS*E* NEGSUB - Replace top element on expression stack with its negation.* NEGSUB„EQU„*ŠMOVE.L(A2),D2 ŠNEG.L‚D2ŠMOVE.LD2,(A2)ŠRTS*G* NUMTEST - Return equal condition codes if character in D1 is a '$' orH*ƒnumberandreturnbinaryvalueofnumberinD2.‚IfD1doesnotcontainE*ƒ'$'ornumberthenreturnunequalconditioncodes.‚A1isassumedtoD*„pointonecharacterbeyondthecharacterthatwaspickedupinD1.* NUMTESTƒEQU„*ŠCMP.B‚#'$',D1 ŠBEQ.S‚NUMT20ŠCMP.B‚#'9',D1ŠBHI.S‚NUMTERRŠCMP.B‚#'0',D1ŠBLO.S‚NUMTERR*3NUMT20„SUB.L‚#1,A1ŽPointA1tofirstcharofstring-ŠMOVE.LD1,-(A7)‹Savethruconversionroutine#ŠBSR„CVTBINConverttobinaryinD0-ŠMOVEM.L(A7)+,D1ŠDon'talterconditioncodes-ŠBCS.S‚NUMTERRŒBeranchiferrorinconversionŠMOVE.LD0,D2ŽConvertednumber/ŠCMP.L‚D2,D2ŽReturnequal(good)condtioncodesŠBRA.S‚NUMTRTS*7NUMTERRƒTST.L‚(A7)Returnunequal(bad)conditioncodes NUMTRTSƒRTSŠPAGE*G* STRCPR will compare two strings such as might appear in the following *ƒcommand:*†IFEQ†"EXORMACS","\SYSTYPE"* * On exit:C*ƒD0„contains0ifstringsmatch-1iffirststringcollatesfirst,%*‰+1ifsecondstringcollatesfirst.)*ƒCC„carrysetiferror,clearotherwise.* STRCPR„EQU„*ŠLEA„GETLTR(PC),A0ŠCMP.B‚#'"',(A1)ŠBEQ.S‚STR04ŽBranchifliteralŠLEA„GETSTR(PC),A01STR04…JSR„(A0)ConvertstringandstoreinTMPSYM)ŠBCS.S‚STRRTSReturnonconversionerror.4* D1.W has number of characters in string or literal$* TMPSYM+VALUE has the actual value.(* A1 points one byte beyond the literal.*#* Move the string to a staging areaŠLEA„TMPSYM+VALUE(PC),A0ŠLEA„TMPVAL(PC),A2 ŠMOVE.WD1,D0'STR06…BEQ.S‚STR08ŽBranchifnullstringSTR07…MOVE.B(A0)+,(A2)+ ŠSUB.W‚#1,D0$ŠBNE.S‚STR07ŽBranchifnotallmoved6STR08…MOVE.WD1,TMPLEN-B(A6)„Savelengthof1ststring'* Scan to find beginning of next stringSTR12…CMP.B‚#CR,(A1)8ŠBEQ.S‚STRERRXŒBranchifcarriagereturnfoundtooearlyŠCMP.B‚#'"',(A1)&ŠBEQ.S‚STRLTRBranchif2ndisliteralŠCMP.B‚#'''',(A1)%ŠBEQ.S‚STRSTRBranchif2ndisstring ŠADD.L‚#1,A1 ŠBRA.S‚STR12* Convert 2nd argumentSTRLTR„BSR„GETLTR ŠBRA.S‚STR16STRSTR„BSR.S‚GETSTR2STR16…BCS.S‚STRRTSBranchiferrorin2ndargument*Compare arguments,ŠMOVE.WTMPLEN(PC),D0†Lengthof1stargument(ŠLEA„TMPVAL(PC),A0†Pointto1stargument.ŠLEA„TMPSYM+VALUE(PC),A1Pointto2ndargumentSTR14…TST.W‚D0(ŠBEQ.S‚STR40ŽBranchif1stargumentdone ŠTST.W‚D15ŠBEQ.S‚STR1BŽBranchif2ndargumentdone-1stbiggerŠCMP.B‚(A1)+,(A0)+3ŠBHI.S‚STR1BŽBranchif1stargumentcollateshigher3ŠBLO.S‚STR2BŽBranchif2ndargumentcollateshigher ŠSUB.W‚#1,D0 ŠSUB.W‚#1,D1 ŠBRA.S‚STR14H*1st argument done, if 2nd done also then equal else 2nd collates higherSTR40…TST.W‚D1*ŠBNE.S‚STR2BŽBranchif2ndcollateshigher*Arguments were equal ŠCLR.L‚D0 ŠBRA.S‚STRRTS*Argument 1 collated higherSTR1B…MOVE.L#1,D0 ŠBRA.S‚STRRTS*Argument 2 collated higherSTR2B…MOVE.L#-1,D0 ŠBRA.S‚STRRTS*Error in commandSTRERRXƒOR.Bƒ#1,SR*Return to caller STRRTS„RTSŠPAGE*@*CVTBIN CONVERTS STRING TO HEX IF IT STARTS WITH $, ELSE DECIMAL* *ON CALL:*…A1=STARTOFSTRING *…BSRCVTBIN* *ON RETURN:*…D0.L=BINARYVALUE*…CARRY=0IFNOERROR *Š=1IFERROR(*TMPSYM+VALUE USED TO STORE ASCII STRING*CVTBINŠCMP.B‚#'$',(A1)ŠBNE.S‚CVTB10ASSUMEDECIMAL6*CHECK FOR VALID HEX DIGITS AND THEN CONVERT TO BINARY ŠBSR„GETHEXŠBCS.S‚CVTBRTERROR ŠBSR„HEXBINCVTBNR„AND.B‚#$FE,SRŒNOERROR CVTBRT„RTS+*CHECK FOR VALID DECIMAL DIGITS AND CONVERTCVTB10„BSR„GETDEC ŠBCS.S‚CVTBRT ŠBSR„DECBINŠRTSŠPAGE**GETSTR PROCESSES STRING VALUE.*…MAXIMUMOF10CHARACTERSINCLUDINGBEGINNING*…ANDENDINGAPOSTROPHES,*STRING TERMINATES WITH CR OR SPACE or comma* *O" N CALL:$*…A1=STARTOFSTRING(KNOWNTOBE') *…BSRGETSTR* *ON RETURN:*…D1.W=NO.OFCHARSINSTRING*…A1=BYTE1PASTENDOFSTRING*…CARRY=0IFNOERROR *Š=1IFERROR*STRING STORED IN TMPSYM+VALUE+*…BUFFERISNOTSPACE-FILLEDBEFORESTORING7*…STRINGISSTOREDWITHAPOSTROPHESINCLUDED,THEREFORE8*‡MAXIMUMLENGTHFORTESTISVALLEN-2TOACCOUNTFORTHE"*‡TWOAPOSTROPHESTHATARESTORED.GETSTR„MOVEM.LA0/D0,-(A7)ŠLEA„TMPSYM+VALUE(PC),A0+ŠMOVE.B(A1)+,(A0)+ˆBYPASSFIRSTAPOSTROPHE'ŠMOVE.W#VALLEN-1,D1‡MAX.NO.OFCHARS.GETS10„CMP.B‚#APOS,(A1) ŠBNE.S‚GETS15(*FOUND APOSTROPHE-SEE IF ANOTHER FOLLOWSŠMOVE.B(A1)+,(A0)+ˆSAVE1ST ŠSUB.W‚#1,D1ŠCMP.B‚#APOS,(A1)&ŠBNE.S‚GETS30BRANCHIFNOTAPOSTROPHE"ŠADD.L‚#1,A1ŽBYPASS2NDAPOSTROPHE ŠBRA„GETS101*NEXT CHAR. NOT APOS-THEREFORE MUST BE TERMINATORGETS30„CMP.B‚#CR,(A1) ŠBEQ.S‚GETS20ŠCMP.B‚#'',(A1) ŠBEQ.S‚GETS20ŠCMP.B‚#',',(A1) ŠBNE.S‚GETSER*RETURN LENGTH OF STRINGGETS20„SUB.W‚#VALLEN,D1 ŠNEG.W‚D1%GETSNR„AND.B‚#$FE,SRŒMAKEGOODRETURNGETSRT„MOVEM.L(A7)+,D0/A0ŠRTS"GETS12„TST.W‚D1‘ROOMTOSAVENEXT?ŠBNE.S‚GETS17YES#GETSER„OR.Bƒ#1,SRŽMAKEERRORRETURN ŠBRA.S‚GETSRT*ERROR IF CR BEFORE 2ND APOS.GETS15„CMP.B‚#CR,(A1) ŠBEQ.S‚GETSERGETS17„MOVE.B(A1)+,(A0)+ŠDCNTƒD1,GETS10"ŠBRA.S‚GETSERGOTTOENDW/OAPOS.ŠPAGE*GETLTR PROCESSES LITERAL VALUE2*…MAXIMUMOF10CHARACTERSNOTINCLUDINGBEGINNING*…ANDENDINGDOUBLEQUOTES(")-*LITERAL TERMINATES WITH CR OR SPACE or comma* *ON CALL:$*…A1=STARTOFSTRING(KNOWNTOBE") *…BSRGETLTR* *ON RETURN:*…D1.W=NO.OFCHARSINLITERAL*…A1=BYTE1PASTENDOFLITERAL*…CARRY=0IFNOERROR *Š=1IFERROR*STRING STORED IN TMPSYM+VALUE+*…BUFFERISNOTSPACE-FILLEDBEFORESTORING=*…LITERALISSTOREDWITHOUTDOUBLEQUOTESINCLUDED,THEREFORE$*‡MAXIMUMLENGTHFORTESTISVALLEN.*GETLTR„MOVEM.LA0/D0,-(A7)ŠLEA„TMPSYM+VALUE(PC),A0ŠADD.L‚#1,A1ŽBYPASS1ST"%ŠMOVE.W#VALLEN,D1‰MAX.NO.OFCHARS.GETL10„CMP.B‚#'"',(A1) ŠBNE.S‚GETL15*FOUND "-SEE IF ANOTHER FOLLOWSŠMOVE.B(A1)+,(A0)+ˆSAVE1ST ŠSUB.W‚#1,D1ŠCMP.B‚#'"',(A1) ŠBNE.S‚GETL30ŠADD.L‚#1,A1ŽBYPASS2ND" ŠBRA„GETL10.*NEXT CHAR. NOT "-THEREFORE MUST BE TERMINATOR%GETL30„ADD.W‚#1,D1ŽCORRECTFORMOVE"ŠCMP.B‚#CR,(A1) ŠBEQ.S‚GETL20ŠCMP.B‚#'',(A1) ŠBEQ.S‚GETL20ŠCMP.B‚#',',(A1) ŠBNE.S‚GETLER*RETURN LENGTH OF STRINGGETL20„SUB.W‚#VALLEN,D1 ŠNEG.W‚D1%GETLNR„AND.B‚#$FE,SRŒMAKEGOODRETURNGETLRT„MOVEM.L(A7)+,D0/A0ŠRTS"GETL12„TST.W‚D1‘ROOMTOSAVENEXT?ŠBNE.S‚GETL17YES#GETLER„OR.Bƒ#1,SRŽMAKEERRORRETURN ŠBRA.S‚GETLRT*ERROR IF CR BEFORE 2ND APOS.GETL15„CMP.B‚#CR,(A1) ŠBEQ.S‚GETLERGETL17„MOVE.B(A1)+,(A0)+ ŠSUB.W‚#1,D1$ŠBPL.S‚GETL10NOTTOOMANYCHARSYET"ŠBRA.S‚GETLERGOTTOENDW/OAPOS.ŠPAGE*5*GETHEX CHECKS TO MAKE SURE VALUE IS VALID HEX STRING6*…ATLEAST2CHARS.MUSTBEENTEREDANDAMAXIMUMOF9 *…INCLUDING$0*STRING TERMINATES WITH NON ASCII HEX CHARACTER.* *ON CALL:(*…A1=STARTOFHEXSTRING(KNOWNTOBE$) *…BSRGETHEX* *ON RETURN:!*…D1.W=NO.OFCHARSINHEXSTRING*…A1=BYTE1PASTENDOFSTRING*…CARRY=0IFNOERROR *Š=1IFERROR*STRING STORED IN TMPSYM+VALUE*GETHEXŠMOVEM.LD0/A0,-(A7)ŠLEA„TMPSYM+VALUE(PC),A0ŠMOVE.B(A1)+,(A0)+ˆSAVE'$'%ŠMOVE.W#VALLEN-1,D1‡MAXNO.OFCHARSGETH10„MOVE.B(A1),D0ŠBSR„CHKHEXMAKESUREVALIDHEXŠBCS.S‚GETH15ENDOFHEX*CHAR. IS VALID-STOREŠMOVE.BD0,(A0)+ ŠTST.B‚(A1)+ ŠSUB.W‚#1,D1 ŠBPL.S‚GETH10**Too many characters entered, return error ŠBRA„GETSER)*LOOKS OKAY-MAKE SURE MORE THAN $ ENTEREDGETH15„CMP.B‚#'$',-1(A1)ŠBEQ.S‚GETLERONLY$*RETURN LENGTH OF STRINGŠSUB.W‚#VALLEN,D1 ŠNEG.W‚D1 ŠBRA.S‚GETLNRŠPAGE*&*GETDEC CHECKS FOR VALID DECIMAL VALUE*…ALLCHARSMUSTBE0-9.+*…MAXIMUMOF10CHARS.‚MINIMUMOFONEDIGIT* *ON CALL:*…A1=POINTERTO1STCHAR *…BSRGETDEC* *ON RETURN:*…D1.W=NO.OFCHARS.INSTRING$*…A1=POINTERTO1STBYTEAFTERVALUE*…CARRY=" 0IFNOERROR *Š=1IFERROR*STRING STORED IN TMPSYM+VALUE*GETDECŠMOVEM.LA0/D0,-(A7)ŠLEA„TMPSYM+VALUE(PC),A0$ŠMOVE.W#VALLEN,D1‰MAX.NO.OFCHARSGETD10„MOVE.B(A1),D0ŠBSR„CHKNUMMAKESURE0-9ŠBCS.S‚GETD15ENDOFDECIMAL*CHAR IS VALID-STOREŠMOVE.BD0,(A0)+ ŠTST.B‚(A1)+ ŠSUB.W‚#1,D1 ŠBPL.S‚GETD10+*Too many characters entered, return error. ŠBRA„GETSER*RETURN LENGTH OF STRINGGETD15„SUB.W‚#VALLEN,D1 ŠNEG.W‚D1&ŠBEQ„GETSERMUSTHAVEATLEAST1DIGIT ŠBRA„GETSNRŠPAGE*1*CHKST CHECKS TO SEE IF SYMBOL IS IN SYMBOL TABLE* *ON CALL:;*…TMPSYMCONTAINSSYMBOLBEGINSEARCHED(LJF,SPACE-FILLED) *…BSRCHKST* *ON RETURN:)*…A3=ADDR.OFSYMBOLTABLEENTRYIFFOUND*…CARRY=0IFNOTFOUND *Š=1IFFOUND*CHKST…MOVEM.LA0-A2/D0,-(A7) ŠBSR.S‚CHKSTAŠMOVEM.L(A7)+,A0-A2/D0ŠRTS*H* CHKSTI inserts symbol into table in place if it is already there or at2*ƒtheendofthetableisitisnotalreadythere.H*ƒIfweareonlastpass,thePPASLflaginPFLAGwillbesetassociated*ƒwiththeinsertedsymbol.*CHKSTI„MOVEM.LA0-A2/D0,-(A7) ŠBSR.S‚CHKSTA8ŠBCC.S‚CHKSTI40‹Symbolnotintable-goinsertnormally1ŠMOVE.LA3,A1ŽWheresymbolisinsertedintotable#ŠLEA„TMPSYM(PC),A0†Symboltoinsert.ŠMOVE.W#SYMLEN,D0‰LengthofsymboldefinitionCHKSTI10‚MOVE.B(A0)+,(A1)+ŠDCNTƒD0,CHKSTI10ŠPASS1.SCHKSTI205ŠBSETƒ#PPASL,PFLAG(A3)ƒSetinsertedinlastpassflagŠBSR.S‚SAVEDEF0CHKSTI20‚BRA.S‚CHKSTI50‹Symbolinserted-return*CHKSTI40‚BSR.S‚SAVEDEF+ŠBSR.S‚INSSTŽInsertsymbolatendoftable.CHKSTI50‚MOVEM.L(A7)+,A0-A2/D0ŠRTS*3* Check to see is symbol is all ready in the table.7*ƒReturncarryclearifsymbolintable,setotherwise.CHKSTA„LEA„TMPSYM(PC),A2.ŠMOVEA.LSYMADR-B(A6),A3ƒSTARTOFSYMBOLTABLECHKST05ƒMOVE.LA2,A0)ŠCMP.L‚NXTSYM-B(A6),A3„ATENDOFSYMBOLS?ŠBCS.S‚CHKST10ŒNO*YES-SYMBOL NOT IN SYMBOL TABLEŠAND.B‚#$FE,SR CHKSTRTƒRTS*SEE IF SYMBOLS MATCHCHKST10ƒMOVE.LA3,A1ŠMOVE.W#PARLEN,D0CHKST15ƒCMP.B‚(A1)+,(A0)+ŠBNE.S‚CHKST20ŒNOMATCHŠDCNTƒD0,CHKST15*SYMBOLS MATCH ŠOR.Bƒ#1,SRŠBRA.S‚CHKSTRT*GO TO NEXT ENTRYCHKST20ƒADD.L‚#SYMLEN,A3 ŠBRA„CHKST05ŠPAGE*)*INSST INSERTS NEW SYMBOL IN SYMBOL TABLE* *ON CALL:.*…TMPSYMCONTAINSSYMBOLTABLEENTRYTOINSERT#*…(ALREADYMADESURENOTDUPLICATE) *…BSRINSST *ON RETURN:*…CARRY=0IFINSERTED"*Š=1IFNOMORESYMBOLTABLESPACE*8INSST…BSETƒ#INSTF,MSCFLG-B(A6)Setsymbolinsertedflag.ŠMOVEM.LD0/A0-A2,-(A7)(ŠMOVE.LNXTSYM-B(A6),A0„NEXTAVAIL.SLOT-ŠLEA„SYMLEN(A0),A1†Endofsymbolwillgohere'ŠCMP.L‚SYMEND-B(A6),A1„Willsymbolfit?ŠBLS.S‚INSS10Branchifyes*NO MORE ROOM-RETURN ERROR ŠOR.Bƒ#1,SRINSSRT„MOVEM.L(A7)+,D0/A0-A2ŠRTS*MOVE SYMBOL TO SYMBOL TABLEINSS10„LEA„TMPSYM(PC),A1ŠMOVE.W#SYMLEN,D0,ŠMOVE.LA0,A2ŽSavesymbolpositionintable.INSS15„MOVE.B(A1)+,(A0)+ŠDCNTƒD0,INSS151INSS18„MOVE.LA0,NXTSYM-B(A6)„POINTTONEXTAVAILŠAND.B‚#$FE,SR ŠBRA.S‚INSSRTŠPAGE*£01/10/85‚vvvvvSAVEDEF7ŠBTST.B#COPT,OPTFLG-B(A6)Seeifthe'C'optionissetŠIFTHEN.S@ŠIF.WƒPASS-B(A6)#-1THEN.SIfthelastpass,thensavethe*£labelandwhodefinedit)ŒMOVEM.LA0-A3,-(A7)…Saveusersregisters>ŒLEA„SYMBUFF(PC),A1ƒGetthebufferusedtowritetothesymbol *£tablefile7ŒMOVE.W#$0002,(A1)+…Thismeansthatthisentryforthe)*£parameterhasthefilethatdefinedit.<ŒLEA„TMPSYM(PC),A2„Thisistheparameterblockthatcontains*£theparameter.ŒFOR.B‚D0=#1TO#PARLENDO.S4ŽMOVE.B(A2)+,(A1)+„MovetheparametertothebufferŒENDF>ŒLEA„CMDFHS+FHSCLG(PC),A3Gettheaddressofthefilenameused*£todefinethisparameter.ŒFOR.B‚D0=#1TO#18DO.S+ŽMOVE.B(A3)+,(A1)+„MovefilenametobufferŒENDFŒLEA„SYMFHS(PC),A0CŒMOVE.W#FHASGN,FHSCMD(A0)Getreadytoclosethesymboltablefile ŒFHSCALL(A0) ŒBNE„IOERRŒLEA„SYMBUFF(PC),A0CŒMOVE.LA0,SYMIOS+IOSSAD-B(A6)Thisisthebeginningaddressofthe)*£buffertowriteouttot# hesymboltable*£file.@ŒADD.L‚#PARLEN+2+18-1,A0Gettheendingaddressofthebufferto%*£writeouttothesymbolstablefileŒMOVE.LA0,SYMIOS+IOSEAD-B(A6)=ŒIOSCALLSYMIOS(PC)†Writethebuffertothesymboltablefile ŒBNE„IOERRŒLEA„SYMFHS(PC),A0CŒMOVE.W#FHCLOS,FHSCMD(A0)GetreadytoclosethesymboltablefileŒFHSCALL(A0)ŒGocloseit ŒBNE„IOERR,ŒMOVEM.L(A7)+,A0-A3…RestoreusersregistersŠENDIŠENDIŠRTS*£01/10/85‚^^^^^ŠPAGE*A*SETDEF PUTS DEFAULT USER NO. VOLUME AND CATALOG IN FHS BLOCK AND*…SETSEXTENSIONTO'SA'* *ON CALL:*…A6=ADDR.OFFHSBLOCK%*…SAVEREG=REGISTERSSAVEDATSTARTUP *…BSRSETDEF*SETDEFŠMOVE.LA0,-(A7)ŠLEA„SAVEREG(PC),A0ŠMOVE.LDUV(A0),FHSVOL(A6)ŠMOVE.WDUN(A0),FHSUSN(A6)ŠMOVE.LDUC(A0),FHSCLG(A6)ŠMOVE.LDUC+4(A0),FHSCLG+4(A6)ŠMOVE.W#'SA',FHSEXT(A6)ŠMOVE.L(A7)+,A0ŠRTS*1*INSX MOVES FILE NAME DOWN 1 POSITION AND INSERTS*†'X'ATBEGINNING* *ON CALL:*…A0=ADDR.OFFHSBLOCK *…BSRINSX* *ON RETURN:*…REGISTERSUNCHANGED*INSXŠMOVEM.LD0/A1,-(A7)ŠLEA„FHSFIL+6(A0),A1 ŠMOVE.W#7,D0INSX10„MOVE.B(A1),1(A1) ŠTST.B‚-(A1)ŠDCNTƒD0,INSX10ŠMOVE.B#'X',1(A1)ŠMOVEM.L(A7)+,D0/A1ŠRTSŠPAGE*G*ZERBUF WRITES SECTOR OF 0'S TO TEMPORARY BOOT FILE AND ADDS 256 TO CLC*#*WRTBUF WRITES SECTOR ALREADY SETUP* *ON CALL:'*…SUBBUFISSETUPSECTORIFWRTBUFCALL*…BSRZERBUFORWRTBUF* *ON RETURN: *…CLC=CLC+256****GOES TO IOERR IF DISK ERRORZERBUFŠMOVEM.LA0/D0,-(A7)ŠLEA„SUBBUF(PC),A0ŠMOVE.W#256/4,D0%ZERB10„CLR.L‚(A0)+ŽZEROSECTORBUFFERŠDCNTƒD0,ZERB10 ŠBRA.S‚ZERB20WRTBUFŠMOVEM.LA0/D0,-(A7)ZERB20„LEA„TMPIOS(PC),A0 ŠMOVE.LSUBBUF1-B(A6),IOSSAD(A0) ŠMOVE.LSUBBUF2-B(A6),IOSEAD(A0) ŠIOSCALL(A0) ŠBNE„IOERR)ŠADD.L‚#256,CLC-B(A6)…UPDATELOC.COUNTER#ŠBSR„PCUPDATŒUpdatesymboltablePCŠMOVEM.L(A7)+,D0/A0ŠRTSŠPAGE*4*FINTSK FINISHES TASK, PROCESS OR SEGMENT PROCESSING;*…BYMERGINLOFILEINTOTEMPORARYOUTPUTFILEANDBUILDING*…TCB/TSTIFTASK* *ON CALL:!*…TPSW=0FORNOTASKORPROCESS*Š>0FORTASK*Š<0FORPROCESSORSEGMENT*…SEGFLG<>0FORSEGMENT *…BSRFINTSK* *ON RETURN:*…A1=UNCHAGNED *…OTHERREGISTERSMAYBECHANGED*…TPSW=0 *…SEGFLG=0,****GOES TO ERROR MESSAGE AND ABORT IF ERROR*FINTSKŠTST.L‚TPSW-B(A6)‰TASK/PROCESS?ŠBNE.S‚FINT10YESŠRTS„NO-JUSTŒRETURN FINT10„MOVE.LA1,-(A7)‹SAVEREG.1*MUST ASSIGN TASK OR PROCESS LO FILE AND READ LIBŠLEA„TSKFHS(PC),A0ŠMOVE.W#FHASGN,FHSCMD(A0) ŠFHSCALL(A0) ŠBNE„IOERRŠLEA„SUBSIOS(PC),A0ŠLEA„LIBLK(PC),A1ŠMOVE.LA1,IOSSAD(A0)ŠLEA„LIBLKE(PC),A1ŠMOVE.LA1,IOSEAD(A0)$ŠIOSCALL(A0)ŽGETLOADERINFO.BLOCK ŠBNE„IOERR ŠMOVE.LSUBBUF1-B(A6),IOSSAD(A0) ŠMOVE.LSUBBUF2-B(A6),IOSEAD(A0)*,* CONSTRUCT NAME PORTION OF TASK MAP MESSAGE:ŠMOVE.LTSKFHS+FHSFIL-B(A6),FILNAM-B(A6)PLUGINFILENAME,ŠMOVE.LTSKFHS+FHSFIL+4-B(A6),FILNAM+4-B(A6)ŠLEA„FILNAM(PC),A0†PLUGIN...%FINT01„CMP.B‚#'',(A0)+‰...EXTENSION(ŠBNE.S‚FINT01...WITHBLANKCOMPRESSIONŠMOVE.B#'.',-1(A0)!ŠMOVE.BTSKFHS+FHSEXT-B(A6),(A0)+#ŠMOVE.BTSKFHS+FHSEXT+1-B(A6),(A0)+BŠMOVE.LTSKLST-B(A6),TSKTCB-B(A6)SAVEADDRTOPLUGINTCBADDRESS#ŠADD.L‚#TSKENT2-FILNAM,TSKTCB-B(A6)0ŠTST.B‚SEGFLG-B(A6)‡AREWEPROCESSINGASEGMENT?ŠBNE.S‚FINT04BRANCHIFYES*-* IF TASK, THEN MOVE REAL TASK NAME TO TSKENTŠTST.L‚TPSW-B(A6)‰TASK/PROCESS?ŠBMI„FINT20BRANCHIFPROCESS@ŠMOVE.LLIBLK+LIBTSK-B(A6),TSKENT-B(A6)SAVETASKNAMEFROMFILE1ŠCMP.L‚#'„',TASKN-B(A6)WASATASKNAMESUPPLIED?+ŠBEQ.S‚FINT30BRANCHIFNO-DONEWITHNAME2ŠMOVE.LTASKN-B(A6),TSKENT-B(A6)MOVETASKNAMEIN,ŠBRA.S‚FINT30BRANCHFORDONEWITHTASKNAME** HANDLE SEGMENT PROCESSING)FINT04„MOVE.LTASKN-B(A6),D1…SEGMENTNAMEŠMOVE.LD1,TSKENT3-B(A6)*(* SEE IF SEGMENT EXISTS, THEN PROCESS IT.ŠLEA„LIBLK+LIBSAD(PC),A0„A0RUNSTHRUSEGMENTS2FINT12„CMP.L‚#-1,SADLEN(A0)…LASTSEGMENTEXAMINED?0ŠBEQ.S‚FCERR16ŒBRANCHIFYES-SEGMENTNOTFOUNDŠCMP.L# ‚SADNAM(A0),D1%ŠBEQ.S‚FINT15BRANCHIFSEGMENTFOUND&ŠLEA„LIBSADLN(A0),A0„POINTTONEXTSAD ŠBRA„FINT12?FINT15„MOVE.LSADNAM(A0),TSKENT3-B(A6)SEGMENTNAMETOMAPLINE#ŠBSR„FINT40GOPROCESSTHISSEGMENT*-* PLUG SEGMENT START ADDRESS INTO MAP MESSAGE)ŠMOVE.LFSTART-B(A6),D0„NUMBERTOCONVERT ŠMOVE.L#6,D1ŠLEA„TSKENT1(PC),A2ŠMOVE.L#'$',(A2)+ ŠBSR„BINHEX%ŠBSR„TSKMSGMOVETASKMESSAGETOLIST ŠBRA„FINTRTN,FCERR16ƒEQU„*’COMEHEREIFSEGMENTNOTFOUND7ŠMOVE.LD1,CMSG16+2-B(A6)‚PUTSEGMENTNAMEINTOMESSAGE ŠBSR„BKLOGLISŠLEA„CMSG16(PC),A1ŠLEA„CMSG16E(PC),A2 ŠBSR„LOGLIS ŠBNE„IOERR ŠBSR„BKLOGLIS ŠBRA„FINTRTN* * HANDLE PROCESS/TASK PROCESSING/FINT20„BSR„FINS1ŽCHECKFOREXCLUDEDSEGMENTSOKG‰MOVE.LLIBLK+LIBTSK-B(A6),TSKENT4-B(A6)MOVEINPROCESSNAMEFROMFILE FINT30„EQU„*+ŠLEA„LIBLK+LIBSAD(PC),A0„A0RUNSTHRUSAD'S3FINT22„CMP.L‚#-1,SADLEN(A0)…LASTSEGMENTPROCESSED?.ŠBEQ„FCERR17ŒBRANCHIFYES-NOSEGSPROCESSEDŠBSR„FINS2ŽSEEIFSEGPASSESŠBEQ.S‚FINT24BRANCHIFYES*ŠLEA„LIBSADLN(A0),A0„POINTTONEXTSEGMENTŠBRA„FINT22GOFORNEXTSEGMENT;FINT24„CLR.W‚SEGCNT-B(A6)‡CURRENTSEGMENTNUMBERPROCESSINGEFINT25„MOVE.LSADNAM(A0),TSKENT3-B(A6)SEGMENTNAMETOMAPLINEIMAGE#ŠBSR„FINT40GOPROCESSTHISSEGMENT*%* PLUG START ADDRESS INTO MAP MESSAGE)ŠMOVE.LFSTART-B(A6),D0„NUMBERTOCONVERT ŠMOVE.L#6,D1ŠLEA„TSKENT1(PC),A2ŠMOVE.B#'$',(A2)+ ŠBSR„BINHEX%ŠBSR„TSKMSGMOVETASKMESSAGETOLIST ŠTST.L‚TPSW-B(A6)‰AREWEATASK?ŠBPL.S‚FINT26BRANCHIFYESAŠMOVE.LFSTART-B(A6),PROCSTR-B(A6)SAVESTARTADDRESSFORPROCESS** DO REMAINING SEGMENTS6FINT26„LEA„LIBSADLN(A0),A0„A0RUNSTHRUREMAININGSADS-ŠCMP.L‚#-1,SADLEN(A0)…LASTSEGMENTPROCESSED?ŠBEQ.S‚FINT29BRANCHIFYES ŠBSR„FINS2ŽSEEIFSEGMENTPASSESŠBNE.S‚FINT26BRANCHIFNO#ŠTST.L‚TPSW-B(A6)‰AREWEAPROCESS?ŠBMI.S‚FINT28BRANCHIFYES6ŠADD.W‚#1,SEGCNT-B(A6)„BUMPSEGMENTINPROCESSCOUNTER@ŠCMP.W‚#MAXSEG,SEGCNT-B(A6)HAVEWEPROCESSEDTOOMANYSEGMENTS?ŠBHI„ERR11ŽBRANCHIFSOEFINT28„MOVE.LSADNAM(A0),TSKENT3-B(A6)SEGMENTNAMETOMAPLINEIMAGE"ŠBSR„FINT40GOPROCESSTHESEGMENT<ŠMOVE.LFSTART-B(A6),D0„PLUGSEGSTARTADDRINTOMAPMESSAGE ŠMOVE.L#6,D1ŠLEA„TSKENT1(PC),A2ŠMOVE.B#'$',(A2)+ ŠBSR„BINHEX%ŠBSR„TSKMSGGOSAVETASKMESSAGELINE.ŠBRA.S‚FINT26CONTINUETHRUREMAININGSEGMENTS* * COME HERE IF NO SEGMENTS FOUND FCERR17ƒEQU„*"ŠLEA„CMSG17(PC),A1†DISPLAYMESSAGEŠLEA„CMSG17E(PC),A2 ŠBSR„EMLOGLIS ŠBNE„IOERR ŠBRA„FINTRTN*"* IF TASK, CONTINUE PROCESSING TCBFINT29„TST.L‚TPSW-B(A6)ŠBMI„FINTRTNŒBRANCHIFPROCESS** CONTINUE TCB PROCESSING-*PUT TCB ADDR. IN TASK LIST IF NOT 'R' OPTION*ŠBTSTƒ#ROPT,OPTFLG-B(A6)IS'R'OPTIONSETŠBNE.S‚TCB25ŽBRANCHIFYES+ŠBTSTƒ#MAPF,MAPFLG-B(A6)‡ISMAPTABLEFULL?ŠBNE.S‚TCB25ŽBRANCHIFYESŠMOVE.LCLC-B(A6),D0 ŠMOVE.W#6,D1ŠMOVE.LTSKTCB-B(A6),A2ŠMOVE.L#'$',(A2)+ ŠBSR„BINHEX TCB25…EQU„*%*MUST BUILD AND WRITE OUT TCB AND TST*…CLCPOINTSTOTCBSTART*ZERO TCB/TST SPACE IN MEMORYŠLEA„TCBBLK(PC),A0ŠMOVE.W#TCBBLKL/4,D0TCB29…CLR.L‚(A0)+ŠDCNTƒD0,TCB29ŠLEA„LIBLK(PC),A4ŠLEA„TCBBLK(PC),A0ŠMOVE.L#'!TCB',TCB(A0)*SET UP TCB LIST POINTERŠMOVE.LTCBLST-B(A6),TCBALL(A0).*IF TASK STATE IS READY, PUT TCB IN READY LISTŠCMP.W‚#1<*SAVE ADDR. OF THIS TCB IN MAP MESSAGE IF NOT USING 'R' OPTIONTCB30ŠBTSTƒ#ROPT,OPTFLG-B(A6)+ŠBNE.S‚TCB31ŽBRANCHIF'R'OPTIONSPECIFIEDŠMOVE.LCLC-B(A6),D0ŠMOVE.LD0,TCBLST-B(A6).ŠMOVE.W#8,D1ŽSAVECLCLINKFORNON'R'OPTIONŠMOVEƒ#TCBLP-SYMSTR+1,A2ŠADD.L‚SYMADR-B(A6),A2 ŠBSR„BINHEX ŠBRA.S‚TCB32*=* SAVE FILE ADDRESS LINK OF THIS TCB IN TCBLST FOR 'R' OPTIONTCB31…CLR.L‚D08ŠMOV$ E.WTSKCNT-B(A6),D0„NUMBEROFTASKSPROCESSEDSOFAR ŠLSL.L‚#8,D0,ŠLSL.L‚#1,D0Ž*512TOREFLECTTCBBYTECOUNT&ŠADD.L‚CLC-B(A6),D0‡+LOCATIONCOUNTER'ŠSUB.L‚BASEADDR-B(A6),D0‚-BASEADDRESS%ŠLSR.L‚#8,D0Ž/256FORSECTORADDRESSŠMOVE.LD0,TCBLST-B(A6)"*MOVE TASK NAME TO TCB-USE COMMAND*…LINENAMEUNLESSSPACESTCB32…CMP.L‚#'„',TASKN-B(A6) ŠBNE.S‚TCB35,*NO TASK NAME ON COMMAND LINE, TAKE FROM LIBŠMOVE.LLIBTSK(A4),TCBNAME(A0) ŠBRA.S‚TCB40$TCB35…MOVE.LTASKN-B(A6),TCBNAME(A0)TCB402ŠMOVE.LLIBMON(A4),TCBMON(A0)MONITORTASK/SESSION!ŠMOVE.LLIBMON+4(A4),TCBMON+4(A0)/ŠMOVE.LSESSION-B(A6),TCBSESSN(A0)SAVESESSIONŠMOVE.BPRIOR-B(A6),D0+ŠMOVE.BD0,TCBCPRI(A0)‚Setcurrentpriority)ŠMOVE.BD0,TCBLPRI(A0)‚Setlimitpriority+ŠMOVE.BD0,TCBRPRI(A0)‚Setrunningpriority)ŠMOVE.WATTR-B(A6),TCBATTR(A0)ƒATTRIBUTES&ŠMOVE.WSTATE-B(A6),TCBSTATE(A0)STATEŠMOVE.LCLC-B(A6),D0ŠADD.L‚#TSTBEGIN,D0"ŠMOVE.LD0,TCBTST(A0)†ADDR.OFTST%ŠMOVE.W#1,TCBTSTSM(A0)„TSTSEMAPHORE ŠMOVE.W#1,TCBASQSM(A0)„ASQSEM.0ŠMOVE.LLIBENT(A4),TCBENTRY(A0)TASKENTRYPOINT'ŠMOVE.WUSER-B(A6),TCBUSER(A0)ƒUSERNO.)ŠMOVE.B#$FA,TCBSSP(A0)„EXECSTACKLENGTH&ŠMOVE.LLIBENT(A4),TCBPC(A0)USER'SPC"ŠMOVE.W#$0084,TCBVOR(A0)‚PlugVOR*NOW BUILD TSTŠLEA„TCBBLK+TSTBEGIN(PC),A0ŠMOVE.L#'!TST',TST(A0)1ŠMOVE.B#MAXSEG,TSTNSEGS(A0)MAX.NO.OFSEGMENTS4ŠMOVE.W#$24,TSTLMMU(A0)ƒINDEXTOLASTMMULOADLINE6ŠMOVE.W#$44,TSTLATTR(A0)‚INDEXTOLASTSEG.ATT.LINE*BUILD SEGMENT INFO. IN TST*ŠLEA„LIBLK+LIBSAD(PC),A4„STARTOFSEGMENTS'ŠMOVE.W#MAXSEG,D1‰MAX.NO.OFSEGMENTS/ŠLEA„MMUPO(PC),A1‡STARTOFMMUPHYSICALOFFSETS%ŠLEA„TSTMMU(A0),A2†STARTOFMMUINFO.)ŠMOVE.LA2,A3ŽSTARTOFSEGMENTATTRIBUTES#*SEE IF ALL SEGMENTS HAVE BEEN DONE,TCB65…MOVE.LA4,A0ŽPOINTA0TOSTARTOFSADS%ŠBSR„FINS2ŽDOWEPROCESSTHISSEGMENTŠBEQ.S‚TCB67ŽBRANCHIFYES3ŠADD.L‚#1,D1ŽCOMEHEREIFSEGMENTISTOBEEXCLUDED ŠBRA.S‚TCB72*TCB67…MOVE.LSADSTR(A4),D2ŠMOVE.LSADLEN(A4),D3ŠCMP.L‚#-1,D3LENGTH=-1?"ŠBEQ.S‚TCB75ŽYES-DONEALLSEGMENTSŠADD.L‚D2,D3ŽD3=ENDADDR.+1ŠSUB.L‚#1,D3ŽD3=ENDADDR.ŠROR.L‚#8,D2ŽGETPAGESTARTŠROR.L‚#8,D3ŽGETPAGEEND'ŠMOVE.WD2,TSTLB(A2)‡SAVESTARTINGPAGE%ŠMOVE.WD3,TSTLE(A2)‡SAVEENDINGPAGE)ŠMOVE.W(A1)+,TSTPO(A2)„SAVEPHYS.OFFSET3ŠMOVE.W#RAMCTL,TSTCTL(A2)SETUPSTATUS-ASSUMERAM5*CHANGE STATUS TO ROM IF SEGMENT ATTRIBUTE BIT 14 SETŠBTSTW‚#SEGAROM,SADATT(A4) ŠBEQ.S‚TCB70ŠMOVE.W#ROMCTL,TSTCTL(A2)5TCB70…MOVE.LSADNAM(A4),TSTANAME(A3)SAVESEMENTNAME7ŠMOVE.WSADATT(A4),TSTAATTR(A3)SAVESEGMENTATTRIBUTES*MASK OFF SHARABLE SEGMENT BITSŠBCLRW‚#SEGASHR,TSTAATTR(A3)ŠBCLRW‚#SEGAGLBL,TSTAATTR(A3)-*SET BIT INDICATING THAT THIS IS PHYSICAL ROM‰BSETW…#SEGAPROM,TSTAATTR(A3)6*SEGMENT INFO. SETUP IN TST-GET READY FOR NEXT SEGMENT ŠLEA„8(A2),A2 ŠLEA„8(A3),A3TCB72…LEA„LIBSADLN(A4),A4ŠDCNTƒD1,TCB65#*SAVE ACTUAL NO. OF SEGMENTS IN TSTTCB75…SUB.W‚#MAXSEG,D1 ŠNEG.W‚D1CŠLEA„TCBBLK+TSTBEGIN(PC),A0PointtoTaskSegmentTablewe'remakinŠMOVE.BD1,TSTCSEGS(A0)!*WRITE TCB AND TST TO OUTPUT FILE1ŠADD.W‚#1,TSKCNT-B(A6)„BUMP#OFTASK'SPROCESSEDŠLEA„TMPIOS(PC),A0ŠLEA„TCBBLK(PC),A2ŠMOVE.LA2,IOSSAD(A0)ŠLEA„TCBBLK+255(PC),A2ŠMOVE.LA2,IOSEAD(A0) ŠIOSCALL(A0) ŠBNE„IOERRŠADD.L‚#256,IOSSAD(A0)ŠADD.L‚#256,IOSEAD(A0) ŠIOSCALL(A0) ŠBNE„IOERR<ŠBTSTƒ#ROPT,OPTFLG-B(A6)DONOTBUMPLOCATIONCOUNTERIF...+ŠBNE.S‚FINTRTNŒ...INROMMODE('R'OPTION))ŠADD.L‚#512,CLC-B(A6)…UPDATELOC.COUNTER+ŠBSR„PCUPDATŒUpdatesymboltablePCcounterFINTRTN*CLOSE LO FILEŠLEA„TSKFHS(PC),A0ŠMOVE.W#FHCLOS,FHSCMD(A0) ŠFHSCALL(A0) ŠBNE„IOERRŠCLR.L‚TPSW-B(A6)6ŠCLR.W‚EXCLNUM-B(A6)†CLEARNUMBEROFEXCLUDEDSEGMENTS1ŠCLR.B‚SEGFLG-B(A6)‡CLEARSEGMENTPROCESSINGFLAGŠCLR.L‚SUBSIOS+IOSRRN-B(A6)ŠCLR.W‚SUBSIOS+IOSOPT-B(A6)$ŠLEA„PCDSP(PC),A2‡PRINTNEWPCVALUE ŠMOVE.L#6,D1ŠMOVE.LCLC-B(A6),D0'ŠBSR„BINHEXCONVERTNEWPCVALUETOHEX(ŠLEA„PCMSG(PC),A1‡DISPLAYNEWPCMESSAGEŠLEA„PCMSGE(PC),A2 ŠBSR„LISOUT ŠBNE„IOE$ RRŠMOVE.L(A7)+,A1‹RESTOREREG.ŠRTS*=* SUBROUTINE TO OUTPUT TO TEMPORARY BOOT FILE FOR ONE SEGMENT**INPUT:‚A0-POINTSTOSAD9*‰REGISTERSA0,D0ANDD1AREPRESERVED,OTHERSMAYCHANGE* FINT40„EQU„*&ŠMOVEM.LA0/D0/D1,-(A7)„SAVEREGISTERS$ŠMOVE.LA0,A4ŽUSEA4FORSADPOINTER*-* ERROR IF SEGMENT NOT START ON PAGE BOUNDARY1FINT44„MOVE.LSADSTR(A4),D2†SEGMENTLOGICALSTART ŠTST.B‚D2 ŠBNE„ERR12** ERROR IF SEGMENT ZERO LENGTH$ŠMOVE.LSADLEN(A4),D3†SEGMENTLENGTH ŠBEQ„ERR9 ŠADD.L‚D2,D3)ŠSUB.L‚#1,D3ŽD3=ENDINGADDRESSOFSEGMENT*F* IF 'P' OPTION SPECIFIED OR WE ARE HANDLING A PROCESS DIRECTIVE, THEN0*ƒADDRESSESINLIBMUSTMATCHPHYSICALADDRESSES9*ƒINOBJECTFILE,ELSESTEPOVEROBJECTFILEUNTILEQUAL.*1ŠBTSTƒ#POPT,OPTFLG-B(A6)WAS'P'OPTIONSPECIFIEDŠBNE.S‚FINT47BRANCHIFYES0ŠTST.B‚SEGFLG-B(A6)‡ISTHISASEGMENTDIRECTIVE?ŠBNE.S‚FINT52BRANCHIFYES$ŠTST.L‚TPSW-B(A6)‰ISTHISAPROCESS?ŠBPL.S‚FINT52BRANCHIFNO3FINT47„MOVE.LCLC-B(A6),D6‡CURRENTLOCATIONCOUNTER)FINT48„CMP.L‚D6,D2ŽCOMPARECLC,SEGSTARTŠBEQ.S‚FINT52OKIFEQUAL#ŠBCS„ERR10ŽERRORIFSEGSTARTFINS14„LEA„LIBSADLN(A0),A0„POINTA0TOSADUNDERCONSIDERATION,ŠCMP.L‚#-1,SADLEN(A0)…AREWETHRUWITHSAD'S+ŠBEQ.S‚FINS1BBRANCHIFBADSEGMENTINLIST+ŠMOVE.LSADNAM(A0),D1†SEGMENTNAMEFROMLIBŠCMP.L‚(A1),D1 ŠBNE.S‚FINS14CFINIS16ƒMOVE.L(A1),(A1)+‰ADVANCEA1TONEXTITEMINEXCEPTIONLIST ŠSUB.W‚#1,D2/ŠBNE.S‚FINS12GOCHECKNEXTEXCEPTIONLISTITEM FINS1G„RTS@FINS1B„MOVE.L(A1),CMSG16+2-B(A6)MOVESEGMENTNAMEINTOMESSAGE&ŠMOVE.LA1,-(A7)‹SAVEA1THRUI/OCALLŠLEA„CMSG16(PC),A1ŠLEA„CMSG16E(PC),A2 ŠBSR„EMLOGLIS ŠBNE„IOERRŠMOVE.L(A7)+,A1/ŠBRA.S‚FINIS16ŒCONTINUEEXAMININGSEGMENTNAMESŠPAGE*N* SUBROUTINE TO SEE IF SEGMENT IS TO BE INCLUDED (CHECKS AGAINST EXCLUDE LIST)*ƒA0POINTSTOSAD.2*ƒRETURNSEQUALIFSEGPASSES,NOTEQUALOTHERWISE*ƒNOREGISTERSAREDESTROYED* FINS2…EQU„*ŠMOVEM.LA1/D1/D2,-(A7)4ŠMOVE.WEXCLNUM-B(A6),D2ƒD2COUNTSEXCEPTIONENTRIES,ŠBEQ.S‚FINS2GBRANCHIFNOEXCEPTIONENTRIES/ŠLEA„EXCLLST(PC),A1…A1RUNSTHRUEXCEPTIONLIST+ŠMOVE.LSADNAM(A0),D1†SEGMENTNAMEFROMLIBFINS24„CMP.L‚(A1)+,D1,ŠBEQ.S‚FINS2BBRANCHIFSEGMENTDOESN'TPASS ŠSUB.W‚#1,D2ŠBNE.S‚FINS24KEEPCHECKING ŠBRA.S‚FINS2G*FINS2B„MOVE.WD2,D2ŽSETNONZEROCONDCODESFINS2G„MOVEM.L(A7)+,A1/D1/D2ŠRTS*F* SUBROUTINE TO MOVE TASK MESSAGE TO MESSAGE INFORMATION LIST IF ROOM.>*ƒMESSAGETEMPORARYLOCISBLANKEDOUTAFTERMESSAGEISMOVED.*ƒALLREGISTERSPRESERVED*TSKMSG„MOVEM.LA0/A1/D0,-(A7),ŠMOVE.LTSKLST-B(A6),A0„WHERETOSTOREENTRY+ŠBTSTƒ#MAPF,MAPFLG-B(A6)‡ISMAPTABLEFULL?ŠBNE.S‚TSKMS3BRANCHISYES(ŠCMP.L‚TSKMSGE-B(A6),A0ƒATENDOFTABLE?ŠBNE.S‚TSKMS1BRANCHIFNO6ŠBCHGƒ#MAPF,MAPFLG-B(A6)‡SETMAPFULLBITINFLAGWORD ŠBRA.S‚TSKMS3TSKMS1„LEA„FILNAM(PC),A1ŠMOVE.W#EACHENT/2,D0TSKMS2„MOVE.W(A1)+,(A0)+ŠDCNTƒD0,TSKMS2+ŠMOVE.LA0,TSKLST-B(A6)„ADDR.OFNEXTENTRYTSKMS3„LEA„FILNAM(PC),A0,TSKMS4„MOVE.W#'‚',(A0)+ˆBLANKOUTTEMPORARYŠCMP.L‚TSKENTE-B(A6),A0 ŠBLO.S‚TSKMS4TSKMS5„MOVEM.L(A7)+,A0/A1/D0ŠRTS%*************************************)* SUBROUTINE TO USE ERROR MESSAGE HANDLER*ƒD0-MESSAGECODE'*ƒA0-POINTSTOPARAMETERBLOCKIFANY* ERRMSG„EQU„*ŠMOVEM.LD0/A0,ERRPBLK-B(A6) ŠMOVE.L#2,D0ŠLEA„ERRPBLK-B(A6),A0ŠTRAPƒ#4ŠMOVEM.LERRPBLK-B(A6),D0/A0ŠRTSPATCH…DS.Bƒ50‘PATCHAREA ŠEND„SYSGENééé=/*=/*†TASKDUMP.AF=/*+=/* Chain file to assemble TASKDUMP utility=/*:=/* If no output argument is specified for the listing the*=/* chain file will default to TASKDUMP.LS=/*=/IFC \1ƒ=ARGTASKDUMP.LS=/ENDIF=/*&=ASM TASKDUMP.SA,TASKDUMP.RO,\1;RZ=106=/*{ Included files are:=/*ƒ9995.&.TR1.EQ=/*ƒ9995.&.IOE.EQ=/*}=/*=ENDé% ééééé¥=/*=/*†TASKDUMP.LF=/*)=/* Link chain file to create TASKDUMP.SY=/*:=/* If no output argument is specified for the listing the*=/* chain file will default to TASKDUMP.LL=/*=/IFC \1ƒ=ARGTASKDUMP.LL=/ENDIF=/*=LINK ,TASKDUMP.SY,\1;AHMIX ATTRIBUTES PSEG SEG0:0-15 $0INPUT TASKDUMP.ROLIB 0.&.UTILIB.ROEND=/*=ENDéééééé®+TASKDUMPIDNT†4,3‡VERSAdosTASKDUMPutilityH************************************************************************9*ˆTASKDUMP‚--‚THISPROGRAMISAUTOMATICALLYLOADED9*ˆBYTHELOADERWHENYOURTASKABORTS.‚PLEASENOTETHATA<*ˆSECTIONOFT& HISPROGRAMISOVERLAYEDBYMEMORYCONTENTSOF9*ˆTHEABORTEDTASK!‚SEETHEWARNINGTOWARDTHEENDOFTHE *ˆLISTING.H************************************************************************ ˆOPTƒFRS,NOCL  STORE_ADDR‚MACROŒPEA\1(PC)‡SPR936‚2/1/84ŒMOVE.L(A7)+,\2ŒENDM MESGˆMACROŒLEA…MSGIOS(PC),A0ŒSTORE_ADDR<\1>,IOSSAD(A0)ŒSTORE_ADDR<\2>,IOSEAD(A0)ŒTRAP„#2ŒENDM* INPUT‡MACRO\@ŠMESG‚<\1>,<\2>ŒLEAƒMSGIIOS(PC),A0ŒTRAP‚#2ŒIF‚‚THEN.SŽCMP.B#ISTATO,D0ŽBEQ\@ ŽBRAFATALERRŒENDI ŒBSRSBARG ŒBNEFATALERRŒENDM SPC 2(*****************************************‡FIELDFORMATTINGMACRO‰*…(**************************************** SPC 2'*ƒFLDASM-LABEL,TEXT,DATA-SIZE,CONTINUE SPC 1 FLD„MACRO‡DC.B\2 \1…DS.B\3‡IFNC'C','\4' ‡DC.BCR,LF‡ENDC‡ENDM‡SPC2)******************************************‹UTILITYMACROSŽ*)*****************************************‡SPC1.*MOVE-HEX‚BYTE-COUNT,SOURCE-ADDR,DEST-ADDRESS‡SPC1 MVHEX‚MACRO‡IFNCƒ'D0','\2' ‡MOVE.L‚\2,D0‡ENDC‡IFNCƒ'A1','\3' ‡LEA…\3,A1‡ENDC ‡IFNE„\1-8‡MOVE.W‚#\1,D2 ‡BSR…CVHEX‡ENDC ‡IFEQ„\1-8 ‡BSR…CVHEX8‡ENDC‡ENDM‡SPC10*MOVE-ASCII‚BYTE-COUNT,SOURCE-ADDR,DEST-ADDRESS‡SPC1 MVASC‚MACRO‡MOVE.L#\1,D1‡IFNCƒ'A0','\2' ‡LEA„\2,A0‡ENDC‡IFNCƒ'A1','\3' ‡LEA„\3,A1‡ENDC ‡BSR„MOVEASC‡ENDM**…MOVEFILENAMEASCIIFIELDS* MVASCN MACRO‡MOVE.L#\1,D1‡IFNCƒ'A0','\2' ‡LEA„\2,A0‡ENDC‡IFNCƒ'A1','\3' ‡LEA„\3,A1‡ENDC ‡BSR„MOVASCN‡ENDM‡SPC1 CR…SET‚$0D LF…SET‚$0A‰PAGEJ****************************************************************************ˆINCLUDESOFSYSTEMFILES**ˆINCLUDE9995.&.TR1.EQ*ˆINCLUDE9995.&.IOE.EQ*·lÀFÈDÐfØUàOèJðGøNG=CK J**************************************************************************‰NOLIST‰INCLUDE9995.&.TR1.EQ‰INCLUDE9995.&.IOE.EQ‰LISTˆPAGE ˆSECTION‚0B…EQU‚* J***************************************************************************ˆREVISIONINFORMATION* *‚IDNT4,3 *‡12208442*‘Allcodewasmodifiedwhereapplicabletoensure**‘positionindependanceandrelocatability* *‚IDNT4,2 *‡12048448*’WithVERSAdosversion4.4,theorganizationoftheTCB8*’structurewaschanged,aswellastheplacementofthe7*’TSTstructurewithintheTCB.‚Theconstantportionof.*’theutilityhadtobechangedtocorrespond. *‚IDNT4,1@*‡02/01/84:‚(SPR936)‚UTILITYDIDNOTDUMPANYRAMIMAGES.ERROR5*’TRACEDTO'PEA'INSTRUCTIONSNOTUSINGPC-RELEATIVE7*’ADDRESSINGMODE.PARAMETERBLOCKBEGINNINGANDENDING(*’ADDRESSESWEREOUTOFTHEUSER'SAREA.*@*‡10/31/84ƒ(SPR1101)CHECKFORTASKSUSPENDED(SUSPD)ISINVALID2*’CAUSINGSESSIONTOHANGUPONOCCASION.‚CHECKIS*’BEINGDELETED.J************************************************************************** 'REVIS„DC.B'122084'‡DATEOFLASTCHANGE(‰DC.B''ŒBLANKINDICATESCLEANASSEMBLY(‰DC.B'4'ŒMAJORVERSADOSREVISIONNUMBER TSKINF‚EQUƒ28**†DATASTORAGE*‰DS.L‚50 STACK„EQUƒ***…FLAGS* FLAGS„DC.W‚0+NOINP„EQUƒ7ŒINPUTDEVICEISNOTINTERACTIVE$NOFILEƒEQUƒ6ŒDUMPFILENOTALLOCATEDH*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>FAM 10/31/84>>>1*SUSPD„EQUƒ5ŒTASKLU6BORROWEDFROMISSUSPENDEDH*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>FAM 10/31/84>>>#NOGO…EQUƒ4ŒNOONETOTALKTO-QUIT*%INFOPBƒDC.L‚0,0ŠTASKNAMEANDSESSION‰DC.W‚$8000ˆOPTIONS-GETTCB0INFOPBADDC.L‚0ADDRESSOFSAVETCBGETSPUTHERE*(*…TERMINATIONEVENTSENTASCOMMANDLINE*EVNTBUF‚COMLINE‚24*EVNTLNG‚EQUƒEVNTBUFEVNTCOD‚EQUƒEVNTBUF+1EVNTTIN‚EQUƒEVNTBUF+2EVNTPRI‚EQUƒEVNTBUF+3EVNTTSK‚EQUƒEVNTBUF+4EVNTSES‚EQUƒEVNTBUF+8EVNTUNM‚EQUƒEVNTBUF+12EVNTACODEQUƒEVNTBUF+14& EVNTATTREQUƒEVNTBUF+16EVNTRA0‚EQUƒEVNTBUF+18‰PAGE**„TASKCONTROLBLOCK* SAVETCB‚EQUƒ* ‰DC.L‚0…!TCB1‰DC.L‚0,0,0ƒLINKSTOTCBALL,TCBGROUPANDTCBREADYTCBNAME‚DC.L‚0‡TASKNAMETCBSESSNDC.L‚0‡SESSION2TCBMONƒDC.L‚0,0…MONITORTASKNAMEANDSESSIONCODE+TCBSEMƒDC.L‚0‡LINKTONEXTSEMAPHOREWAITER3TCBCPRI‚DC.B‚0,0,0ƒPRIORITIES-CURRENT,LIMIT,READY+TCBIOCNTDC.B‚0‡COUNTOFPENDINGI/0EVENTSTCBATTR‚DC.W‚0‡ATTRIBUTESTCBABORTDC.W‚0‡ABORTCODETCBSTATEDC.L‚0‡STATEWORD‰DC.W‚0,0,0ƒTSTSEMAPHORE+TCBTSTƒDC.L‚0‡POINTERTOTASKSEGMENTTABLE‰DC.W‚0,0,0ƒASQSEMAPHORETCBASQƒDC.L‚0‡POINTERTOASQ,TCBCHAN‚DC.L‚0‡LINKTOCHANNELCONTROLBLOCK+TCBEVECTDC.L‚0‡ADDRESSOFEXCEPTIONVECTOR&TCBTVECTDC.L‚0‡ADDRESSOFTRAPVECTOR *°<<120484‰DS.L‚1‡RESERVEDFORFUTUREUSE6TCBNAUƒDC.L‚1‡ADDRESSOFNATENTRYIFTHISTASKISNAU,TCBDLAY‚DC.L‚1‡ADDRESSOFDELAYENTRYINPAT *°120484>> ‰DC.L‚0,0,0,0TCBENTRYDC.L‚0‡ENTRYADDRESSTCBUSER‚DC.W‚0‡USERNUMBER‰DC.W‚0‡EXECSTACKDEPTH,TRAP#‰DS.L‚15†EXECREGISTERS7TCBATSK‚DC.L‚0,0…NAMEANDSESSIONOFTASKCAUSINGABORT=TCBBERR‚DC.L‚0,0…8BYTESPUTONSTACKBYBUSORADDRESSERROR‰DS.B‚64†STACKAREA*TCBD0„DS.L‚16†REGISTERS *°<<120484TCBSR„DC.W‚0‡STATUSREGISTERTCBPC„DC.L‚0‡PROGRAMCOUNTER‰DS.W‚3‰DS.L‚5**…TASKSEGMENTTABLE* ‰DC.L‚0‡!TST*TSTNSEGSDC.B‚0‡NUMBEROFSEGMENTSALLOWED5TSTCSEGSDC.B‚0‡NUMBEROFSEGMENTSCURRENTLYEXISTING&TSTLMMU‚DC.W‚0‡INDEXTOLASTMMUENTRY-TSTLATTRDC.W‚0‡INDEXTOLASTATTRIBUTEENTRYTSTSTAT‚DC.W‚0‡MMUSTATUSTSTMMUƒDS.W‚16†MMULOADINFO'TSTATTR‚DS.W‚16†SEGMENTATTRIBUTEBLOCK8TSTWTSK‚DC.L‚0‡NAMEOFTASKWITHWINDOWTOADDRESSSPACE‰DS.L‚10†NOTUSED’120484>>*$TCBDATE‚DC.L‚0‡DATEINSERTEDBYDUMP$TCBTIME‚DC.L‚0‡TIMEINSERTEDBYDUMP*2TCBEXMƒDC.L‚0,0…EXCEPTIONMONITORNAMEANDSESSIONTCBEMMSKDC.L‚0‡MASKTCBEVMSKDC.L‚0‡VALUEMASKTCBEVLOCDC.L‚0‡VALUELOCATIONTCBVALU‚DC.L‚0‡VALUECONTENTS0TCBECNT‚DC.L‚0,0…MAXCOUNTOFINSTRUCTIONS,SPARE‰PAGE*#*„DATASTORAGEFORMESSAGEROUTINES*/CLUFHS‚DC.W‚$0110COMMAND=CHANGELOGICALUNIT&ˆDC.W‚$8001OPTIONS=KEEPANDRECEIVE CLULGU‚DC.B‚0,6,6,0‹LOGICALUNIT!CLUTSK‚DC.L‚0‘TASKTOGETLUFROMCLUSES‚DC.L‚0‘SESSIONOFSAME*0ATTRFHSDC.W‚$0180COMMAND=RETREIVEATTRIBUTESˆDC.W‚0‘OPTIONSˆDC.B‚0,6STATUS,LUATTRDEVDC.L‚0‘VOLUMEˆDC.W‚0‘USERNUMBER ˆDC.L‚0,0,0,0‹CATALOG,FILENAMEˆDC.W‚0,0EXTENT(ATTRCODDC.W‚0,0,0,0‹ATTRIBUTESCODE,ETC*ASG5FHS‚DC.W‚FHASGN ‰DC.W‚FOPPRPW‰DC.W‚5ASG5DEV‚DC.L‚0‰DC.W‚0 ‰DC.B‚'’' ‰DC.L‚0,0,0*MSGIOS‚DC.W‚IOWRIT ˆDC.W‚IOPIMG ˆDC.W‚LDFLUNˆDC.W‚0ˆDC.L‚0,0,0,0,0* MSGIIOSEQU‚* ˆDC.W‚IOREAD ˆDC.W‚IOPFOR ˆDC.W‚CDFLUN ˆDC.W‚0,0,0)ˆDC.L‚0ŽADDRESSOFINPTBUFGETSPUTHERE.(ˆDC.L‚0ŽADDRESSOFINPTBUF+79GOESHERE. ˆDC.L‚0,80INPTBUFDC.B‚CR ˆDCB.B‚79,0ˆDS.B‚2ŽDEADSPACEFORSBARG*?LINEIOSDC.WIOWRITŠTHISPARAMETERBLOCKISJUSTFORPRINTINGAˆDC.W0BLANKLINE. ˆDC.WLDFLUNˆDC.L0,0,0,0,0ˆPAGEDMPFHS‚DC.W„FHALLOˆDC.W„FOPEW+FOPCONˆDC.W„3DMPFVOLDC.L„'„'DMPFUNMDC.W„-1DMPFCATDC.B„'TASKDUMP'DMPFNAMDC.B„'ˆ'DMPFEXTDC.W„'DU'ˆDC.W…0,0,0,0,16*DMP2FHSDC.W…FHALLO+FHASGNˆDC.W…FOPEW+FOPSEQˆDC.W…3ˆDC.L…0,0,0,0,0,0ˆDC.W…0,0,256,0,8*DMPIOS‚DC.W…IOWRITˆDC.W…IOPBIN+IOPNXT ˆDC.W…3,0ˆDC.L…0,0,0,0,0*1LDRTASK‚DC.L„'&LDR'ˆRESUMELOADERPARAMETERBLOCK‰DC.L„4**MOVLLPB‚DC.L„0,0ŒINSERTABORTINGTASKNAMEMOVLLADRDC.L„0‰DC.L„0,0‹MOVETOSELF/MOVLLAD2DC.L„0ADDRESSOFSEGBUFGETSPUTHERE"MOVLLSIZDC.L„256*8ŠLENGTHOFMOVE*ERRTRYƒDC.W„0COUNTERRORS*=MSGDKER‚DC.B„'TDMP:DUMPTERMINATED--LASTBLOCKADDRESS=' MGDKADR‚DC.B„'XXXXXX‚SEGMENT='MGDKSEG‚DC.B„'XXXX' ‰DC.B„CR,LFMSGDKEREEQU…*-1*‰DS0NEWLINE‚DC.B''‰PAGE*$*ƒABORTMESSAGEANDREGISTERDISPLAY*‰DS0MSGACƒDC.B‚''MGTSKƒDC.B‚'„'!ˆFLDƒMGTSK2,<':ABORTEDBY'>,4,CˆFLDƒMGACOD,<'='>,4MSGACE‚EQUƒ*-1ˆDS.W‚0 MSGR1ƒEQU*' ˆFLDƒMGPC,<'PC'>,8,CˆFLDƒMGSR,<'‚SR'>,4MSGR1E‚EQUƒ*-1‰DS0MSGD1ƒFLDƒMGD0,<'D0'>,8,CˆFLDƒMGD1,<'ƒD1'>,8,CˆFLDƒMGD2,<'ƒD2'>,8,CˆFLDƒMGD3,<'ƒD3'>,8MSGD1LEN EQU *-MSGD1ˆFLDƒMGD4,<'D4'>,8,CˆFLDƒMGD5,<'ƒD5'>,8,CˆFLDƒMGD6,<'ƒD6'>,8,CˆFLDƒMGD7,<'ƒD7'>,8ˆFLDƒMGA0,<'A0'>,8,CˆFLDƒMGA1,<'ƒA1'>,8,CˆFLDƒMGA2,<'ƒA2'>,8,CˆFLDƒMGA3,<'ƒA3'>,8ˆFLDƒMGA4,<'A4'>,8,CˆFLDƒMGA5,<'ƒA5'>,8,CˆFLDƒMGA6,<'ƒA6'>,8,CˆFLDƒMGA7,<'ƒA7'>,8MSGRSTOPEQU‚**ˆDS.W‚0-MGASKD‚DC.B‚'TDMP:DOYOUWANTADUMP?(Y/N)>'MGASKDEEQUƒ*-1* *…MESSAGES*‰DS0MGDEFNƒDC.B‚'TDMP:'‰DC.B‚'DEFAULTDUMPFILEIS‚'MGDEFFN‚DS.Bƒ32*‰DS0MGDMPNƒDC.B‚'TDMP:'‰DC.B‚'ˆDUMPFILEIS‚'MGDMPFN‚DS.B‚32*‰DS0'EMGALCƒDC.B‚'TDMP:(UNABLETOALLOCATE'‰DC.B‚'DEFAULTFILE)' ‰DC.B‚CR,LFEMGALCE‚EQUƒ*-1*‰DS0'EMGAL2ƒDC.B‚'TDMP:(UNABLETOALLOCATE'‰DC.B‚'DUMPFILE)' ‰DC.B‚CR,LFEMGAL2E‚EQUƒ*-1*‰DS02MGNEWFƒDC.B‚'TDMP:ENTERNEWFILENAMEORHITCR>'MGNEWFE‚EQUƒ*-1‰PAGEJ****************************************************************************’ERRORMESSAGEPARAMETERBLOCK*J************************************************************************** ‰DS.W0EM_PBLK: -EM_D0„DC.L‚0‚D0-IOS/FHSRETURNERRORSTATUS*ª(ERRORMSGKEYVALUE)-EM_A0„DC.L‚0‚A0-ADDROFI/OPARAMETERBLOCKEM_OPTƒDC.B‚0‚OPTIONSFLAG*­BIT‡MEANINGIFSET*®0ˆQUERYRESPONSEDESIRED+EM_TLUN‚DC.B‚0‚USERTERMINALLUN-(LDFLUN)$EM_QRCƒDC.B‚0‚QUERYRETURNCHARACTER+EM_KLUN‚DC.B‚0‚USERKEYBOARDLUN-(CDFLUN)3EM_SPAƒDC.L‚0‚STARTADDRESSFORUSERTEXTPLUGPOOL1EM_EPAƒDC.L‚0‚ENDƒADDRESSFORUSERTEXTPLUGPOOLˆPAGE‰XREF‚EDITFILE,SBARGJ***************************************************************************$*ˆEXECUTIONBEGINSHEREFORTASKDUMP*J************************************************************************** ˆSECTION0 BEGINƒEQU„*2TASKDMPLEA„B(PC),A4LOADPROGRAMBASEADDRESSAND ˆLEA„STACK(PC),A7ŒSTACKPOINTER. 0‰BSR‡SET_ADDRŒSETADDRESSESINI/OPARAMBLOCKS. 2ˆMOVEM.LƒEVNTTSK-B(A4),D6-D7‚TASKNAMEANDSESSIONˆMOVEM.LƒD6-D7,INFOPB-B(A4)ˆERQ.TSKINFINFOPB-B(A4)**…GOFINDSOMEONETOTALKTO* ˆBSRƒFNDMSGD*%*†RESUMELOADER-ITSUSPENDEDITSELF* ˆMOVE.L‚#2,D4UDMP0ƒERQ.RESUME‚LDRTASK-B(A4) ˆBEQ.S‚UDMP1ˆERQ.DELAY‚#100ˆDBRAƒD4,UDMP0*%*…DISPLAYABORTMESSAGEANDREGISTERS*UDMP1ƒBTST‚#NOGO,FLAGS-B(A4) ˆBNE.SQUIT ˆBSRƒDSPABRT0ˆBTST‚#7,TCBSTATE+2-B(A4)„WASTHISTASKRUNNING?ˆBNE.S‚QUIT”IFNO-QUIT ˆBSRƒDSPREGS* *…IFUSERTALKS-ASKABOUTDUMP*,ˆBTST‚#12,TCBATTR-B(A4)‚DOESUSERWANTDUMP?ˆBEQ.SQUITBRANCHIFNO)ˆBTST‚#NOINP,FLAGS-B(A4)CANUSERANSWER?ˆBNE.SUDMP4ŽBRANCHIFNO/UDMP2„IOSCALLLINEIOS-B(A4)ƒPRINTABLANKLINE.ˆINPUTMGASKD,MGASKDE"ˆBSRƒCHKYORNŒDIDHESAYYESORNO?ˆBMIƒUDMP2ŽNEITHER-ASKAGAIN"ˆBEQ.SQUITHESAIDNO-GOTOEND*2*…BUILDDUMPFILENAME--ALLOCATEANDASSIGNFILE*>UDMP4‚ERQ.GTDTIMTCBDATE-B(A4)‚GETDATEANDTIME-SAVEINTCB&‡BSRƒBLDNAMERETURNWITHFILEASSIGNED*(*…WRITETASK'SSEGMENTSOUTTODUMPFILE* ‡BSR.SDODUMP**…DUMPFINISHED*QUIT„ERQ.RESUMEEVNTTSK-B(A4)H*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>FAM 10/31/84>>>*‡BTST‚#SUSPD,FLAGS-B(A4) *‡BEQ.S‚QUIT2H*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>FAM 10/31/84>>>ˆCLR.W‚CLUTSK+8-B(A4)3ˆERQ.START‚CLUTSK-B(A4)ˆRESUMEOTHERTASKUSINGCRT2QUIT2ƒERQ.TERMƒ#0,#0…TERMINATEWITHNORMALSTATUS.ˆPAGE8*********************************************************#*ˆSETADDRESSESINPARAMETERBLOCKS*8******************************************************** SET_ADDR: &‰MOVE.L„A0,-(A7)ŒSAVEA0ONTHESTACK. "‰STORE_ADDRSAVETCB,INFOPBAD-B(A4) !‰STORE_ADDRSEGBUF,MOVLLAD2-B(A4) 5‰LEAMSGIIOS(PC),A0ŒSETBUFFERSTART&ENDADDRESSIN5‰STORE_ADDRINPTBUF,IOSSAD(A0)INPUTIOSPARAMBLOCK.!‰STORE_ADDRINPTBUF+79,IOSEAD(A0) ' 1‰LEA‡LINEIOS(PC),A0†SETUPLINEIOSTOPRINTOUTA*‰STORE_ADDRNEWLINE,IOSSAD(A0)BLANKLINE. ‰STORE_ADDRNEWLINE,IOSEAD(A0)* '‰MOVE.L„(A7)+,A0ŒRESTOREA0ANDRETURN.‰RTS›*‰PAGE**‡DUMPTASKTODISK*-*‡WRITETASKCONTROLBLOCKTOSECTORS1AND2*‡DUMPALLRAMSEGMENTS*‡DUMPALLROMSEGMENTS* DODUMP‚EQU…**ˆLEA„0,A1‹SETADDRREGTOZEROFORERRRTNˆCLR.L‚D2CLEARFORERRRTN/ˆLEA„SAVETCB(PC),A3…POINTTO!TCBFORERRORRTNˆLEA„DMPIOS(PC),A0%ˆCLR.W‚ERRTRY-B(A4)‚CLEARRETRYCOUNT>‰PEASAVETCB(PC)‡PUTSTARTANDENDADDRESSESOFƒSPR936‚2/1/843‰MOVE.L(A7),IOSSAD(A0)ˆTCBSAVEBUFFERINTODMPIOS‰ADD.L#255,(A7)PARAMBLOCK.‰MOVE.L(A7)+,IOSEAD(A0)‡*"DODUMP1TRAPƒ#2–WRITEOUTTHETCB."ˆBEQ.S‚DODUMP2„BRANCHIFNOERRORSˆBSR„DUMPERR„CHECKERRORˆBMI„DODUMP1„GOBACKTORETRY,DODUMP2CLR.W‚ERRTRY-B(A4)ƒCLEARRETRYCOUNT ˆADD.L‚#256,IOSSAD(A0)‚2NDBLOCKˆADD.L‚#256,IOSEAD(A0)DODUMP3TRAPƒ#2"ˆBEQ.S‚DODUMP8†BRANCHIFNOERRORSˆBSR„DUMPERR†CHECKERROR ˆBMI„DODUMP3**†GETSEGMENTTODUMP**DODUMP8MOVE.L‚TCBNAME-B(A4),MOVLLPB-B(A4)#ˆBSR.SƒDODGTRAM‡GOFINDRAMSEGMENTˆBNE.SƒDODUMP10‡BRANCHIFFOUND#ˆBSR.SƒDODGTROM‡GOFINDROMSEGMENTˆBNE.SƒDODUMP10‡BRANCHIFFOUNDˆRTS”RETURN-DUMPCOMPLETE**‡READYTODUMPONESEGMENT*DODUMP10EQU„*2‰LEA„DMPIOS(PC),A0‚PUTTHESTARTANDENDADDRESSES=‰PEASEGBUF(PC)†OFTHESEGMENTBUFFERINTOTHE„SPR936‚2/1/84+‰MOVE.L(A7),IOSSAD(A0)ƒDMPIOSPARAMBLOCK.‰ADD.L#255,(A7)*‰MOVE.L(A7)+,IOSEAD(A0)‡*‰MOVE.LA1,MOVLLADR-B(A4)‰MOVE.L#256*8,D2…SIZEOFMOVE%‰CMP.L‚D2,D1‰ARETHERE8BLOCKSLEFT?‰BPL.S‚DODUMP14†BRANCHIFYES ‰MOVE.LD1,D2ADODUMP14MOVE.LD2,MOVLLSIZ-B(A4)„PUTSIZEOFMOVEINPARAMBLOCK ‰SUB.L‚D2,D1 ‰ADD.L‚D2,A1‰ERQ.MOVELL‚MOVLLPB-B(A4)*‰LEA„DMPIOS(PC),A0DODUMP16TRAPƒ#2‰BEQ.S‚DODUMP18‰BSR.S‚DUMPERR ‰BMI„DODUMP16DODUMP18ADD.L‚#256,IOSSAD(A0)‰ADD.L‚#256,IOSEAD(A0)‰SUB.L‚#256,D2 ‰BNE„DODUMP16‰TST.L‚D1‹ANYMORETOMOVE? ‰BNE„DODUMP10 ‰BRA„DODUMP8**‡FINDSEGMENTTODUMP*#DODGTRAMMOVE.L‚#1,D1‰RAMINDICATOR ‰BRA.SƒDODGT2#DODGTROMMOVE.L‚#3,D1‰ROMINDICATOR*+DODGT2ƒLEA…TSTMMU+32(PC),A0‚ENDOFMMULISTB‰PEATSTMMU(PC)„PUTLOOPTERMINATIONVALUEONSTACKƒSPR9362/1/84&DODGT3ƒLEA…-8(A0),A0…MMUENTRYPOINTER#‰CMP.Wƒ6(A0),D1†DOESSEGMENTEXIST?‰BNE.SƒDODGT3A‡BRANCHIFNO‰MOVE.W‚36(A0),D1…ATTRIBUTES%‰AND.Wƒ#$C00,D1†ISTHISMMIOORPROM?‰BEQ.SƒDODGT4ˆBRANCHIFNO$DODGT3A‚CMP.Lƒ(A7),A0‡ENDOFSEARCH?‰BNE…DODGT3‹BRANCHIFNO 5‰ADD.L#4,A7ŽPOPTHETERMINATIONVALUEOFFTHESTACK. ‰RTS–RETURNIFSEGMENTNOTFOUND*;DODGT4ƒADD.L#4,A7ŽPOPTHETERMINATIONVALUEOFFTHESTACK.‰CLR.Wƒ6(A0)ŒCLEARINDICATOR(‰LEA…32(A0),A3ˆSAVEADDROFSEGMENTNAME ‰CLR.LƒD1‰MOVE.W‚(A0),D1ŠSTARTINGPAGE‰LSL.Lƒ#8,D1ŒCONVERTTOADDRESS"‰MOVE.L‚D1,A1‹RETURNADDRESSINA1 ‰CLR.LƒD1‰MOVE.W‚2(A0),D1ˆENDINGPAGE‰SUB.Wƒ(A0),D1‰-STARTINGPAGE‰ADD.Wƒ#1,D1‹+1=#PAGES‰LSL.Lƒ#8,D1‹SIZEOFSEGMENT‰RTS**DUMPERR‚ADD.Wƒ#1,ERRTRY-B(A4)…COUNTERRORS‰CMP.Wƒ#6,ERRTRY-B(A4)‰BMI.SƒDUMPER2.‰SUB.LƒD2,A1ŠGETADDRESSOFDATAINLASTBLOCK‰MOVE.L‚A1,D0‰MOVETODATAREG&‰LSL.Lƒ#8,D0‰SHIFT-WANT3BYTESONLY‰MVHEXƒ6,D0,MGDKADR-B(A4)‰MVASCƒ4,(A3),MGDKSEG-B(A4)‰MESG„MSGDKER,MSGDKERE ‰BRA…QUIT DUMPER2‚RTS‡PAGE ‡SECTION‚0***ƒCHECKFORYESORNORESPONSETOQUESTION* *„CONDITIONCODESSETONRETURN:.*…MINUS=RESPONSENOTGIVEN(REPEATQUESTION) *…ZERO‚=NO *…PLUS‚=YES* CHKYORNEQUƒ*"ˆBNE.SCHKYE‡ERRORRETURNFROMI/O)ˆLEAƒINPTBUF(PC),A1‚STARTOFINPUTBUFFER)CHKYNX‚MOVE.B(A1)+,D0ƒGETNEXTCHARACTER:ˆMOVE.B#CR,INPTBUF-B(A4)‚ALWAYSPUTCRIN1STCHAROFBUF ˆCMP.B‚#'Y',D0†DIDUSERSAYYES?ˆBEQ.S‚CHKYES‡BRANCHIFYES#ˆCMP.B‚#CR,D0‡ISTHISENDOFINPUT?ˆBEQ.S‚CHKYEˆBRANCHIFYESˆCMP.B‚#'N',D0†DIDUSERSAYNO?#ˆBNE„CHKYNX‡BRANCHIFDIDN'TSAYNOˆRTS‘RETURNIFANSWERWASNO3CHKYEƒMOVE‚#$08,CCR†SETCCMINUS-ANSWERNOTGIVENˆRTS( /CHKYES‚MOVE‚#0,CCRˆSETCCPLUS‚-ANSWERWASYESˆRTSˆPAGE**†CONVERTFROMHEXTOASCII* *†INPUTS:,*ŠD0=HEXVALUE(LEFTJUSTIFIEDINREGISTER(*ŠA1=POINTERTOBUFFERTOSTORERESULT&*ŠD2=NUMBEROFHEXDIGITSTOCONVERT* CVHEX8‚EQUƒ*6ˆMOVE.W‚#8,D2…LOTSOF8DIGITCONVERSIONS-SPECENTRY CVHEXƒEQUƒ*%ˆROL.L#4,D0‡PUTNEXTCHARINBIT0-3 ˆMOVE.BD0,D1ˆAND.B‚#$0F,D1„ISOLATE4BITSˆADD.B‚#$30,D1„CONVERTTOASCII$ˆCMP.B‚#$3A,D1„ISITGREATERTHAN9?ˆBLT.S‚CVHEXB…BRANCHIFNO"ˆADD.L‚#7,D1†ADD7TOGETATHRUF)CVHEXB‚MOVE.B‚D1,(A1)+‚SAVEINOUTPUTBUFˆSUB.W‚#1,D2†DECREMENTCOUNT ˆBNE„CVHEX†GOBACKFORNEXTCHARˆRTS***„CONVERTBINARYTODECIMAL-4CHARACTERS*CONVDEC4EQUƒ*‰AND.L‚#$3FFF,D0ˆSHORTENNUMBER ‰DIVUƒ#1000,D0‰ISOLATE1STDIGIT ‰AND.B‚#$F,D0‰ADD.B‚#$30,D0ŠCONVTOASCII‰MOVE.B‚D0,(A1)+ˆSAVEINOUTPUT ‰CLR.WƒD0‰SWAP„D0ŽGETRESTOFNUMBER ‰DIVU„#100,D0‰ADD.Bƒ#$30,D0‰CONVTOASCII‰MOVE.B‚D0,(A1)+ˆSAVE2NDDIGIT‰SWAP„D0***†CONVERTBINARYTODECIMAL-2CHARACTERS*CONVDEC2EQU…*‰AND.Lƒ#$FF,D0ŠSHORTENNUMBER‰DIVU„#10,D0‹SEPARATEDIGITS ‰AND.Bƒ#$F,D0‰ADD.Bƒ#$30,D0ŠCONVERTTOASCII‰MOVE.B‚D0,(A1)+‰SAVECHARACTER‰SWAP„D0‰ADD.Bƒ#$30,D0ŠCONVERTTOASCII‰MOVE.B‚D0,(A1)+‰SAVELASTCHAR‰RTSˆPAGE*!*„MOVEASCIIDATATOPRINTBUFFER*†D1=NUMBEROFCHARACTERS*†A0=ADDRESSTOMOVEFROM*†A1=ADDRESSTOMOVETO* MOVEASCEQU‚*"ˆMOVE.B(A0)+,D0‡GETONECHARACTER+ˆCMP.B‚#$1F,D0ˆISITLESSTHANPRINTRANGE?ˆBLS.S‚MOVEASC2‡BRANCHIFYES.ˆCMP.B‚#$7B,D0ˆISITGREATERTHANPRINTRANGE?ˆBLS.S‚MOVEASC4‡BRANCHIFNO0MOVEASC2MOVE.B#'',D0‡REPLACECHARACTERWITH05MOVEASC4MOVE.BD0,(A1)+†STORECHARACTERINPRINTBUF‰SUB.W‚#1,D1‰DECREMENTCOUNT$‰BNE„MOVEASC‡LOOPBACKFORNEXTCHAR‰RTS*7*…MOVEASCIITOBUILDFILENAME-ONLYA-ZOR1-9LEGAL* MOVASCNEQU‚*"ˆMOVE.B(A0)+,D0‡GETONECHARACTER+ˆCMP.B‚#$2F,D0ˆISITLESSTHANPRINTRANGE?ˆBLS.S‚MOVASCN2‡BRANCHIFYES.ˆCMP.B‚#$5A,D0ˆISITGREATERTHANPRINTRANGE?ˆBGT.S‚MOVASCN2‡BRANCHIFYES-‰MOVE.BD0,(A1)+†STORECHARACTERINPRINTBUF$MOVASCN2SUB.W‚#1,D1‰DECREMENTCOUNT$‰BNE„MOVASCN‡LOOPBACKFORNEXTCHAR‰RTS‰PAGEJ***************************************************************************+*ˆERRORMESSAGESFROMERRORMESSAGEHANDLER*J***************************************************************************INVAL:7‰MOVE.L„#EM_NVE,D0Š'INVALIDENTRY'MESSAGE,BUTRETURN!‰BSR.S…C_EM_PGM‰RTS* EROPTINV:*‰MOVE.L„#EM_NVO,D0Š'INVALIDOPTION'ERROR.‰BRA.S…FATALERR* EROPTCON:-‰MOVE.L„#EM_OPTCF,D0ˆ'OPTIONCONFLICT'ERROR.‰BRA.S…FATALERR*ERINVAL:)‰MOVE.L„#EM_NVE,D0Š'INVALIDENTRY'ERROR.***J***************************************************************************2*ˆROUTINETOCALLERRORMESSAGEHANDLER,THENDIE.*J*************************************************************************** FATALERR:‰BSR.S…C_EM_PGM.‰BRA‡QUIT†GODOSPECIALTERMINATIONPROCEDURE.***M****************************************************************************** *’CALLTOERRORMESSAGEHANDLER.*’OUTPUTGOESTOLU6.**ˆCALL†BSR‡C_EM_PGM*A*ˆINPUTS„D0ANDA0SETBYIOSORFHSCALL,ORD0FORNONIOS/FHS.*"*ˆOUTPUTSƒNOREGISTERPRESERVATION*N******************************************************************************* C_EM_PGM:A‰MOVEM.LƒD0/A0,EM_PBLK-B(A4)ƒSAVED0,A0INERRORMSGPARAMBLOCK.4‰LEA‡EM_PBLK(PC),A0ŠPOINTA0TOTHEPARAMETERBLOCK.:‰MOVE.B„#6,EM_TLUN-EM_PBLK(A0)‚SETTHELUFOROUTPUTTO6. ‰MOVE.L„#2,D0‰TRAP†#4‰RTS‰PAGE?***************************************************************?*************************************************************** ****·****5****…NOTE--THECODESPACEFROMHEREDOWNIS‡****9****…USEDASANI/OBUFFERIFTHEDUMPISASKEDFOR.ƒ****8****…NATURALLY,NONEOFTHECODEFROMHEREDOWNCAN„****5****…BEUSEDAFTERTHEDUMPISSTARTED.‚SODON'T†****( 6****…PUTCODEAFTERTHISPOINTUNLESSYOU'RESURE†****8****…ITWON'TBEUSEDAFTERTHEI/OSTARTS.‚ATOTALƒ****6****…OF2048BYTESISREQUIRED,ANDTHATINCLUDES†****9****…SPACEOCCUPIEDBYWHAT'SLINKEDINFROMUTILIB.ƒ**** ****·****?***************************************************************?*************************************************************** SEGBUF:‰PAGEG************************************************************************?*ƒGETLOGICALUNITS5AND6FROMTASK'SMONITOROR&SCTOR&BCT*G*********************************************************************** FNDMSGD‚EQU„***…TRYTOGETSESSION'SLU6*)‰MOVE.L‚#$060600,CLULGU-B(A4)ƒSETLUTO65‰MOVE.L‚EVNTSES-B(A4),CLUSES-B(A4)„MOVESESSIONTOPB$‰MOVE.L‚#'&SCT',CLUTSK-B(A4)„TRYSCT‰FHSCALLCLUFHS-B(A4)$‰BEQ.SƒFNDMSOK6ˆBRANCHIFLU6FOUND+FNDMSG2‚MOVE.L‚#'&BCT',CLUTSK-B(A4)„TRYBCT‰FHSCALL‚CLUFHS-B(A4)$‰BEQ.SƒFNDMSOK6ˆBRANCHIFLU6FOUND2‰MOVE.L‚TCBMON-B(A4),CLUTSK-B(A4)…TRYMONITORTASK‰FHSCALLCLUFHS-B(A4),‰BEQ.SƒFNDMSOK6ˆBRANCHIFSOMEONETOTALKTO‰BSET„#NOGO,FLAGS-B(A4)‰RTS**…CHECKFORINTERACTIVEDEVICE*FNDMSOK6EQU…*1‰ERQ.STOP„CLUTSK-B(A4)†STOPTASKLU6TAKENFROM.(*¦NOTE:&SCTHASALREADYBEENSTOPPEDBY&*¦.LDR,BUTITWON'THURTIFWETRYTO*¦STOPHIMTWICE.H*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>FAM 10/31/84>>>%*ˆBSET„#SUSPD,FLAGS-B(A4)ƒREMEMBERITH*>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>FAM 10/31/84>>>;‰BSET„#NOINP,FLAGS-B(A4)ƒNOINPSET=LU5ISNOTINTERACTIVE%‰FHSCALLATTRFHS-B(A4)ˆGETATTRIBUTES-‰BTST„#8,ATTRCOD-B(A4)…ISDEVICEINTERACTIVE?‰BEQ.SƒFNDMDRŠBRANCHIFNO**†ASSIGNUNIT6DEVICETOLU5*#‰MOVE.L‚ATTRDEV-B(A4),ASG5DEV-B(A4)‰FHSCALLASG5FHS-B(A4)-‰BNE.SƒFNDMDR‰BRANCHIFNOINTERACTIVEDEVICE6‰BCLR„#NOINP,FLAGS-B(A4)ƒCLEARFLAG-CANTALKTOUSER FNDMDRƒRTS‰PAGE*%*ƒDISPLAYABORTMESSAGEANDREGISTERS* DSPABRT‚EQU„**‰IOSCALLLINEIOS-B(A4)ŠPRINTABLANKLINE.0‰MVASC‚4,TCBNAME-B(A4),MGTSK-B(A4)ƒTASKABORTING6‰MVASC‚4,TCBATSK-B(A4),MGTSK2-B(A4)‚TASKCAUSINGABORT/‰MVHEX‚4,TCBABORT-B(A4),MGACOD-B(A4)ABORTCODE‰MESGƒMSGAC,MSGACE‰RTS**…DISPLAYREGISTERS* DSPREGS‚EQU„* %‰MOVE.LA2,-(A7)SAVEA2ONTHESTACK /‰MVHEX‚8,TCBPC-B(A4),MGPC-B(A4)†PROGRAMCOUNTER/‰MVHEX‚4,TCBSR-B(A4),MGSR-B(A4)†STATUSREGISTER*-‰LEA„TCBD0(PC),A0ŒSTARTOFREGISTERSAVEAREA/‰LEA„MGD0(PC),A1STARTOFREGISTERDISPLAYAREA"‰MOVE.W#16,D5NUMBEROFREGISTERS.DSPREG2‚MOVE.L(A0)+,D0ŠCONTENTSOF1REGISTER‰BSR„CVHEX8ŒCONVERTIT(‰LEA„6(A1),A1ŠINCREMENTDISPLAYREGISTER‰SUB.W‚#1,D5DECREMENTCOUNT‰BNE„DSPREG2‹LOOPBACKFORNEXT**‰IOSCALLLINEIOS-B(A4)„PRINTABLANKLINE,)‰MESGƒMSGR1,MSGR1E†THEABORTMESSAGE,AND$‰IOSCALLLINEIOS-B(A4)„ABLANKLINE. ;‰LEAMSGIOS(PC),A0ˆPREPARETOPRINTTOREGISTERCONTENTS,A9‰LEAMSGD1(PC),A1‰LINEATATIME.‚A2ISTHESTOPADDRESS.‰LEAMSGRSTOP(PC),A2†* ‰REPEAT˜FOREACHLINE,<‹MOVE.LA1,IOSSAD(A0)ˆSETUPSTARTANDENDMESSAGEADDRESSES;‹ADD.L#MSGD1LEN-1,A1ˆANDPRINT.‚ADVANCEADDRESSESFORNEXT‹MOVE.LA1,IOSEAD(A0)ˆLINE.‹IOSCALL(A0)*‹ADD.L#1,A1‘*‰UNTIL.L‚A1A2‹* '‰MOVE.L(A7)+,A2RESTOREA2ANDRETURN.‰RTS›*ˆPAGE**„BUILDDEFAULTDUMPFILENAME* BLDNAMEEQU‚*=ˆMOVE.W‚EVNTUNM-B(A4),DMPFUNM-B(A4)„PUTUSER#INPARAMBLOCK ˆMOVE.L‚#4,D1ˆLEA…TCBNAME(PC),A0‰TASKNAMEˆLEA…DMPFNAM(PC),A1‰FILENAME0ˆBSR…MOVASCNŠTASKNAME=1ST4CHARSOFFILENAME*ˆMOVE.L‚TCBTIME-B(A4),D0TIMEINMILLISECS'ˆDIVU„#1000*60,D0†GETHOURSANDMINUTESˆAND.Lƒ#$FFFF,D0'ˆDIVU„#60,D0‹SEPARATEHOURSANDMINUTESˆMOVE.L‚D0,D5ŒSAVEMINUTES2ˆBSR…CONVDEC2‰CONVERTHOURSTOASCIIFORFILENAMEˆMOVE.L‚D5,D0ŒMINUTESˆSWAP„D0+ˆBSR…CONVDEC2‰CONVERTMINUTESFORFILENAME*#ˆFHSCALLDMPFHS-B(A4)…ALLOCATEFILE!ˆBEQ.SƒBLDNAM4ŠBRANCHIFNOERROR6ˆMOVEM.LD0/A0,-(A7)†SAVEERRORINFOFOREMHONSTACK.6ˆBSET„#NOFILE,FLAGS-B(A4)„SETFLAG-NOFILEALLOCATED*) *ˆDELETEFILEJUSTALLOCATED* BLDNAM4EQU…*ˆMOVE.W‚#FHDELT,DMPFHS-B(A4)ˆFHSCALLDMPFHS-B(A4)*ˆIOSCALLLINEIOS-B(A4)„PRINTABLANKLINE.ˆLEA…MGDEFFN(PC),A1ˆLEA…DMPFHS(PC),A6%ˆBSR…NAMTMSG‰PUTFILENAMEINMESSAGEˆMOVE.B‚#CR,(A1)+ˆMOVE.B‚#LF,(A1)<ˆBTST#NOINP,FLAGS-B(A4)†IFITWASN'TABATCHJOB,PRINTOUT2ˆIF‚‚THEN.STHEDEFAULTFILENAMEFORTHEDUMP.ŠLEA…MSGIOS(PC),A0ˆ*ŠSTORE_ADDRMGDEFN,IOSSAD(A0)*ŠMOVE.L‚A1,IOSEAD(A0)ˆ* ŠTRAP„#2“*ˆENDI›*(ˆBTST„#NOFILE,FLAGS-B(A4)‚TESTFORERROR!ˆBEQ.SƒBLDNAM6‰BRANCHIFNOERROR;‰MOVEM.L(A7)+,D0/A0‹RESTOREERRORINFOSAVEDANDCALLEMH.‰BSRC_EM_PGM’*"ˆMESG„EMGALC,EMGALCEƒERRORMESSAGE* BLDNAM6EQU…**/*†COPYDEFAULTFILENAMETONEWPARAMETERBLOCK*ˆLEA„DMPFHS+FHSVOL(PC),A0ˆLEA„DMP2FHS+FHSVOL(PC),A1 ˆMOVE.W#6,D0BLDNAM8 MOVE.L (A0)+,(A1)+ ˆSUB.W‚#1,D0 ˆBNE„BLDNAM8*E*†IFWE'RENOTBEINGRUNFROMBATCH,ASKTHEUSERABOUTTHEFILENAME.*8‰BTST#NOINP,FLAGS-B(A4)…IFWEHAVEANINPUTDEVICE,ASK(‰IF‚‚THEN.SŽTHEUSERFORAFILENAME.‹INPUTMGNEWF,MGNEWFEˆ*‰ENDIš**%*†PUTNEWFILENAMEINPARAMETERBLOCK*ˆLEA„INPTBUF(PC),A0ˆLEA„DMP2FHS(PC),A6ˆBSR„EDITFILE‰GOEDITFILENAME#ˆBGE.S‚BLDNAM10‰BRANCHIFNOERRORS%ˆBSR„C_EM_PGM‰PRINTTHEERRORMESSAGEˆBRA„BLDNAM6ŠANDASKAGAIN.**†ALLOCATEANDASSIGNDUMPFILE*BLDNAM10EQU„*‰BCLRƒ#NOFILE,FLAGS-B(A4)‰FHSCALLDMP2FHS-B(A4)#‰BEQ.SƒBLDNAM12ˆBRANCHIFNOERRORS4‰MOVEM.LD0/A0,-(A7)‹SAVEINFOABOUTERRORONSTACK.<‰BSET„#NOFILE,FLAGS-B(A4)MARKTHATWECOULDN'TMAKEAFILE.BLDNAM12EQU…**‰IOSCALLLINEIOS-B(A4)‰PRINTABLANKLINE.‰LEA…MGDMPFN(PC),A1‰LEA…DMP2FHS(PC),A6'‰BSR.SƒNAMTMSG‰PUTFILENAMEINMESSAGE‰MOVE.B‚#CR,(A1)+‰MOVE.B‚#LF,(A1)‰LEA…MSGIOS(PC),A0@‰PEA…MGDMPN(PC)‚TELLUSERTHEFINALDUMPFILENAME‚SPR9362/1/84‰MOVE.L‚(A7)+,IOSSAD(A0)‰MOVE.L‚A1,IOSEAD(A0)‰TRAP„#2(‰BTST„#NOFILE,FLAGS-B(A4)†TESTFORERROR"‰BNE.SƒBLDNAM14ˆBRANCHIFNOERROR‰RTSBLDNAM14EQU…*6‰MOVEM.L(A7)+,D0/A0‹RESTOREA0&D0FROMTHEERRORON&‰BSRC_EM_PGM’ALLOCATIONANDCALLEMH.‰MESGEMGAL2,EMGAL2E***„SUBROUTINETOPUTFILENAMEINTOMESSAGE*ˆA1POINTSTOMESSAGEADDRESS* NAMTMSGEQU„*ˆMVASCN4,FHSVOL(A6),A1†VOLUMEˆMOVE.B‚#':',(A1)+ˆMOVE.W‚FHSUSN(A6),D0ˆBSR…CONVDEC4‰USERNUMBERˆMOVE.B‚#'.',(A1)+ˆMVASCN‚8,FHSCLG(A6),A1…CATALOGˆMOVE.B‚#'.',(A1)+!ˆMVASCN‚8,FHSFIL(A6),A1…FILENAMEˆMOVE.B‚#'.',(A1)+!ˆMVASCN‚2,FHSEXT(A6),A1…EXTENTIONˆRTS ‰END‡BEGINéééééé) =/*=/*†TRANSFER.AF=/*+=/* Chain file to assemble TRANSFER utility=/*:=/* If no output argument is specified for the listing the*=/* chain file will default to TRANSFER.LS=/*=/IFC \1ƒ=ARGTRANSFER.LS=/ENDIF=/*&=ASM TRANSFER.SA,TRANSFER.RO,\1;RZ=106=/*{ Included files are:=/*ƒ9995.&.IOE.EQ=/*}=/*=ENDéééééé(=/*=/*†TRANSFER.LF=/*)=/* Link chain file to create TRANSFER.LO=/*:=/* If no output argument is specified for the listing the*=/* chain file will default to TRANSFER.LL=/*=/IFC \1ƒ=ARGTRANSFER.LL=/ENDIF=/*=LINK ,TRANSFER.LO,\1;HAMIX ATTRIBUTES PSEG SEG0:0,14 $0INPUT TRANSFER.ROLIB 0.&.UTILIB.ROEND=/*=ENDééééé* é1 ŠTTL„ASCIIfiletransferutilityTRANSFER‚IDNTƒ4,2 *ˆINCLUDE9995.&.IOE.EQ‰NOLIST‰INCLUDE9995.&.IOE.EQ‰LIST<************************************************************9*--------------ƒTRANSFERPROGRAM---------------------‚**º*3*THISPROGRAMHANDLESASCIIFILETRANSFERONTHEŠ**EXORMACS(NONHOST)SYSTEM **º*<*************************************************************º**’MODIFICATIONHISTORY”**º**ˆREVISION0128854¡*4*‰Ifausertypedahead,beforeTRANSFERwasbegun,*3*‰TRANSFERmayhang,notenablingtheusertouse‚*1*‰CTL-Atoexit.‚Tofixthis,theASQparameterƒ*1*‰block,ASQ1,waschangedtosetoption‚bit0,ƒ*!*‰enablingtheASQimmediately.”**º*3*‰Alsochangedwasoptionbit2oftheI/Oparam.‚*4*‰blockduringthereadingofinputsfromthehost.*4*‰BysettingtheConnectionWaitbit,TRANSFERwill*4*‰nowabortitselfatINPP1ifthehostportisnot*3*‰free.‚(Itshouldalwaysbefree,unlesstheuser* *‰configuresthesystemoddly.•**º**ˆREVISION0117854¡*3*‰HALT1andHALT5neededtobechangedtoaccomo-‚**‰datechangesinIOS.**º**ˆREVISION1114844¡*4*‰Anewswitchwasadded,"R",toappendacarriage*0*‰returnaftereachframeofdata.‚Thedefault„**‰hasbeensetto-R.ž**º*<************************************************************‰PAGE ŠSECTION0 (ŠXREFƒPARSE,EDITFILE,OPTION,SBARG„111484 A‰EQU„*’BASEOFSEGMENT'DEFPORTƒEQU„'CN20'DEFAULTPORTISCN208BLKLGH„EQU„200SIZEOFHOSTBUFFER(NOTNEC.BLOCKSIZE)#RMAX†EQU„130MAXIMUMSIZEOFRECORD * DIRECTIVE EQUATES ABORT…EQU„14‘ABORTSELFTERM†EQU„15‘TERMINATESELFDELAY…EQU„21‘DELAYRELINQ„EQU„22‘RELINQUISH)RQSTPA„EQU„29‘REQUESTPERIODICACTIVATIONGTASQ…EQU„31‘ALLOCATEANASQRDEVNT„EQU„34‘READEVENTWTEVNT„EQU„36‘WAITONEVENT  !BUSY†EQU„$E2IOSBUSYSTATUSCODE"CNTL.A„EQU„$01CONTROL-ACHARACTER ŠDS.Lƒ40 STACK…EQU„*2SAVSTACK‚DS.Lƒ1’SAVEFORSTACKPOINTERRESTORATION3:FCGKZS\[bcMkUsF{EƒD‹]“W›E£M«U³>»?ÃUËKÓGÛGã<ëGóFûNR JFI#J)INITREGS‚EQU„*’SAVEFORINITIALREGISTERS ŠDS.Lƒ1’D0ŠDS.Lƒ1’D1=SESSIONNUMBERVOLNAM„DS.Lƒ1’D2=VOLUMENAMEUSERNUMƒDS.Lƒ1’D3=USERNUMBERCATNAM„DS.Lƒ1’D4=CATALOGUENAME ŠDS.Lƒ1’D5 ŠDS.Lƒ1’D6 ŠDS.Lƒ1’D7 ******************** VERSION MESSAGE ******************** /VMSGS…DC.Bƒ'ASCIIFILETRANSFER-VERSION2.05' VMSGE…EQU„*-1ŠDS…0 ******************************** COMMAND LINE RECEIVING AREA ******************************** CLINE…COMLINE$A0 * RETURN REGISTERS FROM PARSE 1PARSAREG‚DS.Lƒ1’A1-ADDRESSOFOUTPUTFIELDOR0*ŠDS.Lƒ1’A2-ADDRESSOFOPTIONSFIELDOR0  * PREAMBLE VARIABLES #COMOPT„DS.Bƒ1’COMMUNICATIONSOPTION)CHROPT„DS.Bƒ1’CHARACTERCONVERSIONOPTION,CHRBLK„DC.Lƒ0’NUMBEROFCHARACTERSPERBLOCK+BLKSUM„DC.Lƒ0’NUMBEROFBLOCKSPERCHECKSUM +BLKRED„DC.Lƒ0’RUNNINGNUMBEROFBLOCKSREAD%WBUF†DS.Lƒ1’ADDRESSOFWORKINGBUFFER,WLGH†DC.Lƒ0’LENGTHOFDATAINWORKINGBUFFER,CHRNUM„DC.Lƒ0’NUMBEROFCHARACTERSPERFRAME%BLKCMAXƒDS.Lƒ1’LIMITADDRESSOFFRAME0DPSAV…DS.Lƒ14‘SAVERGISTERSFORDOWNLOADPROCESS,RESPONSE‚DC.Bƒ'‚'RESPONSE(ACK/NAK)TOHOST ŠDC.Bƒ$0DŠDS…0 DLTEMP„DS.Lƒ1’TEMPORARY*BBOUNDSƒDS.Lƒ2’BUFFERBOUNDARIESONUPLOAD3UREC1…DS.Lƒ1’ADDRESSOF1ST* RECINFRAMEFORUPLOAD4USAVCHRƒDS.Wƒ1’SAVEFORCHRREPLACEDBYCRINUPLOAD)BCHR†DS.Wƒ1’SAVEFORCOMPRESSEDCHARACTER * OPTIONS EQUATES AND FLAG WORD "B‰EQU„0’1=TRUNCATETRAILINGBLANKSC‰EQU„1’1=USECHECKSUMS*D‰EQU„2’1=DISPLAYDATAASITISTRANSFEREDH‰EQU„3’1=HALFDUPLEXMODE%R‰EQU„4’1=C/RTOBEADDEDAFTERBLOCK OPTFLG„DC.Bƒ(1< TO TERMINATE PROGRAM'TRANME„EQU„*-1ŠDS…0 *********************** TRANSP„EQU„************************ 6* SET UP SERVICE ADDRESSES IN VARIOUS PARAMETER BLOCKS ŠLEA„HOSTIO-A(A6),A0ŠMOVE.LA0,IOS1+24-A(A6)ŠLEA„TERMIO-A(A6),A0ŠMOVE.LA0,IOS5+24-A(A6)ŠLEA„TIMEV-A(A6),A0ŠMOVE.LA0,TSVC-A(A6) ŠLEA„TRANMS-A(A6),A1ŠLEA„TRANME-A(A6),A2)ŠBSR„MSGOUTTELLTHEMOFTRANSPARENTMODE  >* PERFORM INPUT I/O AND PROCEED ON TERMINAL PORT AND HOST PORT 1ŠBTSTƒ#H,OPTFLG-A(A6)„AREWEINHALFDUPLEXMODE?ŠBNE.S‚TRANS04ŒBRANCHIFYES-ŠBSR„INPP5CINPUTONECHARACTERFROMTERMINALŠBRA.S‚TRANS05.TRANS04ƒBSR„INPP5ŽINPUTONELINEFROMTERMINALTRANS05ƒBSR„INPP1ŽHOSTPORT  !*********************************!* ENABLE ASQ AND WAIT FOR EVENT *!********************************* TRANSRTN‚EQU„*4ŠMOVE.LA7,SAVSTACK-A(A6)‚SAVECURRENTSTACKPOINTER!ŠMOVE.L#WTEVNT,D0‰ENABLEASQ,ASRŠTRAPƒ#1  J* IN CASE OF TIMEOUT EVENT, PERFORM INPUT I/O AND PROCEED ON TERMINAL PORT)*ƒANDGOBACKANDWAITFORANOTHEREVENT. TIMEV…EQU„*/ŠMOVE.LSAVSTACK-A(A6),A7‚RESTORESTACKPOINTER ŠBSR„ASQREAD%ŠLEA„TIM1-A(A6),A0†ADDROFTIMERP.B.&ŠCLR.W‚8(A0)ŽCLEARPERIODICACTIVATIONŠMOVE.L#RQSTPA,D0ŠTRAPƒ#12ŠBTSTƒ#TBSY,TRANFLG-A(A6)ISTERMINALBUFFERBUSY?5ŠBNE„TRANS48ŒBRANCHIFYES-QUEUEANOTHERTIMEEVENT.ŠBTSTƒ#H,OPTFLG-A(A6)„NO-ISHALFDUPLEXSET?ŠBNE.S‚TRANS07ŒBRANCHIFYES-ŠBSR„INPP5CONPUTONECHARACTERFROMTERMINALŠBRA.S‚TRANS09.TRANS07ƒBSR„INPP5ŽINPUTONELINEFROMTERMINALTRANS09ƒBRA„TRANSRTN  '* IN CASE OF BREAK EVENT, TERMINATE !!! BREAKSVƒEQU„*/ŠMOVE.LSAVSTACK-A(A6),A7‚RESTORESTACKPOINTER(BREAKSV2‚BSR„HALT1ŽHALTI/OONHOSTPORTŠBEQ.S‚BREAKSV2BREAKSV4‚BSR„HALT5ŠBEQ.S‚BREAKSV4ŠBRA„XFRTERMŒGOTERMINATEŠPAGE *******************************************)*EVENTWASI/OCOMPLETIONONHOSTPORT‚********************************************  HOSTIO„EQU„*, 7ŠMOVE.LSAVSTACK-A(A6),A7‚RESTORECURRENTSTACKPOINTERŠBSR„ASQREADŒREADTHEEVENTŠLEA„IOS1H-A(A6),A0ŠBSR„HLTCHKCHECKFORHALTI/OŠBEQ„TRANSRTN‹BRANCHIFYES ŠLEA„IOS1-A(A6),A0ŠCMP.B‚#$EA,4(A0)(ŠBEQ.S‚TRANS12ŒDON'TCOMPLAINONOVERRUN ŠBSR„IOERCHKŒCHECKFORI/OERROR3TRANS12ƒCMP.W‚#$0002,(A0)ˆSEEIFFROMWRITEREQUESTŠBEQ.S‚TRANS55ŒBRANCHIFYES  3* EVENT WAS FROM INPUT OR OUTPUT WITH INPUT REQUEST /ŠBTSTƒ#2,IOS1+1-A(A6)„WASITOUTPUTWITHINPUT?ŠBEQ.S‚TRANS16ŒBRANCHIFNO;ŠMOVE.LIOS1+8-A(A6),IOS1+12-A(A6)CORRECTSTARTINGADDRESS9TRANS16ƒBTSTƒ#TBSY,TRANFLG-A(A6)ISTERMINALBUFFERFREE?ŠBEQ.S‚TRANS20ŒBRANCHIFYES7ŠBSETƒ#TPND,TRANFLG-A(A6)SETTERMINALI/OPENDINGFLAGŠBRA„TRANSRTN‹RETURNFROMEVENT  1TRANS20ƒLEA„TBUF-A(A6),A3†ADDRESSTOMOVEDATATO0ŠBSR„EDITMOV1‹MOVEDATATOWORKINGOUTPUTBUFFERŠBSR„PREACHKŒSEEIF'PREAMBLE'ŠBEQ„TRANNXTŒBRANCHIFYES)ŠBSR„INPP1ŽINPUTANDPROCEEDONHOSTPORT6ŠTST.L‚TERMLGH-A(A6)†LENGTHOFDATAINTERMINALBUFFER*ŠBEQ.S‚TRANS52ŒBRANCHIFNODATATOOUTPUTŠBSR„HALT5ŽHALTI/OONTERMINAL7ŠBSETƒ#TBSY,TRANFLG-A(A6)MARKTERMINALBUFFERNOTFREE7ŠBTSTƒ#TIN,TRANFLG-A(A6)AREWEINTERMINALINPUTMODE?ŠBNE.S‚TRANS50ŒBRANCHIFYES*ŠBSR„OUTP5FOUTPUTANDPROCEEDTOTERMINAL  =* SET TIMER TO ACTIVATE US A LITTLE LATER ONLY IF NOT ECHOING /TRANS48ƒLEA„TIM1-A(A6),A0†TIMERPARAMETERBLOCK;ŠMOVE.W#$7000,8(A0)‡INTERVALACTIVATIONATSPC.SVC.ADDR.ŠMOVE.L#RQSTPA,D0ŠTRAPƒ#1 ŠBSR„XFRABORT+ŠBRA.S‚TRANS52ŒGORETURNFROMEVENTSERVICE  * OUTPUT TO TERMINAL (IMAGE) /TRANS50ƒBSR„OUTW5IOUTPUTCHARACTERTOTERMINAL2ŠBCLRƒ#TBSY,TRANFLG-A(A6)CLEARTERMINALBUSYFLAG<ŠTST.W‚IOS5H+28-A(A6)…WASANYACTIVEI/OHALTEDONTERMINAL?9ŠBEQ.S‚TRANS52ŒBRANCHIFNO-HAVEI/OCOMPLETIONALREADY,ŠBSR„INPP5CYESSOTAKEINANOTHERCHARACTERTRANS52ƒBRA„TRANSRTN  (* EVENT WAS OUTPUT COMPLETE TO HOST PORT -TRANS55ƒBSR„INPP1ŽINPUTANDPROCEEDFROMHOST ŠBRA„TRANSRTNŠPAGE .**********************************************-*EVENTWASI/OCOMPLETIONONTERMINALPORT‚*.**********************************************  TERMIO„EQU„*/ŠMOVE.LSAVSTACK-A(A6),A7‚RESTORESTACKPOINTERŠBSR„ASQREADŒREADTHEEVENTŠLEA„IOS5H-A(A6),A0%ŠBSR„HLTCHKWASTHISFROMAHALTI/O?ŠBEQ„TRANSRTN‹BRANCHIFYES  ŠLEA„IOS5-A(A6),A0 ŠBSR„IOERCHK,ŠCMP.W‚#$0002,(A0)ˆSEEIFFROMWRITEREQUESTŠBEQ.S‚TRANS80ŒBRANCHIFYES  -* EVENT WAS INPUT COMPLETION ON TERMINAL PORT 3ŠBTSTƒ#CTLA,TRANFLG-A(A6)AREWEINCONTROL-AMODE?ŠBNE.S‚TRANS63ŒBRANCHIFYES1ŠCMP.B‚#CNTL.A,BUFF5S-A(A6)WASTHISACONTROLA?ŠBNE.S‚TRANS60ŒBRANCHIFNO1ŠBSETƒ#CTLA,TRANFLG-A(A6)SETCONTROLAMODEFLAGŠBRA.S‚TRANS637TRANS60ƒBSETƒ#TIN,TRANFLG-A(A6)SETTERMINALINPUTFLAG ŠBSR„HALT1ŽHALTI/OONHOSTPORT0TRANS63ƒBTSTƒ#H,OPTFLG-A(A6)„ISHALFDUPLEXSET?+ŠBNE.S‚TRANS70ŒYES-GOOUTPUTLINETOHOST7ŠCMP.B‚#$0D,BUFF5S-A(A6)‚WASACARRIAGERETURNENTERED?ŠBEQ.S‚TRANS70ŒBRANCHIFYES2ŠBTSTƒ#CTLA,TRANFLG-A(A6)AREWEINCONTROL-AMODEŠBNE.S‚TRANS66ŒBRANCHIFYES4ŠBSR„OIP1CŽNOSOGIVEHOSTCHARONOUTPUTWITHINPUT.TRANS66ƒBSR„INPP5CASKFORNEXTTERMINALINPUTŠBRA.S‚TRANS88  :TRANS70ƒBCLRƒ#CTLA,TRANFLG-A(A6)AREWEINCONTROLAMODE?)ŠBNE„BREAKSVŒBRANCHIFYES-GOTERMINATE(ŠBSR„OIP15ŽOUTPUTTHELINEORCRTOHOSTŠBCLRƒ#TIN,TRANFLG-A(A6) ŠBRA„TRANS48  .* EVENT WAS OUTPUT COMPLETION ON TERMINAL PORT 5TRANS80ƒBTSTƒ#TPND,TRANFLG-A(A6)ISPENDINGFLAGSET?ŠBNE.S‚TRANS86ŒBRANCHIFYES8ŠBCLRƒ#TBSY,TRANFLG-A(A6)NOSOCLEARTERMINALBUSYFLAGŠBRA.S‚TRANS88 1TRANS86ƒLEA„TBUF-A(A6),A3†ADDRESSTOMOVEDATATO)ŠBSR„EDITMOV1‹MOVEDATATOWORKINGBUFFERŠBSR„PREACHKŒSEEIF'PREAMBLE'ŠBEQ.S‚TRANNXTŒBRANCHIFYES$ŠBSR„INPP1ŽINPUTANDPROCEEDONHOST*ŠBSR„OUTP5FOUTPUTANDPROCEEDTOTERMINAL,ŠBCLRƒ#TPND,TRANFLG-A(A6)CLEARPENDINGFLAGTRANS88ƒBRA„TRANSRTNŠPAGE 6******************************************************3*TRANNX, TISBRANCHEDTOAFTERREADING'PREAMBLE'„*1*ƒFROMTHEHOST.‚HALTSALLI/OONLU1ANDLU5ƒ*1*ƒUNITS,DELAYS2SECONDS,READSTHEASQOFALL„* *ƒEVENTS,ANDPERFORMSANRTS.•*6******************************************************  TRANNXTƒEQU„* ŠBSR„HALT1ŽHALTI/OONHOSTPORTŠBEQ.S‚TRANNXT,TRANNXT2‚BSR„HALT5ŽHALTI/OONTERMINALPORTŠBEQ.S‚TRANNXT2ŠMOVE.L#DELAY,D0ŠMOVE.L#2000,A0ŠTRAPƒ#1‘DELAY2SECONDSTRANNXT4‚BSR„ASQREADŒFLUSHASQŠTST.B‚ASQBUFF-A(A6) ŠBNE„TRANNXT4.ŠCLR.W‚IOS1H+28-A(A6)…INDICATEHALTEVENTREAD.ŠCLR.W‚IOS5H+28-A(A6)…INDICATEHALTEVENTREADŠRTSŠPAGE  %*************************************%* INITIATE UPLOAD/DOWNLOAD SEQUENCE *%*************************************  UPDN†EQU„*  (* INITIALIZE VARIABLES FROM THE PREAMBLE 8ŠMOVE.BTBUF+9-A(A6),COMOPT-A(A6)COMOPTION/CHAROPTION9ŠMOVE.BTBUF+10-A(A6),CHROPT-A(A6)CHARCONVERSIONOPTION2ŠLEA„TBUF+11-A(A6),A1ƒADDRESSOFCHARS/BLOCKFIELDŠMOVE.L#3,D1Ž#CHARSINFIELD"ŠBSR„ASCDBINŒBINARYTOASCIIIND06ŠMOVE.WD0,CHRBLK+2-A(A6)‚SETUPNUMBEROFCHARS/BLOCK7ŠLEA„TBUF+14-A(A6),A1ƒADDRESSOF#BLOCKS/CHECKSUMFIELDŠMOVE.L#1,D1Ž#CHARSINFIELD"ŠBSR„ASCDBINŒBINARYTOASCIIIND0:ŠMOVE.WD0,BLKSUM+2-A(A6)‚SETUPNUMBEROFBLOCKS/CHECKSUMŠMULUƒCHRBLK+2-A(A6),D06ŠMOVE.LD0,CHRNUM-A(A6)„NUMBEROFCHARACTERSPERFRAMEŠLEA„TBUF-A(A6),A0 ŠADD.L‚A0,D0.ŠSUB.L‚#1,D0ŽFRAMELIMITADDRESSOFFFROMTBUFŠMOVE.LD0,BLKCMAX-A(A6) * CLOSE ANY ASSIGNMENT TO LU 4 ŠLEA„FHS4-A(A6),A0ŠMOVE.L#$00040000,(A0)ŠTRAPƒ#3 * INITIALIZE FRAME VARIABLES ŠBSR„DLINITF ŠCLR.W‚TRANFLG-A(A6)ŠBTSTƒ#B,OPTFLG-A(A6) ŠBEQ.S‚UPDN10=ŠMOVE.B#'B',RESPONSE+1-A(A6)‚FLAGTRAILINGBLANKSUPPRESSION  /* BRANCH TO APPROPRIATE UPLOAD/DOWNLOAD ROUTINE UPDN10„CMP.B‚#'U',TBUF+8-A(A6) ŠBEQ„UPLOADŠCMP.B‚#'D',TBUF+8-A(A6) ŠBEQ„DOWNLOAD ŠBSR„XFRABORTŠPAGE ********************** DOWNLOAD SEQUENCE **********************  !DLOADMSƒDC.Bƒ'DOWNLOADINITIATED'DLOADMEƒEQU„*-1ŠDS…0  JREVMS DC.B 'ENTER RECEIVING FILE NAME OR ''Q'' TO RESUME TRANSPARENT MODE' REVME…EQU„*-1ŠDS…0  RDONS…DC.Bƒ'RECORDDISPLAYON' RDONE…EQU„*-1ŠDS…0  RDOFS…DC.Bƒ'RECORDDISPLAYOFF' RDOFE…EQU„*-1ŠDS…0  "BADCCS„DC.Bƒ'BADCHARACTERCOUNT‚'BADCCR„DC.Bƒ'…RECEIVED'(BADCCT„DC.Bƒ'…EXPECTED-RETRANSMITTING'BADCCE„EQU„*-1ŠDS…0  BADCSS„DC.Bƒ'BADCHECKSUMƒ'BADCSR„DC.Bƒ'…RECEIVED'(BADCST„DC.Bƒ'…EXPECTED‚-RETRANSMITTING'BADCSE„EQU„*-1ŠDS…0  4DTERMS„DC.Bƒ'DOWNLOADTERMINATEDWITH''T''KEY-IN'(DTERMN„DC.Bƒ'XXXXXXRECORDSTRANSFERRED'DTERME„EQU„*-1ŠDS…0  !DDONES„DC.Bƒ'DOWNLOADCOMPLETED‚'(DDONEN„DC.Bƒ'XXXXXXRECORDSTRANSFERRED'DDONEE„EQU„*-1ŠDS…0  BFORCMS„DC.Bƒ'**************FORCINGCHECKSUMMATCH**************'FORCME„EQU„*-1ŠDS…0ŠPAGE ***************************‚DOWNLOADING‚ROUTINE‚***************************  7DOWNLOAD‚LEA„REVMS-A(A6),A1…ASKFORRECEIVINGFILENAMEŠLEA„REVME-A(A6),A2 ŠBSR„MSGOUT*ŠBSR„INPW5ŽTAKETHEINPUT(INPUTANDWAIT)0ŠBSR„SBARGŽCONVERTFILENAMETOUPPERCASE111484 (ŠBSR„ASGFLDGOASSIGNTHEFILETOLUN#4&ŠBEQ.S‚DL00BRANCHIF'Q'NOTKEYEDIN*ŠMOVE.B#'T',D0ŒTERMINATIONACKNOWLEDGMENT!ŠBSR„RESPOND2‹SENDITTOTHEHOST ŠBRA„QUITUPDN  DL00†BSR„LF65ŠLEA„DLOADMS-A(A6),A1ƒTELLTHEMDOWNLOADISINITIATEDŠLEA„DLOADME-A(A6),A2 ŠBSR„MSGOUT *ŠBSR„IMSGTELLTHEMOFINTERACTIVEOPTIONS.ŠCLR.L‚IOS4+8-A(A6)‡CLEARRANDOMRECORDNUMBER  2* PLACE COMPLETION ADDRESSES INTO PARAMETER BLOCKS ŠLEA„DHIO-A(A6),A0ŠMOVE.LA0,IOS1+24-A(A6)ŠLEA„DTIO-A(A6),A0ŠMOVE.LA0,IOS5+24-A(A6)  !* INITIALIZE RECORD POINTERS ETC. ŠLEA„RBUF-A(A6),A06ŠMOVE.LA0,RPTR-A(A6)†INITIALIZERECORDBUFFERPOINTERŠLEA„DPIN-A(A6),A0>ŠMOVEM.LD0-D7/A0-A5,DPSAV-A(A6)SAVEPROCESSINGINPUTADDRESS 2ŠCMP.B‚#'B',COMOPT-A(A6)‚'B'COMMUNICATIONOPTION?ŠBNE.S‚DL02BRANCHIFNO ŠBSR„WAITDC1 DL02†M- OVE.B#'N',D0.ŠBSR„RESPOND1‹RESPONDTOPREAMBLEWITH'NEXT?')ŠBSR„INPP5CINPUTANDPROCEEDONTERMINAL  ********************WAITFOREVENT‚********************  DLWAIT„EQU„*,ŠMOVE.LA7,SAVSTACK-A(A6)‚SAVESTACKPOINTERŠMOVE.L#WTEVNT,D0(ŠTRAPƒ#1‘WAITFORHOSTORTERMINALINPUTŠPAGE ,********************************************+*EVENTWASI/OCOMPLETIONFROMHOSTPORT‚*,********************************************  DHIO†EQU„*/ŠMOVE.LSAVSTACK-A(A6),A7‚RESTORESTACKPOINTERŠBSR„ASQREADŒREADTHEEVENTŠLEA„IOS1H-A(A6),A0%ŠBSR„HLTCHKWASTHISFROMAHALTI/O?ŠBEQ„DLWAITBRANCHIFYES ŠLEA„IOS1-A(A6),A0+ŠCMP.B‚#$EA,4(A0)‰DON'TCOMPLAINONOVERRUN ŠBEQ.S‚DL10 ŠBSR„IOERCHKŒCHECKFORI/OERROR0DL10†CMP.W‚#$0002,(A0)ˆSEEIFFROMWRITEREQUESTŠBEQ„DL500ŽBRANCHIFYES  )* EVENT WAS INPUT COMPLETION ON HOST PORT /ŠBTSTƒ#2,IOS1+1-A(A6)„WASITOUTPUTWITHINPUT?ŠBEQ.S‚DL40BRANCHIFNO;ŠMOVE.LIOS1+8-A(A6),IOS1+12-A(A6)CORRECTSTARTINGADDRESS/ŠBTSTƒ#H,OPTFLG-A(A6)„ISTHISJUSTANACKECHO?,ŠBEQ.S‚DL45BRANCHIFYES,PUTUPREADAGAIN DL40†LEA„TBUF-A(A6),A3,ŠADD.L‚WLGH-A(A6),A3†ADDRESSTOMOVEDATATO)ŠBSR„EDITMOV1‹MOVEDATATOWORKINGBUFFER5ŠADD.L‚#1,BLKRED-A(A6)„BUMP#BLOCKSREADFORCHECKSUMŠMOVE.LTERMLGH-A(A6),D0ŠLEA„TBUF-A(A6),A2?ŠADD.L‚WLGH-A(A6),A2†POINTA2TOFIRSTBYTEOFLASTMOVEDBLOCK 6DL42†CMP.L‚CHRBLK-A(A6),D0„DIDWEFILLTHEFULLBLOCK?ŠBHS.S‚DL43BRANCHIFYES0ŠMOVE.B#'',0(A2,D0)†FORCEBLANKSTOFULLBLOCK ŠADD.L‚#1,D0 ŠBRA„DL42 DL43†ADD.L‚WLGH-A(A6),A27ŠADD.L‚D0,WLGH-A(A6)†BUMPDATALENGTHINWORKINGBUFFERŠMOVE.LBLKRED-A(A6),D0ŠCMP.L‚BLKSUM-A(A6),D0'ŠBHS.S‚DL60BRANCHIFENTIREFRAMEREAD !DL45†BSR„INPP1ŽREADANOTHERBLOCKŠBRA„DLWAITGOWAITFOREVENT  J* ENTIRE FRAME HAS BEEN RECEIVED - IF TERMINATE HAS BEEN KEYED IN, GET OUT 9DL60†BTSTƒ#TFLG,TRANFLG-A(A6)HASTERMINATEBEENKEYEDINŠBEQ.S‚DL90BRANCHIFNO 2ŠCMP.B‚#'B',COMOPT-A(A6)‚'B'COMMUNICATIONOPTION?ŠBNE.S‚DL62BRANCHIFNO ŠBSR„WAITDC1 DL62†MOVE.B#'T',D0-ŠBSR„RESPOND2‹RESPONDWITHOUTPUTANDPROCEED ŠBRA„DLWAIT  A*NOTERMINATIONYET-VALIDATECHECKSUM.‚IFBADCHECKSUMASKFOR* RETRANSMISSION ?DL90†MOVE.LCHRNUM-A(A6),D0„NUMBEROFCHARACTERSWESHOULDHAVEŠCMP.L‚WLGH-A(A6),D0)ŠBEQ.S‚DL100ŽBRANCHIFCHARACTERCOUNTOK-ŠMOVE.L#4,D1ŽCOMPLAINONBADCHARACTERCOUNTŠLEA„BADCCT-A(A6),A0-ŠBSR„BINDASCŒCONVERTEXPECTEDCHARACTERCOUNTŠMOVE.LWLGH-A(A6),D0ŠLEA„BADCCR-A(A6),A0-ŠBSR„BINDASCŒCONVERTRECEIVEDCHARACTERCOUNTŠBSR„LF6ŠLEA„BADCCS-A(A6),A1ŠLEA„BADCCE-A(A6),A2*ŠBSR„MOUTTELLTHEMOFBADCHARACTERCOUNT DL95†EQU„*2ŠCMP.B‚#'B',COMOPT-A(A6)‚'B'COMMUNICATIONOPTION?ŠBNE.S‚DL97BRANCHIFNO ŠBSR„WAITDC1 #DL97†MOVE.L#DELAY,D0ŠWAITASECONDŠMOVE.L#1000,A0ŠTRAPƒ#1ŠMOVE.B#'R',D0)ŠBSR„RESPOND1‹RESPOND/OUTPUTWITHINPUT'ŠBSR„DLINITFŒINITIALIZEFRAMEVARIABLES ŠBRA„DLWAIT 2DL100…BTSTƒ#C,OPTFLG-A(A6)„ISCHECKSUMOPTIONSET?ŠBEQ.S‚DL130ŽBRANCHIFNO'ŠLEA„TBUF-A(A6),A1†POINTA1TOCHECKSUM.ŠMOVE.L#2,D1ŽNUMBEROFCHARACTERSINCHECKSUMŠBSR„ASCHBINŒCONVERTTOASCIIŠTST.W‚D0‘ISCHECKSUMWILD?'ŠBEQ.S‚DL130ŽBRANCHIFYES(0CHECKSUM)3ŠMOVE.WD0,-(A7)‹SAVECHECKSUMFORLATERCOMPARISON6ŠLEA„TBUF+2-A(A6),A1„WHERETOBEGINCOMPUTINGCHECKSUM ŠMOVE.LA1,A2ŠADD.L‚WLGH-A(A6),A2!ŠSUB.L‚#2,A2ŽENDOFDATA+1BYTE ŠCLR.L‚D0 ŠCLR.L‚D1 6DL110…MOVE.B(A1)+,D1‹ACCUMULATECHECKSUMINTHISLOOP ŠADD.L‚D1,D0 ŠCMP.L‚A1,A2-ŠBNE.S‚DL110ŽBRANCHIFMORECHARACTERSTOSUM ŠDIVUƒ#255,D0 ŠCLR.W‚D0ŠSWAPƒD0‘SUMMOD255IND0.W$ŠADD.W‚#1,D0ŽINSURENONZEROCHECKSUM ŠCLR.L‚D20ŠMOVE.W(A7)+,D2‹CHECKSUMSENTFROMOTHERSYSTEMŠCMP.W‚D0,D2ŽSEEIFITMATCHESŠBEQ.S‚DL130ŽBRANCHONMATCH+ŠBSR„NAKRPTSEEIFRETRYCOUNTISEXHAUSTEDŠBNE.S‚DL115ŽBRANCHIFNO-ŠLEA„FORCMS-A(A6),A1„TELLOFFORCINGCHECKSUMŠLEA„FORCME-A(A6),A2 ŠBSR„MOUT ŠBRA.S‚DL130 0DL115…MOVE.L#4,D1ŽCOMPLAINONCHE- CKSUMMISMATCHŠLEA„BADCST-A(A6),A0 ŠBSR„BINDASC ŠMOVE.LD2,D0ŠLEA„BADCSR-A(A6),A0 ŠBSR„BINDASCŠBSR„LF6ŠLEA„BADCSS-A(A6),A1ŠLEA„BADCSE-A(A6),A2%ŠBSR„MOUTPUTUPBADCHECKSUMMESSAGE$ŠBRA„DL95GOTELLTHEMTORETRANSMIT  (* CHECKSUM MATCHES - GO PROCESS THE DATA ?DL130…MOVE.LREP2-A(A6),REP1-A(A6)RESETCHECKSUMRETRYCOUNTERŠLEA„TBUF-A(A6),A0%ŠADD.L‚#3,A0ŽBYPASSCHARANDCHECKSUM,ŠMOVE.LA0,TPTR-A(A6)†SAVEPOINTERINTOTBUFŠBSR„DPROCESS‹PROCESSTHEDATAŠBEQ.S‚DL140ŽBRANCHIFDONE  ,* COME HERE FOR FRAME PROCESSED SUCCESSFULLY 6ŠCMP.B‚#'Z',TBUF+2-A(A6)‚HASTHELASTFRAMEBEENREAD?ŠBEQ.S‚DL140ŽBRANCHIFYES 2ŠCMP.B‚#'B',COMOPT-A(A6)‚'B'COMMUNICATIONOPTION?ŠBNE.S‚DL138ŽBRANCHIFNO ŠBSR„WAITDC1 DL138…MOVE.B#'N',D0)ŠBSR„RESPOND1‹RESPOND/OUTPUTWITHINPUT&ŠBSR„DLINITFŒINITIALIZEFORNEXTFRAMEŠBRA„DLWAITGOWAITFORNEXT  DL140…EQU„*2ŠCMP.B‚#'B',COMOPT-A(A6)‚'B'COMMUNICATIONOPTION?ŠBNE.S‚DL148ŽBRANCHIFNO ŠBSR„WAITDC1 DL148…MOVE.B#'T',D0-ŠBSR„RESPOND2‹RESPONDWITHOUTPUTANDPROCEED ŠBRA„DLWAIT  (* EVENT WAS OUTPUT COMPLETE ON HOST PORT DL500…EQU„*ŠBTSTƒ#TFLG,TRANFLG-A(A6)+ŠBNE.S‚DL550ŽBRANCHIF''T''KEYINFLAGSET * NORMAL TERMINATION )ŠMOVE.LIOS4+8-A(A6),D0„NUMBERTOCONVERT-ŠMOVE.L#6,D1ŽNUMBEROFCHARACTERSTOCONVERTŠLEA„DDONEN-A(A6),A0)ŠBSR„BINDASCŒCONVERTTOASCIIFORDISPLAYŠBSR„LF6)ŠLEA„DDONES-A(A6),A1„'DOWNLOADCOMPLETED'ŠLEA„DDONEE-A(A6),A2 ŠBSR„MOUT ŠBRA„QUITUPDN  * TERMINATED BT 'T' KEYIN .DL550…MOVE.LIOS4+8-A(A6),D0„NUMBERTOCONVERT-ŠMOVE.L#6,D1ŽNUMBEROFCHARACTERSTOCONVERTŠLEA„DTERMN-A(A6),A0)ŠBSR„BINDASCŒCONVERTTOASCIIFORDISPLAYŠBSR„LF6:ŠLEA„DTERMS-A(A6),A1„'DOWNLOADTERMINATEDWITH'T'KEY-IN'ŠLEA„DTERME-A(A6),A2 ŠBSR„MOUT ŠBRA„QUITUPDNŠPAGE )*****************************************(*EVENTWASI/OCOMPLETIONONTERMINAL‚*)*****************************************  DTIO†EQU„*/ŠMOVE.LSAVSTACK-A(A6),A7‚RESTORESTACKPOINTERŠBSR„ASQREADŒREADTHEEVENTŠLEA„IOS5H-A(A6),A0%ŠBSR„HLTCHKWASTHISFROMAHALTI/O?ŠBEQ„TRANSRTN‹BRANCHIFYES ŠMOVE.BBUFF5S-A(A6),D0ŠCMP.B‚#'T',D0'ŠBNE.S‚DL700ŽBRANCHIFNOTA'T'KEYIN-ŠBSETƒ#TFLG,TRANFLG-A(A6)YES-FLAGTHEFACT ŠBRA.S‚DL800 .DL700…CMP.B‚#'D',D0ŒWASKEYINA'D'(DISPLAY)? ŠBNE.S‚DL800)ŠBCHGƒ#D,OPTFLG-A(A6)„CHANGEDISPLAYFLAG1ŠBEQ.S‚DL750ŽBRANCHIFDISPLAYWASPREVIOUSLYOFFŠBSR„LF61ŠLEA„RDOFS-A(A6),A1…PUTOUT'DISPLAYOFFMESSAGE'ŠLEA„RDOFE-A(A6),A2 ŠBSR„MSGOUTŠBSR„LF6 ŠBRA.S‚DL800 DL750…BSR„LF60ŠLEA„RDONS-A(A6),A1…PUTOUT'DISPLAYONMESSAGE'ŠLEA„RDONE-A(A6),A2 ŠBSR„MSGOUTŠBSR„LF6 *DL800…BSR„INPP5CTAKEANOTHERCHARACTERIN ŠBRA„DLWAITŠPAGE 2**************************************************0*DLINITFINITIALIZESVARIABLESINPREPARATIONƒ**‹FORREADINGNEXTFRAME*2************************************************** 6DLINITFƒCLR.L‚BLKRED-A(A6)‡CLEARNUMBEROFBLOCKSREAD,ŠLEA„TBUF-A(A6),A0†ADDRESSOFWORKINGBUFFER/ŠMOVE.LA0,WBUF-A(A6)†ADDRESSINWORKINGBUFFER'ŠCLR.L‚WLGH-A(A6)‰CLEARLENGTHOFFRAMEŠRTS   9*********************************************************+*DPROCESSPROCESSESTHEFRAMEJUSTREAD.**ƒEXITCONDITIONCODESARE:›*7*ƒEQUAL-FRAMEPROCESSINGOK(LASTRECORDPROCESSED)*0*ƒPLUS‚-FRAMEPROCESSINGOK(NOTLASTRECORD)‡*9*********************************************************  DPROCESS‚EQU„*=ŠMOVEM.LDPSAV-A(A6),D0-D7/A0-A5PICKUPRESUMEREGISTERS...ŠJMP„(A0)...ANDGOTHERE&DPIN†BSR„GETCHRGET1STCHAROFLENGTH)ŠBEQ.S‚DL910ŽBRANCHONCHARACTEROBTAINED%ŠLEA„DPIN-A(A6),A0†NEEDANOTHERBLOCK6ŠMOVEM.LD0-D7/A0-A5,DPSAV-A(A6)SAVERESUMEREGISTERSŠBRA„DPEXOKTAKEOKEXIT *DL910…CMP.B‚#'',D0ŒSEEIFNOMORERECORDS&ŠBEQ„DPEXENDŒBRANCHIFNOMORERECORDS/ŠMOVE.BD0,DLTEMP-A(A6)„SAVECHARACTEROBTAINED 'DL915…BSR„GETCHRGET2NDCHAROFLENGTH)ŠBEQ.S‚DL920ŽBRANCHONCHARACTEROBTAINED&ŠLEA„DL915-A. (A6),A0…NEEDANOTHERBLOCK6ŠMOVEM.LD0-D7/A0-A5,DPSAV-A(A6)SAVERESUMEREGISTERS ŠBRA„DPEXOK DL920…MOVE.BD0,DLTEMP+1-A(A6)0ŠLEA„DLTEMP-A(A6),A1„CONVERTASCIIHEXTOBINARY-ŠMOVE.L#2,D1ŽNUMBEROFCHARACTERSTOCONVERT ŠBSR„ASCHBIN(ŠMOVE.LD0,RLGH-A(A6)†SAVERECORDLENGTH 4* MOVE RECORD FROM TBUF TO RBUF - EXPANDING AS WE GO +ŠLEA„RBUF-A(A6),A3†ADDRESSOFRECORDBUFFER ŠCLR.L‚D3‘'GET'RELATIVECOUNTER4ŠMOVE.LRPTR-A(A6),D2†D2=POINTERINTO'PUT'BUFFER ŠSUB.L‚A3,D2 6DL951…CMP.L‚RLGH-A(A6),D3†SEEIFWE'VEMOVEDALLCHARSŠBHS.S‚DL1000BRANCHIFYES #DL960…BSR„GETCHRGETNEXTCHARACTER*ŠBEQ.S‚DL962ŽBRANCHIFCHARACTERAVAILABLE"ŠLEA„DL960-A(A6),A0…RESUMEADDRESS6ŠMOVEM.LD0-D7/A0-A5,DPSAV-A(A6)SAVERESUMEREGISTERS!ŠBRA„DPEXOKGOEXITFORNEWFRAME $DL962…ADD.L‚#1,D3ŽBUMP'GET'COUNTER.ŠCMP.B‚#'|',D0ŒISITTHECOMPRESSIONSENTINEL?ŠBNE.S‚DL980ŽBRANCHIFNO )DL964…BSR„GETCHRGETCOMPRESSEDCHARACTER*ŠBEQ.S‚DL965ŽBRANCHIFCHARACTERAVAILABLE&ŠLEA„DL964-A(A6),A0…GETRESUMEADDRESS6ŠMOVEM.LD0-D7/A0-A5,DPSAV-A(A6)SAVERESUMEREGISTERS)ŠBRA„DPEXOKBRANCHFORNEWFRAMEREQUIRED $DL965…ADD.L‚#1,D3ŽBUMP'GET'COUNTER/ŠMOVE.BD0,BCHR-A(A6)†SAVECOMPRESSEDCHARACTER $DL966…BSR„GETCHRGETCOUNTCHARACTER*ŠBEQ.S‚DL968ŽBRANCHIFCHARACTERAVAILABLE&ŠLEA„DL966-A(A6),A0…GETRESUMEADDRESS6ŠMOVEM.LD0-D7/A0-A5,DPSAV-A(A6)SAVERESUMEREGISTERS+ŠBRA.S‚DPEXOKBRANCHFORNEWFRAMEREQUIRED $DL968…ADD.L‚#1,D3ŽBUMP'GET'COUNTER2ŠSUB.B‚#'0',D0ŒCONVERTCODETOBINARYREPEATVALUE ŠCMP.L‚#9,D0 ŠBLS.S‚DL970ŽBRANCHIFRANGE0-9ŠSUB.B‚#7,D0ŽRANGE10-35 *DL970…TST.B‚D0‘AREWESTILLUNCOMPRESSING?ŠBEQ.S‚DL951ŽBRANCHIFNO0ŠSUB.L‚#1,D0ŽDECREMENTREMAINGCOMPRESSIONCOUNT*ŠMOVE.BBCHR-A(A6),0(A3,D2.L)MOVETOBUFF"ŠADD.L‚#1,D2ŽADVANCE'PUT'POINTER ŠBRA.S‚DL970 9DL980…MOVE.BD0,0(A3,D2.L)†MOVE'RAW'DATABYTETOBUFFER"ŠADD.L‚#1,D2ŽADVANCE'PUT'POINTER ŠBRA„DL951  '* OUTPUT RECORD TO DISK AND/OR TERMINAL (DL1000„TST.L‚D2‘TESTUNCOMPRESSEDLENGTH"ŠBHI.S‚DL1005BRANCHIFLENGTH>0-ŠMOVE.L#1,D2ŽIFNOTTHENFORCELENGTHOFONE$ŠMOVE.B#'',(A3)ŠFORABLANKRECORD 4DL1005„MOVE.LA3,RPTR-A(A6)†SETPOINTERBACKTORBUF2ŠLEA„IOS4-A(A6),A0†ADDRESSOFDISKPARAMETERBLOCK ŠMOVE.LA3,12(A0)ŠBUFFERADDRESS$ŠADD.L‚D2,A3ŽADDUNCOMPRESSEDLENGTH'ŠSUB.L‚#1,A3ŽPOINTA3TOLASTCHARACTER'ŠMOVE.LA3,16(A0)ŠENDINGBUFFERADDRESSŠMOVE.L#$00026028,(A0)ŠTRAPƒ#2‘OUTPUTTODISK ŠBEQ.S‚DL1010BRANCHONGOODI/O ŠMOVE.LD0,-(A7)‹SAVEERRORCODEŠBSR„HALT5ŽHALTTHEI/OŠMOVE.L(A7)+,D0$ŠBSR„IOSERRCOMPLAINOFBADDISKI/O$ŠBRA„XABORTERRORONBADDISKOUTPUT 6DL1010„ADD.L‚#1,IOS4+8-A(A6)„BUMPRANDOMRECORDNUMBER4ŠBTSTƒ#D,OPTFLG-A(A6)„AREWETODISPLAYTOTERMINAL?ŠBEQ.S‚DL1020BRANCHIFNOŠMOVEM.L$C(A0),A1/A2ŠBSR„HALT5ŽHALTI/OONTERMINAL"ŠBSR„MSGOUTPUTDATAONTOTERMINAL"DL1020„BRA„DPINGOFORNEXTRECORD  1DPEXOK„MOVE.L#1,D0ŽINDICATEPLUSCONDITIONCODES ŠBRA.S‚DPIO /DPEXENDƒCLR.L‚D0‘INDICATEEQUALCONDITIONCODES +DPIO†MOVEƒD0,-(A7)‹SAVEFORCONDITIONCODES,ŠCMP.B‚#$FF,IOS5+4-A(A6)‚ISI/OINPROGRESS?ŠBEQ.S‚DPRTSŽBRANCHIFYESŠBSR„INPP5CNOSOREISSUEINPUT+DPRTS…MOVEƒ(A7)+,D0‹RESTORECONDITIONCODESŠRTSŠPAGE .**********************************************'*GETCHRGETSONECHARACTERFROMTBUFˆ*)*ƒPOINTEDATBYTPTR.‚IFALLCHARACTERSƒ*(*ƒHAVEBEENFETCHED,UNEQUALCONDITION…*(*ƒCODESARERETURNED.‚OTHERWISE,EQUAL„*(*ƒCONDITIONCODESARERETURNEDANDTHE…* *ƒCHARACTERISRETURNEDIND0.*.**********************************************  GETCHR„MOVE.LTPTR-A(A6),A0ŠMOVE.B(A0),D0ŠLEA„TBUF-A(A6),A1 ŠSUB.L‚A1,A0ŠCMP.L‚CHRNUM-A(A6),A0.ŠBHS.S‚GETCNOBRANCHIFNOCHARACTERTORETURN+ŠADD.L‚#1,TPTR-A(A6)†ADVANCDBUFFERPOINTER&ŠCMP.L‚D0,D0ŽSETEQUALCONDITIONCODESŠRTS/GETCNO„MOVE.L#1,D0ŽSETUNEQUALCONDITIONCODESŠRTSŠPAGE2**************************************************0*IMSGDISPLAYSMESSAGEEXPLAININGINTERACTIVEƒ* *’OPTION. S.–*2**************************************************  JIM1S DC.B 'KEY IN ''T'' TO TERMINATE TRANSFER AND RESUME TRANSPARENT MODE' IM1EEQU‚*-1…DSƒ0 /IM2SDC.B'‡''D''TOTOGGLETHERECORDDISPLAY' IM2EEQU‚*-1…DSƒ0  IMSG†EQU„*ŠBSR„LF6TWOLINEFEEDSŠLEA„IM1S-A(A6),A1ŠLEA„IM1E-A(A6),A2 ŠBSR„MSGOUTŠLEA„IM2S-A(A6),A1ŠLEA„IM2E-A(A6),A2 ŠBSR„MSGOUTŠBSR„LF6TWOLINEFEEDSŠRTSŠPAGE %**************************************‰UPLOADSEQUENCE‹*%*************************************  ULOADMSƒDC.Bƒ'UPLOADINITIATED'ULOADMEƒEQU„*-1ŠDS…0  HSEVMS DC.B 'ENTER SENDING FILE NAME OR ''Q'' TO RESUME TRANSPARENT MODE' SEVME…EQU„*-1ŠDS…0  *NAKMS…DC.Bƒ'NAKRECEIVED-RETRANSMITTING' NAKME…EQU„*-1ŠDS…0  2UTERMS„DC.Bƒ'UPLOADTERMINATEDWITH''T''KEY-IN'(UTERMN„DC.Bƒ'XXXXXXRECORDSTRANSFERRED'UTERME„EQU„*-1ŠDS…0  UDONES„DC.Bƒ'UPLOADCOMPLETED‚'(UDONEN„DC.Bƒ'XXXXXXRECORDSTRANSFERRED'UDONEE„EQU„*-1ŠDS…0ŠPAGE *************************‚UPLOADINGROUTINEƒ*************************  3UPLOAD„LEA„SEVMS-A(A6),A1…ASKFORSENDINGFILENAMEŠLEA„SEVME-A(A6),A2 ŠBSR„MSGOUT2ŠBSR„INPW5ŽTAKESENDINGFILENAME(INPUTANDWAIT)'ŠBSR„SBARGŽCONVERTTOUPPERCASE111484 ŠBSR„ASGFLUASSIGNTHEFILE&ŠBEQ.S‚UL00BRANCHIF'Q'NOTKEYEDIN*ŠMOVE.B#'T',D0ŒTERMINATIONACKNOWLEDGMENT!ŠBSR„RESPOND2‹SENDITTOTHEHOST ŠBRA„QUITUPDN UL00†BSR„LF63ŠLEA„ULOADMS-A(A6),A1ƒTELLTHEMUPLOADISINITIATEDŠLEA„ULOADME-A(A6),A2 ŠBSR„MSGOUT ŠBSR„IMSG1ŠCLR.B‚BUFF5S-A(A6)‡CLEARBYTEFOROPERATORINPUT0ŠBSR„INPP5CINPUTANDPROCEEDFROMHOMETERMINAL  2* PLACE COMPLETION ADDRESSES INTO PARAMETER BLOCKS ŠLEA„UHIO-A(A6),A0ŠMOVE.LA0,IOS1+24-A(A6)ŠLEA„UTIO-A(A6),A0ŠMOVE.LA0,IOS5+24-A(A6)  * INITIALIZE FOR RECORD READS /ŠLEA„IOS4-A(A6),A0†ADDROFFILEPARAMETERBLOCK$ŠCLR.L‚8(A0)ŽCLEARRRNFORDISKREAD#ŠLEA„RBUF-A(A6),A1†STARTINGADDRESS(ŠLEA„RBUF+RMAX-1-A(A6),A2ENDINGADDRESS/ŠMOVEM.LA1/A2,12(A0)†PLUGINBUFFERBOUNDARIES-ŠMOVE.L#$00016020,(A0)„PLUGINREADFUNCTION!ŠLEA„TBUF-A(A6),A0†PACKINGBUFFER.ŠADD.L‚#3,A0ŽBYPASSCHECKSUMANDEOFCHARACTER6ŠMOVE.LA0,TPTR-A(A6)†SAVEPOINTERFORPACKINGRECORDS/ŠMOVE.B#'A',-1(A0)ˆINDICATEINTERMEDIATEFRAME:ŠMOVE.LA0,UREC1-A(A6)…SAVEADDRESSOF1STRECORDINFRAME6ŠCLR.L‚USTAGEL-A(A6)†INDICATENOSTAGEDDISPLAYRECORD  =* READ ANOTHER RECORD ONLY IF WE STILL HAVE ROOM IN THE FRAME 5UL10†MOVE.LTPTR-A(A6),D0†POINTERINTOPACKINGBUFFER1ŠLEA„TBUF-A(A6),A0†BASEADDRESSOFPACKINGBUFFER-ŠSUB.L‚A0,D0ŽD0=NUMBEROFCHARACTERSPACKED(ŠCMP.L‚CHRNUM-A(A6),D0„SEEIFFULLFRAME!ŠBHS.S‚UL100ŽBRANCHIFFRAMEFULLŠLEA„IOS4-A(A6),A0ŠTRAPƒ#2‘READTHERECORDŠBNE.S‚UL15BRANCHONBADREAD  E*READWASGOOD,TRANSFERRECORDTOTBUFUNDERANEDITINGMOVE.‚PLACED*ƒTHEACTUALNUMBEROFCHARACTERSMOVEDINTOTHELENGTHFIELDOFTHE*ƒFRAME. *ŠADD.L‚#1,8(A0)‹BUMPRANDOMRECORDPOINTER+ŠMOVE.LTPTR-A(A6),A3†POINTTOLENGTHFIELD"ŠADD.L‚#2,A3ŽWHERETOMOVEDATATOŠBSR„EDITMOV2‹MOVEDATATOTBUF3ŠMOVE.LTERMLGH-A(A6),D0ƒNUMBEROFCHARACTERSMOVED ŠMOVE.LD0,D2#ŠBSR„BINHASCŒCONVERTTOASCIIIND1ŠMOVE.LTPTR-A(A6),A0$ŠMOVE.BD1,1(A0)‹2NDDIGITOFLENGTHŠROR.L‚#8,D1ŽPOSITION1STDIGITŠMOVE.BD1,(A0)ŒPLACE1STDIGIT$ŠADD.L‚#2,A0ŽPOSITIONTODESTINATIONŠADD.L‚TERMLGH-A(A6),A0!ŠMOVE.LA0,TPTR-A(A6)†UPDATETPTR"ŠBRA.S‚UL10CONTINUEFILLINGFRAME &UL15†CMP.B‚#$C2,D0ŒWASITENDOFFILE?!ŠBEQ.S‚UL20BRANCHONENDOFFILE"ŠMOVE.LD0,-(A7)‹SAVEERRORSTATUSŠBSR„HALT5ŽHALTTHEI/O%ŠMOVE.L(A7)+,D0‹RECOVERERRORSTATUSŠBSR„IOSERRCOMPLAINONERROR"ŠBRA„XABORTABORTONBADDISKREAD  * BLANK FILL THE FRAME 1UL20†MOVE.LTPTR-A(A6),A0†WHERETOMOVEBLANKSTOŠLEA„TBUF-A(A6),A1$ŠADD.L‚CHRNUM-A(A6),A1„LASTADDR+1'UL25†MOVE.B#'',(A0)+‰STUFFBLANKS...ŠCMP.L‚A0,A1Ž...TOTHEEND...ŠBNE.S‚UL25...OFTHEFRAME2ŠMOVE.LA0,TPTR-A(A6/ )†SETTPTRTOENDOFFRAME+1-ŠMOVE.B#'Z',TBUF+2-A(A6)‚INDICATELASTFRAME  )* COMPUTE CHECKSUM FOR THIS FRAME OF DATA UL100…EQU„*-ŠBTSTƒ#C,OPTFLG-A(A6)„ISCHECKSUMOPTIONSET?ŠBNE.S‚UL102ŽBRANCHIFYES>ŠMOVE.W#'00',TBUF-A(A6)ƒNOSOINSERTZERO(WILDCARD)CHECKSUM ŠBRA.S‚UL150 0UL102…LEA„TBUF+2-A(A6),A1„WHERETOSTARTSUMMING ŠMOVE.LA1,A2ŠADD.L‚CHRNUM-A(A6),A2ŠSUB.L‚#2,A2ŽENDINGADDRESS+1ŠCLR.L‚D0‘ACCUMULATORŠCLR.L‚D1‘HOLDSBYTE 6UL110…MOVE.B(A1)+,D1‹ACCUMULATECHECKSUMINTHISLOOP ŠADD.L‚D1,D0 ŠCMP.L‚A1,A2 ŠBNE.S‚UL110 ŠDIVUƒ#255,D0ŠSWAPƒD0‘SUMMOD255IND0.W$ŠADD.W‚#1,D0ŽINSURENONZEROCHECKSUM'ŠBSR„BINHASCŒCONVERTTOHEXASCIIIND1&ŠMOVE.WD1,TBUF-A(A6)†PLUGINCHECKSUM  '* LOOP FOR SENDING FRAME BLOCK BY BLOCK 5UL150…LEA„TBUF-A(A6),A2†BASEOFFRAMEANDFIRSTBLOCK ŠMOVE.LA2,A1ŠADD.L‚CHRBLK-A(A6),A2+ŠSUB.L‚#1,A2ŽBRACKETFIRSTBLOCKWITHA1/A2 ŠBRA.S‚UL182 UL180…EQU„*ŠMOVEM.LBBOUNDS-A(A6),A1/A20ŠBTSTƒ#R,OPTFLG-A(A6)„AREWEADDINGC/R'SŽ111484ŠBEQ.S‚UL181ŽNOŸ111484;ŠMOVE.BUSAVCHR-A(A6),1(A2)REPLACECRWITHSAVEDCHARACTER*ƒIFDOPTIONSETTHENDISPLAYRECORDSJUSTSENTONTOTERMINAL "UL700…MOVE.LREP2-A(A6),REP1-A(A6)ŠBTSTƒ#D,OPTFLG-A(A6)#ŠBEQ„UL800ŽBRANCHIFOPTIONNOTSET5ŠMOVE.LUREC1-A(A6),D0…SEEIFUSTAGEREADYTODISPLAYŠLEA„TBUF-A(A6),A0 ŠSUB.L‚A0,D0ŠCMP.L‚CHRNUM-A(A6),D0.ŠBHI„UL800ŽBRANCHIFUSTAGESTILLACCUMULATINGŠBSR„HALT5ŽHALTI/OONTERMINAL8ŠTST.L‚USTAGEL-A(A6)†DOWEHAVEASTAGEDDISPLAYRECORD?ŠBEQ.S‚UL710ŽBRANCHIFNO A* DISPLAY THE STAGING BUFFER (LEFT OVER FROM LAST FRAME OVERFLOW) ŠLEA„USTAGE-A(A6),A1 ŠMOVE.LA1,A2ŠADD.L‚USTAGEL-A(A6),A2 ŠSUB.L‚#1,A2 ŠBSR„MSGOUTŠCLR.L‚USTAGEL-A(A6)  M* NOW SET UP TO DISPLAY THE REST OF THE RECORDS FROM TBUF THAT HAVE JUST BEEN* SENT IN THIS FRAME. UL710…LEA„TBUF-A(A6),A35ŠADD.L‚CHRNUM-A(A6),A3„A3=LASTADDRESS+1OFFRAMEBŠMOVE.LUREC1-A(A6),DLTEMP-A(A6)POINTERTONEXTRECORDTODISPLAY >UL720…MOVE.LDLTEMP-A(A6),A1„ADDRESSOFLENGTHFIELDOFRECORD8ŠCMP.B‚#'',(A1)ŠISTHISTHELASTRECORDOFENTIREFILE?ŠBEQ.S‚UL790ŽBRANCHIFYES ŠCLR.L‚D0ŠLEA„TBUF-A(A6),A0ŠADD.L‚CHRNUM-A(A6),A0,ŠCMP.L‚A0,A1ŽAREWEATTHEENDOFTHEFRAME?ŠBHS.S‚UL790ŽBRANCHIFYES =* NOT THE LAST RECORD IN TBUF SO MOVE IT TO USTAGE TO DISPLAY -ŠMOVE.L#2,D1ŽNUMBEROFCHARACTERSTOCONVERT-ŠBSR„ASCHBINŒCONVERTFROMASCIIHEXTOBINARY,ŠMOVE.LA1,A2ŽADDRESSOFBEGINNINGOFRECORD)ŠADD.L‚D0,A2ŽADDRESS+1OFENDOFRECORD4ŠMOVE.LD0,USTAGEL-A(A6)ƒLENGTHOFCOMPRESSEDRECORD+ŠLEA„USTAGE-A(A6),A4„BASEOFDISPLAYBUFFER   * MOVE AND UNCOMPRESS RECORD*ƒA1‚-‚'FROM'ADDRESS*ƒA4‚-‚'TO'ADDRESS 3UL740…MOVE.B(A1)+,D0‹CHARACTERUNDERCONSIDERATIONŠCMP.B‚#'|',D0/ŠBNE.S‚UL760ŽBRANCHIFNOTCOMPRESSIONSENTINEL%ŠMOVE.B(A1)+,D0‹COMPRESSEDCHARACTER ŠMOVE.B(A1)+,D1‹REPETITIONCODE ŠSUB.B‚#'0',D1ŒCONVERTTOBINARY ŠCMP.B‚#9,D1%ŠBLS.S‚UL750ŽBRANCHIFINRANGE0-9%ŠSUB.B‚#7,D1ŽCONVERTINRANGE10-35 UL750…TST.B‚D1 ŠBEQ.S‚UL761*ŠMOVE.BD0,(A4)+‹MOVECOMPRESSEDCHARACTER ŠSUB.B‚#1,D1 ŠBRA.S‚UL750 3UL760…MOVE.BD0,(A4)+‹MOVENONCOMPRESSEDCHARACTER%UL761…CMP.L‚A2,A1ŽAREWEDONEMOVING?ŠBLO.S‚UL740ŽBRANCHIFNO 1ŠCMP.L‚A3,A2ŽSEEIFTHISRECORDFLOWSOFFTHEENDŠBHI.S‚UL780ŽBRANCHIFYES6ŠMOVE.LA1,DLTEMP-A(A6)„ADDRESSOFNEXTRECORDINTBUF  $* NOW DISPLAY THE RECORD FROM USTAGE ŠMOVE.LA4,A2$ŠSUB.L‚#1,A2ŽLASTADDRESSTODISPLAYŠLEA„USTAGE-A(A6),A1ŠBSR„MSGOUTDISPLAYTHERECORD)ŠCLR.L‚USTAGEL-A(A6)†CLEARSTAGINGLENGTHŠBRA„UL720ŽCONTINUEDISPLAYING >UL780…LEA„USTAGE-A(A6),A1„CALCULATEUNCOMPRESSEDRECORDLENGTH ŠSUB.L‚A1,A4ŠMOVE.LA4,USTAGEL-A(A6) /UL790…BSR„INPP5CTAKEINPUTFROMTERMINALAGAIN   #* ENTIRE FRAME HAS BEEN TRANSMITTED8* IF LAST FRAME, ISSUE TERMINATION OR COMPLETION MESSAGE  6UL800…CMP.B‚#'Z',TBUF+2-A(A6)‚WASTHISTHELASTFRAME?%ŠBNE.S‚UL840ŽBRANCHIFNOTLASTFRAME0ŠBTSTƒ#TFLG,TRANFLG-A(A6)HAS'T'BEENKEYEDIN?ŠBEQ.S‚UL830ŽBRANCHIFNO )ŠMOVE.LIOS4+8-A(A6),D0„NUMBERTOCONVERT-ŠMOVE.L#6,D1ŽNUMBEROFCHARACTERSTOCONVERTŠLEA„UTERMN-A(A6),A0)ŠBSR„BINDASCŒCONVERTTOASCIIFORDISPLAYŠBSR„LF6ŠLEA„UTERMS-A(A6),A1ŠLEA„UTERME-A(A6),A2(ŠBSR„MOUTTELLTHEMUPLOADISTERMINATED ŠBRA„QUITUPDN .UL830…MOVE.LIOS4+8-A(A6),D0„NUMBERTOCONVERT-ŠMOVE.L#6,D1ŽNUMBEROFCHARACTERSTOCONVERTŠLEA„UDONEN-A(A6),A0)ŠBSR„BINDASCŒCONVERTTOASCIIFORDISPLAYŠBSR„LF6ŠLEA„U0 DONES-A(A6),A1ŠLEA„UDONEE-A(A6),A2'ŠBSR„MOUTTELLTHEMUPLOADISCOMPLETED ŠBRA„QUITUPDN 5UL840…BTSTƒ#TFLG,TRANFLG-A(A6)HAS'T'BEENKEYEDIN?ŠBEQ.S‚UL850ŽBRANCHIFNO4ŠLEA„TBUF-A(A6),A0†SETUPTBUFPOINTERTOBLANKFILL)ŠADD.L‚#3,A0ŽBYPASSCHECKSUMANDSEQUENCEŠMOVE.LA0,TPTR-A(A6)/ŠBRA„UL20GOCONSTRUCTENDINGFRAMEANDSENDIT  >* JUSTIFY ANY FRAME OVERFLOW AND CONTINUE SENDING DATA TO HOST 3UL850…MOVE.LTPTR-A(A6),A2†LASTADDRESS+1TOMOVEŠLEA„TBUF-A(A6),A0,ŠADD.L‚CHRNUM-A(A6),A0„FIRSTADDRESSTOMOVE$ŠLEA„TBUF+3-A(A6),A1„WERETOMOVETOUL855…CMP.L‚A2,A0"ŠBHS.S‚UL900ŽBRANCHIFDONEMOVINGŠMOVE.B(A0)+,(A1)+ ŠBRA.S‚UL855:UL900…MOVE.LA1,TPTR-A(A6)†UPDATETEMPORARYBUFFERPOINTER,ŠMOVE.LA1,UREC1-A(A6)…FIRSTRECORDOFFRAME5ŠMOVE.B#'A',TBUF+2-A(A6)‚INDICATEINTERMEDIATEFRAMEŠBRA„UL10GOCONTINUEFILLINGŠPAGE )*****************************************(*EVENTWASI/OCOMPLETIONONTERMINAL‚*)***************************************** UTIO†EQU„*/ŠMOVE.LSAVSTACK-A(A6),A7‚RESTORESTACKPOINTERŠBSR„ASQREADŒREADTHEEVENTŠLEA„IOS5H-A(A6),A0%ŠBSR„HLTCHKWASTHISFROMAHALTI/O?ŠBEQ.S‚ULWAITBRANCHIFYES ŠMOVE.BBUFF5S-A(A6),D0(ŠCMP.B‚#'D',D0ŒWASKEYINA'D'(DISPLAY) ŠBNE.S‚UTIO10ŠBCHGƒ#D,OPTFLG-A(A6)2ŠBEQ.S‚UTIO08BRANCHIFDISPLAYWASPREVIOUSLYOFF*ŠCLR.L‚USTAGEL-A(A6)†CLEARHANGINGDISPLAYŠBSR„LF61ŠLEA„RDOFS-A(A6),A1…PUTOUT'DISPLAYOFFMESSAGE'ŠLEA„RDOFE-A(A6),A2 ŠBSR„MSGOUTŠBSR„LF6 ŠBRA.S‚UTIO99 UTIO08„BSR„LF60ŠLEA„RDONS-A(A6),A1…PUTOUT'DISPLAYONMESSAGE'ŠLEA„RDONE-A(A6),A2 ŠBSR„MSGOUTŠBSR„LF6 ŠBRA.S‚UTIO99 (UTIO10„CMP.B‚#'T',D0ŒWASA'T'KEYEDIN?ŠBNE.S‚UTIO99BRANCHIFNO5ŠBSETƒ#TFLG,TRANFLG-A(A6)YESSOSETTERMINATIONFLAG UTIO99„BSR„INPP5C   7* RESET STACK POINTER AND POINTER AND GO WAIT FOR EVENT ULWAIT„EQU„*,ŠMOVE.LA7,SAVSTACK-A(A6)‚SAVESTACKPOINTER!ŠMOVE.L#WTEVNT,D0‰WAITFOREVENTŠTRAPƒ#1  2**************************************************$*QUITUPDNHALTSANYACTIVEI/OON*%*ƒTERMINALORHOSTPORT,DELAYSFORŒ*.*ƒ2SECONDS.‚READSALLTHEEVENTSINTHEASQ‚**ƒANDPERFORMSRTS.œ*2************************************************** QUITUPDN‚BRA„TRANNXT  <************************************************************,*ASGFLDASSIGNSTHEFILEKEYEDININTBUF‘*8*ƒTOLOGICALUNIT#4FORUPLOAD.‚EQUALCONDITIONCODES‚*0*ƒRETURNEDFORGOODASSIGN,NECONDITIONCODES‹*%*ƒRETURNEDIFOPERATORKEYSIN'Q'.–*<************************************************************  0RENTRS„DC.Bƒ'REENTERFILENAMEOR''Q''TOQUIT'RENTRE„EQU„*-1ŠDS…0  3OVRMSGSƒDC.Bƒ'FILEEXISTS-OKTOOVERWRITE(Y/N)?'OVRMSGEƒEQU„*-1ŠDS…0  ASGFLD„EQU„*!ŠBSR„EDFILŽSETUPPARAMETERBLOCK&ŠBNE.S‚ASGFLD40‹BRANCHIF'Q'KEYEDINŠLEA„FHS4-A(A6),A0#ŠMOVE.L#$00400000,(A0)„ASSIGNCODEŠTRAPƒ#38ŠBEQ.S‚ASGOVRWŒBRANCHIFGOODASSIGN(OVERWRITEREQUEST)  >* ASSIGN FAILED - SEE IF NONEXISTENT FILE AND IF NOT, COMPLAIN ŠCMP.B‚#$17,D0#ŠBEQ.S‚ASALLOBRANCHIFNONEXISTENT!ŠBSR„FHSERRCOMPLAINOFFHSERROR ;ASGFLD20‚LEA„RENTRS-A(A6),A1„TELLTHEMTOREENTERFILENAMEŠLEA„RENTRE-A(A6),A2 ŠBSR„MOUTŠBSR„INPW5ŽGETINPUTŠBRA„ASGFLDGOFORANOTHERTRY  8*THEFILEALREADYEXISTS.‚ASKIFTHEYWISHTOOVERWRITE ASGOVRWƒLEA„OVRMSGS-A(A6),A1ŠLEA„OVRMSGE-A(A6),A2 ŠBSR„MOUTŠBSR„INPW5ŽWAITFORTHEINPUTŠCMP.B‚#'Y',BUFF5S-A(A6) ŠBNE„ASGFLD20  ;*THEYWANTTOOVERWRITE.‚FREETHEFILEANDDELETEIT,THEN* REALLOCATE IT AND ASSIGN IT. ŠLEA„FHS4-A(A6),A0ŠMOVE.L#$00040000,(A0)ŠTRAPƒ#3‘FREETHEFILEŠMOVE.L#$00020000,(A0)ŠTRAPƒ#3‘DELETETHEFILE ASALLO„MOVE.L#$00C00304,(A0)%ŠTRAPƒ#3‘ALLOCATEANDASSIGNTHEFILEŠBEQ.S‚ASGFLD40$ŠBSR„FHSERRPUTUPFHSERRORMESSAGE/ŠBRA„ASGFLD20‹GOTELLTHEMTOREENTERFILENAME ASGFLD40‚RTSŠPAGE <************************************************************,*ASGFLUASSIGNSTHEFILE0 KEYEDININTBUF‘*8*ƒTOLOGICALUNIT#4FORUPLOAD.‚EQUALCONDITIONCODES‚*0*ƒRETURNEDFORGOODASSIGN,NECONDITIONCODES‹*&*ƒRETURNEDIFOPERATORKEYSINQUIT.•*<************************************************************  ASGFLU„EQU„*#ŠBSR.S‚EDFILŽSETUPPARAMETERBLOCK&ŠBNE.S‚ASGFLU50‹BRANCHIF'Q'KEYEDIN ŠLEA„FHS4-A(A6),A0#ŠMOVE.L#$00400000,(A0)„ASSIGNCODEŠTRAPƒ#3%ŠBEQ.S‚ASGFLU50‹BRANCHONGOODASSIGN  2* ASSIGN FAILED - COMPLAIN AND LET THEM TRY AGAIN. !ŠBSR„FHSERRCOMPLAINOFFHSERROR3ŠLEA„RENTRS-A(A6),A1„TELLTHEMTOREENTERFILENAMEŠLEA„RENTRE-A(A6),A2 ŠBSR„MOUTŠBSR„INPW5ŽGETINPUTŠBRA„ASGFLUGOFORANOTHERTRY 5*THEFILEISASSIGNED.‚RETURNEQUALCONDITIONCODES. ASGFLU50‚RTSŠPAGE :**********************************************************5*EDFILFREESANYFILEATTACHEDTOLOGICALUNIT#3,†*3*ƒANDATTEMPTSTOASSIGNTHEFILEKEYEDININTHE†*.*ƒBUFFERPOINTEDATBYIOS5PARAMETERBLOCK.‹*6*ƒIFTHEASSIGNMENTWASGOOD,EQCONDITIONCODESAREƒ*/*ƒRETURNED.‚IF'Q'WASKEYED-IN,NECONTITION‰*6*ƒCODESARERETURNED.‚EDFILWILLINTERACTIVELYQUERY‚*4*ƒTHEOPERATORIFAERRORWASMADEINENTERINGTHE…**ƒFILENAME.«*:**********************************************************  DBADFILSƒDC.Bƒ'BADFILENAMEENTERED-REENTERNAMEOR''Q''TOQUIT'BADFILEƒEQU„*-1ŠDS…0  4* FIRST FREE IF ANY FILE ATTACHED TO LOGICAL UNIT #3 EDFIL…LEA„FHS4-A(A6),A0ŠMOVE.L#$00040000,(A0)ŠTRAPƒ#3  8* SEE IF 'Q' WAS KEYED IN - IF SO BRANCH TO QUIT ROUTINE EDFIL4„BSR„QUITCHK%ŠBEQ.S‚EDFIL8BRANCHIFQUITKEYEDIN  /* NOW SET UP PARAMETER BLOCK TO ASSIGN THE FILE ŠLEA„FHS4-A(A6),A0ŠBSR.S‚DEFAULTS6ŠMOVE.LIOS5+12-A(A6),A0ƒADDRESSOFKEYEDINFILENAME ŠMOVE.LA0,A2ŠADD.L‚IOS5+20-A(A6),A24ŠMOVE.B#',',1(A2)‰TERMINATEWITHCOMMAFOREDITFILEŠLEA„FHS4-A(A6),A6 ŠBSR„EDITFILE ŠLEA„A(PC),A6 ŠTST.L‚D0#ŠBPL.S‚EDFIL6BRANCHIFEDITFILEOKŠLEA„BADFILS-A(A6),A1ŠLEA„BADFILE-A(A6),A2 ŠBSR„MOUTŠBSR„INPW5ŽWAITFORTHEINPUT ŠBRA.S‚EDFIL4 ,EDFIL6„CMP.L‚D0,D0ŽSETEQUALFORGOODASSIGNŠBRA.S‚EDFILRTS 3EDFIL8„MOVE.L#1,D0ŽSETNECONDITIONCODESFORQUIT EDFILRTS‚RTSŠPAGE 5*****************************************************5* RESPOND1 RESPONDS TO HOST WITH OUTPUT WITH INPUT. *+*ƒRESPONSEVALUEPASSEDINLOWORDERBYTE‰***ƒOFDO.‚INPUTISDONEINTOBUFF1S.THIS‰**ƒROUTINECALLSOIP1.*5*****************************************************  /RESPOND1‚MOVE.BD0,RESPONSE-A(A6)‚SAVERESPONSE3ŠLEA„RESPONSE-A(A6),A1‚SETUPBUFFERBOUNDARIES...ŠMOVE.LA1,A2Ž...FOROIP1 ŠADD.L‚#2,A2 ŠBSR„OIP1ŠRTS  7*******************************************************5*RESPOND2RESPONDSTOHOSTWITHOUTPUTANDPROCEEDƒ*7* WITH RESPONSE VALUE PASSED IN LOW ORDER BYTE OF D0. *7*******************************************************  RESPOND2‚EQU„*)ŠMOVE.BD0,RESPONSE-A(A6)‚SETUPRESPONSE*ŠLEA„RESPONSE-A(A6),A1‚ADDRESSOFRESPONSE&ŠMOVE.LA1,A2ŽSETUPBUFFERBOUNDARIES ŠADD.L‚#2,A2ŠLEA„IOS1-A(A6),A0ŠMOVEM.LA1/A2,12(A0)6ŠMOVE.L#$0002020A,(A0)„IMAGEWRITE,SVCADDR,PROCEED"ŠMOVE.B#$FF,4(A0)‰MARKACTIVEI/OŠTRAPƒ#2 ŠBSR„XFRABORTŠRTSŠPAGE 2****************************************************DEFAULTSSETSUPDEFAULTVALUESINFHS‰*.*ƒPARAMETERBLOCK.‚A0CONTAINSFHSPARAMETER‚**ƒBLOCKADDRESS.Ÿ*2**************************************************  :DEFAULTS‚MOVE.WUSERNUM+2-A(A6),$A(A0)DEFAULTUSERNUMBER'ŠMOVE.LVOLNAM-A(A6),$6(A0)„VOLUMENAME(ŠMOVE.LCATNAM-A(A6),$C(A0)„CATALOGNAME7ŠMOVE.LCATNAM+4-A(A6),$10(A0)2NDPARTOFCATALOGNAMEŠRTS   5*******************************************************NAKRPTCOUNTSDOWNTHEREP1COUNTERTOŒ*-*ƒSEEIFTHEREPETITIONCOUNTISEXHAUSTED.‡*0*ƒIFREP1ISZERO,COUNTISEXHAUSTEDANDREP1„*0*ƒISRESETWITHREP2VALUEANDEQUALCONDITION„**ƒCODESARERETURNED.*-*ƒOTHERWISEREP1ISDECREMENTEDANDUNEQUA1 L‡*!*ƒCONDITIONCODESARERETURNED.“*5*****************************************************   NAKRPT„TST.L‚REP1-A(A6),ŠBGT.S‚NAKRPT2ŒBRANCHIFCOUNTNOTEXHAUSTED5ŠMOVE.LREP2-A(A6),REP1-A(A6)‚EXHAUSTED-RESETCOUNT ŠCMP.L‚D0,D0ŠBRA.S‚NAKRRTSNAKRPT2ƒSUB.L‚#1,REP1-A(A6)'ŠTST.L‚(A7)SETNONZEROCONDITIONCODES NAKRRTSƒRTSŠPAGE 3***************************************************0*PREACHKCHECKSTHETERMINALBUFFERTOSEEIF„*+*ƒITCONTAINS'PREAMBLE'.‚EQUALCONDITION†*0*ƒCODESARERETURNEDIFSO,UNEQUALOTHERWISE.‚*3***************************************************   2PREACHKƒLEA„PREAM-A(A6),A1…STRINGTOCHECKAGAINST"ŠLEA„TBUF-A(A6),A2†BUFFERTOCHECK ŠBSR.S‚SCHKŠRTS  8********************************************************/*QUITCHKCHECKSTHEIOS5BUFFERTOSEEIFITŠ*4*ƒCONTAINS'Q'.‚EQUALCONDITIONCODESARERETURNED‚**ƒIFSO,UNEQUALOTHERWISE.š*8********************************************************  QUITCHKƒMOVE.LIOS5+12-A(A6),A2ŠCMP.B‚#'Q',(A2)ŠRTS  >**************************************************************<*SCHKCHECKSTHETERMINALBUFFERPOINTEDATBYA2FORTHEƒ***ƒCHARACTERSTRINGSPECIFIEDBYA1.‚UPON’*.*ƒENTRY,A1POINTSTOALONGWORDSPECIFYING*-*ƒTHENUMBEROFCHARACTERSINTHESTRINGTO*-*ƒMATCH,FOLLOWEDIMMEDIATELYBYTHESTRING* *ƒITSELF.²*>**************************************************************  SCHK†EQU„*ŠMOVE.L(A1)+,D0 ŠSUB.L‚#1,D0TCHK2…CMP.B‚(A1)+,(A2)+ŠDBNEƒD0,TCHK2ŠRTSŠPAGE 1*************************************************(*MOUTHALTSANYI/OONLU5ANDCALLSŠ*,*ƒMSGOUTTOOUTPUTDATATOLU6.‚IFAREALƒ*-*ƒI/OFUNCTIONWASACTUALLYHALTEDONLU5,ƒ*+*ƒMOUTWILLREISSUETHEI/OREQUESTAFTER…**ƒCALLINGMOUT.Ÿ*1*************************************************  #MOUT†BSR„HALT5ŽHALTI/OONTERMINAL(ŠBEQ.S‚MOUT4ŽBRANCHIFI/OREALLYHALTED ŠBSR„MSGOUTŠBRA.S‚MOUTRTS MOUT4…BSR„MSGOUTŠMOVE.LA0,-(A7)ŠLEA„IOS5-A(A6),A0"ŠMOVE.B#$FF,4(A0)‰MARKACTIVEI/O!ŠTRAPƒ#2‘REISSUETHEPREVIOUSI/OŠMOVE.L(A7)+,A0 MOUTRTSƒRTS  0************************************************+*FHSERRPUTSUPAMESSAGECOMPLAININGOF†*-*ƒFHSERRORNUMBERANDLOGICALUNITNUMBER.‚*)*ƒENTEREDWITHERRORCODEIND0ANDFHS†*"*ƒPARAMETERBLOCKADDRESSINA0.**ƒA0,A1,A2,D0DESTROYED–*0************************************************ FHSERR„BSR„BINHASCŠMOVE.WD1,FHSERRS-A(A6)ŠMOVE.B5(A0),FHSERLUN-A(A6)ŠADD.B‚#$30,FHSERLUN-A(A6)ŠLEA„FHSERRS-A(A6),A1ŠLEA„FHSERRE-A(A6),A2 ŠBSR„MOUTŠRTSŠPAGE 0************************************************+*IOSERRPUTSUPAMESSAGECOMPLAININGOF†*-*ƒIOSERRORNUMBERANDLOGICALUNITNUMBER.‚*)*ƒENTEREDWITHERRORCODEIND0ANDIOS†*!*ƒPARAMETERBLOCKADDRESSINA0Ž**ƒA0,A1,A2,D0DESTROYED.•*0************************************************  IOSERR„BSR„BINHASCŠMOVE.WD1,IOSERRS-A(A6)ŠMOVE.B5(A0),IOSERLUN-A(A6)ŠADD.B‚#$30,IOSERLUN-A(A6)ŠLEA„IOSERRS-A(A6),A1ŠLEA„IOSERRE-A(A6),A2 ŠBSR„MOUTŠRTS  2**************************************************0*IOPPERFORMSI/OREQUESTFORI/OANDPROCEEDƒ***ƒA0CONTAINSADDRESSOFPARAMETERBLOCK‡*$*ƒA1CONTAINSBUFFERSTARTADDRESS*"*ƒA2CONTAINSBUFFERENDADDRESS*+*ƒSTATUSBYTEOFP.B.ISFLAGGEDWITH$FF†***ƒTOSHOWACTIVEI/O.‚REQUESTISIGNORED†**ƒIFI/OISALREADYACTIVE.”*2**************************************************  IOP‡EQU„*(ŠCMP.B‚#$FF,4(A0)‰ISI/OALREADYACTIVE?ŠBEQ.S‚IOPRTSBRANCHIFYES.ŠMOVEM.LA1/A2,12(A0)†PLUGINBUFFERADDRESSES"ŠMOVE.B#$FF,4(A0)‰MARKACTIVEI/OŠTRAPƒ#2,ŠBSR„XFRABORT‹ABORTONPARAMETERBLOCKERROR IOPRTS„RTSŠPAGE 1*************************************************(*INPP5CPERFORMSINPUTANDPROCEEDONŠ*,*ƒLOGICALUNIT5(TERMINAL).‚ONECHARACTERƒ**ƒISINPUTATBUFF5S.™* *ƒINPUTISIMAGEMODE,NOECHO*1************************************1 ************* INPP5C„LEA„BUFF5S-A(A6),A1 ŠMOVE.LA1,A2ŠLEA„IOS5-A(A6),A03ŠMOVE.L#$0001022A,(A0)„READ,IMAGE,SVCADDR,PROCEEDŠBSR„IOPŠRTS   5*****************************************************'*INPP5PERFORMSINPUTANDPROCEEDON*0*ƒLOGICALUNIT5(TERMINAL).‚BUFFERBOUNDARIESƒ**ƒAREBUFF5SANDBUFF5E›* *ƒINPUTISFORMATTEDWITHECHO”*5*****************************************************  INPP5…LEA„BUFF5S-A(A6),A1ŠLEA„BUFF5E-A(A6),A2ŠLEA„IOS5-A(A6),A0-ŠMOVE.L#$00010202,(A0)„READ,SVCADDR,PROCEEDŠBSR„IOPŠRTS  ,********************************************,* INPW5 PERFORMS INPUT AND WAIT ON LOGICAL *(*ƒUNIT5(TERMINAL).‚BUFFERBOUNDARIES‚**ƒAREBUFF5SANDBUFF5E.‘*,******************************************** INPW5…LEA„BUFF5S-A(A6),A1ŠLEA„BUFF5E-A(A6),A2ŠLEA„IOS5-A(A6),A0ŠMOVEM.LA1/A2,12(A0)ŠMOVE.L#$00010000,(A0)"ŠMOVE.B#$FF,4(A0)‰MARKACTIVEI/OŠTRAPƒ#2 ŠBSR„XFRABORTŠRTS )*****************************************'*INPP1PERFORMSINPUTANDPROCEEDONƒ*&*ƒLOGICALUNIT1(HOSTPORT).‚BUFFER*$*ƒBOUNDARIESAREBUFF1SANDBUFF1E„*)***************************************** INPP1…LEA„BUFF1S-A(A6),A1ŠLEA„BUFF1E-A(A6),A2ŠLEA„IOS1-A(A6),A0<ŠMOVE.L#$0001022E,(A0)„READ,SVCADDR,NOECHO,IMAGE,PROCEED,ŠBSR„IOPREJECTIFBUSY‚012885ŠRTSŠPAGE 0************************************************(*OUTP1PERFROMSOUTPUTANDPROCEEDON‰*&*ƒLOGICALUNIT1(HOSTPORT).‚BUFFERˆ*,*ƒAREDEFINEDINA1/A2.‚THISROUTINECALLS‚**ƒIOP.§*0************************************************  OUTP1…LEA„IOS1-A(A6),A04ŠMOVE.L#$0002020A,(A0)„IMAGEWRITE,SVCADDR,PROCEEDŠBSR„IOP ŠBSR„XFRABORTŠRTS  4****************************************************3*OUTW5IPERFORMSOUTPUTANDWAIT(IMAGEMODE)ON‚*.*ƒLOGICALUNIT5(TERMINALPORT).‚BOUNDARIES„*%*ƒARETBUFFORALENGTHOFTERMLGH.Ž*,*ƒOUTPUTISATTEMPTEDUNTILNOBUSYSTATUS‡**ƒISRETURNED.£*4****************************************************  OUTW5I„LEA„IOS5W-A(A6),A0ŠLEA„TBUF-A(A6),A1 ŠMOVE.LA1,A2ŠADD.L‚TERMLGH-A(A6),A2 ŠSUB.L‚#1,A2/ŠMOVEM.LA1/A2,12(A0)†MOVEINBUFFERBOUNDARIES(ŠMOVE.L#$00020008,(A0)„IMAGEWRITE,WAIT)OUTW5IAƒMOVE.B#$FF,4(A0)‰MARKACTIVEI/OŠTRAPƒ#2"ŠCMP.B‚#BUSY,D0‹SEEIFDEVICEBUSYŠBNE.S‚OUTW5IX!ŠBSR„TINYWAIT‹WAITALITTLEWHILEŠBRA.S‚OUTW5IA OUTW5IXƒRTS   7*******************************************************5*OUTP5FPERFORMSOUTPUTANDPROCEED(FORMATTED)ONƒ*.*ƒLOGICALUNIT5(TERMINALPORT).‚BOUNDARIES‡*%*ƒARETBUFFORALENGTHOFTERMLGH.‘*,*ƒOUTPUTISATTEMPTEDUNTILNOBUSYSTATUSŠ**ƒISRETURNED.¦*7*******************************************************  B+L4D<GD@L:T@\JdWlHtK|OUTP5F„LEA„IOS5-A(A6),A0ŠLEA„TBUF-A(A6),A1 ŠMOVE.LA1,A2ŠADD.L‚TERMLGH-A(A6),A2 ŠSUB.L‚#1,A2/ŠMOVEM.LA1/A2,12(A0)†MOVEINBUFFERBOUNDARIES5ŠMOVE.L#$00020202,(A0)„FORMATWRITE,SVCADDR,PROCEED )OUTP5FAƒMOVE.B#$FF,4(A0)‰MARKACTIVEI/OŠTRAPƒ#2"ŠCMP.B‚#BUSY,D0‹SEEIFDEVICEBUSYŠBNE.S‚OUTP5FX!ŠBSR„TINYWAIT‹WAITALITTLEWHILEŠBRA.S‚OUTP5FA OUTP5FXƒRTS   6******************************************************'*OIP15PERFORMSOUTPUTWITHINPUTON*1*ƒLOGICALUNIT1(HOSTPORT).OUTPUTBOUNDARIES„*(*ƒAREDEFINEDINIOS5PARAMETERBLOCK.***ƒINPUTBOUNDARIESAREBUFF1SANDBUFF1E‹*,*ƒI/OISATTEMPTEDUNTILNOBUSYSTATUSIS‰*&*ƒRETURNED.‚THISROUTINECALLSOIP1.Ž*6******************************************************  ;OIP15…MOVE.LIOS5+12-A(A6),A1ƒCONSTRUCTBOUNDARIESINA1/A2 ŠMOVE.LA1,A2,ŠBTSTƒ#H,OPTFLG-A(A6)„HALFDUPLEXSET’111484+ŠBEQ.S‚OIP15ANO,OUTPUT1CHARONLY‹1114843ŠADD.L‚IOS5+20-A(A6),A2ƒYES,SENDWHOLELINE111484OIP15A„BSR.S‚OIP2 1°111484ŠRTSŠPAGE 4****************************************************&*OIP1PERFORMSOUTPUTWITHINPUTON*1*ƒLOGICALUNIT1(HOSTPORT).OUTPUTBOUNDARIES‚**ƒAREDEFINEDINA1/A2.š***ƒINPUTBOUNDARIESAREBUFF1SANDBUFF1E‰*,*ƒI/OISATTEMPTEDUNTILNOBUSYSTATUSIS‡* *ƒRETURNED.¦*4**************************************************** OIP1†LEA„IOS1-A(A6),A02ŠMOVEM.LA1/A2,12(A0)†SETOUTPUTBUFFERBOUNDARIESŠLEA„BUFF1S-A(A6),A1#ŠMOVE.LA1,8(A0)‹INPUTBUFFERSTARTŠLEA„BUFF1E-A(A6),A2 ŠSUB.L‚A1,A2 ŠADD.L‚#1,A2!ŠMOVE.LA2,20(A0)ŠLENGTHOFINPUT>ŠMOVE.L#$0004062A,(A0)„OUT/IN,IMAGE,SVCADDR,NOECHO,PROCEED'OIP1A…MOVE.B#$FF,4(A0)‰MARKACTIVEI/OŠTRAPƒ#2"ŠCMP.B‚#BUSY,D0‹SEEIFDEVICEBUSY ŠBNE.S‚OIP1X#ŠBSR.S‚TINYWAIT‹WAITALITTLEWHILE ŠBRA.S‚OIP1A OIP1X…RTS  2**************************************************'*OIP1CPERFORMSOUTPUTWITHINPUTONŒ*-*ƒLOGICALUNIT1(HOSTPORT).OUTUPTISONE„*)*ƒCHARACTERFROMBUFFERDEFINEDINIOS5ˆ**ƒPARAMETERBLOCK.*'*ƒINPUTISONECHARACTERINTOBUFF1S.Š*,*ƒI/OISATTEMPTEDUNTILNOBUSYSTATUSIS…* *ƒRETURNED.¤*2************************************************** OIP1C…LEA„IOS1-A(A6),A0ŠMOVE.LIOS5+12-A(A6),A1 ŠMOVE.LA1,A2ŠADD.L‚IOS5+20-A(A6),A2 ŠSUB.L‚#1,A22ŠMOVEM.LA1/A2,12(A0)†SETOUTPUTBUFFERBOUNDARIESŠLEA„BUFF1S-A(A6),A1#ŠMOVE.LA1,8(A0)‹INPUTBUFFERSTART!ŠMOVE.L#1,20(A0)ŠLENGTHOFINPUT>ŠMOVE.L#$0004062A,(A0)„OUT/IN,IMAGE,SVCADDR,NOECHO,PROCEED (OIP1CA„MOVE.B#$FF,4(A0)‰MARKACTIVEI/OŠTRAPƒ#2"ŠCMP.B‚#BUSY,D0‹SEEIFDEVICEBUSY ŠBNE.S‚OIP1CX#ŠBSR.S‚TINYWAIT‹WAITALITTLEWHILE ŠBRA.S‚OIP1CA OIP1CX„RTSŠPAGE  +*********************************************TINYWAITDOESARELINQUISHANDRETURNS‚*+******************************************* TINYWAIT‚MOVE.L#RELINQ,D0ŠTRAPƒ#1ŠRTS  :**************************************************<<011785+*HALT1HALTSTHEI/OINPROGRESSONLU1ˆ**°*.*‚ROUTINEWAITSFORHALTSTATUSTOAPPEARIN„*.*‚IOS1HPARAMETERBLOCKBEFORERETURNING.‚IFƒ*+*‚AHALTISACTUALLYEFFECTED(0STATUS),‡***‚THEHALTSYNCCOUNTERWORDIMMEDIATELYˆ*)*‚FOLLOWINGTHEHALTPARAMETERBLOCKIS‰*,*‚INCREMENTED.‚IFNOI/OHADTOBESTOPPED…*&*‚(STATUSNE0&NE$FF,RETURNNOW.Œ*2************************************************** HALT1:ŠLEA„IOS1H-A(A6),A0&ŠMOVE.B#$FF,IOSSTA(A0)„PRELOADSTATUSŠTRAPƒ#2‘HALTTHEI/O7ŠWHILE.BIOSSTA(A0)#$FFDO.S‚WAITTILLGETANSWER ŒBSR‚TINYWAITŠENDW 7ŠIF.BƒIOSSTA(A0)#0THEN.S‚WASTHEREI/OTOHALT?4ŒADD.W‚#1,IOS1H+28-A(A6)‚YES,BUMPHALTSYNCCOUNTER&ŒCMP.L‚D0,D0ŽSETEQUALCONDITIONCODESŠENDI HALT1RTS‚RTS   2**************************************************+*HALT5HALTSTHEI/OINPROGRESSONLU5ˆ**°*.*‚ROUTINEWAITSFORHALTSTATUSTOAPPEARIN„*.*‚IOS5HPARAMETERBLOCKBEFORERETURNING.‚IFƒ*+*‚AHALTISACTUALLYEFFECTED(0STATUS),‡***‚THEHALTSYNCCOUNTERWORDIMMEDIATELYˆ*)*‚FOLLOWINGTHEHALTPARAMETERBLOCKIS‰*,*‚INCREMENTED.‚IFNOI/OHADTOBESTOPPED…*&*‚(STATUSNE0&NE$FF,RETURNNOW.Œ*2************************************************** HALT5:ŠLEA„IOS5H-A(A6),A0&ŠMOVE.B#$FF,IOSSTA(A0)„PRELOADSTATUSŠTRAPƒ#2‘HALTTHEI/O7ŠWHILE.BIOSSTA(A0)#$FFDO.S‚WAITTILLGETANSWER ŒBSR‚TINYWAITŠENDW 7ŠIF.BƒIOSSTA(A0)#0THEN.S‚WASTHEREI/OTOHALT?4ŒADD.W‚#1,IOS5H+28-A(A6)‚YES,BUMPHALTSYNCCOUNTER&ŒCMP.L‚D0,D0ŽSETEQUALCONDITIONCODESŠENDIHALT5RTS‚RTS—011785>>   4****************************************************(*HLTCHKCHECKSFORAHALTEDI/O.‚ZEROŒ*'*ƒCONDITIONCODESARERETURNEDIFTHEŒ*&*ƒI/OHASHALTED,NONZEROOTHERWISE.*)*ƒTHEADDRESSOFTHEHALTI/OPARAMETERŠ*&*ƒBLOCKISPASSEDINA0.‚THEROUTINEŒ*-*ƒCHECKSTHESYSCCOUNTER(WORDIMMEDIATELY†***ƒFOLLOWINGTHEHALTPARAMETERBLOCKFOR‰*,*ƒZERO.‚IFZERO,NOHALTHASBEENEFFECTED†*,*ƒIFNONZERO,AHALTHASBEENEFFECTEDAND‡*0*ƒTHEROUTINE2 WILLDECREMENTTHESYNCCOUNTER.ƒ*4****************************************************  +HLTCHK„TST.W‚28(A0)HASHALTBEENEFFECTED?ŠBEQ.S‚HLTCHKBŒBRANCHIFNO$ŠSUB.W‚#1,28(A0)ŠCHECKOFFTHISHALT/ŠCMP.L‚D0,D0ŽSETEQUALCONDITIONCODESFORHALTŠBRA.S‚HLTCRTSŒGORETURN:HLTCHKBƒTST.L‚(A7)SETNONZEROCONDITIONCODESFORNOHALT HLTCRTSƒRTSŠPAGE 2****************************************************IOERCHKCHECKSPARAMETERBLOCKPOINTED‰*.*ƒATBYA0FORERROR.‚IFERRORTHENCOMPLAIN‚**ƒWITHMESSAGE. *2**************************************************  IOERCHKƒMOVE.B4(A0),D0"ŠBEQ.S‚IOERRTSŒBRANCHFORNOERROR$ŠMOVEM.LD0/A0,-(A7)‡SAVEERRORCODE!ŠBSR„IOSERRCOMPLAINOFI/OERROR'ŠMOVEM.L(A7)+,D0/A0‡RESTOREERRORCODE IOERRTSƒRTS   :**********************************************************,*WAITDC1WILLPUTUPATWOCHARACTERREAD*&*ƒTOTHEHOSTPORT.‚WHENTHEREADIS’*-*ƒSATISFIEDTHEROUTINEPERFORMSANRTS.‚IF‹*/*ƒTHEREADISNOTSATISFIED,THEROUTINEWILLŠ*2*ƒRTSAFTERTWOSECONDS.‚THEPURPOSEISTODELAY†*6*ƒUNTILRECEIPTOFADC1INDICATINGLINETURNAROUND.ƒ*7*ƒTHETWOCHARACTERSREADSHOULDBEALINEFEED($0A)‚*"*ƒFOLLOWEDBYACARRIAGERETURN.—*:**********************************************************  WAITDC1ƒEQU„*ŠMOVE.L#10,D1LOOPCOUNT+ŠLEA„WAITDRTN-A(A6),A0‚EVENTRETURNADDRESSŠMOVE.LIOS1+24-A(A6),-(A7)5ŠMOVE.LA0,IOS1+24-A(A6)ƒSETNEWEVENTRETURNADDRESSŠLEA„BUFF1S-A(A6),A1 ŠMOVE.LA1,A2*ŠADD.L‚#1,A2ŽSETUPFORTWOCHARACTERREADŠLEA„IOS1-A(A6),A0;ŠMOVE.L#$0001022A,(A0)„READ,SVCADDR,NOECHO,IMAGE,PROCEEDŠBSR„IOPŠMOVE.L(A7)+,IOS1+24-A(A6) 0WAITD05ƒCMP.B‚#$FF,IOS1+4-A(A6)‚ISTHEI/ODONE?ŠBNE.S‚WAITDRTS‹BRANCHIFYES(ŠSUB.L‚#1,D1ŽNO-DECREMENTWAITCOUNTER1ŠBMI.S‚WAITD08ŒBRANCHIFWE'VEWAITEDLONGENOUGH&ŠMOVE.L#DELAY,D0ŠWAITFOR2/10SECONDŠMOVE.L#200,A0ŠTRAPƒ#1-ŠBRA.S‚WAITD05ŒGOBACKANDCHECKFORI/ODONE WAITD08ƒBSR„HALT1ŽHALTTHEI/O'ŠBNE.S‚WAITDRTS‹BRANCHIFNOI/OHALTED,ŠSUB.W‚#1,IOS1H+28-A(A6)‚ADJUSTSYNCCOUNTER WAITDRTS‚RTS !WAITDRTN‚BSR„ASQREADŒDUMMYRETURN+ŠMOVE.L#WTEVNT,D0‰JUSTREADEVENTANDWAITŠTRAPƒ#1 ŠPAGE >**************************************************************/*EDITMOV1MOVESDATATHATHASJUSTBEENREAD*2*ƒFROMTHEHOSTINTOAWORKINGBUFFERPOINTEDAT‹*+*ƒBYA3.‚PARITYBIT(BIT7)ISMASKEDOFF‘**ƒTHENUMBEROFCHARACTERS¡*'*ƒACTUALLYMOVEDISSAVEDINTERMLGH.–*6*ƒONLYDATAINTHERANGE$20-$7EINCLUSIVEISMOVED.‡*2*ƒIFACARRIAGERETURNISENCOUNTEREDBEFOREANY‹*9*ƒOTHERDATA,ABLANKISMOVEDINPLACEOFTHECARRIAGE„*6*ƒRETURN.‚IFALINEFEEDISENCOUNTEREDINTHEDATA,†*5*ƒALLMOVEMENTUPTOANDINCLUDINGTHELINEFEEDISˆ*7*ƒSCRUBBEDANDONLYTHEPORTIONOFTHELINEFOLLOWING†*4*ƒISMOVED.‚THEBUFFERBOUNDARIESFOREDITMOV1AREˆ***ƒIMPLIEDFROMTHEIOS1PARAMETERBLOCK.“*>**************************************************************  EDITMOV1‚EQU„*ŠMOVEM.LA1-A4/D0,-(A7)0ŠMOVE.LIOS1+12-A(A6),A1ƒSTARTADDRESSFROMHOST ŠMOVE.LA1,A2ŠADD.L‚IOS1+20-A(A6),A2ŠSUB.L‚#1,A2ŽENDADDRESSINA2 ŠMOVE.LA3,A4 EDMV2…CMP.L‚A2,A1"ŠBHI.S‚EDMV4ŽBRANCHIFDONEMOVING%ŠMOVE.B(A1)+,D0‹CHARACTERTOEXAMINE"ŠAND.B‚#$7F,D0ŒMASKOFFPARITYBIT ŠCMP.L‚A3,A4.ŠBNE.S‚EDMV3ŽBRANCHIFATLEASTONECHARMOVED)ŠCMP.B‚#$0D,D0ŒISTHISACARRIAGERETURN?ŠBNE.S‚EDMV3ŽBRANCHIFNO4ŠMOVE.B#$20,D0ŒSUBSTITUTEBLANKFORCARRIAGERETURN$ŠBRA.S‚EDMV5ŽFORCEMOVEMENTOFBLANK &EDMV3…CMP.B‚#$0A,D0ŒISITALINEFEED?+ŠBNE.S‚EDMV8ŽBRANCHIFNO-NORMALMOVEMENT'ŠMOVE.LA4,A3ŽRESETDESTINATIONPOINTER(ŠBRA„EDMV2ŽCONTINUEWITHNORMALMOVEMENT EDMV8…CMP.B‚#$20,D0 ŠBLO.S‚EDMV2ŽBRANCHONNON-ASCIIŠCMP.B‚#$7F,D0ŠBHS.S‚EDMV2ŽBRANCHNONASCII -EDMV5…MOVE.BD0,(A3)+‹MOVEINASCIICHARACTER ŠBRA.S‚EDMV2 EDMV4…SUB.L‚A4,A38ŠMOVE.LA3,TERMLGH-A(A6)ƒSAVENUMBEROFCHARACTERSMOVEDŠMOVEM.L(A7)+,A1-A4/D0ŠRTSŠPAGE 8****3 ****************************************************/*EDITMOV2MOVESDATATHATHASJUSTBEENREADŠ*2*ƒVIAIOS4PARAMETERBLOCKTOALOCATIONPOINTED…*1*ƒTOBYA3.‚NUMBEROFCHARACTERSACTUALLYMOVED…*4*ƒISRETURNEDINTERMLGH.‚THEDATAISEDITEDASIT‚*1*ƒISMOVEDINTHEFOLLOWINGWAY:‚ALLCHARACTERS…*1*ƒTHATDONOTFALLINTHECODERANGEOF$20-$7E†*2*ƒINCLUSIVE(NONPRINTABLEASCIICHARACTERS)ARE…*.*ƒCONVERTEDTOBLANK(CODE$20).‚INADDITIONˆ*5*ƒIFCOMOPTCONTAINSA'B'(OBTAINEDFROMPREAMBLE)‚*6*ƒANYLOWERCASELETTERSARECONVERTEDTOUPPERCASE.*5*ƒCHARACTERCOMPRESSIONPACKETISMOVEDINPLACEOF‚*2*ƒANYREPETITIONOF4ORMORELIKECHARACTERSIS…*%*ƒREPLACEDBYACOMPRESSIONPACKET.’*8********************************************************  EDITMOV2‚MOVEM.LA1-A4,-(A7)*ŠMOVE.LIOS4+12-A(A6),A1ƒMOVEFROMADDRESS ŠMOVE.LA1,A2ŠADD.L‚IOS4+20-A(A6),A2ŠSUB.L‚#1,A2ŽENDADDRESSINA2 ŠMOVE.LA3,A4 EDMV222ƒCMP.L‚A2,A1$ŠBHI.S‚EDMV299ŒBRANCHIFDONEMOVINGŠBSR.S‚GETCGETNEXTCHARACTER+ŠMOVE.BD0,D2ŽSAVECHARACTERFORCOMPARISON*ŠMOVE.L#1,D3ŽCOUNTOFMATCHINGCHARACTERS -EDMV250ƒCMP.L‚A2,A1ŽHAVEWEFETCHEDTHELAST?ŠBHI.S‚EDMV262ŒBRANCHIFYES ŠCMP.L‚#35,D34ŠBEQ.S‚EDMV262ŒBRANCHONMAXSIZECOMPRESSIONPACKET ŠBSR.S‚GETC ŠCMP.B‚D0,D2+ŠBNE.S‚EDMV260ŒBRANCHONNOCHARACTERMATCH.ŠADD.L‚#1,D3ŽBUMPCOUNTOFMATCHINGCHARACTERSŠBRA.S‚EDMV250 7EDMV260ƒSUB.L‚#1,A1ŽPOINTA1TONEXTCHARACTERTOFETCH4EDMV262ƒCMP.L‚#3,D3ŽDOWENEEDACOMPRESSIONPACKET?ŠBHI.S‚EDMV268ŒBRANCHIFYESŠCMP.B‚#'|',D25ŠBEQ.S‚EDMV268Œ'|'ALWAYSREQUIRESCOMPRESSIONPACKET ?EDMV264ƒMOVE.BD2,(A3)+‹NOCOMPRESSIONSOPLUGINRAWCHARACTER ŠSUB.L‚#1,D3ŠBNE.S‚EDMV264ŒKEEPPLUGGINGŠBRA.S‚EDMV222 6EDMV268ƒMOVE.B#'|',(A3)+‰PLUGINCOMPRESSIONSENTINEL-ŠMOVE.BD2,(A3)+‹PLUGINCOMPRESSEDCHARACTER.ŠADD.B‚#'0',D3ŒCONVERTD3TOASCIILENGTHCODEŠCMP.B‚#'9',D3'ŠBLS.S‚EDMV272ŒBRANCHIFINRANGE0-9-ŠADD.B‚#7,D3ŽCONVERTINRANGE10-35(A-Z) +EDMV272ƒMOVE.BD3,(A3)+‹PLUGINLENGTHCODEŠBRA.S‚EDMV222 EDMV299ƒSUB.L‚A4,A38ŠMOVE.LA3,TERMLGH-A(A6)ƒSAVENUMBEROFCHARACTERSMOVEDŠMOVEM.L(A7)+,A1-A4ŠRTS *GETC†MOVE.B(A1)+,D0‹CHARACTERINQUESTIONŠCMP.B‚#'',D0+ŠBLO.S‚GETC23BRANCHIFNOTPRINTABLEASCIIŠCMP.B‚#$7F,D0'ŠBLO.S‚GETC24BRANCHIFPRINTABLEASCII 3GETC23„MOVE.B#'',D0ŒCHANGENONPRINTABLETOBLANK#ŠBRA.S‚GETCRTSŒGOPLUGINCHARACTER *ASCDBINCONVERTSASCIIDECIMALTOBINARY.INPUTPOINTEDATƒ*1*ƒBYA1,NUMBEROFCHARSIND1.‚RESULTRETURNED*3*ƒIND0.‚LEADINGBLANKSTREATEDASLEADINGZEROS.‹*1*ƒSCANTERMINATESATENDOFFIELDORUPONFIRSTŽ*0*ƒNONNUMERICCHARACTERENCOUNTEREDAFTERFIRST**ƒNUMERICCHARACTER.©*@****************************************************************  ASCDBINƒEQU„*ŠCLR.L‚D0‘RETURNVALUEASCDB2„BSR.S‚ASCDB200ŠBRA.S‚ASCDB12ŒBRANCHONNON-NUMERIC&NON-BLANKŠBRA.S‚ASCDB2BRANCHONBLANK ASCDB4„MOVE.LD0,-(A7) ŠLSL.L‚#3,D0ŠADD.L‚(A7),D0ŠADD.L‚(A7)+,D0‹*10ŠADD.L‚D2,D0ŽADDINNEWDIGITŠBSR.S‚ASCDB200ŠBRA.S‚ASCDB12ŒBRANCHONNON-NUMERIC&NON-BLANKŠBRA.S‚ASCDB12ŒBRANCHONBLANKŠBRA.S‚ASCDB4BRANCHONNUMERICASCDB12ƒRTS—MAINRETURN ASCDB20ƒSUB.L‚#1,D1,ŠBPL.S‚ASCDB22ŒBRANCHIFNOTDONEWITHFIELD6ŠLEA„4(A7),A7‹BYPASSRETURNADDRESSONDONEWITHFIELD(ŠBRA.S‚ASCDB12ŒDONEWITHFIELDSORETURN ASCDB22ƒCLR.L‚D2#ŠCMP.B‚#'',(A1)ŠCLASSIFYCHARACTERŠBEQ.S‚ASCDB24ŒBRANCHONBLANKŠCMP.B‚#'0',(A1)$ŠBLO.S‚ASCDB30ŒBRANCHONNON-NUMERICŠCMP.B‚#'9',(A1)$ŠBHI.S‚ASCDB30ŒBRANCHONNON-NUMERICŠADD.L‚#2,(A7) ASCDB24ƒADD.L‚#2,(A7)"ASCDB30ƒMOVE.B(A1)+,D2‹ADVANCEA1ŠSUB.B‚#'0',D2ŒBINARYTOD2ŠRTSŠPAGE  ;***********************************************************:*ASCHBINCONVERTSASCIIHEXTOBINARY.‚INPUTPOINTEDAT*1*ƒBYA1,NUMBEROFCHARSIND1.‚RESULTRETURNEDˆ*3*ƒIND0.‚LEADINGBLANKSTREATEDASLEADINGZEROS.†*1*ƒSCANTERMINATESATENDOFFIELDORUPONFIRST‰*5*ƒNONHEXNUMERICCHARACTERENCOUNTEREDAFTERFIRST…**ƒHEXNUMERICCHARACTER¡*;*********************************************************** ASCHBINƒEQU„*ŠCLR.L‚D0‘RETURNVALUEASCHB2„BSR.S‚ASCHB200ŠBRA.S‚ASCHB12ŒBRANCHONNON-NUMERIC&NON-BLANKŠBRA.S‚ASCHB2BRANCHONBLANK ASCHB4„LSL.L‚#4,D0Ž*16ŠADD.B‚D2,D0ŽADDINNEWDIGITŠBSR.S‚ASCHB200ŠBRA.S‚ASCHB12ŒBRANCHONNON-NUMERIC&NON-BLANKŠBRA.S‚ASCHB12ŒBRANCHONBLANKŠBRA.S‚ASCHB4BRANCHONNUMERICASCHB12ƒRTS—MAINRETURN  ASCHB20ƒSUB.L‚#1,D1,ŠBPL.S‚ASCHB22ŒBRANCHIFNOTDONEWITHFIELD6ŠLEA„4(A7),A7‹BYPASSRETURNADDRESSONDONEWITHFIELD(ŠBRA.S‚ASCHB12ŒDONEWITHFIELDSORETURN ASCHB22ƒCLR.L‚D2#ŠCMP.B‚#'',(A1)ŠCLASSIFYCHARACTERŠBEQ.S‚ASCHB24ŒBRANCHONBLANKŠCMP.B‚#'0',(A1)$ŠBLO.S‚ASCHB30ŒBRANCHONNON-NUMERICŠCMP.B‚#'9',(A1) ŠBLS.S‚ASCHB23ŒBRANCHIFNUMERICŠCMP.B‚#'A',(A1) ŠBLO.S‚ASCHB30ŒBRANCHIFNOTHEXŠCMP.B‚#'F',(A1) ŠBHI.S‚ASCHB30ŒBRANCHIFNOTHEXŠSUB.B‚#7,D2ŽCORRECTIONFORA-F ASCHB23ƒADD.L‚#2,(A7)ASCHB24ƒADD.L‚#2,(A7)!ASCHB30ƒADD.B‚(A1)+,D2‹ADVANCEA1ŠSUB.B‚#'0',D2ŒBINARYTOD2ŠRTSŠPAGE 9*********************************************************-*‚32BITBINARYTODECIMALASCIISUBROUTINEŒ**·*.*‚CONVERTSBINARYIND0ANDPUTSASCIIDIGIT‹***…CHARACTERSATADDRESSSPECIFIEDINA0.Œ***…LEADINGZEROSARECONVERTEDTOSPACES.Œ*-*…THEFIELDLENGTH(NO.CHARS)ISSPECIFIED‰*"*…IND1INTHECALLINGSEQUENCE.”**·**‚CALLINGSEQUENCE:¤*#*…MOVE.L,D0“**…MOVE.L,D1š*3*…MOVE.L,A0ƒ**…BSRBINDASC§**·* *‚RETURNS:­**…D0=0=>GOODCONVERSIONš**·**‚REGSUSED:‚01234567š* *ŠDƒ*PP¤* *ŠAƒPP¦*9*********************************************************  !BINDASCƒMOVEM.LD1/D2/A0/A1,-(A7)ŠMOVE.L#8,D2ŽMAXNO.DIGI4 TSŠSUB.L‚D1,D2ŽNO.DIGITSTOSKIP!ŠBMI.S‚BINDASC5‹BRANCHERROREXITŠLSL.L‚#2,D2ŽDOUBLEWORDLENGTH!ŠLEA„TENS-A(A6),A1†STARTOFTABLE"ŠADD.L‚D2,A1ŽADJUSTFORDIFFERENCE&ŠMOVE.W#'‚',D2‹INITIALIZEACCUMULATOR %BINDASC1‚SUB.L‚(A1),D0ŒSUBTRACT10**NŠBCS.S‚BINDASC2‹BRANCHTOOBIG*ŠADD.W‚#1,D2ŽINCREMENTCURRENTDIGITCOUNTŠBRA„BINDASC1‹CONTINUE )BINDASC2‚ADD.L‚(A1)+,D0‹RESTORE,ADVPNTRŠTST.L‚(A1)TESTDONEŠBEQ.S‚BINDASC4‹BRANCHDONE ŠCMP.W‚#'‚',D2‹LEADINGZEROTEST!ŠBEQ.S‚BINDASC3‹BRANCHSTILLZERO#ŠADD.B‚#$10,D2ŒBRINGTOASCIIDIGIT %BINDASC3‚MOVE.BD2,(A0)+‹DEPOSITCHARŠLSL„#8,D2ŽSAVECHARDEPOSITED#ŠMOVE.B#$20,D2ŒRESTORELSTOSPACEŠBRA„BINDASC1‹CONTINUE 4BINDASC4‚ADD.B‚#$10,D2ŒLASTONEBECOMESDIGITALWAYS"ŠMOVE.BD2,(A0)+‹DEPOSITLASTCHAR'ŠTST.L‚D0‘SETCONDITIONCODE,0IFGOOD"BINDASC5‚MOVEM.L(A7)+,D1/D2/A0/A1ŠRTS  7TENS†DC.Lƒ10000000,1000000,100000,10000,1000,100,10,1,0 ŠPAGE .**********************************************&*XFRABORTTESTSCONDITIONCODES.‚IFˆ*$*ƒEQUAL,RTSISMADE.‚IFNOTEQUALˆ*$*ƒBSRADDRESSFROMSTACKISPLACED‰*(*ƒINTOA0ANDSELFABORTISPERFORMED.…*.* XABORT ENTRY POINT UNCONDITIONALLY ABORTS. *.**********************************************  XFRABORT‚BEQ.S‚ABORTS)XABORT„MOVE.LD0,-(A7)‹SAVED0FORALOOKŠMOVE.L#ABORT,D0ŠTRAPƒ#1 ABORTS„RTS PATCH…DS.Bƒ50‘PATCHAREAŠEND„XFRéééééé=/* =/*†ULOAD.LF=/*&=/* Link chain file to create ULOAD.LO=/*:=/* If no output argument is specified for the listing the'=/* chain file will default to ULOAD.LL=/*=/IFC \1ƒ=ARGULOAD.LL=/ENDIF=/*=LINK ,ULOAD.LO,\1;HAMIX ATTRIBUTES PINPUT ULOAD.ROLIB 0.&.PASVMDOS.ROLIB 0.&.PASCALIB.ROEND=/*=ENDéé4 éééé„=/* =/*†ULOAD.PF=/*M=/* Chain file to compile ULOAD which is associated with the TRANSFER utility=/*:=/* If no output argument is specified for the listing the'=/* chain file will default to ULOAD.PL=/*@=/* NOTE: this chain file requires the pascal compiler reside on9=/*‡thesystemdefault.Thecompilerisnotprovidedwith7=/*‡thisproduct,thereforethischainfilewillabort.=/*=/IFC \1ƒ=ARGULOAD.PL=/ENDIF=/*=PASCAL ULOAD.SA,ULOAD.PC,\1=/*{ Included files are:=/*ƒ--none--=/*}=PASCAL2 ULOAD.PC,ULOAD.RO;-L=/*=ENDééééé$PROGRAM UPLOAD(INPUT,OUTPUT,OUTFIL); E(*******************************************************************)C(*THISPROGRAMREADSPACKEDBLOCKSFROMTHETERMINAL,SEPARATESƒ*)?(*INDIVUDUALRECORDSANDWRITESTHEMTOANOUTPUTFILE.‚THE†*))(*PROGRAMRUNSONANEXORMACSSYSTEM.*)E(*******************************************************************) "CONSTCMAX‚=‚132;Š(*BLOCKSIZE*)&†RMAX‚=‚132;Š(*MAXIMUMRECORDSIZE*)5†BLKCNT=‚1;Œ(*NUMBEROFBLOCKSUNDERONECHECKSUM*),†BMAX‚=‚5 132;Š(*BUFFERSIZE=BLKCNT*CMAX*)/†OPTION='AA';‰(*COM/CHARPROTOCOLOPTIONS*),†CHRMAX=127;Š(*MAXIMUMCHARACTERVALUE*) TYPE‚CINDEXƒ=‚0..255;$†RECTYPE‚=‚ARRAY(.1..RMAX.)OFCHAR;*†BFTYPEƒ=‚PACKEDARRAY(.1..BMAX.)OFCHAR;†BFINDEX‚=‚INTEGER;*†BKTYPEƒ=‚PACKEDARRAY(.1..CMAX.)OFCHAR; VARƒQ…:‚BOOLEAN; †OUTFIL:‚TEXT;–(*OUTPUTFILE*)D†ASCII:‚PACKEDARRAY(.CHAR.)OFCINDEX;ƒ(*ASCIICHARACTERCODES*)@†ASHEX:‚PACKEDARRAY(.1..36.)OFCHAR;„(*FORHEXCONVERSION*)–›Ÿ+£7§.«E†NUMƒ:‚PACKEDARRAY(.CHAR.)OFCINDEX;ƒ(*ACCII-DECIMALCONVERSION*))†RECƒ:‚RECTYPE;“(*HOLDSOUTPUTRECORD*)1†BUFFP:‚BFINDEX;“(*INDEXINTOHOLDINGBUFFER*)$†BUFF‚:‚BFTYPE;”(*HOLDINGBUFFER*)3†COUNT:‚INTEGER;“(*HOLDSCHARCOUNTFORRECORD*)/†RESPONSE:CHAR;•(*HOLDSRESPONSECHARACTER*)4†BCNT‚:‚INTEGER;“(*NUMBEROFREPEATEDCHARACTERS*)&†BCHR‚:‚CHAR;–(*REPEATEDCHARACTER*) ƒPROCEDUREINITIALIZE;0†TYPE‚CHRARRAY=‚PACKEDARRAY(.1..16.)OFCHAR;†VARƒIˆ:‚INTEGER; ŒCˆ:‚CHAR; 2†PROCEDUREASGCODE(CODE:INTEGER;CHRSET:CHRARRAY);‰VARƒI‚:‚INTEGER;‰BEGIN(*ASGCODE*)‰FORI:=1TO16DO%ŒASCII(.CHRSET(.I.).):=CODE+I-1‰END;‚(*ASGCODE*) †BEGIN(*INITIALIZE*)†FORI:=0TOCHRMAXDO‰BEGIN9‰ASCII(.CHR(I).):=0;‰(*INDICATENON-ASCIICHARCTERS*)‰NUM(.CHR(I).):=0‰END;†REWRITE(OUTFIL);1†ASHEX:='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';!†ASGCODE(112,'pqrstuvwxyz{|}~');!†ASGCODE(32,'!"#$%&''()*+,-./'); †ASGCODE(48,'0123456789:;<=>?'); †ASGCODE(64,'@ABCDEFGHIJKLMNO'); †ASGCODE(80,'PQRSTUVWXYZ[\]^_'); †ASGCODE(96,'`abcdefghijklmno');†FORI:=1TO36DO‰NUM(.ASHEX(.I.).):=I-1;†BUFFP:=BLKCNT*CMAX+1;†BUFF(.3.):='A';/†WRITE(OUTPUT,'PREAMBLEU');‰(*SENDPREAMBLE*)(†WRITE(OUTPUT,OPTION);Ž(*SENDOPTION*),†WRITE(OUTPUT,CMAX:3);Ž(*SENDBLOCKSIZE*)1†WRITELN(OUTPUT,BLKCNT:1);Š(*SENDBLOCKCOUNT*)†RESPONSE:='';†END;‚(*INITIALIZE*)  .PROCEDURE GETREC(VAR Q:BOOLEAN; VAR P:BFINDEX;6“VARBUFF:BFTYPE;VARREC:RECTYPE;VARRESPONSE:CHAR); VARƒI,Jƒ:‚INTEGER;†C1,C2:‚CHAR; GƒPROCEDUREGETFRAME(VARBUFF:BFTYPE;VARQ:BOOLEAN;VARRESPONSE:CHAR);  ƒVARƒI…:‚INTEGER; ‰J…:‚INTEGER; ‰K…:‚INTEGER;‰CKSUM1:‚INTEGER;‰CKSUM2:‚INTEGER;‰TBLOCK:‚BKTYPE; †BEGIN(*GETFRAME*) †IFBUFF(.3.)='Z'†THEN ‰Q:=TRUE; †IFNOTQ†THEN‰REPEATŒI:=1;ŒJ:=1;ŒIFRESPONSE<>'';ŒTHENWRITELN(OUTPUT,RESPONSE);(*RESPONDTOLASTFRAME*)ŒWHILEJ<=BLKCNTDOBEGINREADLN(INPUT,TBLOCK); J:=J+1;FORK:=1TOCMAXDO’BEGIN’BUFF(.I.):=TBLOCK(.K.); ’I:=I+1;’END;IFBUFF(.1.)='T'THEN*’J:=BLKCNT+1;‚(*FORCEDTERMINATION*)END;ŒQ:=BUFF(.1.)='T'; ŒIFNOTQŒTHENBEGINRESPONSE:='N';2CKSUM1:=16*NUM(.BUFF(.1.).)+NUM(.BUFF(.2.).);IFCKSUM1<>0THEN’BEGIN ’CKSUM2:=0;’FORI:=3TOBLKCNT*CMAXDO%•CKSUM2:=CKSUM2+ASCII(.BUFF(.I.).); ’CKSUM2:=(CKSUM2MOD255)+1;’IFCKSUM1<>CKSUM2’THEN•RESPONSE:='R'Œ(*NAK*)’END;(*THEN*) END(*THEN*)‰UNTIL(RESPONSE='N')OR(Q)†END;(*GETFRAME*)  ;ƒPROCEDUREGETC(VARC:CHAR;VARBUFF:BFTYPE;VARP:BFINDEX;•VARQ:BOOLEAN); †BEGIN(*GETC*)†IFP<=BLKCNT*CMAX†THEN‰BEGIN‰C:=BUFF(.P.); ‰P:=P+1‰END†ELSE‰BEGIN‰GETFRAME(BUFF,Q,RESPONSE);‰C:=BUFF(.4.);‰P:=5‰END†END;(*GETC*)  ƒBEGIN(*GETREC*)2ƒGETC(C1,BUFF,P,Q);‹(*DIGIT#1OFLENGTHFIELD*)2ƒGETC(C2,BUFF,P,Q);‹(*DIGIT#2OFLENGTHFIELD*)ƒIFC1=''THENQ:=TRUE; ƒIFNOTQƒTHEN†BEGIN#†COUNT:=NUM(.C1.)*16+NUM(.C2.);†J:=1;†I:=1;†WHILEI<=5 COUNTDO‰BEGIN‰GETC(REC(.J.),BUFF,P,Q);‰IFREC(.J.)='|'‰THENŒBEGIN4ŒGETC(BCHR,BUFF,P,Q);„(*GETCOMPRESSEDCHARACTER*)(ŒGETC(C1,BUFF,P,Q);†(*GETCOUNTCODE*)8ŒBCNT:=NUM(.C1.);†(*COUNTOFCOMPRESSEDCHARACTERS*)ŒWHILEBCNT>0DOBEGIN5REC(.J.):=BCHR;„(*EXPANDCOMPRESSEDCHARACTERS*)BCNT:=BCNT-1; J:=J+1END;%ŒI:=I+3Ž(*ADVANCEGETCOUNTER*) ŒENDƒ(*THEN*)‰ELSEŒBEGIN&ŒI:=I+1;(*ADVANCEGETCOUNTER*)&ŒJ:=J+1;(*ADVANCEPUTPOINTER*) ŒENDƒ(*ELSE*)‰END;‚(*WHILE*)†COUNT:=J-1;†END‚(*THEN*)ƒEND;(*GETREC*)  5PROCEDURE PUTREC(VAR COUNT:INTEGER; VAR REC:RECTYPE); ƒVARƒI‚:‚INTEGER; ƒBEGIN(*PUTREC*)ƒI:=1;ƒWHILEI<=COUNTDO†BEGIN†WRITE(OUTFIL,REC(.I.)); †I:=I+1†END;ƒWRITELN(OUTFIL);ƒEND;(*PUTREC*) BEGIN„(*MAIN*) INITIALIZE; Q := FALSE;"GETREC(Q,BUFFP,BUFF,REC,RESPONSE);WHILE NOT Q DOƒBEGINƒPUTREC(COUNT,REC);#ƒGETREC(Q,BUFFP,BUFF,REC,RESPONSE);ƒEND;,WRITELN(OUTPUT,'T')(*TERMINATEWITH'T'*)END.…(*MAIN*)éé' UPLOADS AF»»rrUPLOADS LFÄÄrrUPLOADS SAÍÍW‚rrUTILIB AF&&WrrVALID AF//rrVALID LF88rrVALID SAAA¨rrDISPATCHNWZZrrDLOADFORSA__(rrE NW||?IrrERRORMSGSA½½Ý€rrREPAIR NWž B rrSYMBUG NW è è 'rrLOADFORSA õ õBrr=/*=/*†UPLOADS.AF=/**=/* Chain file to assemble UPLOADS utility=/*:=/* If no output argument is specified for the listing the)=/* chain file will default to UPLOADS.LS=/*=/IFC \1ƒ=ARGUPLOADS.LS=/ENDIF=/*+=ASM UPLOADS.SA,UPLOADS.RO,TEMP1.LS;-WRZ=56=/*{ Included files are:=/*ƒ9995.&.UPLOADS.MC=/*}=/*ƒ=COPYTEMP1.LS,TEMP2.LS;Y=/*;=ASM UPLOADS.EDTSREC.SA,UPLOADS.EDTSREC.RO,TEMP1.LS;-WRZ=46=/*{ Included files are:=/*ƒ--none--=/*}=/*ƒ=COPYTEMP1.LS,TEMP2.LS;Aƒ=COPYTEMP2.LS,\1;Yƒ=DELTEMP1.LSƒ=DELTEMP2.LS=/*=ENDéé6 ééé³=/*=/*†UPLOADS.LF=/*(=/* Link chain file to create UPLOADS.LO=/*:=/* If no output argument is specified for the listing the)=/* chain file will default to UPLOADS.LL=/*=/IFC \1ƒ=ARGUPLOADS.LL=/ENDIF=/*=LINK ,UPLOADS.LO,\1;HAMIX ATTRIBUTES PSEG SEG0:0-14 $0INPUT 0.&.UTILIB.ROINPUT UPLOADS.ROINPUT UPLOADS.EDTSREC.ROEND=/*=ENDééééé鼉NOLIST INCLUDE 9995.&.UPLOADS.MC‰LIST!‰TTL‡RECEIVE"S"RECORDSVIAMCCM‰OPT‡MEX,CRE,AO*******************************************************************************O*******************************************************************************O******************************************************************************** *ˆUPLOADS**ˆDate†Revision‚Description*ˆ----†--------‚-----------;*ˆ11/08/84‚1,1‡EnhancedandfixedUPLOADSUtilityaccording.*œtoSPR#1138.‚CodewasaddedtorecognizeS3-*œandS7records.‚Inaddition,codewasadded+*œtorecognizeS7,S8andS9astermination,*œrecords.‚Version1.0onlyterminatedonS9 *œrecords.*?*ˆ12/20/84‚2,0‡Modifiedprogramtomakeitpositionindependent*O******6 *************************************************************************O*******************************************************************************O*******************************************************************************  PAGE5UPLOADS‚IDNT†2,0‡Accept"S"recordsandwritetodisk SPC 2 *ˆPARAMETERBLOCKSYMBOLEQUATES SPC 1#PUBRW„EQU‡$0004…Public-Read/WritePUBR…EQU‡$0ˆPublic-Read#EREW…EQU‡$0007…ExclusiveRead/WriteSSEG…EQU‡$20‡Sharedsegment#SEQ†EQU‡$100†SequentialaccessfileEOF†EQU‡$C2‡IOS"Endoffile"#NOFILEƒEQU‡$17‡FHS"Filenotfound" SPC 3************************* EXORterm 155 Equates *************************NL‡EQU‡$00‡CRTNullcharacterLF‡EQU‡$0A‡CRTlinefeedCR‡EQU‡$0D‡CRTcarriagereturn(SV‡EQU‡$E3‡CRTsetreversevideo(field)*RV‡EQU‡$E2‡CRTresetreversevideo(field))MC‡EQU‡$C4‡CRTmovecursorright1columnND‡EQU‡$E8‡CRTsetnon-display SPC 3.CAPS…EQU‡$DF‡MaskforlowercasetouppercaseOUTOP1ƒEQU‡EREW+SEQ*REGULAR‚EQU‡$0000…Access/Position-NEXT)PRIOR„EQU‡$4000…Access/Position-PRIOR-CURRENT‚EQU‡$2000…Access/Position-CURRENT LOGOPTƒEQU‡0LOGIMAGEEQU‡8 LOGFMTƒEQU‡0 SPC 2 PBA†EQU‡*‰DCB.L…63,0†UsertaskstackMYSTACK‚DC.L†0‰* PAGEÅ?ÎCÖ8Þ6æ6î5ö.þ8;<K*********************INPUT‚filearea********************* SPC 1#MCCMAREADS.L†0‰InputareaforMCCM‰DCB.B…80,$0…StartofbufferMCCMEND‚EQU‡*-1‡Endƒofbuffer SPC 2********************* OUTPUT file area ********************* SPC 1%SRECORD‚DS.L†0‰I/OareaforDISKfile‰DCB.B…80,$0…StartofbufferSRECEND‚EQU‡*-1‡Endƒofbuffer SPC 2+*******************************************)*TeminatorRecord(S7/S8/S9)‚HOLD‚area*+******************************************* SPC 1@S9HOLDƒDS.L†0‰SaveareaforlastS7/S8/S9-Record(Onlyone/file)‰DCB.B…80,$0…StartofbufferS9LL…DS.L†0‰Lengthofrecord SPC 2:**********************************************************:* Area where the COMMAND LINE is passed to the user task *:********************************************************** SPC 1COMLINE‚DS.L†0‰COMLINEƒ160‡Usercommandline PAGE*********************** Register save area ***********************‰REGS.E„  PAGE&**************************************&* Parameter blocks for "OUTPUT" file *&************************************** SPC 1‰FHSPB…OUT,1,,,,,MX,,80,OUTOP1 %‰IOSPB…OUT,1,REGULAR,,SRECORD,SRECEND PAGE"**********************************"* PARAMETER BLOCK FOR "LOG" FILE *"********************************** SPC 1‰IOSPB…LOG,5,LOGIMAGE SPC 2**************************************************************>* Edit the COMLINE for optional parameters to be substituted *>************************************************************** SPC 1$START2ƒDSˆ0“*MOVEINTHEDEFAULTS*/‰MOVE.L„D2,LONGWORK-PBA(A4)ˆD2=DEFAULTvolume‰XFER.B„LONGWORK,OUTVOL,#4 SPC 13‰MOVE.W„D3,OUTUSER-PBA(A4)ŠD3=DEFAULTusernumber SPC 1>‰MOVE.L„D4,LONGWORK-PBA(A4)…D4=DEFAULTcatalog(1st4bytes)@‰MOVE.L„D5,LONGWORK+4-PBA(A4)ƒD5=DEFAULTcatalog(2nd4bytes)‰XFER.B„LONGWORK,OUTCAT,#8 SPC 3(‰DSˆ0“*MOVEINANYPARAMETERSENTERED*+‰LEA‡COMLINE(PC),A0ŠA0=addressofCOMLINE9‰LEA‡OUTFHSPB(PC),A6‰A6=S-recordparameterblockaddres8‰JSR‡EDITFILE(PC)ˆMovefilenameparmstoFHSparmblock*‰BMI‡BADCMDLNŒDatamovedtoparmblockok? PAGE*************************** Assign the OUTPUT file *************************** SPC 1 START3ƒDSˆ0*‰XFER.B„OUTVOL,MSGVOL,#4…Movevolumename,+‰XFER.B„OUTCAT,MSGCAT,#8…Movecatalogname,*‰XFER.B„OUTFILE,MSGFILE,#8ƒMovefilename,(‰XFER.B„OUTEXT,MSGEXT,#2…Moveextention. SPC 2%*************************************%* Find out if file specified exists *%************************************* SPC 1#‰ASSIGN„OUT‘DoesOUTPUTfileexist?.‰BEQ‡POSOLDŽYes...Thenpositionat"S9"record>‰CMP.B…#NOFILE,OUTSTAT-PBA(A4)ƒNo....Thenwemustallocateone ‰BNE‡ERROR* PAGEA*****************************************************************A* File specified by user does not exist so it must be ALLOCATED *A*****************************************************************‰XFER.B„USINGNEW,MSGDISP,#41*‰ALLOCATE‚OUT‘Allocaterequestedfilename‰BEQ.S…ALLOK* ‰BSR‡ERROR,ALLOK„ASSIGN„OUT‘NowASSIGNthefileforuse‰BEQ‡SENDHDRGosendtheheader ‰BSR‡ERROR PAGEH************************************************************************H* File specified by user exists, so we must position at the terminator *H************************************************************************ SPC 10POSOLDƒDSˆ0“Makesurethisisan"S"recordfile ‰GET‡OUT‘*!‰BEQ.S…SFILEMakesureI/Owasok!‰CMP.B…#EOF,OUTIOSTA-PBA(A4)‡EOF?%‰BEQ.S…NORECSŽYes...Nodataonfile.‰BSR‡ERRORNo....Unknownerror SPC 2******************************** There is a file but no data ******************************** SPC 1 NORECSƒXFER.B„NODATA,MSGDISP,#41"‰BRA‡SENDHDRTelluserfileempty. SPC 1.SFILE„ISIT†S0,SRECORDŠ1s7 trecordmustbe"S0"!‰BEQ.S…SKIPOUT* SPC 29*********************************************************9* There is a file with data, but they are not S-Records *9********************************************************* SPC 18‰XFER.B„NOTSREC,MSGDISP,#41Telltheuseraboutthefile#‰LEA‡HEADER(PC),A5‹Startofmessage#‰LEA‡HEADEEND(PC),A6‰ENDƒofmessage0‰MOVEM.LƒA5-A6,LOGIOSOB-PBA(A4)†SetupIOSblock‰PUT‡LOG‘Writemsgtoterminal‰BRA‡EXITReturntoVERSAdos PAGEG***********************************************************************G* Start reading the file looking for S7 or S8 or S9 terminator record *G*********************************************************************** SPC 13SKIPOUT‚GET‡OUT‘Positionat"S7orS8orS9"record$‰BEQ.S…CHKATENDŒMakesureI/Owasok SPC 1)‰CMP.B…#EOF,OUTIOSTA-PBA(A4)‡Endoffile?3‰BEQ.S…NOS789ŽYes...Thenwedidn'tfindanS7/S8/S9 ‰BSR‡ERROR* SPC 1ENOS789ƒXFER.B„NOS9REC,MSGDISP,#41"NOS7/S8/S9butwearepositioned"‰BRA‡SENDHDR* SPC 2)CHKATENDISIT†S9,SRECORDŠIsthisan"S9"?.‰BEQ.S…POSOKYes...Weareatthecorrectplace!‰ISIT†S8,SRECORDŠIsthisan"S8"?.‰BEQ.S…POSOKYes...Weareatthecorrectplace!‰ISIT†S7,SRECORDŠIsthisan"S7"?‰BNE.S…SKIPOUTNo....Keepgoing PAGE?***************************************************************?* OK, we have the S7, S8 or S9 record, delete it and continue *?***************************************************************0POSOK„DSˆ0“OutputfileispositionedatS7/S8/S9B‰MOVE.W„#CURRENT,OUTIOOPT-PBA(A4)Chgaccesspositionto"Current":‰MOVE.L„OUTIOSLL-PBA(A4),D0‰D0=LengthofS7/S8/S9record.‰LEA‡SRECORD-1(PC),A6ˆCalculateendingaddress‰ADD.L…D0,A6*=‰MOVE.L„A6,OUTIOEOB-PBA(A4)…Moveendingaddresstoparmblock:‰XFER.B„LOWVALUE,SRECORD,D0StuffI/Oareawithlowvalues3‰UPDATE„OUT‘ReplaceS7/S8/S9recordwithNULLchars$‰BEQ.S…OUTREADYŒDidI/OcompleteOK?‰BSR‡ERRORNo... SPC 1KOUTREADYMOVE.W„#REGULAR,OUTIOOPT-PBA(A4)ChgpositionfromCURRENTtoNEXT‰XFER.B„NORMALS9,MSGDISP,#41 SPC 1J**************************************************************************J* Tell user the status of the file for output and "we're ready for data" *J************************************************************************** SENDHDR‚DSˆ0“Sendheadertouser#‰LEA‡HEADER(PC),A5‹Startofmessage"‰LEA‡HEADEND(PC),A6ŠENDƒofmessage0‰MOVEM.LƒA5-A6,LOGIOSOB-PBA(A4)…SetupIOSblock‰PUT‡LOG‘Writemsgtoterminal PAGE6******************************************************6* Read loop waiting for data...Commands or S-Records *6****************************************************** SPC 1 GOREADƒDSˆ0(‰LEA‡MCCMAREA(PC),A5‰Startofinputarea%‰LEA‡MCCMEND(PC),A6ŠEndƒofinputarea@‰MOVEM.LƒA5-A6,LOGIOSOB-PBA(A4)ƒMovebufferaddresstoIOSblock SPC 1 READLOOPDSˆ0$‰GET‡LOG‘Readandwaitfornextdata1‰BEQ.S…LOOKRECGoodstatus?yes...lookatRecord'‰BSR‡ERROR.Œno....BUILDIOS/FHSError SPC 2*********************** Is it an S-Record? *********************** SPC 1 LOOKREC‚DSˆ05‰MOVE.L„LOGIOSLL-PBA(A4),D0‰Extracttherecordlength$‰LEA‡MCCMAREA(PC),A0‰A0=Inputarea SPC 1,EDITLOOPDSˆ0“Examine1stcharacterfor"LF"2‰LEA‡TABLE(PC),A1Œ*A1=Tableofvalidcharacters/‰MOVE.B„(A0),D1*D1=Charactertobeexamined ‰ADDA†D1,A1*%‰MOVE.B„(A1),D1*FF=bad,‚00=good$‰BEQ‡MOVEITŽ*Good?‚yes...keepgoing!‰SUB.L…#1,D0*ˆno...adjustcounts‰ADD.L…#1,A0*ˆ*"‰BRA‡EDITLOOPŒ*ˆtrynextcharacter PAGE SPC 2L****************************************************************************@*ˆThistableisusedtolocatecharactersthataretobedeleted>*ˆfromthebeginningoftherecord.(NewMCCMfirmware3/1/81)*?*ˆThetechniqueissimilartotheIBM360/370"TRT"instruction*:*ˆ"00"entryindicatesthatthecharacteris"ok"whilean:*ˆ"FF"entryindicatesthatthecharacteristobedeleted**ˆMACSbug‚1.32‚(68KDM),*ˆMACSbug‚2.2ƒ(EXORmacs),8 *ˆMACSbug‚3.0ƒ(USEMACSbug)and$*ˆVERSAbug1.0ƒ(VERSAmoduleMACSbug)<*ˆallbuild"S-Records"withaCR/LFfollowingthechecksum.D*ˆSincethenewMCCMfirmwarenowsavesanydatathatcomesinafterG*ˆthedelimiter,(CR),andappendsittothebeginningofthefollowingF*ˆrecord,wewillbereceivinganextraLFatthebiginningofallbut*ˆthefirstrecordwereceive.*ˆ(Linefeed=$0A)*L**************************************************************************** SPC 2‰OPT‡NOCL,NOMC,A;TABLE„TAB.0…00,00,00,00,00,00,00,00,00,00,FF,00,00,00,00,006‰TAB.1…00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,006‰TAB.2…00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,006‰TAB.3…00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,006‰TAB.4…00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,006‰TAB.5…00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,006‰TAB.6…00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,006‰TAB.7…00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,006‰TAB.8…00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,006‰TAB.9…00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,006‰TAB.A…00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,006‰TAB.B…00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,006‰TAB.C…00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,006‰TAB.D…00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,006‰TAB.E…00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,006‰TAB.F…00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 PAGE ‰OPT‡MC,MEX,A MOVEITƒDSˆ03‰MOVE.L„D0,LOGIOSLL-PBA(A4)†Altertherecordlength0‰XFER.B„(A0),SRECORD,D0‡Moverecordtoworkarea*‰LEA‡SRECORD(PC),A5Š*A5=StartofRecord9‰LEA‡SRECORD-2(PC),A6ˆ*Setuptocalculateendofrecord@‰ADD.L…LOGIOSLL-PBA(A4),A6*A6=Start+length-1(don'twantCR)6‰MOVEM.LƒA5-A6,OUTIOSOB-PBA(A4)†*SetupIOSPBforI/O SPC 1  7‰MOVE.W„SRECORD-PBA(A4),D0‚Examine1sttwocharsforS#‰AND.L…#$0000FFF0,D0‡*‰CMP.W…#'S0',D0Œ*‰BEQ.S…SPROCESSŒ* SPC 2 ******************************** * Check for any valid commands * ******************************** SPC 15‰MOVE.B„SRECORD+1-PBA(A4),D0ˆLookforthecommands...2‰AND.B…#CAPS,D0ŒBothupperandlowercasecommands SPC 2J**************************************************************************J* STATUS... File name and any errors previously detected, (1st 10 chars) *J************************************************************************** SPC 18‰CMP.B…STATUS-PBA(A4),D0ƒWastheSTATUScommandentered?!‰BEQ‡STATRTNYes...goprocessit SPC 2A*****************************************************************A* QUIT... There are no more records, (for now?), Close the file *A***************************************************************** SPC 14‰CMP.B…QUIT-PBA(A4),D0…WastheQUITƒcommandentered?!‰BEQ‡QUITRTNYes...goprocessit SPC 2:**********************************************************:* Unsupported commands are ignored, processing continues *:********************************************************** SPC 1‰BRA‡READLOOPŒReadnextrecord PAGE************************* Process the S-Record ************************* SPC 1 SPROCESSDSˆ02‰XREF†VALIDSetupexternalreferenceforEDITRTN ‰JSR‡VALID(PC)‹ValidateS-Record‰BEQ.S…ITISOKOK?...Yes<‰MOVE.B„D0,RTNCODE+3-PBA(A4)......No‚Savereasonforstatus‰XFER.W„MCCMAREA,LONGWORK,#5(‰BRA‡READLOOPŒ......„Goreadnextrecord SPC 2&**************************************&* Watch for trailer (S7 or S8 or S9) *&************************************** SPC 17ITISOKƒISIT†S9,SRECORDŠCheckthisrecord,S-9?ifso...6‰BEQ.S…S789ITISŒwriteonlyatclose,(Only1S7/S8/S9) SPC 1(‰ISIT†S8,SRECORDŠCheckthisrecord,S-8?6‰BEQ.S…S789ITISŒwriteonlyatclose,(Only1S7/S8/S9) SPC 1(‰ISIT†S7,SRECORDŠCheckthisrecord,S-7?‰BNE.S…ITSNOTS9 SPC 1ES789ITISMOVE.L„LOGIOSLL-PBA(A4),D0‡SaveS7/S8/S9for"QUIT"command.‰MOVE.L„D0,S9LL-PBA(A4)…*‰XFER.B„SRECORD,S9HOLD,D0ƒ*"‰BRA‡READLOOPŒGoreadnextrecord. SPC 1-ITSNOTS9PUT‡OUT‘Writetherecordoutto8 disk0‰BEQ‡READLOOPŒGoodstatus?yes...gotoREADLOOP'‰BSR‡ERROR.Œno....BUILDIOS/FHSError PAGE******************* Status routine ******************* SPC 1'STATRTN‚DSˆ0“Statuscommandentrypoint+‰BSR‡DOSTATUSŒ-PerformtheSTATUSfunction*‰BRA‡GOREADŽ-Thenreturntothereadloop SPC 39*********************************************************9* STATUS ROUTINE - Used by the STATUS and QUIT commands *9********************************************************* SPC 15DOSTATUSDSˆ0“CommonroutinetoexaminestatusbufferA‰MOVE.L„RTNCODE-PBA(A4),D0‚Checkreturncodetoseeifanyerrors,‰BEQ.S…NONEWERRŒnone?...GotoNONEWERRORS SPC 1"‰CLR.L…D1’BuildmessageforSTATUS2‰LEA‡VALIDERR(PC),A0‰*LoadstartofMessagetable)MSGLOOP‚MOVE.B„(A0)+,D1Œ*Fetchtablearg*‰BEQ.S…ERRFOUNDŒ*Unknownerrorexitshere!‰CMP‡D0,D1*Findtheerrorcode?‰BEQ.S…ERRFOUNDŒ*...Yes)‰ADD.L…#20,A0Ž*...Noƒ*Incrementpointer*%‰BRA‡MSGLOOP*ˆ*Gotrythenextone* SPC 13ERRFOUNDXFER.B„(A0),STERR,#20†*Movetypeoferror2‰XFER.B„LONGWORK,STDATA,#10*MoveS-Recordheader1‰MOVE.B„#7,MSGBELL-PBA(A4)‚*Ringbellforerrors PAGE***************************** Move message to I/O area ***************************** SPC 1:NONEWERRXFER.B„TEXT,MSGDISP,#41„*Movetexttostatusmsg.‰LEA‡STATMSG(PC),A5Š*SetupIOSblockforI/O‰LEA‡HEADEND(PC),A6Š*!‰MOVEM.LƒA5-A6,LOGIOSOB-PBA(A4)‚*‰PUT‡LOG‘*SendSTATUStouser"‰BEQ‡RSETSTATŒGoclearlasterror. ‰BSR‡ERROR SPC 2****************************** Reset last STATUS message ****************************** SPC 11RSETSTATCLR.L…RTNCODE-PBA(A4)…ResetRETURNcode.'‰MOVE.B„#'',MSGBELL-PBA(A4)Clearbell.‰XFER.B„NOERRORS,STERR,#31ƒCleardataportion. ‰RTS›Return. PAGE******************** Time to QUIT... ******************** SPC 1 QUITRTN‚DSˆ01‰ISIT.W„S9,S9HOLD‹DowehaveapendingS9record?0‰BEQ.S…TERMS789ŒNo...don'tre-writelastrecord 1‰ISIT.W„S8,S9HOLD‹DowehaveapendingS8record?0‰BEQ.S…TERMS789ŒNo...don'tre-writelastrecord 1‰ISIT.W„S7,S9HOLD‹DowehaveapendingS7record?0‰BNE.S…CLOSEOUTŒNo...don'tre-writelastrecord SPC 1 0 effectively releases the hold. Syntax: >DISPATCH‰(maximum8,agreaterthan­practicallimit)or &DISPATCH¥(restoresthesysgenedvalue) KNote:‚Thisisanon-memoryresidentutility;thereforetheentirefilename, ‡DISPATCH,isrequiredmnemonic.ééé; ééR†characterfunctionITOA(INT) †integer‚INT ‰character„CHARS*352‰dataˆCHARS/'123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'/ ,‰if((INT.lt.1).or.(INT.gt.35))then ŒITOA='0'‰elseŒITOA=CHARS(INT:INT)‰endif †end "†character*2functionITOX2(INT) †integer„INT ‰character„HEX*16‰integer„INDEX ‰dataˆHEX/'0123456789ABCDEF'/ -‰if((INT.lt.0).or.(INT.gt.255))then ŒITOX2='ZZ'‰elseŒINDEX=(INT/16)+1"ŒITOX2(1:1)=HEX(INDEX:INDEX)ŒINDEX=mod(INT,16)+1"ŒITOX2(2:2)=HEX(INDEX:INDEX)‰endif‰return †end "†subroutineINIT(BUFFP,Q,RESP)†integer…BUFFP †logical…Q†characterƒRESP*(*) ‰include'common' ‰characterƒPRAMBL*8‰characterƒDEST‰characterƒOPTION*2 ‰dataˆPRAMBL/'PREAMBLE'/‰dataˆDEST/'D'/‰dataˆOPTION/'AA'/ -‰open(7,file='fort.7',access='DIRECT',recl=1) ‰BUFFP=4 10‡continueŒwrite(6,2000)PRAMBLŒwrite(6,2000)DESTŒwrite(6,2000)OPTION[9`;d5h5l0pŒwrite(6,2000)'132'Œwrite(6,1000)'1'Œread(5,3000)RESP:‰if((RESP(1:1).ne.'N').and.(RESP(1:1).ne.'T'))then Œgoto10‰endif ‰if(RESP(1:1).eq.'T')then ŒQ=.true.‰endif ‰return 1000‚format(A)2000‚format(A$)3000‚format(A)†end $†subroutineCOUT(BUFF,P,C,CCNT)†characterƒBUFF*(*) †integer…P †characterƒC †integer…CCNT ‰BUFF(P:P)=C ‰P=P+1‰CCNT=CCNT+1 ‰return †end 4†subroutineCOMPRS(REC,RECSIZ,BUFF,BUFFP,CCNT)†characterƒREC*(*)†integer…RECSIZ†characterƒBUFF*(*)†integer…BUFFP †integer…CCNT ‰include'common' ‰integer…RPTR‰integer…MATCH ‰integer…I‰characterƒITOA‰characterƒCHR ‰RPTR=120‡if(RPTR.le.RECSIZ)then ŒMATCH=1ŒCHR=REC(RPTR:RPTR)Œdo30I=RPTR+1,RPTR+346if((I.le.RECSIZ).and.(REC(I:I).eq.CHR))then’MATCH=MATCH+1else ’goto40endif 30Šcontinue :40Šif((MATCH.ge.3).or.(REC(RPTR:RPTR).eq.'|'))then$callCOUT(BUFF,BUFFP,'|',CCNT)1callCOUT(BUFF,BUFFP,REC(RPTR:RPTR),CCNT).callCOUT(BUFF,BUFFP,ITOA(MATCH),CCNT)RPTR=RPTR+MATCHŒelsedo50I=1,MATCH/’callCOUT(BUFF,BUFFP,REC(RPTR:RPTR),CCNT)’RPTR=RPTR+1 50continueŒendif‰elseŒreturn‰endif ‰goto20 †end 6†subroutineGETREC(BUFF,P,RESP,EOFINF,Q,CHRCNT)†characterƒBUFF*(*) †integer…P†characterƒRESP*(*)†logical…EOFINF †logical…Q†integer…CHRCNT ‰include'common' ‰characterƒREC*132‰characterƒITOX2*2‰characterƒCHR ‰integer…I ‰integer…CPOS ‰integer…CCNT‰integer…RECSIZ ‰CPOS=P ‰CCNT=0 ‰P=P+2 ‰RECSIZ=0 ‰do53I=1,RMAXŒCHRCNT=CHRCNT+1"Œread(7,rec=CHRCNT,err=80)CHR!Œif(ichar(CHR).ne.10)thenRECSIZ=RECSIZ+1REC(RECSIZ:RECSIZ)=CHRŒelse goto55Œendif 53‡continue #55‡if(RESP(2:2).eq.'B')then; Œdo60I=1,RECSIZ*if(REC(RECSIZ:RECSIZ).eq.'')then’RECSIZ=RECSIZ-1else ’goto70endif 60Šcontinue‰endif,70‡callCOMPRS(REC,RECSIZ,BUFF,P,CCNT)$‰BUFF(CPOS:CPOS+1)=ITOX2(CCNT)‰return 80‡EOFINF=.true.‰return 1000‚format(A)†end -†subroutineOUTBLK(BUFF,P,RTYPE,RESP,Q)†characterƒBUFF*(*) †integer…P†characterƒRTYPE†characterƒRESP*(*) †logical…Q ‰include'common' ‰integer…C ‰integer…I‰integer…NAKCNT‰characterƒITOX2*2 ‰BUFF(3:3)=RTYPE‰C=0‰do90I=3,CMAX*BLKCNTŒC=C+ichar(BUFF(I:I)) 90‡continue‰C=mod(C,255)+1‰BUFF(1:2)=ITOX2(C) ‰NAKCNT=0 100†continueŒif(NAKCNT.ge.3)thenBUFF(1:2)='00'ŒendifŒwrite(6,1000)BUFF(1:CMAX)Œread(5,1000)RESP<‰if((RESP(1:1).ne.'N').and.(RESP(1:1).ne.'T'))thenŒNAKCNT=NAKCNT+1 Œgoto100‰endif‰Q=RESP(1:1).eq.'T' ‰C=CMAX+1‰do110I=C,P-1(ŒBUFF(C-CMAX+3:C-CMAX+3)=BUFF(C:C) ŒC=C+1 110†continue‰P=P-(CMAX-3)‰return 1000‚format(A)†end .†subroutinePUTREC(BUFF,P,RESP,EOFINF,Q)†characterƒBUFF*(*) †integer…P†characterƒRESP*(*)†logical…EOFINF †logical…Q ‰include'common' ‰integer‚I $120†if(P.gt.BLKCNT*CMAX+1)then%ŒcallOUTBLK(BUFF,P,'A',RESP,Q) Œgoto120‰endif‰if(EOFINF)thenŒdo130I=P-2,BLKCNT*CMAXBUFF(I:I)='' 130‰continue%ŒcallOUTBLK(BUFF,P,'Z',RESP,Q) ŒQ=.true.‰elseŒif(P.gt.BLKCNT*CMAX)then%callOUTBLK(BUFF,P,'A',RESP,Q)Œendif‰endif‰return †end †PROGRAMDOWNLD DC…*****************************************************************)@C…*Thisprogramreadsrecordsfromanasciifile,packsthem…*)?C…*intoblocksandwritesthemtotheterminal.‚Theprogram…*)C…*runsonVAX/UNIX.­*)CC…****************************************************************) ‰character„BUFF*268‰character„RESP*2 ‰logical„Q‰logical„EOFINF‰integer„BUFFP‰integer„CHRCNT‰character„ID*50 ‰include'common' ,‰data‚ID/'@(#)dload.f:1.2ˆ8/4/83(13:31:50)'/‰data„CMAX/132/‰data„RMAX/132/‰data„BLKCNT/1/‰data„BMAX/268/‰data„EOTRAN/'T'/‰data„CHRMAX/127/ ‰CHRCNT=0 ‰Q=.false.‰callINIT(BUFFP,Q,RESP)140†if(.not.Q)then4ŒcallGETREC(BUFF,BUFFP,RESP,EOFINF,Q,CHRCNT),ŒcallPUTREC(BUFF,BUFFP,RESP,EOFINF,Q) Œgoto140‰endif †endéé LIST,*‚EDITORDOCUMENTATIONRELEASE‚4.3006/14/84*‚FILENAME=E.NW*‚SOURCEFILES:*<*‚1)0000.&.UTILIB.RO‰UTILITYLIBRARYTOLINKWITHTHEEDITOR%*‚2)9995.&.IOE.EQŒFHS/IOSEQUATEFILE$*‚3)9995.&.TR1.EQŒTRAP1EQUATEFILE,*‚4)9997.&.CRTD.AI‹DATAFILEFORALLMODULES'*‚5)9997.&.CRTE11.AI‰MAINEDITORMODULE**‚6)9997.&.CRTE2.AIŠEDITORCOMMANDSMODULE1*‚7)9997.&.E.AFŽCHAINFILETOASSEMBLETHEEDITOR-*‚8)9997.&.E.LFŽCHAINFILETOLINKTHEEDITOR *‚9)9997.&.E.NWŽEDITORNEWSFILE3*10)9997.&.E.SAŽEQUATEFILEFORALLEDITORMODULES**11)9997.&.FMSINT.AI‰FMSINTERFACEMODULE**‚TOASSEMBLE:*.*„CREATE:E.ROŒEDITORRELOCATABLEOBJECTMODULE*„=CHAINE.AFE*…CREATESE.ROANDE.LS* *‚TOLINK:* *‚CREATE:E.LOŠEDITORLOADMODULE*‚=CHAINE.LFE*ƒCREATESE.LOANDE.LL PAGEG*‚MISC.INFORMATION:FILEE.NWNEEDNOTBEINCLUEDEDINANYASSEMBLIES.*‚THEYAREDOCUMENTATIONONLY. PAGE*‚68000EDITOROPERATION*)*„The68000Editordoes2mainfunctions:9*‚A)CRT-MODEe< ditingforusewithEXORterm155terminals.:*‚B)SCROLL-MODEeditingforusewithanyterminalsandthe*CHAINcommand.I*„ThenormalmodeisCRT-MODE.SCROLL-MODEisspecifiedviaan'L'intheJ*‚theinputcommandlineoptionfield.SCROLL-MODEisthemodealwaysusedK*‚wheneditingunderCHAIN.Inthiscasethe'L'optiondoesnothavetobeG*‚specified.‚TheeditorusesFMSforallfileI/Othroughaninterface-N*‚FMSINT.Thisinterfaceisassembledwiththeeditormodules.FMSINTconsistsM*‚ofseveralfileoperations.EachoperationisspecifiedbyauniqueFMSCMD.6*‚SeetheFMSINTDClistingforcompletedocumentation.*„Theeditorconsistsof:A*‚A)amainlineroutinewhichdoesallinitialsetupandending.*‚B)adriverforCRT-MODE.*‚C)adriverforSCROLL-MODE.(*‚D)anASRforexclusivebreakhandling.C*‚E)variousscreenhandlingroutinesforPAGE-MODEwithinCRT-MODE.=*‚F)variouscommandhandlingroutinesforCOMMAND-MODEwithin *„bothCRT-MODEandSCROLL-MODE.t5}"…,•-+¥&­* *‚G)acommonscreenI/Oroutine.*L*„Theeditoriscreatedastwosegments,aprogramsegmentandadatasegmentM*‚TheFMSinterfaceuses2segments,oneforfiledataandonefortheextractE*‚buffer.Therefore,theeditoruses4segments.Nomoreareavaiable. PAGE2*ƒTheCRT-MODEportionoftheeditorhas2levels: *‚A)PAGE-MODE*‚B)COMMAND-MODEJ*„PAGE-MODEisinvokedwheneditingnewfiles,emptyexistingfiles,ortheM*‚F1keywasdepressed.WheninCRT-MODEtheterminatingcharactersdescribedH*‚intheEXORterm155manualarerecognizedbytheeditorandacteduponN*‚Eachterminatingcharacterroutineisessentiallythesame.Theoperationis(*‚A)clearanymessageonscreenline21.+*‚B)makesurescreenprotectioniscorrect.#*‚C)doanyfilechangeifrequired.(*‚D)dotheterminatingcharacteraction.>*‚E)outputend-of-file/beginning-of-filemessageifnecessary.)*‚F)resetscreenprotectionifnecessary.@*‚G)returntothemainportionoftheeditorforthenextinput.E*‚Thesefunctionsarestackedintoanoutputbufferwhileprocessing.F*‚Theoutputbufferiswrittentothescreenattheendofprocessing.*H*„AnyterminatingcharacterisalsorecognizedduringcommandeditinginK*‚CRT-MODE.Inthatcase,theterminatingcharacteroperationisperformed&J*‚thecommandisnot.‚AcarriagereturnisthevalidterminatingcharacterL*‚forthecommands.ThiscarriagereturnappearsasasendpagecharactertoN*‚theeditorduetothescreenprotectionsetforcommandmodetoline22onlyE*‚FileupdatesinPAGE-MODEaredonebytheeditorCKREADroutine.ItM*‚determinesifthefilechangeisareplaceoraninsert&callstheroutineM*‚UPDATEtodotheactualfilechangeviaFMSINT.FilecontentscreenwritingK*‚isdoneusingWRTSCRN.ItcallsCKREAD1toread1filerecordwith1readK*‚commandtoFMSINT&write1recordatatimeusingSCROLOUTuntil20recsM*‚havebeenwrittenorendoffileisreached.Thesceenischangedtoscroll8*‚modebeforetheoutputandbacktoeditmodewhendone.*G*‚PagemodeeditingandacarriagereturnterminatingcharacterinvokesI*‚proceedI/OforthescreeninsteadofwaitI/O.Thisallowsthefileto>*‚beupdatedwhiletheuserisenteringthenextlineofdata.*F*„COMMAND-MODEroutinesareenteredthroughthecommonroutineREADCMDF*‚whichdetermineswhichcommandiswanted.‚Eachcommandroutineworks*‚essentiallythesame:0*‚A)thecommandinputlineisparsedbyPROCLIST(*‚B)thecommandisexecuted,ifpossible.A*‚C)returnstothemainportionoftheeditorforthenextinput.@*‚TheeditorcanonlybeexitedbyusingtheQUITcommand,unless1*‚someI/Oerroroccurswhichterminatesediting.G*ƒPROCLISTreadstheinputcommandlin< eandprocessesitaccordingtoaJ*‚tablesetupforeachcommand.EachoftheselistsaredocumentedintheG*‚dataareaoftheeditorlisting.Theprocessedinformatio‚returnedtoK*‚eachcommandroutineinacommonlistparameterblockcalledLISTPB.ThisK*‚para.blockcontainstheinformationneededbyeachcommand.NewcommandsI*‚maybeaddedbycreatingalistentryforeachcommandaccordingtotheK*‚rulesstatedinthedataareadocumentation,andaddinganentryintotheM*‚commandtablesCMDTBL1andCMDTBL4,andaddingthecommandroutine.CMDTBL1E*‚&CMDTBL4areusedbyREADCMDtodeterminewhichcommandwasinput.H*„AnycommandwhichneedstowritefiledatatothesceeenusesOUTFIND.G*‚OUTFINDdeterminesthescreenpositionfortheprompt,changesscreenK*‚protectiontobeabletowritetolines1-20ofthescreen,callsWRTSCRNJ*‚readandwritethefilerecords,setstheprompttothecorrectlocation,=*‚resetsscreenprotectiontocommandprotection,andreturns.H*„AnyfunctionwhichrequiresanFMSINTcall,callstheroutineFMS.ThisG*‚internalroutinedeterminesthefunction,callsFMSINT,outputserrorN*‚messagesifneeded,andreturns.SomeerrorsherecausethefiletobeclosedH*‚andtheeditorterminated.Seeeachroutineforcompleteinfoonthis.*#*„SCROLL-MODEeditinghas2levels:*‚A)COMMANDMODE*‚B)INSERTMODEA*„CommandmodeisthesameastheCRT-MODEcommandmode.‚ThesameE*‚routinesareusedandthecommandsaresetupinthesameway.EachJ*‚commandroutinecheckstoseeifinSCROLL-MODEwheneverisisnecessaryE*‚ThevariableSCROLLisnegativewheninSCROLL-MODE.SCROLL-MODEisJ*‚determinedinthemainportionoftheeditor.ScreenI/OisdifferentinJ*‚scrollmode.TheroutineSCROLLOUTisusedforscreenwritinginsteadofI*‚WRTSCRN.‚InsertmodeofthescrollmodeeditorisenteredbytheINSERTF*‚commandorwheneditingnewfilesoremptyfiles.TheinsertmodeisN*‚basicallythesameasanycommandexceptthatitreadsinputfromthescreenI*‚INSERTcallstheroutineUPDINStodofileupdates.UPDINSfixesuptheG*‚inputdataandcallsFMStodothefileupdates.TheonlyterminatingH*‚characterinscrollmodeisacarriagereturn.TheeditorchangesthisB*‚toasendlinecodetomatchthecrt-modeterminatingcharacter.**‚COMMONVARIABLESE*ƒAllvariablesaredocumentedintheeditordataarea.ThefollowingE*ƒvariablesaretheonesusedthemosttodetermineeditorstatusand-*ƒthecurrentstateofthefilebeingedited.,*ƒFILELINE(LONG)‚currentfilerecordnumber*”1stfilerecordnumberis0.*ƒMAXLINE‚(LONG)‚numberofrecordsinthefile6*ƒTOPLINE‚(LONG)‚currentfilerecordnumberatthetop*”ofthescreen(CRT-MODEonly),*ƒCURMODE‚(BYTE)‚currentmode0=commandmode *¡1=pagemode.*ƒEMTYFILE(WORD)ƒnew/oldfileflag0=oldfile*¦-1=neworemptyfile2*ƒSCROLLƒ(BYTE)ƒscrollmodeflag‚-1=inscrollmode*¨0=incrtmode**ƒCHAIN„(BYTE)ƒchainflag‚-1=inchainmode*¢0=notinchainmode PAGE:*‚EDITORSUBROUTINES‚LISTEDINORDEROFLISTINGAPPEARANCE*–'FOR'CODE:C=CRT-MODE*¡S=SCROLL-MODE* *SUBROUTINE*ƒNAME‡FORƒDESCRIPTIOND*----------„---ƒ----------------------------------------------------+*”THEFOLLOWINGSUBROUTINESAREINCRTE1.SA1*MESSOUT†CS„outputscreenmessages-noneditmode/*CRTMODE†C…determineoperationmode&gothere5*SCROLMOD†S„determineoperationmode&gotoREADCMD2*UPAROW‡C…uparrowkey-updatefileifneeded,move'*”cursorup1linewithpagewraparound0*TESTOLD†C…determineifFMSINTcommandistobe*”INSERTorREPLACE0*TESOLD1†C…determineifFMSINTcommandistobe*”INSERTorREPLACE4*DNAROW‡C…downarrowkey-updatefileifneeded,move**”cursordouwn1linewithpagewraparound3*HOME‰C…homethecursorkey-updatefileifneeded,*”putcursorinhomeposition5*FKEY1ˆC…functionkey1-updatefileifneeded,change*”modepage<>command5*FKEY3ˆC…functionkey3-updatefileifneeded,scroll!*”scre= enforward1page(20lines)5*FKEY4ˆC…functionkey4-updatefileifneeded,scroll*”screenbackward1page5*FKEY5ˆC…functionkey5-updatefileifneeded,scroll*”screenforward1line5*FKEY6ˆC…functionkey6-updatefileifneeded,scroll*”screenbackward1line<*FKEY11‡C…functionkey11-updatefileifneed,setatabstop*”inthecurrentcorsorcolumn<*FKEY12‡C…functionkey12-updatefileifneeded,deleteatab#*”stopinthecurrentcursorcolumn7*INSLIN‡C…insertlinekey-updatefileifneeded,insert*”ablanklinetothefile6*DELINE‡C…deletelinekey-deletealinefromthefile?*FKEYSTUP…C…loadoutputbufferaddress,buildtheclearline21/*”message,buildpagemodeprotectionifneeded,*”updatefileifneeded%*SETPP3‡C…buildpagemodeprotection(*SETCP3‡C…buildcommandmodeprotection%*CLRMSG‡C…buildclearline21message=*EOFMSG3†C…buildeof/bofmessageifneeded,repositioncursor*”ifmovedbeyondfile1*DOOUTˆC…doscreenoutputfromtheoutputbuffer4*PAGE‰C…carriagereturnkeywhenonscreenline20-*”usesCRTLScode.3*CRTLSˆC…carrigereturnkey-updatefileifneeded.9*”Ifeditingoldfile,sendblanklinetoscreenandfile.=*UPDATE‡C…putblankstoendofscreenrecordandcallFMSINT*”todothefileupdate6*CRTN‰C…proceedI/Ocompletion.usedbycrt-pagemode*”PAGEandCRTLSroutines.:*CKREAD‡C…updatefilepointersandcallUPDATEtodofile*”change*CKREAD1†C…readfilerecords9*BLDCRT‡C…buildeditmodeoutputbufferfromfilerecord7*WRTSCRN†C…writescreen-read20filerecordsandwrite*”themtothescreen3*HOMECUR†C…homecursor-putcursorinhomeposition5*SEND1ˆC…sendone-sendany1bytecodetothescreen.*FIXSFCR†C…fixscreenforcarriagereturnkey4*FMSŠCS„setupFMSINTpacket,callFMSINT,andhandle*”anyerrorreturns4*SETNMˆC…savetheeditfilenameforscreendisplay+*SETPROP†C…setpagemodescreenprotection.*SETPROC†C…setcommandmodescreenprotection8*PUTP‰C…positionprompttocorrectscreenline-column12*CLRP‰C…restorevirtualscreentocompletescreen**CLRCOL1†C…clearscreencolumn1-alllines6*WRTMESS†CS„writemessage-ifincrt-modemessagegoes.*”toscreenline21,inscrollmodejustoutput<*GETERR‡CS„geterror-getD0errorcodeandconverttoascii<*READCMD†CS„outputcommandlinetoscreen,determinecommand*”andgothere@*CHANGE‡CS„changecommand-findastringandchangetonewvalue7*FIND‰CS„findcommand-findastringorpositioneditor"*QUIT‰CS„quitcommand-exiteditor<*PROCLIST…CS„processlist-processthelistforeachcommand-*”fromtheinputcommandbufferandbuildits*”parameterblock<*PROCSND†CS„processstringwithnodelimiter-putthestring,*”addressesintothecommandparameterblock9*PROCSWD†CS„processstringwithdelimiter-putthestring,*”addressesintothecommandparameterblock9*PROCHAR†CS„processcharacter-putthecharacterintothe*”commandparameterblock:*PROCNDN†CS„processnumberdashnumber-findthe2numbers0*”inthecommandinputbuffer,converttohex,and%*”saveinthecommandparameterblock>*PROCNT‡CS„findthecountinthecommandinputbuffer,convert+*”tohex,saveintocommandparameterblock;*PROCNC‡CS„processnumbercommanumber-findthen,ninthe.*”commandinputbuffer,converttohexandsave *”inthecommandparameterblock>*PROCFN‡CS„processfilename-processthefilenamespecifiedin.*”thecommandinputbuffer,putfullyqualified-*”filenametoFMSFILESandaddressesintothe*”commandparameterblock<*SETFLAG1…CS„setflag1-settheflagifcommandlistsaysto>*CHKREQDF…CS„checkrequiredfield-seeifafieldnotfoundin&*”thecommandinputbufferisrequired<*GETNEXTC…CS„getnextcharacterinthecommandinputbuffer>*FINDNXTC…CS„findthenextnon-blankcharacterinthecommand*”inputbuffer4*UPDLPBP†CS„updatethelistparameterblockpointer%*CVTASCBI…CS„convertasciitobinary?*SAVBINBR…CS„savebinarynumberinthecommandparameterblock5*GETCMD‡CS„getcommandfrom= thecommandinputbuffer;*GETVRˆCS„getverticalrangesfromcommandparameterblock=*GETHRˆCS„gethorizontalrangesfromcommandparameterblockB*DOCHGˆCS„dotheactualchangetothefilerecord(changecommand)1*CHCNTˆCS„seeifcountforchangecommandisALL9*CKHR‰CS„seeiffoundstringiswithinhorizontalranges7*DOSRCH‡CS„setupFMSINTpacketforsearchcommandand*”parseerrorsreturned>*MULFIND†CS„outputfoundrecordtoscreenforfindandchange;*OUTFIND†CS„output20linestoscreencontainingthefound-*”record.ifscrollmodejustoutput1record+*”THEFOLLOWINGSUBROUTINESAREINCRTE2.SA1*RANGEˆCS„rangecommand-establistdefaultranges4*DELETE‡CS„deletecommand-deletedatafromthefileA*EXTEND‡CS„extendcommand-insertdataattheendoffilerecords>*ADUPLCT†CS„duplicatewithappendcommand-copyrequesteddata/*”intothextractbuffer,appendittoanyother*”dataintheextractbuffer:*DUPLCT‡CS„duplicatecommand-copyrequesteddataintothe1*”xtractbufferafterdeletingtheextractbuffer>*MERGEˆCS„mergecommand-mergeanexistingfileintothisfile;*AMOVEˆCS„movewithappendcommand-copytherequesteddata5*”intotheextractbuffer,appendittoanyotherdata1*”intheextractbuffer.Deletethedatafromthe*”currentposition.7*MOVE‰CS„movecommand-copytherequesteddataintothe2*”xtractbufferafterdeletingtheextractbuffer."*”Deletefromthecurrentlocation7*PRINTˆCS„printcommand-printdataonthelineprinter5*SAVE‰CS„savecommand-saveselfortoanewfilename=*XTRACT‡CS„xtractcommand-movedatainxtractbuffertofile3*INSERTˆS„insertcommand-insertdataintothefile/*LISTŠS„listcommand-listdataattheterminal>*VERIFYˆS„verifycommand-displayfilechangesattheterminal7*LINECˆCS„linecommand-outputcurrentfilelinenumber*DOWN‰CS„movethecusordown*UP‹CS„movethecusorup'*TABŠCS„tabcommand-setspecifiedtabs0*DTABŠS„deltetabcommand-deletespecifiedtabs+*STABŠS„settabcommand-setspecifiedtabs2*COLMŠS„columncommand-outputthecolumntemplate:*CKRANG‡CS„seeifusingdefaultrangesfromrangecommand%*DODELˆCS„dothedeletefilerecords!*BREAKˆCS„handlebreakcondition2*BRKSRˆCS„breakserviceroutineforthebreakASQ*DATAOR‡CS„handledataoverrun=*CKVPTRS†CS„checkforvalidpointersafterabreakcondition>*UPDPTW‡CS„updatepointersafterabreakandwritethescreen0*SCROLOUT†S„output1filerecordinscrollmode-*SCROLRD‡S„read1filerecord,inscrollmode>*UPDINSˆS„modeinsertrecordsuitableforinsertingintofile>*SETABS‡CS„settabs-setthetabsspecifedintheoptionfield,*CLRTABS†C…clearanysettabsonthescreen/*DOTABS‡C…dotabs-doactualscreentabsetting$*CRTINˆCS„dotheactualscreenread%*CRTOUT‡C…dotheactualscreenwrite *CNVTHA‡CS„converthextoascii**”THEFOLLOWINGSUBROUTINEISINFMSINT.SA"*FMSINT‡CS„doallactualfileI/O/*”THEFOLLOWINGSUBROUTINESARELINKEDINTOTHE.*”EDITORFROMUTILIB.RO.THESOURCEISPAR.SA,*”EDT.SA,ANDCOD.SA;*PARSEˆCS„returnfieldaddressesoffilenamescommandline.*EDITFILE…CS„buildafilenameparameterblock PAGEO*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~**ˆMESSAGENUMBERALLOCATION*ˆ00000000-000002FF‹UTILITIES(*ˆ00000300-000004FF‹SESSIONMANAGEMENT*ˆ00000500-000006FF‹SYMBUG*ˆ00000700-000008FF‹BASICM$*ˆ00001000-00002FFF‹PASCALRUNTIME*ˆ00003000-000035FF‹FORTRAN$*ˆ00008000-0000FFFF‹USERGENERATED/*ˆ00010000-FFFFFFFF‹VERSADOSOPERATINGSYSTEM*O*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~O*------------------------------------------------------------------------------*–ERRORMESSAGELINEFORMATO*------------------------------------------------------------------------------*ˆCOLUMNS„CONTENT+*1…*TREATSREMAINDEROFLINEASACOMMENT(*Š1-8…K> EYVALUEOFERRORMESSAGEINHEX*9…SPACEDELIMITER5*‰10-89…ERRORMESSAGETEXTANDSUBSTITUTIONSENTINELSO*------------------------------------------------------------------------------*•ERRORCODEKEYVALUEFORMAT:*‹BITS„INTERPRETATION(ofregisterD0followingtrapcall)*Š0-15…ERRORSTATUSCODE*‰16-26…DIRECTIVENUMBER3*‰27-30…TRAPNUMBER‚(0fornon-traprelatederrors)1*Œ31…RESERVED(Forinternalerrorclassification)**˜BITPOSITIONS*A*3322ƒ2222ƒ2222ƒ1111ƒ1111ƒ1100ƒ0000ƒ0000A*1098ƒ7654ƒ3210ƒ9876ƒ5432ƒ1098ƒ7654ƒ3210*A*XXXXƒXXXXƒXXXXƒXXXXƒXXXXƒXXXXƒXXXXƒXXXX*O*------------------------------------------------------------------------------0*ŽSUBSTITUTIONSENTINELFORMATIS\Soo[ll][kkkk]'*„Where\…IstherequiredSentinelFlag0*ŠS…IsoneoftheSentinelCodesexplainedbelow6*Šoo„IsthedecimaloffsetfromregA0tobeconverted2*’andinsertedatthispointintheerrormessage.,*’A0normallypointsatanFHSorIOSblock.3*Šll„IsalengthvaluerequiredonlyforSentinelC2*Škkkk‚IsakeyvaluerequiredonlyforSentinelKO*------------------------------------------------------------------------------µ.¾+Æ+Î4Ö,Þ(æ(î*ö%þ!#$#(&&./6.>?F:N1V(^(fn&v#~*†!Ž,*ŽSUBSTITUTIONSENTINELCODEINTERPRETATIONS;*‚\Boo„Convert1byteatoffsetoofromA0toDecimalAscii*‚\Woo‡"„2bytes†"‡"‹"*‚\Loo‡"„4ƒ"ˆ"‡"‹"*‚\Xoo‡"„1byte‡"‡"‰HexAscii*‚\Yoo‡"„2bytes†"‡"‹"*‚\Zoo‡"„4ƒ"ˆ"‡"‹"-*‚\Cooll‚Copyƒllbytes†"‡"‰Stringlength=ll5*‚\Too„Translatecode‡"‡"‰Asciiprosefromthisfile.2*”ErrorMessage#ttoocccccontainstheprosewhere+*£ttƒ=originaltrapcode+trap#4(bit29)*£ooƒ=offsetfromA0ofcode%*£cccc=codevaluetobeinterpreted9*‚\Aoo„ConvertƒregisterA0toHexAscii(ooisalways00)D*‚\Ioo„Copyƒ??bytesatoffset0fromTextPlug#oountilanillegal&*”Asciichar{FF}flagsendofstring.I*‚\Kkkkk‚Copy‚allofErrorMessage#0000kkkkexpandinganyofitembedded:*”sentinelsatthispointbeforecontinuingtheinterpret-9*”ationofthismessage.‚CRLFissuedautomaticallybefore *”theinsertionofmessagekkkk.*J*‚\Doo„Willeleminatethestandarderrormessagetextoftaskname,sessionA*Šnumber,userkeyvalue,errororiginator,andthevariablemessage6*Šsepartor(**)fromtheerrormessagetobedisplayedO*------------------------------------------------------------------------------F*„TYPICALPROSETOCAUSEANERRORMESSAGEFROMTHISFILETOBEPRINTED*‹...4*‹LEA‡IOSBLK,A0†WhereIOSBLKisusuallyaFHSorIOS#*‹TRAP†#nWherenisusually2or31*‹BEQ‡CONT‹WHERECONTISLABELFORGOODTRAPCALL,*‹MOVEM.LƒD0/A0,ERRPBLK‚SaveregsinERRPBLK5*‹LEA‡ERRPBLK,A0…WhereERRPBLKisintheformatbelow,*‹MOVE.L„#2,D0ŠErrorhandlerisdirective#2#*‹TRAP†#4InvokestheErrorhandler*‹...6*‚ERRPBLK‚DC.L†0ŽUSERREGD0‚CONTAINSERRMSGKEYVALUE6*‚ERRPBA0‚DC.L†0ŽUSERREGA0‚POINTSATI/OCONTROLBLK)*‚ERRPOPT‚DC.B†0ŽERROROPTIONSFUTUREUSE+*‚ERRPLDF‚DC.B†0ŽUSERLDFLUN‚LUNFORSCREEN*‚ERRPQUY‚DC.B†0ŽFUTUREUSE-*‚ERRPCDF‚DC.B†0ŽUSERCDFLUN‚LUNFORKEYBOARD2*‚ERRPLUGBDC.L†0ŽBEGINNINGOFUSERTEXTPLUGPOOL,*‚ERRPLUGEDC.L†0ŽENDOFUSERTEXTPLUGPOOLL*„ThisplugpoolmaycontainmultiplestringsoftextdelimitedbyHexFF's.J*„Maximumpoollengthis96bytes.‚Sentinels\I01,\I02....etc.causetheJ*„deblockedtexttobeinsertedintothebasicerrormessageformat.‚PlugsL*„arenumberedbeginningwithoneso\I03willaccessthetextfollowingtheJ*„secondFFdelimiter.‚ThisplugcapabilityprovidesthecallerwithawayH*„toincludevariablemessagecontentfromasourceexternaltotheparm!*„blockaddressedbyregisterA0.O*---------------> ---------------------------------------------------------------F*„TheutilityEMFGENconvertstheleadingAsciihexnumbertoa4byteD*„binarykeyvalueintheprocessofcreatingtheindexedsequential=*„fileERRORMSY.SYusedbytheTrap#4ERRORMESSAGEHANDLER.)*‹NOTE:ERRORMESSAGE00000000ISANULL7*’ANDCANBEUSEDINCONJUNCTIONWITHERRPLUGSTOPRINT,*’ONLYTHEMESSAGECONTAINEDINTHEPLUGPOOL:*’THISMERELYRELIEVESTHECALLERFROMDEFININGIOSBLOCKSO*------------------------------------------------------------------------------*2*ˆERRORMSGFILEGENERATIONUTILITYEMFGENMESSAGES*7*ˆTHESEMESSAGESMUSTBETHEFIRSTMESSAGESINTHEFILE*D000002FE KEY VALUE \I01 WILL NOT BE ADDED TO FILE ** INPUT ERROR\D00I000002FF KEY VALUE \I01 ERROR MESSAGE ADDED BUT TRUNCATED TO 84 BYTES\D00*O*------------------------------------------------------------------------------*O*------------------------------------------------------------------------------3*ˆKEYVALUESMUSTBEHEX--UPPERLIMITIS000000FF*00000000 \I01\D00***"0000000C CMD=\T00 OPT=\T02 LU=\B0500000000D CMD=\T00 OPT=\T02 LU=\B05 DEVICE=\C060490000000E CMD=\T00 OPT=\T02 LU=\B05 PSN=\Z08 DEVICE=\C0604.0000000F FILE=\C0604:\W10.\C1208.\C2008.\C2802+00000010 CMD=\T00 OPT=\T02 LU=\B05 PSN=\Z36100000011 USE DEFAULT VOLUME = \C0804:\W14.\C1608.00000012 USER NUMBER = \W3400000013 USER TASK = \C240400000014 SESSION = \C040400000015 TERMINAL = \C2804(00000016TASK=\C0004,‚SESSION=\C0404&00000017TASK=\C0004,‚SESSION=\L04%00000018 --------------------> BREAK!!00000019 OPTION(S) SET = \I01\D00O*------------------------------------------------------------------------------**ˆNON-TRAPRELATEDMESSAGES***’REFERENCEIOE.SAFORAPPROPRIATEEQUATES*00000100 INVALID ENTRY,00000101 SUBSTITUTION CAUSED BUFFER OVERFLOW00000102 ARGUMENT NOT FOUND00000103 INVALID OPTION00000104 INSUFFICIENT MEMORY00000105 OPTION CONFLICT"00000106 COMMAND LINE SYNTAX ERROR(00000107 INVALID DEVICE NAME FOR REQUESTO*------------------------------------------------------------------------------*"*ˆUSERSESSIONMANAGEMENTMESSAGES*200000300 \D00\I01 START SESSION \C0404 USER = \W42000000301 \D00\I01 END SESSION \C0404 USER = \W4200000302 \D00\K0018H00000303 SYSTEM VOLUME = \C0004:\K0011\K0012\K0013\K0014\K0015\K0019\D00!00000304 OPTION(S) SET = \I01\D00 00000305 \D0000000306 \D00\I01"00000307 \D00\C0004 \C1204: LOADED 00000308 \D00\C0004 \L12: LOADED#00000309 \D00\C0004 \C0404: STOPPED!0000030A \D00\C0004 \L04: STOPPED%0000030B \D00\C0004 \C0404: CONTINUED#0000030C \D00\C0004 \L04: CONTINUED&0000030D \D00\C0004 \C0404: TERMINATED$0000030E \D00\C0004 \L04: TERMINATED#0000030F \D00\C0004 \C0404: ABORTED!00000310 \D00\C0004 \L04: ABORTED'00000311 \D00LOGON REJECTED, LOGGED OFF000000312 \D00WARNING: NO."<" NOT EQUAL TO NO.">"J00000313 \D00------>CAUTION: YOU WILL CHANGE PASSWORD FOR USER = 0 <------00000314 \D00ER: NOT USER = 0+00000315 \D00ER: "\C0008" COMMAND NOT FOUND*00000316 \D00ER: "\C0604" VOLUME NOT FOUND200000317 \D00ER: NO. ARGUMENTS EXCEEDS STACK SPACE00000318 \D00ER: TASK NOT FOUND"00000319 \D00ER: INVALID TASK NAME(0000031A \D00ER: LUN \C0001 NOT ASSIGNED50000031B \D00ER: CANNOT BE CONTINUED, MUST BE STARTED:0000031C \D00ER: MUST BE STARTED INDIVIDUALLY BY TASK NAME80000031D \D00ER: NESTING LEVEL EXCEEDS NO. LUNS PER TASKC0000031E \D00ER: NO ROOM IN RETURN STACK SPACE (TOO MANY ARGUMENTS)#0000031F \D00ER: DEVICE NOT ALLOWED$00000320 \D00ER: "IF" LEVEL EXCEEDED(00000321 \D00ER: =/ENDIF's EXCEED =/IF's%00000322 \D00ER: CHAIN COMMAND SYNTAX$00000323 \D00RX=\Y00 RA=\Y02 RD=\Y04000000324 \D00ER: BATCH NOT ALLOWED IN BATCH MODE;00000325 \D00ER: LOGON TERMINAL NOT AVAILABLE IN BATCH MODE%00000326 \D00ER: BATCH SESSION NUMBER$00000327 \D00BATCH SESSION NOT FOUND&00000328 \D00ER: USER NUMBER NOT FOUND*00000329 \D00E? R: NOT ALLOWED IN BATCH MODE0000032A \D00\C0404: QUEUED0000032B \D00\C0404: RUNNING,0000032C \D00\C0404: DONE STATUS = \Y02:\T02!0000032D \D00ER: BATCH QUEUE FULL'0000032E \D00BATCH JOB \C0404 CANCELLED!0000032F \D00ER: RECORD NOT FOUND#00000330 \D00ER: USER NO. NOT FOUND!00000331 \D00ER: INVALID USER NO.&00000332 \D00ER: MUST BE IN CHAIN MODE#00000333 \D00ER: VALUE SIZE TOO BIG(00000334 \D00ER: INVALID FILE DESCRIPTOR<00000335 \D00ER: NO CHANGE TO VOLUME,USER NUMBER, OR CATALOG+00000336 \D00ER: DEFAULT VOLUME NOT CHANGED,00000337 \D00ER: OPTION LETTERS ARE A-O ONLY:00000338 \D00ER: NOT ALLOWED ON LINE, SUBMIT IN BATCH MODE"00000339 \D00ER: INVALID LU NUMBER$0000033A \D00ER: FILE/DEVICE MISSING"0000033B \D00ER: ACCESS PERMISSION 0000033C \D00ER: VALUES REVERSED?0000033D \D00ER: YOU FAILED IN YOUR ATTEMPT TO CRASH THE SYSTEM0000033E \D00ER: COMMAND SYNTAX$0000033F \D00ER: FIELD SIZE EXCEEDED&00000340 \D00ER: FILE WAS NOT ASSIGNED+00000341 \D00ER: NUMERICAL CONVERSION ERRORO*------------------------------------------------------------------------------&*†STARTOFBASICMERRORMESSAGES‚(MIL)O*------------------------------------------------------------------------------* Basic-m syntax error messagesO*------------------------------------------------------------------------------>00000701 Invalid logical expression in an IF or WHEN statement300000702 Missing THEN in an IF,ON or WHEN statement900000703 THEN must be followed by an executable statement.00000704 Incomplete bit selector (missing "]")C00000705 Illegal procedure name or bit selector not followed by "="00000706 Equal sign expected!00000707 Illegal branch statement800000708 GOTO or GOSUB not followed by valid line number700000709 CALL is not followed by a valid procedure name@0000070A Missing ")" in an argument list, selector or array size&0000070B Illegal arithmetic expression00000070C Missing ")" in an arithmetic expression#0000070D Illegal literal expression=0000070E Missing or invalid argument list in a POKE statement*0000070F Invalid unsigned integer constant00000710 Invalid exponent700000711 Filename must be a string variable or constant100000712 Invalid variable name in a DIM statement=00000713 Illegal or unspecified array size in a DIM statement>00000714 Illegal ADDRESS clause in a DIM or EXTERNAL statement=00000715 Illegal variable name in a BYTE or INTEGER statement?00000716 Missing address specification in an EXTERNAL statement-00000717 Illegal operands in a READ statement-00000718 Illegal operands in a DATA statement:00000719 Missing "#" in an OPEN, CLOSE or REWIND statement+0000071A Missing comma in an OPEN statement:0000071B Undefined data transfer mode in an OPEN statement0000071C Illegal file access30000071D "=" required in a LINE or DIGITS statement60000071E Illegal index name in a FOR or NEXT statement50000071F Index not followed by "=" in a FOR statement&00000720 Missing TO in a FOR statement&00000721 Invalid NEVER or ON statement;00000722 Invalid line number list in an ON...GOTO statement.00000723 IMAGE not followed by a format string+00000724 Illegal variable or procedure name300000725 Missing parethesis in a logical expression/00000726 Invalid line number in an EOF function$00000727 Invalid relational operator;00000728 Invalid or missing separator in an INPUT statement00000729 Invalid key70000072A No argumant list following the TAB keyword, or@0000072B Invalid operand in a MAT READ, INPUT or PRINT statement<0000072C Missing comma in a MAT INPUT or MAT PRINT statement50000072D Missing "=" in a matrix assignment statement>0000072E Expression not enclosed in [ ] in a MAT SET statement;0000072F Missing argumant in a MAT INV or MAT TRN statement"00000730 Illegal character scanned00000731 Illegal statement00000732 Statement too long:00000733 Missing argument list following a string function00000734 Invalid line number>00000735 Missing comma in argumant list of a built-in function=00000736 Missing "? (" for argument list in a built-in function00000737 Missing separator100000738 Invalid key or logical unit number (LUN).00000739 String not allowed when LUN indicated%0000073A Invalid number of dimensionsK0000073B USING not followed by line number,format string or string variable-0000073C Unrecognized characters in statementB0000073D Data Block size expected after comma in an OPEN statement<0000073E Nesting of parenthesis forbidden in a format string/0000073F Access permission expected after comma00000740 Unbalanced parenthesis00000741 "]" expected00000742 Unexpected end of line!00000743 String constant expected=00000744 FAB (File Access Block) size is expected after comma(00000745 Illegal variable or string name=00000746 Illegal character scanned in beginning of expression(00000747 Operator expected in expression'00000748 Operand expected in expression00000749 Meaningless combinatonI0000074A Illegal number of dimensions in assigned variable or "=" missing"0000074B Numeric constant expected!0000074C String variable expected:0000074D Invalid variable name or invalid numeric constant#0000074E Missing TO or SUB after GO?0000074F TAB is not allowed in PRINT statement if USING appearsJ00000750 Illegal variable or procedure name,or string variable not allowed00000751 Unbalanced bracketsG00000752 Logical or relational operator not allowed in arithmetic expr.<00000753 More than one relational operator in a logical term800000754 GOTO or GO TO are not allowed in WHEN statement<00000755 ON ERROR must not appear in an IF or WHEN statement00000756 Too many dimensions000000757 Expected variable name or constant name=00000758 String variable not allowed in arithmetic expression-00000759 Missing arguments in INPUT statement>0000075A Expected option T or D after comma in CLOSE statement,0000075B Illegal entity in string expression0000075C Missing '('0000075D Missing ')'J0000075E String matrix and arithmetic matrix not allowed in same statement<0000075F(RECORDFREE)„ImpossibletoupdateacontigousfileE00000760illegaloperationinstringMAT‚(onlyconcatenationallowed)E00000761 ZER/CON/IDN/SET/TRN/INV can operate on numeric matrices only000000762 NEXT not allowed as secondary statement100000763 value in brackets of SET must be numericA00000764 Illegal or missing line number in beginning of statement00000765 Invalid key after AT.00000766 Invalid format string in function STR700000767 Expected I,O,U after '%' in mode of OPEN file.D00000768 Expected mode of file (%I,%U,%O,%OV,%UV) in OPEN statement.900000769 GOTO not allowed in WHEN and ON INTR statements.,0000076A TRACE must be followed by ON or OFF50000076B missing '/' before the write protection.\D00F0000076C invalid or missing integer constant for write protection.\D00!0000076D matrix name missing.\D00-0000076E missing '=' after key-word RECL.\D00-0000076F missing '=' after key-word KEYL.\D00O*------------------------------------------------------------------------------ * Basic-m general error messagesO*------------------------------------------------------------------------------&00000770 Error \Z00 in trap 4 call\D0000000771 Rms error \Z00 \D00 00000772 Command line error \D0000000773 Bad options \D00"00000774 No such option \C0001\D0000000775 Bad z option\D0000000776 No '=' after z\D0000000777 '=' not allowed\D0000000778 No input file\D00&00000779 \Z00 edit file name error\D00 0000077A \Z00 access problem\D00.0000077B Overflow! request bigger z option\D00/0000077C Waiting for \L00 k-bytes of memory\D00*0000077D Overflow! resequence not done\D00"0000077E bad function no. \L00\D000000077F file already exits\D00"00000780 symbol table overflow\D00/00000781 warning! updated file is not saved\D00700000782 Can not run, compilation errors in program\D00J00000783 Can not assign logical unit 5 to user program, run terminated\D00J00000784 Can not assign logical unit 6 to user program, run terminated\D00F00@ 000785 Can not load run-time lo, error code \A00, run terminated\D00'00000786 Illegal interupt vector number400000787 GOTO is not allowed in interrupt processing100000788 LOGEN - unable to open \P temporary file500000789 LOGEN - unable to assign run-time library LO50000078A LOGEN - error in run-time library Lo reading>0000078B LOGEN - unable to read the \P temporary file, rc = \N10000078C LOGEN - run-time routine \P not in index?0000078D LOGEN - user routine \P was not added to library indexF0000078E LOGEN - unable to write a record to a temporary file, rc = \N40000078F LOGEN - run-time library index format error500000790 WHEN is used without D option - WHEN ignored700000791 TRACE is used without D option - TRACE ignoredN00000792 LOGEN - unable to write last record on the \P temporary file, rc = \N@00000793LOGEN-unabletorewindthe‚\Ptemporaryfile,rc=\NO00000794 LOGEN - attempt to write \N bytes to LO. Too big (more then one block),00000795 RUN - unable to start user task\D00$00000796 illegal logical unit number00000797 illegal FAB size00000798 illegal block size00000799 illegal record length50000079A conflict between formal and actual parameter,0000079B a subscript can't be of string typeB0000079C a logical primary must be either a relation or 'EOF(lun)'$0000079D missing '[' in bit-selectorJ0000079E bit selector is allowed only for simple-variable or array-elementI0000079F left side of assignment must be simple variable or array elementA000007A0‚INTERNAL:"bin_code"-Illegaloperationcodepassed:\NA000007A1‚INTERNAL:"bin_tert"-Illegaloperationcodepassed:\NL000007A2‚INTERNAL:"nextwork"-Toomanywork-registersneededby"bin_code"B000007A3‚INTERNAL:"bin_special"-Illegalcommand-codepassed:\NG000007A4‚INTERNAL:"bnflsmpl"-Illegalvar-kindinsimple-varnode:\NG000007A5‚INTERNAL:"bnflarray"-Illegalvar-kindinarray-varnode:\NM000007A6‚INTERNAL:"bnflopnd/bnflrutn"-Illegaloperandnode-typepassed:\NH000007A7‚Codesizeisgreaterthan32KBwhichconflictswith'-B'optionL000007A8‚INTERNAL:"bincre"-Illegaloperandaddress-mode(MDxxx)found:\NN000007A9‚INTERNAL:"binpseud"-Illegaloperandaddress-mode(MDxxx)found:\NE000007AA‚INTERNAL:"binwrt"-Illegalreacod-code(WR_xxx)passed:\N;000007AB‚INTERNAL:"binclose"-Writeonro-filefailed:\PG000007AC‚STRING-CONSTANTSandFORMATSsectionsizeisgreaterthat32KB5000007AD‚INTERNAL:"binopen"-Can'topenro-file:\PC000007AE‚INTERNAL:"bntmopen"-Can'tre-opentemporaryro-file:\PD000007AF‚INTERNAL:"bntmread"-Readoftemporaryro-filefailed:\P;000007B0‚INTERNAL:"bnwrbyte"-Writeonro-filefailed:\P@000007B1‚INTERNAL:"bncaddoff"-Illegaladdressmodepassed:\N000007B2‚badassignmentE000007B3‚INTERNAL:"bin_cmnd"-Widthofmachine-commandisundefinedG000007B4‚digitscannotbeseparatedby''inIMAGEstatement(use'!')&000007B5‚quotationmark('"')expected(000007B6\D00‚CLOSEofinputfilefailed)000007B7\D00‚Accessofinputfilefailed5000007B8\D00‚Failedtocheckexistenceofinputfile-000007B9\D00‚WARNING-inputfilenotfound!.000007BA\D00‚ALLOCATIONofE-codefilefailed"000007BB\D00‚InputfileNOTFOUND6000007BC\D00‚Linenumbernotinorderafterline\L00?000007BD same matrix in both sides of '=' in MAT MULTIPLICATION2000007BE 3-dimensional array in MAT MULTIPLICATION:000007BF INTERNAL: "Code_Gen" - Unrecognizable i-operation"000007C0\D00‚Illegalcommandline(000007C1\D00‚Illegalinputfile-name(s)&000007C2\D00‚AllocationofASQfailed#000007C3\D00‚Initializationfailed@000007C4\D00‚OpenofE-codefile,afterinitialization,failed.N000007C5\D00‚WARNING:secondfile-namewithR-optionisillegal.Nameignored0000007C6\D00‚WARNING:Listingfilenameignored1000007C7‚Illegalparametersforbuilt-infunction000007C8‚Illegalexpression000007C9000007CA=000007CB\D00‚UnabletocloseE-CODEfilebeforeLISTorSAVE<000007CC\D00‚Unabletoopen@ E-CODEfilebeforeLISTorSAVEB000007CD\D00‚UnabletoassignE-CODEfilebackafterLISTorSAVE9000007CE\D00‚UnabletocloseEMHFILEafterLISTorSAVEG000007CF\D00‚Unabletogetasyntax-errormessagetextinLISTorSAVE5000007D0\D00‚UnabletooutputalineinLISTorSAVE<000007D1\D00‚UnabletocloseE-CODEfileafterLISTorSAVEO000007D2 \D00Unable to close output file after LIST or SAVE, file may be damage1000007D3\D00‚Unabletodeletetherequestedline:000007D4\D00‚UnabletocloseEMHfileafteraddingalineN000007D5\D00‚Unabletogetasyntax-errormessagetextafteranewlineadded9000007D6\D00‚UnabletocloseE-CODEfileforDELcommand4000007D7\D00‚UnabletodeletealineinDELcommand8000007D8\D00‚UnabletoopenE-CODEfileforDELcommand9000007D9\D00‚UnabletopositionE-CODEfilebeforeRESEQ5000007DA\D00‚UnabletocloseE-CODEfilebeforRESEQ4000007DB\D00‚UnabletoassignE-CODEfileforRESEQ.000007DC\D00‚UnabletoopenRESEQoutputfile7000007DD\D00‚UnabletocloseoldE-CODEfileforRESEQM000007DE\D00‚UnabletowritelastrecordtonewE-CODEfileinRESEQcommand?000007DF\D00‚UnabletodeleteoldE-CODEfileinRESEQcommand?000007E0\D00‚UnabletorenamenewE-CODEfileinRESEQcommand>000007E1\D00‚UnabletoclosenewE-CODEfileinRESEQcommandA000007E2\D00‚UnabletoopencurrentE-CODEfileinRESEQcommandF000007E3\D00‚UnabletoassignthenewE-CODEfileafterRESEQcommand7000007E4\D00‚UnabletooutputalineinSYMBOLcommandI000007E5\D00‚UnabletowritelastblockofoutputfileinSYMBOLcommand;000007E6\D00‚UnabletocloseoutputfileinSYMBOLcommandM000007E7\D00‚UnabletocloseE-CODEfileafterrangecountinginDELcommandK000007E8\D00‚UnabletoassignE-CODEfiletokeyeddeletinginDELcommandJ000007E9\D00‚UnabletopositionE-CODEfileonfirstrecordtobedeletedI000007EA\D00‚UnabletopositionE-CODEfileonlastrecordtobedeleted;000007EB\D00‚UnabletocloseE-CODEfileafterDELcommand<000007EC\D00‚UnabletoassignE-CODEfileafterDELcommandJ000007ED\D00‚UnabletowriteanoutputrecordtonewE-CODEfileinRESEQ/000007EE\D00‚UnabletoopenSYMBOLoutputfile.000007EF\D00‚Unabletodisplayanoutputline)000007F0\D00‚Unabletogetaninputline:000007F1\D00‚UnabletoaddnextrecordofE-CODEtoblock3000007F2\D00‚UnabletoaddarecordtoE-CODEfile=000007F3 Missing ENDEF / nesting of DEF statements is illegal9000007F4 Expected array name - array declaration missing.B000007F5 Definition must preceed use - name in DEF is already used0000007F6 Illegal transfer into a FOR or IF block)000007F7 Reference to illegal line numberC000007F8 ELSE or ENDIF statement without cooresponding IF statement0000007F9 FOR and IF statements nested too deeply#000007FA STEP size must not be zero.000007FB Anything after a statement is illegal000007FC Illegal statement typeH000007FD LOGEN - Unable to get a segment for the generated LO, rc is \N.-000007FE Reference to non-exstent line number7000007FF type of variables missing in a LOCAL statement00000800 illegal key lengthN00000801 The argument of LOC function must be either variable or array element00000802 illegal record number!00000803 illegal number of DIGITS00000804 illegal width of LINE00000805 illegal value of TAB400000806 impossible to specify FAB to contigous file400000807 key may be specified only for indexed files300000808 bad type of argument of intrinsic function00000809 illegal expressionE0000080AillegaloperationinstringMAT‚(onlyconcatenationallowed)10000080B value in brackets of SET must be numericE0000080C ZER/CON/IDN/SET/TRN/INV can operate on numeric matrices only00000080D NEXT not allowed as secondary statement"0000080E expected integer constant0000080F overflow in number800000810 bit-operand is illegal in INPUT/READ statements'00000811 incorrect number of parametersD00000812 imposA sible to specify 'overwrite' option for contigous file:00000813 'T' option is not available - option 'T' ignored.00000814 underflow in number00000815 illegal real number600000816 conflict with prior definitions - illegal '('100000817 missing parameter list or array selectorC00000818 conflict with prior definitions - subroutine name expectedJ00000819 conflict with prior definitions - sub-program in left side of '='60000081A conflict with prior definitions - missing '('40000081B array selector not allowed in MAT statement-0000081C expected array name in MAT statementH0000081D conflict with prior definitions - DEF/EXTERNAL must precede useK0000081E specifications must be in one statement and precede any use of var@0000081F external procedure forbidden as parameter / illegal '('@00000820 parameter name appears more than once in parameter list=00000821 local name appears more than once in LOCAL statementA00000822 local variable has been previously declared as parameterK00000823 variable after ADDRESS must be an already declared simple variable;00000824 expected simple variable as index of FOR statement<00000825 illegal READ/INPUT - variable is a sub-program name600000826 missing parenthesis or variable is not simple700000827 type of variables missing in a LOCAL statementM00000828 LOCAL statement allowed only in sub-program - check statements order+00000829 illegal operator for string matrixA0000082A array declarator for variable missing in a DIM statement10000082B string length must be in the range 1-25530000082C data-type of string length must be numeric;0000082D adjusted string length must be passed as parameter0000082E missing ')'90000082F equivalence between local and global not allowed.00000830 fatal! check scanalyzer and getsynu()00000831 doublely defined00000832 too many dimensions=00000833 only dummy array can contain variables as dimensions@00000834 dimension in array declarator must be a simple variable/00000835 variable dimension must be a parameter00000836 illegal dimension)00000837 missing ')' for array declarator600000838 array declarator must be of numeric data type 00000839 procedure name expected+0000083A illegal delimitor in DEF statement90000083B expected parameter after comma in parameter list10000083C missing sub-program name or '(' after it20000083D internal error in elesize() - missing dtp80000083E internal error in elenum() - missing dimensions"0000083F internal error in space() 00000840 incorrect internal type!00000841 illegal number of commas.00000842 unary minus must have numeric operand<00000843 operand(s) of IAND/IOR/IEOR must be of integer typeH00000844 operand of INOT must be of integer type (BYTE/INTEGER/DINTEGER);00000845operandofFLOATorDFLOAT‚mustbeofintegertype/00000846operandofATNƒmustbeofintegertype500000847 operand of built-in function must be numeric'00000848 operand of RND must be numeric'00000849 operand of ABS must be numeric?0000084A parameter of LEN/ASC/TRIM/VAL/STR/CHR must be a stringA0000084B disagreement between type of actual and formal parameter,0000084C first param of MID must be a string70000084D second and third params of MID must be numeric60000084E parameter of SNGL must be of DOUBLE data-type*0000084F parameter of DBLE must be numericA00000850 parameter of ISHFT and IROT must be of integer data-type-00000851 PEEK/POKE parameters must be numeric.00000852 string notallowed as parameter of EOF/00000853 illegal operator for string expression.00000854 internal - disagreement of data-types*00000855 operands in power must be numeric200000856 operand(s) of SGN must be of integer type400000857 IDN operates only on two dimensional arrays500000858 arrays in TRN must be two dimensional arrays400000859 INV operates only on two dimensional arraysC0000085A string variable with adjusted length - must be a parameter0000085B useless MAT assignment>0000085C number of dimensions in MAT assignment A does not agree(0000085D number of dimensions must agree=0000085E INTERNAL: "Execute_Op" - undefined operand data type,0000085F unrecognized operator in MAT op MAT100000860 missing parameter in a built-in function$00000861 expecting right parenthesisB00000862 POKE is a subroutine and must not appear in an expression00000863 missing comma00000864 undecodable statementI00000865 undefined one-line-function or one-line-function reference errorK00000866 disagreement between types or number of actual and dummy arguments*00000867 internal fatal error in: "expars"#00000868 expression nested too deep00000869 expecting commaF0000086Asimplevariable‚or‚arrayelementexpectedinleftsideof'='*0000086B internal fatal error in: "sontof"-0000086C value in [] of SET - must be numericH0000086D number of dimensions in new working space must agree with array80000086E internal fatal: illegal node in Match_Convert()00000086F internal: no more buffer room available700000870 INTERNAL: "Execute_Op" - unrecognized operator?00000871 INTERNAL: "Convert" - unrecognized conversion operator?00000872 NonLOCAL specification occurs in an external procedure700000873 DATA statement occurs in an external procedure(00000874 Missing NEXT or ENDIF statement 00000875 Missing ENDEF statementB00000876 No reference to statement following RETURN, STOP, or GOTO700000877 Statement other than REM follows END statement>00000878 DEF statement not preceded by GOTO or ENDEF statementG00000879 ON ERROR or ON hardware-exception is not allowed in subroutine+0000087A EVERY is not allowed in subroutine-0000087B ON INTR is not allowed in subroutine*0000087C WHEN is not allowed in subroutine-0000087D‚ILLEGALOPTION(S)INCOMMANDLINE\P 0000087E‚CAN'TOPENLISTINGFILE:0000087F Declaration of parameter must folow DEF statement800000880\D00‚UnabletocloseE-CODEfileinNEWcommand=00000881\D00‚UnabletodeleteoldE-CODEfileinNEWcommand?00000882\D00‚UnabletoallocatenewE-CODEfileinNEWcommand=00000883\D00‚UnabletoassignnewE-CODEfileinNEWcommandO*------------------------------------------------------------------------------*ˆENDBASICMMESSAGESO*------------------------------------------------------------------------------****ˆ**TRANSLATETABLEFORNONTRAPMESSAGES*#2002A006 CANCELLED WAITING IN QUEUE(2002C001 NORMAL TERMINATION FROM RUNNING 2002C006 CANCELLED WHILE RUNNING2002C009 CANCELLED DUE TO BREAK+2002C010 ABORTED DUE TO BUS ERROR (ADDRESS).2002C011 TERMINATED DUE TO BUS ERROR (ADDRESS)*O*------------------------------------------------------------------------------**ˆFHS/IOSERRORMESSAGES*18000002 INVALID COMMAND \K000C$18000003 INVALID LOGICAL UNIT \K000C918000004 INVALID OR NONEXISTENT VOLUME \K000C VOLN=\C0604*18000005 DUPLICATE FILE NAME \K000C \K000F,18000006 FILE DESCRIPTOR ERROR \K000C \K000F)18000007 PROTECT CODE ERROR \K000C \K000F418000008 RECORD LENGTH ERROR \K000C \K000F RECL=\W34+18000009 SHARED SEGMENT ERROR \K000C \K000F31800000A INSUFFICIENT DIRECTORY SPACE \K000C \K000F.1800000B ACCESS PERMISSION ERROR \K000C \K000F01800000C INSUFFICIENT SYSTEM SPACE \K000C \K000F 1800000D ASSIGNMENT ERROR \K000C#1800000E INVALID DEVICE TYPE \K000C1800000F BUFFER OVERFLOW \K000C!18000010 INVALID TASK NAME \K000C018000011 INVALID BUFFER ADDRESS \K000C BUFF=\Z12(18000012 INVALID FILE TYPE \K000C \K000F)18000013 INTERNAL FHS ERROR \K000C \K000F,18000014 INVALID PARAM BLOCK ADDRESS A0=\A00818000015 DATA BLOCK LENGTH ERROR \K000C \K000F SIZE=\Z36+18000016 SIZE ERROR \K000C \K000F SIZE=\Z36,18000017 NONEXISTENT FILE NAME \K000C \K000F 18000018 END OF DIRECTORY \K000C118000019 KEY LENGTH ERROR \K000C \K000F SIZE=\Z3611800001A FAB LENGTH ERROR \K000C \K000F SIZE=\Z36*1800001B DEFAULT VOLUME NOT DEFINED \K000C"1800001C INVALID STATE FOR COMMAND(1800001D USER NOT OWNER OR ADMINISTRATOR&180000CD DISK SPACE FULL \K000C \K000F1180000D1 UNRECB OVERABLE DEVICE ERROR \K000C \K000F)180000D2 DATA COMPARE ERROR \K0010 \K000F+180000D3 SECTOR PROTECT ERROR \K0010 \K000F180000D4 DEVICE NOT MOUNTED'180000E1 DEVICE NOT READY \K000C \K000F"180000E2 DEVICE BUSY \K000C \K000F%180000E3 DATA CRC ERROR \K0010 \K000F-180000E4 WRITE PROTECTED DEVICE \K000C \K000F1180000E5 DELETED DATA MARK DETECTED \K0010 \K000F180000E6 TIMEOUT \K000C \K000F-180000E7 INVALID SECTOR ADDRESS \K000C \K000F%180000E8 CHECKSUM ERROR \K000C \K000F)180000E9 DISK RESTORE ERROR \K000C \K000F#180000EA DATA OVERRUN \K000C \K000F,180000EB DEVICE STATUS CHANGED \K000C \K000F0180000EC TRACK/SECTOR ID NOT FOUND \K0010 \K000F-180000ED ADDRESS MARK CRC ERROR \K0010 \K000F!180000EE SEEK ERROR \K000C \K000F!180000EF BAD SECTOR \K0010 \K000F#180000F1 CHANNEL BUSY \K000C \K000F(180000F2 CHANNEL DMA ERROR \K000C \K000F2180000F3 UNRECOVERABLE CHANNEL ERROR \K000C \K000F'180000F4 CONTROLLER ERROR \K000C \K000F1180000F5 DEVICE CONFIGURATION ERROR \K000C \K000F$180000F6 DMA BUS ERROR \K000C \K000F(180000F7 DMA MAPPING ERROR \K000C \K000F+180000F8 DMA CONTROLLER ERROR \K000C \K000F2180000F9 INDETERMINATE CHANNEL ERROR \K000C \K000FO*------------------------------------------------------------------------------)1000000C INSUFFICIENT SYSTEM SPACE \K000C 10000082 INVALID FUNCTION \K000C$10000083 INVALID LOGICAL UNIT \K000C-10000084 INVALID DATA BUFFER \K000C BUFF=\Z12.10000085 INVALID RANDOM RECORD \K000C RRN=\Z08,10000086 INVALID PARAM BLOCK ADDRESS A0=\A00"10000087 PROTECT CODE ERROR \K000C10000088 CONFIGURATION ERROR2100000C1 BUFFER OVERFLOW/RECORD SIZE TOO BIG\K000C100000C2 END OF FILE \K000C100000C3 END OF VOLUME \K000C$100000C4 INVALID OR EMPTY FAB \K000C+100000C5 INVALID TRANSFER FOR DEVICE \K000C100000C6 BREAK CONDITION \K000C!100000C7 INTERNAL IO ERROR \K000C'100000C8 FAB/DATA BLOCK CONFLICT \K000C%100000C9 RECORD DOES NOT EXIST \K000C%100000CA RECORD ALREADY EXISTS \K000C>100000CB RECORD OVERFLOW/TOO MANY RECORDS IN DATA BLOCK \K000C+100000CC KEY ERROR, FAB KEY CONFLICT \K000C100000CD DISK SPACE FULL \K000D*100000D1 UNRECOVERABLE DEVICE ERROR \K000D"100000D2 DATA COMPARE ERROR \K000E$100000D3 SECTOR PROTECT ERROR \K000E"100000D4 DEVICE NOT MOUNTED \K000D-100000D5 BEGINNING OF TAPE ENCOUNTERED \K000C2100000D7 A TAPE IS ALREADY MOUNTED ON DRIVE \K000C 100000E1 DEVICE NOT READY \K000D100000E2 DEVICE BUSY \K000D100000E3 DATA CRC ERROR \K000E&100000E4 WRITE PROTECTED DEVICE \K000D*100000E5 DELETED DATA MARK DETECTED \K000E100000E6 TIMEOUT \K000D&100000E7 INVALID SECTOR ADDRESS \K000D100000E8 CHECKSUM ERROR \K000D"100000E9 DISK RESTORE ERROR \K000D100000EA DATA OVERRUN \K000D%100000EB DEVICE STATUS CHANGED \K000D)100000EC TRACK/SECTOR ID NOT FOUND \K000E&100000ED ADDRESS MARK CRC ERROR \K000E100000EE SEEK ERROR \K000D100000EF BAD SECTOR \K000E100000F1 CHANNEL BUSY \K000D!100000F2 CHANNEL DMA ERROR \K000D3100000F3 CHANNEL UNRECOVERABLE CHANNEL ERROR \K000D 100000F4 CONTROLLER ERROR \K000D*100000F5 DEVICE CONFIGURATION ERROR \K000D100000F6 DMA BUS ERROR \K000D!100000F7 DMA MAPPING ERROR \K000D$100000F8 DMA CONTROLLER ERROR \K000D+100000F9 INDETERMINATE CHANNEL ERROR \K000D*"*ˆTRANSLATETABLEFORIOSFCTFIELD* 30000001 READ30000002 WRITE30000004 OUTPUT WITH INPUT30000008 UPDATE30000010 DELETE30000020 FORMAT30000101 POSITION30000102 REWIND30000104 TEST I/0 COMPLETE 30000108 WAIT30000110 HALT I/O30000120 BREAK*"*ˆTRANSLATETABLEFORFHSCMDFIELD*38000001 CHECKPOINT38000002 DELETE38000004 CLOSE38000008 CHANGE PROTECT CODES38000010 RENAME38000020 CHANGE ACCESS38000040 ASSIGN38000080 ALLOCATE380000C0 ALLOCATE/ASSIGN38000108 FETCH DEFAULT VOLUME38000110 CHANGE LU38000120 FETCH DEVICE MNEMONICS38000140 FETCH DIR. ENTRY38000180 RETRIEVE ATTRIBUTES38000204 DISPLAY SPOOLER QUEUE38000208 CHANGE COPIES38000210 PRINT FILE38000220 CHANGE FORMS38000240 CONTINUE SPOOLER JOB38000280 CANCEL SPOOLER JOB38008001B  SET DEFAULT VOLUME**O*------------------------------------------------------------------------------**’TRAP1RELATEDMESSAGES**.08010003 NONEXISTENT TARGET TASK (GTSEG)\K0016#08010005 SEGMENT TABLE FULL (GTSEG)'08010006 DUPLICATE SEGMENT NAME (GTSEG)008010007 REQUESTED MEMORY DOES NOT EXIST (GTSEG)$08010008 INSUFFICIENT MEMORY (GTSEG)(0801000A NON-DORMANT TARGET TASK (GTSEG))0801000B LOGICAL ADDRESS CONFLICT (GTSEG).08020003 NONEXISTENT TARGET TASK (DESEG)\K0016/08020007 NONEXISTENT SEGMENT NAME (DESEG)\K0016(0802000A NON-DORMANT TARGET TASK (DESEG)00803000B SEGMENT ERROR - TASK LINKED INCORRECTLY$08040005 SEGMENT TABLE FULL (ATTSEG)(08040006 DUPLICATE SEGMENT NAME (ATTSEG)008040007 NONEXISTENT SEGMENT NAME (ATTSEG)\K0016*0804000B LOGICAL ADDRESS CONFLICT (ATTSEG)'08060003 SOURCE TASK NOT FOUND (MOVELL),08060007 DESTINATION TASK NOT FOUND (MOVELL)108060009 USER TO SYSTEM TASK NOT ALLOWED (MOVELL)70806000B ADDRESSES DIFFERENT EVEN/ODD BOUNDARY (MOVELL)&08090003 TARGET TASK NOT FOUND (RCVSA)$080B0006 DUPLICATE TASK NAME (CRTCB)$080B0008 INSUFFICIENT MEMORY (CRTCB)*080D0003 TASK DOES NOT EXIST (START)\K0016*080D0023 TASK DOES NOT EXIST (START)\K0017!080D000A TASK NOT DORMANT (START)108100003 TARGET TASK DOES NOT EXIST (TERMT)\K0016108100023 TARGET TASK DOES NOT EXIST (TERMT)\K0017308100006 TARGET TASK ALREADY IN TERMINATION (TERMT):08100009 USER TASK CAN NOT TERMT SYSTEM TASK OR SELF\K0016308170003 TARGET TASK DOES NOT EXIST (TSKATTR)\K0016308170023 TARGET TASK DOES NOT EXIST (TSKATTR)\K0017,0817000A TASK IS TERMINATING (TSKATTR)\K0016008190003 TARGET TASK DOES NOT EXIST (STOP)\K0016008190023 TARGET TASK DOES NOT EXIST (STOP)\K0017$08190006 TARGET TASK ALREADY STOPPED108190009 USER TASK CAN NOT STOP SYSTEM TASK\K0016**O*------------------------------------------------------------------------------**ˆTRAP4RELATEDMESSAGES*#20000001 UNDEFINED DIRECTIVE NUMBER?20000012 LOAD SEGMENT LOGICAL ADDRESS EXCEEDS SEGMENT BOUNDRIES+20000013 FILE REFERENCED IS NOT A LOAD FILE****O*------------------------------------------------------------------------------;***********************************************************;*----------------------------------------------------------*-* The following are the Pascal error messages*;*----------------------------------------------------------$00001001 Case index out of range\D0000001002 Value out of range\D00%00001004 Integer division by zero\D00;00001008 Bus error - bad pointer or stack/heap overflow\D00 00001010 Stack/heap overflow\D00?00001011 Address error - bad pointer or stack/heap overflow\D00?00001012 Memory allocation error during processing Z option\D00+00001013 Data segment name must be SEG2\D00"00001022 Read past end of file\D0000001028 Illegal file name\D00*00001031 Integer expected in text file\D00'00001032 Real expected in text file\D00*00001033 Boolean expected in text file\D00?00001040 Too many files in use, or unrecognizable device ID\D00100001041 Option error in 'reset' or 'rewrite'\D00)00001042 Too many command line fields\D00#00001043 File not open at input\D00$00001044 File not open at output\D00200001051 Real number out of range in text file\D00700001052 Attempt to enable 6809 floating point trap\D00900001053 Attempt to set 6809 floating point exception\D00>00001054 Attempt to set 6809 floating point precision mode\D00200001062 Invalid base for integer in text file\D00900001063 Invalid digit for based integer in text file\D00#00001070 Attempt to take NAN(0)\D00?00001099 Illegal TRAP 14 error code - internal Pascal error\D00;*----------------------------------------------------------<* The following are the Pascal floating point error messages;*----------------------------------------------------------'00002000 No invalid operation error\D00"00002100 Illegal SQRT argument\D00500002200 (+infinity) + (-infinity) in affine mode\D00700002300 Conversion of a nC ot-a-number to an integer\D0000002400 Illegal division\D00400002500 An argument was a trapping not-a-number\D00G00002600 Unordered condition tested by predicate other than = or <>\D00300002700 Projective closure use of +/- infinity\D0000002800 0 * infinity\D00"00002900 Illegal REM arguments\D00K00002A00 Binary-to-decimal or decimal-to-binary conversion out of range\D00D00002B00 Moved single precision unnormalized to double precision\D00G00002C00 Returned unnormalized number to single or double precision\D0000002001 Invalid operation\D0000002002 Overflow\D0000002004 Underflow\D0000002008 Division by zero\D0000002010 Inexact result\D00B00002020 Overflow on conversion from floating point to integer\D00:00002040 Reserved exponent value seen as input operand\D00;*----------------------------------------------------------* End of Pascal error messages;*----------------------------------------------------------*$*ˆVERSAdosOperatingSystemMessages*+20010013 FILE REFERENCED IS NOT A LOAD FILEO*------------------------------------------------------------------------------?*--------------------------------------------------------------"* FORTRAN COMPILER ERROR MESSAGES.?*--------------------------------------------------------------900003002‚INVALIDCHARACTERAPPEARSINCOLUMNS1-5OFLINE600003003‚THESTATEMENTNUMBERHASALREADYBEENDEFINED?00003004‚THEFIRSTCHARACTEROFTHESTATEMENTISNOTALPHABETICL00003005‚CONTINUATIONLINEENCOUNTEREDWHENCOMMENTORINITIALLINEEXPECTED/00003006‚LIMITOF9CONTINUATIONLINESEXCEEDED900003007‚COLUMNS1-5OFACONTINUATIONLINEARENOTBLANK 00003009‚MISSING'END'STATEMENTI00003010‚THENAME\PISTOOLONG.‚ITHASBEENTRUNCATEDTOSIXCHARACTERS00003011‚SYMBOLTABLEOVERFLOW00003014‚REALCONSTANTOVERFLOW00003015‚ILLEGALCOMMANDLINE 00003016‚INVALIDCONSTANTFORMAT"00003017‚INTEGERCONSTANTOVERFLOW?00003018‚INTERNALERROR:illegalnodetypefoundin"Code_Gen".$00003022‚EXPECTINGRIGHTPARENTHESIS00003023‚EXPECTINGSINGLEQUOTE00003025‚UNDECODABLESTATEMENT00003026‚INVALIDCHARACTER‚\P?00003033‚INVALIDSTATEMENTAFTERENDSTATEMENT.‚ITWASIGNORED.*00003035‚ILLEGALOPTION(S)INCOMMANDLINE 00003036‚ILLEGALINPUTFILENAME!00003037‚ILLEGALOUTPUTFILENAME"00003038‚ILLEGALLISTINGFILENAME00003040‚MISSINGPROGRAMNAME 00003041‚MISSINGSUBROUTINENAME00003042‚MISSINGFUNCTIONNAMEG00003044‚NON-SYMBOLICNAMEISSPECIFIEDINTYPESPECIFICATIONSTATEMENT$00003045‚INVALIDARRAYDECLARATOR‚\P#00003047‚EXPECTEDCOMMONBLOCKNAME00003048‚MISSINGCOMMA100003049‚NON-SYMBOLICNAMEINANEQUIVALENCELISTG00003051‚INCORRECTLENGTHSPECIFICATIONINTYPESPECIFICATIONSTATEMENT500003052‚MISSINGLISTOFNAMESININTRINSICSTATEMENTC00003053‚INVALIDTYPEORLENGTHSPECIFICATIONINIMPLICITSTATEMENT000003054‚INVALIDLETTERINIMPLICITSTATEMENTƒ\P+00003055‚INVALIDDIMENSIONDECLARATORIN\PM00003056‚THELENGTHOFALITERALISLONGERTHANTHEVARIABLEORARRAYELEMENT200003064‚ILLEGALSTATEMENTINBLOCKDATASUBPROGRAMM00003065‚ATTEMPTTODEFINEAPREVIOUSLYDEFINEDNAMEINEXTERNALSTATEMENT\PM00003067‚NAMEINANINTRINSICSTATEMENTMUSTBEANINTRINSICFUNCTIONNAME\PN00003069‚ATTEMPTTODEFINEAPREVIOUSLYDEFINEDNAMEININTRINSICSTATEMENT\PF00003070‚ATTEMPTTODEFINEAPREVIOUSLYDEFINEDNAMEINSAVESTATEMENTD00003072‚ATTEMPTTOESTABLISHTHETYPEOFACHARACTERMORETHANONCEM00003073‚THERANGEOFLETTERSINANIMPLICITSTATEMENTLISTISNOTALPHABETICL00003079‚ATTEMPTTODEFINEAPREVIOUSLYDEFINEDNAMEASACOMMONVARIABLE\P:00003083‚WRONGNUMBEROFSUBSCRIPTSINANEQUIVALENCELISTC00003085‚AVARIABLE'SDIMENSIONISNOTASIMPLEINTEGERVARIABLE\PC00003086‚ATTEMPTINGTOUSEAPREVIOUSLYDEFINEDNAMEASANARRAY\PN00003087‚ANADJUSTABLEARRAYORASSUMEDSIZEARRAYMUSTBEADUMMYARGUMENT\P000003088‚ATTEMPTINGTOREDIMENSIONAVARIABLE\P<00003090‚INVALIDFORMAC TOFANASSUMEDSIZEARRAYDECLARATIONK00003092‚AVARIABLEDIMENSION\PISNOTADUMMYARGUMENTORCOMMONVARIABLE000003093‚MORETHAN3DIMENSIONSFORTHEARRAY\P;00003098‚INVALIDSYMBOLICNAMEAPPEARSINDATASTATEMENT‚\PB00003099‚AVARIABLEWASPREVIOUSLYINITIALIZEDINADATASTATEMENTK00003100‚ATTEMPTTOINITIALIZENAMEDCOMMONENTITY\PNOTINBLOCKDATASUB<00003101‚ATTEMPTINGTOINITIALIZEABLANKCOMMONVARIABLE\P/00003102‚TYPEOFDATAANDVARIABLEDONOTMATCH100003108‚AFUNCTIONMUSTNOTBEOFTYPECHARACTERB00003112‚ADJUSTABLEARRAYSAREVALIDONLYINPROCEDURESUBPROGRAMS-00003123‚INVALIDREFERENCETOSUBROUTINENAMEG00003126‚ADOLOOPPARAMETERISNOTANINTEGEREXPRESSIONORISMISSING600003131‚THEDOINDEXISNOTASIMPLEINTEGERVARIABLE500003133‚MISSINGINPUT/OUTPUTLISTINIMPLIEDDOLISTD00003135‚TYPEDISAGREEMENTBETWEENLEFTANDRIGHTSIDEOFEQUALSIGN=00003139‚ILLEGALSEQUENCEOFOPERATORS/OPERANDSINEXPRESSION<00003143‚TYPEDISAGREEMENTBETWEENACTUALANDDUMMYARGUMENT00003150‚DIVIDEBYZEROL00003152‚UNDEFINEDSTATEMENTFUNCTION,ORSTATEMENTFUNCTIONREFERENCEERRORN00003154‚STATEMENTFUNCTIONSTATEMENTNAMECONFLICTSWITHPRIORDEFINITIONS\PJ00003155‚DISAGREEMENTBETWEENTYPEORNUMBEROFACTUALANDDUMMYARGUMENTSN00003156‚MISMATCHINNUMBEROFACTUALANDDUMMYARGUMENTSINANINTRINSICFUNC00003157‚\PISDOUBLYDEFINEDF00003158‚PROCEDURE\PAPPEARSASARGUMENTWITHOUTEXTERNALDECLARATION?00003159‚THEREISANASSUMEDSIZEARRAYININPUT/OUTPUTLIST\PN00003160‚STATEMENTFUNCTIONSTATEMENTNAME\PPASSEDASPARAMETERORINCOMMONF00003163‚THEREISANERRORONTHELEFTSIDEOFANASSIGNMENTSTATEMENT+00003166‚UNDECODABLETYPEOFGOTOSTATEMENT100003172‚LOGICALIFCONTAINSILLEGALSTATEMENT(S)800003174‚DOCONTROLVARIABLEUSEDPREVIOUSLYINTHENEST)00003175‚ILLEGALTERMINALSTATEMENTOFDO*00003179‚RECORDANDEOFSPECIFIERCONFLICT-00003180‚FORMATANDRECORDSPECIFIERCONFLICTF00003181‚MISSINGFORMATIDENTIFIERWHEREANINTERNALFILEISSPECIFIED400003182‚INTERNALFILEANDRECORDSPECIFIERCONFLICT:00003183‚WRITESTATEMENTMUSTNOTCONTAINANEOFSPECIFIER500003189‚RETURNSTATEMENTAPPEARSINTHEMAINPROGRAM+00003195‚MAINPROGRAMHASNOSTOPSTATEMENT>00003197‚FUNCTIONVALUENOTDEFINEDINTHEFUNCTIONSUBPROGRAM.00003199‚ANYTHINGAFTERASTATEMENTISILLEGAL"00003200‚EXPECTINGSTATEMENTLABEL-00003201‚EXPECTINGCOMMAORRIGHTPARENTHESIS 00003203‚EXPECTINGSYMBOLICNAME-00003204‚EXPECTINGCOMMAORRIGHTPARENTHESIS#00003205‚EXPECTINGLEFTPARENTHESIS00003206‚EXPECTINGCOMMA00003207‚EXPECTINGEQUALSIGNK00003208‚EXPECTINGLABEL,SYMBOLICNAME,CHARACTERCONSTANT,'REC'OR'END'00003211‚EXPECTING'DIRECT'00003215‚EXPECTING'THEN'00003218‚EXPECTING'TO'*00003220‚MULTIPLE'END'OR'REC'SPECIFIEDK00003224‚NOSTATEMENTLABELAFTERARITHMETICIF,'GOTO','STOP'OR'RETURN'-00003226‚REFERENCETOILLEGALSTATEMENTLABELM00003227‚ILLEGALTRANSFERINTODOLOOP,IFBLOCK,ELSEIFBLOCKORELSEBLOCK(00003230‚INCREMENTAIONPARAMETERISZERO@00003235‚THEDOCONTROLVARIABLEISREDEFINEDWITHINTHEDOLOOP-00003237‚THEVARIABLEMUSTBEOFTYPEINTEGERF00003251‚MORETHANTHREELEVELSOFPARENTHESESINFORMATSPECIFICATIONG00003254‚NUMERICSPECIFICATIONGREATERTHAN255INFORMATSPECIFICATION>00003255‚NUMERICSPECIFICATIONISZEROINFORMATSPECIFICATION@00003257‚DIGITSOFFRACTIONALPARTEXCEEDTOTALDIGITSOFNUMBERK00003260‚CHARACTERCONSTANTLENGTHGREATERTHAN255INFORMATSPECIFICATION%00003261‚MISSING'N'OR'Z'AFTER'B'K00003265‚THEFIRSTCHARACTEROFACHARACTERFORMATSPECIFICATIONISNOT'('/00003267‚NOSTATEMENTLABELONFORMATSTATEMENT000003270‚FORMATINDEXVARIABLEMUSTBEINTEGER*4C00003271‚Uselessdatatype-expectedvariable,arrayorfunction\P=00003272‚OverflowinHexadecimalnumber(morethan8digits).400003273‚IllegalcharacterinHexadecimalnumber.\P200003274‚Missingending'HD 'inHexadecimalnumber.:00003275‚UnrecognizednameofLOGICAL/RELATIONALoperator.'00003276‚Double-realconstantoverflow.800003277‚Morethanoneperioddetectedinrealconstant.:00003278‚Morethanoneexponentdetectedinrealconstant.$00003279‚Underflowinrealconstant.K00003281‚TWODIFFERENTVARIABLETYPESAREBOUNDBYEQUIVALENCESTATEMENT\PK00003282‚TWOEQUIVALENCEDCHARACTERENTITIESDONOTHAVETHESAMELENGTH\PI00003283‚TWODIFFERENTARRAYELEMENTSAREASSIGNEDTOTHESAMEADDRESS\PM00003285‚CHARACTERDATAANDNONCHARACTERDATACANNOTBEINTHESAMECOMMON\PI00003287‚COMMONBLOCKSTORAGECANNOTBEEXTENDEDUPWARDBYEQUIVALENCE\PB00003289‚ACOMMONVARIABLEANDASAVEVARIABLEAREEQUIVALENCED‚\P@00003290‚ELEMENTSOFDIFFERENTCOMMONBLOCKSAREEQUIVALENCED\PC00003293‚THESUBSCRIPTOF\PINANEQUIVALENCESTATEMENTISINVALID00003297‚CAN'TOPENINPUTFILE 00003298‚CAN'TOPENLISTINGFILE00003300‚INTERNALERROR'00003301‚Integerexpressionisexpected+00003302‚Numbershouldbegreaterthanzero700003303‚EOFmustnotbespecifiedforaninternalfileB00003304‚Formatidentifier,ifany,mustbeseconditeminciolist00003305‚Unexpectedequalsign%00003306‚IllegalformatspecificationE00003307‚Implied-docontrolvariableisnotasimpleintegervariable900003308‚Implied-doloophastoomanysimpleiolistitems900003309‚DOcontrolvariable\PisredefinedinaniolistA00003310‚Implied-docontrolvariableisredefinedinaniolist\P$00003311‚Unexpectedleftparenthesis%00003312‚Unexpectedrightparenthesis00003313‚Unexpectedcomma00003314‚Unexpectedslash00003315‚Unexpectednumber00003316‚Unexpectedminussign00003317‚Unexpectedapostrophe*00003318‚UnexpectedBformatspecification'00003319‚IllegalXformatspecification*00003320‚UnexpectedIformatspecification*00003321‚UnexpectedLformatspecification*00003322‚UnexpectedAformatspecification*00003323‚UnexpectedDformatspecification*00003324‚UnexpectedEformatspecification*00003325‚UnexpectedFformatspecification800003326‚NumberismissingbeforePformatspecification800003327‚NumberismissingbeforeHformatspecificationA00003328‚Anon-logicaloperand\Pappearsinalogicalexpression$00003329‚Unexpectedend-of-statement100003330‚Unexpectedcharacterinformatstatement00003331‚Missingfieldwidth)00003332‚Internalerror-namenotfound.&00003333‚Illegaluseofmodulename\PG00003334‚Attemptedtopassstatement-function-statementnameasaddress,00003335‚Conflictwithpriordefinitions:\P.00003336‚Illegalattempttopass\PasaddressC00003337‚NoINTRINSICstatementfor\Pbutitispassedasargument700003338‚Anattemptwasmadetoassigntheprocedure\P400003339‚Procedurename\PappearsinDATAstatement000003340‚UnbalancedparenthesesinIFstatement.L00003341‚Internal-nameinattributetabledoesnotstartwithalphacharac$00003342‚Internal-hashtablefull.;00003343‚Expectedvariablenameorarraynameinsteadof\PH00003344‚Dummyargument\PappearsmorethanonceindummyargumentlistL00003345‚Dummyargumentlistmissing-parenthesesmustappearevenifempty00003346‚'RECL'expected00003347‚'ACCESS'expected-00003348‚MissingelementsinEQUIVALENCElist00003349‚SlashexpectedB00003350‚DummyargumentorSAVEdentitity\PnotallowedinCOMMON.00003351‚ArrayelementsnotallowedinSAVE‚\P?00003352‚DummyargumentorCOMMONentity\PnotallowedinSAVEM00003353‚SAVEentitiesmustbesimplevariables,arraynamesorcommonblocks*00003354‚Numericintegerconstantexpected:00003355‚Dummyargument\PnotallowedinEQUIVALENCElist100003356‚RETURNmissinginfunctionorsubroutineJ00003357‚Morethanoneheader(PROGRAM,FUNCTION,SUBROUTINEorBLOCKDATA)$00003358‚Illegalorderofstatements800003359‚MissingDATAstatementsinBLOCKDATAsubprogram&00003360‚Missingexecutablestatements00003361‚Unclosedblocks300003362‚IllegalstatementsinBLOCKD DATAsubprogram600003363‚IllegalcharactersinSTOPorPAUSEstatement400003364‚Missingdimensionnumberinattributeof\P700003365‚"bin_code"-Illegaloperationcodepassed:\NL00003366‚INTERNAL:"nextwork"-Toomanywork-registersneededby"bin_code"B00003367‚INTERNAL:"bin_special"-Illegalcommand-codepassed:\NG00003368‚INTERNAL:"bnflsmpl"-Illegalvar-kindinsimple-varnode:\NG00003369‚INTERNAL:"bnflarray"-Illegalvar-kindinarray-varnode:\NM00003370‚INTERNAL:"bnflopnd/bnflrutn"-Illegaloperandnode-typepassed:\NH00003371‚Codesizeisgreaterthan32KBwhichconflictswith'-B'optionL00003372‚INTERNAL:"bincre"-Illegaloperandaddress-mode(MDxxx)found:\NN00003373‚INTERNAL:"binpseud"-Illegaloperandaddress-mode(MDxxx)found:\N600003374‚INTERNAL:"binopen"-Cant'topenro-file:\PC00003375‚INTERNAL:"bntmopen"-Can'tre-opentemporaryro-file:\PD00003376‚INTERNAL:"bntmread"-Readoftemporaryro-filefailed:\PE00003377‚INTERNAL:"binwrt"-Illegalreacod-code(WR_xxx)passed:\NN00003378‚SAVE+COMMONcodeisgreaterthan32KBwhichconflictswith'C'option;00003379‚INTERNAL:"bnwrbyte"-Writeonro-filefailed:\P;00003380‚INTERNAL:"binclose"-Writeonro-filefailed:\P00003381‚NestingerrorG00003382‚STRING-CONSTANTSandFORMATSsectionsizeisgreaterthat32KB00003383‚Illegalintegernumber=00003384‚CHARACTERLENGTHOFBOTHOPERANDSSHOULDBETHESAME(00003385‚IllegalsyntaxinDATAstatment)00003386‚Inconsistentsubscriptreference+00003387‚UnequalnumberofnamesandvaluesM00003388‚AttempttoinitializenonCOMMONvariable\PinBLOCKDATAsubprogram300003389‚Subscriptof\Pisnotanintegerconstant100003390‚FATALerrorinDATA-datatableisfull?00003391‚FATALerrorindata/keep_gen-keep_gengotoddoffset900003393‚MISMATCHBETWEENOPERANDANDOPERATORDATATYPES00003394‚UNDEFINEDLABEL\N00003395‚FIXED-POINTOVERFLOWD00003396‚FIXED-POINTZERORAISEDTOPOWEROFNEGATIVEORZERONUMBER*00003397‚UnexpectedZformatspecification*00003398‚UnexpectedGformatspecification00003399‚PROGRAMISEMPTY100003400‚INTERNALFATALERRORIN:ƒ"match_convert",00003401‚INTERNALFATALERRORIN:ƒ"subst_op".00003402‚INTERNALFATALERRORIN:ƒ"execute_op"+00003403‚INTERNALFATALERRORIN:ƒ"convert"*00003404‚INTERNALFATALERRORIN:ƒ"expars"=00003405‚INTERNALFATALERRORIN„"elesize"(VARIABLENAME\P)#00003406‚EXPRESSIONNESTEDTOODEEP*00003407‚INTERNALFATALERRORIN:ƒ"sintof"000003408‚INTERNAL:nomorebufferroomavailable(00003409‚INTERNAL:attributestablefull(00003410‚INTERNAL:anI/OerroroccurredO*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ *ˆTESTLINEO*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~éé    ƒ=====================ƒREPAIRSPECIFICATIONSƒ===================== 1. REPAIR PROCESS CƒREPAIRdetectserrorsinaVERSAdosdiskordiskettewhichhasbadDƒdiskcontroltableinformation.Errorsarefoundandidentifiedand@ƒanattemptismadetocorrecterrorswithminimallossofdata.BƒREPAIRmayalsoberuntochangediskcontentsortodumpsectorsƒordiskstructures.DƒREPAIRcanberuntoprocesstheentirevolumeoronlyaparticularƒfileonthevolume.MƒREPAIE Rmayalsobeexecutedtorecoverdeletedfile(s)aslongasthefile'sLƒdatablocksandFABshavenotbeenreallocatedtootherusesafterthefile ƒwasdeleted.  2. COMMAND LINE SYNTAX -ƒREPAIR‚voln:un[.cat.fn.ex][,#PR][;[N][C][R]]ƒorƒREPAIR#devn[,#PR][;[N][C][R]] ƒwhere‰voln†volumename‰unˆusernumber‰cat‡catalogname ‰fnˆfilename ‰exˆextension‰devn†devicemnemonic EƒVolumerepairisdoneif'#devn'oronly'voln:un'isgiven.Allthe<ƒstructuresonthediskarecheckedandprocessedbyREPAIR. FƒFilerepairisdoneif'voln:un.cat.fn.ex'isgiven.OnlytheprimaryKƒdirectoryblockentryandthefile'sdatablock(s)andFAB(s),ifany,areJƒcheckedandprocessed.Theotherstructuresonthediskareassumedtobe ƒcorrect. JƒREPAIRoutputcanbeduplicatedonthelineprinterinthenoninteractiveHƒorcheck-onlymodes,seeNandCoptionsbelow.‚Asadefaultandinthe7ƒinteractivemodetheoutputgoesonlytotheterminal. 3. OPTIONS ƒDefaultprocessing=‰-interactivemode.REPAIRprocessisunderusercontrolandD‹sector(s)ordiskstructuresmaybeupdatedordumped.Inthismode>‹errorhandlingismosteffectiveiftheuserisfamiliarwith@‹thediskcontroltables.Modeisreferredtoas'IM'forshort.?‰-norecoveryofdeletedfiles.Alldeletedfilesareskipped.?‰-if#PRisspecifiedasoutputincommandlineitisignored. ƒOptions=‰N-specifiesnon-interactivemode.REPAIRprocessismostly –<Ÿ,§"¯#·#¿.Ç5Ï5×=ß4ç9ï4÷0ÿ8 < B 8 ? ': /5 7; ?? GA OE W= _: g> o3 w: 9=automatic;theusercannotupdateanydiskstructuresunless:errorsareencountered.Nodiskstructuresaredisplayed.?Iferrorsarefound‚thenoneofthreepathsistakenbyREPAIR:“-REPAIRisterminatediferrorissevere.(REPAIRinthe'•interactivemodeshouldbedonenext.).“-REPAIRsendsrepairactionmessage'R:...'•andrequests'REPAIR(Y/N)?'-›Iftheuserrespondswith'Y'thenindicated›repairisperformed.-›Iftheuserrespondswith'N'thendepending,›ontheerroreitherREPAIRisterminatedor'›theuserisgivenanotheralternative.2“-REPAIRsendsrepairactionmessage'R:...'and4•REPAIRperformstheindicatedactionautomatically. (Modeisreferredtoas'NIM'forshort.?Thismodeisrecommendedonlyiftheuserisnotfamiliarwith?thediskcontroltables.Thediskcontroltablesareexplainedintheappendix. @If#PRisgivenatthecommandlineforoutputthenahardcopy.ofREPAIRoutputissenttothelineprinter. F‰C-check-onlyprocessing.REPAIRproceedsasinnon-interactivemodeCregardlessofN-optionstatus.Anyerrorsencounteredinthismode>causeREPAIRtobeterminatedwithappropriateerrormessage,‹containsalinktonextstructureofthesametypeitisusedB‹tocontinueprocessing(theusermayhavechangedthisfieldfromB‹itsoriginalvalue-thesectorsofthecurrentstructurearenot7‹writtentodisknomatterhowmuchtheywerechanged.)0„d.A-allocate,usedforSATCHECKstep9onlyE„e.D$PSN[,N]-delete‚ordeallocatesectorsfromastructure,where8”N,ifgiven,isnumberofconsecutivesectorsaffected,”Ndefaultsto1.;„f.A$PSN[,N]-allocatesectorsinSAT.$PSN[,N]asaboveF„g.$[,N]‚-dumpthestructureorifNisgivendumpNthsectorofthe2structure(ifNisgreaterthanthelengthofthe/structurethenN=1isused).DisplaytoLDF.I„h.$PSN[,N][#PR]-dumpanysector(s)toLDForprinter,Nisnumberof0˜consecutivesectorstobedumped(defaultis1)G„i.$PSNoffset‚XX[,XX]...-updateasectorofthestructurewherePSN,¡mustbeaphysicalsectornumberwithinthe)¡structure,offsetisahexadecimalvalue/¡(0-$FF)andXXiseitherahexadecimalvalue+¡(0-$FF)oraperiod('.')followedbyan)¡ASCIIcharacter.Thespecifiedsectoris/¡changedstartingwiththebyteatgivenoffset(¡bygivingconsecutivebytesnewvalues.'¡SeeVIDCHECK6.e.forsectorupdates.Eƒj.offsetXX[,XX]-sameasabovebutchangesarealwaysmadetothe6˜firstsectorofthestructure.Hereoffsetmuststart8˜withanumericcharacter(itsvaluemuststillbe0-FF)Eƒk.N-terminatesloopandturnsoffinteractivemodetillsomenext8‹structureisprocessedoruntilanerrorisdiscovered./ƒl.carriagereturnonly-CR-terminatesloop=ƒm.C-terminatesloop,REPAIRcontinuesasifincheck-onlyDŠmodetilldoneorerrorfound,cannotbegivenduringFILECHECKifŠR-optionison. MNOTE: During first REPAIR version sectors are dumped directly from disk, onlyJ†thecurrentstructureisdumpedasitappearsinmemory.Therefore,otherI†structuresthatarealsomemoryresidentareattimesnotdisplayedwith†changesmadeduringREPAIR. $ƒErrormessagestobadresponsesare‡-WHAT?ifsyntaxerrorG‡-PSNERRORifPSNisoutofrange-onlythecurrentstructurecanbe‰updated9‡-VALUEERRORifbytevalueforsectorchangeisinvalidF‡-OFFSETERRORifoffsetispastsectorboundaryortoomanynewbyteA‰valuesaregiven-updatesareallowedonlywithinthespecified‰sector O4.7 BREAK key will abort REPAIR with 'BREAK! - REPAIR ABORTED'. Sectors changed#„inmemoryarenotwrittentodisk. M4.8 In IM during final SAT CHECK all unused sectors that are marked allocatedH„arelisted.IfsomestructurehadtobedeletedortruncatedbecauseofB„badlinksorotherproblems,thenbydumpingtheunusedallocatedE„sectorstheusermayrecognizesectorsthatbelongtothedeleted‚orB„truncatedstructure.‚REPAIRcanthenbereexecutedtoreconstruct„thestructure. ==============INITIALIZATION==============  11. PROCESS LOGICAL UNIT NUMBERS AND COMMAND LINE. B- LDFLUN must be assigned and transferred to REPAIR by LOADER/SCT.5‚Ifnot,REPAIRexits-noerrormessagecanbesent. B- CDFLUN must be assigned and transferred to REPAIR by LOADER/SCT.6‚Ifnot,REPAIRisterminatedwith'CDFNOTASSIGNED'. >- LUN 1 and 2 must be free for volume and printer assignments.K‚IF fnot,REPAIRisterminatedwith'FREELOGICALUNITX'whereXis1or2. J- Command line errors terminate REPAIR with 'COMMAND LINE ERROR'. Possible‚errorscausedby'‰-noinputorinputfieldsyntaxerror)‰-outputfieldcontainsotherthen'#PR'?‰-otherthanC,N,orRinoptionsfield,orCandNtogether. J2. RETRIEVE DEVICE MNEMONICS IF DEVICE NAME GIVEN IN COMMAND LINE TO CHECKƒFORVALIDDEVICE M- REPAIR terminates with 'INVALID DEVICE' if device mnemonic not known in the)‚systemordevicenamenotadiskdevice. N- REPAIR terminates with 'INTERNAL ERROR 1' if device name not found but fetchK‚devicemnemonicreturnparameterblockwastoosmalltocontainallrandom)‚accessdevices(thisshouldnothappen). )3. ASSIGN VOLUME FOR EXCLUSIVE READ/WRITE J- REPAIR terminates with 'UNABLE TO ASSIGN VOLUME - ERROR X' if assignment+‚error(XisthereturncodegivenbyFMS). 4. RETRIEVE DISK ATTRIBUTES :- If IO error then 'IO ERROR, D0 = X' and 'REPAIR ABORTED'G‚elseREPAIRobtainsnumberofsectorsondiskandsetsMPSN=lastPSN‚ondisk(=#ofsectors-1). K5. 'VERSADOS REPAIR UTILITY - VERSION X' is sent where X is version number.  ========= VID CHECK ========= J1. '*** VID CHECK ***' is sent unless file repair. During this step REPAIRGƒchecksouttheVIDsector-alltheremainingstructuresarereachable*ƒonlyiftheVIDisintactorrepairable. 2. Read in VID (BSR GETSEC) L-Iferror'IOERROR,D0=XFROMREADVID,PSN=0'‚or'CRCERRORFROMREAD‚VID,PSN=0'‚issent.5‰-Iferrorduringfilerepairthen'REPAIRABORTED'.,‰-IferrorwithC-optionREPAIRterminates.1‰-IfotherthanCRCerrorthen'REPAIRABORTED'.F‰-IfCRCerrorthenVIDupdateflagisset-rewritehopefullyclears‹error. -3. VID is checked to contain 'EXORMACS'-code. 3- If not 'ER: DISK NOT A VERSADOS VOLUME' is given.6‰-IfC-optionorfilerepairthen'REPAIRTERMINATED'#‹else'REPAIR(Y/N)?'isrequested.“If'N'thenREPAIRexits.6“If'Y'thenREPAIRcontinueswithVIDupdateflagset5“(thiswillforce'EXORMACS'-codeinsertionintoVID) N4. If file repair skip till SAT segment allocation(step 9). If NIM or C-option/ƒthenskiptillVIDinformationcheck(step7). 5. In IM dump VID (BSR DUMP). %6. In IM 'UPDATE?' loop (BSR UPDATE).‰a.CRorN-terminateloop#‰b.R,D[$PSN],A[$PSN]-'WHAT?'‰c.Q-'REPAIRTERMINATED'1‰d.$-dumpVIDagain(if'$,N'N=1isforced)G‰e.$PSN-dumporupdateanysector(s);thisistheonlytimethatany6“sectoronthediskcanbeupdated-laterononlythe<“currentstructurecanbeupdatedtoprotectstructuresthat“havealreadybeenprocessed=“-IfIOerrorthen'IOERROR,D0=XFROMREADSEC.,PSN=X6•or'IOERROR,D0=XFROMWRITESEC.,PSN=X'orCRC7•errormessageissent,butotherwiseerrorisignored.=‰f.offset-notallowedtopreventaccidentalwipe-outofVID=‰g.C-terminatesloop,REPAIRcontinuesasifincheck-onlymodetilldoneorerrorfound 7. Check VID information. ;7.1ƒAnyupdatedsectorfromstep6iswrittenbacktodisk.;‡-Iferrorthen'IOERROR,D0=XFROMWRITESEC.,PSN=X'‰and'REPAIRABORTED' 87.2ƒVolumenamemustbealpha,alphanumeric(BSRNAMECK)"‡-Iferrorthen'ER:VOLUMENAME'‘-ifC-optionREPAIRexits“else"OLD'....'($04)"˜"NEW?"6“isrequested.Responseshouldbeupto4charactersto5“replacevolumename.Checkisrepeatedfornewname.“ReferenceNOTE1. 07.3ƒVolumedescriptormustbeASCII(BSRCHKASC)0‡-Iferrorthen'ER:VOLUMEDESCRIPTOR'issent‘-ifC-optionREPAIRexits“else"OLD'...…...†...'($14)"˜"NEW?"7“isrequested.Responseshouldbeupto20charactersto.“replacevolumedescriptor.Checkisrepeated. D7.4ƒSATlengthmustequalappropriatesizefordisk(mustbeableto6†accomodateallsectorsondiskandhaveminimumsize)-‡-Iferrorthen'G ER:SATLENGTH=X'issent‘-ifC-optionREPAIRexits“else'R:RECALCULATE' •ifNIMthenforceproperlength•ifIMthen'REPAIR(Y/N)?'.If'Y'thenproperlengthisenteredintoVID (sizecalculatedfromMPSN)!If'N'then'REPAIRTERMINATED'. J7.5ƒSATstartingPSNmustnotbezeroandSATmustbeondisk(BSRMPSNC).*‡-Iferrorthen'ER:SATPSN=X'‚issent‘-ifC-optionREPAIRexits"‘-ifNIMthen'REPAIRTERMINATED' ‘-ifIMthen˜'NEW?'5™isrequested(BSRGET4HEX).Testisrepeatedfornew™value. A7.6ƒCheckSDBPSNOK:‚zeroisOK,ifnotthenSDBmustbeondisk*‡-Iferrorthen'ER:SDBPSN=X'issent‘-ifC-optionREPAIRexits"‘-ifNIMthen'REPAIRTERMINATED' ‘-ifIMthen˜'NEW?'5™isrequested(BSRGET4HEX).Testisrepeatedfornew!™value.(0deletestheSDBchain) +7.6A‚Checktestpatternok.Allzeroisok.-ˆ-IferrorandifC-optionthenREPAIRexitsŠelse'ER:BADTESTPATTERN''REPAIR(Y/N)?'"-if'N'then'REPAIRTERMINATED'--if'Y'thencorrecttestpatternisforced 7.6B Check check sum ok.‰-Iferrorthen'ER:CHECKSUM'%Œ-ifC-optionthenREPAIRterminatesŽelse'REPAIR(Y/N)?'"-if'N'then'REPAIRTERMINATED'*-if'Y'thencorrectchecksumisforced 77.7ƒChecknoPDBlistpointer-reservedfieldfornow.<‡-Iferrorthen'ER:PDBLRESERVEDFIELDNOTZERO,PSN=0'‘-ifC-optionREPAIRexits“else'R:ZEROOUT'˜'REPAIR(Y/N)?'˜isrequested(BSRRSVCHK)˜If'Y'thenfieldiszeroed ˜If'N'then'REPAIRTERMINATED' "7.8ƒCheckVIDreservedspacezero.;‡-Iferrorthen'ER:VIDRESERVEDFIELDNOTZERO,PSN=0'‘-ifC-optionREPAIRexits“else'R:ZEROOUT'˜'REPAIR(Y/N)?'˜isrequested(BSRRSVCHK)˜If'Y'thenfieldiszeroed ˜If'N'then'REPAIRTERMINATED' '8. Write VID to disk if update flag set+‰-ForceVERSAdoscode('EXORMACS')intoVID=‰-ifIOerrorthen'IOERROR,D0=XFROMWRITEVID,PSN=0'›'REPAIRABORTED' 9. Allocate SAT buffers?‰-AsegmentisallocatedtoaccomodatetwoSATbuffersforthe‹diskandallocationSATs=“-theSATondiskisreferredtoas'diskSAT'-itcontains(•thesectorallocationmapforthedisk.7•UndernormalcircumstancesthediskSATischeckedand8•updatedasnecessaryandatendofREPAIRitiswritten/•backtodiskifchanged.‚IftheSATisinpoor;•shapetheuserhastheoptiontohaveREPAIRrecreateit-7•thenthediskSATisignoredandtheallocationSATis5•writtentodiskatendofREPAIR.(TheSATcannotbe3•recreatedifonlyfilerepairisdonebecausethen6•onlythefile'ssectorsarecheckedandprocessedfor;•allocation-theresultingallocationSATisnotcomplete) ;“-anotherSAT-typemapisbuiltbyREPAIRtokeeptrackof9•sectorsthathavebeenprocessedandhavebeenallocated4•sofar.‚ThisSATischeckedformultipleallocation9•errors,itisreferredtoas'allocationSAT'.Notethat:•ifonlyfilerepairisdone(asopposedtovolumerepair);•thenREPAIRwillnotbeabletodetectmultipleallocation8•errorsexceptforamongthesectorsassociatedwiththe•file. ‰-IferrorfromEXECcallthen.“'SEGMENTALLOCATIONERROR,D0=X,SEG:SATS'“'REPAIRABORTED' ========= SAT CHECK ========= 21. '*** SAT CHECK ***' is sent unless file repair. 2. Read in SAT (BSR GETSEC);‰-IfIOerror'IOERROR,D0=XFROMREADSAT,PSN=X'or#—'CRCERRORFROMREADSAT,PSN=X' ‘-IfC-optionthenREPAIRexits'‘-Iffilerepairthen'REPAIRABORTED'0‘-IfotherthanCRCerrorthen'REPAIRABORTED'&‘-IfCRCerrorthen'R:RECREATESAT'/›-ifIMthenenter'UPDATESAT?'loop(step5)›-ifNIMthen'REPAIR(Y/N)?'&§if'Y'thennewSATcreatedbyREPAIR$©(theallocationSATwillbewritten#©todiskattheendofREPAIR,disk©SATisignored) §if'N'then'REPAIRTERMINATED' M3. If file repair skip till FILE CHECK. If NIM or C-option then skip till SATƒCHECKstep6. 4. Dump SAT in IM. G 5. 'UPDATE SAT?' loop in IM‰a.CR,N-terminateloop‰b.D,A-'WHAT?'6‰c.R-recreateSAT(ignorediskSAT),terminateloop‰d.Q-'REPAIRTERMINATED'7‰e.$PSN-dumpsector(s),updateordumpSATsector(s)7‰f.$-dumpSATsector(s);if'$,N'andN>SATlengththenN=1isused.‰g.D$PSN-deallocatesector(s)inbothSATs,‰h.A$PSN-allocatesector(s)inbothSATs$‰i.offset-updatefirstSATsector=‰j.C-terminatesloop,REPAIRcontinuesasifincheck-onlymodetilldoneorerrorfound 6. Check SAT initially @6.1 Check VID allocated in disk SAT (unless SAT to be recreated)6…Iferrorthen'ER:VIDNOTALLOCATEDINSAT,PSN=0' ‡-ifC-optionthenREPAIRexits‰else‚'R:ALLOCATEVID'ifNIMthenallocateVIDifIMthen'REPAIR(Y/N)?'0“if'Y'thenVIDismarkedallocatedindiskSAT “if'N'then'REPAIRTERMINATED' 16.2CheckVIDnotyetallocated‚inallocationSAT9…Iferrorthen'ER:VIDSPACEALREADYALLOCATED,PSN=0'“'REPAIRABORTED'H…ThisshouldonlyhappeniftheuserhasallocatedthesectorduringSAT…UPDATEloop(step5). @6.3 Check SAT allocated in disk SAT (unless SAT to be recreated)6…Iferrorthen'ER:SATNOTALLOCATEDINSAT,PSN=X'‡-ifC-optionREPAIRexits‰else‚'R:ALLOCATESAT'ŒifNIMthenallocateSATŒifIMthen'REPAIR(Y/N)?'0“if'Y'thenSATismarkedallocatedindiskSAT “if'N'then'REPAIRTERMINATED' 16.4 Check SAT not yet allocated in allocation SAT9…Iferrorthen'ER:SATSPACEALREADYALLOCATED,PSN=X'“'REPAIRABORTED'K…Thisshouldonlyhappeniftheuserhasallocatedthesector(s)duringSAT…UPDATEloop(step5). N6.5 Check eXTRaneous sectors allocated in disk SAT(unless SAT to be recreated)6…Iferrorthen'ER:XTRNOTALLOCATEDINSAT,PSN=X'‡-ifC-optionREPAIRexits‰else‚'R:ALLOCATEXTR'‹ifNIMthenallocatesectors‹ifIMthen'REPAIR(Y/N)?':“if'Y'thenthenon-existingsectorsaremarkedallocated “if'N'then'REPAIRTERMINATED' =6.6 The extra sectors are marked allocated in allocation SAT. M6.7 If SDB exists then check first SDB allocated (unless SAT to be recreated)6…Iferrorthen'ER:SDBNOTALLOCATEDINSAT,PSN=X'‡-ifC-optionREPAIRexits‰else‚'R:ALLOCATESDB'‹ifNIMthenallocateSDB‹ifIMthen'REPAIR(Y/N)?'0“if'Y'thenSDBismarkedallocatedindiskSAT “if'N'then'REPAIRTERMINATED' D6.8 If SDB exists then check SDB not yet allocated in allocation SAT9„Iferrorthen'ER:SDBSPACEALREADYALLOCATED,PSN=X'’'REPAIRABORTED'H…ThisshouldonlyhappeniftheuserhasallocatedthesectorduringSAT…UPDATEloop(step5). 06.9 If SDB chain exists then skip till SDB CHECK 87.‚IfnoSDBchainexiststhen'NODIRECTORIES'issent. D7.A Check diagnostic test area ok and allocated. Zero pointer is ok.?‰'ER:TSTPSNERROR'ifpointerinVIDbadortestareaPSNbad:‰'ER:TSTNOTALLOCATED'iftestareanotallocatedinSAT8‰'ER:TSTSPACEALREADYALLOCATED'ifspaceusedalready 7.B Check dump area ok (VID),‰'ER:DUMPAREAPSNERROR'ifPSNinVIDbadA‰'ER:DMPNOTALLOCATEDINSAT'ifdumpareanotallocatedinSAT"‰'ER:DMPSPACEALREADYALLOCATED' 7.C Check SLT ok.-‰'ER:SLTPSNERROR'ifpointerinVIDisbad‰'ER:SLTNOTALLOCATEDINSAT'"‰'ER:SLTSPACEALREADYALLOCATED'(‰'ER:SLSPSNBAD'ifpointerinSLTbad‰'ER:SLSNOTALLOCATEDINSAT'"‰'ER:SLSSPACEALREADYALLOCATED' F8.‚IfSATwastoberecreatedbyREPAIRthenallocationSATiswritten„todiskasnewSAT.F„InlaterversionallowdisplayofallocationSATandaskifanewSATI„locationisdesired(e.g.tomoveSATfrombadsectorstonewlocation).0“-IfIOerrorthen'IOERROR,DO=XFROMWRITE#•SAT,PSN=X'and'REPAIRABORTED'!•else'DISKOK'and'REPAIRDONE' D9.‚IfSATwasnottoberecreatedbyREPAIRthendiskandallocation„SATsarecheckedtobeequal.?‹-IftheyareequalthediskSATiswrittentodiskifchanged/-ifnoH errorthen‚'DISKOK'and'REPAIRDONE'-ifIOerrorthen+œ'IOERROR,D0=XFROMWRITESAT,PSN=X'œ'REPAIRABORTED' D‹-IftheyarenotequalbecausesectorsallocatedinallocationSATBarenotallocatedindiskSATthen'INTERNALERROR2'and'REPAIR"ABORTED'-thissouldnothappen. B‹-IftheyarenotequalbecausesectorsallocatedindiskSATareBnotallocatedinallocationSAT(happensifdiskstructureswere?deletedortruncatedortheconditionexistedpriortoREPAIR)then-'ER:UNUSEDSECTORSMARKEDALLOCATEDINSAT''R:DEALLOCATE''REPAIR(Y/N)?'(note:C-optionignorednow)4‘-if'Y'thenallocationSATiswrittentodiskand)˜ifnoerror'DISKOK'and‚'REPAIRDONE'.0˜iferrorthen'IOERROR,D0=XFROMWRITESAT,¦PSN=X'and'REPAIRABORTED'?‘-if'N'andNIMthendiskSATiswrittentodisk(thisleaves!“sectorsmarkedallocatedinSAT)"•-ifnoerrorthen'REPAIRDONE'.2•-iferrorthen'IOERROR,D0=XFROMWRITESAT,¦PSN=X'and'REPAIRABORTED'<‘-if'N'andIMthenallsectorsallocatedbutnotusedare8“listedas'PSN=X'or'PSN=X,N'dependingonwhether4“asinglesectororablockofsectorswasaffected.,“Thenafterallthesectorshavebeenlisted“'UPDATESAT?'isrequested.•a.CR,C,Q,offset,D$PSN,A$PSN-'WHAT?'9•b.D,R-deallocate(allocationSATiswrittentodisk),œ-ifnoerrorthen'DISKOK','REPAIRDONE'2œ-iferrorthen'IOERROR,D0=XFROMWRITESAT,­PSN=X'and'REPAIRABORTED'6•c.A,N-leaveallocated-writediskSATtodiskif ˜necessary!-ifnoerrorthen‚'REPAIRDONE'2-iferrorthen'IOERROR,D0=XFROMWRITESAT,®PSN=X'and'REPAIRABORTED'/•d.$-listnumbersagain(If'$,N'Nignored)6•e.$PSN-dumpsector(s),noupdateallowed('WHAT?') ========= SDB CHECK ========= '1. '*** SDB CHECK ***' message is sent. &2. Read in first/next SDB (BSR GETSEC)B‡-IfC-optionanyIOerrorcauseserrormsgtobesentandREPAIR ‰toexitelseBŒ-ifCRCerrorthenerrormsgissentandSDBupdateflagisset.BŒ-ifnon-CRCerrorthen'IOERROR,DO=XFROMREADSDB,PSN=X'&‘-ifNIMthen'R:TRUNCATESDBCHAIN'Ÿ'REPAIR(Y/N)?'isrequested.›-if'Y'thenanypriorSDBissettobelast1SDBinchain(itsforwardlinksetto0-REPAIR3isabortedifIOerrorfromlinkupdate)andREPAIR1continueswithPDBCHECK.IfnopriorSDBexists-thenSDBpointerinVIDiszeroedandREPAIR!continueswithSATCHECKstep7."›-if'N'then'REPAIRTERMINATED'?‘-ifinIMthen'R:TRUNCATESDBCHAIN'and'UPDATESDB?'loop<“isentered,'R'responsewilltruncateSDBchain(priorSDB “islast) 3. If IM dump SDB (BSR DUMP).3ƒIfNIMorC-option‚skiptillSDBinformationcheck ƒ(step5) 4. 'UPDATE SDB?' loop‰a.CR-terminatesloopE‰b.N-terminatesloopandturnsoffIMtillPDBCHECKsteporerrorF‰c.R-'WHAT?'unlessUPDATEwaspreceededby'R:TRUNCATESDBCHAIN'%‘inwhichcaseSDBchainistruncatedG‰d.D-deletecurrentSDB,terminatesloop;forwardlinkusedfornext0SDB(if0thenpriorSDBwillbelastinchain)‰e.A[$PSN],D$PSN-'WHAT?'‰f.Q-'REPAIRTERMINATED'-‰g.$-dumpSDB(if'$,N'thenN=1isused)1‰h.$PSN-dumporupdateSDB,dumpanysector(s)‰i.offset-updateSDBsector=‰j.C-terminatesloop,REPAIRcontinuesasifincheck-onlymodetilldoneorerrorfound 5. Check SDB information !5.1 - Check SDB header as follows H5.1.1„-checknextSDBPSNisOK:zeroisOKornextSDBmustbeondisk ‹(BSRMPSNC)$‘-ifzerothenskiptillstep5.1.4(‘-iferrorthen'ER:SDBLINK,PSN=X'›-ifC-optionREPAIRexits&›-ifNIMthen'R:TRUNCATESDBCHAIN'©'REPAIR(Y/N)?'#§if'Y'thenSDBchainistruncated§(currentSDBisthelastone) §if'N'then'REPAIRTERMINATED')›-ifIMthenUPDATESDBloopisrepeated I5.1.2„-checknextSDBallocatedindiskSAT(unlessSATtoberecreated)6“iferrorthen'ER:SDBNOH TALLOCATEDINSAT,PSN=X' ›-ifC-optionthenREPAIRexits ›-ifNIMthen'R:ALLOCATESDB'(£andSDBismarkedallocatedindiskSAT›-ifIMthen(BSRDMPALC)§'DUMP(Y/N)?'ªif'Y'thendumpnextSDBªif'N'thenskipdump§'R:ALLOCATESDB'§'REPAIR(Y/N)?'ªif'Y'thenSDBisallocatedªif'N'thenUPDATESDBloopis ®repeated >5.1.3„-checknextSDBnotalreadyallocatedinallocationSAT8“iferrorthen'ER:SDBSPACEALREADYALLOCATED,PSN=X'›-ifC-optionREPAIRexits&›-ifNIMthen'R:TRUNCATESDBCHAIN'©'REPAIR(Y/N)?'#§if'Y'thenSDBchainistruncated¨(currentSDBbecomeslast) §if'N'then'REPAIRTERMINATED')›-ifIMthenUPDATESDBloopisrepeated I5.1.4„-ifcurrentSDBwastobedeleted‚thenpriorSDB'Sforwardlinkis)‹setequaltoforwardlinkincurrentSDB>‘-ifIOerrorthenerrormessageissentand'REPAIRABORTED'$“elsenextSDBisprocessed(step2) <5.1.5„-checkSDBheaderreservedspaceiszero(BSRRSVCHK);‘-iferrorthen'ER:HDRRESERVEDFIELDNOTZERO,PSN=X'›-ifC-optionREPAIRexitselse'R:ZEROOUT'¢'REPAIR(Y/N)?'§if'Y'thenfieldiszeroed §if'N'then'REPAIRTERMINATED' %5.2 - Check each SDB entry as follows B5.2.1„-PSNofPDBmustbezeroorPDBmustbeondisk(BSRMPSNC)(‘-ifzerothenskiptillnextSDBentry(‘-iferrorthen'ER:PDBLINK,PSN=X'›-ifC-optionREPAIRexits$›-ifNIMthen'R:DELETEPDBCHAIN'©'REPAIR(Y/N)?' §if'N'then'REPAIRTERMINATED'&§if'Y'thenPDBchainforthecatalog$©isdeleted(catalogbecomesempty-#©allfilesinthecatalogarelost) ›-ifIMthen§'NEW?'.isrequested.PDBlinkisthencheckedagain.(0deletesPDBchain) F5.2.2„-PDBmustbeallocatedindiskSAT(unlessSATtoberecreated)8‘-iferrorthen'ER:PDBNOTALLOCATEDINSAT,PSN=X' ›-ifC-optionthenREPAIRexits ›-ifNIMthen'R:ALLOCATEPDB'!¥andPDBisallocatedindiskSAT›-ifIMthen(BSRDMPALC)§'DUMP(Y/N)?'$§if'Y'thendumpfirstPDBofchain§if'N'thenskipdump§'R:ALLOCATEPDB'§'REPAIR(Y/N)?'#§if'Y'thenfirstPDBisallocated§if'N'then(BSRGET4HEX)ª'R:GIVENEWPSN'ª'OLDXXXXXXXX'ª'NEW?'§isrequested.PDBPSNcheckis§repeated.‚0deletesPDBchain. ;5.2.3„-PDBmustnotbealreadyallocatedinallocationSAT‘-iferrorthen+›'ER:PDBSPACEALREADYALLOCATED,PSN=X'›-ifC-optionREPAIRexits$›-ifNIMthen'R:DELETEPDBCHAIN'©'REPAIR(Y/N)?'!§if'Y'thenPDBchainisdeleted'¨(catalogbecomesempty-allthefiles¨inthecatalogarelost) §if'N'then'REPAIRTERMINATED'›-ifIMthen(BSRDMPQNL)§'DUMP(Y/N)?' ¨if'Y'thenfirstPDBisdumped¨if'N'then‚skipdump§'QUIT(Y/N)?' ¨if'Y'then'REPAIRTERMINATED' ¨if'N'then±'R:GIVENEWPSN'±'OLDXXXXXXXX'±'NEW?'¨isrequested.NewPDBPSN%¨ischeckedagain.(0deleteschain). >5.2.4„-Catalognamemustbeallspacesoralpha,alphanumeric ‹(BSRCATCHK)#‘-iferrorthen'ER:CATALOGNAME' ›-ifC-optionthenREPAIRexitselse"OLD'XXXXXXXX'($08)"¢"NEW?"*isrequested.Upto8charactersshouldbe/begivenfornewcatalogname.Ifthenewname,alreadyexiststhen'ER:DUPLICATECATALOG'/issentand'NEW?'requestisrepeated-check madeinnextversionofREPAIR.3Anullresponse(CRonly)willsetcatalognameto allspaces. 15.2.5„-CheckreservedfieldinSDBentryiszero;‘-iferrorthen'ER:SDERESERVEDFIELDNOTZERO,PSN=X' ›-ifC-optionthenREPAIRexitselse'R:ZEROOUT'¢'REPAIR(Y/N)?'§if'Y'thenfieldiszeroed §if'N'then'REPAIRTERMINATED' 86. Write SDB to disk if marked for update. (BSR WRITSEC) >‡-Iferrorthen'IOERROR,D0=XFROMWRITESDB,PSN=X'is‰sentand'REPAIRTERMINATED'. I7. If next SDB pointer is not zero then continue with step 2 of SDB CHECKKƒ(readinnextSDBandcheckit).IfnoSDBsleft(VIDSDBpointeriszero)%I ƒthencontinuewithSATCHECKstep7. ========= PDB CHECK ========= 1. Reset IM if turned off 2. Send '*** PDB CHECK ***' 3. Get first/next SDB entry2‡-IfnomoreSDBentriescontinuewithFILECHECKD‡-IfneednextSDBwritecurrentSDBifupdated,thenreadnextSDB;‘-iferrorthen'IOERROR,D0=XFROMWRITESDB,PSN=X'¡'REPAIRABORTED'1“or'IOERROR,D0=XFROMREADSDB,PSN=X'and–'REPAIRABORTED' K4.ResetIM‚ifturnedofftillnextcatalog.IfNIMorC-optionthensend3ƒ':UN.CATALOG'toidentifycatalogbeingprocessed. >5. Read first/next PDB of the catalog's PDB chain (BSR GETSEC)D‰-IfnomorePDBsincurrentcatalogthengetnextcatalog(step3)G‰-IfneednextPDBwritecurrentPDBtodiskifflaggedforupdate.If2‹IOerrorthensenderrormsgand'REPAIRABORTED'>‰-IfIOerrorfromreadthen'IOERROR,D0=XFROMREADPDB,3‹PSN=X'or'CRCERRORFROMREADPDB,PSN=X'and‘-ifC-optionREPAIRexits‘-ifotherthanCRCerrorthen2'R:DELETEPDB'ifreadinfirstPDBsectorOK‚or''R:TRUNCATEPDBCHAIN'ifdidn't,and›-ifNIMthen'REPAIR(Y/N)?' §if'Y'thenrepairasindicated(§(ifdeletePDBthenchecknextPDBlink$§OK,thenupdatepriorPDB'sforward)§linkandprocessnextPDB-steps9.1.2-§9.1.5)&§(iftruncatePDBchainthensetprior$§PDB'sforwardlinkto0andprocess#§nextcatalog'sPDBchain-step3)"¥-if'N'then'REPAIRTERMINATED'&›-ifIMthenenter'UPDATEPDB?'loop.‘-ifCRCerrorthenPDBisflaggedforupdate ?6. If NIM or C-option skip till PDB information check (step 9). 7. Dump PDB in IM 8. 'UPDATE PDB?' loop in IM‰a.CR-terminatesloop<‰b.N-terminatesloopandturnsoffIMtillnextcatalog'sPDBcheckornexterrorA‰c.R-'WHAT?'unless'R:TRUNCATEPDBCHAIN'or'R:DELETEPDB'*preceededUPDATErequest,loopterminatedA‰d.D-deletecurrentPDB,uselinktonextPDB;terminatesloop‰e.A[$PSN],D$PSN-'WHAT?'‰f.Q-'REPAIRTERMINATED'1‰g.$[,N]-dumpPDB,ifN>4thenN=1isused9‰h.$PSN-dumpanysector(s),updateordumpPDBsectors$‰i.offset-updatefirstPDBsector=‰j.C-terminatesloop,REPAIRcontinuesasifincheck-onlymodetilldoneorerrorfound 9. Check PDB information 9.1‚CheckPDBheader H9.1.1„-usernumberandcatalognamemustbeequaltothoseinSDBentry'‹(testisskippedifPDBtobedeleted)<‘-iferrorthen'ER:USER#/CATALOGNAMECONFLICT,PSN=X'¡'SDB‚:XXXX.XXXXXXXX'¡'PDB‚:XXXX.XXXXXXXX' ›-ifC-optionthenREPAIRexitselse'R:SETEQUAL'¢'REPAIR(Y/N)?')§if'Y'thensetSDBuser#,catalognameªintoPDBheader §if'N'then¨-ifNIMthen©'R:TRUNCATEPDBCHAIN'©'REPAIR(Y/N)?'%«if'Y'thenpriorPDBissetlastin#¬catalog'sPDBchain,continuewith¬step3. «if'N'then'REPAIRTERMINATED' ¨-ifIMthenUPDATEPDBloopis ªrepeated E9.1.2„-checknextPDBPSNOK:zeroisOKornextPDBmustbeondisk ‹(BSRMPSNC)$‘-ifzerothenskiptillstep9.1.5(‘-iferrorthen'ER:PDBLINK,PSN=X'›-ifC-optionREPAIRexits&›-ifNIMthen'R:TRUNCATEPDBCHAIN'©'REPAIR(Y/N)?''§if'Y'thencurrentPDBissetlastinªcatalog'sPDBchain §if'N'then'REPAIRTERMINATED')›-ifIMthenUPDATEPDBloopisrepeated E9.1.3„-checknextPDBallocated(unlesstorecreateSAT)indiskSAT8‘-iferrorthen'ER:PDBNOTALLOCATEDINSAT,PSN=X' ›-ifC-optionthenREPAIRexits ›-ifNIMthen'R:ALLOCATEPDB'¥andPDBisallocated›-ifIMthen(BSRDMPALC)§'DUMP(Y/N)?'§if'Y'thendumpnextPDB§if'N'thenskipdump§'R:ALLOCATE'§'REPAIR(Y/N)?'§if'Y'thenallocatenextPDB(§if'N'thenUPDATEPDBloopisrepeated >9.1.4„-checknextPDBnotalreadyallocatedinallocationSAT:‘-iferrorthen'ER:PDBSPACEALREADYALLOCATED,PSN=X'›-ifC-optionexitREPAIR/›-ifNIMthen'R:TRUNCATEPDBCHAIN'iffirst«PDBsectorallocated,or$©'R:DELETEPDB'iffirsI tsectornot«allocated,and©'REPAIR(Y/N)?'$ªif'Y'thencurrentPDBissetlast#¬inchainornextPDBisdeletedby ¬obtainingitsforwardlink(the$¬newlinkischeckedagain,IOerror¬causes'REPAIRABORTED') ªif'N'then'REPAIRTERMINATED'%›-ifIMthen‚UPDATEPDB?isrepeated K9.1.5„-iftodeletecurrentPDBthensetpriorPDB'sforwardlinkequalto‹currentPDB'sforwardlink;‘-ifIOerrorthensenderrormessageand'REPAIRABORTED'(“elseprocessnextPDB(skiptostep10) ,9.1.6„-checkPDBheaderreservedfieldzero;‘-iferrorthen'ER:HDRRESERVEDFIELDNOTZERO,PSN=X'¡'R:ZEROOUT'¡'REPAIR(Y/N)?'¡if'Y'thenfieldiszeroed ¡if'N'then'REPAIRTERMINATED' 29.2 No check is made on file entries at this time. "10. Get next PDB in chain (step 5) ========== FILE CHECK ========== 71. Write any updated SDB and PDB in memory back to disk:‰IfIOerrorthensenderrormessageand'REPAIRABORTED'. &2. Reset IM if turned off in PDB CHECK 3. '*** FILE CHECK ***' is sent. 4. Get first/next SDB entry.EƒIfnomoreSDBentriesincurrentSDBreadinnextSDB(SDB'sarenoBƒlongerupdated,sonoSDBsarewrittentodiskduringFILECHECK)<‰-IfIOerrorthensenderrormessageand'REPAIRABORTED'.>‰-IfnomoreSDB'sandvolumerepairthendoFINALSATCHECK.(‰-IfnomoreSDB'sandfilerepairthen-–'ER:FILENOTFOUND'and'REPAIRTERMINATED' M5. If file repair skip all but specified catalog (i.e. skip SDB entries whoseC‰usernumberandcatalognamedonotmatchtheonegivenincommand‰line) !6. Get next PDB entry for catalogD‰-IfhavetoreadinnextPDBwritecurrentPDBtodiskifchanged,‹thenreadinnextPDB.E‰-IOerrorsnowcauseerrormessageand'REPAIRABORTED'tobesent.1‰-IfnomorePDBentriesincurrentcatalogthen6-ifdoingvolumerepairgogetnextcatalog(step4)2‘else'ER:FILENOTFOUND'and'REPAIRTERMINATED' K7. If empty entry skip. If deleted file entry then skip unless R-option on. *8. If file repair then check if found file‰ifnotthenskipentry,C‰ifdidthensetfile-foundflagtoquitREPAIRafterfilehasbeen checked.LƒIftorecoveradeletedfileskipallbutdeletedentries,thenskipunlessF‰matchwithgivenfilename(firstcharacteroffilenameisignored). E9. If NIM or C-option then send file's name 'UN:CATALOG.FILENAME.EXT'F…Ifdeletedfile(firstcharacteroffilenamezeroed)andR-optionon‰'RECOVERDELETEDFILE(Y/N)?'‰if'N'thenfileisskipped ‰if'Y'then6‘-iffilerepairthenentergivennameintoPDBentry“else'GIVENEWNAME'0˜'OLD"XXXXXXXX"($08)'ƒ(firstcharacteris'.')˜'NEW?'#˜newnameisenteredintoPDBentry0˜Innextversionifnewnamealreadyexiststhen'ER:DUPLICATEFILENAME'(iffilerepairthen'REPAIRTERMINATED'else'NEW?'isrepeated ?10. If NIM or C-option then skip till check PDB entry (step 13) 11. In IM dump PDB entry (PDE) 12. 'UPDATE PDE?' loop in IM‰a.CR-terminateloop3‰b.N-turnIMofftillnextcatalogornexterrorF‰c.R-recoverifentryfordeletedfile,terminateloop-elseWHAT??alsoWHAT?ifuserdidnotreplacefirstbyteinfilename(togivecompletefilename)#‰d.D-deletefile,terminateloop‰e.Q-'REPAIRTERMINATED'0‰f.$-dumpPDEagain(if'$,N'thenNignored)/‰g.$PSN-dumpanysector,updatesnotallowed‰h.offset-updatePDE‰i.A[$PSN],D$PSN-'WHAT?'=‰j.C-terminatesloop,REPAIRcontinuesasifincheck-onlymodetilldoneorerrorfound 13.‚CheckPDEinformation 813.1 If deleted file skip entry. If empty entry skip it. 713.2 File name must be alpha, alphanumeric (BSR NAMECK) †-‚Iferrorthen'ER:FILENAME'—'OLD"XXXXXXXX"($08)'—'NEW?'A‰isrequested.Ifnull(CR)response,'WHAT'followedby'NEW'is-‰displayed,elsethenewfilenameischecked.‰ReferenceNOTE1. 713.3 Extension must be alpha, alphanumeric (J BSR NAMECK) †-‚Iferrorthen'ER:EXTENSION'—'OLD"XX"($02)'—'NEW?'E‰isrequested.Extensionischeckedagain.Ifnull(CR)responsethen'‰'WHAT'followedby'NEW?'isdislayed.‰ReferenceNOTE1. N13.4 If file name was changed a check is made to insure no duplicate file name$…resulted-checkedinnextversion.#ˆ-Iffilenamealreadyexiststhen;“'ER:DUPLICATEFILENAME'issentandnewfilenameand/or<“extensionisrequestedasabovedependingonwhichfield(s)“werechanged. ,13.5 Check reserved fields zero (BSR RSVCHK);‡-Iferrorthen'ER:PDERESERVEDFIELDNOTZERO,PSN=X'!›(whereXisstartingPSN‚ofPDB)—'R:ZEROOUT'—'REPAIR(Y/N)?'—if'Y'thenfieldiszeroed4—if'N'thenfileisskipped(continuewithstep15) '13.6 Check attribute one of known types*‡-Iferrorthen'ER:FILEATTRIBUTE=XX' ‘-ifC-optionthenREPAIRexits‘-if‚NIMthen'R:DELETEFILE' 'REPAIR(Y/N)?' if'Y'thenfileisdeleted if'N'thenfileisskipped)‘-ifIMthenUPDATEPDEloopisrepeated *14. Check file depending on its attribute. 14.1 Contiguous files C14.1.1ƒ-CheckstartingdatablockPSNanddatablocklengthisOK:%‹notzero,andDBondisk(BSRMPSNC)8‘-iferrorthen'ER:DBPSNERROR,PSN=X,LENGTH=X' ›-ifC-optionthen‚REPAIRexits+›-ifinIMthenrepeate'UPDATEPDE?'loop"›-ifinNIMthen'R:DELETEFILE'¬'REPAIR(Y/N)?'¬if'Y'thenfileisdeleted¬if'N'thenfileisskipped I14.1.2ƒ-IfnotrecoveringadeletedfilethencheckDBsectorsallocated)‹indiskSAT(unlessSATtoberecreated)7‘-Iferrorthen'ER:DBNOTALLOCATEDINSAT,PSN=X' ›-ifC-optionthenREPAIRexits›-ifNIMthen'R:ALLOCATEDB'¥andDBisallocated›-ifIMthen(BSRDMPALC)§'DUMP(Y/N)?'§if'Y'thendumpDB§if'N'thenskipdump§'R:ALLOCATEDB'§'REPAIR(Y/N)?'§if'Y'thenDBisallocated#§if'N'thenrepeatUPDATEPDEloop I14.1.3ƒ-Checksectorsnotallocatedifrecoveringadeletedfile(unless‹SATtoberecreated)8‘-iferrorthen'ER:DBREALLOCATEDAFTERFILEDELETED, ¢PSN=X'and¡'R:DELETEFILE'¡'REPAIR(Y/N)?'"§if'Y'thenfileisdeletedagain§if'N'thenfileisskipped?‘-ifnoerrorthenDBsectorsaremarkedallocatedindiskSAT A14.1.4ƒ-CheckDBsectorsnotalreadyallocatedinallocationSAT:‘-Iferrorthen'ER:DBSPACEALREADYALLOCATED,PSN=X' ›-ifC-optionthenREPAIRexits›-ifNIMthen'R:DELETEFILE'©'REPAIR(Y/N)?'©if'Y'thendeletefile©if'N'thenskipfile$›-ifIMthenrepeatUPDATEPDEloop 014.1.5ƒ-Checkreservedfieldszero‚(BSRRSVCHK)9“Iferrorthen'ER:PDERESERVEDFIELDNOTZERO,PSN=X'!¢(whereXisstartingPSNofPDB)¡'R:ZEROOUT'¡'REPAIR(Y/N)?'¢if'Y'thenfieldiszeroed¢if'N'thenfileisskipped .14.1.6ƒ-IfIMUPDATEDB?loopinnextversion“a.CR,N-terminateloop“b.Q-'REPAIRTERMINATED'#“c.D-deletefile,terminateloop“d.A<$PSN>,D$PSN-'WHAT?':“e.$PSN-dumpanysector(s),updateordumpDBsector(s)&“f.offset-updatefirstsectorofDB8“g.$-dumpDBsector(s),if'$,N'andN>DIRFE+1thenšN=1isforced=“h.C-terminatesloop,REPAIRcontinuesasifincheck-onlyšmodetilldoneorerrorfound 14.2 Duplicate key indexed file C14.2.1ƒ-Checkdirectoryentryfornoncontiguousfiles(BSRCDIRNC)-‹seeNONCONTIGUOUSFILEDIRECTORYENTRYCHECK F14.2.2ƒ-CheckkeysizeOK:zeroisOK,mustbeeven,lessthanrecord‹lengthandlessthan100)‘-iferrorthen'ER:KEYSIZE=XX,(D)'*“(where'D'stands‚forduplicatekeyfile) ›-ifC-optionthenREPAIRexits›-ifNIMthen§'R:ZEROOUT'§'REPAIR(Y/N)?'§if'Y'thenzerooutkey§if'N'then(BSRDELFIL)±'R:DELETEFILE'±'REPAIR(Y/N)?'²if'Y'thendeletefile²if'N'thenskipfile ›-ifIMthen(§'NEW?'isrequestedtogetnewonebyte §keylength§testisrepeatedfornewvalue (14.2.3ƒ-CheckFABsandDBs(BSRFDBCHK)<‹seeFORWARDoJ rBACKWARDFAB/DBCHECKdependingondirectoryE‹entrycheckresults-duringfirstversiononlytheforwardFABlink ‹isused. 14.3 Indexed file check C14.3.1ƒ-Checkdirectoryentryfornoncontiguousfiles(BSRCDIRNC)-‹seeNONCONTIGUOUSFILEDIRECTORYENTRYCHECK D‰-CheckkeysizeOK:zeroisnotOK,mustbeeven,lessthanrecord‹lengthandlessthan100)‘-iferrorthen'ER:KEYSIZE=XX,(I)'7“(where'I'standsforindexedfile,noduplicatekeys) ›-ifC-optionthenREPAIRexits›-ifNIMthen¤'R:DELETEFILE'¤'REPAIR(Y/N)?'¤if'Y'thendeletefile¤if'N'thenskipfile ›-ifIMthen(§'NEW?'isrequestedtogetnewonebyte §keylength§testisrepeatedfornewvalue (14.3.3ƒ-CheckFABsandDBs‚(BSRFDBCHK)<‹seeFORWARDorBACKWARDFAB/DBCHECKdependingondirectory>‹entrycheckresults-duringfirstversionofREPAIRonlythe‹forwardFABlinksareused. 14.4 Sequential file check C14.4.1ƒ-Checkdirectoryentryfornoncontiguousfiles(BSRCDIRNC)-‹seeNONCONTIGUOUSFILEDIRECTORYENTRYCHECK (14.4.2ƒ-CheckkeysizeOK:‚mustbezero)‘-iferrorthen'ER:KEYSIZE=XX,(S)''“(where'S'standsforsequentialfile) š-‚ifC-optionthenREPAIRexitselse¢'R:ZEROOUT'¢'REPAIR(Y/N)?'¢if'Y'thenzerooutkey ¢if'N'then¦'R:DELETEFILE'¦'REPAIR(Y/N)?'§if'Y'thendeletefile§if'N'thenskipfile (14.4.3ƒ-CheckFABsandDBsƒ(BSRFDBCHK)<‹seeFORWARDorBACKWARDFAB/DBCHECKdependingondirectory<‹entrycheckresults-duringthefirstFABversiononlythe‹forwardFABlinksareused. F15. If file found flag was set any updated sectors are written to diskD‰andiffilenotskippedordeletedthen'FILEOK'and'REPAIRDONE'8‰else'FILEDELETED'or'FILESKIPPED'and'REPAIRDONE'#„elsenextfileischecked(step6)  ===============FINAL SAT CHECK=============== 1. '*** SAT CHECK ***' M2. Continue with SAT CHECK step 8 (check unused sectors not marked allocated)   2==================================================1NONCONTIGUOUSFILEDIRECTORYENTRYCHECK‚(CDIRNC)2================================================== .1. Check DB size is OK: must be greater than 3#‡-iferrorthen'ER:DBSIZE=XX' ‘-ifC-optionthenREPAIRexits4‘-ifIMthenrepeate'UPDATEPDE?'loop(FILECHECK ˜step12)‘-ifNIMthen‚'R:DELETEFILE' 'REPAIR(Y/N)?'if'Y'thendeletefileif'N'thenskipfile &2. Check last DB size equal to DB size#‡-Iferrorthen'ER:LASTDBSIZE'—'DBSIZE=XX' ‘-ifC-optionthenREPAIRexits“else'R:SETEQUAL'˜'REPAIR(Y/N)?'1™if'Y'thenDBsizeisenteredintolastDBsizefield ™if'N'then›-ifNIMthen'R:DELETEFILE'©'REPAIR(Y/N)?'©if'Y'thenfileisdeleted©if'N'thenfileisskipped(›-ifIMthen‚repeate'UPDATEPDE?'loop¨(FILECHECKstep12) J3. Check record length OK: zero is OK, must be even, less than or equal to5ƒ(DBsize)*256-i.e.recordmustfitintodatablock+‡-iferrorthen'ER:RECORDLENGTH=XXXX' ‘-ifC-optionthenREPAIRexits8‘-ifIMthen'UPDATEPDE?'loopisrepeated(FILECHECK —step12)‘-ifNIMthen'R:DELETEFILE'Ÿ'REPAIR(Y/N)?'Ÿif'Y'thenfileisdeletedŸif'N'thenfileisskipped /4.CheckFABsizeOK:notzero‚andlessthan20#‡-Iferrorthen'ER:FABSIZE=X' ‘-ifC-optionthenREPAIRexits,‘-ifIMthen'UPDATEPDE?'loopisrepeated‘-ifNIMthen'R:DELETEFILE'Ÿ'REPAIR(Y/N)?'Ÿif'Y'thenfileisdeletedŸif'N'thenfileisskipped  "5. Check EOF and EOR fields are OK4‰IfEOF=-1thenEORmustalsobe-1orviceversa,+‰EOFcanbezerobutmustbelessthanMPSN-‚Iferrorthen'ER:EOF/EOR''›-ifC-optionthen'REPAIRTERMINATED'else¡'R:RECALCULATE'¡'REPAIR(Y/N)?'*¡if'Y'thenREPAIRwillcountsectorsand'§recordsastheyareencounteredduring)§FAB/DBcheck,thenewvaluesareentered&§intoPDEattheendofFAB/DBcheckK -)§EOR/EOFissettozerofornow,continue§withstep6.2 ¡if'N'then¥-ifNIMthen(BSRDELFIL)±'R:DELETEFILE'±'REPAIR(Y/N)?'²if'Y'fileisdeleted²if'N'fileisskipped(¥-ifIMthenrepeate'UPDATEPDE?'loop J6. Check first FAB PSN (check first FAB pointer first, then if error checkMƒlastFABpointerandcheckFAB/DBsusingbackwardFABlinksinlaterversion ƒofREPAIR) ,6.1 If EOF = EOR = -1 then FAB PSN must be 0‡-Iferrorthen'ER:EOF/EOR''‘-ifC-optionthen'REPAIRTERMINATED'“else—'R:RECALCULATE'—'REPAIR(Y/N)?',–-if'Y'thenREPAIRwillcountsectorsand'˜recordsastheyareencounteredduring)˜FAB/DBcheck,thenewvaluesareentered3˜intoPDE,continuewithstep6.2(setEOF/EOR=0)–-if'N'thenŸ-ifNIMthen(BSRDELFIL)§'R:DELETEFILE'§'REPAIR(Y/N)?'§if'Y'fileisdeleted§if'N'fileisskipped0Ÿ-ifIMthenrepeate'UPDATEPDE?'loop(repeat§fromFILECHECKstep12) B‡-IfnoerrorthenlastFABPSNmustbealsozero(fileisempty)6‘-iferrorthen‚'ER:EMPTYFILE-LASTFABPSNNOT0''•-ifC-optionthen'REPAIRTERMINATED'•-ifNIMthen'R:ZEROOUT'£'REPAIR(Y/N)?'1›-if'Y'thenzerolastFABpointerinPDE,filežcheckisdone›-if'N'thenskipfile6•-ifIMthenrepeatUPDATEPDEloop(repeatfromFILE›CHECKstep12)3‘-ifnoerrorthenfilecheckdone-fileisempty C6.2 Check first FAB PSN OK: not zero, FAB on disk (EOF/EOR .NE. -1):‡-ifzeroandiflastFABPSN=0then'ER:NOFABLINKS'Ž'R:SETFILEEMPTY'*andEOF/EORaresetto-1(fileisempty)file'scheckiscomplete7‰elseiferrorthen'ER:BADFABFORWARDLINK,PSN=X' Œ-ifC-optionthenREPAIRexits)•-IfIMthenUPDATEPDEloopisrepeated•-IfNIMthen'R:DELETEFILE'£'REPAIR(Y/N)?'ŸIf'Y'thenfileisdeletedŸIf'N'thenfileisskipped•(inlaterversiondoinstead:!•'R:USEFABBACKWARDLINKSONLY'•'REPAIR(Y/N)?'0™if'Y'thenFABsandDBsarecheckedusingonly)FABbackwardlinks.ThefirstFABPSNis1updatedinPDEwhenendofFABchainisreached.1(firstFABpointerissettozerofornow;itis.updatedwhentheendofthechainisreached)™if'N'‚andNIMthen§'R:DELETEFILE'§'REPAIR(Y/N)?'§if'Y'fileisdeleted§if'N'fileisskipped4™if'N'andIMthenrepeate'UPDATEPDE?'loop,FILE CHECKstep12) K6.3 If first FAB PSN not OK then check last FAB PSN is OK: not zero and FAB„ondisk.‚(EOF/EOR.NE.-1),„(notapplicableinfirstversionofREPAIR)5‡-Iferrorthen'ER:BADFABBACKWARDLINK,PSN=X'‰(bothFABlinksarebad) Œ-ifC-optionthenREPAIRexitsŒ-ifNIMthen(BSRDELFIL)˜'R:DELETEFILE'˜'REPAIR(Y/N)?'˜if'Y'fileisdeleted˜if'N'fileisskipped=Œ-ifIMthenrepeate'UPDATEPDE?'loop(FILECHECKstep12) H6.4 If first FAB PSN OK and not recovering a deleted file then check FAB.„allocatedindiskSAT(ifnotrecreatingSAT)6iferrorthen'ER:FABNOTALLOCATEDINSAT,PSN=X''‘-ifC-optionthen'REPAIRTERMINATED'‘-ifIMthen(BSRDMPALC)'DUMP(Y/N)?'if'Y'thendumpfirstFABif'N'thenskipdump'R:ALLOCATEFAB''REPAIR(Y/N)?'if'Y'thenallocateFAB#if'N'thenrepeatUPDATEPDEloop,(duringlaterversionofREPAIRdoinstead:-if'N'then'R:USEFABBACKWARDLINKSONLY'©'R:REPAIR(Y/N)?'(¥if'Y'thenfirstFABPSNiszeroedand!«lastFABPSNischeckedtobeOK#¥if'N'repeate'UPDATEPDE?'loop) ‘-ifNIMthen'R:ALLOCATEFAB'›andallocatefirstFAB K6.5 If first FAB PSN not OK and not recovering deleted file then check last*„FABallocated(usingbackwardlinksonly),„(notapplicableinfirstversionofREPAIR)6‰iferrorthen'ER:FABNOTALLOCATEDINSAT,PSN=X''‘-ifC-optionthen'REPAIRTERMINATED'‘-ifIMthen(BSRDMPALC)'DUMP(Y/N)?'if'Y'thendumplastFABif'N'thenskipdump'R:ALLOCATEFAB''REPAIR(Y/N)?'if'Y'thenallocatelastFAB'if'N'thenrepeate'UPDATEPDE?'loop ‘-iK fNIMthen'R:ALLOCATEFAB'›andallocatelastFAB F6.6 If first FAB PSN OK and recovering deleted file then check FAB not„allocatedindiskSATB‡-iferrorthen'ER:FABREALLOCATEDAFTERFILEDELETED,PSN=X''‘-ifC-optionthen'REPAIRTERMINATED'—else‚'R:DELETEFILE''REPAIR(Y/N)?'if'Y'thendeletefileif'N'thenskipfile ,‰-ifnoerrorthenallocateFABindiskSAT K6.7IffirstFABPSNnotOKand‚recoveringdeletedfilethenchecklastFAB„notallocated‚indiskSAT,„(notapplicableinfirstversionofREPAIR)A‡-iferrorthen'ER:FABREALLOCATEDAFTERFILEDELETED,PSN=X''•-ifC-optionthen'REPAIRTERMINATED'—else„'R:DELETEFILE'Ÿ'REPAIR(Y/N)?' if'Y'fileisdeleted if'N'fileisskipped 0‡-ifnoerrorthenFABisallocatedindiskSAT J6.8 If first FAB PSN OK then check that first FAB is not already allocated;‡-iferrorthen'ER:FABSPACEALREADYALLOCATED,PSN=X''‘-ifC-optionthen'REPAIRTERMINATED'“else"—ifIMthenrepeatUPDATEPDEloop —if‚NIMthen¦'R:DELETEFILE'¦'REPAIR(Y/N)?'¦if'Y'thendeletefile¦if'N'thenskipfile)“(duringlaterREPAIRversiondoinstead:;“else'R:DELETEFAB'iffirstsectornotyetallocated,or5˜'R:USEFABBACKWARDLINKSONLY'iffirstsectorwas ›allocated˜'REPAIR(Y/N)?' if'Y'thenrepairasindicatedif'N'andNIMthen¦'R:DELETEFILE'¦'REPAIR(Y/N)?'¦if'Y'thendeletefile¦if'N'thenskipfile/if'N'andIMthenrepeate'UPDATEPDE?'loop) E6.9 If first FAB PSN not OK then check last FAB not already allocated9‰iferrorthen'ER:FABSPACEALREADYALLOCATED,PSN=X',„(notapplicableinfirstversionofREPAIR)'‘-ifC-optionthen'REPAIRTERMINATED'7“else'R:DELETEFAB'iffirstsectornotyetallocated+˜'R:DELETEFILE'iffirstsectorallocated˜'REPAIR(Y/N)?' if'Y'thenrepairasindicatedif'N'andNIM‚thenskipfile.if'N'andIMthenrepeate'UPDATEPDE?'loop G6.10 If first FAB OK do forward FAB/DB check until find error or end ofD…FABchain-iferrorthenuserhasoptiontocontinuewithbackwardG…FAB/DBcheck,thenwhendonethetwochainpartsarecombined-duringH…firstversiononlyforwardFABcheckisprocessed,anyerrorwillcauseH…FABchaintobetruncatedunlesstheusersuppliesnextFABlinkinIM. K6.11 If first FAB not OK but last FAB OK then do backward FAB/DB check only…innextversion. ==============================FORWARDFAB/DBCHECK‚-FDBCHK============================== N‚NOTE:THISISTHEONLYDIRECTIONTHATTHEFAB'SOFACORRECTFILEARECHECKED FˆDURINGFIRSTVERSIONTHISISTHEONLYDIRECTIONTHATTHEFABCHAINIS ˆPROCESSED. #1. Allocate FAB/DB segment for file>‡-iferrorthen'SEGMENTALLOCATIONERROR,D0=X,SEG:FDBS'‰and'REPAIRTERMINATED' "2. Get first/next FAB (BSR GETSEC)E‡-ifnonetheneitherupdateEOF/EORinPDEorcheckthatcalculated&‰valuesforEOF/EORmatchthoseinPDE2‘-iferrorthen'ER:EOF/EORANDFAB/DBCONFLICT''›-ifC-optionthen'REPAIRTERMINATED'else¡'R:RECALCULATE'+andcalculatedvaluesareenteredintoPDE‰Filecheckiscomplete2›-iffilerepairthen'FILEOK'and'REPAIRDONE'/elsedeallocateFAB/DBbuffer,checknextfile?‡-if‚readerrorthen'IOERROR,D0=XFROMREADFAB,PSN=X'&‰or'CRCERRORFROMREADFAB,PSN=X''‘-ifC-optionthen'REPAIRTERMINATED'+‘-ifCRCerrorthenFABupdateflagisset‘-ifotherthanCRCerrorthen3'R:DELETEFAB'iffirstFABsectorwasreadinOKž(currentFABisdeleted)or3'R:TRUNCATEFABCHAIN'iffirstFABsectorwasno žreadinOK"(duringlaterversiondoinstead:1'R:SWITCHTOUSINGBACKWARDLINKS'iffirstFAB2žsectorwasnotreadinOK[priorFABwillbelast žgoodFABinforwardFABchain])$ifIM'UPDATEFAB?'loopisenteredifNIMthen'REPAIR(Y/N)?' £if'Y'thenrepairasindicated£if'N'then'R:DELETEFILE'¯'REPAIR(Y/N)?'¯if'Y'thendelL etefile¯if'N'thenskipfile 03. If FAB is empty then 'ER: EMPTY FAB, PSN = X'ˆifC-optionthenREPAIRexitsHˆelse'R:DELETEFAB'andFABisdeletedafteritsforwardlinkhasbeen!ˆcheckedtobeOK(steps6.1-6.7) 4. In IM dump FAB*ƒIfNIMorC-optionthen‚skiptillstep6. 5. In IM 'UPDATE FAB?'‰a.CR-terminateloop5‰b.N-terminateloopandturnoffIMtillnextfile‰c.Q-'REPAIRTERMINATED'D‰d.D-deletecurrentFAB,forwardFABpointerisusedfornextFAB?‰e.R-'WHAT?'unlessREPAIRR-messagepreceededinwhichcase-repairisdoneasindicated;terminatesloop‰f.A[$PSN]-'WHAT?'‰g.D$PSN-‚'WHAT?':‰h.$,$PSN-dumpsector(s),dumporupdateFABsector(s)1–if'$,N'whereN>FABsizethenN=1isforced'‰i.offset-updatefirstsectorofFAB=‰j.C-terminatesloop,REPAIRcontinuesasifincheck-onlymodetilldoneorerrorfound 6. Check FAB headerHƒIfFABcontainstoomanyerrorsthen'ER:BADFABCONTENTS'andtheFABƒchainistruncated. 6.1 If next FAB PSN = 0 then2‰checkcurrentFABPSN‚sameaslastFABPSNinPDE?‘-ifsamethenaftercurrentFABischeckedfilecheckisdone7‘-ifnotsamethen'ER:BADFABFORWARDLINK,PSN=0'¤'LASTFABPSN=X'%ifC-optionthen'REPAIRTERMINATED'else¤'R:TRUNCATEFABCHAIN'+¢-ifNIMthensetcurrentFABPSNintoPDE¤lastFABpointerfield¢-ifIMthen'REPAIR(Y/N)?'!¤-if'Y'thentruncateFABchain'¦bysettingcurrentFAB'sPSNintolast¦FABpointerfieldinPDE(¦(currentFABislastonetobechecked)¤-if'N'then©repeatUPDATEFABloop!©(duringlaterversionofREPAIR:$©'R:SWITCHTOUSINGBACKWARDLINKS' ©and‚repeate'UPDATEFAB?'loop) F6.2 If next FAB PSN not zero then next FAB must be on disk (BSR MPSNC)4‡-iferrorthen'ER:BADFABFORWARDLINK,PSN=X''‘-ifC-optionthen'REPAIRTERMINATED'“else'R:TRUNCATEFABCHAIN'"–ifIMthenrepeatUPDATEFABloop:–ifNIMthenrepairasindicated(currentFABbecomeslast ˜inchain))“(duringlaterREPAIRversiondoinstead:)“else'R:SWITCHTOUSINGBACKWARDLINKS'4•(switchismadeaftercurrentFABhasbeenchecked)(–-ifIMthenrepeate'UPDATEFAB?'loop"–-ifNIMthenrepairasindicated œcurrentFABislastgoodFABinœforward‚chain- œlaterthetwopartsarejoined) F6.3 If next FAB exists and not doing file recovery then check next FAB„allocatedindiskSAT8‡-iferrorthen'ER:FABNOTALLOCATEDINSAT,PSN=X''‘-ifC-optionthen'REPAIRTERMINATED' ‘-ifNIMthen'R:ALLOCATEFAB'›andallocateFAB‘-ifIMthen(BSRDMPALC)'DUMP(Y/N)?'if'Y'thendumpnextFABif'N'thenskipdump'R:ALLOCATEFAB''REPAIR(Y/N)?'if'Y'thenallocateFAB'if'N'thenrepeate'UPDATEFAB?'loop  F6.4 If next FAB exists and doing file recovery then check next FAB not „allocated.A‡-iferrorthen'ER:FABREALLOCATEDAFTERFILEDELETED,PSN=X''•-ifC-optionthen'REPAIRTERMINATED'—else—'R:DELETEFILE'—'REPAIR(Y/N)?'—-if'Y'thenfileisdeleted—-if'N'thenfileisskipped+‡-ifnoerrorFABisallocatedindiskSAT 26.5 If next FAB exists check not already allocated;‡-iferrorthen'ER:FABSPACEALREADYALLOCATED,PSN=X''•-‚ifC-optionthen'REPAIRTERMINATED'˜else2—'R:DELETEFAB'iffirstsectornotallocated,or—'R:TRUNCATEFABCHAIN'$—-ifIMthenrepeatUPDATEFABloop6—-ifNIMthenrepairasindicated(ifdeleteFABthen3™nextFABlinkisobtainedandtestisrepeatedfor4™newlink;iftruncatethencurrentFABbecomeslast™FABinthechain))—(duringlaterREPAIRversiondoinstead:4—'R:SWITCHTOUSINGBACKWARDLINKS'iffirstsector ˜allocated6—-if‚NIMrepairasindicated(ifdeleteFABthennext2™FABlinkisobtainedandtestisrepeatedfornew4™link;ifswitchlinksthenswitchaftercurrentFAB™has‚beenchecked)$—-if‚IMrepeate'UPDATEFAB?'loop) !6.6 If FAB is empty it is deleL ted N6.7 If current FAB is to be deleted update link in prior FAB, process next FABC‰-IfIOerrorfromreadthenerrormessageand'REPAIRTERMINATED' I6.8 Check backward link in FAB same as PSN of prior FAB, or 0 if no prior„FAB.?‡-forcesameifFABdeleted(cannothaveproperbackwardlink)5‡-iferrorthen'ER:BADFABBACKWARDLINK,PSN=X'—'PRIORFABPSN=X''•-ifC-optionthen'REPAIRTERMINATED'—else-šifforwardlink‚wasalsobadandinNIMthen-štruncateFABchain(priorFABlastinchain)6š(innextversionswitchtobackwardlinks);otherwise—'R:FIXLINK'4—ifNIMthenbackwardlinkissettoequalpriorFAB —ifIMthenš'REPAIR(Y/N)?'4™if'Y'thenbackwardlinkissettoequalpriorFAB™if'N'thenfileisskipped :6.9 Check header key field is OK: equal to file's key size(‡-iferrorthen'ER:KEYSIZE=XX(H)''•-ifC-optionthen'REPAIRTERMINATED'—else"š'R:SETEQUALTOFILE'SKEYSIZE'šifNIMthensetequal šifIMthen'REPAIR(Y/N)?'if'Y'thenfixkeyfieldif'N'then'R:DELETEFILE'£'REPAIR(Y/N)?'£if'Y'thendeletefile£if'N'thenskipfile /6.10Checkheaderkeynotlessthan‚priorFAB's…lastkey‚ifindexedfile)‡-iferror'ER:FAB/DBKEYCONFLICT(H)''-ifC-optionthen'REPAIRTERMINATED'’else—'R:RECALCULATE'—ifNIMthensetequal —ifIMthenœ'REPAIR(Y/N)?'/œif'Y'thensetequaltolastkeyofpriorFABœif'N'then'R:DELETEFILE'¨'REPAIR(Y/N)?'¤if'Y'thendeletefile¤if'N'thenskipfile7. Check each FAB entry C7.1†-ifDBPSN=0thenrecalculateFABusefractionandwriteFAB?‹todiskifFAB‚updated,gochecknextFAB‚(step2)(switchto:‹usingbackwardFABlinksifsoindicatedinnextversion) ž ‡> I ˜A  < ¨8 °7 ¸= ÀG ÈE ÐT Ø77.2†-checkkeyfieldlengthequaltokeysizeforfile“-iferrorthen'ER:KEYSIZE=XX(E)'›-ifC-optionthen'REPAIRTERMINATED'else"¢'R:SETEQUALTOFILE'SKEYSIZE'¢ifNIMthensetequal ¢ifIMthen¤'REPAIR(Y/N)?'(¤if'Y'thenforcekeylengthintofield¤if'N'then'R:TRUNCATEFAB'®'REPAIR(Y/N)?'#¨if'Y'thensetendofFABmarkat ªcurrentFABentry,gotostep8¨if'N'thenskipfile !7.3†-checkDBPSN‚OK:DBondisk,‘-iferrorthen'ER:DBPSNERROR,PSN=X''›-ifC-optionthen'REPAIRTERMINATED' ›-ifIMthen¡'NEW?''¡ifnewPSN=0thentheDB'sFABentry+¡isdeleted,otherwisethetestisrepeated›-ifNIMthen'R:DELETEDB'¤andDB'sFABentryisdeleted 97.4†-checkDBallocatedifnotrecoveringadeletedfile7‘-iferrorthen'ER:DBNOTALLOCATEDINSAT,PSN=X''›-ifC-optionthen'REPAIRTERMINATED'3›-ifNIMthen'R:ALLOCATEDB'andDBisallocated›-ifIMthen(BSRDMPALC)§'DUMP(Y/N)?'§if'Y'thendumpDB§if'N'thenskipdump§'R:ALLOCATEDB'§'REPAIR(Y/N)?'§if'Y'thenallocateDB §if'N'then'R:GIVENEWVALUE'³'OLD=XXXXXXXX'³'NEW?'³if0thenDBandFABentry ³aredeleted³elsenewDBPSNischecked³again 97.5†-checkDBnotallocatedifrecoveringadeletedfile‘-iferrorthen0'ER:DBREALLOCATEDAFTERFILEDELETED,PSN=X''›-ifC-optionthen'REPAIRTERMINATED'else 'R:DELETEDB' anddeleteDB'sFABentry%‘-ifOKthenallocateDBindiskSAT $7.6†-checkDBnotalreadyallocated:‘-iferrorthen'ER:DBSPACEALREADYALLOCATED,PSN=X''›-ifC-optionthen'REPAIRTERMINATED'else¡'R:DELETEDB'"¡ifNIMthendeleteDB'sFABentry¡ifIMthen'REPAIR(Y/N)?'"§if'Y'thendeleteDB'sFABentry§if'N'then'DUMP(Y/N)?'­if'Y'thendumpDB­elseskipdump­'SKIP(Y/N)?'­if'Y'thenskipfile­if'N'then'R:GIVENEWPSN'¹'OLDXXXXXXXX'¹'NEW?'®0deletesdatablock,else®newPSNischeckedagain M J7.7†-checkDBsectors-in-usecount(FDBsize)islessthanorequaltoDB‹size‚andnotzero‘-iferrorthen'ER:FDBSIZE=XX''DBSIZE=XX''›-ifC-optionthen'REPAIRTERMINATED'›-ifNIMthen¢'R:DELETEDB'andDB'sFAB£entryisdeleted ›-ifIMthen¢'R:GIVENEWVALUE' ¢'OLDXX'¢'NEW?'2ž0deletesdatablockanditsFABentry,otherwisežnewvalueischeckedagain !7.8†-readinDB'ssectorsinuse3‘-ifpreviousDBwasupdatedwriteitbacktodisk›-ifIOerrorthen*Ÿ'IOERROR,D0=XFROMWRITEDB,PSN=X'Ÿ'R:DELETEDB'Ÿ'REPAIR(Y/N)?'§if'Y'thendeleteDB§if'N'thenskipfile;‘-ifIOerrorthen'IOERROR,D0=XFROMREADDB,PSN=X'%“or'CRCERRORFROMREADDB,PSN=X'-‘-ifIOerrorandC-optionthenREPAIRexits(‘-ifCRCerrorthensetDBupdatedflag'‘-ifnon-CRC‚errorthen'R:DELETEDB' ¥-ifIMthendoUPDATEDB?loop§elseª'REPAIR(Y/N)?'#«if'Y'deleteDBanditsFABentry«if'N'thenskipfile *7.9†-ifNIMorC-optionthenskipto7.11 "7.10…-ifIMthen'UPDATEDB?loop“a.CR-terminatesloop6“b.N-terminatesloopandturnsoffIMtillnextFAB“c.Q-'REPAIRTERMINATED'7“d.$,$PSN,offset-dumpsector(s),dumporupdateDB"“e.D-deleteDB,terminatesloop“f.D$PSN,A[$PSN]-'WHAT?'8“g.R-'WHAT?'unlessREPAIRmessagepreceededinwhich2šcaserepairisdoneasindicated,terminatesloop=“h.C-terminatesloop,REPAIRcontinuesasifincheck-onlyšmodetilldoneorerrorfound 7.11…-checkDB=7.11.1-ifVRLthennumberofrecordsmustequalFABentry's •recordcount-›-iferrorthen'ER:FAB/DBRECORDCONFLICT''¢-ifC-optionthen'REPAIRTERMINATED'¤else«'R:RECALCULATE'¨andforce#ofrecords¨foundinDBintoFABentry7“-ifVRLthennumberofsectorsmustequalFABentry's •sectorcount-›-iferrorthen'ER:FAB/DBSECTORCONFLICT''¢-ifC-optionthen'REPAIRTERMINATED'¤else«'R:RECALCULATE'¨andforce#ofsectors¨foundinDBintoFABentry  C7.11.2-ifVRLthenlastrecordinDBmustbeeitherfollowedwith9•azerolengthrecordoritmustendattheendofDBand9•ifnon-nullkeysrecordlengthsmustbegreaterthankey•size+›-iferrorthen'ER:RECORDLENGTH=XXXX''¢-ifC-optionthen'REPAIRTERMINATED'¤else¥-ifNIMthen'R:TRUNCATEDB' §andtruncateDBafterlastgood®record%¥-ifIMthenrepeat'UPDATEDB?loop <7.11.3-ifFRLthennumberofrecordsspecifiedinFABmust4•fitintotheDBandremainingDBspacemustbezero-›-iferrorthen'ER:FAB/DBRECORDCONFLICT, ¤PSN=X''¢-ifC-optionthen'REPAIRTERMINATED'¢-ifNIMthen'R:DELETEDB'¥andDBisdeleted'¢-ifIMthenrepeate'UPDATEDB?'loop @7.11.4-ifnon-nullkeysthencheckkeysareinascendingorder.•andthatkeysareonlyequalifduplicatekey•file,›-iferrorthen'ER:DBKEYORDER,PSN=X''ž-ifC-optionthen'REPAIRTERMINATED' else‚'ER:TRUNCATEDB'¤-ifNIM‚thentruncateDB¬afterlastgoodrecord'¤-ifIMthenrepeate'UPDATEDB?'loop ?7.11.5-ifnon-nullkeysthencheckFABentrykeygreaterthan•orequaltolastkeyofDB.›-iferrorthen'ER:FAB/DBKEYCONFLICT(L)'"¢(where'L'isforlastkeyofDB)' -ifC-optionthen'REPAIRTERMINATED'¢else§'R:RECALCULATE'(¦-ifNIMthenforcelastkeyofDBinto ªFABentry¦-ifIMthen'REPAIR(Y/N)?'$ªif'Y'thenlastkeyisforcedinto ±FABentry"ªif'N'thenrepeatUPDATEDBloop B7.11.6Œ-ifnon-nullkeysthencheckfirstkeyofDBnotlessthan2”thekeyofpriorFABentry(maybeFABheaderkey)%”andequalonlyifduplicatekeyfile.›-iferrorthen'ER:FAB/DBKEYCONFLICT(F)',(where'1'isforfirstkeyofDBinerror)'ž-ifC-optionthen'REPAIRTERMINATED' else§'R:DELETEDB''¥-ifIMthenrepeate'UPDATEDB?'loop¥-ifNIMthenDBisdeleted N8. If FAB was updated it is written to disk - IO error causes 'REPAIR ABORTED'M HƒIfindicatedtoswitchlinkscontinuewithBACKWARDFAB/DBCHECKstep22ƒ(laterversionofREPAI)elsegoprocessnextFAB  ==============================BACKWARD FAB/DB CHECK - FDBCHK============================== INOTE: IF C-OPTION THEN BACKWARD LINKS ARE NEVER USED AND THIS PART IS NOT †EXECUTED +†NOTIMPLEMENTEDINFIRSTVERSIONOFREPAIR I1. If doing only backward FAB check then allocate FAB/DB segment for fileƒelseskiptostep2>‡-iferrorthen'SEGMENTALLOCATIONERROR,D0=X,SEG:FDBS'3Ž-ifC-optionorfilerepairthen'REPAIRABORTED'else„'SKIP(Y/N)?'˜if'Y'thenfileisskipped ˜if'N'then'REPAIRTERMINATED' 62.Getlast/nextFAB‚usingbackwardlinks(BSRGETSEC)ƒ-ifnonextFABthenC‡-ifbackwardcheckonlysetEOF/EORinPDE(calculatedvaluesareD‰enteredintoPDE),filecheckiscomplete:priorFABPSNisentered‰intoPDEasfirstFABpointer.G‡-ifswitchedtobackwardlinksthencombinethetwoFABparts,update'‰EOF/EORin‚PDE,filecheckiscomplete0…iffilerepairthen'FILEOK'and'REPAIRDONE'/…elsedeallocateFAB/DBbuffer,checknextfile ?ƒ-if‚readerrorthen'IOERROR,D0=XFROMREADFAB,PSN=X'&…or'CRCERRORFROMREADFAB,PSN=X'+‘-ifCRCerrorthenFABupdateflagisset‘-ifotherthanCRCerrorthen,'R:DELETEFAB,PSN=X'ƒiffirstFABsectoržwasreadinOKor,'R:TRUNCATEFABCHAIN'‚iffirstFABsector¡wasnotreadinOK$ifIM'UPDATEFAB?'loopisenteredifNIMthen'REPAIR(Y/N)?' £if'Y'thenrepairasindicated%¦Ifdeletethenbackwardlinkofnext¦FABisobtainedand!¦newlinkischeckedtobeOK(do¦steps6.1-6.7)(¦IftruncatethenpriorFABbecomeslast%¦goodFABinbackwardFABchain,file#¦checkiscompleted(repeatstep2)£if'N'then'R:DELETEFILE'¯'REPAIR(Y/N)?'¯if'Y'thendeletefile¯if'N'thenskipfile 03. If FAB is empty then 'ER: EMPTY FAB, PSN = X'˜'R:DELETEFAB'LƒandFABisdeletedafteritsbackwardlinkhasbeencheckedtobeOK(steps ƒ6.1-6.7) 4. In IM dump FABƒIfNIMthenskiptostep6. 5. In IM 'UPDATE FAB?'‰a.CR-terminateloop5‰b.N-terminateloopandturnoffIMtillnextfile‰c.Q-'REPAIRTERMINATED'E‰d.D-deletecurrentFAB,backwardFABpointerisusedfornextFAB?‰e.R-'WHAT?'unlessREPAIRR-messagepreceededinwhichcase-repairisdoneasindicated,terminatesloop‰f.A[$PSN]-'WHAT?'‰g.D$PSN-‚'WHAT?':‰h.$,$PSN-dumpsector(s),dumporupdateFABsector(s)1–if'$,N'whereN>FABsizethenN=1isforced'‰i.offset-updatefirstsectorofFAB 6. Check FAB header H6.1 If next FAB PSN = 0 (backward link = 0) and doing backward FAB checkG„onlythenaftercurrentFABischeckedfilecheckisdone(currentFAB+„PSNisenteredintoPDEfirstFABpointer) >„IfnextFABPSN=0andswitchedtousingbackwardlinksthen%“'ER:BADFABBACKWARDLINK,PSN=0'“'R:TRUNCATEFABCHAIN'7“and‚theforwardandbackwardchainsarecombinedafter;“theFABhasbeenchecked(currentFABlastFABinbackward“chain) I6.2 If next FAB PSN is not zero then next FAB must be on disk (BSR MPSNC)5‡-iferrorthen'ER:BADFABBACKWARDLINK,PSN=X'—'R:TRUNCATEFABCHAIN'(–-ifIMthenrepeate'UPDATEFAB?'loop3–-ifNIMthenrepairasindicated:‚thecurrent‚FAB4˜becomesthefirstFABofthefileifdoingbackward5˜FABcheckonly,elsetheforwardandbackwardchains5˜arecombinedaftertheFABhasbeenchecked(current ˜FABlastFABinbackwardchain) F6.3 If next FAB exists and not doing file recovery then check next FAB „allocated.8‡-iferrorthen'ER:FABNOTALLOCATEDINSAT,PSN=X'‘-ifNIMthenallocateFAB‘-ifIMthen(BSRDMPALC)'DUMP(Y/N)?'if'Y'thendumpnextFABif'N'thenskipdump'R:ALLOCATEFAB''REPAIR(Y/N)?'if'Y'thenallocateFAB'if'N'thenrepeate'UPDATEFAB?'loop N F6.4 If next FAB exists and doing file recovery then check next FAB not „allocated.A‡-iferrorthen'ER:FABREALLOCATEDAFTERFILEDELETED,PSN=X'—'R:DELETEFILE'—'REPAIR(Y/N)?'—-if'Y'thenfileisdeleted—-if'N'thenfileisskipped+‡-ifnoerrorFABisallocatedindiskSAT 26.5 If next FAB exists check not already allocated;‡-iferrorthen'ER:FABSPACEALREADYALLOCATED,PSN=X'2—'R:DELETEFAB'iffirstsectornotallocated,or2—'R:TRUNCATEFABCHAIN'iffirstsectorallocated1—-if‚NIMrepairasindicated(ifdeleteFABthen*™obtainnextFABPSNandchecklinkagain)"—-if‚IMrepeat'UPDATEFAB?'loop !6.6 If FAB is empty it is deleted M6.7 If current FAB is to be deleted update link in prior FAB and process next„FAB<‰IfIOerrorthenerrormessageissentand'REPAIRABORTED' H6.8 Check forward link in FAB same as PSN of prior FAB, or 0 if no prior„FAB.-‡-forcesameifFABdeleted(cannotbesame)4‡-iferrorthen'ER:BADFABFORWARDLINK,PSN=X'—'NEXTFABPSN=X'˜or$—'ER:BADFABFORWARDLINK,PSN=0'—'LASTFABPSN=X'—'R:FIXLINK'7—ifNIMthenforwardlinkissettoequalpriorFABPSN —ifIMthen›'REPAIR(Y/N)?'7™if'Y'thenforwardlinkissettoequalpriorFABPSN™if'N'thenfileisskipped :6.9 Check header key field is OK: equal to file's key size$‡-iferrorthen'ER:KEYSIZE=XX'"—'R:SETEQUALTOFILE'SKEYSIZE'—ifNIMthensetequal —ifIMthen™'REPAIR(Y/N)?'šif'Y'thenfixkeyfieldšif'N'then'R:DELETEFILE'£'REPAIR(Y/N)?'£if'Y'thendeletefile£if'N'thenskipfile ,6.10 Check header key not less than last keyJ…inforwardFABchain(lastkeyoflastDBinanysuchFAB)ifindexedfile%‡-iferror'ER:FAB/DBKEYCONFLICT'’'R:RECALCULATE'’ifNIMthensetequal ’ifIMthen•'REPAIR(Y/N)?'6•if'Y'thensetequaltolastkeyoflastforwardFAB5—(latermayhavetoalsosetequaltonextFAB'slast—key)•if'N'then'R:DELETEFILE'¡'REPAIR(Y/N)?'¤if'Y'thendeletefile¤if'N'thenskipfile7. Check each FAB entry D7.1†-ifDBPSN=0thenrecalculateFABusefractionandupdateFABC‹ondiskifchanged;ifnotlastFABoffilethenchecklastkeyof3‹FABnotgreaterthanFAB'sheaderkeyinpriorFAB(iferrorthen'ER:FAB/DBKEYCONFLICT''R:DELETEFILE''REPAIR(Y/N)?'•if'Y'thenfileisdeleted•if'N'thenfileisskippedelse‚gochecknextFAB 77.2†-checkkeyfieldlengthequaltokeysizeforfile“-iferrorthen'ER:KEYSIZE=XX'"'R:SETEQUALTOFILE'SKEYSIZE'ifNIMthensetequal ifIMthen 'REPAIR(Y/N)?'(¡if'Y'thenforcekeylengthintofield¡if'N'then'R:TRUNCATEFAB'­'REPAIR(Y/N)?'!§if'Y'thenendofFABismarked$«atcurrentFABentry,continuewith«step8§if'N'thenfileisskipped !7.3†-checkDBPSN‚OK:DBondisk,‘-iferrorthen'ER:DBPSNERROR,PSN=X' ›-ifIMthen¡'NEW?''¡ifnewPSN=0thentheDB'sFABentry+¡isdeleted,otherwisethetestisrepeated›-ifNIMthen'R:DELETEDB'¥andDB'sFABentryisdeleted 97.4†-checkDBallocatedifnotrecoveringadeletedfile7‘-iferrorthen'ER:DBNOTALLOCATEDINSAT,PSN=X'›-ifNIMthenallocateDB›-ifIMthen(BSRDMPALC)§'DUMP(Y/N)?'§if'Y'thendumpDB§if'N'thenskipdump§'R:ALLOCATEDB'§'REPAIR(Y/N)?'§if'Y'thenallocateDB§if'N'then'R:GIVENEWPSN'³'OLD=XXXXXXXX'³'NEW?'³if0thenDBandFABentry ³aredeleted³elsenewDBPSNischecked³again 97.5†-checkDBnotallocatedifrecoveringadeletedfile‘-iferrorthen0'ER:DBREALLOCATEDAFTERFILEDELETED,PSN=X''R:DELETEDB'anddeleteDB'sFABentry%‘-ifokthenallocateDBindiskSAT $7.6†-checkDBnotalreadyallocated:‘-iferrorthen'ER:DBSPACEALREADYALLOCATED,PSN=X'¡'R:DELETEDB'$Ÿ-ifNIMthendeleteDB'sFABentryŸ-ifIMthen'REPAIR(Y/N)?'"§if'Y'thendeleteDB'sFABentry§if'N'then'DUMP(Y/N)?'N ­if'Y'thendumpDB­elseskipdump­'SKIP(Y/N)?'­if'Y'thenskipfile­if'N'then'R:GIVENEWPSN'¹'OLDXXXXXXXX'¹'NEW?'®0deletesdatablock,else®newPSNischeckedagain J7.7†-checkDBsectors-in-usecount(FDBsize)islessthanorequaltoDB‹sizeandnotzero‘-iferrorthen'ER:FDBSIZE=XX''DBSIZE=XX'›-ifNIMthen£'R:DELETEDB'andDB'sFAB£entryisdeleted›-ifIMthen'DUMP(Y/N)?'§-if'Y'thendumpDBsectors©elseskipdump¢'R:GIVENEWSIZE' ¢'OLDXX'¢'NEW?'2ž0deletesdatablockanditsFABentry,otherwisežnewvalueischeckedagain !7.8†-readinDB'ssectorsinuse3‘-ifpreviousDBwasupdatedwriteitbacktodisk›-ifIOerrorthen*Ÿ'IOERROR,D0=XFROMWRITEDB,PSN=X'Ÿ'R:DELETEDB'Ÿ'REPAIR(Y/N)?'§if'Y'thendeleteDB§if'N'thenskipfile;‘-ifIOerrorthen'IOERROR,D0=XFROMREADDB,PSN=X'%“or'CRCERRORFROMREADDB,PSN=X'(‘-ifCRCerrorthensetDBupdatedflag'‘-ifnon-CRC‚errorthen'R:DELETEDB' ¥-ifIMthendoUPDATEDB?loop§elseª'REPAIR(Y/N)?'#«if'Y'deleteDBanditsFABentry«if'N'thenskipfile 7.9†-ifNIMthenskipto7.11 "7.10…-ifIMthen'UPDATEDB?loop“a.CR-terminatesloop6“b.N-terminatesloopandturnsoffIMtillnextFAB“c.Q-'REPAIRTERMINATED'7“d.$,$PSN,offset-dumpsector(s),dumporupdateDB"“e.D-deleteDB,terminatesloop“f.D$PSN,A[$PSN]-'WHAT?'8“g.R-'WHAT?'unlessREPAIRmessagepreceededinwhich2šcaserepairisdoneasindicated,terminatesloop 7.11…-checkDB=7.11.1-ifVRLthennumberofrecordsmustequalFABentry's •recordcount-›-iferrorthen'ER:FAB/DBRECORDCONFLICT'«'R:RECALCULATE'«andforce#ofrecords«foundinDBintoFABentry C7.11.2-ifVRLthenlastrecordinDBmustbeeitherfollowedwith9•azerolengthrecordoritmustendattheendofDBand9•ifnon-nullkeysrecordlengthsmustbegreaterthankey•size+›-iferrorthen'ER:RECORDLENGTH=XXXX'«'R:TRUNCATEDB'%¥-ifNIMtruncateDBafterlastgood®record%¥-ifIMthenrepeat'UPDATEDB?loop <7.11.3-ifFRLthennumberofrecordsspecifiedinFABmust4•fitintotheDBandremainingDBspacemustbezero*›-iferrorthen'ER:FAB/DBFRLCONFLICT'!¥-ifNIMthen'R:DELETEDB'and©DBisdeleted.'¥-ifIMthenrepeate'UPDATEDB?'loop @7.11.4-ifnon-nullkeysthencheckkeysareinascendingorder.•andthatkeysareonlyequalifduplicatekey•file#›-iferrorthen'ER:DBKEYERROR'«'R:TRUNCATEDB'¤-ifNIMthentruncateDB¬afterlastgoodrecord'¤-ifIMthenrepeate'UPDATEDB?'loop ?7.11.5-ifnon-nullkeysthencheckFABentrykeygreaterthan•orequaltolastkeyofDB.›-iferrorthen'ER:FAB/DBKEYCONFLICT(L)'"¢(where'L'isforlastkeyofDB)§'R:RECALCULATE'&¢ifNIMthenforcelastkeyofDBinto §FABentry¢ifIMthen'REPAIR(Y/N)?'&ªif'Y'thenforcelastkeyofDBinto ­FABentry"ªif'N'thenrepeatUPDATEDBloop B7.11.6Œ-ifnon-nullkeysthencheckfirstkeyofDBnotlessthan4”lastkeyofpreviousdatablock‚orthekeyofprior/”FABentry‚andequalonlyifduplicatekeyfile,”(priorFABentrymaybetheFABheaderkey).›-iferrorthen'ER:FAB/DBKEYCONFLICT(F)',(where'F'isforfirstkeyofDBinerror)§'R:DELETEDB''¥-ifIMthenrepeate'UPDATEDB?'loop¥-ifNIMthendeleteDB H8. Write FAB to disk if changed. If IO error then send error message and2ƒ'REPAIRABORTED',elseprocessnextFAB(step2).                             NOTES: ‰1.ˆThefollowingeditsonVOLUME„nameintheVIDFILE†nameinthePDEEXTENSIONnameinthePDE=“willrequestanewVOLUME,FILE,orEXTENSIONnameiftheold<“oneisinerror.‚Theoldnameasitcurrentlyexistwillbe5“displayedwiththeperiod'.'characterrepresentingO <“non-alphanumericcharacters.Thenumberofcharactersinput4“inthenewnamewillreplaceexactlythatnumberof0“charactersintheoldnamepriortore-editing. “EXAMPLE:FilenameshouldbeDELETECurrentfilenameis'DE...E‚' 3“Iftheuserweretoinputanewfilenameof'DELE'6“anerrorwouldstillexistonthere-editbecausethe!“newfilenamewouldbe'DELE.E‚'. 4“Iftheuserhadinputanewfilenameof'DELET'the5“re-editwouldhavefoundanewfilenameof'DELETE‚'6“andthefilenamerestorationwouldhavebeencompeted“successfully.          ééééé%Newsfile‹SYMBUG/AƒVersion3.0•11/1/83 L‚SYMBUGrunsasagloballysharable,positionindependentmonitortaskunderMVERSAdos to perform interactive symbolic debugging of one or more user tasks.FExecution of the chainfile SYMBUG.AF will create the '.RO' modules andBexecution of the chainfile SYMBUG.LF will create the load modules,LThe file SYMBHELP.IN must reside on the system volume in the user 0 account.MConsult publication M68KSYMBG/D2 SYMBUG/A and DEbug MONITORS REFERENCE MANUAL:and the online HELP command for valid user command syntax. -FUNCTIONAL ENHANCEMENTS MADE TO Version 2.0 : E 1. New command MAE (Macro Edit) facilitates modifications to macros.K 2. Symbol resolution algorithm modified to improve disassembly performanceG„byanorderofmagnitudeormore.(Requires.DBfilefromLinker1.60)K 3. Keyboard input is processed a character rather than a line at a time toD„allowbackspace,cancelanddeletekeysinteractiveinterpretation.H4.Breakkeyprocessingrefined.‚Breakalsonowabortstheexecutionof9„amacroratherthanproceedingwiththenextmacroline.M 5. Explanatory prose error messages disambiguate the previous WHAT response.L 6. Prompt for Z option eliminates Map Full errors from insufficient memory.K 7. The FR command in a macro will overlay the existing macros and continueL„executionwiththefirstlineofthefirstmacroofthenamedprofilefile.J 8. The DC command also displays the constant in symbolic relative format.H 9. DF decodes the .SR bits and displays .PC register as offset register„relativeifappropriate.K10. OF displays minimum and maximum offset register address ranges. DisplayK„ofabsoluteaddressesintheserangesaresupercededbytheoffsetformat.>11. DE ECHO to disk FILE now allocates nonexistant named file.F12. External reference symbols are now included in Assembler .RS file.(13. M is now an alias of the MM command.914. BF,BM and BS commands now check for lowaddr > hiaddr.O  à  é@15. DE output base and length options deleted since unsupported.+16. IT and OT commands no longer supported.F17. Task management involving passing LUNs to existing tasks purified.L18. The STOP command no longer impacts dynamic memory Map Table utilization. >OUTSTANDING BUGS EXISTING IN RELEASE OF SYMBUG/A Version 3.0 : ‰None.éééééé‹integerfunctionATOI(ALPHA) ŽcharacterˆALPHA ŽcharacterˆCHARS*35 ŽintegerŠI .ŽCHARS='123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ' ŽATOI=0Ždo3I=1,35"‘if(ALPHA.eq.CHARS(I:I))then ”ATOI=I”return‘endif 3continue ŽATOI=-1Žreturn ‹end ‹integerfunctionX2TOI(X2) characterˆX2*2 characterˆHEX*16 integerŠIintegerŠRESULT logicalŠFND1 logicalŠFND2 X2TOI=0HEX='0123456789ABCDEF' RESULT=0FND1=.false.FND2=.false.do5I=1,16$if(X2(1:1).eq.HEX(I:I))then!“RESULT=RESULT+((I-1)*16)“FND1=.true.endif$if(X2(2:2).eq.HEX(I:I))then“RESULT=RESULT+(I-1)“FND2=.true.endif 5Œcontinueif(FND1.and.FND2)thenX2TOI=RESULTelse X2TOI=-1endifreturn Šend !ŠsubroutineINIT(BUFF,P,RESP) characterˆBUFF*(*) integerŠPcharacterˆRESP include'common' characterˆPRAMBL*8characterˆDEST ñCéé